mirror of
https://github.com/reactos/reactos
synced 2025-10-06 00:12:51 +02:00
Compare commits
1778 Commits
0.4.15-rel
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
a1a440b96d | ||
|
b9a500cf32 | ||
|
584f8679c4 | ||
|
51d7aeb3ea | ||
|
127b363692 | ||
|
88ec843e02 | ||
|
3598ae9fbb | ||
|
5187834463 | ||
|
5a86857637 | ||
|
094b7d9c79 | ||
|
b37aafeed6 | ||
|
2a0acdbadc | ||
|
b19eba558c | ||
|
a0c427319f | ||
|
1375320ac4 | ||
|
10b7a85991 | ||
|
4ffe8e86f0 | ||
|
5f243e66b6 | ||
|
98a8996954 | ||
|
f5204f85b1 | ||
|
34fce8a997 | ||
|
435482912c | ||
|
4fafe46fc9 | ||
|
c687f6e146 | ||
|
ecf718e48d | ||
|
918bc859a9 | ||
|
b6e732ec71 | ||
|
fa7eca6cd9 | ||
|
db69a9a7e1 | ||
|
92f680dddb | ||
|
f0a29c9e9c | ||
|
13d70840ff | ||
|
d524fd8e4b | ||
|
f9458d9e40 | ||
|
9ab8761f2c | ||
|
9f78833b4a | ||
|
11bb8e4ed0 | ||
|
9aaa898319 | ||
|
e5b2d5c51e | ||
|
b6c202c4c8 | ||
|
0f105936cb | ||
|
103c81849f | ||
|
ae4c5b9a8d | ||
|
1af29a66ca | ||
|
b73159fecf | ||
|
54489d6cce | ||
|
9e22156c50 | ||
|
3f4cee1790 | ||
|
245bc3f44a | ||
|
20d7fd78ae | ||
|
13dc901d8c | ||
|
571ac5e608 | ||
|
3a6e0d4b65 | ||
|
ae23b4dc8f | ||
|
e92be1ede2 | ||
|
27db7ece88 | ||
|
01872b8495 | ||
|
0b18dfe924 | ||
|
570354e984 | ||
|
5a8c36d9a1 | ||
|
fff6d96000 | ||
|
8a2a587e57 | ||
|
3d70478560 | ||
|
69df57245c | ||
|
0793006523 | ||
|
df01941faf | ||
|
1c1b8a2260 | ||
|
5d5e5d1a46 | ||
|
38398fbaf3 | ||
|
a1bbcee5e8 | ||
|
9d3809febd | ||
|
1499e7ef53 | ||
|
87df3ea3e1 | ||
|
db57e02d6b | ||
|
0b43959beb | ||
|
b306f46e5b | ||
|
55ed59c379 | ||
|
e7073d2639 | ||
|
c6fecdda65 | ||
|
10d57cb8b2 | ||
|
6a6ed54495 | ||
|
999502cfc4 | ||
|
4dc61a2518 | ||
|
bb57f63a26 | ||
|
2840fdcfe3 | ||
|
c1921754aa | ||
|
d50b8c93fb | ||
|
194be7a2e0 | ||
|
0d11eb1e23 | ||
|
b3a0b4124a | ||
|
8ce870d87b | ||
|
47d6b3ae12 | ||
|
50d761b492 | ||
|
c3bb9d6ca9 | ||
|
ddbe9719c9 | ||
|
6a06b0a05a | ||
|
320bc52fb4 | ||
|
ef5eadafb1 | ||
|
e250b3fd01 | ||
|
186404274c | ||
|
2164b35683 | ||
|
47b92973a9 | ||
|
991c57a93b | ||
|
a449eb3e0e | ||
|
99c4f7c95a | ||
|
8c871fb268 | ||
|
da720b864e | ||
|
3f6639031c | ||
|
359205bccc | ||
|
330fda8b6d | ||
|
f18ebe2b73 | ||
|
6d321562c9 | ||
|
011ce7088c | ||
|
e8d190a29e | ||
|
a5448b04c6 | ||
|
0e0852e1da | ||
|
3dc1c5039d | ||
|
f709f6f22f | ||
|
80bef4fe40 | ||
|
5b2091e37c | ||
|
d7761b1296 | ||
|
d3a744a1ad | ||
|
1694901961 | ||
|
cdfae35256 | ||
|
61ff1117ee | ||
|
fc84d6860a | ||
|
05caf99940 | ||
|
693e1ebc4c | ||
|
4da4648092 | ||
|
45c8cf7efd | ||
|
8e6fbe0c90 | ||
|
1a61f50ddd | ||
|
f0ba72616d | ||
|
714dfdc29a | ||
|
2cba5b772d | ||
|
e0bdfb04f1 | ||
|
4ddebadc7e | ||
|
46c2a3cd09 | ||
|
36533549a2 | ||
|
0502e33ae4 | ||
|
a871ff1763 | ||
|
d68a9d7aa4 | ||
|
5ae1c72395 | ||
|
7e294faff4 | ||
|
f100d34638 | ||
|
513e977fbc | ||
|
7432f4e9d9 | ||
|
559a4ec918 | ||
|
050d8a8d65 | ||
|
752f6b5591 | ||
|
bded90874e | ||
|
35ecbde693 | ||
|
20b3673aab | ||
|
d537052196 | ||
|
61623ab497 | ||
|
10b0101cc5 | ||
|
dc43104a70 | ||
|
8ecfbb3a8c | ||
|
dc97a4d380 | ||
|
c29e4eb944 | ||
|
27e147a8ce | ||
|
0bd6b3dd58 | ||
|
f6346c6228 | ||
|
0f4e223ce7 | ||
|
51ee32f5f8 | ||
|
4f61d2ea04 | ||
|
78ce856564 | ||
|
b1322d43b2 | ||
|
aa67222595 | ||
|
96249c12d9 | ||
|
7dd18589a5 | ||
|
4d85dd4f97 | ||
|
88325f637b | ||
|
d4d52e1529 | ||
|
ea41cfe290 | ||
|
f24b57378e | ||
|
57092f4990 | ||
|
2cf3f14c50 | ||
|
62f9d1ad46 | ||
|
7b1c15f182 | ||
|
6acb13c903 | ||
|
b8abfb1392 | ||
|
5c1c28109f | ||
|
844adc86c6 | ||
|
5840b212a8 | ||
|
85aff698ca | ||
|
dda1cb9346 | ||
|
6ad06fc731 | ||
|
64701d0798 | ||
|
3a0f9f2fa0 | ||
|
b7066b9232 | ||
|
069fc049db | ||
|
b4731b7f8f | ||
|
9d325e6c46 | ||
|
58276e81ee | ||
|
94a6102cd2 | ||
|
a6d3787507 | ||
|
33696393e7 | ||
|
959d3b9604 | ||
|
73b54ce2a6 | ||
|
d6cfd00ae2 | ||
|
c70f741627 | ||
|
41478e978c | ||
|
2d43fd458c | ||
|
dfc05a68a5 | ||
|
411b92440f | ||
|
552f858018 | ||
|
d413de1b19 | ||
|
f5612437ee | ||
|
e195303889 | ||
|
05dc65bd17 | ||
|
76ef3c45a5 | ||
|
db2889a983 | ||
|
4de70afa22 | ||
|
ba36b907ad | ||
|
96711c6c59 | ||
|
b74e243579 | ||
|
67e47135da | ||
|
b86422cd4b | ||
|
c9842e5aad | ||
|
f02ac8bc1e | ||
|
d908ad026d | ||
|
719ea022ec | ||
|
e2deec8235 | ||
|
6891f03119 | ||
|
10bc0d4660 | ||
|
50b1242e99 | ||
|
46e0fffb54 | ||
|
1f7d34ec5b | ||
|
627f8da3cd | ||
|
0e6c0af354 | ||
|
c62ef77697 | ||
|
915b771037 | ||
|
fade0c3b89 | ||
|
7e1d9ef9bf | ||
|
76e5143e42 | ||
|
e5b35337fd | ||
|
4b53972724 | ||
|
4e425b54b6 | ||
|
996bde80a9 | ||
|
ea189a3048 | ||
|
9750f6decd | ||
|
4d21384d8f | ||
|
6334168bf5 | ||
|
d958a24678 | ||
|
6ebf15d838 | ||
|
cb0c31945e | ||
|
28b35625dd | ||
|
49e652b7b7 | ||
|
805d4c7eea | ||
|
519232df78 | ||
|
a5ab400689 | ||
|
624c3fd847 | ||
|
c40624ae2a | ||
|
b8f1da6483 | ||
|
b558596409 | ||
|
5bd84f6f71 | ||
|
2d886daabd | ||
|
9b7c788cd0 | ||
|
a18a5734ac | ||
|
853b446e38 | ||
|
92c399e0d8 | ||
|
0459e0daff | ||
|
be032857f7 | ||
|
d0aeaab947 | ||
|
0e5df9c51c | ||
|
8edf4f0926 | ||
|
3fb2905c37 | ||
|
a56e47fe60 | ||
|
117cd33b49 | ||
|
12fa72a06d | ||
|
206b52833f | ||
|
376708b586 | ||
|
7e4f12743f | ||
|
61b6cd9d28 | ||
|
f026550f89 | ||
|
98ed87b556 | ||
|
d23ee5f365 | ||
|
6d2eb03402 | ||
|
cfb579dd67 | ||
|
ff8d24cabb | ||
|
d054f63e68 | ||
|
e7358c5930 | ||
|
38d07d3a24 | ||
|
02343c22f6 | ||
|
3917c60749 | ||
|
8fbbb41a19 | ||
|
9d21d48cda | ||
|
9c053ec989 | ||
|
5ffc6ceb55 | ||
|
3e427ad17e | ||
|
212a1a5c74 | ||
|
c0ea1c0e9f | ||
|
2a901a72f3 | ||
|
a753f34e30 | ||
|
a993c589ae | ||
|
375fca5058 | ||
|
2c0782d1e0 | ||
|
6ba2363bdb | ||
|
93181db68b | ||
|
410db43f20 | ||
|
ea9e2812c6 | ||
|
b0420ca511 | ||
|
0462ebf0d6 | ||
|
bb881021ce | ||
|
fbd70c81c3 | ||
|
5cbfa17321 | ||
|
33336d0369 | ||
|
19e8fbb20e | ||
|
83faff8706 | ||
|
24b0857a72 | ||
|
2cd05a3756 | ||
|
41e7aa19d5 | ||
|
283e351724 | ||
|
273642a8b3 | ||
|
ba326df6d9 | ||
|
eb0e645def | ||
|
8eb8919ce0 | ||
|
02ea0aaa93 | ||
|
2e4cdd4c23 | ||
|
52e02af86b | ||
|
0db7879a66 | ||
|
06343fa9a5 | ||
|
00f45a4a73 | ||
|
671935f24b | ||
|
3f73319068 | ||
|
c507b701ab | ||
|
b734e3ba63 | ||
|
a9ee20cb9a | ||
|
5c26ccdb29 | ||
|
3f71ab80ad | ||
|
e01231bd49 | ||
|
50028685dc | ||
|
0e5d6af68e | ||
|
5c6912f561 | ||
|
d736b55644 | ||
|
35bc1e1d9e | ||
|
4866a25a8f | ||
|
c720dd4960 | ||
|
12e01218ad | ||
|
dc7c7fb9f5 | ||
|
b364fee806 | ||
|
92fd611209 | ||
|
9cb76114c6 | ||
|
2a91e496ee | ||
|
488db450b8 | ||
|
3ea9bab324 | ||
|
af96e9f353 | ||
|
76daabf6d1 | ||
|
3120d985ff | ||
|
63ca8c414e | ||
|
056bfd312e | ||
|
30dad221ed | ||
|
0fc26352d8 | ||
|
672fc60b5a | ||
|
bc79a9a2cf | ||
|
4ac1aacc17 | ||
|
4642da06e1 | ||
|
046679ddf3 | ||
|
5cd0ec8575 | ||
|
8c2a6aae31 | ||
|
5549fbd6a4 | ||
|
7b9ef6b390 | ||
|
e2904d3baf | ||
|
d72bcb149f | ||
|
07f305cd59 | ||
|
71b6fab74b | ||
|
bc64f3aee1 | ||
|
f60be66d1f | ||
|
b087c08d76 | ||
|
c14a14e3b4 | ||
|
4562306ce4 | ||
|
4afb871782 | ||
|
f7c36c6d94 | ||
|
f1332c7722 | ||
|
4164b8a053 | ||
|
aaed9f77d9 | ||
|
b254ea8274 | ||
|
64d1301b5a | ||
|
a889320d42 | ||
|
60cdfaa11f | ||
|
6d2267d243 | ||
|
e5613026c4 | ||
|
28f733a9a4 | ||
|
db96138813 | ||
|
8ed6ec437b | ||
|
81931d1ac0 | ||
|
c25856d1c0 | ||
|
1378f6b543 | ||
|
6ed46baf49 | ||
|
6243d16945 | ||
|
b3dff9df15 | ||
|
39e534bddc | ||
|
85e2f6b26c | ||
|
7360d0abe7 | ||
|
90f10847f7 | ||
|
8235099f4d | ||
|
9ee1847379 | ||
|
c4a2dbd1b0 | ||
|
1536f521d6 | ||
|
8b1a8d5b67 | ||
|
bf225ab7da | ||
|
3b895a3c12 | ||
|
a42b3c36e4 | ||
|
43546cb5c2 | ||
|
b401f547ae | ||
|
d4d04c83db | ||
|
c36d8c9271 | ||
|
6a28201e3d | ||
|
38ad1ca394 | ||
|
02ad6b17ed | ||
|
36183cfc51 | ||
|
007c9521ca | ||
|
220e18d065 | ||
|
8bf9b670ed | ||
|
66b782da3c | ||
|
b199e9d05f | ||
|
1a11aa059f | ||
|
736015f36f | ||
|
e9ab780527 | ||
|
e307cad501 | ||
|
99b99bda0f | ||
|
6653bb5224 | ||
|
294eb31cfd | ||
|
d6874fe7b9 | ||
|
410cf69b0c | ||
|
72fbbdf854 | ||
|
f4fd842be1 | ||
|
55b3e641ef | ||
|
26fae132d6 | ||
|
0f2f124c3a | ||
|
e029a98c22 | ||
|
0e2788de4a | ||
|
9ea129b8a9 | ||
|
8d2d9b803a | ||
|
84c205bd06 | ||
|
d8bfa93f21 | ||
|
8aab5a9b24 | ||
|
156fead517 | ||
|
15e69dbf34 | ||
|
87d2179956 | ||
|
59e556f3f3 | ||
|
06414ac85a | ||
|
a8987adb67 | ||
|
c37310b4e0 | ||
|
5225c75d3b | ||
|
48ec990a49 | ||
|
7c1b7ee87d | ||
|
fa79aaa0f3 | ||
|
be1cd6987b | ||
|
e83eccee31 | ||
|
2bec8c9d4c | ||
|
c495e0d727 | ||
|
189ce2a5a6 | ||
|
d5286af2e1 | ||
|
942d362ff8 | ||
|
9832737843 | ||
|
b8c5e9c209 | ||
|
cbf3e61d63 | ||
|
3a96c90c54 | ||
|
9853869a79 | ||
|
4f7e9dc2ed | ||
|
44da696ad7 | ||
|
0b1a448150 | ||
|
81a4d8344b | ||
|
b5f763447c | ||
|
8ff8f676b3 | ||
|
bf734eb002 | ||
|
ae4d4544d9 | ||
|
13e7f56754 | ||
|
e26ad0de12 | ||
|
44d99fa60f | ||
|
26368a1ead | ||
|
824fae4cb1 | ||
|
a3b032b118 | ||
|
c0b4a2cab0 | ||
|
82a57e41e1 | ||
|
545f9cebb2 | ||
|
b0fbeb6801 | ||
|
a8c5f55315 | ||
|
b3e56c95ef | ||
|
14894f2e27 | ||
|
24b2c4be8c | ||
|
1ece139178 | ||
|
37cc1e2fd6 | ||
|
42aaad43db | ||
|
4e7702a6a9 | ||
|
7ec3a7e98b | ||
|
01a6c4874a | ||
|
3b73f625b8 | ||
|
80381b0578 | ||
|
b39cb1229a | ||
|
62ad2403a0 | ||
|
d0ca0f41f7 | ||
|
1fef0ce8de | ||
|
17289faf7f | ||
|
c894716295 | ||
|
d809cd0f7f | ||
|
474212939d | ||
|
70732b0ca4 | ||
|
3c35117f97 | ||
|
4cf350a716 | ||
|
5b94656442 | ||
|
2c124893ec | ||
|
b6925bdd6f | ||
|
c7a7376545 | ||
|
bec50f65f4 | ||
|
076f08cb3e | ||
|
6128c20937 | ||
|
586989350b | ||
|
85cde17c46 | ||
|
92ff994cc2 | ||
|
87f4b28b99 | ||
|
c129b6d921 | ||
|
4b87ae3dca | ||
|
901af6a681 | ||
|
99ddf459e0 | ||
|
7cf1e01cd4 | ||
|
2335229c32 | ||
|
5b4d1dbd4b | ||
|
6dd04063ba | ||
|
21d02b8266 | ||
|
fbd676f4c9 | ||
|
dfe30e58c0 | ||
|
273b4c8702 | ||
|
7c3a119d6d | ||
|
4a3a446ba7 | ||
|
18290a7b6b | ||
|
7d8d8a6e52 | ||
|
67a4cf93be | ||
|
0947a64a90 | ||
|
aa0089a3ec | ||
|
343d1d4873 | ||
|
6f47c884d5 | ||
|
4f7736a088 | ||
|
22d077f9f1 | ||
|
2ab01e7302 | ||
|
d80fdbe146 | ||
|
2fd0af4f8f | ||
|
2543e2179c | ||
|
1395e7ecc4 | ||
|
9fd4378def | ||
|
bb282448c6 | ||
|
81edd1f9b4 | ||
|
6a154167cf | ||
|
9d8b342e60 | ||
|
d09c3d0af8 | ||
|
dd896f6f44 | ||
|
bad53bf847 | ||
|
9fe829874b | ||
|
1286711ac4 | ||
|
52ca35327e | ||
|
ddcd5f7083 | ||
|
54840389ee | ||
|
45eff312cb | ||
|
babe6046e5 | ||
|
87b8c1ee2f | ||
|
51495b1b75 | ||
|
c187cf8b9e | ||
|
001d0051e9 | ||
|
e431470ff9 | ||
|
d663eb4466 | ||
|
6dd8e04438 | ||
|
e43e639c30 | ||
|
543cf1e2fd | ||
|
bc03c010b3 | ||
|
72dcb3a11f | ||
|
9f21cc3e98 | ||
|
4534537036 | ||
|
9853f1de67 | ||
|
b4e471c87d | ||
|
b627a42898 | ||
|
7015c76c63 | ||
|
d4c64771cd | ||
|
2a0d98c2bc | ||
|
412fe7d9ac | ||
|
228156e79f | ||
|
07ab1cc82d | ||
|
6696d40cfc | ||
|
4fce13e06b | ||
|
2c5bba3c48 | ||
|
14877a7ec6 | ||
|
30a7d19d84 | ||
|
29b5003455 | ||
|
2f00ca4663 | ||
|
17577d2581 | ||
|
3df71d678d | ||
|
c03d7794b8 | ||
|
4bdbb3092c | ||
|
f4992a4484 | ||
|
5af1d7c6b1 | ||
|
99e2606982 | ||
|
3194e0556f | ||
|
0743ceefa2 | ||
|
c699471994 | ||
|
16e620d647 | ||
|
55b6f3455c | ||
|
8a913baed8 | ||
|
a6bdcbc007 | ||
|
64fda67763 | ||
|
284f15be02 | ||
|
6bd0ffc494 | ||
|
57981ed025 | ||
|
2041f3c7a1 | ||
|
5299f047e4 | ||
|
e326b06983 | ||
|
08b6106aac | ||
|
f920d349e0 | ||
|
4cb4eee23a | ||
|
99064a58d9 | ||
|
40721f49ba | ||
|
99d9e764a2 | ||
|
ec5b1422bc | ||
|
06034b258a | ||
|
8369c55edb | ||
|
0453ed98df | ||
|
876bba3d07 | ||
|
ada4584cb6 | ||
|
61ff0eb940 | ||
|
2f30fda4f9 | ||
|
eff677ca98 | ||
|
95caf762d4 | ||
|
281855e88c | ||
|
937954cf6c | ||
|
3842b59f75 | ||
|
c876fe350d | ||
|
7ce90a0399 | ||
|
eff61af6df | ||
|
7cc36bd42f | ||
|
c477928b0e | ||
|
5d40ec3e8c | ||
|
eb9c664d7e | ||
|
6b222fb084 | ||
|
8029339c49 | ||
|
9e1f2b035f | ||
|
53685ada35 | ||
|
6bfb792439 | ||
|
6efbed51ac | ||
|
490f7af4ae | ||
|
e2e6fcdb96 | ||
|
a2dd6efcb4 | ||
|
0fa49018cd | ||
|
947c03e948 | ||
|
8df62f2f2c | ||
|
3a0e02cede | ||
|
c47d1ffba6 | ||
|
4f84ffa118 | ||
|
189623614d | ||
|
626a875de1 | ||
|
6d1d6a7c51 | ||
|
6d460b61bf | ||
|
9e3546028d | ||
|
e07cf7f629 | ||
|
6cca9a9466 | ||
|
f17f96cb7e | ||
|
2766144b8b | ||
|
0c5274549b | ||
|
42b48b7435 | ||
|
28ff80d3d1 | ||
|
aa79640218 | ||
|
4fe1f62ba3 | ||
|
42da121600 | ||
|
99ecbf5e56 | ||
|
49427c48c5 | ||
|
dca369cf41 | ||
|
6df1cc63b6 | ||
|
d06d9f3e8f | ||
|
6a905ae2e1 | ||
|
d32fd58722 | ||
|
00b5dc8b49 | ||
|
afe29ee7fa | ||
|
e0ef51b11e | ||
|
3729b96625 | ||
|
a8abe1d677 | ||
|
a36bf31a0d | ||
|
f20efc6007 | ||
|
3bb27eb416 | ||
|
0ca6002b4f | ||
|
530d26a1f4 | ||
|
2c475add8c | ||
|
45b928f8bc | ||
|
d1f9e06a4f | ||
|
93e9710caf | ||
|
7073bdfead | ||
|
24c2e4433b | ||
|
986c4778fa | ||
|
2e7cfa0400 | ||
|
2aa6fc1c7f | ||
|
7c8a8400e0 | ||
|
fad52db479 | ||
|
39ce22150a | ||
|
9638666d84 | ||
|
5414600e1e | ||
|
cc16769179 | ||
|
3e342246d4 | ||
|
946f17e93d | ||
|
fb8e6124e0 | ||
|
21d3e290b7 | ||
|
a9ba54f678 | ||
|
e6f5065f32 | ||
|
85a69768d0 | ||
|
6829350af9 | ||
|
102c1db735 | ||
|
7af8ab2470 | ||
|
4cee67df3f | ||
|
2d57c60148 | ||
|
edc8eb63c4 | ||
|
9bfa6b51be | ||
|
e98bba2535 | ||
|
bbd6a57c0f | ||
|
21810f11e4 | ||
|
b79a0447b9 | ||
|
d722e70817 | ||
|
e40e5f572f | ||
|
b33127f494 | ||
|
ba6760683b | ||
|
b1cf981c52 | ||
|
37e2c59096 | ||
|
eb91f91569 | ||
|
be87e0099f | ||
|
dbc0c37750 | ||
|
bfa63932ce | ||
|
5456e195db | ||
|
87eac43fb9 | ||
|
fe6de816d6 | ||
|
f19c62c80e | ||
|
378a335468 | ||
|
9b70d4380c | ||
|
c27a2fc7cb | ||
|
f8efb5d474 | ||
|
d1aa59982d | ||
|
a6558c0562 | ||
|
bd2d3b8603 | ||
|
0a6bcfc9ff | ||
|
8b6907f2a6 | ||
|
85afe48c3e | ||
|
efbdd483b3 | ||
|
7eb8535edf | ||
|
78e04c07b8 | ||
|
e452980e0e | ||
|
35fd771c84 | ||
|
faaac75546 | ||
|
f1f01771b6 | ||
|
884f73fb04 | ||
|
0f6e982ad7 | ||
|
2c057d9bc1 | ||
|
94fc56c038 | ||
|
860262952d | ||
|
fcc2247774 | ||
|
6faee56f86 | ||
|
d3456f5060 | ||
|
4cbd5d1b44 | ||
|
73b019a390 | ||
|
fb6191b71a | ||
|
4514e748f0 | ||
|
f135cab83e | ||
|
2c2cdfddd3 | ||
|
d489f1a170 | ||
|
0e21c6f3fd | ||
|
005f75bd61 | ||
|
a7d86fe3a7 | ||
|
b42b015cc6 | ||
|
2fe3073697 | ||
|
3fe4b41f20 | ||
|
fa7890f39d | ||
|
aa60e56199 | ||
|
aa6c33b21c | ||
|
5a10ec60be | ||
|
2e85425c53 | ||
|
0e58b59794 | ||
|
1f27911997 | ||
|
f60128b69d | ||
|
edecbf4799 | ||
|
a8f4a76c7b | ||
|
8851d86847 | ||
|
7611e49b9d | ||
|
7ec2e1cd2f | ||
|
2696f1a29f | ||
|
ec45b8fde8 | ||
|
fca88bb94d | ||
|
d0a7e496aa | ||
|
42c7e4f66a | ||
|
d27f5971c5 | ||
|
48027a8058 | ||
|
7b23673851 | ||
|
31a693a035 | ||
|
67e5343daf | ||
|
016c5fd083 | ||
|
3d9b919814 | ||
|
26e0a5472f | ||
|
7026466324 | ||
|
be56c5c328 | ||
|
23ad93627b | ||
|
2f380814d3 | ||
|
80eb313eed | ||
|
00983aa86f | ||
|
79f281e74f | ||
|
00f4a0f89b | ||
|
dd53e7f79e | ||
|
18fc5a1391 | ||
|
3b8cfa42c1 | ||
|
5022a451df | ||
|
9a0ff8b21b | ||
|
1b564c1ba8 | ||
|
111c8cc62a | ||
|
2f805d7a02 | ||
|
a3899d8151 | ||
|
94a650cdf7 | ||
|
1519a676bd | ||
|
4089e90890 | ||
|
f669426bf4 | ||
|
52719b52ae | ||
|
182f353b2f | ||
|
ff7bf747bf | ||
|
ecf4001e6f | ||
|
9aa299bea4 | ||
|
2ec3a199af | ||
|
208dfd22c6 | ||
|
8d7eca9482 | ||
|
ac3ecb2b2d | ||
|
774b3a6e1d | ||
|
1e6e5529c6 | ||
|
7efab12e6f | ||
|
125f94d8ab | ||
|
4750cbe55b | ||
|
3022d74beb | ||
|
7093412f4e | ||
|
b0dd4ba09c | ||
|
1890ad20f8 | ||
|
72bd9ef29a | ||
|
98b26cc24a | ||
|
0679260073 | ||
|
dca5194279 | ||
|
91fadeb6c3 | ||
|
5dbf87e2c1 | ||
|
32fad87a08 | ||
|
4965d6a8ac | ||
|
3660920b7f | ||
|
7afcd2a8b7 | ||
|
d66ad21ee0 | ||
|
87cd66a577 | ||
|
769462faaa | ||
|
13657fdb5b | ||
|
190782c3e0 | ||
|
aa4fac61c8 | ||
|
cc8ec38a87 | ||
|
c5325f5016 | ||
|
81d845fb2c | ||
|
467dec4d16 | ||
|
21b3382f31 | ||
|
090d563488 | ||
|
cfde03ec9b | ||
|
177cbd81af | ||
|
b6562a664b | ||
|
c7eba0c5c7 | ||
|
a444572c3e | ||
|
70422cda51 | ||
|
97e7efc020 | ||
|
49c40a2941 | ||
|
2e8f4e2c24 | ||
|
f9bedd5ca5 | ||
|
0cd7e2cfb0 | ||
|
db9768f25d | ||
|
c302dbcc96 | ||
|
421dd31d49 | ||
|
982cf2be5e | ||
|
d69a80fad7 | ||
|
457642cc4a | ||
|
be7d79768e | ||
|
35ca454cab | ||
|
c1b8c4f96f | ||
|
151ba9ee8f | ||
|
0c6423da8d | ||
|
48beb0433e | ||
|
5ec739bf2e | ||
|
6ab81dcc31 | ||
|
0b8acaac31 | ||
|
08d575adf9 | ||
|
5821136dfa | ||
|
a7a504a466 | ||
|
367e4877f1 | ||
|
776c660542 | ||
|
e01c32f3bd | ||
|
762a9f00bb | ||
|
738ff9dc04 | ||
|
684072fe12 | ||
|
9563c07146 | ||
|
c930c8c464 | ||
|
aee5cbdfe3 | ||
|
9ab89bd8fa | ||
|
5c47607ab2 | ||
|
5b633d64f1 | ||
|
6a4dbedd1e | ||
|
01cd8472c7 | ||
|
f81c82f5fa | ||
|
fce48c3014 | ||
|
5abc69f31d | ||
|
ad50a00020 | ||
|
c37af4cfca | ||
|
0fc0d9ebb1 | ||
|
0016d65532 | ||
|
9292cad39a | ||
|
c1369e8c41 | ||
|
8c9f250587 | ||
|
f222c2155d | ||
|
185225a5fc | ||
|
74599f6c97 | ||
|
d7db8c9c80 | ||
|
b9b765038e | ||
|
e7a9e7ca3d | ||
|
818842de06 | ||
|
1b2eeb23e0 | ||
|
11d11f93ee | ||
|
7b5e004dd6 | ||
|
9ecd5fb6fe | ||
|
ecb2293d6d | ||
|
1b63247b81 | ||
|
4a5fdb9a3a | ||
|
5d30831fb8 | ||
|
35ed79f2d4 | ||
|
05d71fa69b | ||
|
c35bb8dd73 | ||
|
88d9285bd0 | ||
|
cfcc8d85b2 | ||
|
ffa81857c2 | ||
|
49a55a099e | ||
|
7a9c744b70 | ||
|
6c7d2a2e25 | ||
|
386fccd02c | ||
|
6a95219ed3 | ||
|
59f0ec1fdf | ||
|
5fb6fad175 | ||
|
564be44f45 | ||
|
b931c51937 | ||
|
61ee431169 | ||
|
2ffc6d281b | ||
|
56e7afe56c | ||
|
27bb510282 | ||
|
7dc7b866b1 | ||
|
7f49ae633b | ||
|
d769f5675d | ||
|
dba4efbcae | ||
|
4bc97ad145 | ||
|
4a1877d0f6 | ||
|
19c1f5661f | ||
|
2e47094764 | ||
|
8e2d1b358c | ||
|
787f81f3f5 | ||
|
ddf55b3772 | ||
|
7c61e5769f | ||
|
9da45923b3 | ||
|
57fa5a22de | ||
|
9a093ecbe9 | ||
|
bcedb5314c | ||
|
c6b134123b | ||
|
96aa1eee17 | ||
|
75c0dc0cd8 | ||
|
8e53386de9 | ||
|
8d80203d65 | ||
|
135a9a95b8 | ||
|
e6302ccd70 | ||
|
656a5dcc1f | ||
|
5c505d9a9b | ||
|
f37138ce91 | ||
|
c71845ee8c | ||
|
bc62c17a7f | ||
|
275c40d26d | ||
|
b45debb93a | ||
|
14f8f7e3bd | ||
|
029e53ddb5 | ||
|
0089017d54 | ||
|
5af47c9baf | ||
|
5461abeeba | ||
|
bdda5b93d7 | ||
|
6dccccc2a3 | ||
|
245513e7ec | ||
|
1786a68256 | ||
|
0898bd371d | ||
|
f844296b0a | ||
|
acbadb9fba | ||
|
d1d300b44b | ||
|
115cf65ebf | ||
|
13894e2da0 | ||
|
b728d330c2 | ||
|
02acdae022 | ||
|
cf96d9175f | ||
|
118940ed9a | ||
|
5c8d677356 | ||
|
84f3a2b1d1 | ||
|
fc6330a01a | ||
|
4a0f0ddbd7 | ||
|
a8cd1eac1d | ||
|
c6853581c5 | ||
|
4d605ec26f | ||
|
7c23a2e38e | ||
|
ccf1e97aa1 | ||
|
6988b4e2c4 | ||
|
afb96acfdd | ||
|
9c5efed7da | ||
|
606e996e1f | ||
|
e36c669d97 | ||
|
da5192e622 | ||
|
f1a66daeeb | ||
|
c3505bb4f6 | ||
|
abb04ec321 | ||
|
6b9122b5f5 | ||
|
a86055a037 | ||
|
7f248437e8 | ||
|
9a55c931f8 | ||
|
556cc8a7b2 | ||
|
a236c39ee5 | ||
|
46d01bc7fd | ||
|
e5fc4de8c9 | ||
|
924592dc47 | ||
|
56c8c8ab4f | ||
|
a980ad08b4 | ||
|
1f3083be75 | ||
|
d0dfb6cf6f | ||
|
601646e3b0 | ||
|
ae79d1af90 | ||
|
88f105e184 | ||
|
f3c750787b | ||
|
705a985789 | ||
|
47bae01cfa | ||
|
45ed1a9b6d | ||
|
a1157f86f2 | ||
|
396249d9e0 | ||
|
ac175b23b7 | ||
|
bc52d5f1f4 | ||
|
329a414584 | ||
|
166d83b206 | ||
|
4a63e19e47 | ||
|
748fdbcd6a | ||
|
063c818c72 | ||
|
736fea6c44 | ||
|
2fca81eca8 | ||
|
c150c0a456 | ||
|
05dfc83df5 | ||
|
3368adc547 | ||
|
28b802b229 | ||
|
e4216bd015 | ||
|
364d6e0346 | ||
|
dd34ad7037 | ||
|
2d1144a5cd | ||
|
5bc6d59142 | ||
|
a610016952 | ||
|
197ed01e95 | ||
|
41d1898fcd | ||
|
468a9787d1 | ||
|
7f4708479d | ||
|
22577aed85 | ||
|
2d8a2944ba | ||
|
d969be0fb4 | ||
|
92d479a54b | ||
|
32c349d30e | ||
|
7f050e0a6d | ||
|
a978879ddb | ||
|
d243b6cdf3 | ||
|
9186b861a6 | ||
|
2b2bdabe72 | ||
|
a1a169fbe8 | ||
|
2b71c738b8 | ||
|
e56911f66b | ||
|
adacd51a30 | ||
|
78ded05547 | ||
|
3d516e71d3 | ||
|
17cf47df44 | ||
|
ebcf3f23aa | ||
|
9daef292e9 | ||
|
f81c1910ee | ||
|
2f9dde09e1 | ||
|
aa46e0f0a7 | ||
|
7215e542b1 | ||
|
97ea95c80c | ||
|
9ba2c794db | ||
|
9164e9f85f | ||
|
2cdcb1f857 | ||
|
c3408740b0 | ||
|
a07a35d0f6 | ||
|
9c8ef7369f | ||
|
a8669e023a | ||
|
d617c8cf32 | ||
|
6b2f00e70a | ||
|
9b002025d4 | ||
|
d09eb6f856 | ||
|
be3dde7698 | ||
|
77e4217919 | ||
|
ee19792605 | ||
|
f335322ace | ||
|
6265add147 | ||
|
dddceeb10d | ||
|
909468c4dc | ||
|
d5ce3d28ab | ||
|
a23db39c8a | ||
|
7e52f64044 | ||
|
de3a6706e7 | ||
|
a438d7c3b8 | ||
|
4ca68ffb1c | ||
|
bb9392e4e1 | ||
|
70bf3bb8fa | ||
|
2f23e70ad5 | ||
|
3b3741c10a | ||
|
a8da29e888 | ||
|
b35becef2e | ||
|
b9852e83d2 | ||
|
5547b74717 | ||
|
7068a790b2 | ||
|
6b89a0da11 | ||
|
d4546753f6 | ||
|
734a043b22 | ||
|
4dc0e5cc81 | ||
|
4bae44e412 | ||
|
7b4d618994 | ||
|
1db1bceaa7 | ||
|
2fe3de6c69 | ||
|
19046a253b | ||
|
b187662f39 | ||
|
0589c178ba | ||
|
42e038f227 | ||
|
2efaa5ea1e | ||
|
9f97f0b284 | ||
|
6338d51353 | ||
|
9e7c3770e3 | ||
|
0f36ef3392 | ||
|
a0b009f1ed | ||
|
317f1e8391 | ||
|
5d78952024 | ||
|
1c61d4ce90 | ||
|
20bd5e8a9c | ||
|
69cd1e107a | ||
|
d8e25f06b1 | ||
|
2c59b5b8cf | ||
|
4d37135884 | ||
|
b5007e09b1 | ||
|
ae0fa8ba49 | ||
|
e2d69ad98c | ||
|
40ea081198 | ||
|
94cb4d6c0c | ||
|
6ede6ac246 | ||
|
cf2cbe6ff6 | ||
|
8d91d4c8e1 | ||
|
5962c44511 | ||
|
84df40a128 | ||
|
1b5f6c2dc0 | ||
|
0e327e9a70 | ||
|
fe11f7a2e5 | ||
|
9a9aa6fdb9 | ||
|
0bf42067d2 | ||
|
88a63011ea | ||
|
405ed2b4ce | ||
|
d92f02e2e5 | ||
|
efdda7f7d9 | ||
|
41ffe7f3c6 | ||
|
9f15d9ee57 | ||
|
59c55e003e | ||
|
0133dba0c6 | ||
|
efe84ec41a | ||
|
d74ab36324 | ||
|
82ef7b5df1 | ||
|
b09b5584e0 | ||
|
8aab548ecd | ||
|
9c887efa0e | ||
|
4198ceb83a | ||
|
4d80956566 | ||
|
b0f3e623b7 | ||
|
5dcd1d1714 | ||
|
055875fbd8 | ||
|
4462342076 | ||
|
d21fd37650 | ||
|
bd3c7654ec | ||
|
4ea1841f31 | ||
|
56b0f836c5 | ||
|
a58bf95914 | ||
|
e302bacd7e | ||
|
72951421e6 | ||
|
cc762c2b71 | ||
|
647b518bd3 | ||
|
c07fba4508 | ||
|
dbf784472e | ||
|
bab23a250b | ||
|
07ce196d8e | ||
|
2e1a4e74a4 | ||
|
f22efba486 | ||
|
c6cd3b242a | ||
|
9c474c4b73 | ||
|
e16dc27e47 | ||
|
05c3f303bf | ||
|
f07ea94798 | ||
|
fea0f9243d | ||
|
13356a9001 | ||
|
9db517f324 | ||
|
61175644d0 | ||
|
a015b91e6b | ||
|
94eb475177 | ||
|
4fec953e6e | ||
|
901cd2704c | ||
|
72aed01dbd | ||
|
e2ffc35894 | ||
|
c2b1271dbe | ||
|
a58b713a5e | ||
|
c1145f0c89 | ||
|
a857b28008 | ||
|
85f42a25d5 | ||
|
a17d32a373 | ||
|
6b3406e630 | ||
|
1868985dde | ||
|
bb7cf5a5b7 | ||
|
0e01cbc6cd | ||
|
f315111bb5 | ||
|
c306a27941 | ||
|
8bb7cd286b | ||
|
28c3533d11 | ||
|
e72a9a78b0 | ||
|
be97a36f25 | ||
|
bae799382a | ||
|
cc1deb2902 | ||
|
bb264f6828 | ||
|
2da5db933c | ||
|
357505e752 | ||
|
c8b2c4c94d | ||
|
690643fc77 | ||
|
853b8ebd02 | ||
|
56988ffbf8 | ||
|
d4f283b67b | ||
|
d72864de95 | ||
|
2186ce3d58 | ||
|
84607161b4 | ||
|
157e18b215 | ||
|
aa52c3f5eb | ||
|
0bb8b46ba8 | ||
|
b87c6b8799 | ||
|
aebaa14eba | ||
|
17eff53f35 | ||
|
2da2fba042 | ||
|
dc25409cbf | ||
|
93ba586ec3 | ||
|
c2c4d853c2 | ||
|
888540c2d3 | ||
|
40b45515a4 | ||
|
a6a07059c1 | ||
|
8a63d7e898 | ||
|
7a15da2a8c | ||
|
c7d1aa3e92 | ||
|
fe7a58d92e | ||
|
848ad61bba | ||
|
f189d8c454 | ||
|
9d1c0efb1f | ||
|
82b7d4f3da | ||
|
dad3a0938a | ||
|
a25e7ee9d7 | ||
|
132d571fe2 | ||
|
1c1c4e5d94 | ||
|
2e7f8711e9 | ||
|
b68104a8a0 | ||
|
b1257cefe1 | ||
|
fcbcaa10a7 | ||
|
ee5ff8ce0c | ||
|
abe20f6120 | ||
|
e3e520d154 | ||
|
cef5aa294e | ||
|
fe93a3f9ed | ||
|
53d808d2eb | ||
|
381e224f6b | ||
|
7bb12665d6 | ||
|
ef440b9aef | ||
|
42e9c80279 | ||
|
2eb3149565 | ||
|
90dad446b7 | ||
|
693f9f51a0 | ||
|
f9dc185ede | ||
|
47e3f49e52 | ||
|
97e20ef342 | ||
|
51e6ce3aa7 | ||
|
589bbcaa08 | ||
|
e98e9000c7 | ||
|
7bb9f6bf28 | ||
|
2cc6699f0d | ||
|
a21a206c89 | ||
|
faedd8ff75 | ||
|
0cdde63c57 | ||
|
dbd58d7666 | ||
|
c15b618a17 | ||
|
5ba105e9b5 | ||
|
90fb8391fc | ||
|
482f318a23 | ||
|
7a764cf610 | ||
|
4de4349109 | ||
|
ffd69754f9 | ||
|
9ed5151de9 | ||
|
f8e7a249ba | ||
|
2d753d95fb | ||
|
d622c4a7a0 | ||
|
48d8d198b2 | ||
|
995e16d4d4 | ||
|
04e0dc4a7a | ||
|
f1b60c66f0 | ||
|
ca0fa4af1e | ||
|
f482244f45 | ||
|
6ada5978d0 | ||
|
190f710942 | ||
|
c69ad5efa2 | ||
|
a8322459ab | ||
|
bba03c886c | ||
|
995e4c829a | ||
|
1b14ce5db3 | ||
|
91b8923601 | ||
|
96676ca251 | ||
|
478317abcb | ||
|
12139bcde7 | ||
|
78417c5532 | ||
|
25723b4239 | ||
|
3523e1a9f3 | ||
|
4ceb46a700 | ||
|
e7c6eac607 | ||
|
4eb7ef494d | ||
|
a3019731cc | ||
|
45fc95b667 | ||
|
aa7ab16fd0 | ||
|
087979eeb9 | ||
|
a97fcf19ec | ||
|
37b0646e76 | ||
|
3ff8adc553 | ||
|
e5a6b0f8e5 | ||
|
02032b7106 | ||
|
13b394c1a7 | ||
|
f58f37e944 | ||
|
65b29fe533 | ||
|
c439c5849b | ||
|
a6d4998c6c | ||
|
ee9914c712 | ||
|
6a06db09ca | ||
|
c944116833 | ||
|
95f062bf0d | ||
|
c6bdbefdc4 | ||
|
28bb8c6ff7 | ||
|
3346301777 | ||
|
8b5423aa60 | ||
|
f9ea9220d8 | ||
|
04cd478035 | ||
|
3ff9c476a0 | ||
|
03ee0756b8 | ||
|
1dfba2a699 | ||
|
6363f7820d | ||
|
02a394ea57 | ||
|
dac991c056 | ||
|
e0e45ffa1a | ||
|
c3e14b54ae | ||
|
c6749d5c4a | ||
|
10f862bd74 | ||
|
8734889272 | ||
|
be393a7484 | ||
|
e4748fe448 | ||
|
5afb7ab003 | ||
|
5c4fcd99d6 | ||
|
7a05b393c5 | ||
|
02cff5abc1 | ||
|
8653bb1b32 | ||
|
e1b835bdbf | ||
|
0929e96728 | ||
|
faf6297972 | ||
|
4cdcbbd1a9 | ||
|
b114e3a051 | ||
|
afc130ff3f | ||
|
faf6123150 | ||
|
205eadcb84 | ||
|
7f6784d4e7 | ||
|
ebdb7b3e4d | ||
|
4920e639f9 | ||
|
8d00977681 | ||
|
894e5cddd6 | ||
|
26f8fa7ade | ||
|
42d5dfd3de | ||
|
fd41270d6d | ||
|
a9e7d67427 | ||
|
45b008dd23 | ||
|
0bb830022c | ||
|
1faa571f3f | ||
|
1fec01561d | ||
|
e7354f244c | ||
|
aee59404ce | ||
|
7d75bfb449 | ||
|
3dd6e3103f | ||
|
1c55924045 | ||
|
1ea3af8959 | ||
|
3b800165b0 | ||
|
d7f1a784a8 | ||
|
c19ebd0b0a | ||
|
6f60301d25 | ||
|
0743faf2e3 | ||
|
cc3672cb73 | ||
|
40f360445b | ||
|
9c544a5552 | ||
|
ae7e375a4d | ||
|
2d4c0b87b1 | ||
|
216196a10d | ||
|
f06c4dcc6b | ||
|
85e90601e0 | ||
|
392473c7b5 | ||
|
28399a216b | ||
|
a18424267b | ||
|
d44ed03b6c | ||
|
1e06829961 | ||
|
bf0dbdbd19 | ||
|
b1f27287ae | ||
|
dabe14ae67 | ||
|
e18763e13f | ||
|
28b277aa42 | ||
|
b0680d65fe | ||
|
c10c5224ff | ||
|
f3dd15ad64 | ||
|
ea8315ba56 | ||
|
2416c31a30 | ||
|
5ebd478325 | ||
|
1f647e4479 | ||
|
67231bd69a | ||
|
29721ac552 | ||
|
91948dea80 | ||
|
5df3a0bb4a | ||
|
3c1e022d0e | ||
|
cc40a5870a | ||
|
f42c81e4ed | ||
|
a43bfe2916 | ||
|
44564cb682 | ||
|
3abb21080d | ||
|
b15dcb5cf6 | ||
|
08ed0988ff | ||
|
da59d797d1 | ||
|
ec4c169e3e | ||
|
f395f87bb3 | ||
|
c53eb190c7 | ||
|
cb0c9a4570 | ||
|
ba342e1d14 | ||
|
4d376dfd64 | ||
|
4795177ced | ||
|
b96e648019 | ||
|
0540c212ea | ||
|
d936dba7ff | ||
|
34e76ade03 | ||
|
e897a5654d | ||
|
b667d82f0b | ||
|
01a10da73d | ||
|
4d9f67c79b | ||
|
2557948179 | ||
|
37375fcc4d | ||
|
77bfc12e0f | ||
|
18c3f39c18 | ||
|
92231340ec | ||
|
e6c18b4497 | ||
|
29ef7062a7 | ||
|
d8daf05e4a | ||
|
5251d08663 | ||
|
5a030eaa33 | ||
|
c212c184f3 | ||
|
6ec5f8841b | ||
|
63bb46a2fd | ||
|
3bd9ddca94 | ||
|
6cf426345b | ||
|
1a02d3306b | ||
|
76d35dde1d | ||
|
2995806a44 | ||
|
61feb649d1 | ||
|
dfb43905bb | ||
|
576fafbaf8 | ||
|
ddd59f19ae | ||
|
9382aa286c | ||
|
d7c1d220b5 | ||
|
e51e5de1f8 | ||
|
76014b92a4 | ||
|
e62c917ddf | ||
|
647d351278 | ||
|
8972448127 | ||
|
1b5e679282 | ||
|
11d5cb8095 | ||
|
df197bc424 | ||
|
741535dc28 | ||
|
2aadf2eb26 | ||
|
53f498c968 | ||
|
3a61dd7fe7 | ||
|
c569aee023 | ||
|
af4e39385c | ||
|
4aee0280f9 | ||
|
69bf140506 | ||
|
541cb0d9b2 | ||
|
bbdcc14b1c | ||
|
0ca4e6dcfa | ||
|
89a3b8fa8a | ||
|
096a5518e5 | ||
|
edb6d19aa8 | ||
|
2d3f3a1613 | ||
|
05ae94092e | ||
|
2323dbcb4f | ||
|
f9e430f65b | ||
|
8ed8682256 | ||
|
4d0a26db58 | ||
|
e3c859ed96 | ||
|
d52031a4f1 | ||
|
2e3a080e10 | ||
|
1f2d67a841 | ||
|
8f0337f217 | ||
|
531c94a0c7 | ||
|
9992fb183a | ||
|
2834e5b3c8 | ||
|
e0759a5e35 | ||
|
31334ebcfe | ||
|
8107ff8636 | ||
|
997b1797f4 | ||
|
9dedcb67e9 | ||
|
53d3cc5f3f | ||
|
e5633f656f | ||
|
e202420456 | ||
|
764cb5b8a5 | ||
|
a67f36888c | ||
|
f493606999 | ||
|
be8bbcbe92 | ||
|
fb49e9126e | ||
|
b75d476bb7 | ||
|
6d109254ab | ||
|
81860b482a | ||
|
6aa11ac494 | ||
|
5066818284 | ||
|
8bb3e5a017 | ||
|
30b40247a3 | ||
|
0d6316b008 | ||
|
9ccafe8e49 | ||
|
a17b6e9369 | ||
|
3ecd2363a6 | ||
|
6be0de5d7b | ||
|
3f4f51833a | ||
|
b45429ce03 | ||
|
51aac7ca93 | ||
|
d2753d6374 | ||
|
626b06bb5a | ||
|
d58a040eb2 | ||
|
711fa80fa1 | ||
|
20b5a26a3c | ||
|
db5fa3bffc | ||
|
dc0433f02a | ||
|
1c5ddc893a | ||
|
d6eebaa47a | ||
|
bc94df7288 | ||
|
5e5b31ecbd | ||
|
0b8a47c3f7 | ||
|
baa89e9c25 | ||
|
0e7f676aa7 | ||
|
16f1abe1c8 | ||
|
d326ca1f36 | ||
|
11a32fce15 | ||
|
ddb2899505 | ||
|
0e462a3905 | ||
|
79f2289a9d | ||
|
4453711b5a | ||
|
454de56c6b | ||
|
56229b7a06 | ||
|
2330d3ad03 | ||
|
ad827eaa71 | ||
|
0cf2390c3f | ||
|
9b8c59d6b7 | ||
|
393b1f8998 | ||
|
f9849f7cc4 | ||
|
6eac9b5891 | ||
|
8a5ef4c1cc | ||
|
bee8e81d5a | ||
|
77ba2d496b | ||
|
83d74e7433 | ||
|
abbc784010 | ||
|
2955b1f0e9 | ||
|
90e95d15a2 | ||
|
1d01b8c6f0 | ||
|
ff2c7c8720 | ||
|
84344399b5 | ||
|
7b2bb7ecc8 | ||
|
d55ca68f7d | ||
|
91bc5b5e94 | ||
|
978503cd46 | ||
|
1f4ef448de | ||
|
9f784c65a2 | ||
|
898cc5663d | ||
|
9cca5bf4b0 | ||
|
92996dac21 | ||
|
dbad45a273 | ||
|
3bb1e64408 | ||
|
3736938030 | ||
|
a27227b831 | ||
|
d7fa4292ce | ||
|
c9a99bf63a | ||
|
a5c5c19bcf | ||
|
88b3d86b29 | ||
|
678aa63b3a | ||
|
81b8d07acd | ||
|
ea87f9102b | ||
|
90aee8453f | ||
|
ab7fbd08a7 | ||
|
51b55982e4 | ||
|
3ddb05d443 | ||
|
2d655a487e | ||
|
cf955094b4 | ||
|
551c74123c | ||
|
8ba61029e1 | ||
|
8c2b8c835a | ||
|
eafa7c68b6 | ||
|
6f6b831722 | ||
|
4e3c0529cf | ||
|
467efcb423 | ||
|
424278db3f | ||
|
b3cd576737 | ||
|
636e2e9172 | ||
|
d6d3d0eacd | ||
|
ad5d9aa28a | ||
|
1d3bce1a59 | ||
|
bf95874c2d | ||
|
b707be90a1 | ||
|
1de09c477c | ||
|
a3bab12b50 | ||
|
e4930be4ff | ||
|
fb9571ee3c | ||
|
08b9354ff3 | ||
|
9eca7c52f6 | ||
|
690783179e | ||
|
50647e58e4 | ||
|
e09679f2d1 | ||
|
d4719197b2 | ||
|
90831e7451 | ||
|
3fd6e34ab8 | ||
|
b524c18a3e | ||
|
398486f5f6 | ||
|
fd265bd7ac | ||
|
5797340164 | ||
|
30952992e1 | ||
|
b27429b126 | ||
|
98e7e64391 | ||
|
a2a8ce4947 | ||
|
a5ed119813 | ||
|
bed8b2a0a6 | ||
|
4e5e72fa12 | ||
|
4c84e191fd | ||
|
5d361b602d | ||
|
7dcfda815c | ||
|
f271bebb71 | ||
|
54433319af | ||
|
52192f19d6 | ||
|
42914af218 | ||
|
b4e781d72d | ||
|
6e71e94242 | ||
|
0d8e26588a | ||
|
770adbc8a3 | ||
|
b15963abb8 | ||
|
b86c4bd522 | ||
|
842e40d7cd | ||
|
478a9030a5 | ||
|
43d07fe695 | ||
|
798ea90784 | ||
|
654c59a5f8 | ||
|
439e67d1d8 | ||
|
325d74c30f | ||
|
abf3bde91b | ||
|
08a6834075 | ||
|
84f423f030 | ||
|
0f7b021fe6 | ||
|
38f21f93e9 | ||
|
16437937f7 | ||
|
016e7bb968 | ||
|
176de8bd25 | ||
|
c0590f5de0 | ||
|
52265ae007 | ||
|
8ff9781eae | ||
|
2f824a4a18 | ||
|
f4cb10f596 | ||
|
ee5338ff13 | ||
|
a0f8b40d5a | ||
|
10b08aa2bb | ||
|
50a72881be | ||
|
103d84448f | ||
|
d3ec7cdd48 | ||
|
32e65f2f8d | ||
|
5c5cd20b9d | ||
|
1d18b12ff7 | ||
|
77af265315 | ||
|
56f6734fa5 | ||
|
358fecdcf0 | ||
|
c5a9f22d4e | ||
|
4838d7bd56 | ||
|
8de4d4d2ea | ||
|
259180a568 | ||
|
0c2cdcae83 | ||
|
764881a94b | ||
|
3b928898ef | ||
|
5ed33debf4 | ||
|
a65b6ae946 | ||
|
3dfbe52699 | ||
|
689b9e0475 | ||
|
829ad06179 | ||
|
29a0ff73e6 | ||
|
3a7fe56a5d | ||
|
f4be6dc36f | ||
|
1176530663 | ||
|
6709cf03fa | ||
|
17be785eef | ||
|
dbda7ab66f | ||
|
55e4e2b9a4 | ||
|
c2082ce92a | ||
|
1c0b769e96 | ||
|
053939e27c | ||
|
2f83e6a65d | ||
|
4f4be5c498 | ||
|
064d6d3427 | ||
|
9acaefc3b0 | ||
|
840d39b9d0 | ||
|
4190b48924 | ||
|
e2d0c7de30 | ||
|
56eede6e38 | ||
|
5d99a70597 | ||
|
db419efbf2 | ||
|
9139d0fab1 | ||
|
469d4dbbab | ||
|
e128cbc680 | ||
|
058a67cb4a | ||
|
d4815873fe | ||
|
042a025835 | ||
|
4e59858941 | ||
|
5aecdd0840 | ||
|
f23394986a | ||
|
9835ea27d2 | ||
|
b1a3479500 | ||
|
39867020f7 | ||
|
2d0182345a | ||
|
2a2df969b0 | ||
|
385274e2dd | ||
|
e8cf32cf15 | ||
|
a23e8da23e | ||
|
f68d8d5459 | ||
|
a54be9726d | ||
|
7052992973 | ||
|
73c6e99e14 | ||
|
5140a990fe | ||
|
e8c7597b17 | ||
|
5fab184d80 | ||
|
8f9723ae3b | ||
|
96c65e94e1 | ||
|
fd3c571d36 | ||
|
301675c112 | ||
|
d734bd784c | ||
|
8e047e931e | ||
|
c52763f7de | ||
|
7b44ae4384 | ||
|
4d10ead793 | ||
|
d5b3bb4f4a | ||
|
be56475ccf | ||
|
edf02414b9 | ||
|
a8cda82924 | ||
|
a71d80239d | ||
|
dbb72f4923 | ||
|
201f00ab6f | ||
|
53b304e6a9 | ||
|
a0bbb9ef99 | ||
|
2af6fd4def | ||
|
144a8b5b84 | ||
|
4ba56962e6 | ||
|
d9a287e9a5 | ||
|
8f4acea874 | ||
|
b5531f5126 | ||
|
7b081be46d | ||
|
751641c2be | ||
|
e2fc578f6d | ||
|
bad0dd5991 | ||
|
44bdafa17e | ||
|
bf6af0f52e | ||
|
156053cafd | ||
|
ff410211e9 | ||
|
206df96bc4 | ||
|
64a6bd4c3e | ||
|
2913ef5c93 | ||
|
5eab2ddb2e | ||
|
402bc38ba7 | ||
|
02a6913590 | ||
|
cf26321e3b | ||
|
a44192dc98 | ||
|
0604640c14 | ||
|
0293d0c597 |
3
.gitattributes
vendored
3
.gitattributes
vendored
@@ -30,6 +30,9 @@
|
|||||||
*.TXT text
|
*.TXT text
|
||||||
*.y text
|
*.y text
|
||||||
|
|
||||||
|
# Files with these extensions must always have LF (Unix) line endings.
|
||||||
|
*.sh text eol=lf
|
||||||
|
|
||||||
# Files with these extensions end up in the built ReactOS system, so they
|
# Files with these extensions end up in the built ReactOS system, so they
|
||||||
# need to have CRLF line endings.
|
# need to have CRLF line endings.
|
||||||
*.bat text eol=crlf
|
*.bat text eol=crlf
|
||||||
|
5
.github/PULL_REQUEST_TEMPLATE.md
vendored
5
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -17,3 +17,8 @@ _Use a TODO when your pull request is Work in Progress._
|
|||||||
|
|
||||||
- [ ]
|
- [ ]
|
||||||
- [ ]
|
- [ ]
|
||||||
|
|
||||||
|
## Testbot runs (Filled in by Devs)
|
||||||
|
|
||||||
|
- [ ] KVM x86:
|
||||||
|
- [ ] KVM x64:
|
7
.github/labeler.yml
vendored
7
.github/labeler.yml
vendored
@@ -47,10 +47,7 @@ Win32SS:
|
|||||||
"input method":
|
"input method":
|
||||||
- changed-files:
|
- changed-files:
|
||||||
- any-glob-to-any-file:
|
- any-glob-to-any-file:
|
||||||
- base/applications/ctfmon/**
|
- base/ctf/**
|
||||||
- dll/ime/**
|
- win32ss/user/imm32/**
|
||||||
- dll/win32/imm32/**
|
|
||||||
- dll/win32/msctf/**
|
|
||||||
- dll/win32/msutb/**
|
|
||||||
- win32ss/user/ntuser/ime.c
|
- win32ss/user/ntuser/ime.c
|
||||||
- win32ss/user/user32/misc/imm.c
|
- win32ss/user/user32/misc/imm.c
|
||||||
|
34
.github/workflows/build.yml
vendored
34
.github/workflows/build.yml
vendored
@@ -15,7 +15,7 @@ jobs:
|
|||||||
- dllver: 0x600
|
- dllver: 0x600
|
||||||
config: Release
|
config: Release
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- name: Get RosBE build specifics
|
- name: Get RosBE build specifics
|
||||||
id: get_rosbe_spec
|
id: get_rosbe_spec
|
||||||
@@ -145,11 +145,19 @@ jobs:
|
|||||||
build-msvc-arm:
|
build-msvc-arm:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
toolset: ['14','14.2'] # VS 2022, 2019
|
os: [windows-2022, windows-latest]
|
||||||
|
toolset: ['14', '14.29'] # VS 2022 (ongoing), 2019 (last)
|
||||||
arch: [arm, arm64]
|
arch: [arm, arm64]
|
||||||
config: [Debug, Release]
|
config: [Debug, Release]
|
||||||
|
exclude:
|
||||||
|
# arm64: windows-latest is enough/fine.
|
||||||
|
- os: windows-2022
|
||||||
|
arch: arm64
|
||||||
|
# arm (sdk): only available on windows-2022.
|
||||||
|
- os: windows-latest
|
||||||
|
arch: arm
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
runs-on: windows-latest
|
runs-on: ${{matrix.os}}
|
||||||
steps:
|
steps:
|
||||||
- name: Install ninja
|
- name: Install ninja
|
||||||
run: choco install -y ninja
|
run: choco install -y ninja
|
||||||
@@ -165,6 +173,7 @@ jobs:
|
|||||||
uses: ilammy/msvc-dev-cmd@v1
|
uses: ilammy/msvc-dev-cmd@v1
|
||||||
with:
|
with:
|
||||||
arch: amd64_arm
|
arch: amd64_arm
|
||||||
|
sdk: 10.0.22621.0 # Windows SDK 10.0.26100.0 dropped support for 32-bit ARM
|
||||||
toolset: ${{matrix.toolset}}
|
toolset: ${{matrix.toolset}}
|
||||||
- name: Activate VS cmd (arm64)
|
- name: Activate VS cmd (arm64)
|
||||||
if: ${{ matrix.arch == 'arm64' }}
|
if: ${{ matrix.arch == 'arm64' }}
|
||||||
@@ -181,9 +190,21 @@ jobs:
|
|||||||
- name: Build base module
|
- name: Build base module
|
||||||
if: ${{ matrix.arch == 'arm' }}
|
if: ${{ matrix.arch == 'arm' }}
|
||||||
run: cmake --build build --target base/all
|
run: cmake --build build --target base/all
|
||||||
|
- name: Build dll:3rdparty
|
||||||
|
if: ${{ matrix.arch == 'arm' }}
|
||||||
|
run: cmake --build build --target dll/3rdparty/all -- -k0
|
||||||
- name: Build control panel applets
|
- name: Build control panel applets
|
||||||
if: ${{ matrix.arch == 'arm' }}
|
if: ${{ matrix.arch == 'arm' }}
|
||||||
run: cmake --build build --target dll/cpl/all
|
run: cmake --build build --target dll/cpl/all
|
||||||
|
- name: Build dll:opengl
|
||||||
|
if: ${{ matrix.arch == 'arm' }}
|
||||||
|
run: cmake --build build --target dll/opengl/all -- -k0
|
||||||
|
- name: Build dll:shellext
|
||||||
|
if: ${{ matrix.arch == 'arm' }}
|
||||||
|
run: cmake --build build --target dll/shellext/all -- -k0
|
||||||
|
- name: Build drivers:base
|
||||||
|
if: ${{ matrix.arch == 'arm' }}
|
||||||
|
run: cmake --build build --target drivers/base/all -- -k0
|
||||||
- name: Build rosapps
|
- name: Build rosapps
|
||||||
if: ${{ matrix.arch == 'arm' }}
|
if: ${{ matrix.arch == 'arm' }}
|
||||||
run: cmake --build build --target modules/rosapps/all
|
run: cmake --build build --target modules/rosapps/all
|
||||||
@@ -193,13 +214,20 @@ jobs:
|
|||||||
- name: Build some applications (arm64)
|
- name: Build some applications (arm64)
|
||||||
if: ${{ matrix.arch == 'arm64' }}
|
if: ${{ matrix.arch == 'arm64' }}
|
||||||
run: cmake --build build --target calc magnify mstsc notepad osk regedit taskmgr winmine wordpad base/applications/screensavers/all -- -k0
|
run: cmake --build build --target calc magnify mstsc notepad osk regedit taskmgr winmine wordpad base/applications/screensavers/all -- -k0
|
||||||
|
- name: Build control panel applets (arm64)
|
||||||
|
if: ${{ matrix.arch == 'arm64' }}
|
||||||
|
run: cmake --build build --target dll/cpl/all -- -k0
|
||||||
- name: Upload compiled binaries
|
- name: Upload compiled binaries
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: reactos-msvc${{matrix.toolset}}-${{matrix.arch}}-${{matrix.config}}-${{github.sha}}
|
name: reactos-msvc${{matrix.toolset}}-${{matrix.arch}}-${{matrix.config}}-${{github.sha}}
|
||||||
path: |
|
path: |
|
||||||
build/base
|
build/base
|
||||||
|
build/dll/3rdparty
|
||||||
build/dll/cpl
|
build/dll/cpl
|
||||||
|
build/dll/opengl
|
||||||
|
build/dll/shellext
|
||||||
|
build/drivers/base
|
||||||
build/modules/rosapps
|
build/modules/rosapps
|
||||||
build/subsystems
|
build/subsystems
|
||||||
!**/CMakeFiles
|
!**/CMakeFiles
|
||||||
|
@@ -68,6 +68,9 @@ include(sdk/cmake/config.cmake)
|
|||||||
# Compiler flags handling
|
# Compiler flags handling
|
||||||
include(sdk/cmake/compilerflags.cmake)
|
include(sdk/cmake/compilerflags.cmake)
|
||||||
|
|
||||||
|
# set_wine_module function
|
||||||
|
include(sdk/cmake/set_wine_module.cmake)
|
||||||
|
|
||||||
add_definitions(
|
add_definitions(
|
||||||
-D__REACTOS__
|
-D__REACTOS__
|
||||||
# swprintf without count argument is used in most of the codebase
|
# swprintf without count argument is used in most of the codebase
|
||||||
@@ -140,6 +143,10 @@ if(NOT CMAKE_CROSSCOMPILING)
|
|||||||
add_definitions(/D_X86_ /D__i386__ /DWIN32 /D_WINDOWS)
|
add_definitions(/D_X86_ /D__i386__ /DWIN32 /D_WINDOWS)
|
||||||
elseif(ARCH STREQUAL "amd64")
|
elseif(ARCH STREQUAL "amd64")
|
||||||
add_definitions(-D_AMD64_ -D__x86_64__ /DWIN32 -D_WINDOWS)
|
add_definitions(-D_AMD64_ -D__x86_64__ /DWIN32 -D_WINDOWS)
|
||||||
|
elseif(ARCH STREQUAL "arm")
|
||||||
|
add_definitions(-D__arm__)
|
||||||
|
elseif(ARCH STREQUAL "arm64")
|
||||||
|
add_definitions(-D__aarch64__)
|
||||||
endif()
|
endif()
|
||||||
if(MSVC_VERSION GREATER 1699)
|
if(MSVC_VERSION GREATER 1699)
|
||||||
add_definitions(/D_ALLOW_KEYWORD_MACROS)
|
add_definitions(/D_ALLOW_KEYWORD_MACROS)
|
||||||
@@ -153,7 +160,10 @@ if(NOT CMAKE_CROSSCOMPILING)
|
|||||||
|
|
||||||
set(NATIVE_TARGETS asmpp bin2c widl gendib cabman fatten hpp isohybrid mkhive mkisofs obj2bin spec2def geninc mkshelllink utf16le xml2sdb)
|
set(NATIVE_TARGETS asmpp bin2c widl gendib cabman fatten hpp isohybrid mkhive mkisofs obj2bin spec2def geninc mkshelllink utf16le xml2sdb)
|
||||||
if(NOT MSVC)
|
if(NOT MSVC)
|
||||||
list(APPEND NATIVE_TARGETS rsym pefixup)
|
list(APPEND NATIVE_TARGETS pefixup)
|
||||||
|
if (ARCH STREQUAL "i386")
|
||||||
|
list(APPEND NATIVE_TARGETS rsym)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
install(TARGETS ${NATIVE_TARGETS})
|
install(TARGETS ${NATIVE_TARGETS})
|
||||||
@@ -233,6 +243,8 @@ Enable this if the module uses typeid or dynamic_cast. You will probably need to
|
|||||||
-D_WIN32_WINDOWS=0x502
|
-D_WIN32_WINDOWS=0x502
|
||||||
-D_SETUPAPI_VER=0x502
|
-D_SETUPAPI_VER=0x502
|
||||||
-DMINGW_HAS_SECURE_API=1
|
-DMINGW_HAS_SECURE_API=1
|
||||||
|
-DD3D_UMD_INTERFACE_VERSION=0x000C # Vista
|
||||||
|
-DDXGKDDI_INTERFACE_VERSION=0x1052 # Vista
|
||||||
-DDLL_EXPORT_VERSION=${DLL_EXPORT_VERSION})
|
-DDLL_EXPORT_VERSION=${DLL_EXPORT_VERSION})
|
||||||
|
|
||||||
# Arch Options
|
# Arch Options
|
||||||
@@ -250,7 +262,7 @@ Enable this if the module uses typeid or dynamic_cast. You will probably need to
|
|||||||
elseif(ARCH STREQUAL "amd64")
|
elseif(ARCH STREQUAL "amd64")
|
||||||
# clang-cl defines this one for itself
|
# clang-cl defines this one for itself
|
||||||
if (NOT (MSVC AND CMAKE_C_COMPILER_ID STREQUAL "Clang"))
|
if (NOT (MSVC AND CMAKE_C_COMPILER_ID STREQUAL "Clang"))
|
||||||
add_compile_definitions(_M_AMD64)
|
add_compile_definitions(_M_AMD64 _M_X64)
|
||||||
endif()
|
endif()
|
||||||
add_definitions(-D_AMD64_ -D__x86_64__ -D_WIN64)
|
add_definitions(-D_AMD64_ -D__x86_64__ -D_WIN64)
|
||||||
elseif(ARCH STREQUAL "arm")
|
elseif(ARCH STREQUAL "arm")
|
||||||
@@ -308,19 +320,23 @@ Enable this if the module uses typeid or dynamic_cast. You will probably need to
|
|||||||
|
|
||||||
include_directories(
|
include_directories(
|
||||||
sdk/include
|
sdk/include
|
||||||
sdk/include/psdk
|
|
||||||
sdk/include/dxsdk
|
|
||||||
${REACTOS_BINARY_DIR}/sdk/include
|
|
||||||
${REACTOS_BINARY_DIR}/sdk/include/psdk
|
|
||||||
${REACTOS_BINARY_DIR}/sdk/include/dxsdk
|
|
||||||
${REACTOS_BINARY_DIR}/sdk/include/ddk
|
|
||||||
${REACTOS_BINARY_DIR}/sdk/include/reactos
|
|
||||||
${REACTOS_BINARY_DIR}/sdk/include/reactos/mc
|
|
||||||
sdk/include/crt
|
sdk/include/crt
|
||||||
sdk/include/ddk
|
sdk/include/ddk
|
||||||
sdk/include/ndk
|
sdk/include/ndk
|
||||||
|
sdk/include/psdk
|
||||||
sdk/include/reactos
|
sdk/include/reactos
|
||||||
sdk/include/reactos/libs)
|
sdk/include/reactos/libs
|
||||||
|
sdk/include/vcruntime
|
||||||
|
sdk/include/winrt
|
||||||
|
${REACTOS_BINARY_DIR}/sdk/include
|
||||||
|
${REACTOS_BINARY_DIR}/sdk/include/psdk
|
||||||
|
${REACTOS_BINARY_DIR}/sdk/include/ddk
|
||||||
|
${REACTOS_BINARY_DIR}/sdk/include/dxsdk
|
||||||
|
${REACTOS_BINARY_DIR}/sdk/include/reactos
|
||||||
|
${REACTOS_BINARY_DIR}/sdk/include/reactos/mc
|
||||||
|
sdk/include/dxsdk
|
||||||
|
sdk/lib/pseh/include
|
||||||
|
)
|
||||||
|
|
||||||
if(ARCH STREQUAL "arm")
|
if(ARCH STREQUAL "arm")
|
||||||
include_directories(${REACTOS_SOURCE_DIR}/sdk/include/reactos/arm)
|
include_directories(${REACTOS_SOURCE_DIR}/sdk/include/reactos/arm)
|
||||||
@@ -328,16 +344,10 @@ Enable this if the module uses typeid or dynamic_cast. You will probably need to
|
|||||||
|
|
||||||
add_dependency_header()
|
add_dependency_header()
|
||||||
|
|
||||||
add_subdirectory(sdk/include/ndk/tests)
|
add_subdirectory(sdk/include)
|
||||||
add_subdirectory(sdk/include/xdk)
|
|
||||||
add_subdirectory(sdk/include/psdk)
|
|
||||||
add_subdirectory(sdk/include/dxsdk)
|
|
||||||
add_subdirectory(sdk/include/reactos/wine)
|
|
||||||
add_subdirectory(sdk/include/reactos/mc)
|
|
||||||
add_subdirectory(sdk/include/asm)
|
|
||||||
|
|
||||||
if(ARCH MATCHES "64$")
|
if(ARCH MATCHES "64$")
|
||||||
include(sdk/cmake/baseaddress64.cmake)
|
include(sdk/cmake/baseaddress64.cmake)
|
||||||
elseif(NO_ROSSYM)
|
elseif(NO_ROSSYM)
|
||||||
include(sdk/cmake/baseaddress_dwarf.cmake)
|
include(sdk/cmake/baseaddress_dwarf.cmake)
|
||||||
elseif(MSVC)
|
elseif(MSVC)
|
||||||
|
164
CODEOWNERS
164
CODEOWNERS
@@ -116,6 +116,20 @@
|
|||||||
# S: Abandoned
|
# S: Abandoned
|
||||||
/ntoskrnl/cache/
|
/ntoskrnl/cache/
|
||||||
|
|
||||||
|
# Client/Server Runtime Subsystem
|
||||||
|
# M: HBelusca, Hermès Bélusca-Maïto
|
||||||
|
# S: Maintained
|
||||||
|
/sdk/include/reactos/subsys/csr/ @HBelusca
|
||||||
|
/subsystems/csr/ @HBelusca
|
||||||
|
/win32ss/user/ntuser/csr.* @HBelusca
|
||||||
|
|
||||||
|
# Clipboard Viewer
|
||||||
|
# M: HBelusca, Hermès Bélusca-Maïto
|
||||||
|
# R: Mondgestein, Ricardo Hanke
|
||||||
|
# S: Maintained
|
||||||
|
/base/applications/clipbrd/ @HBelusca
|
||||||
|
/base/applications/cmdutils/clip/ @HBelusca
|
||||||
|
|
||||||
# CMake Build Scripts
|
# CMake Build Scripts
|
||||||
# M:
|
# M:
|
||||||
# R: learn-more, learn_more, Mark Jansen
|
# R: learn-more, learn_more, Mark Jansen
|
||||||
@@ -124,6 +138,58 @@
|
|||||||
/sdk/cmake/
|
/sdk/cmake/
|
||||||
*.cmake
|
*.cmake
|
||||||
|
|
||||||
|
# Command-line Utilities
|
||||||
|
# M: HBelusca, Hermès Bélusca-Maïto
|
||||||
|
# S: Maintained
|
||||||
|
/base/applications/cmdutils/attrib/ @HBelusca
|
||||||
|
/base/applications/cmdutils/chcp/ @HBelusca
|
||||||
|
/base/applications/cmdutils/doskey/ @HBelusca
|
||||||
|
/base/applications/cmdutils/eventcreate/ @HBelusca
|
||||||
|
/base/applications/cmdutils/find/ @HBelusca
|
||||||
|
/base/applications/cmdutils/help/ @HBelusca
|
||||||
|
/base/applications/cmdutils/mode/ @HBelusca
|
||||||
|
/base/applications/cmdutils/more/ @HBelusca
|
||||||
|
/base/applications/cmdutils/taskkill/ @HBelusca
|
||||||
|
/base/applications/cmdutils/timeout/ @HBelusca
|
||||||
|
/sdk/lib/conutils/ @HBelusca
|
||||||
|
|
||||||
|
# Command-line Prompt Interpreter
|
||||||
|
# M: HBelusca, Hermès Bélusca-Maïto
|
||||||
|
# S: Maintained
|
||||||
|
/base/shell/cmd/ @HBelusca
|
||||||
|
|
||||||
|
# Console Client/Server Subsystem, Terminal Emulator / Text-Mode
|
||||||
|
# M: HBelusca, Hermès Bélusca-Maïto
|
||||||
|
# S: Maintained
|
||||||
|
/dll/cpl/console/ @HBelusca
|
||||||
|
/dll/win32/kernel32/client/console/ @HBelusca
|
||||||
|
/dll/win32/kernel32/include/console.h @HBelusca
|
||||||
|
/drivers/base/condrv/ @HBelusca
|
||||||
|
/drivers/setup/blue/ @HBelusca
|
||||||
|
/modules/rostests/winetests/kernel32/console.c @HBelusca
|
||||||
|
/sdk/include/psdk/wincon.h @HBelusca
|
||||||
|
/sdk/include/reactos/wincon_undoc.h @HBelusca
|
||||||
|
/sdk/include/reactos/drivers/condrv/ @HBelusca
|
||||||
|
/sdk/include/reactos/drivers/blue/ @HBelusca
|
||||||
|
/sdk/include/reactos/subsys/win/conmsg.h @HBelusca
|
||||||
|
/sdk/include/reactos/subsys/win/console.h @HBelusca
|
||||||
|
/win32ss/user/ntuser/console.c @HBelusca
|
||||||
|
/win32ss/user/winsrv/concfg/ @HBelusca
|
||||||
|
/win32ss/user/winsrv/consrv/ @HBelusca
|
||||||
|
|
||||||
|
# Event Log Subsystem
|
||||||
|
# M: HBelusca, Hermès Bélusca-Maïto
|
||||||
|
# M: EricKohl, ekohl, Eric Kohl
|
||||||
|
# S: Maintained
|
||||||
|
/base/services/eventlog/ @EricKohl @HBelusca
|
||||||
|
/dll/win32/advapi32/service/eventlog.c @EricKohl @HBelusca
|
||||||
|
/sdk/lib/evtlib/ @HBelusca
|
||||||
|
|
||||||
|
# Event Log Viewer
|
||||||
|
# M: HBelusca, Hermès Bélusca-Maïto
|
||||||
|
# S: Maintained
|
||||||
|
/base/applications/mscutils/eventvwr/ @HBelusca
|
||||||
|
|
||||||
# File Patch API
|
# File Patch API
|
||||||
# M: learn-more, learn_more, Mark Jansen
|
# M: learn-more, learn_more, Mark Jansen
|
||||||
# S: Maintained
|
# S: Maintained
|
||||||
@@ -139,7 +205,7 @@
|
|||||||
# Filesystem Filter Manager
|
# Filesystem Filter Manager
|
||||||
# M: gedmurphy, Ged, Ged Murphy
|
# M: gedmurphy, Ged, Ged Murphy
|
||||||
# S: Maintained
|
# S: Maintained
|
||||||
/drivers/filters/fltmgr/ @gedmurphy
|
/drivers/filters/fltmgr/ @gedmurphy
|
||||||
|
|
||||||
# File Systems Run Time Library
|
# File Systems Run Time Library
|
||||||
# M: HeisSpiter, Heis Spiter, Pierre Schweitzer
|
# M: HeisSpiter, Heis Spiter, Pierre Schweitzer
|
||||||
@@ -150,11 +216,13 @@
|
|||||||
/sdk/lib/drivers/ntoskrnl_vista/fsrtl.c @HeisSpiter
|
/sdk/lib/drivers/ntoskrnl_vista/fsrtl.c @HeisSpiter
|
||||||
|
|
||||||
# Freeloader
|
# Freeloader
|
||||||
# M:
|
# M: HBelusca, Hermès Bélusca-Maïto
|
||||||
# R: tkreuzer, ThePhysicist, Timo Kreuzer
|
# R: tkreuzer, ThePhysicist, Timo Kreuzer
|
||||||
# R: Extravert-ir, extravert34, Victor Perevertkin
|
# R: Extravert-ir, extravert34, Victor Perevertkin
|
||||||
# S: Maintained
|
# S: Maintained
|
||||||
/boot/freeldr/freeldr/ @tkreuzer @Extravert-ir
|
/boot/freeldr/freeldr/ @HBelusca @tkreuzer @Extravert-ir
|
||||||
|
/boot/rtl/ @HBelusca
|
||||||
|
/ntoskrnl/config/cmboot.c @HBelusca
|
||||||
|
|
||||||
# HAL / APIC
|
# HAL / APIC
|
||||||
# M: tkreuzer, ThePhysicist, Timo Kreuzer
|
# M: tkreuzer, ThePhysicist, Timo Kreuzer
|
||||||
@@ -187,6 +255,12 @@
|
|||||||
# S: Maintained
|
# S: Maintained
|
||||||
/drivers/storage/mountmgr/ @HeisSpiter
|
/drivers/storage/mountmgr/ @HeisSpiter
|
||||||
|
|
||||||
|
# MSConfig
|
||||||
|
# M: HBelusca, Hermès Bélusca-Maïto
|
||||||
|
# S: Maintained
|
||||||
|
/base/applications/msconfig/ @HBelusca
|
||||||
|
/base/applications/msconfig_new/ @HBelusca
|
||||||
|
|
||||||
# Network Drivers
|
# Network Drivers
|
||||||
# M:
|
# M:
|
||||||
# R: ThFabba, Thomas Faber
|
# R: ThFabba, Thomas Faber
|
||||||
@@ -215,11 +289,29 @@
|
|||||||
# S: Maintained
|
# S: Maintained
|
||||||
/dll/ntdll/ @HeisSpiter @learn-more @ThFabba @tkreuzer
|
/dll/ntdll/ @HeisSpiter @learn-more @ThFabba @tkreuzer
|
||||||
|
|
||||||
|
# NT Virtual DOS Machine
|
||||||
|
# M: HBelusca, Hermès Bélusca-Maïto
|
||||||
|
# R: reactos573, aandrejevic, Aleksandar Andrejevic
|
||||||
|
# S: Maintained
|
||||||
|
/dll/win32/kernel32/client/vdm.c @reactos573 @HBelusca
|
||||||
|
/dll/win32/kernel32/include/vdm.h @reactos573 @HBelusca
|
||||||
|
/sdk/include/reactos/subsys/win/vdm.h @reactos573 @HBelusca
|
||||||
|
/ntoskrnl/vdm/ @reactos573 @HBelusca
|
||||||
|
/sdk/include/reactos/libs/fast486/ @reactos573 @HBelusca
|
||||||
|
/sdk/lib/fast486/ @reactos573 @HBelusca
|
||||||
|
/subsystems/mvdm/ @reactos573 @HBelusca
|
||||||
|
/subsystems/win/basesrv/vdm.* @reactos573 @HBelusca
|
||||||
|
|
||||||
# Printing
|
# Printing
|
||||||
# M: ColinFinck, Colin Finck
|
# M: ColinFinck, Colin Finck
|
||||||
# S: Maintained
|
# S: Maintained
|
||||||
/win32ss/printing/ @ColinFinck
|
/win32ss/printing/ @ColinFinck
|
||||||
|
|
||||||
|
# Program Manager
|
||||||
|
# M: HBelusca, Hermès Bélusca-Maïto
|
||||||
|
# S: Maintained
|
||||||
|
/base/shell/progman/ @HBelusca
|
||||||
|
|
||||||
# ReactOS API Tests
|
# ReactOS API Tests
|
||||||
# M:
|
# M:
|
||||||
# R: learn-more, learn_more, Mark Jansen
|
# R: learn-more, learn_more, Mark Jansen
|
||||||
@@ -232,7 +324,25 @@
|
|||||||
# S: Maintained
|
# S: Maintained
|
||||||
/modules/rostests/kmtests/ @ThFabba
|
/modules/rostests/kmtests/ @ThFabba
|
||||||
|
|
||||||
# ROS internals tools
|
# ReactOS Setup
|
||||||
|
# M: HBelusca, Hermès Bélusca-Maïto
|
||||||
|
# R: EricKohl, ekohl, Eric Kohl
|
||||||
|
# S: Maintained
|
||||||
|
/base/setup/ @HBelusca
|
||||||
|
/base/system/winlogon/setup.c @EricKohl
|
||||||
|
/dll/win32/setupapi/
|
||||||
|
/dll/win32/syssetup/ @EricKohl
|
||||||
|
/drivers/setup/ @HBelusca
|
||||||
|
/sdk/include/reactos/libs/syssetup/ @EricKohl
|
||||||
|
|
||||||
|
# ReactOS miscellaneous tools
|
||||||
|
# M:
|
||||||
|
# R: HBelusca, Hermès Bélusca-Maïto
|
||||||
|
# S: Maintained
|
||||||
|
/modules/rosapps/applications/cmdutils/cat/ @HBelusca
|
||||||
|
/modules/rosapps/applications/sysutils/utils/partinfo/ @HBelusca
|
||||||
|
|
||||||
|
# ReactOS internals tools
|
||||||
# M: HeisSpiter, Heis Spiter, Pierre Schweitzer
|
# M: HeisSpiter, Heis Spiter, Pierre Schweitzer
|
||||||
# S: Maintained
|
# S: Maintained
|
||||||
/modules/rosapps/applications/rosinternals/ @HeisSpiter
|
/modules/rosapps/applications/rosinternals/ @HeisSpiter
|
||||||
@@ -252,15 +362,26 @@
|
|||||||
/modules/rostests/kmtests/ntos_se/ @GeoB99
|
/modules/rostests/kmtests/ntos_se/ @GeoB99
|
||||||
/ntoskrnl/se/ @GeoB99
|
/ntoskrnl/se/ @GeoB99
|
||||||
|
|
||||||
|
# Session Manager Subsystem
|
||||||
|
# M: HBelusca, Hermès Bélusca-Maïto
|
||||||
|
# S: Maintained
|
||||||
|
/base/system/smss/ @HBelusca
|
||||||
|
/sdk/include/reactos/subsys/sm/ @HBelusca
|
||||||
|
/sdk/lib/smlib/ @HBelusca
|
||||||
|
|
||||||
# Shell
|
# Shell
|
||||||
# M:
|
# M:
|
||||||
# R: learn-more, learn_more, Mark Jansen
|
# R: learn-more, learn_more, Mark Jansen
|
||||||
# R: yagoulas, Giannis Adamopoulos
|
# R: yagoulas, Giannis Adamopoulos
|
||||||
|
# R: HBelusca, Hermès Bélusca-Maïto
|
||||||
# S: Maintained
|
# S: Maintained
|
||||||
/base/shell/explorer/ @learn-more @yagoulas
|
/base/shell/explorer/ @learn-more @yagoulas
|
||||||
/base/shell/rshell/ @learn-more @yagoulas
|
/base/shell/rshell/ @learn-more @yagoulas
|
||||||
/dll/win32/browseui/ @learn-more @yagoulas
|
/dll/win32/browseui/ @learn-more @yagoulas
|
||||||
/dll/win32/shell32/ @learn-more @yagoulas
|
/dll/win32/shell32/ @learn-more @yagoulas
|
||||||
|
/dll/win32/shell32/CShellLink.* @HBelusca
|
||||||
|
/dll/win32/shell32/CUserNotification.* @HBelusca
|
||||||
|
/dll/win32/shell32/systray.cpp @HBelusca
|
||||||
|
|
||||||
# Shell Extensions
|
# Shell Extensions
|
||||||
# M:
|
# M:
|
||||||
@@ -309,10 +430,34 @@
|
|||||||
/modules/rosapps/applications/cmdutils/vfdcmd/ @HeisSpiter
|
/modules/rosapps/applications/cmdutils/vfdcmd/ @HeisSpiter
|
||||||
/modules/rosapps/drivers/vfd/ @HeisSpiter
|
/modules/rosapps/drivers/vfd/ @HeisSpiter
|
||||||
|
|
||||||
# Win32 file functions
|
# Win32 Subsystem
|
||||||
# M: HeisSpiter, Heis Spiter, Pierre Schweitzer
|
# M:
|
||||||
|
# R: HBelusca, Hermès Bélusca-Maïto
|
||||||
# S: Maintained
|
# S: Maintained
|
||||||
/dll/win32/kernel32/client/file/ @HeisSpiter
|
/sdk/include/reactos/winbase_undoc.h @HBelusca
|
||||||
|
/subsystems/win/basesrv/
|
||||||
|
/win32ss/user/winsrv/
|
||||||
|
/win32ss/user/winsrv/usersrv/harderror.c @HBelusca
|
||||||
|
|
||||||
|
# Win32 Subsystem - File functions
|
||||||
|
# M: HeisSpiter, Heis Spiter, Pierre Schweitzer
|
||||||
|
# R: HBelusca, Hermès Bélusca-Maïto
|
||||||
|
# S: Maintained
|
||||||
|
/dll/win32/kernel32/client/file/ @HeisSpiter
|
||||||
|
/dll/win32/kernel32/client/file/find.c @HBelusca
|
||||||
|
|
||||||
|
# Win32 Subsystem - Shutdown
|
||||||
|
# M: HBelusca, Hermès Bélusca-Maïto
|
||||||
|
# R: EricKohl, ekohl, Eric Kohl
|
||||||
|
# S: Maintained
|
||||||
|
/base/system/winlogon/sas.c @EricKohl @HBelusca
|
||||||
|
/base/system/winlogon/shutdown.c @EricKohl @HBelusca
|
||||||
|
/dll/win32/advapi32/misc/shutdown.c @EricKohl
|
||||||
|
/dll/win32/msgina/shutdown.c @EricKohl @HBelusca
|
||||||
|
/win32ss/user/ntuser/shutdown.* @HBelusca
|
||||||
|
/win32ss/user/user32/misc/exit.c @HBelusca
|
||||||
|
/win32ss/user/winsrv/consrv/shutdown.c @HBelusca
|
||||||
|
/win32ss/user/winsrv/usersrv/shutdown.c @HBelusca
|
||||||
|
|
||||||
# Windows Network File Systems functions
|
# Windows Network File Systems functions
|
||||||
# M: HeisSpiter, Heis Spiter, Pierre Schweitzer
|
# M: HeisSpiter, Heis Spiter, Pierre Schweitzer
|
||||||
@@ -338,6 +483,11 @@
|
|||||||
amd64/ @tkreuzer
|
amd64/ @tkreuzer
|
||||||
/boot/freeldr/freeldr/arch/realmode/amd64.S @tkreuzer
|
/boot/freeldr/freeldr/arch/realmode/amd64.S @tkreuzer
|
||||||
|
|
||||||
|
# Wine DirectX
|
||||||
|
# M: DarkFire01, The_DarkFire_, Justin Miller
|
||||||
|
# S: Upstream
|
||||||
|
/dll/directx/wine/ @DarkFire01
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
# This is the list of translation teams in ReactOS GitHub organization.
|
# This is the list of translation teams in ReactOS GitHub organization.
|
||||||
# If you want to be part of one - hit us at https://chat.reactos.org/
|
# If you want to be part of one - hit us at https://chat.reactos.org/
|
||||||
|
356
CODING_STYLE.md
Normal file
356
CODING_STYLE.md
Normal file
@@ -0,0 +1,356 @@
|
|||||||
|
# Coding Style
|
||||||
|
|
||||||
|
This article describes general coding style guidelines, which should be used for new ReactOS code. These guidelines apply exclusively to C and C++ source files. The Members of ReactOS agreed on this document in the October 2013 meeting.
|
||||||
|
|
||||||
|
As much existing ReactOS code as possible should be converted to this style unless there are reasons against doing this (like if the code is going to be rewritten from scratch in the near future). See [Notes on reformatting existing code](#notes-on-reformatting-existing-code) for more details.
|
||||||
|
|
||||||
|
Code synchronized with other sources (like Wine) must not be rewritten. [3rd Party Files.txt](https://github.com/reactos/reactos/blob/master/media/doc/3rd%20Party%20Files.txt) and [WINESYNC.txt](https://github.com/reactos/reactos/blob/master/media/doc/WINESYNC.txt) files can be used for tracking synchronized files.
|
||||||
|
|
||||||
|
## File Structure
|
||||||
|
|
||||||
|
1. Every ReactOS source code file should include a file header like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
/*
|
||||||
|
* PROJECT: ReactOS Kernel
|
||||||
|
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||||
|
* PURPOSE: Does cool things like Memory Management
|
||||||
|
* COPYRIGHT: Copyright 2017 Arno Nymous <abc@mailaddress.com>
|
||||||
|
* Copyright 2017 Mike Blablabla <mike@blabla.com>
|
||||||
|
*/
|
||||||
|
```
|
||||||
|
|
||||||
|
Please use SPDX license identifiers available at https://spdx.org/licenses.
|
||||||
|
This makes our source file parseable by licensing tools!
|
||||||
|
|
||||||
|
You should add yourself to the `COPYRIGHT` section of a file if you did a major contribution to it and could take responsibility for the whole file or a part of it. Not more than 3 people shall be in that list for each file.
|
||||||
|
|
||||||
|
`FILE` line of the old header should be removed.
|
||||||
|
|
||||||
|
2. [Doxygen](https://doxygen.reactos.org/) documentation generator is used for ReactOS codebase, so use a proper header for functions, see [API Documentation](https://reactos.org/wiki/Documentation_Guidelines#API_Documentation) for details.
|
||||||
|
|
||||||
|
## Indentation and line width
|
||||||
|
|
||||||
|
1. Line width must be at most **100 characters**.
|
||||||
|
2. Do not add a space or tab at the end of any line.
|
||||||
|
3. Indent with **4 spaces**, don't use tabs!
|
||||||
|
4. Indent both a case label and the case statement of a switch statement.
|
||||||
|
|
||||||
|
**Right:**
|
||||||
|
```c
|
||||||
|
switch (Condition)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
DoSomething();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
DoMany();
|
||||||
|
ManyMore();
|
||||||
|
OtherThings();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Wrong:**
|
||||||
|
```c
|
||||||
|
switch(Condition)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
DoSomething();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
DoMany();
|
||||||
|
ManyMore();
|
||||||
|
OtherThings();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
5. When a function call does not fit onto a line, align arguments like this:
|
||||||
|
```c
|
||||||
|
FunctionCall(arg1,
|
||||||
|
arg2,
|
||||||
|
arg3);
|
||||||
|
```
|
||||||
|
|
||||||
|
6. Function headers should have this format (preserving the order as in the example):
|
||||||
|
```c
|
||||||
|
static // scope identifier
|
||||||
|
CODE_SEG("PAGE") // section placement
|
||||||
|
// other attributes
|
||||||
|
BOOLEAN // return type
|
||||||
|
FASTCALL // calling convention
|
||||||
|
IsOdd(
|
||||||
|
_In_ UINT32 Number);
|
||||||
|
```
|
||||||
|
|
||||||
|
## Spacing
|
||||||
|
|
||||||
|
1. Do not use spaces around unary operators.
|
||||||
|
**Right:** `i++;`
|
||||||
|
**Wrong:** `i ++;`
|
||||||
|
|
||||||
|
2. Place spaces around binary and ternary operators.
|
||||||
|
**Right:** `a = b + c;`
|
||||||
|
**Wrong:** `a=b+c;`
|
||||||
|
|
||||||
|
3. Do not place spaces before comma and semicolon.
|
||||||
|
|
||||||
|
**Right:**
|
||||||
|
```c
|
||||||
|
for (int i = 0; i < 5; i++)
|
||||||
|
DoSomething();
|
||||||
|
|
||||||
|
func1(a, b);
|
||||||
|
```
|
||||||
|
|
||||||
|
**Wrong:**
|
||||||
|
```c
|
||||||
|
for (int i = 0; i < 5 ; i++)
|
||||||
|
DoSomething();
|
||||||
|
|
||||||
|
func1(a , b) ;
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Place spaces between control statements and their parentheses.
|
||||||
|
|
||||||
|
**Right:**
|
||||||
|
```c
|
||||||
|
if (Condition)
|
||||||
|
DoSomething();
|
||||||
|
```
|
||||||
|
|
||||||
|
**Wrong:**
|
||||||
|
```c
|
||||||
|
if(Condition)
|
||||||
|
DoSomething();
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Do not place spaces between a function and its parentheses, or between a parenthesis and its content.
|
||||||
|
|
||||||
|
**Right:**
|
||||||
|
```c
|
||||||
|
func(a, b);
|
||||||
|
```
|
||||||
|
|
||||||
|
**Wrong:**
|
||||||
|
```c
|
||||||
|
func (a, b);
|
||||||
|
func( a, b );
|
||||||
|
```
|
||||||
|
|
||||||
|
## Line breaking
|
||||||
|
|
||||||
|
1. Each statement should get its own line.
|
||||||
|
|
||||||
|
**Right:**
|
||||||
|
```c
|
||||||
|
x++;
|
||||||
|
y++;
|
||||||
|
|
||||||
|
if (Condition)
|
||||||
|
DoSomething();
|
||||||
|
```
|
||||||
|
|
||||||
|
**Wrong:**
|
||||||
|
```c
|
||||||
|
x++; y++;
|
||||||
|
|
||||||
|
if (Condition) DoSomething();
|
||||||
|
```
|
||||||
|
|
||||||
|
## Braces
|
||||||
|
|
||||||
|
1. Always put braces (`{` and `}`) on their own lines.
|
||||||
|
2. One-line control clauses may use braces, but this is not a requirement. An exception are one-line control clauses including additional comments.
|
||||||
|
|
||||||
|
**Right:**
|
||||||
|
```c
|
||||||
|
if (Condition)
|
||||||
|
DoSomething();
|
||||||
|
|
||||||
|
if (Condition)
|
||||||
|
{
|
||||||
|
DoSomething();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Condition)
|
||||||
|
{
|
||||||
|
// This is a comment
|
||||||
|
DoSomething();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (A_Very || (Very && Long || Condition) &&
|
||||||
|
On_Many && Lines)
|
||||||
|
{
|
||||||
|
DoSomething();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Condition)
|
||||||
|
DoSomething();
|
||||||
|
else
|
||||||
|
DoSomethingElse();
|
||||||
|
|
||||||
|
if (Condition)
|
||||||
|
{
|
||||||
|
DoSomething();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DoSomethingElse();
|
||||||
|
YetAnother();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Wrong:**
|
||||||
|
```c
|
||||||
|
if (Condition) {
|
||||||
|
DoSomething();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Condition)
|
||||||
|
// This is a comment
|
||||||
|
DoSomething();
|
||||||
|
|
||||||
|
if (A_Very || (Very && Long || Condition) &&
|
||||||
|
On_Many && Lines)
|
||||||
|
DoSomething();
|
||||||
|
|
||||||
|
if (Condition)
|
||||||
|
DoSomething();
|
||||||
|
else {
|
||||||
|
DoSomethingElse();
|
||||||
|
YetAnother();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Control structures
|
||||||
|
|
||||||
|
1. Don't use inverse logic in control clauses.
|
||||||
|
**Right:** `if (i == 1)`
|
||||||
|
**Wrong:** `if (1 == i)`
|
||||||
|
|
||||||
|
2. Avoid too many levels of cascaded control structures. Prefer a "linear style" over a "tree style". Use `goto` when it helps to make the code cleaner (e.g. for cleanup paths).
|
||||||
|
|
||||||
|
**Right:**
|
||||||
|
```c
|
||||||
|
if (!func1())
|
||||||
|
return;
|
||||||
|
|
||||||
|
i = func2();
|
||||||
|
if (i == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
j = func3();
|
||||||
|
if (j == 1)
|
||||||
|
return;
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
**Wrong:**
|
||||||
|
```c
|
||||||
|
if (func1())
|
||||||
|
{
|
||||||
|
i = func2();
|
||||||
|
if (func2())
|
||||||
|
{
|
||||||
|
j = func3();
|
||||||
|
if (func3())
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Naming
|
||||||
|
|
||||||
|
1. Capitalize names of variables and functions. Hungarian Notation may be used when developing for Win32, but it is not required. If you don't use it, the first letter of a name must be a capital too (no lowerCamelCase). Do not use underscores as separators either.
|
||||||
|
|
||||||
|
**Right:**
|
||||||
|
```c
|
||||||
|
PLIST_ENTRY FirstEntry;
|
||||||
|
VOID NTAPI IopDeleteIoCompletion(PVOID ObjectBody);
|
||||||
|
PWSTR pwszTest;
|
||||||
|
```
|
||||||
|
|
||||||
|
**Wrong:**
|
||||||
|
```c
|
||||||
|
PLIST_ENTRY first_entry;
|
||||||
|
VOID NTAPI iop_delete_io_completion(PVOID objectBody);
|
||||||
|
PWSTR pwsztest;
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Avoid abbreviating function and variable names, use descriptive verbs where possible.
|
||||||
|
|
||||||
|
3. Precede boolean values with meaningful verbs like "is" and "did" if possible and if it fits the usage.
|
||||||
|
|
||||||
|
**Right:**
|
||||||
|
```c
|
||||||
|
BOOLEAN IsValid;
|
||||||
|
BOOLEAN DidSendData;
|
||||||
|
```
|
||||||
|
|
||||||
|
**Wrong:**
|
||||||
|
```c
|
||||||
|
BOOLEAN Valid;
|
||||||
|
BOOLEAN SentData;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Commenting
|
||||||
|
|
||||||
|
1. Avoid line-wasting comments, which could fit into a single line.
|
||||||
|
|
||||||
|
**Right:**
|
||||||
|
```c
|
||||||
|
// This is a one-line comment
|
||||||
|
|
||||||
|
/* This is a C-style comment */
|
||||||
|
|
||||||
|
// This is a comment over multiple lines.
|
||||||
|
// We don't define any strict rules for it.
|
||||||
|
```
|
||||||
|
|
||||||
|
**Wrong:**
|
||||||
|
```c
|
||||||
|
//
|
||||||
|
// This comment wastes two lines
|
||||||
|
//
|
||||||
|
```
|
||||||
|
|
||||||
|
## Null, false and 0
|
||||||
|
|
||||||
|
1. The null pointer should be written as `NULL`. In the rare case that your environment recommends a different null pointer (e.g. C++11 `nullptr`), you may use this one of course. Just don't use the value `0`.
|
||||||
|
|
||||||
|
2. Win32/NT Boolean values should be written as `TRUE` and `FALSE`. In the rare case that you use C/C++ `bool` variables, you should write them as `true` and `false`.
|
||||||
|
|
||||||
|
3. When you need to terminate ANSI or OEM string, or check for its terminator, use `ANSI_NULL`. If the string is Unicode or Wide string, use `UNICODE_NULL`.
|
||||||
|
|
||||||
|
## Notes on reformatting existing code
|
||||||
|
|
||||||
|
- Never totally reformat a file and put a code change into it. Do this in separate commits.
|
||||||
|
- If a commit only consists of formatting changes, say this clearly in the commit message by preceding it with *[FORMATTING]*.
|
||||||
|
|
||||||
|
## Other points
|
||||||
|
|
||||||
|
- Do not use `LARGE_INTEGER`/`ULARGE_INTEGER` unless needed for using APIs. Use `INT64`/`UINT64` instead
|
||||||
|
- Use `#pragma once` instead of guard defines in headers
|
||||||
|
- Don't specify a calling convention for a function unless required (usually for APIs or exported symbols)
|
||||||
|
|
||||||
|
## Using an automatic code style tool
|
||||||
|
|
||||||
|
TO BE ADDED BY User:Zefklop
|
||||||
|
|
||||||
|
## Points deliberately left out
|
||||||
|
|
||||||
|
Additional ideas were suggested during the discussion of this document, but a consensus couldn't be reached on them. Therefore we refrain from enforcing any rules on these points:
|
||||||
|
|
||||||
|
- TO BE ADDED BY User:Hbelusca
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [Kernel Coding Style](https://reactos.org/wiki/Kernel_Coding_Style)
|
||||||
|
- [GNU Indent](https://reactos.org/wiki/GNU_Indent)
|
@@ -7,8 +7,8 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
<p align=center>
|
<p align=center>
|
||||||
<a href="https://reactos.org/project-news/reactos-0414-released/">
|
<a href="https://reactos.org/project-news/reactos-0415-released/">
|
||||||
<img alt="ReactOS 0.4.14 Release" src="https://img.shields.io/badge/release-0.4.14-0688CB.svg"></a>
|
<img alt="ReactOS 0.4.15 Release" src="https://img.shields.io/badge/release-0.4.15-0688CB.svg"></a>
|
||||||
<a href="https://reactos.org/download/">
|
<a href="https://reactos.org/download/">
|
||||||
<img alt="Download ReactOS" src="https://img.shields.io/badge/download-latest-0688CB.svg"></a>
|
<img alt="Download ReactOS" src="https://img.shields.io/badge/download-latest-0688CB.svg"></a>
|
||||||
<a href="https://sourceforge.net/projects/reactos/">
|
<a href="https://sourceforge.net/projects/reactos/">
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
add_subdirectory(applications)
|
add_subdirectory(applications)
|
||||||
|
add_subdirectory(ctf)
|
||||||
add_subdirectory(services)
|
add_subdirectory(services)
|
||||||
add_subdirectory(setup)
|
add_subdirectory(setup)
|
||||||
add_subdirectory(shell)
|
add_subdirectory(shell)
|
||||||
|
@@ -3,10 +3,10 @@ add_subdirectory(atactl)
|
|||||||
add_subdirectory(cacls)
|
add_subdirectory(cacls)
|
||||||
add_subdirectory(calc)
|
add_subdirectory(calc)
|
||||||
add_subdirectory(charmap)
|
add_subdirectory(charmap)
|
||||||
|
add_subdirectory(cleanmgr)
|
||||||
add_subdirectory(clipbrd)
|
add_subdirectory(clipbrd)
|
||||||
add_subdirectory(cmdutils)
|
add_subdirectory(cmdutils)
|
||||||
add_subdirectory(control)
|
add_subdirectory(control)
|
||||||
add_subdirectory(ctfmon)
|
|
||||||
add_subdirectory(drwtsn32)
|
add_subdirectory(drwtsn32)
|
||||||
add_subdirectory(dxdiag)
|
add_subdirectory(dxdiag)
|
||||||
add_subdirectory(extrac32)
|
add_subdirectory(extrac32)
|
||||||
|
@@ -35,4 +35,4 @@ typedef struct _SENDCMDINPARAMS {
|
|||||||
ULONG dwReserved[4];
|
ULONG dwReserved[4];
|
||||||
UCHAR bBuffer[1];
|
UCHAR bBuffer[1];
|
||||||
} SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS;
|
} SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS;
|
||||||
#include <poppack.h>
|
#include <poppack.h>
|
||||||
|
@@ -28,7 +28,7 @@
|
|||||||
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||||
|
|
||||||
/* Icons */
|
/* Icons */
|
||||||
IDI_CALC ICON DISCARDABLE "res/calc.ico"
|
IDI_CALC ICON "res/calc.ico"
|
||||||
|
|
||||||
/* Manifest */
|
/* Manifest */
|
||||||
#include <reactos/manifest_exe.rc>
|
#include <reactos/manifest_exe.rc>
|
||||||
|
@@ -1015,10 +1015,16 @@ static void handle_copy_command(HWND hWnd)
|
|||||||
TCHAR display[MAX_CALC_SIZE];
|
TCHAR display[MAX_CALC_SIZE];
|
||||||
UINT n;
|
UINT n;
|
||||||
|
|
||||||
|
// Read current text from output display
|
||||||
n = GetDlgItemText(hWnd, IDC_TEXT_OUTPUT, display, SIZEOF(display));
|
n = GetDlgItemText(hWnd, IDC_TEXT_OUTPUT, display, SIZEOF(display));
|
||||||
|
|
||||||
if (calc.base == IDC_RADIO_DEC && _tcschr(calc.buffer, _T('.')) == NULL)
|
// Check if result is a true number
|
||||||
display[n - calc.sDecimal_len] = _T('\0');
|
if (!calc.is_nan)
|
||||||
|
{
|
||||||
|
// Remove trailing decimal point if no decimal digits exist
|
||||||
|
if (calc.base == IDC_RADIO_DEC && _tcschr(calc.buffer, _T('.')) == NULL)
|
||||||
|
display[n - calc.sDecimal_len] = _T('\0');
|
||||||
|
}
|
||||||
|
|
||||||
CopyMemToClipboard(display);
|
CopyMemToClipboard(display);
|
||||||
}
|
}
|
||||||
|
@@ -801,11 +801,13 @@ MapWndProc(HWND hwnd,
|
|||||||
infoPtr->CurrentFont.lfFaceName,
|
infoPtr->CurrentFont.lfFaceName,
|
||||||
SIZEOF(lfFaceName));
|
SIZEOF(lfFaceName));
|
||||||
SetFont(infoPtr, lfFaceName);
|
SetFont(infoPtr, lfFaceName);
|
||||||
|
SetCaretXY(infoPtr, infoPtr->CaretX, infoPtr->CaretY, FALSE, TRUE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FM_SETFONT:
|
case FM_SETFONT:
|
||||||
infoPtr->CaretX = infoPtr->CaretY = infoPtr->iYStart = 0;
|
infoPtr->CaretX = infoPtr->CaretY = infoPtr->iYStart = 0;
|
||||||
SetFont(infoPtr, (LPWSTR)lParam);
|
SetFont(infoPtr, (LPWSTR)lParam);
|
||||||
|
SetCaretXY(infoPtr, infoPtr->CaretX, infoPtr->CaretY, FALSE, TRUE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FM_GETCHAR:
|
case FM_GETCHAR:
|
||||||
|
@@ -13,7 +13,7 @@ add_library(charmap MODULE
|
|||||||
charmap.rc)
|
charmap.rc)
|
||||||
|
|
||||||
set_module_type(charmap win32gui UNICODE)
|
set_module_type(charmap win32gui UNICODE)
|
||||||
target_link_libraries(charmap uuid wine cpprt atl_classes)
|
target_link_libraries(charmap uuid cpprt atl_classes)
|
||||||
set_target_cpp_properties(charmap WITH_EXCEPTIONS WITH_RTTI)
|
set_target_cpp_properties(charmap WITH_EXCEPTIONS WITH_RTTI)
|
||||||
add_importlibs(charmap advapi32 user32 gdi32 comctl32 version msvcrt kernel32 ole32 uxtheme ntdll)
|
add_importlibs(charmap advapi32 user32 gdi32 comctl32 version msvcrt kernel32 ole32 uxtheme ntdll)
|
||||||
add_pch(charmap precomp.h SOURCE)
|
add_pch(charmap precomp.h SOURCE)
|
||||||
|
@@ -91,4 +91,4 @@ CCell::SetCellCoordinates(
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
m_CellCoordinates = Coordinates;
|
m_CellCoordinates = Coordinates;
|
||||||
}
|
}
|
||||||
|
@@ -519,4 +519,4 @@ CGridView::SetCellFocus(
|
|||||||
// Set the new active cell and give it focus
|
// Set the new active cell and give it focus
|
||||||
m_ActiveCell = NewActiveCell;
|
m_ActiveCell = NewActiveCell;
|
||||||
m_ActiveCell->SetFocus(true);
|
m_ActiveCell->SetFocus(true);
|
||||||
}
|
}
|
||||||
|
@@ -81,4 +81,4 @@ private:
|
|||||||
|
|
||||||
bool ChangeMapFont(
|
bool ChangeMapFont(
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@@ -51,4 +51,4 @@
|
|||||||
|
|
||||||
//WINE_DEFAULT_DEBUG_CHANNEL(charmap);
|
//WINE_DEFAULT_DEBUG_CHANNEL(charmap);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
9
base/applications/cleanmgr/CMakeLists.txt
Normal file
9
base/applications/cleanmgr/CMakeLists.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
project(cleanmgr)
|
||||||
|
|
||||||
|
# The main application
|
||||||
|
add_subdirectory(cleanmgr)
|
||||||
|
|
||||||
|
# Cleanup handlers
|
||||||
|
#add_subdirectory(dataclen) # Data Driven Cleaner
|
||||||
|
|
212
base/applications/cleanmgr/cleanmgr/CCleanupHandler.cpp
Normal file
212
base/applications/cleanmgr/cleanmgr/CCleanupHandler.cpp
Normal file
@@ -0,0 +1,212 @@
|
|||||||
|
/*
|
||||||
|
* PROJECT: ReactOS Disk Cleanup
|
||||||
|
* LICENSE: MIT (https://spdx.org/licenses/MIT)
|
||||||
|
* PURPOSE: CCleanupHandler implementation
|
||||||
|
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "cleanmgr.h"
|
||||||
|
|
||||||
|
|
||||||
|
CCleanupHandler::CCleanupHandler(CRegKey &subKey, const CStringW &keyName, const GUID &guid)
|
||||||
|
: hSubKey(subKey)
|
||||||
|
, KeyName(keyName)
|
||||||
|
, Guid(guid)
|
||||||
|
, dwFlags(0)
|
||||||
|
, Priority(0)
|
||||||
|
, StateFlags(0)
|
||||||
|
, SpaceUsed(0)
|
||||||
|
, ShowHandler(true)
|
||||||
|
, hIcon(NULL)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
CCleanupHandler::~CCleanupHandler()
|
||||||
|
{
|
||||||
|
Deactivate();
|
||||||
|
::DestroyIcon(hIcon);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CCleanupHandler::Deactivate()
|
||||||
|
{
|
||||||
|
if (Handler)
|
||||||
|
{
|
||||||
|
DWORD dwFlags = 0;
|
||||||
|
Handler->Deactivate(&dwFlags);
|
||||||
|
if (dwFlags & EVCF_REMOVEFROMLIST)
|
||||||
|
UNIMPLEMENTED_DBGBREAK();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
CCleanupHandler::Initialize(LPCWSTR pcwszVolume)
|
||||||
|
{
|
||||||
|
if (FAILED_UNEXPECTEDLY(
|
||||||
|
::CoCreateInstance(Guid, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IEmptyVolumeCache, &Handler))))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD dwSize = sizeof(Priority);
|
||||||
|
if (hSubKey.QueryBinaryValue(L"Priority", &Priority, &dwSize) != ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
if (hSubKey.QueryDWORDValue(L"Priority", Priority) != ERROR_SUCCESS)
|
||||||
|
Priority = 200;
|
||||||
|
}
|
||||||
|
|
||||||
|
dwSize = sizeof(StateFlags);
|
||||||
|
if (hSubKey.QueryDWORDValue(L"StateFlags", StateFlags) != ERROR_SUCCESS)
|
||||||
|
StateFlags = 0;
|
||||||
|
|
||||||
|
WCHAR PathBuffer[MAX_PATH] = {};
|
||||||
|
ULONG nChars = _countof(PathBuffer);
|
||||||
|
if (hSubKey.QueryStringValue(L"IconPath", PathBuffer, &nChars) != ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
CStringW Tmp;
|
||||||
|
WCHAR GuidStr[50] = {};
|
||||||
|
if (StringFromGUID2(Guid, GuidStr, _countof(GuidStr)))
|
||||||
|
{
|
||||||
|
Tmp.Format(L"CLSID\\%s\\DefaultIcon", GuidStr);
|
||||||
|
CRegKey clsid;
|
||||||
|
nChars = _countof(PathBuffer);
|
||||||
|
if (clsid.Open(HKEY_CLASSES_ROOT, Tmp, KEY_READ) != ERROR_SUCCESS ||
|
||||||
|
clsid.QueryStringValue(NULL, PathBuffer, &nChars) != ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
PathBuffer[0] = UNICODE_NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!PathBuffer[0])
|
||||||
|
StringCchCopyW(PathBuffer, _countof(PathBuffer), L"%systemroot%\\system32\\shell32.dll");
|
||||||
|
|
||||||
|
int Index = 0;
|
||||||
|
WCHAR *ptr = wcschr(PathBuffer, L',');
|
||||||
|
if (ptr)
|
||||||
|
{
|
||||||
|
*ptr++ = UNICODE_NULL;
|
||||||
|
Index = wcstol(ptr, NULL, 10);
|
||||||
|
}
|
||||||
|
HICON Large, Small;
|
||||||
|
UINT Result = ExtractIconExW(PathBuffer, Index, &Large, &Small, 1);
|
||||||
|
if (Result < 1)
|
||||||
|
Result = ExtractIconExW(L"%systemroot%\\system32\\shell32.dll", 0, &Large, &Small, 1);
|
||||||
|
if (Result >= 1)
|
||||||
|
{
|
||||||
|
hIcon = Small;
|
||||||
|
if (!hIcon)
|
||||||
|
{
|
||||||
|
hIcon = Large;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
::DestroyIcon(Large);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// These options should come from the command line
|
||||||
|
// dwFlags |= EVCF_SETTINGSMODE;
|
||||||
|
// dwFlags |= EVCF_OUTOFDISKSPACE;
|
||||||
|
|
||||||
|
CComPtr<IEmptyVolumeCache2> spHandler2;
|
||||||
|
HRESULT hr = Handler->QueryInterface(IID_PPV_ARG(IEmptyVolumeCache2, &spHandler2));
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
{
|
||||||
|
hr = spHandler2->InitializeEx(
|
||||||
|
hSubKey, pcwszVolume, KeyName, &wszDisplayName, &wszDescription, &wszBtnText, &dwFlags);
|
||||||
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// No files to clean will return S_FALSE;
|
||||||
|
if (hr != S_OK)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Observed behavior:
|
||||||
|
// When Initialize is called, wszDescription is actually pointing to data
|
||||||
|
// wszDescription.AllocateBytes(0x400u);
|
||||||
|
hr = Handler->Initialize(hSubKey, pcwszVolume, &wszDisplayName, &wszDescription, &dwFlags);
|
||||||
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// No files to clean will return S_FALSE;
|
||||||
|
if (hr != S_OK)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
CComPtr<IPropertyBag> spBag;
|
||||||
|
WCHAR GuidStr[50] = {};
|
||||||
|
nChars = _countof(GuidStr);
|
||||||
|
if (hSubKey.QueryStringValue(L"PropertyBag", GuidStr, &nChars) == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
GUID guid = {};
|
||||||
|
if (!FAILED_UNEXPECTEDLY(CLSIDFromString(GuidStr, &guid)))
|
||||||
|
{
|
||||||
|
FAILED_UNEXPECTEDLY(
|
||||||
|
CoCreateInstance(guid, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IPropertyBag, &spBag)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ReadProperty(L"Display", spBag, wszDisplayName);
|
||||||
|
ReadProperty(L"Description", spBag, wszDescription);
|
||||||
|
|
||||||
|
if (dwFlags & EVCF_HASSETTINGS)
|
||||||
|
{
|
||||||
|
ReadProperty(L"AdvancedButtonText", spBag, wszBtnText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((dwFlags & EVCF_ENABLEBYDEFAULT) && !(StateFlags & HANDLER_STATE_SELECTED))
|
||||||
|
{
|
||||||
|
StateFlags |= HANDLER_STATE_SELECTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
// For convenience
|
||||||
|
if (!wszDisplayName)
|
||||||
|
SHStrDupW(KeyName, &wszDisplayName);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CCleanupHandler::ReadProperty(LPCWSTR Name, IPropertyBag *pBag, CComHeapPtr<WCHAR> &storage)
|
||||||
|
{
|
||||||
|
if (storage)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (pBag)
|
||||||
|
{
|
||||||
|
CComVariant tmp;
|
||||||
|
tmp.vt = VT_BSTR;
|
||||||
|
HRESULT hr = pBag->Read(Name, &tmp, NULL);
|
||||||
|
if (!FAILED_UNEXPECTEDLY(hr) && tmp.vt == VT_BSTR)
|
||||||
|
{
|
||||||
|
SHStrDupW(tmp.bstrVal, &storage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!storage)
|
||||||
|
{
|
||||||
|
WCHAR TmpStr[0x200] = {};
|
||||||
|
DWORD dwSize = _countof(TmpStr);
|
||||||
|
|
||||||
|
if (hSubKey.QueryStringValue(Name, TmpStr, &dwSize) == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
WCHAR ResolvedStr[0x200] = {};
|
||||||
|
SHLoadIndirectString(TmpStr, ResolvedStr, _countof(ResolvedStr), NULL);
|
||||||
|
SHStrDupW(ResolvedStr, &storage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
CCleanupHandler::HasSettings() const
|
||||||
|
{
|
||||||
|
return !!(dwFlags & EVCF_HASSETTINGS);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
CCleanupHandler::DontShowIfZero() const
|
||||||
|
{
|
||||||
|
return !!(dwFlags & EVCF_DONTSHOWIFZERO);
|
||||||
|
}
|
||||||
|
|
48
base/applications/cleanmgr/cleanmgr/CCleanupHandler.hpp
Normal file
48
base/applications/cleanmgr/cleanmgr/CCleanupHandler.hpp
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* PROJECT: ReactOS Disk Cleanup
|
||||||
|
* LICENSE: MIT (https://spdx.org/licenses/MIT)
|
||||||
|
* PURPOSE: CCleanupHandler definition
|
||||||
|
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define HANDLER_STATE_SELECTED 1
|
||||||
|
|
||||||
|
|
||||||
|
struct CCleanupHandler
|
||||||
|
{
|
||||||
|
CCleanupHandler(CRegKey &subKey, const CStringW &keyName, const GUID &guid);
|
||||||
|
~CCleanupHandler();
|
||||||
|
|
||||||
|
void Deactivate();
|
||||||
|
|
||||||
|
bool
|
||||||
|
Initialize(LPCWSTR pcwszVolume);
|
||||||
|
|
||||||
|
void
|
||||||
|
ReadProperty(LPCWSTR Name, IPropertyBag *pBag, CComHeapPtr<WCHAR> &storage);
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
HasSettings() const;
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
DontShowIfZero() const;
|
||||||
|
|
||||||
|
CRegKey hSubKey;
|
||||||
|
CStringW KeyName;
|
||||||
|
GUID Guid;
|
||||||
|
|
||||||
|
CComHeapPtr<WCHAR> wszDisplayName;
|
||||||
|
CComHeapPtr<WCHAR> wszDescription;
|
||||||
|
CComHeapPtr<WCHAR> wszBtnText;
|
||||||
|
|
||||||
|
CStringW IconPath;
|
||||||
|
DWORD dwFlags;
|
||||||
|
DWORD Priority;
|
||||||
|
DWORD StateFlags;
|
||||||
|
|
||||||
|
CComPtr<IEmptyVolumeCache> Handler;
|
||||||
|
DWORDLONG SpaceUsed;
|
||||||
|
bool ShowHandler;
|
||||||
|
HICON hIcon;
|
||||||
|
};
|
||||||
|
|
163
base/applications/cleanmgr/cleanmgr/CCleanupHandlerList.cpp
Normal file
163
base/applications/cleanmgr/cleanmgr/CCleanupHandlerList.cpp
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
/*
|
||||||
|
* PROJECT: ReactOS Disk Cleanup
|
||||||
|
* LICENSE: MIT (https://spdx.org/licenses/MIT)
|
||||||
|
* PURPOSE: CCleanupHandlerList implementation
|
||||||
|
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "cleanmgr.h"
|
||||||
|
|
||||||
|
void CCleanupHandlerList::LoadHandlers(WCHAR Drive)
|
||||||
|
{
|
||||||
|
m_DriveStr.Format(L"%c:", Drive);
|
||||||
|
|
||||||
|
CRegKey VolumeCaches;
|
||||||
|
if (VolumeCaches.Open(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\VolumeCaches", KEY_READ) != ERROR_SUCCESS)
|
||||||
|
return;
|
||||||
|
|
||||||
|
LONG ItemIndex = 0;
|
||||||
|
WCHAR szKeyName[MAX_PATH];
|
||||||
|
|
||||||
|
WCHAR wszVolume[] = { Drive, L':', L'\\', UNICODE_NULL };
|
||||||
|
|
||||||
|
while (TRUE)
|
||||||
|
{
|
||||||
|
DWORD dwSize = _countof(szKeyName);
|
||||||
|
if (VolumeCaches.EnumKey(ItemIndex++, szKeyName, &dwSize) != ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CRegKey hSubKey;
|
||||||
|
if (hSubKey.Open(VolumeCaches, szKeyName, KEY_READ) == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
WCHAR GuidStr[50] = {};
|
||||||
|
dwSize = _countof(GuidStr);
|
||||||
|
if (hSubKey.QueryStringValue(NULL, GuidStr, &dwSize) != ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
GUID guid = {};
|
||||||
|
if (FAILED_UNEXPECTEDLY(CLSIDFromString(GuidStr, &guid)))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
CCleanupHandler* handler = new CCleanupHandler(hSubKey, szKeyName, guid);
|
||||||
|
|
||||||
|
if (!handler->Initialize(wszVolume))
|
||||||
|
{
|
||||||
|
delete handler;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_Handlers.AddTail(handler);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sort handlers
|
||||||
|
BOOL fChanged = m_Handlers.GetCount() > 0;
|
||||||
|
while (fChanged)
|
||||||
|
{
|
||||||
|
fChanged = FALSE;
|
||||||
|
|
||||||
|
for (size_t n = 0; n < m_Handlers.GetCount() - 1; n++)
|
||||||
|
{
|
||||||
|
POSITION leftPos = m_Handlers.FindIndex(n);
|
||||||
|
POSITION rightPos = m_Handlers.FindIndex(n+1);
|
||||||
|
CCleanupHandler* left = m_Handlers.GetAt(leftPos);
|
||||||
|
CCleanupHandler* right = m_Handlers.GetAt(rightPos);
|
||||||
|
|
||||||
|
if (right->Priority < left->Priority)
|
||||||
|
{
|
||||||
|
m_Handlers.SwapElements(leftPos, rightPos);
|
||||||
|
fChanged = TRUE;
|
||||||
|
}
|
||||||
|
else if (right->Priority == left->Priority)
|
||||||
|
{
|
||||||
|
CStringW leftStr(left->wszDisplayName);
|
||||||
|
if (leftStr.Compare(right->wszDisplayName) > 0)
|
||||||
|
{
|
||||||
|
m_Handlers.SwapElements(leftPos, rightPos);
|
||||||
|
fChanged = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORDLONG
|
||||||
|
CCleanupHandlerList::ScanDrive(IEmptyVolumeCacheCallBack *picb)
|
||||||
|
{
|
||||||
|
CProgressDlg progress;
|
||||||
|
CString Caption;
|
||||||
|
Caption.Format(IDS_CALCULATING, m_DriveStr.GetString());
|
||||||
|
CStringW Title(MAKEINTRESOURCE(IDS_DISK_CLEANUP));
|
||||||
|
progress.Start((DWORD)m_Handlers.GetCount(), Title, Caption);
|
||||||
|
int ItemIndex = 0;
|
||||||
|
DWORDLONG TotalSpaceUsed = 0;
|
||||||
|
ForEach(
|
||||||
|
[&](CCleanupHandler *current)
|
||||||
|
{
|
||||||
|
Caption.Format(IDS_SCANNING, current->wszDisplayName.m_pData);
|
||||||
|
progress.Step(++ItemIndex, Caption);
|
||||||
|
|
||||||
|
HRESULT hr = current->Handler->GetSpaceUsed(¤t->SpaceUsed, picb);
|
||||||
|
|
||||||
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
|
{
|
||||||
|
current->ShowHandler = false;
|
||||||
|
current->StateFlags &= ~HANDLER_STATE_SELECTED;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (current->SpaceUsed == 0 && current->DontShowIfZero())
|
||||||
|
{
|
||||||
|
current->ShowHandler = false;
|
||||||
|
current->StateFlags &= ~HANDLER_STATE_SELECTED;
|
||||||
|
}
|
||||||
|
TotalSpaceUsed += current->SpaceUsed;
|
||||||
|
});
|
||||||
|
progress.Stop();
|
||||||
|
|
||||||
|
return TotalSpaceUsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CCleanupHandlerList::ExecuteCleanup(IEmptyVolumeCacheCallBack *picb)
|
||||||
|
{
|
||||||
|
CProgressDlg progress;
|
||||||
|
CString Caption;
|
||||||
|
Caption.Format(IDS_CLEANING_CAPTION, m_DriveStr.GetString());
|
||||||
|
|
||||||
|
DWORD TotalSelected = 0;
|
||||||
|
ForEach(
|
||||||
|
[&](CCleanupHandler *current)
|
||||||
|
{
|
||||||
|
if (current->StateFlags & HANDLER_STATE_SELECTED)
|
||||||
|
TotalSelected++;
|
||||||
|
});
|
||||||
|
|
||||||
|
CStringW Title(MAKEINTRESOURCE(IDS_DISK_CLEANUP));
|
||||||
|
progress.Start(TotalSelected, Title, Caption);
|
||||||
|
int ItemIndex = 0;
|
||||||
|
ForEach(
|
||||||
|
[&](CCleanupHandler *current)
|
||||||
|
{
|
||||||
|
if (!(current->StateFlags & HANDLER_STATE_SELECTED))
|
||||||
|
return;
|
||||||
|
|
||||||
|
Caption.Format(IDS_CLEANING, current->wszDisplayName.m_pData);
|
||||||
|
progress.Step(++ItemIndex, Caption);
|
||||||
|
|
||||||
|
// If there is nothing to clean, we might get STG_E_NOMOREFILES
|
||||||
|
if (current->SpaceUsed > 0)
|
||||||
|
{
|
||||||
|
HRESULT hr = current->Handler->Purge(-1, picb);
|
||||||
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
progress.Stop();
|
||||||
|
}
|
31
base/applications/cleanmgr/cleanmgr/CCleanupHandlerList.hpp
Normal file
31
base/applications/cleanmgr/cleanmgr/CCleanupHandlerList.hpp
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* PROJECT: ReactOS Disk Cleanup
|
||||||
|
* LICENSE: MIT (https://spdx.org/licenses/MIT)
|
||||||
|
* PURPOSE: CCleanupHandlerList definition
|
||||||
|
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
class CCleanupHandlerList
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
CAtlList<CCleanupHandler *> m_Handlers;
|
||||||
|
CStringW m_DriveStr;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
void LoadHandlers(WCHAR Drive);
|
||||||
|
DWORDLONG ScanDrive(IEmptyVolumeCacheCallBack* picb);
|
||||||
|
void ExecuteCleanup(IEmptyVolumeCacheCallBack *picb);
|
||||||
|
|
||||||
|
template<typename Fn>
|
||||||
|
void ForEach(Fn callback)
|
||||||
|
{
|
||||||
|
for (POSITION it = m_Handlers.GetHeadPosition(); it; m_Handlers.GetNext(it))
|
||||||
|
{
|
||||||
|
CCleanupHandler *current = m_Handlers.GetAt(it);
|
||||||
|
|
||||||
|
callback(current);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
@@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* PROJECT: ReactOS Disk Cleanup
|
||||||
|
* LICENSE: MIT (https://spdx.org/licenses/MIT)
|
||||||
|
* PURPOSE: CEmptyVolumeCacheCallBack definition / implementation
|
||||||
|
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// We don't really use this, but some windows handlers crash without it
|
||||||
|
struct CEmptyVolumeCacheCallBack
|
||||||
|
: public IEmptyVolumeCacheCallBack
|
||||||
|
{
|
||||||
|
|
||||||
|
STDMETHOD_(ULONG, AddRef)() throw()
|
||||||
|
{
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
STDMETHOD_(ULONG, Release)() throw()
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
STDMETHOD(QueryInterface)(
|
||||||
|
REFIID riid,
|
||||||
|
_COM_Outptr_ void** ppvObject) throw()
|
||||||
|
{
|
||||||
|
if (riid == IID_IUnknown || riid == IID_IEmptyVolumeCacheCallBack)
|
||||||
|
{
|
||||||
|
*ppvObject = (IUnknown*)this;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
*ppvObject = NULL;
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
STDMETHODIMP ScanProgress(
|
||||||
|
_In_ DWORDLONG dwlSpaceUsed,
|
||||||
|
_In_ DWORD dwFlags,
|
||||||
|
_In_ LPCWSTR pcwszStatus) override
|
||||||
|
{
|
||||||
|
DPRINT("dwlSpaceUsed: %lld, dwFlags: %x\n", dwlSpaceUsed, dwFlags);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
STDMETHODIMP PurgeProgress(
|
||||||
|
_In_ DWORDLONG dwlSpaceFreed,
|
||||||
|
_In_ DWORDLONG dwlSpaceToFree,
|
||||||
|
_In_ DWORD dwFlags,
|
||||||
|
_In_ LPCWSTR pcwszStatus) override
|
||||||
|
{
|
||||||
|
DPRINT("dwlSpaceFreed: %lld, dwlSpaceToFree: %lld, dwFlags: %x\n", dwlSpaceFreed, dwlSpaceToFree, dwFlags);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
};
|
19
base/applications/cleanmgr/cleanmgr/CMakeLists.txt
Normal file
19
base/applications/cleanmgr/cleanmgr/CMakeLists.txt
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
|
||||||
|
add_executable(cleanmgr
|
||||||
|
cleanmgr.cpp
|
||||||
|
cleanmgr.h
|
||||||
|
cleanmgr.rc
|
||||||
|
resource.h
|
||||||
|
CEmptyVolumeCacheCallBack.hpp
|
||||||
|
CProgressDlg.hpp
|
||||||
|
CSelectDriveDlg.cpp
|
||||||
|
CCleanupHandler.cpp
|
||||||
|
CCleanupHandler.hpp
|
||||||
|
CCleanupHandlerList.cpp
|
||||||
|
CCleanupHandlerList.hpp
|
||||||
|
)
|
||||||
|
set_module_type(cleanmgr win32gui UNICODE)
|
||||||
|
target_link_libraries(cleanmgr uuid cpprt atl_classes)
|
||||||
|
add_importlibs(cleanmgr shlwapi oleaut32 ole32 shell32 comctl32 user32 advapi32 msvcrt kernel32 ntdll)
|
||||||
|
add_dependencies(cleanmgr psdk)
|
||||||
|
add_cd_file(TARGET cleanmgr DESTINATION reactos/system32 FOR all)
|
50
base/applications/cleanmgr/cleanmgr/CProgressDlg.hpp
Normal file
50
base/applications/cleanmgr/cleanmgr/CProgressDlg.hpp
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* PROJECT: ReactOS Disk Cleanup
|
||||||
|
* LICENSE: MIT (https://spdx.org/licenses/MIT)
|
||||||
|
* PURPOSE: Progress dialog implementation
|
||||||
|
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
class CProgressDlg
|
||||||
|
{
|
||||||
|
CComPtr<IProgressDialog> m_spProgress;
|
||||||
|
DWORD m_dwTotal = 0;
|
||||||
|
public:
|
||||||
|
|
||||||
|
~CProgressDlg()
|
||||||
|
{
|
||||||
|
Stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Start(DWORD dwTotalSteps, LPCWSTR Title, LPCWSTR Text)
|
||||||
|
{
|
||||||
|
HRESULT hr = CoCreateInstance(CLSID_ProgressDialog, NULL, CLSCTX_INPROC, IID_PPV_ARG(IProgressDialog, &m_spProgress));
|
||||||
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_dwTotal = dwTotalSteps;
|
||||||
|
|
||||||
|
m_spProgress->SetTitle(Title);
|
||||||
|
m_spProgress->SetLine(2, Text, TRUE, NULL);
|
||||||
|
m_spProgress->StartProgressDialog(NULL, NULL, PROGDLG_NOMINIMIZE, NULL);
|
||||||
|
m_spProgress->SetProgress(0, m_dwTotal);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Step(DWORD dwProgress, LPCWSTR Text)
|
||||||
|
{
|
||||||
|
m_spProgress->SetProgress(dwProgress, m_dwTotal);
|
||||||
|
m_spProgress->SetLine(1, Text, TRUE, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Stop()
|
||||||
|
{
|
||||||
|
if (m_spProgress)
|
||||||
|
{
|
||||||
|
m_spProgress->StopProgressDialog();
|
||||||
|
m_spProgress.Release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
80
base/applications/cleanmgr/cleanmgr/CSelectDriveDlg.cpp
Normal file
80
base/applications/cleanmgr/cleanmgr/CSelectDriveDlg.cpp
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
/*
|
||||||
|
* PROJECT: ReactOS Disk Cleanup
|
||||||
|
* LICENSE: MIT (https://spdx.org/licenses/MIT)
|
||||||
|
* PURPOSE: Drive selection dialog
|
||||||
|
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "cleanmgr.h"
|
||||||
|
|
||||||
|
class CSelectDriveDlg : public CDialogImpl<CSelectDriveDlg>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum { IDD = IDD_SELECTDRIVE };
|
||||||
|
|
||||||
|
BEGIN_MSG_MAP(CSelectDriveDlg)
|
||||||
|
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
|
||||||
|
COMMAND_ID_HANDLER(IDOK, OnEndDialog)
|
||||||
|
COMMAND_ID_HANDLER(IDCANCEL, OnEndDialog)
|
||||||
|
END_MSG_MAP()
|
||||||
|
|
||||||
|
CSelectDriveDlg()
|
||||||
|
:m_SelectedDrive(UNICODE_NULL)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT OnInitDialog(UINT, WPARAM, LPARAM, BOOL&)
|
||||||
|
{
|
||||||
|
// Try to find an existing instance of this dialog
|
||||||
|
WCHAR buf[300];
|
||||||
|
GetWindowTextW(buf, _countof(buf));
|
||||||
|
for (HWND hNext = NULL, hFind; (hFind = ::FindWindowExW(NULL, hNext, NULL, buf)) != NULL; hNext = hFind)
|
||||||
|
{
|
||||||
|
if (hFind != *this && ::IsWindowVisible(hFind))
|
||||||
|
{
|
||||||
|
::SetForegroundWindow(hFind);
|
||||||
|
EndDialog(IDCANCEL);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CWindow cbo = GetDlgItem(IDC_DRIVES);
|
||||||
|
WCHAR VolumeNameBuffer[MAX_PATH + 1];
|
||||||
|
CStringW Tmp;
|
||||||
|
for (WCHAR Drive = 'A'; Drive <= 'Z'; ++Drive)
|
||||||
|
{
|
||||||
|
WCHAR RootPathName[] = { Drive,':','\\',0 };
|
||||||
|
UINT Type = GetDriveTypeW(RootPathName);
|
||||||
|
if (Type == DRIVE_FIXED)
|
||||||
|
{
|
||||||
|
GetVolumeInformationW(RootPathName, VolumeNameBuffer, _countof(VolumeNameBuffer), 0, 0, 0, 0, 0);
|
||||||
|
Tmp.Format(L"%s (%.2s)", VolumeNameBuffer, RootPathName);
|
||||||
|
|
||||||
|
int index = (int)cbo.SendMessage(CB_ADDSTRING, NULL, (LPARAM)Tmp.GetString());
|
||||||
|
cbo.SendMessage(CB_SETITEMDATA, index, Drive);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cbo.SendMessage(CB_SETCURSEL, 0);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
LRESULT OnEndDialog(WORD, WORD wID, HWND, BOOL&)
|
||||||
|
{
|
||||||
|
CWindow cbo = GetDlgItem(IDC_DRIVES);
|
||||||
|
m_SelectedDrive = (WCHAR)cbo.SendMessage(CB_GETITEMDATA, cbo.SendMessage(CB_GETCURSEL));
|
||||||
|
EndDialog(wID);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
WCHAR m_SelectedDrive;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
SelectDrive(WCHAR &Drive)
|
||||||
|
{
|
||||||
|
CSelectDriveDlg dlgSelectDrive;
|
||||||
|
if (dlgSelectDrive.DoModal() == IDOK)
|
||||||
|
{
|
||||||
|
Drive = dlgSelectDrive.m_SelectedDrive;
|
||||||
|
}
|
||||||
|
}
|
328
base/applications/cleanmgr/cleanmgr/cleanmgr.cpp
Normal file
328
base/applications/cleanmgr/cleanmgr/cleanmgr.cpp
Normal file
@@ -0,0 +1,328 @@
|
|||||||
|
/*
|
||||||
|
* PROJECT: ReactOS Disk Cleanup
|
||||||
|
* LICENSE: MIT (https://spdx.org/licenses/MIT)
|
||||||
|
* PURPOSE: Disk cleanup entrypoint
|
||||||
|
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "cleanmgr.h"
|
||||||
|
|
||||||
|
// for listview with extend style LVS_EX_CHECKBOXES, State image 1 is the unchecked box, and state image 2 is the
|
||||||
|
// checked box. see this: https://docs.microsoft.com/en-us/windows/win32/controls/extended-list-view-styles
|
||||||
|
#define STATEIMAGETOINDEX(x) (((x)&LVIS_STATEIMAGEMASK) >> 12)
|
||||||
|
#define STATEIMAGE_UNCHECKED 1
|
||||||
|
#define STATEIMAGE_CHECKED 2
|
||||||
|
|
||||||
|
|
||||||
|
struct CCleanMgrProperties :
|
||||||
|
public CPropertyPageImpl<CCleanMgrProperties>
|
||||||
|
{
|
||||||
|
enum { IDD = IDD_PROPERTIES_MAIN };
|
||||||
|
CWindow m_HandlerListControl;
|
||||||
|
WCHAR m_Drive;
|
||||||
|
DWORDLONG m_TotalSpaceUsed;
|
||||||
|
CCleanupHandlerList* m_HandlerList;
|
||||||
|
bool m_IgnoreChanges = true;
|
||||||
|
|
||||||
|
|
||||||
|
CCleanMgrProperties(WCHAR Drive, DWORDLONG TotalSpaceUsed, CCleanupHandlerList *handlerList)
|
||||||
|
: m_Drive(Drive)
|
||||||
|
, m_TotalSpaceUsed(TotalSpaceUsed)
|
||||||
|
, m_HandlerList(handlerList)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int OnApply()
|
||||||
|
{
|
||||||
|
CStringW Title(MAKEINTRESOURCE(IDS_DISK_CLEANUP));
|
||||||
|
CStringW Text(MAKEINTRESOURCE(IDS_CONFIRM_DELETE));
|
||||||
|
|
||||||
|
if (MessageBoxW(Text, Title, MB_YESNO | MB_ICONQUESTION) != IDYES)
|
||||||
|
return PSNRET_INVALID;
|
||||||
|
|
||||||
|
return PSNRET_NOERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||||
|
{
|
||||||
|
HICON hIcon = (HICON)::LoadImageW(
|
||||||
|
_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCEW(IDI_CLEANMGR), IMAGE_ICON, 0, 0,
|
||||||
|
LR_DEFAULTSIZE | LR_SHARED);
|
||||||
|
SendDlgItemMessage(IDC_DISKICON, STM_SETICON, (WPARAM)hIcon);
|
||||||
|
|
||||||
|
m_HandlerListControl = GetDlgItem(IDC_HANDLERLIST);
|
||||||
|
RECT rc;
|
||||||
|
m_HandlerListControl.GetClientRect(&rc);
|
||||||
|
rc.right -= GetSystemMetrics(SM_CXVSCROLL);
|
||||||
|
|
||||||
|
LV_COLUMN column = {};
|
||||||
|
column.mask = LVCF_FMT | LVCF_WIDTH;
|
||||||
|
column.fmt = LVCFMT_LEFT;
|
||||||
|
column.cx = rc.right * 80 / 100;
|
||||||
|
ListView_InsertColumn(m_HandlerListControl, 0, &column);
|
||||||
|
column.fmt = LVCFMT_RIGHT;
|
||||||
|
column.cx = rc.right * 20 / 100;
|
||||||
|
|
||||||
|
ListView_InsertColumn(m_HandlerListControl, 1, &column);
|
||||||
|
HIMAGELIST hImagelist = ImageList_Create(16, 16, ILC_MASK | ILC_COLOR32, 1, 1);
|
||||||
|
ListView_SetImageList(m_HandlerListControl, hImagelist, LVSIL_SMALL);
|
||||||
|
|
||||||
|
ListView_SetExtendedListViewStyleEx(m_HandlerListControl, LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT, LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);
|
||||||
|
|
||||||
|
m_HandlerList->ForEach(
|
||||||
|
[&](CCleanupHandler *current)
|
||||||
|
{
|
||||||
|
if (!current->ShowHandler)
|
||||||
|
return;
|
||||||
|
|
||||||
|
LV_ITEM item = {};
|
||||||
|
item.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
|
||||||
|
item.lParam = (LPARAM)current;
|
||||||
|
item.pszText = (LPWSTR)current->wszDisplayName;
|
||||||
|
item.iItem = ListView_GetItemCount(m_HandlerListControl);
|
||||||
|
item.iImage = ImageList_AddIcon(hImagelist, current->hIcon);
|
||||||
|
item.iItem = ListView_InsertItem(m_HandlerListControl, &item);
|
||||||
|
ListView_SetCheckState(
|
||||||
|
m_HandlerListControl, item.iItem, !!(current->StateFlags & HANDLER_STATE_SELECTED));
|
||||||
|
|
||||||
|
item.mask = LVIF_TEXT;
|
||||||
|
WCHAR ByteSize[100] = {};
|
||||||
|
StrFormatByteSizeW(current->SpaceUsed, ByteSize, _countof(ByteSize));
|
||||||
|
ListView_SetItemText(m_HandlerListControl, item.iItem, 1, ByteSize);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Now we should start responding to changes
|
||||||
|
m_IgnoreChanges = false;
|
||||||
|
|
||||||
|
// Select the first item
|
||||||
|
ListView_SetItemState(m_HandlerListControl, 0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
|
||||||
|
|
||||||
|
UpdateSpaceUsed();
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
CCleanupHandler* GetHandler(int Index)
|
||||||
|
{
|
||||||
|
LVITEMW item = {};
|
||||||
|
item.iItem = Index;
|
||||||
|
if (item.iItem >= 0)
|
||||||
|
{
|
||||||
|
item.mask = LVIF_PARAM;
|
||||||
|
ListView_GetItem(m_HandlerListControl, &item);
|
||||||
|
return (CCleanupHandler*)item.lParam;
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
LRESULT OnDetails(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
||||||
|
{
|
||||||
|
CCleanupHandler *handler = GetHandler(ListView_GetNextItem(m_HandlerListControl, -1, LVIS_FOCUSED));
|
||||||
|
if (handler)
|
||||||
|
{
|
||||||
|
handler->Handler->ShowProperties(m_hWnd);
|
||||||
|
}
|
||||||
|
return 0L;
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT OnHandlerItemchanged(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
|
||||||
|
{
|
||||||
|
if (idCtrl == IDC_HANDLERLIST)
|
||||||
|
{
|
||||||
|
// We are still initializing, don't respond to changes just yet!
|
||||||
|
if (m_IgnoreChanges)
|
||||||
|
return 0L;
|
||||||
|
|
||||||
|
LPNMLISTVIEW pnic = (LPNMLISTVIEW)pnmh;
|
||||||
|
|
||||||
|
// We only care about state changes
|
||||||
|
if (!(pnic->uChanged & LVIF_STATE))
|
||||||
|
return 0L;
|
||||||
|
|
||||||
|
|
||||||
|
INT ItemIndex = pnic->iItem;
|
||||||
|
if (ItemIndex == -1 || ItemIndex >= ListView_GetItemCount(pnic->hdr.hwndFrom))
|
||||||
|
{
|
||||||
|
return 0L;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GotSelected = (pnic->uNewState & LVIS_SELECTED) && !(pnic->uOldState & LVIS_SELECTED);
|
||||||
|
if (GotSelected)
|
||||||
|
{
|
||||||
|
CWindow DetailsButton = GetDlgItem(IDC_DETAILS);
|
||||||
|
CCleanupHandler* handler = (CCleanupHandler*)pnic->lParam;
|
||||||
|
|
||||||
|
SetDlgItemText(IDC_DESCRIPTION, handler->wszDescription ? handler->wszDescription : L"");
|
||||||
|
if (handler->HasSettings())
|
||||||
|
{
|
||||||
|
DetailsButton.ShowWindow(SW_SHOW);
|
||||||
|
DetailsButton.SetWindowText(handler->wszBtnText);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DetailsButton.ShowWindow(SW_HIDE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int iOldState = STATEIMAGETOINDEX(pnic->uOldState);
|
||||||
|
int iNewState = STATEIMAGETOINDEX(pnic->uNewState);
|
||||||
|
|
||||||
|
if ((iOldState ^ iNewState) == (STATEIMAGE_UNCHECKED ^ STATEIMAGE_CHECKED))
|
||||||
|
{
|
||||||
|
CCleanupHandler* handler = (CCleanupHandler*)pnic->lParam;
|
||||||
|
if (iNewState == STATEIMAGE_CHECKED)
|
||||||
|
handler->StateFlags |= HANDLER_STATE_SELECTED;
|
||||||
|
else
|
||||||
|
handler->StateFlags &= ~HANDLER_STATE_SELECTED;
|
||||||
|
UpdateSpaceUsed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0L;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateSpaceUsed()
|
||||||
|
{
|
||||||
|
CStringW tmp;
|
||||||
|
WCHAR ByteSize[100];
|
||||||
|
StrFormatByteSizeW(m_TotalSpaceUsed, ByteSize, _countof(ByteSize));
|
||||||
|
|
||||||
|
tmp.Format(IDS_TOTAL_CLEANABLE_CAPTION, ByteSize, m_Drive);
|
||||||
|
SetDlgItemText(IDC_TOTAL_CLEANABLE, tmp);
|
||||||
|
|
||||||
|
DWORDLONG SelectedGained = 0;
|
||||||
|
|
||||||
|
m_HandlerList->ForEach(
|
||||||
|
[&](CCleanupHandler *current)
|
||||||
|
{
|
||||||
|
if (current->StateFlags & HANDLER_STATE_SELECTED)
|
||||||
|
{
|
||||||
|
SelectedGained += current->SpaceUsed;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
StrFormatByteSizeW(SelectedGained, ByteSize, _countof(ByteSize));
|
||||||
|
SetDlgItemText(IDC_SELECTED_GAINED, ByteSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
BEGIN_MSG_MAP(CCleanMgrProperties)
|
||||||
|
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
|
||||||
|
COMMAND_ID_HANDLER(IDC_DETAILS, OnDetails)
|
||||||
|
NOTIFY_HANDLER(IDC_HANDLERLIST, LVN_ITEMCHANGED, OnHandlerItemchanged)
|
||||||
|
CHAIN_MSG_MAP(CPropertyPageImpl<CCleanMgrProperties>) // Allow the default handler to call 'OnApply' etc
|
||||||
|
END_MSG_MAP()
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class CCleanMgrModule : public ATL::CAtlExeModuleT< CCleanMgrModule >
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
WCHAR m_Drive = UNICODE_NULL;
|
||||||
|
|
||||||
|
bool ParseCommandLine(
|
||||||
|
_In_z_ LPCTSTR lpCmdLine,
|
||||||
|
_Out_ HRESULT* pnRetCode) throw()
|
||||||
|
{
|
||||||
|
int argc = 0;
|
||||||
|
CLocalPtr<LPWSTR> argv(CommandLineToArgvW(lpCmdLine, &argc));
|
||||||
|
|
||||||
|
for (int n = 1; n < argc; ++n)
|
||||||
|
{
|
||||||
|
if ((argv[n][0] == '/' || argv[n][0] == '-') && towlower(argv[n][1]) == 'd')
|
||||||
|
{
|
||||||
|
if (iswalpha(argv[n][2]))
|
||||||
|
{
|
||||||
|
m_Drive = towupper(argv[n][2]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ((n + 1) < argc)
|
||||||
|
{
|
||||||
|
m_Drive = towupper(argv[n + 1][0]);
|
||||||
|
++n;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*pnRetCode = S_OK;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline UINT GetWindowProcessId(_In_ HWND hWnd)
|
||||||
|
{
|
||||||
|
DWORD pid;
|
||||||
|
return GetWindowThreadProcessId(hWnd, &pid) ? pid : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL CALLBACK EnumSingleInstanceCallback(_In_ HWND hWnd, _In_ LPARAM lParam)
|
||||||
|
{
|
||||||
|
if (::IsWindowVisible(hWnd) && (LPARAM)GetWindowProcessId(hWnd) == lParam)
|
||||||
|
{
|
||||||
|
::SetForegroundWindow(hWnd);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT Run(_In_ int nShowCmd) throw()
|
||||||
|
{
|
||||||
|
if (m_Drive == UNICODE_NULL)
|
||||||
|
{
|
||||||
|
SelectDrive(m_Drive);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_Drive == UNICODE_NULL)
|
||||||
|
return E_FAIL;
|
||||||
|
|
||||||
|
CStringW Title;
|
||||||
|
Title.Format(IDS_PROPERTIES_MAIN_TITLE, m_Drive);
|
||||||
|
|
||||||
|
HWND hWndInstance = ::CreateWindowExW(WS_EX_TOOLWINDOW, WC_STATIC, Title, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL);
|
||||||
|
for (HWND hNext = NULL, hFind; (hFind = ::FindWindowExW(NULL, hNext, WC_STATIC, Title)) != NULL; hNext = hFind)
|
||||||
|
{
|
||||||
|
if (hFind != hWndInstance)
|
||||||
|
{
|
||||||
|
::EnumWindows(EnumSingleInstanceCallback, GetWindowProcessId(hFind));
|
||||||
|
return S_FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CCleanupHandlerList Handlers;
|
||||||
|
CEmptyVolumeCacheCallBack CacheCallBack;
|
||||||
|
|
||||||
|
Handlers.LoadHandlers(m_Drive);
|
||||||
|
DWORDLONG TotalSpaceUsed = Handlers.ScanDrive(&CacheCallBack);
|
||||||
|
|
||||||
|
CCleanMgrProperties cleanMgr(m_Drive, TotalSpaceUsed, &Handlers);
|
||||||
|
HPROPSHEETPAGE hpsp[1] = { cleanMgr.Create() };
|
||||||
|
|
||||||
|
PROPSHEETHEADERW psh = { };
|
||||||
|
psh.dwSize = sizeof(psh);
|
||||||
|
psh.dwFlags = PSH_NOAPPLYNOW | PSH_USEICONID | PSH_NOCONTEXTHELP;
|
||||||
|
psh.hInstance = _AtlBaseModule.GetResourceInstance();
|
||||||
|
psh.pszIcon = MAKEINTRESOURCEW(IDI_CLEANMGR);
|
||||||
|
psh.pszCaption = Title;
|
||||||
|
psh.nPages = _countof(hpsp);
|
||||||
|
psh.phpage = hpsp;
|
||||||
|
|
||||||
|
if (PropertySheetW(&psh) >= 1)
|
||||||
|
{
|
||||||
|
::DestroyWindow(hWndInstance); // Allow new "cleanmgr /D" without waiting for these handlers
|
||||||
|
Handlers.ExecuteCleanup(&CacheCallBack);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
::DestroyWindow(hWndInstance);
|
||||||
|
}
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CCleanMgrModule _AtlModule;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
extern "C" int WINAPI wWinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/,
|
||||||
|
LPWSTR /*lpCmdLine*/, int nShowCmd)
|
||||||
|
{
|
||||||
|
return _AtlModule.WinMain(nShowCmd);
|
||||||
|
}
|
66
base/applications/cleanmgr/cleanmgr/cleanmgr.h
Normal file
66
base/applications/cleanmgr/cleanmgr/cleanmgr.h
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
* PROJECT: ReactOS Disk Cleanup
|
||||||
|
* LICENSE: MIT (https://spdx.org/licenses/MIT)
|
||||||
|
* PURPOSE: Main header file
|
||||||
|
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef STRICT
|
||||||
|
#define STRICT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define _ATL_APARTMENT_THREADED
|
||||||
|
#define _ATL_NO_AUTOMATIC_NAMESPACE
|
||||||
|
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit
|
||||||
|
#define ATL_NO_ASSERT_ON_DESTROY_NONEXISTENT_WINDOW
|
||||||
|
|
||||||
|
#define _FORCENAMELESSUNION
|
||||||
|
|
||||||
|
#include <ndk/rtlfuncs.h>
|
||||||
|
#include <windef.h>
|
||||||
|
#include <winbase.h>
|
||||||
|
#include <shlobj.h>
|
||||||
|
#include <shlwapi.h>
|
||||||
|
|
||||||
|
|
||||||
|
#include <atlbase.h>
|
||||||
|
#include <atlcom.h>
|
||||||
|
#include <atlstr.h>
|
||||||
|
#include <strsafe.h>
|
||||||
|
#include <emptyvc.h>
|
||||||
|
#include <atlcoll.h>
|
||||||
|
|
||||||
|
|
||||||
|
using namespace ATL;
|
||||||
|
|
||||||
|
#define NDEBUG
|
||||||
|
#include <reactos/debug.h>
|
||||||
|
#include <reactos/shellutils.h>
|
||||||
|
#include <ui/rosdlgs.h>
|
||||||
|
|
||||||
|
|
||||||
|
template <class T> class CLocalPtr
|
||||||
|
: public CHeapPtr<T, CLocalAllocator>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CLocalPtr() throw()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
explicit CLocalPtr(_In_ T* pData) throw() :
|
||||||
|
CHeapPtr<T, CLocalAllocator>(pData)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#include "resource.h"
|
||||||
|
#include "CProgressDlg.hpp"
|
||||||
|
#include "CCleanupHandler.hpp"
|
||||||
|
#include "CCleanupHandlerList.hpp"
|
||||||
|
#include "CEmptyVolumeCacheCallBack.hpp"
|
||||||
|
|
||||||
|
// CSelectDriveDlg.cpp
|
||||||
|
void
|
||||||
|
SelectDrive(WCHAR &Drive);
|
64
base/applications/cleanmgr/cleanmgr/cleanmgr.rc
Normal file
64
base/applications/cleanmgr/cleanmgr/cleanmgr.rc
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
* PROJECT: ReactOS Disk Cleanup
|
||||||
|
* LICENSE: MIT (https://spdx.org/licenses/MIT)
|
||||||
|
* PURPOSE: Resources
|
||||||
|
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <windef.h>
|
||||||
|
#include <winuser.h>
|
||||||
|
#include <commctrl.h>
|
||||||
|
#include "resource.h"
|
||||||
|
|
||||||
|
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Disk Cleanup"
|
||||||
|
#define REACTOS_STR_INTERNAL_NAME "cleanmgr"
|
||||||
|
#define REACTOS_STR_ORIGINAL_FILENAME "cleanmgr.exe"
|
||||||
|
#include <reactos/version.rc>
|
||||||
|
|
||||||
|
#include <reactos/manifest_exe.rc>
|
||||||
|
|
||||||
|
IDI_CLEANMGR ICON "resources/cleanmgr.ico"
|
||||||
|
|
||||||
|
#pragma code_page(65001)
|
||||||
|
|
||||||
|
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||||
|
|
||||||
|
STRINGTABLE
|
||||||
|
BEGIN
|
||||||
|
IDS_PROPERTIES_MAIN_TITLE "Disk Cleanup for (%c:)"
|
||||||
|
IDS_TOTAL_CLEANABLE_CAPTION "You can use Disk Cleanup to free up to %s of disk space on (%c:)."
|
||||||
|
IDS_DISK_CLEANUP "Disk Cleanup"
|
||||||
|
IDS_CONFIRM_DELETE "Are you sure you want to delete these files permanently?"
|
||||||
|
IDS_CALCULATING "Disk Cleanup is calculating how much space can be gained on (%s)."
|
||||||
|
IDS_SCANNING "Scanning: %s"
|
||||||
|
IDS_CLEANING_CAPTION "Disk Cleanup is cleaning up files on %s."
|
||||||
|
IDS_CLEANING "Cleaning: %s"
|
||||||
|
END
|
||||||
|
|
||||||
|
IDD_PROPERTIES_MAIN DIALOGEX 0, 0, 235, 215
|
||||||
|
STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_CHILD | WS_DISABLED | WS_CAPTION
|
||||||
|
CAPTION "Disk Cleanup"
|
||||||
|
FONT 8, "MS Shell Dlg", 400, 0, 0x0
|
||||||
|
BEGIN
|
||||||
|
CONTROL "",IDC_DISKICON,"Static",SS_ICON,6,6,20,20
|
||||||
|
LTEXT "You can use Disk Cleanup to free up to 0.0MB of disk space on drive C.",IDC_TOTAL_CLEANABLE,36,6,192,18
|
||||||
|
LTEXT "Files to delete:",IDC_STATIC,6,30,222,8
|
||||||
|
CONTROL "",IDC_HANDLERLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP,6,42,222,66
|
||||||
|
LTEXT "Total amount of disk space gained:",IDC_STATIC,6,114,144,8
|
||||||
|
RTEXT "",IDC_SELECTED_GAINED,156,114,73,8
|
||||||
|
GROUPBOX "Description",IDC_STATIC,6,126,222,84
|
||||||
|
LTEXT "",IDC_DESCRIPTION,12,138,210,54
|
||||||
|
PUSHBUTTON "Details...",IDC_DETAILS,150,192,74,14
|
||||||
|
END
|
||||||
|
|
||||||
|
IDD_SELECTDRIVE DIALOGEX 0, 0, 177, 74
|
||||||
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
|
CAPTION "Disk Cleanup - Select Drive"
|
||||||
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
|
BEGIN
|
||||||
|
DEFPUSHBUTTON "OK",IDOK,30,48,50,14
|
||||||
|
PUSHBUTTON "E&xit",IDCANCEL,96,48,50,14
|
||||||
|
LTEXT "Select the drive to clean up.",IDC_STATIC,12,6,150,8
|
||||||
|
COMBOBOX IDC_DRIVES,12,24,150,90,CBS_DROPDOWNLIST | CBS_HASSTRINGS | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
|
||||||
|
END
|
||||||
|
|
30
base/applications/cleanmgr/cleanmgr/resource.h
Normal file
30
base/applications/cleanmgr/cleanmgr/resource.h
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* PROJECT: ReactOS Disk Cleanup
|
||||||
|
* LICENSE: MIT (https://spdx.org/licenses/MIT)
|
||||||
|
* PURPOSE: Resource definitions
|
||||||
|
* COPYRIGHT: Copyright 2023-2025 Mark Jansen <mark.jansen@reactos.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define IDC_STATIC -1
|
||||||
|
|
||||||
|
#define IDI_CLEANMGR 100
|
||||||
|
|
||||||
|
#define IDD_PROPERTIES_MAIN 200
|
||||||
|
#define IDC_DISKICON 201
|
||||||
|
#define IDC_TOTAL_CLEANABLE 202
|
||||||
|
#define IDC_HANDLERLIST 203
|
||||||
|
#define IDC_SELECTED_GAINED 204
|
||||||
|
#define IDC_DESCRIPTION 205
|
||||||
|
#define IDC_DETAILS 206
|
||||||
|
|
||||||
|
#define IDD_SELECTDRIVE 220
|
||||||
|
#define IDC_DRIVES 221
|
||||||
|
|
||||||
|
#define IDS_PROPERTIES_MAIN_TITLE 1000
|
||||||
|
#define IDS_TOTAL_CLEANABLE_CAPTION 1001
|
||||||
|
#define IDS_DISK_CLEANUP 1002
|
||||||
|
#define IDS_CONFIRM_DELETE 1003
|
||||||
|
#define IDS_CALCULATING 1004
|
||||||
|
#define IDS_SCANNING 1005
|
||||||
|
#define IDS_CLEANING_CAPTION 1006
|
||||||
|
#define IDS_CLEANING 1007
|
BIN
base/applications/cleanmgr/cleanmgr/resources/cleanmgr.ico
Normal file
BIN
base/applications/cleanmgr/cleanmgr/resources/cleanmgr.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 58 KiB |
@@ -3,6 +3,7 @@
|
|||||||
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
|
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
|
||||||
* PURPOSE: Implementation of Italian language for Clipboard Viewer
|
* PURPOSE: Implementation of Italian language for Clipboard Viewer
|
||||||
* COPYRIGHT: Copyright 2018 George Bișoc (george.bisoc@reactos.org)
|
* COPYRIGHT: Copyright 2018 George Bișoc (george.bisoc@reactos.org)
|
||||||
|
* Copyright 2025 Gabriele Lo Re (gabrolr70@gmail.com)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
|
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
|
||||||
@@ -39,12 +40,12 @@ END
|
|||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
STRING_CLIPBOARD "Visualizzatore di Clipboard"
|
STRING_CLIPBOARD "Visualizzatore Appunti condivisi"
|
||||||
STRING_CLIPFILE "Elemento Clipboard"
|
STRING_CLIPFILE "Elemento appunti condivisi"
|
||||||
STRING_DELETE_MSG "Cancella i contenuti del Clipboard?"
|
STRING_DELETE_MSG "Cancella i contenuti degli appunti condivisi?"
|
||||||
STRING_DELETE_TITLE "Cancella Clipboard"
|
STRING_DELETE_TITLE "Cancella appunti condivisi"
|
||||||
STRING_FORMAT_NT "I file del Clipboard di ReactOS (*.clp)"
|
STRING_FORMAT_NT "Appunti condivisi di ReactOS (*.clp)"
|
||||||
STRING_FORMAT_GEN "I file Clipboard (*.clp)"
|
STRING_FORMAT_GEN "Appunti condivisi (*.clp)"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
@@ -67,6 +68,6 @@ END
|
|||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
ERROR_UNSUPPORTED_FORMAT "Il Clipboard contiene informazioni in formato data, che non può essere visualizzato."
|
ERROR_UNSUPPORTED_FORMAT "Gli appunti Condivisi contengono informazioni in formato data, che non possono essere visualizzate."
|
||||||
ERROR_INVALID_FILE_FORMAT "Il file selezionato non è un file di tipo clipboard valido."
|
ERROR_INVALID_FILE_FORMAT "Il file selezionato non è un file di tipo appunti condivisi valido."
|
||||||
END
|
END
|
||||||
|
@@ -257,9 +257,9 @@ void SetDIBitsToDeviceFromClipboard(UINT uFormat, PAINTSTRUCT ps, SCROLLSTATE st
|
|||||||
*
|
*
|
||||||
* FIXME: investigate!!
|
* FIXME: investigate!!
|
||||||
* ANSWER: this is a Windows bug; part of the answer is there:
|
* ANSWER: this is a Windows bug; part of the answer is there:
|
||||||
* https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/ac7ab3b5-8609-4478-b86a-976dab44c271/bug-clipboard-format-conversions-cfdib-cfdibv5-cfdib
|
* https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/ac7ab3b5-8609-4478-b86a-976dab44c271/bug-clipboard-format-conversions-cfdib-cfdibv5-cfdib (DEAD_LINK)
|
||||||
* May be related:
|
* May be related:
|
||||||
* https://blog.talosintelligence.com/2015/10/dangerous-clipboard.html
|
* https://blog.talosintelligence.com/dangerous-clipboard/
|
||||||
*/
|
*/
|
||||||
#if 0
|
#if 0
|
||||||
if ((lpInfoHeader->biSize == sizeof(BITMAPINFOHEADER)) &&
|
if ((lpInfoHeader->biSize == sizeof(BITMAPINFOHEADER)) &&
|
||||||
|
@@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
/* UTF-8 */
|
/* UTF-8 */
|
||||||
#pragma code_page(65001)
|
#pragma code_page(65001)
|
||||||
|
|
||||||
#ifdef LANGUAGE_DE_DE
|
#ifdef LANGUAGE_DE_DE
|
||||||
#include "lang/de-DE.rc"
|
#include "lang/de-DE.rc"
|
||||||
#endif
|
#endif
|
||||||
|
@@ -150,7 +150,7 @@ typedef struct _ENUMFILES_CTX
|
|||||||
static BOOL
|
static BOOL
|
||||||
EnumFilesWorker(
|
EnumFilesWorker(
|
||||||
_Inout_ PENUMFILES_CTX EnumCtx,
|
_Inout_ PENUMFILES_CTX EnumCtx,
|
||||||
_Inout_ off_t offFilePart) // Offset to the file name inside FullPathBuffer
|
_Inout_ _off_t offFilePart) // Offset to the file name inside FullPathBuffer
|
||||||
{
|
{
|
||||||
BOOL bFound = FALSE;
|
BOOL bFound = FALSE;
|
||||||
HRESULT hRes;
|
HRESULT hRes;
|
||||||
@@ -243,7 +243,7 @@ EnumFilesWorker(
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
BOOL bIsDir = !!(EnumCtx->findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY);
|
BOOL bIsDir = !!(EnumCtx->findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY);
|
||||||
BOOL bExactMatch = (wcsicmp(findFileName, EnumCtx->FileName) == 0);
|
BOOL bExactMatch = (_wcsicmp(findFileName, EnumCtx->FileName) == 0);
|
||||||
|
|
||||||
if (bIsDir && !(EnumCtx->Flags & ENUM_DIRECTORIES) && !bExactMatch)
|
if (bIsDir && !(EnumCtx->Flags & ENUM_DIRECTORIES) && !bExactMatch)
|
||||||
continue;
|
continue;
|
||||||
@@ -330,9 +330,9 @@ int wmain(int argc, WCHAR *argv[])
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
/* Retrieve the enumeration modes */
|
/* Retrieve the enumeration modes */
|
||||||
if (wcsicmp(argv[i], L"/s") == 0)
|
if (_wcsicmp(argv[i], L"/s") == 0)
|
||||||
dwEnumFlags |= ENUM_RECURSE;
|
dwEnumFlags |= ENUM_RECURSE;
|
||||||
else if (wcsicmp(argv[i], L"/d") == 0)
|
else if (_wcsicmp(argv[i], L"/d") == 0)
|
||||||
dwEnumFlags |= ENUM_DIRECTORIES;
|
dwEnumFlags |= ENUM_DIRECTORIES;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@@ -2,12 +2,14 @@
|
|||||||
include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/conutils)
|
include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/conutils)
|
||||||
|
|
||||||
list(APPEND SOURCE
|
list(APPEND SOURCE
|
||||||
certutil.c
|
asn.cpp
|
||||||
|
certutil.cpp
|
||||||
|
hashfile.cpp
|
||||||
precomp.h)
|
precomp.h)
|
||||||
|
|
||||||
add_executable(certutil ${SOURCE})
|
add_executable(certutil ${SOURCE})
|
||||||
set_module_type(certutil win32cui UNICODE)
|
set_module_type(certutil win32cui UNICODE)
|
||||||
target_link_libraries(certutil conutils ${PSEH_LIB})
|
target_link_libraries(certutil conutils ${PSEH_LIB})
|
||||||
add_importlibs(certutil advapi32 msvcrt kernel32)
|
add_importlibs(certutil crypt32 advapi32 msvcrt kernel32)
|
||||||
add_pch(certutil precomp.h SOURCE)
|
add_pch(certutil precomp.h SOURCE)
|
||||||
add_cd_file(TARGET certutil DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET certutil DESTINATION reactos/system32 FOR all)
|
||||||
|
508
base/applications/cmdutils/certutil/asn.cpp
Normal file
508
base/applications/cmdutils/certutil/asn.cpp
Normal file
@@ -0,0 +1,508 @@
|
|||||||
|
/*
|
||||||
|
* PROJECT: ReactOS certutil
|
||||||
|
* LICENSE: MIT (https://spdx.org/licenses/MIT)
|
||||||
|
* PURPOSE: CertUtil asn implementation
|
||||||
|
* COPYRIGHT: Copyright 2020 Mark Jansen (mark.jansen@reactos.org)
|
||||||
|
*
|
||||||
|
* NOTES:
|
||||||
|
* To keep it simple, Tag and Class are combined in one identifier
|
||||||
|
* See for more details:
|
||||||
|
* https://en.wikipedia.org/wiki/X.690#BER_encoding
|
||||||
|
* https://www.strozhevsky.com/free_docs/asn1_by_simple_words.pdf
|
||||||
|
* http://mikk.net/~chris/asn1.pdf
|
||||||
|
*
|
||||||
|
* And for a test suite:
|
||||||
|
* https://github.com/YuryStrozhevsky/asn1-test-suite
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "precomp.h"
|
||||||
|
#include <math.h>
|
||||||
|
#include <wincrypt.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define ASN_TAG_IS_CONSTRUCTED 0x20
|
||||||
|
|
||||||
|
|
||||||
|
#define ASN_TAG_BITSTRING 0x03
|
||||||
|
#define ASN_TAG_OCTET_STRING 0x04
|
||||||
|
#define ASN_TAG_OBJECT_ID 0x06
|
||||||
|
|
||||||
|
#define ASN_TAG_SEQUENCE_RAW 0x10
|
||||||
|
#define ASN_TAG_SET_RAW 0x11
|
||||||
|
|
||||||
|
#define ASN_TAG_SEQUENCE 0x30
|
||||||
|
#define ASN_TAG_SET 0x31
|
||||||
|
|
||||||
|
|
||||||
|
#define ASN_TAG_CONTEXT_SPECIFIC 0x80
|
||||||
|
#define ASN_TAG_CONTEXT_SPECIFIC_N(n) (ASN_TAG_CONTEXT_SPECIFIC | (n))
|
||||||
|
|
||||||
|
#define ASN_TAG_OPTIONAL 0xA0
|
||||||
|
#define ASN_TAG_OPTIONAL_N(n) (ASN_TAG_OPTIONAL | (n))
|
||||||
|
|
||||||
|
/* NOTE: These names are not the names listed in f.e. the wikipedia pages,
|
||||||
|
they are made to look like MS's names for this */
|
||||||
|
LPCWSTR TagToName(DWORD dwTag)
|
||||||
|
{
|
||||||
|
switch (dwTag)
|
||||||
|
{
|
||||||
|
case 0x0: return L"EOC";
|
||||||
|
case 0x1: return L"BOOL";
|
||||||
|
case 0x2: return L"INTEGER";
|
||||||
|
case ASN_TAG_BITSTRING: return L"BIT_STRING";
|
||||||
|
case ASN_TAG_OCTET_STRING: return L"OCTET_STRING";
|
||||||
|
case 0x5: return L"NULL";
|
||||||
|
case ASN_TAG_OBJECT_ID: return L"OBJECT_ID";
|
||||||
|
case 0x7: return L"Object Descriptor";
|
||||||
|
case 0x8: return L"EXTERNAL";
|
||||||
|
case 0x9: return L"REAL";
|
||||||
|
case 0xA: return L"ENUMERATED";
|
||||||
|
case 0xB: return L"EMBEDDED PDV";
|
||||||
|
case 0xC: return L"UTF8String";
|
||||||
|
case 0xD: return L"RELATIVE-OID";
|
||||||
|
case 0xE: return L"TIME";
|
||||||
|
case 0xF: return L"Reserved";
|
||||||
|
case ASN_TAG_SEQUENCE_RAW: __debugbreak(); return L"SEQUENCE_RAW";
|
||||||
|
case ASN_TAG_SET_RAW: __debugbreak(); return L"SET_RAW";
|
||||||
|
case 0x12: return L"NumericString";
|
||||||
|
case 0x13: return L"PRINTABLE_STRING";
|
||||||
|
case 0x14: return L"T61String";
|
||||||
|
case 0x15: return L"VideotexString";
|
||||||
|
case 0x16: return L"IA5String";
|
||||||
|
case 0x17: return L"UTC_TIME";
|
||||||
|
case 0x18: return L"GeneralizedTime";
|
||||||
|
case 0x19: return L"GraphicString";
|
||||||
|
case 0x1A: return L"VisibleString";
|
||||||
|
case 0x1B: return L"GeneralString";
|
||||||
|
case 0x1C: return L"UniversalString";
|
||||||
|
case 0x1D: return L"CHARACTER STRING";
|
||||||
|
case 0x1E: return L"BMPString";
|
||||||
|
case 0x1F: return L"DATE";
|
||||||
|
case 0x20: return L"CONSTRUCTED";
|
||||||
|
|
||||||
|
case ASN_TAG_SEQUENCE: return L"SEQUENCE";
|
||||||
|
case ASN_TAG_SET: return L"SET";
|
||||||
|
|
||||||
|
|
||||||
|
case ASN_TAG_CONTEXT_SPECIFIC_N(0): return L"CONTEXT_SPECIFIC[0]";
|
||||||
|
case ASN_TAG_CONTEXT_SPECIFIC_N(1): return L"CONTEXT_SPECIFIC[1]";
|
||||||
|
case ASN_TAG_CONTEXT_SPECIFIC_N(2): return L"CONTEXT_SPECIFIC[2]";
|
||||||
|
case ASN_TAG_CONTEXT_SPECIFIC_N(3): return L"CONTEXT_SPECIFIC[3]";
|
||||||
|
case ASN_TAG_CONTEXT_SPECIFIC_N(4): return L"CONTEXT_SPECIFIC[4]";
|
||||||
|
case ASN_TAG_CONTEXT_SPECIFIC_N(5): return L"CONTEXT_SPECIFIC[5]";
|
||||||
|
case ASN_TAG_CONTEXT_SPECIFIC_N(6): return L"CONTEXT_SPECIFIC[6]";
|
||||||
|
case ASN_TAG_CONTEXT_SPECIFIC_N(7): return L"CONTEXT_SPECIFIC[7]";
|
||||||
|
case ASN_TAG_CONTEXT_SPECIFIC_N(8): return L"CONTEXT_SPECIFIC[8]";
|
||||||
|
case ASN_TAG_CONTEXT_SPECIFIC_N(9): return L"CONTEXT_SPECIFIC[9]";
|
||||||
|
/* Experiments show that Windows' certutil only goes up to 9 */
|
||||||
|
|
||||||
|
|
||||||
|
case ASN_TAG_OPTIONAL_N(0): return L"OPTIONAL[0]";
|
||||||
|
case ASN_TAG_OPTIONAL_N(1): return L"OPTIONAL[1]";
|
||||||
|
case ASN_TAG_OPTIONAL_N(2): return L"OPTIONAL[2]";
|
||||||
|
case ASN_TAG_OPTIONAL_N(3): return L"OPTIONAL[3]";
|
||||||
|
case ASN_TAG_OPTIONAL_N(4): return L"OPTIONAL[4]";
|
||||||
|
case ASN_TAG_OPTIONAL_N(5): return L"OPTIONAL[5]";
|
||||||
|
case ASN_TAG_OPTIONAL_N(6): return L"OPTIONAL[6]";
|
||||||
|
case ASN_TAG_OPTIONAL_N(7): return L"OPTIONAL[7]";
|
||||||
|
case ASN_TAG_OPTIONAL_N(8): return L"OPTIONAL[8]";
|
||||||
|
case ASN_TAG_OPTIONAL_N(9): return L"OPTIONAL[9]";
|
||||||
|
/* Experiments show that Windows' certutil only goes up to 9 */
|
||||||
|
|
||||||
|
default:
|
||||||
|
return L"???";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL Move(DWORD dwLen, PBYTE& pData, DWORD& dwSize)
|
||||||
|
{
|
||||||
|
if (dwSize < dwLen)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
pData += dwLen;
|
||||||
|
dwSize -= dwLen;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL ParseTag(PBYTE& pData, DWORD& dwSize, DWORD& dwTagAndClass)
|
||||||
|
{
|
||||||
|
if (dwSize == 0)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
/* Is this a long form? */
|
||||||
|
if ((pData[0] & 0x1f) != 0x1f)
|
||||||
|
{
|
||||||
|
/* No, so extract the tag and class (in one identifier) */
|
||||||
|
dwTagAndClass = pData[0];
|
||||||
|
return Move(1, pData, dwSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD dwClass = (pData[0] & 0xE0) >> 5;
|
||||||
|
dwTagAndClass = 0;
|
||||||
|
DWORD n;
|
||||||
|
for (n = 1; n < dwSize; ++n)
|
||||||
|
{
|
||||||
|
dwTagAndClass <<= 7;
|
||||||
|
dwTagAndClass |= (pData[n] & 0x7f);
|
||||||
|
|
||||||
|
if (!(pData[n] & 0x80))
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Move(n, pData, dwSize);
|
||||||
|
|
||||||
|
/* Any number bigger than this, we shift data out! */
|
||||||
|
if (n > 4)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
/* Just drop this in the hightest bits*/
|
||||||
|
dwTagAndClass |= (dwClass << (32-3));
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL ParseLength(PBYTE& pData, DWORD& dwSize, DWORD& dwLength)
|
||||||
|
{
|
||||||
|
if (dwSize == 0)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (!(pData[0] & 0x80))
|
||||||
|
{
|
||||||
|
dwLength = pData[0];
|
||||||
|
return Move(1, pData, dwSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD dwBytes = pData[0] & 0x7f;
|
||||||
|
if (dwBytes == 0 || dwBytes > 8 || dwBytes + 1 > dwSize)
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
dwLength = 0;
|
||||||
|
for (DWORD n = 0; n < dwBytes; ++n)
|
||||||
|
{
|
||||||
|
dwLength <<= 8;
|
||||||
|
dwLength += pData[1 + n];
|
||||||
|
}
|
||||||
|
|
||||||
|
return Move(dwBytes + 1, pData, dwSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD HexDump(PBYTE pRoot, PBYTE pData, DWORD dwSize, PWSTR wszPrefix)
|
||||||
|
{
|
||||||
|
while (TRUE)
|
||||||
|
{
|
||||||
|
SIZE_T Address = pData - pRoot;
|
||||||
|
ConPrintf(StdOut, L"%04x: ", Address);
|
||||||
|
ConPuts(StdOut, wszPrefix);
|
||||||
|
|
||||||
|
for (DWORD n = 0; n < min(dwSize, 0x10); ++n)
|
||||||
|
{
|
||||||
|
ConPrintf(StdOut, L"%02x ", pData[n]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dwSize <= 0x10)
|
||||||
|
break;
|
||||||
|
|
||||||
|
Move(0x10, pData, dwSize);
|
||||||
|
ConPuts(StdOut, L"\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
return 3 * dwSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PrintTag(PBYTE pRoot, PBYTE pHeader, DWORD dwTag, DWORD dwTagLength, PBYTE pData, PWSTR wszPrefix)
|
||||||
|
{
|
||||||
|
DWORD dwRemainder = HexDump(pRoot, pHeader, pData - pHeader, wszPrefix);
|
||||||
|
|
||||||
|
LPCWSTR wszTag = TagToName(dwTag);
|
||||||
|
DWORD dwPadding = dwRemainder + wcslen(wszPrefix);
|
||||||
|
while (dwPadding > 50)
|
||||||
|
dwPadding -= 50;
|
||||||
|
ConPrintf(StdOut, L"%*s; %s (%x Bytes)\n", 50 - dwPadding, L"", wszTag, dwTagLength);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct OID_NAMES
|
||||||
|
{
|
||||||
|
CHAR* Oid;
|
||||||
|
LPCWSTR Names[20];
|
||||||
|
DWORD NumberOfNames;
|
||||||
|
};
|
||||||
|
|
||||||
|
BOOL WINAPI CryptOIDEnumCallback(_In_ PCCRYPT_OID_INFO pInfo, _Inout_opt_ void *pvArg)
|
||||||
|
{
|
||||||
|
OID_NAMES* Names = (OID_NAMES*)pvArg;
|
||||||
|
|
||||||
|
if (pInfo && pInfo->pszOID && !_stricmp(pInfo->pszOID, Names->Oid))
|
||||||
|
{
|
||||||
|
if (Names->NumberOfNames < RTL_NUMBER_OF(Names->Names))
|
||||||
|
{
|
||||||
|
for (DWORD n = 0; n < Names->NumberOfNames; ++n)
|
||||||
|
{
|
||||||
|
// We already have this..
|
||||||
|
if (!_wcsicmp(Names->Names[n], pInfo->pwszName))
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
Names->Names[Names->NumberOfNames++] = pInfo->pwszName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PrintOID(PBYTE pRoot, PBYTE pHeader, PBYTE pData, DWORD dwSize, PWSTR wszPrefix)
|
||||||
|
{
|
||||||
|
/* CryptFindOIDInfo expects the OID to be in ANSI.. */
|
||||||
|
CHAR szOID[250];
|
||||||
|
CHAR* ptr = szOID;
|
||||||
|
size_t cchRemaining = RTL_NUMBER_OF(szOID);
|
||||||
|
|
||||||
|
/* CryptFindOIDInfo just returns the first, we want multiple */
|
||||||
|
OID_NAMES Names = {0};
|
||||||
|
|
||||||
|
if (dwSize == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
DWORD dwValue = 0, count = 0;
|
||||||
|
for (DWORD n = 0; n < dwSize; ++n)
|
||||||
|
{
|
||||||
|
dwValue <<= 7;
|
||||||
|
dwValue |= pData[n] & 0x7f;
|
||||||
|
|
||||||
|
if (pData[n] & 0x80)
|
||||||
|
{
|
||||||
|
if (++count >= 4)
|
||||||
|
break;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
count = 0;
|
||||||
|
|
||||||
|
/* First & second octet have a special encoding */
|
||||||
|
if (ptr == szOID)
|
||||||
|
{
|
||||||
|
DWORD id1 = dwValue / 40;
|
||||||
|
DWORD id2 = dwValue % 40;
|
||||||
|
|
||||||
|
/* The first one can only be 0, 1 or 2, so handle special case: tc24.ber */
|
||||||
|
if (id1 > 2)
|
||||||
|
{
|
||||||
|
id2 += (id1 - 2) * 40;
|
||||||
|
id1 = 2;
|
||||||
|
}
|
||||||
|
StringCchPrintfExA(ptr, cchRemaining, &ptr, &cchRemaining, 0, "%d.%d", id1, id2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
StringCchPrintfExA(ptr, cchRemaining, &ptr, &cchRemaining, 0, ".%d", dwValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
dwValue = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dwValue || count)
|
||||||
|
{
|
||||||
|
/* We cannot format this, so just add abort */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SIZE_T Address = pData - pRoot;
|
||||||
|
/* Pad with spaces instead of printing the address again */
|
||||||
|
DWORD addrDigits = (DWORD)log10((double)Address) + 1;
|
||||||
|
ConPrintf(StdOut, L"%*s ", max(addrDigits, 4), L"");
|
||||||
|
ConPrintf(StdOut, L"%s; %S", wszPrefix, szOID);
|
||||||
|
|
||||||
|
Names.Oid = szOID;
|
||||||
|
|
||||||
|
/* The order does not match a naive call with '0'... */
|
||||||
|
CryptEnumOIDInfo(0, 0, &Names, CryptOIDEnumCallback);
|
||||||
|
|
||||||
|
for (DWORD n = 0; n < Names.NumberOfNames; ++n)
|
||||||
|
{
|
||||||
|
if (n == 0)
|
||||||
|
ConPrintf(StdOut, L" %s", Names.Names[n]);
|
||||||
|
else if (n == 1)
|
||||||
|
ConPrintf(StdOut, L" (%s", Names.Names[n]);
|
||||||
|
else
|
||||||
|
ConPrintf(StdOut, L" / %s", Names.Names[n]);
|
||||||
|
}
|
||||||
|
|
||||||
|
ConPrintf(StdOut, L"%s\n", Names.NumberOfNames > 1 ? L")" : L"");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BOOL ParseAsn(PBYTE pRoot, PBYTE pData, DWORD dwSize, PWSTR wszPrefix, BOOL fPrint)
|
||||||
|
{
|
||||||
|
while (dwSize)
|
||||||
|
{
|
||||||
|
PBYTE pHeader = pData;
|
||||||
|
DWORD dwTagAndClass;
|
||||||
|
|
||||||
|
if (!ParseTag(pData, dwSize, dwTagAndClass))
|
||||||
|
{
|
||||||
|
if (fPrint)
|
||||||
|
ConPrintf(StdOut, L"CertUtil: -asn command failed to parse tag near 0x%x\n", pHeader - pRoot);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD dwTagLength;
|
||||||
|
if (!ParseLength(pData, dwSize, dwTagLength))
|
||||||
|
{
|
||||||
|
if (fPrint)
|
||||||
|
ConPrintf(StdOut, L"CertUtil: -asn command failed to parse tag length near 0x%x\n", pHeader - pRoot);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dwTagLength > dwSize)
|
||||||
|
{
|
||||||
|
if (fPrint)
|
||||||
|
ConPrintf(StdOut, L"CertUtil: -asn command malformed tag length near 0x%x\n", pHeader - pRoot);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (fPrint)
|
||||||
|
PrintTag(pRoot, pHeader, dwTagAndClass, dwTagLength, pData, wszPrefix);
|
||||||
|
|
||||||
|
size_t len = wcslen(wszPrefix);
|
||||||
|
StringCchCatW(wszPrefix, MAX_PATH, dwTagLength != dwSize ? L"| " : L" ");
|
||||||
|
|
||||||
|
if (dwTagAndClass & ASN_TAG_IS_CONSTRUCTED)
|
||||||
|
{
|
||||||
|
if (!ParseAsn(pRoot, pData, dwTagLength, wszPrefix, fPrint))
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (fPrint)
|
||||||
|
{
|
||||||
|
/* Special case for a bit string / octet string */
|
||||||
|
if ((dwTagAndClass == ASN_TAG_BITSTRING || dwTagAndClass == ASN_TAG_OCTET_STRING) && dwTagLength)
|
||||||
|
{
|
||||||
|
if (dwTagAndClass == ASN_TAG_BITSTRING)
|
||||||
|
{
|
||||||
|
/* First, we print the 'unused bits' field of the bit string */
|
||||||
|
HexDump(pRoot, pData, 1, wszPrefix);
|
||||||
|
ConPuts(StdOut, L"\n");
|
||||||
|
|
||||||
|
/* Move past it */
|
||||||
|
Move(1, pData, dwSize);
|
||||||
|
dwTagLength--;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Do we have any data left? */
|
||||||
|
if (dwTagLength)
|
||||||
|
{
|
||||||
|
/* Try to parse this as ASN */
|
||||||
|
if (ParseAsn(pRoot, pData, dwTagLength, wszPrefix, FALSE))
|
||||||
|
{
|
||||||
|
/* We succeeded, this _could_ be ASN, so display it as if it is */
|
||||||
|
if (!ParseAsn(pRoot, pData, dwTagLength, wszPrefix, TRUE))
|
||||||
|
{
|
||||||
|
/* Uhhh, did someone edit the data? */
|
||||||
|
ConPrintf(StdOut, L"CertUtil: -asn command unexpected failure parsing tag near 0x%x\n", pData - pRoot);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Move past what we just parsed */
|
||||||
|
Move(dwTagLength, pData, dwSize);
|
||||||
|
/* Lie about this so that we don't also print a hexdump */
|
||||||
|
dwTagLength = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Is there any data (left) to print? */
|
||||||
|
if (dwTagLength)
|
||||||
|
{
|
||||||
|
HexDump(pRoot, pData, dwTagLength, wszPrefix);
|
||||||
|
ConPuts(StdOut, L"\n");
|
||||||
|
|
||||||
|
StringCchCatW(wszPrefix, MAX_PATH, L" ");
|
||||||
|
|
||||||
|
/* Do we have additional formatters? */
|
||||||
|
switch (dwTagAndClass)
|
||||||
|
{
|
||||||
|
case ASN_TAG_OBJECT_ID:
|
||||||
|
PrintOID(pRoot, pHeader, pData, dwTagLength, wszPrefix);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
wszPrefix[len] = '\0';
|
||||||
|
|
||||||
|
if (!Move(dwTagLength, pData, dwSize))
|
||||||
|
{
|
||||||
|
/* This should not be possible, it was checked before! */
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BOOL asn_dump(LPCWSTR Filename)
|
||||||
|
{
|
||||||
|
HANDLE hFile = CreateFileW(Filename, GENERIC_READ, FILE_SHARE_READ, NULL,
|
||||||
|
OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
|
||||||
|
|
||||||
|
if (hFile == INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
ConPrintf(StdOut, L"CertUtil: -asn command failed to open: %d\n", GetLastError());
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD dwSize = GetFileSize(hFile, NULL);
|
||||||
|
if (dwSize == INVALID_FILE_SIZE)
|
||||||
|
{
|
||||||
|
ConPrintf(StdOut, L"CertUtil: -asn command failed to get file size: %d\n", GetLastError());
|
||||||
|
CloseHandle(hFile);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dwSize == 0)
|
||||||
|
{
|
||||||
|
ConPrintf(StdOut, L"CertUtil: -asn command got an empty file\n");
|
||||||
|
CloseHandle(hFile);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
PBYTE pData = (PBYTE)LocalAlloc(0, dwSize);
|
||||||
|
if (!pData)
|
||||||
|
{
|
||||||
|
ConPrintf(StdOut, L"CertUtil: -asn command failed to allocate: %d\n", GetLastError());
|
||||||
|
CloseHandle(hFile);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD cbRead;
|
||||||
|
BOOL fRead = ReadFile(hFile, pData, dwSize, &cbRead, NULL);
|
||||||
|
DWORD dwErr = GetLastError();
|
||||||
|
CloseHandle(hFile);
|
||||||
|
|
||||||
|
if (!fRead || cbRead != dwSize)
|
||||||
|
{
|
||||||
|
ConPrintf(StdOut, L"CertUtil: -asn command failed to read: %d\n", dwErr);
|
||||||
|
LocalFree(pData);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
WCHAR Buffer[MAX_PATH] = {0};
|
||||||
|
BOOL fSucceeded = ParseAsn(pData, pData, dwSize, Buffer, TRUE);
|
||||||
|
|
||||||
|
LocalFree(pData);
|
||||||
|
return fSucceeded;
|
||||||
|
}
|
||||||
|
|
107
base/applications/cmdutils/certutil/certutil.cpp
Normal file
107
base/applications/cmdutils/certutil/certutil.cpp
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
/*
|
||||||
|
* PROJECT: ReactOS certutil
|
||||||
|
* LICENSE: MIT (https://spdx.org/licenses/MIT)
|
||||||
|
* PURPOSE: CertUtil commandline handling
|
||||||
|
* COPYRIGHT: Copyright 2020 Mark Jansen (mark.jansen@reactos.org)
|
||||||
|
*
|
||||||
|
* Note: Only -hashfile and -asn are implemented for now, the rest is not present!
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "precomp.h"
|
||||||
|
#include <wincrypt.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
LPCWSTR Name;
|
||||||
|
BOOL (*pfn)(LPCWSTR Filename);
|
||||||
|
} Verb;
|
||||||
|
|
||||||
|
|
||||||
|
Verb verbs[] = {
|
||||||
|
{ L"hashfile", hash_file },
|
||||||
|
{ L"asn", asn_dump },
|
||||||
|
};
|
||||||
|
|
||||||
|
static void print_usage()
|
||||||
|
{
|
||||||
|
ConPuts(StdOut, L"Verbs:\n");
|
||||||
|
ConPuts(StdOut, L" -hashfile -- Display cryptographic hash over a file\n");
|
||||||
|
ConPuts(StdOut, L" -asn -- Display ASN.1 encoding of a file\n");
|
||||||
|
ConPuts(StdOut, L"\n");
|
||||||
|
ConPuts(StdOut, L"CertUtil -? -- Display a list of all verbs\n");
|
||||||
|
ConPuts(StdOut, L"CertUtil -hashfile -? -- Display help text for the 'hashfile' verb\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Verb* MatchVerb(LPCWSTR arg)
|
||||||
|
{
|
||||||
|
if (arg[0] != '-' && arg[0] != '/')
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
for (size_t n = 0; n < RTL_NUMBER_OF(verbs); ++n)
|
||||||
|
{
|
||||||
|
if (!_wcsicmp(verbs[n].Name, arg + 1))
|
||||||
|
{
|
||||||
|
return verbs + n;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wmain(int argc, WCHAR *argv[])
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
|
||||||
|
/* Initialize the Console Standard Streams */
|
||||||
|
ConInitStdStreams();
|
||||||
|
|
||||||
|
if (argc == 1) /* i.e. no commandline arguments given */
|
||||||
|
{
|
||||||
|
print_usage();
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (n = 1; n < argc; ++n)
|
||||||
|
{
|
||||||
|
if (!_wcsicmp(argv[n], L"-?"))
|
||||||
|
{
|
||||||
|
print_usage();
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
Verb* verb = MatchVerb(argv[n]);
|
||||||
|
|
||||||
|
if (verb)
|
||||||
|
{
|
||||||
|
if (argc != 3)
|
||||||
|
{
|
||||||
|
ConPrintf(StdOut, L"CertUtil: -%s expected 1 argument, got %d\n", verb->Name, argc - 2);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_wcsicmp(argv[n+1], L"-?"))
|
||||||
|
{
|
||||||
|
print_usage();
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!verb->pfn(argv[n+1]))
|
||||||
|
{
|
||||||
|
/* The verb prints the failure */
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
ConPrintf(StdOut, L"CertUtil: -%s command completed successfully\n", verb->Name);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ConPrintf(StdOut, L"CertUtil: Unknown verb: %s\n", argv[n]);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
@@ -1,10 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
* PROJECT: ReactOS certutil
|
* PROJECT: ReactOS certutil
|
||||||
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
* LICENSE: MIT (https://spdx.org/licenses/MIT)
|
||||||
* PURPOSE: CertUtil stub
|
* PURPOSE: CertUtil hashfile implementation
|
||||||
* COPYRIGHT: Copyright 2020 Mark Jansen (mark.jansen@reactos.org)
|
* COPYRIGHT: Copyright 2020 Mark Jansen (mark.jansen@reactos.org)
|
||||||
*
|
|
||||||
* Note: Only -hashfile is implemented for now, the rest is not present!
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "precomp.h"
|
#include "precomp.h"
|
||||||
@@ -12,7 +10,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
static BOOL hash_file(LPCWSTR Filename)
|
BOOL hash_file(LPCWSTR Filename)
|
||||||
{
|
{
|
||||||
HCRYPTPROV hProv;
|
HCRYPTPROV hProv;
|
||||||
BOOL bSuccess = FALSE;
|
BOOL bSuccess = FALSE;
|
||||||
@@ -87,69 +85,3 @@ static BOOL hash_file(LPCWSTR Filename)
|
|||||||
return bSuccess;
|
return bSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void print_usage()
|
|
||||||
{
|
|
||||||
ConPuts(StdOut, L"Verbs:\n");
|
|
||||||
ConPuts(StdOut, L" -hashfile -- Display cryptographic hash over a file\n");
|
|
||||||
ConPuts(StdOut, L"\n");
|
|
||||||
ConPuts(StdOut, L"CertUtil -? -- Display a list of all verbs\n");
|
|
||||||
ConPuts(StdOut, L"CertUtil -hashfile -? -- Display help text for the 'hashfile' verb\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
int wmain(int argc, WCHAR *argv[])
|
|
||||||
{
|
|
||||||
int n;
|
|
||||||
|
|
||||||
/* Initialize the Console Standard Streams */
|
|
||||||
ConInitStdStreams();
|
|
||||||
|
|
||||||
if (argc == 1) /* i.e. no commandline arguments given */
|
|
||||||
{
|
|
||||||
print_usage();
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (n = 1; n < argc; ++n)
|
|
||||||
{
|
|
||||||
if (!_wcsicmp(argv[n], L"-?"))
|
|
||||||
{
|
|
||||||
print_usage();
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
else if (!_wcsicmp(argv[n], L"-hashfile"))
|
|
||||||
{
|
|
||||||
if (argc == 3)
|
|
||||||
{
|
|
||||||
if (!_wcsicmp(argv[n+1], L"-?"))
|
|
||||||
{
|
|
||||||
print_usage();
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!hash_file(argv[n+1]))
|
|
||||||
{
|
|
||||||
/* hash_file prints the failure itself */
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
ConPuts(StdOut, L"CertUtil: -hashfile command completed successfully\n");
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ConPrintf(StdOut, L"CertUtil: -hashfile expected 1 argument, got %d\n", argc - 2);
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ConPrintf(StdOut, L"CertUtil: Unknown verb: %s\n", argv[n]);
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
@@ -7,10 +7,14 @@
|
|||||||
|
|
||||||
#include <windef.h>
|
#include <windef.h>
|
||||||
#include <winbase.h>
|
#include <winbase.h>
|
||||||
#include <winreg.h>
|
#include <strsafe.h>
|
||||||
#include <winuser.h>
|
|
||||||
|
|
||||||
#include <conutils.h>
|
#include <conutils.h>
|
||||||
|
|
||||||
|
|
||||||
|
BOOL hash_file(LPCWSTR Filename);
|
||||||
|
BOOL asn_dump(LPCWSTR Filename);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* __CERTUTIL_PRECOMP_H */
|
#endif /* __CERTUTIL_PRECOMP_H */
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
add_definitions(-DCSCRIPT_BUILD -D__WINESRC__)
|
add_definitions(-DCSCRIPT_BUILD)
|
||||||
set(wscript_folder ${REACTOS_SOURCE_DIR}/base/applications/cmdutils/wscript)
|
set(wscript_folder ${REACTOS_SOURCE_DIR}/base/applications/cmdutils/wscript)
|
||||||
include_directories(${wscript_folder})
|
include_directories(${wscript_folder})
|
||||||
|
|
||||||
@@ -13,10 +13,11 @@ add_executable(cscript ${SOURCE} rsrc.rc)
|
|||||||
add_idl_headers(cscript_idlheader ihost.idl)
|
add_idl_headers(cscript_idlheader ihost.idl)
|
||||||
add_typelib(ihost.idl)
|
add_typelib(ihost.idl)
|
||||||
set_source_files_properties(rsrc.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ihost.tlb)
|
set_source_files_properties(rsrc.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ihost.tlb)
|
||||||
target_link_libraries(cscript uuid wine)
|
target_link_libraries(cscript uuid wine oldnames)
|
||||||
set_module_type(cscript win32cui UNICODE)
|
set_module_type(cscript win32cui UNICODE)
|
||||||
add_delay_importlibs(cscript shlwapi)
|
add_delay_importlibs(cscript shlwapi)
|
||||||
add_importlibs(cscript shell32 oleaut32 ole32 advapi32 user32 msvcrt kernel32 ntdll)
|
add_importlibs(cscript shell32 oleaut32 ole32 advapi32 user32 msvcrt kernel32 ntdll)
|
||||||
add_dependencies(cscript stdole2 cscript_idlheader)
|
add_dependencies(cscript stdole2 cscript_idlheader)
|
||||||
add_pch(cscript ${wscript_folder}/precomp.h SOURCE)
|
add_pch(cscript ${wscript_folder}/precomp.h SOURCE)
|
||||||
add_cd_file(TARGET cscript DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET cscript DESTINATION reactos/system32 FOR all)
|
||||||
|
set_wine_module_FIXME(cscript) # CORE-5743: No ARRAY_SIZE macro
|
||||||
|
@@ -15,28 +15,7 @@
|
|||||||
#include <winbase.h>
|
#include <winbase.h>
|
||||||
#include <winuser.h>
|
#include <winuser.h>
|
||||||
#include <wincon.h>
|
#include <wincon.h>
|
||||||
|
#include <wincon_undoc.h>
|
||||||
/* Console API functions which are absent from wincon.h */
|
|
||||||
#define EXENAME_LENGTH (255 + 1)
|
|
||||||
|
|
||||||
VOID
|
|
||||||
WINAPI
|
|
||||||
ExpungeConsoleCommandHistoryW(LPCWSTR lpExeName);
|
|
||||||
|
|
||||||
DWORD
|
|
||||||
WINAPI
|
|
||||||
GetConsoleCommandHistoryW(LPWSTR lpHistory,
|
|
||||||
DWORD cbHistory,
|
|
||||||
LPCWSTR lpExeName);
|
|
||||||
|
|
||||||
DWORD
|
|
||||||
WINAPI
|
|
||||||
GetConsoleCommandHistoryLengthW(LPCWSTR lpExeName);
|
|
||||||
|
|
||||||
BOOL
|
|
||||||
WINAPI
|
|
||||||
SetConsoleNumberOfCommandsW(DWORD dwNumCommands,
|
|
||||||
LPCWSTR lpExeName);
|
|
||||||
|
|
||||||
#include "doskey.h"
|
#include "doskey.h"
|
||||||
|
|
||||||
@@ -305,8 +284,8 @@ wmain(VOID)
|
|||||||
{
|
{
|
||||||
pszExeName = RemoveQuotes(pArgStart + 9);
|
pszExeName = RemoveQuotes(pArgStart + 9);
|
||||||
}
|
}
|
||||||
else if (!wcsicmp(pArgStart, L"/H") ||
|
else if (!_wcsicmp(pArgStart, L"/H") ||
|
||||||
!wcsicmp(pArgStart, L"/HISTORY"))
|
!_wcsicmp(pArgStart, L"/HISTORY"))
|
||||||
{
|
{
|
||||||
PrintHistory();
|
PrintHistory();
|
||||||
}
|
}
|
||||||
@@ -314,20 +293,20 @@ wmain(VOID)
|
|||||||
{
|
{
|
||||||
SetConsoleNumberOfCommandsW(_wtoi(pArgStart + 10), pszExeName);
|
SetConsoleNumberOfCommandsW(_wtoi(pArgStart + 10), pszExeName);
|
||||||
}
|
}
|
||||||
else if (!wcsicmp(pArgStart, L"/REINSTALL"))
|
else if (!_wcsicmp(pArgStart, L"/REINSTALL"))
|
||||||
{
|
{
|
||||||
ExpungeConsoleCommandHistoryW(pszExeName);
|
ExpungeConsoleCommandHistoryW(pszExeName);
|
||||||
}
|
}
|
||||||
else if (!wcsicmp(pArgStart, L"/INSERT"))
|
else if (!_wcsicmp(pArgStart, L"/INSERT"))
|
||||||
{
|
{
|
||||||
SetInsert(ENABLE_INSERT_MODE);
|
SetInsert(ENABLE_INSERT_MODE);
|
||||||
}
|
}
|
||||||
else if (!wcsicmp(pArgStart, L"/OVERSTRIKE"))
|
else if (!_wcsicmp(pArgStart, L"/OVERSTRIKE"))
|
||||||
{
|
{
|
||||||
SetInsert(0);
|
SetInsert(0);
|
||||||
}
|
}
|
||||||
else if (!wcsicmp(pArgStart, L"/M") ||
|
else if (!_wcsicmp(pArgStart, L"/M") ||
|
||||||
!wcsicmp(pArgStart, L"/MACROS"))
|
!_wcsicmp(pArgStart, L"/MACROS"))
|
||||||
{
|
{
|
||||||
PrintMacros(pszExeName, L"");
|
PrintMacros(pszExeName, L"");
|
||||||
}
|
}
|
||||||
@@ -335,7 +314,7 @@ wmain(VOID)
|
|||||||
!_wcsnicmp(pArgStart, L"/MACROS:", 8))
|
!_wcsnicmp(pArgStart, L"/MACROS:", 8))
|
||||||
{
|
{
|
||||||
LPWSTR exe = RemoveQuotes(wcschr(pArgStart, L':') + 1);
|
LPWSTR exe = RemoveQuotes(wcschr(pArgStart, L':') + 1);
|
||||||
if (!wcsicmp(exe, L"ALL"))
|
if (!_wcsicmp(exe, L"ALL"))
|
||||||
PrintAllMacros();
|
PrintAllMacros();
|
||||||
else
|
else
|
||||||
PrintMacros(exe, L"");
|
PrintMacros(exe, L"");
|
||||||
|
@@ -6,7 +6,9 @@
|
|||||||
#define REACTOS_STR_ORIGINAL_FILENAME "fc.exe"
|
#define REACTOS_STR_ORIGINAL_FILENAME "fc.exe"
|
||||||
#include <reactos/version.rc>
|
#include <reactos/version.rc>
|
||||||
|
|
||||||
#pragma code_page(65001) /* UTF-8 */
|
/* UTF-8 */
|
||||||
|
#pragma code_page(65001)
|
||||||
|
|
||||||
#ifdef LANGUAGE_BG_BG
|
#ifdef LANGUAGE_BG_BG
|
||||||
#include "lang/bg-BG.rc"
|
#include "lang/bg-BG.rc"
|
||||||
#endif
|
#endif
|
||||||
|
@@ -2,40 +2,40 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
|
|||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
IDS_USAGE "Compares two files or sets of files and displays the differences between\n\
|
IDS_USAGE "Compare deux fichiers ou un ensemble de fichiers et affiche les différences\n\
|
||||||
them.\n\
|
entre eux.\n\
|
||||||
\n\
|
\n\
|
||||||
FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]] [/T] [/U] [/W] [/nnnn]\n\
|
FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]] [/T] [/U] [/W] [/nnnn]\n\
|
||||||
[drive1:][path1]filename1 [drive2:][path2]filename2\n\
|
[drive1:][path1]filename1 [drive2:][path2]filename2\n\
|
||||||
FC /B [drive1:][path1]filename1 [drive2:][path2]filename2\n\
|
FC /B [drive1:][path1]filename1 [drive2:][path2]filename2\n\
|
||||||
\n\
|
\n\
|
||||||
/A Displays only first and last lines for each set of differences.\n\
|
/A Affiche uniquement la première et la dernière ligne pour chaque ensemble de différences.\n\
|
||||||
/B Performs a binary comparison.\n\
|
/B Effectue une comparaison binaire.\n\
|
||||||
/C Disregards the case of letters.\n\
|
/C Ne tient pas compte de la casse des lettres.\n\
|
||||||
/L Compares files as ASCII text.\n\
|
/L Compare les fichiers sous forme de texte ASCII.\n\
|
||||||
/LBn Sets the maximum consecutive mismatches to the specified\n\
|
/LBn Définit le nombre maximal de différences consécutives\n\
|
||||||
number of lines (default: 100).\n\
|
au nombre de lignes spécifié (par défaut : 100).\n\
|
||||||
/N Displays the line numbers on an ASCII comparison.\n\
|
/N Affiche les numéros de ligne sur une comparaison ASCII.\n\
|
||||||
/OFF[LINE] Doesn't skip files with offline attribute set.\n\
|
/OFF[LINE] N'ignore pas les fichiers ayant l'attribut hors-ligne.\n\
|
||||||
/T Doesn't expand tabs to spaces (default: expand).\n\
|
/T Ne transforme pas les tabulations en espaces (par défaut : transformer).\n\
|
||||||
/U Compare files as UNICODE text files.\n\
|
/U Compare les fichiers en tant que fichiers texte UNICODE.\n\
|
||||||
/W Compresses white space (tabs and spaces) for comparison.\n\
|
/W Compresse les espaces blancs (tabulations et espaces) pour la comparaison.\n\
|
||||||
/nnnn Specifies the number of consecutive lines that must match\n\
|
/nnnn Spécifie le nombre de lignes consécutives qui doivent correspondre\n\
|
||||||
after a mismatch (default: 2).\n\
|
après une différence (par défaut : 2).\n\
|
||||||
[drive1:][path1]filename1\n\
|
[drive1:][path1]filename1\n\
|
||||||
Specifies the first file or set of files to compare.\n\
|
Spécifie le premier fichier ou ensemble de fichiers à comparer.\n\
|
||||||
[drive2:][path2]filename2\n\
|
[drive2:][path2]filename2\n\
|
||||||
Specifies the second file or set of files to compare.\n"
|
Spécifie le second fichier ou ensemble de fichiers à comparer.\n"
|
||||||
IDS_NO_DIFFERENCE "FC: no differences encountered\n"
|
IDS_NO_DIFFERENCE "FC: Aucune différence constatée\n"
|
||||||
IDS_LONGER_THAN "FC: %ls longer than %ls\n"
|
IDS_LONGER_THAN "FC: %ls plus grand que %ls\n"
|
||||||
IDS_COMPARING "Comparing files %ls and %ls\n"
|
IDS_COMPARING "Compare les fichiers %ls et %ls\n"
|
||||||
IDS_OUT_OF_MEMORY "FC: Out of memory\n"
|
IDS_OUT_OF_MEMORY "FC: Dépassement de mémoire\n"
|
||||||
IDS_CANNOT_READ "FC: cannot read from %ls\n"
|
IDS_CANNOT_READ "FC: Ne peut pas lire depuis %ls\n"
|
||||||
IDS_INVALID_SWITCH "FC: Invalid Switch\n"
|
IDS_INVALID_SWITCH "FC: Option invalide\n"
|
||||||
IDS_CANNOT_OPEN "FC: cannot open %ls - No such file or folder\n"
|
IDS_CANNOT_OPEN "FC: Ne peut pas ouvrir %ls - Fichier ou répertoire inexistant\n"
|
||||||
IDS_NEEDS_FILES "FC: Insufficient number of file specifications\n"
|
IDS_NEEDS_FILES "FC: Nombre insuffisant de fichiers spécifiés\n"
|
||||||
IDS_CANT_USE_WILDCARD "Wildcard ('*' and '?') are not supported yet\n"
|
IDS_CANT_USE_WILDCARD "Les caractères joker ('*' et '?') ne sont pas encore supportés\n"
|
||||||
IDS_DIFFERENT "FC: File %ls and %ls are different\n"
|
IDS_DIFFERENT "FC: Les fichiers %ls et %ls sont différents\n"
|
||||||
IDS_TOO_LARGE "FC: File %ls too large\n"
|
IDS_TOO_LARGE "FC: Fichier %ls trop grand\n"
|
||||||
IDS_RESYNC_FAILED "Resync failed. Files are too different.\n"
|
IDS_RESYNC_FAILED "La resynchronisation a échoué. Les fichiers sont trop différents.\n"
|
||||||
END
|
END
|
||||||
|
@@ -2,40 +2,39 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
|
|||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
IDS_USAGE "Compares two files or sets of files and displays the differences between\n\
|
IDS_USAGE "2つのファイルまたはファイル セットを比較し、それらの違いを表示します。\n\
|
||||||
them.\n\
|
|
||||||
\n\
|
\n\
|
||||||
FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]] [/T] [/U] [/W] [/nnnn]\n\
|
FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]] [/T] [/U] [/W] [/nnnn]\n\
|
||||||
[drive1:][path1]filename1 [drive2:][path2]filename2\n\
|
[ドライブ1:][パス1]ファイル名1 [ドライブ2:][パス2]ファイル名2\n\
|
||||||
FC /B [drive1:][path1]filename1 [drive2:][path2]filename2\n\
|
FC /B [ドライブ1:][パス1]ファイル名1 [ドライブ2:][パス2]ファイル名2\n\
|
||||||
\n\
|
\n\
|
||||||
/A Displays only first and last lines for each set of differences.\n\
|
/A 各差分集合の最初の行と最後の行のみを表示します。\n\
|
||||||
/B Performs a binary comparison.\n\
|
/B バイナリ比較を実行します。\n\
|
||||||
/C Disregards the case of letters.\n\
|
/C 大文字と小文字を区別しません。\n\
|
||||||
/L Compares files as ASCII text.\n\
|
/L ファイルを ASCII テキストとして比較します。\n\
|
||||||
/LBn Sets the maximum consecutive mismatches to the specified\n\
|
/LBn 連続する不一致の最大数を指定された行数に設定します\n\
|
||||||
number of lines (default: 100).\n\
|
(デフォルト: 100)。\n\
|
||||||
/N Displays the line numbers on an ASCII comparison.\n\
|
/N ASCII 比較の行番号を表示します。\n\
|
||||||
/OFF[LINE] Doesn't skip files with offline attribute set.\n\
|
/OFF[LINE] オフライン属性が設定されたファイルをスキップしません。\n\
|
||||||
/T Doesn't expand tabs to spaces (default: expand).\n\
|
/T タブをスペースに展開しません (デフォルト: 展開する)。\n\
|
||||||
/U Compare files as UNICODE text files.\n\
|
/U ファイルを UNICODE テキスト ファイルとして比較します。\n\
|
||||||
/W Compresses white space (tabs and spaces) for comparison.\n\
|
/W 比較のために空白 (タブとスペース) を圧縮します。\n\
|
||||||
/nnnn Specifies the number of consecutive lines that must match\n\
|
/nnnn 不一致の後に一致する必要がある連続行の数を指定します\n\
|
||||||
after a mismatch (default: 2).\n\
|
(デフォルト: 2)。\n\
|
||||||
[drive1:][path1]filename1\n\
|
[ドライブ1:][パス1]ファイル名1\n\
|
||||||
Specifies the first file or set of files to compare.\n\
|
比較する最初のファイルまたはファイル集合を指定します。\n\
|
||||||
[drive2:][path2]filename2\n\
|
[ドライブ2:][パス2]ファイル名2\n\
|
||||||
Specifies the second file or set of files to compare.\n"
|
比較する 2 番目のファイルまたはファイル集合を指定します。\n"
|
||||||
IDS_NO_DIFFERENCE "FC: no differences encountered\n"
|
IDS_NO_DIFFERENCE "FC: 違いは見つかりませんでした\n"
|
||||||
IDS_LONGER_THAN "FC: %ls longer than %ls\n"
|
IDS_LONGER_THAN "FC: %ls は %ls より長いです\n"
|
||||||
IDS_COMPARING "Comparing files %ls and %ls\n"
|
IDS_COMPARING "ファイル %ls と %ls を比較しています\n"
|
||||||
IDS_OUT_OF_MEMORY "FC: Out of memory\n"
|
IDS_OUT_OF_MEMORY "FC: メモリ不足\n"
|
||||||
IDS_CANNOT_READ "FC: cannot read from %ls\n"
|
IDS_CANNOT_READ "FC: %ls から読み取れません\n"
|
||||||
IDS_INVALID_SWITCH "FC: Invalid Switch\n"
|
IDS_INVALID_SWITCH "FC: 無効なスイッチ\n"
|
||||||
IDS_CANNOT_OPEN "FC: cannot open %ls - No such file or folder\n"
|
IDS_CANNOT_OPEN "FC: %ls を開けません - そのようなファイルまたはフォルダはありません\n"
|
||||||
IDS_NEEDS_FILES "FC: Insufficient number of file specifications\n"
|
IDS_NEEDS_FILES "FC: ファイル指定が必要です\n"
|
||||||
IDS_CANT_USE_WILDCARD "Wildcard ('*' and '?') are not supported yet\n"
|
IDS_CANT_USE_WILDCARD "ワイルドカード(「*」と「?」)はまだサポートされていません\n"
|
||||||
IDS_DIFFERENT "FC: File %ls and %ls are different\n"
|
IDS_DIFFERENT "FC: ファイル %ls と %ls は異なります\n"
|
||||||
IDS_TOO_LARGE "FC: File %ls too large\n"
|
IDS_TOO_LARGE "FC: ファイル %ls が大きすぎます\n"
|
||||||
IDS_RESYNC_FAILED "Resync failed. Files are too different.\n"
|
IDS_RESYNC_FAILED "再同期に失敗しました。ファイルが違いすぎます。\n"
|
||||||
END
|
END
|
||||||
|
@@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
/* UTF-8 */
|
/* UTF-8 */
|
||||||
#pragma code_page(65001)
|
#pragma code_page(65001)
|
||||||
|
|
||||||
#ifdef LANGUAGE_BG_BG
|
#ifdef LANGUAGE_BG_BG
|
||||||
#include "lang/bg-BG.rc"
|
#include "lang/bg-BG.rc"
|
||||||
#endif
|
#endif
|
||||||
|
@@ -12,6 +12,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
|||||||
|
|
||||||
/* UTF-8 */
|
/* UTF-8 */
|
||||||
#pragma code_page(65001)
|
#pragma code_page(65001)
|
||||||
|
|
||||||
#ifdef LANGUAGE_DE_DE
|
#ifdef LANGUAGE_DE_DE
|
||||||
#include "lang/de-DE.rc"
|
#include "lang/de-DE.rc"
|
||||||
#endif
|
#endif
|
||||||
|
@@ -4,14 +4,14 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
|
|||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
IDS_NO_ENTRY "This command is not supported by the help utility.\nTry ""%s /?"".\n"
|
IDS_NO_ENTRY "このコマンドはヘルプ ユーティリティではサポートされていません。\n「%s /?」を試してください。\n"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
IDS_USAGE "Provides Help information for ReactOS commands.\n\n\
|
IDS_USAGE "ReactOS コマンドのヘルプ情報を提供します。\n\n\
|
||||||
HELP [command]\n\n\
|
HELP [コマンド]\n\n\
|
||||||
command - Display help information for this command.\n"
|
コマンド - このコマンドのヘルプ情報を表示します。\n"
|
||||||
IDS_HELP1 "利用可能なすべてのコマンドの一覧と、その説明。\n\n\
|
IDS_HELP1 "利用可能なすべてのコマンドの一覧と、その説明。\n\n\
|
||||||
help コマンド\n\
|
help コマンド\n\
|
||||||
コマンド /? 特定のコマンドに関する詳細情報\n\n\
|
コマンド /? 特定のコマンドに関する詳細情報\n\n\
|
||||||
@@ -43,7 +43,7 @@ IF バッチ プログラム中で条件処理を実行します。\n\
|
|||||||
LABEL ディスクのボリューム ラベルを表示または変更します。\n\
|
LABEL ディスクのボリューム ラベルを表示または変更します。\n\
|
||||||
MD ディレクトリを作成します。\n\
|
MD ディレクトリを作成します。\n\
|
||||||
MKDIR ディレクトリを作成します。\n\
|
MKDIR ディレクトリを作成します。\n\
|
||||||
MKLINK Creates a filesystem link object.\n\
|
MKLINK ファイルシステム リンク オブジェクトを作成します。\n\
|
||||||
MOVE ファイルを移動およびファイルとディレクトリ名を変更します。\n\
|
MOVE ファイルを移動およびファイルとディレクトリ名を変更します。\n\
|
||||||
PATH 実行可能ファイルの検索パスを表示または設定します。\n\
|
PATH 実行可能ファイルの検索パスを表示または設定します。\n\
|
||||||
PAUSE バッチ プログラムの処理を一時停止し、メッセージを表示します。\n\
|
PAUSE バッチ プログラムの処理を一時停止し、メッセージを表示します。\n\
|
||||||
|
@@ -56,7 +56,7 @@ int wmain(int argc, WCHAR* argv[])
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((wcsicmp(argv[1], L"-s") == 0) || (wcsicmp(argv[1], L"/s") == 0))
|
if ((_wcsicmp(argv[1], L"-s") == 0) || (_wcsicmp(argv[1], L"/s") == 0))
|
||||||
{
|
{
|
||||||
/* The program doesn't allow the user to set the host name */
|
/* The program doesn't allow the user to set the host name */
|
||||||
LoadStringW(GetModuleHandle(NULL), IDS_NOSET, Msg, _countof(Msg));
|
LoadStringW(GetModuleHandle(NULL), IDS_NOSET, Msg, _countof(Msg));
|
||||||
|
@@ -176,19 +176,20 @@ PagePrompt(PCON_PAGER Pager, DWORD Done, DWORD Total)
|
|||||||
static WCHAR StrLineAt[80] = L"";
|
static WCHAR StrLineAt[80] = L"";
|
||||||
static WCHAR StrOptions[80] = L"";
|
static WCHAR StrOptions[80] = L"";
|
||||||
static WCHAR StrLines[80] = L"";
|
static WCHAR StrLines[80] = L"";
|
||||||
|
static BOOL AreStrLoaded = FALSE;
|
||||||
|
|
||||||
WCHAR szPercent[80] = L"";
|
WCHAR szPercent[80] = L"";
|
||||||
WCHAR szLineAt[80] = L"";
|
WCHAR szLineAt[80] = L"";
|
||||||
|
|
||||||
/* Load the prompt strings */
|
/* Load the prompt strings */
|
||||||
if (!*StrPercent)
|
if (!AreStrLoaded)
|
||||||
|
{
|
||||||
K32LoadStringW(NULL, IDS_CONTINUE_PERCENT, StrPercent, ARRAYSIZE(StrPercent));
|
K32LoadStringW(NULL, IDS_CONTINUE_PERCENT, StrPercent, ARRAYSIZE(StrPercent));
|
||||||
if (!*StrLineAt)
|
|
||||||
K32LoadStringW(NULL, IDS_CONTINUE_LINE_AT, StrLineAt, ARRAYSIZE(StrLineAt));
|
K32LoadStringW(NULL, IDS_CONTINUE_LINE_AT, StrLineAt, ARRAYSIZE(StrLineAt));
|
||||||
if (!*StrOptions)
|
|
||||||
K32LoadStringW(NULL, IDS_CONTINUE_OPTIONS, StrOptions, ARRAYSIZE(StrOptions));
|
K32LoadStringW(NULL, IDS_CONTINUE_OPTIONS, StrOptions, ARRAYSIZE(StrOptions));
|
||||||
if (!*StrLines)
|
|
||||||
K32LoadStringW(NULL, IDS_CONTINUE_LINES, StrLines, ARRAYSIZE(StrLines));
|
K32LoadStringW(NULL, IDS_CONTINUE_LINES, StrLines, ARRAYSIZE(StrLines));
|
||||||
|
AreStrLoaded = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check whether the pager is prompting, but we have actually finished
|
* Check whether the pager is prompting, but we have actually finished
|
||||||
@@ -486,7 +487,7 @@ Restart:
|
|||||||
* See base/applications/cmdutils/clip/clip.c!IsDataUnicode()
|
* See base/applications/cmdutils/clip/clip.c!IsDataUnicode()
|
||||||
* and base/applications/notepad/text.c!ReadText() for more details.
|
* and base/applications/notepad/text.c!ReadText() for more details.
|
||||||
* Also some good code example can be found at:
|
* Also some good code example can be found at:
|
||||||
* https://github.com/AutoIt/text-encoding-detect
|
* https://github.com/AutoItConsulting/text-encoding-detect
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
@@ -2,9 +2,9 @@
|
|||||||
remove_definitions(-D_WIN32_WINNT=0x502)
|
remove_definitions(-D_WIN32_WINNT=0x502)
|
||||||
add_definitions(-D_WIN32_WINNT=0x600)
|
add_definitions(-D_WIN32_WINNT=0x600)
|
||||||
|
|
||||||
add_definitions(-D__WINESRC__)
|
|
||||||
add_executable(reg add.c copy.c delete.c export.c import.c query.c reg.c reg.rc)
|
add_executable(reg add.c copy.c delete.c export.c import.c query.c reg.c reg.rc)
|
||||||
set_module_type(reg win32cui UNICODE)
|
set_module_type(reg win32cui UNICODE)
|
||||||
target_link_libraries(reg wine)
|
target_link_libraries(reg wine oldnames)
|
||||||
add_importlibs(reg advapi32 advapi32_vista user32 msvcrt kernel32 ntdll)
|
add_importlibs(reg advapi32 advapi32_vista user32 msvcrt kernel32 ntdll)
|
||||||
add_cd_file(TARGET reg DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET reg DESTINATION reactos/system32 FOR all)
|
||||||
|
set_wine_module_FIXME(reg) # CORE-5743: No ARRAY_SIZE macro
|
||||||
|
@@ -2,180 +2,180 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
|
|||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
{
|
{
|
||||||
STRING_USAGE, "Usage:\n\
|
STRING_USAGE, "使い方:\n\
|
||||||
REG [operation] [parameters]\n\n\
|
REG [操作] [引数]\n\n\
|
||||||
Supported operations:\n\
|
サポートされた操作:\n\
|
||||||
ADD | COPY | DELETE | EXPORT | IMPORT | QUERY\n\n\
|
ADD | COPY | DELETE | EXPORT | IMPORT | QUERY\n\n\
|
||||||
For help on a specific operation, type:\n\
|
特定の操作に関するヘルプを表示するには、次のように入力します。\n\
|
||||||
REG [operation] /?\n\n"
|
REG [操作] /?\n\n"
|
||||||
|
|
||||||
STRING_ADD_USAGE, "REG ADD <key> [/v value_name | /ve] [/t type] [/s separator] [/d data] [/f]\n\n\
|
STRING_ADD_USAGE, "REG ADD <キー> [/v 値名 | /ve] [/t 種類] [/s 区切り] [/d データ] [/f]\n\n\
|
||||||
Adds a key to the registry or adds a new value to a given registry key.\n\n\
|
レジストリにキーを追加するか、指定されたレジストリ キーに新しい値を追加します。\n\n\
|
||||||
<key>\n\
|
<キー>\n\
|
||||||
The registry key to add or, if either [/v] or [/ve] is specified,\n\
|
追加するレジストリ キー、または [/v] または [/ve] のいずれかが指定されて\n\
|
||||||
the key in which to add the new registry data.\n\n\
|
いる場合は、新しいレジストリ データを追加するキー。\n\n\
|
||||||
Format: ROOT\\Subkey\n\n\
|
形式: <ルート>\\<サブキー>\n\n\
|
||||||
ROOT: A predefined registry key. This must be one of the following:\n\n\
|
<ルート>: 定義済みのレジストリ キー。次のいずれかである必要があります。\n\n\
|
||||||
HKEY_LOCAL_MACHINE | HKLM\n\
|
HKEY_LOCAL_MACHINE | HKLM\n\
|
||||||
HKEY_CURRENT_USER | HKCU\n\
|
HKEY_CURRENT_USER | HKCU\n\
|
||||||
HKEY_CLASSES_ROOT | HKCR\n\
|
HKEY_CLASSES_ROOT | HKCR\n\
|
||||||
HKEY_USERS | HKU\n\
|
HKEY_USERS | HKU\n\
|
||||||
HKEY_CURRENT_CONFIG | HKCC\n\n\
|
HKEY_CURRENT_CONFIG | HKCC\n\n\
|
||||||
Subkey: The full path to a registry key under a given ROOT key.\n\n\
|
<サブキー>: 指定された <ルート> キーの下のレジストリ キーへの完全なパス。\n\n\
|
||||||
/v <value_name>\n\
|
/v <値名>\n\
|
||||||
The name of the registry value to add.\n\n\
|
追加するレジストリ値の名前。\n\n\
|
||||||
/ve\n\
|
/ve\n\
|
||||||
Add an unnamed registry value. This option modifies the (Default)\n\
|
名前のないレジストリ値を追加します。このオプションは(既定の)レジストリ\n\
|
||||||
registry value.\n\n\
|
値を変更します。\n\n\
|
||||||
/t <type>\n\
|
/t <種類>\n\
|
||||||
The type of data to add to the registry. If [/t] is specified,\n\
|
レジストリに追加するデータの種類。 [/t] が指定されている場合、<種類> は\n\
|
||||||
<type> must be one of the following:\n\n\
|
次のいずれかである必要があります。\n\n\
|
||||||
REG_SZ | REG_MULTI_SZ | REG_EXPAND_SZ\n\
|
REG_SZ | REG_MULTI_SZ | REG_EXPAND_SZ\n\
|
||||||
REG_DWORD | REG_BINARY | REG_NONE\n\n\
|
REG_DWORD | REG_BINARY | REG_NONE\n\n\
|
||||||
If [/t] is not specified, the default data type is REG_SZ.\n\n\
|
[/t]が指定されていない場合、デフォルトのデータ型は REG_SZ になります。\n\n\
|
||||||
/s <separator>\n\
|
/s <区切り>\n\
|
||||||
The character used to separate strings in REG_MULTI_SZ data.\n\
|
REG_MULTI_SZ データ内の文字列を区切るために使用される文字。\n\
|
||||||
If [/s] is not specified, the default separator is \\0.\n\n\
|
[/s] が指定されていない場合、デフォルトの区切り文字は \\0 になります。\n\n\
|
||||||
/d <data>\n\
|
/d <データ>\n\
|
||||||
The data to add to the new registry value.\n\n\
|
新しいレジストリ値に追加するデータ。\n\n\
|
||||||
/f\n\
|
/f\n\
|
||||||
Modify the registry without prompting for confirmation.\n\n"
|
確認を求めずにレジストリを変更します。\n\n"
|
||||||
|
|
||||||
STRING_DELETE_USAGE, "REG DELETE <key> [/v value_name | /ve | /va] [/f]\n\n\
|
STRING_DELETE_USAGE, "REG DELETE <キー> [/v 値名 | /ve | /va] [/f]\n\n\
|
||||||
Deletes a registry key (including all subkeys and values), or deletes\n\
|
レジストリ キー (すべてのサブキーと値を含む) を削除するか、指定された\n\
|
||||||
one or more values from a given registry key.\n\n\
|
レジストリ キーから 1 つ以上の値を削除します。\n\n\
|
||||||
<key>\n\
|
<key>\n\
|
||||||
The registry key to delete or, if one of [/v], [/ve] or [/va] is\n\
|
削除するレジストリ キー、または [/v]、[/ve]、[/va] のいずれかが指定されて\n\
|
||||||
specified, the registry key in which to delete one or more values.\n\n\
|
いる場合は、1 つ以上の値を削除するレジストリ キー。\n\n\
|
||||||
Format: ROOT\\Subkey\n\n\
|
形式: <ルート>\\<サブキー>\n\n\
|
||||||
ROOT: A predefined registry key. This must be one of the following:\n\n\
|
ルート: 定義済みのレジストリ キー。次のいずれかである必要があります。\n\n\
|
||||||
HKEY_LOCAL_MACHINE | HKLM\n\
|
HKEY_LOCAL_MACHINE | HKLM\n\
|
||||||
HKEY_CURRENT_USER | HKCU\n\
|
HKEY_CURRENT_USER | HKCU\n\
|
||||||
HKEY_CLASSES_ROOT | HKCR\n\
|
HKEY_CLASSES_ROOT | HKCR\n\
|
||||||
HKEY_USERS | HKU\n\
|
HKEY_USERS | HKU\n\
|
||||||
HKEY_CURRENT_CONFIG | HKCC\n\n\
|
HKEY_CURRENT_CONFIG | HKCC\n\n\
|
||||||
Subkey: The full path to a registry key under a given ROOT key.\n\n\
|
サブキー: 指定された <ルート> キーの下のレジストリ キーへの完全なパス。\n\n\
|
||||||
/v <value_name>\n\
|
/v <値名>\n\
|
||||||
The name of the registry value to delete.\n\n\
|
削除するレジストリ値の名前。\n\n\
|
||||||
/ve\n\
|
/ve\n\
|
||||||
Delete an unnamed registry value. This option deletes the (Default)\n\
|
名前のないレジストリ値を削除します。このオプションは、(既定の) \n\
|
||||||
registry value.\n\n\
|
レジストリ値を削除します。\n\n\
|
||||||
/va\n\
|
/va\n\
|
||||||
Delete all values from a registry key.\n\n\
|
レジストリ キーからすべての値を削除します。\n\n\
|
||||||
/f\n\
|
/f\n\
|
||||||
Delete a registry key (including all subkeys and values) without\n\
|
確認を求めることなくレジストリ キー (すべてのサブキーと値を含む) を削除します。\n\n"
|
||||||
prompting for confirmation.\n\n"
|
|
||||||
|
|
||||||
STRING_QUERY_USAGE, "REG QUERY <key> [/v value_name | /ve] [/s]\n\n\
|
STRING_QUERY_USAGE, "REG QUERY <キー> [/v 値名 | /ve] [/s]\n\n\
|
||||||
Queries a specified registry key and lists all immediate subkeys, values\n\
|
指定されたレジストリキーを照会し、そのキーに含まれるすべてのサブキー、値、\n\
|
||||||
and data within that key. Use [/s] to recursively query each subkey.\n\n\
|
およびデータを一覧表示します。[/s] を使用すると、各サブキーを再帰的に照会できます。\n\n\
|
||||||
<key>\n\
|
<キー>\n\
|
||||||
The registry key to query.\n\n\
|
照会するレジストリ キー。\n\n\
|
||||||
Format: ROOT\\Subkey\n\n\
|
形式: <ルート>\\<サブキー>\n\n\
|
||||||
ROOT: A predefined registry key. This must be one of the following:\n\n\
|
<ルート>: 定義済みのレジストリ キー。次のいずれかである必要があります。\n\n\
|
||||||
HKEY_LOCAL_MACHINE | HKLM\n\
|
HKEY_LOCAL_MACHINE | HKLM\n\
|
||||||
HKEY_CURRENT_USER | HKCU\n\
|
HKEY_CURRENT_USER | HKCU\n\
|
||||||
HKEY_CLASSES_ROOT | HKCR\n\
|
HKEY_CLASSES_ROOT | HKCR\n\
|
||||||
HKEY_USERS | HKU\n\
|
HKEY_USERS | HKU\n\
|
||||||
HKEY_CURRENT_CONFIG | HKCC\n\n\
|
HKEY_CURRENT_CONFIG | HKCC\n\n\
|
||||||
Subkey: The full path to a registry key under a given ROOT key.\n\n\
|
<サブキー>: 指定された <ルート> キーの下のレジストリ キーへの完全なパス。\n\n\
|
||||||
/v <value_name>\n\
|
/v <値名>\n\
|
||||||
The name of the registry value to query. If neither [/v] nor [/ve] is\n\
|
照会するレジストリ値の名前。[/v] も [/ve] も指定されていない場合は、\n\
|
||||||
specified, all values under <key> are listed.\n\n\
|
<キー> の下のすべての値がリストされます。\n\n\
|
||||||
/ve\n\
|
/ve\n\
|
||||||
Query an unnamed registry value. This option queries the (Default)\n\
|
名前のないレジストリ値を照会します。このオプションは、(既定の) \n\
|
||||||
registry value.\n\n\
|
レジストリ値を照会します。\n\n\
|
||||||
/s\n\
|
/s\n\
|
||||||
List all registry entries under <key> and its subkeys.\n\n"
|
<キー> とそのサブキーの下にあるすべてのレジストリ エントリを一覧表示します。\n\n"
|
||||||
|
|
||||||
STRING_SUCCESS, "操作は正常に完了しました\n"
|
STRING_SUCCESS, "操作は正常に完了しました\n"
|
||||||
STRING_INVALID_KEY, "エラー: キー名が無効です\n"
|
STRING_INVALID_KEY, "エラー: キー名が無効です\n"
|
||||||
STRING_INVALID_CMDLINE, "エラー: コマンド ライン引数が無効です\n"
|
STRING_INVALID_CMDLINE, "エラー: コマンド ライン引数が無効です\n"
|
||||||
STRING_NO_REMOTE, "エラー: リモート マシンにキーを追加できませんでした\n"
|
STRING_NO_REMOTE, "エラー: リモート マシンにキーを追加できませんでした\n"
|
||||||
STRING_VALUE_NONEXIST, "エラー: システムは指定されたキーまたは値を見つけられませんでした\n"
|
STRING_VALUE_NONEXIST, "エラー: システムは指定されたキーまたは値を見つけられませんでした\n"
|
||||||
STRING_UNSUPPORTED_TYPE, "reg: Unsupported registry data type [%1]\n"
|
STRING_UNSUPPORTED_TYPE, "reg: サポートされていないレジストリ データ型 [%1]\n"
|
||||||
STRING_MISSING_NUMBER, "reg: The option [/d] must be followed by a valid numeric value\n"
|
STRING_MISSING_NUMBER, "reg: オプション[/d]の後には有効な数値を続ける必要があります\n"
|
||||||
STRING_MISSING_HEXDATA, "reg: The option [/d] must be followed by a valid hexadecimal value\n"
|
STRING_MISSING_HEXDATA, "reg: オプション[/d]の後には有効な16進数値を続ける必要があります\n"
|
||||||
STRING_UNHANDLED_TYPE, "reg: Unhandled registry data type [/t 0x%1!x!, /d %2]\n"
|
STRING_UNHANDLED_TYPE, "reg: 未処理のレジストリデータ型 [/t 0x%1!x!, /d %2]\n"
|
||||||
STRING_OVERWRITE_VALUE, "The registry value '%1' already exists. Do you want to overwrite it?"
|
STRING_OVERWRITE_VALUE, "レジストリ値 '%1' は既に存在します。上書きしますか?"
|
||||||
STRING_YES, "Y"
|
STRING_YES, "Y"
|
||||||
STRING_NO, "N"
|
STRING_NO, "N"
|
||||||
STRING_ALL, "A"
|
STRING_ALL, "A"
|
||||||
STRING_YESNO, " (Yes|No)"
|
STRING_YESNO, " (はい(Y)|いいえ(N))"
|
||||||
STRING_YESNOALL, " (Yes|No|All)"
|
STRING_YESNOALL, " (はい(Y)|いいえ(N)|すべて(A))"
|
||||||
STRING_CANCELLED, "reg: The registry operation was cancelled\n"
|
STRING_CANCELLED, "reg: レジストリ操作はキャンセルされました\n"
|
||||||
STRING_DEFAULT_VALUE, "(Default)"
|
STRING_DEFAULT_VALUE, "(デフォルト)"
|
||||||
STRING_DELETE_VALUE, "Are you sure you want to delete the registry value '%1'?"
|
STRING_DELETE_VALUE, "レジストリ値 '%1' を削除してもよろしいですか?"
|
||||||
STRING_DELETE_VALUEALL, "Are you sure you want to delete all registry values in '%1'?"
|
STRING_DELETE_VALUEALL, "'%1' 内のすべてのレジストリ値を削除してもよろしいですか?"
|
||||||
STRING_DELETE_SUBKEY, "Are you sure you want to delete the registry key '%1'?"
|
STRING_DELETE_SUBKEY, "レジストリ キー '%1' を削除してもよろしいですか?"
|
||||||
STRING_INVALID_STRING, "reg: The option [/d] must be followed by a valid string\n"
|
STRING_INVALID_STRING, "reg: オプション[/d]の後に有効な文字列を続ける必要があります\n"
|
||||||
STRING_VALUEALL_FAILED, "reg: Unable to delete all registry values in '%1'\n"
|
STRING_VALUEALL_FAILED, "reg: '%1' のすべてのレジストリ値を削除できません\n"
|
||||||
STRING_MATCHES_FOUND, "Search complete. Number of matches found: %1!d!\n"
|
STRING_MATCHES_FOUND, "検索が完了しました。一致した件数: %1!d!\n"
|
||||||
STRING_INVALID_SYNTAX, "reg: Invalid syntax. "
|
STRING_INVALID_SYNTAX, "reg: 無効な文法"
|
||||||
STRING_INVALID_OPTION, "reg: Invalid option [%1]. "
|
STRING_INVALID_OPTION, "reg: 無効なオプション [%1]. "
|
||||||
STRING_REG_HELP, "Type ""REG /?"" for help.\n"
|
STRING_REG_HELP, "ヘルプを表示するには、「REG /?」と入力してください。\n"
|
||||||
STRING_FUNC_HELP, "Type ""REG %1 /?"" for help.\n"
|
STRING_FUNC_HELP, "ヘルプを表示するには「REG %1 /?」と入力してください.\n"
|
||||||
STRING_VALUE_NOT_SET, "(value not set)"
|
STRING_VALUE_NOT_SET, "(未設定の値)"
|
||||||
|
|
||||||
STRING_IMPORT_USAGE, "REG IMPORT <file>\n\n\
|
STRING_IMPORT_USAGE, "REG IMPORT <ファイル>\n\n\
|
||||||
Imports keys, values and data from a given file into the registry.\n\n\
|
指定されたファイルからキー、値、データをレジストリにインポートします。\n\n\
|
||||||
<file>\n\
|
<ファイル>\n\
|
||||||
The name and path of the registry file to import.\n\n"
|
インポートするレジストリ ファイルの名前とパス。\n\n"
|
||||||
|
|
||||||
STRING_FILE_NOT_FOUND, "reg: The file '%1' was not found.\n"
|
STRING_FILE_NOT_FOUND, "reg: ファイル '%1' が見つかりませんでした。\n"
|
||||||
STRING_ESCAPE_SEQUENCE, "reg: Unrecognized escape sequence [\\%1!c!]\n"
|
STRING_ESCAPE_SEQUENCE, "reg: 認識されないエスケープシーケンス [\\%1!c!]\n"
|
||||||
|
|
||||||
STRING_EXPORT_USAGE, "REG EXPORT <key> <file> [/y]\n\n\
|
STRING_EXPORT_USAGE, "REG EXPORT <キー> <ファイル> [/y]\n\n\
|
||||||
Exports a specified registry key (including all subkeys and values)\n\
|
指定されたレジストリ キー (すべてのサブキーと値を含む) をファイルに\n\
|
||||||
to a file.\n\n\
|
エクスポートします。\n\n\
|
||||||
<key>\n\
|
<キー>\n\
|
||||||
The registry key to export.\n\n\
|
エクスポートするレジストリ キー。\n\n\
|
||||||
Format: ROOT\\Subkey\n\n\
|
形式: <ルート>\\<サブキー>\n\n\
|
||||||
ROOT: A predefined registry key. This must be one of the following:\n\n\
|
<ルート>: 定義済みのレジストリ キー。次のいずれかである必要があります。\n\n\
|
||||||
HKEY_LOCAL_MACHINE | HKLM\n\
|
HKEY_LOCAL_MACHINE | HKLM\n\
|
||||||
HKEY_CURRENT_USER | HKCU\n\
|
HKEY_CURRENT_USER | HKCU\n\
|
||||||
HKEY_CLASSES_ROOT | HKCR\n\
|
HKEY_CLASSES_ROOT | HKCR\n\
|
||||||
HKEY_USERS | HKU\n\
|
HKEY_USERS | HKU\n\
|
||||||
HKEY_CURRENT_CONFIG | HKCC\n\n\
|
HKEY_CURRENT_CONFIG | HKCC\n\n\
|
||||||
Subkey: The full path to a registry key under a given ROOT key.\n\n\
|
<サブキー>: 指定された <ルート> キーの下のレジストリ キーへの完全なパス。\n\n\
|
||||||
<file>\n\
|
<ファイル>\n\
|
||||||
The name and path of the registry file that will be created.\n\
|
作成されるレジストリ ファイルの名前とパス。\n\
|
||||||
This file must have a .reg extension.\n\n\
|
このファイルには .reg 拡張子が必要です。\n\n\
|
||||||
/y\n\
|
/y\n\
|
||||||
Overwrite <file> without prompting for confirmation.\n\n"
|
確認のプロンプトを表示せずに <ファイル> を上書きします。\n\n"
|
||||||
|
|
||||||
STRING_INVALID_SYSTEM_KEY, "reg: Invalid system key\n"
|
STRING_INVALID_SYSTEM_KEY, "reg: 無効なシステム キー\n"
|
||||||
STRING_OVERWRITE_FILE, "The file '%1' already exists. Do you want to overwrite it?"
|
STRING_OVERWRITE_FILE, "ファイル '%1' は既に存在します。上書きしますか?"
|
||||||
STRING_KEY_NONEXIST, "reg: Unable to find the specified registry key\n"
|
STRING_KEY_NONEXIST, "reg: 指定されたレジストリキーが見つかりません\n"
|
||||||
STRING_KEY_IMPORT_FAILED, "reg: Unable to import the registry key '%1'\n"
|
STRING_KEY_IMPORT_FAILED, "reg: レジストリキーをインポートできません '%1'\n"
|
||||||
|
|
||||||
STRING_REG_VIEW_USAGE, " /reg:32\n\
|
STRING_REG_VIEW_USAGE, " /reg:32\n\
|
||||||
Access the registry using the 32-bit view.\n\n\
|
32 ビット ビューを使用してレジストリにアクセスします。\n\n\
|
||||||
/reg:64\n\
|
/reg:64\n\
|
||||||
Access the registry using the 64-bit view.\n\n"
|
64 ビット ビューを使用してレジストリにアクセスします。\n\n"
|
||||||
STRING_ACCESS_DENIED, "reg: Unable to access or create the specified registry key\n"
|
STRING_ACCESS_DENIED, "reg: 指定されたレジストリキーにアクセスまたは作成できません\n"
|
||||||
|
|
||||||
STRING_COPY_USAGE, "REG COPY <key1> <key2> [/s] [/f]\n\n\
|
STRING_COPY_USAGE, "REG COPY <キー1> <キー2> [/s] [/f]\n\n\
|
||||||
Copies the contents of a specified registry key to another location.\n\
|
指定されたレジストリ キーの内容を別の場所にコピーします。\n\
|
||||||
By default, this operation only copies registry values. Use [/s] to\n\
|
デフォルトでは、この操作はレジストリ値のみをコピーします。[/s] を使用して、\n\
|
||||||
recursively copy all subkeys and values.\n\n\
|
すべてのサブキーと値を再帰的にコピーします。\n\n\
|
||||||
<key1>, <key2>\n\
|
<キー1>, <キー2>\n\
|
||||||
Registry keys specifying the source (<key1>) and destination (<key2>)\n\
|
データのコピー元(<キー1>) とコピー先 (<キー2>) を指定するレジストリ キー。\n\
|
||||||
of the data. If <key2> does not exist, it is created.\n\n\
|
<キー2> が存在しない場合は作成されます。\n\n\
|
||||||
Format: ROOT\\Subkey\n\n\
|
形式: <ルート>\\<サブキー>\n\n\
|
||||||
ROOT: A predefined registry key. This must be one of the following:\n\n\
|
<ルート>: 定義済みのレジストリ キー。次のいずれかである必要があります。\n\n\
|
||||||
HKEY_LOCAL_MACHINE | HKLM\n\
|
HKEY_LOCAL_MACHINE | HKLM\n\
|
||||||
HKEY_CURRENT_USER | HKCU\n\
|
HKEY_CURRENT_USER | HKCU\n\
|
||||||
HKEY_CLASSES_ROOT | HKCR\n\
|
HKEY_CLASSES_ROOT | HKCR\n\
|
||||||
HKEY_USERS | HKU\n\
|
HKEY_USERS | HKU\n\
|
||||||
HKEY_CURRENT_CONFIG | HKCC\n\n\
|
HKEY_CURRENT_CONFIG | HKCC\n\n\
|
||||||
Subkey: The full path to a registry key under a given ROOT key.\n\n\
|
<サブキー>: 指定された <ルート> キーの下のレジストリ キーへの完全なパス。\n\n\
|
||||||
/s\n\
|
/s\n\
|
||||||
Copy all subkeys and values from <key1> to <key2>.\n\n\
|
<キー1> から <キー2> にすべてのサブキーと値をコピーします。\n\n\
|
||||||
/f\n\
|
/f\n\
|
||||||
Overwrite all registry data in <key2> without prompting for confirmation.\n\
|
確認のプロンプトを表示せずに、<キー2> 内のすべてのレジストリ\n\
|
||||||
This option does not modify subkeys and values that only exist in <key2>.\n\n"
|
データを上書きします。\n\
|
||||||
|
このオプションは、<キー2> にのみ存在するサブキーと値を変更しません。\n\n"
|
||||||
|
|
||||||
STRING_COPY_SRC_DEST_SAME, "reg: The source and destination keys cannot be the same\n"
|
STRING_COPY_SRC_DEST_SAME, "reg: コピー元キーとコピー先キーは同じにすることはできません\n"
|
||||||
STRING_COPY_CONFIRM, "The value '%1\\%2' already exists in the destination key. Do you want to overwrite it?"
|
STRING_COPY_CONFIRM, "値 '%1\\%2' はコピー先キーに既に存在します。上書きしますか?"
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
add_definitions(-D__WINESRC__)
|
|
||||||
add_executable(taskkill taskkill.c taskkill.rc)
|
add_executable(taskkill taskkill.c taskkill.rc)
|
||||||
target_link_libraries(taskkill wine)
|
target_link_libraries(taskkill wine)
|
||||||
set_module_type(taskkill win32cui UNICODE)
|
set_module_type(taskkill win32cui UNICODE)
|
||||||
add_importlibs(taskkill psapi user32 msvcrt kernel32 ntdll)
|
add_importlibs(taskkill user32 msvcrt kernel32 ntdll)
|
||||||
add_cd_file(TARGET taskkill DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET taskkill DESTINATION reactos/system32 FOR all)
|
||||||
|
set_wine_module_FIXME(taskkill) # CORE-5743: No ARRAY_SIZE macro
|
||||||
|
@@ -2,7 +2,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
|
|||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
{
|
{
|
||||||
STRING_USAGE, "Usage: taskkill [/?] [/f] [/im Prozess Name | /pid Prozess ID]\n"
|
STRING_USAGE, "Usage: taskkill [/?] [/f] [/im Prozess Name | /pid Prozess ID] [/t]\n"
|
||||||
STRING_INVALID_OPTION, "Fehler: Unbekannte oder ungülige Kommandozeilenoption angegeben.\n"
|
STRING_INVALID_OPTION, "Fehler: Unbekannte oder ungülige Kommandozeilenoption angegeben.\n"
|
||||||
STRING_INVALID_PARAM, "Fehler: Ungültiger Kommandozeilenparameter angegeben.\n"
|
STRING_INVALID_PARAM, "Fehler: Ungültiger Kommandozeilenparameter angegeben.\n"
|
||||||
STRING_MISSING_OPTION, "Fehler: Eine der Optionen /im oder /pid muss angegeben werden.\n"
|
STRING_MISSING_OPTION, "Fehler: Eine der Optionen /im oder /pid muss angegeben werden.\n"
|
||||||
@@ -16,6 +16,10 @@ STRINGTABLE
|
|||||||
STRING_ENUM_FAILED, "Fehler: Prozessliste kann nicht aufgebaut werden.\n"
|
STRING_ENUM_FAILED, "Fehler: Prozessliste kann nicht aufgebaut werden.\n"
|
||||||
STRING_TERMINATE_FAILED, "Fehler: Prozess ""%1"" kann nicht beendet werden.\n"
|
STRING_TERMINATE_FAILED, "Fehler: Prozess ""%1"" kann nicht beendet werden.\n"
|
||||||
STRING_SELF_TERMINATION, "Fehler: Der Prozess kann sich nicht selbst beenden.\n"
|
STRING_SELF_TERMINATION, "Fehler: Der Prozess kann sich nicht selbst beenden.\n"
|
||||||
|
// STRING_CLOSE_CHILD, "Sent termination signal to process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
|
STRING_CLOSE_CHILD, "Close message sent to top-level windows of process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
|
STRING_TERM_CHILD, "The process with PID %1!u! (child process of PID %2!u!) has been terminated.\n"
|
||||||
|
STRING_TERM_CHILD_FAILED, "Error: Unable to terminate process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
STRING_PARAM_TOO_MUCH, "Error: Invalid syntax. '%1' option is not allowed more than '%2!d!' time(s).\n"
|
STRING_PARAM_TOO_MUCH, "Error: Invalid syntax. '%1' option is not allowed more than '%2!d!' time(s).\n"
|
||||||
STRING_INVALID_SYNTAX, "Error: Invalid syntax.\n"
|
STRING_INVALID_SYNTAX, "Error: Invalid syntax.\n"
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
|
|||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
{
|
{
|
||||||
STRING_USAGE, "Usage: taskkill [/?] [/f] [/im ProcessName | /pid ProcessID]\n"
|
STRING_USAGE, "Usage: taskkill [/?] [/f] [/im ProcessName | /pid ProcessID] [/t]\n"
|
||||||
STRING_INVALID_OPTION, "Error: Unknown or invalid command line option specified.\n"
|
STRING_INVALID_OPTION, "Error: Unknown or invalid command line option specified.\n"
|
||||||
STRING_INVALID_PARAM, "Error: Invalid command line parameter specified.\n"
|
STRING_INVALID_PARAM, "Error: Invalid command line parameter specified.\n"
|
||||||
STRING_MISSING_OPTION, "Error: One of options /im or /pid must be specified.\n"
|
STRING_MISSING_OPTION, "Error: One of options /im or /pid must be specified.\n"
|
||||||
@@ -10,12 +10,16 @@ STRINGTABLE
|
|||||||
STRING_MUTUAL_EXCLUSIVE, "Error: Options /im and /pid are mutually exclusive.\n"
|
STRING_MUTUAL_EXCLUSIVE, "Error: Options /im and /pid are mutually exclusive.\n"
|
||||||
STRING_CLOSE_PID_SEARCH, "Close message sent to top-level windows of process with PID %1!u!.\n"
|
STRING_CLOSE_PID_SEARCH, "Close message sent to top-level windows of process with PID %1!u!.\n"
|
||||||
STRING_CLOSE_PROC_SRCH, "Close message sent to top-level windows of process ""%1"" with PID %2!u!.\n"
|
STRING_CLOSE_PROC_SRCH, "Close message sent to top-level windows of process ""%1"" with PID %2!u!.\n"
|
||||||
STRING_TERM_PID_SEARCH, "Process with PID %1!u! was forcibly terminated.\n"
|
STRING_TERM_PID_SEARCH, "The process with PID %1!u! has been terminated.\n"
|
||||||
STRING_TERM_PROC_SEARCH, "Process ""%1"" with PID %2!u! was forcibly terminated.\n"
|
STRING_TERM_PROC_SEARCH, "The process ""%1"" with PID %2!u! has been terminated.\n"
|
||||||
STRING_SEARCH_FAILED, "Error: Could not find process ""%1"".\n"
|
STRING_SEARCH_FAILED, "Error: Could not find process ""%1"".\n"
|
||||||
STRING_ENUM_FAILED, "Error: Unable to enumerate the process list.\n"
|
STRING_ENUM_FAILED, "Error: Unable to enumerate the process list.\n"
|
||||||
STRING_TERMINATE_FAILED, "Error: Unable to terminate process ""%1"".\n"
|
STRING_TERMINATE_FAILED, "Error: Unable to terminate process ""%1"".\n"
|
||||||
STRING_SELF_TERMINATION, "Error: Process self-termination is not permitted.\n"
|
STRING_SELF_TERMINATION, "Error: Process self-termination is not permitted.\n"
|
||||||
|
// STRING_CLOSE_CHILD, "Sent termination signal to process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
|
STRING_CLOSE_CHILD, "Close message sent to top-level windows of process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
|
STRING_TERM_CHILD, "The process with PID %1!u! (child process of PID %2!u!) has been terminated.\n"
|
||||||
|
STRING_TERM_CHILD_FAILED, "Error: Unable to terminate process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
STRING_PARAM_TOO_MUCH, "Error: Invalid syntax. '%1' option is not allowed more than '%2!d!' time(s).\n"
|
STRING_PARAM_TOO_MUCH, "Error: Invalid syntax. '%1' option is not allowed more than '%2!d!' time(s).\n"
|
||||||
STRING_INVALID_SYNTAX, "Error: Invalid syntax.\n"
|
STRING_INVALID_SYNTAX, "Error: Invalid syntax.\n"
|
||||||
}
|
}
|
||||||
|
@@ -9,7 +9,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
|
|||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
{
|
{
|
||||||
STRING_USAGE, "Uso: taskkill [/?] [/f] [/im NomeProcesso | /pid IDProcesso]\n"
|
STRING_USAGE, "Uso: taskkill [/?] [/f] [/im NomeProcesso | /pid IDProcesso] [/t]\n"
|
||||||
STRING_INVALID_OPTION, "Errore: L'opzione specificata è invalida o sconosciuta.\n"
|
STRING_INVALID_OPTION, "Errore: L'opzione specificata è invalida o sconosciuta.\n"
|
||||||
STRING_INVALID_PARAM, "Errore: Il parametro di comando a riga è invalido.\n"
|
STRING_INVALID_PARAM, "Errore: Il parametro di comando a riga è invalido.\n"
|
||||||
STRING_MISSING_OPTION, "Errore: Specifica una delle opzioni /im oppure /pid.\n"
|
STRING_MISSING_OPTION, "Errore: Specifica una delle opzioni /im oppure /pid.\n"
|
||||||
@@ -23,6 +23,10 @@ STRINGTABLE
|
|||||||
STRING_ENUM_FAILED, "Errore: Impossibile enumerare la lista dei processi.\n"
|
STRING_ENUM_FAILED, "Errore: Impossibile enumerare la lista dei processi.\n"
|
||||||
STRING_TERMINATE_FAILED, "Errore: Impossibile terminare il processo ""%1"".\n"
|
STRING_TERMINATE_FAILED, "Errore: Impossibile terminare il processo ""%1"".\n"
|
||||||
STRING_SELF_TERMINATION, "Errore: L'auto-terminazione non è consentita.\n"
|
STRING_SELF_TERMINATION, "Errore: L'auto-terminazione non è consentita.\n"
|
||||||
|
// STRING_CLOSE_CHILD, "Sent termination signal to process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
|
STRING_CLOSE_CHILD, "Close message sent to top-level windows of process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
|
STRING_TERM_CHILD, "The process with PID %1!u! (child process of PID %2!u!) has been terminated.\n"
|
||||||
|
STRING_TERM_CHILD_FAILED, "Error: Unable to terminate process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
STRING_PARAM_TOO_MUCH, "Error: Invalid syntax. '%1' option is not allowed more than '%2!d!' time(s).\n"
|
STRING_PARAM_TOO_MUCH, "Error: Invalid syntax. '%1' option is not allowed more than '%2!d!' time(s).\n"
|
||||||
STRING_INVALID_SYNTAX, "Error: Invalid syntax.\n"
|
STRING_INVALID_SYNTAX, "Error: Invalid syntax.\n"
|
||||||
}
|
}
|
||||||
|
@@ -1,15 +1,16 @@
|
|||||||
/*
|
/*
|
||||||
* PROJECT: Kończy procesy
|
* PROJECT: Task termination utility
|
||||||
* LICENSE: See COPYING in the top level directory
|
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
|
||||||
* PURPOSE: Polish resource file
|
* PURPOSE: Polish resource file
|
||||||
* COPYRIGHT: Copyright 2018 George Bișoc (george.bisoc@reactos.org)
|
* TRANSLATORS: Copyright 2018 Adam Słaboń <asaillen456esx@gmail.com>
|
||||||
* Updated by pithwz - Piotr Hetnarowicz (piotrhwz@gmail.com) (April, 2020)
|
* Copyright 2020-2025 Piotr Hetnarowicz <piotrhwz@gmail.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
|
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
{
|
{
|
||||||
STRING_USAGE, "Sposób użycia: taskkill [/?] [/f] [/im nazwa_procesu | /pid id_procesu]\n"
|
STRING_USAGE, "Sposób użycia: taskkill [/?] [/f] [/im nazwa_procesu | /pid id_procesu] [/t]\n"
|
||||||
STRING_INVALID_OPTION, "Błąd: Określono nieznaną lub nieprawidłową opcję.\n"
|
STRING_INVALID_OPTION, "Błąd: Określono nieznaną lub nieprawidłową opcję.\n"
|
||||||
STRING_INVALID_PARAM, "Błąd: Nieprawidłowy parametr.\n"
|
STRING_INVALID_PARAM, "Błąd: Nieprawidłowy parametr.\n"
|
||||||
STRING_MISSING_OPTION, "Błąd: Nie określono opcji /im ani /pid.\n"
|
STRING_MISSING_OPTION, "Błąd: Nie określono opcji /im ani /pid.\n"
|
||||||
@@ -23,6 +24,10 @@ STRINGTABLE
|
|||||||
STRING_ENUM_FAILED, "Błąd: Nie można wyliczyć listy procesów.\n"
|
STRING_ENUM_FAILED, "Błąd: Nie można wyliczyć listy procesów.\n"
|
||||||
STRING_TERMINATE_FAILED, "Błąd: Nie można zakończyć procesu ""%1"".\n"
|
STRING_TERMINATE_FAILED, "Błąd: Nie można zakończyć procesu ""%1"".\n"
|
||||||
STRING_SELF_TERMINATION, "Błąd: Proces nie może zakończyć sam siebie.\n"
|
STRING_SELF_TERMINATION, "Błąd: Proces nie może zakończyć sam siebie.\n"
|
||||||
|
// STRING_CLOSE_CHILD, "Wysłano sygnał zakończenia do procesu o identyfikatorze PID %1!u!, będącego procesem podrzędnym procesu PID %2!u!.\n"
|
||||||
|
STRING_CLOSE_CHILD, "Wysłano komunikat zamknięcia do okien najwyższego poziomu procesu PID %1!u!, będącego procesem podrzędnym procesu PID %2!u!.\n"
|
||||||
|
STRING_TERM_CHILD, "Proces o identyfikatorze PID %1!u! (podrzędny procesowi PID %2!u!) został zakończony.\n"
|
||||||
|
STRING_TERM_CHILD_FAILED, "Błąd: Nie można zakończyć procesu PID %1!u!, będącego procesem podrzędnym PID %2!u!.\n"
|
||||||
STRING_PARAM_TOO_MUCH, "Błąd: Nieprawidłowa składnia. Opcja '%1' nie jest dozwolona więcej niż '%2!d!' razy.\n"
|
STRING_PARAM_TOO_MUCH, "Błąd: Nieprawidłowa składnia. Opcja '%1' nie jest dozwolona więcej niż '%2!d!' razy.\n"
|
||||||
STRING_INVALID_SYNTAX, "Błąd: Nieprawidłowa składnia.\n"
|
STRING_INVALID_SYNTAX, "Błąd: Nieprawidłowa składnia.\n"
|
||||||
}
|
}
|
||||||
|
@@ -10,7 +10,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
|
|||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
{
|
{
|
||||||
STRING_USAGE, "Utilizare: taskkill [/?] [/f] [/im NumeProces | /pid IdProces]\n"
|
STRING_USAGE, "Utilizare: taskkill [/?] [/f] [/im NumeProces | /pid IdProces] [/t]\n"
|
||||||
STRING_INVALID_OPTION, "Eroare: Opțiune specificată nevalidă sau necunoscută.\n"
|
STRING_INVALID_OPTION, "Eroare: Opțiune specificată nevalidă sau necunoscută.\n"
|
||||||
STRING_INVALID_PARAM, "Eroare: Parametrul de comandă specificat este nevalid.\n"
|
STRING_INVALID_PARAM, "Eroare: Parametrul de comandă specificat este nevalid.\n"
|
||||||
STRING_MISSING_OPTION, "Eroare: Trebuie specificată una dintre opțiunile /im sau /pid.\n"
|
STRING_MISSING_OPTION, "Eroare: Trebuie specificată una dintre opțiunile /im sau /pid.\n"
|
||||||
@@ -24,6 +24,10 @@ STRINGTABLE
|
|||||||
STRING_ENUM_FAILED, "Eroare: Nu se poate enumera lista de procese.\n"
|
STRING_ENUM_FAILED, "Eroare: Nu se poate enumera lista de procese.\n"
|
||||||
STRING_TERMINATE_FAILED, "Eroare: Procesul «%1» nu poate fi oprit.\n"
|
STRING_TERMINATE_FAILED, "Eroare: Procesul «%1» nu poate fi oprit.\n"
|
||||||
STRING_SELF_TERMINATION, "Eroare: Auto-terminarea nu este permisă.\n"
|
STRING_SELF_TERMINATION, "Eroare: Auto-terminarea nu este permisă.\n"
|
||||||
|
// STRING_CLOSE_CHILD, "Sent termination signal to process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
|
STRING_CLOSE_CHILD, "Close message sent to top-level windows of process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
|
STRING_TERM_CHILD, "The process with PID %1!u! (child process of PID %2!u!) has been terminated.\n"
|
||||||
|
STRING_TERM_CHILD_FAILED, "Error: Unable to terminate process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
STRING_PARAM_TOO_MUCH, "Eroare: Sintaxă nevalidă. Opțiunea '%1' nu este permisă mai mult de '%2!d!' dată(dăți).\n"
|
STRING_PARAM_TOO_MUCH, "Eroare: Sintaxă nevalidă. Opțiunea '%1' nu este permisă mai mult de '%2!d!' dată(dăți).\n"
|
||||||
STRING_INVALID_SYNTAX, "Eroare: Sintaxă nevalidă.\n"
|
STRING_INVALID_SYNTAX, "Eroare: Sintaxă nevalidă.\n"
|
||||||
}
|
}
|
||||||
|
@@ -4,7 +4,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
|
|||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
{
|
{
|
||||||
STRING_USAGE, "Использование: TASKKILL [/F] [/IM <образ> | /PID <процесс>]\n"
|
STRING_USAGE, "Использование: TASKKILL [/F] [/IM <образ> | /PID <процесс>] [/t]\n"
|
||||||
STRING_INVALID_OPTION, "Ошибка: Указаны неверные параметры командной строки.\n"
|
STRING_INVALID_OPTION, "Ошибка: Указаны неверные параметры командной строки.\n"
|
||||||
STRING_INVALID_PARAM, "Ошибка: Указаны неверные параметры командной строки.\n"
|
STRING_INVALID_PARAM, "Ошибка: Указаны неверные параметры командной строки.\n"
|
||||||
STRING_MISSING_OPTION, "Ошибка: Должен быть указан параметр /im или /pid.\n"
|
STRING_MISSING_OPTION, "Ошибка: Должен быть указан параметр /im или /pid.\n"
|
||||||
@@ -18,6 +18,10 @@ STRINGTABLE
|
|||||||
STRING_ENUM_FAILED, "Ошибка: Не удается получить список процессов.\n"
|
STRING_ENUM_FAILED, "Ошибка: Не удается получить список процессов.\n"
|
||||||
STRING_TERMINATE_FAILED, "Ошибка: Не удается завершить процесс ""%1"".\n"
|
STRING_TERMINATE_FAILED, "Ошибка: Не удается завершить процесс ""%1"".\n"
|
||||||
STRING_SELF_TERMINATION, "Ошибка: Процесс не может завершить сам себя.\n"
|
STRING_SELF_TERMINATION, "Ошибка: Процесс не может завершить сам себя.\n"
|
||||||
|
// STRING_CLOSE_CHILD, "Sent termination signal to process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
|
STRING_CLOSE_CHILD, "Close message sent to top-level windows of process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
|
STRING_TERM_CHILD, "The process with PID %1!u! (child process of PID %2!u!) has been terminated.\n"
|
||||||
|
STRING_TERM_CHILD_FAILED, "Error: Unable to terminate process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
STRING_PARAM_TOO_MUCH, "Ошибка: Неверный синтаксис. Нельзя использовать опцию '%1' больше '%2!d!' раз(а).\n"
|
STRING_PARAM_TOO_MUCH, "Ошибка: Неверный синтаксис. Нельзя использовать опцию '%1' больше '%2!d!' раз(а).\n"
|
||||||
STRING_INVALID_SYNTAX, "Ошибка: Неверный синтаксис.\n"
|
STRING_INVALID_SYNTAX, "Ошибка: Неверный синтаксис.\n"
|
||||||
}
|
}
|
||||||
|
@@ -6,7 +6,7 @@ LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL
|
|||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
{
|
{
|
||||||
STRING_USAGE, "Usage: taskkill [/?] [/f] [/im ProcessName | /pid ProcessID]\n"
|
STRING_USAGE, "Usage: taskkill [/?] [/f] [/im ProcessName | /pid ProcessID] [/t]\n"
|
||||||
STRING_INVALID_OPTION, "Gabim: Panjohur ose i pavlefshëm opsioni linjes komandes i specifikuar.\n"
|
STRING_INVALID_OPTION, "Gabim: Panjohur ose i pavlefshëm opsioni linjes komandes i specifikuar.\n"
|
||||||
STRING_INVALID_PARAM, "Gabim: Pavlefshëm parametri i specifikuar ne linjen e komandes.\n"
|
STRING_INVALID_PARAM, "Gabim: Pavlefshëm parametri i specifikuar ne linjen e komandes.\n"
|
||||||
STRING_MISSING_OPTION, "Gabim: Njera nga opsionet /im ose /pid duhet te specifikohet.\n"
|
STRING_MISSING_OPTION, "Gabim: Njera nga opsionet /im ose /pid duhet te specifikohet.\n"
|
||||||
@@ -20,6 +20,10 @@ STRINGTABLE
|
|||||||
STRING_ENUM_FAILED, "Gabim: Në pamundësi për të numëruar listën proceseve.\n"
|
STRING_ENUM_FAILED, "Gabim: Në pamundësi për të numëruar listën proceseve.\n"
|
||||||
STRING_TERMINATE_FAILED, "Gabim: Pamundur mbyllja e proceseve ""%1"".\n"
|
STRING_TERMINATE_FAILED, "Gabim: Pamundur mbyllja e proceseve ""%1"".\n"
|
||||||
STRING_SELF_TERMINATION, "Gabim: Procesi vetë-përfundimi nuk është i lejuar.\n"
|
STRING_SELF_TERMINATION, "Gabim: Procesi vetë-përfundimi nuk është i lejuar.\n"
|
||||||
|
// STRING_CLOSE_CHILD, "Sent termination signal to process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
|
STRING_CLOSE_CHILD, "Close message sent to top-level windows of process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
|
STRING_TERM_CHILD, "The process with PID %1!u! (child process of PID %2!u!) has been terminated.\n"
|
||||||
|
STRING_TERM_CHILD_FAILED, "Error: Unable to terminate process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
STRING_PARAM_TOO_MUCH, "Error: Invalid syntax. '%1' option is not allowed more than '%2!d!' time(s).\n"
|
STRING_PARAM_TOO_MUCH, "Error: Invalid syntax. '%1' option is not allowed more than '%2!d!' time(s).\n"
|
||||||
STRING_INVALID_SYNTAX, "Error: Invalid syntax.\n"
|
STRING_INVALID_SYNTAX, "Error: Invalid syntax.\n"
|
||||||
}
|
}
|
||||||
|
@@ -4,7 +4,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_NEUTRAL
|
|||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
{
|
{
|
||||||
STRING_USAGE, "Kullanım: taskkill [/?] [/f] [/im işlem adı | /pid işlem kimliği]\n"
|
STRING_USAGE, "Kullanım: taskkill [/?] [/f] [/im işlem adı | /pid işlem kimliği] [/t]\n"
|
||||||
STRING_INVALID_OPTION, "Hata: Bilinmeyen veya geçersiz komut satırı seçeneği belirtildi.\n"
|
STRING_INVALID_OPTION, "Hata: Bilinmeyen veya geçersiz komut satırı seçeneği belirtildi.\n"
|
||||||
STRING_INVALID_PARAM, "Hata: Geçersiz komut satırı değişkeni belirtildi.\n"
|
STRING_INVALID_PARAM, "Hata: Geçersiz komut satırı değişkeni belirtildi.\n"
|
||||||
STRING_MISSING_OPTION, "Hata: /im ve /pid seçeneklerinden biri belirtilmeli.\n"
|
STRING_MISSING_OPTION, "Hata: /im ve /pid seçeneklerinden biri belirtilmeli.\n"
|
||||||
@@ -18,6 +18,10 @@ STRINGTABLE
|
|||||||
STRING_ENUM_FAILED, "Hata: İşlem numaralandırılamıyor.\n"
|
STRING_ENUM_FAILED, "Hata: İşlem numaralandırılamıyor.\n"
|
||||||
STRING_TERMINATE_FAILED, "Hata: ""%1"" işlemi sonlandırılamıyor.\n"
|
STRING_TERMINATE_FAILED, "Hata: ""%1"" işlemi sonlandırılamıyor.\n"
|
||||||
STRING_SELF_TERMINATION, "Hata: İşlemi kendi kendine sonlandırmaya izin verilmedi.\n"
|
STRING_SELF_TERMINATION, "Hata: İşlemi kendi kendine sonlandırmaya izin verilmedi.\n"
|
||||||
|
// STRING_CLOSE_CHILD, "Sent termination signal to process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
|
STRING_CLOSE_CHILD, "Close message sent to top-level windows of process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
|
STRING_TERM_CHILD, "The process with PID %1!u! (child process of PID %2!u!) has been terminated.\n"
|
||||||
|
STRING_TERM_CHILD_FAILED, "Error: Unable to terminate process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
STRING_PARAM_TOO_MUCH, "Hata: Geçersiz sözdizimi. '%1' seçeneğine '%2!d!'den fazla kez izin verilmiyor..\n"
|
STRING_PARAM_TOO_MUCH, "Hata: Geçersiz sözdizimi. '%1' seçeneğine '%2!d!'den fazla kez izin verilmiyor..\n"
|
||||||
STRING_INVALID_SYNTAX, "Hata: Geçersiz sözdizimi.\n"
|
STRING_INVALID_SYNTAX, "Hata: Geçersiz sözdizimi.\n"
|
||||||
}
|
}
|
||||||
|
@@ -7,7 +7,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
|
|||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
{
|
{
|
||||||
STRING_USAGE, "用法:taskkill [/?] [/f] [/im 进程名称 | /pid 进程 ID]\n"
|
STRING_USAGE, "用法:taskkill [/?] [/f] [/im 进程名称 | /pid 进程 ID] [/t]\n"
|
||||||
STRING_INVALID_OPTION, "错误:指定了未知或无效的命令行选项。\n"
|
STRING_INVALID_OPTION, "错误:指定了未知或无效的命令行选项。\n"
|
||||||
STRING_INVALID_PARAM, "错误:指定了无效的命令行参数。\n"
|
STRING_INVALID_PARAM, "错误:指定了无效的命令行参数。\n"
|
||||||
STRING_MISSING_OPTION, "错误:必须指定选项 /im 或 /pid。\n"
|
STRING_MISSING_OPTION, "错误:必须指定选项 /im 或 /pid。\n"
|
||||||
@@ -21,6 +21,10 @@ STRINGTABLE
|
|||||||
STRING_ENUM_FAILED, "错误:无法枚举进程列表。\n"
|
STRING_ENUM_FAILED, "错误:无法枚举进程列表。\n"
|
||||||
STRING_TERMINATE_FAILED, "错误:无法终止进程“%1”。\n"
|
STRING_TERMINATE_FAILED, "错误:无法终止进程“%1”。\n"
|
||||||
STRING_SELF_TERMINATION, "错误:不允许终止自身。\n"
|
STRING_SELF_TERMINATION, "错误:不允许终止自身。\n"
|
||||||
|
// STRING_CLOSE_CHILD, "Sent termination signal to process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
|
STRING_CLOSE_CHILD, "Close message sent to top-level windows of process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
|
STRING_TERM_CHILD, "The process with PID %1!u! (child process of PID %2!u!) has been terminated.\n"
|
||||||
|
STRING_TERM_CHILD_FAILED, "Error: Unable to terminate process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
STRING_PARAM_TOO_MUCH, "错误:无效语法。选项“%1”不允许超过“%2!d!”次。\n"
|
STRING_PARAM_TOO_MUCH, "错误:无效语法。选项“%1”不允许超过“%2!d!”次。\n"
|
||||||
STRING_INVALID_SYNTAX, "错误:无效语法。\n"
|
STRING_INVALID_SYNTAX, "错误:无效语法。\n"
|
||||||
}
|
}
|
||||||
|
@@ -11,7 +11,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
|
|||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
{
|
{
|
||||||
STRING_USAGE, "用法: taskkill [/?] [/f] [/im 處理程序名稱 | /pid PID]\n"
|
STRING_USAGE, "用法: taskkill [/?] [/f] [/im 處理程序名稱 | /pid PID] [/t]\n"
|
||||||
STRING_INVALID_OPTION, "錯誤: 指定了不明或不正確的命令列選項。\n"
|
STRING_INVALID_OPTION, "錯誤: 指定了不明或不正確的命令列選項。\n"
|
||||||
STRING_INVALID_PARAM, "錯誤: 指定了不正確的命令列參數。\n"
|
STRING_INVALID_PARAM, "錯誤: 指定了不正確的命令列參數。\n"
|
||||||
STRING_MISSING_OPTION, "錯誤: 必須指定選項 /im 或 /pid 的其中之一。\n"
|
STRING_MISSING_OPTION, "錯誤: 必須指定選項 /im 或 /pid 的其中之一。\n"
|
||||||
@@ -25,6 +25,10 @@ STRINGTABLE
|
|||||||
STRING_ENUM_FAILED, "錯誤: 無法列舉處理程序清單。\n"
|
STRING_ENUM_FAILED, "錯誤: 無法列舉處理程序清單。\n"
|
||||||
STRING_TERMINATE_FAILED, "錯誤: 無法終止處理程序 '%1'。\n"
|
STRING_TERMINATE_FAILED, "錯誤: 無法終止處理程序 '%1'。\n"
|
||||||
STRING_SELF_TERMINATION, "錯誤: 處理程序不允許自我終止。\n"
|
STRING_SELF_TERMINATION, "錯誤: 處理程序不允許自我終止。\n"
|
||||||
|
// STRING_CLOSE_CHILD, "Sent termination signal to process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
|
STRING_CLOSE_CHILD, "Close message sent to top-level windows of process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
|
STRING_TERM_CHILD, "The process with PID %1!u! (child process of PID %2!u!) has been terminated.\n"
|
||||||
|
STRING_TERM_CHILD_FAILED, "Error: Unable to terminate process with PID %1!u!, child of PID %2!u!.\n"
|
||||||
STRING_PARAM_TOO_MUCH, "錯誤: 無效的語法。'%1' 選項不允許超過 '%2!d!' 次。\n"
|
STRING_PARAM_TOO_MUCH, "錯誤: 無效的語法。'%1' 選項不允許超過 '%2!d!' 次。\n"
|
||||||
STRING_INVALID_SYNTAX, "錯誤: 無效的語法。\n"
|
STRING_INVALID_SYNTAX, "錯誤: 無效的語法。\n"
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -35,6 +35,8 @@
|
|||||||
#define STRING_ENUM_FAILED 112
|
#define STRING_ENUM_FAILED 112
|
||||||
#define STRING_TERMINATE_FAILED 113
|
#define STRING_TERMINATE_FAILED 113
|
||||||
#define STRING_SELF_TERMINATION 114
|
#define STRING_SELF_TERMINATION 114
|
||||||
#define STRING_PARAM_TOO_MUCH 115
|
#define STRING_CLOSE_CHILD 115
|
||||||
#define STRING_INVALID_SYNTAX 116
|
#define STRING_TERM_CHILD 116
|
||||||
|
#define STRING_TERM_CHILD_FAILED 117
|
||||||
|
#define STRING_PARAM_TOO_MUCH 118
|
||||||
|
#define STRING_INVALID_SYNTAX 119
|
||||||
|
@@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
/* UTF-8 */
|
/* UTF-8 */
|
||||||
#pragma code_page(65001)
|
#pragma code_page(65001)
|
||||||
|
|
||||||
#ifdef LANGUAGE_BG_BG
|
#ifdef LANGUAGE_BG_BG
|
||||||
#include "lang/bg-BG.rc"
|
#include "lang/bg-BG.rc"
|
||||||
#endif
|
#endif
|
||||||
|
@@ -11,6 +11,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
|||||||
|
|
||||||
/* UTF-8 */
|
/* UTF-8 */
|
||||||
#pragma code_page(65001)
|
#pragma code_page(65001)
|
||||||
|
|
||||||
#ifdef LANGUAGE_DE_DE
|
#ifdef LANGUAGE_DE_DE
|
||||||
#include "lang/de-DE.rc"
|
#include "lang/de-DE.rc"
|
||||||
#endif
|
#endif
|
||||||
|
57
base/applications/cmdutils/where/lang/pl-PL.rc
Normal file
57
base/applications/cmdutils/where/lang/pl-PL.rc
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* PROJECT: ReactOS WHERE command
|
||||||
|
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||||
|
* PURPOSE: Polish resource file
|
||||||
|
* TRANSLATOR: Copyright 2025 Karol Gocłowski <cyberwordixx@gazeta.pl>
|
||||||
|
*/
|
||||||
|
|
||||||
|
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
|
||||||
|
|
||||||
|
STRINGTABLE
|
||||||
|
BEGIN
|
||||||
|
IDS_USAGE "Sposób użycia: WHERE [opcje] wzorzec...\n\
|
||||||
|
\n\
|
||||||
|
Opis:\n\
|
||||||
|
Wyświetla lokalizacje plików znalezione przez określone wzorce (może być podany też jeden).\n\
|
||||||
|
Domyślnie, to narzędzie szuka używając wzorców i ścieżek ustawionych\n\
|
||||||
|
w zmiennej środowiskowej PATH.\n\
|
||||||
|
\n\
|
||||||
|
Opcje:\n\
|
||||||
|
/F Wyświetla wszyskie znalezione pliki w cudzysłowach.\n\
|
||||||
|
/Q Tryb cichy. Nie wyświetla żadnych plików ani komunikatów.\n\
|
||||||
|
/R folder Rekursywnie przeszukuje określony folder.\n\
|
||||||
|
/T Pokazuje rozmiar i datę modyfikacji wszystkich znalezionych plików.\n\
|
||||||
|
wzorzec Określa wzorzec używany do porównywania nazw przeszukiwanych plików.\n\
|
||||||
|
Wieloznaczniki * i ? mogą być używane.\n\
|
||||||
|
Formaty ""$env:pattern"" i ""path:pattern"" też mogą\n\
|
||||||
|
być używane, gdzie ""env"" jest zmienną środowiskową\n\
|
||||||
|
i wyszukiwanie następuje w ścieżkach ustawionych w zmiennej środowiskowej ""env""\n\
|
||||||
|
Nie można używać tych formatów z przełącznikiem /R. Wyszukiwanie jest\n\
|
||||||
|
także wykonywane poprzez dodanie rozszerzeń ze zmiennej środowiskowej PATHEXT do wzorca.\n\
|
||||||
|
/? Wyświetla ten komunikat.\n\
|
||||||
|
\n\
|
||||||
|
Informacja: To narzędzie zwraca poziom błędu 0 jeżeli wyszukiwanie było udane,\n\
|
||||||
|
1 jeżeli nie znaleziono pliku, i 2 jeżeli wystąpił błąd.\n\
|
||||||
|
\n\
|
||||||
|
Przykłady:\n\
|
||||||
|
WHERE mojplik*.exe\n\
|
||||||
|
WHERE /F /T mspaint\n\
|
||||||
|
WHERE $WINDIR:notepad mojplik???\n\
|
||||||
|
WHERE C:\\ReactOS;C:\\ReactOS\\system32:exp*.exe\n\
|
||||||
|
WHERE /R ""C:\\Program Files"" *.dll\n"
|
||||||
|
|
||||||
|
IDS_BAD_ARG "BŁĄD: Nieprawidłowy argument - '%ls'.\n"
|
||||||
|
IDS_NOT_FOUND "INFO: Nie znaleziono pliku dla podanych wzorców.\n"
|
||||||
|
IDS_FILE_INFO "%10I64u %-12ls %-12ls %ls\n"
|
||||||
|
IDS_WANT_VALUE "BŁĄD: Wartość jest potrzebna dla '%ls'.\n"
|
||||||
|
IDS_TYPE_HELP "Wpisz ""WHERE /?"" aby uzyskać pomoc.\n"
|
||||||
|
IDS_ENVPAT_WITH_R "BŁĄD: ""$env:pattern"" nie może być użyty z /R.\n"
|
||||||
|
IDS_PATHPAT_WITH_R "BŁĄD: ""path:pattern"" nie może być użyty z /R.\n"
|
||||||
|
IDS_BAD_PATHPAT "BŁĄD: Określono nieprawidłowy wzorzec w ""path:pattern"".\n"
|
||||||
|
IDS_OUTOFMEMORY "BŁĄD: Brak pamięci.\n"
|
||||||
|
IDS_BAD_ENVVAR "BŁĄD: Nie znaleziono zmiennej środowiskowej ""%ls"".\n"
|
||||||
|
IDS_CANT_FOUND "BŁĄD: System nie mógł znaleźć określonego pliku.\n"
|
||||||
|
IDS_BAD_DIR "BŁĄD: Określony folder jest nieprawidłowy.\n"
|
||||||
|
IDS_BAD_NAME "BŁĄD: Nazwa pliku, folderu lub etykieta woluminu jest niepoprawna.\n"
|
||||||
|
IDS_TOO_MANY "BŁĄD: Opcja '%ls' nie jest dozwolona więcej niż '%u' razy.\n"
|
||||||
|
END
|
@@ -6,7 +6,8 @@
|
|||||||
#define REACTOS_STR_ORIGINAL_FILENAME "where.exe"
|
#define REACTOS_STR_ORIGINAL_FILENAME "where.exe"
|
||||||
#include <reactos/version.rc>
|
#include <reactos/version.rc>
|
||||||
|
|
||||||
#pragma code_page(65001) /* UTF-8 */
|
/* UTF-8 */
|
||||||
|
#pragma code_page(65001)
|
||||||
|
|
||||||
#ifdef LANGUAGE_DE_DE
|
#ifdef LANGUAGE_DE_DE
|
||||||
#include "lang/de-DE.rc"
|
#include "lang/de-DE.rc"
|
||||||
@@ -17,6 +18,9 @@
|
|||||||
#ifdef LANGUAGE_IT_IT
|
#ifdef LANGUAGE_IT_IT
|
||||||
#include "lang/it-IT.rc"
|
#include "lang/it-IT.rc"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef LANGUAGE_PL_PL
|
||||||
|
#include "lang/pl-PL.rc"
|
||||||
|
#endif
|
||||||
#ifdef LANGUAGE_TR_TR
|
#ifdef LANGUAGE_TR_TR
|
||||||
#include "lang/tr-TR.rc"
|
#include "lang/tr-TR.rc"
|
||||||
#endif
|
#endif
|
||||||
|
@@ -39,7 +39,7 @@ BOOL GetArgument(WCHAR* arg, int argc, WCHAR* argv[])
|
|||||||
|
|
||||||
for (i = 1; i < argc; i++)
|
for (i = 1; i < argc; i++)
|
||||||
{
|
{
|
||||||
if (wcsicmp(argv[i], arg) == 0)
|
if (_wcsicmp(argv[i], arg) == 0)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -698,7 +698,7 @@ int wmain(int argc, WCHAR* argv[])
|
|||||||
/* first things first-- let's detect and manage both printing modifiers (/fo and /nh) */
|
/* first things first-- let's detect and manage both printing modifiers (/fo and /nh) */
|
||||||
for (i = 1; i < argc; i++)
|
for (i = 1; i < argc; i++)
|
||||||
{
|
{
|
||||||
if (wcsicmp(argv[i], L"/nh") == 0)
|
if (_wcsicmp(argv[i], L"/nh") == 0)
|
||||||
{
|
{
|
||||||
NoHeaderArgCount++;
|
NoHeaderArgCount++;
|
||||||
|
|
||||||
@@ -713,7 +713,7 @@ int wmain(int argc, WCHAR* argv[])
|
|||||||
|
|
||||||
for (i = 1; i < argc; i++)
|
for (i = 1; i < argc; i++)
|
||||||
{
|
{
|
||||||
if (wcsicmp(argv[i], L"/fo") == 0)
|
if (_wcsicmp(argv[i], L"/fo") == 0)
|
||||||
{
|
{
|
||||||
if ((i + 1) < argc)
|
if ((i + 1) < argc)
|
||||||
{
|
{
|
||||||
@@ -721,14 +721,14 @@ int wmain(int argc, WCHAR* argv[])
|
|||||||
|
|
||||||
PrintFormatArgCount++;
|
PrintFormatArgCount++;
|
||||||
|
|
||||||
if (wcsicmp(argv[i + 1], L"table") == 0 && PrintFormat != table)
|
if (_wcsicmp(argv[i + 1], L"table") == 0 && PrintFormat != table)
|
||||||
{
|
{
|
||||||
PrintFormat = table;
|
PrintFormat = table;
|
||||||
// wprintf(L"Changed to table format\n");
|
// wprintf(L"Changed to table format\n");
|
||||||
BlankArgument(i, argv);
|
BlankArgument(i, argv);
|
||||||
BlankArgument(i + 1, argv);
|
BlankArgument(i + 1, argv);
|
||||||
}
|
}
|
||||||
else if (wcsicmp(argv[i + 1], L"list") == 0 && PrintFormat != list)
|
else if (_wcsicmp(argv[i + 1], L"list") == 0 && PrintFormat != list)
|
||||||
{
|
{
|
||||||
PrintFormat = list;
|
PrintFormat = list;
|
||||||
// wprintf(L"Changed to list format\n");
|
// wprintf(L"Changed to list format\n");
|
||||||
@@ -743,7 +743,7 @@ int wmain(int argc, WCHAR* argv[])
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (wcsicmp(argv[i + 1], L"csv") == 0 && PrintFormat != csv)
|
else if (_wcsicmp(argv[i + 1], L"csv") == 0 && PrintFormat != csv)
|
||||||
{
|
{
|
||||||
PrintFormat = csv;
|
PrintFormat = csv;
|
||||||
// wprintf(L"Changed to csv format\n");
|
// wprintf(L"Changed to csv format\n");
|
||||||
@@ -751,14 +751,14 @@ int wmain(int argc, WCHAR* argv[])
|
|||||||
BlankArgument(i + 1, argv);
|
BlankArgument(i + 1, argv);
|
||||||
}
|
}
|
||||||
/* /nh or /fo after /fo isn't parsed as a value */
|
/* /nh or /fo after /fo isn't parsed as a value */
|
||||||
else if (wcsicmp(argv[i + 1], L"/nh") == 0 || wcsicmp(argv[i + 1], L"/fo") == 0
|
else if (_wcsicmp(argv[i + 1], L"/nh") == 0 || _wcsicmp(argv[i + 1], L"/fo") == 0
|
||||||
|
|
||||||
/* same goes for the other named options, not ideal, but works */
|
/* same goes for the other named options, not ideal, but works */
|
||||||
|| wcsicmp(argv[i + 1], L"/priv") == 0
|
|| _wcsicmp(argv[i + 1], L"/priv") == 0
|
||||||
|| wcsicmp(argv[i + 1], L"/groups") == 0
|
|| _wcsicmp(argv[i + 1], L"/groups") == 0
|
||||||
|| wcsicmp(argv[i + 1], L"/user") == 0
|
|| _wcsicmp(argv[i + 1], L"/user") == 0
|
||||||
|| wcsicmp(argv[i + 1], L"/all") == 0
|
|| _wcsicmp(argv[i + 1], L"/all") == 0
|
||||||
|| wcsicmp(argv[i + 1], L"") == 0)
|
|| _wcsicmp(argv[i + 1], L"") == 0)
|
||||||
{
|
{
|
||||||
goto FoValueExpected;
|
goto FoValueExpected;
|
||||||
}
|
}
|
||||||
@@ -806,13 +806,13 @@ int wmain(int argc, WCHAR* argv[])
|
|||||||
if (argc == 2)
|
if (argc == 2)
|
||||||
{
|
{
|
||||||
/* now let's try to parse the triumvirate of simpler, single (1) arguments... plus help */
|
/* now let's try to parse the triumvirate of simpler, single (1) arguments... plus help */
|
||||||
if (wcsicmp(argv[1], L"/?") == 0)
|
if (_wcsicmp(argv[1], L"/?") == 0)
|
||||||
{
|
{
|
||||||
wprintf(WhoamiLoadRcString(IDS_HELP));
|
wprintf(WhoamiLoadRcString(IDS_HELP));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (wcsicmp(argv[1], L"/upn") == 0)
|
else if (_wcsicmp(argv[1], L"/upn") == 0)
|
||||||
{
|
{
|
||||||
LPWSTR UserBuffer = WhoamiGetUser(NameUserPrincipal);
|
LPWSTR UserBuffer = WhoamiGetUser(NameUserPrincipal);
|
||||||
|
|
||||||
@@ -829,7 +829,7 @@ int wmain(int argc, WCHAR* argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (wcsicmp(argv[1], L"/fqdn") == 0)
|
else if (_wcsicmp(argv[1], L"/fqdn") == 0)
|
||||||
{
|
{
|
||||||
LPWSTR UserBuffer = WhoamiGetUser(NameFullyQualifiedDN);
|
LPWSTR UserBuffer = WhoamiGetUser(NameFullyQualifiedDN);
|
||||||
|
|
||||||
@@ -846,7 +846,7 @@ int wmain(int argc, WCHAR* argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (wcsicmp(argv[1], L"/logonid") == 0)
|
else if (_wcsicmp(argv[1], L"/logonid") == 0)
|
||||||
{
|
{
|
||||||
return WhoamiLogonId();
|
return WhoamiLogonId();
|
||||||
}
|
}
|
||||||
@@ -858,11 +858,11 @@ int wmain(int argc, WCHAR* argv[])
|
|||||||
/* sometimes is just easier to whitelist for lack of a better method */
|
/* sometimes is just easier to whitelist for lack of a better method */
|
||||||
for (i=1; i<argc; i++)
|
for (i=1; i<argc; i++)
|
||||||
{
|
{
|
||||||
if ((wcsicmp(argv[i], L"/user") != 0) &&
|
if ((_wcsicmp(argv[i], L"/user") != 0) &&
|
||||||
(wcsicmp(argv[i], L"/groups") != 0) &&
|
(_wcsicmp(argv[i], L"/groups") != 0) &&
|
||||||
(wcsicmp(argv[i], L"/priv") != 0) &&
|
(_wcsicmp(argv[i], L"/priv") != 0) &&
|
||||||
(wcsicmp(argv[i], L"/all") != 0) &&
|
(_wcsicmp(argv[i], L"/all") != 0) &&
|
||||||
(wcsicmp(argv[i], L"") != 0))
|
(_wcsicmp(argv[i], L"") != 0))
|
||||||
{
|
{
|
||||||
wprintf(WhoamiLoadRcString(IDS_ERROR_INVALIDARG), argv[i]);
|
wprintf(WhoamiLoadRcString(IDS_ERROR_INVALIDARG), argv[i]);
|
||||||
return 1;
|
return 1;
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
add_definitions(-D__WINESRC__)
|
|
||||||
add_executable(wmic main.c wmic.rc)
|
add_executable(wmic main.c wmic.rc)
|
||||||
target_link_libraries(wmic wine)
|
target_link_libraries(wmic wine)
|
||||||
set_module_type(wmic win32cui UNICODE)
|
set_module_type(wmic win32cui UNICODE)
|
||||||
add_importlibs(wmic oleaut32 ole32 user32 msvcrt kernel32 ntdll)
|
add_importlibs(wmic oleaut32 ole32 user32 msvcrt kernel32 ntdll)
|
||||||
add_cd_file(TARGET wmic DESTINATION reactos/system32/wbem FOR all)
|
add_cd_file(TARGET wmic DESTINATION reactos/system32/wbem FOR all)
|
||||||
|
set_wine_module_FIXME(wmic) # CORE-5743: No ARRAY_SIZE macro
|
||||||
|
@@ -1,6 +1,4 @@
|
|||||||
|
|
||||||
add_definitions(-D__WINESRC__)
|
|
||||||
|
|
||||||
list(APPEND SOURCE
|
list(APPEND SOURCE
|
||||||
arguments.c
|
arguments.c
|
||||||
host.c
|
host.c
|
||||||
@@ -11,10 +9,11 @@ add_executable(wscript ${SOURCE} rsrc.rc)
|
|||||||
add_idl_headers(wscript_idlheader ihost.idl)
|
add_idl_headers(wscript_idlheader ihost.idl)
|
||||||
add_typelib(ihost.idl)
|
add_typelib(ihost.idl)
|
||||||
set_source_files_properties(rsrc.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ihost.tlb)
|
set_source_files_properties(rsrc.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ihost.tlb)
|
||||||
target_link_libraries(wscript uuid wine)
|
target_link_libraries(wscript uuid wine oldnames)
|
||||||
set_module_type(wscript win32gui UNICODE)
|
set_module_type(wscript win32gui UNICODE)
|
||||||
add_delay_importlibs(wscript shlwapi)
|
add_delay_importlibs(wscript shlwapi)
|
||||||
add_importlibs(wscript shell32 oleaut32 ole32 user32 advapi32 msvcrt kernel32 ntdll)
|
add_importlibs(wscript shell32 oleaut32 ole32 user32 advapi32 msvcrt kernel32 ntdll)
|
||||||
add_dependencies(wscript stdole2 wscript_idlheader)
|
add_dependencies(wscript stdole2 wscript_idlheader)
|
||||||
add_pch(wscript precomp.h SOURCE)
|
add_pch(wscript precomp.h SOURCE)
|
||||||
add_cd_file(TARGET wscript DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET wscript DESTINATION reactos/system32 FOR all)
|
||||||
|
set_wine_module_FIXME(wscript) # CORE-5743: No ARRAY_SIZE macro
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
add_definitions(-D__WINESRC__)
|
|
||||||
add_executable(xcopy xcopy.c xcopy.rc)
|
add_executable(xcopy xcopy.c xcopy.rc)
|
||||||
target_link_libraries(xcopy wine)
|
target_link_libraries(xcopy wine)
|
||||||
set_module_type(xcopy win32cui UNICODE)
|
set_module_type(xcopy win32cui UNICODE)
|
||||||
add_importlibs(xcopy shell32 user32 msvcrt kernel32 ntdll)
|
add_importlibs(xcopy shell32 user32 msvcrt kernel32 ntdll)
|
||||||
add_cd_file(TARGET xcopy DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET xcopy DESTINATION reactos/system32 FOR all)
|
||||||
|
set_wine_module_FIXME(xcopy) # CORE-5743: No ARRAY_SIZE macro
|
||||||
|
@@ -50,7 +50,7 @@ où :\n\
|
|||||||
[/A] Copie uniquement les fichiers qui ont l'attribut archive défini\n\
|
[/A] Copie uniquement les fichiers qui ont l'attribut archive défini\n\
|
||||||
[/M] Copie uniquement les fichiers qui ont l'attribut archive défini ; supprime\n\
|
[/M] Copie uniquement les fichiers qui ont l'attribut archive défini ; supprime\n\
|
||||||
\tensuite l'attribut\n\
|
\tensuite l'attribut\n\
|
||||||
[/K] Copy file attributes, without this attributes are not preserved.\n\
|
[/K] Copie les attributs de fichiers. Sans ce paramètre les attributs ne sont pas conservés.\n\
|
||||||
[/D | /D:m-d-y] Copie uniquement les nouveaux fichiers, ou ceux modifiés après la date spécifiée.\n\
|
[/D | /D:m-d-y] Copie uniquement les nouveaux fichiers, ou ceux modifiés après la date spécifiée.\n\
|
||||||
\t\tSi aucune date n'est spécifiée, copie uniquement lorsque le fichier de destination est plus ancien\n\
|
\t\tSi aucune date n'est spécifiée, copie uniquement lorsque le fichier de destination est plus ancien\n\
|
||||||
\t\tque le fichier source\n\n"
|
\t\tque le fichier source\n\n"
|
||||||
|
@@ -117,7 +117,7 @@ bool UpdateFromEvent(DEBUG_EVENT& evt, DumpData& data)
|
|||||||
case EXCEPTION_DEBUG_EVENT:
|
case EXCEPTION_DEBUG_EVENT:
|
||||||
if (evt.u.Exception.dwFirstChance)
|
if (evt.u.Exception.dwFirstChance)
|
||||||
{
|
{
|
||||||
switch(evt.u.Exception.ExceptionRecord.ExceptionCode)
|
switch((NTSTATUS)evt.u.Exception.ExceptionRecord.ExceptionCode)
|
||||||
{
|
{
|
||||||
case EXCEPTION_BREAKPOINT:
|
case EXCEPTION_BREAKPOINT:
|
||||||
if (!data.FirstBPHit)
|
if (!data.FirstBPHit)
|
||||||
|
@@ -40,6 +40,9 @@
|
|||||||
#ifdef LANGUAGE_IT_IT
|
#ifdef LANGUAGE_IT_IT
|
||||||
#include "lang/it-IT.rc"
|
#include "lang/it-IT.rc"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef LANGUAGE_JA_JP
|
||||||
|
#include "lang/ja-JP.rc"
|
||||||
|
#endif
|
||||||
#ifdef LANGUAGE_PL_PL
|
#ifdef LANGUAGE_PL_PL
|
||||||
#include "lang/pl-PL.rc"
|
#include "lang/pl-PL.rc"
|
||||||
#endif
|
#endif
|
||||||
|
7
base/applications/drwtsn32/lang/ja-JP.rc
Normal file
7
base/applications/drwtsn32/lang/ja-JP.rc
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
|
||||||
|
|
||||||
|
STRINGTABLE
|
||||||
|
BEGIN
|
||||||
|
IDS_APP_TITLE "ReactOS クラッシュレポーター"
|
||||||
|
IDS_USER_ALERT_MESSAGE "アプリケーション %ls がクラッシュしました。このクラッシュに関する情報は次の場所に保存されました:\n\n%ls"
|
||||||
|
END
|
@@ -13,11 +13,11 @@
|
|||||||
#define WIDTH 800
|
#define WIDTH 800
|
||||||
#define HEIGHT 600
|
#define HEIGHT 600
|
||||||
|
|
||||||
BOOL D3D7Test(HWND hWnd);
|
BOOL D3D7Test(GUID *lpDevice, HWND hWnd);
|
||||||
BOOL D3D8Test(HWND hWnd);
|
BOOL D3D8Test(GUID *lpDevice, HWND hWnd);
|
||||||
BOOL D3D9Test(HWND hWnd);
|
BOOL D3D9Test(GUID *lpDevice, HWND hWnd);
|
||||||
|
|
||||||
BOOL StartD3DTest(HWND hWnd, HINSTANCE hInstance, WCHAR* pszCaption, INT TestNr)
|
BOOL StartD3DTest(GUID *lpDevice, HWND hWnd, HINSTANCE hInstance, WCHAR* pszCaption, INT TestNr)
|
||||||
{
|
{
|
||||||
WCHAR szTestDescriptionRaw[256];
|
WCHAR szTestDescriptionRaw[256];
|
||||||
WCHAR szTestDescription[256];
|
WCHAR szTestDescription[256];
|
||||||
@@ -39,13 +39,13 @@ BOOL StartD3DTest(HWND hWnd, HINSTANCE hInstance, WCHAR* pszCaption, INT TestNr)
|
|||||||
|
|
||||||
switch(TestNr){
|
switch(TestNr){
|
||||||
case 7:
|
case 7:
|
||||||
Result = D3D7Test(hWnd);
|
Result = D3D7Test(lpDevice, hWnd);
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
Result = D3D8Test(hWnd);
|
Result = D3D8Test(lpDevice, hWnd);
|
||||||
break;
|
break;
|
||||||
case 9:
|
case 9:
|
||||||
Result = D3D9Test(hWnd);
|
Result = D3D9Test(lpDevice, hWnd);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Result = FALSE;
|
Result = FALSE;
|
||||||
@@ -70,7 +70,7 @@ static LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lP
|
|||||||
return DefWindowProc(hWnd, msg, wParam, lParam);
|
return DefWindowProc(hWnd, msg, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID D3DTests()
|
VOID D3DTests(GUID *lpDevice)
|
||||||
{
|
{
|
||||||
WNDCLASSEX winClass;
|
WNDCLASSEX winClass;
|
||||||
HWND hWnd;
|
HWND hWnd;
|
||||||
@@ -116,9 +116,9 @@ VOID D3DTests()
|
|||||||
if(MessageBox(NULL, szDescription, szCaption, MB_YESNO | MB_ICONQUESTION) == IDNO)
|
if(MessageBox(NULL, szDescription, szCaption, MB_YESNO | MB_ICONQUESTION) == IDNO)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
StartD3DTest(hWnd, hInstance, szCaption, 7);
|
StartD3DTest(lpDevice, hWnd, hInstance, szCaption, 7);
|
||||||
StartD3DTest(hWnd, hInstance, szCaption, 8);
|
StartD3DTest(lpDevice, hWnd, hInstance, szCaption, 8);
|
||||||
StartD3DTest(hWnd, hInstance, szCaption, 9);
|
StartD3DTest(lpDevice, hWnd, hInstance, szCaption, 9);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
DestroyWindow(hWnd);
|
DestroyWindow(hWnd);
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#include "precomp.h"
|
#include "precomp.h"
|
||||||
|
|
||||||
BOOL D3D7Test(HWND hWnd)
|
BOOL D3D7Test(GUID *lpDevice, HWND hWnd)
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#include "precomp.h"
|
#include "precomp.h"
|
||||||
|
|
||||||
BOOL D3D8Test(HWND hWnd)
|
BOOL D3D8Test(GUID *lpDevice, HWND hWnd)
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#include "precomp.h"
|
#include "precomp.h"
|
||||||
|
|
||||||
BOOL D3D9Test(HWND hWnd)
|
BOOL D3D9Test(GUID *lpDevice, HWND hWnd)
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@@ -8,8 +8,8 @@
|
|||||||
|
|
||||||
#include "precomp.h"
|
#include "precomp.h"
|
||||||
|
|
||||||
BOOL DDPrimarySurfaceTest(HWND hWnd);
|
BOOL DDPrimarySurfaceTest(GUID *lpDevice, HWND hWnd);
|
||||||
BOOL DDOffscreenBufferTest(HWND hWnd, BOOL Fullscreen);
|
BOOL DDOffscreenBufferTest(GUID *lpDevice, HWND hWnd, BOOL Fullscreen);
|
||||||
VOID DDRedrawFrame(LPDIRECTDRAWSURFACE lpDDSurface);
|
VOID DDRedrawFrame(LPDIRECTDRAWSURFACE lpDDSurface);
|
||||||
VOID DDUpdateFrame(LPDIRECTDRAWSURFACE lpDDPrimarySurface ,LPDIRECTDRAWSURFACE lpDDBackBuffer, BOOL Fullscreen, INT *posX, INT *posY, INT *gainX, INT *gainY, RECT *rectDD);
|
VOID DDUpdateFrame(LPDIRECTDRAWSURFACE lpDDPrimarySurface ,LPDIRECTDRAWSURFACE lpDDBackBuffer, BOOL Fullscreen, INT *posX, INT *posY, INT *gainX, INT *gainY, RECT *rectDD);
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ VOID DDUpdateFrame(LPDIRECTDRAWSURFACE lpDDPrimarySurface ,LPDIRECTDRAWSURFACE l
|
|||||||
#define DD_SQUARE_STEP 2
|
#define DD_SQUARE_STEP 2
|
||||||
|
|
||||||
|
|
||||||
BOOL StartDDTest(HWND hWnd, HINSTANCE hInstance, INT resTestDescription, INT resResult, INT TestNr)
|
BOOL StartDDTest(GUID *lpDevice, HWND hWnd, HINSTANCE hInstance, INT resTestDescription, INT resResult, INT TestNr)
|
||||||
{
|
{
|
||||||
WCHAR szTestDescription[256];
|
WCHAR szTestDescription[256];
|
||||||
WCHAR szCaption[256];
|
WCHAR szCaption[256];
|
||||||
@@ -41,13 +41,13 @@ BOOL StartDDTest(HWND hWnd, HINSTANCE hInstance, INT resTestDescription, INT res
|
|||||||
|
|
||||||
switch(TestNr){
|
switch(TestNr){
|
||||||
case 1:
|
case 1:
|
||||||
Result = DDPrimarySurfaceTest(hWnd);
|
Result = DDPrimarySurfaceTest(lpDevice, hWnd);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
Result = DDOffscreenBufferTest(hWnd, FALSE);
|
Result = DDOffscreenBufferTest(lpDevice, hWnd, FALSE);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
Result = DDOffscreenBufferTest(hWnd, TRUE);
|
Result = DDOffscreenBufferTest(lpDevice, hWnd, TRUE);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Result = FALSE;
|
Result = FALSE;
|
||||||
@@ -67,7 +67,7 @@ BOOL StartDDTest(HWND hWnd, HINSTANCE hInstance, INT resTestDescription, INT res
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID DDTests()
|
VOID DDTests(GUID *lpDevice)
|
||||||
{
|
{
|
||||||
WNDCLASSEX winClass;
|
WNDCLASSEX winClass;
|
||||||
HWND hWnd;
|
HWND hWnd;
|
||||||
@@ -105,15 +105,15 @@ VOID DDTests()
|
|||||||
if(MessageBox(NULL, szDescription, szCaption, MB_YESNO | MB_ICONQUESTION) == IDNO)
|
if(MessageBox(NULL, szDescription, szCaption, MB_YESNO | MB_ICONQUESTION) == IDNO)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
StartDDTest(hWnd, hInstance, IDS_DDPRIMARY_DESCRIPTION, IDS_DDPRIMARY_RESULT, 1);
|
StartDDTest(lpDevice, hWnd, hInstance, IDS_DDPRIMARY_DESCRIPTION, IDS_DDPRIMARY_RESULT, 1);
|
||||||
StartDDTest(hWnd, hInstance, IDS_DDOFFSCREEN_DESCRIPTION, IDS_DDOFFSCREEN_RESULT, 2);
|
StartDDTest(lpDevice, hWnd, hInstance, IDS_DDOFFSCREEN_DESCRIPTION, IDS_DDOFFSCREEN_RESULT, 2);
|
||||||
StartDDTest(hWnd, hInstance, IDS_DDFULLSCREEN_DESCRIPTION, IDS_DDFULLSCREEN_RESULT, 3);
|
StartDDTest(lpDevice, hWnd, hInstance, IDS_DDFULLSCREEN_DESCRIPTION, IDS_DDFULLSCREEN_RESULT, 3);
|
||||||
|
|
||||||
DestroyWindow(hWnd);
|
DestroyWindow(hWnd);
|
||||||
UnregisterClass(winClass.lpszClassName, hInstance);
|
UnregisterClass(winClass.lpszClassName, hInstance);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL DDPrimarySurfaceTest(HWND hWnd){
|
BOOL DDPrimarySurfaceTest(GUID *lpDevice, HWND hWnd){
|
||||||
UINT TimerID;
|
UINT TimerID;
|
||||||
MSG msg;
|
MSG msg;
|
||||||
|
|
||||||
@@ -121,7 +121,7 @@ BOOL DDPrimarySurfaceTest(HWND hWnd){
|
|||||||
LPDIRECTDRAWSURFACE lpDDSurface = NULL;
|
LPDIRECTDRAWSURFACE lpDDSurface = NULL;
|
||||||
DDSURFACEDESC DDSurfaceDesc;
|
DDSURFACEDESC DDSurfaceDesc;
|
||||||
|
|
||||||
if(DirectDrawCreate(NULL, &lpDD, NULL) != DD_OK)
|
if(DirectDrawCreate(lpDevice, &lpDD, NULL) != DD_OK)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if(lpDD->lpVtbl->SetCooperativeLevel(lpDD, hWnd, DDSCL_NORMAL) != DD_OK)
|
if(lpDD->lpVtbl->SetCooperativeLevel(lpDD, hWnd, DDSCL_NORMAL) != DD_OK)
|
||||||
@@ -197,7 +197,7 @@ VOID DDRedrawFrame(LPDIRECTDRAWSURFACE lpDDSurface)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BOOL DDOffscreenBufferTest(HWND hWnd, BOOL Fullscreen){
|
BOOL DDOffscreenBufferTest(GUID *lpDevice, HWND hWnd, BOOL Fullscreen){
|
||||||
UINT_PTR TimerID, TimerIDUpdate;
|
UINT_PTR TimerID, TimerIDUpdate;
|
||||||
LPDIRECTDRAW lpDD;
|
LPDIRECTDRAW lpDD;
|
||||||
LPDIRECTDRAWSURFACE lpDDPrimarySurface;
|
LPDIRECTDRAWSURFACE lpDDPrimarySurface;
|
||||||
@@ -210,7 +210,7 @@ BOOL DDOffscreenBufferTest(HWND hWnd, BOOL Fullscreen){
|
|||||||
POINT wndPoint;
|
POINT wndPoint;
|
||||||
INT posX = 0, posY = 10, xGain = DD_SQUARE_STEP, yGain = DD_SQUARE_STEP;
|
INT posX = 0, posY = 10, xGain = DD_SQUARE_STEP, yGain = DD_SQUARE_STEP;
|
||||||
|
|
||||||
if(DirectDrawCreate(NULL, &lpDD, NULL) != DD_OK)
|
if(DirectDrawCreate(lpDevice, &lpDD, NULL) != DD_OK)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
ZeroMemory(&DDSurfaceDesc, sizeof(DDSurfaceDesc));
|
ZeroMemory(&DDSurfaceDesc, sizeof(DDSurfaceDesc));
|
||||||
|
@@ -305,56 +305,89 @@ InitializeDialog(HWND hwndDlg, PDISPLAY_DEVICEW pDispDevice)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitializeDisplayAdapters(PDXDIAG_CONTEXT pContext)
|
|
||||||
|
static BOOL WINAPI
|
||||||
|
DDEnumerateCallback(
|
||||||
|
IN GUID *lpGuid,
|
||||||
|
IN LPSTR lpDriverName,
|
||||||
|
IN LPSTR lpDriverDescription,
|
||||||
|
IN LPVOID lpContext,
|
||||||
|
IN HMONITOR hMonitor)
|
||||||
{
|
{
|
||||||
DISPLAY_DEVICEW DispDevice;
|
DISPLAY_DEVICEW DispDevice;
|
||||||
HWND * hDlgs;
|
LPWSTR lpDriverDescriptionW;
|
||||||
|
PDXDIAG_CONTEXT pContext = lpContext;
|
||||||
|
PDXDIAG_DISPLAY *pDisplayAdapters;
|
||||||
|
PDXDIAG_DISPLAY pDisplayAdapter;
|
||||||
HWND hwndDlg;
|
HWND hwndDlg;
|
||||||
WCHAR szDisplay[20];
|
WCHAR szDisplay[20];
|
||||||
WCHAR szText[30];
|
WCHAR szText[30];
|
||||||
DWORD dwOffset = 0;
|
int len;
|
||||||
|
BOOL ret;
|
||||||
|
|
||||||
while(TRUE)
|
/* Convert lpDriverDescription to WCHAR */
|
||||||
|
len = MultiByteToWideChar(CP_ACP, 0, lpDriverDescription, strlen(lpDriverDescription), NULL, 0);
|
||||||
|
if (!len)
|
||||||
|
return FALSE;
|
||||||
|
lpDriverDescriptionW = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR));
|
||||||
|
if (!lpDriverDescriptionW)
|
||||||
|
return FALSE;
|
||||||
|
MultiByteToWideChar(CP_ACP, 0, lpDriverDescription, strlen(lpDriverDescription), lpDriverDescriptionW, len);
|
||||||
|
lpDriverDescriptionW[len] = UNICODE_NULL;
|
||||||
|
|
||||||
|
/* Get associated display device */
|
||||||
|
ZeroMemory(&DispDevice, sizeof(DispDevice));
|
||||||
|
DispDevice.cb = sizeof(DispDevice);
|
||||||
|
ret = EnumDisplayDevicesW(lpDriverDescriptionW, 0, &DispDevice, 0);
|
||||||
|
HeapFree(GetProcessHeap(), 0, lpDriverDescriptionW);
|
||||||
|
if (!ret)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
pDisplayAdapter = HeapAlloc(GetProcessHeap(), 0, sizeof(DXDIAG_DISPLAY));
|
||||||
|
if (!pDisplayAdapter)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (pContext->NumDisplayAdapter)
|
||||||
|
pDisplayAdapters = HeapReAlloc(GetProcessHeap(), 0, pContext->DisplayAdapters, (pContext->NumDisplayAdapter + 1) * sizeof(PDXDIAG_DISPLAY));
|
||||||
|
else
|
||||||
|
pDisplayAdapters = HeapAlloc(GetProcessHeap(), 0, (pContext->NumDisplayAdapter + 1) * sizeof(PDXDIAG_DISPLAY));
|
||||||
|
|
||||||
|
if (!pDisplayAdapters)
|
||||||
{
|
{
|
||||||
ZeroMemory(&DispDevice, sizeof(DISPLAY_DEVICEW));
|
HeapFree(GetProcessHeap(), 0, pDisplayAdapter);
|
||||||
DispDevice.cb = sizeof(DISPLAY_DEVICEW);
|
return FALSE;
|
||||||
if (!EnumDisplayDevicesW(NULL, pContext->NumDisplayAdapter + dwOffset, &DispDevice, 0))
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* skip devices not attached to the desktop and mirror drivers */
|
|
||||||
if (!(DispDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) || (DispDevice.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER))
|
|
||||||
{
|
|
||||||
dwOffset++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (pContext->NumDisplayAdapter)
|
|
||||||
hDlgs = HeapReAlloc(GetProcessHeap(), 0, pContext->hDisplayWnd, (pContext->NumDisplayAdapter + 1) * sizeof(HWND));
|
|
||||||
else
|
|
||||||
hDlgs = HeapAlloc(GetProcessHeap(), 0, (pContext->NumDisplayAdapter + 1) * sizeof(HWND));
|
|
||||||
|
|
||||||
if (!hDlgs)
|
|
||||||
break;
|
|
||||||
|
|
||||||
pContext->hDisplayWnd = hDlgs;
|
|
||||||
hwndDlg = CreateDialogParamW(hInst, MAKEINTRESOURCEW(IDD_DISPLAY_DIALOG), pContext->hMainDialog, DisplayPageWndProc, (LPARAM)pContext); EnableDialogTheme(hwndDlg);
|
|
||||||
if (!hwndDlg)
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* initialize the dialog */
|
|
||||||
InitializeDialog(hwndDlg, &DispDevice);
|
|
||||||
|
|
||||||
szDisplay[0] = L'\0';
|
|
||||||
LoadStringW(hInst, IDS_DISPLAY_DIALOG, szDisplay, sizeof(szDisplay)/sizeof(WCHAR));
|
|
||||||
szDisplay[(sizeof(szDisplay)/sizeof(WCHAR))-1] = L'\0';
|
|
||||||
|
|
||||||
wsprintfW (szText, L"%s %u", szDisplay, pContext->NumDisplayAdapter + 1);
|
|
||||||
InsertTabCtrlItem(GetDlgItem(pContext->hMainDialog, IDC_TAB_CONTROL), pContext->NumDisplayAdapter + 1, szText);
|
|
||||||
|
|
||||||
hDlgs[pContext->NumDisplayAdapter] = hwndDlg;
|
|
||||||
pContext->NumDisplayAdapter++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pContext->DisplayAdapters = pDisplayAdapters;
|
||||||
|
hwndDlg = CreateDialogParamW(hInst, MAKEINTRESOURCEW(IDD_DISPLAY_DIALOG), pContext->hMainDialog, DisplayPageWndProc, (LPARAM)pDisplayAdapter);
|
||||||
|
EnableDialogTheme(hwndDlg);
|
||||||
|
if (!hwndDlg)
|
||||||
|
{
|
||||||
|
HeapFree(GetProcessHeap(), 0, pDisplayAdapter);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* initialize the dialog */
|
||||||
|
InitializeDialog(hwndDlg, &DispDevice);
|
||||||
|
|
||||||
|
szDisplay[0] = UNICODE_NULL;
|
||||||
|
LoadStringW(hInst, IDS_DISPLAY_DIALOG, szDisplay, ARRAYSIZE(szDisplay));
|
||||||
|
szDisplay[ARRAYSIZE(szDisplay) - 1] = UNICODE_NULL;
|
||||||
|
|
||||||
|
wsprintfW(szText, L"%s %u", szDisplay, pContext->NumDisplayAdapter + 1);
|
||||||
|
InsertTabCtrlItem(GetDlgItem(pContext->hMainDialog, IDC_TAB_CONTROL), pContext->NumDisplayAdapter + 1, szText);
|
||||||
|
|
||||||
|
pDisplayAdapter->hDisplayWnd = hwndDlg;
|
||||||
|
if (lpGuid)
|
||||||
|
pDisplayAdapter->guid = *lpGuid;
|
||||||
|
pContext->DisplayAdapters[pContext->NumDisplayAdapter++] = pDisplayAdapter;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void InitializeDisplayAdapters(PDXDIAG_CONTEXT pContext)
|
||||||
|
{
|
||||||
|
DirectDrawEnumerateExA(DDEnumerateCallback, pContext, DDENUM_ATTACHEDSECONDARYDEVICES);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -362,13 +395,14 @@ INT_PTR CALLBACK
|
|||||||
DisplayPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
DisplayPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
RECT rect;
|
RECT rect;
|
||||||
PDXDIAG_CONTEXT pContext = (PDXDIAG_CONTEXT)GetWindowLongPtr(hDlg, DWLP_USER);
|
HWND hMainDialog;
|
||||||
|
PDXDIAG_DISPLAY pDisplay = (PDXDIAG_DISPLAY)GetWindowLongPtr(hDlg, DWLP_USER);
|
||||||
switch (message)
|
switch (message)
|
||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
{
|
{
|
||||||
pContext = (PDXDIAG_CONTEXT) lParam;
|
pDisplay = (PDXDIAG_DISPLAY) lParam;
|
||||||
SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)pContext);
|
SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)pDisplay);
|
||||||
SetWindowPos(hDlg, NULL, 10, 32, 0, 0, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
|
SetWindowPos(hDlg, NULL, 10, 32, 0, 0, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@@ -378,13 +412,14 @@ DisplayPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
{
|
{
|
||||||
case IDC_BUTTON_TESTDD:
|
case IDC_BUTTON_TESTDD:
|
||||||
case IDC_BUTTON_TEST3D:
|
case IDC_BUTTON_TEST3D:
|
||||||
GetWindowRect(pContext->hMainDialog, &rect);
|
hMainDialog = GetWindow(hDlg, GW_OWNER);
|
||||||
|
GetWindowRect(hMainDialog, &rect);
|
||||||
/* FIXME log result errors */
|
/* FIXME log result errors */
|
||||||
if (IDC_BUTTON_TESTDD == LOWORD(wParam))
|
if (IDC_BUTTON_TESTDD == LOWORD(wParam))
|
||||||
DDTests();
|
DDTests(&pDisplay->guid);
|
||||||
else if (IDC_BUTTON_TEST3D == LOWORD(wParam))
|
else if (IDC_BUTTON_TEST3D == LOWORD(wParam))
|
||||||
D3DTests();
|
D3DTests(&pDisplay->guid);
|
||||||
SetWindowPos(pContext->hMainDialog, NULL, rect.left, rect.top, rect.right, rect.bottom, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
|
SetWindowPos(hMainDialog, NULL, rect.left, rect.top, rect.right, rect.bottom, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@@ -84,8 +84,8 @@ DestroyTabCtrlDialogs(PDXDIAG_CONTEXT pContext)
|
|||||||
/* destroy display dialogs */
|
/* destroy display dialogs */
|
||||||
for(Index = 0; Index < pContext->NumDisplayAdapter; Index++)
|
for(Index = 0; Index < pContext->NumDisplayAdapter; Index++)
|
||||||
{
|
{
|
||||||
if (pContext->hDisplayWnd[Index])
|
if (pContext->DisplayAdapters[Index]->hDisplayWnd)
|
||||||
DestroyWindow(pContext->hDisplayWnd[Index]);
|
DestroyWindow(pContext->DisplayAdapters[Index]->hDisplayWnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* destroy audio dialogs */
|
/* destroy audio dialogs */
|
||||||
@@ -142,7 +142,7 @@ TabCtrl_OnSelChange(PDXDIAG_CONTEXT pContext)
|
|||||||
ShowWindow(pContext->hDialogs[Index], SW_HIDE);
|
ShowWindow(pContext->hDialogs[Index], SW_HIDE);
|
||||||
|
|
||||||
for(Index = 0; Index < pContext->NumDisplayAdapter; Index++)
|
for(Index = 0; Index < pContext->NumDisplayAdapter; Index++)
|
||||||
ShowWindow(pContext->hDisplayWnd[Index], SW_HIDE);
|
ShowWindow(pContext->DisplayAdapters[Index]->hDisplayWnd, SW_HIDE);
|
||||||
|
|
||||||
for(Index = 0; Index < pContext->NumSoundAdapter; Index++)
|
for(Index = 0; Index < pContext->NumSoundAdapter; Index++)
|
||||||
ShowWindow(pContext->hSoundWnd[Index], SW_HIDE);
|
ShowWindow(pContext->hSoundWnd[Index], SW_HIDE);
|
||||||
@@ -158,7 +158,7 @@ TabCtrl_OnSelChange(PDXDIAG_CONTEXT pContext)
|
|||||||
|
|
||||||
if (CurSel -1 < pContext->NumDisplayAdapter)
|
if (CurSel -1 < pContext->NumDisplayAdapter)
|
||||||
{
|
{
|
||||||
ShowWindow(pContext->hDisplayWnd[CurSel-1], SW_SHOW);
|
ShowWindow(pContext->DisplayAdapters[CurSel-1]->hDisplayWnd, SW_SHOW);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -42,7 +42,7 @@ BEGIN
|
|||||||
EDITTEXT IDC_STATIC_MEM, 155, 130, 210, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
EDITTEXT IDC_STATIC_MEM, 155, 130, 210, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||||
EDITTEXT IDC_STATIC_SWAP, 155, 140, 210, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
EDITTEXT IDC_STATIC_SWAP, 155, 140, 210, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||||
EDITTEXT IDC_STATIC_VERSION, 155, 150, 210, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
EDITTEXT IDC_STATIC_VERSION, 155, 150, 210, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||||
CHECKBOX "Check for WHQL digital signatures", IDC_WHQL_SIGN_CHECK, 15, 170, 135, 10, WS_DISABLED
|
CHECKBOX "WHQL デジタル署名を確認する", IDC_WHQL_SIGN_CHECK, 15, 170, 135, 10, WS_DISABLED
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_DISPLAY_DIALOG DIALOGEX 0, 0, 462, 220
|
IDD_DISPLAY_DIALOG DIALOGEX 0, 0, 462, 220
|
||||||
@@ -127,7 +127,7 @@ BEGIN
|
|||||||
EDITTEXT IDC_STATIC_ADAPTER_PROVIDER, 335, 60, 100, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
EDITTEXT IDC_STATIC_ADAPTER_PROVIDER, 335, 60, 100, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||||
GROUPBOX "ReactX の機能", IDC_STATIC, 5, 97, 452, 70
|
GROUPBOX "ReactX の機能", IDC_STATIC, 5, 97, 452, 70
|
||||||
CONTROL "", IDC_SLIDER_DSOUND, "msctls_trackbar32", TBS_BOTTOM | TBS_AUTOTICKS | WS_TABSTOP, 110, 125, 80, 17
|
CONTROL "", IDC_SLIDER_DSOUND, "msctls_trackbar32", TBS_BOTTOM | TBS_AUTOTICKS | WS_TABSTOP, 110, 125, 80, 17
|
||||||
RTEXT "Hardware Sound\nAcceleration Level:", IDC_STATIC, 10, 125, 90, 20, WS_DISABLED
|
RTEXT "ハードウェア音声\n加速レベル:", IDC_STATIC, 10, 125, 90, 20, WS_DISABLED
|
||||||
PUSHBUTTON "DirectSound のテスト", IDC_BUTTON_TESTDSOUND, 270, 125, 80, 14, WS_DISABLED
|
PUSHBUTTON "DirectSound のテスト", IDC_BUTTON_TESTDSOUND, 270, 125, 80, 14, WS_DISABLED
|
||||||
GROUPBOX "注意", IDC_STATIC, 5, 170, 452, 50
|
GROUPBOX "注意", IDC_STATIC, 5, 170, 452, 50
|
||||||
EDITTEXT IDC_TEXT_DSOUNDINFO, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
|
EDITTEXT IDC_TEXT_DSOUNDINFO, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
|
||||||
@@ -137,17 +137,17 @@ IDD_MUSIC_DIALOG DIALOGEX 0, 0, 462, 220
|
|||||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||||
FONT 9, "MS UI Gothic"
|
FONT 9, "MS UI Gothic"
|
||||||
BEGIN
|
BEGIN
|
||||||
RTEXT "General MIDI DLS Collection:", IDC_STATIC, 0, 0, 100, 10
|
RTEXT "General MIDI DLS コレクション:", IDC_STATIC, 0, 0, 100, 10
|
||||||
EDITTEXT IDC_MIDI_DLS_COLLECTION, 105, 0, 250, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
EDITTEXT IDC_MIDI_DLS_COLLECTION, 105, 0, 250, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||||
GROUPBOX "Music Ports", IDC_STATIC, 5, 10, 452, 85
|
GROUPBOX "音楽ポート", IDC_STATIC, 5, 10, 452, 85
|
||||||
GROUPBOX "ReactX Features", IDC_STATIC, 5, 97, 452, 70
|
GROUPBOX "ReactXの機能", IDC_STATIC, 5, 97, 452, 70
|
||||||
LTEXT "Default Port Acceleration:", IDC_STATIC, 15, 120, 95, 17
|
LTEXT "デフォルトのポート高速化:", IDC_STATIC, 15, 120, 95, 17
|
||||||
LTEXT "", IDC_STATIC_DEFAULT_PORT_ACCELERATION, 115, 120, 50, 10
|
LTEXT "", IDC_STATIC_DEFAULT_PORT_ACCELERATION, 115, 120, 50, 10
|
||||||
PUSHBUTTON "Disable", IDC_BUTTON_DISABLEDMUSIC, 75, 135, 80, 14, WS_DISABLED
|
PUSHBUTTON "無効にする", IDC_BUTTON_DISABLEDMUSIC, 75, 135, 80, 14, WS_DISABLED
|
||||||
LTEXT "Test using this port:", IDC_STATIC, 180, 105, 100, 10
|
LTEXT "このポートを使用してテストします:", IDC_STATIC, 180, 105, 100, 10
|
||||||
LISTBOX IDC_DMUSIC_TEST_LIST, 180, 115, 180, 45, LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | WS_TABSTOP
|
LISTBOX IDC_DMUSIC_TEST_LIST, 180, 115, 180, 45, LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | WS_TABSTOP
|
||||||
PUSHBUTTON "Test DirectMusic", IDC_BUTTON_TESTDMUSIC, 370, 145, 80, 14, WS_DISABLED
|
PUSHBUTTON "DirectMusic をテストする", IDC_BUTTON_TESTDMUSIC, 370, 145, 80, 14, WS_DISABLED
|
||||||
GROUPBOX "Notes", IDC_STATIC, 5, 170, 452, 50
|
GROUPBOX "注記", IDC_STATIC, 5, 170, 452, 50
|
||||||
EDITTEXT IDC_MUSIC_NOTES, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
|
EDITTEXT IDC_MUSIC_NOTES, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
|
||||||
END
|
END
|
||||||
|
|
||||||
@@ -170,11 +170,11 @@ FONT 9, "MS UI Gothic"
|
|||||||
BEGIN
|
BEGIN
|
||||||
GROUPBOX "登録済み DirectPlay サービス プロバイダ", IDC_STATIC, 5, 0, 452, 75
|
GROUPBOX "登録済み DirectPlay サービス プロバイダ", IDC_STATIC, 5, 0, 452, 75
|
||||||
CONTROL "", IDC_LIST_PROVIDER, "SysListView32", LVS_REPORT | WS_CHILD | WS_BORDER | WS_TABSTOP, 15, 12, 432, 55
|
CONTROL "", IDC_LIST_PROVIDER, "SysListView32", LVS_REPORT | WS_CHILD | WS_BORDER | WS_TABSTOP, 15, 12, 432, 55
|
||||||
GROUPBOX "Registered Lobbyable DirectPlay Applications", IDC_STATIC, 5, 77, 452, 55
|
GROUPBOX "登録済みのロビー可能な DirectPlay アプリ", IDC_STATIC, 5, 77, 452, 55
|
||||||
GROUPBOX "ReactX Features", IDC_STATIC, 5, 133, 452, 35
|
GROUPBOX "ReactX の機能", IDC_STATIC, 5, 133, 452, 35
|
||||||
PUSHBUTTON "DirectPlay Voice Options", IDC_BUTTON_VOICE_OPTIONS, 10, 145, 90, 14, WS_DISABLED
|
PUSHBUTTON "DirectPlay 音声オプション", IDC_BUTTON_VOICE_OPTIONS, 10, 145, 90, 14, WS_DISABLED
|
||||||
PUSHBUTTON "Test DirectPlay", IDC_BUTTON_TESTDPLAY, 130, 145, 80, 14, WS_DISABLED
|
PUSHBUTTON "DirectPlay をテストする", IDC_BUTTON_TESTDPLAY, 130, 145, 80, 14, WS_DISABLED
|
||||||
GROUPBOX "Notes", IDC_STATIC, 5, 170, 452, 50
|
GROUPBOX "注記", IDC_STATIC, 5, 170, 452, 50
|
||||||
EDITTEXT IDC_NETWORK_NOTES, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
|
EDITTEXT IDC_NETWORK_NOTES, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
|
||||||
END
|
END
|
||||||
|
|
||||||
@@ -182,11 +182,11 @@ IDD_HELP_DIALOG DIALOGEX 0, 0, 462, 220
|
|||||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||||
FONT 9, "MS UI Gothic"
|
FONT 9, "MS UI Gothic"
|
||||||
BEGIN
|
BEGIN
|
||||||
LTEXT "Still can't find the information you're looking for? Here are some additional things you can do:", IDC_STATIC, 5, 0, 300, 10
|
LTEXT "探している情報がまだ見つかりませんか? 以下の方法をお試しください。", IDC_STATIC, 5, 0, 300, 10
|
||||||
PUSHBUTTON "System Information", IDC_BUTTON_SYSINFO, 5, 20, 80, 14, WS_DISABLED
|
PUSHBUTTON "システム情報", IDC_BUTTON_SYSINFO, 5, 20, 80, 14, WS_DISABLED
|
||||||
LTEXT "Displays additional system information", IDC_STATIC, 90, 23, 300, 10
|
LTEXT "追加のシステム情報を表示します", IDC_STATIC, 90, 23, 300, 10
|
||||||
PUSHBUTTON "Refresh Rate Override", IDC_BUTTON_DDRAW_REFRESH, 5, 40, 80, 14, WS_DISABLED
|
PUSHBUTTON "リフレッシュ レートのオーバーライド", IDC_BUTTON_DDRAW_REFRESH, 5, 40, 80, 14, WS_DISABLED
|
||||||
LTEXT "Overrides the Refresh Rate for DirectDraw", IDC_STATIC, 90, 43, 300, 10
|
LTEXT "DirectDrawのリフレッシュ レートを上書きします", IDC_STATIC, 90, 43, 300, 10
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
@@ -238,17 +238,17 @@ BEGIN
|
|||||||
IDS_DDFULLSCREEN_DESCRIPTION "このテストでは、DirectDraw を使って全画面表示モードで描画します。移動している白い矩形が描画されます。続行しますか?"
|
IDS_DDFULLSCREEN_DESCRIPTION "このテストでは、DirectDraw を使って全画面表示モードで描画します。移動している白い矩形が描画されます。続行しますか?"
|
||||||
IDS_DDFULLSCREEN_RESULT "全画面表示モードで移動している白い矩形が見えましたか?"
|
IDS_DDFULLSCREEN_RESULT "全画面表示モードで移動している白い矩形が見えましたか?"
|
||||||
IDS_FORMAT_ADAPTER_MEM "%u MB"
|
IDS_FORMAT_ADAPTER_MEM "%u MB"
|
||||||
IDS_FORMAT_ADAPTER_MODE "%d x %d (%u bit)(%uHz)"
|
IDS_FORMAT_ADAPTER_MODE "%d x %d (%u ビット) (%uHz)"
|
||||||
IDS_OPTION_NO "いいえ"
|
IDS_OPTION_NO "いいえ"
|
||||||
IDS_D3DTEST_DESCRIPTION "Direct3D インタフェーステストを開始しようとしています。続行しますか?"
|
IDS_D3DTEST_DESCRIPTION "Direct3D インタフェーステストを開始しようとしています。続行しますか?"
|
||||||
IDS_D3DTEST_D3Dx "このテストはハードウェア アクセラーレータ Direct3D %u インターフェイスを使います。"
|
IDS_D3DTEST_D3Dx "このテストはハードウェア アクセラーレータ Direct3D %u インターフェイスを使います。"
|
||||||
IDS_OS_VERSION "%s %s (%d.%d, Build %d)"
|
IDS_OS_VERSION "%s %s (%d.%d, ビルド %d)"
|
||||||
IDS_DMUSIC_DESC "Description"
|
IDS_DMUSIC_DESC "説明"
|
||||||
IDS_DMUSIC_TYPE "Type"
|
IDS_DMUSIC_TYPE "種類"
|
||||||
IDS_DMUSIC_KERNEL "Kernel Mode"
|
IDS_DMUSIC_KERNEL "カーネル モード"
|
||||||
IDS_DMUSIC_IO "In/Out"
|
IDS_DMUSIC_IO "入出力"
|
||||||
IDS_DMUSIC_DLS "Supports DLS"
|
IDS_DMUSIC_DLS "DLS をサポート"
|
||||||
IDS_DMUSIC_EXT "External"
|
IDS_DMUSIC_EXT "外部"
|
||||||
IDS_DMUSIC_PORT "Default Port"
|
IDS_DMUSIC_PORT "デフォルトのポート"
|
||||||
IDS_DDDISABLE_MSG "This will disable all hardware acceleration for DirectDraw on all display devices.\nDo you wish to continue?\n"
|
IDS_DDDISABLE_MSG "これにより、すべてのディスプレイ デバイス上の DirectDraw のすべてのハードウェア アクセラレーションが無効になります。\n続行しますか?\n"
|
||||||
END
|
END
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||||
* PURPOSE: Romanian resource file
|
* PURPOSE: Romanian resource file
|
||||||
* TRANSLATORS: Copyright 2011-2019 Ștefan Fulea <stefan.fulea@mail.com>
|
* TRANSLATORS: Copyright 2011-2019 Ștefan Fulea <stefan.fulea@mail.com>
|
||||||
* Copyright 2023 Andrei Miloiu <miloiuandrei@gmail.com>
|
* Copyright 2023-2025 Andrei Miloiu <miloiuandrei@gmail.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
|
LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
|
||||||
@@ -11,22 +11,22 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
|
|||||||
IDD_MAIN_DIALOG DIALOGEX 0, 0, 478, 280
|
IDD_MAIN_DIALOG DIALOGEX 0, 0, 478, 280
|
||||||
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP |
|
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP |
|
||||||
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU
|
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Diagnostic ReactX"
|
CAPTION "Instrument de diagnosticare ReactX"
|
||||||
FONT 8, "MS Shell Dlg"
|
FONT 8, "MS Shell Dlg"
|
||||||
BEGIN
|
BEGIN
|
||||||
CONTROL "Tab1", IDC_TAB_CONTROL, "SysTabControl32", WS_TABSTOP, 2, 2, 474, 250
|
CONTROL "Tab1", IDC_TAB_CONTROL, "SysTabControl32", WS_TABSTOP, 2, 2, 474, 250
|
||||||
PUSHBUTTON "&Manual…", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
|
PUSHBUTTON "&Ajutor", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
|
||||||
DEFPUSHBUTTON "&Următorul compartiment", IDC_BUTTON_NEXT, 187, 260, 120, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
DEFPUSHBUTTON "&Pagina următoare", IDC_BUTTON_NEXT, 187, 260, 120, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||||
PUSHBUTTON "S&alvare informații…", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
|
PUSHBUTTON "&Salvare a tuturor informațiilor…", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
|
||||||
PUSHBUTTON "Î&nchide", IDC_BUTTON_EXIT, 425, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
PUSHBUTTON "Î&nchidere", IDC_BUTTON_EXIT, 425, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_SYSTEM_DIALOG DIALOGEX 0, 0, 462, 220
|
IDD_SYSTEM_DIALOG DIALOGEX 0, 0, 462, 220
|
||||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||||
FONT 8, "MS Shell Dlg"
|
FONT 8, "MS Shell Dlg"
|
||||||
BEGIN
|
BEGIN
|
||||||
LTEXT "Acest instrument oferă informații detaliate despre componentele ReactX și drivere instalate în sistem.", IDC_STATIC, 5, 0, 443, 17
|
LTEXT "Acest instrument raportează informații detaliate despre componentele ReactX și driverele instalate pe sistem.", IDC_STATIC, 5, 0, 443, 17
|
||||||
LTEXT "Dacă aveți la cunoștință careva probleme la o anumită categorie, mergeți la compartimentul corespunzător de mai sus. Altfel, puteți utiliza butonul „Următorul compartiment” de mai jos pentru a trece secvențial prin fiecare categorie.", IDC_STATIC, 5, 15, 443, 25
|
LTEXT "Dacă întâmpinați o problemă cu ReactX și știți ce este, atunci faceți clic pe fila corespunzătoare de mai sus. Dacă nu, puteți face clic pe butonul ""Pagina următoare"" de mai jos pentru a vizita fiecare pagină în succesiune.", IDC_STATIC, 5, 15, 443, 25
|
||||||
GROUPBOX "Informații despre sistem", IDC_STATIC, 5, 35, 452, 150, SS_RIGHT
|
GROUPBOX "Informații despre sistem", IDC_STATIC, 5, 35, 452, 150, SS_RIGHT
|
||||||
LTEXT "Data/Ora curentă:", IDC_STATIC, 70, 50, 80, 10, SS_RIGHT
|
LTEXT "Data/Ora curentă:", IDC_STATIC, 70, 50, 80, 10, SS_RIGHT
|
||||||
LTEXT "Numele calculatorului:", IDC_STATIC, 70, 60, 80, 10, SS_RIGHT
|
LTEXT "Numele calculatorului:", IDC_STATIC, 70, 60, 80, 10, SS_RIGHT
|
||||||
@@ -60,11 +60,11 @@ BEGIN
|
|||||||
GROUPBOX "Dispozitiv", IDC_STATIC, 5, 0, 250, 95
|
GROUPBOX "Dispozitiv", IDC_STATIC, 5, 0, 250, 95
|
||||||
RTEXT "Nume:", IDC_STATIC, 20, 10, 70, 10
|
RTEXT "Nume:", IDC_STATIC, 20, 10, 70, 10
|
||||||
RTEXT "Producător:", IDC_STATIC, 20, 20, 70, 10
|
RTEXT "Producător:", IDC_STATIC, 20, 20, 70, 10
|
||||||
RTEXT "Tipul cipului:", IDC_STATIC, 20, 30, 70, 10
|
RTEXT "Tipul chip-ului:", IDC_STATIC, 20, 30, 70, 10
|
||||||
RTEXT "Tipul CDA:", IDC_STATIC, 20, 40, 70, 10
|
RTEXT "Tipul DAC:", IDC_STATIC, 20, 40, 70, 10
|
||||||
RTEXT "Memorie aprox.:", IDC_STATIC, 20, 50, 70, 10
|
RTEXT "Mem. tot. aprox.:", IDC_STATIC, 20, 50, 70, 10
|
||||||
RTEXT "Afișare curentă:", IDC_STATIC, 20, 60, 70, 10
|
RTEXT "Mod afișare curentă:", IDC_STATIC, 20, 60, 70, 10
|
||||||
RTEXT "Ecran:", IDC_STATIC, 20, 70, 70, 10
|
RTEXT "Monitor:", IDC_STATIC, 20, 70, 70, 10
|
||||||
EDITTEXT IDC_STATIC_ADAPTER_ID, 95, 10, 150, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
EDITTEXT IDC_STATIC_ADAPTER_ID, 95, 10, 150, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||||
EDITTEXT IDC_STATIC_ADAPTER_VENDOR, 95, 20, 150, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
EDITTEXT IDC_STATIC_ADAPTER_VENDOR, 95, 20, 150, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||||
EDITTEXT IDC_STATIC_ADAPTER_CHIP, 95, 30, 150, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
EDITTEXT IDC_STATIC_ADAPTER_CHIP, 95, 30, 150, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||||
@@ -73,10 +73,10 @@ BEGIN
|
|||||||
EDITTEXT IDC_STATIC_ADAPTER_MODE, 95, 60, 150, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
EDITTEXT IDC_STATIC_ADAPTER_MODE, 95, 60, 150, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||||
EDITTEXT IDC_STATIC_ADAPTER_MONITOR, 95, 70, 150, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
EDITTEXT IDC_STATIC_ADAPTER_MONITOR, 95, 70, 150, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||||
GROUPBOX "Driver", IDC_STATIC, 260, 0, 197, 95
|
GROUPBOX "Driver", IDC_STATIC, 260, 0, 197, 95
|
||||||
RTEXT "Driver primar:", IDC_STATIC, 275, 10, 55, 10
|
RTEXT "Driver principal:", IDC_STATIC, 275, 10, 55, 10
|
||||||
RTEXT "Versiune:", IDC_STATIC, 275, 20, 55, 10
|
RTEXT "Versiune:", IDC_STATIC, 275, 20, 55, 10
|
||||||
RTEXT "Dată:", IDC_STATIC, 275, 30, 55, 10
|
RTEXT "Dată:", IDC_STATIC, 275, 30, 55, 10
|
||||||
RTEXT "Semnăt. WHQL:", IDC_STATIC, 275, 40, 55, 10
|
RTEXT "Logo WHQL:", IDC_STATIC, 275, 40, 55, 10
|
||||||
RTEXT "Mini-VDD:", IDC_STATIC, 275, 50, 55, 10
|
RTEXT "Mini-VDD:", IDC_STATIC, 275, 50, 55, 10
|
||||||
RTEXT "VDD:", IDC_STATIC, 275, 60, 55, 10
|
RTEXT "VDD:", IDC_STATIC, 275, 60, 55, 10
|
||||||
RTEXT "Versiune DDI:", IDC_STATIC, 275, 70, 55, 10
|
RTEXT "Versiune DDI:", IDC_STATIC, 275, 70, 55, 10
|
||||||
@@ -87,18 +87,18 @@ BEGIN
|
|||||||
EDITTEXT IDC_STATIC_ADAPTER_MINIVDD, 335, 50, 120, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
EDITTEXT IDC_STATIC_ADAPTER_MINIVDD, 335, 50, 120, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||||
EDITTEXT IDC_STATIC_ADAPTER_VDD, 335, 60, 120, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
EDITTEXT IDC_STATIC_ADAPTER_VDD, 335, 60, 120, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||||
EDITTEXT IDC_STATIC_ADAPTER_DDI, 335, 70, 120, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
EDITTEXT IDC_STATIC_ADAPTER_DDI, 335, 70, 120, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||||
GROUPBOX "Funcționalități ReactX", IDC_STATIC, 5, 97, 452, 70
|
GROUPBOX "Caracteristici ReactX", IDC_STATIC, 5, 97, 452, 70
|
||||||
RTEXT "Accelerare DirectDraw:", IDC_STATIC, 15, 115, 110, 12
|
RTEXT "Accelerare DirectDraw:", IDC_STATIC, 15, 115, 110, 12
|
||||||
RTEXT "Accelerare Direct3D:", IDC_STATIC, 15, 130, 110, 12
|
RTEXT "Accelerare Direct3D:", IDC_STATIC, 15, 130, 110, 12
|
||||||
RTEXT "Accelerare Textură AGP:", IDC_STATIC, 15, 145, 110, 12
|
RTEXT "Accelerare a texturilor AGP:", IDC_STATIC, 15, 145, 110, 12
|
||||||
LTEXT "", IDC_STATIC_DDSTATE, 130, 115, 40, 10
|
LTEXT "", IDC_STATIC_DDSTATE, 130, 115, 40, 10
|
||||||
LTEXT "", IDC_STATIC_D3DSTATE, 130, 130, 40, 10
|
LTEXT "", IDC_STATIC_D3DSTATE, 130, 130, 40, 10
|
||||||
LTEXT "", IDC_STATIC_AGPSTATE, 130, 145, 40, 10
|
LTEXT "", IDC_STATIC_AGPSTATE, 130, 145, 40, 10
|
||||||
PUSHBUTTON "Activează", IDC_BUTTON_DDRAW, 170, 112, 60, 14, WS_DISABLED
|
PUSHBUTTON "Activare", IDC_BUTTON_DDRAW, 170, 112, 60, 14, WS_DISABLED
|
||||||
PUSHBUTTON "Activează", IDC_BUTTON_D3D, 170, 128, 60, 14, WS_DISABLED
|
PUSHBUTTON "Activare", IDC_BUTTON_D3D, 170, 128, 60, 14, WS_DISABLED
|
||||||
PUSHBUTTON "Activează", IDC_BUTTON_AGP, 170, 144, 60, 14, WS_DISABLED
|
PUSHBUTTON "Activare", IDC_BUTTON_AGP, 170, 144, 60, 14, WS_DISABLED
|
||||||
PUSHBUTTON "Testează DirectDraw", IDC_BUTTON_TESTDD, 250, 112, 80, 14
|
PUSHBUTTON "Testare DirectDraw", IDC_BUTTON_TESTDD, 250, 112, 80, 14
|
||||||
PUSHBUTTON "Testează Direct3D", IDC_BUTTON_TEST3D, 250, 128, 80, 14
|
PUSHBUTTON "Testare Direct3D", IDC_BUTTON_TEST3D, 250, 128, 80, 14
|
||||||
GROUPBOX "Note", IDC_STATIC, 5, 170, 452, 50
|
GROUPBOX "Note", IDC_STATIC, 5, 170, 452, 50
|
||||||
EDITTEXT IDC_TEXT_INFO, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
|
EDITTEXT IDC_TEXT_INFO, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
|
||||||
END
|
END
|
||||||
@@ -124,7 +124,7 @@ BEGIN
|
|||||||
RTEXT "Nume:", IDC_STATIC, 275, 10, 55, 10
|
RTEXT "Nume:", IDC_STATIC, 275, 10, 55, 10
|
||||||
RTEXT "Versiune:", IDC_STATIC, 275, 20, 55, 10
|
RTEXT "Versiune:", IDC_STATIC, 275, 20, 55, 10
|
||||||
RTEXT "Dată:", IDC_STATIC, 275, 30, 55, 10
|
RTEXT "Dată:", IDC_STATIC, 275, 30, 55, 10
|
||||||
RTEXT "Semnătură WHQL:", IDC_STATIC, 275, 40, 55, 10
|
RTEXT "Logo WHQL:", IDC_STATIC, 275, 40, 55, 10
|
||||||
RTEXT "Alte fișiere:", IDC_STATIC, 275, 50, 55, 10
|
RTEXT "Alte fișiere:", IDC_STATIC, 275, 50, 55, 10
|
||||||
RTEXT "Furnizor:", IDC_STATIC, 275, 60, 55, 10
|
RTEXT "Furnizor:", IDC_STATIC, 275, 60, 55, 10
|
||||||
EDITTEXT IDC_STATIC_DSOUND_DRIVER, 335, 10, 100, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
EDITTEXT IDC_STATIC_DSOUND_DRIVER, 335, 10, 100, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||||
@@ -133,10 +133,10 @@ BEGIN
|
|||||||
EDITTEXT IDC_STATIC_DSOUND_LOGO, 335, 40, 100, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
EDITTEXT IDC_STATIC_DSOUND_LOGO, 335, 40, 100, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||||
EDITTEXT IDC_STATIC_DSOUND_FILES, 335, 50, 100, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
EDITTEXT IDC_STATIC_DSOUND_FILES, 335, 50, 100, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||||
EDITTEXT IDC_STATIC_ADAPTER_PROVIDER, 335, 60, 100, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
EDITTEXT IDC_STATIC_ADAPTER_PROVIDER, 335, 60, 100, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||||
GROUPBOX "Funcționalități ReactX", IDC_STATIC, 5, 97, 452, 70
|
GROUPBOX "Caracteristici ReactX", IDC_STATIC, 5, 97, 452, 70
|
||||||
CONTROL "", IDC_SLIDER_DSOUND, "msctls_trackbar32", TBS_BOTTOM | TBS_AUTOTICKS | WS_TABSTOP, 110, 125, 80, 17
|
CONTROL "", IDC_SLIDER_DSOUND, "msctls_trackbar32", TBS_BOTTOM | TBS_AUTOTICKS | WS_TABSTOP, 110, 125, 80, 17
|
||||||
RTEXT "Echipament de sunet\nNivel de accelerare::", IDC_STATIC, 10, 125, 90, 20, WS_DISABLED
|
RTEXT "Hardware de sunet\nNivel de accelerare:", IDC_STATIC, 10, 125, 90, 20, WS_DISABLED
|
||||||
PUSHBUTTON "Testează DirectSound", IDC_BUTTON_TESTDSOUND, 270, 125, 80, 14, WS_DISABLED
|
PUSHBUTTON "Testare DirectSound", IDC_BUTTON_TESTDSOUND, 270, 125, 80, 14, WS_DISABLED
|
||||||
GROUPBOX "Note", IDC_STATIC, 5, 170, 452, 50
|
GROUPBOX "Note", IDC_STATIC, 5, 170, 452, 50
|
||||||
EDITTEXT IDC_TEXT_DSOUNDINFO, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
|
EDITTEXT IDC_TEXT_DSOUNDINFO, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
|
||||||
END
|
END
|
||||||
@@ -148,13 +148,13 @@ BEGIN
|
|||||||
RTEXT "Colecție de MIDI DLS generală:", IDC_STATIC, 0, 0, 100, 10
|
RTEXT "Colecție de MIDI DLS generală:", IDC_STATIC, 0, 0, 100, 10
|
||||||
EDITTEXT IDC_MIDI_DLS_COLLECTION, 105, 0, 250, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
EDITTEXT IDC_MIDI_DLS_COLLECTION, 105, 0, 250, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||||
GROUPBOX "Porturi de muzică", IDC_STATIC, 5, 10, 452, 85
|
GROUPBOX "Porturi de muzică", IDC_STATIC, 5, 10, 452, 85
|
||||||
GROUPBOX "Funcționalități ReactX", IDC_STATIC, 5, 97, 452, 70
|
GROUPBOX "Caracteristici ReactX", IDC_STATIC, 5, 97, 452, 70
|
||||||
LTEXT "Port de accelerare implicit:", IDC_STATIC, 15, 120, 95, 17
|
LTEXT "Port de accelerare implicit:", IDC_STATIC, 15, 120, 95, 17
|
||||||
LTEXT "", IDC_STATIC_DEFAULT_PORT_ACCELERATION, 115, 120, 50, 10
|
LTEXT "", IDC_STATIC_DEFAULT_PORT_ACCELERATION, 115, 120, 50, 10
|
||||||
PUSHBUTTON "Dezactivează", IDC_BUTTON_DISABLEDMUSIC, 75, 135, 80, 14, WS_DISABLED
|
PUSHBUTTON "Dezactivează", IDC_BUTTON_DISABLEDMUSIC, 75, 135, 80, 14, WS_DISABLED
|
||||||
LTEXT "Testare utilizare port:", IDC_STATIC, 180, 105, 100, 10
|
LTEXT "Testare utilizare port:", IDC_STATIC, 180, 105, 100, 10
|
||||||
LISTBOX IDC_DMUSIC_TEST_LIST, 180, 115, 180, 45, LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | WS_TABSTOP
|
LISTBOX IDC_DMUSIC_TEST_LIST, 180, 115, 180, 45, LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | WS_TABSTOP
|
||||||
PUSHBUTTON "Testează DirectMusic", IDC_BUTTON_TESTDMUSIC, 370, 145, 80, 14, WS_DISABLED
|
PUSHBUTTON "Testare DirectMusic", IDC_BUTTON_TESTDMUSIC, 370, 145, 80, 14, WS_DISABLED
|
||||||
GROUPBOX "Note", IDC_STATIC, 5, 170, 452, 50
|
GROUPBOX "Note", IDC_STATIC, 5, 170, 452, 50
|
||||||
EDITTEXT IDC_MUSIC_NOTES, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
|
EDITTEXT IDC_MUSIC_NOTES, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
|
||||||
END
|
END
|
||||||
@@ -176,12 +176,12 @@ IDD_NETWORK_DIALOG DIALOGEX 0, 0, 462, 220
|
|||||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||||
FONT 8, "MS Shell Dlg"
|
FONT 8, "MS Shell Dlg"
|
||||||
BEGIN
|
BEGIN
|
||||||
GROUPBOX "Furnizori înregistrați de servicii DirectPlay", IDC_STATIC, 5, 0, 452, 75
|
GROUPBOX "Furnizori de servicii DirectPlay înregistrați", IDC_STATIC, 5, 0, 452, 75
|
||||||
CONTROL "", IDC_LIST_PROVIDER, "SysListView32", LVS_REPORT | WS_CHILD | WS_BORDER | WS_TABSTOP, 15, 12, 432, 55
|
CONTROL "", IDC_LIST_PROVIDER, "SysListView32", LVS_REPORT | WS_CHILD | WS_BORDER | WS_TABSTOP, 15, 12, 432, 55
|
||||||
GROUPBOX "Aplicații înregistrate pentru DirectPlay", IDC_STATIC, 5, 77, 452, 55
|
GROUPBOX "Aplicații Lobbyable DirectPlay înregistrate", IDC_STATIC, 5, 77, 452, 55
|
||||||
GROUPBOX "Funcționalități ReactX", IDC_STATIC, 5, 133, 452, 35
|
GROUPBOX "Caracteristici ReactX", IDC_STATIC, 5, 133, 452, 35
|
||||||
PUSHBUTTON "Opțiuni de voce DirectPlay", IDC_BUTTON_VOICE_OPTIONS, 10, 145, 90, 14, WS_DISABLED
|
PUSHBUTTON "Opțiuni de voce DirectPlay", IDC_BUTTON_VOICE_OPTIONS, 10, 145, 90, 14, WS_DISABLED
|
||||||
PUSHBUTTON "Testează DirectPlay", IDC_BUTTON_TESTDPLAY, 130, 145, 80, 14, WS_DISABLED
|
PUSHBUTTON "Testare DirectPlay", IDC_BUTTON_TESTDPLAY, 130, 145, 80, 14, WS_DISABLED
|
||||||
GROUPBOX "Note", IDC_STATIC, 5, 170, 452, 50
|
GROUPBOX "Note", IDC_STATIC, 5, 170, 452, 50
|
||||||
EDITTEXT IDC_NETWORK_NOTES, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
|
EDITTEXT IDC_NETWORK_NOTES, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
|
||||||
END
|
END
|
||||||
@@ -190,73 +190,73 @@ IDD_HELP_DIALOG DIALOGEX 0, 0, 462, 220
|
|||||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||||
FONT 8, "MS Shell Dlg"
|
FONT 8, "MS Shell Dlg"
|
||||||
BEGIN
|
BEGIN
|
||||||
LTEXT "Încă nu ați găsit informația necesară? Iată câteva lucruri suplimentare pe care le puteți face:", IDC_STATIC, 5, 0, 300, 10
|
LTEXT "Încă nu găsiți informațiile pe care le căutați? Iată câteva lucruri suplimentare pe care le puteți face:", IDC_STATIC, 5, 0, 300, 10
|
||||||
PUSHBUTTON "Informații de sistem", IDC_BUTTON_SYSINFO, 5, 20, 80, 14, WS_DISABLED
|
PUSHBUTTON "Informații de sistem", IDC_BUTTON_SYSINFO, 5, 20, 80, 14, WS_DISABLED
|
||||||
LTEXT "Afișează informații suplimantare de sistem", IDC_STATIC, 90, 23, 300, 10
|
LTEXT "Afișează informații suplimentare de sistem", IDC_STATIC, 90, 23, 300, 10
|
||||||
PUSHBUTTON "Ajustează rata de împrospătare", IDC_BUTTON_DDRAW_REFRESH, 5, 40, 80, 14, WS_DISABLED
|
PUSHBUTTON "Ajust. rata de împrosp.", IDC_BUTTON_DDRAW_REFRESH, 5, 40, 80, 14, WS_DISABLED
|
||||||
LTEXT "Ajustează rata de împrospătare pentru DirectDraw", IDC_STATIC, 90, 43, 300, 10
|
LTEXT "Ignoră rata de reîmprospătare pentru DirectDraw", IDC_STATIC, 90, 43, 300, 10
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGTABLE
|
STRINGTABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
IDS_MAIN_DIALOG "Diagnostic ReactX"
|
IDS_MAIN_DIALOG "Instrument de diagnosticare ReactX"
|
||||||
IDS_SYSTEM_DIALOG "Sistem"
|
IDS_SYSTEM_DIALOG "Sistem"
|
||||||
IDS_DISPLAY_DIALOG "Ecran"
|
IDS_DISPLAY_DIALOG "Afișaj"
|
||||||
IDS_SOUND_DIALOG "Sunet"
|
IDS_SOUND_DIALOG "Sunet"
|
||||||
IDS_MUSIC_DIALOG "Muzică"
|
IDS_MUSIC_DIALOG "Muzică"
|
||||||
IDS_INPUT_DIALOG "Intrări"
|
IDS_INPUT_DIALOG "Intrare"
|
||||||
IDS_NETWORK_DIALOG "Rețea"
|
IDS_NETWORK_DIALOG "Rețea"
|
||||||
IDS_HELP_DIALOG "Asistență"
|
IDS_HELP_DIALOG "Ajutor"
|
||||||
IDS_FORMAT_MB "%I64u Mo memorie"
|
IDS_FORMAT_MB "%I64uMB de RAM"
|
||||||
IDS_FORMAT_SWAP "%I64u Mo utilizată, %I64u Mo disponibilă"
|
IDS_FORMAT_SWAP "%I64u (de) MB folosit (folosiți), %I64u (de) MB disponibil(i)"
|
||||||
IDS_FORMAT_UNIPROC "%s (%u procesor)"
|
IDS_FORMAT_UNIPROC "%s (%u CPU)"
|
||||||
IDS_FORMAT_MPPROC "%s (%u procesoare)"
|
IDS_FORMAT_MPPROC "%s (%u CPUs)"
|
||||||
IDS_VERSION_UNKNOWN "Versiune neidentificată"
|
IDS_VERSION_UNKNOWN "Versiune necunoscută"
|
||||||
IDS_DEVICE_STATUS_ATTACHED "Conectat"
|
IDS_DEVICE_STATUS_ATTACHED "Conectat"
|
||||||
IDS_DEVICE_STATUS_MISSING "Deconectat"
|
IDS_DEVICE_STATUS_MISSING "Deconectat"
|
||||||
IDS_DEVICE_STATUS_UNKNOWN "Neidentificat"
|
IDS_DEVICE_STATUS_UNKNOWN "Necunoscut"
|
||||||
IDS_DEVICE_NAME "Nume dispozitiv"
|
IDS_DEVICE_NAME "Numele dispozitivului"
|
||||||
IDS_DEVICE_STATUS "Stare"
|
IDS_DEVICE_STATUS "Stare"
|
||||||
IDS_DEVICE_CONTROLLER "ID controlor"
|
IDS_DEVICE_CONTROLLER "ID controller-ului"
|
||||||
IDS_DEVICE_MANUFACTURER "ID producător"
|
IDS_DEVICE_MANUFACTURER "ID-ul producătorului"
|
||||||
IDS_DEVICE_PRODUCT "ID produs"
|
IDS_DEVICE_PRODUCT "ID-ul produsului"
|
||||||
IDS_DEVICE_FORCEFEEDBACK "Forțează reacția driverului"
|
IDS_DEVICE_FORCEFEEDBACK "Forțare a driverului de feedback"
|
||||||
IDS_NOT_APPLICABLE "n/a"
|
IDS_NOT_APPLICABLE "n/a"
|
||||||
IDS_OPTION_YES "Da"
|
IDS_OPTION_YES "Da"
|
||||||
IDS_DIRECTPLAY_COL_NAME1 "Nume"
|
IDS_DIRECTPLAY_COL_NAME1 "Nume"
|
||||||
IDS_DIRECTPLAY_COL_NAME2 "Registru"
|
IDS_DIRECTPLAY_COL_NAME2 "Registru"
|
||||||
IDS_DIRECTPLAY_COL_NAME3 "Fișier"
|
IDS_DIRECTPLAY_COL_NAME3 "Fișier"
|
||||||
IDS_DIRECTPLAY_COL_NAME4 "Versiune"
|
IDS_DIRECTPLAY_COL_NAME4 "Versiune"
|
||||||
IDS_DIRECTPLAY8_MODEMSP "Furnizor de serviciu Modem-DirectPlay8"
|
IDS_DIRECTPLAY8_MODEMSP "Furnizor de servicii de modem DirectPlay8"
|
||||||
IDS_DIRECTPLAY8_SERIALSP "Furnizor de serviciu Serial-DirectPlay8"
|
IDS_DIRECTPLAY8_SERIALSP "Furnizor de servicii seriale DirectPlay8"
|
||||||
IDS_DIRECTPLAY8_IPXSP "Furnizor de serviciu IPX-DirectPlay8"
|
IDS_DIRECTPLAY8_IPXSP "Furnizor de servicii DirectPlay8 IPX"
|
||||||
IDS_DIRECTPLAY8_TCPSP "Furnizor de serviciu TCP/IP-DirectPlay8"
|
IDS_DIRECTPLAY8_TCPSP "DirectPlay8 TCP/IP Service Provider"
|
||||||
IDS_DIRECTPLAY_TCPCONN "Conexiune de Internet TCP/IP pentru DirectPlay"
|
IDS_DIRECTPLAY_TCPCONN "Conexiune de Internet TCP/IP pentru DirectPlay"
|
||||||
IDS_DIRECTPLAY_IPXCONN "Conexiune IPX pentru DirectPlay"
|
IDS_DIRECTPLAY_IPXCONN "Conexiune IPX pentru DirectPlay"
|
||||||
IDS_DIRECTPLAY_MODEMCONN "Conexiune Modem pentru DirectPlay"
|
IDS_DIRECTPLAY_MODEMCONN "Conexiune de modem pentru DirectPlay"
|
||||||
IDS_DIRECTPLAY_SERIALCONN "Conexiune Serială pentru DirectPlay"
|
IDS_DIRECTPLAY_SERIALCONN "Conexiune serială pentru DirectPlay"
|
||||||
IDS_REG_SUCCESS "Î&nchide"
|
IDS_REG_SUCCESS "OK"
|
||||||
IDS_REG_FAIL "Eroare"
|
IDS_REG_FAIL "Eroare"
|
||||||
IDS_DDTEST_ERROR "Testul a eșuat!"
|
IDS_DDTEST_ERROR "Testul de randare DirectDraw a eșuat.\nVă rugăm să consultați notele pentru mai multe informații."
|
||||||
IDS_DDTEST_DESCRIPTION "Urmează testele de interfață DirectDraw. Continuați?"
|
IDS_DDTEST_DESCRIPTION "Acesta va porni testarea interfeței DirectDraw. Doriți să continuați?"
|
||||||
IDS_DDPRIMARY_DESCRIPTION "Testul următor va utiliza DirectDraw pentru a desena dreptunghiuri albe și negre pe suprafața primară. Continuați?"
|
IDS_DDPRIMARY_DESCRIPTION "Acest test va folosi DirectDraw pentru a desena pe suprafața principală.\nAr trebui desenate dreptunghiuri alb-negru. Doriți să continuați?"
|
||||||
IDS_DDPRIMARY_RESULT "Dreptunghiurile albe și negre au fost vizibile?"
|
IDS_DDPRIMARY_RESULT "Ați văzut dreptunghiuri alb-negru?"
|
||||||
IDS_DDOFFSCREEN_DESCRIPTION "Testul următor va utiliza DirectDraw pentru desenarea unui dreptunghi alb în mișcare utilizând o memorie tampon din afara ecranului. Continuați?"
|
IDS_DDOFFSCREEN_DESCRIPTION "Acest test va folosi DirectDraw pentru a desena un tampon în afara ecranului. Ar trebui desenat un dreptunghi alb în mișcare. Doriți să continuați?"
|
||||||
IDS_DDOFFSCREEN_RESULT "Dreptunghiul alb în mișcare a fost vizibil?"
|
IDS_DDOFFSCREEN_RESULT "Ați văzut dreptunghi alb în mișcare?"
|
||||||
IDS_DDFULLSCREEN_DESCRIPTION "Testul următor va utiliza DirectDraw pentru desenarea unui dreptunghi alb în mișcare utilizând tot ecranul. Continuați?"
|
IDS_DDFULLSCREEN_DESCRIPTION "Acest test va folosi DirectDraw pentru a desena în modul ecran complet. Ar trebui desenat un dreptunghi alb în mișcare. Doriți să continuați?"
|
||||||
IDS_DDFULLSCREEN_RESULT "Pe ecranul complet, dreptunghiul alb în mișcare a fost vizibil?"
|
IDS_DDFULLSCREEN_RESULT "Ați văzut dreptunghi alb în mișcare în modul ecran complet?"
|
||||||
IDS_FORMAT_ADAPTER_MEM "%u Mo"
|
IDS_FORMAT_ADAPTER_MEM "%u (de) MB"
|
||||||
IDS_FORMAT_ADAPTER_MODE "%d x %d (%u biți)(%uHz)"
|
IDS_FORMAT_ADAPTER_MODE "%d x %d (%u (de) biți)(%uHz)"
|
||||||
IDS_OPTION_NO "Nu"
|
IDS_OPTION_NO "Nu"
|
||||||
IDS_D3DTEST_DESCRIPTION "Urmează testul de interfață Direct3D. Continuați?"
|
IDS_D3DTEST_DESCRIPTION "Acesta va porni testarea interfeței Direct3D. Doriți să continuați?"
|
||||||
IDS_D3DTEST_D3Dx "Testul următor va utiliza interfața Direct3D %u cu accelerare de echipament fizic."
|
IDS_D3DTEST_D3Dx "Acest test va folosi interfața Direct3D %u accelerată hardware."
|
||||||
IDS_OS_VERSION "%s %s (%d.%d, Build %d)"
|
IDS_OS_VERSION "%s %s (%d.%d, Subversiunea %d)"
|
||||||
IDS_DMUSIC_DESC "Descriere"
|
IDS_DMUSIC_DESC "Descriere"
|
||||||
IDS_DMUSIC_TYPE "Tip"
|
IDS_DMUSIC_TYPE "Tip"
|
||||||
IDS_DMUSIC_KERNEL "Mod nucleu"
|
IDS_DMUSIC_KERNEL "Modul nucleu"
|
||||||
IDS_DMUSIC_IO "In/Ex"
|
IDS_DMUSIC_IO "I/E"
|
||||||
IDS_DMUSIC_DLS "DLS de suport"
|
IDS_DMUSIC_DLS "Suportă DLS"
|
||||||
IDS_DMUSIC_EXT "Extern"
|
IDS_DMUSIC_EXT "Extern"
|
||||||
IDS_DMUSIC_PORT "Port implicit"
|
IDS_DMUSIC_PORT "Port implicit"
|
||||||
IDS_DDDISABLE_MSG "Accelerările fizice DirectDraw vor fi dezactivate pentru toate dispozitivele.\nDoriți să continuați?\n"
|
IDS_DDDISABLE_MSG "Acesta va dezactiva toată accelerarea hardware pentru DirectDraw pe toate dispozitivele de afișare.\nDoriți să continuați?\n"
|
||||||
END
|
END
|
||||||
|
@@ -26,12 +26,18 @@
|
|||||||
|
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
HWND hDisplayWnd;
|
||||||
|
GUID guid;
|
||||||
|
} DXDIAG_DISPLAY, *PDXDIAG_DISPLAY;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
HWND hMainDialog;
|
HWND hMainDialog;
|
||||||
HWND hTabCtrl;
|
HWND hTabCtrl;
|
||||||
ULONG NumDisplayAdapter;
|
ULONG NumDisplayAdapter;
|
||||||
HWND * hDisplayWnd;
|
PDXDIAG_DISPLAY * DisplayAdapters;
|
||||||
ULONG NumSoundAdapter;
|
ULONG NumSoundAdapter;
|
||||||
HWND * hSoundWnd;
|
HWND * hSoundWnd;
|
||||||
HWND hDialogs[5];
|
HWND hDialogs[5];
|
||||||
@@ -53,10 +59,10 @@ INT_PTR CALLBACK NetworkPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPAR
|
|||||||
INT_PTR CALLBACK HelpPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
INT_PTR CALLBACK HelpPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
/* DirectDraw tests */
|
/* DirectDraw tests */
|
||||||
VOID DDTests(VOID);
|
VOID DDTests(GUID *lpDevice);
|
||||||
|
|
||||||
/* Direct3D tests */
|
/* Direct3D tests */
|
||||||
VOID D3DTests(VOID);
|
VOID D3DTests(GUID *lpDevice);
|
||||||
|
|
||||||
/* DirectSound initialization */
|
/* DirectSound initialization */
|
||||||
void InitializeDirectSoundPage(PDXDIAG_CONTEXT pContext);
|
void InitializeDirectSoundPage(PDXDIAG_CONTEXT pContext);
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
add_definitions(-D__WINESRC__)
|
|
||||||
add_executable(extrac32 extrac32.c)
|
add_executable(extrac32 extrac32.c)
|
||||||
target_link_libraries(extrac32 wine)
|
target_link_libraries(extrac32 wine)
|
||||||
set_module_type(extrac32 win32gui UNICODE)
|
set_module_type(extrac32 win32gui UNICODE)
|
||||||
add_importlibs(extrac32 shell32 setupapi shlwapi user32 msvcrt kernel32 ntdll)
|
add_importlibs(extrac32 shell32 setupapi shlwapi user32 msvcrt kernel32 ntdll)
|
||||||
add_cd_file(TARGET extrac32 DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET extrac32 DESTINATION reactos/system32 FOR all)
|
||||||
|
set_wine_module_FIXME(extrac32) # CORE-5743: No ARRAY_SIZE macro
|
||||||
|
@@ -40,6 +40,9 @@
|
|||||||
#ifdef LANGUAGE_IT_IT
|
#ifdef LANGUAGE_IT_IT
|
||||||
#include "lang/it-IT.rc"
|
#include "lang/it-IT.rc"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef LANGUAGE_JA_JP
|
||||||
|
#include "lang/ja-JP.rc"
|
||||||
|
#endif
|
||||||
#ifdef LANGUAGE_LT_LT
|
#ifdef LANGUAGE_LT_LT
|
||||||
#include "lang/lt-LT.rc"
|
#include "lang/lt-LT.rc"
|
||||||
#endif
|
#endif
|
||||||
|
13
base/applications/findstr/lang/ja-JP.rc
Normal file
13
base/applications/findstr/lang/ja-JP.rc
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
|
||||||
|
|
||||||
|
STRINGTABLE
|
||||||
|
BEGIN
|
||||||
|
IDS_USAGE "FINDSTR: 文字列を含むファイルのすべての行を出力します。\n\n\
|
||||||
|
FIND [ /C ] [ /I ] [ /N ] [ /V ] ""文字列"" [ ファイル... ]\n\
|
||||||
|
/C 文字列を含む行の個数を数えます\n\
|
||||||
|
/I 大文字小文字を無視します\n\
|
||||||
|
/N 表示される行に1から番号を付けます\n\
|
||||||
|
/V 文字列を含まない行を出力します"
|
||||||
|
IDS_NO_SUCH_FILE "FINDSTR: %s: そのようなファイルはありません\n"
|
||||||
|
IDS_CANNOT_OPEN "FINDSTR: %s: ファイルが開けません\n"
|
||||||
|
END
|
@@ -18,12 +18,12 @@ BEGIN
|
|||||||
IDS_ERROR_NOMEM "Mémoire insuffisante pour terminer l'opération."
|
IDS_ERROR_NOMEM "Mémoire insuffisante pour terminer l'opération."
|
||||||
IDS_ERROR_NOFONT "Le fichier %1 n'est pas un fichier de polices valide."
|
IDS_ERROR_NOFONT "Le fichier %1 n'est pas un fichier de polices valide."
|
||||||
IDS_ERROR_NOCLASS "Impossible d'initialiser la classe de fenêtre."
|
IDS_ERROR_NOCLASS "Impossible d'initialiser la classe de fenêtre."
|
||||||
IDS_ERROR_ISINSTALLED "This font is already installed!"
|
IDS_ERROR_ISINSTALLED "Cette police est déjà installée !"
|
||||||
IDS_ERROR_FONTCPY "Failed to copy the font file!"
|
IDS_ERROR_FONTCPY "Échec lors de la copie du fichier police !"
|
||||||
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
|
IDS_ERROR_OPENKEY "Échec lors de l'ouverture de la clé de registre de la police !"
|
||||||
IDS_ERROR_REGISTER "Failed to register the new font!"
|
IDS_ERROR_REGISTER "Échec lors de l'enregistrement de la nouvelle police !"
|
||||||
IDS_SUCCESS "Success"
|
IDS_SUCCESS "Succès"
|
||||||
IDS_COMPLETED "Font installation completed."
|
IDS_COMPLETED "Installation de la police effectuée."
|
||||||
IDS_FILTER_LIST "Toutes polices supportées (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
|
IDS_FILTER_LIST "Toutes polices supportées (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
|
||||||
Fichier de polices (*.fon;*.fnt)\0*.fon;*.fnt\0\
|
Fichier de polices (*.fon;*.fnt)\0*.fon;*.fnt\0\
|
||||||
Fichier de polices TrueType (*.ttf)\0*.ttf\0\
|
Fichier de polices TrueType (*.ttf)\0*.ttf\0\
|
||||||
|
@@ -7,7 +7,7 @@ card-game library.
|
|||||||
Freeware
|
Freeware
|
||||||
Copyright J Brown 2001
|
Copyright J Brown 2001
|
||||||
|
|
||||||
Updates at http://www.catch22.net
|
Updates at https://www.catch22.net/
|
||||||
|
|
||||||
******************************************/
|
******************************************/
|
||||||
|
|
||||||
|
@@ -1,7 +1,11 @@
|
|||||||
/* FILE: applications/games/solitaire/lang/cs-CZ.rc
|
/*
|
||||||
* PURPOSE: Czech Language File
|
* PROJECT: ReactOS Solitaire
|
||||||
* TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
|
* LICENSE: Freeware, permission to use under Public Domain
|
||||||
* UPDATED: 2008-11-30 by Kario
|
* PURPOSE: Czech resource file
|
||||||
|
* TRANSLATORS: Copyright 2008 Radek Liška (Black_Fox) <radekliska@gmail.com>
|
||||||
|
* Copyright 2008 Mário Kačmár <kario@szm.sk>
|
||||||
|
* Copyright 2011-2017 Kamil Horníček <kamil.hornicek@reactos.org>
|
||||||
|
* Copyright 2024 Václav Zouzalík (Venca24) <vaclav.zouzalik@seznam.cz>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
|
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
|
||||||
@@ -13,13 +17,13 @@ STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SHELLFONT
|
|||||||
CAPTION "Možnosti"
|
CAPTION "Možnosti"
|
||||||
FONT 8, "MS Shell Dlg"
|
FONT 8, "MS Shell Dlg"
|
||||||
BEGIN
|
BEGIN
|
||||||
GROUPBOX "Karty", -1, 7, 7, 90, 40
|
GROUPBOX "Sejmout", -1, 7, 7, 90, 40
|
||||||
AUTORADIOBUTTON "Sejmout &jednu", IDC_OPT_DRAWONE, 14, 19, 70, 10, WS_GROUP | WS_TABSTOP
|
AUTORADIOBUTTON "Sejmout &jednu", IDC_OPT_DRAWONE, 14, 19, 70, 10, WS_GROUP | WS_TABSTOP
|
||||||
AUTORADIOBUTTON "Sejmout &tři", IDC_OPT_DRAWTHREE, 14, 32, 70, 10
|
AUTORADIOBUTTON "Sejmout &tři", IDC_OPT_DRAWTHREE, 14, 32, 70, 10
|
||||||
GROUPBOX "Scoring", -1, 100, 7, 75, 53
|
GROUPBOX "Skórování", -1, 100, 7, 75, 53
|
||||||
AUTORADIOBUTTON "&Standard", IDC_OPT_STANDARD, 107, 19, 60, 10, WS_GROUP | WS_TABSTOP
|
AUTORADIOBUTTON "&Standard", IDC_OPT_STANDARD, 107, 19, 60, 10, WS_GROUP | WS_TABSTOP
|
||||||
AUTORADIOBUTTON "&Vegas", IDC_OPT_VEGAS, 107, 32, 60, 10
|
AUTORADIOBUTTON "&Vegas", IDC_OPT_VEGAS, 107, 32, 60, 10
|
||||||
AUTORADIOBUTTON "&None", IDC_OPT_NOSCORE, 107, 45, 60, 10
|
AUTORADIOBUTTON "Žá&dné", IDC_OPT_NOSCORE, 107, 45, 60, 10
|
||||||
AUTOCHECKBOX "Zobrazit č&as", IDC_OPT_SHOWTIME, 7 ,51 ,65 ,10, WS_TABSTOP
|
AUTOCHECKBOX "Zobrazit č&as", IDC_OPT_SHOWTIME, 7 ,51 ,65 ,10, WS_TABSTOP
|
||||||
AUTOCHECKBOX "Stavový řád&ek", IDC_OPT_STATUSBAR, 7, 66, 64, 10, WS_TABSTOP
|
AUTOCHECKBOX "Stavový řád&ek", IDC_OPT_STATUSBAR, 7, 66, 64, 10, WS_TABSTOP
|
||||||
AUTOCHECKBOX "&Ponechat skóre", IDC_OPT_KEEPSCORE, 100, 66, 65, 10, WS_TABSTOP
|
AUTOCHECKBOX "&Ponechat skóre", IDC_OPT_KEEPSCORE, 100, 66, 65, 10, WS_TABSTOP
|
||||||
@@ -55,7 +59,7 @@ BEGIN
|
|||||||
IDS_SOL_NAME "Solitaire"
|
IDS_SOL_NAME "Solitaire"
|
||||||
IDS_SOL_ABOUT "Solitaire by J Brown\nCardLib verze 1.0"
|
IDS_SOL_ABOUT "Solitaire by J Brown\nCardLib verze 1.0"
|
||||||
IDS_SOL_QUIT "Ukončit rozehranou hru?"
|
IDS_SOL_QUIT "Ukončit rozehranou hru?"
|
||||||
IDS_SOL_WIN "Gratulujeme, zvítězili jste!!"
|
IDS_SOL_WIN "Gratulujeme, zvítězili jste!"
|
||||||
IDS_SOL_DEAL "Rozdat znova?"
|
IDS_SOL_DEAL "Rozdat znova?"
|
||||||
IDS_SOL_SCORE "Skóre: %d"
|
IDS_SOL_SCORE "Skóre: %d"
|
||||||
IDS_SOL_TIME "Čas: %d"
|
IDS_SOL_TIME "Čas: %d"
|
||||||
@@ -69,8 +73,8 @@ BEGIN
|
|||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Rozdat\tF2", IDM_GAME_NEW
|
MENUITEM "&Rozdat\tF2", IDM_GAME_NEW
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Undo", IDM_GAME_UNDO, GRAYED
|
MENUITEM "&Zpět", IDM_GAME_UNDO, GRAYED
|
||||||
MENUITEM "Rub& karet...", IDM_GAME_DECK
|
MENUITEM "Ru&b karet...", IDM_GAME_DECK
|
||||||
MENUITEM "&Možnosti...", IDM_GAME_OPTIONS
|
MENUITEM "&Možnosti...", IDM_GAME_OPTIONS
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Konec", IDM_GAME_EXIT
|
MENUITEM "&Konec", IDM_GAME_EXIT
|
||||||
|
@@ -1,24 +1,29 @@
|
|||||||
box.wav
|
box.wav
|
||||||
License: CC0 1.0 Universal
|
By: amitYunger123 <https://freesound.org/people/amitYunger123/>
|
||||||
|
License: CC0 1.0 Universal <https://creativecommons.org/publicdomain/zero/1.0/>
|
||||||
URL: https://freesound.org/people/amitYunger123/sounds/737638/
|
URL: https://freesound.org/people/amitYunger123/sounds/737638/
|
||||||
Date: 30-May-2024
|
Date: 30-May-2024
|
||||||
|
|
||||||
explode.wav
|
explode.wav
|
||||||
License: CC0 1.0 Universal
|
By: hoffy1138 <https://freesound.org/people/hoffy1138/>
|
||||||
|
License: CC0 1.0 Universal <https://creativecommons.org/publicdomain/zero/1.0/>
|
||||||
URL: https://freesound.org/people/hoffy1138/sounds/276968/
|
URL: https://freesound.org/people/hoffy1138/sounds/276968/
|
||||||
Date: 31-May-2024
|
Date: 31-May-2024
|
||||||
|
|
||||||
flag.wav
|
flag.wav
|
||||||
License: CC0 1.0 Universal
|
By: ProfoundSounds <https://freesound.org/people/profoundsounds/>
|
||||||
|
License: CC0 1.0 Universal <https://creativecommons.org/publicdomain/zero/1.0/>
|
||||||
URL: https://freesound.org/people/profoundsounds/sounds/733230/
|
URL: https://freesound.org/people/profoundsounds/sounds/733230/
|
||||||
Date: 30-May-2024
|
Date: 30-May-2024
|
||||||
|
|
||||||
question.wav
|
question.wav
|
||||||
License: CC0 1.0 Universal
|
By: Irolan <https://freesound.org/people/Irolan/>
|
||||||
|
License: CC0 1.0 Universal <https://creativecommons.org/publicdomain/zero/1.0/>
|
||||||
URL: https://freesound.org/people/Irolan/sounds/737510/
|
URL: https://freesound.org/people/Irolan/sounds/737510/
|
||||||
Date: 30-May-2024
|
Date: 30-May-2024
|
||||||
|
|
||||||
win.wav
|
win.wav
|
||||||
License: CC0 1.0 Universal
|
By: David819 <https://freesound.org/people/David819/>
|
||||||
|
License: CC0 1.0 Universal <https://creativecommons.org/publicdomain/zero/1.0/>
|
||||||
URL: https://freesound.org/people/David819/sounds/668436/
|
URL: https://freesound.org/people/David819/sounds/668436/
|
||||||
Date: 31-May-2024
|
Date: 31-May-2024
|
||||||
|
@@ -1,8 +1,10 @@
|
|||||||
|
|
||||||
add_rc_deps(kbswitch.rc ${CMAKE_CURRENT_SOURCE_DIR}/res/kbswitch.ico)
|
add_rc_deps(kbswitch.rc ${CMAKE_CURRENT_SOURCE_DIR}/res/kbswitch.ico)
|
||||||
add_executable(kbswitch kbswitch.c kbswitch.rc)
|
add_executable(kbswitch kbswitch.c imemenu.c kbswitch.rc)
|
||||||
set_module_type(kbswitch win32gui UNICODE)
|
set_module_type(kbswitch win32gui UNICODE)
|
||||||
add_importlibs(kbswitch advapi32 imm32 user32 shell32 shlwapi gdi32 msvcrt kernel32)
|
target_link_libraries(kbswitch wine)
|
||||||
|
add_importlibs(kbswitch advapi32 imm32 user32 shell32 shlwapi gdi32 msvcrt kernel32 ntdll)
|
||||||
add_cd_file(TARGET kbswitch DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET kbswitch DESTINATION reactos/system32 FOR all)
|
||||||
|
|
||||||
add_subdirectory(kbsdll)
|
add_subdirectory(indicdll)
|
||||||
|
add_dependencies(kbswitch indicdll)
|
||||||
|
260
base/applications/kbswitch/imemenu.c
Normal file
260
base/applications/kbswitch/imemenu.c
Normal file
@@ -0,0 +1,260 @@
|
|||||||
|
/*
|
||||||
|
* PROJECT: ReactOS Keyboard Layout Switcher
|
||||||
|
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||||
|
* PURPOSE: IME menu handling
|
||||||
|
* COPYRIGHT: Copyright 2025 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "kbswitch.h"
|
||||||
|
#include "imemenu.h"
|
||||||
|
|
||||||
|
#include <wine/debug.h>
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(internat);
|
||||||
|
|
||||||
|
PIMEMENUNODE g_pMenuList = NULL;
|
||||||
|
INT g_nNextMenuID = 0;
|
||||||
|
|
||||||
|
static BOOL MakeImeMenu(_In_ HMENU hMenu, _In_ const IMEMENUNODE *pMenu);
|
||||||
|
|
||||||
|
static VOID
|
||||||
|
AddImeMenuNode(_In_ PIMEMENUNODE pMenu)
|
||||||
|
{
|
||||||
|
if (!g_pMenuList)
|
||||||
|
{
|
||||||
|
g_pMenuList = pMenu;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
pMenu->m_pNext = g_pMenuList;
|
||||||
|
g_pMenuList = pMenu;
|
||||||
|
}
|
||||||
|
|
||||||
|
static PIMEMENUNODE
|
||||||
|
AllocateImeMenu(_In_ DWORD itemCount)
|
||||||
|
{
|
||||||
|
SIZE_T cbMenu = sizeof(IMEMENUNODE) + (itemCount - 1) * sizeof(IMEMENUITEM);
|
||||||
|
PIMEMENUNODE pMenu = LocalAlloc(LPTR, cbMenu);
|
||||||
|
if (!pMenu)
|
||||||
|
return NULL;
|
||||||
|
pMenu->m_nItems = itemCount;
|
||||||
|
AddImeMenuNode(pMenu);
|
||||||
|
return pMenu;
|
||||||
|
}
|
||||||
|
|
||||||
|
static VOID
|
||||||
|
GetImeMenuItem(
|
||||||
|
_In_ HIMC hIMC,
|
||||||
|
_Out_ PIMEMENUITEMINFO lpImeParentMenu,
|
||||||
|
_In_ BOOL bRightMenu,
|
||||||
|
_Out_ PIMEMENUITEM pItem)
|
||||||
|
{
|
||||||
|
ZeroMemory(pItem, sizeof(IMEMENUITEM));
|
||||||
|
pItem->m_Info = *lpImeParentMenu;
|
||||||
|
|
||||||
|
if (lpImeParentMenu->fType & IMFT_SUBMENU)
|
||||||
|
pItem->m_pSubMenu = CreateImeMenu(hIMC, lpImeParentMenu, bRightMenu);
|
||||||
|
|
||||||
|
pItem->m_nRealID = pItem->m_Info.wID;
|
||||||
|
pItem->m_Info.wID = ID_STARTIMEMENU + g_nNextMenuID++;
|
||||||
|
}
|
||||||
|
|
||||||
|
PIMEMENUNODE
|
||||||
|
CreateImeMenu(
|
||||||
|
_In_ HIMC hIMC,
|
||||||
|
_Inout_opt_ PIMEMENUITEMINFO lpImeParentMenu,
|
||||||
|
_In_ BOOL bRightMenu)
|
||||||
|
{
|
||||||
|
const DWORD dwFlags = (bRightMenu ? IGIMIF_RIGHTMENU : 0);
|
||||||
|
const DWORD dwTypes = IGIMII_CMODE |
|
||||||
|
IGIMII_SMODE |
|
||||||
|
IGIMII_CONFIGURE |
|
||||||
|
IGIMII_TOOLS |
|
||||||
|
IGIMII_HELP |
|
||||||
|
IGIMII_OTHER;
|
||||||
|
DWORD itemCount = ImmGetImeMenuItems(hIMC, dwFlags, dwTypes, lpImeParentMenu, NULL, 0);
|
||||||
|
if (!itemCount)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
PIMEMENUNODE pMenu = AllocateImeMenu(itemCount);
|
||||||
|
if (!pMenu)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
DWORD cbItems = sizeof(IMEMENUITEMINFO) * itemCount;
|
||||||
|
PIMEMENUITEMINFO pImeMenuItems = LocalAlloc(LPTR, cbItems);
|
||||||
|
if (!pImeMenuItems)
|
||||||
|
{
|
||||||
|
LocalFree(pMenu);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
itemCount = ImmGetImeMenuItems(hIMC, dwFlags, dwTypes, lpImeParentMenu, pImeMenuItems, cbItems);
|
||||||
|
if (!itemCount)
|
||||||
|
{
|
||||||
|
LocalFree(pImeMenuItems);
|
||||||
|
LocalFree(pMenu);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
PIMEMENUITEM pItems = pMenu->m_Items;
|
||||||
|
for (DWORD iItem = 0; iItem < itemCount; ++iItem)
|
||||||
|
{
|
||||||
|
GetImeMenuItem(hIMC, &pImeMenuItems[iItem], bRightMenu, &pItems[iItem]);
|
||||||
|
}
|
||||||
|
|
||||||
|
LocalFree(pImeMenuItems);
|
||||||
|
return pMenu;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL
|
||||||
|
FillImeMenuItem(_Out_ LPMENUITEMINFO pItemInfo, _In_ const IMEMENUITEM *pItem)
|
||||||
|
{
|
||||||
|
ZeroMemory(pItemInfo, sizeof(MENUITEMINFO));
|
||||||
|
pItemInfo->cbSize = sizeof(MENUITEMINFO);
|
||||||
|
pItemInfo->fMask = MIIM_ID | MIIM_STATE | MIIM_DATA;
|
||||||
|
pItemInfo->wID = pItem->m_Info.wID;
|
||||||
|
pItemInfo->fState = pItem->m_Info.fState;
|
||||||
|
pItemInfo->dwItemData = pItem->m_Info.dwItemData;
|
||||||
|
|
||||||
|
if (pItem->m_Info.fType)
|
||||||
|
{
|
||||||
|
pItemInfo->fMask |= MIIM_FTYPE;
|
||||||
|
pItemInfo->fType = 0;
|
||||||
|
if (pItem->m_Info.fType & IMFT_RADIOCHECK)
|
||||||
|
pItemInfo->fType |= MFT_RADIOCHECK;
|
||||||
|
if (pItem->m_Info.fType & IMFT_SEPARATOR)
|
||||||
|
pItemInfo->fType |= MFT_SEPARATOR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pItem->m_Info.fType & IMFT_SUBMENU)
|
||||||
|
{
|
||||||
|
pItemInfo->fMask |= MIIM_SUBMENU;
|
||||||
|
pItemInfo->hSubMenu = CreatePopupMenu();
|
||||||
|
if (!MakeImeMenu(pItemInfo->hSubMenu, pItem->m_pSubMenu))
|
||||||
|
{
|
||||||
|
DestroyMenu(pItemInfo->hSubMenu);
|
||||||
|
pItemInfo->hSubMenu = NULL;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pItem->m_Info.hbmpChecked && pItem->m_Info.hbmpUnchecked)
|
||||||
|
{
|
||||||
|
pItemInfo->fMask |= MIIM_CHECKMARKS;
|
||||||
|
pItemInfo->hbmpChecked = pItem->m_Info.hbmpChecked;
|
||||||
|
pItemInfo->hbmpUnchecked = pItem->m_Info.hbmpUnchecked;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pItem->m_Info.hbmpItem)
|
||||||
|
{
|
||||||
|
pItemInfo->fMask |= MIIM_BITMAP;
|
||||||
|
pItemInfo->hbmpItem = pItem->m_Info.hbmpItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
PCTSTR szString = pItem->m_Info.szString;
|
||||||
|
if (szString && szString[0])
|
||||||
|
{
|
||||||
|
pItemInfo->fMask |= MIIM_STRING;
|
||||||
|
pItemInfo->dwTypeData = (PTSTR)szString;
|
||||||
|
pItemInfo->cch = lstrlen(szString);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL
|
||||||
|
MakeImeMenu(_In_ HMENU hMenu, _In_ const IMEMENUNODE *pMenu)
|
||||||
|
{
|
||||||
|
if (!pMenu || !pMenu->m_nItems)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
for (INT iItem = 0; iItem < pMenu->m_nItems; ++iItem)
|
||||||
|
{
|
||||||
|
MENUITEMINFO mi = { sizeof(mi) };
|
||||||
|
if (!FillImeMenuItem(&mi, &pMenu->m_Items[iItem]))
|
||||||
|
{
|
||||||
|
ERR("FillImeMenuItem failed\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (!InsertMenuItem(hMenu, iItem, TRUE, &mi))
|
||||||
|
{
|
||||||
|
ERR("InsertMenuItem failed\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
HMENU MenuFromImeMenu(_In_ const IMEMENUNODE *pMenu)
|
||||||
|
{
|
||||||
|
HMENU hMenu = CreatePopupMenu();
|
||||||
|
if (!pMenu)
|
||||||
|
return hMenu;
|
||||||
|
if (!MakeImeMenu(hMenu, pMenu))
|
||||||
|
{
|
||||||
|
DestroyMenu(hMenu);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return hMenu;
|
||||||
|
}
|
||||||
|
|
||||||
|
INT
|
||||||
|
GetRealImeMenuID(_In_ const IMEMENUNODE *pMenu, _In_ INT nFakeID)
|
||||||
|
{
|
||||||
|
if (!pMenu || !pMenu->m_nItems || nFakeID < ID_STARTIMEMENU)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for (INT iItem = 0; iItem < pMenu->m_nItems; ++iItem)
|
||||||
|
{
|
||||||
|
const IMEMENUITEM *pItem = &pMenu->m_Items[iItem];
|
||||||
|
if (pItem->m_Info.wID == nFakeID)
|
||||||
|
return pItem->m_nRealID;
|
||||||
|
|
||||||
|
if (pItem->m_pSubMenu)
|
||||||
|
{
|
||||||
|
INT nRealID = GetRealImeMenuID(pItem->m_pSubMenu, nFakeID);
|
||||||
|
if (nRealID)
|
||||||
|
return nRealID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL
|
||||||
|
FreeMenuNode(_In_ PIMEMENUNODE pMenuNode)
|
||||||
|
{
|
||||||
|
if (!pMenuNode)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
for (INT iItem = 0; iItem < pMenuNode->m_nItems; ++iItem)
|
||||||
|
{
|
||||||
|
PIMEMENUITEM pItem = &pMenuNode->m_Items[iItem];
|
||||||
|
if (pItem->m_Info.hbmpChecked)
|
||||||
|
DeleteObject(pItem->m_Info.hbmpChecked);
|
||||||
|
if (pItem->m_Info.hbmpUnchecked)
|
||||||
|
DeleteObject(pItem->m_Info.hbmpUnchecked);
|
||||||
|
if (pItem->m_Info.hbmpItem)
|
||||||
|
DeleteObject(pItem->m_Info.hbmpItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
LocalFree(pMenuNode);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
CleanupImeMenus(VOID)
|
||||||
|
{
|
||||||
|
if (!g_pMenuList)
|
||||||
|
return;
|
||||||
|
|
||||||
|
PIMEMENUNODE pNext;
|
||||||
|
for (PIMEMENUNODE pNode = g_pMenuList; pNode; pNode = pNext)
|
||||||
|
{
|
||||||
|
pNext = pNode->m_pNext;
|
||||||
|
FreeMenuNode(pNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_pMenuList = NULL;
|
||||||
|
g_nNextMenuID = 0;
|
||||||
|
}
|
38
base/applications/kbswitch/imemenu.h
Normal file
38
base/applications/kbswitch/imemenu.h
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* PROJECT: ReactOS Keyboard Layout Switcher
|
||||||
|
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||||
|
* PURPOSE: IME menu handling
|
||||||
|
* COPYRIGHT: Copyright 2025 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <immdev.h>
|
||||||
|
|
||||||
|
#define ID_STARTIMEMENU 1000
|
||||||
|
|
||||||
|
struct tagIMEMENUNODE;
|
||||||
|
|
||||||
|
typedef struct tagIMEMENUITEM
|
||||||
|
{
|
||||||
|
IMEMENUITEMINFO m_Info;
|
||||||
|
UINT m_nRealID;
|
||||||
|
struct tagIMEMENUNODE *m_pSubMenu;
|
||||||
|
} IMEMENUITEM, *PIMEMENUITEM;
|
||||||
|
|
||||||
|
typedef struct tagIMEMENUNODE
|
||||||
|
{
|
||||||
|
struct tagIMEMENUNODE *m_pNext;
|
||||||
|
INT m_nItems;
|
||||||
|
IMEMENUITEM m_Items[ANYSIZE_ARRAY];
|
||||||
|
} IMEMENUNODE, *PIMEMENUNODE;
|
||||||
|
|
||||||
|
PIMEMENUNODE
|
||||||
|
CreateImeMenu(
|
||||||
|
_In_ HIMC hIMC,
|
||||||
|
_Inout_opt_ PIMEMENUITEMINFO lpImeParentMenu,
|
||||||
|
_In_ BOOL bRightMenu);
|
||||||
|
|
||||||
|
HMENU MenuFromImeMenu(_In_ const IMEMENUNODE *pMenu);
|
||||||
|
INT GetRealImeMenuID(_In_ const IMEMENUNODE *pMenu, _In_ INT nFakeID);
|
||||||
|
VOID CleanupImeMenus(VOID);
|
16
base/applications/kbswitch/indicdll/CMakeLists.txt
Normal file
16
base/applications/kbswitch/indicdll/CMakeLists.txt
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
spec2def(indicdll.dll indicdll.spec)
|
||||||
|
|
||||||
|
file(GLOB indicdll_rc_deps res/*.*)
|
||||||
|
add_rc_deps(indicdll.rc ${indicdll_rc_deps})
|
||||||
|
|
||||||
|
list(APPEND SOURCE
|
||||||
|
indicdll.c
|
||||||
|
indicdll.rc
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/indicdll.def)
|
||||||
|
|
||||||
|
add_library(indicdll MODULE ${SOURCE})
|
||||||
|
set_module_type(indicdll win32dll UNICODE)
|
||||||
|
target_link_libraries(indicdll wine)
|
||||||
|
add_importlibs(indicdll user32 comctl32 msvcrt kernel32 ntdll)
|
||||||
|
add_cd_file(TARGET indicdll DESTINATION reactos/system32 FOR all)
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user