Compare commits
131 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aa9715b4f8 | ||
|
|
12250bb7a3 | ||
|
|
a44c7e1bd6 | ||
|
|
5e79e740bd | ||
|
|
15615e9b4d | ||
|
|
0bc6db578b | ||
|
|
12667ef6fa | ||
|
|
f4ae7d8d01 | ||
|
|
283e86d754 | ||
|
|
df7757b110 | ||
|
|
e32168b44b | ||
|
|
6bbe98b1dd | ||
|
|
82a9c4d42e | ||
|
|
4a230286b3 | ||
|
|
8fdf1b8b7a | ||
|
|
1905edf000 | ||
|
|
9ae3422246 | ||
|
|
c386404dd5 | ||
|
|
eaf5c9ffd2 | ||
|
|
d04e123ca6 | ||
|
|
00dc442fce | ||
|
|
164e34061d | ||
|
|
256d6e6bca | ||
|
|
4a1c0826f8 | ||
|
|
d3cd266b3e | ||
|
|
4986d7ceef | ||
|
|
21142c2193 | ||
|
|
4f0d44fc33 | ||
|
|
bdf34533f6 | ||
|
|
403807899e | ||
|
|
e01e977a66 | ||
|
|
80969d19f9 | ||
|
|
9d9b7a0681 | ||
|
|
7fcedddeeb | ||
|
|
4a9419b1ee | ||
|
|
4545803963 | ||
|
|
a9fa31c99b | ||
|
|
de6529aada | ||
|
|
d733ada21a | ||
|
|
9a7b86f550 | ||
|
|
3ac6c9336a | ||
|
|
ad90e2db8d | ||
|
|
c87bc4acff | ||
|
|
be2d6faa97 | ||
|
|
df56ab72ea | ||
|
|
cdf7f28d7a | ||
|
|
8ea1d08db8 | ||
|
|
900622082a | ||
|
|
0fabed9766 | ||
|
|
cd5ab741cb | ||
|
|
0cc9ddd815 | ||
|
|
29068e2496 | ||
|
|
770bfbf528 | ||
|
|
65db882952 | ||
|
|
20f19c80a8 | ||
|
|
03d5f755b3 | ||
|
|
dbbb6070e0 | ||
|
|
1672c7fb12 | ||
|
|
9feae04c99 | ||
|
|
3fbec6a217 | ||
|
|
c400c6a430 | ||
|
|
6039aad298 | ||
|
|
1cb67e8f68 | ||
|
|
d624e2e8d4 | ||
|
|
cad1b37140 | ||
|
|
d860bc0904 | ||
|
|
bf5b8d60aa | ||
|
|
8d6c1cd0ea | ||
|
|
efe921aff5 | ||
|
|
de3a853228 | ||
|
|
77e20ad55c | ||
|
|
ffa5c8bf64 | ||
|
|
ba47ccb680 | ||
|
|
e97b1bee52 | ||
|
|
24f43183fd | ||
|
|
0628cf9249 | ||
|
|
da879a098f | ||
|
|
eb010ec7f5 | ||
|
|
70fd411418 | ||
|
|
e2f1251c70 | ||
|
|
06ad11340d | ||
|
|
5c34457f2d | ||
|
|
7cdcba4a35 | ||
|
|
b30be14b3e | ||
|
|
3b8d510aeb | ||
|
|
9132c437fc | ||
|
|
7159bbb1fd | ||
|
|
ae9643f2ce | ||
|
|
6559e62276 | ||
|
|
1552fb8ec8 | ||
|
|
79d0b184b8 | ||
|
|
2793349268 | ||
|
|
4a7845dc7a | ||
|
|
978bbe4b40 | ||
|
|
0bd2b92237 | ||
|
|
be51d4c842 | ||
|
|
af2ac4b113 | ||
|
|
6dd7949030 | ||
|
|
a27f8221cd | ||
|
|
8cff776c5e | ||
|
|
bae9e8a0d8 | ||
|
|
bbfad5b9df | ||
|
|
fd24693c6b | ||
|
|
cc9d3595bd | ||
|
|
1b397d8976 | ||
|
|
8c06ad76b6 | ||
|
|
50b735d3a5 | ||
|
|
5660fcf7c5 | ||
|
|
e979c07600 | ||
|
|
cd7d1f9450 | ||
|
|
cdaceef840 | ||
|
|
6ce606977b | ||
|
|
fb72e811d0 | ||
|
|
82197ac0d0 | ||
|
|
959cf0e8d4 | ||
|
|
bcbdc2fe38 | ||
|
|
ca2c7731d4 | ||
|
|
aeb8913a58 | ||
|
|
323a53d808 | ||
|
|
54931fc0e7 | ||
|
|
3024186aa6 | ||
|
|
ceed4ebd83 | ||
|
|
471246df18 | ||
|
|
ea33a24d01 | ||
|
|
d653516eba | ||
|
|
fc5e583715 | ||
|
|
70cd559457 | ||
|
|
49792e42a3 | ||
|
|
5626adc372 | ||
|
|
8a8585d2de | ||
|
|
e465196701 |
79
README.md
79
README.md
@@ -1,73 +1,52 @@
|
||||
# MultiPar
|
||||
|
||||
### v1.3.2.8 is public
|
||||
This is a minor update version to fix some bugs in rare cases.
|
||||
Most users don't see difference.
|
||||
### v1.3.3.5 is public
|
||||
|
||||
This is a minor update version.
|
||||
If there is no serious problem in this version,
|
||||
next version will be the last of v1.3.2 tree.
|
||||
next version will be the last of v1.3.3 tree.
|
||||
|
||||
I fixed a [problem of MultiPar shell extension](https://github.com/Yutaka-Sawada/MultiPar/issues/86),
|
||||
when UAC (User Account Control on Windows Vista or later) is disabled.
|
||||
Thanks whulkhulk and Slava46 for test and confirm.
|
||||
If other users could not "Integrate MultiPar into Shell" ago, he may try this new version.
|
||||
It's difficult to support multi-monitor of different DPI.
|
||||
Thanks [kwinz for reporting this problem](https://github.com/Yutaka-Sawada/MultiPar/issues/146).
|
||||
Though I could not solve blurry window on multi-monitor case, users can see what it is.
|
||||
|
||||
I added a confirm dialog at closing MultiPar, when it's creating or repairing.
|
||||
This change may reduce accidental loss of working data.
|
||||
Though MultiPar inherits most usage and behavior of QuickPar, I would improve a bit.
|
||||
I added an optional feature to set max size of recovery files directly.
|
||||
For details, refer `Command_GUI.txt` and `Command_par2j.txt` in `help` folder of MultiPar.
|
||||
|
||||
I fixed [small bugs in my OpenCL code for GPU](https://github.com/Yutaka-Sawada/MultiPar/issues/88).
|
||||
Though I'm not sure the incident, it might not work rarely.
|
||||
Because I don't use a graphics board on my PC, I didn't test myself.
|
||||
Thanks apprehensivemom for test.
|
||||
Even when you checked "Enable GPU acceleration", it may not use GPU for small data.
|
||||
It's because starting GPU is slow.
|
||||
If calculation finishes in a few seconds, using CPU only may be faster.
|
||||
GPU may require at least a few minutes task to see speed difference.
|
||||
As a note, I write its threshold below.
|
||||
|
||||
Threshold to use GPU:
|
||||
- Data size must be larger than 512 MB.
|
||||
- Block size must be larger than 64 KB.
|
||||
- Number of source blocks must be more than 256.
|
||||
- Number of recovery blocks must be more than 32.
|
||||
My web-pages on `vector.co.jp` disappered at 2024 December 20.
|
||||
Thanks Vector to support MultiPar for long time.
|
||||
I use [this GitHub page](https://github.com/Yutaka-Sawada/MultiPar) for MultiPar announcement.
|
||||
|
||||
|
||||
[ Changes from 1.3.2.7 to 1.3.2.8 ]
|
||||
[ Changes from 1.3.3.4 to 1.3.3.5 ]
|
||||
|
||||
Installer update
|
||||
- Inno Setup was updated from v6.3.1 to v6.5.4.
|
||||
|
||||
GUI update
|
||||
- Change
|
||||
- It won't erase Zone.Identifier flag of MultiPar.exe automatically.
|
||||
- It shows confirm dialog before close, when it's creating or repairing.
|
||||
|
||||
- Improvement
|
||||
- It will show error, when calling PAR client doesn't exist.
|
||||
|
||||
- Bug fix
|
||||
- When UAC is disabled, Shell Extesnion DLL uses HKEY_LOCAL_MACHINE.
|
||||
- While it supports high DPI, it looks blurry on multi-monitor of different DPI.
|
||||
- It's possible to set maximum packet repetition from 1 time to 6 times.
|
||||
|
||||
PAR2 client update
|
||||
- Bug fix
|
||||
- It will show correct efficiency for over than TB size files.
|
||||
- GPU function works with MMX, when all SSE2, SSSE3, AVX2 are disabled.
|
||||
|
||||
All clients update
|
||||
- Change
|
||||
- It will search hidden files, when Windows Explorer shows them.
|
||||
- It's possible to set max size of recovery files directly.
|
||||
|
||||
|
||||
[ Hash value ]
|
||||
|
||||
MultiPar1328.zip
|
||||
MD5: C7BD23C0D32C47555E344D9D88C149C2
|
||||
SHA1: 467F85E53011B3BC1E67E6685B1787D32B6F2296
|
||||
MultiPar1335.zip
|
||||
MD5: 22F3840CDCA56CDBFA39E872D337B460
|
||||
SHA1: A332E230137F6BDF594CD0EB7B6A5130D1CFE71C
|
||||
|
||||
MultiPar1335_setup.exe
|
||||
MD5: 2D178ED0E66C6AD0AE5C3507A6643EF5
|
||||
SHA1: BA04FD62391351F0698B1BCAD384DD95DEA1E8C3
|
||||
|
||||
MultiPar1328_setup.exe
|
||||
MD5: 4D7A3BA6B88D9F37A22C35C425DA5F4D
|
||||
SHA1: 6BCCF834BC6038F1AC30F82B193A2B5F45FD7697
|
||||
To install under "Program Files" or "Program Files (x86)" directory,
|
||||
you must start the installer with administrative privileges by selecting
|
||||
"Run as administrator" on right-click menu.
|
||||
you must select "Install for all users" at the first dialog.
|
||||
|
||||
Old versions and source code packages are available at
|
||||
[GitHub](https://github.com/Yutaka-Sawada/MultiPar/releases) or
|
||||
[OneDrive](https://1drv.ms/u/s!AtGhNMUyvbWOaSo1n_R8awJ_hg0).
|
||||
[OneDrive](https://1drv.ms/f/c/8eb5bd32c534a1d1/QtGhNMUyvbUggI5pAAAAAAAAKjWf9HxrAn-GDQ).
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -25,7 +25,13 @@ Be careful to use those special features.
|
||||
|
||||
[ System requirement ]
|
||||
|
||||
MultiPar requires a PC with Windows Vista or later (Windows 7, 8, 10).
|
||||
MultiPar requires a PC with Windows 7 or later (Windows 8, 10, 11).
|
||||
|
||||
[ Usage manual or Help documents ]
|
||||
|
||||
There are some usage manual or help documents in "help" folder.
|
||||
English pages exists in "help/0409" folder.
|
||||
You may open the manual by pushing "F1-key", while using MultiPar.
|
||||
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
@@ -71,14 +77,13 @@ Don't send current PAR3 files to others, who may not have the same version.
|
||||
|
||||
[ How to install or uninstall with installer package ]
|
||||
|
||||
Double click setup file ( MultiPar131_setup.exe or something like this name ),
|
||||
Double click setup file ( MultiPar133_setup.exe or something like this name ),
|
||||
and follow the installer dialog.
|
||||
At version up, if you want to use previous setting, overwrite install is possible.
|
||||
Before overwrite install, you should un-check "Integrate MultiPar into Shell".
|
||||
You may need to re-start OS after overwrite install or uninstall rarely.
|
||||
To install under "Program Files" or "Program Files (x86)" directory,
|
||||
you must start the installer with administrative privileges by selecting
|
||||
"Run as administrator" on right-click menu.
|
||||
you must select "Install for all users" at the first dialog.
|
||||
|
||||
You can uninstall through the Windows OS's Control Panel,
|
||||
or double click unins000.exe in a folder which MultiPar was installed.
|
||||
@@ -100,7 +105,7 @@ In either case, user made icons and association are available for the user only.
|
||||
|
||||
[ How to install with archive version ]
|
||||
|
||||
Unpack compressed file ( MultiPar131.zip or something like this name ) in a folder.
|
||||
Unpack compressed file ( MultiPar133.zip or something like this name ) in a folder.
|
||||
MultiPar.exe is the interface of MultiPar.
|
||||
|
||||
You can create short-cut icon or send-to link at Option window later.
|
||||
@@ -141,9 +146,6 @@ so you need to move "MultiPar.ini" into the folder, too.
|
||||
They are written by Yutaka Sawada.
|
||||
Though console applications are open source (PAR clients are GPL),
|
||||
GUI application is closed source.
|
||||
Some article are available at my web site.
|
||||
(URL: "https://hp.vector.co.jp/authors/VA021385/")
|
||||
If you want source code, contact with me by e-mail.
|
||||
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
@@ -169,10 +171,8 @@ mail server may delete it automatically, and I won't see it.
|
||||
|
||||
[ Link ]
|
||||
|
||||
I use Vector 's author page to introduce MultiPar.
|
||||
(URL: "https://hp.vector.co.jp/authors/VA021385/")
|
||||
Because there is another official download page,
|
||||
You may download the latest version of MultiPar on GitHub.
|
||||
(URL: "https://github.com/Yutaka-Sawada/MultiPar")
|
||||
There is a Japanese download page on Vector.
|
||||
(URL: "https://www.vector.co.jp/soft/dl/winnt/util/se460801.html")
|
||||
using direct link to files on the page isn't preferable.
|
||||
When you write a link on somewhere, please don't include filename.
|
||||
|
||||
|
||||
@@ -1,220 +1,228 @@
|
||||
|
||||
修復用データを作ってファイルの破損や消失に備える
|
||||
|
||||
<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>f<EFBFBD>[<5B>^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ăt<C483>@<40>C<EFBFBD><43><EFBFBD>̔j<CC94><6A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɔ<EFBFBD><C994><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
MultiPar (<28>}<7D><><EFBFBD>`<60>p<EFBFBD>[)
|
||||
MultiPar (マルチパー)
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
[ <EFBFBD>ȒP<EFBFBD>ȉ<EFBFBD><EFBFBD><EFBFBD> ]
|
||||
[ 簡単な解説 ]
|
||||
|
||||
<EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD>̃t<CC83>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>烊<EFBFBD>J<EFBFBD>o<EFBFBD><6F><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>쐬<EFBFBD><EC90AC><EFBFBD>āA
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̃t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>̈ꕔ<CC88><EA9594><EFBFBD>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482>A
|
||||
<EFBFBD>c<EFBFBD><EFBFBD><EFBFBD>ꂽ<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>ƃ<EFBFBD><C683>J<EFBFBD>o<EFBFBD><6F><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><67><EFBFBD>ďC<C48F><43><EFBFBD>E<EFBFBD><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ׂ̃\<5C>t<EFBFBD>g<EFBFBD>ł<EFBFBD><C582>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>ʓI<EFBFBD>ȃt<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<5C>t<EFBFBD>g<EFBFBD>Ƃ͈قȂ<D982><C882>A
|
||||
<EFBFBD><EFBFBD><EFBFBD>炩<EFBFBD><EFBFBD><EFBFBD>߃<EFBFBD><EFBFBD>J<EFBFBD>o<EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƂŁA
|
||||
<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>̔j<CC94><6A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɔ<EFBFBD><C994><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂<EFBFBD><CC82><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582>B
|
||||
複数のファイルからリカバリ・ファイルを作成して、
|
||||
それらのファイルの一部が破損したり消失しても、
|
||||
残されたファイルとリカバリ・ファイルを使って修復・復元する為のソフトです。
|
||||
一般的なファイル復旧ソフトとは異なり、
|
||||
あらかじめリカバリ・ファイルを作っておくことで、
|
||||
ファイルの破損や消失に備えるのが特徴です。
|
||||
|
||||
<EFBFBD>@CD <EFBFBD><EFBFBD> DVD <EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD>ۂɁA<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ރf<EFBFBD>[<5B>^<5E>̃<EFBFBD><CC83>J<EFBFBD>o<EFBFBD><6F><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>āA<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɏĂ<EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>Ȃǂŕ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD>ɓǂ߂Ȃ<EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD>A
|
||||
<EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>o<EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><67><EFBFBD>ĕ<EFBFBD><C495><EFBFBD><EFBFBD><EFBFBD><EFBFBD>邱<EFBFBD>Ƃ<EFBFBD><C682>ł<EFBFBD><C582>܂<EFBFBD><DC82>B
|
||||
<EFBFBD>C<EFBFBD>O<EFBFBD>ł́A<EFBFBD>l<EFBFBD>b<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>[<5B>N<EFBFBD>o<EFBFBD>R<EFBFBD>ŕ<EFBFBD><C595><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۂɁA
|
||||
<EFBFBD>ꕔ<EFBFBD>̃t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>Ŏ<EFBFBD><C58E>s<EFBFBD><73><EFBFBD>Ă<EFBFBD><C482>đ<EFBFBD><C491>M<EFBFBD><4D><EFBFBD>邱<EFBFBD>ƂȂ<C682><C882>A
|
||||
<EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>o<EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><67><EFBFBD>Č<EFBFBD><C48C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>₤<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD>p<EFBFBD>r<EFBFBD><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>ł<EFBFBD><C582>B
|
||||
CD や DVD を焼く際に、書き込むデータのリカバリ・ファイルを
|
||||
作って、それも同時に焼いておけば、傷などで部分的に読めなくなっても、
|
||||
リカバリ・ファイルを使って復元することができます。
|
||||
海外では、ネットワーク経由で複数ファイルを転送する際に、
|
||||
一部のファイルで失敗しても再送信することなく、
|
||||
リカバリ・ファイルを使って欠落部分を補うという用途が多いようです。
|
||||
|
||||
<EFBFBD>@Parchive <EFBFBD>Ƃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>o<EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>`<60><><EFBFBD>ɂ͕W<CD95><57><EFBFBD>\<5C>t<EFBFBD>g<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD>
|
||||
Peter Clements <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́u QuickPar <EFBFBD>v<EFBFBD>Ƃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD>B
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AQuickPar <EFBFBD>͉<EFBFBD><EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>ɊJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>f<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD>āA
|
||||
<EFBFBD><EFBFBD><EFBFBD>{<7B><><EFBFBD>̃t<CC83>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>H<EFBFBD><48><EFBFBD>_<EFBFBD><5F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>ł<EFBFBD><C582>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŁA<EFBFBD>Ȃ<EFBFBD><EFBFBD>ׂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>Ȏg<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>œ<EFBFBD><EFBFBD>{<7B>ꂪ<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>ގ<EFBFBD><DE8E>\<5C>t<EFBFBD>g<EFBFBD>Ƃ<EFBFBD><C682>āA
|
||||
<EFBFBD>ނ̋<EFBFBD><EFBFBD>āA<EFBFBD><EFBFBD><EFBFBD>̃A<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>P<EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD><4A><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
Parchive というリカバリ・ファイル形式には標準ソフトとして
|
||||
Peter Clements さんの「 QuickPar 」というのがあります。
|
||||
しかし、QuickPar は何年も前に開発が中断されていて、
|
||||
日本語のファイル名やフォルダを扱うことができません。
|
||||
そこで、なるべく同じような使い勝手で日本語が使える類似ソフトとして、
|
||||
彼の許可を得て、このアプリケーションを開発しました。
|
||||
|
||||
<EFBFBD>@QuickPar <EFBFBD>̓o<EFBFBD>O<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>P<EFBFBD>_<EFBFBD>̗v<EFBFBD>]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>f<EFBFBD><66><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>߁A
|
||||
PAR 2.0 <EFBFBD>Ńt<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><43><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD>\<5C><><EFBFBD><EFBFBD> MultiPar <20>̕<EFBFBD><CC95><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>{<7B><><EFBFBD>̃t<CC83>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AQuickPar <20>ł͏C<CD8F><43><EFBFBD>ł<EFBFBD><C582>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɂ́A
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> MultiPar <EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>Ă݂Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
QuickPar はバグ報告や改善点の要望があっても反映されないため、
|
||||
PAR 2.0 でファイルを修復できる可能性は MultiPar の方が高いです。
|
||||
日本語のファイル名を使う時や、QuickPar では修復できなかった時には、
|
||||
ぜひ MultiPar を使ってみてください。
|
||||
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
[ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>d<EFBFBD>l<EFBFBD>Ȃ<EFBFBD> ]
|
||||
[ 特徴や仕様など ]
|
||||
|
||||
<EFBFBD>@MultiPar <EFBFBD><EFBFBD> PAR 1.0 <EFBFBD><EFBFBD> PAR 2.0 <EFBFBD>̗<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɑΉ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă܂<EFBFBD><EFBFBD>B
|
||||
Parity Archive <EFBFBD><EFBFBD> Parity Volume Set <EFBFBD>d<EFBFBD>l<EFBFBD>̏ڍׂɂ<EFBFBD><EFBFBD>Ă<EFBFBD>
|
||||
<EFBFBD>u http://parchive.sourceforge.net/ <EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>Q<EFBFBD>Ƃ<EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
MultiPar <EFBFBD>̓<EFBFBD><EFBFBD>j<EFBFBD>R<EFBFBD>[<5B>h (UTF-8 <EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD> UTF-16) <EFBFBD>Ńt<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂ŁA
|
||||
<EFBFBD><EFBFBD><EFBFBD>{<7B>ꂾ<EFBFBD><EA82BE><EFBFBD>łȂ<C582><C882><EFBFBD><EFBFBD>̌<EFBFBD><CC8C><EFBFBD><EFBFBD>̃t<CC83>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƌ<EFBFBD><C68C><EFBFBD><EFBFBD>E<EFBFBD>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>邱<EFBFBD>Ƃ<EFBFBD><C682>ł<EFBFBD><C582>܂<EFBFBD><DC82>B
|
||||
MultiPar は PAR 1.0 と PAR 2.0 の両方に対応してます。
|
||||
Parity Archive と Parity Volume Set 仕様の詳細については
|
||||
「 http://parchive.sourceforge.net/ 」を参照してください。
|
||||
MultiPar はユニコード (UTF-8 または UTF-16) でファイル名を扱うので、
|
||||
日本語だけでなく他の言語のファイル名もきちんと検査・修復することができます。
|
||||
|
||||
<EFBFBD>@MultiPar <EFBFBD><EFBFBD> PAR 2.0 <EFBFBD>ł̓t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>łȂ<C582><C882>t<EFBFBD>H<EFBFBD><48><EFBFBD>_<EFBFBD><5F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>ł<EFBFBD><C582>܂<EFBFBD><DC82>B
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AQuickPar <EFBFBD>̓T<EFBFBD>u<EFBFBD>E<EFBFBD>f<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>𐳂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>F<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>̂ŁA
|
||||
MultiPar <EFBFBD>Ńf<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD><EFBFBD><EFBFBD>܂ރp<DE83><70><EFBFBD>e<EFBFBD>B<EFBFBD><42><EFBFBD>ɂ<EFBFBD><C982>쐬<EFBFBD><EC90AC><EFBFBD>Ă<EFBFBD><C482>A
|
||||
<EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃɒ<EFBFBD><EFBFBD>ӂ<EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
par2cmdline <EFBFBD><EFBFBD> MultiPar <EFBFBD>Ɠ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>j<EFBFBD>R<EFBFBD>[<5B>h<EFBFBD>ƃf<C683>B<EFBFBD><42><EFBFBD>N<EFBFBD>g<EFBFBD><67><EFBFBD>\<5C><><EFBFBD><EFBFBD><EFBFBD>F<EFBFBD><46><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂ő<CC82><C591><EFBFBD><EFBFBD>v<EFBFBD>ł<EFBFBD><C582>B
|
||||
MultiPar <EFBFBD>̓p<EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>ɂɃR<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><EFBFBD><EFBFBD>邱<EFBFBD>Ƃ<EFBFBD><EFBFBD>ł<EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>A
|
||||
QuickPar <EFBFBD>ȂǑ<EFBFBD><EFBFBD><EFBFBD> PAR <20>N<EFBFBD><4E><EFBFBD>C<EFBFBD>A<EFBFBD><41><EFBFBD>g<EFBFBD>̓R<CD83><52><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>@<40>\<5C>ɑΉ<C991><CE89><EFBFBD><EFBFBD>ĂȂ<C482><C882>悤<EFBFBD>ł<EFBFBD><C582>B
|
||||
MultiPar の PAR 2.0 ではファイルだけでなくフォルダを扱うこともできます。
|
||||
ただし、QuickPar はサブ・ディレクトリを正しく認識しないので、
|
||||
MultiPar でディレクトリ構造を含むパリティ書庫を作成しても、
|
||||
うまく検査できないことに注意してください。
|
||||
par2cmdline は MultiPar と同じくユニコードとディレクトリ構造を認識するので大丈夫です。
|
||||
MultiPar はパリティ書庫にコメントを付けることができますが、
|
||||
QuickPar など他の PAR クライアントはコメント機能に対応してないようです。
|
||||
|
||||
[ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ]
|
||||
[ 動作環境 ]
|
||||
|
||||
<EFBFBD>@Windows Vista <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȍ~ (Windows 7, 8, 10) <EFBFBD>̃p<EFBFBD>\<5C>R<EFBFBD><52><EFBFBD><EFBFBD><EFBFBD>K<EFBFBD>v<EFBFBD>ł<EFBFBD><C582>B
|
||||
Windows 7 かそれ以降 (Windows 8, 10, 11) のパソコンが必要です。
|
||||
|
||||
[ 使い方や解説文章 ]
|
||||
|
||||
ほとんど英語ですが、help フォルダーの中に使い方や解説文章が入ってます。
|
||||
日本語のページは help\0411 フォルダーの中にあります。
|
||||
MultiPar の使用中に、F1-key を押すと、マニュアルが表示されます。
|
||||
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
[ <EFBFBD>s<EFBFBD><EFBFBD>⌇<EFBFBD>ׂȂ<EFBFBD> ]
|
||||
[ 不具合や欠陥など ]
|
||||
|
||||
<EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD>m<EFBFBD>F<EFBFBD>͂<EFBFBD><CD82><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>ɂ<EFBFBD><C982>Ă<EFBFBD><C482>̂ł<CC82><C582><EFBFBD><EFBFBD>A<EFBFBD>s<EFBFBD><EFBFBD><EF8D87><EFBFBD><EFBFBD><EFBFBD>邩<EFBFBD><E982A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɖ<EFBFBD><EFBFBD>肪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́A<EFBFBD><EFBFBD><EFBFBD>̏<EFBFBD><EFBFBD>Ǐ<EFBFBD><EFBFBD>Ȃǂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD>炦<EFBFBD><EFBFBD><EFBFBD>ƁA
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̃o<EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>A<EFBFBD>b<EFBFBD>v<EFBFBD>ŏC<C58F><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>w<EFBFBD>͂<EFBFBD><CD82>܂<EFBFBD><DC82>B
|
||||
<EFBFBD>V<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>@<40>\<5C><><EFBFBD>lj<EFBFBD><C789><EFBFBD><EFBFBD>ė~<7E><><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>A<EFBFBD>ǂ<EFBFBD><C782><EFBFBD><EFBFBD><EFBFBD><EFBFBD>P<EFBFBD><50><EFBFBD>ė~<7E><><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v<EFBFBD>]<5D><><EFBFBD>t<F382AF95><74><EFBFBD>܂<EFBFBD><DC82>B
|
||||
動作確認はそれなりにしてるのですが、不具合があるかもしれません。
|
||||
動作に問題があった場合は、その状況や症状などを報告してもらえると、
|
||||
今後のバージョン・アップで修正するよう努力します。
|
||||
新しい機能を追加して欲しいとか、どこを改善して欲しいといった要望も受け付けます。
|
||||
|
||||
<EFBFBD>@<40><><EFBFBD>Ȃ݂ɁA<C981><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>肵<EFBFBD>đ<EFBFBD><C491>Q<EFBFBD><51><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>Ă<EFBFBD><C482><EFBFBD><EFBFBD>Q<EFBFBD><51><EFBFBD><EFBFBD><EFBFBD>͂ł<CD82><C582>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>l<EFBFBD>ŊJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă邩<EFBFBD><EFBFBD><EFBFBD>ł͂Ȃ<EFBFBD><EFBFBD>A<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ̃}<7D>C<EFBFBD>N<EFBFBD><4E><EFBFBD>\<5C>t<EFBFBD>g<EFBFBD>̉<EFBFBD><CC89><EFBFBD><EFBFBD>~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<5C>t<EFBFBD>g<EFBFBD>ł<EFBFBD>
|
||||
<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>̃\<5C>t<EFBFBD>g<EFBFBD><67><EFBFBD>g<EFBFBD><67><EFBFBD>ĉ<EFBFBD><C489><EFBFBD><EFBFBD>N<EFBFBD><4E><EFBFBD>Ă<EFBFBD><C482>ӔC<D394>͎<EFBFBD><CD8E><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>v<EFBFBD>݂<EFBFBD><DD82><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>菑<EFBFBD><E88F91><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
|
||||
<EFBFBD>@<40><><EFBFBD>I<EFBFBD>ȗ<EFBFBD><C897>t<EFBFBD><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂<EFBFBD><CC82>ǂ<EFBFBD><C782><EFBFBD><EFBFBD>͂<EFBFBD><CD82>Ă<EFBFBD><C482><EFBFBD><EFBFBD>A<EFBFBD>p<EFBFBD>\<5C>R<EFBFBD><52><EFBFBD>E<EFBFBD>\<5C>t<EFBFBD>g<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD>̂͂<CC82><CD82><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582>B
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>[<5B>U<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă鎞<C482>Ɏ<EFBFBD><C98E>ȐӔC<D394>ʼn<EFBFBD><C589><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD>̂<EFBFBD><CC82><EFBFBD><EFBFBD>Șb<C898>Ȃ̂ŁA
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Q<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>菜<EFBFBD><EFBFBD><EFBFBD>菕<EFBFBD><EFBFBD><EFBFBD>͂ł<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD>B
|
||||
ちなみに、誤った使い方をしたりして損害が発生したとしても損害賠償はできません。
|
||||
個人で開発してるからではなく、大手企業のマイクロソフトの何万円もするソフトでも
|
||||
「このソフトを使って何が起きても責任は取らない」みたいなことがしっかり書いてあります。
|
||||
法律的な裏付けがあるのかどうかはさておき、パソコン・ソフトというのはそういう物です。
|
||||
ただまあ、ユーザーが困ってる時に自己責任で解決しろというのも酷な話なので、
|
||||
私も問題点が何かとか障害を取り除く手助けはできる限りやります。
|
||||
|
||||
|
||||
[ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>k<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ]
|
||||
[ 情報漏洩や改竄 ]
|
||||
|
||||
<EFBFBD>@Parity Archive (<EFBFBD>p<EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD>̂ɂ́A
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̘R<EFBFBD>k<EFBFBD><EFBFBD><EFBFBD>Ӑ}<7D>I<EFBFBD>ȉ<EFBFBD>₂<EFBFBD><E28282>h<EFBFBD><68><EFBFBD>悤<EFBFBD>Ȏd<C88E>g<EFBFBD>݂͂<DD82><CD82><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
Parity <EFBFBD>Ƃ́u<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>l<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v<EFBFBD>Ƃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӗ<EFBFBD><EFBFBD>Ȃ̂ŁA
|
||||
<EFBFBD>p<EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>ɂɂ̓\<5C>[<5B>X<EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>Ɠ<EFBFBD><C693><EFBFBD><EFBFBD><EFBFBD><EFBFBD>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂Ƃ<CC82><C682>Ĉ<EFBFBD><C488><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD>ނ̃t<CC83>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>Í<EFBFBD><C38D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>A<EFBFBD>Í<EFBFBD><C38D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ń<EFBFBD><C583>J<EFBFBD>o<EFBFBD><6F><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>쐬<EFBFBD><EC90AC><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>܂<EFBFBD><EFBFBD>A<EFBFBD>o<EFBFBD><EFBFBD><EFBFBD>̊m<EFBFBD><EFBFBD><EFBFBD>łȂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>o<EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><67><EFBFBD>ďC<C48F><43><EFBFBD><EFBFBD><EFBFBD>邱<EFBFBD>Ƃ́A
|
||||
<EFBFBD><EFBFBD><EFBFBD>e<EFBFBD><EFBFBD><EFBFBD>肩<EFBFBD>łȂ<EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>u<EFBFBD><75><EFBFBD>̂Ɠ<CC82><C693><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃł<C682><C582>B
|
||||
<EFBFBD>O<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>玝<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>h<EFBFBD>L<EFBFBD><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><67><EFBFBD>E<EFBFBD>B<EFBFBD><42><EFBFBD>X<EFBFBD>Ɋ<EFBFBD><C98A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă邩<C482><E982A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>A
|
||||
<EFBFBD>̂Ɠ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>ɁA<EFBFBD>O<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>玝<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>o<EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>ŏC<C58F><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD>
|
||||
<EFBFBD>E<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>Ɋ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ꂽ<EFBFBD><EFBFBD><EFBFBD>̂ɂȂ<EFBFBD><EFBFBD>Ă邩<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>܂<EFBFBD><EFBFBD>A<EFBFBD><EFBFBD>₂<EFBFBD><EFBFBD>ꂽ<EFBFBD>p<EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>ăt<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD>ƁA
|
||||
<EFBFBD>{<7B><><EFBFBD>Ӑ}<7D><><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>ɂ͏C<CD8F><43><EFBFBD><EFBFBD><EFBFBD>ꂸ<EFBFBD>A<EFBFBD><41>₂<EFBFBD><E28282>ꂽ<EFBFBD>f<EFBFBD>[<5B>^<5E>ɂȂ<C982><C882>܂<EFBFBD><DC82>B
|
||||
Parity Archive (パリティ書庫) 自体には、
|
||||
情報の漏洩や意図的な改竄を防ぐような仕組みはありません。
|
||||
Parity とは「同じ価値を持つ物」という意味なので、
|
||||
パリティ書庫にはソース・ファイルと同じ価値があるものとして扱ってください。
|
||||
機密書類のファイルを暗号化するなら、暗号化した後でリカバリ・ファイルを作成してください。
|
||||
また、出所の確かでないリカバリ・ファイルを使って修復することは、
|
||||
内容が定かでないファイルを置くのと同じことです。
|
||||
外部から持ち込んだ実行ファイルやドキュメントがウィルスに感染してるかもしれない、
|
||||
のと同じように、外部から持ち込んだリカバリ・ファイルで修復したファイルは
|
||||
ウィルスに感染させられたものになってるかもしれません。
|
||||
つまり、改竄されたパリティ書庫を使ってファイルを修復しようとすると、
|
||||
本来意図したようには修復されず、改竄されたデータになります。
|
||||
|
||||
|
||||
[ PAR 3.0 <EFBFBD>d<EFBFBD>l<EFBFBD>͒<EFBFBD><EFBFBD>ĔłŖ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ]
|
||||
[ PAR 3.0 仕様は提案版で未完成 ]
|
||||
|
||||
<EFBFBD>@MultiPar <EFBFBD>ł<EFBFBD> Parchive <EFBFBD>d<EFBFBD>l<EFBFBD>̎<EFBFBD><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD>Ăł<C482><C582><EFBFBD> PAR 3.0 <EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD>Ɏg<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>ɂȂ<EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD>B
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>APAR 3.0 <20>d<EFBFBD>l<EFBFBD>͂܂<CD82><DC82>ڍׂ<DA8D><D782><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̉<EFBFBD><CC89><EFBFBD><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>K<EFBFBD>ŁA
|
||||
MultiPar <EFBFBD>͂<EFBFBD><EFBFBD>̎<EFBFBD><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>ĐV<EFBFBD>d<EFBFBD>l<EFBFBD>̐<EFBFBD><EFBFBD>\<5C><><EFBFBD>̊<EFBFBD><CC8A>ł<EFBFBD><C582><EFBFBD><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
PAR 3.0 <EFBFBD>d<EFBFBD>l<EFBFBD>̃t<EFBFBD>H<EFBFBD>[<5B>}<7D>b<EFBFBD>g<EFBFBD>͍ו<CD8D><D795><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD>ōŏI<C58F>łƂ̌݊<CC8C><DD8A><EFBFBD><EFBFBD>͕ۏ<DB8F><D882><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>܂<EFBFBD><EFBFBD>AMultiPar <EFBFBD>Ŏ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD><EFBFBD> PAR3 <20><><EFBFBD>J<EFBFBD>o<EFBFBD><6F><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482>A
|
||||
<EFBFBD><EFBFBD><EFBFBD>̃<EFBFBD><EFBFBD>J<EFBFBD>o<EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̃o<CC83>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>Ƃ͌<C682><CD8C><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>l<EFBFBD>ɁA<EFBFBD><EFBFBD><EFBFBD>̐l<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><67><EFBFBD>Ă<EFBFBD><C482>Ƃ͌<C682><CD8C><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>̂ŁA
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD><EFBFBD> PAR3 <20><><EFBFBD>J<EFBFBD>o<EFBFBD><6F><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>͑<EFBFBD><CD91>l<EFBFBD>ɑ<EFBFBD><C991><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>ł<EFBFBD><C582><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
MultiPar では Parchive 仕様の次期バージョン案である PAR 3.0 を
|
||||
実験的に使えるようになっています。
|
||||
しかし、PAR 3.0 仕様はまだ詳細を検討中の下書き段階で、
|
||||
MultiPar はその試作品を使って新仕様の性能を体感できるにすぎません。
|
||||
PAR 3.0 仕様のフォーマットは細部が流動的で最終版との互換性は保証されません。
|
||||
つまり、MultiPar で試作品の PAR3 リカバリ・ファイルを今作っても、
|
||||
そのリカバリ・ファイルを将来のバージョンでも使えるとは限りません。
|
||||
同様に、他の人が同じバージョンを使ってるとは限らないので、
|
||||
試作品の PAR3 リカバリ・ファイルは他人に送らないでください。
|
||||
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
[ <EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD>[<5B>ł̃C<CC83><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD>ƃA<C683><41><EFBFBD>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><> ]
|
||||
[ インストーラー版のインストールとアンインストール ]
|
||||
|
||||
<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD>[ ( MultiPar131_setup.exe <EFBFBD>݂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȗ<EFBFBD><EFBFBD>O ) <20><><EFBFBD>_<EFBFBD>u<EFBFBD><75><EFBFBD>E<EFBFBD>N<EFBFBD><4E><EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD>ƁA
|
||||
<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>ʂ<EFBFBD><CA82>\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂ŁA<C581><41><EFBFBD>̎w<CC8E><77><EFBFBD>ɏ]<5D><><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>o<EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>A<EFBFBD>b<EFBFBD>v<EFBFBD><76><EFBFBD>ɁA<C981>ݒ荀<DD92>ڂ<EFBFBD><DA82><EFBFBD><EFBFBD>̂܂g<DC8E><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͏㏑<CD8F><E38F91><EFBFBD>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582>B
|
||||
<EFBFBD>㏑<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>ɁA<C981>uMultiPar <20><><EFBFBD>V<EFBFBD>F<EFBFBD><46><EFBFBD>ɓ<EFBFBD><C993><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v<EFBFBD>̃`<60>F<EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD>O<EFBFBD><4F><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>㏑<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><41><EFBFBD>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OS <20>̍ċN<C48B><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߂<EFBFBD><DF82><EFBFBD><EFBFBD>邩<EFBFBD><E982A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>uProgram Files<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>uProgram Files (x86)<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>ɃC<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɂ́A
|
||||
<EFBFBD>E<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD>E<EFBFBD><EFBFBD><EFBFBD>j<EFBFBD><EFBFBD><EFBFBD>[<5B>́u<CC81>Ǘ<EFBFBD><C797>҂Ƃ<D282><C682>Ď<EFBFBD><C48E>s<EFBFBD>v<EFBFBD><76><EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD>
|
||||
<EFBFBD>Ǘ<EFBFBD><EFBFBD>Ҍ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŃC<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD>[<5B><><EFBFBD>J<EFBFBD>n<EFBFBD><6E><EFBFBD><EFBFBD><EFBFBD>K<EFBFBD>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
|
||||
インストーラー ( MultiPar133_setup.exe みたいな名前 ) をダブル・クリックすると、
|
||||
インストール画面が表示されるので、その指示に従ってください。
|
||||
バージョン・アップ時に、設定項目をそのまま使いたい時は上書きインストールしてもいいです。
|
||||
上書きインストールする前に、「MultiPar をシェルに統合する」のチェックを外してください。
|
||||
上書きインストールやアンインストール後に OS の再起動を求められるかもしれません。
|
||||
「Program Files」や「Program Files (x86)」内にインストールするには、
|
||||
最初のダイアログで「すべてのユーザー用にインストール」を選んでください。
|
||||
|
||||
<EFBFBD>@<40>A<EFBFBD><41><EFBFBD>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD> Windows OS <20>̃R<CC83><52><EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD>E<EFBFBD>p<EFBFBD>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>A
|
||||
MultiPar <20><><EFBFBD>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>H<EFBFBD><48><EFBFBD>_<EFBFBD><5F><EFBFBD><EFBFBD> unins000.exe <20><><EFBFBD>_<EFBFBD>u<EFBFBD><75><EFBFBD>E<EFBFBD>N<EFBFBD><4E><EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD>[<5B>͐ݒ<CD90><DD92>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>ォ<EFBFBD><E382A9><EFBFBD>u<EFBFBD><75><EFBFBD>ꂽ<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>폜<EFBFBD><ED8F9C><EFBFBD>Ȃ<EFBFBD><C882>̂ŁA
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>Ȃ玩<EFBFBD><EFBFBD><EFBFBD>ō폜<EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
右クリック・メニューの「管理者として実行」を選んで
|
||||
管理者権限でインストーラーを開始する必要があります。
|
||||
|
||||
<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD>[<5B>ł<EFBFBD><C582>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́A<CD81>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>H<EFBFBD><48><EFBFBD>_<EFBFBD><EFBFBD><F093AE82><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>ł<EFBFBD><C582><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>ƁA<EFBFBD><EFBFBD><EFBFBD>ŃA<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD>Ɏ<EFBFBD><C98E>s<EFBFBD><73><EFBFBD>邱<EFBFBD>ƂɂȂ<C982><C882>܂<EFBFBD><DC82>B
|
||||
アンインストールは Windows OS のコントロール・パネルから行うか、
|
||||
MultiPar をインストールしたフォルダ内の unins000.exe をダブル・クリックしてください。
|
||||
アンインストーラーは設定ファイルや後から置かれたファイルを削除しないので、
|
||||
もう使うことがないなら自分で削除してください。
|
||||
|
||||
[ <20>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD>[<5B>łɂ<C582><C982>镡<EFBFBD><E995A1><EFBFBD><EFBFBD><EFBFBD>[<5B>U<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>̃C<CC83><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><> ]
|
||||
インストーラー版を使った場合は、インストールしたフォルダを動かさないでください。
|
||||
さもないと、後でアンインストールに失敗することになります。
|
||||
|
||||
<EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD>̃<EFBFBD><CC83>[<5B>U<EFBFBD>[<5B><><EFBFBD>p<EFBFBD>\<5C>R<EFBFBD><52><EFBFBD>Ƀ<EFBFBD><C983>O<EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>A
|
||||
<EFBFBD>Ǘ<EFBFBD><EFBFBD>҂͑S<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MultiPar <20><><EFBFBD>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>邱<EFBFBD>Ƃ<EFBFBD><C682>ł<EFBFBD><C582>܂<EFBFBD><DC82>B
|
||||
<EFBFBD>Ǘ<EFBFBD><EFBFBD>Ҍ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŃC<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<CE81>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>^<5E>[<5B>g<EFBFBD>E<EFBFBD><45><EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>̃A<CC83>C<EFBFBD>R<EFBFBD><52><EFBFBD>A
|
||||
<EFBFBD>f<EFBFBD>X<EFBFBD>N<EFBFBD>g<EFBFBD>b<EFBFBD>v<EFBFBD>̃A<EFBFBD>C<EFBFBD>R<EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ăt<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>̊֘A<D698>t<EFBFBD><74><EFBFBD>͑S<CD91>Ẵ<C482><CC83>[<5B>U<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>ł<EFBFBD><C582>܂<EFBFBD><DC82>B
|
||||
<EFBFBD>uProgram Files<65>v<EFBFBD><76><EFBFBD>ɃC<C983><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>A<EFBFBD><41><EFBFBD>ꂼ<EFBFBD><EA82BC><EFBFBD>̃<EFBFBD><CC83>[<5B>U<EFBFBD>[<5B><><EFBFBD>ʂɐݒ<C990><DD92><EFBFBD><EFBFBD>ێ<EFBFBD><DB8E><EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>̑<EFBFBD><EFBFBD>̃t<EFBFBD>H<EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>ɃC<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>A<EFBFBD>S<EFBFBD>Ẵ<C482><CC83>[<5B>U<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݒ<EFBFBD><DD92><EFBFBD><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD><4C><EFBFBD>܂<EFBFBD><DC82>B
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̏ꍇ<EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>[<5B>U<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>C<EFBFBD>R<EFBFBD><52><EFBFBD><EFBFBD><EFBFBD>֘A<D698>t<EFBFBD><74><EFBFBD>͂<EFBFBD><CD82>̃<EFBFBD><CC83>[<5B>U<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>ł<EFBFBD><C582>܂<EFBFBD><DC82>B
|
||||
[ インストーラー版による複数ユーザー向けのインストール ]
|
||||
|
||||
複数のユーザーがパソコンにログオンするなら、
|
||||
管理者は全員向けに MultiPar をインストールすることができます。
|
||||
管理者権限でインストールすれば、インストーラーが作ったスタート・メニューのアイコン、
|
||||
デスクトップのアイコン、そしてファイルの関連付けは全てのユーザーが利用できます。
|
||||
「Program Files」内にインストールした場合、それぞれのユーザーが個別に設定を保持します。
|
||||
その他のフォルダにインストールした場合、全てのユーザーが同じ設定を共有します。
|
||||
いずれの場合も、ユーザーが作ったアイコンや関連付けはそのユーザーだけが利用できます。
|
||||
|
||||
|
||||
[ <EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>ł̃C<CC83><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><> ]
|
||||
[ アーカイブ版のインストール ]
|
||||
|
||||
<EFBFBD>@<40>z<EFBFBD>z<EFBFBD><7A><EFBFBD><EFBFBD><EFBFBD>Ă鈳<C482>k<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43> ( MultiPar131.zip <EFBFBD>݂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȗ<EFBFBD><EFBFBD>O ) <20><><EFBFBD>𓀂<EFBFBD><F0938082>Ăł<C482><C582><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD>
|
||||
<EFBFBD>ǂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>K<EFBFBD><EFBFBD><EFBFBD>ȃt<EFBFBD>H<EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>ɑS<EFBFBD>ē<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>̒<EFBFBD><EFBFBD><EFBFBD> MultiPar.exe <EFBFBD>Ƃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂<EFBFBD> MultiPar <EFBFBD>̎<EFBFBD><EFBFBD>s<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>ł<EFBFBD><C582>B
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MultiPar <20><><EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
|
||||
配布されてる圧縮ファイル ( MultiPar133.zip みたいな名前 ) を解凍してできたファイルを
|
||||
どこか適当なフォルダに全て入れてください。
|
||||
その中の MultiPar.exe というのが MultiPar の実行ファイルです。
|
||||
それをダブル・クリックすると MultiPar が起動します。
|
||||
|
||||
<EFBFBD>@MultiPar <EFBFBD>̐ݒ<EFBFBD><EFBFBD>_<EFBFBD>C<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>V<EFBFBD><EFBFBD><EFBFBD>[<5B>g<EFBFBD>J<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A
|
||||
<EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>o<EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>֘A<D698>t<EFBFBD><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582>܂<EFBFBD><DC82>B
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>u.par<61>v<EFBFBD><76><EFBFBD>u.par2<72>v<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD>g<EFBFBD><67><EFBFBD>q<EFBFBD>̃t<CC83>@<40>C<EFBFBD><43><EFBFBD><EFBFBD> MultiPar <20>Ɋ֘A<D698>t<EFBFBD><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́A
|
||||
<EFBFBD><EFBFBD><EFBFBD>ɑ<EFBFBD><EFBFBD>̃A<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>P<EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>ł̊֘A<D698>t<EFBFBD><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>ɂ<EFBFBD><C982>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>Ⴆ<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD><EFBFBD> QuickPar <EFBFBD>Ɋ֘A<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD>̂Ȃ<EFBFBD><EFBFBD>AQuickPar <20>̐ݒ<CC90><DD92>ʼn<EFBFBD><C589><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
|
||||
MultiPar の設定ダイアログから、ショートカットを作ったり、
|
||||
リカバリ・ファイルを関連付けしたりできます。
|
||||
ただし、「.par」や「.par2」という拡張子のファイルを MultiPar に関連付けする場合は、
|
||||
先に他のアプリケーションでの関連付けを解除してからにしてください。
|
||||
例えば、既に QuickPar に関連付けされてるのなら、QuickPar の設定で解除しておきます。
|
||||
|
||||
[ <EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>ł̃A<CC83><41><EFBFBD>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><> ]
|
||||
[ アーカイブ版のアンインストール ]
|
||||
|
||||
<EFBFBD>@MultiPar.exe <EFBFBD>Ȃǂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ꂽ<EFBFBD>t<EFBFBD>H<EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><EFBFBD><EFBFBD>ƍ폜<EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>ݒ<EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>H<EFBFBD><48><EFBFBD>_<EFBFBD><5F><EFBFBD>ɍ<EFBFBD><C98D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂œ<CC82><C593><EFBFBD><EFBFBD>ɍ폜<C98D><ED8F9C><EFBFBD>Ă<EFBFBD><C482>܂<EFBFBD><DC82>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>uProgram Files<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>̃t<EFBFBD>H<EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>ɃC<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́A
|
||||
<EFBFBD>ݒ<EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>́uApplication Data<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>̃t<EFBFBD>H<EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>ɍ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂ŁA<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>폜<EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>o<EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD> MultiPar <20>Ɋ֘A<D698>t<EFBFBD><74><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482>ꍇ<EFBFBD>́A
|
||||
<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD>̑O<CC91>Ɋ֘A<D698>t<EFBFBD><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
MultiPar.exe などを入れたフォルダごと削除してください。
|
||||
設定ファイルも同じフォルダ内に作られるので同時に削除してかまいません。
|
||||
ただし、「Program Files」内のフォルダにインストールしてあった場合は、
|
||||
設定ファイルは「Application Data」内のフォルダに作られるので、それも削除してください。
|
||||
リカバリ・ファイルを MultiPar に関連付けしてる場合は、
|
||||
アンインストールの前に関連付けを解除しておいてください。
|
||||
|
||||
<EFBFBD>@MultiPar <EFBFBD><EFBFBD><EFBFBD>V<EFBFBD>F<EFBFBD><EFBFBD><EFBFBD>ɓ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԃł<EFBFBD> MultiParShlExt64.dll <20>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>폜<EFBFBD>ł<EFBFBD><C582>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>K<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɐݒ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʂŃ`<60>F<EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD>O<EFBFBD><4F><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> MultiPar.exe <EFBFBD><EFBFBD><EFBFBD>폜<EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD>ꍇ<EFBFBD>́A
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƂŃV<EFBFBD>F<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>邱<EFBFBD>Ƃ<EFBFBD><C682>ł<EFBFBD><C582>܂<EFBFBD><DC82>B
|
||||
<EFBFBD>u<EFBFBD>R<EFBFBD>}<7D><><EFBFBD>h <20>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD>v<EFBFBD>g<EFBFBD>v<EFBFBD><76><EFBFBD>J<EFBFBD><4A><EFBFBD><EFBFBD> MultiParShlExt64.dll <20><><EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD><DD82><EFBFBD><EFBFBD>f<EFBFBD>B<EFBFBD><42><EFBFBD>N<EFBFBD>g<EFBFBD><67><EFBFBD>Ɉړ<C988><DA93><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>A
|
||||
<EFBFBD>uRegSvr32.exe /u MultiParShlExt64.dll<EFBFBD>v<EFBFBD>Ɠ<EFBFBD><EFBFBD>͂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ή<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD>B
|
||||
<EFBFBD>G<EFBFBD>N<EFBFBD>X<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD>[<5B><><EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482>ꍇ<EFBFBD>̓t<CD83>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>폜<EFBFBD><ED8F9C><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>Ɉ<EFBFBD><C988>U<EFBFBD><EFBFBD><C282>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><EFBFBD><EFBFBD><EFBFBD>߂Ȃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>U<EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>I<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD>āA<EFBFBD>ēx<EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>I<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD>폜<EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
MultiPar をシェルに統合した状態では MultiParShlExt64.dll というファイルを削除できません。
|
||||
必ず先に設定画面でチェックを外してください。
|
||||
既に MultiPar.exe を削除してしまってる場合は、
|
||||
手作業でシェル拡張をアンインストールすることもできます。
|
||||
「コマンド プロンプト」を開いて MultiParShlExt64.dll が存在するディレクトリに移動してから、
|
||||
「RegSvr32.exe /u MultiParShlExt64.dll」と入力すれば解除されます。
|
||||
エクスプローラーを起動してる場合はファイルを削除する前に一旦閉じてください。
|
||||
それでもだめなら一旦ログオフして、再度ログオンしてから削除してください。
|
||||
|
||||
[ <EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>ł̃C<CC83><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>̕ύX ]
|
||||
[ アーカイブ版のインストール先の変更 ]
|
||||
|
||||
<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>H<EFBFBD><48><EFBFBD>_<EFBFBD>̏ꏊ<CC8F><EA8F8A><EFBFBD>ς<EFBFBD><CF82><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́A
|
||||
<EFBFBD>t<EFBFBD>H<EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><EFBFBD><EFBFBD>ƕʂ̏ꏊ<EFBFBD>ɃR<EFBFBD>s<EFBFBD>[<5B><><EFBFBD>邩<EFBFBD>ړ<EFBFBD><DA93><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>p<EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD><EFBFBD>֘A<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD>ꍇ<EFBFBD>́A<EFBFBD>V<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD>ʒu<CA92>f<F094BD89><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ׂɁA
|
||||
<EFBFBD>֘A<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>U<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD>ݒ肵<EFBFBD>Ȃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
インストールしたフォルダの場所を変えたい時は、
|
||||
フォルダごと別の場所にコピーするか移動してください。
|
||||
パリティ書庫を関連付けをしてた場合は、新しいインストール位置を反映させる為に、
|
||||
関連付けを一旦解除してもう一度設定しなおしてください。
|
||||
|
||||
<EFBFBD>@<40>ݒ<EFBFBD><DD92>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>ȂǕK<C795>v<EFBFBD>ȃt<C883>@<40>C<EFBFBD><43><EFBFBD>͑S<CD91>ē<EFBFBD><C493><EFBFBD><EFBFBD>t<EFBFBD>H<EFBFBD><48><EFBFBD>_<EFBFBD><5F><EFBFBD>ɍ<EFBFBD><C98D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂ŁA
|
||||
<EFBFBD>t<EFBFBD>H<EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><EFBFBD><EFBFBD>ƃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>o<EFBFBD>u<EFBFBD><75><EFBFBD>E<EFBFBD>f<EFBFBD>B<EFBFBD>X<EFBFBD>N<EFBFBD><4E> USB<53><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>ɕۑ<C995><DB91><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>āA
|
||||
<EFBFBD><EFBFBD><EFBFBD>̂܂ܕʂ̃p<EFBFBD>\<5C>R<EFBFBD><52><EFBFBD>Ŏg<C58E><67><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>\<5C>ł<EFBFBD><C582>B
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> MultiPar <EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482>ʂ̃p<CC83>\<5C>R<EFBFBD><52><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݒ<EFBFBD><DD92>Ŏg<C58E><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́A
|
||||
<EFBFBD>ݒ<EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43> (MultiPar.ini) <EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>s<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>Γ<EFBFBD><CE93><EFBFBD><EFBFBD>ݒ<EFBFBD><DD92>œ<EFBFBD><C593>삵<EFBFBD>܂<EFBFBD><DC82>B
|
||||
設定ファイルなど必要なファイルは全て同じフォルダ内に作られるので、
|
||||
フォルダごとリムーバブル・ディスクや USBメモリーに保存しておいて、
|
||||
そのまま別のパソコンで使うことも可能です。
|
||||
既に MultiPar がインストールされてる別のパソコンでも同じ設定で使いたい場合は、
|
||||
設定ファイル (MultiPar.ini) をコピーすれば同じ設定で動作します。
|
||||
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
[ <EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>Z<EFBFBD><EFBFBD><EFBFBD>X ]
|
||||
[ ライセンス ]
|
||||
|
||||
<EFBFBD>@MultiPar <EFBFBD>̓R<EFBFBD><EFBFBD><EFBFBD>\<5C>[<5B><><EFBFBD>E<EFBFBD>A<EFBFBD>v<EFBFBD><76><EFBFBD>P<EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ăяo<D18F><6F> GUI <20>A<EFBFBD>v<EFBFBD><76><EFBFBD>P<EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>K<EFBFBD>\<5C><><EFBFBD>ɂȂ<C982><C882>Ă<EFBFBD><C482>̂ŁA<C581>@<40>\<5C>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>A<EFBFBD>b<EFBFBD>v<EFBFBD><76><EFBFBD>e<EFBFBD>Ղł<D582><C582>B
|
||||
PAR <EFBFBD>p<EFBFBD>R<EFBFBD><EFBFBD><EFBFBD>\<5C>[<5B><><EFBFBD>E<EFBFBD>A<EFBFBD>v<EFBFBD><76><EFBFBD>P<EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD> (par1j.exe <EFBFBD><EFBFBD> par2j.exe) <EFBFBD><EFBFBD> GPL <EFBFBD>ɏ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>̑<EFBFBD><EFBFBD>̃R<EFBFBD><EFBFBD><EFBFBD>\<5C>[<5B><><EFBFBD>E<EFBFBD>A<EFBFBD>v<EFBFBD><76><EFBFBD>P<EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GUI <EFBFBD>A<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>P<EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD> (MultiPar.exe) <20>͕<EFBFBD><CD95>ʂ̃t<CC83><74><EFBFBD>[<5B>\<5C>t<EFBFBD>g<EFBFBD>ł<EFBFBD><C582>B
|
||||
MultiPar <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂܂g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>ꂼ<EFBFBD><EFBFBD><EFBFBD>̃<EFBFBD><EFBFBD>C<EFBFBD>Z<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>̈Ⴂ<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>ɂ<EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><EFBFBD>B
|
||||
<EFBFBD>\<5C>[<5B>X<EFBFBD>E<EFBFBD>R<EFBFBD>[<5B>h<EFBFBD><68>GitHub<75>ɒu<C992><75><EFBFBD>Ă܂<C482><DC82>B
|
||||
MultiPar はコンソール・アプリケーションとそれを呼び出す GUI アプリケーションという
|
||||
二段階構成になってるので、機能拡張やバージョン・アップが容易です。
|
||||
PAR 用コンソール・アプリケーション (par1j.exe と par2j.exe) は GPL に準拠します。
|
||||
その他のコンソール・アプリケーションや
|
||||
GUI アプリケーション (MultiPar.exe) は普通のフリーソフトです。
|
||||
MultiPar をそのまま使うだけなら、それぞれのライセンスの違いを気にしなくていいです。
|
||||
ソース・コードはGitHubに置いてます。
|
||||
(URL: "https://github.com/Yutaka-Sawada/MultiPar")
|
||||
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
[ <EFBFBD>A<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ]
|
||||
[ 連絡先 ]
|
||||
|
||||
<EFBFBD>@<40><><EFBFBD>{<7B>I<EFBFBD>Ƀ<EFBFBD><C983>[<5B>U<EFBFBD>[<5B>E<EFBFBD>T<EFBFBD>|<7C>[<5B>g<EFBFBD>̓<EFBFBD><CD83>[<5B><><EFBFBD>ōs<C58D><73><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>A
|
||||
GitHub<EFBFBD><EFBFBD>issue<EFBFBD>y<EFBFBD>[<5B>W<EFBFBD>ɏ<EFBFBD><C98F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582>B
|
||||
基本的にユーザー・サポートはメールで行いますが、
|
||||
GitHubのissueページに書き込んでもいいです。
|
||||
(URL: "https://github.com/Yutaka-Sawada/MultiPar/issues")
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><EFBFBD> <20>V<EFBFBD>c <20>L <20>ł<EFBFBD><C582>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD>E<EFBFBD>A<EFBFBD>h<EFBFBD><68><EFBFBD>X<EFBFBD><58> tenfon (at mark) outlook.jp <EFBFBD>ł<EFBFBD><EFBFBD>B
|
||||
<EFBFBD>̂̃<EFBFBD><EFBFBD>[<5B><><EFBFBD>E<EFBFBD>A<EFBFBD>h<EFBFBD><68><EFBFBD>X<EFBFBD><58> ten_fon (at mark) mail.goo.ne.jp <EFBFBD>ł<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A
|
||||
2014<EFBFBD>N3<EFBFBD><EFBFBD><EFBFBD>ɃT<EFBFBD>[<5B>r<EFBFBD>X<EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂ŁA<C581><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɂ͑<C982><CD91><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>悤<EFBFBD>ɂ<EFBFBD><C982>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>f<EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>ۂ̕\<5C>L<EFBFBD>Ȃ̂ŁA<C581><41><EFBFBD>ۂ̃<DB82><CC83>[<5B><><EFBFBD>ł<EFBFBD> (at mark) <EFBFBD><EFBFBD> @ <EFBFBD>Ɋ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
名前は 澤田 豊 です。
|
||||
メール・アドレスは tenfon (at mark) outlook.jp です。
|
||||
昔のメール・アドレスは ten_fon (at mark) mail.goo.ne.jp でしたが、
|
||||
2014年3月にサービス終了したので、そっちには送らないようにしてください。
|
||||
迷惑メール拒否の表記なので、実際のメールでは (at mark) を @ に換えてください。
|
||||
|
||||
|
||||
[ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N ]
|
||||
[ リンク ]
|
||||
|
||||
<EFBFBD>@<40>x<EFBFBD>N<EFBFBD>^<5E>[<5B>̍<EFBFBD><CC8D>҃y<D283>[<5B>W<EFBFBD>ł͊O<CD8A><4F><EFBFBD>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MultiPar <20><><EFBFBD>Љ<D089>Ă<EFBFBD><C482>܂<EFBFBD><DC82>B
|
||||
(URL: "https://hp.vector.co.jp/authors/VA021385/")
|
||||
<EFBFBD>x<EFBFBD>N<EFBFBD>^<5E>[<5B>̐<EFBFBD><CC90><EFBFBD><EFBFBD>ȃ_<C883>E<EFBFBD><45><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD>E<EFBFBD>y<EFBFBD>[<5B>W<EFBFBD>͕ʂɂ<CA82><C982><EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
|
||||
MultiPar の最新版は GitHub からダウンロードできます。
|
||||
(URL: "https://github.com/Yutaka-Sawada/MultiPar")
|
||||
ベクターの日本語ダウンロード・ページもあります。
|
||||
(URL: "https://www.vector.co.jp/soft/dl/winnt/util/se460801.html")
|
||||
<EFBFBD><EFBFBD><EFBFBD>{<7B>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD>Ƀ<EFBFBD><C983><EFBFBD><EFBFBD>N<EFBFBD><4E><EFBFBD>ڂ<EFBFBD><DA82><EFBFBD><EFBFBD>ۂ́A<CD81>x<EFBFBD>N<EFBFBD>^<5E>[<5B>̍<EFBFBD><CC8D>i<EFBFBD>Љ<EFBFBD><D089>y<EFBFBD>[<5B>W<EFBFBD>ɂ<EFBFBD><C982>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
日本人向けにリンクを載せる際は、ベクターの作品紹介ページにしてください。
|
||||
(URL: "https://www.vector.co.jp/soft/winnt/util/se460801.html")
|
||||
|
||||
|
||||
@@ -1,7 +1,117 @@
|
||||
Release note of v1.3.3 tree
|
||||
|
||||
par2j's "lc" option was changed to support more threads.
|
||||
Windows Vista was removed from supported OS.
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
[ Changes from 1.3.3.5 to 1.3.3.6 ] (2025/10/25)
|
||||
|
||||
GUI update
|
||||
Change
|
||||
GPU option is enabled always, even when GPU device doesn't exist.
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
[ Changes from 1.3.3.4 to 1.3.3.5 ] (2025/10/10)
|
||||
|
||||
Installer update
|
||||
Inno Setup was updated from v6.3.1 to v6.5.4.
|
||||
|
||||
GUI update
|
||||
Change
|
||||
While it supports high DPI, it looks blurry on multi-monitor of different DPI.
|
||||
It's possible to set maximum packet repetition from 1 time to 6 times.
|
||||
|
||||
PAR2 client update
|
||||
Change
|
||||
It's possible to set max size of recovery files directly.
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
[ Changes from 1.3.3.3 to 1.3.3.4 ] (2024/11/30)
|
||||
|
||||
Installer update
|
||||
Korean language is available at installation.
|
||||
|
||||
GUI update
|
||||
New
|
||||
Korean language UI is added.
|
||||
It's possible to add options for par2j on MultiPar.ini file.
|
||||
|
||||
Change
|
||||
Link of Vector's author page is removed. Use GitHub's MultiPar page.
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
[ Changes from 1.3.3.2 to 1.3.3.3 ] (2024/06/15)
|
||||
|
||||
Installer update
|
||||
Inno Setup was updated from v6.2.2 to v6.3.1.
|
||||
|
||||
PAR2 client update
|
||||
Bug fix
|
||||
Fixed a bug in GPU acceleration, when there are many OpenCL devices.
|
||||
Failure of splitting source files with numerical extension was fixed.
|
||||
Faulty prediction of the last block in a file with repeated data was fixed.
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
[ Changes from 1.3.3.1 to 1.3.3.2 ] (2024/01/10)
|
||||
|
||||
PAR2 client update
|
||||
Improvement
|
||||
GPU acceleration will work well on AMD graphics boards.
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
[ Changes from 1.3.3.0 to 1.3.3.1 ] (2023/11/11)
|
||||
|
||||
Installer update
|
||||
It shows dialog to select "per user" or "per machine" installation.
|
||||
|
||||
PAR2 client update
|
||||
Change
|
||||
Max number of threads to read files on SSD was increased to 6.
|
||||
|
||||
Improvement
|
||||
GPU acceleration would become faster.
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
[ Changes from 1.3.2.9 to 1.3.3.0 ] (2023/10/10)
|
||||
|
||||
GUI update
|
||||
Change
|
||||
Option adapted to new "lc" settings.
|
||||
It's possible to add 5th item in "Media size" on Create window.
|
||||
|
||||
PAR2 client update
|
||||
Change
|
||||
Max number of using threads is increased to 32.
|
||||
Threshold to use GPU was decreased.
|
||||
|
||||
Improvement
|
||||
Matrix inversion may use more threads.
|
||||
L3 cache optimization was improved for recent CPUs.
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
Release note of v1.3.2 tree
|
||||
|
||||
I tried to decrease probability of false positive at Malware detection.
|
||||
|
||||
[ Changes from 1.3.2.8 to 1.3.2.9 ] (2023/08/26)
|
||||
|
||||
GUI update
|
||||
New
|
||||
Verification may save different base directories in MultiPar.ini file.
|
||||
|
||||
Bug fix
|
||||
Archiver's option was updated for recent 7-Zip versions.
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
[ Changes from 1.3.2.7 to 1.3.2.8 ] (2023/06/08)
|
||||
|
||||
GUI update
|
||||
|
||||
@@ -1,148 +1,162 @@
|
||||
v1.3.2 <20>̍X<CC8D>V<EFBFBD><56><EFBFBD><EFBFBD> (2023/06/08)
|
||||
v1.3.3 の更新情報 (2025/10/10)
|
||||
|
||||
[ 1.3.1 <20><><EFBFBD><EFBFBD> 1.3.2 <20>ւ̕ύX<CF8D>_ ]
|
||||
Windows Vista を動作対象の OS から外しました。
|
||||
Vector のページが無くなるので、GitHub のページを使ってください。
|
||||
https://github.com/Yutaka-Sawada/MultiPar
|
||||
|
||||
<EFBFBD>@<40>}<7D><><EFBFBD>E<EFBFBD>F<EFBFBD>A<EFBFBD>Ƃ<EFBFBD><C682>Č댟<C48C>m<EFBFBD><6D><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>悤<EFBFBD>ɂ<EFBFBD><C982>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
[ 1.3.2 から 1.3.3 への変更点 ]
|
||||
|
||||
<EFBFBD>EGUI <20>̕ύX<CF8D>_
|
||||
<EFBFBD>@<40><><EFBFBD>슮<EFBFBD><EC8AAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Python <20>X<EFBFBD>N<EFBFBD><4E><EFBFBD>v<EFBFBD>g<EFBFBD><67><EFBFBD>Ăяo<D18F><6F><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>ɂ<EFBFBD><C982>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@Python <20>X<EFBFBD>N<EFBFBD><4E><EFBFBD>v<EFBFBD>g<EFBFBD>ō<EFBFBD><C58D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֗<EFBFBD><D697>c<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C282>lj<EFBFBD><C789><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
|
||||
<EFBFBD>E<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>̕ύX<EFBFBD>_
|
||||
<EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>A<EFBFBD><41> CPU <20>p<EFBFBD>ɍœK<C593><4B><EFBFBD><EFBFBD><EFBFBD>đ<EFBFBD><C491><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
・クライアントの変更点
|
||||
CPU Cache の利用方法を改善して速くなりました。
|
||||
GPU による高速化も速くなりました。
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
v1.3.1 <20>̍X<CC8D>V<EFBFBD><56><EFBFBD><EFBFBD> (2021/09/09)
|
||||
v1.3.2 の更新情報 (2023/08/26)
|
||||
|
||||
<EFBFBD>@Windows XP <20><EFBFBD><F093AE8D>Ώۂ<CE8F> OS <20><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><4F><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
マルウェアとして誤検知されにくいようにしました。
|
||||
|
||||
[ 1.3.0 <20><><EFBFBD><EFBFBD> 1.3.1 <20>ւ̕ύX<CF8D>_ ]
|
||||
[ 1.3.1 から 1.3.2 への変更点 ]
|
||||
|
||||
<EFBFBD>EGUI <EFBFBD>̕ύX<EFBFBD>_
|
||||
<EFBFBD>@<40>}<7D><><EFBFBD>`<60>E<EFBFBD><45><EFBFBD>j<EFBFBD>^<5E>[<5B><EFBFBD><C28B>ɑΉ<C991><CE89><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@<40>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD>̍ő<CC8D><C591>l<EFBFBD><6C> 2 GB <20>ɂ<EFBFBD><C982>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
・GUI の変更点
|
||||
動作完了時に Python スクリプトを呼び出せるようにしました。
|
||||
Python スクリプトで作った便利ツールをいくつか追加しました。
|
||||
|
||||
<EFBFBD>E<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>̕ύX<EFBFBD>_
|
||||
<EFBFBD>@HDD <20><><EFBFBD><EFBFBD> PAR2 <20>̃<EFBFBD><CC83>J<EFBFBD>o<EFBFBD><6F><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>쐬<EFBFBD><EC90AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@SSD <20><><EFBFBD><EFBFBD> PAR2 <20>̃n<CC83>b<EFBFBD>V<EFBFBD><56><EFBFBD>l<EFBFBD>v<EFBFBD>Z<EFBFBD><5A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@OS <20><> Windows 7 <20>ȍ~<7E>Ȃ<EFBFBD><C882>ASSD <20><> HDD <20><><EFBFBD><EFBFBD><EFBFBD>ʂ<EFBFBD><CA82>ď<EFBFBD><C48F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>ɂ<EFBFBD><C982>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
・クライアントの変更点
|
||||
複数コアの CPU 用に最適化して速くなりました。
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
v1.3.0 <20>̍X<CC8D>V<EFBFBD><56><EFBFBD><EFBFBD> (2020/03/03)
|
||||
v1.3.1 の更新情報 (2021/09/09)
|
||||
|
||||
[ 1.2.9 <20><><EFBFBD><EFBFBD> 1.3.0 <20>ւ̕ύX<CF8D>_ ]
|
||||
Windows XP を動作対象の OS から外しました。
|
||||
|
||||
<EFBFBD>EGUI <20>̕ύX<CF8D>_
|
||||
<EFBFBD>@<40><><EFBFBD>J<EFBFBD>o<EFBFBD><6F><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>̑傫<CC91><E582AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɐ<EFBFBD><C990><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>ɂ<EFBFBD><C982>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɊO<C98A><4F><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>lj<EFBFBD><C789>ł<EFBFBD><C582><EFBFBD><EFBFBD>ʂ𑝂₵<F0919D82>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
[ 1.3.0 から 1.3.1 への変更点 ]
|
||||
|
||||
<EFBFBD>E<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>̕ύX<EFBFBD>_
|
||||
<EFBFBD>@PAR1 <20>ő傫<C591>ȃt<C883>@<40>C<EFBFBD><43><EFBFBD>̃`<60>F<EFBFBD>b<EFBFBD>N<EFBFBD>T<EFBFBD><54><EFBFBD>v<EFBFBD>Z<EFBFBD>~<7E>X<EFBFBD><58><EFBFBD>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@PAR2 <20>Łuchecksum mismatch<63>v<EFBFBD>G<EFBFBD><47><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@<40>傫<EFBFBD><E582AB> VRAM <20><> GPU <20>ł<EFBFBD><C582><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>ɂ<EFBFBD><C982>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
・GUI の変更点
|
||||
マルチ・モニター環境に対応しました。
|
||||
ブロックサイズの最大値を 2 GB にしました。
|
||||
|
||||
・クライアントの変更点
|
||||
HDD 上で PAR2 のリカバリ・ファイル作成が速くなりました。
|
||||
SSD 上で PAR2 のハッシュ値計算が速くなりました。
|
||||
OS が Windows 7 以降なら、SSD と HDD を識別して処理するようにしました。
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
v1.2.9 <20>̍X<CC8D>V<EFBFBD><56><EFBFBD><EFBFBD> (2016/12/12)
|
||||
v1.3.0 の更新情報 (2020/03/03)
|
||||
|
||||
[ 1.2.8 <20><><EFBFBD><EFBFBD> 1.2.9 <20>ւ̕ύX<CF8D>_ ]
|
||||
[ 1.2.9 から 1.3.0 への変更点 ]
|
||||
|
||||
<EFBFBD>EGUI <EFBFBD>̕ύX<EFBFBD>_
|
||||
<EFBFBD>@<40>v<EFBFBD><76><EFBFBD>O<EFBFBD><4F><EFBFBD>X<EFBFBD>E<EFBFBD>o<EFBFBD>[<5B><><EFBFBD>̕<EFBFBD><CC95><EFBFBD><EFBFBD>̔w<CC94>i<EFBFBD><69><EFBFBD>ύX<CF8D>ł<EFBFBD><C582><EFBFBD><EFBFBD>悤<EFBFBD>ɂ<EFBFBD><C982>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@<40><><EFBFBD>s<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>̃`<60>F<EFBFBD>b<EFBFBD>N<EFBFBD>T<EFBFBD><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D882>Ĕj<C494><6A><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>ɂ<EFBFBD><C982>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@7-Zip <20>ƘA<C698>g<EFBFBD><67><EFBFBD>ď<EFBFBD><C48F><EFBFBD><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD>悤<EFBFBD>ɂ<EFBFBD><C982>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
・GUI の変更点
|
||||
リカバリ・ファイルの大きさを常に制限するようにしました。
|
||||
検査時に外部ファイルを追加できる量を増やしました。
|
||||
|
||||
<EFBFBD>E<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>̕ύX<EFBFBD>_
|
||||
<EFBFBD>@<40>Â<EFBFBD> CPU <20><> GPU <20>ł<EFBFBD><C582>Ȃ<EFBFBD><C882>ׂ<EFBFBD><D782><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>ɂ<EFBFBD><C982>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@ZIP / 7-Zip <20><><EFBFBD>ɂɃ<C982><C983>J<EFBFBD>o<EFBFBD><6F><EFBFBD>E<EFBFBD><45><EFBFBD>R<EFBFBD>[<5B>h<EFBFBD><68><EFBFBD>t<EFBFBD><74><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD>悤<EFBFBD>ɂ<EFBFBD><C982>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
・クライアントの変更点
|
||||
PAR1 で大きなファイルのチェックサム計算ミスを修正しました。
|
||||
PAR2 で「checksum mismatch」エラーが発生する問題を修正しました。
|
||||
大きな VRAM の GPU でもうまく動くようにしました。
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
v1.2.8 <20>̍X<CC8D>V<EFBFBD><56><EFBFBD><EFBFBD> (2015/10/27)
|
||||
v1.2.9 の更新情報 (2016/12/12)
|
||||
|
||||
<EFBFBD>@GPU <20>ɂ<EFBFBD><C982>鍂<EFBFBD><E98D82><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă܂<C482><DC82>B
|
||||
[ 1.2.8 から 1.2.9 への変更点 ]
|
||||
|
||||
[ 1.2.7 <20><><EFBFBD><EFBFBD> 1.2.8 <20>ւ̕ύX<CF8D>_ ]
|
||||
・GUI の変更点
|
||||
プログレス・バー上の文字の背景を変更できるようにしました。
|
||||
実行ファイルのチェックサムを検証して破損を警告するようにしました。
|
||||
7-Zip と連携して処理できるようにしました。
|
||||
|
||||
<EFBFBD>EGUI <20>̕ύX<CF8D>_
|
||||
<EFBFBD>@<40>v<EFBFBD><76><EFBFBD>O<EFBFBD><4F><EFBFBD>X<EFBFBD>E<EFBFBD>o<EFBFBD>[<5B><><EFBFBD>̕<EFBFBD><CC95><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>₷<EFBFBD><E282B7><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@GPU <20><><EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݒ<EFBFBD><DD92><EFBFBD><EFBFBD>ʂőI<C591><49><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD>悤<EFBFBD>ɂ<EFBFBD><C982>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@64-bit OS <20>ł<EFBFBD> 64-bit <20>ł<EFBFBD> par2j <20><><EFBFBD>Ăяo<D18F><6F><EFBFBD>悤<EFBFBD>ɂ<EFBFBD><C982>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
|
||||
<EFBFBD>E<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>̕ύX<EFBFBD>_
|
||||
<EFBFBD>@GPU <20><> PAR2 <20>̏<EFBFBD><CC8F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>ɂ<EFBFBD><C982>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@<40><><EFBFBD>J<EFBFBD>o<EFBFBD><6F><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>̔j<CC94><6A><EFBFBD><EFBFBD><EFBFBD>ʒm<CA92><6D><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>ɂ<EFBFBD><C982>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
・クライアントの変更点
|
||||
古い CPU や GPU でもなるべく速く動くようにしました。
|
||||
ZIP / 7-Zip 書庫にリカバリ・レコードを付加できるようにしました。
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
v1.2.7 <20>̍X<CC8D>V<EFBFBD><56><EFBFBD><EFBFBD> (2015/05/26)
|
||||
v1.2.8 の更新情報 (2015/10/27)
|
||||
|
||||
<EFBFBD>@SSE2 (Pentium 4 <20>ȍ~<7E><> CPU <20>̊g<CC8A><67><EFBFBD>@<40>\) <20><><EFBFBD>K<EFBFBD>{<7B>ɂȂ<C982><C882>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
GPU による高速化を実験してます。
|
||||
|
||||
[ 1.2.6 <20><><EFBFBD><EFBFBD> 1.2.7 <20>ւ̕ύX<CF8D>_ ]
|
||||
[ 1.2.7 から 1.2.8 への変更点 ]
|
||||
|
||||
<EFBFBD>EGUI <EFBFBD>̕ύX<EFBFBD>_
|
||||
<EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʂ<EFBFBD><CA82>\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>啝<EFBFBD>ɕύX<CF8D><58><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@<40>L<EFBFBD><4C><EFBFBD><EFBFBD><EFBFBD>Z<EFBFBD><5A><EFBFBD><EFBFBD><EFBFBD>㏑<EFBFBD><E38F91><EFBFBD>ɑ<C991><CE82>Ċm<C48A>F<EFBFBD>_<EFBFBD>C<EFBFBD>A<EFBFBD><41><EFBFBD>O<EFBFBD><4F><EFBFBD>o<EFBFBD><6F><EFBFBD>悤<EFBFBD>ɂ<EFBFBD><C982>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@<40>x<EFBFBD><78><EFBFBD><EFBFBD><EFBFBD>̃<EFBFBD><CC83>b<EFBFBD>Z<EFBFBD>[<5B>W<EFBFBD>E<EFBFBD>{<7B>b<EFBFBD>N<EFBFBD>X<EFBFBD><58><EFBFBD>e<EFBFBD>E<EFBFBD>C<EFBFBD><43><EFBFBD>h<EFBFBD>E<EFBFBD>̒<EFBFBD><CC92><EFBFBD><EFBFBD>ɏo<C98F><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>ɂȂ<C982><C882>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
・GUI の変更点
|
||||
プログレス・バー上の文字を見やすくしました。
|
||||
GPU を使うかを設定画面で選択できるようにしました。
|
||||
64-bit OS では 64-bit 版の par2j を呼び出すようにしました。
|
||||
|
||||
<EFBFBD>E<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>̕ύX<EFBFBD>_
|
||||
<EFBFBD>@<40><><EFBFBD>ꂼ<EFBFBD><EA82BC><EFBFBD>̃t<CC83>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>Ƀt<C983>@<40>C<EFBFBD><43><EFBFBD>ꗗ<EFBFBD><EA9797><EFBFBD>\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>ɂ<EFBFBD><C982>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD>ȃt<C883>@<40>C<EFBFBD><43><EFBFBD>ɑ<C991><CE82>Ă͌<C482><CD8C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʂ<EFBFBD><CA82>L<EFBFBD>^<5E><><EFBFBD>Ȃ<EFBFBD><C882>悤<EFBFBD>ɂ<EFBFBD><C982>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@<40>\<5C>[<5B>X<EFBFBD>E<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C282><EFBFBD><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD>J<EFBFBD>o<EFBFBD><6F><EFBFBD>E<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>ɂ<EFBFBD><C982>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>Ȃǂ̌̏<CC8C><CC8F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD><6F><EFBFBD>ăG<C483><47><EFBFBD>[<5B>\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>ɂ<EFBFBD><C982>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
・クライアントの変更点
|
||||
GPU で PAR2 の処理を高速化するようにしました。
|
||||
リカバリ・ファイルの破損も通知するようにしました。
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
v1.2.6 <20>̍X<CC8D>V<EFBFBD><56><EFBFBD><EFBFBD> (2014/10/08)
|
||||
v1.2.7 の更新情報 (2015/05/26)
|
||||
|
||||
<EFBFBD>@Windows 2000 <20><EFBFBD><F093AE8D>Ώۂ<CE8F> OS <20><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><4F><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
SSE2 (Pentium 4 以降の CPU の拡張機能) が必須になりました。
|
||||
|
||||
[ 1.2.5 <20><><EFBFBD><EFBFBD> 1.2.6 <20>ւ̕ύX<CF8D>_ ]
|
||||
[ 1.2.6 から 1.2.7 への変更点 ]
|
||||
|
||||
<EFBFBD>EGUI <EFBFBD>̕ύX<EFBFBD>_
|
||||
<EFBFBD>@<40>o<EFBFBD>ߕ\<5C><><EFBFBD>̃p<CC83>[<5B>Z<EFBFBD><5A><EFBFBD>g<EFBFBD><67> 0.1% <20><><EFBFBD>݂ɂȂ<C982><C882>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@<40>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>E<EFBFBD><45><EFBFBD>X<EFBFBD>g<EFBFBD>ł̃t<CC83>@<40>C<EFBFBD><43><EFBFBD>̕<EFBFBD><CC95>ѕ<EFBFBD><D195><EFBFBD><EFBFBD>̂̃G<CC83>N<EFBFBD>X<EFBFBD>v<EFBFBD><76><EFBFBD>[<5B><><EFBFBD>[<5B><><EFBFBD>ɂȂ<C982><C882>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
・GUI の変更点
|
||||
検査結果を表示する方式が大幅に変更されました。
|
||||
キャンセルや上書きに対して確認ダイアログを出すようにしました。
|
||||
警告等のメッセージ・ボックスが親ウインドウの中央に出現するようになりました。
|
||||
|
||||
<EFBFBD>E<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>̕ύX<EFBFBD>_
|
||||
<EFBFBD>@PAR2 <20>ő傫<C591>ȃt<C883>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>A<EFBFBD>쐬<EFBFBD>╜<EFBFBD><E2959C><EFBFBD><EFBFBD><EFBFBD>ȑO<C891><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@PAR2 <20>ň<EFBFBD><C588><EFBFBD><EFBFBD>郊<EFBFBD>J<EFBFBD>o<EFBFBD><6F><EFBFBD>E<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD> 65535<33>܂łɑ<C582><C991>₵<EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
・クライアントの変更点
|
||||
それぞれのファイルを検査する前にファイル一覧を表示するようにしました。
|
||||
小さなファイルに対しては検査結果を記録しないようにしました。
|
||||
ソース・ブロックが一個だけでもリカバリ・ブロックを作れるようにしました。
|
||||
メモリーなどの故障を検出してエラー表示するようにしました。
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
v1.2.5 <20>̍X<CC8D>V<EFBFBD><56><EFBFBD><EFBFBD> (2014/05/25)
|
||||
v1.2.6 の更新情報 (2014/10/08)
|
||||
|
||||
<EFBFBD>@<40>Â<EFBFBD><C382>N<EFBFBD><4E><EFBFBD>C<EFBFBD>A<EFBFBD><41><EFBFBD>g (par3j_old.exe) <20>͂<EFBFBD><CD82><EFBFBD> MultiPar <20>ł͎g<CD8E><67><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
Windows 2000 を動作対象の OS から外しました。
|
||||
|
||||
[ 1.2.4 <20><><EFBFBD><EFBFBD> 1.2.5 <20>ւ̕ύX<CF8D>_ ]
|
||||
[ 1.2.5 から 1.2.6 への変更点 ]
|
||||
|
||||
<EFBFBD>EGUI <EFBFBD>̕ύX<EFBFBD>_
|
||||
<EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʂɂ<CA82><C982><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD>o<EFBFBD>̕\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>₷<EFBFBD><E282B7><EFBFBD>Ȃ<EFBFBD><C882>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@<40><><EFBFBD>ʂ<EFBFBD><CA82><EFBFBD><C282><EFBFBD><EFBFBD>ۂɁA<C981><41><EFBFBD>쒆<EFBFBD>̃N<CC83><4E><EFBFBD>C<EFBFBD>A<EFBFBD><41><EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD><49><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD>悤<EFBFBD>ɂȂ<C982><C882>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
・GUI の変更点
|
||||
経過表示のパーセントが 0.1% 刻みになりました。
|
||||
ファイル・リストでのファイルの並び方が昔のエクスプローラー風になりました。
|
||||
|
||||
<EFBFBD>E<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>̕ύX<EFBFBD>_
|
||||
<EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ꂽ<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>▼<EFBFBD>O<EFBFBD><4F><EFBFBD>ύX<CF8D><58><EFBFBD>ꂽ<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƌ<EFBFBD><C68C><EFBFBD><C282><EFBFBD><EFBFBD>悤<EFBFBD>ɂȂ<C982><C882>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@<40>ǂ̏C<CC8F><43><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߁A<DF81>I<EFBFBD><49><EFBFBD>R<EFBFBD>[<5B>h<EFBFBD><68><EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>ȃf<C883>[<5B>^<5E>̃X<CC83><58><EFBFBD>C<EFBFBD>X<EFBFBD><58><EFBFBD>T<EFBFBD><54><EFBFBD>ۂɃt<C983><74><EFBFBD>[<5B>Y<EFBFBD><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
・クライアントの変更点
|
||||
PAR2 で大きなファイルを扱う場合、作成や復元が以前よりも速くなりました。
|
||||
PAR2 で扱えるリカバリ・ブロック数を 65535個までに増やしました。
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
v1.2.4 <20>̍X<CC8D>V<EFBFBD><56><EFBFBD><EFBFBD> (2014/03/16)
|
||||
v1.2.5 の更新情報 (2014/05/25)
|
||||
|
||||
<EFBFBD>@<40>J<EFBFBD><4A><EFBFBD><EFBFBD><C28B><EFBFBD> Visual Studio 6.0 <20><><EFBFBD><EFBFBD> Visual Studio 2008 <20>ɕς<C995><CF82><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
古いクライアント (par3j_old.exe) はもう MultiPar では使えません。
|
||||
|
||||
[ 1.2.3 <20><><EFBFBD><EFBFBD> 1.2.4 <20>ւ̕ύX<CF8D>_ ]
|
||||
[ 1.2.4 から 1.2.5 への変更点 ]
|
||||
|
||||
<EFBFBD>E<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD>[<5B>̕ύX<CF8D>_
|
||||
<EFBFBD>@MultiPar <20><><EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482>Ԃ́A<CD81>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><41><EFBFBD>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582>Ȃ<EFBFBD><C882>Ȃ<EFBFBD><C882>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
・GUI の変更点
|
||||
検査画面におけるブロック検出状況の表示が見やすくなりました。
|
||||
画面を閉じる際に、動作中のクライアントを強制終了できるようになりました。
|
||||
|
||||
<EFBFBD>EGUI <20>̕ύX<CF8D>_
|
||||
<EFBFBD>@<40><><EFBFBD><EFBFBD> MultiPar <20><><EFBFBD><EFBFBD><EFBFBD>쒆<EFBFBD>Ȃ<EFBFBD><C882>A<EFBFBD><41><EFBFBD>̏<EFBFBD><CC8F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD>̂<EFBFBD><CC82>҂悤<C282>ɂ<EFBFBD><C982>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>@<40><><EFBFBD>當<EFBFBD><E795B6><EFBFBD>܂ł̃t<CC83>@<40>C<EFBFBD><43><EFBFBD>E<EFBFBD>p<EFBFBD>X<EFBFBD>ɑΉ<C991><CE89>ł<EFBFBD><C582><EFBFBD><EFBFBD>悤<EFBFBD>ɂȂ<C982><C882>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
|
||||
<EFBFBD>E<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>̕ύX<EFBFBD>_
|
||||
<EFBFBD>@PAR2 <20>Ń\<5C>[<5B>X<EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>ɑ<EFBFBD><C991>̃t<CC83>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĂĂ<C482><C482><EFBFBD><EFBFBD>o<EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD>悤<EFBFBD>ɂȂ<C982><C882>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
・クライアントの変更点
|
||||
分割されたファイルや名前が変更されたファイルをもっと見つけるようになりました。
|
||||
どの修復が可能かを示すため、終了コードを拡張しました。
|
||||
似たようなデータのスライスを探す際にフリーズする問題を修正しました。
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
v1.2.4 の更新情報 (2014/03/16)
|
||||
|
||||
開発環境が Visual Studio 6.0 から Visual Studio 2008 に変わりました。
|
||||
|
||||
[ 1.2.3 から 1.2.4 への変更点 ]
|
||||
|
||||
・インストーラーの変更点
|
||||
MultiPar が起動してる間は、インストールやアンインストールができなくなりました。
|
||||
|
||||
・GUI の変更点
|
||||
他の MultiPar が動作中なら、その処理が終わるのを待つようにしました。
|
||||
約千文字までのファイル・パスに対応できるようになりました。
|
||||
|
||||
・クライアントの変更点
|
||||
PAR2 でソース・ファイルに他のファイルが混じってても検出できるようになりました。
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
@@ -16,7 +16,7 @@ textarea{width:100%;}
|
||||
|
||||
<p> 
|
||||
Because MultiPar consists of PAR clients and GUI,
|
||||
it is possible to use a PAR client on Command prompt.
|
||||
it is possible to use a PAR client on Command Prompt.
|
||||
Read a manual of command line for the details of command and option.
|
||||
It's available by batch file (or command script).
|
||||
</p>
|
||||
@@ -27,13 +27,57 @@ Modify the options for PAR2 files, and set the path of <tt>par2j.exe</tt>.
|
||||
Write absolute path like;<br>
|
||||
<code>SET par2_path="C:\something directory\MultiPar\par2j.exe"</code><br>
|
||||
Read manuals (<tt>Command_***.txt</tt>) to know the detail of options.
|
||||
Read Windows OS 's help for Command prompt's usage.
|
||||
Read Windows OS 's help for Command Prompt's usage.
|
||||
</p>
|
||||
<p> 
|
||||
Save a sample script to a file like <tt>batch.bat</tt> or <tt>batch.cmd</tt>.
|
||||
To specify path of files or folders, Drag & Drop them on the batch file.
|
||||
When you put a shortcut icon of the batch file in "SendTo" menu,
|
||||
you can call the batch file by selecting files then Righ-Click & SendTo.
|
||||
There are some ways to specify a file or folder.<br>
|
||||
<ol>
|
||||
<li>Type everytime by keyboard on Command Prompt
|
||||
<p> 
|
||||
If you use the batch file at Command Prompt, change directory to the batch file at first.
|
||||
Next, type <tt>batch.bat "path of the file or folder"</tt>.
|
||||
If there is no space in the path, no need to cover by <tt>""</tt>.
|
||||
The path may be absolute path or relative path from the batch file.
|
||||
Normally absolute path would be safe.
|
||||
</p>
|
||||
<p> 
|
||||
If you want to specify multiple files or folders,
|
||||
type <tt>batch.bat "path of the first file or folder" "path of second file or folder" "path of third file or folder"</tt>.
|
||||
You may add some pathes after a script filename.
|
||||
</p>
|
||||
</li>
|
||||
<li>Drag & Drop a file or folder by mouse
|
||||
<p> 
|
||||
On Windows Explorer, drag a file or folder and drop it on your batch file.
|
||||
If you put the batch file on Desktop, it will be easy to Drag & Drop.
|
||||
</p>
|
||||
<p> 
|
||||
If you want to specify multiple files or folders,
|
||||
select them at once on Windows Explorer, and Drag & Drop the group on the batch file.
|
||||
While dragging, number of items may be shown.
|
||||
</p>
|
||||
</li>
|
||||
<li>Select SendTo at Windows Explorer's right click menu
|
||||
<p> 
|
||||
At first, create Short-cut icon of your batch file.
|
||||
Name it to be something easy to understand like "Create PAR2".
|
||||
Then, put the Short-cut icon in your <tt>SendTo</tt> folder.
|
||||
You can open the <tt>SendTo</tt> folder by typing <tt>shell:sendto</tt> on path-box of Windows Explorer.
|
||||
</p>
|
||||
<p> 
|
||||
After you select a file or folder on Windows Explorer, click mouse's right button.
|
||||
Select "SendTo" item on the right-click menu.
|
||||
As your created Short-cut item will exist in the SendTo sub-menu, select the Short-cut icon.
|
||||
</p>
|
||||
<p> 
|
||||
If you want to specify multiple files or folders,
|
||||
select them at once on Windows Explorer.
|
||||
While mouse cursor over there, click mouse's right button.
|
||||
Later action is same as single item.
|
||||
</p>
|
||||
</li>
|
||||
</ol>
|
||||
</p>
|
||||
<p> 
|
||||
If you want to confirm the result of scripting,
|
||||
@@ -60,8 +104,9 @@ you must set a local variable as "<code>setlocal enabledelayedexpansion</code>"
|
||||
<tr><td><a href="#C1">Create individual PAR2 set in each selected folder (with GUI)</a><td>
|
||||
<tr><td><a href="#C2">Create individual PAR2 set in each subfolder under a selected folder (with GUI)</a><td>
|
||||
<tr><td><a href="#C3">Create one PAR2 file per each file in a selected folder</a><td>
|
||||
<tr><td><a href="#C4">Create individual PAR2 set per each set of 4 files from many selected files</a><td>
|
||||
<tr><td><a href="#C5">Create PAR2 recovery data and append it to each original ZIP / 7-Zip archive file</a><td>
|
||||
<tr><td><a href="#C4">Create individual PAR2 set per each RAR archive in a selected folder</a><td>
|
||||
<tr><td><a href="#C5">Create individual PAR2 set per each set of 4 files from many selected files</a><td>
|
||||
<tr><td><a href="#C6">Create PAR2 recovery data and append it to each original ZIP / 7-Zip archive file</a><td>
|
||||
<tr><td><hr width="95%"></td>
|
||||
<tr><td><a href="#V1">Verify and/or Repair individual PAR2 set in each selected folder with GUI</a><td>
|
||||
<tr><td><a href="#V2">Create, Verify or Repair individual PAR2 set in each subfolder under a selected folder with GUI</a><td>
|
||||
@@ -91,7 +136,7 @@ It is possible to show GUI for setting, too.
|
||||
</table>
|
||||
</p>
|
||||
|
||||
<textarea cols=64 rows=23 readonly wrap=off>
|
||||
<textarea cols=64 rows=22 readonly wrap=off>
|
||||
@ECHO OFF
|
||||
SETLOCAL
|
||||
|
||||
@@ -121,7 +166,7 @@ When a GUI is closed, next GUI is opened with next folder.
|
||||
You may set an option in "Automated tasks" to close GUI automatically after creation.
|
||||
</p>
|
||||
|
||||
<textarea cols=64 rows=21 readonly wrap=off>
|
||||
<textarea cols=64 rows=20 readonly wrap=off>
|
||||
@ECHO OFF
|
||||
SETLOCAL
|
||||
|
||||
@@ -150,7 +195,7 @@ Because all MultiPar GUIs will open at once for each folder,
|
||||
you can start each creation anytime.
|
||||
</p>
|
||||
|
||||
<textarea cols=64 rows=21 readonly wrap=off>
|
||||
<textarea cols=64 rows=20 readonly wrap=off>
|
||||
@ECHO OFF
|
||||
SETLOCAL
|
||||
|
||||
@@ -185,7 +230,7 @@ For example, when there are 7 subfolders, total 7 PAR2 set are made.
|
||||
</table>
|
||||
</p>
|
||||
|
||||
<textarea cols=64 rows=33 readonly wrap=off>
|
||||
<textarea cols=64 rows=29 readonly wrap=off>
|
||||
@ECHO OFF
|
||||
SETLOCAL
|
||||
|
||||
@@ -229,7 +274,7 @@ You may check "Always use folder name for base filename" option in "Client behav
|
||||
then each PAR2 set is named by the folder.
|
||||
</p>
|
||||
|
||||
<textarea cols=64 rows=33 readonly wrap=off>
|
||||
<textarea cols=64 rows=29 readonly wrap=off>
|
||||
@ECHO OFF
|
||||
SETLOCAL
|
||||
|
||||
@@ -276,7 +321,7 @@ For example, when there are 7 files in the folder, total 7 PAR2 files are made.
|
||||
</table>
|
||||
</p>
|
||||
|
||||
<textarea cols=64 rows=33 readonly wrap=off>
|
||||
<textarea cols=64 rows=29 readonly wrap=off>
|
||||
@ECHO OFF
|
||||
SETLOCAL
|
||||
|
||||
@@ -315,6 +360,80 @@ By this option, index file isn't created.
|
||||
<hr>
|
||||
|
||||
<a name="C4"></a>
|
||||
<h3>Create individual PAR2 set per each RAR archive in a selected folder</h3>
|
||||
<p>
|
||||
<table border=1 cellspacing=0 cellpadding=2 width="100%">
|
||||
<tr><td>Command<td>"path of batch file" "path of a folder"
|
||||
<tr><td>Input<td>specify a folder
|
||||
<tr><td>Action<td>This sample creates individual PAR2 set per each RAR archive file(s) in the selected folder.
|
||||
If RAR archive is single file, PAR2 files are created for it.
|
||||
If RAR archive is splitted into multiple files, PAR2 files are created for them.
|
||||
When you don't select any folder, it will search RAR files in current directory (where the script exists normally).
|
||||
</table>
|
||||
</p>
|
||||
|
||||
<textarea cols=64 rows=52 readonly wrap=off>
|
||||
@ECHO OFF
|
||||
SETLOCAL enabledelayedexpansion
|
||||
|
||||
REM check input path
|
||||
IF "%~1"=="" GOTO Start
|
||||
IF NOT EXIST "%~1" (
|
||||
ECHO The path does not exist.
|
||||
GOTO End
|
||||
)
|
||||
PUSHD %1
|
||||
:Start
|
||||
|
||||
REM set paramaters for PAR2 client
|
||||
SET par2_path="path of par2j.exe"
|
||||
SET REDUNDANCY_PERCENT=15
|
||||
SET PAR2_FILES=3
|
||||
|
||||
REM search file of each single RAR archive
|
||||
FOR %%F in (*.rar) do (
|
||||
REM check ".part" in splitted RAR files
|
||||
ECHO "%%~nF" | find ".part" >NUL
|
||||
if ERRORLEVEL==1 (
|
||||
REM when filename doesn't include ".part", create PAR2 file for the RAR file.
|
||||
ECHO Creating parity archives for %%F...
|
||||
%par2_path% c /rr%REDUNDANCY_PERCENT% /rf%PAR2_FILES% /rd1 "%%~nF.par2" "%%F"
|
||||
ECHO Parity archives created for %%F.
|
||||
ECHO.
|
||||
)
|
||||
)
|
||||
|
||||
REM search the first file of each splitted RAR archive
|
||||
FOR %%F in ("*.part1.rar" "*.part01.rar" "*.part001.rar") do (
|
||||
call :SUB_CREATE "%%~nF"
|
||||
)
|
||||
|
||||
POPD
|
||||
ECHO Parity archive creation complete.
|
||||
PAUSE
|
||||
|
||||
GOTO End
|
||||
|
||||
REM sub-routine to create PAR files for multiple input files
|
||||
:SUB_CREATE
|
||||
ECHO Creating parity archives for multiple %~n1...
|
||||
%par2_path% c /rr%REDUNDANCY_PERCENT% /rf%PAR2_FILES% /rd1 "%~n1.par2" "%~n1.part*.rar"
|
||||
ECHO Parity archives created for multiple %~n1.
|
||||
ECHO.
|
||||
|
||||
GOTO :EOF
|
||||
|
||||
:End
|
||||
ENDLOCAL</textarea>
|
||||
|
||||
<p> 
|
||||
The script calls <code>Find.exe</code> and for certain Windows versions,
|
||||
you may have to add <code>C:\Windows\System32</code> to Windows System Path if not already present.
|
||||
</p>
|
||||
|
||||
<hr>
|
||||
|
||||
<a name="C5"></a>
|
||||
<h3>Create individual PAR2 set per each set of 4 files from many selected files</h3>
|
||||
<p>
|
||||
<table border=1 cellspacing=0 cellpadding=2 width="100%">
|
||||
@@ -361,7 +480,7 @@ Be careful about the number of source files and "<code>SHIFT</code>" per each st
|
||||
|
||||
<hr>
|
||||
|
||||
<a name="C5"></a>
|
||||
<a name="C6"></a>
|
||||
<h3>Create PAR2 recovery data and append it to each original ZIP / 7-Zip archive file</h3>
|
||||
<p>
|
||||
<table border=1 cellspacing=0 cellpadding=2 width="100%">
|
||||
@@ -449,7 +568,7 @@ When a GUI is closed, next GUI is opened with next PAR2 set.
|
||||
</table>
|
||||
</p>
|
||||
|
||||
<textarea cols=64 rows=21 readonly wrap=off>
|
||||
<textarea cols=64 rows=20 readonly wrap=off>
|
||||
@ECHO OFF
|
||||
SETLOCAL
|
||||
|
||||
@@ -492,7 +611,7 @@ Next time you specify the folder, MultiPar verifies the 7 subfolders one by one.
|
||||
</table>
|
||||
</p>
|
||||
|
||||
<textarea cols=64 rows=38 readonly wrap=off>
|
||||
<textarea cols=64 rows=34 readonly wrap=off>
|
||||
@ECHO OFF
|
||||
SETLOCAL
|
||||
|
||||
@@ -555,7 +674,7 @@ but it's invisible by Windows Explorer.
|
||||
</table>
|
||||
</p>
|
||||
|
||||
<textarea cols=64 rows=38 readonly wrap=off>
|
||||
<textarea cols=64 rows=37 readonly wrap=off>
|
||||
@ECHO OFF
|
||||
SETLOCAL
|
||||
|
||||
@@ -619,7 +738,7 @@ Checksum data must have been saved in an alternate stream "<tt>original filename
|
||||
</table>
|
||||
</p>
|
||||
|
||||
<textarea cols=64 rows=43 readonly wrap=off>
|
||||
<textarea cols=64 rows=42 readonly wrap=off>
|
||||
@ECHO OFF
|
||||
SETLOCAL
|
||||
|
||||
|
||||
@@ -13,13 +13,37 @@
|
||||
<p> 
|
||||
While MultiPar is available as freeware, I spent a lot of time and effort to develop.
|
||||
Your donation will encourage me to continue my efforts to improve and support MultiPar.
|
||||
I made PayPal account and quick link for donation.<br>
|
||||
<ol>
|
||||
<li>Click <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=NPNAKA32N4GD6" target="_blank" title="PayPal - The safer, easier way to pay online!">this link</a> to go PayPal's web-page.
|
||||
<li>On left panel, you can change Quantity, and click Update to multiply the Amount.
|
||||
<li>On right panel, you select your PayPal account or Credit card.
|
||||
<li>You may write Message to developer at the bottom of right panel.
|
||||
</ol>
|
||||
I made PayPal account and quick link for donation.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you want to send message to me, use below web-form.
|
||||
Select how much amount, write message, and click Doante button.
|
||||
<center>
|
||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
|
||||
<input type="hidden" name="cmd" value="_s-xclick">
|
||||
<input type="hidden" name="hosted_button_id" value="2PP6DCPP5ZGNJ">
|
||||
<table border=0 cellspacing=0 cellpadding=0>
|
||||
<tr><td><input type="hidden" name="on0" value="How much">How much:<br>
|
||||
<select name="os0">
|
||||
<option value="Cheer">Cheer $10.00 USD</option>
|
||||
<option value="Encouragement">Encouragement $20.00 USD</option>
|
||||
<option value="Premium">Premium $30.00 USD</option>
|
||||
<option value="Subsidy">Subsidy $40.00 USD</option>
|
||||
<option value="Surprise">Surprise $50.00 USD</option>
|
||||
</select></td><td>  </td>
|
||||
<td><input type="hidden" name="on1" value="Short message">Short message:<br>
|
||||
<input type="text" name="os1" maxlength="200" size="48"></td><td>  </td>
|
||||
<td><input type="image" src="paypal.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"></td></tr>
|
||||
</table>
|
||||
<input type="hidden" name="currency_code" value="USD">
|
||||
</form>
|
||||
</center>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you don't write message, click <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=NPNAKA32N4GD6" target="_blank" title="PayPal - The safer, easier way to pay online!">this link</a> to go PayPal's web-page.
|
||||
You may change Quantity to multiply the total amount.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
||||
@@ -51,7 +51,7 @@ There are command-line manuals in "<tt>help</tt>" folder.
|
||||
</table>
|
||||
|
||||
<hr>
|
||||
<small>last update 2023/03/20 for version 1.3.2.8</small>
|
||||
<small>last update 2025/01/20 for version 1.3.3.5</small>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
BIN
alpha/help/0409/paypal.gif
Normal file
BIN
alpha/help/0409/paypal.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.9 KiB |
@@ -174,15 +174,19 @@ It's possible to stop queue on GUI.
|
||||
<tr><td>Script file<td><tt>queue_verify.py</tt>
|
||||
<tr><td>Caution<td>You must select MultiPar Option: "Re-use verification result" to be "For 3 days" or longer,
|
||||
and you should check "Don't search subfolders" in "Verification and Repair options" section on "Client behavior" tab.
|
||||
Furthermore, you must set proper <tt>save_path</tt> in the script.
|
||||
</table>
|
||||
</p>
|
||||
<p> 
|
||||
In this sample, it tries verification only.
|
||||
If you want to repair a damaged set automatically, use <tt>repair</tt> command instead of <tt>verify</tt> of par2j.
|
||||
In this sample, it tries verification at first.
|
||||
If you want to repair a damaged set automatically, check "Repair" item on the GUI panel.
|
||||
When you want to confirm result by MultiPar, select a PAR2 set and push "Open with MultiPar" button.
|
||||
You may repair on the MultiPar GUI.
|
||||
You may repair on the MultiPar GUI manually.
|
||||
</p>
|
||||
<p> 
|
||||
After you start verification queue, you may stop next verification by pushing "Stop" button.
|
||||
After the queue was stopped, you may re-start queue by pushing "Start" button again.
|
||||
Or, you may select another folder by pushing "Folder" button.
|
||||
While verification, it shows details on Command Prompt window.
|
||||
You can control the progress by pushing a key on the Command Prompt.
|
||||
You may pause the process by pushing P-key.
|
||||
@@ -193,7 +197,8 @@ Even when you stop the verification task, it may save result partially.
|
||||
<p> 
|
||||
When you push "Folder" button, it searches PAR2 sets in the selected folder.
|
||||
By default, It doesn't search files recursively, because it may be slow.
|
||||
If you want to search all sub-directories, you need to edit the script.
|
||||
If you want to search all sub-directories, select "Recursive" item on the GUI panel.
|
||||
While you don't start verification yet, you may select another folder by pushing "Stop" button.
|
||||
You may change behavior of starting verification automatically or not by editing the script.
|
||||
</p>
|
||||
|
||||
|
||||
@@ -31,7 +31,14 @@ Be careful to use those special features.
|
||||
|
||||
<h3>System requirement</h3>
|
||||
<p> 
|
||||
MultiPar requires a PC with Windows Vista or later (Windows 7, 8, 10).
|
||||
MultiPar requires a PC with Windows 7 or later (Windows 8, 10, 11).
|
||||
</p>
|
||||
|
||||
<h3>Usage manual or Help documents</h3>
|
||||
<p> 
|
||||
There are some usage manual or help documents in "help" folder.
|
||||
English pages exists in "help/0409" folder.
|
||||
You may open the manual by pushing "F1-key", while using MultiPar.
|
||||
</p>
|
||||
|
||||
</body>
|
||||
|
||||
@@ -8,14 +8,13 @@
|
||||
|
||||
<h3>Install or uninstall with installer package</h3>
|
||||
<p> 
|
||||
Double click setup file ( <tt>MultiPar131_setup.exe</tt> or something like this name ),
|
||||
Double click setup file ( <tt>MultiPar133_setup.exe</tt> or something like this name ),
|
||||
and follow the installer dialog.
|
||||
At version up, if you want to use previous setting, overwrite install is possible.
|
||||
Before overwrite install, you should un-check "Integrate MultiPar into Shell".
|
||||
You may need to re-start OS after overwrite install or uninstall rarely.
|
||||
To install under "<tt>Program Files</tt>" or "<tt>Program Files (x86)</tt>" directory,
|
||||
you must start the installer with administrative privileges by selecting
|
||||
"Run as administrator" on right-click menu.
|
||||
you must select "Install for all users" at the first dialog.
|
||||
</p>
|
||||
<p> 
|
||||
You can uninstall through the Windows OS's Control Panel,
|
||||
@@ -42,7 +41,7 @@ In either case, user made icons and association are available for the user only.
|
||||
|
||||
<h3>Install with archive version</h3>
|
||||
<p> 
|
||||
Unpack compressed file ( <tt>MultiPar131.zip</tt> or something like this name ) in a folder.
|
||||
Unpack compressed file ( <tt>MultiPar133.zip</tt> or something like this name ) in a folder.
|
||||
<tt>MultiPar.exe</tt> is the interface of MultiPar.
|
||||
</p>
|
||||
<p> 
|
||||
|
||||
@@ -13,9 +13,6 @@ MultiPar consists of PAR clients and GUI to control them.
|
||||
They are written by Yutaka Sawada.
|
||||
Though console applications are open source (PAR clients are GPL),
|
||||
GUI application is closed source.
|
||||
Some article are available at
|
||||
<a href="https://hp.vector.co.jp/authors/VA021385/" target="_blank" title="Announcement page on Vector">my web site</a>.
|
||||
There are source code packages on <a href="https://github.com/Yutaka-Sawada/MultiPar" target="_blank" title="GitHub page">GitHub</a>.
|
||||
</p>
|
||||
|
||||
<hr>
|
||||
@@ -42,10 +39,8 @@ mail server may delete it automatically, and I won't see it.
|
||||
|
||||
<h3>Link</h3>
|
||||
<p> 
|
||||
I use <i>vector.co.jp</i>'s <a href="https://hp.vector.co.jp/authors/VA021385/" target="_blank" title="Announcement page on Vector">author page</a> to introduce MultiPar.
|
||||
Because there is another <a href="https://www.vector.co.jp/soft/dl/winnt/util/se460801.html" target="_blank" title="Download page on Vector">official download page</a>,
|
||||
using direct link to files on the page isn't preferable.
|
||||
When you write a link on somewhere, please don't include filename.
|
||||
You may download the latest version of <a href="https://github.com/Yutaka-Sawada/MultiPar" target="_blank">MultiPar on GitHub</a>.
|
||||
There is <a href="https://www.vector.co.jp/soft/dl/winnt/util/se460801.html" target="_blank">a Japanese download page on Vector</a>.
|
||||
</p>
|
||||
|
||||
</body>
|
||||
|
||||
48
alpha/help/0411/donate.htm
Normal file
48
alpha/help/0411/donate.htm
Normal file
@@ -0,0 +1,48 @@
|
||||
<html lang="ja">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<title><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>̂<EFBFBD><EFBFBD>肢</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<font size=5><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>̂<EFBFBD><EFBFBD>肢</font>
|
||||
<hr>
|
||||
|
||||
<h3>PayPal <20>ł̊<C582><CC8A>t<EFBFBD><74><EFBFBD><EFBFBD><EFBFBD>肢<EFBFBD><E882A2><EFBFBD>܂<EFBFBD></h3>
|
||||
<p> 
|
||||
MultiPar <20>͖<EFBFBD><CD96><EFBFBD><EFBFBD>ŗ<EFBFBD><C597>p<EFBFBD>ł<EFBFBD><C582>܂<EFBFBD><DC82><EFBFBD><EFBFBD>A<EFBFBD>J<EFBFBD><4A><EFBFBD>ɂ͎<C982><CD8E>ԂƎ<D482><C68E>Ԃ<EFBFBD><D482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă܂<C482><DC82>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><EFBFBD><EFBFBD>Ē<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƁA<EFBFBD>J<EFBFBD><EFBFBD><EFBFBD>𑱂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>͂<EFBFBD><EFBFBD>o<EFBFBD>܂<EFBFBD><EFBFBD>B
|
||||
PayPal <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>ӂ<EFBFBD><D382><EFBFBD><EFBFBD>̂ŁA<C581><41><EFBFBD>Њ<EFBFBD><D08A>t<EFBFBD><74><EFBFBD><EFBFBD><EFBFBD>肢<EFBFBD><E882A2><EFBFBD>܂<EFBFBD><DC82>B
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<EFBFBD><EFBFBD><EFBFBD>z<EFBFBD><EFBFBD><EFBFBD>I<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>āA<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>Z<EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>āADoante <20>{<7B>^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
<center>
|
||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
|
||||
<input type="hidden" name="cmd" value="_s-xclick">
|
||||
<input type="hidden" name="hosted_button_id" value="2PP6DCPP5ZGNJ">
|
||||
<table border=0 cellspacing=0 cellpadding=0>
|
||||
<tr><td><input type="hidden" name="on0" value="How much"><EFBFBD><EFBFBD><EFBFBD>z:<br>
|
||||
<select name="os0">
|
||||
<option value="Cheer">Cheer $10.00 USD</option>
|
||||
<option value="Encouragement">Encouragement $20.00 USD</option>
|
||||
<option value="Premium">Premium $30.00 USD</option>
|
||||
<option value="Subsidy">Subsidy $40.00 USD</option>
|
||||
<option value="Surprise">Surprise $50.00 USD</option>
|
||||
</select></td><td>  </td>
|
||||
<td><input type="hidden" name="on1" value="Short message"><EFBFBD><EFBFBD><EFBFBD>҂ւ̃<EFBFBD><EFBFBD>b<EFBFBD>Z<EFBFBD>[<5B>W:<br>
|
||||
<input type="text" name="os1" maxlength="200" size="48"></td><td>  </td>
|
||||
<td><input type="image" src="../0409/paypal.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"></td></tr>
|
||||
</table>
|
||||
<input type="hidden" name="currency_code" value="USD">
|
||||
</form>
|
||||
</center>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<EFBFBD>V<EFBFBD>@<40>\<5C>̎<EFBFBD><CC8E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>o<EFBFBD>O<EFBFBD>A<F18D9081><41><EFBFBD>P<EFBFBD>̏<EFBFBD><CC8F><EFBFBD><EFBFBD>ȂǁA<C781><41><EFBFBD>̌`<60>ł̍v<CC8D><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>肪<EFBFBD><E882AA><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582>B
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -37,6 +37,7 @@
|
||||
<a href="howto3.htm"><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>o<EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>̐v</a><br>
|
||||
<a href="howto4.htm"><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>̌<EFBFBD><CC8C><EFBFBD><EFBFBD>ƏC<C68F><43></a><br>
|
||||
<a href="problem.htm"><EFBFBD><EFBFBD><EFBFBD>m<EFBFBD>̖<EFBFBD><EFBFBD><EFBFBD><EFBFBD>_</a><br>
|
||||
<a href="donate.htm"><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>̂<EFBFBD><EFBFBD>肢</a>
|
||||
</td></tr>
|
||||
<tr><td colspan=3><font size=1> </font></td></tr>
|
||||
<tr valign="top"><td>
|
||||
@@ -51,7 +52,7 @@
|
||||
</table>
|
||||
|
||||
<hr>
|
||||
<small><EFBFBD>ŏI<EFBFBD>X<EFBFBD>V 2023/02/27 (<28>o<EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD> 1.3.2.8)</small>
|
||||
<small><EFBFBD>ŏI<EFBFBD>X<EFBFBD>V 2025/01/21 (<28>o<EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD> 1.3.3.5)</small>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
BIN
alpha/help/0411/paypal.gif
Normal file
BIN
alpha/help/0411/paypal.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.9 KiB |
@@ -25,7 +25,14 @@ QuickPar
|
||||
|
||||
<h3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></h3>
|
||||
<p> 
|
||||
Windows Vista <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȍ~ (Windows 7, 8, 10) <20>̃p<CC83>\<5C>R<EFBFBD><52><EFBFBD><EFBFBD><EFBFBD>K<EFBFBD>v<EFBFBD>ł<EFBFBD><C582>B
|
||||
Windows 7 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȍ~ (Windows 8, 10, 11) <20>̃p<CC83>\<5C>R<EFBFBD><52><EFBFBD><EFBFBD><EFBFBD>K<EFBFBD>v<EFBFBD>ł<EFBFBD><C582>B
|
||||
</p>
|
||||
|
||||
<h3><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></h3>
|
||||
<p> 
|
||||
<EFBFBD>قƂ<EFBFBD><EFBFBD>ljp<EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ahelp <20>t<EFBFBD>H<EFBFBD><48><EFBFBD>_<EFBFBD>[<5B>̒<EFBFBD><CC92>Ɏg<C98E><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͂<EFBFBD><CD82><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă܂<C482><DC82>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>{<7B><><EFBFBD>̃y<CC83>[<5B>W<EFBFBD><57> help\0411 <20>t<EFBFBD>H<EFBFBD><48><EFBFBD>_<EFBFBD>[<5B>̒<EFBFBD><CC92>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
|
||||
MultiPar <20>̎g<CC8E>p<EFBFBD><70><EFBFBD>ɁAF1-key <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƁA<C681>}<7D>j<EFBFBD><6A><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
|
||||
</p>
|
||||
|
||||
</body>
|
||||
|
||||
@@ -8,14 +8,13 @@
|
||||
|
||||
<h3><EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD>[<5B>ł̃C<CC83><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD>ƃA<C683><41><EFBFBD>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><></h3>
|
||||
<p> 
|
||||
<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD>[ ( <tt>MultiPar131_setup.exe</tt> <20>݂<EFBFBD><DD82><EFBFBD><EFBFBD>Ȗ<EFBFBD><C896>O ) <20><><EFBFBD>_<EFBFBD>u<EFBFBD><75><EFBFBD>E<EFBFBD>N<EFBFBD><4E><EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD>ƁA
|
||||
<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD>[ ( <tt>MultiPar133_setup.exe</tt> <20>݂<EFBFBD><DD82><EFBFBD><EFBFBD>Ȗ<EFBFBD><C896>O ) <20><><EFBFBD>_<EFBFBD>u<EFBFBD><75><EFBFBD>E<EFBFBD>N<EFBFBD><4E><EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD>ƁA
|
||||
<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>ʂ<EFBFBD><CA82>\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂ŁA<C581><41><EFBFBD>̎w<CC8E><77><EFBFBD>ɏ]<5D><><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>o<EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>A<EFBFBD>b<EFBFBD>v<EFBFBD><76><EFBFBD>ɁA<C981>ݒ荀<DD92>ڂ<EFBFBD><DA82><EFBFBD><EFBFBD>̂܂g<DC8E><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͏㏑<CD8F><E38F91><EFBFBD>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582>B
|
||||
<EFBFBD>㏑<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>ɁA<C981>uMultiPar <20><><EFBFBD>V<EFBFBD>F<EFBFBD><46><EFBFBD>ɓ<EFBFBD><C993><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v<EFBFBD>̃`<60>F<EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD>O<EFBFBD><4F><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>㏑<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><41><EFBFBD>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OS <20>̍ċN<C48B><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߂<EFBFBD><DF82><EFBFBD><EFBFBD>邩<EFBFBD><E982A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>u<tt>Program Files</tt><EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>u<tt>Program Files (x86)</tt><EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>ɃC<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɂ́A
|
||||
<EFBFBD>E<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD>E<EFBFBD><EFBFBD><EFBFBD>j<EFBFBD><EFBFBD><EFBFBD>[<5B>́u<CC81>Ǘ<EFBFBD><C797>҂Ƃ<D282><C682>Ď<EFBFBD><C48E>s<EFBFBD>v<EFBFBD><76><EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD>
|
||||
<EFBFBD>Ǘ<EFBFBD><EFBFBD>Ҍ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŃC<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD>[<5B><><EFBFBD>J<EFBFBD>n<EFBFBD><6E><EFBFBD><EFBFBD><EFBFBD>K<EFBFBD>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
|
||||
<EFBFBD>ŏ<EFBFBD><EFBFBD>̃_<EFBFBD>C<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>Łu<EFBFBD><EFBFBD><EFBFBD>ׂẴ<EFBFBD><EFBFBD>[<5B>U<EFBFBD>[<5B>p<EFBFBD>ɃC<C983><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD>v<EFBFBD><76><EFBFBD>I<EFBFBD><49><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
</p>
|
||||
<p> 
|
||||
<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD> Windows OS <20>̃R<CC83><52><EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD>E<EFBFBD>p<EFBFBD>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>A
|
||||
@@ -43,7 +42,7 @@ MultiPar
|
||||
|
||||
<h3><EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>ł̃C<CC83><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><></h3>
|
||||
<p> 
|
||||
<EFBFBD>z<EFBFBD>z<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă鈳<EFBFBD>k<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43> ( <tt>MultiPar131.zip</tt> <20>݂<EFBFBD><DD82><EFBFBD><EFBFBD>Ȗ<EFBFBD><C896>O ) <20><><EFBFBD>𓀂<EFBFBD><F0938082>Ăł<C482><C582><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD>
|
||||
<EFBFBD>z<EFBFBD>z<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă鈳<EFBFBD>k<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43> ( <tt>MultiPar133.zip</tt> <20>݂<EFBFBD><DD82><EFBFBD><EFBFBD>Ȗ<EFBFBD><C896>O ) <20><><EFBFBD>𓀂<EFBFBD><F0938082>Ăł<C482><C582><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD>
|
||||
<EFBFBD>ǂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>K<EFBFBD><EFBFBD><EFBFBD>ȃt<EFBFBD>H<EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>ɑS<EFBFBD>ē<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>̒<EFBFBD><EFBFBD><EFBFBD> <tt>MultiPar.exe</tt> <20>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD>̂<EFBFBD> MultiPar <20>̎<EFBFBD><CC8E>s<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>ł<EFBFBD><C582>B
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MultiPar <20><><EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
|
||||
|
||||
@@ -33,9 +33,9 @@ MultiPar
|
||||
|
||||
<h3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N</h3>
|
||||
<p> 
|
||||
<EFBFBD>x<EFBFBD>N<EFBFBD>^<5E>[<5B><><a href="https://hp.vector.co.jp/authors/VA021385/" target="_blank" title="<22>x<EFBFBD>N<EFBFBD>^<5E>[<5B>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>L<EFBFBD><4C><EFBFBD>y<EFBFBD>[<5B>W"><EFBFBD><EFBFBD><EFBFBD>҃y<EFBFBD>[<5B>W</a><EFBFBD>ł͊O<EFBFBD><EFBFBD><EFBFBD>l<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MultiPar <20><><EFBFBD>Љ<D089>Ă<EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD>B
|
||||
<EFBFBD>x<EFBFBD>N<EFBFBD>^<5E>[<5B><><a href="https://www.vector.co.jp/soft/dl/winnt/util/se460801.html" target="_blank" title="<22>x<EFBFBD>N<EFBFBD>^<5E>[<5B>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>_<EFBFBD>E<EFBFBD><45><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD>E<EFBFBD>y<EFBFBD>[<5B>W"><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȃ_<EFBFBD>E<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD>E<EFBFBD>y<EFBFBD>[<5B>W</a><EFBFBD>͕ʂɂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>{<7B>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD>Ƀ<EFBFBD><C983><EFBFBD><EFBFBD>N<EFBFBD><4E><EFBFBD>ڂ<EFBFBD><DA82><EFBFBD><EFBFBD>ۂ́A<CD81>x<EFBFBD>N<EFBFBD>^<5E>[<5B><><a href="https://www.vector.co.jp/soft/winnt/util/se460801.html" target="_blank" title="<22>x<EFBFBD>N<EFBFBD>^<5E>[<5B>ɂ<EFBFBD><C982><EFBFBD><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Љ<EFBFBD><D089>y<EFBFBD>[<5B>W"><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Љ<EFBFBD><EFBFBD>y<EFBFBD>[<5B>W</a><EFBFBD>ɂ<EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
MultiPar <20>̍ŐV<C590>ł<EFBFBD> <a href="https://github.com/Yutaka-Sawada/MultiPar" target="_blank">GitHub <20><><EFBFBD><EFBFBD></a><EFBFBD>_<EFBFBD>E<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD>ł<EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD>B
|
||||
<EFBFBD>x<EFBFBD>N<EFBFBD>^<5E>[<5B><><a href="https://www.vector.co.jp/soft/dl/winnt/util/se460801.html" target="_blank"><EFBFBD><EFBFBD><EFBFBD>{<7B><EFBFBD><EFBFBD>_<EFBFBD>E<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD>E<EFBFBD>y<EFBFBD>[<5B>W</a><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>{<7B>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD>Ƀ<EFBFBD><C983><EFBFBD><EFBFBD>N<EFBFBD><4E><EFBFBD>ڂ<EFBFBD><DA82><EFBFBD><EFBFBD>ۂ́A<CD81>x<EFBFBD>N<EFBFBD>^<5E>[<5B><><a href="https://www.vector.co.jp/soft/winnt/util/se460801.html" target="_blank"><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Љ<EFBFBD><EFBFBD>y<EFBFBD>[<5B>W</a><EFBFBD>ɂ<EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
</p>
|
||||
|
||||
</body>
|
||||
|
||||
@@ -11,13 +11,37 @@
|
||||
|
||||
<h3>PayPal捐赠</h3>
|
||||
<p> 
|
||||
尽管MultiPar可以免费使用,但我花了很多时间和精力来开发。您的捐款将鼓励我继续努力改进和支持MultiPar。我创建了PayPal帐户和捐款的快速链接。<br>
|
||||
<ol>
|
||||
<li>点击<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=NPNAKA32N4GD6" target="_blank" title="PayPal - The safer, easier way to pay online!">此链接</a>转到PayPal的网页。
|
||||
<li>在左侧面板上,您可以更改数量,然后单击更新以乘以金额。
|
||||
<li>在右侧面板中,您可以选择PayPal帐户或信用卡。
|
||||
<li>您可以在右侧面板底部向开发人员写消息。
|
||||
</ol>
|
||||
尽管MultiPar可以免费使用,但我花了很多时间和精力来开发。您的捐款将鼓励我继续努力改进和支持MultiPar。我创建了PayPal帐户和捐款的快速链接。
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you want to send message to me, use below web-form.
|
||||
Select how much amount, write message, and click Doante button.
|
||||
<center>
|
||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
|
||||
<input type="hidden" name="cmd" value="_s-xclick">
|
||||
<input type="hidden" name="hosted_button_id" value="2PP6DCPP5ZGNJ">
|
||||
<table border=0 cellspacing=0 cellpadding=0>
|
||||
<tr><td><input type="hidden" name="on0" value="How much">How much:<br>
|
||||
<select name="os0">
|
||||
<option value="Cheer">Cheer $10.00 USD</option>
|
||||
<option value="Encouragement">Encouragement $20.00 USD</option>
|
||||
<option value="Premium">Premium $30.00 USD</option>
|
||||
<option value="Subsidy">Subsidy $40.00 USD</option>
|
||||
<option value="Surprise">Surprise $50.00 USD</option>
|
||||
</select></td><td>  </td>
|
||||
<td><input type="hidden" name="on1" value="Short message">Short message:<br>
|
||||
<input type="text" name="os1" maxlength="200" size="48"></td><td>  </td>
|
||||
<td><input type="image" src="../0409/paypal.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"></td></tr>
|
||||
</table>
|
||||
<input type="hidden" name="currency_code" value="USD">
|
||||
</form>
|
||||
</center>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you don't write message, 点击<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=NPNAKA32N4GD6" target="_blank" title="PayPal - The safer, easier way to pay online!">此链接</a>转到PayPal的网页。
|
||||
You may change Quantity to multiply the total amount.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
</table>
|
||||
|
||||
<hr>
|
||||
<small>最新更新于2023年2月27日,适用于1.3.2.8版本,简体中文化 Deng Shiqing</small>
|
||||
<small>最新更新于2025年01月20日,适用于1.3.3.5版本,简体中文化 Deng Shiqing</small>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
BIN
alpha/help/0804/paypal.gif
Normal file
BIN
alpha/help/0804/paypal.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.9 KiB |
@@ -22,7 +22,7 @@ MultiPar支持PAR1.0和PAR2.0规范。请访问“<a href="http://parchive.sourc
|
||||
|
||||
<h3>系统要求</h3>
|
||||
<p> 
|
||||
MultiPar需要电脑安装Windows Vista或更高的版本(Windows 7, 8, 10)。
|
||||
MultiPar需要电脑安装Windows 7或更高的版本(Windows 8, 10, 11)。
|
||||
</p>
|
||||
|
||||
</body>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
<h3>使用安装包安装或卸载</h3>
|
||||
<p> 
|
||||
双击安装文件(<tt>MultiPar131_setup.exe</tt>或类似名称文件),然后按照安装程序对话框进行操作。在版本升级时,如果要使用先前的设置,可以进行覆盖安装。在覆盖安装之前, 应取消勾选“将MultiPar整合到右键菜单”。在写入安装或卸载之后,您可能需要重新启动操作系统。“<tt>Program Files</tt>”或“<tt>Program Files (x86)</tt>”目录下,必须在右键菜单上选择“以管理员身份运行”,用管理员权限启动安装程序。
|
||||
双击安装文件(<tt>MultiPar133_setup.exe</tt>或类似名称文件),然后按照安装程序对话框进行操作。在版本升级时,如果要使用先前的设置,可以进行覆盖安装。在覆盖安装之前, 应取消勾选“将MultiPar整合到右键菜单”。在写入安装或卸载之后,您可能需要重新启动操作系统。要在“<tt>Program Files</tt>”或“<tt>Program Files (x86)</tt>”目录下安装,您必须在第一个对话框中选择“为所有用户安装”。
|
||||
</p>
|
||||
<p> 
|
||||
您可以通过Windows操作系统的控制面板卸载程序,或双击MultiPar安装文件夹中的<tt>unins000.exe</tt>。由于卸载程序不会删除设置文件或安装后新添加的文件,因此您可以自行删除它们。
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
<h3>使用压缩包安装</h3>
|
||||
<p> 
|
||||
在文件夹中解压压缩文件(<tt>MultiPar131.zip</tt>或类似名称文件)。
|
||||
在文件夹中解压压缩文件(<tt>MultiPar133.zip</tt>或类似名称文件)。
|
||||
<tt>MultiPar.exe</tt>是MultiPar的启动程序。
|
||||
</p>
|
||||
<p> 
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<body>
|
||||
<h3>许可证</h3>
|
||||
<p> 
|
||||
MultiPar由PAR客户端和用于控制它们的图形用户界面(GUI)组成,由Yutaka Sawada编写。尽管控制台应用程序是开源的(PAR客户端采用GPL协议),但GUI程序是闭源的。有些文章可以在<a href="https://hp.vector.co.jp/authors/VA021385/" target="_blank" title="Announcement page on Vector">我的网站</a>上找到。
|
||||
MultiPar由PAR客户端和用于控制它们的图形用户界面(GUI)组成,由Yutaka Sawada编写。尽管控制台应用程序是开源的(PAR客户端采用GPL协议),但GUI程序是闭源的。
|
||||
There are source code packages on <a href="https://github.com/Yutaka-Sawada/MultiPar" target="_blank" title="GitHub page">GitHub</a>.
|
||||
</p>
|
||||
|
||||
@@ -26,7 +26,7 @@ I use <a href="https://github.com/Yutaka-Sawada/MultiPar/issues" target="_blank"
|
||||
|
||||
<h3>链接</h3>
|
||||
<p> 
|
||||
我在<a href="https://hp.vector.co.jp/authors/VA021385/" target="_blank" title="Announcement page on Vector">个人主页</a><i>vector.co.jp</i>有介绍MultiPar。使用这个页面上的文件直链可能不太合适,这还有一个<a href="https://www.vector.co.jp/soft/dl/winnt/util/se460801.html" target="_blank" title="Download page on Vector">官方下载页面</a>。当您在某处输入一个链接时,请不要包含文件名。
|
||||
You may download the latest version of <a href="https://github.com/Yutaka-Sawada/MultiPar" target="_blank">MultiPar on GitHub</a>.
|
||||
</p>
|
||||
|
||||
</body>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[ MultiPar GUI - version 1.3.2.6 or later ]
|
||||
[ MultiPar GUI - version 1.3.3.4 or later ]
|
||||
|
||||
Usage: MultiPar.exe [command] [/base path] [/list path] [files]
|
||||
|
||||
@@ -99,6 +99,32 @@ write a line of "RecoveryFileLimit=1" under "[Option]" section.
|
||||
It's same as an option:
|
||||
"Variable (limited to size of largest data file)" on QuickPar.
|
||||
|
||||
If you want to limit size of Recovery Files by a specific value,
|
||||
write a line of "RecoveryFileLimit=2" under "[Option]" section.
|
||||
"Limit Size to" value is enabled, even when "Split Files" isn't checked.
|
||||
This setting is useful, if you don't want to split source files.
|
||||
|
||||
If you want to enable "Most Resent Used List",
|
||||
write this line "MRUMax=5" under "[Path]" section.
|
||||
You may change the number of items after "MRUMax=".
|
||||
Because of alphabet, "MRUMax=26" is the maximum.
|
||||
If you write "MRUMax=0" or remove the line,
|
||||
"Most Resent Used List" is disabled.
|
||||
|
||||
If you want to add 5th item in "Media size" list on Create window,
|
||||
write this line "MediaList4=name:size" under "[Option]" section.
|
||||
Because the name and size are splitted by ":",
|
||||
you cannot include ":" in the name.
|
||||
The max size is 999999999999 bytes. (931 GB)
|
||||
|
||||
If you want to add more options for par2j (par2j.exe or par2j64.exe),
|
||||
write this line "par2jOption=/something" under "[Option]" section.
|
||||
You may add multiple options like; "par2jOption=/m1 /lc32"
|
||||
The total length must be less than 30 characters.
|
||||
When you set an option at MultiPar's Option windows,
|
||||
you should not set the same option on .INI file manually.
|
||||
If you write wrong or strange text, par2j will fail.
|
||||
|
||||
|
||||
Example of lines on "MultiPar.ini";
|
||||
|
||||
@@ -107,4 +133,7 @@ FontName=Arial
|
||||
RedundancyMax=10
|
||||
Sort=8
|
||||
RecoveryFileLimit=1
|
||||
|
||||
MediaList4=7.9GB DVD:8480000000
|
||||
par2jOption=/lc32
|
||||
[Path]
|
||||
MRUMax=5
|
||||
|
||||
@@ -103,6 +103,16 @@ It means that it is impossible to mix "/" and "-" in options of same command lin
|
||||
If PAR file's filename (or relative path) is started by "-",
|
||||
you need to use "/" for prefix of options to distinguish PAR file.
|
||||
|
||||
When a option has arbitary number or text,
|
||||
don't put space between the option and following part.
|
||||
For example, setting "/rr1" is valid, but "/rr 1" is wrong.
|
||||
Setting "/dPath" is valid, but "/d Path" is wrong.
|
||||
|
||||
To distinguish options from filenames, order of command-line arguments is important.
|
||||
Put all options before <par file>.
|
||||
Put <par file> before all [input files].
|
||||
|
||||
|
||||
/f, /fu :
|
||||
Set this, if you use file-list for file name or file path.
|
||||
The file-list is a text file, which contains filenames in each line.
|
||||
@@ -169,8 +179,10 @@ If you include space in comment, use "" to specify where is end.
|
||||
use this setting to set the path as base-directory.
|
||||
This is either absolute path or relative path from current directory.
|
||||
If you include space in path, use "" to specify where is end.
|
||||
Note, setting "/dC:" is same as setting current directory of C-drive.
|
||||
If you want to set direct root of C-drive, you must set "/dC:/".
|
||||
As you may omit the last "/" in path of a folder,
|
||||
both "/dC:/data/" and "/dC:/data" are valid.
|
||||
Note, setting "/dD:" is same as setting current directory of D-drive.
|
||||
If you want to set direct root of D-drive, you must set "/dD:/".
|
||||
|
||||
for example, /dC:/data/ , /d"C:/Program Files/" , /d../data/
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[ par2j.exe - version 1.3.2.8 or later ]
|
||||
[ par2j.exe - version 1.3.3.5 or later ]
|
||||
|
||||
Type "par2j.exe" to see version, test integrity, and show usage below.
|
||||
|
||||
@@ -148,6 +148,16 @@ It means that it is impossible to mix "/" and "-" in options of same command lin
|
||||
If PAR file's filename (or relative path) is started by "-",
|
||||
you need to use "/" for prefix of options to distinguish PAR file.
|
||||
|
||||
When a option has arbitary number or text,
|
||||
don't put space between the option and following part.
|
||||
For example, setting "/rr10" is valid, but "/rr 10" is wrong.
|
||||
Setting "/dPath" is valid, but "/d Path" is wrong.
|
||||
|
||||
To distinguish options from filenames, order of command-line arguments is important.
|
||||
Put all options before <par file>.
|
||||
Put <par file> before all [input files] or [external files].
|
||||
|
||||
|
||||
/f, /fu :
|
||||
Set this, if you use file-list for file name or file path.
|
||||
When this option is set, [input files] or [external files] is path of file-list.
|
||||
@@ -302,7 +312,7 @@ Because it may be difficult to predict recovery file size,
|
||||
use trial command to see how is the size.
|
||||
When it's "/lr" or "/lr0", block count of the largest input file is used.
|
||||
(If the max file is 1000 KB and block size is 10 KB, /lr is same as /lr100.)
|
||||
When split size "/ls" is set with "/lr0",
|
||||
When both "/lr0" and "/ls(split size)" are set,
|
||||
block count of the splited file size is used instead of the largest input file.
|
||||
|
||||
for example, /lr , /lr10 , /lr2000
|
||||
@@ -354,26 +364,63 @@ This is possible, only when there is one input file of .ZIP or .7z format.
|
||||
When recovery files are created in a different directory,
|
||||
the protected archive file is made in the directory.
|
||||
|
||||
/ls2 has a special feature to set limit size of recovery files directly.
|
||||
When both "/ls2" and "/lr(limit size)" are set,
|
||||
setting number of /lr is recognizned as file size instead of number of blocks.
|
||||
In this usage, setting limit size must be less than 2 GB.
|
||||
If you want max 100 MB each file size, set like these; /ls2 /lr102400000
|
||||
Because the calculation ignores packets, you may set a bit smaller size.
|
||||
|
||||
for example, /ls10000 , /ls1048576, /ls1
|
||||
|
||||
/lc :
|
||||
Set this, if you want to set number of using threads for Multi-Core CPU,
|
||||
or want to disable extra feature. (SSE2 is always used.)
|
||||
The format is "/lc#", # is from 1 to 11 as the number of using threads,
|
||||
12 to use quarter number of physical Cores,
|
||||
13 to use half of physical Cores,
|
||||
14 to use 3/4 number of physical Cores,
|
||||
15 to use the number of physical Cores (disable Hyper Threading),
|
||||
or 15 to use one less number of physical Cores on CPU with 6 or more physical Cores.
|
||||
Without this option (or /lc0),
|
||||
it uses the number of physical Cores on CPU with 6 or more physical Cores,
|
||||
or one more threads on CPU with Hyper Threading and 5 or less physical Cores.
|
||||
The format is "/lc#" (# is from 1 to 32 as the number of using threads).
|
||||
|
||||
You may set additional combinations; +16 to disable SSSE3,
|
||||
+128 to disable CLMUL, +256 to disable JIT, +512 to disable AVX2,
|
||||
+32 or +64 (slower device) to enable GPU acceleration.
|
||||
It's possible to set by rate as following. (It's /lc0 by default.)
|
||||
251: It uses quarter number of physical Cores.
|
||||
252: It uses half of physical Cores.
|
||||
253: It uses 3/4 number of physical Cores.
|
||||
254: It uses one less threads than number of physical Cores.
|
||||
0: It uses the number of physical Cores.
|
||||
255: It tries to use more threads than number of physical Cores.
|
||||
|
||||
for example, /lc1 to use single Core, /lc45 to use half Cores and GPU
|
||||
You may set additional combinations for CPU feature;
|
||||
+1024 to disable CLMUL (and use slower SSSE3 code)
|
||||
+2048 to disable JIT (for SSE2)
|
||||
+4096 to disable SSSE3
|
||||
+8192 to disable AVX2
|
||||
|
||||
You may set additional combinations for GPU control;
|
||||
+256 or +512 (slower device) to enable GPU acceleration
|
||||
+65536 for classic method
|
||||
+131072 for 16-byte memory access
|
||||
+262144 for 4-byte memory access and calculate 2 blocks at once
|
||||
+524288 for 16-byte memory access and calculate 2 blocks at once
|
||||
+1048576 for CL_MEM_COPY_HOST_PTR or +2097152 for CL_MEM_USE_HOST_PTR
|
||||
(When you set exclusive bits, larger value will be used.)
|
||||
|
||||
for example, /lc1 to use single Core, /lc508 to use half Cores and GPU
|
||||
|
||||
/lcb :
|
||||
This is for Cache Blocking. (CPU cache optimization)
|
||||
By default, this value is set-associative size of CPU L2 cache.
|
||||
Maximum value is 32767. It will be multipled by 64 KB.
|
||||
To disable cache optimization, set "/lcb0".
|
||||
|
||||
/lcs :
|
||||
This is for large buffer size at calculating multiple files' hashes.
|
||||
By default, this value is set-associative size of CPU L3 cache.
|
||||
Maximum value is 65535. It will be multipled by 64 KB.
|
||||
When you set "/lcs0", large buffer size will become 2 MB by default.
|
||||
|
||||
/lcm :
|
||||
This is for max number of chunks to calculate at once. (CPU shared cache optimization)
|
||||
By default, this value may be rate of L3 cache size / L2 cache size.
|
||||
The value may be changed by some factors in experimental results.
|
||||
Maximum value is 32768. Lower values than 8 will be same as 32768.
|
||||
To disable cache optimization, set "/lcm0".
|
||||
|
||||
/m :
|
||||
Set this, if you want to set memory usage.
|
||||
@@ -444,8 +491,10 @@ If you include space in comment, use "" to specify where is end.
|
||||
use this setting to set the path as base-directory.
|
||||
This is either absolute path or relative path from current directory.
|
||||
If you include space in path, use "" to specify where is end.
|
||||
Note, setting "/dC:" is same as setting current directory of C-drive.
|
||||
If you want to set direct root of C-drive, you must set "/dC:/".
|
||||
As you may omit the last "/" in path of a folder,
|
||||
both "/dC:/data/" and "/dC:/data" are valid.
|
||||
Note, setting "/dD:" is same as setting current directory of D-drive.
|
||||
If you want to set direct root of D-drive, you must set "/dD:/".
|
||||
|
||||
for example, /dC:/data/ , /d"C:/Program Files/" , /d../data/
|
||||
|
||||
|
||||
@@ -94,6 +94,16 @@ It means that it is impossible to mix "/" and "-" in options of same command lin
|
||||
If checksum file's filename (or relative path) is started by "-",
|
||||
you need to use "/" for prefix of options to distinguish checksum file.
|
||||
|
||||
When a option has arbitary number or text,
|
||||
don't put space between the option and following part.
|
||||
For example, setting "/vs1" is valid, but "/vs 1" is wrong.
|
||||
Setting "/dPath" is valid, but "/d Path" is wrong.
|
||||
|
||||
To distinguish options from filenames, order of command-line arguments is important.
|
||||
Put all options before <checksum file>.
|
||||
Put <checksum file> before all [input files]
|
||||
|
||||
|
||||
/fo :
|
||||
Set this, if you want to ignore folders at wildcard matching search.
|
||||
This setting disable recursive search into folder also.
|
||||
@@ -129,8 +139,10 @@ from the PAR client's directory, use this setting to set path.
|
||||
use this setting to set the path as base-directory.
|
||||
This is either absolute path or relative path from current directory.
|
||||
If you include space in path, use "" to specify where is end.
|
||||
Note, setting "/dC:" is same as setting current directory of C-drive.
|
||||
If you want to set direct root of C-drive, you must set "/dC:/".
|
||||
As you may omit the last "/" in path of a folder,
|
||||
both "/dC:/data/" and "/dC:/data" are valid.
|
||||
Note, setting "/dD:" is same as setting current directory of D-drive.
|
||||
If you want to set direct root of D-drive, you must set "/dD:/".
|
||||
|
||||
for example, /dC:/data/ , /d"C:/Program Files/" , /d../data/
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ Parchive 1.0 client by Yutaka Sawada
|
||||
You cannot specify Non-Recovery-Set files. (Empty files are set.)
|
||||
Number of recovery files are limited to 99.
|
||||
|
||||
This requires a PC of Windows Vista or later (Windows 7, 8, 10, 11).
|
||||
This requires a PC of Windows 7 or later (Windows 8, 10, 11).
|
||||
This is developed with Visual Studio 2022 on Windows 10.
|
||||
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ Parchive 2.0 client by Yutaka Sawada
|
||||
Verifying file use same memory as the file or double of block size.
|
||||
Recovering block use more memory as the number of block is many.
|
||||
|
||||
This requires a PC of Windows Vista or later (Windows 7, 8, 10, 11).
|
||||
This requires a PC of Windows 7 or later (Windows 8, 10, 11).
|
||||
This is developed with Visual Studio 2022 on Windows 10.
|
||||
|
||||
|
||||
|
||||
BIN
alpha/par1j.exe
BIN
alpha/par1j.exe
Binary file not shown.
BIN
alpha/par2j.exe
BIN
alpha/par2j.exe
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -43,12 +43,18 @@ def search_par_set(one_path):
|
||||
continue
|
||||
listbox_list1.insert(tk.END, base_name)
|
||||
|
||||
|
||||
# Add found PAR sets in sub-directories
|
||||
s_recursive = s_combo.get()
|
||||
if s_recursive != "No child":
|
||||
if s_recursive == "Recursive":
|
||||
# This will search all sub-directories recursively.
|
||||
search_path = glob.escape(one_path) + "/**/*.par2"
|
||||
recursive_flag = True
|
||||
else:
|
||||
# This searches 1 level child only, because recursive search may be slow.
|
||||
for par_path in glob.glob(glob.escape(one_path) + "/*/*.par2"):
|
||||
# If you want to search recursively, use below line instead of above line.
|
||||
#for par_path in glob.glob(glob.escape(one_path) + "/**/*.par2", recursive=True):
|
||||
search_path = glob.escape(one_path) + "/*/*.par2"
|
||||
recursive_flag = False
|
||||
for par_path in glob.glob(search_path, recursive=recursive_flag):
|
||||
# Get relative path and convert to UNIX style directory mark
|
||||
rel_path = os.path.relpath(par_path, one_path)
|
||||
rel_path = rel_path.replace('\\', '/')
|
||||
@@ -70,13 +76,14 @@ def search_par_set(one_path):
|
||||
label_status.config(text= "There are no PAR sets in \"" + one_path + "\".")
|
||||
else:
|
||||
button_folder.config(state=tk.DISABLED)
|
||||
button_stop.config(state=tk.NORMAL)
|
||||
button_open2.config(state=tk.DISABLED)
|
||||
button_open3.config(state=tk.DISABLED)
|
||||
combo_recursive.config(state=tk.DISABLED)
|
||||
# If you want to start manually, use these lines instead of below lines.
|
||||
#label_status.config(text= str(item_count) + " sets were found in \"" + one_path + "\".")
|
||||
label_status.config(text= str(item_count) + " sets were found in \"" + one_path + "\".")
|
||||
button_start.config(state=tk.NORMAL)
|
||||
# If you want to start verification automatically, use these lines instead of above lines.
|
||||
#button_stop.config(state=tk.NORMAL)
|
||||
# If you want to start verification automatically, use this line instead of above lines.
|
||||
#root.after(100, queue_run)
|
||||
|
||||
|
||||
@@ -105,6 +112,8 @@ def queue_run():
|
||||
button_start.config(state=tk.NORMAL)
|
||||
button_open2.config(state=tk.NORMAL)
|
||||
button_open3.config(state=tk.NORMAL)
|
||||
combo_recursive.config(state=tk.NORMAL)
|
||||
check_repair.config(state=tk.NORMAL)
|
||||
label_status.config(text= "Stopped queue")
|
||||
return
|
||||
|
||||
@@ -121,8 +130,13 @@ def queue_run():
|
||||
|
||||
# Set command-line
|
||||
# Cover path by " for possible space
|
||||
cmd = "\"" + client_path + "\" v /fo /vs2 /vd\"" + save_path + "\" \"" + one_path + "\""
|
||||
cmd = "\"" + client_path + "\" "
|
||||
if i_check.get() == 0:
|
||||
cmd += "v"
|
||||
else:
|
||||
# If you want to repair a damaged set automatically, use "r" command instead of "v".
|
||||
cmd += "r"
|
||||
cmd += " /fo /vs2 /vd\"" + save_path + "\" \"" + one_path + "\""
|
||||
#print(cmd)
|
||||
|
||||
# Run PAR2 client
|
||||
@@ -163,6 +177,8 @@ def queue_result():
|
||||
button_stop.config(state=tk.DISABLED)
|
||||
button_open2.config(state=tk.NORMAL)
|
||||
button_open3.config(state=tk.NORMAL)
|
||||
combo_recursive.config(state=tk.NORMAL)
|
||||
check_repair.config(state=tk.NORMAL)
|
||||
label_status.config(text= "Failed queue")
|
||||
return
|
||||
|
||||
@@ -173,6 +189,8 @@ def queue_result():
|
||||
button_stop.config(state=tk.DISABLED)
|
||||
button_open2.config(state=tk.NORMAL)
|
||||
button_open3.config(state=tk.NORMAL)
|
||||
combo_recursive.config(state=tk.NORMAL)
|
||||
check_repair.config(state=tk.NORMAL)
|
||||
label_status.config(text= "Canceled queue")
|
||||
return
|
||||
|
||||
@@ -194,6 +212,8 @@ def queue_result():
|
||||
button_stop.config(state=tk.DISABLED)
|
||||
button_open2.config(state=tk.NORMAL)
|
||||
button_open3.config(state=tk.NORMAL)
|
||||
combo_recursive.config(state=tk.NORMAL)
|
||||
check_repair.config(state=tk.NORMAL)
|
||||
label_status.config(text= "Verified all PAR sets")
|
||||
|
||||
elif "disabled" in button_stop.state():
|
||||
@@ -201,6 +221,8 @@ def queue_result():
|
||||
button_start.config(state=tk.NORMAL)
|
||||
button_open2.config(state=tk.NORMAL)
|
||||
button_open3.config(state=tk.NORMAL)
|
||||
combo_recursive.config(state=tk.NORMAL)
|
||||
check_repair.config(state=tk.NORMAL)
|
||||
label_status.config(text= "Interrupted queue")
|
||||
|
||||
else:
|
||||
@@ -216,6 +238,8 @@ def button_start_clicked():
|
||||
button_stop.config(state=tk.NORMAL)
|
||||
button_open2.config(state=tk.DISABLED)
|
||||
button_open3.config(state=tk.DISABLED)
|
||||
combo_recursive.config(state=tk.DISABLED)
|
||||
check_repair.config(state=tk.DISABLED)
|
||||
|
||||
if sub_proc == None:
|
||||
queue_run()
|
||||
@@ -225,8 +249,19 @@ def button_start_clicked():
|
||||
|
||||
# Stop running queue
|
||||
def button_stop_clicked():
|
||||
global sub_proc
|
||||
|
||||
button_stop.config(state=tk.DISABLED)
|
||||
if sub_proc != None:
|
||||
if sub_proc is None:
|
||||
# When verification was not started yet, it's possible to select another folder.
|
||||
button_folder.config(state=tk.NORMAL)
|
||||
button_start.config(state=tk.DISABLED)
|
||||
combo_recursive.config(state=tk.NORMAL)
|
||||
listbox_list1.delete(0, tk.END)
|
||||
label_head1.config(text='? sets in a folder')
|
||||
label_status.config(text='Select a folder to search PAR files.')
|
||||
else:
|
||||
# When it's verifying, it will stop next verification.
|
||||
label_status.config(text= "Waiting finish of current task")
|
||||
|
||||
|
||||
@@ -293,7 +328,7 @@ frame_middle.columnconfigure(2, weight=1)
|
||||
frame_list1 = ttk.Frame(frame_middle, padding=(6,2,6,6), relief='groove')
|
||||
frame_list1.grid(row=0, column=0, padx=4, sticky=(tk.E,tk.W,tk.S,tk.N))
|
||||
frame_list1.columnconfigure(0, weight=1)
|
||||
frame_list1.rowconfigure(2, weight=1)
|
||||
frame_list1.rowconfigure(3, weight=1)
|
||||
|
||||
frame_top1 = ttk.Frame(frame_list1, padding=(0,4,0,3))
|
||||
frame_top1.grid(row=0, column=0, columnspan=2, sticky=(tk.E,tk.W))
|
||||
@@ -307,19 +342,31 @@ button_start.pack(side=tk.LEFT, padx=2)
|
||||
button_stop = ttk.Button(frame_top1, text="Stop", width=6, command=button_stop_clicked, state=tk.DISABLED)
|
||||
button_stop.pack(side=tk.LEFT, padx=2)
|
||||
|
||||
frame_top11 = ttk.Frame(frame_list1, padding=(0,3,0,3))
|
||||
frame_top11.grid(row=1, column=0, columnspan=2, sticky=(tk.E,tk.W))
|
||||
|
||||
s_combo = tk.StringVar()
|
||||
combo_recursive = ttk.Combobox(frame_top11, values=["No child", "Children", "Recursive"], textvariable=s_combo, state="readonly", width=9)
|
||||
combo_recursive.current(0)
|
||||
combo_recursive.pack(side=tk.LEFT, padx=4)
|
||||
|
||||
i_check = tk.IntVar(value=0)
|
||||
check_repair = ttk.Checkbutton(frame_top11, text="Repair", variable=i_check)
|
||||
check_repair.pack(side=tk.LEFT, padx=10)
|
||||
|
||||
label_head1 = ttk.Label(frame_list1, text='? sets in a folder')
|
||||
label_head1.grid(row=1, column=0, columnspan=2)
|
||||
label_head1.grid(row=2, column=0, columnspan=2)
|
||||
|
||||
s_list1 = tk.StringVar()
|
||||
listbox_list1 = tk.Listbox(frame_list1, listvariable=s_list1, activestyle='none')
|
||||
listbox_list1.grid(row=2, column=0, sticky=(tk.E,tk.W,tk.S,tk.N))
|
||||
listbox_list1.grid(row=3, column=0, sticky=(tk.E,tk.W,tk.S,tk.N))
|
||||
|
||||
scrollbar_list1 = ttk.Scrollbar(frame_list1, orient=tk.VERTICAL, command=listbox_list1.yview)
|
||||
scrollbar_list1.grid(row=2, column=1, sticky=(tk.N, tk.S))
|
||||
scrollbar_list1.grid(row=3, column=1, sticky=(tk.N, tk.S))
|
||||
listbox_list1["yscrollcommand"] = scrollbar_list1.set
|
||||
|
||||
xscrollbar_list1 = ttk.Scrollbar(frame_list1, orient=tk.HORIZONTAL, command=listbox_list1.xview)
|
||||
xscrollbar_list1.grid(row=3, column=0, sticky=(tk.E, tk.W))
|
||||
xscrollbar_list1.grid(row=4, column=0, sticky=(tk.E, tk.W))
|
||||
listbox_list1["xscrollcommand"] = xscrollbar_list1.set
|
||||
|
||||
# List of bad files
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
alpha/ui/0412.dll
Normal file
BIN
alpha/ui/0412.dll
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
62
source/ResourceUI/0412/0412.vcxproj
Normal file
62
source/ResourceUI/0412/0412.vcxproj
Normal file
@@ -0,0 +1,62 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>17.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{e8d64ddc-9687-4d16-b2a6-224cab82f8b3}</ProjectGuid>
|
||||
<RootNamespace>My0412</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;MY0412_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<NoEntryPoint>true</NoEntryPoint>
|
||||
<SetChecksum>true</SetChecksum>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="resource.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="Res0412.rc" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
BIN
source/ResourceUI/0412/Res0412.rc
Normal file
BIN
source/ResourceUI/0412/Res0412.rc
Normal file
Binary file not shown.
BIN
source/ResourceUI/0412/resource.h
Normal file
BIN
source/ResourceUI/0412/resource.h
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -23,52 +23,101 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "3009", "3009\3009.vcxproj",
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "0c0a", "0c0a\0c0a.vcxproj", "{7BC2D258-305F-4BAE-8249-66A4711CB761}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "0412", "0412\0412.vcxproj", "{E8D64DDC-9687-4D16-B2A6-224CAB82F8B3}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Debug|x64 = Debug|x64
|
||||
Release|Win32 = Release|Win32
|
||||
Release|x64 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{058F9846-C6FE-4BA6-A8B3-F941711876E5}.Debug|Win32.ActiveCfg = Release|Win32
|
||||
{058F9846-C6FE-4BA6-A8B3-F941711876E5}.Debug|Win32.Build.0 = Release|Win32
|
||||
{058F9846-C6FE-4BA6-A8B3-F941711876E5}.Debug|x64.ActiveCfg = Release|Win32
|
||||
{058F9846-C6FE-4BA6-A8B3-F941711876E5}.Debug|x64.Build.0 = Release|Win32
|
||||
{058F9846-C6FE-4BA6-A8B3-F941711876E5}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{058F9846-C6FE-4BA6-A8B3-F941711876E5}.Release|Win32.Build.0 = Release|Win32
|
||||
{058F9846-C6FE-4BA6-A8B3-F941711876E5}.Release|x64.ActiveCfg = Release|Win32
|
||||
{058F9846-C6FE-4BA6-A8B3-F941711876E5}.Release|x64.Build.0 = Release|Win32
|
||||
{A6B4CE94-B0F5-46C2-8D65-2ACBA4444B80}.Debug|Win32.ActiveCfg = Release|Win32
|
||||
{A6B4CE94-B0F5-46C2-8D65-2ACBA4444B80}.Debug|Win32.Build.0 = Release|Win32
|
||||
{A6B4CE94-B0F5-46C2-8D65-2ACBA4444B80}.Debug|x64.ActiveCfg = Release|Win32
|
||||
{A6B4CE94-B0F5-46C2-8D65-2ACBA4444B80}.Debug|x64.Build.0 = Release|Win32
|
||||
{A6B4CE94-B0F5-46C2-8D65-2ACBA4444B80}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{A6B4CE94-B0F5-46C2-8D65-2ACBA4444B80}.Release|Win32.Build.0 = Release|Win32
|
||||
{A6B4CE94-B0F5-46C2-8D65-2ACBA4444B80}.Release|x64.ActiveCfg = Release|Win32
|
||||
{A6B4CE94-B0F5-46C2-8D65-2ACBA4444B80}.Release|x64.Build.0 = Release|Win32
|
||||
{8BE95D56-2B92-40CD-A8D9-506BA9AFD213}.Debug|Win32.ActiveCfg = Release|Win32
|
||||
{8BE95D56-2B92-40CD-A8D9-506BA9AFD213}.Debug|Win32.Build.0 = Release|Win32
|
||||
{8BE95D56-2B92-40CD-A8D9-506BA9AFD213}.Debug|x64.ActiveCfg = Release|Win32
|
||||
{8BE95D56-2B92-40CD-A8D9-506BA9AFD213}.Debug|x64.Build.0 = Release|Win32
|
||||
{8BE95D56-2B92-40CD-A8D9-506BA9AFD213}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{8BE95D56-2B92-40CD-A8D9-506BA9AFD213}.Release|Win32.Build.0 = Release|Win32
|
||||
{8BE95D56-2B92-40CD-A8D9-506BA9AFD213}.Release|x64.ActiveCfg = Release|Win32
|
||||
{8BE95D56-2B92-40CD-A8D9-506BA9AFD213}.Release|x64.Build.0 = Release|Win32
|
||||
{386E588F-363C-4763-830F-4738F947B5D9}.Debug|Win32.ActiveCfg = Release|Win32
|
||||
{386E588F-363C-4763-830F-4738F947B5D9}.Debug|Win32.Build.0 = Release|Win32
|
||||
{386E588F-363C-4763-830F-4738F947B5D9}.Debug|x64.ActiveCfg = Release|Win32
|
||||
{386E588F-363C-4763-830F-4738F947B5D9}.Debug|x64.Build.0 = Release|Win32
|
||||
{386E588F-363C-4763-830F-4738F947B5D9}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{386E588F-363C-4763-830F-4738F947B5D9}.Release|Win32.Build.0 = Release|Win32
|
||||
{386E588F-363C-4763-830F-4738F947B5D9}.Release|x64.ActiveCfg = Release|Win32
|
||||
{386E588F-363C-4763-830F-4738F947B5D9}.Release|x64.Build.0 = Release|Win32
|
||||
{9BFFB67E-6EAB-452B-AB40-10C13A894895}.Debug|Win32.ActiveCfg = Release|Win32
|
||||
{9BFFB67E-6EAB-452B-AB40-10C13A894895}.Debug|Win32.Build.0 = Release|Win32
|
||||
{9BFFB67E-6EAB-452B-AB40-10C13A894895}.Debug|x64.ActiveCfg = Release|Win32
|
||||
{9BFFB67E-6EAB-452B-AB40-10C13A894895}.Debug|x64.Build.0 = Release|Win32
|
||||
{9BFFB67E-6EAB-452B-AB40-10C13A894895}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{9BFFB67E-6EAB-452B-AB40-10C13A894895}.Release|Win32.Build.0 = Release|Win32
|
||||
{9BFFB67E-6EAB-452B-AB40-10C13A894895}.Release|x64.ActiveCfg = Release|Win32
|
||||
{9BFFB67E-6EAB-452B-AB40-10C13A894895}.Release|x64.Build.0 = Release|Win32
|
||||
{41E89B6A-B137-4756-8C7A-E4A4309627DB}.Debug|Win32.ActiveCfg = Release|Win32
|
||||
{41E89B6A-B137-4756-8C7A-E4A4309627DB}.Debug|Win32.Build.0 = Release|Win32
|
||||
{41E89B6A-B137-4756-8C7A-E4A4309627DB}.Debug|x64.ActiveCfg = Release|Win32
|
||||
{41E89B6A-B137-4756-8C7A-E4A4309627DB}.Debug|x64.Build.0 = Release|Win32
|
||||
{41E89B6A-B137-4756-8C7A-E4A4309627DB}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{41E89B6A-B137-4756-8C7A-E4A4309627DB}.Release|Win32.Build.0 = Release|Win32
|
||||
{41E89B6A-B137-4756-8C7A-E4A4309627DB}.Release|x64.ActiveCfg = Release|Win32
|
||||
{41E89B6A-B137-4756-8C7A-E4A4309627DB}.Release|x64.Build.0 = Release|Win32
|
||||
{F5774034-4459-41E4-A34C-5694159088C7}.Debug|Win32.ActiveCfg = Release|Win32
|
||||
{F5774034-4459-41E4-A34C-5694159088C7}.Debug|Win32.Build.0 = Release|Win32
|
||||
{F5774034-4459-41E4-A34C-5694159088C7}.Debug|x64.ActiveCfg = Release|Win32
|
||||
{F5774034-4459-41E4-A34C-5694159088C7}.Debug|x64.Build.0 = Release|Win32
|
||||
{F5774034-4459-41E4-A34C-5694159088C7}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{F5774034-4459-41E4-A34C-5694159088C7}.Release|Win32.Build.0 = Release|Win32
|
||||
{F5774034-4459-41E4-A34C-5694159088C7}.Release|x64.ActiveCfg = Release|Win32
|
||||
{F5774034-4459-41E4-A34C-5694159088C7}.Release|x64.Build.0 = Release|Win32
|
||||
{25EB68DE-0594-4D2F-B31F-50375524D04A}.Debug|Win32.ActiveCfg = Release|Win32
|
||||
{25EB68DE-0594-4D2F-B31F-50375524D04A}.Debug|Win32.Build.0 = Release|Win32
|
||||
{25EB68DE-0594-4D2F-B31F-50375524D04A}.Debug|x64.ActiveCfg = Release|Win32
|
||||
{25EB68DE-0594-4D2F-B31F-50375524D04A}.Debug|x64.Build.0 = Release|Win32
|
||||
{25EB68DE-0594-4D2F-B31F-50375524D04A}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{25EB68DE-0594-4D2F-B31F-50375524D04A}.Release|Win32.Build.0 = Release|Win32
|
||||
{25EB68DE-0594-4D2F-B31F-50375524D04A}.Release|x64.ActiveCfg = Release|Win32
|
||||
{25EB68DE-0594-4D2F-B31F-50375524D04A}.Release|x64.Build.0 = Release|Win32
|
||||
{B316EAF0-4D5E-446C-8520-D720ECD1F3AC}.Debug|Win32.ActiveCfg = Release|Win32
|
||||
{B316EAF0-4D5E-446C-8520-D720ECD1F3AC}.Debug|Win32.Build.0 = Release|Win32
|
||||
{B316EAF0-4D5E-446C-8520-D720ECD1F3AC}.Debug|x64.ActiveCfg = Release|Win32
|
||||
{B316EAF0-4D5E-446C-8520-D720ECD1F3AC}.Debug|x64.Build.0 = Release|Win32
|
||||
{B316EAF0-4D5E-446C-8520-D720ECD1F3AC}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{B316EAF0-4D5E-446C-8520-D720ECD1F3AC}.Release|Win32.Build.0 = Release|Win32
|
||||
{B316EAF0-4D5E-446C-8520-D720ECD1F3AC}.Release|x64.ActiveCfg = Release|Win32
|
||||
{B316EAF0-4D5E-446C-8520-D720ECD1F3AC}.Release|x64.Build.0 = Release|Win32
|
||||
{7BC2D258-305F-4BAE-8249-66A4711CB761}.Debug|Win32.ActiveCfg = Release|Win32
|
||||
{7BC2D258-305F-4BAE-8249-66A4711CB761}.Debug|Win32.Build.0 = Release|Win32
|
||||
{7BC2D258-305F-4BAE-8249-66A4711CB761}.Debug|x64.ActiveCfg = Release|Win32
|
||||
{7BC2D258-305F-4BAE-8249-66A4711CB761}.Debug|x64.Build.0 = Release|Win32
|
||||
{7BC2D258-305F-4BAE-8249-66A4711CB761}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{7BC2D258-305F-4BAE-8249-66A4711CB761}.Release|Win32.Build.0 = Release|Win32
|
||||
{7BC2D258-305F-4BAE-8249-66A4711CB761}.Release|x64.ActiveCfg = Release|Win32
|
||||
{7BC2D258-305F-4BAE-8249-66A4711CB761}.Release|x64.Build.0 = Release|Win32
|
||||
{E8D64DDC-9687-4D16-B2A6-224CAB82F8B3}.Debug|Win32.ActiveCfg = Release|Win32
|
||||
{E8D64DDC-9687-4D16-B2A6-224CAB82F8B3}.Debug|x64.ActiveCfg = Release|Win32
|
||||
{E8D64DDC-9687-4D16-B2A6-224CAB82F8B3}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{E8D64DDC-9687-4D16-B2A6-224CAB82F8B3}.Release|Win32.Build.0 = Release|Win32
|
||||
{E8D64DDC-9687-4D16-B2A6-224CAB82F8B3}.Release|x64.ActiveCfg = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
@@ -64,7 +64,7 @@ append something to the section name like "[0x0409ignore]".
|
||||
If you erase these strings or lines, default strings are used.
|
||||
|
||||
"CreateHelp" and "VerifyHelp" in old version were removed,
|
||||
because they are ignored on recent Windows OS like (Vista, 7, 8).
|
||||
because they are ignored on recent Windows OS like (Windows 7, 8, 10).
|
||||
|
||||
Strings may contain one "&" for keyboard short-cut.
|
||||
Each strings should be reasonably short (under 40 characters).
|
||||
|
||||
Binary file not shown.
@@ -1,4 +1,4 @@
|
||||
// Copyright : 2023-03-24 Yutaka Sawada
|
||||
// Copyright : 2024-11-30 Yutaka Sawada
|
||||
// License : The MIT license
|
||||
|
||||
// ShellExt.cpp : DLL アプリケーション用のエントリ ポイントを定義します。
|
||||
@@ -11,7 +11,7 @@
|
||||
#define UNICODE
|
||||
#endif
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0600 // Windows Vista or later
|
||||
#define _WIN32_WINNT 0x0601 // Windows 7 or later
|
||||
#endif
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
Binary file not shown.
@@ -103,6 +103,16 @@ It means that it is impossible to mix "/" and "-" in options of same command lin
|
||||
If PAR file's filename (or relative path) is started by "-",
|
||||
you need to use "/" for prefix of options to distinguish PAR file.
|
||||
|
||||
When a option has arbitary number or text,
|
||||
don't put space between the option and following part.
|
||||
For example, setting "/rr1" is valid, but "/rr 1" is wrong.
|
||||
Setting "/dPath" is valid, but "/d Path" is wrong.
|
||||
|
||||
To distinguish options from filenames, order of command-line arguments is important.
|
||||
Put all options before <par file>.
|
||||
Put <par file> before all [input files].
|
||||
|
||||
|
||||
/f, /fu :
|
||||
Set this, if you use file-list for file name or file path.
|
||||
The file-list is a text file, which contains filenames in each line.
|
||||
@@ -169,8 +179,10 @@ If you include space in comment, use "" to specify where is end.
|
||||
use this setting to set the path as base-directory.
|
||||
This is either absolute path or relative path from current directory.
|
||||
If you include space in path, use "" to specify where is end.
|
||||
Note, setting "/dC:" is same as setting current directory of C-drive.
|
||||
If you want to set direct root of C-drive, you must set "/dC:/".
|
||||
As you may omit the last "/" in path of a folder,
|
||||
both "/dC:/data/" and "/dC:/data" are valid.
|
||||
Note, setting "/dD:" is same as setting current directory of D-drive.
|
||||
If you want to set direct root of D-drive, you must set "/dD:/".
|
||||
|
||||
for example, /dC:/data/ , /d"C:/Program Files/" , /d../data/
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ Parchive 1.0 client by Yutaka Sawada
|
||||
You cannot specify Non-Recovery-Set files. (Empty files are set.)
|
||||
Number of recovery files are limited to 99.
|
||||
|
||||
This requires a PC of Windows Vista or later (Windows 7, 8, 10, 11).
|
||||
This requires a PC of Windows 7 or later (Windows 8, 10, 11).
|
||||
This is developed with Visual Studio 2022 on Windows 10.
|
||||
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ WinRAR
|
||||
<EFBFBD>\<5C>[<5B>X<EFBFBD>E<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>ƃp<C683><70><EFBFBD>e<EFBFBD>B<EFBFBD>E<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>̍<EFBFBD><CC8D>v<EFBFBD><76> 256<35>܂łł<C582><C582>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>o<EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>͍ő<CD8D><C591><EFBFBD> 99<39>܂łł<C582><C582>B
|
||||
|
||||
<EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C28B><EFBFBD> Windows Vista <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȍ~ (Windows 7, 8, 10, 11) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>\<5C>R<EFBFBD><52><EFBFBD>ł<EFBFBD><C582>B
|
||||
<EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C28B><EFBFBD> Windows 7 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȍ~ (Windows 8, 10, 11) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>\<5C>R<EFBFBD><52><EFBFBD>ł<EFBFBD><C582>B
|
||||
Win32 API <20><> VC <20><><EFBFBD><EFBFBD><EFBFBD>^<5E>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><67><EFBFBD>Ă<EFBFBD><C482>̂ŁA
|
||||
<EFBFBD>\<5C>[<5B>X<EFBFBD>E<EFBFBD>R<EFBFBD>[<5B>h<EFBFBD><68><EFBFBD>R<EFBFBD><52><EFBFBD>p<EFBFBD>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD> Visual Studio 2022 <20>ȍ~<7E><><EFBFBD>K<EFBFBD>v<EFBFBD>ł<EFBFBD><C582>B
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// common.c
|
||||
// Copyright : 2023-03-13 Yutaka Sawada
|
||||
// Copyright : 2024-11-30 Yutaka Sawada
|
||||
// License : GPL
|
||||
|
||||
#ifndef _UNICODE
|
||||
@@ -9,7 +9,7 @@
|
||||
#define UNICODE
|
||||
#endif
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0600 // Windows Vista or later
|
||||
#define _WIN32_WINNT 0x0601 // Windows 7 or later
|
||||
#endif
|
||||
|
||||
#include <conio.h>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// ini.c
|
||||
// Copyright : 2022-01-15 Yutaka Sawada
|
||||
// Copyright : 2024-11-30 Yutaka Sawada
|
||||
// License : GPL
|
||||
|
||||
#ifndef _UNICODE
|
||||
@@ -9,7 +9,7 @@
|
||||
#define UNICODE
|
||||
#endif
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0600 // Windows Vista or later
|
||||
#define _WIN32_WINNT 0x0601 // Windows 7 or later
|
||||
#endif
|
||||
|
||||
#include <malloc.h>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// par1.c
|
||||
// Copyright : 2022-02-16 Yutaka Sawada
|
||||
// Copyright : 2024-11-30 Yutaka Sawada
|
||||
// License : GPL
|
||||
|
||||
#ifndef _UNICODE
|
||||
@@ -9,7 +9,7 @@
|
||||
#define UNICODE
|
||||
#endif
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0600 // Windows Vista or later
|
||||
#define _WIN32_WINNT 0x0601 // Windows 7 or later
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// par1_cmd.c
|
||||
// Copyright : 2023-03-14 Yutaka Sawada
|
||||
// Copyright : 2024-11-30 Yutaka Sawada
|
||||
// License : GPL
|
||||
|
||||
#ifndef _UNICODE
|
||||
@@ -9,7 +9,7 @@
|
||||
#define UNICODE
|
||||
#endif
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0600 // Windows Vista or later
|
||||
#define _WIN32_WINNT 0x0601 // Windows 7 or later
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
Binary file not shown.
@@ -1,2 +1,2 @@
|
||||
#define FILE_VERSION "1.3.2.8" // ファイルのバージョン番号
|
||||
#define PRODUCT_VERSION 0x132 // クライアントのバージョン番号
|
||||
#define FILE_VERSION "1.3.3.5" // ファイルのバージョン番号
|
||||
#define PRODUCT_VERSION 0x133 // クライアントのバージョン番号
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[ par2j.exe - version 1.3.2.8 or later ]
|
||||
[ par2j.exe - version 1.3.3.5 or later ]
|
||||
|
||||
Type "par2j.exe" to see version, test integrity, and show usage below.
|
||||
|
||||
@@ -148,6 +148,16 @@ It means that it is impossible to mix "/" and "-" in options of same command lin
|
||||
If PAR file's filename (or relative path) is started by "-",
|
||||
you need to use "/" for prefix of options to distinguish PAR file.
|
||||
|
||||
When a option has arbitary number or text,
|
||||
don't put space between the option and following part.
|
||||
For example, setting "/rr10" is valid, but "/rr 10" is wrong.
|
||||
Setting "/dPath" is valid, but "/d Path" is wrong.
|
||||
|
||||
To distinguish options from filenames, order of command-line arguments is important.
|
||||
Put all options before <par file>.
|
||||
Put <par file> before all [input files] or [external files].
|
||||
|
||||
|
||||
/f, /fu :
|
||||
Set this, if you use file-list for file name or file path.
|
||||
When this option is set, [input files] or [external files] is path of file-list.
|
||||
@@ -302,7 +312,7 @@ Because it may be difficult to predict recovery file size,
|
||||
use trial command to see how is the size.
|
||||
When it's "/lr" or "/lr0", block count of the largest input file is used.
|
||||
(If the max file is 1000 KB and block size is 10 KB, /lr is same as /lr100.)
|
||||
When split size "/ls" is set with "/lr0",
|
||||
When both "/lr0" and "/ls(split size)" are set,
|
||||
block count of the splited file size is used instead of the largest input file.
|
||||
|
||||
for example, /lr , /lr10 , /lr2000
|
||||
@@ -354,26 +364,63 @@ This is possible, only when there is one input file of .ZIP or .7z format.
|
||||
When recovery files are created in a different directory,
|
||||
the protected archive file is made in the directory.
|
||||
|
||||
/ls2 has a special feature to set limit size of recovery files directly.
|
||||
When both "/ls2" and "/lr(limit size)" are set,
|
||||
setting number of /lr is recognizned as file size instead of number of blocks.
|
||||
In this usage, setting limit size must be less than 2 GB.
|
||||
If you want max 100 MB each file size, set like these; /ls2 /lr102400000
|
||||
Because the calculation ignores packets, you may set a bit smaller size.
|
||||
|
||||
for example, /ls10000 , /ls1048576, /ls1
|
||||
|
||||
/lc :
|
||||
Set this, if you want to set number of using threads for Multi-Core CPU,
|
||||
or want to disable extra feature. (SSE2 is always used.)
|
||||
The format is "/lc#", # is from 1 to 11 as the number of using threads,
|
||||
12 to use quarter number of physical Cores,
|
||||
13 to use half of physical Cores,
|
||||
14 to use 3/4 number of physical Cores,
|
||||
15 to use the number of physical Cores (disable Hyper Threading),
|
||||
or 15 to use one less number of physical Cores on CPU with 6 or more physical Cores.
|
||||
Without this option (or /lc0),
|
||||
it uses the number of physical Cores on CPU with 6 or more physical Cores,
|
||||
or one more threads on CPU with Hyper Threading and 5 or less physical Cores.
|
||||
The format is "/lc#" (# is from 1 to 32 as the number of using threads).
|
||||
|
||||
You may set additional combinations; +16 to disable SSSE3,
|
||||
+128 to disable CLMUL, +256 to disable JIT, +512 to disable AVX2,
|
||||
+32 or +64 (slower device) to enable GPU acceleration.
|
||||
It's possible to set by rate as following. (It's /lc0 by default.)
|
||||
251: It uses quarter number of physical Cores.
|
||||
252: It uses half of physical Cores.
|
||||
253: It uses 3/4 number of physical Cores.
|
||||
254: It uses one less threads than number of physical Cores.
|
||||
0: It uses the number of physical Cores.
|
||||
255: It tries to use more threads than number of physical Cores.
|
||||
|
||||
for example, /lc1 to use single Core, /lc45 to use half Cores and GPU
|
||||
You may set additional combinations for CPU feature;
|
||||
+1024 to disable CLMUL (and use slower SSSE3 code)
|
||||
+2048 to disable JIT (for SSE2)
|
||||
+4096 to disable SSSE3
|
||||
+8192 to disable AVX2
|
||||
|
||||
You may set additional combinations for GPU control;
|
||||
+256 or +512 (slower device) to enable GPU acceleration
|
||||
+65536 for classic method
|
||||
+131072 for 16-byte memory access
|
||||
+262144 for 4-byte memory access and calculate 2 blocks at once
|
||||
+524288 for 16-byte memory access and calculate 2 blocks at once
|
||||
+1048576 for CL_MEM_COPY_HOST_PTR or +2097152 for CL_MEM_USE_HOST_PTR
|
||||
(When you set exclusive bits, larger value will be used.)
|
||||
|
||||
for example, /lc1 to use single Core, /lc508 to use half Cores and GPU
|
||||
|
||||
/lcb :
|
||||
This is for Cache Blocking. (CPU cache optimization)
|
||||
By default, this value is set-associative size of CPU L2 cache.
|
||||
Maximum value is 32767. It will be multipled by 64 KB.
|
||||
To disable cache optimization, set "/lcb0".
|
||||
|
||||
/lcs :
|
||||
This is for large buffer size at calculating multiple files' hashes.
|
||||
By default, this value is set-associative size of CPU L3 cache.
|
||||
Maximum value is 65535. It will be multipled by 64 KB.
|
||||
When you set "/lcs0", large buffer size will become 2 MB by default.
|
||||
|
||||
/lcm :
|
||||
This is for max number of chunks to calculate at once. (CPU shared cache optimization)
|
||||
By default, this value may be rate of L3 cache size / L2 cache size.
|
||||
The value may be changed by some factors in experimental results.
|
||||
Maximum value is 32768. Lower values than 8 will be same as 32768.
|
||||
To disable cache optimization, set "/lcm0".
|
||||
|
||||
/m :
|
||||
Set this, if you want to set memory usage.
|
||||
@@ -444,8 +491,10 @@ If you include space in comment, use "" to specify where is end.
|
||||
use this setting to set the path as base-directory.
|
||||
This is either absolute path or relative path from current directory.
|
||||
If you include space in path, use "" to specify where is end.
|
||||
Note, setting "/dC:" is same as setting current directory of C-drive.
|
||||
If you want to set direct root of C-drive, you must set "/dC:/".
|
||||
As you may omit the last "/" in path of a folder,
|
||||
both "/dC:/data/" and "/dC:/data" are valid.
|
||||
Note, setting "/dD:" is same as setting current directory of D-drive.
|
||||
If you want to set direct root of D-drive, you must set "/dD:/".
|
||||
|
||||
for example, /dC:/data/ , /d"C:/Program Files/" , /d../data/
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ Parchive 2.0 client by Yutaka Sawada
|
||||
Verifying file use same memory as the file or double of block size.
|
||||
Recovering block use more memory as the number of block is many.
|
||||
|
||||
This requires a PC of Windows Vista or later (Windows 7, 8, 10, 11).
|
||||
This requires a PC of Windows 7 or later (Windows 8, 10, 11).
|
||||
This is developed with Visual Studio 2022 on Windows 10.
|
||||
|
||||
|
||||
|
||||
@@ -1,140 +1,140 @@
|
||||
|
||||
PAR 2.0 の修復用データを作ってファイルの破損や消失に備えます
|
||||
|
||||
PAR 2.0 <20>̏C<CC8F><43><EFBFBD>p<EFBFBD>f<EFBFBD>[<5B>^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ăt<C483>@<40>C<EFBFBD><43><EFBFBD>̔j<CC94><6A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɔ<EFBFBD><C994><EFBFBD><EFBFBD>܂<EFBFBD>
|
||||
|
||||
<EFBFBD>V<EFBFBD>c <20>L <20>ɂ<EFBFBD><C982><EFBFBD> Parchive 2.0 <20>N<EFBFBD><4E><EFBFBD>C<EFBFBD>A<EFBFBD><41><EFBFBD>g
|
||||
澤田 豊 による Parchive 2.0 クライアント
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
[ <EFBFBD>ȒP<EFBFBD>ȉ<EFBFBD><EFBFBD><EFBFBD> ]
|
||||
[ 簡単な解説 ]
|
||||
|
||||
<EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD>̃\<5C>[<5B>X<EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>烊<EFBFBD>J<EFBFBD>o<EFBFBD><6F><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>쐬<EFBFBD><EC90AC><EFBFBD>āA
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̃t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>̈ꕔ<CC88><EA9594><EFBFBD>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482>A
|
||||
<EFBFBD>c<EFBFBD><EFBFBD><EFBFBD>ꂽ<EFBFBD>\<5C>[<5B>X<EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>ƃ<EFBFBD><C683>J<EFBFBD>o<EFBFBD><6F><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A
|
||||
<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ׂ̃\<5C>t<EFBFBD>g<EFBFBD>ł<EFBFBD><C582>B
|
||||
PAR 1.0 <EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>P<EFBFBD>ʂŏC<C58F><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂ɔ<CC82><C994>ׂāA
|
||||
PAR 2.0 <EFBFBD>̓t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><F095A190>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>ɕ<EFBFBD><C995><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482>̃u<CC83><75><EFBFBD>b<EFBFBD>N<EFBFBD>P<EFBFBD>ʂŏC<C58F><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂ŁA
|
||||
<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>̈ꕔ<CC88><EA9594><EFBFBD>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȊO<C88A>̃u<CC83><75><EFBFBD>b<EFBFBD>N<EFBFBD>͖<EFBFBD><CD96><EFBFBD><EFBFBD>Ŏ<EFBFBD><C58E><EFBFBD><EFBFBD>o<EFBFBD><6F><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>ł<EFBFBD><C582>܂<EFBFBD><DC82>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>̂<EFBFBD><EFBFBD>߁A<EFBFBD><EFBFBD><EFBFBD>蕡<EFBFBD>G<EFBFBD>ȃG<EFBFBD><EFBFBD><EFBFBD>[<5B>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>璷<EFBFBD><E792B7><EFBFBD>őΏ<C591><CE8F><EFBFBD><EFBFBD>邱<EFBFBD>Ƃ<EFBFBD><C682>ł<EFBFBD><C582>܂<EFBFBD><DC82>B
|
||||
複数のソース・ファイルからリカバリ・ファイルを作成して、
|
||||
それらのファイルの一部が破損したり消失しても、
|
||||
残されたソース・ファイルとリカバリ・ファイルから、
|
||||
ファイルを修復する為のソフトです。
|
||||
PAR 1.0 がファイル単位で修復するのに比べて、
|
||||
PAR 2.0 はファイルを複数ブロックに分割してそのブロック単位で修復するので、
|
||||
ファイルの一部が破損しても破損部分以外のブロックは無傷で取り出すことができます。
|
||||
そのため、より複雑なエラーにも少ない冗長性で対処することができます。
|
||||
|
||||
<EFBFBD>@<40><><EFBFBD>J<EFBFBD>o<EFBFBD><6F><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>X<C281>ɓƗ<C993><C697><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>P<EFBFBD>b<EFBFBD>g<EFBFBD>ō\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>Ȃ̂ŁA
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD>Ȕj<EFBFBD><EFBFBD><EFBFBD>ɋ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>āA<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD><EFBFBD><EFBFBD>Ɏg<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><EFBFBD>ł<EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD>B
|
||||
<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD>E<EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>قNjǒn<EFBFBD>I<EFBFBD>ȃG<EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>ɉe<C989><65><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>A
|
||||
<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>ɕK<EFBFBD>v<EFBFBD>ȃ<EFBFBD><EFBFBD>J<EFBFBD>o<EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>čς݂܂<DD82><DC82>B
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ꂽ<EFBFBD>\<5C>[<5B>X<EFBFBD>E<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD><EFBFBD><F0959C8C><EFBFBD><EFBFBD>邽<EFBFBD>߂ɂ<DF82>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̃p<EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>B<EFBFBD>E<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>K<EFBFBD>v<EFBFBD>ɂȂ<EFBFBD><EFBFBD>Ƃ<EFBFBD><EFBFBD><EFBFBD> PAR <20>̊<EFBFBD><CC8A>{<7B><><EFBFBD><EFBFBD><EFBFBD>͓<EFBFBD><CD93><EFBFBD><EFBFBD>ł<EFBFBD><C582>B
|
||||
<EFBFBD>쐬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>B<EFBFBD>E<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD>̐<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʂŁA
|
||||
<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD>E<EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD>͂<EFBFBD><EFBFBD>̕<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>P<EFBFBD>ʂɂȂ<EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD>B
|
||||
リカバリ・ファイルも個々に独立したパケットで構成される構造なので、
|
||||
部分的な破損に強くて、より有効に使うことができます。
|
||||
ブロック・サイズが小さいほど局地的なエラーが他に影響しにくくなり、
|
||||
修復に必要なリカバリ・ファイルも少なくて済みます。
|
||||
しかし、失われたソース・ブロックを復元するためには
|
||||
同数のパリティ・ブロックが必要になるという PAR の基本原理は同じです。
|
||||
作成するパリティ・ブロックの数が復元できる量で、
|
||||
ブロック・サイズはその復元する単位になります。
|
||||
|
||||
<EFBFBD>@PAR 2.0 <EFBFBD>̓t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>Ƀf<C983>B<EFBFBD><42><EFBFBD>N<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>܂ނ<DC82><DE82>Ƃ<EFBFBD><C682>ł<EFBFBD><C582><EFBFBD><EFBFBD>̂ŁA
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̃t<EFBFBD>H<EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>ɎU<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂܂C<DC8F><43><EFBFBD><EFBFBD><EFBFBD>邱<EFBFBD>Ƃ<EFBFBD><C682>ł<EFBFBD><C582><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƁA
|
||||
PAR 1.0 <EFBFBD>ɔ<EFBFBD><EFBFBD>ׂĂ<EFBFBD><EFBFBD>葽<EFBFBD><EFBFBD><EFBFBD>̃t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><5F><EFBFBD>ɏC<C98F><43><EFBFBD>ł<EFBFBD><C582>Ďg<C48E><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͂悭<CD82>Ȃ<EFBFBD><C882>Ă܂<C482><DC82>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>̔<EFBFBD><EFBFBD>ʁA<EFBFBD>傫<EFBFBD>ȃt<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>⑽<EFBFBD><E291BD><EFBFBD>̃u<CC83><75><EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƁA
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD><EFBFBD><EF82AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v<EFBFBD>Z<EFBFBD>ɂ₽<C982><E282BD><EFBFBD>Ǝ<EFBFBD><C68E>Ԃ<EFBFBD><D482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
|
||||
<EFBFBD>@<40>\<5C>I<EFBFBD>ɂ<EFBFBD> PAR 2.0 <20>̕<EFBFBD><CC95><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʔłł<C582><C582><EFBFBD><EFBFBD>A<EFBFBD>\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>G<EFBFBD>őΉ<C591><CE89>\<5C>t<EFBFBD>g<EFBFBD><67><EFBFBD>قƂ<D982><C682>ǂȂ<C782><C882>A
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<5C>ȃp<C883>\<5C>R<EFBFBD><52><EFBFBD>łȂ<C582><C882>Ǝ<EFBFBD><C68E>p<EFBFBD>I<EFBFBD>ȏ<EFBFBD><C88F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD><EFBFBD><F093BE82><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>ɔ<EFBFBD><EFBFBD>͂ȃp<EFBFBD>\<5C>R<EFBFBD><52><EFBFBD>ł̓V<CD83><56><EFBFBD>v<EFBFBD><76><EFBFBD>Ōy<C58C><79><EFBFBD><EFBFBD> PAR 1.0 <20>̕<EFBFBD><CC95><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă邱<C482>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂ŁA
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>r<EFBFBD>ɉ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ďg<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
PAR 2.0 はファイル名にディレクトリも含むことができるので、
|
||||
複数のフォルダに散らばったファイルをそのまま修復することができたりと、
|
||||
PAR 1.0 に比べてより多くのファイルを柔軟に修復できて使い勝手はよくなってます。
|
||||
その反面、大きなファイルや多数のブロックを処理すると、
|
||||
メモリー消費が増えたり計算にやたらと時間がかかります。
|
||||
機能的には PAR 2.0 の方が上位版ですが、構造が複雑で対応ソフトがほとんどなく、
|
||||
高性能なパソコンでないと実用的な処理速度を得られないかもしれません。
|
||||
特に非力なパソコンではシンプルで軽快な PAR 1.0 の方が向いてることもあるので、
|
||||
環境や用途に応じて使い分けてください。
|
||||
|
||||
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
[ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>d<EFBFBD>l<EFBFBD>Ȃ<EFBFBD> ]
|
||||
[ 特徴や仕様など ]
|
||||
|
||||
<EFBFBD>@Parity Archive 2.0 <EFBFBD>̖{<7B><> par2cmdline <EFBFBD><EFBFBD> QuickPar <EFBFBD>ɔ<EFBFBD><EFBFBD>ׂāA
|
||||
<EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>o<EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>ɃR<C983><52><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><67><EFBFBD>t<EFBFBD><74><EFBFBD>邱<EFBFBD>Ƃ<EFBFBD><C682>ł<EFBFBD><C582>܂<EFBFBD><DC82>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>j<EFBFBD>R<EFBFBD>[<5B>h<EFBFBD><68><EFBFBD>ǂݏ<C782><DD8F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂Ń}<7D><><EFBFBD>`<60>o<EFBFBD>C<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD><C982>Ή<EFBFBD><CE89><EFBFBD><EFBFBD>Ă܂<C482><DC82>B
|
||||
<EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD><EFBFBD> 0<>̋<EFBFBD><CC8B>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>ɂ<EFBFBD><C982>Ή<EFBFBD><CE89><EFBFBD><EFBFBD>Ă܂<C482><DC82>B
|
||||
par2cmdline <EFBFBD>̓T<EFBFBD>u<EFBFBD>E<EFBFBD>f<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>ĔF<C494><46><EFBFBD><EFBFBD><EFBFBD>A
|
||||
QuickPar <EFBFBD>͖<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>̃A<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>P<EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD>t<EFBFBD>H<EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><EFBFBD><EFBFBD>T<EFBFBD>u<EFBFBD>E<EFBFBD>f<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>Ȃǂ̃f<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD><EFBFBD><F0959C8C><EFBFBD><EFBFBD>邱<EFBFBD>Ƃ<EFBFBD><C682>ł<EFBFBD><C582>܂<EFBFBD><DC82>B
|
||||
Parity Archive 2.0 の本家 par2cmdline や QuickPar に比べて、
|
||||
リカバリ・ファイルにコメントを付けることができます。
|
||||
ユニコードを読み書きするのでマルチバイト文字にも対応してます。
|
||||
サイズが 0の空ファイルにも対応してます。
|
||||
par2cmdline はサブ・ディレクトリをファイル名として認識し、
|
||||
QuickPar は無視しますが、このアプリケーションは
|
||||
フォルダやサブ・ディレクトリなどのディレクトリ構造を復元することができます。
|
||||
|
||||
<EFBFBD>@QuickPar <EFBFBD>͖<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɃS<EFBFBD>~<7E><><EFBFBD>t<EFBFBD><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԂŔ<D482><C594>[<5B>ȃu<C883><75><EFBFBD>b<EFBFBD>N<EFBFBD>̒<EFBFBD><CC92>O<EFBFBD>̃u<CC83><75><EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD>̃u<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>F<EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>̃A<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>P<EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>ł͂<C582><CD82><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ɣ<EFBFBD><C694>肵<EFBFBD>܂<EFBFBD><DC82>B
|
||||
<EFBFBD>܂<EFBFBD><EFBFBD>A<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD>E<EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ē<EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>œ<EFBFBD><C593>e<EFBFBD><65><EFBFBD>d<EFBFBD><64><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482>ƁA
|
||||
<EFBFBD>j<EFBFBD><EFBFBD><EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD>ȍ~<7E>Ɍ<EFBFBD><C98C>̃u<CC83><75><EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD>Ɍ<EFBFBD><C98C>o<EFBFBD><6F><EFBFBD>錻<EFBFBD>ۂ<EFBFBD><DB82>N<EFBFBD><4E><EFBFBD>āA
|
||||
<EFBFBD><EFBFBD><EFBFBD>̌<EFBFBD><EFBFBD>Ŗ{<7B><><EFBFBD>̏<EFBFBD><CC8F>Ԃ̃u<CC83><75><EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD>F<EFBFBD><46><EFBFBD>ł<EFBFBD><C582>Ȃ<EFBFBD><C882>Ȃ<EFBFBD><C882>Ă<EFBFBD><C482>܂<EFBFBD><DC82><EFBFBD><EFBFBD>肪<EFBFBD><E882AA><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>A
|
||||
<EFBFBD><EFBFBD><EFBFBD>̃A<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>P<EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>ł͌<C582><CD8C>o<EFBFBD><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԂɊւ<C98A><D682>炸<EFBFBD><E782B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƔF<C694><46><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
|
||||
<EFBFBD>j<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̌<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<>o<EFBFBD>C<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><C288>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>ׂĂ<D782><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߎ<EFBFBD><DF8E>Ԃ͂<D482><CD82><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>A
|
||||
<EFBFBD>j<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>葽<EFBFBD><E891BD><EFBFBD>̗<EFBFBD><CC97>p<EFBFBD>\<5C>ȃu<C883><75><EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD><6F><EFBFBD>邩<EFBFBD><E982A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
QuickPar は末尾にゴミが付いた状態で半端なブロックの直前のブロックが破損すると
|
||||
そのブロックを認識できなくなりますが、このアプリケーションではきちんと判定します。
|
||||
また、ブロック・サイズが小さくて同一ファイル内で内容が重複してると、
|
||||
破損ブロック以降に後のブロックを先に検出する現象が起きて、
|
||||
その後で本来の順番のブロックを認識できなくなってしまう問題がありますが、
|
||||
このアプリケーションでは検出した順番に関わらずきちんと認識します。
|
||||
破損部分の検査で 1バイトずつ一致するブロックを調べていくため時間はかかりますが、
|
||||
破損したファイルからより多くの利用可能なブロックを検出するかもしれません。
|
||||
|
||||
<EFBFBD>@QuickPar <EFBFBD>͔j<EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۂɁA<C981><41><EFBFBD><EFBFBD><EFBFBD>̔j<CC94><6A><EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>̈ʒu<CA92>ƏC<C68F><43><EFBFBD>Ɏg<C98E><67>
|
||||
<EFBFBD>p<EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>B<EFBFBD>E<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD>̑g<EFBFBD>ݍ<EFBFBD><EFBFBD>킹<EFBFBD>ɂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ẮA<EFBFBD>p<EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>B<EFBFBD>E<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD>̐<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD>Ă<EFBFBD>
|
||||
<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD>B<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́A<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>Ɏg<EFBFBD><EFBFBD><EFBFBD>p<EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>B<EFBFBD>E<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƂŕύX<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>߂<EFBFBD><EFBFBD>ǂ<EFBFBD><EFBFBD>ȍ<EFBFBD><EFBFBD>Ƃ<EFBFBD><EFBFBD>K<EFBFBD>v<EFBFBD>ɂȂ<EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>̃A<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>P<EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>ł͖<C582><CD96><EFBFBD><EFBFBD>̂<EFBFBD><CC82><EFBFBD><EFBFBD>p<EFBFBD><70><EFBFBD>e<EFBFBD>B<EFBFBD>E<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ď<EFBFBD><C48E><EFBFBD><EFBFBD>I<EFBFBD><49>
|
||||
<EFBFBD>ēx<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><EFBFBD>邩<EFBFBD><EFBFBD><EFBFBD>݂Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂Ŋy<EFBFBD>ł<EFBFBD><EFBFBD>B
|
||||
QuickPar は破損ファイルを修復する際に、特定の破損ブロックの位置と修復に使う
|
||||
パリティ・ブロックの組み合わせによっては、パリティ・ブロックの数が足りていても
|
||||
修復できないことがあります。そういう時は、修復に使うパリティ・ブロックを
|
||||
手作業で変更するというめんどうな作業が必要になります。
|
||||
このアプリケーションでは問題のあるパリティ・ブロックを除いて自動的に
|
||||
再度修復できるか試みてくれるので楽です。
|
||||
|
||||
<EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD>ꂽ<EFBFBD>\<5C>[<5B>X<EFBFBD>E<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>Ɠ<EFBFBD><C693><EFBFBD><EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>̃u<CC83><75><EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD><DD82>ė<EFBFBD><C497>p<EFBFBD>ł<EFBFBD><C582>邩<EFBFBD><E982A9>
|
||||
<EFBFBD>`<60>F<EFBFBD>b<EFBFBD>N<EFBFBD>T<EFBFBD><54><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><67><EFBFBD>Č<EFBFBD><C48C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><C282><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>͒<EFBFBD><CD92>ڃR<DA83>s<EFBFBD>[<5B><><EFBFBD>܂<EFBFBD><DC82>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>̂<EFBFBD><EFBFBD>߁A<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>̃\<5C>[<5B>X<EFBFBD>E<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂܂<DC82><DC82>鎞<EFBFBD>́A
|
||||
<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̌v<EFBFBD>Z<EFBFBD>ʂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƌ<EFBFBD><EFBFBD>ɏ<EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>p<EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>B<EFBFBD>E<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD>ł<EFBFBD><EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD>B
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD>ɓ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>̃t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>܂܂<DC82><DC82><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>AQuickPar <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><43><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD>\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582>B
|
||||
失われたソース・ブロックと同じ内容のブロックが存在して利用できるかを
|
||||
チェックサムを使って検索し、見つかった場合は直接コピーします。
|
||||
そのため、同じ内容のソース・ブロックが複数含まれる時は、
|
||||
修復時の計算量が減ると共に少ないパリティ・ブロックでも修復できます。
|
||||
部分的に同じ内容のファイルが含まれるなら、QuickPar よりも修復できる可能性が高いです。
|
||||
|
||||
<EFBFBD>@<40>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>E<EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD><59> 4<>o<EFBFBD>C<EFBFBD>g<EFBFBD>̏ꍇ<CC8F>́A
|
||||
<EFBFBD>j<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<5C>[<5B>X<EFBFBD>E<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>̃`<60>F<EFBFBD>b<EFBFBD>N<EFBFBD>T<EFBFBD><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>e<EFBFBD><65><EFBFBD>t<EFBFBD>Z<EFBFBD><5A><EFBFBD><EFBFBD><EFBFBD>̂ŁA
|
||||
<EFBFBD>p<EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>B<EFBFBD>E<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>S<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>ŏC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>邱<EFBFBD>Ƃ<EFBFBD><EFBFBD>ł<EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD>B
|
||||
<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD>E<EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD><EFBFBD> 8<>o<EFBFBD>C<EFBFBD>g<EFBFBD>̏ꍇ<CC8F>̏<EFBFBD><CC8F><EFBFBD><EFBFBD>́A
|
||||
1<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>Z<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂ɉ<EFBFBD><EFBFBD>\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂Ŏ<CC82><C58E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>\<5C>[<5B>X<EFBFBD>E<EFBFBD>R<EFBFBD>[<5B>h<EFBFBD><68><EFBFBD>ɂ͂<C982><CD82><EFBFBD><EFBFBD>̂Ŋ<CC82><C58A>]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 8<>o<EFBFBD>C<EFBFBD>g<EFBFBD>p<EFBFBD><70><EFBFBD>lj<EFBFBD><C789>ł<EFBFBD><C582>܂<EFBFBD><DC82>B
|
||||
ブロック・サイズが 4バイトの場合は、
|
||||
破損したソース・ブロックのチェックサムから内容を逆算するので、
|
||||
パリティ・ブロックを全く使わないで修復することができます。
|
||||
ブロック・サイズが 8バイトの場合の処理は、
|
||||
1ブロックを逆算するのに何十分もかかるので実装していません。
|
||||
ソース・コード上にはあるので希望があれば 8バイト用も追加できます。
|
||||
|
||||
<EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>̍<EFBFBD><CC8D>v<EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD><F382AB83><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>ʂ̔<CA82><CC94><EFBFBD><EFBFBD>ȉ<EFBFBD><C889>Ȃ<EFBFBD><C882>A
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> PAR 2.0 <EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƍ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɏC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD>B
|
||||
<EFBFBD>}<7D><><EFBFBD>`<60>E<EFBFBD>R<EFBFBD>A CPU <20>ɑΉ<C991><CE89><EFBFBD><EFBFBD>ă}<7D><><EFBFBD>`<60>E<EFBFBD>X<EFBFBD><58><EFBFBD>b<EFBFBD>h<EFBFBD>ōs<C58D>Z<F189898E><5A>
|
||||
<EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD>E<EFBFBD>\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̌v<CC8C>Z<EFBFBD><5A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂ŁACPU <20>R<EFBFBD>A<EFBFBD><41> 2<>ȏ゠<C88F><E382A0><EFBFBD>ƍX<C68D>ɑ<EFBFBD><C991><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>܂<EFBFBD><DC82>B
|
||||
<EFBFBD>V<EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>R<EFBFBD>A<EFBFBD>ł<EFBFBD> QuickPar <EFBFBD><EFBFBD> 2<>{<7B>A
|
||||
<EFBFBD>f<EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>R<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD><EFBFBD> QuickPar <20><> 3<>{<7B><><EFBFBD>炢<EFBFBD>̑<EFBFBD><CC91>x<EFBFBD><78><EFBFBD>ł܂<C582><DC82>B
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>傫<EFBFBD><E582AB><EFBFBD>ƁA
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>ċɒ[<5B>ɏ<EFBFBD><C98F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD><78><EFBFBD>ቺ<EFBFBD><E189BA><EFBFBD>܂<EFBFBD><DC82>B
|
||||
扱うファイルの合計サイズが空きメモリー量の半分以下ならば、
|
||||
他の PAR 2.0 クライアントよりもずっと高速に修復します。
|
||||
マルチ・コア CPU に対応してマルチ・スレッドで行列演算と
|
||||
リード・ソロモン符号の計算をするので、CPU コアが 2個以上あると更に速くなります。
|
||||
シングル・コアでも QuickPar の 2倍、
|
||||
デュアル・コアだと QuickPar の 3倍ぐらいの速度がでます。
|
||||
ただし、空きメモリーが少なかったりファイルが大きいと、
|
||||
効率が悪くなって極端に処理速度が低下します。
|
||||
|
||||
<EFBFBD>@<40><><EFBFBD>{<7B><><EFBFBD>̊J<CC8A><4A><EFBFBD><EFBFBD><C28B>ō<EFBFBD><C58D><EFBFBD><EFBFBD>Ă<EFBFBD><C482>̂ŁA
|
||||
<EFBFBD><EFBFBD><EFBFBD>{<7B><><EFBFBD>̃t<CC83>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>f<EFBFBD>B<EFBFBD><42><EFBFBD>N<EFBFBD>g<EFBFBD><67><EFBFBD>ɑΉ<C991><CE89><EFBFBD><EFBFBD>Ă܂<C482><DC82>B
|
||||
4GB <EFBFBD>ȏ<EFBFBD><EFBFBD>̃t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>ɂ<EFBFBD><C982>Ή<EFBFBD><CE89><EFBFBD><EFBFBD>Ă܂<C482><DC82><EFBFBD><EFBFBD>A
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD>̓t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>E<EFBFBD>A<EFBFBD>N<EFBFBD>Z<EFBFBD>X<EFBFBD><58><EFBFBD>x<EFBFBD>ɑ傫<C991><E582AB><EFBFBD>ˑ<EFBFBD><CB91><EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
|
||||
日本語の開発環境で作ってるので、
|
||||
日本語のファイル名やディレクトリに対応してます。
|
||||
4GB 以上のファイルにも対応してますが、
|
||||
検査や修復速度はファイル・アクセス速度に大きく依存します。
|
||||
|
||||
<EFBFBD>@<40>J<EFBFBD><4A><EFBFBD>Ҍ<EFBFBD><D28C><EFBFBD><EFBFBD>ɁA
|
||||
<EFBFBD>\<5C>[<5B>X<EFBFBD>E<EFBFBD>R<EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD><4A><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482>̂ŁA<C581>ׂ<EFBFBD><D782><EFBFBD><EFBFBD>d<EFBFBD>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŕύX<CF8D>ł<EFBFBD><C582>܂<EFBFBD><DC82>B
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɕs<EFBFBD><EFBFBD><EFBFBD>ȓ_<EFBFBD><EFBFBD><EFBFBD>o<EFBFBD>O<EFBFBD><EFBFBD><EFBFBD>ۂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD>A<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŋm<EFBFBD>F<EFBFBD><EFBFBD><EFBFBD>邱<EFBFBD>Ƃ<EFBFBD><EFBFBD>ł<EFBFBD><EFBFBD>Ĉ<EFBFBD><EFBFBD>S<EFBFBD>ł<EFBFBD><EFBFBD>B
|
||||
<EFBFBD>\<5C>[<5B>X<EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>E<EFBFBD><45><EFBFBD>X<EFBFBD>g<EFBFBD>Ŏw<C58E>肷<EFBFBD>邱<EFBFBD>Ƃ<EFBFBD><C682>ł<EFBFBD><C582>܂<EFBFBD><DC82>B
|
||||
<EFBFBD>\<5C>[<5B>X<EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>ƃ<EFBFBD><C683>J<EFBFBD>o<EFBFBD><6F><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>قȂ<D982><C882>ꏊ<EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582>܂<EFBFBD><DC82>B
|
||||
開発者向けに、
|
||||
ソース・コードが公開されてるので、細かい仕様を自分で変更できます。
|
||||
動作に不明な点やバグっぽい挙動があっても、自分で確認することができて安心です。
|
||||
ソース・ファイルをファイル・リストで指定することができます。
|
||||
ソース・ファイルとリカバリ・ファイルが異なる場所にあっても処理できます。
|
||||
|
||||
<EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>ẮA
|
||||
<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD>E<EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD><EFBFBD> 2 GB <20><><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Ή<EFBFBD><CE89><EFBFBD><EFBFBD>Ă܂<C482><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>p<EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>B<EFBFBD>v<EFBFBD>Z<EFBFBD>Ɋ܂߂Ȃ<EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43> (<28>m<EFBFBD><6D><EFBFBD>E<EFBFBD><45><EFBFBD>J<EFBFBD>o<EFBFBD><6F><EFBFBD>E<EFBFBD>Z<EFBFBD>b<EFBFBD>g) <20>̎w<CC8E><77><EFBFBD>͂ł<CD82><C582>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>\<5C>[<5B>X<EFBFBD>E<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>͍ő<CD8D><C591><EFBFBD> 32768<36>܂łł<C582><C582>B(<28>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 65536<EFBFBD>܂<EFBFBD>)
|
||||
<EFBFBD>쐬<EFBFBD>ł<EFBFBD><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>B<EFBFBD>E<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD>͍ő<EFBFBD><EFBFBD><EFBFBD> 65535<33>܂łł<C582><C582>B
|
||||
制限事項としては、
|
||||
ブロック・サイズは 2 GB 未満にしか対応してません。
|
||||
パリティ計算に含めないファイル (ノン・リカバリ・セット) の指定はできません。
|
||||
ソース・ブロックは最大で 32768個までです。(ファイル数は 65536個まで)
|
||||
作成できるパリティ・ブロックは最大で 65535個までです。
|
||||
|
||||
<EFBFBD>@<40><><EFBFBD>ӓ_<D393>̓<EFBFBD><CD83><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>ʂ<EFBFBD><CA82>c<EFBFBD><63><EFBFBD>Ȃ<EFBFBD><C882>Ƃł<C682><C582>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>o<EFBFBD><EFBFBD><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>ŏC<C58F><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۂɂ́A<CD81><41><EFBFBD>[<5B>h<EFBFBD>E<EFBFBD>\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̍s<CC8D><73><EFBFBD><EFBFBD><EFBFBD>ϊ<EFBFBD><CF8A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ׂ<EFBFBD>
|
||||
<EFBFBD>u <20>\<5C>[<5B>X<EFBFBD>E<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD><4E> * <20><><EFBFBD><EFBFBD><EFBFBD>ꂽ<EFBFBD>\<5C>[<5B>X<EFBFBD>E<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD><4E> * 2 <20>v<EFBFBD>̃<EFBFBD><CC83><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD>K<EFBFBD>v<EFBFBD>Ƃ<EFBFBD><C682>܂<EFBFBD><DC82>B
|
||||
<EFBFBD>Ⴆ<EFBFBD>A<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ő<EFBFBD><EFBFBD><EFBFBD> 32768 <20>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>ƁA25% <20>̃u<CC83><75><EFBFBD>b<EFBFBD>N<EFBFBD><EFBFBD><F0959C8C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD>
|
||||
32768 * 8192 * 2 = 500MB <EFBFBD>ȏ<EFBFBD><EFBFBD>̃<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD>K<EFBFBD>v<EFBFBD>Ƃ<EFBFBD><C682>܂<EFBFBD><DC82>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>ʂ͏璷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>傫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>邱<EFBFBD>Ƃ͖<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>S<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>j<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>邱<EFBFBD>Ƃ<EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂ŁA
|
||||
<EFBFBD><EFBFBD><EFBFBD>ۂɎg<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>郁<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>͂<EFBFBD><CD82><EFBFBD><EFBFBD>Ə<EFBFBD><C68F>Ȃ<EFBFBD><C882>ł<EFBFBD><C582><EFBFBD><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>G<CE83><47><EFBFBD>[<5B>ɂȂ<C982><C882>܂<EFBFBD><DC82>B
|
||||
注意点はメモリー消費量が膨大なことです。
|
||||
リカバリ・ファイルで修復する際には、リード・ソロモン符号の行列を変換する為に
|
||||
「 ソース・ブロック数 * 失われたソース・ブロック数 * 2 」のメモリーを必要とします。
|
||||
例えば、ブロック数を最大の 32768 にすると、25% のブロックを復元するには
|
||||
32768 * 8192 * 2 = 500MB 以上のメモリーを必要とします。
|
||||
普通は冗長性を大きくすることは無いし、全ブロックが破損することもまず無いので、
|
||||
実際に使われるメモリーはもっと少ないですが、足りなければエラーになります。
|
||||
|
||||
<EFBFBD>@<40>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>E<EFBFBD>A<EFBFBD>N<EFBFBD>Z<EFBFBD>X<EFBFBD>p<EFBFBD>o<EFBFBD>b<EFBFBD>t<EFBFBD>@<40>[<5B>́u (<28>\<5C>[<5B>X<EFBFBD>E<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD><4E> + 2) * <20>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>E<EFBFBD>T<EFBFBD>C<EFBFBD>Y <20>v
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{<7B>̑傫<CC91><E582AB><EFBFBD>ɂȂ<C982><C882>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>ꍇ<EFBFBD>̓u<CD83><75><EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD>f<EFBFBD>Љ<EFBFBD><D089><EFBFBD><EFBFBD>ď<EFBFBD><C48F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
|
||||
<EFBFBD>f<EFBFBD>ЃT<EFBFBD>C<EFBFBD>Y<EFBFBD>́u 1KB<4B>`<60>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>E<EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD>̔<EFBFBD><CC94><EFBFBD> <20>v<EFBFBD>ł<EFBFBD><C582>B
|
||||
<EFBFBD>s<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>ׂ̃<D782><CC83><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD>D<EFBFBD>悵<EFBFBD>āA<C481><EFBFBD><F382AB83><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>ꍇ<EFBFBD>ɂ́A
|
||||
<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>E<EFBFBD>A<EFBFBD>N<EFBFBD>Z<EFBFBD>X<EFBFBD>p<EFBFBD>o<EFBFBD>b<EFBFBD>t<EFBFBD>@<40>[<5B><><EFBFBD><EFBFBD><EFBFBD>炵<EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>G<CE83><47><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
|
||||
<EFBFBD>܂<EFBFBD><EFBFBD>A<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD>̒f<EFBFBD>Љ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƌɒ[<5B>ɏ<EFBFBD><C98F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD><78><EFBFBD>ቺ<EFBFBD><E189BA><EFBFBD>܂<EFBFBD><DC82>B
|
||||
ファイル・アクセス用バッファーは「 (ソース・ブロック数 + 2) * ブロック・サイズ 」
|
||||
が基本の大きさになり、メモリーが足りない場合はブロックを断片化して処理します。
|
||||
断片サイズは「 1KB~ブロック・サイズの半分 」です。
|
||||
行列を格納する為のメモリーを優先して、空きメモリーが足りない場合には、
|
||||
ファイル・アクセス用バッファーを減らしますが、それでも足りなければエラーが発生します。
|
||||
また、ブロックの断片化が激しいと極端に処理速度が低下します。
|
||||
|
||||
<EFBFBD>@<40><><EFBFBD>J<EFBFBD>o<EFBFBD><6F><EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>\<5C>[<5B>X<EFBFBD>E<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>̌<EFBFBD><CC8C><EFBFBD><EFBFBD>ł́A
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD>\<5C><><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Ă<EFBFBD> CPU <20><><EFBFBD>\<5C><><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>E<EFBFBD>A<EFBFBD>N<EFBFBD>Z<EFBFBD>X<EFBFBD><58><EFBFBD>x<EFBFBD>Ȃǂɂ<C782><C982><EFBFBD><EFBFBD>ẮA
|
||||
<EFBFBD>傫<EFBFBD>ȃt<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>̌<EFBFBD><CC8C><EFBFBD><EFBFBD>ɉ<EFBFBD><C989><EFBFBD><EFBFBD><EFBFBD><EFBFBD>҂<D282><C282>ƂɂȂ邩<C882><E982A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
|
||||
<EFBFBD>W<EFBFBD><EFBFBD><EFBFBD>ł̓<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>ʂ<EFBFBD><CA82>\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΏڍׂȌ<D782><C88C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD><73><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>ΊȈՌ<C888><D58C><EFBFBD><EFBFBD>ɂȂ<C982><C882>܂<EFBFBD><DC82>B
|
||||
<EFBFBD>j<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă邩<EFBFBD>ǂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̊m<EFBFBD>F<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̏ꍇ<EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>j<EFBFBD><EFBFBD><EFBFBD>̒<EFBFBD><EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́A
|
||||
<EFBFBD>ȈՌ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><EFBFBD>\<5C><><EFBFBD>Ȃ̂ŁA<C581>I<EFBFBD>v<EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>ŏڍ<DA8D><D78C><EFBFBD><EFBFBD><EFBFBD><F096B38C>ɂ<EFBFBD><C982>邱<EFBFBD>Ƃ<EFBFBD><C682>ł<EFBFBD><C582>܂<EFBFBD><DC82>B
|
||||
リカバリ・ファイルやソース・ファイルの検査では、
|
||||
メモリーが十分にあっても CPU 性能やファイル・アクセス速度などによっては、
|
||||
大きなファイルの検査に何分も待つことになるかもしれません。
|
||||
標準ではメモリー量が十分あれば詳細な検査を行い、足りなければ簡易検査になります。
|
||||
破損してるかどうかの確認をしたいだけの場合や、破損の程度が小さい場合は、
|
||||
簡易検査でも十分なので、オプションで詳細検査を無効にすることもできます。
|
||||
|
||||
<EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C28B><EFBFBD> Windows Vista <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȍ~ (Windows 7, 8, 10, 11) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>\<5C>R<EFBFBD><52><EFBFBD>ł<EFBFBD><C582>B
|
||||
Win32 API <EFBFBD><EFBFBD> VC <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>^<5E>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><67><EFBFBD>Ă<EFBFBD><C482>̂ŁA
|
||||
<EFBFBD>\<5C>[<5B>X<EFBFBD>E<EFBFBD>R<EFBFBD>[<5B>h<EFBFBD><68><EFBFBD>R<EFBFBD><52><EFBFBD>p<EFBFBD>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD> Visual Studio 2022 <EFBFBD>ȍ~<7E><><EFBFBD>K<EFBFBD>v<EFBFBD>ł<EFBFBD><C582>B
|
||||
動作環境は Windows 7 かそれ以降 (Windows 8, 10, 11) が動くパソコンです。
|
||||
Win32 API と VC ランタイムを使ってるので、
|
||||
ソース・コードをコンパイルするには Visual Studio 2022 以降が必要です。
|
||||
|
||||
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
[ <EFBFBD>Q<EFBFBD>l<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>◘<EFBFBD>p<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<5C>[<5B>X<EFBFBD>E<EFBFBD>R<EFBFBD>[<5B>h<EFBFBD>A<EFBFBD><41><EFBFBD>C<EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD>[<5B>Ȃ<EFBFBD> ]
|
||||
[ 参考文献や利用したソース・コード、ライブラリーなど ]
|
||||
|
||||
par2-specifications.pdf
|
||||
Parity Volume Set Specification 2.0
|
||||
@@ -220,31 +220,31 @@ This module is Public Domain.
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
[ <EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>Z<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>Ȃ<EFBFBD> ]
|
||||
[ ライセンスなど ]
|
||||
|
||||
<EFBFBD>@PAR 2.0 <EFBFBD>̃t<EFBFBD>H<EFBFBD>[<5B>}<7D>b<EFBFBD>g<EFBFBD>ɂ<C982><C282>Ă͐<C482><CD90><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>āA
|
||||
<EFBFBD>݊<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ێ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĂȂ<EFBFBD><EFBFBD>ׂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɂȂ<EFBFBD><EFBFBD>悤<EFBFBD>ɂ<EFBFBD><EFBFBD>Ă܂<EFBFBD><EFBFBD>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>̐l<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>[<5B>h<EFBFBD>𗬗p<F097AC97><70><EFBFBD>Ă镔<C482><E99594><EFBFBD>̒<EFBFBD><CC92>쌠<EFBFBD>͂<EFBFBD><CD82>̐l<CC90>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȊO<EFBFBD>̕<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̒<EFBFBD><EFBFBD>쌠<EFBFBD><EFBFBD> <20>V<EFBFBD>c <20>L <20>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
|
||||
PAR 2.0 のフォーマットについては説明書や実装コードを見て、
|
||||
互換性を維持してなるべく同じになるようにしてます。
|
||||
他の人が書いたコードを流用してる部分の著作権はその人にあります。
|
||||
それ以外の部分の著作権は 澤田 豊 にあります。
|
||||
|
||||
<EFBFBD>@<40><><EFBFBD>C<EFBFBD>Z<EFBFBD><5A><EFBFBD>X<EFBFBD><58> GPL <20>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂ɏ<CC82><C98F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
|
||||
par2cmdline <EFBFBD><EFBFBD> phpar2 <EFBFBD>̃R<EFBFBD>[<5B>h<EFBFBD>𗬗p<F097AC97><70><EFBFBD>Ă<EFBFBD><C482>āA<C481><41><EFBFBD><EFBFBD><EFBFBD>炪 GPL <20>Ŕz<C594>z<EFBFBD><7A><EFBFBD><EFBFBD><EFBFBD>Ă邩<C482><E982A9><EFBFBD>ł<EFBFBD><C582>B
|
||||
GPL <EFBFBD>̃<EFBFBD><EFBFBD>C<EFBFBD>Z<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>̏ڍׂ͂悭<EFBFBD>킩<EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>̂ł<EFBFBD><EFBFBD><EFBFBD><EFBFBD>A
|
||||
<EFBFBD><EFBFBD><EFBFBD>p<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƂȂ<EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>ă\<5C>[<5B>X<EFBFBD>E<EFBFBD>R<EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD><4A><EFBFBD>邱<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD><DD82><EFBFBD><EFBFBD>ł<EFBFBD><C582>B
|
||||
<EFBFBD>ڂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ͕t<EFBFBD><EFBFBD><EFBFBD>̉p<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>Z<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǂނ<EFBFBD><EFBFBD>A
|
||||
<EFBFBD><EFBFBD><EFBFBD>{<7B><><EFBFBD>̉<EFBFBD><CC89><EFBFBD><EFBFBD>ł<EFBFBD><C582>T<EFBFBD><54><EFBFBD>ēǂ<C493><C782>ł݂Ă<DD82><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
ライセンスは GPL というものに準拠します。
|
||||
par2cmdline や phpar2 のコードを流用していて、それらが GPL で配布されてるからです。
|
||||
GPL のライセンスの詳細はよくわからないのですが、
|
||||
利用料を払うことなく使えてソース・コードを公開することが条件みたいです。
|
||||
詳しいことは付属の英文ライセンス文を読むか、
|
||||
日本語の解説でも探して読んでみてください。
|
||||
|
||||
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
[ <EFBFBD>A<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ]
|
||||
[ 連絡先 ]
|
||||
|
||||
<EFBFBD>@<40><><EFBFBD>͂<EFBFBD><CD82>܂<EFBFBD> (<28>T<EFBFBD>ꂮ<EFBFBD>炢) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD>m<EFBFBD>F<EFBFBD>ł<EFBFBD><C582>܂<EFBFBD><DC82>A
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28>ꃖ<EFBFBD><EA8396><EFBFBD><EFBFBD><EFBFBD>炢) <20>C<EFBFBD><43><EFBFBD>^<5E>[<5B>l<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD>g<EFBFBD><67><EFBFBD>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>{<7B>I<EFBFBD>ɃT<C983>|<7C>[<5B>g<EFBFBD>̓<EFBFBD><CD83>[<5B><><EFBFBD>ōs<C58D><73><EFBFBD><EFBFBD><EFBFBD>ƂɂȂ<C982><C882>܂<EFBFBD><DC82><EFBFBD><EFBFBD>A
|
||||
<EFBFBD>Ԏ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߂<EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD>邩<EFBFBD>͋C<EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD><EFBFBD>҂<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
私はたまに (週一ぐらい) しかメール確認できませんし、
|
||||
長期間 (一ヶ月ぐらい) インターネットを使えないこともあります。
|
||||
基本的にサポートはメールで行うことになりますが、
|
||||
返事がいつ戻ってくるかは気長にお待ちください。
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><EFBFBD> <20>V<EFBFBD>c <20>L <20>ł<EFBFBD><C582>B
|
||||
<EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD>E<EFBFBD>A<EFBFBD>h<EFBFBD><68><EFBFBD>X<EFBFBD><58> tenfon (at mark) outlook.jp <EFBFBD>ł<EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD>f<EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>ۂ̕\<5C>L<EFBFBD>Ȃ̂ŁA<C581><41><EFBFBD>ۂ̃<DB82><CC83>[<5B><><EFBFBD>ł<EFBFBD> (at mark) <EFBFBD><EFBFBD> @ <EFBFBD>Ɋ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
名前は 澤田 豊 です。
|
||||
メール・アドレスは tenfon (at mark) outlook.jp です
|
||||
迷惑メール拒否の表記なので、実際のメールでは (at mark) を @ に換えてください。
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// com.c
|
||||
// Copyright : 2022-01-30 Yutaka Sawada
|
||||
// Copyright : 2024-11-30 Yutaka Sawada
|
||||
// License : GPL
|
||||
|
||||
#ifndef _UNICODE
|
||||
@@ -9,7 +9,7 @@
|
||||
#define UNICODE
|
||||
#endif
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0600 // Windows Vista or later
|
||||
#define _WIN32_WINNT 0x0601 // Windows 7 or later
|
||||
#endif
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// common2.c
|
||||
// Copyright : 2023-03-14 Yutaka Sawada
|
||||
// Copyright : 2024-11-30 Yutaka Sawada
|
||||
// License : GPL
|
||||
|
||||
#ifndef _UNICODE
|
||||
@@ -9,7 +9,7 @@
|
||||
#define UNICODE
|
||||
#endif
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0600 // Windows Vista or later
|
||||
#define _WIN32_WINNT 0x0601 // Windows 7 or later
|
||||
#endif
|
||||
|
||||
#include <conio.h>
|
||||
@@ -1848,9 +1848,10 @@ int sqrt32(int num)
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
int cpu_num = 1; // CPU/Core 個数が制限されてる場合は、上位に本来の数を置く
|
||||
// /arch:SSE2, +1=SSSE3, +2=SSE4.1, +4=SSE4.2, +8=CLMUL, +16=AVX2, +128=JIT(SSE2), +256=Old
|
||||
// /arch:SSE2, +1=SSSE3, +2=SSE4.1, +4=SSE4.2, +8=CLMUL, +16=AVX2, +128=JIT(SSE2), +256=ALTMAPなし
|
||||
// 上位 16-bit = L2 cache サイズから計算した制限サイズ
|
||||
unsigned int cpu_flag = 0;
|
||||
unsigned int cpu_cache = 0; // 上位 16-bit = L2 cache * 2, 下位 16-bit = L3 cache
|
||||
unsigned int cpu_cache = 0; // 上位 16-bit = L3 cache の制限サイズ, 下位 16-bit = 同時処理数
|
||||
unsigned int memory_use = 0; // メモリー使用量 0=auto, 1~7 -> 1/8 ~ 7/8
|
||||
|
||||
static int count_bit(DWORD_PTR value)
|
||||
@@ -1869,7 +1870,7 @@ static int count_bit(DWORD_PTR value)
|
||||
void check_cpu(void)
|
||||
{
|
||||
int core_count = 0, use_count;
|
||||
unsigned int CPUInfo[4];
|
||||
unsigned int CPUInfo[4], limit_size = 0;
|
||||
unsigned int returnLength, byteOffset;
|
||||
DWORD_PTR ProcessAffinityMask, SystemAffinityMask; // 32-bit なら 4バイト、64-bit なら 8バイト整数
|
||||
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION buffer = NULL, ptr;
|
||||
@@ -2006,42 +2007,57 @@ void check_cpu(void)
|
||||
//printf("Number of available physical processor cores: %d\n", core_count);
|
||||
if (cache3_size > 0){
|
||||
//printf("L3 cache: %d KB (%d way)\n", cache3_size >> 10 , cache3_way);
|
||||
cache3_size /= cache3_way; // set-associative のサイズにする
|
||||
if (cache3_size < 131072)
|
||||
cache3_size = 128 << 10; // 128 KB 以上にする
|
||||
cpu_cache = cache3_size / cache3_way; // set-associative のサイズにする
|
||||
if (cpu_cache < 131072){
|
||||
cpu_cache = 128 << 10; // 128 KB 以上にする
|
||||
} else {
|
||||
cpu_cache = (cpu_cache + 0xFFFF) & 0xFFFF0000; // 64 KB の倍数にする
|
||||
}
|
||||
}
|
||||
if (cache2_size > 0){
|
||||
//printf("L2 cache: %d KB (%d way)\n", cache2_size >> 10, cache2_way);
|
||||
cache2_size /= cache2_way; // set-associative のサイズにする
|
||||
if (cache2_size < 32768)
|
||||
cache2_size = 32 << 10; // 32 KB 以上にする
|
||||
//printf("Limit size of Cache Blocking: %d KB\n", cache2_size >> 10);
|
||||
cpu_cache = cache2_size | (cache3_size >> 17);
|
||||
limit_size = cache2_size / cache2_way; // set-associative のサイズにする
|
||||
if (limit_size < 65536)
|
||||
limit_size = 64 << 10; // 64 KB 以上にする
|
||||
// 同時処理数を決める
|
||||
if (cache2_way >= 16){
|
||||
returnLength = cache2_way / 2; // L2 cache の分割数が多い場合は、その半分にする
|
||||
} else {
|
||||
returnLength = 0;
|
||||
}
|
||||
if (cache3_size > 0){ // L2 cache に対する L3 cache のサイズの倍率にする
|
||||
byteOffset = cache3_size / cache2_size;
|
||||
if (returnLength < byteOffset){
|
||||
returnLength = byteOffset;
|
||||
if (cache2_way >= cache3_way) // L2 cache の分割数が L3 cache 以上なら 1.5倍にする
|
||||
returnLength += returnLength / 2;
|
||||
}
|
||||
}
|
||||
if (returnLength > 0x8000)
|
||||
returnLength = 0x8000;
|
||||
cpu_cache |= returnLength & 0xFFFF;
|
||||
}
|
||||
}
|
||||
|
||||
if (cpu_cache == 0) // キャッシュ・サイズが不明なら、128 KB にする
|
||||
cpu_cache = 128 << 10;
|
||||
if (limit_size == 0) // キャッシュ・サイズが不明なら、128 KB にする
|
||||
limit_size = 128 << 10;
|
||||
//printf("Limit size of Cache Blocking: %d KB\n", limit_size >> 10);
|
||||
// cpu_flag の上位 16-bit にキャッシュの制限サイズを置く
|
||||
cpu_flag |= (limit_size + 0xFFFF) & 0xFFFF0000; // 64 KB の倍数にする
|
||||
|
||||
if (core_count == 0){ // 物理コア数が不明なら、論理コア数と同じにする
|
||||
core_count = cpu_num;
|
||||
use_count = cpu_num;
|
||||
} else if (core_count < cpu_num){ // 物理コア数が共有されてるなら
|
||||
if (core_count >= 6){ // 6 コア以上ならそれ以上増やさない
|
||||
use_count = core_count;
|
||||
} else { // 2~5 コアなら 1個だけ増やす
|
||||
use_count = core_count + 1;
|
||||
}
|
||||
} else if (core_count < cpu_num){ // 物理コアが共有されてるなら
|
||||
use_count = core_count; // 物理コア数と同じにする
|
||||
} else {
|
||||
use_count = core_count;
|
||||
use_count = cpu_num; // 論理コア数と同じにする
|
||||
}
|
||||
if (use_count > MAX_CPU) // 利用するコア数が実装上の制限を越えないようにする
|
||||
use_count = MAX_CPU;
|
||||
//printf("Core count: logical, physical, use = %d, %d, %d\n", cpu_num, core_count, use_count);
|
||||
// 上位に論理コア数と物理コア数、下位に利用するコア数を配置する
|
||||
cpu_num = (cpu_num << 24) | (core_count << 16) | use_count;
|
||||
|
||||
// cpu_flag の上位 17-bit にキャッシュの制限サイズを置く
|
||||
cpu_flag |= cpu_cache & 0xFFFF8000; // 32 KB 未満は無視する
|
||||
}
|
||||
|
||||
// OS が 32-bit か 64-bit かを調べる
|
||||
|
||||
@@ -6,11 +6,11 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef _WIN64 // 32-bit 版なら
|
||||
#define MAX_CPU 8 // 32-bit 版は少なくしておく
|
||||
#define MAX_CPU 16 // 32-bit 版は少なくしておく
|
||||
#define MAX_MEM_SIZE 0x7F000000 // 確保するメモリー領域の最大値 2032MB
|
||||
#define MAX_MEM_SIZE32 0x50000000 // 32-bit OS で確保するメモリー領域の最大値 1280MB
|
||||
#else
|
||||
#define MAX_CPU 16 // 最大 CPU/Core 個数 (スレッド本数)
|
||||
#define MAX_CPU 32 // 最大 CPU/Core 個数 (スレッド本数)
|
||||
#endif
|
||||
|
||||
#define MAX_LEN 1024 // ファイル名の最大文字数 (末尾のNULL文字も含む)
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
// crc.c
|
||||
// Copyright : 2022-02-09 Yutaka Sawada
|
||||
// Copyright : 2024-11-30 Yutaka Sawada
|
||||
// License : GPL
|
||||
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0600 // Windows Vista or later
|
||||
#define _WIN32_WINNT 0x0601 // Windows 7 or later
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// create.c
|
||||
// Copyright : 2022-02-16 Yutaka Sawada
|
||||
// Copyright : 2024-11-30 Yutaka Sawada
|
||||
// License : GPL
|
||||
|
||||
#ifndef _UNICODE
|
||||
@@ -9,7 +9,7 @@
|
||||
#define UNICODE
|
||||
#endif
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0600 // Windows Vista or later
|
||||
#define _WIN32_WINNT 0x0601 // Windows 7 or later
|
||||
#endif
|
||||
|
||||
#include <process.h>
|
||||
@@ -26,6 +26,11 @@
|
||||
|
||||
//#define TIMER // 実験用
|
||||
|
||||
#ifdef TIMER
|
||||
#include <time.h>
|
||||
static double time_sec, time_speed;
|
||||
#endif
|
||||
|
||||
// ソート時に項目を比較する
|
||||
static int sort_cmp(const void *elem1, const void *elem2)
|
||||
{
|
||||
@@ -196,7 +201,7 @@ int set_common_packet(
|
||||
__int64 prog_now = 0;
|
||||
|
||||
#ifdef TIMER
|
||||
unsigned int time_start = GetTickCount();
|
||||
clock_t time_start = clock();
|
||||
#endif
|
||||
print_progress_text(0, "Computing file hash");
|
||||
|
||||
@@ -305,14 +310,14 @@ unsigned int time_start = GetTickCount();
|
||||
off += (64 + main_packet_size);
|
||||
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount() - time_start;
|
||||
printf("hash %d.%03d sec", time_start / 1000, time_start % 1000);
|
||||
if (time_start > 0){
|
||||
time_start = (int)((total_file_size * 125) / ((__int64)time_start * 131072));
|
||||
printf(", %d MB/s\n", time_start);
|
||||
time_start = clock() - time_start;
|
||||
time_sec = (double)time_start / CLOCKS_PER_SEC;
|
||||
if (time_sec > 0){
|
||||
time_speed = (double)total_file_size / (time_sec * 1048576);
|
||||
} else {
|
||||
printf("\n");
|
||||
time_speed = 0;
|
||||
}
|
||||
printf("hash %.3f sec, %.0f MB/s\n", time_sec, time_speed);
|
||||
#endif
|
||||
|
||||
error_end:
|
||||
@@ -320,7 +325,7 @@ error_end:
|
||||
return off;
|
||||
}
|
||||
|
||||
#define MAX_MULTI_READ 4 // SSDで同時に読み込む最大ファイル数
|
||||
#define MAX_MULTI_READ 6 // SSDで同時に読み込む最大ファイル数
|
||||
|
||||
// SSD 上で複数ファイルのハッシュ値を同時に求めるバージョン
|
||||
int set_common_packet_multi(
|
||||
@@ -341,18 +346,16 @@ int set_common_packet_multi(
|
||||
FILE_HASH_TH th[MAX_MULTI_READ];
|
||||
|
||||
#ifdef TIMER
|
||||
unsigned int time_start = GetTickCount();
|
||||
clock_t time_start = clock();
|
||||
#endif
|
||||
|
||||
memset(hSub, 0, sizeof(HANDLE) * MAX_MULTI_READ);
|
||||
memset(th, 0, sizeof(FILE_HASH_TH) * MAX_MULTI_READ);
|
||||
// Core数に応じてスレッド数を増やす
|
||||
if ((memory_use & 32) != 0){ // NVMe SSD
|
||||
if (cpu_num >= 8){ // 8 ~ 16 Cores
|
||||
multi_read = 4;
|
||||
} else { // 3 Cores + Hyper-threading, or 4 ~ 7 Cores
|
||||
multi_read = 3;
|
||||
}
|
||||
multi_read = (cpu_num + 2) / 3 + 1; // 3=2, 4~6=3, 7~9=4, 10~12=5, 13~=6
|
||||
if (multi_read > MAX_MULTI_READ)
|
||||
multi_read = MAX_MULTI_READ;
|
||||
} else { // SATA SSD
|
||||
multi_read = 2;
|
||||
}
|
||||
@@ -547,14 +550,14 @@ unsigned int time_start = GetTickCount();
|
||||
}
|
||||
print_progress_done(); // 改行して行の先頭に戻しておく
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount() - time_start;
|
||||
printf("hash %d.%03d sec", time_start / 1000, time_start % 1000);
|
||||
if (time_start > 0){
|
||||
time_start = (int)((total_file_size * 125) / ((__int64)time_start * 131072));
|
||||
printf(", %d MB/s\n", time_start);
|
||||
time_start = clock() - time_start;
|
||||
time_sec = (double)time_start / CLOCKS_PER_SEC;
|
||||
if (time_sec > 0){
|
||||
time_speed = (double)total_file_size / (time_sec * 1048576);
|
||||
} else {
|
||||
printf("\n");
|
||||
time_speed = 0;
|
||||
}
|
||||
printf("hash %.3f sec, %.0f MB/s\n", time_sec, time_speed);
|
||||
#endif
|
||||
|
||||
error_end:
|
||||
@@ -702,7 +705,7 @@ int set_common_packet_hash(
|
||||
__int64 prog_now = 0;
|
||||
|
||||
#ifdef TIMER
|
||||
unsigned int time_start = GetTickCount();
|
||||
clock_t time_start = clock();
|
||||
#endif
|
||||
print_progress_text(0, "Computing file hash");
|
||||
|
||||
@@ -742,8 +745,8 @@ unsigned int time_start = GetTickCount();
|
||||
print_progress_done(); // 改行して行の先頭に戻しておく
|
||||
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount() - time_start;
|
||||
printf("hash %d.%03d sec\n", time_start / 1000, time_start % 1000);
|
||||
time_start = clock() - time_start;
|
||||
printf("hash %.3f sec\n", (double)time_start / CLOCKS_PER_SEC);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
@@ -1067,7 +1070,7 @@ int create_recovery_file(
|
||||
#endif
|
||||
|
||||
#ifdef TIMER
|
||||
unsigned int time_start = GetTickCount();
|
||||
clock_t time_start = clock();
|
||||
#endif
|
||||
print_progress_text(0, "Constructing recovery file");
|
||||
time_last = GetTickCount();
|
||||
@@ -1260,8 +1263,8 @@ unsigned int time_start = GetTickCount();
|
||||
print_progress_done(); // 改行して行の先頭に戻しておく
|
||||
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount() - time_start;
|
||||
printf("write %d.%03d sec\n", time_start / 1000, time_start % 1000);
|
||||
time_start = clock() - time_start;
|
||||
printf("write %.3f sec\n", (double)time_start / CLOCKS_PER_SEC);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
@@ -1282,6 +1285,7 @@ int create_recovery_file_1pass(
|
||||
int footer_size, // 末尾パケットのバッファー・サイズ
|
||||
HANDLE *rcv_hFile, // 各リカバリ・ファイルのハンドル
|
||||
unsigned char *p_buf, // 計算済みのパリティ・ブロック
|
||||
unsigned char *g_buf, // GPU用 (GPUを使わない場合は NULLにすること)
|
||||
unsigned int unit_size)
|
||||
{
|
||||
unsigned char *packet_header, hash[HASH_SIZE];
|
||||
@@ -1438,6 +1442,10 @@ int create_recovery_file_1pass(
|
||||
|
||||
// Recovery Slice packet は後から書き込む
|
||||
for (j = block_start; j < block_start + block_count; j++){
|
||||
if (g_buf != NULL){ // GPUを使った場合
|
||||
// CPUスレッドと GPUスレッドの計算結果を合わせる
|
||||
galois_align_xor(g_buf + (size_t)unit_size * j, p_buf, unit_size);
|
||||
}
|
||||
// パリティ・ブロックのチェックサムを検証する
|
||||
checksum16_return(p_buf, hash, unit_size - HASH_SIZE);
|
||||
if (memcmp(p_buf + unit_size - HASH_SIZE, hash, HASH_SIZE) != 0){
|
||||
@@ -1821,10 +1829,12 @@ int split_files(
|
||||
}
|
||||
if (ext_len > 0){ // 全て数字の拡張子を持つソース・ファイルがあるなら
|
||||
//printf_cp("\n risky name = %s \n", file_name);
|
||||
wcscpy(file_path, file_name); // 比較用に拡張子を取り除く
|
||||
file_path[name_len] = 0;
|
||||
for (num2 = 0; num2 < file_num; num2++){
|
||||
if (num2 == num)
|
||||
continue;
|
||||
if (_wcsnicmp(list_buf + files[num2].name, file_name, name_len) == 0){
|
||||
if (_wcsicmp(list_buf + files[num2].name, file_path) == 0){
|
||||
//printf_cp(" match name = %s \n", list_buf + files[num2].name);
|
||||
num8 = (files[num2].size + (__int64)split_size - 1) / split_size;
|
||||
split_max = (int)num8;
|
||||
@@ -1835,7 +1845,7 @@ int split_files(
|
||||
if (((split_max < 1000) && (ext_len >= 5)) || ((split_max < 10000) && (ext_len >= 6)))
|
||||
continue; // 拡張子の桁数が異なる
|
||||
// 上書きする危険性があるのでエラーにする
|
||||
printf_cp("split bad file, %s\n", file_name);
|
||||
printf_cp("split bad file, %s\n", list_buf + files[num2].name);
|
||||
*cur_num = -1;
|
||||
*cur_id = 0;
|
||||
return 1;
|
||||
|
||||
@@ -82,6 +82,7 @@ int create_recovery_file_1pass(
|
||||
int footer_size, // 末尾パケットのバッファー・サイズ
|
||||
HANDLE *rcv_hFile, // 各リカバリ・ファイルのハンドル
|
||||
unsigned char *p_buf, // 計算済みのパリティ・ブロック
|
||||
unsigned char *g_buf, // GPU用 (GPUを使わない場合は NULLにすること)
|
||||
unsigned int unit_size);
|
||||
|
||||
// 作成中のリカバリ・ファイルを削除する
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -6,7 +6,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
extern unsigned short *galois_log_table;
|
||||
//extern unsigned short *galois_log_table;
|
||||
extern unsigned int cpu_flag;
|
||||
|
||||
int galois_create_table(void); // Returns 0 on success, -1 on failure
|
||||
@@ -47,6 +47,15 @@ typedef void (* REGION_MULTIPLY) (
|
||||
int factor); // Number to multiply by
|
||||
REGION_MULTIPLY galois_align_multiply;
|
||||
|
||||
typedef void (* REGION_MULTIPLY2) (
|
||||
unsigned char *src1, // Region to multiply
|
||||
unsigned char *src2,
|
||||
unsigned char *dst, // Products go here
|
||||
unsigned int len, // Byte length
|
||||
int factor1, // Number to multiply by
|
||||
int factor2);
|
||||
REGION_MULTIPLY2 galois_align_multiply2;
|
||||
|
||||
// 領域並び替え用の関数定義
|
||||
typedef void (* REGION_ALTMAP) (unsigned char *data, unsigned int bsize);
|
||||
REGION_ALTMAP galois_altmap_change;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// ini.c
|
||||
// Copyright : 2022-10-12 Yutaka Sawada
|
||||
// Copyright : 2024-11-30 Yutaka Sawada
|
||||
// License : GPL
|
||||
|
||||
#ifndef _UNICODE
|
||||
@@ -9,7 +9,7 @@
|
||||
#define UNICODE
|
||||
#endif
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0600 // Windows Vista or later
|
||||
#define _WIN32_WINNT 0x0601 // Windows 7 or later
|
||||
#endif
|
||||
|
||||
#include <malloc.h>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// json.c
|
||||
// Copyright : 2023-02-06 Yutaka Sawada
|
||||
// Copyright : 2024-11-30 Yutaka Sawada
|
||||
// License : GPL
|
||||
|
||||
#ifndef _UNICODE
|
||||
@@ -9,7 +9,7 @@
|
||||
#define UNICODE
|
||||
#endif
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0600 // Windows Vista or later
|
||||
#define _WIN32_WINNT 0x0601 // Windows 7 or later
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
// lib_opencl.c
|
||||
// Copyright : 2023-06-01 Yutaka Sawada
|
||||
// Copyright : 2024-11-30 Yutaka Sawada
|
||||
// License : GPL
|
||||
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0600 // Windows Vista or later
|
||||
#define _WIN32_WINNT 0x0601 // Windows 7 or later
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
@@ -72,11 +72,10 @@ typedef cl_int (CL_API_CALL *API_clEnqueueNDRangeKernel)(cl_command_queue, cl_ke
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
// グローバル変数
|
||||
|
||||
extern unsigned int cpu_flag, cpu_cache; // declared in common2.h
|
||||
extern unsigned int cpu_flag; // declared in common2.h
|
||||
extern int cpu_num;
|
||||
|
||||
#define MAX_DEVICE 3
|
||||
#define MAX_GROUP_NUM 64
|
||||
#define MAX_DEVICE 8
|
||||
|
||||
HMODULE hLibOpenCL = NULL;
|
||||
|
||||
@@ -85,7 +84,7 @@ cl_command_queue OpenCL_command = NULL;
|
||||
cl_kernel OpenCL_kernel = NULL;
|
||||
cl_mem OpenCL_src = NULL, OpenCL_dst = NULL, OpenCL_buf = NULL;
|
||||
size_t OpenCL_group_num;
|
||||
int OpenCL_method = 0; // 正=速い機器を選ぶ, 負=遅い機器を選ぶ
|
||||
int OpenCL_method = 0; // 標準では GPU を使わず、動作は自動選択される
|
||||
|
||||
API_clCreateBuffer gfn_clCreateBuffer;
|
||||
API_clReleaseMemObject gfn_clReleaseMemObject;
|
||||
@@ -101,24 +100,27 @@ API_clEnqueueNDRangeKernel gfn_clEnqueueNDRangeKernel;
|
||||
|
||||
/*
|
||||
入力
|
||||
OpenCL_method : どのデバイスを選ぶか
|
||||
OpenCL_method : どのデバイスや関数を選ぶか
|
||||
0x100 = 速い機器を選ぶ, 0x200 = 遅い機器を選ぶ
|
||||
0x10000 = 1ブロックずつ計算する, 0x20000 = 2ブロックずつ計算しようとする
|
||||
0x40000 = 4-byte memory access, 0x80000 = try 16-byte memory access
|
||||
0x100000 = CL_MEM_COPY_HOST_PTR, 0x200000 = CL_MEM_USE_HOST_PTR
|
||||
unit_size : ブロックの単位サイズ
|
||||
src_max : ソース・ブロック個数
|
||||
chunk_size = 0: 標準では分割しない
|
||||
|
||||
出力
|
||||
return : エラー番号
|
||||
src_max : 最大で何ブロックまでソースを読み込めるか
|
||||
chunk_size : CPUスレッドの分割サイズ
|
||||
OpenCL_method : 動作フラグいろいろ
|
||||
*/
|
||||
|
||||
// 0=成功, 1~エラー番号
|
||||
int init_OpenCL(int unit_size, int *src_max, int *chunk_size)
|
||||
int init_OpenCL(unsigned int unit_size, int *src_max)
|
||||
{
|
||||
char buf[2048], *p_source;
|
||||
int err = 0, i, j;
|
||||
int gpu_power, count;
|
||||
int unified_memory; // non zero = Integrated GPU
|
||||
size_t data_size, alloc_max;
|
||||
//FILE *fp;
|
||||
HRSRC res;
|
||||
@@ -139,9 +141,10 @@ int init_OpenCL(int unit_size, int *src_max, int *chunk_size)
|
||||
API_clReleaseProgram fn_clReleaseProgram;
|
||||
API_clCreateKernel fn_clCreateKernel;
|
||||
API_clGetKernelWorkGroupInfo fn_clGetKernelWorkGroupInfo;
|
||||
API_clReleaseKernel fn_clReleaseKernel;
|
||||
cl_int ret;
|
||||
cl_uint num_platforms = 0, num_devices = 0, num_groups, param_value;
|
||||
cl_ulong param_value8, cache_size;
|
||||
cl_ulong param_value8;
|
||||
cl_platform_id platform_id[MAX_DEVICE], selected_platform; // Intel, AMD, Nvidia などドライバーの提供元
|
||||
cl_device_id device_id[MAX_DEVICE], selected_device; // CPU や GPU など
|
||||
cl_program program;
|
||||
@@ -218,6 +221,9 @@ int init_OpenCL(int unit_size, int *src_max, int *chunk_size)
|
||||
fn_clGetKernelWorkGroupInfo = (API_clGetKernelWorkGroupInfo)GetProcAddress(hLibOpenCL, "clGetKernelWorkGroupInfo");
|
||||
if (fn_clGetKernelWorkGroupInfo == NULL)
|
||||
return err;
|
||||
fn_clReleaseKernel = (API_clReleaseKernel)GetProcAddress(hLibOpenCL, "clReleaseKernel");
|
||||
if (fn_clReleaseKernel == NULL)
|
||||
return err;
|
||||
gfn_clFinish = (API_clFinish)GetProcAddress(hLibOpenCL, "clFinish");
|
||||
if (gfn_clFinish == NULL)
|
||||
return err;
|
||||
@@ -229,12 +235,12 @@ int init_OpenCL(int unit_size, int *src_max, int *chunk_size)
|
||||
ret = fn_clGetPlatformIDs(MAX_DEVICE, platform_id, &num_platforms);
|
||||
if (ret != CL_SUCCESS)
|
||||
return (ret << 8) | 10;
|
||||
if (OpenCL_method >= 0){ // 選択する順序と初期値を変える
|
||||
OpenCL_method = 1;
|
||||
gpu_power = 0;
|
||||
} else {
|
||||
OpenCL_method = -1;
|
||||
if (num_platforms > MAX_DEVICE)
|
||||
num_platforms = MAX_DEVICE;
|
||||
if (OpenCL_method & 0x200){ // 選択する順序と初期値を変える
|
||||
gpu_power = INT_MIN;
|
||||
} else {
|
||||
gpu_power = 0;
|
||||
}
|
||||
alloc_max = 0;
|
||||
|
||||
@@ -250,6 +256,8 @@ int init_OpenCL(int unit_size, int *src_max, int *chunk_size)
|
||||
// 環境内の OpenCL 対応機器の数
|
||||
if (fn_clGetDeviceIDs(platform_id[i], CL_DEVICE_TYPE_GPU, MAX_DEVICE, device_id, &num_devices) != CL_SUCCESS)
|
||||
continue;
|
||||
if (num_devices > MAX_DEVICE)
|
||||
num_devices = MAX_DEVICE;
|
||||
|
||||
for (j = 0; j < (int)num_devices; j++){
|
||||
// デバイスが利用可能か確かめる
|
||||
@@ -268,61 +276,42 @@ int init_OpenCL(int unit_size, int *src_max, int *chunk_size)
|
||||
ret = fn_clGetDeviceInfo(device_id[j], CL_DEVICE_VERSION, sizeof(buf), buf, NULL);
|
||||
if (ret == CL_SUCCESS)
|
||||
printf("Device version = %s\n", buf);
|
||||
ret = fn_clGetDeviceInfo(device_id[j], CL_DEVICE_LOCAL_MEM_SIZE, sizeof(cl_ulong), ¶m_value8, NULL);
|
||||
if (ret == CL_SUCCESS)
|
||||
printf("LOCAL_MEM_SIZE = %I64d KB\n", param_value8 >> 10);
|
||||
|
||||
// 無理とは思うけど、一応チェックする
|
||||
//#define CL_DEVICE_SVM_CAPABILITIES 0x1053
|
||||
//#define CL_DEVICE_SVM_COARSE_GRAIN_BUFFER (1 << 0)
|
||||
//#define CL_DEVICE_SVM_FINE_GRAIN_BUFFER (1 << 1)
|
||||
//#define CL_DEVICE_SVM_FINE_GRAIN_SYSTEM (1 << 2)
|
||||
//#define CL_DEVICE_SVM_ATOMICS (1 << 3)
|
||||
// ret = fn_clGetDeviceInfo(device_id[j], CL_DEVICE_SVM_CAPABILITIES, sizeof(cl_ulong), ¶m_value8, NULL);
|
||||
// if (ret == CL_INVALID_VALUE)
|
||||
// printf("Shared Virtual Memory is not supported\n");
|
||||
// if (ret == CL_SUCCESS)
|
||||
// printf("Shared Virtual Memory = 0x%I64X\n", param_value8);
|
||||
#endif
|
||||
|
||||
ret = fn_clGetDeviceInfo(device_id[j], CL_DEVICE_ADDRESS_BITS, sizeof(cl_uint), ¶m_value, NULL);
|
||||
if (ret != CL_SUCCESS)
|
||||
continue;
|
||||
// 取得できなくてもエラーにしない
|
||||
ret = fn_clGetDeviceInfo(device_id[j], CL_DEVICE_HOST_UNIFIED_MEMORY, sizeof(cl_uint), ¶m_value, NULL);
|
||||
if (ret == CL_SUCCESS){
|
||||
if (param_value != 0){
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("HOST_UNIFIED_MEMORY = %d\n", param_value);
|
||||
#endif
|
||||
param_value = 1;
|
||||
}
|
||||
} else { // CL_DEVICE_HOST_UNIFIED_MEMORY は OpenCL 2.0 以降で非推奨になった
|
||||
param_value = 0;
|
||||
}
|
||||
|
||||
// 取得できない場合はエラーにする
|
||||
ret = fn_clGetDeviceInfo(device_id[j], CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof(cl_ulong), ¶m_value8, NULL);
|
||||
if (ret != CL_SUCCESS)
|
||||
continue;
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("ADDRESS_BITS = %d\n", param_value);
|
||||
printf("MAX_MEM_ALLOC_SIZE = %I64d MB\n", param_value8 >> 20);
|
||||
#endif
|
||||
if (param_value == 32){ // CL_DEVICE_ADDRESS_BITS によって確保するメモリー領域の上限を変える
|
||||
if (param_value8 > 0x30000000) // 768MB までにする
|
||||
param_value8 = 0x30000000;
|
||||
} else { // 64-bit OS でも 2GB までにする
|
||||
if (param_value8 > 0x80000000)
|
||||
param_value8 = 0x80000000;
|
||||
}
|
||||
|
||||
ret = fn_clGetDeviceInfo(device_id[j], CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(cl_uint), &num_groups, NULL);
|
||||
if (ret != CL_SUCCESS)
|
||||
continue;
|
||||
ret = fn_clGetDeviceInfo(device_id[j], CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof(size_t), &data_size, NULL);
|
||||
if (ret != CL_SUCCESS)
|
||||
continue;
|
||||
ret = fn_clGetDeviceInfo(device_id[j], CL_DEVICE_HOST_UNIFIED_MEMORY, sizeof(cl_uint), ¶m_value, NULL);
|
||||
if (ret != CL_SUCCESS)
|
||||
continue;
|
||||
if (param_value != 0)
|
||||
param_value = 1;
|
||||
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("MAX_COMPUTE_UNITS = %d\n", num_groups);
|
||||
printf("MAX_WORK_GROUP_SIZE = %zd\n", data_size);
|
||||
printf("HOST_UNIFIED_MEMORY = %d\n", param_value);
|
||||
#endif
|
||||
// MAX_COMPUTE_UNITS * MAX_WORK_GROUP_SIZE で計算力を測る、外付けGPUなら値を倍にする
|
||||
count = (2 - param_value) * (int)data_size * num_groups;
|
||||
count *= OpenCL_method; // 符号を変える
|
||||
if (OpenCL_method & 0x200) // Prefer slower device
|
||||
count *= -1; // 符号を変える
|
||||
//printf("prev = %d, now = %d\n", gpu_power, count);
|
||||
if ((count > gpu_power) && (data_size >= 256) && // 256以上ないとテーブルを作れない
|
||||
(param_value8 / 8 > (cl_ulong)unit_size)){ // CL_DEVICE_MAX_MEM_ALLOC_SIZE に収まるか
|
||||
@@ -330,41 +319,20 @@ int init_OpenCL(int unit_size, int *src_max, int *chunk_size)
|
||||
selected_device = device_id[j]; // 使うデバイスの ID
|
||||
selected_platform = platform_id[i];
|
||||
OpenCL_group_num = num_groups; // ワークグループ数は COMPUTE_UNITS 数にする
|
||||
if (OpenCL_group_num > MAX_GROUP_NUM) // 制限を付けてローカルメモリーの消費を抑える
|
||||
OpenCL_group_num = MAX_GROUP_NUM;
|
||||
alloc_max = (size_t)param_value8;
|
||||
unified_memory = param_value; // 0 = discrete GPU, 1 = integrated GPU
|
||||
|
||||
// AMD Radeon ではメモリー領域が全体の 1/4 とは限らない
|
||||
// AMD や Intel の GPU ではメモリー領域が全体の 1/4 とは限らない
|
||||
ret = fn_clGetDeviceInfo(device_id[j], CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(cl_ulong), ¶m_value8, NULL);
|
||||
if (ret == CL_SUCCESS){
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("GLOBAL_MEM_SIZE = %I64d MB\n", param_value8 >> 20);
|
||||
#endif
|
||||
// 領域一個あたりのサイズは全体の 1/4 までにする
|
||||
// 領域一個あたりのサイズは全体の 1/4 までにする(VRAMを使いすぎると不安定になる)
|
||||
param_value8 /= 4;
|
||||
if ((cl_ulong)alloc_max > param_value8)
|
||||
alloc_max = (size_t)param_value8;
|
||||
}
|
||||
|
||||
cache_size = 0;
|
||||
ret = fn_clGetDeviceInfo(device_id[j], CL_DEVICE_GLOBAL_MEM_CACHE_TYPE, sizeof(cl_uint), &num_groups, NULL);
|
||||
if (ret == CL_SUCCESS){
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("GLOBAL_MEM_CACHE_TYPE = %d\n", num_groups);
|
||||
#endif
|
||||
if (num_groups & 3){ // CL_READ_ONLY_CACHE or CL_READ_WRITE_CACHE
|
||||
ret = fn_clGetDeviceInfo(device_id[j], CL_DEVICE_GLOBAL_MEM_CACHE_SIZE, sizeof(cl_ulong), &cache_size, NULL);
|
||||
if (ret == CL_SUCCESS){
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("GLOBAL_MEM_CACHE_SIZE = %I64d KB\n", cache_size >> 10);
|
||||
#endif
|
||||
if (param_value != 0){ // 内蔵 GPU なら CPU との共有キャッシュを活用する
|
||||
if (cache_size >= 1048576) // サイズが小さい場合は分割しない
|
||||
cache_size |= 0x40000000;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -394,70 +362,6 @@ int init_OpenCL(int unit_size, int *src_max, int *chunk_size)
|
||||
if (ret != CL_SUCCESS)
|
||||
return (ret << 8) | 12;
|
||||
|
||||
// 計算方式を選択する
|
||||
gpu_power = unit_size; // unit_size は MEM_UNIT の倍数になってる
|
||||
if ((((cpu_flag & 0x101) == 1) || ((cpu_flag & 16) != 0)) && (sse_unit == 32)){
|
||||
OpenCL_method = 2; // SSSE3 & ALTMAP または AVX2 ならデータの並び替え対応版を使う
|
||||
if (cache_size & 0x40000000){ // 内蔵 GPU でキャッシュを利用できるなら、CPUスレッドと同じにする
|
||||
j = cpu_cache & 0x7FFF8000; // CPUのキャッシュ上限サイズ
|
||||
count = (int)(cache_size & 0x3FFFFFFF) / 4; // ただし、認識できるサイズの 1/4 までにする
|
||||
if ((j == 0) || (j > count))
|
||||
j = count;
|
||||
count = 1;
|
||||
while (gpu_power > j){ // 制限サイズより大きいなら
|
||||
// 分割数を増やして chunk のサイズを試算してみる
|
||||
count++;
|
||||
gpu_power = (unit_size + count - 1) / count;
|
||||
gpu_power = (gpu_power + (MEM_UNIT - 1)) & ~(MEM_UNIT - 1); // MEM_UNITの倍数にする
|
||||
}
|
||||
if (count > 1){
|
||||
*chunk_size = gpu_power;
|
||||
OpenCL_method = 3;
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("gpu cache: limit size = %d, chunk size = %d, split = %d\n", j, gpu_power, count);
|
||||
#endif
|
||||
}
|
||||
/*
|
||||
// 32バイト単位のメモリーアクセスならキャッシュする必要なし?計算速度が半減する・・・
|
||||
} else if ((cache_size & 0x3FFFFFFF) > OpenCL_group_num * 4096){ // 2KB の倍はいるかも?
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("gpu: cache size = %d, read size = %d\n", cache_size & 0x3FFFFFFF, OpenCL_group_num * 2048);
|
||||
#endif
|
||||
OpenCL_method = 1;
|
||||
*/
|
||||
}
|
||||
|
||||
} else if (((cpu_flag & 128) != 0) && (sse_unit == 256)){
|
||||
OpenCL_method = 4; // JIT(SSE2) は bit ごとに上位から 16バイトずつ並ぶ
|
||||
// ローカルのテーブルサイズが異なることに注意
|
||||
// XOR 方式以外は 2KB (4バイト * 256項目 * 2個) 使う
|
||||
// XOR (JIT) は 64バイト (4バイト * 16項目) 使う
|
||||
#ifdef DEBUG_OUTPUT
|
||||
// printf("4 KB cache (16-bytes * 256 work items), use if\n");
|
||||
#endif
|
||||
} else {
|
||||
OpenCL_method = 1; // MMX用のコードは遅いので、キャッシュ最適化する必要が無い
|
||||
}
|
||||
|
||||
// work group 数が必要以上に多い場合は減らす
|
||||
/*
|
||||
if (OpenCL_method == 4){
|
||||
// work item 一個が 16バイトずつ計算する、256個なら work group ごとに 4KB 担当する
|
||||
data_size = unit_size / 4096;
|
||||
} else
|
||||
*/
|
||||
if (OpenCL_method & 2){
|
||||
// work item 一個が 8バイトずつ計算する、256個なら work group ごとに 2KB 担当する
|
||||
data_size = unit_size / 2048;
|
||||
} else {
|
||||
// work item 一個が 4バイトずつ計算する、256個なら work group ごとに 1KB 担当する
|
||||
data_size = unit_size / 1024;
|
||||
}
|
||||
if (OpenCL_group_num > data_size){
|
||||
OpenCL_group_num = data_size;
|
||||
printf("Number of work groups is reduced to %d\n", (int)OpenCL_group_num);
|
||||
}
|
||||
|
||||
// 最大で何ブロック分のメモリー領域を保持できるのか(ここではまだ確保しない)
|
||||
// 後で実際に確保する量はこれよりも少なくなる
|
||||
count = (int)(alloc_max / unit_size); // 確保できるメモリー量から逆算する
|
||||
@@ -469,25 +373,6 @@ int init_OpenCL(int unit_size, int *src_max, int *chunk_size)
|
||||
printf("src buf : %zd KB (%d blocks), possible\n", data_size >> 10, count);
|
||||
#endif
|
||||
|
||||
// 出力先は1ブロック分だけあればいい
|
||||
// CL_MEM_ALLOC_HOST_PTRを使えばpinned memoryになるらしい
|
||||
data_size = unit_size;
|
||||
OpenCL_dst = gfn_clCreateBuffer(OpenCL_context, CL_MEM_WRITE_ONLY | CL_MEM_ALLOC_HOST_PTR, data_size, NULL, &ret);
|
||||
if (ret != CL_SUCCESS)
|
||||
return (ret << 8) | 13;
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("dst buf : %zd KB (%zd Bytes), OK\n", data_size >> 10, data_size);
|
||||
#endif
|
||||
|
||||
// factor は最大個数分 (src_max個)
|
||||
data_size = sizeof(unsigned short) * (*src_max);
|
||||
OpenCL_buf = gfn_clCreateBuffer(OpenCL_context, CL_MEM_READ_ONLY, data_size, NULL, &ret);
|
||||
if (ret != CL_SUCCESS)
|
||||
return (ret << 8) | 14;
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("factor buf : %zd Bytes (%d factors), OK\n", data_size, (*src_max));
|
||||
#endif
|
||||
|
||||
/*
|
||||
// テキスト形式の OpenCL C ソース・コードを読み込む
|
||||
err = 4;
|
||||
@@ -574,7 +459,7 @@ int init_OpenCL(int unit_size, int *src_max, int *chunk_size)
|
||||
FreeResource(glob); // not required ?
|
||||
|
||||
// 定数を指定する
|
||||
wsprintfA(buf, "-D BLK_SIZE=%d -D CHK_SIZE=%d", unit_size / 4, gpu_power / 4);
|
||||
wsprintfA(buf, "-cl-fast-relaxed-math -D BLK_SIZE=%d", unit_size / 4);
|
||||
|
||||
// 使用する OpenCL デバイス用にコンパイルする
|
||||
ret = fn_clBuildProgram(program, 1, &selected_device, buf, NULL, NULL);
|
||||
@@ -588,17 +473,207 @@ int init_OpenCL(int unit_size, int *src_max, int *chunk_size)
|
||||
return (ret << 8) | 21;
|
||||
}
|
||||
|
||||
// 計算方式を選択する
|
||||
if ((((cpu_flag & 0x101) == 1) || ((cpu_flag & 0x110) == 0x10)) && (sse_unit == 32)){
|
||||
int select_method; // SSSE3 & ALTMAP または AVX2 ならデータの並び替え対応版を使う
|
||||
if (OpenCL_method & 0x80000){ // 16-byte and 2 blocks
|
||||
select_method = 12;
|
||||
} else if (OpenCL_method & 0x40000){ // 4-byte and 2 blocks
|
||||
select_method = 10;
|
||||
} else if (OpenCL_method & 0x20000){ // 16-byte
|
||||
select_method = 4;
|
||||
} else if (OpenCL_method & 0x10000){ // 4-byte
|
||||
select_method = 2;
|
||||
} else { // kernel を作って詳細を確かめる
|
||||
size_t item2, item4, item10, item12;
|
||||
cl_kernel kernel2, kernel4, kernel10, kernel12;
|
||||
item2 = item4 = item10 = item12 = 0;
|
||||
// まずは一番重くて速い奴を調べる
|
||||
wsprintfA(buf, "method%d", 12);
|
||||
kernel12 = fn_clCreateKernel(program, buf, &ret);
|
||||
if (ret == CL_SUCCESS){
|
||||
ret = fn_clGetKernelWorkGroupInfo(kernel12, selected_device, CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, sizeof(size_t), &item12, NULL);
|
||||
if (ret == CL_SUCCESS){
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("\nTesting %s\n", buf);
|
||||
printf("PREFERRED_WORK_GROUP_SIZE_MULTIPLE = %zu\n", item12);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
if (item12 >= 32){ // 32以上あれば余裕で動くとみなす
|
||||
select_method = 12;
|
||||
OpenCL_kernel = kernel12;
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("\nSelected method%d\n", select_method);
|
||||
#endif
|
||||
} else { // 他の奴と比較する
|
||||
wsprintfA(buf, "method%d", 2);
|
||||
kernel2 = fn_clCreateKernel(program, buf, &ret);
|
||||
if (ret == CL_SUCCESS){
|
||||
ret = fn_clGetKernelWorkGroupInfo(kernel2, selected_device, CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, sizeof(size_t), &item2, NULL);
|
||||
if (ret == CL_SUCCESS){
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("\nTesting %s\n", buf);
|
||||
printf("PREFERRED_WORK_GROUP_SIZE_MULTIPLE = %zu\n", item2);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
if (item12 >= item2){
|
||||
select_method = 12;
|
||||
OpenCL_kernel = kernel12;
|
||||
ret = fn_clReleaseKernel(kernel2);
|
||||
#ifdef DEBUG_OUTPUT
|
||||
if (ret != CL_SUCCESS)
|
||||
printf("clReleaseKernel : Failed\n");
|
||||
printf("\nSelected method%d\n", select_method);
|
||||
#endif
|
||||
} else {
|
||||
ret = fn_clReleaseKernel(kernel12);
|
||||
#ifdef DEBUG_OUTPUT
|
||||
if (ret != CL_SUCCESS)
|
||||
printf("clReleaseKernel : Failed\n");
|
||||
#endif
|
||||
wsprintfA(buf, "method%d", 10);
|
||||
kernel10 = fn_clCreateKernel(program, buf, &ret);
|
||||
if (ret == CL_SUCCESS){
|
||||
ret = fn_clGetKernelWorkGroupInfo(kernel10, selected_device, CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, sizeof(size_t), &item10, NULL);
|
||||
if (ret == CL_SUCCESS){
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("\nTesting %s\n", buf);
|
||||
printf("PREFERRED_WORK_GROUP_SIZE_MULTIPLE = %zu\n", item10);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
if (item10 >= item2){
|
||||
select_method = 10;
|
||||
OpenCL_kernel = kernel10;
|
||||
ret = fn_clReleaseKernel(kernel2);
|
||||
#ifdef DEBUG_OUTPUT
|
||||
if (ret != CL_SUCCESS)
|
||||
printf("clReleaseKernel : Failed\n");
|
||||
printf("\nSelected method%d\n", select_method);
|
||||
#endif
|
||||
} else {
|
||||
wsprintfA(buf, "method%d", 4);
|
||||
kernel4 = fn_clCreateKernel(program, buf, &ret);
|
||||
if (ret == CL_SUCCESS){
|
||||
ret = fn_clGetKernelWorkGroupInfo(kernel4, selected_device, CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, sizeof(size_t), &item4, NULL);
|
||||
if (ret == CL_SUCCESS){
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("\nTesting %s\n", buf);
|
||||
printf("PREFERRED_WORK_GROUP_SIZE_MULTIPLE = %zu\n", item4);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
if (item4 >= item2){
|
||||
select_method = 4;
|
||||
OpenCL_kernel = kernel4;
|
||||
ret = fn_clReleaseKernel(kernel2);
|
||||
#ifdef DEBUG_OUTPUT
|
||||
if (ret != CL_SUCCESS)
|
||||
printf("clReleaseKernel : Failed\n");
|
||||
printf("\nSelected method%d\n", select_method);
|
||||
#endif
|
||||
} else {
|
||||
select_method = 2;
|
||||
OpenCL_kernel = kernel2;
|
||||
ret = fn_clReleaseKernel(kernel4);
|
||||
#ifdef DEBUG_OUTPUT
|
||||
if (ret != CL_SUCCESS)
|
||||
printf("clReleaseKernel : Failed\n");
|
||||
printf("\nSelected method%d\n", select_method);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
OpenCL_method |= select_method;
|
||||
} else if (((cpu_flag & 128) != 0) && (sse_unit == 256)){
|
||||
OpenCL_method |= 16; // JIT(SSE2) は bit ごとに上位から 16バイトずつ並ぶ
|
||||
// ローカルのテーブルサイズが異なることに注意
|
||||
// XOR 方式以外は 2KB (4バイト * 256項目 * 2個) 使う
|
||||
// XOR (JIT) は 64バイト (4バイト * 16項目) 使う
|
||||
} else {
|
||||
int select_method; // 並び替えられてないデータ用
|
||||
if (OpenCL_method & 0x40000){ // 4-byte and 2 blocks
|
||||
select_method = 9;
|
||||
} else if (OpenCL_method & 0x10000){ // 4-byte
|
||||
select_method = 1;
|
||||
} else { // kernel を作って詳細を確かめる
|
||||
size_t item1, item9;
|
||||
cl_kernel kernel1, kernel9;
|
||||
item1 = item9 = 0;
|
||||
// まずは一番重くて速い奴を調べる
|
||||
wsprintfA(buf, "method%d", 9);
|
||||
kernel9 = fn_clCreateKernel(program, buf, &ret);
|
||||
if (ret == CL_SUCCESS){
|
||||
ret = fn_clGetKernelWorkGroupInfo(kernel9, selected_device, CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, sizeof(size_t), &item9, NULL);
|
||||
if (ret == CL_SUCCESS){
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("\nTesting %s\n", buf);
|
||||
printf("PREFERRED_WORK_GROUP_SIZE_MULTIPLE = %zu\n", item9);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
if (item9 >= 32){ // 32以上あれば余裕で動くとみなす
|
||||
select_method = 9;
|
||||
OpenCL_kernel = kernel9;
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("\nSelected method%d\n", select_method);
|
||||
#endif
|
||||
} else { // 他の奴と比較する
|
||||
wsprintfA(buf, "method%d", 1);
|
||||
kernel1 = fn_clCreateKernel(program, buf, &ret);
|
||||
if (ret == CL_SUCCESS){
|
||||
ret = fn_clGetKernelWorkGroupInfo(kernel1, selected_device, CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, sizeof(size_t), &item1, NULL);
|
||||
if (ret == CL_SUCCESS){
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("\nTesting %s\n", buf);
|
||||
printf("PREFERRED_WORK_GROUP_SIZE_MULTIPLE = %zu\n", item1);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
if (item9 >= item1){
|
||||
select_method = 9;
|
||||
OpenCL_kernel = kernel9;
|
||||
ret = fn_clReleaseKernel(kernel1);
|
||||
#ifdef DEBUG_OUTPUT
|
||||
if (ret != CL_SUCCESS)
|
||||
printf("clReleaseKernel : Failed\n");
|
||||
printf("\nSelected method%d\n", select_method);
|
||||
#endif
|
||||
} else {
|
||||
select_method = 1;
|
||||
OpenCL_kernel = kernel1;
|
||||
ret = fn_clReleaseKernel(kernel9);
|
||||
#ifdef DEBUG_OUTPUT
|
||||
if (ret != CL_SUCCESS)
|
||||
printf("clReleaseKernel : Failed\n");
|
||||
printf("\nSelected method%d\n", select_method);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
OpenCL_method |= select_method;
|
||||
}
|
||||
|
||||
// カーネル関数を抽出する
|
||||
wsprintfA(buf, "method%d", OpenCL_method & 7);
|
||||
if (OpenCL_kernel == NULL){
|
||||
wsprintfA(buf, "method%d", OpenCL_method & 31);
|
||||
OpenCL_kernel = fn_clCreateKernel(program, buf, &ret);
|
||||
if (ret != CL_SUCCESS)
|
||||
return (ret << 8) | 22;
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("CreateKernel : %s\n", buf);
|
||||
ret = fn_clGetKernelWorkGroupInfo(OpenCL_kernel, selected_device, CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, sizeof(size_t), &data_size, NULL);
|
||||
if (ret == CL_SUCCESS)
|
||||
printf("PREFERRED_WORK_GROUP_SIZE_MULTIPLE = %zu\n", data_size);
|
||||
#endif
|
||||
}
|
||||
|
||||
// カーネルが実行できる work item 数を調べる
|
||||
ret = fn_clGetKernelWorkGroupInfo(OpenCL_kernel, NULL, CL_KERNEL_WORK_GROUP_SIZE, sizeof(size_t), &data_size, NULL);
|
||||
ret = fn_clGetKernelWorkGroupInfo(OpenCL_kernel, selected_device, CL_KERNEL_WORK_GROUP_SIZE, sizeof(size_t), &data_size, NULL);
|
||||
if ((ret == CL_SUCCESS) && (data_size < 256)){ // 最低でも 256 以上は必要
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("KERNEL_WORK_GROUP_SIZE = %zd\n", data_size);
|
||||
@@ -618,6 +693,62 @@ int init_OpenCL(int unit_size, int *src_max, int *chunk_size)
|
||||
fn_clUnloadCompiler();
|
||||
}
|
||||
|
||||
// work group 数が必要以上に多い場合は減らす
|
||||
if (OpenCL_method & 4){
|
||||
// work item 一個が 32バイトずつ計算する、256個なら work group ごとに 8KB 担当する
|
||||
data_size = unit_size / 8192;
|
||||
} else if (OpenCL_method & 2){
|
||||
// work item 一個が 8バイトずつ計算する、256個なら work group ごとに 2KB 担当する
|
||||
data_size = unit_size / 2048;
|
||||
} else {
|
||||
// work item 一個が 4バイトずつ計算する、256個なら work group ごとに 1KB 担当する
|
||||
data_size = unit_size / 1024;
|
||||
}
|
||||
if (OpenCL_group_num > data_size){
|
||||
OpenCL_group_num = data_size;
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("Number of work groups is reduced to %zd\n", OpenCL_group_num);
|
||||
#endif
|
||||
}
|
||||
|
||||
// データへのアクセス方法をデバイスによって変える
|
||||
if (OpenCL_method & 0x200000){
|
||||
OpenCL_method |= 32;
|
||||
} else if ((OpenCL_method & 0x100000) == 0){
|
||||
if (unified_memory){
|
||||
OpenCL_method |= 32; // Integrated GPU なら CL_MEM_USE_HOST_PTR を使う
|
||||
} else { // Discrete GPU でも Nvidia のは動作を変える
|
||||
ret = fn_clGetDeviceInfo(selected_device, CL_DEVICE_VERSION, sizeof(buf), buf, NULL);
|
||||
if (ret == CL_SUCCESS){
|
||||
if (strstr(buf, "CUDA") != NULL)
|
||||
OpenCL_method |= 32; // NVIDIA GPU なら CL_MEM_USE_HOST_PTR を使う
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 出力先は1ブロック分だけあればいい
|
||||
// CL_MEM_ALLOC_HOST_PTRを使えばpinned memoryになるらしい
|
||||
data_size = unit_size;
|
||||
if (OpenCL_method & 8)
|
||||
data_size *= 2; // 2ブロックずつ計算できるように、2倍確保しておく
|
||||
OpenCL_dst = gfn_clCreateBuffer(OpenCL_context, CL_MEM_ALLOC_HOST_PTR, data_size, NULL, &ret);
|
||||
if (ret != CL_SUCCESS)
|
||||
return (ret << 8) | 13;
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("dst buf : %zd KB (%zd Bytes), OK\n", data_size >> 10, data_size);
|
||||
#endif
|
||||
|
||||
// factor は最大個数分 (src_max個)
|
||||
data_size = sizeof(unsigned short) * (*src_max);
|
||||
if (OpenCL_method & 8)
|
||||
data_size *= 2; // 2ブロックずつ計算できるように、2倍確保しておく
|
||||
OpenCL_buf = gfn_clCreateBuffer(OpenCL_context, CL_MEM_READ_ONLY, data_size, NULL, &ret);
|
||||
if (ret != CL_SUCCESS)
|
||||
return (ret << 8) | 14;
|
||||
#ifdef DEBUG_OUTPUT
|
||||
printf("factor buf : %zd Bytes (%d factors), OK\n", data_size, (*src_max));
|
||||
#endif
|
||||
|
||||
// カーネル引数を指定する
|
||||
ret = gfn_clSetKernelArg(OpenCL_kernel, 1, sizeof(cl_mem), &OpenCL_dst);
|
||||
if (ret != CL_SUCCESS)
|
||||
@@ -625,13 +756,12 @@ int init_OpenCL(int unit_size, int *src_max, int *chunk_size)
|
||||
ret = gfn_clSetKernelArg(OpenCL_kernel, 2, sizeof(cl_mem), &OpenCL_buf);
|
||||
if (ret != CL_SUCCESS)
|
||||
return (ret << 8) | 102;
|
||||
if (ret != CL_SUCCESS)
|
||||
return (ret << 8) | 103;
|
||||
|
||||
#ifdef DEBUG_OUTPUT
|
||||
// ワークアイテム数
|
||||
printf("\nMax number of work items = %zd (256 * %zd)\n", OpenCL_group_num * 256, OpenCL_group_num);
|
||||
#endif
|
||||
OpenCL_method &= 0xFF; // 最後に選択設定を消去する
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -743,16 +873,24 @@ void info_OpenCL(char *buf, int buf_size)
|
||||
// ソース・ブロックをデバイス側にコピーする
|
||||
int gpu_copy_blocks(
|
||||
unsigned char *data, // ブロックのバッファー (境界は 4096にすること)
|
||||
int unit_size, // 4096の倍数にすること
|
||||
unsigned int unit_size, // 4096の倍数にすること
|
||||
int src_num) // 何ブロックをコピーするのか
|
||||
{
|
||||
size_t data_size;
|
||||
cl_int ret;
|
||||
cl_mem_flags flags;
|
||||
|
||||
// Integrated GPU と Discrete GPU の違いに関係なく、使う分だけ毎回メモリー領域を確保する
|
||||
data_size = (size_t)unit_size * src_num;
|
||||
// Intel GPUならZeroCopyできる、GeForce GPUでもメモリー消費量が少なくてコピーが速い
|
||||
OpenCL_src = gfn_clCreateBuffer(OpenCL_context, CL_MEM_READ_ONLY | CL_MEM_USE_HOST_PTR, data_size, data, &ret);
|
||||
if (OpenCL_method & 32){ // AMD's APU や Integrated GPU なら ZeroCopy する
|
||||
// 実際に比較してみると GeForce GPU でもメモリー消費量が少なくてコピーが速い
|
||||
// NVIDIA GPU は CL_MEM_USE_HOST_PTR でも VRAM 上にキャッシュするので速いらしい
|
||||
flags = CL_MEM_READ_ONLY | CL_MEM_USE_HOST_PTR;
|
||||
} else { // Discrete GPU ならデータを VRAM にコピーする
|
||||
// AMD GPU は明示的にコピーするよう指定しないといけない
|
||||
flags = CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR;
|
||||
}
|
||||
OpenCL_src = gfn_clCreateBuffer(OpenCL_context, flags, data_size, data, &ret);
|
||||
if (ret != CL_SUCCESS)
|
||||
return (ret << 8) | 1;
|
||||
#ifdef DEBUG_OUTPUT
|
||||
@@ -771,17 +909,31 @@ int gpu_copy_blocks(
|
||||
int gpu_multiply_blocks(
|
||||
int src_num, // Number of multiplying source blocks
|
||||
unsigned short *mat, // Matrix of numbers to multiply by
|
||||
unsigned short *mat2, // Set to calculate 2 blocks at once
|
||||
unsigned char *buf, // Products go here
|
||||
int len) // Byte length
|
||||
unsigned int len) // Byte length
|
||||
{
|
||||
unsigned __int64 *vram, *src, *dst;
|
||||
size_t global_size, local_size;
|
||||
cl_int ret;
|
||||
|
||||
// 倍率の配列をデバイス側に書き込む
|
||||
if (mat2 == NULL){ // 1ブロック分だけコピーする
|
||||
ret = gfn_clEnqueueWriteBuffer(OpenCL_command, OpenCL_buf, CL_FALSE, 0, sizeof(short) * src_num, mat, 0, NULL, NULL);
|
||||
} else { // 2ブロックずつ計算する場合は、配列のサイズも2倍になる
|
||||
if ((size_t)mat2 == 1){ // アドレスが 1 になることはあり得ないので、識別できる
|
||||
ret = gfn_clEnqueueWriteBuffer(OpenCL_command, OpenCL_buf, CL_FALSE, 0, sizeof(short) * src_num * 2, mat, 0, NULL, NULL);
|
||||
} else { // 2回コピーする
|
||||
size_t data_size = sizeof(short) * src_num;
|
||||
ret = gfn_clEnqueueWriteBuffer(OpenCL_command, OpenCL_buf, CL_FALSE, 0, data_size, mat, 0, NULL, NULL);
|
||||
if (ret != CL_SUCCESS)
|
||||
return (ret << 8) | 10;
|
||||
// もう一つの配列は違う場所からコピーする
|
||||
ret = gfn_clEnqueueWriteBuffer(OpenCL_command, OpenCL_buf, CL_FALSE, data_size, data_size, mat2, 0, NULL, NULL);
|
||||
}
|
||||
}
|
||||
if (ret != CL_SUCCESS)
|
||||
return (ret << 8) | 11;
|
||||
|
||||
// 引数を指定する
|
||||
ret = gfn_clSetKernelArg(OpenCL_kernel, 3, sizeof(int), &src_num);
|
||||
@@ -791,15 +943,15 @@ int gpu_multiply_blocks(
|
||||
// カーネル並列実行
|
||||
local_size = 256; // テーブルやキャッシュのため、work item 数は 256 に固定する
|
||||
global_size = OpenCL_group_num * 256;
|
||||
//printf("group num = %d, global size = %d, local size = 256 \n", OpenCL_group_num, global_size);
|
||||
//printf("group num = %d, global size = %d, local size = %d \n", OpenCL_group_num, global_size, local_size);
|
||||
ret = gfn_clEnqueueNDRangeKernel(OpenCL_command, OpenCL_kernel, 1, NULL, &global_size, &local_size, 0, NULL, NULL);
|
||||
if (ret != CL_SUCCESS)
|
||||
return (ret << 8) | 11;
|
||||
return (ret << 8) | 12;
|
||||
|
||||
// 出力内容をホスト側に反映させる
|
||||
vram = gfn_clEnqueueMapBuffer(OpenCL_command, OpenCL_dst, CL_TRUE, CL_MAP_READ, 0, len, 0, NULL, NULL, &ret);
|
||||
if (ret != CL_SUCCESS)
|
||||
return (ret << 8) | 12;
|
||||
return (ret << 8) | 13;
|
||||
|
||||
// 8バイトごとに XOR する (SSE2 で XOR しても速くならず)
|
||||
src = vram;
|
||||
@@ -814,7 +966,7 @@ int gpu_multiply_blocks(
|
||||
// ホスト側でデータを変更しなくても、clEnqueueMapBufferと対で呼び出さないといけない
|
||||
ret = gfn_clEnqueueUnmapMemObject(OpenCL_command, OpenCL_dst, vram, 0, NULL, NULL);
|
||||
if (ret != CL_SUCCESS)
|
||||
return (ret << 8) | 13;
|
||||
return (ret << 8) | 14;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -827,12 +979,12 @@ int gpu_finish(void)
|
||||
// 全ての処理が終わるのを待つ
|
||||
ret = gfn_clFinish(OpenCL_command);
|
||||
if (ret != CL_SUCCESS)
|
||||
return (ret << 8) | 20;
|
||||
return (ret << 8) | 30;
|
||||
|
||||
if (OpenCL_src != NULL){ // 確保されてる場合は解除する
|
||||
ret = gfn_clReleaseMemObject(OpenCL_src);
|
||||
if (ret != CL_SUCCESS)
|
||||
return (ret << 8) | 21;
|
||||
return (ret << 8) | 31;
|
||||
OpenCL_src = NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -10,20 +10,21 @@ extern "C" {
|
||||
|
||||
extern int OpenCL_method;
|
||||
|
||||
int init_OpenCL(int unit_size, int *src_max, int *chunk_size);
|
||||
int init_OpenCL(unsigned int unit_size, int *src_max);
|
||||
int free_OpenCL(void);
|
||||
void info_OpenCL(char *buf, int buf_size);
|
||||
|
||||
int gpu_copy_blocks(
|
||||
unsigned char *data,
|
||||
int unit_size,
|
||||
int src_end);
|
||||
unsigned int unit_size,
|
||||
int src_num);
|
||||
|
||||
int gpu_multiply_blocks(
|
||||
int src_num, // Number of multiplying source blocks
|
||||
unsigned short *mat, // Matrix of numbers to multiply by
|
||||
unsigned short *mat2, // Set to calculate 2 blocks at once
|
||||
unsigned char *buf, // Products go here
|
||||
int len); // Byte length
|
||||
unsigned int len); // Byte length
|
||||
|
||||
int gpu_finish(void);
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// list.c
|
||||
// Copyright : 2022-10-14 Yutaka Sawada
|
||||
// Copyright : 2024-11-30 Yutaka Sawada
|
||||
// License : GPL
|
||||
|
||||
#ifndef _UNICODE
|
||||
@@ -9,7 +9,7 @@
|
||||
#define UNICODE
|
||||
#endif
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0600 // Windows Vista or later
|
||||
#define _WIN32_WINNT 0x0601 // Windows 7 or later
|
||||
#endif
|
||||
|
||||
#include <process.h>
|
||||
@@ -26,6 +26,11 @@
|
||||
|
||||
//#define TIMER // 実験用
|
||||
|
||||
#ifdef TIMER
|
||||
#include <time.h>
|
||||
static double time_sec, time_speed;
|
||||
#endif
|
||||
|
||||
// recovery set のファイルのハッシュ値を調べる (空のファイルは除く)
|
||||
// 0x00 = ファイルが存在して完全である
|
||||
// 0x01 = ファイルが存在しない
|
||||
@@ -296,7 +301,7 @@ int check_file_complete(
|
||||
{
|
||||
int i, rv;
|
||||
#ifdef TIMER
|
||||
unsigned int time_start = GetTickCount();
|
||||
clock_t time_start = clock();
|
||||
#endif
|
||||
|
||||
printf("\nVerifying Input File :\n");
|
||||
@@ -332,14 +337,14 @@ unsigned int time_start = GetTickCount();
|
||||
}
|
||||
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount() - time_start;
|
||||
printf("\n hash %d.%03d sec", time_start / 1000, time_start % 1000);
|
||||
if (time_start > 0){
|
||||
time_start = (int)((total_file_size * 125) / ((__int64)time_start * 131072));
|
||||
printf(", %d MB/s\n", time_start);
|
||||
time_start = clock() - time_start;
|
||||
time_sec = (double)time_start / CLOCKS_PER_SEC;
|
||||
if (time_sec > 0){
|
||||
time_speed = (double)total_file_size / (time_sec * 1048576);
|
||||
} else {
|
||||
printf("\n");
|
||||
time_speed = 0;
|
||||
}
|
||||
printf("\n hash %.3f sec, %.0f MB/s\n", time_sec, time_speed);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
@@ -348,7 +353,7 @@ if (time_start > 0){
|
||||
// SSD 上で複数ファイルを同時に検査する
|
||||
|
||||
// MAX_MULTI_READ の2倍ぐらいにする?
|
||||
#define MAX_READ_NUM 10
|
||||
#define MAX_READ_NUM 12
|
||||
|
||||
int check_file_complete_multi(
|
||||
char *ascii_buf,
|
||||
@@ -364,17 +369,15 @@ int check_file_complete_multi(
|
||||
HANDLE hSub[MAX_READ_NUM];
|
||||
FILE_CHECK_TH th[MAX_READ_NUM];
|
||||
#ifdef TIMER
|
||||
unsigned int time_start = GetTickCount();
|
||||
clock_t time_start = clock();
|
||||
#endif
|
||||
|
||||
memset(hSub, 0, sizeof(HANDLE) * MAX_READ_NUM);
|
||||
// Core数に応じてスレッド数を増やす
|
||||
if ((memory_use & 32) != 0){ // NVMe SSD
|
||||
if (cpu_num >= 8){ // 8 ~ 16 Cores
|
||||
multi_read = 4;
|
||||
} else { // 3 Cores + Hyper-threading, or 4 ~ 7 Cores
|
||||
multi_read = 3;
|
||||
}
|
||||
multi_read = (cpu_num + 2) / 3 + 1; // 3=2, 4~6=3, 7~9=4, 10~12=5, 13~=6
|
||||
if (multi_read > MAX_READ_NUM / 2)
|
||||
multi_read = MAX_READ_NUM / 2;
|
||||
} else { // SATA SSD
|
||||
multi_read = 2;
|
||||
}
|
||||
@@ -632,14 +635,14 @@ unsigned int time_start = GetTickCount();
|
||||
}
|
||||
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount() - time_start;
|
||||
printf("\n hash %d.%03d sec", time_start / 1000, time_start % 1000);
|
||||
if (time_start > 0){
|
||||
time_start = (int)((total_file_size * 125) / ((__int64)time_start * 131072));
|
||||
printf(", %d MB/s\n", time_start);
|
||||
time_start = clock() - time_start;
|
||||
time_sec = (double)time_start / CLOCKS_PER_SEC;
|
||||
if (time_sec > 0){
|
||||
time_speed = (double)total_file_size / (time_sec * 1048576);
|
||||
} else {
|
||||
printf("\n");
|
||||
time_speed = 0;
|
||||
}
|
||||
printf("\n hash %.3f sec, %.0f MB/s\n", time_sec, time_speed);
|
||||
#endif
|
||||
|
||||
error_end:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// md5_crc.c
|
||||
// Copyright : 2022-10-01 Yutaka Sawada
|
||||
// Copyright : 2024-11-30 Yutaka Sawada
|
||||
// License : GPL
|
||||
|
||||
#ifndef _UNICODE
|
||||
@@ -9,7 +9,7 @@
|
||||
#define UNICODE
|
||||
#endif
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0600 // Windows Vista or later
|
||||
#define _WIN32_WINNT 0x0601 // Windows 7 or later
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
@@ -21,7 +21,6 @@
|
||||
#include "phmd5.h"
|
||||
#include "md5_crc.h"
|
||||
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
// バイト配列の MD5 ハッシュ値を求める
|
||||
@@ -200,10 +199,14 @@ int file_md5_crc32_block(
|
||||
//#define TIMER // 実験用
|
||||
|
||||
#ifdef TIMER
|
||||
static unsigned int time_start, time1_start;
|
||||
static unsigned int time_total = 0, time2_total = 0, time3_total = 0;
|
||||
#include <time.h>
|
||||
static double time_sec, time_speed;
|
||||
static clock_t time_start, time1_start;
|
||||
static clock_t time_total = 0, time2_total = 0, time3_total = 0;
|
||||
#endif
|
||||
|
||||
#define MAX_BUF_SIZE 2097152 // ヒープ領域を使う場合の最大サイズ
|
||||
|
||||
// ファイルのハッシュ値と各スライスのチェックサムを同時に計算する
|
||||
int file_hash_crc(
|
||||
wchar_t *file_name, // ハッシュ値を求めるファイル
|
||||
@@ -222,7 +225,7 @@ int file_hash_crc(
|
||||
HANDLE hFile;
|
||||
OVERLAPPED ol;
|
||||
#ifdef TIMER
|
||||
time1_start = GetTickCount();
|
||||
time1_start = clock();
|
||||
#endif
|
||||
|
||||
// ソース・ファイルを開く
|
||||
@@ -249,11 +252,11 @@ time1_start = GetTickCount();
|
||||
if (file_left < IO_SIZE)
|
||||
read_size = (unsigned int)file_left;
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount();
|
||||
time_start = clock();
|
||||
#endif
|
||||
off = ReadFile(hFile, buf1, read_size, NULL, &ol);
|
||||
#ifdef TIMER
|
||||
time2_total += GetTickCount() - time_start;
|
||||
time2_total += clock() - time_start;
|
||||
#endif
|
||||
if ((off == 0) && (GetLastError() != ERROR_IO_PENDING)){
|
||||
print_win32_err();
|
||||
@@ -279,11 +282,11 @@ time2_total += GetTickCount() - time_start;
|
||||
ol.OffsetHigh = (unsigned int)(file_off >> 32);
|
||||
file_off += IO_SIZE;
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount();
|
||||
time_start = clock();
|
||||
#endif
|
||||
off = ReadFile(hFile, buf, read_size, NULL, &ol);
|
||||
#ifdef TIMER
|
||||
time2_total += GetTickCount() - time_start;
|
||||
time2_total += clock() - time_start;
|
||||
#endif
|
||||
if ((off == 0) && (GetLastError() != ERROR_IO_PENDING)){
|
||||
print_win32_err();
|
||||
@@ -299,7 +302,7 @@ time2_total += GetTickCount() - time_start;
|
||||
}
|
||||
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount();
|
||||
time_start = clock();
|
||||
#endif
|
||||
off = 0; // チェックサム計算
|
||||
if (block_left > 0){ // 前回足りなかった分を追加する
|
||||
@@ -336,7 +339,7 @@ time_start = GetTickCount();
|
||||
}
|
||||
}
|
||||
#ifdef TIMER
|
||||
time3_total += GetTickCount() - time_start;
|
||||
time3_total += clock() - time_start;
|
||||
#endif
|
||||
|
||||
// 経過表示
|
||||
@@ -367,16 +370,17 @@ error_end:
|
||||
CloseHandle(ol.hEvent);
|
||||
|
||||
#ifdef TIMER
|
||||
time_total += GetTickCount() - time1_start;
|
||||
time_total += clock() - time1_start;
|
||||
if (*prog_now == total_file_size){
|
||||
printf("\nread %d.%03d sec\n", time2_total / 1000, time2_total % 1000);
|
||||
printf("main %d.%03d sec\n", time3_total / 1000, time3_total % 1000);
|
||||
if (time_total > 0){
|
||||
time_start = (int)((total_file_size * 125) / ((__int64)time_total * 131072));
|
||||
printf("\nread %.3f sec\n", (double)time2_total / CLOCKS_PER_SEC);
|
||||
printf("main %.3f sec\n", (double)time3_total / CLOCKS_PER_SEC);
|
||||
time_sec = (double)time_total / CLOCKS_PER_SEC;
|
||||
if (time_sec > 0){
|
||||
time_speed = (double)total_file_size / (time_sec * 1048576);
|
||||
} else {
|
||||
time_start = 0;
|
||||
time_speed = 0;
|
||||
}
|
||||
printf("total %d.%03d sec, %d MB/s\n", time_total / 1000, time_total % 1000, time_start);
|
||||
printf("total %.3f sec, %.0f MB/s\n", time_sec, time_speed);
|
||||
}
|
||||
#endif
|
||||
return err;
|
||||
@@ -401,7 +405,7 @@ int file_hash_crc(
|
||||
HANDLE hFile;
|
||||
OVERLAPPED ol;
|
||||
#ifdef TIMER
|
||||
time1_start = GetTickCount();
|
||||
time1_start = clock();
|
||||
#endif
|
||||
|
||||
// ソース・ファイルを開く
|
||||
@@ -440,11 +444,11 @@ error_retry_read:
|
||||
if (file_left < IO_SIZE)
|
||||
read_size = (unsigned int)file_left;
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount();
|
||||
time_start = clock();
|
||||
#endif
|
||||
off = ReadFile(hFile, buf1, read_size, NULL, &ol);
|
||||
#ifdef TIMER
|
||||
time2_total += GetTickCount() - time_start;
|
||||
time2_total += clock() - time_start;
|
||||
#endif
|
||||
if ((off == 0) && (GetLastError() != ERROR_IO_PENDING)){
|
||||
print_win32_err();
|
||||
@@ -534,11 +538,11 @@ error_retry_pause:
|
||||
ol.OffsetHigh = (unsigned int)(file_off >> 32);
|
||||
file_off += IO_SIZE;
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount();
|
||||
time_start = clock();
|
||||
#endif
|
||||
off = ReadFile(hFile, buf, read_size, NULL, &ol);
|
||||
#ifdef TIMER
|
||||
time2_total += GetTickCount() - time_start;
|
||||
time2_total += clock() - time_start;
|
||||
#endif
|
||||
if ((off == 0) && (GetLastError() != ERROR_IO_PENDING)){
|
||||
print_win32_err();
|
||||
@@ -555,7 +559,7 @@ time2_total += GetTickCount() - time_start;
|
||||
}
|
||||
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount();
|
||||
time_start = clock();
|
||||
#endif
|
||||
off = 0; // チェックサム計算
|
||||
if (block_left > 0){ // 前回足りなかった分を追加する
|
||||
@@ -592,7 +596,7 @@ time_start = GetTickCount();
|
||||
}
|
||||
}
|
||||
#ifdef TIMER
|
||||
time3_total += GetTickCount() - time_start;
|
||||
time3_total += clock() - time_start;
|
||||
#endif
|
||||
|
||||
// 経過表示
|
||||
@@ -623,16 +627,17 @@ error_end:
|
||||
CloseHandle(ol.hEvent);
|
||||
|
||||
#ifdef TIMER
|
||||
time_total += GetTickCount() - time1_start;
|
||||
time_total += clock() - time1_start;
|
||||
if (*prog_now == total_file_size){
|
||||
printf("\nread %d.%03d sec\n", time2_total / 1000, time2_total % 1000);
|
||||
printf("main %d.%03d sec\n", time3_total / 1000, time3_total % 1000);
|
||||
if (time_total > 0){
|
||||
time_start = (int)((total_file_size * 125) / ((__int64)time_total * 131072));
|
||||
printf("\nread %.3f sec\n", (double)time2_total / CLOCKS_PER_SEC);
|
||||
printf("main %.3f sec\n", (double)time3_total / CLOCKS_PER_SEC);
|
||||
time_sec = (double)time_total / CLOCKS_PER_SEC;
|
||||
if (time_sec > 0){
|
||||
time_speed = (double)total_file_size / (time_sec * 1048576);
|
||||
} else {
|
||||
time_start = 0;
|
||||
time_speed = 0;
|
||||
}
|
||||
printf("total %d.%03d sec, %d MB/s\n", time_total / 1000, time_total % 1000, time_start);
|
||||
printf("total %.3f sec, %.0f MB/s\n", time_sec, time_speed);
|
||||
}
|
||||
#endif
|
||||
return err;
|
||||
@@ -658,7 +663,7 @@ int file_hash_crc(
|
||||
HANDLE hFile;
|
||||
OVERLAPPED ol;
|
||||
#ifdef TIMER
|
||||
time1_start = GetTickCount();
|
||||
time1_start = clock();
|
||||
#endif
|
||||
|
||||
// ソース・ファイルを開く
|
||||
@@ -671,8 +676,8 @@ time1_start = GetTickCount();
|
||||
}
|
||||
|
||||
// バッファー・サイズが大きいのでヒープ領域を使う
|
||||
for (io_size = IO_SIZE; io_size < 1048576; io_size += IO_SIZE){ // 1 MB までにする
|
||||
if ((io_size + IO_SIZE > (cpu_cache << 17)) || ((__int64)(io_size + IO_SIZE) * 4 > file_left))
|
||||
for (io_size = IO_SIZE; io_size <= MAX_BUF_SIZE; io_size += IO_SIZE){ // IO_SIZE の倍数にする
|
||||
if ((io_size + IO_SIZE > (cpu_cache & 0xFFFF0000)) || ((__int64)(io_size + IO_SIZE) * 4 > file_left))
|
||||
break;
|
||||
}
|
||||
buf1 = _aligned_malloc(io_size * 2, 64);
|
||||
@@ -697,11 +702,11 @@ time1_start = GetTickCount();
|
||||
if (file_left < io_size)
|
||||
read_size = (unsigned int)file_left;
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount();
|
||||
time_start = clock();
|
||||
#endif
|
||||
off = ReadFile(hFile, buf1, read_size, NULL, &ol);
|
||||
#ifdef TIMER
|
||||
time2_total += GetTickCount() - time_start;
|
||||
time2_total += clock() - time_start;
|
||||
#endif
|
||||
if ((off == 0) && (GetLastError() != ERROR_IO_PENDING)){
|
||||
print_win32_err();
|
||||
@@ -727,11 +732,11 @@ time2_total += GetTickCount() - time_start;
|
||||
ol.OffsetHigh = (unsigned int)(file_off >> 32);
|
||||
file_off += io_size;
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount();
|
||||
time_start = clock();
|
||||
#endif
|
||||
off = ReadFile(hFile, buf, read_size, NULL, &ol);
|
||||
#ifdef TIMER
|
||||
time2_total += GetTickCount() - time_start;
|
||||
time2_total += clock() - time_start;
|
||||
#endif
|
||||
if ((off == 0) && (GetLastError() != ERROR_IO_PENDING)){
|
||||
print_win32_err();
|
||||
@@ -747,7 +752,7 @@ time2_total += GetTickCount() - time_start;
|
||||
}
|
||||
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount();
|
||||
time_start = clock();
|
||||
#endif
|
||||
off = 0; // チェックサム計算
|
||||
if (block_left > 0){ // 前回足りなかった分を追加する
|
||||
@@ -784,7 +789,7 @@ time_start = GetTickCount();
|
||||
}
|
||||
}
|
||||
#ifdef TIMER
|
||||
time3_total += GetTickCount() - time_start;
|
||||
time3_total += clock() - time_start;
|
||||
#endif
|
||||
|
||||
// 経過表示
|
||||
@@ -817,16 +822,17 @@ error_end:
|
||||
_aligned_free(buf1);
|
||||
|
||||
#ifdef TIMER
|
||||
time_total += GetTickCount() - time1_start;
|
||||
time_total += clock() - time1_start;
|
||||
if (*prog_now == total_file_size){
|
||||
printf("\nread %d.%03d sec\n", time2_total / 1000, time2_total % 1000);
|
||||
printf("main %d.%03d sec\n", time3_total / 1000, time3_total % 1000);
|
||||
if (time_total > 0){
|
||||
time_start = (int)((total_file_size * 125) / ((__int64)time_total * 131072));
|
||||
printf("\nread %.3f sec\n", (double)time2_total / CLOCKS_PER_SEC);
|
||||
printf("main %.3f sec\n", (double)time3_total / CLOCKS_PER_SEC);
|
||||
time_sec = (double)time_total / CLOCKS_PER_SEC;
|
||||
if (time_sec > 0){
|
||||
time_speed = (double)total_file_size / (time_sec * 1048576);
|
||||
} else {
|
||||
time_start = 0;
|
||||
time_speed = 0;
|
||||
}
|
||||
printf("total %d.%03d sec, %d MB/s\n", time_total / 1000, time_total % 1000, time_start);
|
||||
printf("total %.3f sec, %.0f MB/s\n", time_sec, time_speed);
|
||||
}
|
||||
#endif
|
||||
return err;
|
||||
@@ -866,8 +872,8 @@ DWORD WINAPI file_hash_crc2(LPVOID lpParameter)
|
||||
|
||||
// バッファー・サイズが大きいのでヒープ領域を使う
|
||||
prog_tick = 1;
|
||||
for (io_size = IO_SIZE; io_size < 1048576; io_size += IO_SIZE){ // IO_SIZE の倍数で 1 MB までにする
|
||||
if ((io_size + IO_SIZE > (cpu_cache << 17)) || ((__int64)(io_size + IO_SIZE) * 4 > file_left))
|
||||
for (io_size = IO_SIZE; io_size <= MAX_BUF_SIZE; io_size += IO_SIZE){ // IO_SIZE の倍数にする
|
||||
if ((io_size + IO_SIZE > (cpu_cache & 0xFFFF0000)) || ((__int64)(io_size + IO_SIZE) * 4 > file_left))
|
||||
break;
|
||||
prog_tick++;
|
||||
}
|
||||
@@ -1036,7 +1042,7 @@ int file_hash_check(
|
||||
PHMD5 hash_ctx, block_ctx;
|
||||
OVERLAPPED ol;
|
||||
#ifdef TIMER
|
||||
time1_start = GetTickCount();
|
||||
time1_start = clock();
|
||||
#endif
|
||||
|
||||
prog_last = -1; // 検証中のファイル名を毎回表示する
|
||||
@@ -1060,11 +1066,11 @@ time1_start = GetTickCount();
|
||||
file_left = file_size - 16384; // 本来のファイル・サイズまでしか検査しない
|
||||
}
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount();
|
||||
time_start = clock();
|
||||
#endif
|
||||
off = ReadFile(hFile, buf, len, NULL, &ol);
|
||||
#ifdef TIMER
|
||||
time2_total += GetTickCount() - time_start;
|
||||
time2_total += clock() - time_start;
|
||||
#endif
|
||||
if ((off == 0) && (GetLastError() != ERROR_IO_PENDING)){
|
||||
print_win32_err();
|
||||
@@ -1139,11 +1145,11 @@ time2_total += GetTickCount() - time_start;
|
||||
if (file_left < IO_SIZE)
|
||||
read_size = (unsigned int)file_left;
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount();
|
||||
time_start = clock();
|
||||
#endif
|
||||
off = ReadFile(hFile, buf1, read_size, NULL, &ol);
|
||||
#ifdef TIMER
|
||||
time2_total += GetTickCount() - time_start;
|
||||
time2_total += clock() - time_start;
|
||||
#endif
|
||||
if ((off == 0) && (GetLastError() != ERROR_IO_PENDING)){
|
||||
print_win32_err();
|
||||
@@ -1166,11 +1172,11 @@ time2_total += GetTickCount() - time_start;
|
||||
ol.OffsetHigh = (unsigned int)(file_off >> 32);
|
||||
file_off += IO_SIZE;
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount();
|
||||
time_start = clock();
|
||||
#endif
|
||||
off = ReadFile(hFile, buf, read_size, NULL, &ol);
|
||||
#ifdef TIMER
|
||||
time2_total += GetTickCount() - time_start;
|
||||
time2_total += clock() - time_start;
|
||||
#endif
|
||||
if ((off == 0) && (GetLastError() != ERROR_IO_PENDING)){
|
||||
print_win32_err();
|
||||
@@ -1185,7 +1191,7 @@ time2_total += GetTickCount() - time_start;
|
||||
}
|
||||
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount();
|
||||
time_start = clock();
|
||||
#endif
|
||||
if (s_blk != NULL){
|
||||
off = 0;
|
||||
@@ -1228,7 +1234,7 @@ time_start = GetTickCount();
|
||||
Phmd5Process(&hash_ctx, buf, len); // MD5 計算
|
||||
}
|
||||
#ifdef TIMER
|
||||
time3_total += GetTickCount() - time_start;
|
||||
time3_total += clock() - time_start;
|
||||
#endif
|
||||
|
||||
// 経過表示
|
||||
@@ -1265,15 +1271,16 @@ error_end:
|
||||
CloseHandle(ol.hEvent);
|
||||
|
||||
#ifdef TIMER
|
||||
time_total += GetTickCount() - time1_start;
|
||||
printf("\nread %d.%03d sec\n", time2_total / 1000, time2_total % 1000);
|
||||
printf("main %d.%03d sec\n", time3_total / 1000, time3_total % 1000);
|
||||
if (time_total > 0){
|
||||
time_start = (int)((file_size * 125) / ((__int64)time_total * 131072));
|
||||
time_total += clock() - time1_start;
|
||||
printf("\nread %.3f sec\n", (double)time2_total / CLOCKS_PER_SEC);
|
||||
printf("main %.3f sec\n", (double)time3_total / CLOCKS_PER_SEC);
|
||||
time_sec = (double)time_total / CLOCKS_PER_SEC;
|
||||
if (time_sec > 0){
|
||||
time_speed = (double)file_size / (time_sec * 1048576);
|
||||
} else {
|
||||
time_start = 0;
|
||||
time_speed = 0;
|
||||
}
|
||||
printf("total %d.%03d sec, %d MB/s\n", time_total / 1000, time_total % 1000, time_start);
|
||||
printf("total %.3f sec, %.0f MB/s\n", time_sec, time_speed);
|
||||
#endif
|
||||
return comp_num;
|
||||
}
|
||||
@@ -1303,8 +1310,8 @@ DWORD WINAPI file_hash_background(LPVOID lpParameter)
|
||||
find_next = files[num].b_off; // 先頭ブロックの番号
|
||||
|
||||
// バッファー・サイズが大きいのでヒープ領域を使う
|
||||
for (io_size = IO_SIZE; io_size < 1048576; io_size += IO_SIZE){ // IO_SIZE の倍数で 1 MB までにする
|
||||
if ((io_size + IO_SIZE > (cpu_cache << 17)) || ((__int64)(io_size + IO_SIZE) * 4 > file_size))
|
||||
for (io_size = IO_SIZE; io_size <= MAX_BUF_SIZE; io_size += IO_SIZE){ // IO_SIZE の倍数にする
|
||||
if ((io_size + IO_SIZE > (cpu_cache & 0xFFFF0000)) || ((__int64)(io_size + IO_SIZE) * 4 > file_size))
|
||||
break;
|
||||
}
|
||||
//printf("\n io_size = %d\n", io_size);
|
||||
@@ -1534,7 +1541,7 @@ int file_hash_direct(
|
||||
HANDLE hFile;
|
||||
OVERLAPPED ol;
|
||||
#ifdef TIMER
|
||||
time1_start = GetTickCount();
|
||||
time1_start = clock();
|
||||
#endif
|
||||
|
||||
prog_last = -1; // 検証中のファイル名を毎回表示する
|
||||
@@ -1590,11 +1597,11 @@ time1_start = GetTickCount();
|
||||
file_left = file_size - 16384; // 本来のファイル・サイズまでしか検査しない
|
||||
}
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount();
|
||||
time_start = clock();
|
||||
#endif
|
||||
off = ReadFile(hFile, buf, read_size, NULL, &ol);
|
||||
#ifdef TIMER
|
||||
time2_total += GetTickCount() - time_start;
|
||||
time2_total += clock() - time_start;
|
||||
#endif
|
||||
if ((off == 0) && (GetLastError() != ERROR_IO_PENDING)){
|
||||
comp_num = -1;
|
||||
@@ -1677,11 +1684,11 @@ time2_total += GetTickCount() - time_start;
|
||||
read_size = (read_size + 4095) & ~4095; // 4KB の倍数にする
|
||||
}
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount();
|
||||
time_start = clock();
|
||||
#endif
|
||||
off = ReadFile(hFile, buf1, read_size, NULL, &ol);
|
||||
#ifdef TIMER
|
||||
time2_total += GetTickCount() - time_start;
|
||||
time2_total += clock() - time_start;
|
||||
#endif
|
||||
if ((off == 0) && (GetLastError() != ERROR_IO_PENDING)){
|
||||
print_win32_err();
|
||||
@@ -1708,11 +1715,11 @@ time2_total += GetTickCount() - time_start;
|
||||
ol.OffsetHigh = (unsigned int)(file_off >> 32);
|
||||
file_off += IO_SIZE;
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount();
|
||||
time_start = clock();
|
||||
#endif
|
||||
off = ReadFile(hFile, buf, read_size, NULL, &ol);
|
||||
#ifdef TIMER
|
||||
time2_total += GetTickCount() - time_start;
|
||||
time2_total += clock() - time_start;
|
||||
#endif
|
||||
if ((off == 0) && (GetLastError() != ERROR_IO_PENDING)){
|
||||
print_win32_err();
|
||||
@@ -1727,7 +1734,7 @@ time2_total += GetTickCount() - time_start;
|
||||
}
|
||||
|
||||
#ifdef TIMER
|
||||
time_start = GetTickCount();
|
||||
time_start = clock();
|
||||
#endif
|
||||
if (s_blk != NULL){
|
||||
off = 0;
|
||||
@@ -1769,7 +1776,7 @@ time_start = GetTickCount();
|
||||
Phmd5Process(&hash_ctx, buf, len); // MD5 計算
|
||||
}
|
||||
#ifdef TIMER
|
||||
time3_total += GetTickCount() - time_start;
|
||||
time3_total += clock() - time_start;
|
||||
#endif
|
||||
|
||||
// 経過表示
|
||||
@@ -1810,10 +1817,16 @@ error_end:
|
||||
_aligned_free(buf1);
|
||||
|
||||
#ifdef TIMER
|
||||
time_total += GetTickCount() - time1_start;
|
||||
printf("\nread %d.%03d sec\n", time2_total / 1000, time2_total % 1000);
|
||||
printf("main %d.%03d sec\n", time3_total / 1000, time3_total % 1000);
|
||||
printf("total %d.%03d sec\n", time_total / 1000, time_total % 1000);
|
||||
time_total += clock() - time1_start;
|
||||
printf("\nread %.3f sec\n", (double)time2_total / CLOCKS_PER_SEC);
|
||||
printf("main %.3f sec\n", (double)time3_total / CLOCKS_PER_SEC);
|
||||
time_sec = (double)time_total / CLOCKS_PER_SEC;
|
||||
if (time_sec > 0){
|
||||
time_speed = (double)file_size / (time_sec * 1048576);
|
||||
} else {
|
||||
time_speed = 0;
|
||||
}
|
||||
printf("total %.3f sec, %.0f MB/s\n", time_sec, time_speed);
|
||||
#endif
|
||||
return comp_num;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// par2.c
|
||||
// Copyright : 2023-03-15 Yutaka Sawada
|
||||
// Copyright : 2024-11-30 Yutaka Sawada
|
||||
// License : GPL
|
||||
|
||||
#ifndef _UNICODE
|
||||
@@ -9,7 +9,7 @@
|
||||
#define UNICODE
|
||||
#endif
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0600 // Windows Vista or later
|
||||
#define _WIN32_WINNT 0x0601 // Windows 7 or later
|
||||
#endif
|
||||
|
||||
#include <malloc.h>
|
||||
@@ -112,12 +112,12 @@ int par2_create(
|
||||
err = -12;
|
||||
} else {
|
||||
// メモリーを確保できるか試す
|
||||
err = read_block_num(parity_num, cpu_num - 1, 0, 256);
|
||||
err = read_block_num(parity_num, 0, 256);
|
||||
if (err == 0)
|
||||
err = -13;
|
||||
}
|
||||
#ifdef TIMER
|
||||
printf("read_block_num = %d\n", read_block_num(parity_num, cpu_num - 1, 0, 256));
|
||||
printf("read_block_num = %d\n", read_block_num(parity_num, 0, 256));
|
||||
#endif
|
||||
if (err > 0){ // 1-pass方式が可能
|
||||
#ifdef TIMER
|
||||
@@ -181,7 +181,7 @@ int par2_create(
|
||||
}
|
||||
} else {
|
||||
// 共通パケットを作成する
|
||||
if ((memory_use & 16) && (cpu_num >= 4) && (entity_num >= 2)){ // SSDなら複数ファイルを同時に処理する
|
||||
if ((memory_use & 16) && (cpu_num >= 3) && (entity_num >= 2)){ // SSDなら複数ファイルを同時に処理する
|
||||
common_size = set_common_packet_multi(common_buf, &packet_num, (switch_p & 2) >> 1, files);
|
||||
} else {
|
||||
common_size = set_common_packet(common_buf, &packet_num, (switch_p & 2) >> 1, files);
|
||||
@@ -529,7 +529,7 @@ int par2_verify(
|
||||
|
||||
// ソース・ファイルが完全かどうかを調べる
|
||||
// ファイルの状態は 完全、消失、追加、破損(完全なブロックの数) の4種類
|
||||
if ((memory_use & 16) && (cpu_num >= 4) && (entity_num >= 2)){ // SSDなら複数ファイルを同時に処理する
|
||||
if ((memory_use & 16) && (cpu_num >= 3) && (entity_num >= 2)){ // SSDなら複数ファイルを同時に処理する
|
||||
err = check_file_complete_multi(ascii_buf, uni_buf, files, s_blk);
|
||||
} else {
|
||||
err = check_file_complete(ascii_buf, uni_buf, files, s_blk);
|
||||
@@ -741,7 +741,7 @@ int par2_repair(
|
||||
|
||||
// ソース・ファイルが完全かどうかを一覧表示する
|
||||
// ファイルの状態は 完全、消失、追加、破損(完全なブロックの数) の4種類
|
||||
if ((memory_use & 16) && (cpu_num >= 4) && (entity_num >= 2)){ // SSDなら複数ファイルを同時に処理する
|
||||
if ((memory_use & 16) && (cpu_num >= 3) && (entity_num >= 2)){ // SSDなら複数ファイルを同時に処理する
|
||||
err = check_file_complete_multi(ascii_buf, uni_buf, files, s_blk);
|
||||
} else {
|
||||
err = check_file_complete(ascii_buf, uni_buf, files, s_blk);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// par2_cmd.c
|
||||
// Copyright : 2023-03-18 Yutaka Sawada
|
||||
// Copyright : 2025-03-12 Yutaka Sawada
|
||||
// License : GPL
|
||||
|
||||
#ifndef _UNICODE
|
||||
@@ -9,7 +9,7 @@
|
||||
#define UNICODE
|
||||
#endif
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0600 // Windows Vista or later
|
||||
#define _WIN32_WINNT 0x0601 // Windows 7 or later
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
@@ -86,36 +86,38 @@ static void print_environment(void)
|
||||
|
||||
printf("CPU thread\t: %d / %d\n", cpu_num & 0xFFFF, cpu_num >> 24);
|
||||
cpu_num &= 0xFFFF; // 利用するコア数だけにしておく
|
||||
printf("CPU cache limit : %d KB, %d KB\n", (cpu_cache & 0x7FFF8000) >> 10, (cpu_cache & 0x00007FFF) << 7);
|
||||
#ifndef _WIN64 // 32-bit 版は MMX, SSE2, SSSE3 のどれかを表示する
|
||||
printf("CPU cache limit : %d KB, %d KB (%d)\n", (cpu_flag & 0xFFFF0000) >> 10, (cpu_cache & 0xFFFF0000) >> 10, cpu_cache & 0xFFFF);
|
||||
#ifndef _WIN64 // 32-bit 版は MMX, SSE2, SSSE3, AVX2 のどれかを表示する
|
||||
printf("CPU extra\t:");
|
||||
if (cpu_flag & 1){
|
||||
if (((cpu_flag & 16) != 0) && ((cpu_flag & 256) == 0)){
|
||||
printf(" AVX2");
|
||||
} else if (cpu_flag & 1){
|
||||
if (cpu_flag & 256){
|
||||
printf(" SSSE3(old)");
|
||||
printf(" SSSE3(slow)");
|
||||
} else {
|
||||
printf(" SSSE3");
|
||||
}
|
||||
} else if (cpu_flag & 128){
|
||||
} else if (((cpu_flag & 128) != 0) && ((cpu_flag & 256) == 0)){
|
||||
printf(" SSE2");
|
||||
} else {
|
||||
printf(" MMX");
|
||||
}
|
||||
#else // 64-bit 版は SSE2, SSSE3 を表示する
|
||||
#else // 64-bit 版は SSE2, SSSE3, AVX2 を表示する
|
||||
printf("CPU extra\t: x64");
|
||||
if (cpu_flag & 1){
|
||||
if (((cpu_flag & 16) != 0) && ((cpu_flag & 256) == 0)){
|
||||
printf(" AVX2");
|
||||
} else if (cpu_flag & 1){
|
||||
if (cpu_flag & 256){
|
||||
printf(" SSSE3(old)");
|
||||
printf(" SSSE3(slow)");
|
||||
} else {
|
||||
printf(" SSSE3");
|
||||
}
|
||||
} else if (cpu_flag & 128){
|
||||
} else if (((cpu_flag & 128) != 0) && ((cpu_flag & 256) == 0)){
|
||||
printf(" SSE2");
|
||||
}
|
||||
#endif
|
||||
if (cpu_flag & 8)
|
||||
printf(" CLMUL");
|
||||
if (cpu_flag & 16)
|
||||
printf(" AVX2");
|
||||
printf("\nMemory usage\t: ");
|
||||
if (memory_use & 7){
|
||||
printf("%d/8", memory_use & 7);
|
||||
@@ -1446,14 +1448,12 @@ ri= switch_set & 0x00040000
|
||||
} else if (wcsncmp(tmp_p, L"lr", 2) == 0){
|
||||
recovery_limit = 0;
|
||||
j = 2;
|
||||
while ((j < 2 + 6) && (tmp_p[j] >= '0') && (tmp_p[j] <= '9')){
|
||||
while ((j < 2 + 10) && (tmp_p[j] >= '0') && (tmp_p[j] <= '9')){
|
||||
recovery_limit = (recovery_limit * 10) + (tmp_p[j] - '0');
|
||||
j++;
|
||||
}
|
||||
if (recovery_limit <= 0) // -lr0 ならソース・ファイルの最大ブロック数と同じにする
|
||||
recovery_limit = -1;
|
||||
if (recovery_limit > MAX_PARITY_NUM)
|
||||
recovery_limit = MAX_PARITY_NUM;
|
||||
} else if (wcsncmp(tmp_p, L"ls", 2) == 0){
|
||||
__int64 num8 = 0;
|
||||
j = 2;
|
||||
@@ -1475,48 +1475,78 @@ ri= switch_set & 0x00040000
|
||||
switch_v |= j;
|
||||
// 共通のオプション (数値)
|
||||
} else if (wcsncmp(tmp_p, L"lc", 2) == 0){
|
||||
if (tmp_p[2] == 'b'){ // Size of Cache Blocking (CPU's L2 cache optimization)
|
||||
k = 0;
|
||||
j = 2;
|
||||
while ((j < 2 + 5) && (tmp_p[j] >= '0') && (tmp_p[j] <= '9')){
|
||||
j = 3;
|
||||
while ((j < 3 + 5) && (tmp_p[j] >= '0') && (tmp_p[j] <= '9')){
|
||||
k = (k * 10) + (tmp_p[j] - '0');
|
||||
j++;
|
||||
}
|
||||
if (k & 32){ // GPU を使う
|
||||
OpenCL_method = 1; // Faster GPU
|
||||
} else if (k & 64){
|
||||
OpenCL_method = -1; // Slower GPU
|
||||
if (k <= 0x7FFF) // 上位 16-bit に上書きする
|
||||
cpu_flag = (cpu_flag & 0xFFFF) | (k << 16);
|
||||
} else if (tmp_p[2] == 's'){ // Size of Shared Cache
|
||||
k = 0;
|
||||
j = 3;
|
||||
while ((j < 3 + 5) && (tmp_p[j] >= '0') && (tmp_p[j] <= '9')){
|
||||
k = (k * 10) + (tmp_p[j] - '0');
|
||||
j++;
|
||||
}
|
||||
if (k & 16) // SSSE3 を使わない
|
||||
cpu_flag &= 0xFFFFFFFE;
|
||||
if (k & 128) // CLMUL を使わない、SSSE3 の古いエンコーダーを使う
|
||||
cpu_flag = (cpu_flag & 0xFFFFFFF7) | 0x100;
|
||||
if (k & 256) // JIT(SSE2) を使わない
|
||||
if (k <= 0xFFFF) // 上位 16-bit に上書きする
|
||||
cpu_cache = (cpu_cache & 0xFFFF) | (k << 16);
|
||||
} else if (tmp_p[2] == 'm'){ // Max number of chunks (CPU's shared L3 cache optimization)
|
||||
k = 0;
|
||||
j = 3;
|
||||
while ((j < 3 + 5) && (tmp_p[j] >= '0') && (tmp_p[j] <= '9')){
|
||||
k = (k * 10) + (tmp_p[j] - '0');
|
||||
j++;
|
||||
}
|
||||
if (k <= 0x8000) // CACHE_MIN_NUM 未満なら 0x8000 になる
|
||||
cpu_cache = (cpu_cache & 0xFFFF0000) | k; // 下位 16-bit に上書きする
|
||||
} else { // Extra と GPU も別にしてもいいかも?
|
||||
k = 0;
|
||||
j = 2;
|
||||
while ((j < 2 + 7) && (tmp_p[j] >= '0') && (tmp_p[j] <= '9')){
|
||||
k = (k * 10) + (tmp_p[j] - '0');
|
||||
j++;
|
||||
}
|
||||
if (k & 0x300){ // GPU を使う
|
||||
OpenCL_method = k & 0x003F0300;
|
||||
}
|
||||
if (k & 1024) // CLMUL と ALTMAP を使わない
|
||||
cpu_flag = (cpu_flag & 0xFFFFFFF7) | 256;
|
||||
if (k & 2048) // JIT(SSE2) を使わない
|
||||
cpu_flag &= 0xFFFFFF7F;
|
||||
if (k & 512) // AVX2 を使わない
|
||||
if (k & 4096) // SSSE3 を使わない
|
||||
cpu_flag &= 0xFFFFFFFE;
|
||||
if (k & 8192) // AVX2 を使わない
|
||||
cpu_flag &= 0xFFFFFFEF;
|
||||
if (k & 15){ // 使用するコア数を変更する
|
||||
k &= 15; // 1~15 の範囲
|
||||
if (k & 255){ // 使用するコア数を変更する
|
||||
k &= 255; // 1~255 の範囲
|
||||
// printf("\n lc# = %d , logical = %d, physical = %d \n", k, cpu_num >> 24, (cpu_num & 0x00FF0000) >> 16);
|
||||
if (k == 12){ // 物理コア数の 1/4 にする
|
||||
if (k == 251){ // 物理コア数の 1/4 にする
|
||||
k = ((cpu_num & 0x00FF0000) >> 16) / 4;
|
||||
} else if (k == 13){ // 物理コア数の半分にする
|
||||
} else if (k == 252){ // 物理コア数の半分にする
|
||||
k = ((cpu_num & 0x00FF0000) >> 16) / 2;
|
||||
} else if (k == 14){ // 物理コア数の 3/4 にする
|
||||
} else if (k == 253){ // 物理コア数の 3/4 にする
|
||||
k = (((cpu_num & 0x00FF0000) >> 16) * 3) / 4;
|
||||
} else if (k == 15){ // 物理コア数にする
|
||||
k = (cpu_num & 0x00FF0000) >> 16;
|
||||
if (k >= 6)
|
||||
k--; // 物理コア数が 6以上なら、1個減らす
|
||||
} else if (k > (cpu_num >> 24)){
|
||||
k = cpu_num >> 24; // 論理コア数を超えないようにする
|
||||
} else if (k == 254){ // 物理コア数より減らす
|
||||
k = ((cpu_num & 0x00FF0000) >> 16) - 1;
|
||||
} else if (k == 255){ // 物理コア数より増やす
|
||||
k = cpu_num >> 16;
|
||||
k = ((k & 0xFF) + (k >> 8)) / 2; // 物理コア数と論理コア数の中間にする?
|
||||
// タスクマネージャーにおける CPU使用率は 100%になるけど、速くはならない・・・
|
||||
// k = (k & 0xFF) + ((k >> 8) - (k & 0xFF)) / 4; // 物理コア数の 5/4 にする?
|
||||
}
|
||||
if (k > MAX_CPU){
|
||||
k = MAX_CPU;
|
||||
} else if (k < 1){
|
||||
k = 1;
|
||||
} else if (k > (cpu_num >> 24)){
|
||||
k = cpu_num >> 24; // 論理コア数を超えないようにする
|
||||
}
|
||||
cpu_num = (cpu_num & 0xFFFF0000) | k; // 指定されたコア数を下位に配置する
|
||||
}
|
||||
}
|
||||
} else if (wcsncmp(tmp_p, L"m", 1) == 0){
|
||||
memory_use = 0;
|
||||
j = 1; // メモリー使用量だけでなく、モード切替用としても使う、2桁まで
|
||||
@@ -1945,6 +1975,14 @@ fclose(fp);
|
||||
if (recovery_limit > j)
|
||||
recovery_limit = j;
|
||||
}
|
||||
} else {
|
||||
if (split_size == 2){ // 制限をブロック数ではなく、サイズとして認識する
|
||||
recovery_limit /= block_size;
|
||||
if (recovery_limit < 1)
|
||||
recovery_limit = 1;
|
||||
}
|
||||
if (recovery_limit > MAX_PARITY_NUM) // パリティ・ブロック数の最大値を超えない
|
||||
recovery_limit = MAX_PARITY_NUM;
|
||||
}
|
||||
// パリティ・ブロックをリカバリ・ファイルに分配する方法
|
||||
i = (switch_set & 0x30000) >> 16;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// reedsolomon.c
|
||||
// Copyright : 2023-05-29 Yutaka Sawada
|
||||
// Copyright : 2024-11-30 Yutaka Sawada
|
||||
// License : GPL
|
||||
|
||||
#ifndef _UNICODE
|
||||
@@ -9,7 +9,7 @@
|
||||
#define UNICODE
|
||||
#endif
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0600 // Windows Vista or later
|
||||
#define _WIN32_WINNT 0x0601 // Windows 7 or later
|
||||
#endif
|
||||
|
||||
#include <malloc.h>
|
||||
@@ -27,16 +27,19 @@
|
||||
#include "rs_decode.h"
|
||||
#include "reedsolomon.h"
|
||||
|
||||
#ifdef TIMER
|
||||
#include <time.h>
|
||||
#endif
|
||||
|
||||
// GPU を使う最小データサイズ (MB 単位)
|
||||
// GPU の起動には時間がかかるので、データが小さすぎると逆に遅くなる
|
||||
#define GPU_DATA_LIMIT 512
|
||||
#define GPU_DATA_LIMIT 200
|
||||
|
||||
// GPU を使う最小ブロックサイズとブロック数
|
||||
// CPU と GPU で処理を割り振る為には、ある程度のブロック数を必要とする
|
||||
#define GPU_BLOCK_SIZE_LIMIT 65536
|
||||
#define GPU_SOURCE_COUNT_LIMIT 256
|
||||
#define GPU_PARITY_COUNT_LIMIT 32
|
||||
#define GPU_SOURCE_COUNT_LIMIT 192
|
||||
#define GPU_PARITY_COUNT_LIMIT 8
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
@@ -46,7 +49,7 @@ int try_cache_blocking(int unit_size)
|
||||
int limit_size, chunk_count, chunk_size, cache_line_diff;
|
||||
|
||||
// CPUキャッシュをどのくらいまで使うか
|
||||
limit_size = cpu_flag & 0x7FFF8000; // 最低でも 32KB になる
|
||||
limit_size = cpu_flag & 0x7FFF0000; // 最低でも 64KB になる
|
||||
if (limit_size == 0) // キャッシュ・サイズを取得できなかった場合は最適化しない
|
||||
return unit_size;
|
||||
|
||||
@@ -160,7 +163,6 @@ unsigned int get_io_size(
|
||||
// 何ブロックまとめてファイルから読み込むかを空きメモリー量から計算する
|
||||
int read_block_num(
|
||||
int keep_num, // 保持するパリティ・ブロック数
|
||||
int add_num, // 余裕を見るブロック数
|
||||
size_t trial_alloc, // 確保できるか確認するのか
|
||||
int alloc_unit) // メモリー単位の境界 (sse_unit か MEM_UNIT)
|
||||
{
|
||||
@@ -177,7 +179,7 @@ int read_block_num(
|
||||
|
||||
if (trial_alloc){
|
||||
__int64 possible_size;
|
||||
possible_size = (__int64)unit_size * (source_num + keep_num + add_num);
|
||||
possible_size = (__int64)unit_size * (source_num + keep_num);
|
||||
#ifndef _WIN64 // 32-bit 版なら
|
||||
if (possible_size > MAX_MEM_SIZE) // 確保する最大サイズを 2GB までにする
|
||||
possible_size = MAX_MEM_SIZE;
|
||||
@@ -191,13 +193,13 @@ int read_block_num(
|
||||
}
|
||||
mem_size = get_mem_size(trial_alloc) / unit_size; // 何個分確保できるか
|
||||
|
||||
if (mem_size >= (size_t)(source_num + keep_num + add_num)){ // 最大個数より多い
|
||||
if (mem_size >= (size_t)(source_num + keep_num)){ // 最大個数より多い
|
||||
buf_num = source_num;
|
||||
} else if ((int)mem_size < read_min + keep_num + add_num){ // 少なすぎる
|
||||
} else if ((int)mem_size < read_min + keep_num){ // 少なすぎる
|
||||
buf_num = 0; // メモリー不足の印
|
||||
} else { // ソース・ブロック個数を等分割する
|
||||
int split_num;
|
||||
buf_num = (int)mem_size - (keep_num + add_num);
|
||||
buf_num = (int)mem_size - keep_num;
|
||||
split_num = (source_num + buf_num - 1) / buf_num; // 何回に別けて読み込むか
|
||||
buf_num = (source_num + split_num - 1) / split_num;
|
||||
}
|
||||
@@ -205,6 +207,48 @@ int read_block_num(
|
||||
return buf_num;
|
||||
}
|
||||
|
||||
// 1st encode, decode を何スレッドで実行するか決める
|
||||
int calc_thread_num1(int max_num)
|
||||
{
|
||||
int i, num;
|
||||
|
||||
// 読み込み中はスレッド数を減らす(シングル・スレッドの時は 0にする)
|
||||
num = 0;
|
||||
i = 1;
|
||||
while (i * 2 <= cpu_num){ // 1=0, 2~3=1, 4~7=2, 8~15=3, 16~31=4, 32=5
|
||||
num++;
|
||||
i *= 2;
|
||||
}
|
||||
if (num > max_num)
|
||||
num = max_num;
|
||||
|
||||
return num;
|
||||
}
|
||||
|
||||
// 1st & 2nd encode, decode を何スレッドで実行するか決める
|
||||
int calc_thread_num2(int max_num, int *cpu_num2)
|
||||
{
|
||||
int i, num1, num2;
|
||||
|
||||
// 読み込み中はスレッド数を減らす(シングル・スレッドの時は 0にする)
|
||||
num1 = 0;
|
||||
i = 2;
|
||||
while (i <= cpu_num){ // 1=0, 2~3=1, 4~7=2, 8~15=3, 16~31=4, 32=5
|
||||
num1++;
|
||||
i *= 2;
|
||||
}
|
||||
if (num1 > max_num)
|
||||
num1 = max_num;
|
||||
|
||||
// CPU と GPU で必ず2スレッド使う
|
||||
num2 = cpu_num;
|
||||
if (num2 < 2)
|
||||
num2 = 2;
|
||||
*cpu_num2 = num2;
|
||||
|
||||
return num1;
|
||||
}
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
// 戸川 隼人 の「演習と応用FORTRAN77」の逆行列の計算方法を参考にして
|
||||
// Gaussian Elimination を少し修正して行列の数を一つにしてみた
|
||||
@@ -263,7 +307,7 @@ static int invert_matrix_st(unsigned short *mat,
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
// マルチ・プロセッサー対応
|
||||
|
||||
/*
|
||||
typedef struct { // RS threading control struct
|
||||
unsigned short *mat; // 行列
|
||||
int cols; // 横行の長さ
|
||||
@@ -308,8 +352,57 @@ static DWORD WINAPI thread_func(LPVOID lpParameter)
|
||||
CloseHandle(th->end);
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
typedef struct { // Maxtrix Inversion threading control struct
|
||||
unsigned short *mat; // 行列
|
||||
int cols; // 横行の長さ
|
||||
volatile int start; // 掛ける行の先頭位置
|
||||
volatile int pivot; // 倍率となる値の位置
|
||||
volatile int skip; // とばす行
|
||||
volatile int now; // 消去する行
|
||||
HANDLE run;
|
||||
HANDLE end;
|
||||
} INV_TH;
|
||||
|
||||
// サブ・スレッド
|
||||
static DWORD WINAPI thread_func(LPVOID lpParameter)
|
||||
{
|
||||
unsigned short *mat;
|
||||
int j, cols, row_start2, factor;
|
||||
HANDLE hRun, hEnd;
|
||||
INV_TH *th;
|
||||
|
||||
th = (INV_TH *)lpParameter;
|
||||
mat = th->mat;
|
||||
cols = th->cols;
|
||||
hRun = th->run;
|
||||
hEnd = th->end;
|
||||
SetEvent(hEnd); // 設定完了を通知する
|
||||
|
||||
WaitForSingleObject(hRun, INFINITE); // 計算開始の合図を待つ
|
||||
while (th->skip >= 0){
|
||||
while ((j = InterlockedDecrement(&(th->now))) >= 0){ // j = --th_now
|
||||
if (j == th->skip)
|
||||
continue;
|
||||
row_start2 = cols * j; // その行の開始位置
|
||||
factor = mat[row_start2 + th->pivot]; // j 行の pivot 列の値
|
||||
mat[row_start2 + th->pivot] = 0; // これが行列を一個で済ます手
|
||||
// 先の計算により、i 行の pivot 列の値は必ず 1なので、この factor が倍率になる
|
||||
galois_region_multiply(mat + th->start, mat + row_start2, cols, factor);
|
||||
}
|
||||
//_mm_sfence(); // メモリーへの書き込みを完了する
|
||||
SetEvent(hEnd); // 計算終了を通知する
|
||||
WaitForSingleObject(hRun, INFINITE); // 計算開始の合図を待つ
|
||||
}
|
||||
|
||||
// 終了処理
|
||||
CloseHandle(hRun);
|
||||
CloseHandle(hEnd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// マルチ・スレッドで逆行列を計算する (利用するパリティ・ブロックの所だけ)
|
||||
/*
|
||||
static int invert_matrix_mt(unsigned short *mat,
|
||||
int rows, // 横行の数、行列の縦サイズ、失われたソース・ブロックの数 = 利用するパリティ・ブロック数
|
||||
int cols, // 縦列の数、行列の横サイズ、本来のソース・ブロック数
|
||||
@@ -411,6 +504,130 @@ static int invert_matrix_mt(unsigned short *mat,
|
||||
CloseHandle(th->h);
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
|
||||
static int invert_matrix_mt(unsigned short *mat,
|
||||
int rows, // 横行の数、行列の縦サイズ、失われたソース・ブロックの数 = 利用するパリティ・ブロック数
|
||||
int cols, // 縦列の数、行列の横サイズ、本来のソース・ブロック数
|
||||
source_ctx_r *s_blk) // 各ソース・ブロックの情報
|
||||
{
|
||||
int err = 0, j, row_start2, factor, sub_num;
|
||||
unsigned int time_last = GetTickCount();
|
||||
HANDLE hSub[MAX_CPU / 2], hRun[MAX_CPU / 2], hEnd[MAX_CPU / 2];
|
||||
INV_TH th[1];
|
||||
|
||||
memset(hSub, 0, sizeof(HANDLE) * (MAX_CPU / 2));
|
||||
memset(th, 0, sizeof(INV_TH));
|
||||
|
||||
// サブ・スレッドの数は平方根(切り上げ)にする
|
||||
sub_num = 1;
|
||||
j = 2;
|
||||
while (j < cpu_num){ // 1~2=1, 3~4=2, 5~8=3, 9~16=4, 17~32=5
|
||||
sub_num++;
|
||||
j *= 2;
|
||||
}
|
||||
if (sub_num > rows - 2)
|
||||
sub_num = rows - 2; // 多過ぎても意味ないので制限する
|
||||
#ifdef TIMER
|
||||
// 使うスレッド数は、メイン・スレッドの分も含めるので 1個増える
|
||||
printf("\nMaxtrix Inversion with %d threads\n", sub_num + 1);
|
||||
#endif
|
||||
|
||||
// サブ・スレッドを起動する
|
||||
th->mat = mat;
|
||||
th->cols = cols;
|
||||
for (j = 0; j < sub_num; j++){ // サブ・スレッドごとに
|
||||
// イベントを作成する
|
||||
hRun[j] = CreateEvent(NULL, FALSE, FALSE, NULL); // 両方とも Auto Reset にする
|
||||
if (hRun[j] == NULL){
|
||||
print_win32_err();
|
||||
printf("error, inv-thread\n");
|
||||
err = 1;
|
||||
goto error_end;
|
||||
}
|
||||
hEnd[j] = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||
if (hEnd[j] == NULL){
|
||||
print_win32_err();
|
||||
CloseHandle(hRun[j]);
|
||||
printf("error, inv-thread\n");
|
||||
err = 1;
|
||||
goto error_end;
|
||||
}
|
||||
// サブ・スレッドを起動する
|
||||
th->run = hRun[j];
|
||||
th->end = hEnd[j];
|
||||
//_mm_sfence(); // メモリーへの書き込みを完了してからスレッドを起動する
|
||||
hSub[j] = (HANDLE)_beginthreadex(NULL, STACK_SIZE, thread_func, (LPVOID)th, 0, NULL);
|
||||
if (hSub[j] == NULL){
|
||||
print_win32_err();
|
||||
CloseHandle(hRun[j]);
|
||||
CloseHandle(hEnd[j]);
|
||||
printf("error, inv-thread\n");
|
||||
err = 1;
|
||||
goto error_end;
|
||||
}
|
||||
WaitForSingleObject(hEnd[j], INFINITE); // 設定終了の合図を待つ (リセットする)
|
||||
}
|
||||
|
||||
// Gaussian Elimination with 1 matrix
|
||||
th->pivot = 0;
|
||||
th->start = 0; // その行の開始位置
|
||||
for (th->skip = 0; th->skip < rows; th->skip++){
|
||||
// 経過表示
|
||||
if (GetTickCount() - time_last >= UPDATE_TIME){
|
||||
if (print_progress((th->skip * 1000) / rows)){
|
||||
err = 2;
|
||||
goto error_end;
|
||||
}
|
||||
time_last = GetTickCount();
|
||||
}
|
||||
|
||||
// その行 (パリティ・ブロック) がどのソース・ブロックの代用か
|
||||
while ((th->pivot < cols) && (s_blk[th->pivot].exist != 0))
|
||||
th->pivot++;
|
||||
|
||||
// Divide the row by element i,pivot
|
||||
factor = mat[th->start + th->pivot];
|
||||
if (factor > 1){
|
||||
mat[th->start + th->pivot] = 1; // これが行列を一個で済ます手
|
||||
galois_region_divide(mat + th->start, cols, factor);
|
||||
} else if (factor == 0){ // factor = 0 だと、その行列の逆行列を計算できない
|
||||
err = (0x00010000 | th->pivot); // どのソース・ブロックで問題が発生したのかを返す
|
||||
goto error_end;
|
||||
}
|
||||
|
||||
// 別の行の同じ pivot 列が 0以外なら、その値を 0にするために、
|
||||
// i 行を何倍かしたものを XOR する
|
||||
th->now = rows; // 初期値 + 1
|
||||
//_mm_sfence(); // メモリーへの書き込みを完了してからスレッドを再開する
|
||||
for (j = 0; j < sub_num; j++)
|
||||
SetEvent(hRun[j]); // サブ・スレッドに計算を開始させる
|
||||
while ((j = InterlockedDecrement(&(th->now))) >= 0){ // j = --th_now
|
||||
if (j == th->skip) // 同じ行はとばす
|
||||
continue;
|
||||
row_start2 = cols * j; // その行の開始位置
|
||||
factor = mat[row_start2 + th->pivot]; // j 行の pivot 列の値
|
||||
mat[row_start2 + th->pivot] = 0; // これが行列を一個で済ます手
|
||||
// 先の計算により、i 行の pivot 列の値は必ず 1なので、この factor が倍率になる
|
||||
galois_region_multiply(mat + th->start, mat + row_start2, cols, factor);
|
||||
}
|
||||
|
||||
WaitForMultipleObjects(sub_num, hEnd, TRUE, INFINITE); // サブ・スレッドの計算終了の合図を待つ
|
||||
th->start += cols;
|
||||
th->pivot++;
|
||||
}
|
||||
|
||||
error_end:
|
||||
InterlockedExchange(&(th->skip), -1); // 終了指示
|
||||
for (j = 0; j < sub_num; j++){
|
||||
if (hSub[j]){ // サブ・スレッドを終了させる
|
||||
SetEvent(hRun[j]);
|
||||
WaitForSingleObject(hSub[j], INFINITE);
|
||||
CloseHandle(hSub[j]);
|
||||
}
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
/*
|
||||
@@ -525,7 +742,7 @@ int rs_encode(
|
||||
int err = 0;
|
||||
unsigned int len;
|
||||
#ifdef TIMER
|
||||
unsigned int time_total = GetTickCount();
|
||||
clock_t time_total = clock();
|
||||
#endif
|
||||
|
||||
if (galois_create_table()){
|
||||
@@ -539,11 +756,9 @@ unsigned int time_total = GetTickCount();
|
||||
}
|
||||
|
||||
// パリティ計算用の行列演算の準備をする
|
||||
if (parity_num > source_num){
|
||||
len = sizeof(unsigned short) * (source_num + parity_num);
|
||||
} else {
|
||||
len = sizeof(unsigned short) * source_num * 2;
|
||||
}
|
||||
len = sizeof(unsigned short) * source_num;
|
||||
if (OpenCL_method != 0)
|
||||
len *= 3; // GPU の作業領域も確保しておく
|
||||
constant = malloc(len);
|
||||
if (constant == NULL){
|
||||
printf("malloc, %d\n", len);
|
||||
@@ -551,7 +766,11 @@ unsigned int time_total = GetTickCount();
|
||||
goto error_end;
|
||||
}
|
||||
#ifdef TIMER
|
||||
printf("\nmatrix size = %d.%d KB\n", len >> 10, (len >> 10) % 10);
|
||||
if (len & 0xFFFFF000){
|
||||
printf("\nmatrix size = %u KB\n", len >> 10);
|
||||
} else {
|
||||
printf("\nmatrix size = %u Bytes\n", len);
|
||||
}
|
||||
#endif
|
||||
// パリティ検査行列の基になる定数
|
||||
make_encode_constant(constant);
|
||||
@@ -583,8 +802,8 @@ unsigned int time_total = GetTickCount();
|
||||
err = encode_method2(file_path, header_buf, rcv_hFile, files, s_blk, p_blk, constant);
|
||||
#ifdef TIMER
|
||||
if (err != 1){
|
||||
time_total = GetTickCount() - time_total;
|
||||
printf("total %d.%03d sec\n", time_total / 1000, time_total % 1000);
|
||||
time_total = clock() - time_total;
|
||||
printf("total %.3f sec\n", (double)time_total / CLOCKS_PER_SEC);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -614,7 +833,7 @@ int rs_encode_1pass(
|
||||
int err = 0;
|
||||
unsigned int len;
|
||||
#ifdef TIMER
|
||||
unsigned int time_total = GetTickCount();
|
||||
clock_t time_total = clock();
|
||||
#endif
|
||||
|
||||
if (galois_create_table()){
|
||||
@@ -623,11 +842,9 @@ unsigned int time_total = GetTickCount();
|
||||
}
|
||||
|
||||
// パリティ計算用の行列演算の準備をする
|
||||
if (parity_num > source_num){
|
||||
len = sizeof(unsigned short) * (source_num + parity_num);
|
||||
} else {
|
||||
len = sizeof(unsigned short) * source_num * 2;
|
||||
}
|
||||
len = sizeof(unsigned short) * source_num;
|
||||
if (OpenCL_method != 0)
|
||||
len *= 3; // GPU の作業領域も確保しておく
|
||||
constant = malloc(len);
|
||||
if (constant == NULL){
|
||||
printf("malloc, %d\n", len);
|
||||
@@ -635,7 +852,11 @@ unsigned int time_total = GetTickCount();
|
||||
goto error_end;
|
||||
}
|
||||
#ifdef TIMER
|
||||
printf("\nmatrix size = %d.%d KB\n", len >> 10, (len >> 10) % 10);
|
||||
if (len & 0xFFFFF000){
|
||||
printf("\nmatrix size = %u KB\n", len >> 10);
|
||||
} else {
|
||||
printf("\nmatrix size = %u Bytes\n", len);
|
||||
}
|
||||
#endif
|
||||
// パリティ検査行列の基になる定数
|
||||
make_encode_constant(constant);
|
||||
@@ -670,8 +891,8 @@ unsigned int time_total = GetTickCount();
|
||||
if (err < 0){
|
||||
printf("switching to 2-pass processing, %d\n", err);
|
||||
} else if (err != 1){
|
||||
time_total = GetTickCount() - time_total;
|
||||
printf("total %d.%03d sec\n", time_total / 1000, time_total % 1000);
|
||||
time_total = clock() - time_total;
|
||||
printf("total %.3f sec\n", (double)time_total / CLOCKS_PER_SEC);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -695,7 +916,7 @@ int rs_decode(
|
||||
int err = 0, i, j, k;
|
||||
unsigned int len;
|
||||
#ifdef TIMER
|
||||
unsigned int time_matrix = 0, time_total = GetTickCount();
|
||||
clock_t time_matrix = 0, time_total = clock();
|
||||
#endif
|
||||
|
||||
if (galois_create_table()){
|
||||
@@ -719,16 +940,18 @@ unsigned int time_matrix = 0, time_total = GetTickCount();
|
||||
}
|
||||
#ifdef TIMER
|
||||
if (len & 0xFFF00000){
|
||||
printf("\nmatrix size = %d.%d MB\n", len >> 20, (len >> 20) % 10);
|
||||
printf("\nmatrix size = %u MB\n", len >> 20);
|
||||
} else if (len & 0x000FF000){
|
||||
printf("\nmatrix size = %u KB\n", len >> 10);
|
||||
} else {
|
||||
printf("\nmatrix size = %d.%d KB\n", len >> 10, (len >> 10) % 10);
|
||||
printf("\nmatrix size = %u Bytes\n", len);
|
||||
}
|
||||
#endif
|
||||
// 何番目の消失ソース・ブロックがどのパリティで代替されるか
|
||||
id = mat + (block_lost * source_num);
|
||||
|
||||
#ifdef TIMER
|
||||
time_matrix = GetTickCount();
|
||||
time_matrix = clock();
|
||||
#endif
|
||||
// 復元用の行列を計算する
|
||||
print_progress_text(0, "Computing matrix");
|
||||
@@ -769,7 +992,7 @@ time_matrix = GetTickCount();
|
||||
//for (i = 0; i < block_lost; i++)
|
||||
// printf("id[%d] = %d\n", i, id[i]);
|
||||
#ifdef TIMER
|
||||
time_matrix = GetTickCount() - time_matrix;
|
||||
time_matrix = clock() - time_matrix;
|
||||
#endif
|
||||
|
||||
#ifdef TIMER
|
||||
@@ -782,8 +1005,7 @@ time_matrix = GetTickCount() - time_matrix;
|
||||
// ブロック数が多いなら、ブロックごとにスレッドを割り当てる (GPU を使う)
|
||||
if (memory_use & 16){
|
||||
err = -4; // SSD なら Read all 方式でブロックが断片化しても速い
|
||||
} else
|
||||
if (read_block_num(block_lost, 2, 0, MEM_UNIT) != 0){
|
||||
} else if (read_block_num(block_lost * 2, 0, MEM_UNIT) != 0){
|
||||
err = -5; // HDD でメモリーが足りてるなら Read some 方式を使う
|
||||
} else {
|
||||
err = -4; // メモリー不足なら Read all 方式でブロックを断片化させる
|
||||
@@ -792,8 +1014,7 @@ time_matrix = GetTickCount() - time_matrix;
|
||||
// ソース・ブロックを全て断片的に読み込むか、いくつかを丸ごと読み込むかを決める
|
||||
if (memory_use & 16){
|
||||
err = -2; // SSD なら Read all 方式でブロックが断片化しても速い
|
||||
} else
|
||||
if (read_block_num(block_lost, cpu_num - 1, 0, sse_unit) != 0){
|
||||
} else if (read_block_num(block_lost, 0, sse_unit) != 0){
|
||||
err = -3; // HDD でメモリーが足りてるなら Read some 方式を使う
|
||||
} else {
|
||||
err = -2; // メモリー不足なら Read all 方式でブロックを断片化させる
|
||||
@@ -814,9 +1035,9 @@ time_matrix = GetTickCount() - time_matrix;
|
||||
err = decode_method2(file_path, block_lost, rcv_hFile, files, s_blk, p_blk, mat);
|
||||
#ifdef TIMER
|
||||
if (err != 1){
|
||||
time_total = GetTickCount() - time_total;
|
||||
printf("total %d.%03d sec\n", time_total / 1000, time_total % 1000);
|
||||
printf("matrix %d.%03d sec\n", time_matrix / 1000, time_matrix % 1000);
|
||||
time_total = clock() - time_total;
|
||||
printf("total %.3f sec\n", (double)time_total / CLOCKS_PER_SEC);
|
||||
printf("matrix %.3f sec\n", (double)time_matrix / CLOCKS_PER_SEC);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ extern "C" {
|
||||
|
||||
// Read all source & Keep some parity 方式
|
||||
// 部分的なエンコードを行う最低ブロック数
|
||||
#define PART_MAX_RATE 1 // ソース・ブロック数の 1/2 = 50%
|
||||
#define PART_MIN_RATE 5 // ソース・ブロック数の 1/32 = 3.1%
|
||||
|
||||
// Read some source & Keep all parity 方式
|
||||
@@ -18,6 +17,10 @@ extern "C" {
|
||||
#define READ_MIN_RATE 1 // 保持するブロック数の 1/2 = 50%
|
||||
#define READ_MIN_NUM 16
|
||||
|
||||
// CPU cache 最適化のため、同時に処理するブロック数を制限する
|
||||
#define CACHE_MIN_NUM 8
|
||||
#define CACHE_MAX_NUM 128
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
// Cache Blocking を試みる
|
||||
@@ -33,10 +36,15 @@ unsigned int get_io_size(
|
||||
// 何ブロックまとめてファイルから読み込むかを空きメモリー量から計算する
|
||||
int read_block_num(
|
||||
int keep_num, // 保持するパリティ・ブロック数
|
||||
int add_num, // 余裕を見るブロック数
|
||||
size_t trial_alloc, // 確保できるか確認するのか
|
||||
int alloc_unit); // メモリー単位の境界 (sse_unit か MEM_UNIT)
|
||||
|
||||
// 1st encode, decode を何スレッドで実行するか決める
|
||||
int calc_thread_num1(int max_num);
|
||||
|
||||
// 1st & 2nd encode, decode を何スレッドで実行するか決める
|
||||
int calc_thread_num2(int max_num, int *cpu_num2);
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
// リード・ソロモン符号を使ってエンコードする
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// repair.c
|
||||
// Copyright : 2022-10-14 Yutaka Sawada
|
||||
// Copyright : 2024-11-30 Yutaka Sawada
|
||||
// License : GPL
|
||||
|
||||
#ifndef _UNICODE
|
||||
@@ -9,7 +9,7 @@
|
||||
#define UNICODE
|
||||
#endif
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0600 // Windows Vista or later
|
||||
#define _WIN32_WINNT 0x0601 // Windows 7 or later
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user