Author: mladen.turk(a)jboss.com
Date: 2008-04-07 03:41:55 -0400 (Mon, 07 Apr 2008)
New Revision: 1522
Modified:
trunk/build/install/xtool/xtool.c
Log:
Add MessageBox tool
Modified: trunk/build/install/xtool/xtool.c
===================================================================
--- trunk/build/install/xtool/xtool.c 2008-04-07 06:52:39 UTC (rev 1521)
+++ trunk/build/install/xtool/xtool.c 2008-04-07 07:41:55 UTC (rev 1522)
@@ -3453,7 +3453,7 @@
fprintf(stderr, " -f File Version (64-Bit number).\n");
fprintf(stderr, " -F File Version (from Resource).\n");
fprintf(stderr, " -p Product Version (64-Bit number).\n");
- fprintf(stderr, " -P Product Version (from Resource).\n");
+ fprintf(stderr, " -P Product Version (from Resource).\n\n");
print_stdusage();
return retval;
}
@@ -3496,11 +3496,46 @@
fprintf(stderr, " REG_DWORD\n");
fprintf(stderr, " REG_QWORD\n");
fprintf(stderr, " -f CHAR Field separator for REG_MULTI_SZ.\n");
- fprintf(stderr, " -d STRING Data to be used for add operation.\n");
+ fprintf(stderr, " -d STRING Data to be used for add
operation.\n\n");
print_stdusage();
return retval;
}
+static int prog_msg_usage(int retval)
+{
+ fprintf(stderr, "Usage: %s [OPTION]... CAPTION TEXT\n", progname);
+ fprintf(stderr, "Display message box\n\n");
+ fprintf(stderr, " -s System-modal message box.\n");
+ fprintf(stderr, " -t STRING Message box type:\n");
+ fprintf(stderr, " MB_ABORTRETRYIGNORE\n");
+ fprintf(stderr, " MB_CANCELTRYCONTINUE\n");
+ fprintf(stderr, " MB_HELP\n");
+ fprintf(stderr, " MB_OK\n");
+ fprintf(stderr, " MB_OKCANCEL\n");
+ fprintf(stderr, " MB_RETRYCANCEL\n");
+ fprintf(stderr, " MB_YESN\n");
+ fprintf(stderr, " MB_YESNOCANCEL\n");
+ fprintf(stderr, " -i CHAR Message box icon:\n");
+ fprintf(stderr, " '!' Exclamation-point icon appears in
the message box\n");
+ fprintf(stderr, " 'w' Exclamation-point icon appears in
the message box\n");
+ fprintf(stderr, " 'i' Letter i in a circle appears in
the message box\n");
+ fprintf(stderr, " 's' Stop-sign icon appears in the
message box\n\n");
+ fprintf(stderr, "Return value is set depending on the key pressed\n");
+ fprintf(stderr, " OK 1\n");
+ fprintf(stderr, " CANCEL 2\n");
+ fprintf(stderr, " ABORT 3\n");
+ fprintf(stderr, " RETRY 4\n");
+ fprintf(stderr, " IGNORE 5\n");
+ fprintf(stderr, " YES 6\n");
+ fprintf(stderr, " NO 7\n");
+ fprintf(stderr, " CLOSE 8\n");
+ fprintf(stderr, " HELP 9\n");
+ fprintf(stderr, " TRYAGAIN 10\n");
+ fprintf(stderr, " CONTINUE 11\n\n");
+ print_stdusage();
+ return retval;
+}
+
/*
* ---------------------------------------------------------------------
* end of programs usage
@@ -4969,6 +5004,127 @@
return rv;
}
+static int prog_msg(int argc, const char **argv, const char **env)
+{
+ int ch, rv = 0;
+ int type = MB_YESNO;
+ int icon = MB_ICONQUESTION;
+ int modal = MB_TASKMODAL;
+ char *p, *msg = NULL;
+ while ((ch = getopt(argc, argv, "i:st:hqvV", 1)) != EOF) {
+ switch (ch) {
+ case '.':
+ if (!stricmp(optarg, "verbose"))
+ xtrace = 1;
+ else if (!stricmp(optarg, "version"))
+ return print_banner(1);
+ else if (!stricmp(optarg, "help"))
+ return prog_msg_usage(0);
+ else
+ return prog_msg_usage(EINVAL);
+ break;
+ case 'v':
+ xtrace = 1;
+ break;
+ case 'V':
+ xtrace = 9;
+ break;
+ case 'q':
+ xquiet = 1;
+ break;
+ case 'h':
+ return prog_msg_usage(0);
+ break;
+ case 's':
+ modal = MB_SYSTEMMODAL;
+ break;
+ case 't':
+ if (!stricmp("yn", optarg) ||
+ !stricmp("MB_YESNO", optarg)) {
+ type = MB_YESNO;
+ }
+ else if (!stricmp("ync", optarg) ||
+ !stricmp("MB_YESNOCANCEL", optarg)) {
+ type = MB_YESNOCANCEL;
+ }
+ else if (!stricmp("ok", optarg) ||
+ !stricmp("MB_OK", optarg)) {
+ type = MB_OK;
+ }
+ else if (!stricmp("oc", optarg) ||
+ !stricmp("MB_OKCANCEL", optarg)) {
+ type = MB_OKCANCEL;
+ }
+ else if (!stricmp("ctc", optarg) ||
+ !stricmp("MB_CANCELTRYCONTINUE", optarg)) {
+ type = MB_CANCELTRYCONTINUE;
+ }
+ else if (!stricmp("ari", optarg) ||
+ !stricmp("MB_ABORTRETRYIGNORE", optarg)) {
+ type = MB_ABORTRETRYIGNORE;
+ }
+ else if (!stricmp("rc", optarg) ||
+ !stricmp("MB_RETRYCANCEL", optarg)) {
+ type = MB_RETRYCANCEL;
+ }
+ else {
+ return prog_msg_usage(EINVAL);
+ }
+ break;
+ case 'i':
+ switch (*optarg) {
+ case '!':
+ icon = MB_ICONEXCLAMATION;
+ break;
+ case 'w':
+ case 'W':
+ icon = MB_ICONWARNING;
+ break;
+ case 'i':
+ case 'I':
+ icon = MB_ICONINFORMATION;
+ break;
+ case '*':
+ icon = MB_ICONASTERISK;
+ break;
+ case '?':
+ icon = MB_ICONQUESTION;
+ break;
+ case 's':
+ case 'S':
+ icon = MB_ICONSTOP;
+ break;
+ case 'h':
+ case 'H':
+ icon = MB_ICONHAND;
+ break;
+ }
+ break;
+ case '?':
+ case ':':
+ return EINVAL;
+ break;
+ }
+ }
+ argc -= optind;
+ argv += optind;
+ if (argc < 2) {
+ return prog_rmdir_usage(EINVAL);
+ }
+ msg = x_strdup(argv[1]);
+ for (p = msg; *p; p++) {
+ if (*p == '\\' && *(p + 1) == 'n') {
+ *(p++) = '\r';
+ *(p++) = '\n';
+ }
+ }
+ rv = MessageBoxA(NULL, msg, argv[0], type | icon | modal);
+ x_free(msg);
+ if (rv == 0)
+ rv = -1;
+ return rv;
+}
+
/*
* ---------------------------------------------------------------------
* end of programs
@@ -4992,6 +5148,7 @@
{ "coff", prog_image },
{ "html", prog_html },
{ "reg", prog_reg },
+ { "msg", prog_msg },
{ NULL, NULL }
};