windows-nt/Source/XPSP1/NT/sdktools/ync/ync.c
2020-09-26 16:20:57 +08:00

106 lines
2.2 KiB
C

#include "string.h"
#include <stdio.h>
#include <conio.h>
#include <process.h>
#include <windows.h>
#include <tools.h>
/* YNC is a Yes No Cancel program
* ===============================================================================
* Usage: ync [/c choices] text ...
*
* "choices" is a string of characters, default "ync".
* YNC echos its text parameters and the text " [choices]" and waits for the
* user to type one of the choices. When one of the choices is typed, the
* index of the choice is returned.
*
* Rtns -1 if no parameters specified or /c but no choices or CONTROL-C input.
*
* Beeps on all other input.
*
* Good for use in make batch files.cd \lib
*
* ync your query?
* if errorlevel 2 goto cancel
* if errorlevel 1 goto no
* :yes
* ...
* goto continue
* :no
* ...
* goto continue
* :cancel
* ...
* :continue
*
* or
* ync /c acr abort cancel, retry
* ync /c acr "abort cancel, retry"
*/
#define BEL 0x07
#define LF 0x0a
#define CR 0x0d
#define CTRLC 0x03
char *strYNC = "ync";
// Forward Function Declarations...
void chkusage( int );
void chkusage(argc)
int argc;
{
if (!argc) {
printf("Usage: ync [/c choices] text ...\n");
exit (-1);
}
}
__cdecl main(argc, argv)
int argc;
char *argv[];
{
char ch;
char *s;
char *pChoices = strYNC;
ConvertAppToOem( argc, argv );
SHIFT(argc, argv)
chkusage(argc);
while (argc) {
s = argv[0];
if (fSwitChr(*s++)) {
if (*s == 'c' || *s == 'C') {
SHIFT(argc, argv);
chkusage(argc);
pChoices = argv[0];
}
else
printf("ync: invalid switch - %s\n", argv[0]);
}
else {
_cputs(*argv);
_putch(' ');
}
SHIFT(argc, argv);
}
_putch('[');
_cputs(pChoices);
_putch(']');
while (!(s = strchr(pChoices, ch = (char)_getch()))) {
if (ch == CTRLC) {
exit(-1);
} else {
_putch(BEL);
}
}
_putch(ch);
_putch(LF);
_putch(CR);
return( (int)(s - pChoices) );
}