- 2.01: fixed 64-bit typo in readpng2.c
- 2.02: fixed improper display of usage screen on PNG error(s); fixed
unexpected-EOF and file-read-error cases
+ - 2.03: removed runtime MMX-enabling/disabling and obsolete -mmx* options
+ - 2.04:
+ (GR-P)
---------------------------------------------------------------------------
#include <time.h>
#include <math.h> /* only for PvdM background code */
#include <windows.h>
+#ifdef __CYGWIN__
+/* getch replacement. Turns out, we don't really need this,
+ * but leave it here if we ever enable any of the uses of
+ * _getch in the main code
+ */
+#include <unistd.h>
+#include <termio.h>
+#include <sys/ioctl.h>
+int repl_getch( void )
+{
+ char ch;
+ int fd = fileno(stdin);
+ struct termio old_tty, new_tty;
+
+ ioctl(fd, TCGETA, &old_tty);
+ new_tty = old_tty;
+ new_tty.c_lflag &= ~(ICANON | ECHO | ISIG);
+ ioctl(fd, TCSETA, &new_tty);
+ fread(&ch, 1, sizeof(ch), stdin);
+ ioctl(fd, TCSETA, &old_tty);
+
+ return ch;
+}
+#define _getch repl_getch
+#else
#include <conio.h> /* only for _getch() */
+#endif
/* all for PvdM background code: */
#ifndef PI
filename = (char *)NULL;
memset(&rpng2_info, 0, sizeof(mainprog_info));
-
+#ifndef __CYGWIN__
/* Next reenable console output, which normally goes to the bit bucket
* for windowed apps. Closing the console window will terminate the
* app. Thanks to David.Geldreich@realviz.com for supplying the magical
AllocConsole();
freopen("CONOUT$", "a", stderr);
freopen("CONOUT$", "a", stdout);
-
+#endif
/* Set the default value for our display-system exponent, i.e., the
* product of the CRT exponent and the exponent corresponding to
}
} else if (!strncmp(*argv, "-timing", 2)) {
timing = TRUE;
-#if (defined(__i386__) || defined(_M_IX86) || defined(__x86_64__))
- } else if (!strncmp(*argv, "-nommxfilters", 7)) {
- rpng2_info.nommxfilters = TRUE;
- } else if (!strncmp(*argv, "-nommxcombine", 7)) {
- rpng2_info.nommxcombine = TRUE;
- } else if (!strncmp(*argv, "-nommxinterlace", 7)) {
- rpng2_info.nommxinterlace = TRUE;
- } else if (!strcmp(*argv, "-nommx")) {
- rpng2_info.nommxfilters = TRUE;
- rpng2_info.nommxcombine = TRUE;
- rpng2_info.nommxinterlace = TRUE;
-#endif
} else {
if (**argv != '-') {
filename = *argv;
/* print usage screen if any errors up to this point */
if (error) {
+#ifndef __CYGWIN__
int ch;
+#endif
fprintf(stderr, "\n%s %s: %s\n\n", PROGNAME, VERSION, appname);
readpng2_version_info();
fprintf(stderr, "\n"
"Usage: %s [-gamma exp] [-bgcolor bg | -bgpat pat] [-timing]\n"
-#if (defined(__i386__) || defined(_M_IX86) || defined(__x86_64__))
- " %*s [[-nommxfilters] [-nommxcombine] [-nommxinterlace] | -nommx]\n"
-#endif
" %*s file.png\n\n"
" exp \ttransfer-function exponent (``gamma'') of the display\n"
"\t\t system in floating-point format (e.g., ``%.1f''); equal\n"
"\t\t transparent images; overrides -bgcolor option\n"
" -timing\tenables delay for every block read, to simulate modem\n"
"\t\t download of image (~36 Kbps)\n"
-#if (defined(__i386__) || defined(_M_IX86) || defined(__x86_64__))
- " -nommx*\tdisable optimized MMX routines for decoding row filters,\n"
- "\t\t combining rows, and expanding interlacing, respectively\n"
-#endif
"\nPress Q, Esc or mouse button 1 after image is displayed to quit.\n"
+#ifndef __CYGWIN__
"Press Q or Esc to quit this usage screen. ",
+#else
+ ,
+#endif
PROGNAME,
-#if (defined(__i386__) || defined(_M_IX86) || defined(__x86_64__))
+#if (defined(__i386__) || defined(_M_IX86) || defined(__x86_64__)) && \
+ !(defined(__CYGWIN__) || defined(__MINGW32__))
(int)strlen(PROGNAME), " ",
#endif
(int)strlen(PROGNAME), " ", default_display_exponent, num_bgpat);
fflush(stderr);
+#ifndef __CYGWIN__
do
ch = _getch();
while (ch != 'q' && ch != 'Q' && ch != 0x1B);
+#endif
exit(1);
}
if (error) {
+#ifndef __CYGWIN__
int ch;
+#endif
fprintf(stderr, PROGNAME ": aborting.\n");
+#ifndef __CYGWIN__
do
ch = _getch();
while (ch != 'q' && ch != 'Q' && ch != 0x1B);
+#endif
exit(2);
} else {
fprintf(stderr, "\n%s %s: %s\n", PROGNAME, VERSION, appname);
+#ifndef __CYGWIN__
fprintf(stderr,
"\n [console window: closing this window will terminate %s]\n\n",
PROGNAME);
+#endif
fflush(stderr);
}
"(unexpectedly) while reading PNG image file\n");
exit(3);
} else /* if (error) */ {
- // will print error message below
+ /* will print error message below */
}
break;
}
rpng2_info.state = kDone;
printf(
- "Done. Press Q, Esc or mouse button 1 (within image window) to quit.\n");
+#ifndef __CYGWIN__
+ "Done. Press Q, Esc or mouse button 1 (within image window) to quit.\n"
+#else
+ "Done. Press mouse button 1 (within image window) to quit.\n"
+#endif
+ );
fflush(stdout);
}