mirror of https://github.com/reactos/reactos.git
Compare commits
117 Commits
d2c0f17e03
...
a83caabe3c
Author | SHA1 | Date |
---|---|---|
Serge Gautherie | a83caabe3c | |
Marcin Jabłoński | dcf9eb060a | |
Timo Kreuzer | 45aa8f8111 | |
Timo Kreuzer | 6beff505d7 | |
Thamatip Chitpong | cd0bb1af07 | |
Thamatip Chitpong | 6d16d27462 | |
Thamatip Chitpong | 018264f38f | |
Katayama Hirofumi MZ | 1331e2fb02 | |
Doug Lyons | 3693d55404 | |
Timo Kreuzer | 1f49173f82 | |
Timo Kreuzer | 3c55252828 | |
Timo Kreuzer | f319538d98 | |
Timo Kreuzer | 0ea48e79fc | |
Timo Kreuzer | 43beb913da | |
Katayama Hirofumi MZ | d55f49978d | |
Katayama Hirofumi MZ | 91acf823d8 | |
Katayama Hirofumi MZ | c0c270e90e | |
Katayama Hirofumi MZ | 75cc5b2b1c | |
Katayama Hirofumi MZ | 8337df2bd1 | |
Oleg Dubinskiy | 24e088daa8 | |
Katayama Hirofumi MZ | d23573beed | |
Katayama Hirofumi MZ | 25e2f5f277 | |
Timo Kreuzer | 6ac260dcec | |
Timo Kreuzer | 72fd54a7f4 | |
Timo Kreuzer | 9229709312 | |
Timo Kreuzer | af2ce4d08f | |
Timo Kreuzer | 1d289fec77 | |
Timo Kreuzer | d96f01b5dc | |
Katayama Hirofumi MZ | 1dc8d80ca1 | |
Timo Kreuzer | a8ece7e81a | |
Timo Kreuzer | 565828127f | |
Serge Gautherie | fd331f1494 | |
Serge Gautherie | 8b9bf3369c | |
Katayama Hirofumi MZ | 0240a87618 | |
Serge Gautherie | 68a8619b7b | |
Whindmar Saksit | 62c30d1f93 | |
Whindmar Saksit | dacdd80390 | |
Hermès Bélusca-Maïto | 5f3554a40c | |
Oleg Dubinskiy | 5949c20d97 | |
Justin Miller | ad9c634efa | |
Mark Harmstone | dd6c1c8843 | |
Stanislav Motylkov | 6d853be981 | |
Stanislav Motylkov | 359c9c7b42 | |
Carlo Bramini | 605fa32d45 | |
Justin Miller | 2a2556c5d0 | |
Justin Miller | 9452b29c7f | |
Joachim Henze | 21a9f78b2d | |
Katayama Hirofumi MZ | d383b20b01 | |
Hermès Bélusca-Maïto | 7b4f42470f | |
Hermès Bélusca-Maïto | e5517176b8 | |
Hermès Bélusca-Maïto | c25a0e1919 | |
Hermès Bélusca-Maïto | c044201472 | |
Hermès Bélusca-Maïto | 93245d385d | |
Hermès Bélusca-Maïto | 5b2dcdd03d | |
Joachim Henze | 6cb18bc6a4 | |
Timo Kreuzer | 95bf896b10 | |
Katayama Hirofumi MZ | 1b85a5fa06 | |
Carl J. Bialorucki | ea34ecc9ec | |
Katayama Hirofumi MZ | b1de3bfb2b | |
Katayama Hirofumi MZ | 63e5885b37 | |
Timo Kreuzer | 8feb078692 | |
Timo Kreuzer | 8d459f2820 | |
Timo Kreuzer | 05456808e8 | |
Timo Kreuzer | 83e741c643 | |
Joachim Henze | ba170757d6 | |
Carl J. Bialorucki | 78dc504e72 | |
Serge Gautherie | b8abfa76ca | |
Timo Kreuzer | fc6e23d6b8 | |
Timo Kreuzer | bb444b93d9 | |
Katayama Hirofumi MZ | ff282894a8 | |
Katayama Hirofumi MZ | 7fdec96009 | |
Ratin Gao | f61e14f554 | |
Timo Kreuzer | 14beaec1d9 | |
Doug Lyons | 76290a6696 | |
Katayama Hirofumi MZ | 31ce37da2a | |
Joachim Henze | 64a59a17b5 | |
Joachim Henze | 938a39aee9 | |
Oleg Dubinskiy | 12b3272d9e | |
Joachim Henze | d72d61fe47 | |
Whindmar Saksit | 7a810c17e7 | |
Timo Kreuzer | c69371cced | |
Timo Kreuzer | bedc16d46d | |
Timo Kreuzer | f5e54015ee | |
Timo Kreuzer | 109b84826e | |
Katayama Hirofumi MZ | d05dcf6a02 | |
Andrei Miloiu | e85ef799fe | |
Maj Soklič | 2d79b751a4 | |
Katayama Hirofumi MZ | ff531eaade | |
Andrei Miloiu | 0cfc9aba05 | |
Andrei Miloiu | 608ed5619f | |
Andrei Miloiu | 3e4d8e6f6c | |
Katayama Hirofumi MZ | 5eea72f61b | |
Timo Kreuzer | 713a360c74 | |
Timo Kreuzer | 7589238b68 | |
Timo Kreuzer | c4498d751d | |
Timo Kreuzer | 85fc290bb7 | |
Timo Kreuzer | 43b181309e | |
Timo Kreuzer | 34576c7015 | |
Whindmar Saksit | 9238a1762f | |
Oleg Dubinskiy | 91be8bf0a1 | |
Timo Kreuzer | ea28951607 | |
Doug Lyons | a771729e69 | |
Timo Kreuzer | b6987d1463 | |
Whindmar Saksit | 8841e3d7ba | |
Timo Kreuzer | 5b82ada2ed | |
Timo Kreuzer | 24b4026ce8 | |
Timo Kreuzer | 88e24bc463 | |
Thamatip Chitpong | 5329e475db | |
Thamatip Chitpong | 588449c364 | |
Serge Gautherie | 6dcf70f398 | |
Dmitry Borisov | 5070e8960a | |
Timo Kreuzer | 1538712c0b | |
Gleb Surikov | fc6bf61e4c | |
Ratin Gao | 1cf8759d69 | |
Serge Gautherie | a68406bccf | |
Timo Kreuzer | 43fc73207d | |
Serge Gautherie | c87402c199 |
|
@ -1635,7 +1635,7 @@ static INT_PTR CALLBACK DlgMainProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
|
|||
case IDC_BUTTON_D:
|
||||
case IDC_BUTTON_E:
|
||||
case IDC_BUTTON_F:
|
||||
calc.is_nan = FALSE;
|
||||
if (calc.is_nan) break;
|
||||
build_operand(hWnd, LOWORD(wp));
|
||||
return TRUE;
|
||||
case IDC_BUTTON_PERCENT:
|
||||
|
@ -1701,6 +1701,7 @@ static INT_PTR CALLBACK DlgMainProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
|
|||
}
|
||||
return TRUE;
|
||||
case IDC_BUTTON_BACK:
|
||||
if (calc.is_nan) break;
|
||||
if (calc.sci_in) {
|
||||
if (calc.esp == 0) {
|
||||
TCHAR *ptr;
|
||||
|
|
|
@ -180,7 +180,7 @@ BEGIN
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Text Document"
|
||||
STRING_NOTEPAD_AUTHORS "Възпроизводствено право 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -181,7 +181,7 @@ paměti."
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Textový dokument"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -181,7 +181,7 @@ hukommelse, og prøv så igen."
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Text Document"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -181,7 +181,7 @@ Anwendungen, um den verfügbaren Arbeitsspeicher zu\nerhöhen."
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Textdokument"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -181,7 +181,7 @@ BEGIN
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Text Document"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -180,7 +180,7 @@ Close one or more applications to increase the amount of\nfree memory."
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Text Document"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -183,7 +183,7 @@ aumentar la cantidad\nde memoria libre."
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Documento de texto"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -187,7 +187,7 @@ käsu lõpetamiseks.\nSulge üks või enam rakendust, et suurendada\nvaba mälu
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Tekstidokument"
|
||||
STRING_NOTEPAD_AUTHORS "Autoriõigus 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -181,7 +181,7 @@ memoria librearen\nkopurua handitzeko."
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Text Document"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -181,7 +181,7 @@ muistia."
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Text Document"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -181,7 +181,7 @@ de la mémoire."
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Document Texte"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -183,7 +183,7 @@ task.\nClose one or more applications to increase the amount of\nfree memory."
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Text Document"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -187,7 +187,7 @@ BEGIN
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "टेक्स्ट डॉक्यूमॅन्ट"
|
||||
STRING_NOTEPAD_AUTHORS "कॉपीराइट 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -187,7 +187,7 @@ zadatak.\nZatvorite jednu ili više aplikacija da povećate\nslobodnu memoriju."
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Tekstni dokument"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997, 98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -180,7 +180,7 @@ Would you like to save the changes?"
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Text Document"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -180,7 +180,7 @@ ini.\nTutup satu atau lebih aplikasi untuk meningkatkan jumlah\nmemori bebas."
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Teks Dokumen"
|
||||
STRING_NOTEPAD_AUTHORS "Hak Cipta 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -181,7 +181,7 @@ di memoria libera."
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Documento di testo"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -180,7 +180,7 @@ Ar norite išsaugoti pakeitimus?"
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Text Document"
|
||||
STRING_NOTEPAD_AUTHORS "(C) 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -182,7 +182,7 @@ tugas ini.\nTutup satu atau lebih aplikasi untuk menambah jumlah\ningatan kosong
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Text Document"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -180,7 +180,7 @@ Wilt u de wijzigingen opslaan?"
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Text Document"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -180,7 +180,7 @@ Avslutt en eller mere applikasjoner for øke mengden av\nledig minne."
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Text Document"
|
||||
STRING_NOTEPAD_AUTHORS "Enerett 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -175,7 +175,7 @@ BEGIN
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Dokument tekstowy"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -180,7 +180,7 @@ tarefa.\nFeche uma ou mais aplicações para aumentar a quantidade de memória l
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Text Document"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -180,7 +180,7 @@ tarefa.\nFeche uma ou mais aplicações para aumentar a quantidade de memória l
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Documento de texto"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -182,7 +182,7 @@ alebo viac aplikácií, aby sa uvoľnila pamäť a skúste to znova."
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Text Document"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -182,7 +182,7 @@ detyrë.\nMbyll nje ose me shume programe te rrisesh shumën e\nmemories."
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Text Document"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -180,7 +180,7 @@ den här åtgärden.\nAvsluta ett eller flera program för att frigöra mer minn
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Text Document"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -175,7 +175,7 @@ BEGIN
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Text Document"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -178,7 +178,7 @@ BEGIN
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Metin Belgesi"
|
||||
STRING_NOTEPAD_AUTHORS "Telif Hakları: 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -180,7 +180,7 @@ BEGIN
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Текстовий документ"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -180,7 +180,7 @@ O‘zgarishlarni saqlashni istaysizmi?"
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "Text Document"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -188,7 +188,7 @@ BEGIN
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "文本文档"
|
||||
STRING_NOTEPAD_AUTHORS "版权所有 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -189,7 +189,7 @@ BEGIN
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "純文字檔案"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -188,7 +188,7 @@ BEGIN
|
|||
STRING_PRINTCANCELING "The print job is being canceled..."
|
||||
STRING_PRINTCOMPLETE "Printing is successfully done."
|
||||
STRING_PRINTCANCELED "Printing has been canceled."
|
||||
STRING_PRINTFAILED "Printing is failed."
|
||||
STRING_PRINTFAILED "Printing failed."
|
||||
|
||||
STRING_TEXT_DOCUMENT "純文字檔案"
|
||||
STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n"
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
* Regedit child window
|
||||
*
|
||||
* Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
|
||||
* Copyright (C) 2024 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -38,6 +39,13 @@ extern LPCWSTR get_root_key_name(HKEY hRootKey)
|
|||
return L"UNKNOWN HKEY, PLEASE REPORT";
|
||||
}
|
||||
|
||||
static INT ClampSplitBarX(HWND hWnd, INT x)
|
||||
{
|
||||
RECT rc;
|
||||
GetClientRect(hWnd, &rc);
|
||||
return min(max(x, SPLIT_MIN), rc.right - SPLIT_MIN);
|
||||
}
|
||||
|
||||
extern void ResizeWnd(int cx, int cy)
|
||||
{
|
||||
HDWP hdwp = BeginDeferWindowPos(4);
|
||||
|
@ -54,6 +62,9 @@ extern void ResizeWnd(int cx, int cy)
|
|||
cy = rs.bottom - rs.top;
|
||||
}
|
||||
GetWindowRect(g_pChildWnd->hAddressBtnWnd, &rb);
|
||||
|
||||
g_pChildWnd->nSplitPos = ClampSplitBarX(g_pChildWnd->hWnd, g_pChildWnd->nSplitPos);
|
||||
|
||||
cx = g_pChildWnd->nSplitPos + SPLIT_WIDTH / 2;
|
||||
if (hdwp)
|
||||
hdwp = DeferWindowPos(hdwp, g_pChildWnd->hAddressBarWnd, NULL,
|
||||
|
@ -380,6 +391,7 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
}
|
||||
}
|
||||
goto def;
|
||||
|
||||
case WM_DESTROY:
|
||||
DestroyListView(g_pChildWnd->hListWnd);
|
||||
DestroyTreeView(g_pChildWnd->hTreeWnd);
|
||||
|
@ -389,15 +401,16 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
g_pChildWnd = NULL;
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
|
||||
case WM_LBUTTONDOWN:
|
||||
{
|
||||
RECT rt;
|
||||
int x = (short)LOWORD(lParam);
|
||||
GetClientRect(hWnd, &rt);
|
||||
if (x>=g_pChildWnd->nSplitPos-SPLIT_WIDTH/2 && x<g_pChildWnd->nSplitPos+SPLIT_WIDTH/2+1)
|
||||
INT x = (SHORT)LOWORD(lParam);
|
||||
if (x >= g_pChildWnd->nSplitPos - SPLIT_WIDTH / 2 &&
|
||||
x < g_pChildWnd->nSplitPos + SPLIT_WIDTH / 2 + 1)
|
||||
{
|
||||
last_split = g_pChildWnd->nSplitPos;
|
||||
draw_splitbar(hWnd, last_split);
|
||||
x = ClampSplitBarX(hWnd, x);
|
||||
draw_splitbar(hWnd, x);
|
||||
last_split = x;
|
||||
SetCapture(hWnd);
|
||||
}
|
||||
break;
|
||||
|
@ -407,12 +420,14 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
case WM_RBUTTONDOWN:
|
||||
if (GetCapture() == hWnd)
|
||||
{
|
||||
finish_splitbar(hWnd, LOWORD(lParam));
|
||||
INT x = (SHORT)LOWORD(lParam);
|
||||
x = ClampSplitBarX(hWnd, x);
|
||||
finish_splitbar(hWnd, x);
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_CAPTURECHANGED:
|
||||
if (GetCapture()==hWnd && last_split>=0)
|
||||
if (GetCapture() == hWnd && last_split >= 0)
|
||||
draw_splitbar(hWnd, last_split);
|
||||
break;
|
||||
|
||||
|
@ -433,35 +448,13 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
case WM_MOUSEMOVE:
|
||||
if (GetCapture() == hWnd)
|
||||
{
|
||||
HDC hdc;
|
||||
RECT rt;
|
||||
HGDIOBJ OldObj;
|
||||
int x = LOWORD(lParam);
|
||||
if(!SizingPattern)
|
||||
INT x = (SHORT)LOWORD(lParam);
|
||||
x = ClampSplitBarX(hWnd, x);
|
||||
if (last_split != x)
|
||||
{
|
||||
const DWORD Pattern[4] = {0x5555AAAA, 0x5555AAAA, 0x5555AAAA, 0x5555AAAA};
|
||||
SizingPattern = CreateBitmap(8, 8, 1, 1, Pattern);
|
||||
}
|
||||
if(!SizingBrush)
|
||||
{
|
||||
SizingBrush = CreatePatternBrush(SizingPattern);
|
||||
}
|
||||
|
||||
GetClientRect(hWnd, &rt);
|
||||
x = (SHORT) min(max(x, SPLIT_MIN), rt.right - SPLIT_MIN);
|
||||
if(last_split != x)
|
||||
{
|
||||
rt.left = last_split-SPLIT_WIDTH/2;
|
||||
rt.right = last_split+SPLIT_WIDTH/2+1;
|
||||
hdc = GetDC(hWnd);
|
||||
OldObj = SelectObject(hdc, SizingBrush);
|
||||
PatBlt(hdc, rt.left, rt.top, rt.right - rt.left, rt.bottom - rt.top, PATINVERT);
|
||||
draw_splitbar(hWnd, last_split);
|
||||
last_split = x;
|
||||
rt.left = x-SPLIT_WIDTH/2;
|
||||
rt.right = x+SPLIT_WIDTH/2+1;
|
||||
PatBlt(hdc, rt.left, rt.top, rt.right - rt.left, rt.bottom - rt.top, PATINVERT);
|
||||
SelectObject(hdc, OldObj);
|
||||
ReleaseDC(hWnd, hdc);
|
||||
draw_splitbar(hWnd, last_split);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -473,9 +466,6 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
}
|
||||
break;
|
||||
|
||||
case WM_TIMER:
|
||||
break;
|
||||
|
||||
case WM_NOTIFY:
|
||||
if (g_pChildWnd == NULL) break;
|
||||
|
||||
|
@ -668,7 +658,8 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
{
|
||||
ResizeWnd(LOWORD(lParam), HIWORD(lParam));
|
||||
}
|
||||
/* fall through */
|
||||
break;
|
||||
|
||||
default:
|
||||
def:
|
||||
return DefWindowProcW(hWnd, message, wParam, lParam);
|
||||
|
|
|
@ -1670,8 +1670,6 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCWSTR valueName, BOOL EditBin)
|
|||
lRet = ERROR_SUCCESS; /* Allow editing of (Default) values which don't exist */
|
||||
type = REG_SZ;
|
||||
valueDataLen = 0;
|
||||
stringValueData = NULL;
|
||||
binValueData = NULL;
|
||||
}
|
||||
|
||||
if (lRet != ERROR_SUCCESS)
|
||||
|
@ -1937,6 +1935,7 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCWSTR valueName, BOOL EditBin)
|
|||
if (lRet != ERROR_SUCCESS)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, binValueData);
|
||||
binValueData = NULL;
|
||||
error(hwnd, IDS_BAD_VALUE, valueName);
|
||||
goto done;
|
||||
}
|
||||
|
@ -1954,8 +1953,12 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCWSTR valueName, BOOL EditBin)
|
|||
if (lRet == ERROR_SUCCESS)
|
||||
result = TRUE;
|
||||
}
|
||||
if(binValueData != NULL)
|
||||
|
||||
if (binValueData)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, binValueData);
|
||||
binValueData = NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1964,16 +1967,22 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCWSTR valueName, BOOL EditBin)
|
|||
|
||||
done:
|
||||
if (resourceValueData)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, resourceValueData);
|
||||
resourceValueData = NULL;
|
||||
resourceValueData = NULL;
|
||||
}
|
||||
|
||||
if (stringValueData)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, stringValueData);
|
||||
stringValueData = NULL;
|
||||
stringValueData = NULL;
|
||||
}
|
||||
|
||||
if (requirementsValueData)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, requirementsValueData);
|
||||
requirementsValueData = NULL;
|
||||
requirementsValueData = NULL;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -695,7 +695,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "Добре", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "Отказ", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Избор на любимки:", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "Storno", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Vyberte Oblíbené:", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "A&bbrechen", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Favorit(en) auswählen:", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "Ακύρωση", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Επιλογή Αγαπημένου(ων):", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "Cancel", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Select Favorite(s):", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -693,7 +693,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "Aceptar", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "Cancelar", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "Lista1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Seleccionar favoritos:", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "Annuler", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Sélectionnez le(s) favori(s) :", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "אישור", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "ביטול", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "בחירת מועדפים:", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -80,7 +80,7 @@ END
|
|||
|
||||
IDR_REGEDIT_MENU MENU
|
||||
BEGIN
|
||||
POPUP "&File"
|
||||
POPUP "&File" //FIXME: accelerator collision &F
|
||||
BEGIN
|
||||
MENUITEM "&Import Registry File...", ID_REGISTRY_IMPORTREGISTRYFILE
|
||||
MENUITEM "&Export Registry File...", ID_REGISTRY_EXPORTREGISTRYFILE
|
||||
|
@ -128,7 +128,7 @@ BEGIN
|
|||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Refresh\tF5", ID_VIEW_REFRESH
|
||||
END
|
||||
POPUP "&Favorites"
|
||||
POPUP "&Favorites" //FIXME: accelerator collision &F
|
||||
BEGIN
|
||||
MENUITEM "&Add to Favorites", ID_FAVOURITES_ADDTOFAVOURITES, GRAYED
|
||||
MENUITEM "&Remove Favorite", ID_FAVOURITES_REMOVEFAVOURITE, GRAYED
|
||||
|
@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "Cancel", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Select Favorite(s):", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "Batal", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Pilih Favorit:", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -565,7 +565,7 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_IMPORT_PROMPT "Aggiungendo informazioni si possono involontariamente modificare o eliminare i valori e causare il giusto funzionamente dei componenti.\n Se non si considera attendibile la fonte di queste informazioni in '%s', non aggiungere al Registro di sistema.\n\n Si desidera continuare? "
|
||||
IDS_IMPORT_PROMPT "Aggiungendo informazioni si possono involontariamente modificare o eliminare i valori e causare il giusto funzionamente dei componenti.\nSe non si considera attendibile la fonte di queste informazioni in '%s', non aggiungere al Registro di sistema.\n\nSi desidera continuare?"
|
||||
IDS_IMPORT_OK "Le chiavi e i valori contenuti in '%s' sono stati correttamente aggiunti al Registro di sistema."
|
||||
IDS_IMPORT_ERROR "Impossibile importare '%s': Errore durante l'apertura del file. Ci può essere un disco, file cdanneggiati o il file non esiste."
|
||||
IDS_EXPORT_ERROR "Impossibile esportare '%s': Errore durante la creazione o la scrittura del file. Ci può essere un disco o un file di sistema danneggiato."
|
||||
|
@ -698,7 +698,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "Annulla", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Scegli preferiti:", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -690,7 +690,7 @@ FONT 9, "MS UI Gothic"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "キャンセル", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "お気に入りの選択:", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -692,7 +692,7 @@ FONT 9, "굴림"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "확인", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "취소", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "즐겨찾기를 선택:", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "Cancel", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Select Favorite(s):", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "Avbryt", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Velg favoritt(er):", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -700,7 +700,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "Anuluj", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Wybierz ulubione:", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "Cancelar", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Selecionar favorito(s):", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -145,11 +145,11 @@ IDR_POPUP_MENUS MENU
|
|||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "&Modificar", ID_EDIT_MODIFY
|
||||
MENUITEM "&Modificar", ID_EDIT_MODIFY //FIXME: accelerator collision &M
|
||||
MENUITEM "Modificar dados binários", ID_EDIT_MODIFY_BIN
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Excluir\tDel", ID_EDIT_DELETE
|
||||
MENUITEM "&Mudar o nome", ID_EDIT_RENAME
|
||||
MENUITEM "&Mudar o nome", ID_EDIT_RENAME //FIXME: accelerator collision &M
|
||||
END
|
||||
POPUP ""
|
||||
BEGIN
|
||||
|
@ -179,10 +179,10 @@ BEGIN
|
|||
END
|
||||
MENUITEM "&Localizar...", ID_EDIT_FIND
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Eliminar", ID_TREE_DELETE
|
||||
MENUITEM "&Eliminar", ID_TREE_DELETE //FIXME: accelerator collision &E
|
||||
MENUITEM "&Mudar o nome", ID_TREE_RENAME
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Exportar", ID_TREE_EXPORT
|
||||
MENUITEM "&Exportar", ID_TREE_EXPORT //FIXME: accelerator collision &E
|
||||
MENUITEM "&Permissões...", ID_TREE_PERMISSIONS
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Copiar chave 'Nome'", ID_EDIT_COPYKEYNAME
|
||||
|
@ -198,8 +198,8 @@ BEGIN
|
|||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "C&ortar", ID_HEXEDIT_CUT
|
||||
MENUITEM "&Copiar", ID_HEXEDIT_COPY
|
||||
MENUITEM "&Colar", ID_HEXEDIT_PASTE
|
||||
MENUITEM "&Copiar", ID_HEXEDIT_COPY //FIXME: accelerator collision &C
|
||||
MENUITEM "&Colar", ID_HEXEDIT_PASTE //FIXME: accelerator collision &C
|
||||
MENUITEM "&Excluir", ID_HEXEDIT_DELETE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Seleccionar &Tudo", ID_HEXEDIT_SELECT_ALL
|
||||
|
@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "Cancelar", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Seleccione Favorito(s):", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -700,7 +700,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "Con&firmă", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "A&nulează", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Alege favorit(e):", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "Отмена", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Выберите удаляемое:", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -695,7 +695,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "Zrušiť", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Select Favorite(s):", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "Cancel", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Select Favorite(s):", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -694,7 +694,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "Anulo", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Select Favorite(s):", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "Avbryt", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Välj Favorit(er):", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -692,7 +692,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "Cancel", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Select Favorite(s):", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -82,7 +82,7 @@ END
|
|||
|
||||
IDR_REGEDIT_MENU MENU
|
||||
BEGIN
|
||||
POPUP "&Dosya"
|
||||
POPUP "&Dosya" //FIXME: accelerator collision &D. If you decide to change this then please keep it in sync with the "&Dosya" in IDC_REGEDIT MENU
|
||||
BEGIN
|
||||
MENUITEM "&Al...", ID_REGISTRY_IMPORTREGISTRYFILE
|
||||
MENUITEM "&Ver...", ID_REGISTRY_EXPORTREGISTRYFILE
|
||||
|
@ -97,7 +97,7 @@ BEGIN
|
|||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Çıkış", ID_REGISTRY_EXIT
|
||||
END
|
||||
POPUP "&Düzen"
|
||||
POPUP "&Düzen" //FIXME: accelerator collision &D
|
||||
BEGIN
|
||||
MENUITEM "&Değiştir...", ID_EDIT_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
|
@ -159,7 +159,7 @@ BEGIN
|
|||
BEGIN
|
||||
MENUITEM "&Anahtar", ID_EDIT_NEW_KEY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "D&izi Değeri", ID_EDIT_NEW_STRINGVALUE
|
||||
MENUITEM "D&ize Değeri", ID_EDIT_NEW_STRINGVALUE
|
||||
MENUITEM "İ&kili Değer", ID_EDIT_NEW_BINARYVALUE
|
||||
MENUITEM "&DWORD Değeri", ID_EDIT_NEW_DWORDVALUE
|
||||
MENUITEM "&Çoklu Dize Değeri", ID_EDIT_NEW_MULTISTRINGVALUE
|
||||
|
@ -199,8 +199,8 @@ BEGIN
|
|||
END
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "&Kes", ID_HEXEDIT_CUT
|
||||
MENUITEM "&Kopyala", ID_HEXEDIT_COPY
|
||||
MENUITEM "&Kes", ID_HEXEDIT_CUT //FIXME: accelerator collision &K
|
||||
MENUITEM "&Kopyala", ID_HEXEDIT_COPY //FIXME: accelerator collision &K
|
||||
MENUITEM "&Yapıştır", ID_HEXEDIT_PASTE
|
||||
MENUITEM "&Sil", ID_HEXEDIT_DELETE
|
||||
MENUITEM SEPARATOR
|
||||
|
@ -692,7 +692,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "Tamam", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "İptal", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Yer imlerini seçiniz.", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -692,7 +692,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "Скасувати", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "Оберіть імена для видалення:", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -700,7 +700,7 @@ FONT 9, "宋体"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "确定", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "取消", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "选择收藏(&S):", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -698,7 +698,7 @@ FONT 9, "新細明體"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "確定", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "取消", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "選擇資料夾(&S):", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -699,7 +699,7 @@ FONT 9, "新細明體"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "確定", IDOK, 107, 114, 50, 14
|
||||
PUSHBUTTON "取消", IDCANCEL, 7, 114, 50, 14
|
||||
CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER |
|
||||
WS_TABSTOP, 7, 20, 150, 90
|
||||
LTEXT "選擇收藏夾(&S)︰", IDC_STATIC, 7, 7, 99, 12
|
||||
END
|
||||
|
|
|
@ -1222,6 +1222,7 @@ void ProcessPage_OnOpenFileLocation(void)
|
|||
DWORD dwProcessId;
|
||||
DWORD dwLength;
|
||||
LPWSTR pszExePath;
|
||||
static const WCHAR szCmdFormat[] = L"/select,\"%s\"";
|
||||
LPWSTR pszCmdLine = NULL;
|
||||
|
||||
dwProcessId = GetSelectedProcessId();
|
||||
|
@ -1240,14 +1241,18 @@ void ProcessPage_OnOpenFileLocation(void)
|
|||
goto Cleanup;
|
||||
|
||||
/* Build the shell command line */
|
||||
pszCmdLine = HeapAlloc(GetProcessHeap(), 0, (dwLength + CONST_STR_LEN(L"/select,\"\"")) * sizeof(WCHAR));
|
||||
dwLength += CONST_STR_LEN(szCmdFormat) - CONST_STR_LEN(L"%s");
|
||||
pszCmdLine = HeapAlloc(GetProcessHeap(), 0, dwLength * sizeof(WCHAR));
|
||||
if (!pszCmdLine)
|
||||
goto Cleanup;
|
||||
|
||||
StringCchPrintfW(pszCmdLine, dwLength + CONST_STR_LEN(L"/select,\"\""), L"/select,\"%s\"", pszExePath);
|
||||
StringCchPrintfW(pszCmdLine, dwLength, szCmdFormat, pszExePath);
|
||||
|
||||
/* Call the shell to open the file location and select it */
|
||||
ShellExecuteW(NULL, L"open", L"explorer.exe", pszCmdLine, NULL, SW_SHOWNORMAL);
|
||||
/* Call the shell to open the file location and select it. If Explorer shell
|
||||
* is not available, use ReactOS's alternative file browser instead. */
|
||||
ShellExecuteW(NULL, L"open",
|
||||
GetShellWindow() ? L"explorer.exe" : L"filebrowser.exe",
|
||||
pszCmdLine, NULL, SW_SHOWNORMAL);
|
||||
|
||||
Cleanup:
|
||||
HeapFree(GetProcessHeap(), 0, pszCmdLine);
|
||||
|
|
|
@ -2,7 +2,8 @@
|
|||
* PROJECT: ReactOS Utility Manager Resources DLL (UManDlg.dll)
|
||||
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
|
||||
* PURPOSE: Romanian resource file
|
||||
* TRANSLATOR: Copyright 2019 George Bișoc <george.bisoc@reactos.org>
|
||||
* TRANSLATORS: Copyright 2019 George Bișoc <george.bisoc@reactos.org>
|
||||
* Copyright 2024 Andrei Miloiu <miloiuandrei@gmail.com>
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
|
||||
|
@ -17,12 +18,12 @@ BEGIN
|
|||
CONTROL "", IDC_GROUPBOX, "Button", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 3, 62, 275, 92
|
||||
CONTROL "Start", IDC_START, "Button", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 14, 76, 45, 16
|
||||
CONTROL "Oprire", IDC_STOP, "Button", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 69, 76, 45, 16
|
||||
CONTROL "Pornire automată la Log in", IDC_START_LOG_IN, "Button", BS_CHECKBOX | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 12, 101, 206, 14
|
||||
CONTROL "Pornire automată la blocarea spațiului de lucru", IDC_START_DESKTOP, "Button", BS_CHECKBOX | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 12, 118, 212, 14
|
||||
CONTROL "Pornire automată la pornirea Managerului utilități", IDC_START_UTILMAN, "Button", BS_CHECKBOX | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 12, 134, 212, 13
|
||||
CONTROL "&OK", IDC_OK, "Button", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 160, 161, 50, 14
|
||||
CONTROL "&Revocare", IDC_CANCEL, "Button", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 221, 161, 50, 14
|
||||
CONTROL "&Ajutor", IDC_HELP_TOPICS, "Button", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 98, 161, 50, 14
|
||||
CONTROL "Pornire automată la &Log in", IDC_START_LOG_IN, "Button", BS_CHECKBOX | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 12, 101, 206, 14
|
||||
CONTROL "Pornire automată la blocarea &desktopului", IDC_START_DESKTOP, "Button", BS_CHECKBOX | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 12, 118, 212, 14
|
||||
CONTROL "Pornire automată la pornirea Managerului &utilităţi", IDC_START_UTILMAN, "Button", BS_CHECKBOX | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 12, 134, 212, 13
|
||||
CONTROL "OK", IDC_OK, "Button", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 160, 161, 50, 14
|
||||
CONTROL "Revocare", IDC_CANCEL, "Button", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 221, 161, 50, 14
|
||||
CONTROL "Ajutor", IDC_HELP_TOPICS, "Button", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 98, 161, 50, 14
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@ -40,7 +41,7 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDM_ABOUT "Despre Managerul utilitare..."
|
||||
IDM_ABOUT "Despre Managerul utilitare"
|
||||
IDS_APP_NAME "Manager utilitare"
|
||||
IDS_AUTHORS "Drept de autor 2019 George Bișoc, Hermes Belusca-Maito"
|
||||
END
|
||||
|
|
|
@ -459,7 +459,7 @@ public:
|
|||
/* Enumerate all bands */
|
||||
while (SUCCEEDED(m_BandSite->EnumBands(uBand, &dwBandID)))
|
||||
{
|
||||
if (SUCCEEDED(m_BandSite->GetBandObject(dwBandID, IID_PPV_ARG(IPersist, &pBand))))
|
||||
if (dwBandID && SUCCEEDED(m_BandSite->GetBandObject(dwBandID, IID_PPV_ARG(IPersist, &pBand))))
|
||||
{
|
||||
if (SUCCEEDED(pBand->GetClassID(&BandCLSID)))
|
||||
{
|
||||
|
|
|
@ -274,3 +274,11 @@ LPVOID *ppv)
|
|||
|
||||
return ShellObjectCreatorInit<CRShellClassFactory>(rclsid, riid, ppv);
|
||||
}
|
||||
|
||||
VOID WINAPI ShowFolderOptionsDialog(UINT Page, BOOL Async)
|
||||
{
|
||||
char buf[MAX_PATH];
|
||||
wsprintfA(buf, "rundll32.exe shell32.dll,Options_RunDLL %u", Page);
|
||||
WinExec(buf, SW_SHOW);
|
||||
}
|
||||
|
||||
|
|
|
@ -64,36 +64,24 @@
|
|||
; DarkGray, LightBlue, LightGreen, LightCyan, LightRed, LightMagenta,
|
||||
; Yellow, White, Default.
|
||||
;
|
||||
; Default color is the one that is being used by BIOS firmware by default.
|
||||
; Default color is the one that is being used by the firmware by default.
|
||||
; On PC/AT-compatible machines it's Gray, and on NEC PC-98 series it's White.
|
||||
|
||||
; [OS-General] Section Commands:
|
||||
;
|
||||
; BootType - Specifies the boot type: Windows, WindowsNT40, Windows2003,
|
||||
; ReactOSSetup, Linux, BootSector, Partition, Drive
|
||||
; BootType - Specifies the boot type: BootSector, Linux,
|
||||
; Windows, WindowsNT40, Windows2003, ReactOSSetup.
|
||||
;
|
||||
; BootPath - ARC path, e.g. multi(0)disk(0)rdisk(x)partition(y)
|
||||
; DriveMap - Maps a BIOS drive number to another (i.e. DriveMap=hd1,hd0
|
||||
; maps harddisk1 to harddisk0; or DriveMap=fd1,fd0).
|
||||
|
||||
; ["Drive" OSType] Section Commands:
|
||||
;
|
||||
; BootDrive - BIOS drive number to be used.
|
||||
;
|
||||
; REMARK: If a "BootPath" ARC path is specified, its value takes precedence
|
||||
; over the "BootDrive" value.
|
||||
|
||||
; ["Partition" OSType] Section Commands:
|
||||
;
|
||||
; BootDrive - BIOS drive number to be used.
|
||||
; BootPartition - Partition number to be used (default: 0).
|
||||
;
|
||||
; REMARK: If a "BootPath" ARC path is specified, its value takes precedence
|
||||
; over both the "BootDrive" and "BootPartition" values.
|
||||
; DriveMap - For BIOS-based PCs, maps a BIOS drive number to another
|
||||
; (i.e. DriveMap=hd1,hd0 maps hard-disk 1 to hard-disk 0;
|
||||
; or DriveMap=fd1,fd0 for mapping floppy disks).
|
||||
|
||||
; ["BootSector" OSType] Section Commands:
|
||||
;
|
||||
; BootDrive - BIOS drive number to be used.
|
||||
; BootPartition - Partition number to be used (cannot be 0).
|
||||
; BootPartition - Partition number to be used (optional).
|
||||
;
|
||||
; REMARK: If a "BootPath" ARC path is specified, its value takes precedence
|
||||
; over both the "BootDrive" and "BootPartition" values.
|
||||
|
@ -102,7 +90,11 @@
|
|||
; If none of them are given and a relative file path is specified by the
|
||||
; "BootSectorFile" value, the default boot partition will be used instead.
|
||||
;
|
||||
; BootSectorFile - File name of the bootsector to be loaded.
|
||||
; When a non-zero partition is specified (either via "BootPartition" or
|
||||
; via the "BootPath" ARC path), the drive is accessed in partitioned mode,
|
||||
; and the "BootSectorFile" option is checked for its presence.
|
||||
;
|
||||
; BootSectorFile - File name of the boot sector to be loaded.
|
||||
; It can be either relative to "BootDrive" and "BootPartition"
|
||||
; (or to "BootPath"), or be an absolute ARC path, in which case
|
||||
; the "BootDrive" and "BootPartition" (or "BootPath") values
|
||||
|
@ -195,6 +187,7 @@ SpecialEffects=Yes
|
|||
|
||||
[Operating Systems]
|
||||
ReactOSHD="ReactOS (HardDrive)"
|
||||
;ReactOS_Debug="ReactOS (Debug)"
|
||||
ReactOSFloppy="ReactOS (Floppy)"
|
||||
Linux="Debian Linux"
|
||||
Floppy="3 1/2 Floppy (A:)"
|
||||
|
@ -209,6 +202,13 @@ Options=/DEBUGPORT=SCREEN
|
|||
Kernel=\REACTOS\SYSTEM32\NTOSKRNL.EXE
|
||||
Hal=\REACTOS\SYSTEM32\HAL.DLL
|
||||
|
||||
;[ReactOS_Debug]
|
||||
;BootType=Windows2003
|
||||
;SystemPath=multi(0)disk(0)rdisk(0)partition(1)\reactos
|
||||
;Options=/DEBUG /DEBUGPORT=COM1 /BAUDRATE=19200
|
||||
;Kernel=\NTOSKRNL.EXE
|
||||
;Hal=\HAL.DLL
|
||||
|
||||
; Load ReactOS from floppy (drive A:)
|
||||
[ReactOSFloppy]
|
||||
BootType=Windows2003
|
||||
|
@ -217,13 +217,6 @@ Options=/DEBUGPORT=SCREEN
|
|||
Kernel=\reactos\NTOSKRNL.EXE
|
||||
Hal=\reactos\HAL.DLL
|
||||
|
||||
;[ReactOS (Debug)]
|
||||
;BootType=Windows2003
|
||||
;SystemPath=multi(0)disk(0)rdisk(0)partition(1)\reactos
|
||||
;Options=/DEBUG /DEBUGPORT=COM1 /BAUDRATE=19200
|
||||
;Kernel=\NTOSKRNL.EXE
|
||||
;Hal=\HAL.DLL
|
||||
|
||||
[Linux]
|
||||
BootType=Linux
|
||||
BootPath=multi(0)disk(0)rdisk(1)partition(1)
|
||||
|
@ -232,16 +225,16 @@ Initrd=/initrd.img
|
|||
CommandLine="root=/dev/sdb1"
|
||||
|
||||
[Floppy]
|
||||
BootType=Drive
|
||||
BootType=BootSector
|
||||
BootDrive=fd0
|
||||
|
||||
[MSWinders]
|
||||
BootType=Partition
|
||||
BootType=BootSector
|
||||
BootPath=multi(0)disk(0)rdisk(0)partition(1)
|
||||
;DriveMap=hd1,hd0
|
||||
;DriveMap=hd2,hd0
|
||||
;DriveMap=hd3,hd0
|
||||
|
||||
[DriveD]
|
||||
BootType=Partition
|
||||
BootType=BootSector
|
||||
BootPath=multi(0)disk(0)rdisk(1)partition(1)
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
|
||||
#include <asm.inc>
|
||||
#include <ksamd64.inc>
|
||||
#include <arch/pc/x86common.h>
|
||||
#include <arch/pc/pcbios.h>
|
||||
|
||||
|
@ -38,6 +39,18 @@ ContinueAddress:
|
|||
|
||||
FrldrStartup:
|
||||
|
||||
/* Set up CR0 for SSE */
|
||||
mov rax, cr0
|
||||
and eax, not CR0_EM // Clear coprocessor emulation CR0.EM CR0.EM (bit 2)
|
||||
or rax, CR0_MP // Set coprocessor monitoring CR0.MP (bit 1)
|
||||
mov cr0, rax
|
||||
|
||||
/* Set up CR4 for SSE */
|
||||
mov rax, cr4
|
||||
or eax, CR4_FXSR // Enable fx save/restore CR4.OSFXSR (bit 9)
|
||||
or eax, CR4_XMMEXCPT // Enable XMMI exceptions CR4.OSXMMEXCPT (bit 10)
|
||||
mov cr4, rax
|
||||
|
||||
/* Store BootDrive and BootPartition */
|
||||
mov al, byte ptr [BSS_BootDrive]
|
||||
mov byte ptr [FrldrBootDrive], al
|
||||
|
|
|
@ -23,8 +23,6 @@
|
|||
|
||||
EXTERN DiskStopFloppyMotor:PROC
|
||||
EXTERN Relocator16Boot:PROC
|
||||
EXTERN FrldrBootDrive:BYTE
|
||||
EXTERN FrldrBootPartition:DWORD
|
||||
|
||||
.code64
|
||||
|
||||
|
@ -32,12 +30,11 @@ Regs:
|
|||
.space REGS_SIZE
|
||||
|
||||
/*
|
||||
* VOID __cdecl BootLinuxKernel(
|
||||
* IN ULONG KernelSize<ecx>,
|
||||
* IN PVOID KernelCurrentLoadAddress<rdx>,
|
||||
* IN PVOID KernelTargetLoadAddress<r8>,
|
||||
* IN UCHAR DriveNumber<r9b>,
|
||||
* IN ULONG PartitionNumber<rsp+40>);
|
||||
* VOID __cdecl
|
||||
* BootLinuxKernel(
|
||||
* _In_ ULONG KernelSize<ecx>,
|
||||
* _In_ PVOID KernelCurrentLoadAddress<rdx>,
|
||||
* _In_ PVOID KernelTargetLoadAddress<r8>);
|
||||
*/
|
||||
PUBLIC BootLinuxKernel
|
||||
BootLinuxKernel:
|
||||
|
@ -47,7 +44,6 @@ BootLinuxKernel:
|
|||
mov dword ptr [r11 + 8], ecx
|
||||
mov qword ptr [r11 + 16], rdx
|
||||
mov qword ptr [r11 + 24], r8
|
||||
mov byte ptr [r11 + 32], r9b
|
||||
|
||||
/* Save non-volatile registers */
|
||||
push rsi
|
||||
|
@ -67,25 +63,6 @@ BootLinuxKernel:
|
|||
mov word ptr [Regs + REGS_FS], ax
|
||||
mov word ptr [Regs + REGS_GS], ax
|
||||
|
||||
/* Set the boot drive */
|
||||
xor edx, edx
|
||||
mov dl, byte ptr [r11 + 32]
|
||||
test dl, dl
|
||||
jnz set_part
|
||||
mov dl, byte ptr /*ds:*/[FrldrBootDrive]
|
||||
|
||||
/* Set the boot partition */
|
||||
set_part:
|
||||
mov eax, dword ptr [r11 + 40]
|
||||
test eax, eax
|
||||
jnz continue
|
||||
mov eax, dword ptr /*ds:*/[FrldrBootPartition]
|
||||
continue:
|
||||
/* Store the 1-byte truncated partition number in DH */
|
||||
mov dh, al
|
||||
|
||||
mov dword ptr [Regs + REGS_EDX], edx
|
||||
|
||||
/*
|
||||
* Relocate the kernel image to its final destination (can be as low as 0x10000).
|
||||
* The reason we can overwrite low memory is because this code executes
|
||||
|
|
|
@ -23,8 +23,6 @@
|
|||
|
||||
EXTERN _DiskStopFloppyMotor:PROC
|
||||
EXTERN _Relocator16Boot:PROC
|
||||
EXTERN _FrldrBootDrive:BYTE
|
||||
EXTERN _FrldrBootPartition:DWORD
|
||||
|
||||
.code32
|
||||
|
||||
|
@ -32,12 +30,11 @@ Regs:
|
|||
.space REGS_SIZE
|
||||
|
||||
/*
|
||||
* VOID __cdecl BootLinuxKernel(
|
||||
* IN ULONG KernelSize,
|
||||
* IN PVOID KernelCurrentLoadAddress,
|
||||
* IN PVOID KernelTargetLoadAddress,
|
||||
* IN UCHAR DriveNumber,
|
||||
* IN ULONG PartitionNumber);
|
||||
* VOID __cdecl
|
||||
* BootLinuxKernel(
|
||||
* _In_ ULONG KernelSize,
|
||||
* _In_ PVOID KernelCurrentLoadAddress,
|
||||
* _In_ PVOID KernelTargetLoadAddress);
|
||||
*/
|
||||
PUBLIC _BootLinuxKernel
|
||||
_BootLinuxKernel:
|
||||
|
@ -52,25 +49,6 @@ _BootLinuxKernel:
|
|||
mov word ptr [Regs + REGS_FS], ax
|
||||
mov word ptr [Regs + REGS_GS], ax
|
||||
|
||||
/* Set the boot drive */
|
||||
xor edx, edx
|
||||
mov dl, byte ptr [esp + 16]
|
||||
test dl, dl
|
||||
jnz set_part
|
||||
mov dl, byte ptr ds:[_FrldrBootDrive]
|
||||
|
||||
/* Set the boot partition */
|
||||
set_part:
|
||||
mov eax, dword ptr [esp + 20]
|
||||
test eax, eax
|
||||
jnz continue
|
||||
mov eax, dword ptr ds:[_FrldrBootPartition]
|
||||
continue:
|
||||
/* Store the 1-byte truncated partition number in DH */
|
||||
mov dh, al
|
||||
|
||||
mov dword ptr [Regs + REGS_EDX], edx
|
||||
|
||||
/*
|
||||
* Relocate the kernel image to its final destination (can be as low as 0x10000).
|
||||
* The reason we can overwrite low memory is because this code executes
|
||||
|
|
|
@ -322,9 +322,8 @@ ExitToLongMode:
|
|||
mov word ptr ds:[stack16], sp
|
||||
|
||||
/* Set PAE and PGE: 10100000b */
|
||||
// mov eax, cr4
|
||||
// or eax, HEX(00A0)
|
||||
mov eax, HEX(00A0)
|
||||
mov eax, cr4
|
||||
or eax, HEX(00A0)
|
||||
mov cr4, eax
|
||||
|
||||
/* Point cr3 at the PML4 */
|
||||
|
|
|
@ -58,21 +58,48 @@ OSLoadingMethods[] =
|
|||
|
||||
#if defined(_M_IX86) || defined(_M_AMD64)
|
||||
#ifndef UEFIBOOT
|
||||
{"Drive" , EditCustomBootDisk , LoadAndBootDevice},
|
||||
{"Partition" , EditCustomBootPartition , LoadAndBootDevice},
|
||||
{"BootSector" , EditCustomBootSectorFile, LoadAndBootDevice},
|
||||
{"Linux" , EditCustomBootLinux, LoadAndBootLinux },
|
||||
{"BootSector", EditCustomBootSector, LoadAndBootSector},
|
||||
{"Linux" , EditCustomBootLinux , LoadAndBootLinux },
|
||||
#endif
|
||||
#endif
|
||||
#ifdef _M_IX86
|
||||
{"WindowsNT40" , EditCustomBootNTOS , LoadAndBootWindows},
|
||||
{"WindowsNT40" , EditCustomBootNTOS, LoadAndBootWindows},
|
||||
#endif
|
||||
{"Windows" , EditCustomBootNTOS , LoadAndBootWindows},
|
||||
{"Windows2003" , EditCustomBootNTOS , LoadAndBootWindows},
|
||||
{"Windows" , EditCustomBootNTOS, LoadAndBootWindows},
|
||||
{"Windows2003" , EditCustomBootNTOS, LoadAndBootWindows},
|
||||
{"WindowsVista", EditCustomBootNTOS, LoadAndBootWindows},
|
||||
};
|
||||
|
||||
/* FUNCTIONS ******************************************************************/
|
||||
|
||||
#ifdef HAS_DEPRECATED_OPTIONS
|
||||
/**
|
||||
* @brief Helper for dealing with DEPRECATED features.
|
||||
**/
|
||||
VOID
|
||||
WarnDeprecated(
|
||||
_In_ PCSTR MsgFmt,
|
||||
...)
|
||||
{
|
||||
va_list ap;
|
||||
CHAR msgString[300];
|
||||
|
||||
va_start(ap, MsgFmt);
|
||||
RtlStringCbVPrintfA(msgString, sizeof(msgString),
|
||||
MsgFmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
UiMessageBox(
|
||||
" WARNING!\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Should you need assistance, please contact ReactOS developers\n"
|
||||
"on the official ReactOS Mattermost server <chat.reactos.org>.",
|
||||
msgString);
|
||||
}
|
||||
#endif // HAS_DEPRECATED_OPTIONS
|
||||
|
||||
static const OS_LOADING_METHOD*
|
||||
GetOSLoadingMethod(
|
||||
_In_ ULONG_PTR SectionId)
|
||||
|
@ -89,28 +116,61 @@ GetOSLoadingMethod(
|
|||
IniReadSettingByName(SectionId, "BootType", BootType, sizeof(BootType));
|
||||
ASSERT(*BootType);
|
||||
|
||||
////
|
||||
#ifdef HAS_DEPRECATED_OPTIONS
|
||||
if ((_stricmp(BootType, "Drive") == 0) ||
|
||||
(_stricmp(BootType, "Partition") == 0))
|
||||
{
|
||||
/* Display the deprecation warning message */
|
||||
WarnDeprecated(
|
||||
"The '%s' configuration you are booting into is no longer\n"
|
||||
"supported and will be removed in future FreeLoader versions.\n"
|
||||
"\n"
|
||||
"Please edit FREELDR.INI to replace all occurrences of\n"
|
||||
"\n"
|
||||
" %*s to:\n"
|
||||
" BootType=%s ------> BootType=BootSector",
|
||||
BootType,
|
||||
strlen(BootType), "", // Indentation
|
||||
BootType);
|
||||
|
||||
/* Type fixup */
|
||||
strcpy(BootType, "BootSector");
|
||||
if (!IniModifySettingValue(SectionId, "BootType", BootType))
|
||||
{
|
||||
ERR("Could not fixup the BootType entry for OS '%s', ignoring.\n",
|
||||
((PINI_SECTION)SectionId)->SectionName);
|
||||
}
|
||||
}
|
||||
#endif // HAS_DEPRECATED_OPTIONS
|
||||
////
|
||||
|
||||
/* Find the suitable OS loading method */
|
||||
for (i = 0; ; ++i)
|
||||
{
|
||||
if (i >= RTL_NUMBER_OF(OSLoadingMethods))
|
||||
{
|
||||
UiMessageBox("Unknown boot entry type '%s'", BootType);
|
||||
return NULL;
|
||||
}
|
||||
if (_stricmp(BootType, OSLoadingMethods[i].BootType) == 0)
|
||||
return &OSLoadingMethods[i];
|
||||
}
|
||||
UNREACHABLE;
|
||||
}
|
||||
|
||||
/*
|
||||
* This function converts the list of key=value options in the given operating
|
||||
/**
|
||||
* @brief
|
||||
* This function converts the list of Key=Value options in the given operating
|
||||
* system section into an ARC-compatible argument vector, providing in addition
|
||||
* the extra mandatory Software Loading Environment Variables, following the
|
||||
* ARC specification.
|
||||
*/
|
||||
**/
|
||||
static PCHAR*
|
||||
BuildArgvForOsLoader(
|
||||
IN PCSTR LoadIdentifier,
|
||||
IN ULONG_PTR SectionId,
|
||||
OUT PULONG pArgc)
|
||||
_In_ PCSTR LoadIdentifier,
|
||||
_In_ ULONG_PTR SectionId,
|
||||
_Out_ PULONG pArgc)
|
||||
{
|
||||
SIZE_T Size;
|
||||
ULONG Count;
|
||||
|
@ -124,7 +184,7 @@ BuildArgvForOsLoader(
|
|||
|
||||
ASSERT(SectionId != 0);
|
||||
|
||||
/* Validate the LoadIdentifier (to make tests simpler later) */
|
||||
/* Normalize LoadIdentifier to make subsequent tests simpler */
|
||||
if (LoadIdentifier && !*LoadIdentifier)
|
||||
LoadIdentifier = NULL;
|
||||
|
||||
|
@ -134,19 +194,24 @@ BuildArgvForOsLoader(
|
|||
/*
|
||||
* The argument vector contains the program name, the SystemPartition,
|
||||
* the LoadIdentifier (optional), and the items in the OS section.
|
||||
* For POSIX compliance, a terminating NULL pointer (not counted in Argc)
|
||||
* is appended, such that Argv[Argc] == NULL.
|
||||
*/
|
||||
Argc = 2 + (LoadIdentifier ? 1 : 0) + Count;
|
||||
|
||||
/* Calculate the total size needed for the string buffer of the argument vector */
|
||||
Size = 0;
|
||||
/* i == 0: Program name */
|
||||
// TODO: Provide one in the future...
|
||||
/* i == 1: SystemPartition : from where FreeLdr has been started */
|
||||
Size += (strlen("SystemPartition=") + strlen(FrLdrBootPath) + 1) * sizeof(CHAR);
|
||||
/* i == 2: LoadIdentifier : ASCII string that may be used to associate an identifier with a set of load parameters */
|
||||
/* i == 2: LoadIdentifier : ASCII string that may be used
|
||||
* to associate an identifier with a set of load parameters */
|
||||
if (LoadIdentifier)
|
||||
{
|
||||
Size += (strlen("LoadIdentifier=") + strlen(LoadIdentifier) + 1) * sizeof(CHAR);
|
||||
}
|
||||
/* The section items */
|
||||
for (i = 0; i < Count; ++i)
|
||||
{
|
||||
Size += IniGetSectionSettingNameSize(SectionId, i); // Counts also the NULL-terminator, that we transform into the '=' sign separator.
|
||||
|
@ -155,15 +220,15 @@ BuildArgvForOsLoader(
|
|||
Size += sizeof(ANSI_NULL); // Final NULL-terminator.
|
||||
|
||||
/* Allocate memory to hold the argument vector: pointers and string buffer */
|
||||
Argv = FrLdrHeapAlloc(Argc * sizeof(PCHAR) + Size, TAG_STRING);
|
||||
Argv = FrLdrHeapAlloc((Argc + 1) * sizeof(PCHAR) + Size, TAG_STRING);
|
||||
if (!Argv)
|
||||
return NULL;
|
||||
|
||||
/* Initialize the argument vector: loop through the section and copy the key=value options */
|
||||
SettingName = (PCHAR)((ULONG_PTR)Argv + (Argc * sizeof(PCHAR)));
|
||||
/* Initialize the argument vector: loop through the section and copy the Key=Value options */
|
||||
SettingName = (PCHAR)((ULONG_PTR)Argv + ((Argc + 1) * sizeof(PCHAR)));
|
||||
Args = Argv;
|
||||
/* i == 0: Program name */
|
||||
*Args++ = NULL;
|
||||
*Args++ = NULL; // TODO: Provide one in the future...
|
||||
/* i == 1: SystemPartition */
|
||||
{
|
||||
strcpy(SettingName, "SystemPartition=");
|
||||
|
@ -181,6 +246,7 @@ BuildArgvForOsLoader(
|
|||
*Args++ = SettingName;
|
||||
SettingName += (strlen(SettingName) + 1);
|
||||
}
|
||||
/* The section items */
|
||||
for (i = 0; i < Count; ++i)
|
||||
{
|
||||
Size = IniGetSectionSettingNameSize(SectionId, i);
|
||||
|
@ -193,6 +259,8 @@ BuildArgvForOsLoader(
|
|||
*Args++ = SettingName;
|
||||
SettingName += (strlen(SettingName) + 1);
|
||||
}
|
||||
/* Terminating NULL pointer */
|
||||
*Args = NULL;
|
||||
|
||||
#if DBG
|
||||
/* Dump the argument vector for debugging */
|
||||
|
|
|
@ -24,21 +24,89 @@
|
|||
/* GLOBALS ********************************************************************/
|
||||
|
||||
#if defined(_M_IX86) || defined(_M_AMD64)
|
||||
|
||||
const CHAR BootSectorFilePrompt[] = "Enter the boot sector file path.\n\nExamples:\n\\BOOTSECT.DOS\n/boot/bootsect.dos";
|
||||
const CHAR LinuxKernelPrompt[] = "Enter the Linux kernel image path.\n\nExamples:\n/vmlinuz\n/boot/vmlinuz-2.4.18";
|
||||
const CHAR LinuxInitrdPrompt[] = "Enter the initrd image path.\n\nExamples:\n/initrd.gz\n/boot/root.img.gz\n\nLeave blank for no initial ram disk.";
|
||||
const CHAR LinuxCommandLinePrompt[] = "Enter the Linux kernel command line.\n\nExamples:\nroot=/dev/hda1\nroot=/dev/fd0 read-only\nroot=/dev/sdb1 init=/sbin/init";
|
||||
|
||||
static const PCSTR BootSectorFilePrompt =
|
||||
"Enter the boot sector file path.\n"
|
||||
"Leave blank for booting a disk or partition.\n"
|
||||
"\n"
|
||||
"Examples:\n"
|
||||
"\\BOOTSECT.DOS\n"
|
||||
"/boot/bootsect.dos";
|
||||
static const PCSTR LinuxKernelPrompt =
|
||||
"Enter the Linux kernel image path.\n"
|
||||
"\n"
|
||||
"Examples:\n"
|
||||
"/vmlinuz\n"
|
||||
"/boot/vmlinuz-2.4.18";
|
||||
static const PCSTR LinuxInitrdPrompt =
|
||||
"Enter the initrd image path.\n"
|
||||
"Leave blank for no initial ramdisk.\n"
|
||||
"\n"
|
||||
"Examples:\n"
|
||||
"/initrd.gz\n"
|
||||
"/boot/root.img.gz";
|
||||
static const PCSTR LinuxCommandLinePrompt =
|
||||
"Enter the Linux kernel command line.\n"
|
||||
"\n"
|
||||
"Examples:\n"
|
||||
"root=/dev/hda1\n"
|
||||
"root=/dev/fd0 read-only\n"
|
||||
"root=/dev/sdb1 init=/sbin/init";
|
||||
#endif /* _M_IX86 || _M_AMD64 */
|
||||
|
||||
const CHAR BootDrivePrompt[] = "Enter the boot drive.\n\nExamples:\nfd0 - first floppy drive\nhd0 - first hard drive\nhd1 - second hard drive\ncd0 - first CD-ROM drive.\n\nBIOS drive numbers may also be used:\n0 - first floppy drive\n0x80 - first hard drive\n0x81 - second hard drive";
|
||||
const CHAR BootPartitionPrompt[] = "Enter the boot partition.\n\nEnter 0 for the active (bootable) partition.";
|
||||
const CHAR ARCPathPrompt[] = "Enter the boot ARC path.\n\nExamples:\nmulti(0)disk(0)rdisk(0)partition(1)\nmulti(0)disk(0)fdisk(0)";
|
||||
const CHAR ReactOSSystemPathPrompt[] = "Enter the path to your ReactOS system directory.\n\nExamples:\n\\REACTOS\n\\ROS";
|
||||
const CHAR ReactOSOptionsPrompt[] = "Enter the load options you want passed to the kernel.\n\nExamples:\n/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200\n/FASTDETECT /SOS /NOGUIBOOT\n/BASEVIDEO /MAXMEM=64\n/KERNEL=NTKRNLMP.EXE /HAL=HALMPS.DLL";
|
||||
const CHAR ReactOSSetupOptionsPrompt[] = "Enter additional load options you want passed to the ReactOS Setup.\nThese options will supplement those obtained from the TXTSETUP.SIF\nfile, unless you also specify the /SIFOPTIONSOVERRIDE option switch.\n\nExample:\n/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200 /NOGUIBOOT";
|
||||
const CHAR CustomBootPrompt[] = "Press ENTER to boot your custom boot setup.";
|
||||
static const PCSTR BootDrivePrompt =
|
||||
"Enter the boot drive.\n"
|
||||
"\n"
|
||||
"Examples:\n"
|
||||
"fd0 - first floppy drive\n"
|
||||
"hd0 - first hard drive\n"
|
||||
"hd1 - second hard drive\n"
|
||||
"cd0 - first CD-ROM drive.\n"
|
||||
"\n"
|
||||
"BIOS drive numbers may also be used:\n"
|
||||
"0 - first floppy drive\n"
|
||||
"0x80 - first hard drive\n"
|
||||
"0x81 - second hard drive";
|
||||
static const PCSTR BootPartitionPrompt =
|
||||
"Enter the boot partition.\n";
|
||||
// "\n"
|
||||
// "Enter 0 for the active (bootable) partition.";
|
||||
/* NOTE: "Active"/bootable partition is a per-platform concept,
|
||||
* and may not really exist. In addition, partition(0) in ARC
|
||||
* means the whole disk (in non-partitioned access).
|
||||
* Commit f2854a864 (r17736) and CORE-156 are thus inaccurate
|
||||
* in this regard. */
|
||||
|
||||
static const PCSTR ARCPathPrompt =
|
||||
"Enter the boot ARC path.\n"
|
||||
"\n"
|
||||
"Examples:\n"
|
||||
"multi(0)disk(0)rdisk(0)partition(1)\n"
|
||||
"multi(0)disk(0)fdisk(0)";
|
||||
|
||||
static const PCSTR ReactOSSystemPathPrompt =
|
||||
"Enter the path to your ReactOS system directory.\n"
|
||||
"\n"
|
||||
"Examples:\n"
|
||||
"\\REACTOS\n"
|
||||
"\\ROS";
|
||||
static const PCSTR ReactOSOptionsPrompt =
|
||||
"Enter the load options you want passed to the kernel.\n"
|
||||
"\n"
|
||||
"Examples:\n"
|
||||
"/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200\n"
|
||||
"/FASTDETECT /SOS /NOGUIBOOT\n"
|
||||
"/BASEVIDEO /MAXMEM=64\n"
|
||||
"/KERNEL=NTKRNLMP.EXE /HAL=HALMPS.DLL";
|
||||
static const PCSTR ReactOSSetupOptionsPrompt =
|
||||
"Enter additional load options you want passed to the ReactOS Setup.\n"
|
||||
"These options will supplement those obtained from the TXTSETUP.SIF\n"
|
||||
"file, unless you also specify the /SIFOPTIONSOVERRIDE option switch.\n"
|
||||
"\n"
|
||||
"Example:\n"
|
||||
"/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200 /NOGUIBOOT";
|
||||
|
||||
static const PCSTR CustomBootPrompt =
|
||||
"Press ENTER to boot your custom boot setup.";
|
||||
|
||||
/* FUNCTIONS ******************************************************************/
|
||||
|
||||
|
@ -48,9 +116,7 @@ VOID OptionMenuCustomBoot(VOID)
|
|||
{
|
||||
PCSTR CustomBootMenuList[] = {
|
||||
#if defined(_M_IX86) || defined(_M_AMD64)
|
||||
"Disk",
|
||||
"Partition",
|
||||
"Boot Sector File",
|
||||
"Boot Sector (Disk/Partition/File)",
|
||||
"Linux",
|
||||
#endif
|
||||
"ReactOS",
|
||||
|
@ -77,22 +143,16 @@ VOID OptionMenuCustomBoot(VOID)
|
|||
switch (SelectedMenuItem)
|
||||
{
|
||||
#if defined(_M_IX86) || defined(_M_AMD64)
|
||||
case 0: // Disk
|
||||
EditCustomBootDisk(&OperatingSystem);
|
||||
case 0: // Boot Sector (Disk/Partition/File)
|
||||
EditCustomBootSector(&OperatingSystem);
|
||||
break;
|
||||
case 1: // Partition
|
||||
EditCustomBootPartition(&OperatingSystem);
|
||||
break;
|
||||
case 2: // Boot Sector File
|
||||
EditCustomBootSectorFile(&OperatingSystem);
|
||||
break;
|
||||
case 3: // Linux
|
||||
case 1: // Linux
|
||||
EditCustomBootLinux(&OperatingSystem);
|
||||
break;
|
||||
case 4: // ReactOS
|
||||
case 2: // ReactOS
|
||||
EditCustomBootReactOS(&OperatingSystem, FALSE);
|
||||
break;
|
||||
case 5: // ReactOS Setup
|
||||
case 3: // ReactOS Setup
|
||||
EditCustomBootReactOS(&OperatingSystem, TRUE);
|
||||
break;
|
||||
#else
|
||||
|
@ -118,103 +178,8 @@ VOID OptionMenuCustomBoot(VOID)
|
|||
#if defined(_M_IX86) || defined(_M_AMD64)
|
||||
|
||||
VOID
|
||||
EditCustomBootDisk(
|
||||
IN OUT OperatingSystemItem* OperatingSystem)
|
||||
{
|
||||
TIMEINFO* TimeInfo;
|
||||
ULONG_PTR SectionId = OperatingSystem->SectionId;
|
||||
CHAR SectionName[100];
|
||||
/* This construct is a trick for saving some stack space */
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
CHAR Guard1;
|
||||
CHAR Drive[20];
|
||||
CHAR Guard2;
|
||||
};
|
||||
CHAR ArcPath[200];
|
||||
} BootStrings;
|
||||
|
||||
RtlZeroMemory(SectionName, sizeof(SectionName));
|
||||
RtlZeroMemory(&BootStrings, sizeof(BootStrings));
|
||||
|
||||
if (SectionId != 0)
|
||||
{
|
||||
/* Load the settings */
|
||||
|
||||
/* Check whether we have a "BootPath" value (takes precedence over "BootDrive") */
|
||||
*BootStrings.ArcPath = ANSI_NULL;
|
||||
IniReadSettingByName(SectionId, "BootPath", BootStrings.ArcPath, sizeof(BootStrings.ArcPath));
|
||||
if (!*BootStrings.ArcPath)
|
||||
{
|
||||
/* We don't, retrieve the boot drive value instead */
|
||||
IniReadSettingByName(SectionId, "BootDrive", BootStrings.Drive, sizeof(BootStrings.Drive));
|
||||
}
|
||||
}
|
||||
|
||||
if (!*BootStrings.ArcPath)
|
||||
{
|
||||
if (!UiEditBox(BootDrivePrompt, BootStrings.Drive, sizeof(BootStrings.Drive)))
|
||||
return;
|
||||
}
|
||||
if (!*BootStrings.Drive)
|
||||
{
|
||||
if (!UiEditBox(ARCPathPrompt, BootStrings.ArcPath, sizeof(BootStrings.ArcPath)))
|
||||
return;
|
||||
}
|
||||
|
||||
/* Modify the settings values and return if we were in edit mode */
|
||||
if (SectionId != 0)
|
||||
{
|
||||
/* Modify the BootPath if we have one */
|
||||
if (*BootStrings.ArcPath)
|
||||
{
|
||||
IniModifySettingValue(SectionId, "BootPath", BootStrings.ArcPath);
|
||||
}
|
||||
else if (*BootStrings.Drive)
|
||||
{
|
||||
/* Otherwise, modify the BootDrive */
|
||||
IniModifySettingValue(SectionId, "BootDrive", BootStrings.Drive);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/* Generate a unique section name */
|
||||
TimeInfo = ArcGetTime();
|
||||
RtlStringCbPrintfA(SectionName, sizeof(SectionName),
|
||||
"CustomBootDisk%u%u%u%u%u%u",
|
||||
TimeInfo->Year, TimeInfo->Day, TimeInfo->Month,
|
||||
TimeInfo->Hour, TimeInfo->Minute, TimeInfo->Second);
|
||||
|
||||
/* Add the section */
|
||||
if (!IniAddSection(SectionName, &SectionId))
|
||||
return;
|
||||
|
||||
/* Add the BootType */
|
||||
if (!IniAddSettingValueToSection(SectionId, "BootType", "Drive"))
|
||||
return;
|
||||
|
||||
/* Add the BootPath if we have one */
|
||||
if (*BootStrings.ArcPath)
|
||||
{
|
||||
if (!IniAddSettingValueToSection(SectionId, "BootPath", BootStrings.ArcPath))
|
||||
return;
|
||||
}
|
||||
else if (*BootStrings.Drive)
|
||||
{
|
||||
/* Otherwise, add the BootDrive */
|
||||
if (!IniAddSettingValueToSection(SectionId, "BootDrive", BootStrings.Drive))
|
||||
return;
|
||||
}
|
||||
|
||||
OperatingSystem->SectionId = SectionId;
|
||||
OperatingSystem->LoadIdentifier = NULL;
|
||||
}
|
||||
|
||||
VOID
|
||||
EditCustomBootPartition(
|
||||
IN OUT OperatingSystemItem* OperatingSystem)
|
||||
EditCustomBootSector(
|
||||
_Inout_ OperatingSystemItem* OperatingSystem)
|
||||
{
|
||||
TIMEINFO* TimeInfo;
|
||||
ULONG_PTR SectionId = OperatingSystem->SectionId;
|
||||
|
@ -231,9 +196,11 @@ EditCustomBootPartition(
|
|||
};
|
||||
CHAR ArcPath[200];
|
||||
} BootStrings;
|
||||
CHAR BootSectorFile[200];
|
||||
|
||||
RtlZeroMemory(SectionName, sizeof(SectionName));
|
||||
RtlZeroMemory(&BootStrings, sizeof(BootStrings));
|
||||
RtlZeroMemory(BootSectorFile, sizeof(BootSectorFile));
|
||||
|
||||
if (SectionId != 0)
|
||||
{
|
||||
|
@ -251,6 +218,9 @@ EditCustomBootPartition(
|
|||
IniReadSettingByName(SectionId, "BootDrive", BootStrings.Drive, sizeof(BootStrings.Drive));
|
||||
IniReadSettingByName(SectionId, "BootPartition", BootStrings.Partition, sizeof(BootStrings.Partition));
|
||||
}
|
||||
|
||||
/* Always load the file name; it will only be handled later if a partition has been specified */
|
||||
IniReadSettingByName(SectionId, "BootSectorFile", BootSectorFile, sizeof(BootSectorFile));
|
||||
}
|
||||
|
||||
if (!*BootStrings.ArcPath)
|
||||
|
@ -270,122 +240,15 @@ EditCustomBootPartition(
|
|||
return;
|
||||
}
|
||||
|
||||
/* Modify the settings values and return if we were in edit mode */
|
||||
if (SectionId != 0)
|
||||
/* Edit the file name only if a partition has been specified */
|
||||
if ((!*BootStrings.ArcPath && atoi(BootStrings.Partition) != 0) ||
|
||||
(*BootStrings.ArcPath && !strstr(BootStrings.ArcPath, ")partition()") &&
|
||||
!strstr(BootStrings.ArcPath, ")partition(0)")))
|
||||
{
|
||||
/* Modify the BootPath if we have one */
|
||||
if (*BootStrings.ArcPath)
|
||||
{
|
||||
IniModifySettingValue(SectionId, "BootPath", BootStrings.ArcPath);
|
||||
}
|
||||
else if (*BootStrings.Drive)
|
||||
{
|
||||
/* Otherwise, modify the BootDrive and BootPartition */
|
||||
IniModifySettingValue(SectionId, "BootDrive", BootStrings.Drive);
|
||||
IniModifySettingValue(SectionId, "BootPartition", BootStrings.Partition);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/* Generate a unique section name */
|
||||
TimeInfo = ArcGetTime();
|
||||
RtlStringCbPrintfA(SectionName, sizeof(SectionName),
|
||||
"CustomBootPartition%u%u%u%u%u%u",
|
||||
TimeInfo->Year, TimeInfo->Day, TimeInfo->Month,
|
||||
TimeInfo->Hour, TimeInfo->Minute, TimeInfo->Second);
|
||||
|
||||
/* Add the section */
|
||||
if (!IniAddSection(SectionName, &SectionId))
|
||||
return;
|
||||
|
||||
/* Add the BootType */
|
||||
if (!IniAddSettingValueToSection(SectionId, "BootType", "Partition"))
|
||||
return;
|
||||
|
||||
/* Add the BootPath if we have one */
|
||||
if (*BootStrings.ArcPath)
|
||||
{
|
||||
if (!IniAddSettingValueToSection(SectionId, "BootPath", BootStrings.ArcPath))
|
||||
return;
|
||||
}
|
||||
else if (*BootStrings.Drive)
|
||||
{
|
||||
/* Otherwise, add the BootDrive and BootPartition */
|
||||
if (!IniAddSettingValueToSection(SectionId, "BootDrive", BootStrings.Drive))
|
||||
return;
|
||||
|
||||
if (!IniAddSettingValueToSection(SectionId, "BootPartition", BootStrings.Partition))
|
||||
if (!UiEditBox(BootSectorFilePrompt, BootSectorFile, sizeof(BootSectorFile)))
|
||||
return;
|
||||
}
|
||||
|
||||
OperatingSystem->SectionId = SectionId;
|
||||
OperatingSystem->LoadIdentifier = NULL;
|
||||
}
|
||||
|
||||
VOID
|
||||
EditCustomBootSectorFile(
|
||||
IN OUT OperatingSystemItem* OperatingSystem)
|
||||
{
|
||||
TIMEINFO* TimeInfo;
|
||||
ULONG_PTR SectionId = OperatingSystem->SectionId;
|
||||
CHAR SectionName[100];
|
||||
/* This construct is a trick for saving some stack space */
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
CHAR Guard1;
|
||||
CHAR Drive[20];
|
||||
CHAR Partition[20];
|
||||
CHAR Guard2;
|
||||
};
|
||||
CHAR ArcPath[200];
|
||||
} BootStrings;
|
||||
CHAR BootSectorFileString[200];
|
||||
|
||||
RtlZeroMemory(SectionName, sizeof(SectionName));
|
||||
RtlZeroMemory(&BootStrings, sizeof(BootStrings));
|
||||
RtlZeroMemory(BootSectorFileString, sizeof(BootSectorFileString));
|
||||
|
||||
if (SectionId != 0)
|
||||
{
|
||||
/* Load the settings */
|
||||
|
||||
/*
|
||||
* Check whether we have a "BootPath" value (takes precedence
|
||||
* over both "BootDrive" and "BootPartition").
|
||||
*/
|
||||
*BootStrings.ArcPath = ANSI_NULL;
|
||||
IniReadSettingByName(SectionId, "BootPath", BootStrings.ArcPath, sizeof(BootStrings.ArcPath));
|
||||
if (!*BootStrings.ArcPath)
|
||||
{
|
||||
/* We don't, retrieve the boot drive and partition values instead */
|
||||
IniReadSettingByName(SectionId, "BootDrive", BootStrings.Drive, sizeof(BootStrings.Drive));
|
||||
IniReadSettingByName(SectionId, "BootPartition", BootStrings.Partition, sizeof(BootStrings.Partition));
|
||||
}
|
||||
|
||||
IniReadSettingByName(SectionId, "BootSectorFile", BootSectorFileString, sizeof(BootSectorFileString));
|
||||
}
|
||||
|
||||
if (!*BootStrings.ArcPath)
|
||||
{
|
||||
if (!UiEditBox(BootDrivePrompt, BootStrings.Drive, sizeof(BootStrings.Drive)))
|
||||
return;
|
||||
|
||||
if (*BootStrings.Drive)
|
||||
{
|
||||
if (!UiEditBox(BootPartitionPrompt, BootStrings.Partition, sizeof(BootStrings.Partition)))
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (!*BootStrings.Drive)
|
||||
{
|
||||
if (!UiEditBox(ARCPathPrompt, BootStrings.ArcPath, sizeof(BootStrings.ArcPath)))
|
||||
return;
|
||||
}
|
||||
|
||||
if (!UiEditBox(BootSectorFilePrompt, BootSectorFileString, sizeof(BootSectorFileString)))
|
||||
return;
|
||||
|
||||
/* Modify the settings values and return if we were in edit mode */
|
||||
if (SectionId != 0)
|
||||
|
@ -404,22 +267,23 @@ EditCustomBootSectorFile(
|
|||
else
|
||||
{
|
||||
/*
|
||||
* Otherwise, zero out all values: BootSectorFile will be
|
||||
* relative to the default system partition.
|
||||
* Otherwise, reset all values: BootSectorFile
|
||||
* will be relative to the default system partition.
|
||||
*/
|
||||
IniModifySettingValue(SectionId, "BootPath", "");
|
||||
IniModifySettingValue(SectionId, "BootDrive", "");
|
||||
IniModifySettingValue(SectionId, "BootPartition", "");
|
||||
}
|
||||
|
||||
IniModifySettingValue(SectionId, "BootSectorFile", BootSectorFileString);
|
||||
/* Always write back the file name */
|
||||
IniModifySettingValue(SectionId, "BootSectorFile", BootSectorFile);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Generate a unique section name */
|
||||
TimeInfo = ArcGetTime();
|
||||
RtlStringCbPrintfA(SectionName, sizeof(SectionName),
|
||||
"CustomBootSectorFile%u%u%u%u%u%u",
|
||||
"CustomBootSector%u%u%u%u%u%u",
|
||||
TimeInfo->Year, TimeInfo->Day, TimeInfo->Month,
|
||||
TimeInfo->Hour, TimeInfo->Minute, TimeInfo->Second);
|
||||
|
||||
|
@ -447,9 +311,12 @@ EditCustomBootSectorFile(
|
|||
return;
|
||||
}
|
||||
|
||||
/* Add the BootSectorFile */
|
||||
if (!IniAddSettingValueToSection(SectionId, "BootSectorFile", BootSectorFileString))
|
||||
return;
|
||||
/* Add the BootSectorFile if any */
|
||||
if (*BootSectorFile)
|
||||
{
|
||||
if (!IniAddSettingValueToSection(SectionId, "BootSectorFile", BootSectorFile))
|
||||
return;
|
||||
}
|
||||
|
||||
OperatingSystem->SectionId = SectionId;
|
||||
OperatingSystem->LoadIdentifier = NULL;
|
||||
|
@ -549,8 +416,8 @@ EditCustomBootLinux(
|
|||
else
|
||||
{
|
||||
/*
|
||||
* Otherwise, zero out all values: BootSectorFile will be
|
||||
* relative to the default system partition.
|
||||
* Otherwise, reset all values: the files will
|
||||
* be relative to the default system partition.
|
||||
*/
|
||||
IniModifySettingValue(SectionId, "BootPath", "");
|
||||
IniModifySettingValue(SectionId, "BootDrive", "");
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
/*
|
||||
* PROJECT: FreeLoader
|
||||
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
|
||||
* LICENSE: MIT (https://spdx.org/licenses/MIT)
|
||||
* PURPOSE: Generic ARC Support Functions
|
||||
* COPYRIGHT: Copyright 2019 Hermes Belusca-Maito
|
||||
* COPYRIGHT: Copyright 2019-2024 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
@ -10,19 +10,21 @@
|
|||
typedef
|
||||
ARC_STATUS
|
||||
(__cdecl *ARC_ENTRY_POINT)(
|
||||
IN ULONG Argc,
|
||||
IN PCHAR Argv[],
|
||||
IN PCHAR Envp[]);
|
||||
_In_ ULONG Argc,
|
||||
_In_ PCHAR Argv[],
|
||||
_In_ PCHAR Envp[]);
|
||||
|
||||
PCHAR
|
||||
PSTR
|
||||
GetNextArgumentValue(
|
||||
IN ULONG Argc,
|
||||
IN PCHAR Argv[],
|
||||
IN OUT PULONG LastIndex OPTIONAL,
|
||||
IN PCHAR ArgumentName);
|
||||
_In_ ULONG Argc,
|
||||
_In_ PCHAR Argv[],
|
||||
_Inout_opt_ PULONG LastIndex,
|
||||
_In_ PCSTR ArgumentName);
|
||||
|
||||
PCHAR
|
||||
PSTR
|
||||
GetArgumentValue(
|
||||
IN ULONG Argc,
|
||||
IN PCHAR Argv[],
|
||||
IN PCHAR ArgumentName);
|
||||
_In_ ULONG Argc,
|
||||
_In_ PCHAR Argv[],
|
||||
_In_ PCSTR ArgumentName);
|
||||
|
||||
/* EOF */
|
||||
|
|
|
@ -30,16 +30,8 @@ VOID OptionMenuCustomBoot(VOID);
|
|||
#if defined(_M_IX86) || defined(_M_AMD64)
|
||||
|
||||
VOID
|
||||
EditCustomBootDisk(
|
||||
IN OUT OperatingSystemItem* OperatingSystem);
|
||||
|
||||
VOID
|
||||
EditCustomBootPartition(
|
||||
IN OUT OperatingSystemItem* OperatingSystem);
|
||||
|
||||
VOID
|
||||
EditCustomBootSectorFile(
|
||||
IN OUT OperatingSystemItem* OperatingSystem);
|
||||
EditCustomBootSector(
|
||||
_Inout_ OperatingSystemItem* OperatingSystem);
|
||||
|
||||
VOID
|
||||
EditCustomBootLinux(
|
||||
|
|
|
@ -20,6 +20,10 @@
|
|||
#ifndef __FREELDR_H
|
||||
#define __FREELDR_H
|
||||
|
||||
/* Enabled for supporting the deprecated boot options
|
||||
* that will be removed in a future FreeLdr version */
|
||||
#define HAS_DEPRECATED_OPTIONS
|
||||
|
||||
#define UINT64_C(val) val##ULL
|
||||
#define RVA(m, b) ((PVOID)((ULONG_PTR)(b) + (ULONG_PTR)(m)))
|
||||
|
||||
|
@ -126,6 +130,13 @@
|
|||
|
||||
VOID __cdecl BootMain(IN PCCH CmdLine);
|
||||
|
||||
#ifdef HAS_DEPRECATED_OPTIONS
|
||||
VOID
|
||||
WarnDeprecated(
|
||||
_In_ PCSTR MsgFmt,
|
||||
...);
|
||||
#endif
|
||||
|
||||
VOID
|
||||
LoadOperatingSystem(
|
||||
_In_ OperatingSystemItem* OperatingSystem);
|
||||
|
|
|
@ -129,18 +129,17 @@ typedef struct
|
|||
#include <poppack.h>
|
||||
|
||||
// Implemented in linux.S
|
||||
VOID __cdecl BootLinuxKernel(
|
||||
IN ULONG KernelSize,
|
||||
IN PVOID KernelCurrentLoadAddress,
|
||||
IN PVOID KernelTargetLoadAddress,
|
||||
IN UCHAR DriveNumber,
|
||||
IN ULONG PartitionNumber);
|
||||
VOID __cdecl
|
||||
BootLinuxKernel(
|
||||
_In_ ULONG KernelSize,
|
||||
_In_ PVOID KernelCurrentLoadAddress,
|
||||
_In_ PVOID KernelTargetLoadAddress);
|
||||
|
||||
ARC_STATUS
|
||||
LoadAndBootLinux(
|
||||
IN ULONG Argc,
|
||||
IN PCHAR Argv[],
|
||||
IN PCHAR Envp[]);
|
||||
_In_ ULONG Argc,
|
||||
_In_ PCHAR Argv[],
|
||||
_In_ PCHAR Envp[]);
|
||||
|
||||
#endif /* _M_IX86 || _M_AMD64 */
|
||||
|
||||
|
|
|
@ -22,9 +22,9 @@
|
|||
#if defined(_M_IX86) || defined(_M_AMD64)
|
||||
|
||||
ARC_STATUS
|
||||
LoadAndBootDevice(
|
||||
IN ULONG Argc,
|
||||
IN PCHAR Argv[],
|
||||
IN PCHAR Envp[]);
|
||||
LoadAndBootSector(
|
||||
_In_ ULONG Argc,
|
||||
_In_ PCHAR Argv[],
|
||||
_In_ PCHAR Envp[]);
|
||||
|
||||
#endif /* _M_IX86 || _M_AMD64 */
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
#pragma once
|
||||
|
||||
/* Just some stuff */
|
||||
#define VERSION "FreeLoader v3.0"
|
||||
#define VERSION "FreeLoader v3.2"
|
||||
#define COPYRIGHT "Copyright (C) 1996-" COPYRIGHT_YEAR " ReactOS Project"
|
||||
#define AUTHOR_EMAIL "<www.reactos.org>"
|
||||
#define BY_AUTHOR "by ReactOS Project"
|
||||
|
@ -33,7 +33,7 @@
|
|||
// If you add major functionality then you increment the major version and zero the minor & patch versions
|
||||
//
|
||||
#define FREELOADER_MAJOR_VERSION 3
|
||||
#define FREELOADER_MINOR_VERSION 0
|
||||
#define FREELOADER_MINOR_VERSION 2
|
||||
#define FREELOADER_PATCH_VERSION 0
|
||||
|
||||
extern const PCSTR FrLdrVersionString;
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
/*
|
||||
* PROJECT: FreeLoader
|
||||
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
|
||||
* LICENSE: MIT (https://spdx.org/licenses/MIT)
|
||||
* PURPOSE: Generic ARC Support Functions
|
||||
* COPYRIGHT: Copyright 2019 Hermes Belusca-Maito
|
||||
* COPYRIGHT: Copyright 2019-2024 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
|
||||
*/
|
||||
|
||||
/* INCLUDES ******************************************************************/
|
||||
|
@ -11,21 +11,22 @@
|
|||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
PCHAR
|
||||
PSTR
|
||||
GetNextArgumentValue(
|
||||
IN ULONG Argc,
|
||||
IN PCHAR Argv[],
|
||||
IN OUT PULONG LastIndex OPTIONAL,
|
||||
IN PCHAR ArgumentName)
|
||||
_In_ ULONG Argc,
|
||||
_In_ PCHAR Argv[],
|
||||
_Inout_opt_ PULONG LastIndex,
|
||||
_In_ PCSTR ArgumentName)
|
||||
{
|
||||
ULONG i;
|
||||
SIZE_T ArgNameLen = strlen(ArgumentName);
|
||||
|
||||
for (i = (LastIndex ? *LastIndex : 0); i < Argc; ++i)
|
||||
{
|
||||
if (strlen(Argv[i]) >= ArgNameLen + 1 /* Count the '=' sign */ &&
|
||||
_strnicmp(Argv[i], ArgumentName, ArgNameLen) == 0 &&
|
||||
Argv[i][ArgNameLen] == '=')
|
||||
if (Argv[i] /* NULL pointer is a valid entry in Argv: skip it */ &&
|
||||
(strlen(Argv[i]) >= ArgNameLen + 1 /* Count the '=' sign */) &&
|
||||
(_strnicmp(Argv[i], ArgumentName, ArgNameLen) == 0) &&
|
||||
(Argv[i][ArgNameLen] == '='))
|
||||
{
|
||||
/* Found it, return the value */
|
||||
if (LastIndex) *LastIndex = i;
|
||||
|
@ -37,11 +38,13 @@ GetNextArgumentValue(
|
|||
return NULL;
|
||||
}
|
||||
|
||||
PCHAR
|
||||
PSTR
|
||||
GetArgumentValue(
|
||||
IN ULONG Argc,
|
||||
IN PCHAR Argv[],
|
||||
IN PCHAR ArgumentName)
|
||||
_In_ ULONG Argc,
|
||||
_In_ PCHAR Argv[],
|
||||
_In_ PCSTR ArgumentName)
|
||||
{
|
||||
return GetNextArgumentValue(Argc, Argv, NULL, ArgumentName);
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
/*
|
||||
* The x86 Linux Boot Protocol is explained at:
|
||||
* https://www.kernel.org/doc/Documentation/x86/boot.txt
|
||||
* https://www.linux.it/~rubini/docs/boot/boot.html
|
||||
*/
|
||||
|
||||
#if defined(_M_IX86) || defined(_M_AMD64)
|
||||
|
@ -84,21 +85,29 @@ RemoveQuotes(
|
|||
|
||||
ARC_STATUS
|
||||
LoadAndBootLinux(
|
||||
IN ULONG Argc,
|
||||
IN PCHAR Argv[],
|
||||
IN PCHAR Envp[])
|
||||
_In_ ULONG Argc,
|
||||
_In_ PCHAR Argv[],
|
||||
_In_ PCHAR Envp[])
|
||||
{
|
||||
ARC_STATUS Status;
|
||||
PCSTR Description;
|
||||
PCSTR ArgValue;
|
||||
PCSTR BootPath;
|
||||
UCHAR DriveNumber = 0;
|
||||
ULONG PartitionNumber = 0;
|
||||
ULONG LinuxKernel = 0;
|
||||
ULONG LinuxInitrdFile = 0;
|
||||
FILEINFORMATION FileInfo;
|
||||
CHAR ArcPath[MAX_PATH];
|
||||
|
||||
#if DBG
|
||||
/* Ensure the boot type is the one expected */
|
||||
ArgValue = GetArgumentValue(Argc, Argv, "BootType");
|
||||
if (!ArgValue || !*ArgValue || _stricmp(ArgValue, "Linux") != 0)
|
||||
{
|
||||
ERR("Unexpected boot type '%s', aborting\n", ArgValue ? ArgValue : "n/a");
|
||||
return EINVAL;
|
||||
}
|
||||
#endif
|
||||
|
||||
Description = GetArgumentValue(Argc, Argv, "LoadIdentifier");
|
||||
if (Description && *Description)
|
||||
RtlStringCbPrintfA(LinuxBootDescription, sizeof(LinuxBootDescription), "Loading %s...", Description);
|
||||
|
@ -125,10 +134,10 @@ LoadAndBootLinux(
|
|||
ArgValue = GetArgumentValue(Argc, Argv, "BootDrive");
|
||||
if (ArgValue && *ArgValue)
|
||||
{
|
||||
DriveNumber = DriveMapGetBiosDriveNumber(ArgValue);
|
||||
UCHAR DriveNumber = DriveMapGetBiosDriveNumber(ArgValue);
|
||||
|
||||
/* Retrieve the boot partition (not optional and cannot be zero) */
|
||||
PartitionNumber = 0;
|
||||
ULONG PartitionNumber = 0;
|
||||
ArgValue = GetArgumentValue(Argc, Argv, "BootPartition");
|
||||
if (ArgValue && *ArgValue)
|
||||
PartitionNumber = atoi(ArgValue);
|
||||
|
@ -152,17 +161,6 @@ LoadAndBootLinux(
|
|||
}
|
||||
}
|
||||
|
||||
/* If we haven't retrieved the BIOS drive and partition numbers above, do it now */
|
||||
if (PartitionNumber == 0)
|
||||
{
|
||||
/* Retrieve the BIOS drive and partition numbers */
|
||||
if (!DissectArcPath(BootPath, NULL, &DriveNumber, &PartitionNumber))
|
||||
{
|
||||
/* This is not a fatal failure, but just an inconvenience: display a message */
|
||||
TRACE("DissectArcPath(%s) failed to retrieve BIOS drive and partition numbers.\n", BootPath);
|
||||
}
|
||||
}
|
||||
|
||||
/* Get the kernel name */
|
||||
LinuxKernelName = GetArgumentValue(Argc, Argv, "Kernel");
|
||||
if (!LinuxKernelName || !*LinuxKernelName)
|
||||
|
@ -240,9 +238,22 @@ LoadAndBootLinux(
|
|||
goto LinuxBootFailed;
|
||||
}
|
||||
|
||||
// If the default root device is set to FLOPPY (0000h), change to /dev/fd0 (0200h)
|
||||
if (LinuxBootSector->RootDevice == 0x0000)
|
||||
LinuxBootSector->RootDevice = 0x0200;
|
||||
/*
|
||||
* If the default root device is set to FLOPPY (0000h), change to /dev/fd0 (0200h).
|
||||
* For a list of majors, see
|
||||
* https://github.com/torvalds/linux/blob/master/include/uapi/linux/major.h
|
||||
* For some examples of (decoded) root devices values, see
|
||||
* https://github.com/torvalds/linux/blob/cc89c63e2/include/linux/root_dev.h
|
||||
*
|
||||
* NOTE: The RootDevice field is deprecated since commits
|
||||
* https://github.com/torvalds/linux/commit/079f85e62
|
||||
* https://github.com/torvalds/linux/commit/7448e8e5d
|
||||
*/
|
||||
#define NODEV 0
|
||||
#define FLOPPY_MAJOR 2
|
||||
#define makedev(maj, min) (((maj) << 8) | (min))
|
||||
if (LinuxBootSector->RootDevice == NODEV)
|
||||
LinuxBootSector->RootDevice = makedev(FLOPPY_MAJOR, 0);
|
||||
|
||||
if (LinuxSetupSector->Version >= 0x0202)
|
||||
{
|
||||
|
@ -271,8 +282,7 @@ LoadAndBootLinux(
|
|||
BootLinuxKernel(LinuxKernelSize, LinuxKernelLoadAddress,
|
||||
(LinuxSetupSector->LoadFlags & LINUX_FLAG_LOAD_HIGH)
|
||||
? (PVOID)LINUX_KERNEL_LOAD_ADDRESS /* == 0x100000 */
|
||||
: (PVOID)0x10000,
|
||||
DriveNumber, PartitionNumber);
|
||||
: (PVOID)0x10000);
|
||||
/* Must not return! */
|
||||
return ESUCCESS;
|
||||
|
||||
|
|
|
@ -23,26 +23,44 @@
|
|||
|
||||
#include <freeldr.h>
|
||||
|
||||
#include <debug.h>
|
||||
DBG_DEFAULT_CHANNEL(DISK);
|
||||
|
||||
/* FUNCTIONS ******************************************************************/
|
||||
|
||||
static ARC_STATUS
|
||||
LoadBootSector(
|
||||
IN ULONG Argc,
|
||||
IN PCHAR Argv[],
|
||||
OUT PUCHAR DriveNumber,
|
||||
OUT PULONG PartitionNumber)
|
||||
/**
|
||||
* @brief
|
||||
* Loads and boots a disk MBR, a partition VBR or a file boot sector.
|
||||
**/
|
||||
ARC_STATUS
|
||||
LoadAndBootSector(
|
||||
_In_ ULONG Argc,
|
||||
_In_ PCHAR Argv[],
|
||||
_In_ PCHAR Envp[])
|
||||
{
|
||||
ARC_STATUS Status;
|
||||
PCSTR ArgValue;
|
||||
PCSTR BootPath;
|
||||
PCSTR FileName;
|
||||
UCHAR BiosDriveNumber = 0;
|
||||
ULONG PartitionNumber = 0;
|
||||
ULONG LoadAddress;
|
||||
ULONG FileId;
|
||||
ULONG BytesRead;
|
||||
CHAR ArcPath[MAX_PATH];
|
||||
ULONG LoadAddress;
|
||||
|
||||
*DriveNumber = 0;
|
||||
*PartitionNumber = 0;
|
||||
#if DBG
|
||||
/* Ensure the boot type is the one expected */
|
||||
ArgValue = GetArgumentValue(Argc, Argv, "BootType");
|
||||
if (!ArgValue || !*ArgValue || _stricmp(ArgValue, "BootSector") != 0)
|
||||
{
|
||||
ERR("Unexpected boot type '%s', aborting\n", ArgValue ? ArgValue : "n/a");
|
||||
return EINVAL;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Find all the message box settings and run them */
|
||||
UiShowMessageBoxesInArgv(Argc, Argv);
|
||||
|
||||
/*
|
||||
* Check whether we have a "BootPath" value (takes precedence
|
||||
|
@ -57,24 +75,13 @@ LoadBootSector(
|
|||
ArgValue = GetArgumentValue(Argc, Argv, "BootDrive");
|
||||
if (ArgValue && *ArgValue)
|
||||
{
|
||||
*DriveNumber = DriveMapGetBiosDriveNumber(ArgValue);
|
||||
BiosDriveNumber = DriveMapGetBiosDriveNumber(ArgValue);
|
||||
|
||||
/* Retrieve the boot partition (not optional and cannot be zero) */
|
||||
*PartitionNumber = 0;
|
||||
/* Retrieve the boot partition (optional, fall back to zero otherwise) */
|
||||
PartitionNumber = 0;
|
||||
ArgValue = GetArgumentValue(Argc, Argv, "BootPartition");
|
||||
if (ArgValue && *ArgValue)
|
||||
*PartitionNumber = atoi(ArgValue);
|
||||
if (*PartitionNumber == 0)
|
||||
{
|
||||
UiMessageBox("Boot partition cannot be 0!");
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
/* Construct the corresponding ARC path */
|
||||
ConstructArcPath(ArcPath, "", *DriveNumber, *PartitionNumber);
|
||||
*strrchr(ArcPath, '\\') = ANSI_NULL; // Trim the trailing path separator.
|
||||
|
||||
BootPath = ArcPath;
|
||||
PartitionNumber = atoi(ArgValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -83,268 +90,122 @@ LoadBootSector(
|
|||
}
|
||||
}
|
||||
|
||||
/* Retrieve the file name */
|
||||
FileName = GetArgumentValue(Argc, Argv, "BootSectorFile");
|
||||
if (!FileName || !*FileName)
|
||||
{
|
||||
UiMessageBox("Boot sector file not specified for selected OS!");
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
/* Open the boot sector file */
|
||||
Status = FsOpenFile(FileName, BootPath, OpenReadOnly, &FileId);
|
||||
if (Status != ESUCCESS)
|
||||
{
|
||||
UiMessageBox("Unable to open %s", FileName);
|
||||
return Status;
|
||||
}
|
||||
|
||||
#if defined(SARCH_PC98)
|
||||
LoadAddress = Pc98GetBootSectorLoadAddress(*DriveNumber);
|
||||
#else
|
||||
LoadAddress = 0x7C00;
|
||||
#endif
|
||||
|
||||
/* Now try to load the boot sector. If this fails then abort. */
|
||||
Status = ArcRead(FileId, UlongToPtr(LoadAddress), 512, &BytesRead);
|
||||
ArcClose(FileId);
|
||||
if ((Status != ESUCCESS) || (BytesRead != 512))
|
||||
{
|
||||
UiMessageBox("Unable to load boot sector.");
|
||||
return EIO;
|
||||
}
|
||||
|
||||
/* Check for validity */
|
||||
if (*(USHORT*)UlongToPtr(LoadAddress + 0x1FE) != 0xAA55)
|
||||
{
|
||||
UiMessageBox("Invalid boot sector magic (0xaa55)");
|
||||
return ENOEXEC;
|
||||
}
|
||||
|
||||
/* Reset the drive and partition numbers so as to use their default values */
|
||||
*DriveNumber = 0;
|
||||
*PartitionNumber = 0;
|
||||
|
||||
return ESUCCESS;
|
||||
}
|
||||
|
||||
static ARC_STATUS
|
||||
LoadPartitionOrDrive(
|
||||
IN OUT PUCHAR DriveNumber,
|
||||
IN OUT PULONG PartitionNumber,
|
||||
IN PCSTR BootPath OPTIONAL)
|
||||
{
|
||||
ARC_STATUS Status;
|
||||
ULONG FileId;
|
||||
ULONG BytesRead;
|
||||
CHAR ArcPath[MAX_PATH];
|
||||
ULONG LoadAddress;
|
||||
|
||||
/*
|
||||
* The ARC "BootPath" value takes precedence over
|
||||
* both the DriveNumber and PartitionNumber options.
|
||||
* both the BiosDriveNumber and PartitionNumber options.
|
||||
*/
|
||||
if (BootPath && *BootPath)
|
||||
{
|
||||
PCSTR FileName = NULL;
|
||||
|
||||
/*
|
||||
* Retrieve the BIOS drive and partition numbers; verify also that the
|
||||
* path is "valid" in the sense that it must not contain any file name.
|
||||
*/
|
||||
if (!DissectArcPath(BootPath, &FileName, DriveNumber, PartitionNumber) ||
|
||||
FileName = NULL;
|
||||
if (!DissectArcPath(BootPath, &FileName, &BiosDriveNumber, &PartitionNumber) ||
|
||||
(FileName && *FileName))
|
||||
{
|
||||
UiMessageBox("Currently unsupported BootPath value:\n%s", BootPath);
|
||||
return EINVAL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We don't have one, so construct the corresponding ARC path */
|
||||
ConstructArcPath(ArcPath, "", *DriveNumber, *PartitionNumber);
|
||||
ConstructArcPath(ArcPath, "", BiosDriveNumber, PartitionNumber);
|
||||
*strrchr(ArcPath, '\\') = ANSI_NULL; // Trim the trailing path separator.
|
||||
|
||||
BootPath = ArcPath;
|
||||
}
|
||||
|
||||
/* Open the volume */
|
||||
Status = ArcOpen((PSTR)BootPath, OpenReadOnly, &FileId);
|
||||
FileName = NULL;
|
||||
if (strstr(BootPath, ")partition()") || strstr(BootPath, ")partition(0)"))
|
||||
{
|
||||
/*
|
||||
* The partition specifier is zero i.e. the device is accessed
|
||||
* in an unpartitioned fashion, do not retrieve a file name.
|
||||
*
|
||||
* NOTE: If we access a floppy drive, we would not have a
|
||||
* partition specifier, and PartitionNumber would be == 0,
|
||||
* so don't check explicitly for PartitionNumber because
|
||||
* we want to retrieve a file name.
|
||||
*/
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Retrieve the file name, if any, and normalize
|
||||
* the pointer to make subsequent tests simpler */
|
||||
FileName = GetArgumentValue(Argc, Argv, "BootSectorFile");
|
||||
if (FileName && !*FileName)
|
||||
FileName = NULL;
|
||||
}
|
||||
|
||||
|
||||
/* If we load a boot sector file, reset the drive number
|
||||
* so as to use the original boot drive/partition */
|
||||
if (FileName)
|
||||
BiosDriveNumber = 0;
|
||||
if (!BiosDriveNumber)
|
||||
{
|
||||
BiosDriveNumber = FrldrBootDrive;
|
||||
PartitionNumber = FrldrBootPartition;
|
||||
}
|
||||
|
||||
|
||||
/* Open the boot sector file or the volume */
|
||||
if (FileName)
|
||||
Status = FsOpenFile(FileName, BootPath, OpenReadOnly, &FileId);
|
||||
else
|
||||
Status = ArcOpen((PSTR)BootPath, OpenReadOnly, &FileId);
|
||||
if (Status != ESUCCESS)
|
||||
{
|
||||
UiMessageBox("Unable to open %s", BootPath);
|
||||
UiMessageBox("Unable to open %s", FileName ? FileName : BootPath);
|
||||
return Status;
|
||||
}
|
||||
|
||||
#if defined(SARCH_PC98)
|
||||
LoadAddress = Pc98GetBootSectorLoadAddress(*DriveNumber);
|
||||
LoadAddress = Pc98GetBootSectorLoadAddress(BiosDriveNumber);
|
||||
#else
|
||||
LoadAddress = 0x7C00;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Now try to load the partition boot sector or the MBR (when PartitionNumber == 0).
|
||||
* If this fails then abort.
|
||||
* Now try to load the boot sector: disk MBR (when PartitionNumber == 0),
|
||||
* partition VBR or boot sector file. If this fails, abort.
|
||||
*/
|
||||
Status = ArcRead(FileId, UlongToPtr(LoadAddress), 512, &BytesRead);
|
||||
ArcClose(FileId);
|
||||
if ((Status != ESUCCESS) || (BytesRead != 512))
|
||||
{
|
||||
if (*PartitionNumber != 0)
|
||||
UiMessageBox("Unable to load partition's boot sector.");
|
||||
PCSTR WhatFailed;
|
||||
|
||||
if (FileName)
|
||||
WhatFailed = "boot sector file";
|
||||
else if (PartitionNumber != 0)
|
||||
WhatFailed = "partition's boot sector";
|
||||
else
|
||||
UiMessageBox("Unable to load MBR boot sector.");
|
||||
WhatFailed = "MBR boot sector";
|
||||
|
||||
UiMessageBox("Unable to load %s.", WhatFailed);
|
||||
return EIO;
|
||||
}
|
||||
|
||||
/* Check for validity */
|
||||
if (*(USHORT*)UlongToPtr(LoadAddress + 0x1FE) != 0xAA55)
|
||||
{
|
||||
UiMessageBox("Invalid boot sector magic (0xaa55)");
|
||||
UiMessageBox("Invalid boot sector magic (0xAA55)");
|
||||
return ENOEXEC;
|
||||
}
|
||||
|
||||
return ESUCCESS;
|
||||
}
|
||||
|
||||
static ARC_STATUS
|
||||
LoadPartition(
|
||||
IN ULONG Argc,
|
||||
IN PCHAR Argv[],
|
||||
OUT PUCHAR DriveNumber,
|
||||
OUT PULONG PartitionNumber)
|
||||
{
|
||||
PCSTR ArgValue;
|
||||
PCSTR BootPath;
|
||||
|
||||
*DriveNumber = 0;
|
||||
*PartitionNumber = 0;
|
||||
|
||||
/*
|
||||
* Check whether we have a "BootPath" value (takes precedence
|
||||
* over both "BootDrive" and "BootPartition").
|
||||
*/
|
||||
BootPath = GetArgumentValue(Argc, Argv, "BootPath");
|
||||
if (!BootPath || !*BootPath)
|
||||
{
|
||||
/* We don't have one */
|
||||
|
||||
/* Retrieve the boot drive */
|
||||
ArgValue = GetArgumentValue(Argc, Argv, "BootDrive");
|
||||
if (!ArgValue || !*ArgValue)
|
||||
{
|
||||
UiMessageBox("Boot drive not specified for selected OS!");
|
||||
return EINVAL;
|
||||
}
|
||||
*DriveNumber = DriveMapGetBiosDriveNumber(ArgValue);
|
||||
|
||||
/* Retrieve the boot partition (optional, fall back to zero otherwise) */
|
||||
*PartitionNumber = 0;
|
||||
ArgValue = GetArgumentValue(Argc, Argv, "BootPartition");
|
||||
if (ArgValue && *ArgValue)
|
||||
*PartitionNumber = atoi(ArgValue);
|
||||
}
|
||||
|
||||
return LoadPartitionOrDrive(DriveNumber, PartitionNumber, BootPath);
|
||||
}
|
||||
|
||||
static ARC_STATUS
|
||||
LoadDrive(
|
||||
IN ULONG Argc,
|
||||
IN PCHAR Argv[],
|
||||
OUT PUCHAR DriveNumber,
|
||||
OUT PULONG PartitionNumber)
|
||||
{
|
||||
PCSTR ArgValue;
|
||||
PCSTR BootPath;
|
||||
|
||||
*DriveNumber = 0;
|
||||
*PartitionNumber = 0;
|
||||
|
||||
/* Check whether we have a "BootPath" value (takes precedence over "BootDrive") */
|
||||
BootPath = GetArgumentValue(Argc, Argv, "BootPath");
|
||||
if (BootPath && *BootPath)
|
||||
{
|
||||
/*
|
||||
* We have one, check that it does not contain any
|
||||
* "partition()" specification, and fail if so.
|
||||
*/
|
||||
if (strstr(BootPath, ")partition("))
|
||||
{
|
||||
UiMessageBox("Invalid 'BootPath' value!");
|
||||
return EINVAL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We don't, retrieve the boot drive value instead */
|
||||
ArgValue = GetArgumentValue(Argc, Argv, "BootDrive");
|
||||
if (!ArgValue || !*ArgValue)
|
||||
{
|
||||
UiMessageBox("Boot drive not specified for selected OS!");
|
||||
return EINVAL;
|
||||
}
|
||||
*DriveNumber = DriveMapGetBiosDriveNumber(ArgValue);
|
||||
}
|
||||
|
||||
return LoadPartitionOrDrive(DriveNumber, PartitionNumber, BootPath);
|
||||
}
|
||||
|
||||
|
||||
ARC_STATUS
|
||||
LoadAndBootDevice(
|
||||
IN ULONG Argc,
|
||||
IN PCHAR Argv[],
|
||||
IN PCHAR Envp[])
|
||||
{
|
||||
ARC_STATUS Status;
|
||||
PCSTR ArgValue;
|
||||
UCHAR Type;
|
||||
UCHAR DriveNumber = 0;
|
||||
ULONG PartitionNumber = 0;
|
||||
|
||||
/* Retrieve the (mandatory) boot type */
|
||||
ArgValue = GetArgumentValue(Argc, Argv, "BootType");
|
||||
if (!ArgValue || !*ArgValue)
|
||||
return EINVAL;
|
||||
if (_stricmp(ArgValue, "Drive") == 0)
|
||||
Type = 1;
|
||||
else if (_stricmp(ArgValue, "Partition") == 0)
|
||||
Type = 2;
|
||||
else if (_stricmp(ArgValue, "BootSector") == 0)
|
||||
Type = 3;
|
||||
else
|
||||
return EINVAL;
|
||||
|
||||
/* Find all the message box settings and run them */
|
||||
UiShowMessageBoxesInArgv(Argc, Argv);
|
||||
|
||||
/* Load the corresponding device */
|
||||
switch (Type)
|
||||
{
|
||||
case 1:
|
||||
Status = LoadDrive(Argc, Argv, &DriveNumber, &PartitionNumber);
|
||||
break;
|
||||
case 2:
|
||||
Status = LoadPartition(Argc, Argv, &DriveNumber, &PartitionNumber);
|
||||
break;
|
||||
case 3:
|
||||
Status = LoadBootSector(Argc, Argv, &DriveNumber, &PartitionNumber);
|
||||
break;
|
||||
default:
|
||||
return EINVAL;
|
||||
}
|
||||
if (Status != ESUCCESS)
|
||||
return Status;
|
||||
|
||||
UiUnInitialize("Booting...");
|
||||
IniCleanup();
|
||||
|
||||
#ifndef UEFIBOOT
|
||||
/* Boot the loaded sector code */
|
||||
ChainLoadBiosBootSectorCode(DriveNumber, PartitionNumber);
|
||||
ChainLoadBiosBootSectorCode(BiosDriveNumber, PartitionNumber);
|
||||
#endif
|
||||
/* Must not return! */
|
||||
return ESUCCESS;
|
||||
}
|
||||
|
||||
#endif /* _M_IX86 || _M_AMD64 */
|
||||
|
||||
/* EOF */
|
||||
|
|
|
@ -346,7 +346,8 @@ Amd64SetupIdt(PVOID IdtBase)
|
|||
}
|
||||
|
||||
VOID
|
||||
WinLdrSetProcessorContext(void)
|
||||
WinLdrSetProcessorContext(
|
||||
_In_ USHORT OperatingSystemVersion)
|
||||
{
|
||||
TRACE("WinLdrSetProcessorContext\n");
|
||||
|
||||
|
|
|
@ -249,7 +249,8 @@ MempAllocatePageTables(VOID)
|
|||
}
|
||||
|
||||
VOID
|
||||
WinLdrSetProcessorContext(VOID)
|
||||
WinLdrSetProcessorContext(
|
||||
_In_ USHORT OperatingSystemVersion)
|
||||
{
|
||||
ARM_CONTROL_REGISTER ControlRegister;
|
||||
ARM_TTB_REGISTER TtbRegister;
|
||||
|
|
|
@ -245,7 +245,7 @@ MempSetupPaging(IN PFN_NUMBER StartPage,
|
|||
}
|
||||
|
||||
PhysicalPT[Page & 0x3ff].PageFrameNumber = Page;
|
||||
PhysicalPT[Page & 0x3ff].Valid = (Page != 0);
|
||||
PhysicalPT[Page & 0x3ff].Valid = 1;
|
||||
PhysicalPT[Page & 0x3ff].Write = (Page != 0);
|
||||
|
||||
if (KernelMapping)
|
||||
|
@ -429,7 +429,8 @@ void WinLdrSetupMachineDependent(PLOADER_PARAMETER_BLOCK LoaderBlock)
|
|||
|
||||
|
||||
VOID
|
||||
WinLdrSetProcessorContext(void)
|
||||
WinLdrSetProcessorContext(
|
||||
_In_ USHORT OperatingSystemVersion)
|
||||
{
|
||||
GDTIDT GdtDesc, IdtDesc, OldIdt;
|
||||
PKGDTENTRY pGdt;
|
||||
|
@ -526,15 +527,19 @@ WinLdrSetProcessorContext(void)
|
|||
* Longhorn/Vista reports LimitLow == 0x0fff == MM_PAGE_SIZE - 1, whereas
|
||||
* Windows 7+ uses larger sizes there (not aligned on a page boundary).
|
||||
*/
|
||||
#if 1
|
||||
/* Server 2003 way */
|
||||
KiSetGdtEntryEx(KiGetGdtEntry(pGdt, KGDT_R0_PCR), (ULONG32)Pcr, 0x1,
|
||||
TYPE_DATA, DPL_SYSTEM, TRUE, 2);
|
||||
#else
|
||||
/* Vista+ way */
|
||||
KiSetGdtEntry(KiGetGdtEntry(pGdt, KGDT_R0_PCR), (ULONG32)Pcr, MM_PAGE_SIZE - 1,
|
||||
TYPE_DATA, DPL_SYSTEM, 2);
|
||||
#endif
|
||||
if (OperatingSystemVersion < _WIN32_WINNT_VISTA)
|
||||
{
|
||||
/* Server 2003 way */
|
||||
KiSetGdtEntryEx(KiGetGdtEntry(pGdt, KGDT_R0_PCR), (ULONG32)Pcr, 0x1,
|
||||
TYPE_DATA, DPL_SYSTEM, TRUE, 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Vista+ way */
|
||||
KiSetGdtEntry(KiGetGdtEntry(pGdt, KGDT_R0_PCR), (ULONG32)Pcr, MM_PAGE_SIZE - 1,
|
||||
TYPE_DATA, DPL_SYSTEM, 2);
|
||||
}
|
||||
|
||||
// DumpGDTEntry(GdtDesc.Base, KGDT_R0_PCR);
|
||||
|
||||
/* KGDT_R3_TEB (0x38) Thread Environment Block Selector (Ring 3) */
|
||||
|
|
|
@ -255,6 +255,15 @@ WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock,
|
|||
// FIXME: Extension->AcpiTableSize;
|
||||
}
|
||||
|
||||
if (VersionToBoot >= _WIN32_WINNT_VISTA)
|
||||
{
|
||||
Extension->BootViaWinload = 1;
|
||||
Extension->LoaderPerformanceData = PaToVa(&WinLdrSystemBlock->LoaderPerformanceData);
|
||||
|
||||
InitializeListHead(&Extension->BootApplicationPersistentData);
|
||||
List_PaToVa(&Extension->BootApplicationPersistentData);
|
||||
}
|
||||
|
||||
#ifdef _M_IX86
|
||||
/* Set headless block pointer */
|
||||
if (WinLdrTerminalConnected)
|
||||
|
@ -999,6 +1008,10 @@ LoadAndBootWindows(
|
|||
{
|
||||
OperatingSystemVersion = _WIN32_WINNT_NT4;
|
||||
}
|
||||
else if (_stricmp(ArgValue, "WindowsVista") == 0)
|
||||
{
|
||||
OperatingSystemVersion = _WIN32_WINNT_VISTA;
|
||||
}
|
||||
else
|
||||
{
|
||||
ERR("Unknown 'BootType' value '%s', aborting!\n", ArgValue);
|
||||
|
@ -1245,7 +1258,7 @@ LoadAndBootWindowsCommon(
|
|||
WinLdrSetupMemoryLayout(LoaderBlock);
|
||||
|
||||
/* Set processor context */
|
||||
WinLdrSetProcessorContext();
|
||||
WinLdrSetProcessorContext(OperatingSystemVersion);
|
||||
|
||||
/* Save final value of LoaderPagesSpanned */
|
||||
LoaderBlock->Extension->LoaderPagesSpanned = LoaderPagesSpanned;
|
||||
|
|
|
@ -58,6 +58,7 @@ typedef struct _LOADER_SYSTEM_BLOCK
|
|||
CHAR NtBootPathName[MAX_PATH+1];
|
||||
CHAR NtHalPathName[MAX_PATH+1];
|
||||
ARC_DISK_INFORMATION ArcDiskInformation;
|
||||
LOADER_PERFORMANCE_DATA LoaderPerformanceData;
|
||||
} LOADER_SYSTEM_BLOCK, *PLOADER_SYSTEM_BLOCK;
|
||||
|
||||
extern PLOADER_SYSTEM_BLOCK WinLdrSystemBlock;
|
||||
|
@ -164,7 +165,8 @@ VOID
|
|||
WinLdrSetupMachineDependent(PLOADER_PARAMETER_BLOCK LoaderBlock);
|
||||
|
||||
VOID
|
||||
WinLdrSetProcessorContext(VOID);
|
||||
WinLdrSetProcessorContext(
|
||||
_In_ USHORT OperatingSystemVersion);
|
||||
|
||||
// arch/xxx/winldr.c
|
||||
BOOLEAN
|
||||
|
|
|
@ -185,7 +185,7 @@ WinLdrSetupMemoryLayout(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock)
|
|||
PPAGE_LOOKUP_TABLE_ITEM MemoryMap;
|
||||
ULONG LastPageType;
|
||||
//PKTSS Tss;
|
||||
//BOOLEAN Status;
|
||||
BOOLEAN Status;
|
||||
|
||||
/* Cleanup heap */
|
||||
FrLdrHeapCleanupAll();
|
||||
|
@ -229,15 +229,14 @@ WinLdrSetupMemoryLayout(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock)
|
|||
MemoryMapSizeInPages = (NoEntries * sizeof(PAGE_LOOKUP_TABLE_ITEM) + MM_PAGE_SIZE - 1) / MM_PAGE_SIZE;
|
||||
|
||||
TRACE("Got memory map with %d entries\n", NoEntries);
|
||||
#if 0
|
||||
// Always contiguously map low 1Mb of memory
|
||||
Status = MempSetupPaging(0, 0x100, FALSE);
|
||||
|
||||
// Always map first page of memory
|
||||
Status = MempSetupPaging(0, 1, FALSE);
|
||||
if (!Status)
|
||||
{
|
||||
ERR("Error during MempSetupPaging of low 1Mb\n");
|
||||
ERR("Error during MempSetupPaging of first page\n");
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Before creating the map, we need to map pages to kernel mode */
|
||||
LastPageIndex = 1;
|
||||
|
|
|
@ -359,52 +359,50 @@ VOID TuiFillArea(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom, CHAR FillChar
|
|||
VOID TuiDrawShadow(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom)
|
||||
{
|
||||
PUCHAR ScreenMemory = (PUCHAR)TextVideoBuffer;
|
||||
ULONG Idx;
|
||||
ULONG i;
|
||||
BOOLEAN RightShadow = (Right < (UiScreenWidth - 1));
|
||||
BOOLEAN DoubleRightShadow = ((Right + 1) < (UiScreenWidth - 1));
|
||||
BOOLEAN BottomShadow = (Bottom < (UiScreenHeight - 1));
|
||||
BOOLEAN DoubleWidth = (UiScreenHeight < 34);
|
||||
|
||||
/* Cap the right and bottom borders */
|
||||
Right = min(Right, UiScreenWidth - 1);
|
||||
Bottom = min(Bottom, UiScreenHeight - 1);
|
||||
|
||||
/* Shade the bottom of the area */
|
||||
if (Bottom < (UiScreenHeight - 1))
|
||||
if (BottomShadow)
|
||||
{
|
||||
if (UiScreenHeight < 34)
|
||||
Idx = Left + 2;
|
||||
else
|
||||
Idx = Left + 1;
|
||||
|
||||
for (; Idx <= Right; ++Idx)
|
||||
i = Left + (DoubleWidth ? 2 : 1);
|
||||
for (; i <= Right; ++i)
|
||||
{
|
||||
ScreenMemory[(((Bottom+1)*2)*UiScreenWidth)+(Idx*2)+1] = ATTR(COLOR_GRAY, COLOR_BLACK);
|
||||
ScreenMemory[(((Bottom+1)*2)*UiScreenWidth)+(i*2)+1] = ATTR(COLOR_GRAY, COLOR_BLACK);
|
||||
}
|
||||
}
|
||||
|
||||
/* Shade the right of the area */
|
||||
if (Right < (UiScreenWidth - 1))
|
||||
if (RightShadow)
|
||||
{
|
||||
for (Idx=Top+1; Idx<=Bottom; Idx++)
|
||||
for (i = Top + 1; i <= Bottom; ++i)
|
||||
{
|
||||
ScreenMemory[((Idx*2)*UiScreenWidth)+((Right+1)*2)+1] = ATTR(COLOR_GRAY, COLOR_BLACK);
|
||||
ScreenMemory[((i*2)*UiScreenWidth)+((Right+1)*2)+1] = ATTR(COLOR_GRAY, COLOR_BLACK);
|
||||
}
|
||||
}
|
||||
if (UiScreenHeight < 34)
|
||||
if (DoubleWidth && DoubleRightShadow)
|
||||
{
|
||||
if ((Right + 1) < (UiScreenWidth - 1))
|
||||
for (i = Top + 1; i <= Bottom; ++i)
|
||||
{
|
||||
for (Idx=Top+1; Idx<=Bottom; Idx++)
|
||||
{
|
||||
ScreenMemory[((Idx*2)*UiScreenWidth)+((Right+2)*2)+1] = ATTR(COLOR_GRAY, COLOR_BLACK);
|
||||
}
|
||||
ScreenMemory[((i*2)*UiScreenWidth)+((Right+2)*2)+1] = ATTR(COLOR_GRAY, COLOR_BLACK);
|
||||
}
|
||||
}
|
||||
|
||||
/* Shade the bottom right corner */
|
||||
if ((Right < (UiScreenWidth - 1)) && (Bottom < (UiScreenHeight - 1)))
|
||||
if (RightShadow && BottomShadow)
|
||||
{
|
||||
ScreenMemory[(((Bottom+1)*2)*UiScreenWidth)+((Right+1)*2)+1] = ATTR(COLOR_GRAY, COLOR_BLACK);
|
||||
}
|
||||
if (UiScreenHeight < 34)
|
||||
if (DoubleWidth && DoubleRightShadow && BottomShadow)
|
||||
{
|
||||
if (((Right + 1) < (UiScreenWidth - 1)) && (Bottom < (UiScreenHeight - 1)))
|
||||
{
|
||||
ScreenMemory[(((Bottom+1)*2)*UiScreenWidth)+((Right+2)*2)+1] = ATTR(COLOR_GRAY, COLOR_BLACK);
|
||||
}
|
||||
ScreenMemory[(((Bottom+1)*2)*UiScreenWidth)+((Right+2)*2)+1] = ATTR(COLOR_GRAY, COLOR_BLACK);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -603,7 +601,7 @@ VOID TuiUpdateDateTime(VOID)
|
|||
|
||||
/* Build the time string in format: "h:mm:ss tt" */
|
||||
RtlStringCbPrintfA(Buffer, sizeof(Buffer),
|
||||
" %d:%02d:%02d %s",
|
||||
" %d:%02d:%02d %s",
|
||||
TimeInfo->Hour,
|
||||
TimeInfo->Minute,
|
||||
TimeInfo->Second,
|
||||
|
@ -666,7 +664,7 @@ TuiDrawMsgBoxCommon(
|
|||
_Out_ PSMALL_RECT MsgBoxRect)
|
||||
{
|
||||
INT width = 8;
|
||||
ULONG height = 1;
|
||||
INT height = 1;
|
||||
INT curline = 0;
|
||||
INT k;
|
||||
size_t i, j;
|
||||
|
@ -696,11 +694,26 @@ TuiDrawMsgBoxCommon(
|
|||
j++;
|
||||
}
|
||||
|
||||
/* Calculate box area */
|
||||
x1 = (UiScreenWidth - (width+2))/2;
|
||||
x2 = x1 + width + 3;
|
||||
y1 = ((UiScreenHeight - height - 2)/2) + 1;
|
||||
y2 = y1 + height + 4;
|
||||
/* Account for the message box margins & bottom button/edit box */
|
||||
width += 4; // Border & space on left and right.
|
||||
height += 5; // Border on top and bottom, plus 3 lines for button/edit box.
|
||||
|
||||
/* Calculate the centered box area, also ensuring that the top-left
|
||||
* corner is always visible if the borders are partly off-screen */
|
||||
x1 = (UiScreenWidth - min(width, UiScreenWidth)) / 2;
|
||||
if (UiCenterMenu && (height <= UiScreenHeight - TUI_TITLE_BOX_CHAR_HEIGHT - 1))
|
||||
{
|
||||
/* Exclude the header and the status bar */
|
||||
// y1 = (UiScreenHeight - TUI_TITLE_BOX_CHAR_HEIGHT - 1 - height) / 2
|
||||
// + TUI_TITLE_BOX_CHAR_HEIGHT;
|
||||
y1 = (UiScreenHeight + TUI_TITLE_BOX_CHAR_HEIGHT - 1 - height) / 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
y1 = (UiScreenHeight - min(height, UiScreenHeight)) / 2;
|
||||
}
|
||||
x2 = x1 + width - 1;
|
||||
y2 = y1 + height - 1;
|
||||
|
||||
MsgBoxRect->Left = x1; MsgBoxRect->Right = x2;
|
||||
MsgBoxRect->Top = y1; MsgBoxRect->Bottom = y2;
|
||||
|
|
|
@ -151,7 +151,6 @@ TuiCalcMenuBoxSize(
|
|||
|
||||
/* Height is the menu item count plus 2 (top border & bottom border) */
|
||||
Height = MenuInfo->MenuItemCount + 2;
|
||||
Height -= 1; // Height is zero-based
|
||||
|
||||
/* Loop every item */
|
||||
for (i = 0; i < MenuInfo->MenuItemCount; ++i)
|
||||
|
@ -160,20 +159,30 @@ TuiCalcMenuBoxSize(
|
|||
if (MenuInfo->MenuItemList[i])
|
||||
{
|
||||
Length = (ULONG)strlen(MenuInfo->MenuItemList[i]);
|
||||
if (Length > Width) Width = Length;
|
||||
Width = max(Width, Length);
|
||||
}
|
||||
}
|
||||
|
||||
/* Allow room for left & right borders, plus 8 spaces on each side */
|
||||
Width += 18;
|
||||
/* Allow room for left & right borders, plus 4 spaces on each side */
|
||||
Width += 10;
|
||||
|
||||
/* Check if we're drawing a centered menu */
|
||||
if (UiCenterMenu)
|
||||
{
|
||||
/* Calculate the menu box area for a centered menu */
|
||||
MenuInfo->Left = (UiScreenWidth - Width) / 2;
|
||||
MenuInfo->Top = (((UiScreenHeight - TUI_TITLE_BOX_CHAR_HEIGHT) -
|
||||
Height) / 2) + TUI_TITLE_BOX_CHAR_HEIGHT;
|
||||
/* Calculate the centered menu box area, also ensuring that the top-left
|
||||
* corner is always visible if the borders are partly off-screen */
|
||||
MenuInfo->Left = (UiScreenWidth - min(Width, UiScreenWidth)) / 2;
|
||||
if (Height <= UiScreenHeight - TUI_TITLE_BOX_CHAR_HEIGHT - 1)
|
||||
{
|
||||
/* Exclude the header and the status bar */
|
||||
// MenuInfo->Top = (UiScreenHeight - TUI_TITLE_BOX_CHAR_HEIGHT - 1 - Height) / 2
|
||||
// + TUI_TITLE_BOX_CHAR_HEIGHT;
|
||||
MenuInfo->Top = (UiScreenHeight + TUI_TITLE_BOX_CHAR_HEIGHT - 1 - Height) / 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
MenuInfo->Top = (UiScreenHeight - min(Height, UiScreenHeight)) / 2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -183,8 +192,8 @@ TuiCalcMenuBoxSize(
|
|||
}
|
||||
|
||||
/* The other margins are the same */
|
||||
MenuInfo->Right = MenuInfo->Left + Width;
|
||||
MenuInfo->Bottom = MenuInfo->Top + Height;
|
||||
MenuInfo->Right = MenuInfo->Left + Width - 1;
|
||||
MenuInfo->Bottom = MenuInfo->Top + Height - 1;
|
||||
}
|
||||
|
||||
VOID
|
||||
|
|
|
@ -360,10 +360,10 @@ UiMessageBox(
|
|||
_In_ PCSTR Format, ...)
|
||||
{
|
||||
va_list ap;
|
||||
CHAR Buffer[256];
|
||||
CHAR Buffer[1024];
|
||||
|
||||
va_start(ap, Format);
|
||||
vsnprintf(Buffer, sizeof(Buffer) - sizeof(CHAR), Format, ap);
|
||||
_vsnprintf(Buffer, sizeof(Buffer) - sizeof(CHAR), Format, ap);
|
||||
UiVtbl.MessageBox(Buffer);
|
||||
va_end(ap);
|
||||
}
|
||||
|
|
|
@ -62,6 +62,9 @@ set_subsystem(ntdll console)
|
|||
################# END HACK #################
|
||||
|
||||
target_link_libraries(ntdll csrlib rtl rtl_um rtl_vista ntdllsys libcntpr uuid ${PSEH_LIB})
|
||||
if(DLL_EXPORT_VERSION GREATER_EQUAL 0x600)
|
||||
target_link_libraries(ntdll cryptlib)
|
||||
endif()
|
||||
|
||||
if (STACK_PROTECTOR)
|
||||
target_sources(ntdll PRIVATE $<TARGET_OBJECTS:gcc_ssp_nt>)
|
||||
|
|
|
@ -10,9 +10,9 @@
|
|||
@ stdcall -arch=i386 ExpInterlockedPopEntrySListEnd()
|
||||
@ stdcall -arch=i386 ExpInterlockedPopEntrySListFault()
|
||||
@ stdcall -arch=i386 ExpInterlockedPopEntrySListResume()
|
||||
@ stdcall -stub -version=0x600+ A_SHAFinal(ptr ptr)
|
||||
@ stdcall -stub -version=0x600+ A_SHAInit(ptr)
|
||||
@ stdcall -stub -version=0x600+ A_SHAUpdate(ptr ptr long)
|
||||
@ stdcall -version=0x600+ A_SHAFinal(ptr ptr)
|
||||
@ stdcall -version=0x600+ A_SHAInit(ptr)
|
||||
@ stdcall -version=0x600+ A_SHAUpdate(ptr ptr long)
|
||||
@ stdcall -stub -version=0x600+ AlpcAdjustCompletionListConcurrencyCount(ptr long)
|
||||
@ stdcall -stub -version=0x600+ AlpcFreeCompletionListMessage(ptr ptr)
|
||||
@ stdcall -stub -version=0x600+ AlpcGetCompletionListLastMessageInformation(ptr ptr ptr)
|
||||
|
@ -191,12 +191,12 @@
|
|||
@ stub -version=0x600+ LdrpResGetMappingSize
|
||||
@ stub -version=0x600+ LdrpResGetRCConfig
|
||||
@ stub -version=0x600+ LdrpResGetResourceDirectory
|
||||
@ stdcall -stub -version=0x600+ MD4Final(ptr)
|
||||
@ stdcall -stub -version=0x600+ MD4Init(ptr)
|
||||
@ stdcall -stub -version=0x600+ MD4Update(ptr ptr long)
|
||||
@ stdcall -stub -version=0x600+ MD5Final(ptr)
|
||||
@ stdcall -stub -version=0x600+ MD5Init(ptr)
|
||||
@ stdcall -stub -version=0x600+ MD5Update(ptr ptr long)
|
||||
@ stdcall -version=0x600+ MD4Final(ptr)
|
||||
@ stdcall -version=0x600+ MD4Init(ptr)
|
||||
@ stdcall -version=0x600+ MD4Update(ptr ptr long)
|
||||
@ stdcall -version=0x600+ MD5Final(ptr)
|
||||
@ stdcall -version=0x600+ MD5Init(ptr)
|
||||
@ stdcall -version=0x600+ MD5Update(ptr ptr long)
|
||||
@ extern NlsAnsiCodePage
|
||||
@ extern NlsMbCodePageTag
|
||||
@ extern NlsMbOemCodePageTag
|
||||
|
|
|
@ -27,6 +27,9 @@
|
|||
|
||||
|
||||
#ifndef _MSC_VER
|
||||
#ifdef __REACTOS__
|
||||
#define __cpuidex __cpuidex_ // prevent redeclaration
|
||||
#endif
|
||||
#include <cpuid.h>
|
||||
#else
|
||||
#include <intrin.h>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||
* PURPOSE: Romanian resource file
|
||||
* TRANSLATORS: Copyright 2018 Ștefan Fulea <stefan.fulea@mail.com>
|
||||
* Copyright 2023 Andrei Miloiu <miloiuandrei@gmail.com>
|
||||
* Copyright 2023-2024 Andrei Miloiu <miloiuandrei@gmail.com>
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_ROMANIAN, SUBLANG_DEFAULT
|
||||
|
@ -11,50 +11,50 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_DEFAULT
|
|||
IDD_POWER_METER DIALOGEX 0, 0, 252, 218
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
EXSTYLE WS_EX_CONTEXTHELP
|
||||
CAPTION "Consum de energie"
|
||||
CAPTION "Contor"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
CONTROL "Stare", 1001, "Button", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 9, 20, 234, 189
|
||||
CONTROL "&Afișează pictogramă în bara de activități.", 1002, "Button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 6, 6, 120, 10
|
||||
CONTROL "Afișează detalii pentru fiecare &baterie.", 1003, "Button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 135, 6, 120, 8
|
||||
CONTROL "Stare încărcare", 1001, "Button", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 9, 20, 234, 189
|
||||
CONTROL "&Afişare pictograme pe bara de activităţi.", 1002, "Button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 6, 6, 120, 10
|
||||
CONTROL "Se afişează detalii pentru fiecare &baterie.", 1003, "Button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 135, 6, 120, 8
|
||||
CONTROL "", 1000, "Static", SS_LEFT | WS_CHILD | WS_GROUP, 11, 29, 229, 178
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
//Power related strings
|
||||
IDS_PWR_PROPERTIES "&Ajustare proprietăți de consum energie"
|
||||
IDS_PWR_METER "&Deschide Contor de energie"
|
||||
IDS_PWR_PROPERTIES "&Reglare proprietăţi alimentare"
|
||||
IDS_PWR_METER "&Deschidere Contor"
|
||||
IDS_PWR_RUN "shell32.dll,Control_RunDLL PowerCfg.cpl"
|
||||
IDS_PWR_PERCENT_REMAINING "Au mai rămas %u%%"
|
||||
IDS_PWR_CHARGING "%u%% and charging"
|
||||
IDS_PWR_UNKNOWN_REMAINING "Nu este disponibil cât a mai rămas"
|
||||
IDS_PWR_AC "În rețea de CA"
|
||||
IDS_PWR_HOURS_REMAINING "Au mai rămas %1!u!:%2!02u! ore (%3!u!%%)"
|
||||
IDS_PWR_MINUTES_REMAINING "Au mai rămas %1!u! min (%2!u!%%)"
|
||||
IDS_PWR_PERCENT_REMAINING "%u%% rămase"
|
||||
IDS_PWR_CHARGING "%u%% și se încarcă"
|
||||
IDS_PWR_UNKNOWN_REMAINING "Nu se ştie cât a mai rămas"
|
||||
IDS_PWR_AC "Când există sursă CA"
|
||||
IDS_PWR_HOURS_REMAINING "%1!u!:%2!02u! ore (%3!u!%%) rămase"
|
||||
IDS_PWR_MINUTES_REMAINING "%1!u! minute (%2!u!%%) rămase"
|
||||
|
||||
//Hotplug related strings
|
||||
IDS_HOTPLUG_REMOVE_1 "Scoate în siguranță acest dispozitiv"
|
||||
IDS_HOTPLUG_REMOVE_2 "S&coate în siguranță acest dispozitiv"
|
||||
IDS_HOTPLUG_REMOVE_3 "Scoate în siguranță %s"
|
||||
IDS_HOTPLUG_REMOVE_1 "Eliminarea în siguranţă a unui dispozitiv hardware"
|
||||
IDS_HOTPLUG_REMOVE_2 "&Eliminarea în siguranţă a unui dispozitiv hardware"
|
||||
IDS_HOTPLUG_REMOVE_3 "Eliminare în siguranţă a %s"
|
||||
IDS_HOTPLUG_RUN "shell32.dll,Control_RunDLL hotplug.dll"
|
||||
IDS_HOTPLUG_COMMA ", "
|
||||
IDS_HOTPLUG_DRIVE " - unitate (%s)"
|
||||
IDS_HOTPLUG_DRIVES " - unități (%s)"
|
||||
IDS_HOTPLUG_DRIVE " - Unitatea(%s)"
|
||||
IDS_HOTPLUG_DRIVES " - Unităţile(%s)"
|
||||
IDS_HOTPLUG_A "A:"
|
||||
IDS_HOTPLUG_REQUIRES "Acest dispozitiv necesită „Scoatere în siguranță”"
|
||||
IDS_HOTPLUG_CLICK "Înainte de a scoate acest dispozitiv, apăsați pe această pictogramă și selectați dispozitivul pe care doriți să-l scoateți."
|
||||
IDS_HOTPLUG_REQUIRES "Acest dispozitiv hardware necesită ""Eliminare în siguranţă"""
|
||||
IDS_HOTPLUG_CLICK "Înainte de a elimina acest dispozitiv hardware, faceţi clic pe această pictogramă şi selectaţi dispozitivul hardware pe care îl eliminaţi."
|
||||
|
||||
//Volume related strings
|
||||
IDS_VOL_VOLUME "Volum"
|
||||
IDS_VOL_ADJUST "&Ajustează proprietăți audio"
|
||||
IDS_VOL_OPEN "&Deschide control de volum"
|
||||
IDS_VOL_ADJUST "&Reglare proprietăţi audio"
|
||||
IDS_VOL_OPEN "&Deschidere control volum"
|
||||
IDS_VOL_RUN "SNDVOL32.EXE"
|
||||
IDS_VOL_MUTED "Volum (mut)"
|
||||
|
||||
//Keyboard-Mouse related strings
|
||||
IDS_KEYS_STICKY "TasteLipicioase"
|
||||
IDS_KEYS_MOUSE "TasteMouse"
|
||||
IDS_KEYS_FILTER "FiltruTaste"
|
||||
IDS_KEYS_STICKY "TasteAdezive"
|
||||
IDS_KEYS_MOUSE "TasteMaus"
|
||||
IDS_KEYS_FILTER "TasteFiltrare"
|
||||
END
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue