Jason Edmeades : cmd.exe: Add prompt for rd /s.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Feb 28 08:19:13 CST 2007
Module: wine
Branch: master
Commit: fda7229b50c06bb627761dbf6c76f54f641bfbb2
URL: http://source.winehq.org/git/wine.git/?a=commit;h=fda7229b50c06bb627761dbf6c76f54f641bfbb2
Author: Jason Edmeades <us at edmeades.me.uk>
Date: Tue Feb 27 23:18:57 2007 +0000
cmd.exe: Add prompt for rd /s.
---
programs/cmd/Cs.rc | 4 +++
programs/cmd/De.rc | 4 +++
programs/cmd/En.rc | 4 +++
programs/cmd/Es.rc | 4 +++
programs/cmd/Fr.rc | 4 +++
programs/cmd/Ja.rc | 4 +++
programs/cmd/Ko.rc | 4 +++
programs/cmd/Nl.rc | 4 +++
programs/cmd/No.rc | 4 +++
programs/cmd/Pl.rc | 4 +++
programs/cmd/Pt.rc | 4 +++
programs/cmd/Ru.rc | 4 +++
programs/cmd/Si.rc | 4 +++
programs/cmd/Tr.rc | 4 +++
programs/cmd/builtins.c | 58 +++++++++++++++++++++++++++++++++++++++++++++-
programs/cmd/wcmd.h | 6 +++++
16 files changed, 118 insertions(+), 2 deletions(-)
diff --git a/programs/cmd/Cs.rc b/programs/cmd/Cs.rc
index d452bd8..390d875 100644
--- a/programs/cmd/Cs.rc
+++ b/programs/cmd/Cs.rc
@@ -230,4 +230,8 @@ VER\t\tZobrazí verzi CMD\n\
VOL\t\tUkáe jmenovku disku\n\
EXIT\t\tUkonèí CMD\n\n\
Zadejte HELP <pøíkaz> pro podrobnìjí informace o nìkterém z výe uvedených pøíkazù\n"
+
+ WCMD_CONFIRM, "Are you sure"
+ WCMD_YES, "Y"
+ WCMD_NO, "N"
}
diff --git a/programs/cmd/De.rc b/programs/cmd/De.rc
index 4fd40c8..50a69bc 100644
--- a/programs/cmd/De.rc
+++ b/programs/cmd/De.rc
@@ -247,4 +247,8 @@ VOL\t\tZeigt die Bezeichnung eines Laufwerkes an\n\
EXIT\t\tBeendet den CMD\n\n\
Geben Sie HELP <Befehl> ein, damit Sie weitere Informationen für einen der\n\
obigen Befehle erhalten.\n"
+
+ WCMD_CONFIRM, "Are you sure"
+ WCMD_YES, "Y"
+ WCMD_NO, "N"
}
diff --git a/programs/cmd/En.rc b/programs/cmd/En.rc
index 1a8877d..10891a5 100644
--- a/programs/cmd/En.rc
+++ b/programs/cmd/En.rc
@@ -234,4 +234,8 @@ VER\t\tShow the current version of CMD\n\
VOL\t\tShow the volume label of a disk device\n\
EXIT\t\tClose down CMD\n\n\
Enter HELP <command> for further information on any of the above commands\n"
+
+ WCMD_CONFIRM, "Are you sure"
+ WCMD_YES, "Y"
+ WCMD_NO, "N"
}
diff --git a/programs/cmd/Es.rc b/programs/cmd/Es.rc
index 279ab71..4822007 100644
--- a/programs/cmd/Es.rc
+++ b/programs/cmd/Es.rc
@@ -242,4 +242,8 @@ VER\t\tMostrar la versión actual de CMD\n\
VOL\t\tMostrar la etiqueta de volumen de un dispositivo de disco\n\
EXIT\t\tConcluir CMD\n\n\
Introduzca HELP <comando> para más información sobre cualquiera de los comandos\nde arriba\n"
+
+ WCMD_CONFIRM, "Are you sure"
+ WCMD_YES, "Y"
+ WCMD_NO, "N"
}
diff --git a/programs/cmd/Fr.rc b/programs/cmd/Fr.rc
index cc65abd..78f206d 100644
--- a/programs/cmd/Fr.rc
+++ b/programs/cmd/Fr.rc
@@ -224,4 +224,8 @@ VER\t\tAffiche la version de cmd actuellement en mémoire.\n\
VOL\t\tAffiche le nom de volume d'un lecteur de disque\n\
EXIT\t\tQuitte CMD\n\n\
Entrez HELP <commande> pour plus d'informations sur les commandes ci-dessus\n"
+
+ WCMD_CONFIRM, "Are you sure"
+ WCMD_YES, "Y"
+ WCMD_NO, "N"
}
diff --git a/programs/cmd/Ja.rc b/programs/cmd/Ja.rc
index 3e4f629..1937480 100644
--- a/programs/cmd/Ja.rc
+++ b/programs/cmd/Ja.rc
@@ -228,4 +228,8 @@ VER\t\tCMDÌo[Wð\¦\n\
VOL\t\tfBXNfoCXÌ{
[xð\¦\n\
EXIT\t\tCMDðI¹\n\n\
ãLÌR}hÉÖ·éÚ×ð\¦·éÉÍ HELP <R}h¼> Æü͵ĺ³¢B\n"
+
+ WCMD_CONFIRM, "Are you sure"
+ WCMD_YES, "Y"
+ WCMD_NO, "N"
}
diff --git a/programs/cmd/Ko.rc b/programs/cmd/Ko.rc
index 32c6b51..fa6b83f 100644
--- a/programs/cmd/Ko.rc
+++ b/programs/cmd/Ko.rc
@@ -219,4 +219,8 @@ VER\t\tCMD ÇöÀç ¹öÁ¯ º¸¿©ÁÖ±â\n\
VOL\t\tµð½ºÅ© ÀåÄ¡ÀÇ ºÒ·ý ¶óº§ º¸¿©ÁÖ±â\n\
EXIT\t\tCMD ´Ý±â\n\n\
HELP <¸í·É>À» Ä¡¸é ±× ¸í·ÉÀÇ »ó¼¼ÇÑ Á¤º¸¸¦ º¸¿©ÁÜ\n"
+
+ WCMD_CONFIRM, "Are you sure"
+ WCMD_YES, "Y"
+ WCMD_NO, "N"
}
diff --git a/programs/cmd/Nl.rc b/programs/cmd/Nl.rc
index da09b09..8e8d1c4 100644
--- a/programs/cmd/Nl.rc
+++ b/programs/cmd/Nl.rc
@@ -227,4 +227,8 @@ VER\t\tToon de versie van CMD\n\
VOL\t\tToon het label van een schijf\n\
EXIT\t\tSluit CMD af\n\n\
type HELP <opdracht> voor meer informatie over bovengenoemde opdrachten\n"
+
+ WCMD_CONFIRM, "Are you sure"
+ WCMD_YES, "Y"
+ WCMD_NO, "N"
}
diff --git a/programs/cmd/No.rc b/programs/cmd/No.rc
index 2b01c47..c98dd15 100644
--- a/programs/cmd/No.rc
+++ b/programs/cmd/No.rc
@@ -225,4 +225,8 @@ VER\t\tViser CMDs versjonnummer\n\
VOL\t\tViser volumnavnet til en stasjon\n\
EXIT\t\tAvslutter CMD\n\n\
Skriv «HELP <kommando>» for mer informasjon om kommandoene ovenfor\n"
+
+ WCMD_CONFIRM, "Are you sure"
+ WCMD_YES, "Y"
+ WCMD_NO, "N"
}
diff --git a/programs/cmd/Pl.rc b/programs/cmd/Pl.rc
index b5a60eb..5b49433 100644
--- a/programs/cmd/Pl.rc
+++ b/programs/cmd/Pl.rc
@@ -221,4 +221,8 @@ VER\t\tWywietla wersjê CMD\n\
VOL\t\tWywietla etykietê dysku\n\
EXIT\t\tWy³¹cza CMD\n\n\
Wpisz HELP <komenda> dla dok³adniejszych informacji o komendzie\n"
+
+ WCMD_CONFIRM, "Are you sure"
+ WCMD_YES, "Y"
+ WCMD_NO, "N"
}
diff --git a/programs/cmd/Pt.rc b/programs/cmd/Pt.rc
index 480e3d9..13a9b4c 100644
--- a/programs/cmd/Pt.rc
+++ b/programs/cmd/Pt.rc
@@ -434,4 +434,8 @@ VER\t\tMostra a versão atual do CMD\n\
VOL\t\tMostra o rótulo do volume de uma unidade de disco\n\
EXIT\t\tFecha o CMD\n\n\
Digite HELP <comando> para mais informações sobre alguns dos comandos acima\n"
+
+ WCMD_CONFIRM, "Are you sure"
+ WCMD_YES, "Y"
+ WCMD_NO, "N"
}
diff --git a/programs/cmd/Ru.rc b/programs/cmd/Ru.rc
index 61ab8ef..4118102 100644
--- a/programs/cmd/Ru.rc
+++ b/programs/cmd/Ru.rc
@@ -225,4 +225,8 @@ VER\t\tÏîêàçàòü òåêóùóþ âåðñèþ WCMD\n\
VOL\t\tÏîêàçàòü ìåòêó òîìà äèñêîâîãî óñòðîéñòâà\n\
EXIT\t\tÂûéòè èç WCMD\n\n\
Âûïîëíèòå HELP <êîìàíäà> äëÿ äîïîëíèòåëüíîé èíôîðìàöèè ïî ïåðå÷èñëåííûì âûøå êîìàíäàì.\n"
+
+ WCMD_CONFIRM, "Are you sure"
+ WCMD_YES, "Y"
+ WCMD_NO, "N"
}
diff --git a/programs/cmd/Si.rc b/programs/cmd/Si.rc
index a8fbb57..7623beb 100644
--- a/programs/cmd/Si.rc
+++ b/programs/cmd/Si.rc
@@ -226,4 +226,8 @@ VER\t\tShow the current version of CMD\n\
VOL\t\tShow the volume label of a disk device\n\
EXIT\t\tClose down CMD\n\n\
Enter HELP <command> for further information on any of the above commands\n"
+
+ WCMD_CONFIRM, "Are you sure"
+ WCMD_YES, "Y"
+ WCMD_NO, "N"
}
diff --git a/programs/cmd/Tr.rc b/programs/cmd/Tr.rc
index 40c9fc2..bdecde3 100644
--- a/programs/cmd/Tr.rc
+++ b/programs/cmd/Tr.rc
@@ -228,4 +228,8 @@ VER\t\tGeçerli CMD sürümünü göster\n\
VOL\t\tDisk aygýtýnýn bölüm etiketini göster\n\
EXIT\t\tCMD'yi kapat\n\n\
Yukarýdaki komutlar hakkýnda daha fazla bilgi için HELP <komut> girin\n"
+
+ WCMD_CONFIRM, "Are you sure"
+ WCMD_YES, "Y"
+ WCMD_NO, "N"
}
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index a1d1154..500c27e 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -643,8 +643,22 @@ void WCMD_remove_dir (void) {
/* Otherwise use ShFileOp to recursively remove a directory */
} else {
- /* Do the delete */
SHFILEOPSTRUCT lpDir;
+
+ /* Ask first */
+ if (strstr (quals, "/Q") == NULL) {
+ BOOL ok;
+ char question[MAXSTRING];
+
+ /* Ask for confirmation */
+ sprintf(question, "%s, ", param1);
+ ok = WCMD_ask_confirm(question);
+
+ /* Abort if answer is 'N' */
+ if (!ok) return;
+ }
+
+ /* Do the delete */
lpDir.hwnd = NULL;
lpDir.pTo = NULL;
lpDir.pFrom = param1;
@@ -786,7 +800,7 @@ void WCMD_endlocal (void) {
}
LocalFree (old);
FreeEnvironmentStringsW (env);
-
+
/* restore old environment */
env = temp->strings;
len = 0;
@@ -1260,3 +1274,43 @@ void WCMD_exit (void) {
ExitProcess(rc);
}
}
+
+/**************************************************************************
+ * WCMD_ask_confirm
+ *
+ * Issue a message and ask 'Are you sure (Y/N)', waiting on a valid
+ * answer.
+ *
+ * Returns True if Y answer is selected
+ *
+ */
+BOOL WCMD_ask_confirm (char *message) {
+
+ char msgbuffer[MAXSTRING];
+ char Ybuffer[MAXSTRING];
+ char Nbuffer[MAXSTRING];
+ char answer[MAX_PATH] = "";
+ DWORD count = 0;
+
+ /* Load the translated 'Are you sure', plus valid answers */
+ LoadString (hinst, WCMD_CONFIRM, msgbuffer, sizeof(msgbuffer));
+ LoadString (hinst, WCMD_YES, Ybuffer, sizeof(Ybuffer));
+ LoadString (hinst, WCMD_NO, Nbuffer, sizeof(Nbuffer));
+
+ /* Loop waiting on a Y or N */
+ while (answer[0] != Ybuffer[0] && answer[0] != Nbuffer[0]) {
+ WCMD_output_asis (message);
+ WCMD_output_asis (msgbuffer);
+ WCMD_output_asis (" (");
+ WCMD_output_asis (Ybuffer);
+ WCMD_output_asis ("/");
+ WCMD_output_asis (Nbuffer);
+ WCMD_output_asis (")?");
+ ReadFile (GetStdHandle(STD_INPUT_HANDLE), answer, sizeof(answer),
+ &count, NULL);
+ answer[0] = toupper(answer[0]);
+ }
+
+ /* Return the answer */
+ return (answer[0] == Ybuffer[0]);
+}
diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h
index d9127bf..f27824a 100644
--- a/programs/cmd/wcmd.h
+++ b/programs/cmd/wcmd.h
@@ -80,6 +80,7 @@ char *WCMD_strtrim_leading_spaces (char *string);
void WCMD_strtrim_trailing_spaces (char *string);
void WCMD_opt_s_strip_quotes(char *cmd);
void WCMD_HandleTildaModifiers(char **start, char *forVariable);
+BOOL WCMD_ask_confirm (char *message);
/* Data structure to hold context when executing batch files */
@@ -154,5 +155,10 @@ extern const char newline[];
extern const char version_string[];
extern const char anykey[];
+/* Translated messages */
+#define WCMD_CONFIRM 1001
+#define WCMD_YES 1002
+#define WCMD_NO 1003
+
/* msdn specified max for Win XP */
#define MAXSTRING 8192
More information about the wine-cvs
mailing list