Compare commits

...

272 commits

Author SHA1 Message Date
Alexander Koblov
0b8ba38384 UPD: WinGet Releaser version
(cherry picked from commit a7c2148857)
2023-04-02 14:16:10 +03:00
iglezz
c1785922df fix Ctrl+WheelUp bug when font size = MinValue (#898)
(cherry picked from commit f2556401eb)
2023-04-02 14:01:10 +03:00
Alexander Koblov
ebf4142948 ADD: Lua - show error when script file not found
ADD: Lua - setenv/unsetenv functions (patch by NorbertJh)
2023-03-17 22:18:48 +03:00
Alexander Koblov
2f75d651ed ADD: DialogAPI - TDirectoryEdit control
(cherry picked from commit 5d35beec40)
2023-03-17 21:32:08 +03:00
Alexander Koblov
7ebc7cbe36 ADD: DialogAPI - DM_GETTEXT/DM_SETTEXT for TCheckBox
(cherry picked from commit 615823d2e8)
2023-03-17 21:31:55 +03:00
Alexander Koblov
fd247eff2a UPD: DialogAPI - refactoring
(cherry picked from commit 3b0cb68bae)
2023-03-17 21:31:39 +03:00
Alexander Koblov
2f4f8428e1 ADD: DialogAPI - timer component
(cherry picked from commit 9aa7dda9a4)
2023-03-17 21:31:27 +03:00
Alexander Koblov
f462b65ba3 ADD: DialogAPI - DM_LISTCLEAR message 2023-03-17 21:30:51 +03:00
Alexander Koblov
f468e20db5 ADD: DialogAPI - DM_SETPASSWORDCHAR message
(cherry picked from commit d739808f0c)
2023-03-17 21:29:00 +03:00
Mansur
eae57c455c UPD: Auto shortcuts in the tree view (#854)
(cherry picked from commit bdd2e71bf7)
2023-03-17 21:23:30 +03:00
Alexander Koblov
b74ed59ed6 UPD: TComboBoxAutoWidth - width calculation algorithm
(cherry picked from commit b188817eed)
2023-03-17 21:23:19 +03:00
Alexander Koblov
ecca68beed ADD: AudioInfo - bit depth field
(cherry picked from commit d4fc718f8f)
2023-03-17 21:23:19 +03:00
Alexander Koblov
7490fb959d FIX: Find files - find text in the drive root (issue #839)
(cherry picked from commit 25ec33e563)
2023-03-17 21:20:48 +03:00
Alexander Koblov
b29753ce8c ADD: DialogAPI - send DN_CLOSE message
(cherry picked from commit a30b7c5793)
2023-03-17 21:20:37 +03:00
Alexander Koblov
5b653c1332 ADD: Zip - .tzst extension
(cherry picked from commit 13bd3ce79b)
2023-03-17 21:20:21 +03:00
Alexander Koblov
cb7439743c UPD: AudioInfo - return empty string instead ft_fieldempty
(cherry picked from commit 2150343460)
2023-03-17 21:20:08 +03:00
Alexander Koblov
99d8dfed0c FIX: WFX-API functions prototypes
(cherry picked from commit 864652b8f3)
2023-03-17 21:19:24 +03:00
Alexander Koblov
cd1d9e8347 UPD: Optimize resource strings translation 2023-03-05 18:51:23 +03:00
Alexander Koblov
84a862d722 FIX: DC ignores WDX plugin file detection string when searching (fixes #833)
(cherry picked from commit 0f01e5e19a)
2023-03-05 18:48:40 +03:00
Alexander Koblov
e32f2a912f FIX: Zip - crash on compression when libzstd not found
(cherry picked from commit b50740cef7)
2023-03-05 12:01:01 +03:00
Alexander Koblov
df1b6b27f2 FIX: AudioInfo - read ID3v2.4 with UTF-16 encoding
(cherry picked from commit 47680a5cc6)
2023-03-05 12:00:40 +03:00
Alexander Koblov
75009e20ab FIX: Locked tabs - reuse existing tab when possible (with archive)
(cherry picked from commit 6361f6577b)
2023-03-05 11:58:55 +03:00
Alexander Koblov
441ce780e6 FIX: Incorrect .tar.gz archive reading: same directory appears multiple time (fixes #809)
(cherry picked from commit 4c027c42a9)
2023-03-05 11:58:09 +03:00
Alexander Koblov
1538255b22 ADD: FTP - capability to create connection copy
(cherry picked from commit 9825c04bdc)
2023-03-05 11:57:49 +03:00
Alexander Koblov
f943538641 UPD: Allow to use icon from pixmaps.txt for .ico
(cherry picked from commit f09c9de84e)
2023-02-23 14:18:33 +03:00
Alexander Koblov
94cc42cabe FIX: Unpacking file from zip with entering empty destination (fixes #826)
(cherry picked from commit 09762d955d)
2023-02-23 14:18:08 +03:00
Alexander Koblov
df335ced59 UPD: Build script 2023-02-12 20:01:43 +03:00
Alexander Koblov
adce914beb UPD: Version number 2023-02-12 19:58:17 +03:00
Peter Marquardt
9e2e2ee3d4 ADD: Support parsing of /etc/os-release (#804)
(cherry picked from commit 8b056faaa6)
2023-02-12 19:53:21 +03:00
Alexander Koblov
217a1f1047 FIX: Combine Files - problems with combining to archive or the same folder (issue #800)
(cherry picked from commit 87b3f26dc7)
2023-02-12 19:53:08 +03:00
Alexander Koblov
73c435acc9 UPD: Optimize WEBP loading speed
(cherry picked from commit 893456c914)
2023-02-12 19:52:28 +03:00
Alexander Koblov
2e2456d78b FIX: Unconditional file overwrite on Shift + F4 when name has trailing whitespace (fixes #786)
(cherry picked from commit 0c6273c3cf)
2023-02-12 19:49:27 +03:00
Alexander Koblov
b0ca10d89b FIX: Viewer - Slow case insensitive backward search with single byte encoding
(cherry picked from commit cb9b79a26d)
2023-02-12 19:47:51 +03:00
Alexander Koblov
d00f8b7b7c FIX: FPC 3.3 compatibility (#385) 2023-01-21 12:05:23 +03:00
Alexander Koblov
5bac92d740 FIX: Warning message about not enough space when copying to ramfs (fixes #753) 2023-01-21 11:35:59 +03:00
Alexander Koblov
28ea809388 UPD: Check file name on the local file system only (fixes #709) 2023-01-15 14:07:18 +03:00
Alexander Koblov
85a086424b UPD: Version number 2023-01-15 12:44:37 +03:00
Alexander Koblov
2232d58e91 FIX: DC appearance in Windows Task Manager (fixes #714) 2023-01-15 12:37:35 +03:00
Alexander Koblov
b81bb31aad UPD: Optimize SVG rendering speed
(cherry picked from commit b8e13477b0)
2023-01-15 12:34:19 +03:00
Alexander Koblov
9b4bfe551e UPD: Copyright year 2023-01-15 12:27:01 +03:00
Alexander Koblov
3d4cdea77d FIX: Editor - update encoding name in the status bar 2023-01-15 12:25:30 +03:00
Alexander Koblov
760704ef61 FIX: Viewer - TWinControl.CreateWnd creating Handle during loading 2023-01-15 12:19:31 +03:00
Alexander Koblov
e60ecc4715 FIX: Extract files with zero UNIX time
(cherry picked from commit 49f29d47a3)
2022-12-25 12:35:24 +03:00
Alexander Koblov
a44742c37a FIX: Range check error
(cherry picked from commit 45046c24b7)
2022-12-25 12:35:24 +03:00
Alexander Koblov
64fd0712ef UPD: Use TWfxFileTime
(cherry picked from commit 3e12228de9)
2022-12-25 12:35:24 +03:00
Alexander Koblov
120578c7e0 FIX: Bug [0002644] Closing an unavailable FTP connection not possible
(cherry picked from commit 81e1cee3b8)
2022-12-25 12:35:23 +03:00
Alexander Koblov
989a3ff520 ADD: About dialog window MinWidth/MinHeight size (issue #450)
(cherry picked from commit 585536e1bc)
2022-12-25 12:35:23 +03:00
Alexander Koblov
b78af243e3 FIX: Restore focus when open virtual file system list
(cherry picked from commit 624872ea0d)
2022-12-25 12:35:23 +03:00
Alexander Koblov
65bb0d8432 FIX: Viewer does not display KOI8 (fixes #726)
(cherry picked from commit b3bd295976)
2022-12-25 12:32:48 +03:00
Alexander Koblov
0c40b156af FIX: AudioInfo - read IDv2.4 with UTF-8 encoding (fixes #723)
(cherry picked from commit d660b14965)
2022-12-25 12:32:48 +03:00
Alexander Koblov
a844456e49 ADD: FTP - save private key passphrase to cache (issue #697)
(cherry picked from commit faee14c230)
2022-12-03 11:17:32 +03:00
Alexander Koblov
f4b618334b DEL: Obsolete doublecmd.ext.example
(cherry picked from commit bf76a5e357)
2022-12-01 20:51:41 +03:00
Alexander Koblov
d0532ef243 FIX: Zip - open small Gzip archive
(cherry picked from commit a193935b47)
2022-11-29 22:18:06 +03:00
Alexander Koblov
5caf988b12 UPD: DoCreatePreviewText - speed optimization
(cherry picked from commit 81243371f8)
2022-11-29 22:17:54 +03:00
Alexander Koblov
325763648c FIX: Error when browsing folder with Exif date 0-0-0 (fixes #693)
(cherry picked from commit e1653703aa)
2022-11-29 22:17:27 +03:00
Alexander Koblov
43d029a5da FIX: Remove symlink to directory directly when move to trash failed (fixes #686)
(cherry picked from commit c7dce345a0)
2022-11-29 22:17:15 +03:00
rich2014
58c0d8487d FIX: QuickView: Not exiting PluginMode when receiving empty string in TfrmViewer.LoadFile() (#683)
(cherry picked from commit 8d21868557)
2022-11-29 22:16:47 +03:00
Alexander Koblov
249133688a FIX: Compiler directives 2022-11-23 18:53:00 +03:00
Alexander Koblov
4a8a5a6f5c FIX: Button Help is truncated (fixes #630)
(cherry picked from commit 8291f84b0b)
2022-11-23 18:48:59 +03:00
Alexander Koblov
c35c9a3183 FIX: Don't load the unversioned libcrypto under macOS (issue #674)
(cherry picked from commit 559b0f6719)
2022-11-23 18:48:59 +03:00
Alexander Koblov
013fc32ae1 FIX: Crash on add attributes (Lazarus 2.3)
(cherry picked from commit 6c0ce761c4)
2022-11-23 18:48:59 +03:00
Alexander Koblov
0a15654e73 UPD: OpenSSL library versions (issue #674)
(cherry picked from commit 3232137533)
2022-11-23 18:48:59 +03:00
Alexander Koblov
075bb220bc ADD: TKASButtonPanel - SameWidth and SameHeight properties
(cherry picked from commit 0bcb9b1d7c)
2022-11-23 18:48:58 +03:00
Alexander Koblov
5220e14f81 UPD: Show splash form on primary monitor
(cherry picked from commit 58b831f3c8)
2022-11-23 18:48:02 +03:00
Alexander Koblov
6681768462 FIX: Confirmation dialog appears on the wrong display in a multi monitor config (fixes #633)
(cherry picked from commit d39cb6dfcb)
2022-11-23 18:48:02 +03:00
Alexander Koblov
508adfcefb UPD: Greek translation 2022-11-21 21:22:36 +03:00
Alexander Koblov
9233057f4f FIX: Field "100" in this form is not fit by width (fixes #631)
(cherry picked from commit 9a2ffad84e)
2022-11-07 18:21:43 +03:00
Alexander Koblov
1266be234c ADD: Feature [0002299] Access to WSL directory in Win 1903
(cherry picked from commit 8c95a30424)
2022-11-07 18:21:43 +03:00
Alexander Koblov
f7674f4e58 FIX: Viewer - draw last line (issue #652)
(cherry picked from commit 6d8420b479)
2022-11-07 18:21:42 +03:00
Alexander Koblov
22c256c62c FIX: Viewer - dribbling of lowest line when window height is resized (fixes #652)
(cherry picked from commit 35498b579e)
2022-11-07 18:21:42 +03:00
Alexander Koblov
af6c4ed14d ADD: Show progress when open inner archive from archive
(cherry picked from commit a0bd0ad760)
2022-10-30 13:02:25 +03:00
Alexander Koblov
288c803f39 FIX: Load default text encoding 2022-10-30 12:54:33 +03:00
Alexander Koblov
227d8c22b7 UPD: Version number 2022-10-30 12:48:23 +03:00
Alexander Koblov
b64b716bad UPD: ExtractDlg - improve the layout (fixes #628)
(cherry picked from commit 5fdcad2fec)
2022-10-30 12:45:55 +03:00
Skif-off
01e634045a UPD: uWDXModule: List of language codes (translation support). (#650)
(cherry picked from commit 085a2e1e87)
2022-10-30 12:45:55 +03:00
Alexander Koblov
fb0b9d3c4d FIX: Restore plugin operator in the search templates (fixes #644)
(cherry picked from commit 61807cc96d)
2022-10-21 19:52:43 +03:00
Alexander Koblov
1ca8eac42d FIX: Remove UseConfigInProgramDir from doublecmd.xml
(cherry picked from commit 12dde068bc)
2022-10-21 19:52:29 +03:00
Alexander Koblov
efa95e1b58 UPD: Differ - move auto-compare option to doublecmd.xml (fixes #607)
(cherry picked from commit c612db2577)
2022-10-21 19:51:52 +03:00
Alexander Koblov
220bd2ec55 FIX: Lazarus 2.3 compatibility
(cherry picked from commit f588cc1d17)
2022-10-21 19:51:34 +03:00
Vedant
d272e36a2d Update winget.yml (#613)
(cherry picked from commit 5113c698f6)
2022-10-21 19:51:34 +03:00
Alexander Koblov
752459d65a ADD: Tools - load 32x32 toolbar icons
(cherry picked from commit 8bbaf929ae)
2022-10-21 19:51:33 +03:00
Vedant
ee1f44b3ce Create winget.yml (#487)
(cherry picked from commit d6ac8c7bdb)
2022-09-18 12:03:06 +03:00
Alexander Koblov
a10df2f68b ADD: Zip - show bzip2/zstd/xz compression/decompression progress
(cherry picked from commit c3f0f99774)
2022-09-18 12:02:52 +03:00
Alexander Koblov
9aec6075db UPD: SevenZip - refactoring
(cherry picked from commit d3669d5c32)
2022-09-17 14:10:07 +03:00
Alexander Koblov
8e83d8ea8b FIX: SevenZip - update password visibility on "show password" change
(cherry picked from commit 181997bf08)
2022-09-17 14:10:07 +03:00
Alexander Koblov
7c33c64c07 FIX: Zip - gzip unpack progress
(cherry picked from commit 6011f09b10)
2022-09-17 11:32:39 +03:00
Alexander Koblov
b16c3ce409 UPD: Speed up gzip-archive creation/modification
(cherry picked from commit 82b6f6ec0b)
2022-09-17 11:32:39 +03:00
Alexander Koblov
bc5a9fda5e FIX: Zip - slow gzip-file opening
(cherry picked from commit 8cd00f4a05)
2022-09-16 19:01:52 +03:00
Alexander Koblov
8e8460b5cb UPD: Version number 2022-09-15 22:54:52 +03:00
Alexander Koblov
cab264cfad UPD: Duplicate highlighters - better naming scheme
(cherry picked from commit 2f916f9b6d)
2022-09-15 22:50:05 +03:00
Alexander Koblov
08251735e5 ADD: Show duplicate external highlighters
(cherry picked from commit bb3a0d5ee3)
2022-09-15 21:28:53 +03:00
Alexander Koblov
086b468cfa ADD: Zip - show gzip compression progress
(cherry picked from commit 952ceb722e)
2022-09-15 21:28:52 +03:00
Alexander Koblov
2e16e1c166 FIX: Zip - extract concatenated gzip archive
UPD: Zip - use fast CRC32 function

(cherry picked from commit c2c6590ae4)
2022-09-14 19:16:13 +03:00
Alexander Koblov
01267bc754 UPD: CRC32 - use static constant array
(cherry picked from commit 633bccdba1)
2022-09-14 19:16:13 +03:00
BLUEnLIVE
710e2e0d59 Update doublecmd.ko.po (#583)
Translation was partly missing.

(cherry picked from commit e4c8ecdbbf)
2022-09-14 19:16:12 +03:00
Alexander Koblov
0425317579 FIX: Drives bar right click properties missing functions (fixes #580)
(cherry picked from commit 664c3a32a5)
2022-09-13 21:14:50 +03:00
Alexander Koblov
354226175f FIX: External and internal highlighter name conflict
(cherry picked from commit 37f25c86ef)
2022-09-13 21:14:49 +03:00
Alexander Koblov
6089526461 FIX: ANSI encoding in the file list % variables
(cherry picked from commit 7914bc89be)
2022-09-11 22:56:17 +03:00
Alexander Koblov
3ebf1727df DEL: Unneeded patches
(cherry picked from commit a09f62e6dd)
2022-09-11 22:56:17 +03:00
Alexander Koblov
78120eb2f3 ADD: Default single-byte text encoding option 2022-09-11 22:54:51 +03:00
Alexander Koblov
0eb417d153 UPD: Enable native Wayland support (Qt5, Lazarus >= 2.2.0)
(cherry picked from commit 178f2bf71b)
2022-09-10 22:35:24 +03:00
Alexander Koblov
fdb07b3b5b ADD: SFTP - Show used encryption methods
(cherry picked from commit 4ed7362c07)
2022-09-10 22:25:27 +03:00
Alexander Koblov
ee4893a22c UPD: Hash verification - skip '#' comments
(cherry picked from commit e41241b8bd)
2022-09-10 22:25:27 +03:00
Alexander Koblov
01daa52beb UPD: Zip - project file
(cherry picked from commit c6c5fbaed7)
2022-09-10 12:27:55 +03:00
Alexander Koblov
3d80a6ad9a FIX: Zip - unpack encrypted (AES) archive
(cherry picked from commit b858e33b17)
2022-09-10 12:27:55 +03:00
Alexander Koblov
7a4aa3cd71 FIX: Zip - unpack progress (file > 2 GB)
(cherry picked from commit 199450b197)
2022-09-10 12:27:55 +03:00
Alexander Koblov
2254d53e43 UPD: MultiArc configuration file
(cherry picked from commit 7c73897c15)
2022-09-07 21:21:00 +03:00
Alexander Koblov
fcf3635fcb ADD: MultiArc - ZPAQ archiver (fixes #447)
(cherry picked from commit 239299b0ce)
2022-09-07 21:20:59 +03:00
Alexander Koblov
a92542047d FIX: Controls autosize
(cherry picked from commit d8725969ff)
2022-09-07 21:20:09 +03:00
Alexander Koblov
9f3bc40097 FIX: TShellFolder.EnumObjects
(cherry picked from commit 556253d4b3)
2022-09-07 21:20:09 +03:00
Alexander Koblov
21ffa7b2c0 ADD: Show context menu for multiple objects from different path
(cherry picked from commit 5464a345c3)
2022-09-07 21:20:09 +03:00
Alexander Koblov
48f2d4cf09 FIX: Commit forgotten file
(cherry picked from commit 626dec1239)
2022-09-03 11:26:28 +03:00
Alexander Koblov
02913857ab ADD: Editor - show bookmarks
(cherry picked from commit 8e619273a4)
2022-09-03 11:26:28 +03:00
Alexander Koblov
1d60637432 FIX: Process running state
(cherry picked from commit e2aecba435)
2022-09-03 11:25:51 +03:00
Alexander Koblov
0a70db43e5 UPD: Bevel style
(cherry picked from commit b22ac36b40)
2022-09-03 11:25:51 +03:00
Alexander Koblov
7fb0454687 FIX: Process running state
(cherry picked from commit f6e99c46c6)
2022-08-28 14:35:00 +03:00
Alexander Koblov
113d6ef518 FIX: Packer name lost
(cherry picked from commit d3547ad222)
2022-08-28 12:46:49 +03:00
Alexander Koblov
e537770a28 ADD: Context menu - always show "New->Directory" and "New->File" menu items (fixes #559)
(cherry picked from commit ec855c4d0f)
2022-08-23 18:33:07 +03:00
Alexander Koblov
30d7b8a80c FIX: Deleting of last picture file in QuickView mode (fixes #546)
(cherry picked from commit 5fa5fb0ae3)
2022-08-23 18:32:57 +03:00
Alexander Koblov
b7c83fb25c FIX: SevenZip - create 7-Zip archive with PPMd compression method
(cherry picked from commit 1d3ba73af4)
2022-08-20 14:34:37 +03:00
Alexander Koblov
5deb4e99e3 FIX: SevenZip - MessageBox text encoding
(cherry picked from commit c13c40bd32)
2022-08-20 14:34:36 +03:00
Alexander Koblov
2f97288d7c FIX: Error change filename in copy operation (fixes #503)
(cherry picked from commit 6fc22a2bff)
2022-08-20 14:34:36 +03:00
Alexander Koblov
2c15917a14 FIX: Zip - update time extra fields (fixes #492)
(cherry picked from commit 29cea47087)
2022-08-09 18:53:57 +03:00
Alexander Koblov
7b85aa6445 ADD: Show in the properties dialog which addon/plugin used to open archive
(cherry picked from commit cb21bfedb8)
2022-08-09 18:53:47 +03:00
Alexander Koblov
419553ab31 FIX: Remove UseConfigInProgramDir from doublecmd.xml
(cherry picked from commit c1e9164dc1)
2022-08-06 13:19:19 +03:00
Alexander Koblov
b645fe668b FIX: DC_CONFIG_PATH value 2022-08-06 13:17:18 +03:00
Alexander Koblov
d4e956b46e UPD: Project file
(cherry picked from commit 8d01d3cd10)
2022-08-06 13:01:18 +03:00
Alexander Koblov
861c5b61c2 FIX: Extract encrypted RAR archive when password contains non-ASCII characters
(cherry picked from commit 6ea44db451)
2022-08-06 13:01:18 +03:00
Alexander Koblov
3fa5525d1a FIX: Abort FileSourceOperation
(cherry picked from commit aca79a3b30)
2022-08-06 13:01:02 +03:00
Alexander Koblov
b49e5f44eb FIX: Select duplicates dialog (wrong selection in the last group)
(cherry picked from commit cd3db6e871)
2022-08-06 13:01:02 +03:00
Alexander Koblov
0d464d30e2 FIX: SevenZip - Create .zip archives
(cherry picked from commit 38342adcc2)
2022-08-06 13:01:01 +03:00
Alexander Koblov
4e03c743f1 FIX: Command line parameter '--debug-log' (Lazarus >= 2.2)
(cherry picked from commit 6995fe0c30)
2022-08-06 13:00:18 +03:00
Alexander Koblov
d93b70f8ed FIX: Unrar - don't rewrite configuration file
(cherry picked from commit 00ea415c48)
2022-08-06 13:00:18 +03:00
Alexander Koblov
efb78948f4 UPD: Disable create archive inside other archive (function not supported)
(cherry picked from commit 0c49b02fb2)
2022-08-06 12:59:58 +03:00
Alexander Koblov
d241666742 FIX: SevenZip - save configuration when path contains non ASCII characters
(cherry picked from commit 9d468c8aca)
2022-07-14 23:11:55 +03:00
Alexander Koblov
65c94ff8ba FIX: Unrar - save configuration when path contains non ASCII characters
(cherry picked from commit cb5357bf45)
2022-07-14 23:11:54 +03:00
Alexander Koblov
d453644a48 FIX: Error Access Violation in "Directory Hotlist" (fixes #491)
(cherry picked from commit 710c2d6cc2)
2022-07-10 12:23:30 +03:00
Alexander Koblov
e6e15e7e84 FIX: Error Access Violation in "Directory Hotlist" (fixes #491)
(cherry picked from commit 7164b4edac)
2022-07-10 12:23:29 +03:00
Alexander Koblov
aedf74a507 FIX: Zip - extract file with long name (> 100) from .tar archive in the pax format
(cherry picked from commit 03e6a989d9)
2022-07-05 19:24:50 +03:00
Alexander Koblov
8824b665ad FIX: Rename file on copy
(cherry picked from commit 0f8f9f3563)
2022-07-05 19:24:36 +03:00
Alexander Koblov
c1982daff0 FIX: Viewer - hang on view corrupted .gif
(cherry picked from commit c44d56ace6)
2022-07-05 19:24:35 +03:00
Alexander Koblov
8c23edb71f FIX: Tree view menu height (exclude task bar)
(cherry picked from commit 7b23ccf8a9)
2022-07-05 19:24:35 +03:00
Alexander Koblov
ae0e12fac0 FIX: ExcludeBackPathDelimiter with drive root
(cherry picked from commit ff2732ac56)
2022-06-18 16:00:15 +03:00
Alexander Koblov
38e32dae79 UPD: Use tilde symbol as revision delimiter 2022-06-12 15:48:22 +03:00
Alexander Koblov
6093e1aa57 FIX: FPC 3.0.4 compatibility 2022-06-12 15:32:54 +03:00
Alexander Koblov
012607073e FIX: Range check error
(cherry picked from commit 4aaa48f26e)
2022-06-12 15:24:10 +03:00
Alexander Koblov
b8795bb97d UPD: More compact main window title 2022-06-12 13:18:07 +03:00
Alexander Koblov
2845d264d2 FIX: Viewer - double toolbar border (issue #463) 2022-06-11 23:37:17 +03:00
Alexander Koblov
798ebf6ea4 ADD: Auto-detect default terminal emulator 2022-06-05 11:20:35 +03:00
Alexander Koblov
0e543bd728 UPD: Splash screen icon 2022-06-05 11:19:00 +03:00
Alexander Koblov
1c3fc8dabd UPD: Version number 2022-06-05 11:15:38 +03:00
Alexander Koblov
976d0bb0b7 UPD: Version number 2022-06-05 11:15:00 +03:00
Alexander Koblov
b1d0f2f15e UPD: About dialog icon (fixes #444)
(cherry picked from commit 3d6a63cb79)
2022-06-03 18:42:47 +03:00
Alexander Koblov
7da4137a73 ADD: BSD reversed mode checksum file format (fixes #349)
(cherry picked from commit 55ec158a2d)
2022-05-27 18:43:32 +03:00
WhiteChairFromIkea
22b53326a6 FIX: Reset filter field everytime when gaining focus (fixes #274)
Co-authored-by: WhiteChairFromIkea <dainius.mazuika@gmailcom>
(cherry picked from commit b636e42eea)
2022-05-27 18:43:31 +03:00
Alexander Koblov
1afb3ad023 FIX: Template submenu - skip misconfigured path (fixes #431)
(cherry picked from commit 2780c2f874)
2022-05-17 22:07:49 +03:00
Alexander Koblov
3a2619384c UPD: Viewer - set stretch only large by default on
(cherry picked from commit dc16e3da04)
2022-05-07 15:46:48 +03:00
Alexander Koblov
0d65407394 UPD: Version number 2022-05-07 15:45:14 +03:00
Graham Inggs
36aa1be761 FIX: TUnixTime and TUnixMode for MIPS and PowerPC (#427) 2022-05-07 15:43:01 +03:00
Alexander Koblov
f77a2eac54 FIX: Copy dialog - controls spacing 2022-05-07 15:42:27 +03:00
Alexander Koblov
63895bcc3b FIX: Hide service mount points 2022-05-07 15:42:27 +03:00
Alexander Koblov
9624ce1218 FIX: Zip - save Unix file attributes (fixes #424) 2022-05-07 15:42:27 +03:00
Alexander Koblov
97041103d3 FIX: SynEdit gutter separator colors 2022-05-07 15:42:26 +03:00
Nick Korotysh
6232e752c1 ADD: GenericName key to .desktop file (#414) 2022-05-07 15:42:26 +03:00
Alexander Koblov
e49684af6b UPD: Start button glyph 2022-05-07 15:42:26 +03:00
Alexander Koblov
3cf34c9a9f FIX: Reserve space for second and the rest files (Linux)
(cherry picked from commit 3f3343856c)
2022-05-07 15:40:57 +03:00
Alexander Koblov
200a718538 UPD: Component address
(cherry picked from commit 4363a1eb9b)
2022-05-07 15:40:57 +03:00
Alexander Koblov
5f4fa564a7 DEL: Wrong hint
(cherry picked from commit 9dff11c0be)
2022-05-07 15:40:57 +03:00
Alexander Koblov
c02347051f FIX: FTP - long delay with some ftps servers
(cherry picked from commit 78d28932af)
2022-04-09 11:27:45 +03:00
Alexander Koblov
c9767b6e68 FIX: Long delay with locked network path
(cherry picked from commit 7d90b0852f)
2022-04-09 11:21:11 +03:00
Alexander Koblov
c522743f98 FIX: A non-Latin folder name is not shown correctly in the title bar (fixes #354)
(cherry picked from commit 5f0ae995a5)
2022-04-09 11:21:10 +03:00
Alexander Koblov
5c22ec3b74 ADD: Don't allow rename file to the name with a dot at the end (Windows)
(cherry picked from commit 811266e6c3)
2022-04-02 15:31:09 +03:00
Alexander Koblov
3100aa02c9 FIX: Issue [0002028] Narrow tabs and shorten titles if too many tabs
(cherry picked from commit 1418d99735)
2022-04-02 15:31:09 +03:00
Alexander Koblov
9885358914 UPD: Version number 2022-03-27 15:18:15 +03:00
Skif-off
b12ae242ab ADD: Lua - GetAbsolutePath, GetRelativePath functions (#382)
(cherry picked from commit c265df60f0)
2022-03-27 15:10:30 +03:00
Alexander Koblov
f6e09040e3 FIX: Find files - use correct regular expression engine
(cherry picked from commit 9b479b805d)
2022-03-27 15:10:30 +03:00
Alexander Koblov
c842cc7d83 ADD: RegExp - Unicode categories support
(cherry picked from commit 69f755015d)
2022-03-27 15:10:30 +03:00
Alexander Koblov
1597fb4eca UPD: Set display version (fixes #384) 2022-03-27 11:58:59 +03:00
Alexander Koblov
1acbe04b14 ADD: TAR - read mtime from PAX headers
(cherry picked from commit 2a69adfc53)
2022-03-06 23:55:52 +03:00
Alexander Koblov
3b56004a06 FIX: Poorly adjusted columns in Synchronize Directories (fixes #371)
(cherry picked from commit 8d57c7cc58)
2022-03-06 23:52:07 +03:00
Alexander Koblov
a7d176ca38 ADD: Determine Windows 11 by build number (fixes #367)
(cherry picked from commit b6e156e88c)
2022-03-06 23:52:07 +03:00
Alexander Koblov
ada9ada758 UPD: Allow zero (default) font size
(cherry picked from commit f6a40943ec)
2022-02-23 18:25:34 +03:00
Alexander Koblov
a45d5f0b7b FIX: Invalid library in the uses clause
(cherry picked from commit c6204e1a60)
2022-02-23 18:25:01 +03:00
Alexander Koblov
367d5d4d83 FIX: Range check error 2022-02-23 18:24:25 +03:00
Alexander Koblov
410fbfd484 FIX: Renaming/deletion a file in a smb:// location brings cursor to the top of file list (issue #350) 2022-02-23 18:24:25 +03:00
Alexander Koblov
5b951aa8d5 FIX: IContextMenu::InvokeCommand ignore E_FAIL return code (fixes #345)
(cherry picked from commit 3f4f630332)
2022-02-23 18:22:14 +03:00
Alexander Koblov
763185f6f0 FIX: Viewer - folder view text color
(cherry picked from commit 8558e73836)
2022-02-23 18:22:14 +03:00
Alexander Koblov
1f27c6a884 FIX: Extract operation progress
(cherry picked from commit 29d0510f1a)
2022-02-23 18:22:14 +03:00
Alexander Koblov
a1d58d4ddc FIX: Changing the case in FAT32 filesystem (fixes #327)
(cherry picked from commit 410984ed20)
2022-02-04 22:43:30 +03:00
Alexander Koblov
c6e12ac43e FIX: Viewer - selection when text is scrolled horizontally
(cherry picked from commit fd7348ca23)
2022-02-04 22:43:30 +03:00
Alexander Koblov
d558f929a6 FIX: Wrong file selected after rename (fixes #339)
(cherry picked from commit b0289a6f0e)
2022-02-04 22:43:29 +03:00
Alexander Koblov
1b677500b4 UPD: Replace ExtraLineSpacing by ExtraLineSpan for uniformity
(cherry picked from commit 197679f8e6)
2022-02-04 22:43:29 +03:00
Alexander Koblov
86644c3990 FIX: Viewer - selection invisible characters in the text mode
(cherry picked from commit dd75f9103c)
2022-02-04 22:43:28 +03:00
Alexander Koblov
fe41de0fbd FIX: Compiling under 64 bit
(cherry picked from commit 65df20cb4b)
2022-02-04 22:43:28 +03:00
Alexander Koblov
4221336461 ADD: Viewer - load options LeftMargin and ExtraLineSpacing from configuration file (issue #338)
(cherry picked from commit b4664cf31f)
2022-02-04 22:43:28 +03:00
Alexander Koblov
4153c217ed ADD: Viewer - left margin option (issue #338)
(cherry picked from commit 69579d4625)
2022-02-04 22:43:27 +03:00
Alexander Koblov
78a126fcb3 FIX: Viewer - double byte text can have only even position (issue #338)
(cherry picked from commit 96f858f9ae)
2022-02-04 22:43:27 +03:00
Alexander Koblov
afe532a963 ADD: Viewer - ExtraLineSpacing option (issue #338)
(cherry picked from commit 778a5b0530)
2022-02-04 22:43:26 +03:00
Alexander Koblov
55758f0ad9 FIX: cm_ReloadFavoriteTabs Crash (fixes #236)
(cherry picked from commit 98bdde4e1f)
2022-02-04 22:43:26 +03:00
Alexander Koblov
24645a4924 UPD: Version number 2022-01-30 13:05:51 +03:00
Alexander Koblov
9f6ac077f6 FIX: Different rightclick behaviour 0.9.10 and 1.0.0 alpha (fixes #105)
(cherry picked from commit 840312d5f7)
2022-01-30 13:01:30 +03:00
Alexander Koblov
a778da9010 FIX: Zip - use GMT time if available when extract
(cherry picked from commit d2b2920c29)
2022-01-30 13:01:29 +03:00
Alexander Koblov
378c2275de FIX: Viewer - auto-reload using internal view mode only
(cherry picked from commit fe7d3d64d7)
2022-01-30 13:01:29 +03:00
Alexander Koblov
b0e43b7ade FIX: Replace file in the TAR archive
(cherry picked from commit e663163af2)
2022-01-30 13:01:29 +03:00
Alexander Koblov
b3740938db UPD: Version number 2022-01-05 16:13:17 +03:00
Alexander Koblov
25f731263a FIX: Deleting a Favorite can produce a "is not a valid GUID value" (fixes #315)
(cherry picked from commit 06eeed2ba3)
2022-01-05 15:21:10 +03:00
Alexander Koblov
a69e315e07 FIX: Lazarus 2.3 compatibility
(cherry picked from commit de65d29811)
2022-01-05 15:21:09 +03:00
Alexander Koblov
e9a4a29c02 UPD: Greek translation
(cherry picked from commit 2632f5ef8a)
2022-01-05 15:21:09 +03:00
Alexander Koblov
0f7624b96f FIX: Zero-length file comparison does not end (fixes #301)
(cherry picked from commit de6ea6c013)
2022-01-05 15:21:08 +03:00
Alexander Koblov
7dd1451a6f FIX: Multi-rename - refresh replace test on preset change 2021-12-11 12:46:21 +03:00
Alexander Koblov
3ce407b582 FIX: Copy window size wrong on Linux (fixes #261)
(cherry picked from commit d1b749b2a7)
2021-12-10 19:10:31 +03:00
Jongpil Kim
4a0a7031d4 UPD: Korean translation (#285)
* UPD: Korean translation

* UPD: Korean translation

Co-authored-by: Jongpil Kim <jongpil.kim@mt-solution.net>
(cherry picked from commit 569f6fde89)
2021-12-10 19:10:30 +03:00
Alexander Koblov
624fb20515 FIX: Show columns sets from current and general file systems only
(cherry picked from commit 44292fdacc)
2021-12-10 19:10:30 +03:00
Alexander Koblov
b1a12d5bd3 FIX: XMLConfig - preserve white space
(cherry picked from commit fe39bff758)
2021-12-05 13:34:34 +03:00
Alexander Koblov
26406eaf5f FIX: Wrong data size when drag & drop text to file panel
(cherry picked from commit 44121c1b32)
2021-12-05 13:34:33 +03:00
Alexander Koblov
be71e4a4b5 UPD: Version number 2021-12-03 22:40:03 +03:00
Alexander Koblov
3c0087eb6b FIX: Command cm_SrcOpenDrives does not work
(cherry picked from commit 341b6a7c4d)
2021-12-03 22:31:51 +03:00
Alexander Koblov
88f53e941c FIX: Bad icon rendering
(cherry picked from commit fb3812bf5b)
2021-12-03 22:31:50 +03:00
Jongpil Kim
e59225dbb0 UPD: Korean translation (#279)
Co-authored-by: Jongpil Kim <jongpil.kim@mt-solution.net>
(cherry picked from commit 58b149c68d)
2021-12-03 22:31:50 +03:00
Alexander Koblov
47a1ca2066 FIX: Error when sending search results of duplicate files to the listbox (fixes #273)
(cherry picked from commit c131611fef)
2021-12-03 22:31:50 +03:00
Alexander Koblov
e1f94cbb4d UPD: Slovak translation
(cherry picked from commit 6aef9f423a)
2021-12-03 22:31:49 +03:00
Alexander Koblov
a8f322bb5b FIX: Changing the icons theme does not work on doublecmd-qt5 in archlinux (fixes #264)
(cherry picked from commit 740b7143f4)
2021-12-03 22:31:49 +03:00
Skif-off
875ec687b3 ADD: pixmaps.txt: Office Open XML (docx, xlsx) (#267)
(cherry picked from commit 29f2e6b640)
2021-12-03 22:31:48 +03:00
Alexander Koblov
582c349c83 FIX: Crash on disable drive panels
(cherry picked from commit 93eab094c6)
2021-12-03 22:31:48 +03:00
Alexander Koblov
7a8950c593 FIX: Don't use UTF8Decode/UTF8Encode functions (fixes #245)
(cherry picked from commit c9baafdb36)
2021-12-03 22:31:48 +03:00
Alexander Koblov
824de51e1a FIX: Don't use UTF8Decode/UTF8Encode functions (issue #245)
(cherry picked from commit 57ba2a297f)
2021-12-03 22:31:47 +03:00
Alexander Koblov
12f47430d7 ADD: WMP plugin - .wma and .wmv extensions
(cherry picked from commit 7a7454fbfb)
2021-11-28 12:26:03 +03:00
Alexander Koblov
82f9a739a2 FIX: Drive free space label/indicator blinking
(cherry picked from commit 9b7b9c0bbf)
2021-11-28 12:26:03 +03:00
Alexander Koblov
a79f945444 ADD: Install script - aarch64 support
(cherry picked from commit 6634673d7e)
2021-11-28 12:26:03 +03:00
Alexander Koblov
cc6481296b FIX: Compiling with Free Pascal 3.0.4 and Windows
(cherry picked from commit 60033ba0dd)
2021-11-28 12:26:02 +03:00
Alexander Koblov
2f6c2c5f38 ADD: Support *.svg icons when load from standard theme (issue #246)
(cherry picked from commit 6bc914cbb3)
2021-11-28 12:26:02 +03:00
Alexander Koblov
53a3088434 UPD: Change shortcut "Alt+`" to "Alt+0" for the "cm_ActivateTabByIndex"
(cherry picked from commit 4053f55e49)
2021-11-28 12:26:01 +03:00
Alexander Koblov
a0fd299da8 FIX: Multi-rename presets button width
(cherry picked from commit 94b7e95ac0)
2021-11-28 12:26:01 +03:00
Alexander Koblov
60e9f5cf67 ADD: Glyph support to TKASButton
(cherry picked from commit b3302a594d)
2021-11-28 12:26:01 +03:00
Alexander Koblov
0e3e514db9 ADD: Determine KDE also by "plasma" session
(cherry picked from commit 137c2af384)
2021-11-28 12:26:00 +03:00
Alexander Koblov
a40b642242 FIX: Read icon theme from ~ / .kde4 for backward compatibility
(cherry picked from commit 540aaddc54)
2021-11-28 12:26:00 +03:00
Alexander Koblov
a6181298b5 FIX: Erratic behaviour with cm_syncchangedir in toolbar (fixes #238)
(cherry picked from commit 62220e1b98)
2021-11-28 12:26:00 +03:00
Alexander Koblov
10850f10f6 FIX: Don't remove only SevenZipDlg.res (fixes #234)
(cherry picked from commit 72c9708cfa)
2021-10-31 11:29:51 +03:00
Alexander Koblov
0aba9be501 FIX: File mode
(cherry picked from commit 554a216fa3)
2021-10-31 11:29:51 +03:00
Alexander Koblov
7615ae031b UPD: Controls alignment
(cherry picked from commit c4fcd808e3)
2021-10-31 11:29:51 +03:00
Alexander Koblov
9e53886212 UPD: Rearrange buttons
(cherry picked from commit 6200919152)
2021-10-31 11:29:50 +03:00
Alexander Koblov
c68af22f12 UPD: Hungarian translation (fixes #233)
(cherry picked from commit 68c9d3e35e)
2021-10-30 22:40:03 +03:00
Alexander Koblov
00b302707d UPD: INSTALL.txt
(cherry picked from commit 282cdc710d)
2021-10-30 22:40:03 +03:00
Alexander Koblov
61ba8c96e2 FIX: Default button height
(cherry picked from commit 0b5d0c917e)
2021-10-30 22:40:03 +03:00
Alexander Koblov
93306f5157 FIX: Dialogue needs to resize for multirename (fixes #228)
(cherry picked from commit 0871a92aef)
2021-10-30 15:09:21 +03:00
Alexander Koblov
96b19fbd81 UPD: Version number 2021-10-29 23:05:17 +03:00
Alexander Koblov
650576b64d FIX: Build under linux-arm
(cherry picked from commit e763ccc916)
2021-10-29 18:27:50 +03:00
Alexander Koblov
2d3d31c6fc FIX: Double Commander 1.0.0_beta (Qt5) failed to launch: Exception=Duplicate icon format (fixes #206)
(cherry picked from commit 93942be43b)
2021-10-29 18:27:50 +03:00
Alexander Koblov
60e14a610d FIX: Autorename source and target shortcut key conflict (fixes #223)
(cherry picked from commit 2226f12be6)
2021-10-29 18:27:49 +03:00
Alexander Koblov
d190bc3b63 FIX: Push correct window handle to plugins (Qt5)
(cherry picked from commit 72ca6065fd)
2021-10-29 18:27:48 +03:00
Alexander Koblov
bc29e0e0a6 FIX: Ignore floating point division by zero (fixes #224)
(cherry picked from commit 7eb9ce780f)
2021-10-29 18:27:48 +03:00
Alexander Koblov
ce98266df2 UPD: Default title style
(cherry picked from commit 4a3442ca80)
2021-10-29 18:27:48 +03:00
Alexander Koblov
80b80482f1 DEL: KDE4 specific code
(cherry picked from commit fa1ebb7e80)
2021-10-29 18:27:47 +03:00
Alexander Koblov
2a7b6c7b76 UPD: Default fonts size
(cherry picked from commit 707b77a43e)
2021-10-29 18:27:47 +03:00
Alexander Koblov
8d1ad60597 UPD: Optimization
(cherry picked from commit 9cececd39b)
2021-10-29 18:27:46 +03:00
GitHub42p
018d556bd9 FIX: Sort order in "Synchronize dirs" (fixes #173)
(cherry picked from commit 0633ceaaca)
2021-10-29 18:27:46 +03:00
Alexander Koblov
6e51697be9 FIX: FTP modified files are stored with unchanged date (fixes #218)
(cherry picked from commit b1269ed4d0)
2021-10-29 18:25:29 +03:00
Alexander Koblov
450c6b4102 FIX: Elevation does not work under standard user account (fixes #217)
(cherry picked from commit ff7d514f15)
2021-10-29 18:25:29 +03:00
Alexander Koblov
e69e797f58 FIX: FTP - use mbFileExists function and TFileStreamEx class (fixes #213)
(cherry picked from commit 4e3a509e8e)
2021-10-29 18:25:29 +03:00
Ars Masiuk
ee4cffd98f Update doublecmd.uk.po (#216)
Typo fixed

(cherry picked from commit d250e256f6)
2021-10-29 18:25:28 +03:00
Alexander Koblov
348e8a2c93 FIX: Don't use flock function with all Samba variants (fixes #213)
(cherry picked from commit 59f8237282)
2021-10-29 18:25:28 +03:00
Alexander Koblov
547c314dad FIX: Context menu parent (fixes #208)
(cherry picked from commit f79147d9a9)
2021-10-29 18:25:27 +03:00
Alexander Koblov
f07d132ac9 FIX: Use fmCreate when rewrite file
(cherry picked from commit aa9b6fc691)
2021-10-17 11:03:05 +03:00
Alexander Koblov
c0ce7ff06e UPD: Project file 2021-10-16 23:17:12 +03:00
Alexander Koblov
b7f285366d UPD: Install script
(cherry picked from commit a9f34dcb7b)
2021-10-16 19:50:23 +03:00
Alexander Koblov
a116ac810c UPD: Patch file
(cherry picked from commit ab0ffc4f72)
2021-10-16 19:50:22 +03:00
Alexander Koblov
3adbbc2f5d FIX: Remove temporary file
(cherry picked from commit 6fd35a5209)
2021-10-16 19:50:22 +03:00
Alexander Koblov
59bbffaf24 UPD: Default plugins
(cherry picked from commit e38d7eeadf)
2021-10-16 19:50:22 +03:00
Alexander Koblov
beba631a94 UPD: Default option value
(cherry picked from commit 9abafa32f7)
2021-10-16 19:50:21 +03:00
Alexander Koblov
48a7500188 UPD: Install scripts
(cherry picked from commit c16eaa1e43)
2021-10-16 19:50:21 +03:00
Alexander Koblov
883fb71d52 ADD: Count the revision number from branch start 2021-10-15 20:40:12 +03:00
Alexander Koblov
b5f68e8f0a FIX: Disable tooltip edit with empty file type list 2021-10-15 19:58:09 +03:00
261 changed files with 6151 additions and 3590 deletions

13
.github/workflows/winget.yml vendored Normal file
View file

@ -0,0 +1,13 @@
name: Publish to WinGet
on:
release:
types: [released]
jobs:
publish:
runs-on: windows-latest # action can only be run on windows
steps:
- uses: vedantmgoyal2009/winget-releaser@v2
with:
identifier: alexx2000.DoubleCommander
installers-regex: '.(exe|msi)$'
token: ${{ secrets.WINGET_TOKEN }}

View file

@ -38,7 +38,6 @@ if "%1"=="" ( call :release
echo Available modes: components, plugins, doublecmd, release, debug
)))))))
pause
GOTO:EOF
:components

View file

@ -21,7 +21,7 @@ find . -iname '*.o' -delete
find plugins -iname '*.w?x' -delete
find plugins -iname '*.dsx' -delete
find plugins -iname '*.or' -delete
find plugins -iname '*.res' -not -path "*/src/*" -delete
find plugins -iname '*.res' -not -path "*/sevenzip/src/*" -delete
find plugins -iname '*.a' -delete
rm -f src/doublecmd.res doublecmd
rm -f tools/extractdwrflnfo

View file

@ -36,6 +36,12 @@ type
TKASButton = class(TPanel)
private
FState: TButtonState;
FShowCaption: Boolean;
FButtonGlyph: TButtonGlyph;
function GetGlyph: TBitmap;
function IsGlyphStored: Boolean;
procedure SetGlyph(AValue: TBitmap);
procedure SetShowCaption(AValue: Boolean);
function GetDrawDetails: TThemedElementDetails;
protected
procedure Paint; override;
@ -47,8 +53,17 @@ type
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
protected
procedure GlyphChanged(Sender: TObject);
procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override;
procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: Integer; WithThemeSpace: Boolean); override;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
published
property Action;
property Glyph: TBitmap read GetGlyph write SetGlyph stored IsGlyphStored;
property ShowCaption: Boolean read FShowCaption write SetShowCaption default True;
end;
procedure Register;
@ -56,7 +71,7 @@ procedure Register;
implementation
uses
LCLType, LCLProc, LCLIntf;
LCLType, LCLProc, LCLIntf, ActnList;
procedure Register;
begin
@ -97,8 +112,44 @@ begin
Result := ThemeServices.GetElementDetails(Detail)
end;
procedure TKASButton.SetShowCaption(AValue: Boolean);
begin
if FShowCaption = AValue then Exit;
FShowCaption:= AValue;
Invalidate;
end;
function TKASButton.GetGlyph: TBitmap;
begin
Result:= FButtonGlyph.Glyph;
end;
function TKASButton.IsGlyphStored: Boolean;
var
Act: TCustomAction;
begin
if Action <> nil then
begin
Result:= True;
Act:= TCustomAction(Action);
if (Act.ActionList <> nil) and (Act.ActionList.Images <> nil) and
(Act.ImageIndex >= 0) and (Act.ImageIndex < Act.ActionList.Images.Count) then
Result := False;
end
else Result:= (FButtonGlyph.Glyph <> nil) and (not FButtonGlyph.Glyph.Empty) and
(FButtonGlyph.Glyph.Width > 0) and (FButtonGlyph.Glyph.Height > 0);
end;
procedure TKASButton.SetGlyph(AValue: TBitmap);
begin
FButtonGlyph.Glyph := AValue;
InvalidatePreferredSize;
AdjustSize;
end;
procedure TKASButton.Paint;
var
APoint: TPoint;
SysFont: TFont;
PaintRect: TRect;
TextFlags: Integer;
@ -109,7 +160,7 @@ begin
ThemeServices.DrawElement(Canvas.Handle, Details, PaintRect);
PaintRect := ThemeServices.ContentRect(Canvas.Handle, Details, PaintRect);
if Caption <> EmptyStr then
if FShowCaption and (Caption <> EmptyStr) then
begin
TextFlags := DT_CENTER or DT_VCENTER;
if UseRightToLeftReading then begin
@ -128,6 +179,12 @@ begin
Canvas.Brush.Style := bsClear;
DrawText(Canvas.Handle, PChar(Caption), Length(Caption), PaintRect, TextFlags);
end;
end
else if not FButtonGlyph.Glyph.Empty then
begin
APoint.X:= (PaintRect.Width - FButtonGlyph.Width) div 2;
APoint.Y:= (PaintRect.Height - FButtonGlyph.Height) div 2;
FButtonGlyph.Draw(Canvas, PaintRect, APoint, FState, True, 0);
end;
end;
@ -182,10 +239,64 @@ begin
Invalidate;
end;
procedure TKASButton.GlyphChanged(Sender: TObject);
begin
InvalidatePreferredSize;
AdjustSize;
end;
procedure TKASButton.ActionChange(Sender: TObject; CheckDefaults: Boolean);
begin
inherited ActionChange(Sender, CheckDefaults);
if Sender is TCustomAction then
begin
with TCustomAction(Sender) do
begin
if (Glyph.Empty) and (ActionList <> nil) and (ActionList.Images <> nil) and
(ImageIndex >= 0) and (ImageIndex < ActionList.Images.Count) then
ActionList.Images.GetBitmap(ImageIndex, Glyph);
end;
end;
end;
procedure TKASButton.CalculatePreferredSize(var PreferredWidth,
PreferredHeight: Integer; WithThemeSpace: Boolean);
var
PaintRect: TRect;
ClientRect: TRect;
Details: TThemedElementDetails;
begin
inherited CalculatePreferredSize(PreferredWidth, PreferredHeight, WithThemeSpace);
if (not FButtonGlyph.Glyph.Empty) then
begin
Details:= GetDrawDetails;
PaintRect:= TRect.Create(0, 0, 32, 32);
ClientRect:= ThemeServices.ContentRect(Canvas.Handle, Details, PaintRect);
PreferredWidth:= Abs(PaintRect.Width - ClientRect.Width) + FButtonGlyph.Width;
PreferredHeight:= Abs(PaintRect.Height - ClientRect.Height) + FButtonGlyph.Height;
end;
end;
constructor TKASButton.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
FButtonGlyph := TButtonGlyph.Create;
FButtonGlyph.NumGlyphs := 1;
FButtonGlyph.OnChange := GlyphChanged;
FButtonGlyph.IsDesigning := csDesigning in ComponentState;
FShowCaption:= True;
TabStop:= True;
end;
destructor TKASButton.Destroy;
begin
FreeAndNil(FButtonGlyph);
inherited Destroy;
end;
end.

View file

@ -12,9 +12,17 @@ type
{ TKASButtonPanel }
TKASButtonPanel = class(TPanel)
private
FSameWidth: Boolean;
FSameHeight: Boolean;
protected
procedure ButtonsAutoSize;
procedure DoAutoSize; override;
public
constructor Create(TheOwner: TComponent); override;
published
property SameWidth: Boolean read FSameWidth write FSameWidth default True;
property SameHeight: Boolean read FSameHeight write FSameHeight default True;
end;
procedure Register;
@ -44,8 +52,8 @@ begin
AControl:= Controls[Index];
if AControl is TCustomButton then
begin
if AControl.Width > AMaxWidth then AMaxWidth:= AControl.Width;
if AControl.Height > AMaxHeight then AMaxHeight:= AControl.Height;
if FSameWidth and (AControl.Width > AMaxWidth) then AMaxWidth:= AControl.Width;
if FSameHeight and (AControl.Height > AMaxHeight) then AMaxHeight:= AControl.Height;
end;
end;
for Index:= 0 to ControlCount - 1 do
@ -53,8 +61,8 @@ begin
AControl:= Controls[Index];
if AControl is TCustomButton then
begin
AControl.Constraints.MinWidth:= AMaxWidth;
AControl.Constraints.MinHeight:= AMaxHeight;
if FSameWidth then AControl.Constraints.MinWidth:= AMaxWidth;
if FSameHeight then AControl.Constraints.MinHeight:= AMaxHeight;
end;
end;
end;
@ -62,7 +70,15 @@ end;
procedure TKASButtonPanel.DoAutoSize;
begin
inherited DoAutoSize;
if AutoSize then ButtonsAutosize;
if csDesigning in ComponentState then Exit;
if AutoSize and (FSameWidth or FSameHeight) then ButtonsAutosize;
end;
constructor TKASButtonPanel.Create(TheOwner: TComponent);
begin
FSameWidth:= True;
FSameHeight:= True;
inherited Create(TheOwner);
end;
end.

View file

@ -4,7 +4,7 @@
Extended ComboBox classes
Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.com)
Copyright (C) 2015-2017 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2015-2023 Alexander Koblov (alexx2000@mail.ru)
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@ -49,7 +49,7 @@ type
procedure CalculatePreferredSize(
var PreferredWidth, PreferredHeight: Integer;
WithThemeSpace: Boolean); override;
procedure CalculateSize(MaxWidth: Integer; var NeededWidth: Integer);
procedure CalculateSize(MaxWidth: Integer; var PreferredWidth: Integer; PreferredHeight: Integer);
{$if lcl_fullversion >= 1070000}
procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy;
const AXProportion, AYProportion: Double); override;
@ -101,10 +101,11 @@ begin
if (Parent = nil) or (not Parent.HandleAllocated) then Exit;
AWidth := Constraints.MinMaxWidth(10000);
CalculateSize(AWidth, PreferredWidth);
CalculateSize(AWidth, PreferredWidth, PreferredHeight);
end;
procedure TComboBoxAutoWidth.CalculateSize(MaxWidth: Integer; var NeededWidth: Integer);
procedure TComboBoxAutoWidth.CalculateSize(MaxWidth: Integer;
var PreferredWidth: Integer; PreferredHeight: Integer);
var
DC: HDC;
R: TRect;
@ -135,19 +136,20 @@ begin
end;
if LabelText = '' then begin
NeededWidth := 1;
PreferredWidth := 1;
Exit;
end;
DC := GetDC(Parent.Handle);
try
LabelText:= LabelText + 'W';
R := Rect(0, 0, MaxWidth, 10000);
OldFont := SelectObject(DC, HGDIOBJ(Font.Reference.Handle));
Flags := DT_CALCRECT or DT_EXPANDTABS;
DrawText(DC, PChar(LabelText), Length(LabelText), R, Flags);
SelectObject(DC, OldFont);
NeededWidth := R.Right - R.Left + GetSystemMetrics(SM_CXVSCROLL) * 2;
PreferredWidth := (R.Right - R.Left) + PreferredHeight;
finally
ReleaseDC(Parent.Handle, DC);
end;

View file

@ -3,7 +3,7 @@
-------------------------------------------------------------------------
Path edit class with auto complete feature
Copyright (C) 2012-2021 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2012-2022 Alexander Koblov (alexx2000@mail.ru)
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@ -27,7 +27,7 @@ interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
ShellCtrls, LCLType;
ShellCtrls, LCLType, LCLVersion;
type
@ -186,6 +186,12 @@ end;
{ TKASPathEdit }
procedure TKASPathEdit.AutoComplete(const Path: String);
{$IF LCL_FULLVERSION >= 2020000}
const
AFlags: array[Boolean] of TMaskOptions = (
[moDisableSets], [moDisableSets, moCaseSensitive]
);
{$ENDIF}
var
I: Integer;
AMask: TMask;
@ -208,7 +214,12 @@ begin
try
// Check mask and make absolute file name
AMask:= TMask.Create(ExtractFileName(Path) + '*',
FileNameCaseSensitive);
{$IF LCL_FULLVERSION >= 2020000}
AFlags[FileNameCaseSensitive]
{$ELSE}
FileNameCaseSensitive
{$ENDIF}
);
for I:= 0 to FStringList.Count - 1 do
begin
if AMask.Matches(FStringList[I]) then

View file

@ -11,10 +11,13 @@ type
TKASToolPanel = class(TToolWindow)
published
property Align default alNone;
property Anchors;
property AutoSize;
property ChildSizing;
property EdgeBorders default [ebTop];
property EdgeInner;
property EdgeOuter;
property TabOrder;
property Visible;
end;

View file

@ -7,7 +7,7 @@ Based on Mozilla's i18n component - https://dxr.mozilla.org/mozilla/source/exten
-----------State
Version 0.2.9 stable.
Copyright (C) 2011-2019 Alexander Koblov
The latest version can be found at https://sourceforge.net/p/doublecmd/code/HEAD/tree/trunk/components/chsdet/.
The latest version can be found at https://github.com/doublecmd/doublecmd/tree/master/components/chsdet/.
-----------Original
Based on

View file

@ -34,12 +34,12 @@ 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;
@ -81,6 +81,555 @@ begin
end;
HaveTable:= True;
end;
}
const
Crc32Lookup: array[0..15, 0..255] of Cardinal = (
(
$00000000,$77073096,$EE0E612C,$990951BA,$076DC419,$706AF48F,$E963A535,$9E6495A3,
$0EDB8832,$79DCB8A4,$E0D5E91E,$97D2D988,$09B64C2B,$7EB17CBD,$E7B82D07,$90BF1D91,
$1DB71064,$6AB020F2,$F3B97148,$84BE41DE,$1ADAD47D,$6DDDE4EB,$F4D4B551,$83D385C7,
$136C9856,$646BA8C0,$FD62F97A,$8A65C9EC,$14015C4F,$63066CD9,$FA0F3D63,$8D080DF5,
$3B6E20C8,$4C69105E,$D56041E4,$A2677172,$3C03E4D1,$4B04D447,$D20D85FD,$A50AB56B,
$35B5A8FA,$42B2986C,$DBBBC9D6,$ACBCF940,$32D86CE3,$45DF5C75,$DCD60DCF,$ABD13D59,
$26D930AC,$51DE003A,$C8D75180,$BFD06116,$21B4F4B5,$56B3C423,$CFBA9599,$B8BDA50F,
$2802B89E,$5F058808,$C60CD9B2,$B10BE924,$2F6F7C87,$58684C11,$C1611DAB,$B6662D3D,
$76DC4190,$01DB7106,$98D220BC,$EFD5102A,$71B18589,$06B6B51F,$9FBFE4A5,$E8B8D433,
$7807C9A2,$0F00F934,$9609A88E,$E10E9818,$7F6A0DBB,$086D3D2D,$91646C97,$E6635C01,
$6B6B51F4,$1C6C6162,$856530D8,$F262004E,$6C0695ED,$1B01A57B,$8208F4C1,$F50FC457,
$65B0D9C6,$12B7E950,$8BBEB8EA,$FCB9887C,$62DD1DDF,$15DA2D49,$8CD37CF3,$FBD44C65,
$4DB26158,$3AB551CE,$A3BC0074,$D4BB30E2,$4ADFA541,$3DD895D7,$A4D1C46D,$D3D6F4FB,
$4369E96A,$346ED9FC,$AD678846,$DA60B8D0,$44042D73,$33031DE5,$AA0A4C5F,$DD0D7CC9,
$5005713C,$270241AA,$BE0B1010,$C90C2086,$5768B525,$206F85B3,$B966D409,$CE61E49F,
$5EDEF90E,$29D9C998,$B0D09822,$C7D7A8B4,$59B33D17,$2EB40D81,$B7BD5C3B,$C0BA6CAD,
$EDB88320,$9ABFB3B6,$03B6E20C,$74B1D29A,$EAD54739,$9DD277AF,$04DB2615,$73DC1683,
$E3630B12,$94643B84,$0D6D6A3E,$7A6A5AA8,$E40ECF0B,$9309FF9D,$0A00AE27,$7D079EB1,
$F00F9344,$8708A3D2,$1E01F268,$6906C2FE,$F762575D,$806567CB,$196C3671,$6E6B06E7,
$FED41B76,$89D32BE0,$10DA7A5A,$67DD4ACC,$F9B9DF6F,$8EBEEFF9,$17B7BE43,$60B08ED5,
$D6D6A3E8,$A1D1937E,$38D8C2C4,$4FDFF252,$D1BB67F1,$A6BC5767,$3FB506DD,$48B2364B,
$D80D2BDA,$AF0A1B4C,$36034AF6,$41047A60,$DF60EFC3,$A867DF55,$316E8EEF,$4669BE79,
$CB61B38C,$BC66831A,$256FD2A0,$5268E236,$CC0C7795,$BB0B4703,$220216B9,$5505262F,
$C5BA3BBE,$B2BD0B28,$2BB45A92,$5CB36A04,$C2D7FFA7,$B5D0CF31,$2CD99E8B,$5BDEAE1D,
$9B64C2B0,$EC63F226,$756AA39C,$026D930A,$9C0906A9,$EB0E363F,$72076785,$05005713,
$95BF4A82,$E2B87A14,$7BB12BAE,$0CB61B38,$92D28E9B,$E5D5BE0D,$7CDCEFB7,$0BDBDF21,
$86D3D2D4,$F1D4E242,$68DDB3F8,$1FDA836E,$81BE16CD,$F6B9265B,$6FB077E1,$18B74777,
$88085AE6,$FF0F6A70,$66063BCA,$11010B5C,$8F659EFF,$F862AE69,$616BFFD3,$166CCF45,
$A00AE278,$D70DD2EE,$4E048354,$3903B3C2,$A7672661,$D06016F7,$4969474D,$3E6E77DB,
$AED16A4A,$D9D65ADC,$40DF0B66,$37D83BF0,$A9BCAE53,$DEBB9EC5,$47B2CF7F,$30B5FFE9,
$BDBDF21C,$CABAC28A,$53B39330,$24B4A3A6,$BAD03605,$CDD70693,$54DE5729,$23D967BF,
$B3667A2E,$C4614AB8,$5D681B02,$2A6F2B94,$B40BBE37,$C30C8EA1,$5A05DF1B,$2D02EF8D
)
,(
$00000000,$191B3141,$32366282,$2B2D53C3,$646CC504,$7D77F445,$565AA786,$4F4196C7,
$C8D98A08,$D1C2BB49,$FAEFE88A,$E3F4D9CB,$ACB54F0C,$B5AE7E4D,$9E832D8E,$87981CCF,
$4AC21251,$53D92310,$78F470D3,$61EF4192,$2EAED755,$37B5E614,$1C98B5D7,$05838496,
$821B9859,$9B00A918,$B02DFADB,$A936CB9A,$E6775D5D,$FF6C6C1C,$D4413FDF,$CD5A0E9E,
$958424A2,$8C9F15E3,$A7B24620,$BEA97761,$F1E8E1A6,$E8F3D0E7,$C3DE8324,$DAC5B265,
$5D5DAEAA,$44469FEB,$6F6BCC28,$7670FD69,$39316BAE,$202A5AEF,$0B07092C,$121C386D,
$DF4636F3,$C65D07B2,$ED705471,$F46B6530,$BB2AF3F7,$A231C2B6,$891C9175,$9007A034,
$179FBCFB,$0E848DBA,$25A9DE79,$3CB2EF38,$73F379FF,$6AE848BE,$41C51B7D,$58DE2A3C,
$F0794F05,$E9627E44,$C24F2D87,$DB541CC6,$94158A01,$8D0EBB40,$A623E883,$BF38D9C2,
$38A0C50D,$21BBF44C,$0A96A78F,$138D96CE,$5CCC0009,$45D73148,$6EFA628B,$77E153CA,
$BABB5D54,$A3A06C15,$888D3FD6,$91960E97,$DED79850,$C7CCA911,$ECE1FAD2,$F5FACB93,
$7262D75C,$6B79E61D,$4054B5DE,$594F849F,$160E1258,$0F152319,$243870DA,$3D23419B,
$65FD6BA7,$7CE65AE6,$57CB0925,$4ED03864,$0191AEA3,$188A9FE2,$33A7CC21,$2ABCFD60,
$AD24E1AF,$B43FD0EE,$9F12832D,$8609B26C,$C94824AB,$D05315EA,$FB7E4629,$E2657768,
$2F3F79F6,$362448B7,$1D091B74,$04122A35,$4B53BCF2,$52488DB3,$7965DE70,$607EEF31,
$E7E6F3FE,$FEFDC2BF,$D5D0917C,$CCCBA03D,$838A36FA,$9A9107BB,$B1BC5478,$A8A76539,
$3B83984B,$2298A90A,$09B5FAC9,$10AECB88,$5FEF5D4F,$46F46C0E,$6DD93FCD,$74C20E8C,
$F35A1243,$EA412302,$C16C70C1,$D8774180,$9736D747,$8E2DE606,$A500B5C5,$BC1B8484,
$71418A1A,$685ABB5B,$4377E898,$5A6CD9D9,$152D4F1E,$0C367E5F,$271B2D9C,$3E001CDD,
$B9980012,$A0833153,$8BAE6290,$92B553D1,$DDF4C516,$C4EFF457,$EFC2A794,$F6D996D5,
$AE07BCE9,$B71C8DA8,$9C31DE6B,$852AEF2A,$CA6B79ED,$D37048AC,$F85D1B6F,$E1462A2E,
$66DE36E1,$7FC507A0,$54E85463,$4DF36522,$02B2F3E5,$1BA9C2A4,$30849167,$299FA026,
$E4C5AEB8,$FDDE9FF9,$D6F3CC3A,$CFE8FD7B,$80A96BBC,$99B25AFD,$B29F093E,$AB84387F,
$2C1C24B0,$350715F1,$1E2A4632,$07317773,$4870E1B4,$516BD0F5,$7A468336,$635DB277,
$CBFAD74E,$D2E1E60F,$F9CCB5CC,$E0D7848D,$AF96124A,$B68D230B,$9DA070C8,$84BB4189,
$03235D46,$1A386C07,$31153FC4,$280E0E85,$674F9842,$7E54A903,$5579FAC0,$4C62CB81,
$8138C51F,$9823F45E,$B30EA79D,$AA1596DC,$E554001B,$FC4F315A,$D7626299,$CE7953D8,
$49E14F17,$50FA7E56,$7BD72D95,$62CC1CD4,$2D8D8A13,$3496BB52,$1FBBE891,$06A0D9D0,
$5E7EF3EC,$4765C2AD,$6C48916E,$7553A02F,$3A1236E8,$230907A9,$0824546A,$113F652B,
$96A779E4,$8FBC48A5,$A4911B66,$BD8A2A27,$F2CBBCE0,$EBD08DA1,$C0FDDE62,$D9E6EF23,
$14BCE1BD,$0DA7D0FC,$268A833F,$3F91B27E,$70D024B9,$69CB15F8,$42E6463B,$5BFD777A,
$DC656BB5,$C57E5AF4,$EE530937,$F7483876,$B809AEB1,$A1129FF0,$8A3FCC33,$9324FD72
),
(
$00000000,$01C26A37,$0384D46E,$0246BE59,$0709A8DC,$06CBC2EB,$048D7CB2,$054F1685,
$0E1351B8,$0FD13B8F,$0D9785D6,$0C55EFE1,$091AF964,$08D89353,$0A9E2D0A,$0B5C473D,
$1C26A370,$1DE4C947,$1FA2771E,$1E601D29,$1B2F0BAC,$1AED619B,$18ABDFC2,$1969B5F5,
$1235F2C8,$13F798FF,$11B126A6,$10734C91,$153C5A14,$14FE3023,$16B88E7A,$177AE44D,
$384D46E0,$398F2CD7,$3BC9928E,$3A0BF8B9,$3F44EE3C,$3E86840B,$3CC03A52,$3D025065,
$365E1758,$379C7D6F,$35DAC336,$3418A901,$3157BF84,$3095D5B3,$32D36BEA,$331101DD,
$246BE590,$25A98FA7,$27EF31FE,$262D5BC9,$23624D4C,$22A0277B,$20E69922,$2124F315,
$2A78B428,$2BBADE1F,$29FC6046,$283E0A71,$2D711CF4,$2CB376C3,$2EF5C89A,$2F37A2AD,
$709A8DC0,$7158E7F7,$731E59AE,$72DC3399,$7793251C,$76514F2B,$7417F172,$75D59B45,
$7E89DC78,$7F4BB64F,$7D0D0816,$7CCF6221,$798074A4,$78421E93,$7A04A0CA,$7BC6CAFD,
$6CBC2EB0,$6D7E4487,$6F38FADE,$6EFA90E9,$6BB5866C,$6A77EC5B,$68315202,$69F33835,
$62AF7F08,$636D153F,$612BAB66,$60E9C151,$65A6D7D4,$6464BDE3,$662203BA,$67E0698D,
$48D7CB20,$4915A117,$4B531F4E,$4A917579,$4FDE63FC,$4E1C09CB,$4C5AB792,$4D98DDA5,
$46C49A98,$4706F0AF,$45404EF6,$448224C1,$41CD3244,$400F5873,$4249E62A,$438B8C1D,
$54F16850,$55330267,$5775BC3E,$56B7D609,$53F8C08C,$523AAABB,$507C14E2,$51BE7ED5,
$5AE239E8,$5B2053DF,$5966ED86,$58A487B1,$5DEB9134,$5C29FB03,$5E6F455A,$5FAD2F6D,
$E1351B80,$E0F771B7,$E2B1CFEE,$E373A5D9,$E63CB35C,$E7FED96B,$E5B86732,$E47A0D05,
$EF264A38,$EEE4200F,$ECA29E56,$ED60F461,$E82FE2E4,$E9ED88D3,$EBAB368A,$EA695CBD,
$FD13B8F0,$FCD1D2C7,$FE976C9E,$FF5506A9,$FA1A102C,$FBD87A1B,$F99EC442,$F85CAE75,
$F300E948,$F2C2837F,$F0843D26,$F1465711,$F4094194,$F5CB2BA3,$F78D95FA,$F64FFFCD,
$D9785D60,$D8BA3757,$DAFC890E,$DB3EE339,$DE71F5BC,$DFB39F8B,$DDF521D2,$DC374BE5,
$D76B0CD8,$D6A966EF,$D4EFD8B6,$D52DB281,$D062A404,$D1A0CE33,$D3E6706A,$D2241A5D,
$C55EFE10,$C49C9427,$C6DA2A7E,$C7184049,$C25756CC,$C3953CFB,$C1D382A2,$C011E895,
$CB4DAFA8,$CA8FC59F,$C8C97BC6,$C90B11F1,$CC440774,$CD866D43,$CFC0D31A,$CE02B92D,
$91AF9640,$906DFC77,$922B422E,$93E92819,$96A63E9C,$976454AB,$9522EAF2,$94E080C5,
$9FBCC7F8,$9E7EADCF,$9C381396,$9DFA79A1,$98B56F24,$99770513,$9B31BB4A,$9AF3D17D,
$8D893530,$8C4B5F07,$8E0DE15E,$8FCF8B69,$8A809DEC,$8B42F7DB,$89044982,$88C623B5,
$839A6488,$82580EBF,$801EB0E6,$81DCDAD1,$8493CC54,$8551A663,$8717183A,$86D5720D,
$A9E2D0A0,$A820BA97,$AA6604CE,$ABA46EF9,$AEEB787C,$AF29124B,$AD6FAC12,$ACADC625,
$A7F18118,$A633EB2F,$A4755576,$A5B73F41,$A0F829C4,$A13A43F3,$A37CFDAA,$A2BE979D,
$B5C473D0,$B40619E7,$B640A7BE,$B782CD89,$B2CDDB0C,$B30FB13B,$B1490F62,$B08B6555,
$BBD72268,$BA15485F,$B853F606,$B9919C31,$BCDE8AB4,$BD1CE083,$BF5A5EDA,$BE9834ED
),
(
$00000000,$B8BC6765,$AA09C88B,$12B5AFEE,$8F629757,$37DEF032,$256B5FDC,$9DD738B9,
$C5B428EF,$7D084F8A,$6FBDE064,$D7018701,$4AD6BFB8,$F26AD8DD,$E0DF7733,$58631056,
$5019579F,$E8A530FA,$FA109F14,$42ACF871,$DF7BC0C8,$67C7A7AD,$75720843,$CDCE6F26,
$95AD7F70,$2D111815,$3FA4B7FB,$8718D09E,$1ACFE827,$A2738F42,$B0C620AC,$087A47C9,
$A032AF3E,$188EC85B,$0A3B67B5,$B28700D0,$2F503869,$97EC5F0C,$8559F0E2,$3DE59787,
$658687D1,$DD3AE0B4,$CF8F4F5A,$7733283F,$EAE41086,$525877E3,$40EDD80D,$F851BF68,
$F02BF8A1,$48979FC4,$5A22302A,$E29E574F,$7F496FF6,$C7F50893,$D540A77D,$6DFCC018,
$359FD04E,$8D23B72B,$9F9618C5,$272A7FA0,$BAFD4719,$0241207C,$10F48F92,$A848E8F7,
$9B14583D,$23A83F58,$311D90B6,$89A1F7D3,$1476CF6A,$ACCAA80F,$BE7F07E1,$06C36084,
$5EA070D2,$E61C17B7,$F4A9B859,$4C15DF3C,$D1C2E785,$697E80E0,$7BCB2F0E,$C377486B,
$CB0D0FA2,$73B168C7,$6104C729,$D9B8A04C,$446F98F5,$FCD3FF90,$EE66507E,$56DA371B,
$0EB9274D,$B6054028,$A4B0EFC6,$1C0C88A3,$81DBB01A,$3967D77F,$2BD27891,$936E1FF4,
$3B26F703,$839A9066,$912F3F88,$299358ED,$B4446054,$0CF80731,$1E4DA8DF,$A6F1CFBA,
$FE92DFEC,$462EB889,$549B1767,$EC277002,$71F048BB,$C94C2FDE,$DBF98030,$6345E755,
$6B3FA09C,$D383C7F9,$C1366817,$798A0F72,$E45D37CB,$5CE150AE,$4E54FF40,$F6E89825,
$AE8B8873,$1637EF16,$048240F8,$BC3E279D,$21E91F24,$99557841,$8BE0D7AF,$335CB0CA,
$ED59B63B,$55E5D15E,$47507EB0,$FFEC19D5,$623B216C,$DA874609,$C832E9E7,$708E8E82,
$28ED9ED4,$9051F9B1,$82E4565F,$3A58313A,$A78F0983,$1F336EE6,$0D86C108,$B53AA66D,
$BD40E1A4,$05FC86C1,$1749292F,$AFF54E4A,$322276F3,$8A9E1196,$982BBE78,$2097D91D,
$78F4C94B,$C048AE2E,$D2FD01C0,$6A4166A5,$F7965E1C,$4F2A3979,$5D9F9697,$E523F1F2,
$4D6B1905,$F5D77E60,$E762D18E,$5FDEB6EB,$C2098E52,$7AB5E937,$680046D9,$D0BC21BC,
$88DF31EA,$3063568F,$22D6F961,$9A6A9E04,$07BDA6BD,$BF01C1D8,$ADB46E36,$15080953,
$1D724E9A,$A5CE29FF,$B77B8611,$0FC7E174,$9210D9CD,$2AACBEA8,$38191146,$80A57623,
$D8C66675,$607A0110,$72CFAEFE,$CA73C99B,$57A4F122,$EF189647,$FDAD39A9,$45115ECC,
$764DEE06,$CEF18963,$DC44268D,$64F841E8,$F92F7951,$41931E34,$5326B1DA,$EB9AD6BF,
$B3F9C6E9,$0B45A18C,$19F00E62,$A14C6907,$3C9B51BE,$842736DB,$96929935,$2E2EFE50,
$2654B999,$9EE8DEFC,$8C5D7112,$34E11677,$A9362ECE,$118A49AB,$033FE645,$BB838120,
$E3E09176,$5B5CF613,$49E959FD,$F1553E98,$6C820621,$D43E6144,$C68BCEAA,$7E37A9CF,
$D67F4138,$6EC3265D,$7C7689B3,$C4CAEED6,$591DD66F,$E1A1B10A,$F3141EE4,$4BA87981,
$13CB69D7,$AB770EB2,$B9C2A15C,$017EC639,$9CA9FE80,$241599E5,$36A0360B,$8E1C516E,
$866616A7,$3EDA71C2,$2C6FDE2C,$94D3B949,$090481F0,$B1B8E695,$A30D497B,$1BB12E1E,
$43D23E48,$FB6E592D,$E9DBF6C3,$516791A6,$CCB0A91F,$740CCE7A,$66B96194,$DE0506F1
)
,(
$00000000,$3D6029B0,$7AC05360,$47A07AD0,$F580A6C0,$C8E08F70,$8F40F5A0,$B220DC10,
$30704BC1,$0D106271,$4AB018A1,$77D03111,$C5F0ED01,$F890C4B1,$BF30BE61,$825097D1,
$60E09782,$5D80BE32,$1A20C4E2,$2740ED52,$95603142,$A80018F2,$EFA06222,$D2C04B92,
$5090DC43,$6DF0F5F3,$2A508F23,$1730A693,$A5107A83,$98705333,$DFD029E3,$E2B00053,
$C1C12F04,$FCA106B4,$BB017C64,$866155D4,$344189C4,$0921A074,$4E81DAA4,$73E1F314,
$F1B164C5,$CCD14D75,$8B7137A5,$B6111E15,$0431C205,$3951EBB5,$7EF19165,$4391B8D5,
$A121B886,$9C419136,$DBE1EBE6,$E681C256,$54A11E46,$69C137F6,$2E614D26,$13016496,
$9151F347,$AC31DAF7,$EB91A027,$D6F18997,$64D15587,$59B17C37,$1E1106E7,$23712F57,
$58F35849,$659371F9,$22330B29,$1F532299,$AD73FE89,$9013D739,$D7B3ADE9,$EAD38459,
$68831388,$55E33A38,$124340E8,$2F236958,$9D03B548,$A0639CF8,$E7C3E628,$DAA3CF98,
$3813CFCB,$0573E67B,$42D39CAB,$7FB3B51B,$CD93690B,$F0F340BB,$B7533A6B,$8A3313DB,
$0863840A,$3503ADBA,$72A3D76A,$4FC3FEDA,$FDE322CA,$C0830B7A,$872371AA,$BA43581A,
$9932774D,$A4525EFD,$E3F2242D,$DE920D9D,$6CB2D18D,$51D2F83D,$167282ED,$2B12AB5D,
$A9423C8C,$9422153C,$D3826FEC,$EEE2465C,$5CC29A4C,$61A2B3FC,$2602C92C,$1B62E09C,
$F9D2E0CF,$C4B2C97F,$8312B3AF,$BE729A1F,$0C52460F,$31326FBF,$7692156F,$4BF23CDF,
$C9A2AB0E,$F4C282BE,$B362F86E,$8E02D1DE,$3C220DCE,$0142247E,$46E25EAE,$7B82771E,
$B1E6B092,$8C869922,$CB26E3F2,$F646CA42,$44661652,$79063FE2,$3EA64532,$03C66C82,
$8196FB53,$BCF6D2E3,$FB56A833,$C6368183,$74165D93,$49767423,$0ED60EF3,$33B62743,
$D1062710,$EC660EA0,$ABC67470,$96A65DC0,$248681D0,$19E6A860,$5E46D2B0,$6326FB00,
$E1766CD1,$DC164561,$9BB63FB1,$A6D61601,$14F6CA11,$2996E3A1,$6E369971,$5356B0C1,
$70279F96,$4D47B626,$0AE7CCF6,$3787E546,$85A73956,$B8C710E6,$FF676A36,$C2074386,
$4057D457,$7D37FDE7,$3A978737,$07F7AE87,$B5D77297,$88B75B27,$CF1721F7,$F2770847,
$10C70814,$2DA721A4,$6A075B74,$576772C4,$E547AED4,$D8278764,$9F87FDB4,$A2E7D404,
$20B743D5,$1DD76A65,$5A7710B5,$67173905,$D537E515,$E857CCA5,$AFF7B675,$92979FC5,
$E915E8DB,$D475C16B,$93D5BBBB,$AEB5920B,$1C954E1B,$21F567AB,$66551D7B,$5B3534CB,
$D965A31A,$E4058AAA,$A3A5F07A,$9EC5D9CA,$2CE505DA,$11852C6A,$562556BA,$6B457F0A,
$89F57F59,$B49556E9,$F3352C39,$CE550589,$7C75D999,$4115F029,$06B58AF9,$3BD5A349,
$B9853498,$84E51D28,$C34567F8,$FE254E48,$4C059258,$7165BBE8,$36C5C138,$0BA5E888,
$28D4C7DF,$15B4EE6F,$521494BF,$6F74BD0F,$DD54611F,$E03448AF,$A794327F,$9AF41BCF,
$18A48C1E,$25C4A5AE,$6264DF7E,$5F04F6CE,$ED242ADE,$D044036E,$97E479BE,$AA84500E,
$4834505D,$755479ED,$32F4033D,$0F942A8D,$BDB4F69D,$80D4DF2D,$C774A5FD,$FA148C4D,
$78441B9C,$4524322C,$028448FC,$3FE4614C,$8DC4BD5C,$B0A494EC,$F704EE3C,$CA64C78C
),
(
$00000000,$CB5CD3A5,$4DC8A10B,$869472AE,$9B914216,$50CD91B3,$D659E31D,$1D0530B8,
$EC53826D,$270F51C8,$A19B2366,$6AC7F0C3,$77C2C07B,$BC9E13DE,$3A0A6170,$F156B2D5,
$03D6029B,$C88AD13E,$4E1EA390,$85427035,$9847408D,$531B9328,$D58FE186,$1ED33223,
$EF8580F6,$24D95353,$A24D21FD,$6911F258,$7414C2E0,$BF481145,$39DC63EB,$F280B04E,
$07AC0536,$CCF0D693,$4A64A43D,$81387798,$9C3D4720,$57619485,$D1F5E62B,$1AA9358E,
$EBFF875B,$20A354FE,$A6372650,$6D6BF5F5,$706EC54D,$BB3216E8,$3DA66446,$F6FAB7E3,
$047A07AD,$CF26D408,$49B2A6A6,$82EE7503,$9FEB45BB,$54B7961E,$D223E4B0,$197F3715,
$E82985C0,$23755665,$A5E124CB,$6EBDF76E,$73B8C7D6,$B8E41473,$3E7066DD,$F52CB578,
$0F580A6C,$C404D9C9,$4290AB67,$89CC78C2,$94C9487A,$5F959BDF,$D901E971,$125D3AD4,
$E30B8801,$28575BA4,$AEC3290A,$659FFAAF,$789ACA17,$B3C619B2,$35526B1C,$FE0EB8B9,
$0C8E08F7,$C7D2DB52,$4146A9FC,$8A1A7A59,$971F4AE1,$5C439944,$DAD7EBEA,$118B384F,
$E0DD8A9A,$2B81593F,$AD152B91,$6649F834,$7B4CC88C,$B0101B29,$36846987,$FDD8BA22,
$08F40F5A,$C3A8DCFF,$453CAE51,$8E607DF4,$93654D4C,$58399EE9,$DEADEC47,$15F13FE2,
$E4A78D37,$2FFB5E92,$A96F2C3C,$6233FF99,$7F36CF21,$B46A1C84,$32FE6E2A,$F9A2BD8F,
$0B220DC1,$C07EDE64,$46EAACCA,$8DB67F6F,$90B34FD7,$5BEF9C72,$DD7BEEDC,$16273D79,
$E7718FAC,$2C2D5C09,$AAB92EA7,$61E5FD02,$7CE0CDBA,$B7BC1E1F,$31286CB1,$FA74BF14,
$1EB014D8,$D5ECC77D,$5378B5D3,$98246676,$852156CE,$4E7D856B,$C8E9F7C5,$03B52460,
$F2E396B5,$39BF4510,$BF2B37BE,$7477E41B,$6972D4A3,$A22E0706,$24BA75A8,$EFE6A60D,
$1D661643,$D63AC5E6,$50AEB748,$9BF264ED,$86F75455,$4DAB87F0,$CB3FF55E,$006326FB,
$F135942E,$3A69478B,$BCFD3525,$77A1E680,$6AA4D638,$A1F8059D,$276C7733,$EC30A496,
$191C11EE,$D240C24B,$54D4B0E5,$9F886340,$828D53F8,$49D1805D,$CF45F2F3,$04192156,
$F54F9383,$3E134026,$B8873288,$73DBE12D,$6EDED195,$A5820230,$2316709E,$E84AA33B,
$1ACA1375,$D196C0D0,$5702B27E,$9C5E61DB,$815B5163,$4A0782C6,$CC93F068,$07CF23CD,
$F6999118,$3DC542BD,$BB513013,$700DE3B6,$6D08D30E,$A65400AB,$20C07205,$EB9CA1A0,
$11E81EB4,$DAB4CD11,$5C20BFBF,$977C6C1A,$8A795CA2,$41258F07,$C7B1FDA9,$0CED2E0C,
$FDBB9CD9,$36E74F7C,$B0733DD2,$7B2FEE77,$662ADECF,$AD760D6A,$2BE27FC4,$E0BEAC61,
$123E1C2F,$D962CF8A,$5FF6BD24,$94AA6E81,$89AF5E39,$42F38D9C,$C467FF32,$0F3B2C97,
$FE6D9E42,$35314DE7,$B3A53F49,$78F9ECEC,$65FCDC54,$AEA00FF1,$28347D5F,$E368AEFA,
$16441B82,$DD18C827,$5B8CBA89,$90D0692C,$8DD55994,$46898A31,$C01DF89F,$0B412B3A,
$FA1799EF,$314B4A4A,$B7DF38E4,$7C83EB41,$6186DBF9,$AADA085C,$2C4E7AF2,$E712A957,
$15921919,$DECECABC,$585AB812,$93066BB7,$8E035B0F,$455F88AA,$C3CBFA04,$089729A1,
$F9C19B74,$329D48D1,$B4093A7F,$7F55E9DA,$6250D962,$A90C0AC7,$2F987869,$E4C4ABCC
),
(
$00000000,$A6770BB4,$979F1129,$31E81A9D,$F44F2413,$52382FA7,$63D0353A,$C5A73E8E,
$33EF4E67,$959845D3,$A4705F4E,$020754FA,$C7A06A74,$61D761C0,$503F7B5D,$F64870E9,
$67DE9CCE,$C1A9977A,$F0418DE7,$56368653,$9391B8DD,$35E6B369,$040EA9F4,$A279A240,
$5431D2A9,$F246D91D,$C3AEC380,$65D9C834,$A07EF6BA,$0609FD0E,$37E1E793,$9196EC27,
$CFBD399C,$69CA3228,$582228B5,$FE552301,$3BF21D8F,$9D85163B,$AC6D0CA6,$0A1A0712,
$FC5277FB,$5A257C4F,$6BCD66D2,$CDBA6D66,$081D53E8,$AE6A585C,$9F8242C1,$39F54975,
$A863A552,$0E14AEE6,$3FFCB47B,$998BBFCF,$5C2C8141,$FA5B8AF5,$CBB39068,$6DC49BDC,
$9B8CEB35,$3DFBE081,$0C13FA1C,$AA64F1A8,$6FC3CF26,$C9B4C492,$F85CDE0F,$5E2BD5BB,
$440B7579,$E27C7ECD,$D3946450,$75E36FE4,$B044516A,$16335ADE,$27DB4043,$81AC4BF7,
$77E43B1E,$D19330AA,$E07B2A37,$460C2183,$83AB1F0D,$25DC14B9,$14340E24,$B2430590,
$23D5E9B7,$85A2E203,$B44AF89E,$123DF32A,$D79ACDA4,$71EDC610,$4005DC8D,$E672D739,
$103AA7D0,$B64DAC64,$87A5B6F9,$21D2BD4D,$E47583C3,$42028877,$73EA92EA,$D59D995E,
$8BB64CE5,$2DC14751,$1C295DCC,$BA5E5678,$7FF968F6,$D98E6342,$E86679DF,$4E11726B,
$B8590282,$1E2E0936,$2FC613AB,$89B1181F,$4C162691,$EA612D25,$DB8937B8,$7DFE3C0C,
$EC68D02B,$4A1FDB9F,$7BF7C102,$DD80CAB6,$1827F438,$BE50FF8C,$8FB8E511,$29CFEEA5,
$DF879E4C,$79F095F8,$48188F65,$EE6F84D1,$2BC8BA5F,$8DBFB1EB,$BC57AB76,$1A20A0C2,
$8816EAF2,$2E61E146,$1F89FBDB,$B9FEF06F,$7C59CEE1,$DA2EC555,$EBC6DFC8,$4DB1D47C,
$BBF9A495,$1D8EAF21,$2C66B5BC,$8A11BE08,$4FB68086,$E9C18B32,$D82991AF,$7E5E9A1B,
$EFC8763C,$49BF7D88,$78576715,$DE206CA1,$1B87522F,$BDF0599B,$8C184306,$2A6F48B2,
$DC27385B,$7A5033EF,$4BB82972,$EDCF22C6,$28681C48,$8E1F17FC,$BFF70D61,$198006D5,
$47ABD36E,$E1DCD8DA,$D034C247,$7643C9F3,$B3E4F77D,$1593FCC9,$247BE654,$820CEDE0,
$74449D09,$D23396BD,$E3DB8C20,$45AC8794,$800BB91A,$267CB2AE,$1794A833,$B1E3A387,
$20754FA0,$86024414,$B7EA5E89,$119D553D,$D43A6BB3,$724D6007,$43A57A9A,$E5D2712E,
$139A01C7,$B5ED0A73,$840510EE,$22721B5A,$E7D525D4,$41A22E60,$704A34FD,$D63D3F49,
$CC1D9F8B,$6A6A943F,$5B828EA2,$FDF58516,$3852BB98,$9E25B02C,$AFCDAAB1,$09BAA105,
$FFF2D1EC,$5985DA58,$686DC0C5,$CE1ACB71,$0BBDF5FF,$ADCAFE4B,$9C22E4D6,$3A55EF62,
$ABC30345,$0DB408F1,$3C5C126C,$9A2B19D8,$5F8C2756,$F9FB2CE2,$C813367F,$6E643DCB,
$982C4D22,$3E5B4696,$0FB35C0B,$A9C457BF,$6C636931,$CA146285,$FBFC7818,$5D8B73AC,
$03A0A617,$A5D7ADA3,$943FB73E,$3248BC8A,$F7EF8204,$519889B0,$6070932D,$C6079899,
$304FE870,$9638E3C4,$A7D0F959,$01A7F2ED,$C400CC63,$6277C7D7,$539FDD4A,$F5E8D6FE,
$647E3AD9,$C209316D,$F3E12BF0,$55962044,$90311ECA,$3646157E,$07AE0FE3,$A1D90457,
$579174BE,$F1E67F0A,$C00E6597,$66796E23,$A3DE50AD,$05A95B19,$34414184,$92364A30
),
(
$00000000,$CCAA009E,$4225077D,$8E8F07E3,$844A0EFA,$48E00E64,$C66F0987,$0AC50919,
$D3E51BB5,$1F4F1B2B,$91C01CC8,$5D6A1C56,$57AF154F,$9B0515D1,$158A1232,$D92012AC,
$7CBB312B,$B01131B5,$3E9E3656,$F23436C8,$F8F13FD1,$345B3F4F,$BAD438AC,$767E3832,
$AF5E2A9E,$63F42A00,$ED7B2DE3,$21D12D7D,$2B142464,$E7BE24FA,$69312319,$A59B2387,
$F9766256,$35DC62C8,$BB53652B,$77F965B5,$7D3C6CAC,$B1966C32,$3F196BD1,$F3B36B4F,
$2A9379E3,$E639797D,$68B67E9E,$A41C7E00,$AED97719,$62737787,$ECFC7064,$205670FA,
$85CD537D,$496753E3,$C7E85400,$0B42549E,$01875D87,$CD2D5D19,$43A25AFA,$8F085A64,
$562848C8,$9A824856,$140D4FB5,$D8A74F2B,$D2624632,$1EC846AC,$9047414F,$5CED41D1,
$299DC2ED,$E537C273,$6BB8C590,$A712C50E,$ADD7CC17,$617DCC89,$EFF2CB6A,$2358CBF4,
$FA78D958,$36D2D9C6,$B85DDE25,$74F7DEBB,$7E32D7A2,$B298D73C,$3C17D0DF,$F0BDD041,
$5526F3C6,$998CF358,$1703F4BB,$DBA9F425,$D16CFD3C,$1DC6FDA2,$9349FA41,$5FE3FADF,
$86C3E873,$4A69E8ED,$C4E6EF0E,$084CEF90,$0289E689,$CE23E617,$40ACE1F4,$8C06E16A,
$D0EBA0BB,$1C41A025,$92CEA7C6,$5E64A758,$54A1AE41,$980BAEDF,$1684A93C,$DA2EA9A2,
$030EBB0E,$CFA4BB90,$412BBC73,$8D81BCED,$8744B5F4,$4BEEB56A,$C561B289,$09CBB217,
$AC509190,$60FA910E,$EE7596ED,$22DF9673,$281A9F6A,$E4B09FF4,$6A3F9817,$A6959889,
$7FB58A25,$B31F8ABB,$3D908D58,$F13A8DC6,$FBFF84DF,$37558441,$B9DA83A2,$7570833C,
$533B85DA,$9F918544,$111E82A7,$DDB48239,$D7718B20,$1BDB8BBE,$95548C5D,$59FE8CC3,
$80DE9E6F,$4C749EF1,$C2FB9912,$0E51998C,$04949095,$C83E900B,$46B197E8,$8A1B9776,
$2F80B4F1,$E32AB46F,$6DA5B38C,$A10FB312,$ABCABA0B,$6760BA95,$E9EFBD76,$2545BDE8,
$FC65AF44,$30CFAFDA,$BE40A839,$72EAA8A7,$782FA1BE,$B485A120,$3A0AA6C3,$F6A0A65D,
$AA4DE78C,$66E7E712,$E868E0F1,$24C2E06F,$2E07E976,$E2ADE9E8,$6C22EE0B,$A088EE95,
$79A8FC39,$B502FCA7,$3B8DFB44,$F727FBDA,$FDE2F2C3,$3148F25D,$BFC7F5BE,$736DF520,
$D6F6D6A7,$1A5CD639,$94D3D1DA,$5879D144,$52BCD85D,$9E16D8C3,$1099DF20,$DC33DFBE,
$0513CD12,$C9B9CD8C,$4736CA6F,$8B9CCAF1,$8159C3E8,$4DF3C376,$C37CC495,$0FD6C40B,
$7AA64737,$B60C47A9,$3883404A,$F42940D4,$FEEC49CD,$32464953,$BCC94EB0,$70634E2E,
$A9435C82,$65E95C1C,$EB665BFF,$27CC5B61,$2D095278,$E1A352E6,$6F2C5505,$A386559B,
$061D761C,$CAB77682,$44387161,$889271FF,$825778E6,$4EFD7878,$C0727F9B,$0CD87F05,
$D5F86DA9,$19526D37,$97DD6AD4,$5B776A4A,$51B26353,$9D1863CD,$1397642E,$DF3D64B0,
$83D02561,$4F7A25FF,$C1F5221C,$0D5F2282,$079A2B9B,$CB302B05,$45BF2CE6,$89152C78,
$50353ED4,$9C9F3E4A,$121039A9,$DEBA3937,$D47F302E,$18D530B0,$965A3753,$5AF037CD,
$FF6B144A,$33C114D4,$BD4E1337,$71E413A9,$7B211AB0,$B78B1A2E,$39041DCD,$F5AE1D53,
$2C8E0FFF,$E0240F61,$6EAB0882,$A201081C,$A8C40105,$646E019B,$EAE10678,$264B06E6
)
,(
$00000000,$177B1443,$2EF62886,$398D3CC5,$5DEC510C,$4A97454F,$731A798A,$64616DC9,
$BBD8A218,$ACA3B65B,$952E8A9E,$82559EDD,$E634F314,$F14FE757,$C8C2DB92,$DFB9CFD1,
$ACC04271,$BBBB5632,$82366AF7,$954D7EB4,$F12C137D,$E657073E,$DFDA3BFB,$C8A12FB8,
$1718E069,$0063F42A,$39EEC8EF,$2E95DCAC,$4AF4B165,$5D8FA526,$640299E3,$73798DA0,
$82F182A3,$958A96E0,$AC07AA25,$BB7CBE66,$DF1DD3AF,$C866C7EC,$F1EBFB29,$E690EF6A,
$392920BB,$2E5234F8,$17DF083D,$00A41C7E,$64C571B7,$73BE65F4,$4A335931,$5D484D72,
$2E31C0D2,$394AD491,$00C7E854,$17BCFC17,$73DD91DE,$64A6859D,$5D2BB958,$4A50AD1B,
$95E962CA,$82927689,$BB1F4A4C,$AC645E0F,$C80533C6,$DF7E2785,$E6F31B40,$F1880F03,
$DE920307,$C9E91744,$F0642B81,$E71F3FC2,$837E520B,$94054648,$AD887A8D,$BAF36ECE,
$654AA11F,$7231B55C,$4BBC8999,$5CC79DDA,$38A6F013,$2FDDE450,$1650D895,$012BCCD6,
$72524176,$65295535,$5CA469F0,$4BDF7DB3,$2FBE107A,$38C50439,$014838FC,$16332CBF,
$C98AE36E,$DEF1F72D,$E77CCBE8,$F007DFAB,$9466B262,$831DA621,$BA909AE4,$ADEB8EA7,
$5C6381A4,$4B1895E7,$7295A922,$65EEBD61,$018FD0A8,$16F4C4EB,$2F79F82E,$3802EC6D,
$E7BB23BC,$F0C037FF,$C94D0B3A,$DE361F79,$BA5772B0,$AD2C66F3,$94A15A36,$83DA4E75,
$F0A3C3D5,$E7D8D796,$DE55EB53,$C92EFF10,$AD4F92D9,$BA34869A,$83B9BA5F,$94C2AE1C,
$4B7B61CD,$5C00758E,$658D494B,$72F65D08,$169730C1,$01EC2482,$38611847,$2F1A0C04,
$6655004F,$712E140C,$48A328C9,$5FD83C8A,$3BB95143,$2CC24500,$154F79C5,$02346D86,
$DD8DA257,$CAF6B614,$F37B8AD1,$E4009E92,$8061F35B,$971AE718,$AE97DBDD,$B9ECCF9E,
$CA95423E,$DDEE567D,$E4636AB8,$F3187EFB,$97791332,$80020771,$B98F3BB4,$AEF42FF7,
$714DE026,$6636F465,$5FBBC8A0,$48C0DCE3,$2CA1B12A,$3BDAA569,$025799AC,$152C8DEF,
$E4A482EC,$F3DF96AF,$CA52AA6A,$DD29BE29,$B948D3E0,$AE33C7A3,$97BEFB66,$80C5EF25,
$5F7C20F4,$480734B7,$718A0872,$66F11C31,$029071F8,$15EB65BB,$2C66597E,$3B1D4D3D,
$4864C09D,$5F1FD4DE,$6692E81B,$71E9FC58,$15889191,$02F385D2,$3B7EB917,$2C05AD54,
$F3BC6285,$E4C776C6,$DD4A4A03,$CA315E40,$AE503389,$B92B27CA,$80A61B0F,$97DD0F4C,
$B8C70348,$AFBC170B,$96312BCE,$814A3F8D,$E52B5244,$F2504607,$CBDD7AC2,$DCA66E81,
$031FA150,$1464B513,$2DE989D6,$3A929D95,$5EF3F05C,$4988E41F,$7005D8DA,$677ECC99,
$14074139,$037C557A,$3AF169BF,$2D8A7DFC,$49EB1035,$5E900476,$671D38B3,$70662CF0,
$AFDFE321,$B8A4F762,$8129CBA7,$9652DFE4,$F233B22D,$E548A66E,$DCC59AAB,$CBBE8EE8,
$3A3681EB,$2D4D95A8,$14C0A96D,$03BBBD2E,$67DAD0E7,$70A1C4A4,$492CF861,$5E57EC22,
$81EE23F3,$969537B0,$AF180B75,$B8631F36,$DC0272FF,$CB7966BC,$F2F45A79,$E58F4E3A,
$96F6C39A,$818DD7D9,$B800EB1C,$AF7BFF5F,$CB1A9296,$DC6186D5,$E5ECBA10,$F297AE53,
$2D2E6182,$3A5575C1,$03D84904,$14A35D47,$70C2308E,$67B924CD,$5E341808,$494F0C4B
),
(
$00000000,$EFC26B3E,$04F5D03D,$EB37BB03,$09EBA07A,$E629CB44,$0D1E7047,$E2DC1B79,
$13D740F4,$FC152BCA,$172290C9,$F8E0FBF7,$1A3CE08E,$F5FE8BB0,$1EC930B3,$F10B5B8D,
$27AE81E8,$C86CEAD6,$235B51D5,$CC993AEB,$2E452192,$C1874AAC,$2AB0F1AF,$C5729A91,
$3479C11C,$DBBBAA22,$308C1121,$DF4E7A1F,$3D926166,$D2500A58,$3967B15B,$D6A5DA65,
$4F5D03D0,$A09F68EE,$4BA8D3ED,$A46AB8D3,$46B6A3AA,$A974C894,$42437397,$AD8118A9,
$5C8A4324,$B348281A,$587F9319,$B7BDF827,$5561E35E,$BAA38860,$51943363,$BE56585D,
$68F38238,$8731E906,$6C065205,$83C4393B,$61182242,$8EDA497C,$65EDF27F,$8A2F9941,
$7B24C2CC,$94E6A9F2,$7FD112F1,$901379CF,$72CF62B6,$9D0D0988,$763AB28B,$99F8D9B5,
$9EBA07A0,$71786C9E,$9A4FD79D,$758DBCA3,$9751A7DA,$7893CCE4,$93A477E7,$7C661CD9,
$8D6D4754,$62AF2C6A,$89989769,$665AFC57,$8486E72E,$6B448C10,$80733713,$6FB15C2D,
$B9148648,$56D6ED76,$BDE15675,$52233D4B,$B0FF2632,$5F3D4D0C,$B40AF60F,$5BC89D31,
$AAC3C6BC,$4501AD82,$AE361681,$41F47DBF,$A32866C6,$4CEA0DF8,$A7DDB6FB,$481FDDC5,
$D1E70470,$3E256F4E,$D512D44D,$3AD0BF73,$D80CA40A,$37CECF34,$DCF97437,$333B1F09,
$C2304484,$2DF22FBA,$C6C594B9,$2907FF87,$CBDBE4FE,$24198FC0,$CF2E34C3,$20EC5FFD,
$F6498598,$198BEEA6,$F2BC55A5,$1D7E3E9B,$FFA225E2,$10604EDC,$FB57F5DF,$14959EE1,
$E59EC56C,$0A5CAE52,$E16B1551,$0EA97E6F,$EC756516,$03B70E28,$E880B52B,$0742DE15,
$E6050901,$09C7623F,$E2F0D93C,$0D32B202,$EFEEA97B,$002CC245,$EB1B7946,$04D91278,
$F5D249F5,$1A1022CB,$F12799C8,$1EE5F2F6,$FC39E98F,$13FB82B1,$F8CC39B2,$170E528C,
$C1AB88E9,$2E69E3D7,$C55E58D4,$2A9C33EA,$C8402893,$278243AD,$CCB5F8AE,$23779390,
$D27CC81D,$3DBEA323,$D6891820,$394B731E,$DB976867,$34550359,$DF62B85A,$30A0D364,
$A9580AD1,$469A61EF,$ADADDAEC,$426FB1D2,$A0B3AAAB,$4F71C195,$A4467A96,$4B8411A8,
$BA8F4A25,$554D211B,$BE7A9A18,$51B8F126,$B364EA5F,$5CA68161,$B7913A62,$5853515C,
$8EF68B39,$6134E007,$8A035B04,$65C1303A,$871D2B43,$68DF407D,$83E8FB7E,$6C2A9040,
$9D21CBCD,$72E3A0F3,$99D41BF0,$761670CE,$94CA6BB7,$7B080089,$903FBB8A,$7FFDD0B4,
$78BF0EA1,$977D659F,$7C4ADE9C,$9388B5A2,$7154AEDB,$9E96C5E5,$75A17EE6,$9A6315D8,
$6B684E55,$84AA256B,$6F9D9E68,$805FF556,$6283EE2F,$8D418511,$66763E12,$89B4552C,
$5F118F49,$B0D3E477,$5BE45F74,$B426344A,$56FA2F33,$B938440D,$520FFF0E,$BDCD9430,
$4CC6CFBD,$A304A483,$48331F80,$A7F174BE,$452D6FC7,$AAEF04F9,$41D8BFFA,$AE1AD4C4,
$37E20D71,$D820664F,$3317DD4C,$DCD5B672,$3E09AD0B,$D1CBC635,$3AFC7D36,$D53E1608,
$24354D85,$CBF726BB,$20C09DB8,$CF02F686,$2DDEEDFF,$C21C86C1,$292B3DC2,$C6E956FC,
$104C8C99,$FF8EE7A7,$14B95CA4,$FB7B379A,$19A72CE3,$F66547DD,$1D52FCDE,$F29097E0,
$039BCC6D,$EC59A753,$076E1C50,$E8AC776E,$0A706C17,$E5B20729,$0E85BC2A,$E147D714
),
(
$00000000,$C18EDFC0,$586CB9C1,$99E26601,$B0D97382,$7157AC42,$E8B5CA43,$293B1583,
$BAC3E145,$7B4D3E85,$E2AF5884,$23218744,$0A1A92C7,$CB944D07,$52762B06,$93F8F4C6,
$AEF6C4CB,$6F781B0B,$F69A7D0A,$3714A2CA,$1E2FB749,$DFA16889,$46430E88,$87CDD148,
$1435258E,$D5BBFA4E,$4C599C4F,$8DD7438F,$A4EC560C,$656289CC,$FC80EFCD,$3D0E300D,
$869C8FD7,$47125017,$DEF03616,$1F7EE9D6,$3645FC55,$F7CB2395,$6E294594,$AFA79A54,
$3C5F6E92,$FDD1B152,$6433D753,$A5BD0893,$8C861D10,$4D08C2D0,$D4EAA4D1,$15647B11,
$286A4B1C,$E9E494DC,$7006F2DD,$B1882D1D,$98B3389E,$593DE75E,$C0DF815F,$01515E9F,
$92A9AA59,$53277599,$CAC51398,$0B4BCC58,$2270D9DB,$E3FE061B,$7A1C601A,$BB92BFDA,
$D64819EF,$17C6C62F,$8E24A02E,$4FAA7FEE,$66916A6D,$A71FB5AD,$3EFDD3AC,$FF730C6C,
$6C8BF8AA,$AD05276A,$34E7416B,$F5699EAB,$DC528B28,$1DDC54E8,$843E32E9,$45B0ED29,
$78BEDD24,$B93002E4,$20D264E5,$E15CBB25,$C867AEA6,$09E97166,$900B1767,$5185C8A7,
$C27D3C61,$03F3E3A1,$9A1185A0,$5B9F5A60,$72A44FE3,$B32A9023,$2AC8F622,$EB4629E2,
$50D49638,$915A49F8,$08B82FF9,$C936F039,$E00DE5BA,$21833A7A,$B8615C7B,$79EF83BB,
$EA17777D,$2B99A8BD,$B27BCEBC,$73F5117C,$5ACE04FF,$9B40DB3F,$02A2BD3E,$C32C62FE,
$FE2252F3,$3FAC8D33,$A64EEB32,$67C034F2,$4EFB2171,$8F75FEB1,$169798B0,$D7194770,
$44E1B3B6,$856F6C76,$1C8D0A77,$DD03D5B7,$F438C034,$35B61FF4,$AC5479F5,$6DDAA635,
$77E1359F,$B66FEA5F,$2F8D8C5E,$EE03539E,$C738461D,$06B699DD,$9F54FFDC,$5EDA201C,
$CD22D4DA,$0CAC0B1A,$954E6D1B,$54C0B2DB,$7DFBA758,$BC757898,$25971E99,$E419C159,
$D917F154,$18992E94,$817B4895,$40F59755,$69CE82D6,$A8405D16,$31A23B17,$F02CE4D7,
$63D41011,$A25ACFD1,$3BB8A9D0,$FA367610,$D30D6393,$1283BC53,$8B61DA52,$4AEF0592,
$F17DBA48,$30F36588,$A9110389,$689FDC49,$41A4C9CA,$802A160A,$19C8700B,$D846AFCB,
$4BBE5B0D,$8A3084CD,$13D2E2CC,$D25C3D0C,$FB67288F,$3AE9F74F,$A30B914E,$62854E8E,
$5F8B7E83,$9E05A143,$07E7C742,$C6691882,$EF520D01,$2EDCD2C1,$B73EB4C0,$76B06B00,
$E5489FC6,$24C64006,$BD242607,$7CAAF9C7,$5591EC44,$941F3384,$0DFD5585,$CC738A45,
$A1A92C70,$6027F3B0,$F9C595B1,$384B4A71,$11705FF2,$D0FE8032,$491CE633,$889239F3,
$1B6ACD35,$DAE412F5,$430674F4,$8288AB34,$ABB3BEB7,$6A3D6177,$F3DF0776,$3251D8B6,
$0F5FE8BB,$CED1377B,$5733517A,$96BD8EBA,$BF869B39,$7E0844F9,$E7EA22F8,$2664FD38,
$B59C09FE,$7412D63E,$EDF0B03F,$2C7E6FFF,$05457A7C,$C4CBA5BC,$5D29C3BD,$9CA71C7D,
$2735A3A7,$E6BB7C67,$7F591A66,$BED7C5A6,$97ECD025,$56620FE5,$CF8069E4,$0E0EB624,
$9DF642E2,$5C789D22,$C59AFB23,$041424E3,$2D2F3160,$ECA1EEA0,$754388A1,$B4CD5761,
$89C3676C,$484DB8AC,$D1AFDEAD,$1021016D,$391A14EE,$F894CB2E,$6176AD2F,$A0F872EF,
$33008629,$F28E59E9,$6B6C3FE8,$AAE2E028,$83D9F5AB,$42572A6B,$DBB54C6A,$1A3B93AA
),
(
$00000000,$9BA54C6F,$EC3B9E9F,$779ED2F0,$03063B7F,$98A37710,$EF3DA5E0,$7498E98F,
$060C76FE,$9DA93A91,$EA37E861,$7192A40E,$050A4D81,$9EAF01EE,$E931D31E,$72949F71,
$0C18EDFC,$97BDA193,$E0237363,$7B863F0C,$0F1ED683,$94BB9AEC,$E325481C,$78800473,
$0A149B02,$91B1D76D,$E62F059D,$7D8A49F2,$0912A07D,$92B7EC12,$E5293EE2,$7E8C728D,
$1831DBF8,$83949797,$F40A4567,$6FAF0908,$1B37E087,$8092ACE8,$F70C7E18,$6CA93277,
$1E3DAD06,$8598E169,$F2063399,$69A37FF6,$1D3B9679,$869EDA16,$F10008E6,$6AA54489,
$14293604,$8F8C7A6B,$F812A89B,$63B7E4F4,$172F0D7B,$8C8A4114,$FB1493E4,$60B1DF8B,
$122540FA,$89800C95,$FE1EDE65,$65BB920A,$11237B85,$8A8637EA,$FD18E51A,$66BDA975,
$3063B7F0,$ABC6FB9F,$DC58296F,$47FD6500,$33658C8F,$A8C0C0E0,$DF5E1210,$44FB5E7F,
$366FC10E,$ADCA8D61,$DA545F91,$41F113FE,$3569FA71,$AECCB61E,$D95264EE,$42F72881,
$3C7B5A0C,$A7DE1663,$D040C493,$4BE588FC,$3F7D6173,$A4D82D1C,$D346FFEC,$48E3B383,
$3A772CF2,$A1D2609D,$D64CB26D,$4DE9FE02,$3971178D,$A2D45BE2,$D54A8912,$4EEFC57D,
$28526C08,$B3F72067,$C469F297,$5FCCBEF8,$2B545777,$B0F11B18,$C76FC9E8,$5CCA8587,
$2E5E1AF6,$B5FB5699,$C2658469,$59C0C806,$2D582189,$B6FD6DE6,$C163BF16,$5AC6F379,
$244A81F4,$BFEFCD9B,$C8711F6B,$53D45304,$274CBA8B,$BCE9F6E4,$CB772414,$50D2687B,
$2246F70A,$B9E3BB65,$CE7D6995,$55D825FA,$2140CC75,$BAE5801A,$CD7B52EA,$56DE1E85,
$60C76FE0,$FB62238F,$8CFCF17F,$1759BD10,$63C1549F,$F86418F0,$8FFACA00,$145F866F,
$66CB191E,$FD6E5571,$8AF08781,$1155CBEE,$65CD2261,$FE686E0E,$89F6BCFE,$1253F091,
$6CDF821C,$F77ACE73,$80E41C83,$1B4150EC,$6FD9B963,$F47CF50C,$83E227FC,$18476B93,
$6AD3F4E2,$F176B88D,$86E86A7D,$1D4D2612,$69D5CF9D,$F27083F2,$85EE5102,$1E4B1D6D,
$78F6B418,$E353F877,$94CD2A87,$0F6866E8,$7BF08F67,$E055C308,$97CB11F8,$0C6E5D97,
$7EFAC2E6,$E55F8E89,$92C15C79,$09641016,$7DFCF999,$E659B5F6,$91C76706,$0A622B69,
$74EE59E4,$EF4B158B,$98D5C77B,$03708B14,$77E8629B,$EC4D2EF4,$9BD3FC04,$0076B06B,
$72E22F1A,$E9476375,$9ED9B185,$057CFDEA,$71E41465,$EA41580A,$9DDF8AFA,$067AC695,
$50A4D810,$CB01947F,$BC9F468F,$273A0AE0,$53A2E36F,$C807AF00,$BF997DF0,$243C319F,
$56A8AEEE,$CD0DE281,$BA933071,$21367C1E,$55AE9591,$CE0BD9FE,$B9950B0E,$22304761,
$5CBC35EC,$C7197983,$B087AB73,$2B22E71C,$5FBA0E93,$C41F42FC,$B381900C,$2824DC63,
$5AB04312,$C1150F7D,$B68BDD8D,$2D2E91E2,$59B6786D,$C2133402,$B58DE6F2,$2E28AA9D,
$489503E8,$D3304F87,$A4AE9D77,$3F0BD118,$4B933897,$D03674F8,$A7A8A608,$3C0DEA67,
$4E997516,$D53C3979,$A2A2EB89,$3907A7E6,$4D9F4E69,$D63A0206,$A1A4D0F6,$3A019C99,
$448DEE14,$DF28A27B,$A8B6708B,$33133CE4,$478BD56B,$DC2E9904,$ABB04BF4,$3015079B,
$428198EA,$D924D485,$AEBA0675,$351F4A1A,$4187A395,$DA22EFFA,$ADBC3D0A,$36197165
),
(
$00000000,$DD96D985,$605CB54B,$BDCA6CCE,$C0B96A96,$1D2FB313,$A0E5DFDD,$7D730658,
$5A03D36D,$87950AE8,$3A5F6626,$E7C9BFA3,$9ABAB9FB,$472C607E,$FAE60CB0,$2770D535,
$B407A6DA,$69917F5F,$D45B1391,$09CDCA14,$74BECC4C,$A92815C9,$14E27907,$C974A082,
$EE0475B7,$3392AC32,$8E58C0FC,$53CE1979,$2EBD1F21,$F32BC6A4,$4EE1AA6A,$937773EF,
$B37E4BF5,$6EE89270,$D322FEBE,$0EB4273B,$73C72163,$AE51F8E6,$139B9428,$CE0D4DAD,
$E97D9898,$34EB411D,$89212DD3,$54B7F456,$29C4F20E,$F4522B8B,$49984745,$940E9EC0,
$0779ED2F,$DAEF34AA,$67255864,$BAB381E1,$C7C087B9,$1A565E3C,$A79C32F2,$7A0AEB77,
$5D7A3E42,$80ECE7C7,$3D268B09,$E0B0528C,$9DC354D4,$40558D51,$FD9FE19F,$2009381A,
$BD8D91AB,$601B482E,$DDD124E0,$0047FD65,$7D34FB3D,$A0A222B8,$1D684E76,$C0FE97F3,
$E78E42C6,$3A189B43,$87D2F78D,$5A442E08,$27372850,$FAA1F1D5,$476B9D1B,$9AFD449E,
$098A3771,$D41CEEF4,$69D6823A,$B4405BBF,$C9335DE7,$14A58462,$A96FE8AC,$74F93129,
$5389E41C,$8E1F3D99,$33D55157,$EE4388D2,$93308E8A,$4EA6570F,$F36C3BC1,$2EFAE244,
$0EF3DA5E,$D36503DB,$6EAF6F15,$B339B690,$CE4AB0C8,$13DC694D,$AE160583,$7380DC06,
$54F00933,$8966D0B6,$34ACBC78,$E93A65FD,$944963A5,$49DFBA20,$F415D6EE,$29830F6B,
$BAF47C84,$6762A501,$DAA8C9CF,$073E104A,$7A4D1612,$A7DBCF97,$1A11A359,$C7877ADC,
$E0F7AFE9,$3D61766C,$80AB1AA2,$5D3DC327,$204EC57F,$FDD81CFA,$40127034,$9D84A9B1,
$A06A2517,$7DFCFC92,$C036905C,$1DA049D9,$60D34F81,$BD459604,$008FFACA,$DD19234F,
$FA69F67A,$27FF2FFF,$9A354331,$47A39AB4,$3AD09CEC,$E7464569,$5A8C29A7,$871AF022,
$146D83CD,$C9FB5A48,$74313686,$A9A7EF03,$D4D4E95B,$094230DE,$B4885C10,$691E8595,
$4E6E50A0,$93F88925,$2E32E5EB,$F3A43C6E,$8ED73A36,$5341E3B3,$EE8B8F7D,$331D56F8,
$13146EE2,$CE82B767,$7348DBA9,$AEDE022C,$D3AD0474,$0E3BDDF1,$B3F1B13F,$6E6768BA,
$4917BD8F,$9481640A,$294B08C4,$F4DDD141,$89AED719,$54380E9C,$E9F26252,$3464BBD7,
$A713C838,$7A8511BD,$C74F7D73,$1AD9A4F6,$67AAA2AE,$BA3C7B2B,$07F617E5,$DA60CE60,
$FD101B55,$2086C2D0,$9D4CAE1E,$40DA779B,$3DA971C3,$E03FA846,$5DF5C488,$80631D0D,
$1DE7B4BC,$C0716D39,$7DBB01F7,$A02DD872,$DD5EDE2A,$00C807AF,$BD026B61,$6094B2E4,
$47E467D1,$9A72BE54,$27B8D29A,$FA2E0B1F,$875D0D47,$5ACBD4C2,$E701B80C,$3A976189,
$A9E01266,$7476CBE3,$C9BCA72D,$142A7EA8,$695978F0,$B4CFA175,$0905CDBB,$D493143E,
$F3E3C10B,$2E75188E,$93BF7440,$4E29ADC5,$335AAB9D,$EECC7218,$53061ED6,$8E90C753,
$AE99FF49,$730F26CC,$CEC54A02,$13539387,$6E2095DF,$B3B64C5A,$0E7C2094,$D3EAF911,
$F49A2C24,$290CF5A1,$94C6996F,$495040EA,$342346B2,$E9B59F37,$547FF3F9,$89E92A7C,
$1A9E5993,$C7088016,$7AC2ECD8,$A754355D,$DA273305,$07B1EA80,$BA7B864E,$67ED5FCB,
$409D8AFE,$9D0B537B,$20C13FB5,$FD57E630,$8024E068,$5DB239ED,$E0785523,$3DEE8CA6
),
(
$00000000,$9D0FE176,$E16EC4AD,$7C6125DB,$19AC8F1B,$84A36E6D,$F8C24BB6,$65CDAAC0,
$33591E36,$AE56FF40,$D237DA9B,$4F383BED,$2AF5912D,$B7FA705B,$CB9B5580,$5694B4F6,
$66B23C6C,$FBBDDD1A,$87DCF8C1,$1AD319B7,$7F1EB377,$E2115201,$9E7077DA,$037F96AC,
$55EB225A,$C8E4C32C,$B485E6F7,$298A0781,$4C47AD41,$D1484C37,$AD2969EC,$3026889A,
$CD6478D8,$506B99AE,$2C0ABC75,$B1055D03,$D4C8F7C3,$49C716B5,$35A6336E,$A8A9D218,
$FE3D66EE,$63328798,$1F53A243,$825C4335,$E791E9F5,$7A9E0883,$06FF2D58,$9BF0CC2E,
$ABD644B4,$36D9A5C2,$4AB88019,$D7B7616F,$B27ACBAF,$2F752AD9,$53140F02,$CE1BEE74,
$988F5A82,$0580BBF4,$79E19E2F,$E4EE7F59,$8123D599,$1C2C34EF,$604D1134,$FD42F042,
$41B9F7F1,$DCB61687,$A0D7335C,$3DD8D22A,$581578EA,$C51A999C,$B97BBC47,$24745D31,
$72E0E9C7,$EFEF08B1,$938E2D6A,$0E81CC1C,$6B4C66DC,$F64387AA,$8A22A271,$172D4307,
$270BCB9D,$BA042AEB,$C6650F30,$5B6AEE46,$3EA74486,$A3A8A5F0,$DFC9802B,$42C6615D,
$1452D5AB,$895D34DD,$F53C1106,$6833F070,$0DFE5AB0,$90F1BBC6,$EC909E1D,$719F7F6B,
$8CDD8F29,$11D26E5F,$6DB34B84,$F0BCAAF2,$95710032,$087EE144,$741FC49F,$E91025E9,
$BF84911F,$228B7069,$5EEA55B2,$C3E5B4C4,$A6281E04,$3B27FF72,$4746DAA9,$DA493BDF,
$EA6FB345,$77605233,$0B0177E8,$960E969E,$F3C33C5E,$6ECCDD28,$12ADF8F3,$8FA21985,
$D936AD73,$44394C05,$385869DE,$A55788A8,$C09A2268,$5D95C31E,$21F4E6C5,$BCFB07B3,
$8373EFE2,$1E7C0E94,$621D2B4F,$FF12CA39,$9ADF60F9,$07D0818F,$7BB1A454,$E6BE4522,
$B02AF1D4,$2D2510A2,$51443579,$CC4BD40F,$A9867ECF,$34899FB9,$48E8BA62,$D5E75B14,
$E5C1D38E,$78CE32F8,$04AF1723,$99A0F655,$FC6D5C95,$6162BDE3,$1D039838,$800C794E,
$D698CDB8,$4B972CCE,$37F60915,$AAF9E863,$CF3442A3,$523BA3D5,$2E5A860E,$B3556778,
$4E17973A,$D318764C,$AF795397,$3276B2E1,$57BB1821,$CAB4F957,$B6D5DC8C,$2BDA3DFA,
$7D4E890C,$E041687A,$9C204DA1,$012FACD7,$64E20617,$F9EDE761,$858CC2BA,$188323CC,
$28A5AB56,$B5AA4A20,$C9CB6FFB,$54C48E8D,$3109244D,$AC06C53B,$D067E0E0,$4D680196,
$1BFCB560,$86F35416,$FA9271CD,$679D90BB,$02503A7B,$9F5FDB0D,$E33EFED6,$7E311FA0,
$C2CA1813,$5FC5F965,$23A4DCBE,$BEAB3DC8,$DB669708,$4669767E,$3A0853A5,$A707B2D3,
$F1930625,$6C9CE753,$10FDC288,$8DF223FE,$E83F893E,$75306848,$09514D93,$945EACE5,
$A478247F,$3977C509,$4516E0D2,$D81901A4,$BDD4AB64,$20DB4A12,$5CBA6FC9,$C1B58EBF,
$97213A49,$0A2EDB3F,$764FFEE4,$EB401F92,$8E8DB552,$13825424,$6FE371FF,$F2EC9089,
$0FAE60CB,$92A181BD,$EEC0A466,$73CF4510,$1602EFD0,$8B0D0EA6,$F76C2B7D,$6A63CA0B,
$3CF77EFD,$A1F89F8B,$DD99BA50,$40965B26,$255BF1E6,$B8541090,$C435354B,$593AD43D,
$691C5CA7,$F413BDD1,$8872980A,$157D797C,$70B0D3BC,$EDBF32CA,$91DE1711,$0CD1F667,
$5A454291,$C74AA3E7,$BB2B863C,$2624674A,$43E9CD8A,$DEE62CFC,$A2870927,$3F88E851
),
(
$00000000,$B9FBDBE8,$A886B191,$117D6A79,$8A7C6563,$3387BE8B,$22FAD4F2,$9B010F1A,
$CF89CC87,$7672176F,$670F7D16,$DEF4A6FE,$45F5A9E4,$FC0E720C,$ED731875,$5488C39D,
$44629F4F,$FD9944A7,$ECE42EDE,$551FF536,$CE1EFA2C,$77E521C4,$66984BBD,$DF639055,
$8BEB53C8,$32108820,$236DE259,$9A9639B1,$019736AB,$B86CED43,$A911873A,$10EA5CD2,
$88C53E9E,$313EE576,$20438F0F,$99B854E7,$02B95BFD,$BB428015,$AA3FEA6C,$13C43184,
$474CF219,$FEB729F1,$EFCA4388,$56319860,$CD30977A,$74CB4C92,$65B626EB,$DC4DFD03,
$CCA7A1D1,$755C7A39,$64211040,$DDDACBA8,$46DBC4B2,$FF201F5A,$EE5D7523,$57A6AECB,
$032E6D56,$BAD5B6BE,$ABA8DCC7,$1253072F,$89520835,$30A9D3DD,$21D4B9A4,$982F624C,
$CAFB7B7D,$7300A095,$627DCAEC,$DB861104,$40871E1E,$F97CC5F6,$E801AF8F,$51FA7467,
$0572B7FA,$BC896C12,$ADF4066B,$140FDD83,$8F0ED299,$36F50971,$27886308,$9E73B8E0,
$8E99E432,$37623FDA,$261F55A3,$9FE48E4B,$04E58151,$BD1E5AB9,$AC6330C0,$1598EB28,
$411028B5,$F8EBF35D,$E9969924,$506D42CC,$CB6C4DD6,$7297963E,$63EAFC47,$DA1127AF,
$423E45E3,$FBC59E0B,$EAB8F472,$53432F9A,$C8422080,$71B9FB68,$60C49111,$D93F4AF9,
$8DB78964,$344C528C,$253138F5,$9CCAE31D,$07CBEC07,$BE3037EF,$AF4D5D96,$16B6867E,
$065CDAAC,$BFA70144,$AEDA6B3D,$1721B0D5,$8C20BFCF,$35DB6427,$24A60E5E,$9D5DD5B6,
$C9D5162B,$702ECDC3,$6153A7BA,$D8A87C52,$43A97348,$FA52A8A0,$EB2FC2D9,$52D41931,
$4E87F0BB,$F77C2B53,$E601412A,$5FFA9AC2,$C4FB95D8,$7D004E30,$6C7D2449,$D586FFA1,
$810E3C3C,$38F5E7D4,$29888DAD,$90735645,$0B72595F,$B28982B7,$A3F4E8CE,$1A0F3326,
$0AE56FF4,$B31EB41C,$A263DE65,$1B98058D,$80990A97,$3962D17F,$281FBB06,$91E460EE,
$C56CA373,$7C97789B,$6DEA12E2,$D411C90A,$4F10C610,$F6EB1DF8,$E7967781,$5E6DAC69,
$C642CE25,$7FB915CD,$6EC47FB4,$D73FA45C,$4C3EAB46,$F5C570AE,$E4B81AD7,$5D43C13F,
$09CB02A2,$B030D94A,$A14DB333,$18B668DB,$83B767C1,$3A4CBC29,$2B31D650,$92CA0DB8,
$8220516A,$3BDB8A82,$2AA6E0FB,$935D3B13,$085C3409,$B1A7EFE1,$A0DA8598,$19215E70,
$4DA99DED,$F4524605,$E52F2C7C,$5CD4F794,$C7D5F88E,$7E2E2366,$6F53491F,$D6A892F7,
$847C8BC6,$3D87502E,$2CFA3A57,$9501E1BF,$0E00EEA5,$B7FB354D,$A6865F34,$1F7D84DC,
$4BF54741,$F20E9CA9,$E373F6D0,$5A882D38,$C1892222,$7872F9CA,$690F93B3,$D0F4485B,
$C01E1489,$79E5CF61,$6898A518,$D1637EF0,$4A6271EA,$F399AA02,$E2E4C07B,$5B1F1B93,
$0F97D80E,$B66C03E6,$A711699F,$1EEAB277,$85EBBD6D,$3C106685,$2D6D0CFC,$9496D714,
$0CB9B558,$B5426EB0,$A43F04C9,$1DC4DF21,$86C5D03B,$3F3E0BD3,$2E4361AA,$97B8BA42,
$C33079DF,$7ACBA237,$6BB6C84E,$D24D13A6,$494C1CBC,$F0B7C754,$E1CAAD2D,$583176C5,
$48DB2A17,$F120F1FF,$E05D9B86,$59A6406E,$C2A74F74,$7B5C949C,$6A21FEE5,$D3DA250D,
$8752E690,$3EA93D78,$2FD45701,$962F8CE9,$0D2E83F3,$B4D5581B,$A5A83262,$1C53E98A
),
(
$00000000,$AE689191,$87A02563,$29C8B4F2,$D4314C87,$7A59DD16,$539169E4,$FDF9F875,
$73139F4F,$DD7B0EDE,$F4B3BA2C,$5ADB2BBD,$A722D3C8,$094A4259,$2082F6AB,$8EEA673A,
$E6273E9E,$484FAF0F,$61871BFD,$CFEF8A6C,$32167219,$9C7EE388,$B5B6577A,$1BDEC6EB,
$9534A1D1,$3B5C3040,$129484B2,$BCFC1523,$4105ED56,$EF6D7CC7,$C6A5C835,$68CD59A4,
$173F7B7D,$B957EAEC,$909F5E1E,$3EF7CF8F,$C30E37FA,$6D66A66B,$44AE1299,$EAC68308,
$642CE432,$CA4475A3,$E38CC151,$4DE450C0,$B01DA8B5,$1E753924,$37BD8DD6,$99D51C47,
$F11845E3,$5F70D472,$76B86080,$D8D0F111,$25290964,$8B4198F5,$A2892C07,$0CE1BD96,
$820BDAAC,$2C634B3D,$05ABFFCF,$ABC36E5E,$563A962B,$F85207BA,$D19AB348,$7FF222D9,
$2E7EF6FA,$8016676B,$A9DED399,$07B64208,$FA4FBA7D,$54272BEC,$7DEF9F1E,$D3870E8F,
$5D6D69B5,$F305F824,$DACD4CD6,$74A5DD47,$895C2532,$2734B4A3,$0EFC0051,$A09491C0,
$C859C864,$663159F5,$4FF9ED07,$E1917C96,$1C6884E3,$B2001572,$9BC8A180,$35A03011,
$BB4A572B,$1522C6BA,$3CEA7248,$9282E3D9,$6F7B1BAC,$C1138A3D,$E8DB3ECF,$46B3AF5E,
$39418D87,$97291C16,$BEE1A8E4,$10893975,$ED70C100,$43185091,$6AD0E463,$C4B875F2,
$4A5212C8,$E43A8359,$CDF237AB,$639AA63A,$9E635E4F,$300BCFDE,$19C37B2C,$B7ABEABD,
$DF66B319,$710E2288,$58C6967A,$F6AE07EB,$0B57FF9E,$A53F6E0F,$8CF7DAFD,$229F4B6C,
$AC752C56,$021DBDC7,$2BD50935,$85BD98A4,$784460D1,$D62CF140,$FFE445B2,$518CD423,
$5CFDEDF4,$F2957C65,$DB5DC897,$75355906,$88CCA173,$26A430E2,$0F6C8410,$A1041581,
$2FEE72BB,$8186E32A,$A84E57D8,$0626C649,$FBDF3E3C,$55B7AFAD,$7C7F1B5F,$D2178ACE,
$BADAD36A,$14B242FB,$3D7AF609,$93126798,$6EEB9FED,$C0830E7C,$E94BBA8E,$47232B1F,
$C9C94C25,$67A1DDB4,$4E696946,$E001F8D7,$1DF800A2,$B3909133,$9A5825C1,$3430B450,
$4BC29689,$E5AA0718,$CC62B3EA,$620A227B,$9FF3DA0E,$319B4B9F,$1853FF6D,$B63B6EFC,
$38D109C6,$96B99857,$BF712CA5,$1119BD34,$ECE04541,$4288D4D0,$6B406022,$C528F1B3,
$ADE5A817,$038D3986,$2A458D74,$842D1CE5,$79D4E490,$D7BC7501,$FE74C1F3,$501C5062,
$DEF63758,$709EA6C9,$5956123B,$F73E83AA,$0AC77BDF,$A4AFEA4E,$8D675EBC,$230FCF2D,
$72831B0E,$DCEB8A9F,$F5233E6D,$5B4BAFFC,$A6B25789,$08DAC618,$211272EA,$8F7AE37B,
$01908441,$AFF815D0,$8630A122,$285830B3,$D5A1C8C6,$7BC95957,$5201EDA5,$FC697C34,
$94A42590,$3ACCB401,$130400F3,$BD6C9162,$40956917,$EEFDF886,$C7354C74,$695DDDE5,
$E7B7BADF,$49DF2B4E,$60179FBC,$CE7F0E2D,$3386F658,$9DEE67C9,$B426D33B,$1A4E42AA,
$65BC6073,$CBD4F1E2,$E21C4510,$4C74D481,$B18D2CF4,$1FE5BD65,$362D0997,$98459806,
$16AFFF3C,$B8C76EAD,$910FDA5F,$3F674BCE,$C29EB3BB,$6CF6222A,$453E96D8,$EB560749,
$839B5EED,$2DF3CF7C,$043B7B8E,$AA53EA1F,$57AA126A,$F9C283FB,$D00A3709,$7E62A698,
$F088C1A2,$5EE05033,$7728E4C1,$D9407550,$24B98D25,$8AD11CB4,$A319A846,$0D7139D7
)
);
/// compute CRC32 (Slicing-by-16 algorithm)
function crc32_16bytes(const data: PByte; length: Integer; previousCrc32: Cardinal = 0): Cardinal;

View file

@ -99,7 +99,6 @@ end;
procedure TDCP_crc32.Init;
begin
Burn;
crc32_init;
CurrentHash:= 0;
fInitialized:= true;
end;

View file

@ -68,7 +68,7 @@ implementation
uses
{$IF DEFINED(UNIX)}
iconvenc_dyn
iconvenc_dyn, LazUTF8
{$IF DEFINED(DARWIN)}
, MacOSAll, CocoaAll
{$ELSE}
@ -165,9 +165,11 @@ begin
L:= Length(Source);
if L = 0 then Exit('');
SetLength(Result, L + 1);
L:= Utf8ToUnicode(PUnicodeChar(Result), L + 1, PAnsiChar(Source), L);
if L > 0 then
SetLength(Result, L - 1)
if (ConvertUTF8ToUTF16(PUnicodeChar(Result), L + 1, PAnsiChar(Source), L,
[toInvalidCharToSymbol], L) = trNoError) then
begin
SetLength(Result, L - 1);
end
else begin
SetLength(Result, 0);
end;
@ -194,9 +196,11 @@ begin
L:= Length(Source);
if (L = 0) then Exit('');
SetLength(Result, L * 3);
L:= UnicodeToUtf8(PAnsiChar(Result), Length(Result) + 1, PUnicodeChar(Source), L);
if L > 0 then
SetLength(Result, L - 1)
if (ConvertUTF16ToUTF8(PAnsiChar(Result), Length(Result) + 1, PUnicodeChar(Source), L,
[toInvalidCharToSymbol], L) = trNoError) then
begin
SetLength(Result, L - 1);
end
else begin
SetLength(Result, 0);
end;
@ -282,7 +286,7 @@ var
UnicodeResult: UnicodeString;
begin
if CeTryDecode(Source, CP_OEMCP, UnicodeResult) then
Result:= UTF8Encode(UnicodeResult)
Result:= CeUtf16ToUtf8(UnicodeResult)
else
Result:= Source;
end;
@ -291,7 +295,7 @@ function Utf82Oem(const Source: String): RawByteString;
var
AnsiResult: AnsiString;
begin
if CeTryEncode(UTF8Decode(Source), CP_OEMCP, False, AnsiResult) then
if CeTryEncode(CeUtf8ToUtf16(Source), CP_OEMCP, False, AnsiResult) then
Result:= AnsiResult
else
Result:= Source;

View file

@ -4,7 +4,7 @@
Date and time functions.
Copyright (C) 2009-2012 Przemysław Nagay (cobines@gmail.com)
Copyright (C) 2017-2018 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2017-2022 Alexander Koblov (alexx2000@mail.ru)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -31,7 +31,7 @@ uses
{$IF DEFINED(MSWINDOWS)}
, Windows
{$ELSEIF DEFINED(UNIX)}
, UnixUtil, DCUnix
, Unix, UnixUtil, DCUnix
{$ENDIF}
;
@ -464,6 +464,7 @@ end;
function DateTimeToUnixFileTime(DateTime : TDateTime): TUnixFileTime;
{$IF DEFINED(UNIX)}
var
AUnixTime: TTime;
ATime: TTimeStruct;
Year, Month, Day: Word;
Hour, Minute, Second, MilliSecond: Word;
@ -484,10 +485,13 @@ begin
ATime.tm_min:= Minute;
ATime.tm_sec:= Second;
Result:= fpMkTime(@ATime);
AUnixTime:= fpMkTime(@ATime);
if Result = DCBasicTypes.TFileTime(-1) then
raise EDateOutOfRange.Create(DateTime)
if (AUnixTime < 0) then
Result:= 0
else begin
Result:= TUnixFileTime(AUnixTime);
end;
end;
{$ELSE}
var

View file

@ -89,5 +89,6 @@ const
BALLOON_KVM_MAGIC = $13661366;
ZSMALLOC_MAGIC = $58295829;
{ manually added }
SMB2_MAGIC_NUMBER = $fe534d42;
CIFS_MAGIC_NUMBER = $ff534d42;

View file

@ -237,6 +237,7 @@ function mbGetEnvironmentString(Index : Integer) : String;
function mbExpandEnvironmentStrings(const FileName: String): String;
function mbGetEnvironmentVariable(const sName: String): String;
function mbSetEnvironmentVariable(const sName, sValue: String): Boolean;
function mbUnsetEnvironmentVariable(const sName: String): Boolean;
function mbSysErrorMessage: String; overload; inline;
function mbSysErrorMessage(ErrorCode: Integer): String; overload;
{en
@ -617,10 +618,16 @@ function GetTempName(PathPrefix: String): String;
const
MaxTries = 100;
var
FileName: String;
TryNumber: Integer = 0;
begin
if PathPrefix = '' then
PathPrefix := GetTempDir;
PathPrefix := GetTempDir
else begin
FileName:= ExtractFileName(PathPrefix);
// Generated file name should be less the maximum file name length
PathPrefix:= ExtractFilePath(PathPrefix) + UTF8Copy(FileName, 1, 48);
end;
repeat
Result := PathPrefix + IntToStr(System.Random(MaxInt)); // or use CreateGUID()
Inc(TryNumber);
@ -1120,11 +1127,27 @@ end;
function mbRenameFile(const OldName: String; NewName: String): Boolean;
{$IFDEF MSWINDOWS}
var
wOldName,
wNewName: UnicodeString;
wTmpName,
wOldName, wNewName: UnicodeString;
begin
wNewName:= UTF16LongName(NewName);
wOldName:= UTF16LongName(OldName);
// Workaround: Windows >= 10 can't change only filename case on the FAT
if (Win32MajorVersion >= 10) and UnicodeSameText(wOldName, wNewName) then
begin
wTmpName:= GetFileSystemType(OldName);
if UnicodeSameText('FAT32', wTmpName) or UnicodeSameText('exFAT', wTmpName) then
begin
wTmpName:= UTF16LongName(GetTempName(OldName));
Result:= MoveFileExW(PWChar(wOldName), PWChar(wTmpName), 0);
if Result then
begin
Result:= MoveFileExW(PWChar(wTmpName), PWChar(wNewName), 0);
if not Result then MoveFileExW(PWChar(wTmpName), PWChar(wOldName), 0);
end;
Exit;
end;
end;
Result:= MoveFileExW(PWChar(wOldName), PWChar(wNewName), MOVEFILE_REPLACE_EXISTING);
end;
{$ELSE}
@ -1411,11 +1434,11 @@ end;
function mbCompareFileNames(const FileName1, FileName2: String): Boolean; inline;
{$IF DEFINED(WINDOWS) OR DEFINED(DARWIN)}
begin
Result:= (WideCompareText(UTF8Decode(FileName1), UTF8Decode(FileName2)) = 0);
Result:= (WideCompareText(CeUtf8ToUtf16(FileName1), CeUtf8ToUtf16(FileName2)) = 0);
end;
{$ELSE}
begin
Result:= (WideCompareStr(UTF8Decode(FileName1), UTF8Decode(FileName2)) = 0);
Result:= (WideCompareStr(CeUtf8ToUtf16(FileName1), CeUtf8ToUtf16(FileName2)) = 0);
end;
{$ENDIF}
@ -1531,7 +1554,7 @@ var
wsResult: UnicodeString;
begin
SetLength(wsResult, MaxSmallInt + 1);
dwSize:= ExpandEnvironmentStringsW(PWideChar(UTF8Decode(FileName)), PWideChar(wsResult), MaxSmallInt);
dwSize:= ExpandEnvironmentStringsW(PWideChar(CeUtf8ToUtf16(FileName)), PWideChar(wsResult), MaxSmallInt);
if (dwSize = 0) or (dwSize > MaxSmallInt) then
Result:= FileName
else begin
@ -1569,7 +1592,7 @@ var
dwResult: DWORD;
begin
Result := EmptyStr;
wsName := UTF8Decode(sName);
wsName := CeUtf8ToUtf16(sName);
dwResult := GetEnvironmentVariableW(PWideChar(wsName), @smallBuf[0], Length(smallBuf));
if dwResult > Length(smallBuf) then
begin
@ -1599,8 +1622,8 @@ var
wsName,
wsValue: UnicodeString;
begin
wsName:= UTF8Decode(sName);
wsValue:= UTF8Decode(sValue);
wsName:= CeUtf8ToUtf16(sName);
wsValue:= CeUtf8ToUtf16(sValue);
Result:= SetEnvironmentVariableW(PWideChar(wsName), PWideChar(wsValue));
end;
{$ELSE}
@ -1609,6 +1632,20 @@ begin
end;
{$ENDIF}
function mbUnsetEnvironmentVariable(const sName: String): Boolean;
{$IFDEF MSWINDOWS}
var
wsName: UnicodeString;
begin
wsName:= CeUtf8ToUtf16(sName);
Result:= SetEnvironmentVariableW(PWideChar(wsName), NIL);
end;
{$ELSE}
begin
Result:= (unsetenv(PAnsiChar(CeUtf8ToSys(sName))) = 0);
end;
{$ENDIF}
function mbSysErrorMessage: String;
begin
Result := mbSysErrorMessage(GetLastOSError);
@ -1664,7 +1701,7 @@ begin
//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)));
Result:= LoadLibraryW(PWideChar(CeUtf8ToUtf16(Name)));
finally
SetCurrentDir(sRememberPath);
end;
@ -1787,7 +1824,7 @@ function CreateSymLink(const Path, LinkName: string) : Boolean;
var
wsPath, wsLinkName: UnicodeString;
begin
wsPath:= UTF8Decode(Path);
wsPath:= CeUtf8ToUtf16(Path);
wsLinkName:= UTF16LongName(LinkName);
Result:= DCNtfsLinks.CreateSymlink(wsPath, wsLinkName);
end;

View file

@ -19,7 +19,7 @@ interface
uses
Classes, SysUtils
{$IF DEFINED(MSWINDOWS)}
, Process, Windows, Pipes
, Process, Windows, Pipes, DCConvertEncoding
{$ELSEIF DEFINED(UNIX)}
, BaseUnix, Process, UTF8Process, DCUnix
{$ENDIF}
@ -174,7 +174,7 @@ var
begin
EnvBlock := '';
for I := 0 to List.Count - 1 do
EnvBlock := EnvBlock + UTF8Decode(List[I]) + #0;
EnvBlock := EnvBlock + CeUtf8ToUtf16(List[I]) + #0;
EnvBlock := EnvBlock + #0;
GetMem(Result, Length(EnvBlock) * SizeOf(Widechar));
CopyMemory(Result, @EnvBlock[1], Length(EnvBlock) * SizeOf(Widechar));
@ -304,20 +304,20 @@ begin
raise EProcess.Create(SNoCommandline);
if (ApplicationName <> '') then
begin
PName := PWideChar(UTF8Decode(ApplicationName));
PCommandLine := PWideChar(UTF8Decode(CommandLine));
PName := PWideChar(CeUtf8ToUtf16(ApplicationName));
PCommandLine := PWideChar(CeUtf8ToUtf16(CommandLine));
end
else if (CommandLine <> '') then
PCommandLine := PWideChar(UTF8Decode(CommandLine))
PCommandLine := PWideChar(CeUtf8ToUtf16(CommandLine))
else if (Executable <> '') then
begin
Cmd := MaybeQuoteIfNotQuoted(Executable);
for I := 0 to Parameters.Count - 1 do
Cmd := Cmd + ' ' + MaybeQuoteIfNotQuoted(Parameters[I]);
PCommandLine := PWideChar(UTF8Decode(Cmd));
PCommandLine := PWideChar(CeUtf8ToUtf16(Cmd));
end;
if CurrentDirectory <> '' then
PDir := PWideChar(UTF8Decode(CurrentDirectory));
PDir := PWideChar(CeUtf8ToUtf16(CurrentDirectory));
if Environment.Count <> 0 then
FEnv := StringsToPWideChars(Environment)
else

View file

@ -27,7 +27,7 @@ unit DCStrUtils;
interface
uses
Classes, SysUtils, DCBasicTypes,LazUtf8;
Classes, SysUtils, DCBasicTypes, LazUtf8;
const
NoQuotesSpecialChars = [' ', '"', '''', '(', ')', ':', '&', '!', '$', '*', '?', '=', '`', '\', '|', ';', #10];
@ -356,7 +356,7 @@ function EscapeNoQuotes(const Str: String): String;
implementation
uses
DCOSUtils, StrUtils;
DCOSUtils, DCConvertEncoding, StrUtils;
function NormalizePathDelimiters(const Path: String): String;
{$IFDEF UNIX}
@ -766,7 +766,7 @@ var
L: Integer;
begin
L:= Length(Path);
if (L > 1) and (Path[L] in AllowDirectorySeparators) then
if (L > 1) and (Path[L] in AllowDirectorySeparators) and (Path[L - 1] <> DriveSeparator) then
Result:= Copy(Path, 1, L - 1)
else
Result:= Path;
@ -835,20 +835,24 @@ end;
function ApplyRenameMask(aFileName: String; NameMask: String; ExtMask: String): String;
function ApplyMask(const TargetString: String; Mask: String): String;
function ApplyMask(const TargetString, Mask: String): String;
var
i:Integer;
I: Integer;
begin
Result:='';
for i:=1 to Length(Mask) do
Result:= EmptyStr;
for I:= 1 to Length(Mask) do
begin
if Mask[i]= '?' then
Result:=Result + TargetString[i]
if Mask[I] = '?' then
begin
if I <= Length(TargetString) then
Result:= Result + TargetString[I]
else
Exit(TargetString);
end
else if Mask[I] = '*' then
Result:= Result + Copy(TargetString, I, Length(TargetString) - I + 1)
else
if Mask[i]= '*' then
Result:=Result + Copy(TargetString, i, Length(TargetString) - i + 1)
else
Result:=Result + Mask[i];
Result:= Result + Mask[I];
end;
end;
@ -965,7 +969,7 @@ 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));
Result := WideCompareText(CeUtf8ToUtf16(s1), CeUtf8ToUtf16(s2));
end;
function StrNewW(const mbString: String): PWideChar;
@ -974,7 +978,7 @@ var
iLength: PtrInt;
begin
Result:= nil;
wsString:= UTF8Decode(mbString);
wsString:= CeUtf8ToUtf16(mbString);
iLength:= (Length(wsString) * SizeOf(WideChar)) + 1;
Result:= GetMem(iLength);
if Result <> nil then
@ -1041,13 +1045,15 @@ end;
function StrBegins(const StringToCheck, StringToMatch: String): Boolean;
begin
Result := (Length(StringToCheck) >= Length(StringToMatch)) and
Result := (Length(StringToMatch) > 0) and
(Length(StringToCheck) >= Length(StringToMatch)) and
(CompareChar(StringToCheck[1], StringToMatch[1], Length(StringToMatch)) = 0);
end;
function StrEnds(const StringToCheck, StringToMatch: String): Boolean;
begin
Result := (Length(StringToCheck) >= Length(StringToMatch)) and
Result := (Length(StringToMatch) > 0) and
(Length(StringToCheck) >= Length(StringToMatch)) and
(CompareChar(StringToCheck[1 + Length(StringToCheck) - Length(StringToMatch)],
StringToMatch[1], Length(StringToMatch)) = 0);
end;

View file

@ -48,8 +48,16 @@ const
type
{$IF DEFINED(LINUX)}
TUnixTime = {$IFDEF CPUAARCH64}Int64{$ELSE}UIntPtr{$ENDIF};
TUnixMode = Cardinal;
TUnixTime =
{$IF DEFINED(CPUAARCH64)}
Int64
{$ELSEIF DEFINED(CPUMIPS)}
LongInt
{$ELSE}UIntPtr{$ENDIF};
TUnixMode =
{$IF DEFINED(CPUPOWERPC)}
LongInt
{$ELSE}Cardinal{$ENDIF};
{$ELSE}
TUnixTime = TTime;
TUnixMode = TMode;
@ -106,6 +114,12 @@ function getenv(name: PAnsiChar): PAnsiChar; cdecl; external clib;
insufficient space in the environment)
}
function setenv(const name, value: PAnsiChar; overwrite: cint): cint; cdecl; external clib;
{en
Remove an environment variable
@param(name Environment variable name)
@returns(The function returns zero on success, or -1 on error)
}
function unsetenv(const name: PAnsiChar): cint; cdecl; external clib;
function FileLock(Handle: System.THandle; Mode: cInt): System.THandle;
@ -213,7 +227,11 @@ begin
{$IFDEF LINUX}
if (fpFStatFS(Handle, @Sbfs) = 0) then
begin
if (Sbfs.fstype = CIFS_MAGIC_NUMBER) then Exit;
case UInt32(Sbfs.fstype) of
SMB_SUPER_MAGIC,
SMB2_MAGIC_NUMBER,
CIFS_MAGIC_NUMBER: Exit;
end;
end;
{$ENDIF}
repeat

View file

@ -56,12 +56,16 @@ function mbFileCopyXattr(const Source, Target: String): Boolean;
Retrieves the final path for the specified file
}
function GetFinalPathNameByHandle(hFile: THandle): UnicodeString;
{en
Retrieves the file system type name
}
function GetFileSystemType(const Path: String): UnicodeString;
implementation
uses
SysUtils, JwaAclApi, JwaWinNT, JwaAccCtrl, JwaWinBase, JwaWinType, JwaNative,
JwaNtStatus;
JwaNtStatus, DCConvertEncoding;
var
GetFinalPathNameByHandleW: function(hFile: HANDLE; lpszFilePath: LPWSTR; cchFilePath: DWORD; dwFlags: DWORD): DWORD; stdcall;
@ -72,9 +76,9 @@ var
Temp: PWideChar;
begin
if Pos('\\', FileName) = 0 then
Result := '\\?\' + UTF8Decode(FileName)
Result := '\\?\' + CeUtf8ToUtf16(FileName)
else begin
Result := '\\?\UNC\' + UTF8Decode(Copy(FileName, 3, MaxInt));
Result := '\\?\UNC\' + CeUtf8ToUtf16(Copy(FileName, 3, MaxInt));
end;
Temp := Pointer(Result) + 4;
while Temp^ <> #0 do
@ -131,7 +135,7 @@ begin
CloseHandle(ProcessToken);
end;
end;
Result:= GetNamedSecurityInfoW(PWideChar(UTF8Decode(Source)), SE_FILE_OBJECT, SecurityInfo,
Result:= GetNamedSecurityInfoW(PWideChar(CeUtf8ToUtf16(Source)), SE_FILE_OBJECT, SecurityInfo,
@SidOwner, @SidGroup, @Dacl, @Sacl, SecDescPtr) = ERROR_SUCCESS;
if Result then
begin
@ -149,7 +153,7 @@ begin
else begin
SecurityInfo:= SecurityInfo or UNPROTECTED_SACL_SECURITY_INFORMATION;
end;
Result:= SetNamedSecurityInfoW(PWideChar(UTF8Decode(Target)), SE_FILE_OBJECT,
Result:= SetNamedSecurityInfoW(PWideChar(CeUtf8ToUtf16(Target)), SE_FILE_OBJECT,
SecurityInfo, SidOwner, SidGroup, Dacl, Sacl) = ERROR_SUCCESS;
end;
{$PUSH}{$HINTS OFF}{$WARNINGS OFF}
@ -230,6 +234,20 @@ begin
end;
end;
function GetFileSystemType(const Path: String): UnicodeString;
var
lpFileSystemFlags: DWORD = 0;
lpMaximumComponentLength: DWORD = 0;
lpFileSystemNameBuffer: array [Byte] of WideChar;
begin
if GetVolumeInformationW(PWideChar(CeUtf8ToUtf16(ExtractFileDrive(Path)) + PathDelim),
nil, 0, nil, lpMaximumComponentLength, lpFileSystemFlags,
lpFileSystemNameBuffer, SizeOf(lpFileSystemNameBuffer)) then
Result:= lpFileSystemNameBuffer
else
Result:= EmptyWideStr;
end;
procedure Initialize;
begin
if Win32MajorVersion < 6 then

View file

@ -525,7 +525,7 @@ begin
try
if FileStream.Size = 0 then
raise EXmlConfigEmpty.Create('');
ReadXMLFile(TmpDoc, FileStream, FilenameToURI(AFilename));
ReadXMLFile(TmpDoc, FileStream, FilenameToURI(AFilename), []);
if TmpDoc.DocumentElement.NodeName <> ApplicationName then
raise EXMLReadError.Create('Root element is not <' + ApplicationName + '>.');
FDoc.Free;
@ -541,7 +541,7 @@ var
begin
if AStream.Size = 0 then
raise EXmlConfigEmpty.Create('');
ReadXMLFile(TmpDoc, AStream);
ReadXMLFile(TmpDoc, AStream, []);
FDoc.Free;
FDoc := TmpDoc;
end;

View file

@ -1,5 +1,6 @@
{
Copyright (C) 2009 Laurent Jacques
Copyright (C) 2012-2022 Alexander Koblov
This source is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
@ -15,9 +16,8 @@
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+}
@ -153,6 +153,7 @@ type
public
constructor Create(const FileName: string);
destructor Destroy; override;
function LoadFromStream(GifStream: TStream; var AGifList: TGifList): boolean;
function LoadAllBitmap(var AGifList: TGifList): boolean;
function LoadFromLazarusResource(const ResName: String; var AGifList: TGifList): boolean;
function LoadFirstBitmap(var ABitmap: TBitmap): boolean;
@ -565,22 +566,17 @@ begin
FPalette.Free;
end;
function TGifLoader.LoadAllBitmap(var AGifList: TGifList): boolean;
function TGifLoader.LoadFromStream(GifStream: TStream; 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
if not Assigned(AGifList) then
AGifList := TGifList.Create(True);
GifStream := TMemoryStream.Create;
GifStream.LoadFromFile(FFileName);
GifStream.Position := 0;
ReadHeader(GifStream);
@ -590,7 +586,7 @@ begin
// skip first block extention if exist
repeat
Introducer := SkipBlock(GifStream);
until (Introducer = ID_IMAGE_DESCRIPTOR) or (Introducer = ID_TRAILER);
until (Introducer = ID_IMAGE_DESCRIPTOR) or (Introducer = ID_TRAILER) or (GifStream.Position = GifStream.Size);
repeat
ReadGifBitmap(GifStream);
@ -620,70 +616,40 @@ begin
repeat
Introducer := SkipBlock(GifStream);
until (Introducer = ID_IMAGE_DESCRIPTOR) or (Introducer = ID_TRAILER);
until (Introducer = ID_IMAGE_DESCRIPTOR) or (Introducer = ID_TRAILER) or (GifStream.Position = GifStream.Size);
until (Introducer = ID_TRAILER);
GifStream.Free;
until (Introducer = ID_TRAILER) or (GifStream.Position = GifStream.Size);
Result := True;
end;
function TGifLoader.LoadAllBitmap(var AGifList: TGifList): boolean;
var
GifStream: TMemoryStream;
begin
Result := False;
if not FileExists(FFileName) then
Exit;
GifStream := TMemoryStream.Create;
try
GifStream.LoadFromFile(FFileName);
Result := LoadFromStream(GifStream, AGifList);
finally
GifStream.Free;
end;
end;
function TGifLoader.LoadFromLazarusResource(const ResName: String; var AGifList: TGifList): boolean;
var
GifStream: TLazarusResourceStream;
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;
try
Result := LoadFromStream(GifStream, AGifList);
finally
GifStream.Free;
end;
end;
function TGifLoader.LoadFirstBitmap(var ABitmap: TBitmap): boolean;

View file

@ -24,7 +24,7 @@
"/>
<License Value="GPL
"/>
<Version Major="1" Minor="4"/>
<Version Major="1" Minor="5"/>
<Files Count="2">
<Item1>
<Filename Value="gifanim.pas"/>

View file

@ -41,7 +41,7 @@
contributors:
Copyright (C) 2006-2019 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2006-2023 Alexander Koblov (alexx2000@mail.ru)
TODO:
@ -152,7 +152,9 @@ type
veCp950,
veIso88591,
veIso88592,
veKoi8,
veKoi8r,
veKoi8u,
veKoi8ru,
veUcs2le,
veUcs2be,
veUtf16le,
@ -189,7 +191,9 @@ const
'CP950',
'ISO-8859-1',
'ISO-8859-2',
'KOI-8',
'KOI8-R',
'KOI8-U',
'KOI8-RU',
'UCS-2LE',
'UCS-2BE',
'UTF-16LE',
@ -233,7 +237,7 @@ type
FMouseBlockBeg: PtrInt;
FMouseBlockSide: TCharSide;
FSelecting: Boolean;
FTextWidth: Integer; // max char count or width in window
FTextWidth: Integer; // max char count or width in window
FTextHeight: Integer; // measured values of font, rec calc at font changed
FScrollBarVert: TScrollBar;
FScrollBarHorz: TScrollBar;
@ -244,6 +248,8 @@ type
FColCount: Integer;
FTabSpaces: Integer; // tab width in spaces
FMaxTextWidth: Integer; // maximum of chars on one line unwrapped text (max 16384)
FExtraLineSpacing: Integer;
FLeftMargin: Integer;
FOnGuessEncoding: TGuessEncodingEvent;
FOnFileOpen: TFileOpenEvent;
FCaretVisible: Boolean;
@ -275,7 +281,7 @@ type
{en
Returns how many lines (given current FTextHeight) will fit into the window.
}
function GetClientHeightInLines: Integer; inline;
function GetClientHeightInLines(Whole: Boolean = True): Integer; inline;
{en
Calculates how many lines can be displayed from given position.
@ -508,6 +514,8 @@ type
property ColCount: Integer Read FColCount Write SetColCount;
property MaxTextWidth: Integer read FMaxTextWidth write SetMaxTextWidth;
property TabSpaces: Integer read FTabSpaces write SetTabSpaces;
property LeftMargin: Integer read FLeftMargin write FLeftMargin;
property ExtraLineSpacing: Integer read FExtraLineSpacing write FExtraLineSpacing;
property OnGuessEncoding: TGuessEncodingEvent Read FOnGuessEncoding Write FOnGuessEncoding;
property OnFileOpen: TFileOpenEvent read FOnFileOpen write FOnFileOpen;
@ -539,7 +547,7 @@ procedure Register;
implementation
uses
LCLType, Graphics, Forms, LCLProc, Clipbrd, LConvEncoding,
Math, LCLType, Graphics, Forms, LCLProc, Clipbrd, LConvEncoding,
DCUnicodeUtils, LCLIntf, LazUTF8, DCOSUtils , DCConvertEncoding
{$IF DEFINED(UNIX)}
, BaseUnix, Unix, DCUnix
@ -549,7 +557,6 @@ uses
const
//cTextWidth = 80; // wrap on 80 chars
cBinWidth = 80;
// These strings must be Ascii only.
@ -609,6 +616,7 @@ begin
FTextHeight:= 14; // dummy value
FColCount := 1;
FTabSpaces := 8;
FLeftMargin := 4;
FMaxTextWidth := 1024;
FLineList := TPtrIntList.Create;
@ -693,7 +701,7 @@ begin
Canvas.FillRect(ClientRect);
{$ENDIF}
Canvas.Brush.Style := bsClear;
FTextHeight := Canvas.TextHeight('Wg') + 2;
FTextHeight := Canvas.TextHeight('Wg') + FExtraLineSpacing;
if FViewerControlMode = vcmBook then
FTextWidth := ((ClientWidth - (Canvas.TextWidth('W') * FColCount)) div FColCount)
@ -863,9 +871,11 @@ procedure TViewerControl.FontChanged(Sender: TObject);
begin
inherited FontChanged(Sender);
Canvas.Font := Self.Font;
FTextHeight := Canvas.TextHeight('Wg') + 2;
if FShowCaret then LCLIntf.CreateCaret(Handle, 0, 2, FTextHeight);
if HandleAllocated then
begin
FTextHeight := Canvas.TextHeight('Wg') + FExtraLineSpacing;
if FShowCaret then LCLIntf.CreateCaret(Handle, 0, 2, FTextHeight);
end;
end;
function TViewerControl.CalcTextLineLength(var iStartPos: PtrInt; const aLimit: Int64; out DataLength: PtrInt): Integer;
@ -1666,8 +1676,9 @@ end;
procedure TViewerControl.WriteText;
var
yIndex, xIndex, w, scrollTab, i: Integer;
yIndex, xIndex, w, i: Integer;
LineStart, iPos: PtrInt;
CharLenInBytes: Integer;
DataLength: PtrInt;
sText: String;
begin
@ -1680,7 +1691,7 @@ begin
for xIndex := 0 to FColCount-1 do
begin
for yIndex := 0 to GetClientHeightInLines - 1 do
for yIndex := 0 to GetClientHeightInLines(False) - 1 do
begin
if iPos >= FHighLimit then
Break;
@ -1694,15 +1705,19 @@ begin
if DataLength > 0 then
begin
if (Mode = vcmText) and (FHPosition > 0) then
begin
for i:= 1 to FHPosition do
begin
GetNextCharAsAscii(LineStart, CharLenInBytes);
DataLength -= CharLenInBytes;
LineStart += CharLenInBytes;
end;
if (DataLength <= 0) then Continue;
end;
sText := GetText(LineStart, DataLength, 0);
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);
OutText(FLeftMargin + xIndex * w, yIndex * FTextHeight, sText, LineStart, DataLength);
end;
end;
end;
@ -1716,7 +1731,7 @@ var
s: string;
begin
iPos := FPosition;
for yIndex := 0 to GetClientHeightInLines - 1 do
for yIndex := 0 to GetClientHeightInLines(False) - 1 do
begin
if iPos >= FHighLimit then
Break;
@ -1725,7 +1740,7 @@ begin
s := TransformCustom(iPos, FHighLimit); // get line text for render
if s <> '' then
OutCustom(0, yIndex * FTextHeight, s, LineStart, iPos - LineStart); // render line to canvas
OutCustom(FLeftMargin, yIndex * FTextHeight, s, LineStart, iPos - LineStart); // render line to canvas
end;
end;
@ -1736,7 +1751,7 @@ var
s: string;
begin
iPos := FPosition;
for yIndex := 0 to GetClientHeightInLines - 1 do
for yIndex := 0 to GetClientHeightInLines(False) - 1 do
begin
if iPos >= FHighLimit then
Break;
@ -1744,7 +1759,7 @@ begin
AddLineOffset(iPos);
s := TransformBin(iPos, FHighLimit);
if s <> '' then
OutBin(0, yIndex * FTextHeight, s, LineStart, iPos - LineStart);
OutBin(FLeftMargin, yIndex * FTextHeight, s, LineStart, iPos - LineStart);
end;
end;
@ -1807,6 +1822,12 @@ begin
if not IsFileOpen then
Exit;
// Double byte text can have only even position
if (Encoding in ViewerEncodingDoubleByte) and Odd(Value) then
begin
Value := Value - 1;
end;
// Speedup if total nr of lines is less then nr of lines that can be displayed.
if (FPosition = FLowLimit) and // only if already at the top
(FLineList.Count > 0) and (FLineList.Count < GetClientHeightInLines)
@ -1886,10 +1907,15 @@ begin
end;
end;
function TViewerControl.GetClientHeightInLines: Integer;
function TViewerControl.GetClientHeightInLines(Whole: Boolean): Integer;
begin
if FTextHeight > 0 then
Result := GetViewerRect.Height div FTextHeight
begin
if Whole then
Result := GetViewerRect.Height div FTextHeight
else
Result := Ceil(GetViewerRect.Height / FTextHeight);
end
else
Result := 0;
end;
@ -2592,6 +2618,7 @@ var
tmpPosition: PtrInt;
s, ss, sText: String;
begin
ss := EmptyStr;
tmpPosition := StartLine;
sText := TransformBin(tmpPosition, EndLine);
for I := 1 to Length(sText) do
@ -2744,12 +2771,17 @@ var
Inc(len); // Assume there is one character after conversion
// (otherwise use Inc(len, UTF8Length(s))).
if len <= FHPosition then
if len <= FHPosition then
begin
i := i + CharLenInBytes;
Continue;
end;
if (CharLenInBytes = 1) and (s[1] < ' ') then
begin
s := ' ';
end;
ss := ss + s;
textWidth := Canvas.TextWidth(ss);
if textWidth > x then
@ -2775,6 +2807,12 @@ begin
if FLineList.Count = 0 then
Exit(-1);
if (x < FLeftMargin) then
x := 0
else begin
x := x - FLeftMargin;
end;
yIndex := y div FTextHeight;
if yIndex >= FLineList.Count then
yIndex := FLineList.Count - 1;
@ -2786,7 +2824,7 @@ begin
// Get position of last character of the line.
EndLine := GetEndOfLine(StartLine);
if x = 0 then
if (x = 0) and ((Mode <> vcmText) or (FHPosition = 0)) then
begin
CharSide := csBefore;
Exit(StartLine);
@ -2925,7 +2963,9 @@ begin
veCp1250..veCp950,
veIso88591,
veIso88592,
veKoi8:
veKoi8r,
veKoi8u,
veKoi8ru:
if iPosition < FHighLimit then
begin
Result := PByte(GetDataAdr)[iPosition];
@ -3047,7 +3087,9 @@ begin
veCp1250..veCp950,
veIso88591,
veIso88592,
veKoi8:
veKoi8r,
veKoi8u,
veKoi8ru:
if iPosition > FLowLimit then
begin
Result := PByte(GetDataAdr + iPosition)[-1];
@ -3155,7 +3197,9 @@ begin
veCp1250..veCp950,
veIso88591,
veIso88592,
veKoi8:
veKoi8r,
veKoi8u,
veKoi8ru:
CharLenInBytes := 1;
veUcs2be, veUcs2le:
CharLenInBytes := 2;
@ -3561,7 +3605,9 @@ procedure TViewerControl.UpdateSelection;
veCp1250..veCp950,
veIso88591,
veIso88592,
veKoi8:
veKoi8r,
veKoi8u,
veKoi8ru:
; // any position allowed
veUcs2be, veUcs2le:

View file

@ -3,7 +3,7 @@ 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.
Current version requires at least FPC 3.2.0 and Lazarus 2.0.12.
2) Using the IDE to develop and build DC.

View file

@ -1,12 +1,12 @@
rem Set Double Commander version
set DC_VER=1.0.0
set DC_VER=1.0.11
rem Path to subversion
set GIT_EXE="C:\Program Files\Git\bin\git.exe"
rem Path to Git
set GIT_EXE="%ProgramFiles%\Git\bin\git.exe"
rem Path to Inno Setup compiler
set ISCC_EXE="c:\Program Files\Inno Setup 5\ISCC.exe"
set ISCC_EXE="%ProgramFiles(x86)%\Inno Setup 5\ISCC.exe"
rem The new package will be created from here
set BUILD_PACK_DIR=%TEMP%\doublecmd-%DATE: =%
@ -57,7 +57,7 @@ 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
%ISCC_EXE% /F"doublecmd-%DC_VER%.%CPU_TARGET%-%OS_TARGET%" /DDisplayVersion=%DC_VER% doublecmd.iss
rem Move created package
move release\*.exe %PACK_DIR%

View file

@ -1,7 +1,7 @@
#!/bin/sh
# Set Double Commander version
DC_VER=1.0.0
DC_VER=1.0.11
# The new package will be saved here
PACK_DIR=$(pwd)/darwin/release

View file

@ -1,7 +1,7 @@
#!/bin/sh
# Set Double Commander version
DC_VER=1.0.0
DC_VER=1.0.11
# The new package will be saved here
PACK_DIR=$(pwd)/linux/release
@ -22,7 +22,6 @@ help()
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
@ -36,23 +35,21 @@ 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;;
-A) shift;CK_DEBIAN=1;CK_REDHAT=1;CK_SLACKWARE=1;CK_PORTABLE=1;;
-D) shift;CK_DEBIAN=1;;
-R) shift;CK_REDHAT=1;;
-S) shift;CK_SLACKWARE=1;;
-P) shift;CK_PORTABLE=1;;
-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
if [ -z "$CK_DEBIAN" ] && [ -z "$CK_REDHAT" ] && [ -z "$CK_SLACKWARE" ] && [ -z "$CK_PORTABLE" ]; then
CK_DEBIAN=1
CK_REDHAT=1
CK_SLACKWARE=1
CK_PORTABLE=1
CK_HELP=1
fi
# Export from Git
@ -112,28 +109,13 @@ if [ "$CK_SLACKWARE" ]; then
fi
if [ "$CK_PORTABLE" ]; then
# Create *.tar.bz2 package
# Create *.tar.xz 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

View file

@ -34,7 +34,6 @@ cp -r doublecmd.app/* $DC_APP_DIR/
cp -a doublecmd $DC_INSTALL_DIR/
cp -a doublecmd.help $DC_INSTALL_DIR/
cp -a doublecmd.zdli $DC_INSTALL_DIR/
cp -a doublecmd.ext.example $DC_INSTALL_DIR/
cp -a pixmaps.txt $DC_INSTALL_DIR/
cp -a multiarc.ini $DC_INSTALL_DIR/
cp -a pinyin.tbl $DC_INSTALL_DIR/

View file

@ -1,21 +0,0 @@
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
@@ -964,13 +964,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

View file

@ -1 +0,0 @@
x-terminal-emulator.patch

View file

@ -1,21 +0,0 @@
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
@@ -65,11 +65,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}

View file

@ -1,5 +1,6 @@
[Desktop Entry]
Name=Double Commander
GenericName=File Manager
Comment=Double Commander is a cross platform open source file manager with two panels side by side.
Terminal=false
Icon=doublecmd

View file

@ -8,7 +8,7 @@ if [ -z $CPU_TARGET ]; then
fi
# Determine library directory
if [ "$CPU_TARGET" = "x86_64" ] && [ ! -f "/etc/debian_version" ]
if [[ "$CPU_TARGET" == *"64" ]] && [ ! -f "/etc/debian_version" ]
then
LIB_SUFFIX=64
else
@ -72,7 +72,6 @@ mkdir -p $DC_INSTALL_DIR/plugins/dsx/dsxlocate
cp -a doublecmd $DC_INSTALL_DIR/
cp -a doublecmd.help $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/
cp -a pinyin.tbl $DC_INSTALL_DIR/

View file

@ -1,6 +1,6 @@
Name: doublecmd-gtk
Summary: Twin-panel (commander-style) file manager (GTK2)
Version: 1.0.0
Version: 1.0.11
Release: 1
URL: http://doublecmd.sourceforge.net
Source0: doublecmd_%{version}.orig.tar.gz

View file

@ -4,7 +4,7 @@
Name: doublecmd-help-en
Summary: Documentation for the Double Commander (English)
Version: 1.0.0
Version: 1.0.11
Release: 1
Url: http://doublecmd.sourceforge.net/
License: GPL-2+

View file

@ -1,6 +1,6 @@
Name: doublecmd-qt
Summary: Twin-panel (commander-style) file manager (Qt4)
Version: 1.0.0
Version: 1.0.11
Release: 1
URL: http://doublecmd.sourceforge.net
Source0: doublecmd_%{version}.orig.tar.gz

View file

@ -4,7 +4,7 @@
Name: doublecmd-qt5
Summary: Twin-panel (commander-style) file manager (Qt5)
Version: 1.0.0
Version: 1.0.11
Release: 1
URL: http://doublecmd.sourceforge.net
Source0: %{doublecmd}-%{version}.tar.gz

View file

@ -3,7 +3,7 @@
# This script updates Double Commander Open Build Service (OBS) repository
# Set Double Commander version
DC_VER=1.0.0
DC_VER=1.0.11
# Temp directory
DC_TEMP_DIR=/var/tmp/doublecmd-$(date +%y.%m.%d)

View file

@ -3,7 +3,7 @@
# This script updates Double Commander Personal Package Archive (PPA) repository
# Set Double Commander version
DC_VER=1.0.0
DC_VER=1.0.11
# Set Ubuntu series
DISTRO=( xenial zesty artful )

View file

@ -3,7 +3,7 @@
export REVISION_INC=$2/units/dcrevision.inc
# DC revision number
export REVISION=$(git -C $1 rev-list --count HEAD)
export REVISION=$(git -C $1 rev-list --count master..HEAD)
export COMMIT=$(git -C $1 rev-parse --short HEAD)
# Update dcrevision.inc

View file

@ -3,7 +3,9 @@
[Setup]
AppName=Double Commander
AppVerName=Double Commander 1.0.0 beta
AppVersion={#DisplayVersion}
AppVerName=Double Commander {#DisplayVersion} beta
AppPublisher=Alexander Koblov
AppPublisherURL=http://doublecmd.sourceforge.net
AppSupportURL=http://doublecmd.sourceforge.net
AppUpdatesURL=http://doublecmd.sourceforge.net
@ -52,8 +54,10 @@ Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "doublecmd\doublecmd.help"; DestDir: "{app}"
Source: "doublecmd\doublecmd.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "doublecmd\doublecmd.zdli"; DestDir: "{app}"; Flags: ignoreversion
Source: "doublecmd\pinyin.tbl"; DestDir: "{app}"; Flags: onlyifdoesntexist
Source: "doublecmd\pixmaps.txt"; DestDir: "{app}"; Flags: onlyifdoesntexist
Source: "doublecmd\multiarc.ini"; DestDir: "{app}"; Flags: onlyifdoesntexist
Source: "doublecmd\doc\*"; DestDir: "{app}\doc"; Flags: ignoreversion recursesubdirs createallsubdirs
@ -66,7 +70,7 @@ 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:ProgramOnTheWeb,Double Commander}"; Filename: "https://doublecmd.sourceforge.io"
Name: "{group}\{cm:UninstallProgram,Double Commander}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\Double Commander"; Filename: "{app}\doublecmd.exe"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Double Commander"; Filename: "{app}\doublecmd.exe"; Tasks: quicklaunchicon

View file

@ -37,7 +37,6 @@ copy doc\*.txt %DC_INSTALL_DIR%\doc\
copy doublecmd.exe %DC_INSTALL_DIR%\
copy doublecmd.help %DC_INSTALL_DIR%\
copy doublecmd.zdli %DC_INSTALL_DIR%\
copy doublecmd.ext.example %DC_INSTALL_DIR%\
copy pixmaps.txt %DC_INSTALL_DIR%\
copy multiarc.ini %DC_INSTALL_DIR%\
copy pinyin.tbl %DC_INSTALL_DIR%\

View file

@ -9959,7 +9959,7 @@ msgid "A&uto-rename source files"
msgstr "&Аўтаматычная змена назвы зыходных файлаў"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr "&Аўтаматычная змена назвы мэтавых файлаў"
#: ulng.rsdlgbuttoncancel

View file

@ -10436,7 +10436,7 @@ msgid "A&uto-rename source files"
msgstr "Само&преименуване на целевите файлове"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr ""
#: ulng.rsdlgbuttoncancel

View file

@ -10952,7 +10952,7 @@ msgid "A&uto-rename source files"
msgstr ""
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr ""
#: ulng.rsdlgbuttoncancel

View file

@ -9971,7 +9971,7 @@ msgid "A&uto-rename source files"
msgstr "A&utomatické přejmenování zdrojových souborů"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr "Automaticky přejmenovat cílové soubory"
#: ulng.rsdlgbuttoncancel

View file

@ -11005,7 +11005,7 @@ msgid "A&uto-rename source files"
msgstr "A&uto-omdøb kildefiler"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr ""
#: ulng.rsdlgbuttoncancel

View file

@ -10153,7 +10153,7 @@ msgid "A&uto-rename source files"
msgstr "Quelldateien a&utomatisch umbenennen"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr "Zieldateien automatisch umbenennen"
#: ulng.rsdlgbuttoncancel

View file

@ -3,16 +3,16 @@ msgstr ""
"Project-Id-Version: Double Commander 1.0.0 alpha\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-01-17 23:08+0300\n"
"PO-Revision-Date: 2021-03-02 12:30+0200\n"
"Last-Translator: Anastasios Kazakis <orca.srfshark@gmail.com>\n"
"Language-Team: Anastasios Kazakis <orca.surfshark@gmail.com>\n"
"PO-Revision-Date: 2022-11-20 21:59+0200\n"
"Last-Translator: Anastasios Kazakis <orca.surfshark@gmail.com>\n"
"Language-Team: Anastasios Kazakis <anastasios.kazakis@tutanota.com>\n"
"Language: el_GR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Native-Language: ελληνικά\n"
"X-Generator: Poedit 2.3\n"
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Native-Language: ελληνικά\n"
"X-Generator: Poedit 3.0.1\n"
"X-Language: el_GR\n"
"X-Source-Language: el\n"
"X-Poedit-SourceCharset: ISO-8859-7\n"
@ -32,8 +32,8 @@ 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)"
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: %s (%s)"
@ -92,7 +92,7 @@ msgstr "Κράτηση Χώρου"
#: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption
msgid "Copy on write"
msgstr ""
msgstr "Αντιγραφή κατά την εγγραφή"
#: tfilesystemcopymoveoperationoptionsui.chkverify.caption
msgid "&Verify"
@ -146,7 +146,7 @@ msgstr "Εσωτερική έκδοση"
#: tfrmabout.lblcommit.caption
msgctxt "tfrmabout.lblcommit.caption"
msgid "Commit"
msgstr ""
msgstr "Δέσμευση"
#: tfrmabout.lblfreepascalver.caption
msgctxt "tfrmabout.lblfreepascalver.caption"
@ -1107,7 +1107,7 @@ msgstr "Κατεύθυνση"
#: tfrmelevation.chkelevateall.caption
msgid "Do this for &all current objects"
msgstr ""
msgstr "Εφαρμογή αυτού για όλα τα τρέχοντα αντικείμενα"
#: tfrmextractdlg.caption
msgctxt "TFRMEXTRACTDLG.CAPTION"
@ -1596,7 +1596,7 @@ msgstr "Όχι παλαιότερο από:"
#: tfrmfinddlg.cbofficexml.caption
msgid "Offi&ce XML"
msgstr ""
msgstr "Office XML"
#: tfrmfinddlg.cbopenedtabs.caption
msgid "Opened tabs"
@ -1828,7 +1828,6 @@ msgid "C&ase sensitive"
msgstr "Με Διάκριση Πεζών-Κεφαλαίων"
#: tfrmfindview.cbregexp.caption
#, fuzzy
msgctxt "tfrmfindview.cbregexp.caption"
msgid "&Regular expressions"
msgstr "Συνήθεις Φράσεις"
@ -2224,7 +2223,7 @@ msgstr "Καταλογος &Hotlist"
#: tfrmmain.actdoanycmcommand.caption
msgid "Execute &internal command..."
msgstr ""
msgstr "Εκτέλεση εσωτερικής εντολής..."
#: tfrmmain.actdoanycmcommand.hint
msgid "Select any command and execute it"
@ -2763,11 +2762,11 @@ msgstr "Δημιουργία Συμβολοδεσμού..."
#: tfrmmain.actsyncchangedir.caption
msgid "Synchronous navigation"
msgstr ""
msgstr "Σύγχρονη πλοήγηση"
#: tfrmmain.actsyncchangedir.hint
msgid "Synchronous directory changing in both panels"
msgstr ""
msgstr "Σύγχρονη αλλαγή καταλόγου και στα δύο πάνελ"
#: tfrmmain.actsyncdirs.caption
msgid "Syn&chronize dirs..."
@ -5789,7 +5788,7 @@ msgstr "Εφαρμογή τρεχουσών ρυθμίσεων σε όλα τα
#: tfrmoptionsfileassocextra.cbexecuteviashell.caption
msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBEXECUTEVIASHELL.CAPTION"
msgid "Execute via shell"
msgstr "Εκτέλεση μέσω κελύφους"
msgstr "Εκτέλεση μέσω κελύφους"
#: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption
msgid "Extended context menu"
@ -5905,7 +5904,7 @@ msgstr "Παράβλεψη των λαθών εργασιών αρχείων κ
#: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption
msgid "Test archive operation"
msgstr ""
msgstr "Λειτουργία ελέγχου αρχείου"
#: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption
msgid "Verify checksum operation"
@ -6161,7 +6160,7 @@ msgstr "Μορφή μεγέθους Αρχείου:"
#: tfrmoptionsfilesviews.lblfootersizeformat.caption
msgid "&Footer format:"
msgstr ""
msgstr "Σε μορφή Υποσέλιδου:"
#: tfrmoptionsfilesviews.lblgigabyte.caption
msgid "&Gigabyte:"
@ -6169,7 +6168,7 @@ msgstr "Gigabyte:"
#: tfrmoptionsfilesviews.lblheadersizeformat.caption
msgid "&Header format:"
msgstr ""
msgstr "Σε μορφή Επικεφαλίδας:"
#: tfrmoptionsfilesviews.lblkilobyte.caption
msgid "&Kilobyte:"
@ -6640,7 +6639,7 @@ msgstr "Εμφάνιση κουμπιού λίστας οδηγών"
#: tfrmoptionslayout.cbshowkeyspanel.caption
msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION"
msgid "Show function &key buttons"
msgstr "Εμφάνιση κουμπιών πλήκτρων λειτουργίας"
msgstr "Εμφάνιση κουμπιών πλήκτρων λειτουργίας"
#: tfrmoptionslayout.cbshowmainmenu.caption
msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION"
@ -6664,7 +6663,7 @@ msgstr "Εμφάνιση μπάρας κατάστασης"
#: tfrmoptionslayout.cbshowtabheader.caption
msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION"
msgid "S&how tabstop header"
msgstr "Εμφάνιση επικεφαλίδας του tabstop"
msgstr "Εμφάνιση επικεφαλίδας του tabstop"
#: tfrmoptionslayout.cbshowtabs.caption
msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION"
@ -6814,7 +6813,7 @@ msgstr "Πάντα μετάβαση στη ρίζα ενός οδηγού ότα
#: tfrmoptionsmisc.chkshowcurdirtitlebar.caption
msgid "Show &current directory in the main window title bar"
msgstr ""
msgstr "Εμφάνιση τρέχοντος καταλόγου στην γραμμή τίτλου του κύριου παραθύρου"
#: tfrmoptionsmisc.chkshowwarningmessages.caption
msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION"
@ -6954,7 +6953,7 @@ msgstr "Αντικατάσταση λανθασμένου ονόματος αρ
#: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption
msgid "Append in the same rename log file"
msgstr "Συμπλήρωση στο ίδιο μετονομασμένο αρχείο καταγραφών"
msgstr "Συμπλήρωση στο ίδιο μετονομασμένο αρχείο καταγραφών"
#: tfrmoptionsmultirename.rbrenaminglogperpreset.caption
msgid "Per preset"
@ -8476,31 +8475,26 @@ msgid "&OR (any match)"
msgstr "Ή (όποιο ταιριάζει)"
#: tfrmselectduplicates.btnapply.caption
#, fuzzy
msgctxt "tfrmselectduplicates.btnapply.caption"
msgid "&Apply"
msgstr "Εφαρμογή"
#: tfrmselectduplicates.btncancel.caption
#, fuzzy
msgctxt "tfrmselectduplicates.btncancel.caption"
msgid "&Cancel"
msgstr "Ακύρωση"
#: tfrmselectduplicates.btnexcludemask.hint
#, fuzzy
msgctxt "tfrmselectduplicates.btnexcludemask.hint"
msgid "Template..."
msgstr "Πρότυπο..."
#: tfrmselectduplicates.btnincludemask.hint
#, fuzzy
msgctxt "tfrmselectduplicates.btnincludemask.hint"
msgid "Template..."
msgstr "Πρότυπο..."
#: tfrmselectduplicates.btnok.caption
#, fuzzy
msgctxt "tfrmselectduplicates.btnok.caption"
msgid "&OK"
msgstr "OK"
@ -8514,7 +8508,6 @@ msgid "&Leave at least one file in each group unselected:"
msgstr "Αφήστε τουλάχιστον ένα αρχείο σε κάθε γκρουπ μη επιλεγμένο:"
#: tfrmselectduplicates.cmbincludemask.text
#, fuzzy
msgctxt "tfrmselectduplicates.cmbincludemask.text"
msgid "*"
msgstr "*"
@ -8869,7 +8862,7 @@ msgstr "Εσωτερική Έκδοση"
#: tfrmstartingsplash.lblcommit.caption
msgctxt "tfrmstartingsplash.lblcommit.caption"
msgid "Commit"
msgstr ""
msgstr "Δέσμευση"
#: tfrmstartingsplash.lblfreepascalver.caption
msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION"
@ -9114,7 +9107,7 @@ msgstr "μονά"
#: tfrmsyncdirsdlg.statusbar1.panels[0].text
msgid "Please press \"Compare\" to start"
msgstr "Παρακαλώ πιέστε \"Σύγκριση\" για εκκίνηση"
msgstr "Παρακαλώ πιέστε \"Σύγκριση\" για εκκίνηση"
#: tfrmsyncdirsperformdlg.caption
msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION"
@ -9565,7 +9558,6 @@ msgid "Zoom In"
msgstr "Μεγέθυνση"
#: tfrmviewer.actzoomin.hint
#, fuzzy
msgctxt "tfrmviewer.actzoomin.hint"
msgid "Zoom In"
msgstr "Μεγέθυνση"
@ -9576,10 +9568,9 @@ msgid "Zoom Out"
msgstr "Μίκρυνση"
#: tfrmviewer.actzoomout.hint
#, fuzzy
msgctxt "tfrmviewer.actzoomout.hint"
msgid "Zoom Out"
msgstr "Μίκρυνση"
msgstr "Σμίκρυνση"
#: tfrmviewer.btncuttuimage.hint
msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT"
@ -9610,7 +9601,6 @@ msgid "Paint"
msgstr "Ζωγραφική"
#: tfrmviewer.btnpenwidth.caption
#, fuzzy
msgctxt "tfrmviewer.btnpenwidth.caption"
msgid "1"
msgstr "1"
@ -9629,7 +9619,6 @@ msgid "Resize"
msgstr "Αλλαγή Μεγέθους"
#: tfrmviewer.btnslideshow.caption
#, fuzzy
msgctxt "tfrmviewer.btnslideshow.caption"
msgid "Slide Show"
msgstr "Slide Show"
@ -9673,7 +9662,6 @@ msgid "&Image"
msgstr "Εικόνα"
#: tfrmviewer.mipen.caption
#, fuzzy
msgctxt "tfrmviewer.mipen.caption"
msgid "Pen"
msgstr "Στυλό"
@ -9871,7 +9859,7 @@ msgstr "Απαιτείται χορήγηση άδειας διαχειριστ
#: uadministrator.rselevationrequiredcopy
msgid "to copy this object:"
msgstr ""
msgstr "αντιγραφή αυτού του αντικειμένου:"
#: uadministrator.rselevationrequiredcreate
msgid "to create this object:"
@ -10142,7 +10130,7 @@ msgstr " Προσθέτει: "
#: ulng.rsdiffcomparing
msgid "Comparing..."
msgstr ""
msgstr "Σύγκριση..."
#: ulng.rsdiffdeletes
msgid " Deletes: "
@ -10161,24 +10149,25 @@ msgid " Modifies: "
msgstr " Μεταβολές: "
#: ulng.rsdifftextdifferenceencoding
#, fuzzy
msgctxt "ulng.rsdifftextdifferenceencoding"
msgid "Encoding"
msgstr "Κωδικοποίηση"
#: ulng.rsdifftextdifferencelineending
msgid "Line-endings"
msgstr ""
msgstr "Τέλη γραμμών"
#: ulng.rsdifftextidentical
msgid "The text is identical, but the following options are used:"
msgstr ""
msgstr "Το κείμενο είναι ταυτόσημο αλλά οι ακόλουθες ιδιότητες έχουν χρησιμοποιηθεί:"
#: ulng.rsdifftextidenticalnotmatch
msgid ""
"The text is identical, but the files do not match!\n"
"The following differences were found:\n"
msgstr ""
"Το κείμενο είναι ταυτόσημο αλλά τα αρχεία δεν ταιριάζουν!\n"
"Έχουν βρεθεί οι ακόλουθες διαφορές:\n"
#: ulng.rsdlgbuttonabort
msgid "Ab&ort"
@ -10198,7 +10187,7 @@ msgid "A&uto-rename source files"
msgstr "Αυτόματη ονομασία πηγαίων αρχείων"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr "Αυτόματη μετονομασία στοχευμένων αρχείων"
#: ulng.rsdlgbuttoncancel
@ -10402,7 +10391,7 @@ msgstr "με εσωτερικό επεξεργαστή"
#: ulng.rsexecuteviashell
msgctxt "ulng.rsexecuteviashell"
msgid "Execute via shell"
msgstr "Εκτέλεση μέσω κελύφους"
msgstr "Εκτέλεση μέσω κελύφους"
#: ulng.rsexecuteviaterminalclose
msgctxt "ulng.rsexecuteviaterminalclose"
@ -10489,7 +10478,7 @@ msgstr "Αρχεία προσθέτων"
#: ulng.rsfilterprogramslibraries
msgid "Programs and Libraries"
msgstr ""
msgstr "Προγράμματα και Βιβλιοθήκες"
#: ulng.rsfilterstatus
msgid "FILTER"
@ -10900,7 +10889,7 @@ msgstr "Νέο"
#: ulng.rsmnunomedia
msgid "No media available"
msgstr "Δεν υπάρχει διαθέσιμο Μέσο"
msgstr "Δεν υπάρχει διαθέσιμο Μέσο"
#: ulng.rsmnuopen
msgctxt "ulng.rsmnuopen"
@ -11092,7 +11081,7 @@ msgstr "Αδυναμία αντιγραφής αρχείου %s στο %s"
#: ulng.rsmsgerrcannotmovedirectory
msgid "Cannot move directory %s"
msgstr ""
msgstr "Αδυναμία μετακίνησης καταλόγου %s"
#: ulng.rsmsgerrcannotmovefile
msgid "Cannot move file %s"
@ -11536,7 +11525,7 @@ msgstr "Εισαγωγή τοποθεσίας και ονόματος αρχεί
#: ulng.rsmsgincorrectfilelength
msgid "Incorrect resulting filelength for file : \"%s\""
msgstr "Μη Έγκυρο τελικό μήκος αρχείου για το αρχείο : \"%s\""
msgstr "Μη Έγκυρο τελικό μήκος αρχείου για το αρχείο : \"%s\""
#: ulng.rsmsginsertnextdisk
msgid ""
@ -11668,7 +11657,7 @@ msgstr "Έγινε: "
#: ulng.rsmsglogsymlink
msgid "Create symlink %s"
msgstr "Δημιουργία συμβολοδεσμού %s"
msgstr "Δημιουργία συμβολοδεσμού %s"
#: ulng.rsmsglogtest
msgid "Test file integrity %s"
@ -11970,7 +11959,7 @@ msgstr "ΠΡΟΕΙΔΟΠΟΙΗΣΗ:Τερματισμός μιας διαδικ
#: ulng.rsmsgtestarchive
msgid "Do you want to test selected archives?"
msgstr ""
msgstr "Επιθυμείτε να δοκιμάσετε τα επιλεγμένα αρχεία;"
#: ulng.rsmsgthisisnowinclipboard
msgid "\"%s\" is now in the clipboard"
@ -13144,7 +13133,7 @@ msgstr "Έχει καταχωρηθεί σε"
#: ulng.rsoptpluginsselectlualibrary
msgid "Select Lua library file"
msgstr ""
msgstr "Επιλογή αρχείου βιβλιοθήκης Lua"
#: ulng.rsoptrenamingtooltipfiletype
msgid "Renaming tooltip file type"
@ -13581,7 +13570,7 @@ msgstr "Επιλογή Ενέργειας από τη γραμμή Βασικώ
#: ulng.rsstrtvmchoosehotdirectory
msgid "Choose your directory from Hot Directory:"
msgstr "Επιλογή καταλόγου από το Hot Directory:"
msgstr "Επιλογή καταλόγου από το Hot Directory:"
#: ulng.rsstrtvmchooseviewhistory
msgid "Choose your directory from File View History"
@ -13865,7 +13854,7 @@ msgstr "Δίκτυο"
#: ulng.rsvfsrecyclebin
msgid "Recycle Bin"
msgstr ""
msgstr "Κάδος Ανακύκλωσης"
#: ulng.rsviewabouttext
msgid "Internal Viewer of Double Commander."
@ -13915,5 +13904,4 @@ msgstr "Δεν πραγματοποιήθηκε καμία αντικατάστ
#: umaincommands.rsfavoritetabs_setupnotexist
msgid "No setup named \"%s\""
msgstr ""
msgstr "Δεν υπάρχει διαμόρφωση με το όνομα \"%s\""

View file

@ -10066,7 +10066,7 @@ msgid "A&uto-rename source files"
msgstr "A&utorrenombrar archivos origen"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr ""
#: ulng.rsdlgbuttoncancel

View file

@ -10239,7 +10239,7 @@ msgid "A&uto-rename source files"
msgstr "Renomme automatiquement le fichier"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr "Renommer automatiquement les fichiers cibles"
#: ulng.rsdlgbuttoncancel

View file

@ -10648,7 +10648,7 @@ msgid "A&uto-rename source files"
msgstr "&Samostalno preimenuj izvorne datoteke"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr ""
#: ulng.rsdlgbuttoncancel

View file

@ -10235,8 +10235,8 @@ msgid "A&uto-rename source files"
msgstr "Forrásfájlok a&utomatikus átnevezése"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgstr "Célfájlok a&utomatikus átnevezése"
msgid "Auto-rename tar&get files"
msgstr "&Célfájlok automatikus átnevezése"
#: ulng.rsdlgbuttoncancel
msgctxt "ulng.rsdlgbuttoncancel"

View file

@ -10421,7 +10421,7 @@ msgid "A&uto-rename source files"
msgstr ""
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr ""
#: ulng.rsdlgbuttoncancel

View file

@ -10188,7 +10188,7 @@ msgid "A&uto-rename source files"
msgstr "ソースファイルの名前を自動修正(&u)"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr "ターゲットファイルの自動リネーム(&u)"
#: ulng.rsdlgbuttoncancel

File diff suppressed because it is too large Load diff

View file

@ -10487,7 +10487,7 @@ msgid "A&uto-rename source files"
msgstr "&Auto-omdøp kildefiler"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr ""
#: ulng.rsdlgbuttoncancel

View file

@ -9973,7 +9973,7 @@ msgid "A&uto-rename source files"
msgstr "Auto-hernoem bronbestanden"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr "A&utomatisch doelbestanden hernoemen"
#: ulng.rsdlgbuttoncancel

View file

@ -10487,7 +10487,7 @@ msgid "A&uto-rename source files"
msgstr "&Auto-omdøyp kildefiler"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr ""
#: ulng.rsdlgbuttoncancel

View file

@ -9924,7 +9924,7 @@ msgid "A&uto-rename source files"
msgstr "A&utomatyczna zmiana nazwy plików źródłowych"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr "A&utomatyczna zmiana nazwy plików docelowych"
#: ulng.rsdlgbuttoncancel

View file

@ -9951,7 +9951,7 @@ msgid "A&uto-rename source files"
msgstr ""
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr ""
#: ulng.rsdlgbuttoncancel

View file

@ -10279,7 +10279,7 @@ msgid "A&uto-rename source files"
msgstr "A&uto-renomear ficheiros fonte"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr ""
#: ulng.rsdlgbuttoncancel

View file

@ -10401,7 +10401,7 @@ msgid "A&uto-rename source files"
msgstr "Auto renomer arquivos fonte"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr ""
#: ulng.rsdlgbuttoncancel

View file

@ -10266,7 +10266,7 @@ msgid "A&uto-rename source files"
msgstr "A&uto redenumește fișierele sursă"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr ""
#: ulng.rsdlgbuttoncancel

View file

@ -10224,7 +10224,7 @@ msgid "A&uto-rename source files"
msgstr "Автоматич&ески переименовывать копируемые файлы"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr "Автоматически переименовывать имеющиеся фай&лы"
#: ulng.rsdlgbuttoncancel

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: Double Commander 1.0.0 beta\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-01-17 23:08+0300\n"
"PO-Revision-Date: 2021-05-17 18:34+0200\n"
"PO-Revision-Date: 2021-11-21 12:18+0100\n"
"Last-Translator: Jozef Gaal <preklady@mayday.sk>\n"
"Language-Team: Jozef Gaál <preklady@mayday.sk>\n"
"Language: sk\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Native-Language: Slovenčina\n"
"X-Generator: Poedit 2.4.1\n"
"X-Generator: Poedit 3.0\n"
#: fsyncdirsdlg.rscomparingpercent
msgid "Comparing... %d%% (ESC to cancel)"
@ -85,7 +85,7 @@ msgstr "Vyh&radený priestor"
#: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption
msgid "Copy on write"
msgstr ""
msgstr "Kopírovanie pri zápise"
#: tfilesystemcopymoveoperationoptionsui.chkverify.caption
msgid "&Verify"
@ -136,10 +136,9 @@ msgid "Build"
msgstr "Build"
#: tfrmabout.lblcommit.caption
#, fuzzy
msgctxt "tfrmabout.lblcommit.caption"
msgid "Commit"
msgstr "Odovzdať"
msgstr "Commit"
#: tfrmabout.lblfreepascalver.caption
msgctxt "tfrmabout.lblfreepascalver.caption"
@ -2130,7 +2129,7 @@ msgstr "Kopírovať súbory bez potvrdzovania"
#: tfrmmain.actcopypathnosepoffilestoclip.caption
msgid "Copy Full Path of selected file(s) with no ending dir separator"
msgstr ""
msgstr "Kopírovať úplnú cestu k vybraným súborom bez koncového oddeľovača priečinkov"
#: tfrmmain.actcopypathoffilestoclip.caption
msgid "Copy Full Path of selected file(s)"
@ -2175,7 +2174,7 @@ msgstr "&Rýchle priečinky"
#: tfrmmain.actdoanycmcommand.caption
msgid "Execute &internal command..."
msgstr ""
msgstr "Vykonať &interný príkaz..."
#: tfrmmain.actdoanycmcommand.hint
msgid "Select any command and execute it"
@ -4983,7 +4982,7 @@ msgstr ""
#: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption
msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption"
msgid "Do this for paths of:"
msgstr ""
msgstr "Urobiť to pre cesty:"
#: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption
msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption"
@ -5441,7 +5440,7 @@ msgstr "...iba jedna skupina položiek"
#: tfrmoptionsfavoritetabs.misortsinglegroup2.caption
msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP2.CAPTION"
msgid "Sort single group of item(s) only"
msgstr ""
msgstr "Triediť len jednu skupinu položiek"
#: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption
msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLESUBMENU.CAPTION"
@ -5688,7 +5687,7 @@ msgstr "Použiť aktuálne nastavenia na všetky aktuálne nakonfigurované náz
#: tfrmoptionsfileassocextra.cbexecuteviashell.caption
msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption"
msgid "Execute via shell"
msgstr ""
msgstr "Spustiť cez shell"
#: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption
msgid "Extended context menu"
@ -5700,12 +5699,12 @@ msgstr "Konfigurácia priradenia súborov"
#: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption
msgid "Offer to add selection to file association when not included already"
msgstr ""
msgstr "Ponuka na pridanie výberu do asociácie súborov, ak ešte nie je zahrnutá"
#: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint
msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint"
msgid "When accessing file association, offer to add current selected file if not already included in a configured file type"
msgstr ""
msgstr "Pri prístupe k asociácii súborov ponúknuť pridanie aktuálne vybraného súboru, ak ešte nie je zahrnutý v nakonfigurovanom type súboru"
#: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption
msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption"
@ -5730,7 +5729,7 @@ msgstr "Ikony"
#: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption
msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption"
msgid "Starting paths"
msgstr ""
msgstr "Počiatočné cesty"
#: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption
msgid "Extended options items:"
@ -5802,7 +5801,7 @@ msgstr "Preskočiť chyby súborových operácií a ich zapísať do okna zázna
#: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption
msgid "Test archive operation"
msgstr ""
msgstr "Operácia testovania archívu"
#: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption
msgid "Verify checksum operation"
@ -6051,7 +6050,7 @@ msgstr "Formát veľkosti súboru:"
#: tfrmoptionsfilesviews.lblfootersizeformat.caption
msgid "&Footer format:"
msgstr ""
msgstr "Formát pätičky:"
#: tfrmoptionsfilesviews.lblgigabyte.caption
msgid "&Gigabyte:"
@ -6059,7 +6058,7 @@ msgstr "&Gigabyte:"
#: tfrmoptionsfilesviews.lblheadersizeformat.caption
msgid "&Header format:"
msgstr ""
msgstr "Formát záhlavia:"
#: tfrmoptionsfilesviews.lblkilobyte.caption
msgid "&Kilobyte:"
@ -6075,7 +6074,7 @@ msgstr "Vlož&iť nové súbory:"
#: tfrmoptionsfilesviews.lbloperationsizeformat.caption
msgid "O&peration size format:"
msgstr ""
msgstr "Formát veľkosti operácie:"
#: tfrmoptionsfilesviews.lblsortfoldermode.caption
msgid "So&rting directories:"
@ -6182,7 +6181,7 @@ msgstr "Šablóna..."
#: tfrmoptionsfiletypescolors.gbfiletypescolors.caption
msgid "File types colors (sort by drag&&drop)"
msgstr "Farby typu súborov (trieď podľa drag&&drop)"
msgstr "Farby typu súborov (triediť podľa ťahať&&pustiť)"
#: tfrmoptionsfiletypescolors.lblcategoryattr.caption
msgid "Category a&ttributes:"
@ -6355,7 +6354,7 @@ msgstr "Zobraziť prekryté i&kony, napr. pre odkazy"
#: tfrmoptionsicons.chkshowhiddendimmed.caption
msgid "&Dimmed hidden files (slower)"
msgstr ""
msgstr "&Stlmené skryté súbory (pomalšie)"
#: tfrmoptionsicons.gbdisablespecialicons.caption
msgid "Disable special icons"
@ -6552,7 +6551,7 @@ msgstr "&Zbaliť/Rozbaliť"
#: tfrmoptionslog.cblogcommandlineexecution.caption
msgid "External command line execution"
msgstr ""
msgstr "Spustenie externého príkazového riadku"
#: tfrmoptionslog.cblogcpmvln.caption
msgid "Cop&y/Move/Create link/symlink"
@ -6647,7 +6646,7 @@ msgstr "Vždy isť na koreňový priečinok pri zmene diskov"
#: tfrmoptionsmisc.chkshowcurdirtitlebar.caption
msgid "Show &current directory in the main window title bar"
msgstr ""
msgstr "Zobraziť &aktuálny priečinok v hlavnom paneli okna"
#: tfrmoptionsmisc.chkshowwarningmessages.caption
msgid "Show &warning messages (\"OK\" button only)"
@ -6668,7 +6667,7 @@ msgstr "Komentáre súboru (descript.ion)"
#: tfrmoptionsmisc.gbtcexportimport.caption
msgid "Regarding TC export/import:"
msgstr ""
msgstr "Týkajúce sa TC exportu/importu:"
#: tfrmoptionsmisc.lbldescrdefaultencoding.caption
msgctxt "TFRMOPTIONSMISC.LBLDESCRDEFAULTENCODING.CAPTION"
@ -6681,7 +6680,7 @@ msgstr "Konfiguračný súbor:"
#: tfrmoptionsmisc.lbltcexecutable.caption
msgid "TC executable:"
msgstr ""
msgstr "Spustiteľný súbor TC:"
#: tfrmoptionsmisc.lbltcpathfortool.caption
msgid "Toolbar output path:"
@ -6769,7 +6768,7 @@ msgstr ""
#: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption
msgid "Log filenames with full path"
msgstr ""
msgstr "Zaznamenávať názvy súborov s úplnou cestou"
#: tfrmoptionsmultirename.ckbshowmenubarontop.caption
msgid "Show menu bar on top "
@ -6785,19 +6784,19 @@ msgstr "Nahradiť neplatný znak názvu súboru znakom"
#: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption
msgid "Append in the same rename log file"
msgstr ""
msgstr "Pripojiť do toho istého súboru záznamu premenovania"
#: tfrmoptionsmultirename.rbrenaminglogperpreset.caption
msgid "Per preset"
msgstr ""
msgstr "Podľa predvoľby"
#: tfrmoptionsmultirename.rgexitmodifiedpreset.caption
msgid "Exit with modified preset"
msgstr ""
msgstr "Ukončiť s upravenou predvoľbou"
#: tfrmoptionsmultirename.rglaunchbehavior.caption
msgid "Preset at launch"
msgstr ""
msgstr "Prevoľba pri spustení"
#: tfrmoptionspluginsbase.btnaddplugin.caption
msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption"
@ -6876,7 +6875,7 @@ msgstr "Názov súboru"
#: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption
msgid "Apply current settings to all current configured plugins"
msgstr ""
msgstr "Použiť aktuálne nastavenia na všetky aktuálne nakonfigurované zásuvné moduly"
#: tfrmoptionspluginsgroup.ckbautotweak.caption
msgid "When adding a new plugin, automatically go in tweak window"
@ -7118,23 +7117,23 @@ msgstr "Vpravo"
#: tfrmoptionstabsextra.cbgotoconfigafterresave.caption
msgid "Goto to Favorite Tabs Configuration after resaving"
msgstr ""
msgstr "Prechod na konfiguráciu obľúbených kariet po opätovnom uložení"
#: tfrmoptionstabsextra.cbgotoconfigaftersave.caption
msgid "Goto to Favorite Tabs Configuration after saving a new one"
msgstr ""
msgstr "Prechod na konfiguráciu obľúbených kariet po uložení novej"
#: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption
msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)"
msgstr ""
msgstr "Povoliť ďalšie možnosti obľúbených kariet (výber cieľovej strany pri obnovení atď.)"
#: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption
msgid "Default extra settings when saving new Favorite Tabs:"
msgstr ""
msgstr "Predvolené dodatočné nastavenia pri ukladaní nových obľúbených kariet:"
#: tfrmoptionstabsextra.gbtabs.caption
msgid "Folder tabs headers extra"
msgstr ""
msgstr "Extra nastavenia záhlavia záložiek priečinkov"
#: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption
msgid "When restoring tab, existing tabs to keep:"
@ -7155,7 +7154,7 @@ msgstr "Ukladať históriu priečinkov pomocou obľúbených kariet:"
#: tfrmoptionstabsextra.rgwheretoadd.caption
msgid "Default position in menu when saving a new Favorite Tabs:"
msgstr ""
msgstr "Predvolená pozícia v ponuke pri ukladaní nových obľúbených kariet:"
#: tfrmoptionsterminal.edrunintermcloseparams.hint
msgctxt "TFRMOPTIONSTERMINAL.EDRUNINTERMCLOSEPARAMS.HINT"
@ -7368,7 +7367,7 @@ msgstr "Exportovať..."
#: tfrmoptionstoolbarbase.miexportcurrent.caption
msgid "Current toolbar..."
msgstr ""
msgstr "Aktuálny panel nástrojov..."
#: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption
msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTODCBAR.CAPTION"
@ -7668,7 +7667,7 @@ msgstr "Typ tlačidla"
#: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption
msgid "Apply current settings to all configured filenames and paths"
msgstr ""
msgstr "Použiť súčasné nastavenia na všetky nakonfigurované názvy súborov a cesty"
#: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption
msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption"
@ -7683,7 +7682,7 @@ msgstr "Ikony"
#: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption
msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption"
msgid "Starting paths"
msgstr ""
msgstr "Počiatočné cesty"
#: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption
msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption"
@ -7692,7 +7691,7 @@ msgstr "Cesty"
#: tfrmoptionstoolbarextra.lblapplysettingsfor.caption
msgid "Do this for files and paths for:"
msgstr ""
msgstr "Urobiť to pre súbory a cesty pre:"
#: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption
msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption"
@ -7804,7 +7803,7 @@ msgstr "&Typy súborov:"
#: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption
msgid "Discard Modifications"
msgstr ""
msgstr "Zrušiť úpravy"
#: tfrmoptionstooltips.mitooltipsfiletypeexport.caption
msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption"
@ -7831,7 +7830,7 @@ msgstr "S ponukou a interný príkazom"
#: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption
msgid "Double click in tree select and exit"
msgstr ""
msgstr "Dvojklikom v strome vyberte a ukončite"
#: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption
msgctxt "TFRMOPTIONSTREEVIEWMENU.CKBFAVORITATABSFROMMENUCOMMAND.CAPTION"
@ -7852,19 +7851,19 @@ msgstr ""
#: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption
msgid "Use it for Command Line History"
msgstr ""
msgstr "Použiť toto pre históriu príkazového riadku"
#: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption
msgid "Use it for the Dir History"
msgstr ""
msgstr "Použiť toto pre históriu priečinkov"
#: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption
msgid "Use it for the View History (Visited paths for active view)"
msgstr ""
msgstr "Použiť toto pre históriu zobrazení (navštívené cesty pre aktívne zobrazenie)"
#: tfrmoptionstreeviewmenu.gbbehavior.caption
msgid "Behavior regarding selection:"
msgstr ""
msgstr "Správanie v súvislosti s výberom:"
#: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption
msgid "Tree View Menus related options:"
@ -7880,11 +7879,11 @@ msgstr "*POZNÁMKA: Pokiaľ ide o možnosti, ako je citlivosť na veľké a mal
#: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption
msgid "With Directory Hotlist:"
msgstr ""
msgstr "S priečinkom Rýchlych priečinkov:"
#: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption
msgid "With Favorite Tabs:"
msgstr ""
msgstr "S obľúbenými kartami:"
#: tfrmoptionstreeviewmenu.lblusewithhistory.caption
msgid "With History:"
@ -7957,7 +7956,7 @@ msgstr ">>"
#: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption
msgid "Use and display keyboard shortcut for choosing items"
msgstr ""
msgstr "Použiť a zobraziť klávesovú skratku na výber položiek"
#: tfrmoptionstreeviewmenucolor.gbfont.caption
msgid "Font"
@ -8021,7 +8020,7 @@ msgstr "Nevyznačiteľné pod kurzorom:"
#: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint
msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample."
msgstr ""
msgstr "Zmeňte farbu na ľavej strane a uvidíte tu náhľad toho, ako budú vyzerať vaše ponuky v zobrazení stromu s touto vzorkou."
#: tfrmoptionsviewer.btnbackviewercolor.caption
msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION"
@ -8313,7 +8312,7 @@ msgstr "Vybrať duplicitné súbory"
#: tfrmselectduplicates.chkleaveunselected.caption
msgid "&Leave at least one file in each group unselected:"
msgstr ""
msgstr "&Nechajte aspoň jeden nevybraný súbor v každej skupine:"
#: tfrmselectduplicates.cmbincludemask.text
msgctxt "tfrmselectduplicates.cmbincludemask.text"
@ -8361,7 +8360,7 @@ msgstr "Výsledok:"
#: tfrmselectpathrange.lblselectdirectories.caption
msgid "&Select the directories to insert (you may select more than one)"
msgstr ""
msgstr "&Vyberte adresáre, ktoré chcete vložiť (môžete vybrať viac ako jeden)"
#: tfrmselectpathrange.rbfirstfromend.caption
msgctxt "tfrmselectpathrange.rbfirstfromend.caption"
@ -9633,7 +9632,7 @@ msgstr "Potrebujete povolenia administrátora"
#: uadministrator.rselevationrequiredcopy
msgid "to copy this object:"
msgstr ""
msgstr "na skopírovanie tohto objektu:"
#: uadministrator.rselevationrequiredcreate
msgid "to create this object:"
@ -9904,7 +9903,7 @@ msgstr " Pridá: "
#: ulng.rsdiffcomparing
msgid "Comparing..."
msgstr ""
msgstr "Porovnávam..."
#: ulng.rsdiffdeletes
msgid " Deletes: "
@ -9923,7 +9922,6 @@ msgid " Modifies: "
msgstr " Upraví: "
#: ulng.rsdifftextdifferenceencoding
#, fuzzy
msgctxt "ulng.rsdifftextdifferenceencoding"
msgid "Encoding"
msgstr "Kódovanie"
@ -9960,8 +9958,8 @@ msgid "A&uto-rename source files"
msgstr "A&utomaticky premenovať zdrojové súbory"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgstr "A&utomaticky premenovať cieľové súbory"
msgid "Auto-rename tar&get files"
msgstr "Automaticky premenovať cieľové súbory"
#: ulng.rsdlgbuttoncancel
msgctxt "ulng.rsdlgbuttoncancel"
@ -10161,7 +10159,7 @@ msgstr "s interným editorom"
#: ulng.rsexecuteviashell
msgctxt "ulng.rsexecuteviashell"
msgid "Execute via shell"
msgstr ""
msgstr "Spustiť cez shell"
#: ulng.rsexecuteviaterminalclose
msgctxt "ulng.rsexecuteviaterminalclose"
@ -10247,7 +10245,7 @@ msgstr "Súbory modulu"
#: ulng.rsfilterprogramslibraries
msgid "Programs and Libraries"
msgstr ""
msgstr "Programy a knižnice"
#: ulng.rsfilterstatus
msgid "FILTER"
@ -10312,7 +10310,7 @@ msgstr "Hľadať súbory"
#: ulng.rsfindtimeofscan
msgid "Time of scan: "
msgstr ""
msgstr "Čas skenovania: "
#: ulng.rsfindwherebeg
msgid "Begin at"
@ -10617,7 +10615,7 @@ msgstr "Osmičkové"
#: ulng.rsmnucopynetnamestoclip
msgid "Copy names with UNC path"
msgstr ""
msgstr "Kopírovať názvy s UNC cestou"
#: ulng.rsmnucreateshortcut
msgid "Create Shortcut..."
@ -10967,7 +10965,7 @@ msgstr "Neznámy formát archívu"
#: ulng.rsmsgexecutablepath
msgid "Executable: %s"
msgstr ""
msgstr "Spustiteľný súbor: %s"
#: ulng.rsmsgexitstatuscode
msgid "Exit status:"
@ -10983,7 +10981,7 @@ msgstr ""
#: ulng.rsmsgfavoritetabsentername
msgid "Enter a name for this new Favorite Tabs entry:"
msgstr ""
msgstr "Zadajte názov tejto novej Obľúbenej karty:"
#: ulng.rsmsgfavoritetabsenternametitle
msgid "Saving a new Favorite Tabs entry"
@ -11014,7 +11012,6 @@ msgid "Last Favorite Tabs modification have been saved yet. Do you want to save
msgstr ""
#: ulng.rsmsgfavoritetabssimplemode
#, fuzzy
msgctxt "ulng.rsmsgfavoritetabssimplemode"
msgid "Keep saving dir history with Favorite Tabs:"
msgstr "Ukladať históriu priečinkov pomocou obľúbených kariet:"
@ -11137,7 +11134,7 @@ msgstr ""
#: ulng.rsmsghotdirdemopath
msgid "This will change active frame to the following path:"
msgstr ""
msgstr "Týmto sa aktívny rám zmení na nasledujúcu cestu:"
#: ulng.rsmsghotdirdemotarget
msgid "And inactive frame would change to the following path:"
@ -11157,7 +11154,7 @@ msgstr "Exportovať všetko!"
#: ulng.rsmsghotdirexporthotlist
msgid "Export Directory Hotlist - Select the entries you want to export"
msgstr ""
msgstr "Exportovať zoznam rýchlych adresárov - Vyberte položky, ktoré chcete exportovať"
#: ulng.rsmsghotdirexportsel
msgid "Export selected"
@ -11170,7 +11167,7 @@ msgstr "Importovať všetko!"
#: ulng.rsmsghotdirimporthotlist
msgid "Import Directory Hotlist - Select the entries you want to import"
msgstr ""
msgstr "Importovať zoznam rýchlych adresárov - Vyberte položky, ktoré chcete importovať"
#: ulng.rsmsghotdirimportsel
msgctxt "ulng.rsmsghotdirimportsel"
@ -11246,19 +11243,19 @@ msgstr "Názov podponuky"
#: ulng.rsmsghotdirtarget
msgid "Hotdir target"
msgstr ""
msgstr "Cieľ Rýchleho priečinka"
#: ulng.rsmsghotdirtiporderpath
msgid "Determine if you want the active frame to be sorted in a specified order after changing directory"
msgstr ""
msgstr "Určite, či sa má aktívny rám po zmene priečinku zoradiť v určenom poradí"
#: ulng.rsmsghotdirtipordertarget
msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory"
msgstr ""
msgstr "Určite, či chcete, aby sa neaktívny rám po zmene adresára zoradil v určenom poradí"
#: ulng.rsmsghotdirtipspecialdirbut
msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc."
msgstr ""
msgstr "Niektoré funkcie na výber vhodnej cesty relatívnej, absolútnej, špeciálnych priečinkov okien atď."
#: ulng.rsmsghotdirtotalbackuped
msgid ""
@ -11363,7 +11360,7 @@ msgstr "Chyba: "
#: ulng.rsmsglogextcmdlaunch
msgid "Launch external"
msgstr ""
msgstr "Spustiť externý"
#: ulng.rsmsglogextcmdresult
msgid "Result external"
@ -11395,11 +11392,11 @@ msgstr "Komprimovať do súboru %s"
#: ulng.rsmsglogprogramshutdown
msgid "Program shutdown"
msgstr ""
msgstr "Vypnutie programu"
#: ulng.rsmsglogprogramstart
msgid "Program start"
msgstr ""
msgstr "Štart programu"
#: ulng.rsmsglogrmdir
msgid "Remove directory %s"
@ -11467,11 +11464,11 @@ msgstr "Nie je zavedené."
#: ulng.rsmsgobjectnotexists
msgid "Object does not exist!"
msgstr ""
msgstr "Objekt neexistuje!"
#: ulng.rsmsgopeninanotherprogram
msgid "The action cannot be completed because the file is open in another program:"
msgstr ""
msgstr "Akciu nemožno dokončiť, pretože súbor je otvorený v inom programe:"
#: ulng.rsmsgpanelpreview
msgctxt "ulng.rsmsgpanelpreview"
@ -11593,7 +11590,7 @@ msgstr "Pridať cestu z neaktívneho okna"
#: ulng.rsmsgspecialdirbrowssel
msgid "Browse and use selected path"
msgstr ""
msgstr "Prehľadávať a použiť vybranú cestu"
#: ulng.rsmsgspecialdirenvvar
msgid "Use environment variable..."
@ -11617,11 +11614,11 @@ msgstr "Prejsť na špeciálny priečinok Windowsu (TC)..."
#: ulng.rsmsgspecialdirmakereltohotdir
msgid "Make relative to hotdir path"
msgstr ""
msgstr "Urobiť relatívnu cestu k rýchlemu priečinku"
#: ulng.rsmsgspecialdirmkabso
msgid "Make path absolute"
msgstr ""
msgstr "Urobiť cestu absolútnou"
#: ulng.rsmsgspecialdirmkdcrel
msgid "Make relative to Double Commander special path..."
@ -11705,7 +11702,7 @@ msgstr "UPOZORNENIE: Ukončenie procesu môže spôsobiť nežiaduce výsledky v
#: ulng.rsmsgtestarchive
msgid "Do you want to test selected archives?"
msgstr ""
msgstr "Chcete otestovať vybrané archívy?"
#: ulng.rsmsgthisisnowinclipboard
msgid "\"%s\" is now in the clipboard"
@ -11732,6 +11729,8 @@ msgid ""
"Saved!\n"
"Toolbar filename: %s\n"
msgstr ""
"Uložené!\n"
"Názov súboru panela nástrojov: %s\n"
#: ulng.rsmsgtoomanyfilesselected
msgid "Too many files selected."
@ -11868,7 +11867,7 @@ msgstr "[Posledné použité]"
#: ulng.rsmulrenlaunchbehavioroptions
msgid "Last masks under [Last One] preset;Last preset;New fresh masks"
msgstr ""
msgstr "Posledné masky pod predvoľbou [Posledná];Posledná predvoľba;Nové čerstvé masky"
#: ulng.rsmulrenlogstart
msgctxt "ulng.rsmulrenlogstart"
@ -11968,7 +11967,7 @@ msgstr "Meno"
#: ulng.rsmulrenmaskparent
msgid "Parent folder(s)"
msgstr ""
msgstr "Nadradený adresár(e)"
#: ulng.rsmulrenmasksec
msgid "Second"
@ -12001,7 +12000,7 @@ msgstr "Uložiť predvoľbu ako"
#: ulng.rsmulrenpromptnewnameexists
msgid "Preset name already exists. Overwrite?"
msgstr ""
msgstr "Názov predvoľby už existuje. Nahradiť?"
#: ulng.rsmulrenpromptnewpresetname
msgid "Enter new preset name"
@ -12046,7 +12045,7 @@ msgstr "Ľutujeme, zatiaľ žiadne okno „Nájsť súbory“..."
#: ulng.rsnootherfindfileswindowtoclose
msgid "Sorry, no other \"Find files\" window to close and free from memory..."
msgstr ""
msgstr "Je mi ľúto, ale žiadne iné okno \"Nájsť súbory\", ktoré by sa dalo zavrieť a uvoľniť z pamäte..."
#: ulng.rsopenwithdevelopment
msgid "Development"
@ -12459,7 +12458,7 @@ msgstr "Prvý;Posledný;"
#: ulng.rsoptconfigsortorder
msgid "Classic, legacy order;Alphabetic order (but language still first)"
msgstr ""
msgstr "Klasické, staršie poradie;Abecedné poradie (ale jazyk stále na prvom mieste)"
#: ulng.rsoptconfigtreestate
msgid "Full expand;Full collapse"
@ -12483,7 +12482,7 @@ msgstr "oddelenom okne;minimalizovanom oddelenom okne;panely operácií"
#: ulng.rsoptfilesizefloat
msgid "float"
msgstr ""
msgstr "pohyblivý"
#: ulng.rsopthotkeysadddeleteshortcutlong
msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting."
@ -12742,6 +12741,9 @@ msgid ""
"\n"
"Do you want to save modifications?\n"
msgstr ""
"Nastavenia sa zmenili v \"%s\"\n"
"\n"
"Chcete uložiť zmeny?\n"
#: ulng.rsoptionseditorplugins
msgctxt "ulng.rsoptionseditorplugins"
@ -12800,7 +12802,7 @@ msgstr "na vrch zoznamu súborov;Po priečinkoch (ak sú priečinky zoradené pr
#: ulng.rsoptpersonalizedfilesizeformat
msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte"
msgstr ""
msgstr "Personalizovaný pohyblivý;Personalizovaný bajt;Personalizovaný kilobaj;Personalizovaný megabajt;Personalizovaný gigabajt;Personalizovaný terabajt"
#: ulng.rsoptpluginalreadyassigned
msgid "Plugin %s is already assigned for the following extensions:"
@ -12963,7 +12965,7 @@ msgstr "nemeniť pozíciu;použiť rovnaké nastavenia ako pre nové súbory;Na
#: ulng.rspluginfilenamestylelist
msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following"
msgstr ""
msgstr "S úplnou absolútnou cestou;Cesta relatívna k %COMMANDER_PATH%;Relatívna k nasledujúcej"
#: ulng.rspluginsearchcontainscasesenstive
msgid "contains(case)"
@ -13443,7 +13445,7 @@ msgstr "Ľavý panel"
#: ulng.rsvarlistfilename
msgid "Temporary filename of list of filenames"
msgstr ""
msgstr "Dočasný názov súboru zoznamu názvov súborov"
#: ulng.rsvarlistfullfilename
msgid "Temporary filename of list of complete filenames (path+filename)"
@ -13555,7 +13557,7 @@ msgstr ""
#: ulng.rsvarwillnotdointerminal
msgid "Command will be done in terminal, closed at the end"
msgstr ""
msgstr "Príkaz sa vykoná v termináli, na konci sa zavrie"
#: ulng.rsvarwillnothaveendingdelimiter
msgid "Paths will not have ending delimiter (default)"
@ -13568,7 +13570,7 @@ msgstr "Sieť"
#: ulng.rsvfsrecyclebin
msgid "Recycle Bin"
msgstr ""
msgstr "Kôš"
#: ulng.rsviewabouttext
msgid "Internal Viewer of Double Commander."

View file

@ -10064,7 +10064,7 @@ msgid "A&uto-rename source files"
msgstr "&Samodejno preimenuj izvorne datoteke"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr ""
#: ulng.rsdlgbuttoncancel

View file

@ -10472,7 +10472,7 @@ msgid "A&uto-rename source files"
msgstr "&Самостално преименуј изворне датотеке"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr ""
#: ulng.rsdlgbuttoncancel

View file

@ -10473,7 +10473,7 @@ msgid "A&uto-rename source files"
msgstr "&Samostalno preimenuj izvorne datoteke"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr ""
#: ulng.rsdlgbuttoncancel

View file

@ -10639,7 +10639,7 @@ msgid "A&uto-rename source files"
msgstr ""
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr ""
#: ulng.rsdlgbuttoncancel

View file

@ -10,7 +10,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Native-Language: Український нова\n"
"X-Native-Language: Українська мова\n"
#: fsyncdirsdlg.rscomparingpercent
msgid "Comparing... %d%% (ESC to cancel)"
@ -10301,7 +10301,7 @@ msgid "A&uto-rename source files"
msgstr "Авто-перейменування вихідних файлів"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr ""
#: ulng.rsdlgbuttoncancel

View file

@ -10022,7 +10022,7 @@ msgid "A&uto-rename source files"
msgstr "自动重命名源文件(&U)"
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr "自动重命名目标文件(&U)"
#: ulng.rsdlgbuttoncancel

View file

@ -10965,7 +10965,7 @@ msgid "A&uto-rename source files"
msgstr ""
#: ulng.rsdlgbuttonautorenametarget
msgid "A&uto-rename target files"
msgid "Auto-rename tar&get files"
msgstr ""
#: ulng.rsdlgbuttoncancel

View file

@ -7,13 +7,13 @@ 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
List=%P -r0 l {-p%W} %AQ
Extract=%P x -y {-p%W} {%S} %AQ @%LQU
ExtractWithoutPath=%P e -y {-p%W} {%S} %AQ @%LQU
Test=%P t -y {%S} %AQ @%LQU
Delete=%P d -y {%S} %AQ @%LQU
Add=%P a -mx -y {-p%W} {-v%V} {%S} %AQ @%LQU
AddSelfExtract=%P a -mx -y -sfx {-p%W} {-v%V} {%S} %AQ @%LQU
PasswordQuery=Enter password
FormMode=8
Output=0
@ -27,10 +27,10 @@ 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
List=%P -r0 l {-p%W} %AQ
Extract=%P x -y {-p%W} {%S} %AQ @%LQU
ExtractWithoutPath=%P e -y {-p%W} {%S} %AQ @%LQU
Test=%P t -y {%S} %AQ @%LQU
PasswordQuery=Enter password
FormMode=8
Enabled=0
@ -44,13 +44,13 @@ 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
List=%P v -y %AQ
Extract=%P x -y {-p%W} {%S} %AQ @%LQA
ExtractWithoutPath=%P e -y {-p%W} {%S} %AQ @%LQA
Test=%P t -y %AQ
Delete=%P d -y %AQ @%LQA
Add=%P a -y {-p%W} {-v%V} {%S} %AQ @%LQA
AddSelfExtract=%P a -y -sfx {-p%W} {-v%V} {%S} %AQ @%LQA
Enabled=0
Output=0
Debug=0
@ -67,12 +67,12 @@ Format0=* n+
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
List=%P v %AQ
Extract=%P x -y {-g%W} {%S} %AQ !%LQA
ExtractWithoutPath=%P e -y {-g%W} {%S} %AQ !%LQA
Test=%P t -y {%S} %AQ
Delete=%P d -y {%S} %AQ !%LQA
Add=%P a -y {-g%W} {-v%V} {%S} %AQ !%LQA
Enabled=0
Output=0
Debug=0
@ -87,13 +87,13 @@ 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
List=%P l -c- {-p%W} %AQ
Extract=%P x -y {-p%W} {%S} %AQ @%LQA
ExtractWithoutPath=%P e -y {-p%W} {%S} %AQ @%LQA
Test=%P t -y {%S} %AQ
Delete=%P d -y {%S} %AQ @%LQA
Add=%P a -y {-p%W} {-v%V} {%S} %AQ @%LQA
AddSelfExtract=%P a -y -sfx {-p%W} {-v%V} {%S} %AQ @%LQA
PasswordQuery=Enter password
FormMode=0
Enabled=0
@ -104,10 +104,28 @@ Debug=0
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
Format0=aaaaaaaaaa *$z+ yyyy-tt-dd hh:mm n+
List=%P -tv --xz -f %AQ
Extract=%P -x --xz --no-recursion {%S} -f %AQ -T %LFA
Add=%P -c --xz --no-recursion {%S} -f %AQ -T %LA
Enabled=0
Output=0
Debug=0
[ZPAQ]
Archiver=zpaq
Description=ZPAQ - http://mattmahoney.net/dc/zpaq.html
IDSeekRange=0
Extension=zpaq
Start=
End=shown
Format0=- yyyy-tt-dd hh:mm:ss$z+$aaaaa$n+
List=%P l %AQ
Extract=%P x %AQ {%S} {-key %W}
ExtractWithoutPath=
Test=%P l %AQ -test
Add=%P a %AQ %FQU {%S} {-key %W}
FormMode=1
Enabled=0
Output=0
Debug=0
@ -122,13 +140,13 @@ Extension=arc
Start=^--
End=^--
Format0=yyyy tt dd hh mm ss aaaaaaa zzzzzzzzzzzzzzz ppppppppppppppp rrrrrrrr n+
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
List=%P v --noarcext -- %AQ
Extract=%P x {-p%W} -y --noarcext -sclANSI -- %AQ @%LA
ExtractWithoutPath=%P e {-p%W} -y --noarcext -sclANSI -- %AQ @%LA
Test=%P t --noarcext -sclANSI -- %AQ
Delete=%P d --noarcext -sclANSI -- %AQ @%LA
Add=%P a {-p%W} {-ap%RQA} --noarcext -sclANSI {%S} -- %AQ @%LA
AddSelfExtract=%P a {-p%W} {-ap%RQA} -sfx --noarcext -sclANSI {%S} -- %AQ @%LA
PasswordQuery=
FormMode=0
Enabled=0

View file

@ -2,6 +2,7 @@ avi=video-x-generic
bat=application-x-shellscript
deb=application-x-deb
doc=x-office-document
docx=x-office-document
htm=text-html
html=text-html
iso=application-x-cd-image
@ -19,3 +20,4 @@ rpm=application-x-rpm
sh=application-x-shellscript
txt=text-x-generic
xls=x-office-spreadsheet
xlsx=x-office-spreadsheet

View file

@ -1,15 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectOptions>
<Version Value="10"/>
<Version Value="12"/>
<PathDelim Value="\"/>
<General>
<Flags>
<MainUnitHasCreateFormStatements Value="False"/>
<MainUnitHasTitleStatement Value="False"/>
<MainUnitHasScaledStatement Value="False"/>
<CompatibilityMode Value="True"/>
</Flags>
<SessionStorage Value="InProjectDir"/>
<MainUnit Value="0"/>
<Title Value="EverythingDsx"/>
<UseAppBundle Value="False"/>
<ResourceType Value="res"/>
@ -17,9 +18,6 @@
<i18n>
<EnableI18N LFM="False"/>
</i18n>
<VersionInfo>
<StringTable ProductVersion=""/>
</VersionInfo>
<BuildModes Count="2">
<Item1 Name="Release" Default="True"/>
<Item2 Name="Debug">
@ -68,17 +66,29 @@
</PublishOptions>
<RunParams>
<local>
<FormatVersion Value="1"/>
<HostApplicationFilename Value="R:\Temp\doublecmd\doublecmd.exe"/>
</local>
<FormatVersion Value="2"/>
<Modes Count="1">
<Mode0 Name="default">
<local>
<HostApplicationFilename Value="R:\Temp\doublecmd\doublecmd.exe"/>
</local>
</Mode0>
</Modes>
</RunParams>
<RequiredPackages Count="1">
<Item1>
<PackageName Value="doublecmd_common"/>
</Item1>
</RequiredPackages>
<Units Count="2">
<Unit0>
<Filename Value="EverythingDsx.lpr"/>
<IsPartOfProject Value="True"/>
</Unit0>
<Unit1>
<Filename Value="..\everything.pas"/>
<Filename Value="everything.pas"/>
<IsPartOfProject Value="True"/>
</Unit1>
</Units>
@ -87,12 +97,12 @@
<Version Value="11"/>
<PathDelim Value="\"/>
<Target>
<Filename Value="EverythingDsx.dsx" ApplyConventions="False"/>
<Filename Value="..\everything.dsx" ApplyConventions="False"/>
</Target>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/>
<OtherUnitFiles Value=".."/>
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
<OtherUnitFiles Value="..\..\..\..\sdk"/>
<UnitOutputDirectory Value="..\lib"/>
</SearchPaths>
<CodeGeneration>
<SmartLinkUnit Value="True"/>

View file

@ -3,7 +3,7 @@ library EverythingDsx;
{$mode objfpc}{$H+}
uses
Classes, DsxPlugin, everything;
Classes, Everything, DsxPlugin, DCConvertEncoding;
threadvar
AddFileProc: TSAddFileProc;
@ -12,7 +12,7 @@ procedure FoundCallback(FileName: PWideChar);
var
S: String;
begin
S:= UTF8Encode(UnicodeString(FileName));
S:= CeUtf16ToUtf8(UnicodeString(FileName));
AddFileProc(0, PAnsiChar(S));
end;

View file

@ -38,7 +38,7 @@ function ShowPasswordQuery(var Encrypt: Boolean; var Password: WideString): Bool
implementation
uses
SevenZipCodecs;
LazUTF8, SevenZipCodecs;
{$R *.res}
@ -108,9 +108,9 @@ end;
function ComboBoxAdd(hwndDlg: HWND; ItemID: Integer; ItemText: String; ItemData: PtrInt): Integer;
var
Text: WideString;
Text: UnicodeString;
begin
Text:= UTF8Decode(ItemText);
Text:= UTF8ToUTF16(ItemText);
Result:= SendDlgItemMessageW(hwndDlg, ItemID, CB_ADDSTRING, 0, LPARAM(PWideChar(Text)));
SendDlgItemMessage(hwndDlg, ItemID, CB_SETITEMDATA, Result, ItemData);
end;
@ -699,7 +699,6 @@ function PasswordDialog(hwndDlg: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARA
var
PasswordData: PPasswordData;
begin
PasswordData:= PPasswordData(GetWindowLongPtr(hwndDlg, GWLP_USERDATA));
case uMsg of
WM_INITDIALOG:
begin
@ -715,16 +714,18 @@ begin
case LOWORD(wParam) of
IDOK:
begin
PasswordData:= PPasswordData(GetWindowLongPtr(hwndDlg, GWLP_USERDATA));
PasswordData^.EncryptHeader:= IsDlgButtonChecked(hwndDlg, IDC_ENCRYPT_HEADER) <> 0;
GetDlgItemTextW(hwndDlg, IDC_PASSWORD, PasswordData^.Password, MAX_PATH);
EndDialog(hwndDlg, IDOK);
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);
SendDlgItemMessageW(hwndDlg, IDC_PASSWORD, EM_SETPASSWORDCHAR, wParam, 0);
RedrawWindow(hwndDlg, nil, 0, RDW_INVALIDATE or RDW_UPDATENOW);
end;
end;
end;

View file

@ -3,7 +3,7 @@
-------------------------------------------------------------------------
SevenZip archiver plugin
Copyright (C) 2014-2019 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2014-2022 Alexander Koblov (alexx2000@mail.ru)
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@ -347,7 +347,7 @@ begin
else begin
AMessage := SysErrorMessage(GetLastError) + LineEnding;
AMessage += rsSevenZipSfxNotFound + LineEnding + SfxModule;
MessageBox(0, PAnsiChar(AMessage), nil, MB_OK or MB_ICONERROR);
MessageBoxW(0, PWideChar(UTF8ToUTF16(AMessage)), nil, MB_OK or MB_ICONERROR);
Exit(E_NO_FILES);
end;
end;
@ -501,13 +501,14 @@ var
ModulePath: AnsiString;
begin
// Save configuration file name
ConfigFile:= ExtractFilePath(dps^.DefaultIniName) + DefaultIniName;
ConfigFile:= ExtractFilePath(dps^.DefaultIniName);
ConfigFile:= WinCPToUTF8(ConfigFile) + DefaultIniName;
// Get plugin path
if GetModulePath(ModulePath) then
begin
// Use configuration from plugin path
if FileExistsUTF8(ModulePath + DefaultIniName) then
ConfigFile:= UTF8ToSys(ModulePath) + DefaultIniName;
ConfigFile:= ModulePath + DefaultIniName;
end;
// Load plugin configuration
LoadConfiguration;
@ -533,7 +534,7 @@ begin
if (Is7ZipLoaded or Load7Zip) then
LoadLibraries
else begin
MessageBoxW(0, PWideChar(UTF8Decode(rsSevenZipLoadError)), 'SevenZip', MB_OK or MB_ICONERROR);
MessageBoxW(0, PWideChar(UTF8ToUTF16(rsSevenZipLoadError)), 'SevenZip', MB_OK or MB_ICONERROR);
end;
// Create password cache object
PasswordCache:= TPasswordCache.Create;
@ -630,7 +631,7 @@ begin
on E: Exception do
begin
ReturnValue:= GetArchiveError(E);
MessageBox(0, PAnsiChar(E.Message), nil, MB_OK or MB_ICONERROR);
MessageBoxW(0, PWideChar(UTF8ToUTF16(E.Message)), nil, MB_OK or MB_ICONERROR);
end;
end;
Terminate;

View file

@ -365,8 +365,16 @@ 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'));
if MethodStandard then
begin
if (Method > cmCopy) and (Method < cmPPMd) and (Pos('D=', Parameters) = 0) then
begin
AddWideStringProperty('D', WideString(IntToStr(PluginConfig[AFormat].Dictionary) + 'B'));
end
else if (Method = cmPPMd) and (Pos('MEM=', Parameters) = 0) then
begin
AddWideStringProperty('MEM', WideString(IntToStr(PluginConfig[AFormat].Dictionary) + 'B'));
end;
end;
end;
end;
@ -432,7 +440,7 @@ begin
SetArchiveCustom(AJclArchive, Index);
except
on E: Exception do
Messagebox(0, PAnsiChar(E.Message), nil, MB_OK or MB_ICONERROR);
MessageBoxW(0, PWideChar(UTF8ToUTF16(E.Message)), nil, MB_OK or MB_ICONERROR);
end;
Exit;
@ -450,7 +458,7 @@ begin
Ini:= TIniFile.Create(ConfigFile);
try
LibraryPath:= Ini.ReadString('Library', TargetCPU, EmptyStr);
LibraryPath:= Utf16ToUtf8(ExpandEnvironmentStrings(UTF8Decode(LibraryPath)));
LibraryPath:= Utf16ToUtf8(ExpandEnvironmentStrings(UTF8ToUTF16(LibraryPath)));
for ArchiveFormat:= Low(TArchiveFormat) to High(TArchiveFormat) do
begin
Section:= GUIDToString(PluginConfig[ArchiveFormat].ArchiveCLSID^);
@ -467,7 +475,7 @@ begin
end;
except
on E: Exception do
MessageBox(0, PAnsiChar(E.Message), nil, MB_OK or MB_ICONERROR);
MessageBoxW(0, PWideChar(UTF8ToUTF16(E.Message)), nil, MB_OK or MB_ICONERROR);
end;
end;
@ -497,7 +505,7 @@ begin
end;
except
on E: Exception do
MessageBox(0, PAnsiChar(E.Message), nil, MB_OK or MB_ICONERROR);
MessageBoxW(0, PWideChar(UTF8ToUTF16(E.Message)), nil, MB_OK or MB_ICONERROR);
end;
end;

View file

@ -167,7 +167,7 @@ function GetFileAttributesEx(lpFileName: LPCSTR; fInfoLevelId: TGET_FILEEX_INFO_
implementation
uses
LazFileUtils;
LazUTF8, LazFileUtils;
function StreamCopy(Source, Target: TStream): Int64;
begin
@ -232,7 +232,7 @@ end;
function FileDelete(const FileName: String): Boolean;
begin
Result:= DeleteFileW(PWideChar(UTF8Decode(FileName)));
Result:= DeleteFileW(PWideChar(UTF8ToUTF16(FileName)));
end;
function FindUnusedFileName(const FileName, FileExt: String): String;
@ -251,7 +251,7 @@ 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)),
Result:= MoveFileExW(PWideChar(UTF8ToUTF16(OldName)), PWideChar(UTF8ToUTF16(NewName)),
dwFlags[Replace] or MOVEFILE_COPY_ALLOWED);
end;
@ -262,7 +262,7 @@ end;
class function JclSysUtils.LoadModule(var Module: TModuleHandle; FileName: String): Boolean;
begin
Module:= LoadLibraryW(PWideChar(UTF8Decode(FileName)));
Module:= LoadLibraryW(PWideChar(UTF8ToUTF16(FileName)));
Result:= Module <> INVALID_MODULEHANDLE_VALUE;
end;
@ -314,13 +314,13 @@ 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,
Result:= CreateFileW(PWideChar(UTF8ToUTF16(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);
Result:= GetFileAttributesExW(PWideChar(UTF8ToUTF16(lpFileName)), fInfoLevelId, lpFileInformation);
end;
{ TJclDynamicSplitStream }
@ -436,26 +436,26 @@ 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;
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;

View file

@ -6541,7 +6541,10 @@ begin
Value.bstrVal := SysAllocString(PWideChar(AItem.Group));
end;
// kpidBlock: ;
// kpidComment: ;
kpidComment:
begin
Value.vt := VT_EMPTY;
end;
// kpidPosition: ;
// kpidPrefix: ;
// kpidNumSubDirs: ;
@ -6608,7 +6611,7 @@ begin
except
on E: Exception do
begin
case MessageBox(0, PAnsiChar(E.Message), nil, MB_ABORTRETRYIGNORE or MB_ICONERROR) of
case MessageBoxW(0, PWideChar(UTF8Decode(E.Message)), nil, MB_ABORTRETRYIGNORE or MB_ICONERROR) of
IDABORT: Exit(E_ABORT);
IDIGNORE:
begin

View file

@ -29,7 +29,8 @@ uses
cthreads,
{$ENDIF}
FPCAdds,
Classes, SysUtils, TorrentFile, WcxPlugin, DCDateTimeUtils, DCClassesUtf8;
Classes, SysUtils, TorrentFile, WcxPlugin, DCDateTimeUtils, DCClassesUtf8,
DCConvertEncoding;
type
PTorrentHandle = ^TTorrentHandle;
@ -57,7 +58,7 @@ begin
Exit;
end;
try
AFileName := UTF8Encode(UnicodeString(ArchiveData.ArcName));
AFileName := CeUtf16ToUtf8(UnicodeString(ArchiveData.ArcName));
AStream:= TFileStreamEx.Create(AFileName, fmOpenRead or fmShareDenyNone);
try
New(AHandle);
@ -93,7 +94,7 @@ begin
AFile:= TTorrentSubFile(AHandle.Torrent.Files[AHandle.Index]);
HeaderData.FileTime:= UnixFileTimeToWcxTime(AHandle.Torrent.CreationTime);
HeaderData.FileName:= UTF8Decode(AFile.Path + AFile.Name);
HeaderData.FileName:= CeUtf8ToUtf16(AFile.Path + AFile.Name);
HeaderData.UnpSize:= Int64Rec(AFile.Length).Lo;
HeaderData.UnpSizeHigh:= Int64Rec(AFile.Length).Hi;
HeaderData.PackSize:= HeaderData.UnpSize;

View file

@ -26,16 +26,16 @@ var
implementation
uses
IniFiles, UnRARFunc, Extension, RarFunc;
DCClassesUtf8, UnRARFunc, Extension, RarFunc;
{$R *.lfm}
procedure LoadConfig;
var
gIni: TIniFile;
gIni: TIniFileEx;
begin
try
gIni:= TIniFile.Create(IniFileName);
gIni:= TIniFileEx.Create(IniFileName, fmOpenRead);
try
Args:= gIni.ReadString('unrar', 'Args', EmptyStr);
WinRar:= gIni.ReadString('unrar', 'Path', WinRar);
@ -52,10 +52,10 @@ end;
procedure SaveConfig;
var
gIni: TIniFile;
gIni: TIniFileEx;
begin
try
gIni:= TIniFile.Create(IniFileName);
gIni:= TIniFileEx.Create(IniFileName, fmOpenReadWrite);
try
gIni.WriteString('unrar', 'Args', Args);
gIni.WriteString('unrar', 'Path', WinRar);
@ -63,6 +63,7 @@ begin
gIni.WriteBool('unrar', 'Recovery', Recovery);
gIni.WriteBool('unrar', 'Encrypt', Encrypt);
gIni.WriteBool('unrar', 'Solid', Solid);
gIni.UpdateFile;
finally
gIni.Free;
end;

View file

@ -3,7 +3,7 @@
-------------------------------------------------------------------------
Wcx plugin for packing RAR archives
Copyright (C) 2015-2020 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2015-2022 Alexander Koblov (alexx2000@mail.ru)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -41,7 +41,8 @@ var
implementation
uses
Process, LazUTF8, DCProcessUtf8, DCOSUtils, UnRARFunc, RarConfDlg;
Process, LazUTF8, DCConvertEncoding, DCProcessUtf8, DCOSUtils, UnRARFunc,
RarConfDlg;
const
UTF16LEBOM: WideChar = #$FEFF;
@ -63,6 +64,7 @@ begin
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
else Result:= E_UNKNOWN; // Unknown
end;
end;
@ -72,14 +74,14 @@ var
S, FileName: String;
Percent: Integer = 0;
begin
FileName:= GetTempFileName;
TempFile:= FileCreate(FileName);
FileName:= GetTempName('');
TempFile:= mbFileCreate(FileName);
if (TempFile = feInvalidHandle) then Exit(E_ECREATE);
try
FileWrite(TempFile, FileList[1], Length(FileList) * SizeOf(WideChar));
FileClose(TempFile);
Process.Parameters.Add('@' + SysToUTF8(FileName));
Process.Parameters.Add('@' + FileName);
Process.Execute;
@ -125,7 +127,7 @@ end;
procedure PackSetDefaultParams(dps: PPackDefaultParamStruct); dcpcall;
begin
IniFileName:= dps^.DefaultIniName;
IniFileName:= CeSysToUtf8(dps^.DefaultIniName);
LoadConfig;
end;
@ -148,7 +150,7 @@ begin
Process.Parameters.Add('d');
Process.Parameters.Add('-c-');
Process.Parameters.Add('-r-');
Process.Parameters.Add(UTF16ToUTF8(UnicodeString(PackedFile)));
Process.Parameters.Add(CeUtf16ToUtf8(UnicodeString(PackedFile)));
try
// Parse file list
@ -234,15 +236,15 @@ begin
// Destination path
if Assigned(SubPath) then
begin
Process.Parameters.Add('-ap' + UTF16ToUTF8(UnicodeString(SubPath)));
Process.Parameters.Add('-ap' + CeUtf16ToUtf8(UnicodeString(SubPath)));
end;
Process.Parameters.Add(UTF16ToUTF8(UnicodeString(PackedFile)));
Process.Parameters.Add(CeUtf16ToUtf8(UnicodeString(PackedFile)));
// Source path
if Assigned(SrcPath) then
begin
Process.CurrentDirectory:= UTF16ToUTF8(UnicodeString(SrcPath));
Process.CurrentDirectory:= CeUtf16ToUtf8(UnicodeString(SrcPath));
end;
try

View file

@ -60,8 +60,6 @@ end;"/>
<Linking>
<Debugging>
<DebugInfoType Value="dsDwarf2Set"/>
<UseHeaptrc Value="True"/>
<UseExternalDbgSyms Value="True"/>
</Debugging>
<Options>
<PassLinkerOptions Value="True"/>
@ -81,10 +79,8 @@ end;"/>
<Version Value="2"/>
</PublishOptions>
<RunParams>
<local>
<FormatVersion Value="1"/>
<LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
</local>
<FormatVersion Value="2"/>
<Modes Count="0"/>
</RunParams>
<RequiredPackages Count="1">
<Item1>

39
plugins/wcx/unrar/src/unrarfunc.pas Normal file → Executable file
View file

@ -4,7 +4,7 @@
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)
Copyright (C) 2008-2022 Alexander Koblov (alexx2000@mail.ru)
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@ -205,7 +205,7 @@ var
implementation
uses
DCBasicTypes, DCDateTimeUtils, DCConvertEncoding, DCFileAttributes;
SysUtils, DCBasicTypes, DCDateTimeUtils, DCConvertEncoding, DCFileAttributes;
type
// From libunrar (dll.hpp)
@ -234,6 +234,20 @@ var
ProcessedFileNameW: array [0..1023] of WideChar;
ProcessedFileHostOS: RarHostSystem;
function StrLCopy(Dest, Source: PRarUnicodeChar; MaxLen: SizeInt): PRarUnicodeChar; overload;
var
ACounter: SizeInt;
begin
ACounter := 0;
while (Source[ACounter] <> TRarUnicodeChar(0)) and (ACounter < MaxLen) do
begin
Dest[ACounter] := TRarUnicodeChar(Source[ACounter]);
Inc(ACounter);
end;
Dest[ACounter] := TRarUnicodeChar(0);
StrLCopy := Dest;
end;
procedure StringToArrayA(src: AnsiString;
pDst: PAnsiChar;
MaxDstLength: Integer);
@ -339,8 +353,10 @@ end;
function UnrarCallback(Msg: LongWord; UserData, P1: Pointer; P2: PtrInt) : Integer; dcpcall;
var
PasswordU: String;
VolumeNameA: TRarUnicodeArray;
VolumeNameU: TRarUnicodeString;
PasswordA: array[0..511] of AnsiChar;
VolumeNameW: array [0..1023] of WideChar;
begin
Result := 0;
@ -394,20 +410,25 @@ begin
Result := -1;
end;
end;
UCM_NEEDPASSWORD:
UCM_NEEDPASSWORDW:
begin
// DLL needs a password to process archive. This message must be
// processed if you wish to be able to handle encrypted archives.
// Return zero or a positive value to continue process or -1
// to cancel the archive operation.
// P1 - contains the address pointing to the buffer for
// a password 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
// P1 - contains the address pointing to the buffer for a password.
// You need to copy a password here.
// P2 - contains the size of password buffer in characters.
StrLCopy(VolumeNameA, PRarUnicodeChar(P1), High(VolumeNameA));
PasswordU := CeUtf16ToUtf8(RarUnicodeStringToWideString(VolumeNameA));
StrLCopy(PasswordA, PAnsiChar(PasswordU), High(PasswordA));
if not gStartupInfo.InputBox('Unrar', 'Please enter the password:', True, PasswordA, High(PasswordA)) then
Result := -1
else
else begin
Result := 1;
StrPLCopy(VolumeNameW, CeUtf8ToUtf16(PasswordA), High(VolumeNameW));
StrLCopy(PRarUnicodeChar(P1), PRarUnicodeChar(WideStringToRarUnicodeString(VolumeNameW)), P2 - 1);
end;
end;
end;
end;

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectOptions>
<Version Value="10"/>
<Version Value="11"/>
<PathDelim Value="\"/>
<General>
<SessionStorage Value="InProjectDir"/>
@ -56,8 +56,6 @@ end;"/>
<Linking>
<Debugging>
<DebugInfoType Value="dsDwarf2Set"/>
<UseHeaptrc Value="True"/>
<UseExternalDbgSyms Value="True"/>
</Debugging>
<Options>
<PassLinkerOptions Value="True"/>
@ -75,15 +73,19 @@ end;"/>
</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>
<FormatVersion Value="2"/>
<Modes Count="1">
<Mode0 Name="default">
<local>
<LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
</local>
</Mode0>
</Modes>
</RunParams>
<RequiredPackages Count="2">
<Item1>

View file

@ -3,7 +3,7 @@
-------------------------------------------------------------------------
WCX plugin for working with *.zip, *.gz, *.tar, *.tgz archives
Copyright (C) 2007-2019 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2007-2022 Alexander Koblov (alexx2000@mail.ru)
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@ -201,7 +201,7 @@ begin
sFileName := Arc.GetFileName(Arc.Tag);
StringToArrayW(UTF8Decode(sFileName), @HeaderData.FileName, SizeOf(HeaderData.FileName));
StringToArrayW(CeUtf8ToUtf16(sFileName), @HeaderData.FileName, SizeOf(HeaderData.FileName));
with Arc.Items[Arc.Tag] do
begin
@ -246,9 +246,7 @@ begin
// 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
if Arc.FProcessDataProcW(PWideChar(CeUtf8ToUtf16(Arc.Items[Arc.Tag].FileName)), -1100) = 0 then
Arc.FOperationResult := E_EABORTED;
end;
end;
@ -268,9 +266,7 @@ begin
// 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
if Arc.FProcessDataProcW(PWideChar(CeUtf8ToUtf16(Arc.Items[Arc.Tag].FileName)), -1100) = 0 then
Arc.FOperationResult := E_EABORTED;
end;
end;
@ -353,7 +349,6 @@ begin
Arc.DeflationOption:= gDeflationOption;
Arc.FProcessDataProcW := gProcessDataProcW;
Arc.OnProcessItemFailure := @Arc.AbProcessItemFailureEvent;
Arc.StoreOptions := Arc.StoreOptions + [soReplace];
sPackedFile := UTF16ToUTF8(UnicodeString(PackedFile));
@ -369,6 +364,7 @@ begin
Arc.OnArchiveItemProgress := @Arc.AbArchiveItemProgressEvent;
Arc.OnArchiveProgress := @Arc.AbArchiveProgressEvent;
Arc.StoreOptions := Arc.StoreOptions + [soReplace];
Arc.BaseDirectory := UTF16ToUTF8(UnicodeString(SrcPath));
@ -574,9 +570,9 @@ var
begin
if (not mbFileExists(ImageName)) and Assigned(FChangeVolProcW) then
begin
StrPCopy(AVolume, UTF8Decode(ImageName));
StrPCopy(AVolume, CeUtf8ToUtf16(ImageName));
Abort := (FChangeVolProcW(AVolume, PK_VOL_ASK) = 0);
if not Abort then ImageName:= UTF8Encode(UnicodeString(AVolume));
if not Abort then ImageName:= CeUtf16ToUtf8(UnicodeString(AVolume));
end;
end;
@ -587,7 +583,7 @@ begin
if Assigned(FProcessDataProcW) then
begin
if Assigned(Item) then
Abort := (FProcessDataProcW(PWideChar(UTF8Decode(Item.FileName)), -(Progress + 1000)) = 0)
Abort := (FProcessDataProcW(PWideChar(CeUtf8ToUtf16(Item.FileName)), -(Progress + 1000)) = 0)
else
Abort := (FProcessDataProcW(nil, -(Progress + 1000)) = 0);
end;

View file

@ -551,7 +551,9 @@ begin
else if (Ext = '.TLZ') then
Result := atLzmaTar
else if (Ext = '.ZST') then
Result := atZstd;
Result := atZstd
else if (Ext = '.TZST') then
Result := atZstdTar;
end;
{$IF NOT DEFINED(ExtractCabSupport)}
if Result = atCab then

View file

@ -119,7 +119,7 @@ uses
Windows, // Fix inline warnings
{$ENDIF}
StrUtils, SysUtils,
AbBzip2, AbExcept, AbVMStrm, AbBitBkt, DCOSUtils, DCClassesUtf8;
AbBzip2, AbExcept, AbVMStrm, AbBitBkt, AbProgress, DCOSUtils, DCClassesUtf8;
{ ****************** Helper functions Not from Classes Above ***************** }
function VerifyHeader(const Header : TAbBzip2Header) : Boolean;
@ -326,7 +326,7 @@ var
CurItem: TAbBzip2Item;
UpdateArchive: Boolean;
TempFileName: String;
InputFileStream: TStream;
InputFileStream: TAbProgressFileStream;
begin
if IsBzippedTar and TarAutoHandle then
begin
@ -338,7 +338,7 @@ begin
FreeAndNil(FBzip2Stream);
TempFileName := GetTempName(FArchiveName + ExtensionSeparator);
{ Create new archive with temporary name }
FBzip2Stream := TFileStreamEx.Create(TempFileName, fmCreate or fmShareDenyWrite);
FBzip2Stream := TAbProgressFileStream.Create(TempFileName, fmCreate or fmShareDenyWrite, OnProgress);
end;
FTarStream.Position := 0;
CompStream := TBZCompressionStream.Create(bs9, FBzip2Stream);
@ -377,7 +377,7 @@ begin
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 );
InputFileStream := TAbProgressFileStream.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite, OnProgress);
try
CompStream.CopyFrom(InputFileStream, 0);{ Copy/compress entire Instream to FBzip2Stream }
finally
@ -408,23 +408,29 @@ const
BufSize = $F000;
var
DecompStream: TBZDecompressionStream;
ProxyStream: TAbProgressStream;
Buffer: PByte;
N: Integer;
begin
DecompStream := TBZDecompressionStream.Create(FBzip2Stream);
ProxyStream:= TAbProgressStream.Create(FBzip2Stream, OnProgress);
try
GetMem(Buffer, BufSize);
DecompStream := TBZDecompressionStream.Create(ProxyStream);
try
N := DecompStream.Read(Buffer^, BufSize);
while N > 0 do begin
aStream.WriteBuffer(Buffer^, N);
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
FreeMem(Buffer, BufSize);
DecompStream.Free;
end;
finally
DecompStream.Free;
ProxyStream.Free;
end;
end;
{ -------------------------------------------------------------------------- }

View file

@ -293,7 +293,7 @@ uses
Windows,
{$ENDIF}
SysUtils,
AbBitBkt, AbDfBase, AbDfDec, AbZlibPrc, AbExcept, AbResString,
AbBitBkt, AbDfBase, AbDfDec, AbZlibPrc, AbExcept, AbResString, AbProgress,
AbVMStrm, DCOSUtils, DCClassesUtf8, DCConvertEncoding;
const
@ -985,6 +985,7 @@ procedure TAbGzipArchive.ExtractItemToStreamAt(Index: Integer;
aStream: TStream);
var
GzHelp : TAbGzipStreamHelper;
ProxyStream : TAbProgressStream;
begin
if IsGzippedTar and TarAutoHandle then begin
SwapToTar;
@ -994,43 +995,48 @@ begin
SwapToGzip;
{ note Index ignored as there's only one item in a GZip }
GZHelp := TAbGzipStreamHelper.Create(FGzStream);
ProxyStream := TAbProgressStream.Create(FGzStream, FOnProgress);
try
FGzStream.Seek(0, soBeginning);
GZHelp := TAbGzipStreamHelper.Create(ProxyStream);
try
FGzStream.Seek(0, soBeginning);
{ read GZip Header }
GzHelp.ReadHeader;
repeat
{ extract copy data from GZip}
GzHelp.ExtractItemData(aStream);
{ Get validation data }
GzHelp.ReadTail;
{$IFDEF STRICTGZIP}
{ According to
http://www.gzip.org/zlib/rfc1952.txt
A compliant gzip compressor should calculate and set the CRC32 and ISIZE.
However, a compliant decompressor should not check these values.
If you want to check the the values of the CRC32 and ISIZE in a GZIP file
when decompressing enable the STRICTGZIP define contained in AbDefine.inc }
{ validate against CRC }
if GzHelp.FItem.Crc32 <> GzHelp.TailCRC then
raise EAbGzipBadCRC.Create;
{ validate against file size }
if GzHelp.FItem.UncompressedSize <> GZHelp.TailSize then
raise EAbGzipBadFileSize.Create;
{$ENDIF}
{ try concatenated streams }
{ read GZip Header }
GzHelp.ReadHeader;
until not VerifyHeader(GZHelp.FItem.FGzHeader);
repeat
{ extract copy data from GZip}
GzHelp.ExtractItemData(aStream);
{ Get validation data }
GzHelp.ReadTail;
{$IFDEF STRICTGZIP}
{ According to
http://www.gzip.org/zlib/rfc1952.txt
A compliant gzip compressor should calculate and set the CRC32 and ISIZE.
However, a compliant decompressor should not check these values.
If you want to check the the values of the CRC32 and ISIZE in a GZIP file
when decompressing enable the STRICTGZIP define contained in AbDefine.inc }
{ validate against CRC }
if GzHelp.FItem.Crc32 <> GzHelp.TailCRC then
raise EAbGzipBadCRC.Create;
{ validate against file size }
if GzHelp.FItem.UncompressedSize <> GZHelp.TailSize then
raise EAbGzipBadFileSize.Create;
{$ENDIF}
{ try concatenated streams }
GzHelp.ReadHeader;
until not VerifyHeader(GZHelp.FItem.FGzHeader);
finally
GzHelp.Free;
end;
finally
GzHelp.Free;
ProxyStream.Free;
end;
end;
end;
@ -1121,9 +1127,11 @@ var
InGzHelp, OutGzHelp : TAbGzipStreamHelper;
Abort : Boolean;
i : Integer;
NewStream : TAbVirtualMemoryStream;
NewStream : TStream;
UncompressedStream : TStream;
CurItem : TAbGzipItem;
CreateArchive : Boolean;
ATempName : String;
begin
{prepare for the try..finally}
OutGzHelp := nil;
@ -1134,12 +1142,16 @@ begin
try
{init new archive stream}
NewStream := TAbVirtualMemoryStream.Create;
CreateArchive:= FOwnsStream and (FGzStream.Size = 0) and (FGzStream is TFileStreamEx);
if CreateArchive then
NewStream := FGzStream
else begin
ATempName := Copy(ExtractFileName(FArchiveName), 1, MAX_PATH div 2) + '~';
ATempName := GetTempName(ExtractFilePath(FArchiveName) + ATempName) + '.tmp';
NewStream := TFileStreamEx.Create(ATempName, fmCreate or fmShareDenyWrite);
end;
OutGzHelp := TAbGzipStreamHelper.Create(NewStream);
{ create helper }
NewStream.SwapFileDirectory := ExtractFilePath(AbGetTempFile(FTempDir, False));
{ save the Tar data }
if IsGzippedTar and TarAutoHandle then begin
SwapToTar;
@ -1191,8 +1203,8 @@ begin
end
else begin
CurItem.LastModTimeAsDateTime := AbGetFileTime(CurItem.DiskFileName);
UncompressedStream := TFileStreamEx.Create(CurItem.DiskFileName,
fmOpenRead or fmShareDenyWrite );
UncompressedStream := TAbProgressFileStream.Create(CurItem.DiskFileName,
fmOpenRead or fmShareDenyWrite, OnProgress);
try
CurItem.UncompressedSize := UncompressedStream.Size;
@ -1223,11 +1235,32 @@ begin
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);
if CreateArchive then
NewStream := nil
else begin
if FOwnsStream then
begin
{need new stream to write}
if CreateArchive then
NewStream := nil
else begin
FGZStream := nil;
FreeAndNil(FStream);
FreeAndNil(NewStream);
if (mbDeleteFile(FArchiveName) and mbRenameFile(ATempName, FArchiveName)) then
FStream := TFileStreamEx.Create(FArchiveName, fmOpenReadWrite or fmShareDenyWrite)
else begin
RaiseLastOSError;
end;
FGZStream := FStream;
end;
end
else begin
FStream.Size := 0;
FStream.Position := 0;
FStream.CopyFrom(NewStream, 0)
end;
end;
end;
{update Items list}
@ -1245,7 +1278,8 @@ begin
DoArchiveProgress( 100, Abort );
finally {NewStream}
OutGzHelp.Free;
NewStream.Free;
if (FStream <> NewStream) then
NewStream.Free;
end;
end;

View file

@ -0,0 +1,109 @@
unit AbProgress;
{$mode ObjFPC}{$H+}
interface
uses
Classes, SysUtils, AbArcTyp, DCClassesUtf8;
type
{ TAbProgress }
TAbProgress = object
DoneSize: Int64;
FileSize: Int64;
OnProgress: TAbProgressEvent;
procedure DoProgress(Result: Integer);
end;
{ TAbProgressStream }
TAbProgressStream = class(TStream)
private
FSource: TStream;
FProgress: TAbProgress;
public
constructor Create(ASource : TStream; AEvent: TAbProgressEvent); reintroduce;
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;
{ TAbProgressFileStream }
TAbProgressFileStream = class(TFileStreamEx)
private
FProgress: TAbProgress;
public
constructor Create(const AFileName: String; Mode: LongWord; AEvent: TAbProgressEvent); reintroduce;
function Read(var Buffer; Count: Longint): Longint; override;
end;
implementation
uses
AbExcept, DCOSUtils;
{ TAbProgress }
procedure TAbProgress.DoProgress(Result: Integer);
var
Percent: Byte;
Abort: Boolean = False;
begin
if (FileSize > 0) then
begin
DoneSize += Result;
Percent:= Byte(DoneSize * 100 div FileSize);
OnProgress(Percent, Abort);
if Abort then raise EAbUserAbort.Create;
end;
end;
{ TAbProgressStream }
constructor TAbProgressStream.Create(ASource: TStream; AEvent: TAbProgressEvent);
begin
FSource:= ASource;
FProgress.OnProgress:= AEvent;
FProgress.FileSize:= FSource.Size;
end;
function TAbProgressStream.Read(var Buffer; Count: Longint): Longint;
begin
Result:= FSource.Read(Buffer, Count);
if Assigned(FProgress.OnProgress) then FProgress.DoProgress(Result);
end;
function TAbProgressStream.Write(const Buffer; Count: Longint): Longint;
begin
Result:= FSource.Write(Buffer, Count);
end;
function TAbProgressStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64;
begin
Result:= FSource.Seek(Offset, Origin);
end;
{ TAbProgressFileStream }
constructor TAbProgressFileStream.Create(const AFileName: String;
Mode: LongWord; AEvent: TAbProgressEvent);
begin
FProgress.OnProgress:= AEvent;
inherited Create(AFileName, Mode);
FProgress.FileSize:= FileGetSize(Handle);
end;
function TAbProgressFileStream.Read(var Buffer; Count: Longint): Longint;
begin
Result:= inherited Read(Buffer, Count);
if Assigned(FProgress.OnProgress) then FProgress.DoProgress(Result);
end;
end.

View file

@ -1153,6 +1153,11 @@ begin
begin
SetString(AValue, P + 1, ALength - 1);
FTarItem.Size := StrToInt64Def(AValue, FTarItem.Size);
end
else if (AName = 'mtime') then
begin
SetString(AValue, P + 1, ALength - 1);
FTarItem.ModTime := Round(StrToFloatDef(AValue, FTarItem.ModTime));
end;
Inc(P, ALength);
@ -2148,11 +2153,6 @@ begin
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
@ -2216,11 +2216,6 @@ begin
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
@ -2235,9 +2230,9 @@ var
ItemFound : Boolean;
Abort : Boolean;
Confirm : Boolean;
Duplicate : Boolean;
i : Integer;
Progress : Byte;
begin
{ create helper }
TarHelp := TAbTarStreamHelper.Create(FStream);
@ -2245,6 +2240,7 @@ begin
{build Items list from tar header records}
{ reset Tar }
Duplicate := False;
ItemFound := (FStream.Size > 0) and TarHelp.FindFirstItem;
if ItemFound then FArchFormat := UNKNOWN_FORMAT
else FArchFormat := V7_FORMAT;
@ -2264,7 +2260,24 @@ begin
if FArchFormat < Item.ArchiveFormat then
FArchFormat := Item.ArchiveFormat; { Take the max format }
Item.Action := aaNone;
FItemList.Add(Item);
{
TAR archive can contain the same directory multiple
times. In this case, use the last found directory.
}
if Item.IsDirectory then
begin
I := FItemList.Find(Item.FileName);
if (I >= 0) then
begin
Duplicate := True;
FItemList.Items[I] := Item;
end;
end;
if Duplicate then
Duplicate := False
else begin
FItemList.Add(Item);
end;
end { end if }
else begin
{ unhandled Tar file system entity, notify user, but otherwise ignore }
@ -2372,19 +2385,24 @@ var
CurItem : TAbTarItem;
AttrEx : TAbAttrExRec;
ATempName : String;
CreateArchive : Boolean;
begin
if FArchReadOnly then
raise EAbTarBadOp.Create; { Archive is read only }
{init new archive stream}
CreateArchive:= FOwnsStream and (FStream.Size = 0) and (FStream is TFileStreamEx);
if CreateArchive then
NewStream := FStream
if FOwnsStream and (FStream is TFileStreamEx) then
begin
if FStream.Size = 0 then
NewStream := FStream
else begin
ATempName := Copy(ExtractOnlyFileName(FArchiveName), 1, MAX_PATH div 2) + '~';
ATempName := GetTempName(ExtractFilePath(FArchiveName) + ATempName) + '.tmp';
NewStream := TFileStreamEx.Create(ATempName, fmCreate or fmShareDenyWrite);
end;
end
else begin
ATempName := Copy(ExtractOnlyFileName(FArchiveName), 1, MAX_PATH div 2) + '~';
ATempName := GetTempName(ExtractFilePath(FArchiveName) + ATempName) + '.tmp';
NewStream := TFileStreamEx.Create(ATempName, fmCreate or fmShareDenyWrite);
NewStream := TAbVirtualMemoryStream.Create;
TAbVirtualMemoryStream(NewStream).SwapFileDirectory := ExtractFileDir(FArchiveName);
end;
OutTarHelp := TAbTarStreamHelper.Create(NewStream);
@ -2485,7 +2503,7 @@ begin
if FOwnsStream then
begin
{need new stream to write}
if CreateArchive then
if NewStream = FStream then
NewStream := nil
else begin
FreeAndNil(FStream);

View file

@ -160,6 +160,7 @@ uses
AbSWStm,
AbUnzOutStm,
AbUtils,
AbZlibPrc,
AbWinZipAes,
DCClassesUtf8;
@ -899,11 +900,17 @@ begin
Hlpr := TAbDeflateHelper.Create;
try
if Item.CompressionMethod = cmEnhancedDeflated then
begin
Hlpr.Options := Hlpr.Options or dfc_UseDeflate64;
Hlpr.StreamSize := Item.CompressedSize;
Hlpr.StreamSize := Item.CompressedSize;
AbDfDec.Inflate(InStream, OutStream, Hlpr)
end
else begin
Hlpr.NormalSize := Item.UncompressedSize;
Inflate(InStream, OutStream, Hlpr);
AbZlibPrc.Inflate(InStream, OutStream, Hlpr);
end;
finally
Hlpr.Free;
end;

View file

@ -38,6 +38,7 @@ interface
uses
{$IFDEF MSWINDOWS}
Windows,
DCConvertEncoding,
{$ENDIF}
{$IFDEF LibcAPI}
Libc,
@ -257,7 +258,7 @@ type
{ recursive routine to see if the source string matches
the pattern. Both ? and * wildcard characters are allowed.}
function AbPercentage(V1, V2 : LongInt) : Byte;
function AbPercentage(V1, V2 : Int64) : Byte;
{-Returns the ratio of V1 to V2 * 100}
procedure AbStripDots( var FName : string );
@ -320,8 +321,8 @@ const
MinutesInDay = 1440; {Number of minutes in a day}
function AbUnixTimeToLocalDateTime(UnixTime : LongInt) : TDateTime;
function AbLocalDateTimeToUnixTime(DateTime : TDateTime) : LongInt;
function AbUnixTimeToLocalDateTime(UnixTime : Int64) : TDateTime;
function AbLocalDateTimeToUnixTime(DateTime : TDateTime) : Int64;
function AbDosFileDateToDateTime(FileDate, FileTime : Word) : TDateTime;
function AbDateTimeToDosFileDate(Value : TDateTime) : LongInt;
@ -375,6 +376,7 @@ uses
AbExcept,
DCOSUtils,
DCStrUtils,
DCBasicTypes,
DCDateTimeUtils;
(*
@ -447,7 +449,7 @@ begin
end;
{$ENDIF UNIX}
{$IFDEF MSWINDOWS}
Result := CopyFileW(PWideChar(UTF8Decode(Source)), PWideChar(UTF8Decode(Destination)), FailIfExists);
Result := CopyFileW(PWideChar(CeUtf8ToUtf16(Source)), PWideChar(CeUtf8ToUtf16(Destination)), FailIfExists);
{$ENDIF MSWINDOWS}
end;
{ -------------------------------------------------------------------------- }
@ -556,7 +558,7 @@ function AbGetDriveFreeSpace(const ArchiveName : string) : Int64;
var
FreeAvailable, TotalSpace: Int64;
begin
if GetDiskFreeSpaceExW(PWideChar(UTF8Decode(ExtractFilePath(ExpandFileName(ArchiveName)))),
if GetDiskFreeSpaceExW(PWideChar(CeUtf8ToUtf16(ExtractFilePath(ExpandFileName(ArchiveName)))),
FreeAvailable, TotalSpace, nil) then
Result := FreeAvailable
else
@ -911,13 +913,9 @@ begin
end;
end;
{ -------------------------------------------------------------------------- }
function AbPercentage(V1, V2 : LongInt) : Byte;
function AbPercentage(V1, V2 : Int64): 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
@ -997,18 +995,20 @@ end;
{ -------------------------------------------------------------------------- }
function AbWriteVolumeLabel(const VolName : string;
Drive : Char) : Cardinal;
{$IFDEF MSWINDOWS}
var
Temp : WideString;
Temp : UnicodeString;
Vol : array[0..11] of WideChar;
Root : array[0..3] of WideChar;
{$ENDIF}
begin
Temp := UTF8Decode(VolName);
{$IFDEF MSWINDOWS}
Temp := CeUtf8ToUtf16(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;
@ -1039,7 +1039,7 @@ Result := Result * SecondsInMinute;
end;
{$ENDIF}
{ -------------------------------------------------------------------------- }
function AbUnixTimeToLocalDateTime(UnixTime : LongInt) : TDateTime;
function AbUnixTimeToLocalDateTime(UnixTime : Int64) : TDateTime;
{ convert UTC unix date to Delphi TDateTime in local timezone }
{$IFDEF MSWINDOWS}
var
@ -1061,12 +1061,12 @@ begin
{$ENDIF}
{$IFDEF UNIX}
begin
Result := FileDateToDateTime(UnixTime);
Result := UnixFileTimeToDateTime(TUnixFileTime(UnixTime));
{$ENDIF}
end;
{ -------------------------------------------------------------------------- }
function AbLocalDateTimeToUnixTime(DateTime : TDateTime) : LongInt;
function AbLocalDateTimeToUnixTime(DateTime : TDateTime) : Int64;
{ convert local Delphi TDateTime to UTC unix date }
{$IFDEF MSWINDOWS}
var
@ -1086,7 +1086,7 @@ begin
{$ENDIF}
{$IFDEF UNIX}
begin
Result := DateTimeToFileDate(DateTime);
Result := Int64(DateTimeToUnixFileTime(DateTime));
{$ENDIF}
end;
{ -------------------------------------------------------------------------- }
@ -1257,11 +1257,9 @@ begin
aAttr.Attr := -1;
aAttr.Mode := 0;
{$IFDEF MSWINDOWS}
Result := GetFileAttributesExW(PWideChar(UTF8Decode(aFileName)), GetFileExInfoStandard, @FindData);
Result := GetFileAttributesExW(PWideChar(CeUtf8ToUtf16(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));
aAttr.Time := WinFileTimeToDateTime(FindData.ftLastWriteTime);
LARGE_INTEGER(aAttr.Size).LowPart := FindData.nFileSizeLow;
LARGE_INTEGER(aAttr.Size).HighPart := FindData.nFileSizeHigh;
aAttr.Attr := FindData.dwFileAttributes;

View file

@ -114,7 +114,7 @@ uses
Windows, // Fix inline warnings
{$ENDIF}
StrUtils, SysUtils,
AbXz, AbExcept, AbVMStrm, AbBitBkt, CRC, DCOSUtils, DCClassesUtf8;
AbXz, AbExcept, AbVMStrm, AbBitBkt, AbProgress, CRC, DCOSUtils, DCClassesUtf8;
{ ****************** Helper functions Not from Classes Above ***************** }
function VerifyHeader(const Header : TAbXzHeader) : Boolean;
@ -317,8 +317,8 @@ var
CurItem: TAbXzItem;
UpdateArchive: Boolean;
TempFileName: String;
InputFileStream: TStream;
LzmaCompression: TLzmaCompression;
InputFileStream: TAbProgressFileStream;
begin
if IsXzippedTar and TarAutoHandle then
begin
@ -330,7 +330,7 @@ begin
FreeAndNil(FXzStream);
TempFileName := GetTempName(FArchiveName + ExtensionSeparator);
{ Create new archive with temporary name }
FXzStream := TFileStreamEx.Create(TempFileName, fmCreate or fmShareDenyWrite);
FXzStream := TAbProgressFileStream.Create(TempFileName, fmCreate or fmShareDenyWrite, OnProgress);
end;
FTarStream.Position := 0;
LzmaCompression := TLzmaCompression.Create(FTarStream, FXzStream);
@ -374,7 +374,7 @@ begin
end;
end
else begin
InputFileStream := TFileStreamEx.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite);
InputFileStream := TAbProgressFileStream.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite, OnProgress);
try
LzmaCompression := TLzmaCompression.Create(InputFileStream, FXzStream);
try
@ -404,13 +404,19 @@ end;
{ -------------------------------------------------------------------------- }
procedure TAbXzArchive.DecompressToStream(aStream: TStream);
var
ProxyStream: TAbProgressStream;
LzmaDecompression: TLzmaDecompression;
begin
LzmaDecompression := TLzmaDecompression.Create(FXzStream, aStream);
ProxyStream:= TAbProgressStream.Create(FXzStream, OnProgress);
try
LzmaDecompression.Code
LzmaDecompression := TLzmaDecompression.Create(ProxyStream, aStream);
try
LzmaDecompression.Code
finally
LzmaDecompression.Free;
end;
finally
LzmaDecompression.Free;
ProxyStream.Free;
end;
end;
{ -------------------------------------------------------------------------- }

View file

@ -73,6 +73,23 @@ const
Ab_XceedUnicodePathSubfieldID : Word = $554E;
Ab_XceedUnicodePathSignature : LongWord= $5843554E;
type
TNtfsTimeField = packed record
Reserved : UInt32;
Tag : UInt16;
Size : UInt16;
Mtime : UInt64;
Atime : UInt64;
Ctime : UInt64;
end;
PNtfsTimeField = ^TNtfsTimeField;
TInfoZipTimeField = packed record
Tag : Byte;
Mtime : UInt32;
end;
PInfoZipTimeField = ^TInfoZipTimeField;
type
PAbByteArray4K = ^TAbByteArray4K;
TAbByteArray4K = array[1..4096] of Byte;
@ -413,6 +430,7 @@ type
function GetLastModFileTime : Word; override;
function GetNativeFileAttributes : LongInt; override;
function GetNativeLastModFileTime: Longint; override;
function GetLastModTimeAsDateTime: TDateTime; override;
procedure SetCompressedSize( const Value : Int64 ); override;
procedure SetCRC32( const Value : Longint ); override;
procedure SetExternalFileAttributes( Value : LongWord ); override;
@ -420,6 +438,7 @@ type
procedure SetLastModFileDate(const Value : Word ); override;
procedure SetLastModFileTime(const Value : Word ); override;
procedure SetUncompressedSize( const Value : Int64 ); override;
procedure SetLastModTimeAsDateTime(const Value: TDateTime); override;
public {methods}
constructor Create;
@ -1455,6 +1474,14 @@ begin
{$ENDIF}
end;
{ -------------------------------------------------------------------------- }
function TAbZipItem.GetLastModTimeAsDateTime: TDateTime;
begin
if (FDateTime <> 0) then
Result := FDateTime
else
Result := AbDosFileDateToDateTime(FItemInfo.LastModFileDate, FItemInfo.LastModFileTime);
end;
{ -------------------------------------------------------------------------- }
function TAbZipItem.GetShannonFanoTreeCount : Byte;
begin
Result := FItemInfo.ShannonFanoTreeCount;
@ -1687,7 +1714,7 @@ begin
{$IFDEF MSWINDOWS}
FItemInfo.IsUTF8 := False;
HostOS := hosDOS;
UnicName := UTF8Decode(Value);
UnicName := CeUtf8ToUtf16(Value);
if CeTryEncode(UnicName, CP_OEMCP, False, AnsiName) then
{no-op}
else if (GetACP <> GetOEMCP) and CeTryEncode(UnicName, CP_ACP, False, AnsiName) then
@ -1700,6 +1727,7 @@ begin
FItemInfo.FileName := AnsiName;
{$ENDIF}
{$IFDEF UNIX}
HostOS := hosUnix;
FItemInfo.FileName := Value;
FItemInfo.IsUTF8 := SystemEncodingUtf8;
{$ENDIF}
@ -1772,6 +1800,38 @@ begin
FItemInfo.UncompressedSize:= Min(Value, $FFFFFFFF);
UpdateZip64ExtraHeader;
end;
procedure TAbZipItem.SetLastModTimeAsDateTime(const Value: TDateTime);
var
DataSize: Word;
ANtfsTime: PNtfsTimeField;
AInfoZipTime: PInfoZipTimeField;
begin
inherited SetLastModTimeAsDateTime(Value);
// Update time extra fields
if FItemInfo.ExtraField.Get(Ab_NTFSSubfieldID, ANtfsTime, DataSize) then
begin
if (DataSize = SizeOf(TNtfsTimeField)) then
begin
if ANtfsTime^.Tag = $0001 then
begin
ANtfsTime^.Mtime := DateTimeToWinFileTime(Value);
end;
end;
end
else if FItemInfo.ExtraField.Get(Ab_InfoZipTimestampSubfieldID, AInfoZipTime, DataSize) then
begin
if (DataSize = SizeOf(TInfoZipTimeField)) then
begin
if (AInfoZipTime^.Tag and $01 <> 0) then
begin
AInfoZipTime^.Mtime := UInt32(DateTimeToUnixFileTime(Value));
end;
end;
end;
end;
{ -------------------------------------------------------------------------- }
procedure TAbZipItem.SetVersionMadeBy( Value : Word );
begin
@ -2453,7 +2513,3 @@ begin
end;
end.

View file

@ -14,20 +14,33 @@ type
TDeflateStream = class(TCompressionStream)
private
FSize: Int64;
FHash: LongInt;
FHash: UInt32;
FOnProgressStep: TAbProgressStep;
public
constructor Create(ALevel: Integer; ADest: TStream);
function Write(const Buffer; Count: Longint): Longint; override;
end;
{ TInflateStream }
TInflateStream = class(TDecompressionStream)
private
FHash: UInt32;
public
function CopyInto(ATarget: TStream; ACount: Int64): Int64;
function Read(var Buffer; Count: LongInt): LongInt; override;
end;
function Deflate(aSource : TStream; aDest : TStream;
aHelper : TAbDeflateHelper) : longint;
function Inflate(aSource : TStream; aDest : TStream;
aHelper : TAbDeflateHelper) : longint;
implementation
uses
ZDeflate, ZBase;
Math, ZDeflate, ZBase, DCcrc32;
function Deflate(aSource : TStream; aDest : TStream;
aHelper : TAbDeflateHelper): longint;
@ -58,12 +71,72 @@ begin
aHelper.NormalSize:= ADeflateStream.raw_written;
aHelper.CompressedSize:= ADeflateStream.compressed_written;
{ provide encryption check value }
Result := not ADeflateStream.FHash;
Result := LongInt(ADeflateStream.FHash);
finally
ADeflateStream.Free;
end;
end;
function Inflate(aSource: TStream; aDest: TStream;
aHelper: TAbDeflateHelper): longint;
var
ACount: Int64;
AInflateStream: TInflateStream;
begin
AInflateStream:= TInflateStream.Create(aSource, True);
try
if aHelper.PartialSize > 0 then
begin
ACount:= aHelper.PartialSize;
aHelper.NormalSize:= AInflateStream.CopyInto(aDest, ACount);
end
else begin
ACount:= aHelper.NormalSize;
aHelper.NormalSize:= aDest.CopyFrom(AInflateStream, ACount);
end;
aHelper.CompressedSize:= AInflateStream.compressed_read;
Result:= LongInt(AInflateStream.FHash);
finally
AInflateStream.Free;
end;
end;
{ TInflateStream }
function TInflateStream.CopyInto(ATarget: TStream; ACount: Int64): Int64;
var
ARead, ASize: Integer;
ABuffer: array of Byte;
begin
Result:= 0;
ASize:= Min(ACount, $8000);
SetLength(ABuffer, ASize);
repeat
if ACount < ASize then
begin
ASize:= ACount;
end;
ARead:= Read(ABuffer[0], ASize);
if ARead > 0 then
begin
Dec(ACount, ARead);
Inc(Result, ARead);
ATarget.WriteBuffer(ABuffer[0], ARead);
end;
until (ARead < ASize) or (ACount = 0);
end;
function TInflateStream.Read(var Buffer; Count: LongInt): LongInt;
begin
Result:= inherited Read(Buffer, Count);
FHash:= crc32_16bytes(@Buffer, Result, FHash);
if (Result < Count) and (Fstream.avail_in > 0) then
begin
FSource.Seek(-Fstream.avail_in, soCurrent);
Fstream.avail_in:= 0;
end;
end;
{ TDeflateStream }
constructor TDeflateStream.Create(ALevel: Integer;
@ -73,7 +146,6 @@ const
var
AError: Integer;
begin
FHash := -1;
TOwnerStream(Self).Create(ADest);
Fbuffer:= GetMem(BUF_SIZE);
@ -88,7 +160,7 @@ end;
function TDeflateStream.Write(const Buffer; Count: Longint): Longint;
begin
AbUpdateCRCBuffer(FHash, (@Buffer)^, Count);
FHash:= crc32_16bytes(@Buffer, Count, FHash);
Result:= inherited Write(Buffer, Count);
if Assigned(FOnProgressStep) then
begin

View file

@ -1,7 +1,7 @@
(* ***** BEGIN LICENSE BLOCK *****
* Simple interface to zstd library
*
* Copyright (C) 2019 Alexander Koblov (alexx2000@mail.ru)
* Copyright (C) 2019-2023 Alexander Koblov (alexx2000@mail.ru)
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
@ -319,20 +319,24 @@ var
AInput: ZSTD_inBuffer;
begin
try
FillChar({%H-}AInput, SizeOf(ZSTD_inBuffer), 0);
if Assigned(FContext) then
try
FillChar({%H-}AInput, SizeOf(ZSTD_inBuffer), 0);
repeat
FBufferOut.pos:= 0;
repeat
FBufferOut.pos:= 0;
ARemaining:= ZSTD_Check(ZSTD_compressStream2(FContext, @FBufferOut, @AInput, ZSTD_e_end));
ARemaining:= ZSTD_Check(ZSTD_compressStream2(FContext, @FBufferOut, @AInput, ZSTD_e_end));
if (FBufferOut.pos > 0) then begin
FStream.WriteBuffer(FBufferOut.dst^, FBufferOut.pos);
end;
until (ARemaining = 0);
if (FBufferOut.pos > 0) then begin
FStream.WriteBuffer(FBufferOut.dst^, FBufferOut.pos);
end;
until (ARemaining = 0);
finally
FreeMem(FBufferOut.dst);
ZSTD_freeCCtx(FContext);
end;
finally
FreeMem(FBufferOut.dst);
ZSTD_freeCCtx(FContext);
inherited Destroy;
end;
end;

Some files were not shown because too many files have changed in this diff Show more