summaryrefslogtreecommitdiff
path: root/reference/C/CONTRIB/SNIP/shel2dos.c
diff options
context:
space:
mode:
Diffstat (limited to 'reference/C/CONTRIB/SNIP/shel2dos.c')
-rwxr-xr-xreference/C/CONTRIB/SNIP/shel2dos.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/SNIP/shel2dos.c b/reference/C/CONTRIB/SNIP/shel2dos.c
new file mode 100755
index 0000000..78c7f9a
--- /dev/null
+++ b/reference/C/CONTRIB/SNIP/shel2dos.c
@@ -0,0 +1,50 @@
+/*
+** SHEL2DOS.C - Shell to DOS from a running program
+**
+** Original Copyright 1989-1991 by Bob Stout as part of
+** the MicroFirm Function Library (MFL)
+**
+** This subset version is hereby donated to the public domain.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <process.h>
+
+int shell_to_DOS(void)
+{
+ char *comspec, prompt[256], *oldprompt;
+ int retval;
+
+ comspec = getenv("COMSPEC");
+ if(comspec == NULL)
+ comspec = "COMMAND.COM"; /* Better than nothing... */
+
+ sprintf(prompt, "PROMPT=[Type EXIT to return to program]\r\n%s",
+ oldprompt = getenv("PROMPT"));
+ putenv(prompt);
+
+ retval = spawnlp(0, comspec, comspec, NULL);
+
+ sprintf(prompt, "PROMPT=%s", oldprompt);
+ putenv(prompt);
+
+ return retval;
+}
+
+#ifdef TEST
+
+#include <stdio.h>
+
+void main(void)
+{
+ int retval = shell_to_DOS();
+
+ printf("shell_to_DOS() returned %d\n", retval);
+
+ retval = shell_to_DOS();
+ printf("shell_to_DOS() returned %d\n", retval);
+}
+
+#endif