aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/visupng
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/visupng')
-rw-r--r--contrib/visupng/PngFile.c439
-rw-r--r--contrib/visupng/PngFile.h27
-rw-r--r--contrib/visupng/README.txt58
-rw-r--r--contrib/visupng/VisualPng.c961
-rw-r--r--contrib/visupng/VisualPng.dsp147
-rw-r--r--contrib/visupng/VisualPng.dsw29
-rw-r--r--contrib/visupng/VisualPng.icobin766 -> 0 bytes
-rw-r--r--contrib/visupng/VisualPng.pngbin208 -> 0 bytes
-rw-r--r--contrib/visupng/VisualPng.rc152
-rw-r--r--contrib/visupng/cexcept.h243
-rw-r--r--contrib/visupng/resource.h23
11 files changed, 0 insertions, 2079 deletions
diff --git a/contrib/visupng/PngFile.c b/contrib/visupng/PngFile.c
deleted file mode 100644
index 959afe9..0000000
--- a/contrib/visupng/PngFile.c
+++ /dev/null
@@ -1,439 +0,0 @@
-//-------------------------------------
-// PNGFILE.C -- Image File Functions
-//-------------------------------------
-
-// Copyright 2000, Willem van Schaik. For conditions of distribution and
-// use, see the copyright/license/disclaimer notice in png.h
-
-#include <windows.h>
-#include <commdlg.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "png.h"
-#include "pngfile.h"
-#include "cexcept.h"
-
-define_exception_type(const char *);
-extern struct exception_context the_exception_context[1];
-struct exception_context the_exception_context[1];
-png_const_charp msg;
-
-static OPENFILENAME ofn;
-
-static png_structp png_ptr = NULL;
-static png_infop info_ptr = NULL;
-
-
-// cexcept interface
-
-static void
-png_cexcept_error(png_structp png_ptr, png_const_charp msg)
-{
- if(png_ptr)
- ;
-#ifndef PNG_NO_CONSOLE_IO
- fprintf(stderr, "libpng error: %s\n", msg);
-#endif
- {
- Throw msg;
- }
-}
-
-// Windows open-file functions
-
-void PngFileInitialize (HWND hwnd)
-{
- static TCHAR szFilter[] = TEXT ("PNG Files (*.PNG)\0*.png\0")
- TEXT ("All Files (*.*)\0*.*\0\0");
-
- ofn.lStructSize = sizeof (OPENFILENAME);
- ofn.hwndOwner = hwnd;
- ofn.hInstance = NULL;
- ofn.lpstrFilter = szFilter;
- ofn.lpstrCustomFilter = NULL;
- ofn.nMaxCustFilter = 0;
- ofn.nFilterIndex = 0;
- ofn.lpstrFile = NULL; // Set in Open and Close functions
- ofn.nMaxFile = MAX_PATH;
- ofn.lpstrFileTitle = NULL; // Set in Open and Close functions
- ofn.nMaxFileTitle = MAX_PATH;
- ofn.lpstrInitialDir = NULL;
- ofn.lpstrTitle = NULL;
- ofn.Flags = 0; // Set in Open and Close functions
- ofn.nFileOffset = 0;
- ofn.nFileExtension = 0;
- ofn.lpstrDefExt = TEXT ("png");
- ofn.lCustData = 0;
- ofn.lpfnHook = NULL;
- ofn.lpTemplateName = NULL;
-}
-
-BOOL PngFileOpenDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName)
-{
- ofn.hwndOwner = hwnd;
- ofn.lpstrFile = pstrFileName;
- ofn.lpstrFileTitle = pstrTitleName;
- ofn.Flags = OFN_HIDEREADONLY;
-
- return GetOpenFileName (&ofn);
-}
-
-BOOL PngFileSaveDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName)
-{
- ofn.hwndOwner = hwnd;
- ofn.lpstrFile = pstrFileName;
- ofn.lpstrFileTitle = pstrTitleName;
- ofn.Flags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
-
- return GetSaveFileName (&ofn);
-}
-
-// PNG image handler functions
-
-BOOL PngLoadImage (PTSTR pstrFileName, png_byte **ppbImageData,
- int *piWidth, int *piHeight, int *piChannels, png_color *pBkgColor)
-{
- static FILE *pfFile;
- png_byte pbSig[8];
- int iBitDepth;
- int iColorType;
- double dGamma;
- png_color_16 *pBackground;
- png_uint_32 ulChannels;
- png_uint_32 ulRowBytes;
- png_byte *pbImageData = *ppbImageData;
- static png_byte **ppbRowPointers = NULL;
- int i;
-
- // open the PNG input file
-
- if (!pstrFileName)
- {
- *ppbImageData = pbImageData = NULL;
- return FALSE;
- }
-
- if (!(pfFile = fopen(pstrFileName, "rb")))
- {
- *ppbImageData = pbImageData = NULL;
- return FALSE;
- }
-
- // first check the eight byte PNG signature
-
- fread(pbSig, 1, 8, pfFile);
- if (!png_check_sig(pbSig, 8))
- {
- *ppbImageData = pbImageData = NULL;
- return FALSE;
- }
-
- // create the two png(-info) structures
-
- png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL,
- (png_error_ptr)png_cexcept_error, (png_error_ptr)NULL);
- if (!png_ptr)
- {
- *ppbImageData = pbImageData = NULL;
- return FALSE;
- }
-
- info_ptr = png_create_info_struct(png_ptr);
- if (!info_ptr)
- {
- png_destroy_read_struct(&png_ptr, NULL, NULL);
- *ppbImageData = pbImageData = NULL;
- return FALSE;
- }
-
- Try
- {
-
- // initialize the png structure
-
-#if !defined(PNG_NO_STDIO)
- png_init_io(png_ptr, pfFile);
-#else
- png_set_read_fn(png_ptr, (png_voidp)pfFile, png_read_data);
-#endif
-
- png_set_sig_bytes(png_ptr, 8);
-
- // read all PNG info up to image data
-
- png_read_info(png_ptr, info_ptr);
-
- // get width, height, bit-depth and color-type
-
- png_get_IHDR(png_ptr, info_ptr, piWidth, piHeight, &iBitDepth,
- &iColorType, NULL, NULL, NULL);
-
- // expand images of all color-type and bit-depth to 3x8 bit RGB images
- // let the library process things like alpha, transparency, background
-
- if (iBitDepth == 16)
- png_set_strip_16(png_ptr);
- if (iColorType == PNG_COLOR_TYPE_PALETTE)
- png_set_expand(png_ptr);
- if (iBitDepth < 8)
- png_set_expand(png_ptr);
- if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))
- png_set_expand(png_ptr);
- if (iColorType == PNG_COLOR_TYPE_GRAY ||
- iColorType == PNG_COLOR_TYPE_GRAY_ALPHA)
- png_set_gray_to_rgb(png_ptr);
-
- // set the background color to draw transparent and alpha images over.
- if (png_get_bKGD(png_ptr, info_ptr, &pBackground))
- {
- png_set_background(png_ptr, pBackground, PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
- pBkgColor->red = (byte) pBackground->red;
- pBkgColor->green = (byte) pBackground->green;
- pBkgColor->blue = (byte) pBackground->blue;
- }
- else
- {
- pBkgColor = NULL;
- }
-
- // if required set gamma conversion
- if (png_get_gAMA(png_ptr, info_ptr, &dGamma))
- png_set_gamma(png_ptr, (double) 2.2, dGamma);
-
- // after the transformations have been registered update info_ptr data
-
- png_read_update_info(png_ptr, info_ptr);
-
- // get again width, height and the new bit-depth and color-type
-
- png_get_IHDR(png_ptr, info_ptr, piWidth, piHeight, &iBitDepth,
- &iColorType, NULL, NULL, NULL);
-
-
- // row_bytes is the width x number of channels
-
- ulRowBytes = png_get_rowbytes(png_ptr, info_ptr);
- ulChannels = png_get_channels(png_ptr, info_ptr);
-
- *piChannels = ulChannels;
-
- // now we can allocate memory to store the image
-
- if (pbImageData)
- {
- free (pbImageData);
- pbImageData = NULL;
- }
- if ((pbImageData = (png_byte *) malloc(ulRowBytes * (*piHeight)
- * sizeof(png_byte))) == NULL)
- {
- png_error(png_ptr, "Visual PNG: out of memory");
- }
- *ppbImageData = pbImageData;
-
- // and allocate memory for an array of row-pointers
-
- if ((ppbRowPointers = (png_bytepp) malloc((*piHeight)
- * sizeof(png_bytep))) == NULL)
- {
- png_error(png_ptr, "Visual PNG: out of memory");
- }
-
- // set the individual row-pointers to point at the correct offsets
-
- for (i = 0; i < (*piHeight); i++)
- ppbRowPointers[i] = pbImageData + i * ulRowBytes;
-
- // now we can go ahead and just read the whole image
-
- png_read_image(png_ptr, ppbRowPointers);
-
- // read the additional chunks in the PNG file (not really needed)
-
- png_read_end(png_ptr, NULL);
-
- // and we're done
-
- free (ppbRowPointers);
- ppbRowPointers = NULL;
-
- // yepp, done
- }
-
- Catch (msg)
- {
- png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
-
- *ppbImageData = pbImageData = NULL;
-
- if(ppbRowPointers)
- free (ppbRowPointers);
-
- fclose(pfFile);
-
- return FALSE;
- }
-
- fclose (pfFile);
-
- return TRUE;
-}
-
-
-BOOL PngSaveImage (PTSTR pstrFileName, png_byte *pDiData,
- int iWidth, int iHeight, png_color bkgColor)
-{
- const int ciBitDepth = 8;
- const int ciChannels = 3;
-
- static FILE *pfFile;
- png_uint_32 ulRowBytes;
- static png_byte **ppbRowPointers = NULL;
- int i;
-
- // open the PNG output file
-
- if (!pstrFileName)
- return FALSE;
-
- if (!(pfFile = fopen(pstrFileName, "wb")))
- return FALSE;
-
- // prepare the standard PNG structures
-
- png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL,
- (png_error_ptr)png_cexcept_error, (png_error_ptr)NULL);
- if (!png_ptr)
- {
- fclose(pfFile);
- return FALSE;
- }
-
- info_ptr = png_create_info_struct(png_ptr);
- if (!info_ptr) {
- fclose(pfFile);
- png_destroy_write_struct(&png_ptr, (png_infopp) NULL);
- return FALSE;
- }
-
- Try
- {
- // initialize the png structure
-
-#if !defined(PNG_NO_STDIO)
- png_init_io(png_ptr, pfFile);
-#else
- png_set_write_fn(png_ptr, (png_voidp)pfFile, png_write_data, png_flush);
-#endif
-
- // we're going to write a very simple 3x8 bit RGB image
-
- png_set_IHDR(png_ptr, info_ptr, iWidth, iHeight, ciBitDepth,
- PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE,
- PNG_FILTER_TYPE_BASE);
-
- // write the file header information
-
- png_write_info(png_ptr, info_ptr);
-
- // swap the BGR pixels in the DiData structure to RGB
-
- png_set_bgr(png_ptr);
-
- // row_bytes is the width x number of channels
-
- ulRowBytes = iWidth * ciChannels;
-
- // we can allocate memory for an array of row-pointers
-
- if ((ppbRowPointers = (png_bytepp) malloc(iHeight * sizeof(png_bytep))) == NULL)
- Throw "Visualpng: Out of memory";
-
- // set the individual row-pointers to point at the correct offsets
-
- for (i = 0; i < iHeight; i++)
- ppbRowPointers[i] = pDiData + i * (((ulRowBytes + 3) >> 2) << 2);
-
- // write out the entire image data in one call
-
- png_write_image (png_ptr, ppbRowPointers);
-
- // write the additional chunks to the PNG file (not really needed)
-
- png_write_end(png_ptr, info_ptr);
-
- // and we're done
-
- free (ppbRowPointers);
- ppbRowPointers = NULL;
-
- // clean up after the write, and free any memory allocated
-
- png_destroy_write_struct(&png_ptr, (png_infopp) NULL);
-
- // yepp, done
- }
-
- Catch (msg)
- {
- png_destroy_write_struct(&png_ptr, (png_infopp) NULL);
-
- if(ppbRowPointers)
- free (ppbRowPointers);
-
- fclose(pfFile);
-
- return FALSE;
- }
-
- fclose (pfFile);
-
- return TRUE;
-}
-
-#ifdef PNG_NO_STDIO
-
-static void
-png_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
-{
- png_size_t check;
-
- /* fread() returns 0 on error, so it is OK to store this in a png_size_t
- * instead of an int, which is what fread() actually returns.
- */
- check = (png_size_t)fread(data, (png_size_t)1, length,
- (FILE *)png_ptr->io_ptr);
-
- if (check != length)
- {
- png_error(png_ptr, "Read Error");
- }
-}
-
-static void
-png_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
-{
- png_uint_32 check;
-
- check = fwrite(data, 1, length, (FILE *)(png_ptr->io_ptr));
- if (check != length)
- {
- png_error(png_ptr, "Write Error");
- }
-}
-
-static void
-png_flush(png_structp png_ptr)
-{
- FILE *io_ptr;
- io_ptr = (FILE *)CVT_PTR((png_ptr->io_ptr));
- if (io_ptr != NULL)
- fflush(io_ptr);
-}
-
-#endif
-
-//-----------------
-// end of source
-//-----------------
diff --git a/contrib/visupng/PngFile.h b/contrib/visupng/PngFile.h
deleted file mode 100644
index a900fd4..0000000
--- a/contrib/visupng/PngFile.h
+++ /dev/null
@@ -1,27 +0,0 @@
-//------------------------------------------
-// PNGFILE.H -- Header File for pngfile.c
-//------------------------------------------
-
-// Copyright 2000, Willem van Schaik. For conditions of distribution and
-// use, see the copyright/license/disclaimer notice in png.h
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <windows.h>
-
-void PngFileInitialize (HWND hwnd) ;
-BOOL PngFileOpenDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName) ;
-BOOL PngFileSaveDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName) ;
-
-BOOL PngLoadImage (PTSTR pstrFileName, png_byte **ppbImageData,
- int *piWidth, int *piHeight, int *piChannels, png_color *pBkgColor);
-BOOL PngSaveImage (PTSTR pstrFileName, png_byte *pDiData,
- int iWidth, int iHeight, png_color BkgColor);
-
-#if defined(PNG_NO_STDIO)
-static void png_read_data(png_structp png_ptr, png_bytep data, png_size_t length);
-static void png_write_data(png_structp png_ptr, png_bytep data, png_size_t length);
-static void png_flush(png_structp png_ptr);
-#endif
-
diff --git a/contrib/visupng/README.txt b/contrib/visupng/README.txt
deleted file mode 100644
index 4a753d8..0000000
--- a/contrib/visupng/README.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-Microsoft Developer Studio Build File, Format Version 6.00 for VisualPng
-------------------------------------------------------------------------
-
-Copyright 2000, Willem van Schaik. For conditions of distribution and
-use, see the copyright/license/disclaimer notice in png.h
-
-As a PNG .dll demo VisualPng is finished. More features would only hinder
-the program's objective. However, further extensions (like support for other
-graphics formats) are in development. To get these, or for pre-compiled
-binaries, go to "http://www.schaik.com/png/visualpng.html".
-
-------------------------------------------------------------------------
-
-Assumes that
-
- libpng DLLs and LIBs are in ..\..\projects\msvc\win32\libpng
- zlib DLLs and LIBs are in ..\..\projects\msvc\win32\zlib
- libpng header files are in ..\..\..\libpng
- zlib header files are in ..\..\..\zlib
- the pngsuite images are in ..\pngsuite
-
-To build:
-
-1) On the main menu Select "Build|Set Active configuration".
- Choose the configuration that corresponds to the library you want to test.
- This library must have been built using the libpng MS project located in
- the "..\..\mscv" subdirectory.
-
-2) Select "Build|Clean"
-
-3) Select "Build|Rebuild All"
-
-4) After compiling and linking VisualPng will be started to view an image
- from the PngSuite directory. Press Ctrl-N (and Ctrl-V) for other images.
-
-
-To install:
-
-When distributing VisualPng (or a further development) the following options
-are available:
-
-1) Build the program with the configuration "Win32 LIB" and you only need to
- include the executable from the ./lib directory in your distribution.
-
-2) Build the program with the configuration "Win32 DLL" and you need to put
- in your distribution the executable from the ./dll directory and the dll's
- libpng1.dll, zlib.dll and msvcrt.dll. These need to be in the user's PATH.
-
-
-Willem van Schaik
-Calgary, June 6th 2000
-
-P.S. VisualPng was written based on preliminary work of:
-
- - Simon-Pierre Cadieux
- - Glenn Randers-Pehrson
- - Greg Roelofs
-
diff --git a/contrib/visupng/VisualPng.c b/contrib/visupng/VisualPng.c
deleted file mode 100644
index f2cf6ee..0000000
--- a/contrib/visupng/VisualPng.c
+++ /dev/null
@@ -1,961 +0,0 @@
-//------------------------------------
-// VisualPng.C -- Shows a PNG image
-//------------------------------------
-
-// Copyright 2000, Willem van Schaik. For conditions of distribution and
-// use, see the copyright/license/disclaimer notice in png.h
-
-// switches
-
-// defines
-
-#define PROGNAME "VisualPng"
-#define LONGNAME "Win32 Viewer for PNG-files"
-#define VERSION "1.0 of 2000 June 07"
-
-// constants
-
-#define MARGIN 8
-
-// standard includes
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <windows.h>
-
-// application includes
-
-#include "png.h"
-#include "pngfile.h"
-#include "resource.h"
-
-// macros
-
-// function prototypes
-
-LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
-BOOL CALLBACK AboutDlgProc (HWND, UINT, WPARAM, LPARAM) ;
-
-BOOL CenterAbout (HWND hwndChild, HWND hwndParent);
-
-BOOL BuildPngList (PTSTR pstrPathName, TCHAR **ppFileList, int *pFileCount,
- int *pFileIndex);
-
-BOOL SearchPngList (TCHAR *pFileList, int FileCount, int *pFileIndex,
- PTSTR pstrPrevName, PTSTR pstrNextName);
-
-BOOL LoadImageFile(HWND hwnd, PTSTR pstrPathName,
- png_byte **ppbImage, int *pxImgSize, int *pyImgSize, int *piChannels,
- png_color *pBkgColor);
-
-BOOL DisplayImage (HWND hwnd, BYTE **ppDib,
- BYTE **ppDiData, int cxWinSize, int cyWinSize,
- BYTE *pbImage, int cxImgSize, int cyImgSize, int cImgChannels,
- BOOL bStretched);
-
-BOOL InitBitmap (
- BYTE *pDiData, int cxWinSize, int cyWinSize);
-
-BOOL FillBitmap (
- BYTE *pDiData, int cxWinSize, int cyWinSize,
- BYTE *pbImage, int cxImgSize, int cyImgSize, int cImgChannels,
- BOOL bStretched);
-
-// a few global variables
-
-static char *szProgName = PROGNAME;
-static char *szAppName = LONGNAME;
-static char *szIconName = PROGNAME;
-static char szCmdFileName [MAX_PATH];
-
-// MAIN routine
-
-int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
- PSTR szCmdLine, int iCmdShow)
-{
- HACCEL hAccel;
- HWND hwnd;
- MSG msg;
- WNDCLASS wndclass;
- int ixBorders, iyBorders;
-
- wndclass.style = CS_HREDRAW | CS_VREDRAW;
- wndclass.lpfnWndProc = WndProc;
- wndclass.cbClsExtra = 0;
- wndclass.cbWndExtra = 0;
- wndclass.hInstance = hInstance;
- wndclass.hIcon = LoadIcon (hInstance, szIconName) ;
- wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
- wndclass.hbrBackground = NULL; // (HBRUSH) GetStockObject (GRAY_BRUSH);
- wndclass.lpszMenuName = szProgName;
- wndclass.lpszClassName = szProgName;
-
- if (!RegisterClass (&wndclass))
- {
- MessageBox (NULL, TEXT ("Error: this program requires Windows NT!"),
- szProgName, MB_ICONERROR);
- return 0;
- }
-
- // if filename given on commandline, store it
- if ((szCmdLine != NULL) && (*szCmdLine != '\0'))
- if (szCmdLine[0] == '"')
- strncpy (szCmdFileName, szCmdLine + 1, strlen(szCmdLine) - 2);
- else
- strcpy (szCmdFileName, szCmdLine);
- else
- strcpy (szCmdFileName, "");
-
- // calculate size of window-borders
- ixBorders = 2 * (GetSystemMetrics (SM_CXBORDER) +
- GetSystemMetrics (SM_CXDLGFRAME));
- iyBorders = 2 * (GetSystemMetrics (SM_CYBORDER) +
- GetSystemMetrics (SM_CYDLGFRAME)) +
- GetSystemMetrics (SM_CYCAPTION) +
- GetSystemMetrics (SM_CYMENUSIZE) +
- 1; /* WvS: don't ask me why? */
-
- hwnd = CreateWindow (szProgName, szAppName,
- WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT, CW_USEDEFAULT,
- 512 + 2 * MARGIN + ixBorders, 384 + 2 * MARGIN + iyBorders,
-// CW_USEDEFAULT, CW_USEDEFAULT,
- NULL, NULL, hInstance, NULL);
-
- ShowWindow (hwnd, iCmdShow);
- UpdateWindow (hwnd);
-
- hAccel = LoadAccelerators (hInstance, szProgName);
-
- while (GetMessage (&msg, NULL, 0, 0))
- {
- if (!TranslateAccelerator (hwnd, hAccel, &msg))
- {
- TranslateMessage (&msg);
- DispatchMessage (&msg);
- }
- }
- return msg.wParam;
-}
-
-LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam,
- LPARAM lParam)
-{
- static HINSTANCE hInstance ;
- static HDC hdc;
- static PAINTSTRUCT ps;
- static HMENU hMenu;
-
- static BITMAPFILEHEADER *pbmfh;
- static BITMAPINFOHEADER *pbmih;
- static BYTE *pbImage;
- static int cxWinSize, cyWinSize;
- static int cxImgSize, cyImgSize;
- static int cImgChannels;
- static png_color bkgColor = {127, 127, 127};
-
- static BOOL bStretched = TRUE;
-
- static BYTE *pDib = NULL;
- static BYTE *pDiData = NULL;
-
- static TCHAR szImgPathName [MAX_PATH];
- static TCHAR szTitleName [MAX_PATH];
-
- static TCHAR *pPngFileList = NULL;
- static int iPngFileCount;
- static int iPngFileIndex;
-
- BOOL bOk;
-
- switch (message)
- {
- case WM_CREATE:
- hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
- PngFileInitialize (hwnd);
-
- strcpy (szImgPathName, "");
-
- // in case we process file given on command-line
-
- if (szCmdFileName[0] != '\0')
- {
- strcpy (szImgPathName, szCmdFileName);
-
- // read the other png-files in the directory for later
- // next/previous commands
-
- BuildPngList (szImgPathName, &pPngFileList, &iPngFileCount,
- &iPngFileIndex);
-
- // load the image from file
-
- if (!LoadImageFile (hwnd, szImgPathName,
- &pbImage, &cxImgSize, &cyImgSize, &cImgChannels, &bkgColor))
- return 0;
-
- // invalidate the client area for later update
-
- InvalidateRect (hwnd, NULL, TRUE);
-
- // display the PNG into the DIBitmap
-
- DisplayImage (hwnd, &pDib, &pDiData, cxWinSize, cyWinSize,
- pbImage, cxImgSize, cyImgSize, cImgChannels, bStretched);
- }
-
- return 0;
-
- case WM_SIZE:
- cxWinSize = LOWORD (lParam);
- cyWinSize = HIWORD (lParam);
-
- // invalidate the client area for later update
-
- InvalidateRect (hwnd, NULL, TRUE);
-
- // display the PNG into the DIBitmap
-
- DisplayImage (hwnd, &pDib, &pDiData, cxWinSize, cyWinSize,
- pbImage, cxImgSize, cyImgSize, cImgChannels, bStretched);
-
- return 0;
-
- case WM_INITMENUPOPUP:
- hMenu = GetMenu (hwnd);
-
- if (pbImage)
- EnableMenuItem (hMenu, IDM_FILE_SAVE, MF_ENABLED);
- else
- EnableMenuItem (hMenu, IDM_FILE_SAVE, MF_GRAYED);
-
- return 0;
-
- case WM_COMMAND:
- hMenu = GetMenu (hwnd);
-
- switch (LOWORD (wParam))
- {
- case IDM_FILE_OPEN:
-
- // show the File Open dialog box
-
- if (!PngFileOpenDlg (hwnd, szImgPathName, szTitleName))
- return 0;
-
- // read the other png-files in the directory for later
- // next/previous commands
-
- BuildPngList (szImgPathName, &pPngFileList, &iPngFileCount,
- &iPngFileIndex);
-
- // load the image from file
-
- if (!LoadImageFile (hwnd, szImgPathName,
- &pbImage, &cxImgSize, &cyImgSize, &cImgChannels, &bkgColor))
- return 0;
-
- // invalidate the client area for later update
-
- InvalidateRect (hwnd, NULL, TRUE);
-
- // display the PNG into the DIBitmap
-
- DisplayImage (hwnd, &pDib, &pDiData, cxWinSize, cyWinSize,
- pbImage, cxImgSize, cyImgSize, cImgChannels, bStretched);
-
- return 0;
-
- case IDM_FILE_SAVE:
-
- // show the File Save dialog box
-
- if (!PngFileSaveDlg (hwnd, szImgPathName, szTitleName))
- return 0;
-
- // save the PNG to a disk file
-
- SetCursor (LoadCursor (NULL, IDC_WAIT));
- ShowCursor (TRUE);
-
- bOk = PngSaveImage (szImgPathName, pDiData, cxWinSize, cyWinSize,
- bkgColor);
-
- ShowCursor (FALSE);
- SetCursor (LoadCursor (NULL, IDC_ARROW));
-
- if (!bOk)
- MessageBox (hwnd, TEXT ("Error in saving the PNG image"),
- szProgName, MB_ICONEXCLAMATION | MB_OK);
- return 0;
-
- case IDM_FILE_NEXT:
-
- // read next entry in the directory
-
- if (SearchPngList (pPngFileList, iPngFileCount, &iPngFileIndex,
- NULL, szImgPathName))
- {
- if (strcmp (szImgPathName, "") == 0)
- return 0;
-
- // load the image from file
-
- if (!LoadImageFile (hwnd, szImgPathName, &pbImage,
- &cxImgSize, &cyImgSize, &cImgChannels, &bkgColor))
- return 0;
-
- // invalidate the client area for later update
-
- InvalidateRect (hwnd, NULL, TRUE);
-
- // display the PNG into the DIBitmap
-
- DisplayImage (hwnd, &pDib, &pDiData, cxWinSize, cyWinSize,
- pbImage, cxImgSize, cyImgSize, cImgChannels, bStretched);
- }
-
- return 0;
-
- case IDM_FILE_PREVIOUS:
-
- // read previous entry in the directory
-
- if (SearchPngList (pPngFileList, iPngFileCount, &iPngFileIndex,
- szImgPathName, NULL))
- {
-
- if (strcmp (szImgPathName, "") == 0)
- return 0;
-
- // load the image from file
-
- if (!LoadImageFile (hwnd, szImgPathName, &pbImage, &cxImgSize,
- &cyImgSize, &cImgChannels, &bkgColor))
- return 0;
-
- // invalidate the client area for later update
-
- InvalidateRect (hwnd, NULL, TRUE);
-
- // display the PNG into the DIBitmap
-
- DisplayImage (hwnd, &pDib, &pDiData, cxWinSize, cyWinSize,
- pbImage, cxImgSize, cyImgSize, cImgChannels, bStretched);
- }
-
- return 0;
-
- case IDM_FILE_EXIT:
-
- // more cleanup needed...
-
- // free image buffer
-
- if (pDib != NULL)
- {
- free (pDib);
- pDib = NULL;
- }
-
- // free file-list
-
- if (pPngFileList != NULL)
- {
- free (pPngFileList);
- pPngFileList = NULL;
- }
-
- // let's go ...
-
- exit (0);
-
- return 0;
-
- case IDM_OPTIONS_STRETCH:
- bStretched = !bStretched;
- if (bStretched)
- CheckMenuItem (hMenu, IDM_OPTIONS_STRETCH, MF_CHECKED);
- else
- CheckMenuItem (hMenu, IDM_OPTIONS_STRETCH, MF_UNCHECKED);
-
- // invalidate the client area for later update
-
- InvalidateRect (hwnd, NULL, TRUE);
-
- // display the PNG into the DIBitmap
-
- DisplayImage (hwnd, &pDib, &pDiData, cxWinSize, cyWinSize,
- pbImage, cxImgSize, cyImgSize, cImgChannels, bStretched);
-
- return 0;
-
- case IDM_HELP_ABOUT:
- DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc) ;
- return 0;
-
- } // end switch
-
- break;
-
- case WM_PAINT:
- hdc = BeginPaint (hwnd, &ps);
-
- if (pDib)
- SetDIBitsToDevice (hdc, 0, 0, cxWinSize, cyWinSize, 0, 0,
- 0, cyWinSize, pDiData, (BITMAPINFO *) pDib, DIB_RGB_COLORS);
-
- EndPaint (hwnd, &ps);
- return 0;
-
- case WM_DESTROY:
- if (pbmfh)
- {
- free (pbmfh);
- pbmfh = NULL;
- }
-
- PostQuitMessage (0);
- return 0;
- }
-
- return DefWindowProc (hwnd, message, wParam, lParam);
-}
-
-BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,
- WPARAM wParam, LPARAM lParam)
-{
- switch (message)
- {
- case WM_INITDIALOG :
- ShowWindow (hDlg, SW_HIDE);
- CenterAbout (hDlg, GetWindow (hDlg, GW_OWNER));
- ShowWindow (hDlg, SW_SHOW);
- return TRUE ;
-
- case WM_COMMAND :
- switch (LOWORD (wParam))
- {
- case IDOK :
- case IDCANCEL :
- EndDialog (hDlg, 0) ;
- return TRUE ;
- }
- break ;
- }
- return FALSE ;
-}
-
-//---------------
-// CenterAbout
-//---------------
-
-BOOL CenterAbout (HWND hwndChild, HWND hwndParent)
-{
- RECT rChild, rParent, rWorkArea;
- int wChild, hChild, wParent, hParent;
- int xNew, yNew;
- BOOL bResult;
-
- // Get the Height and Width of the child window
- GetWindowRect (hwndChild, &rChild);
- wChild = rChild.right - rChild.left;
- hChild = rChild.bottom - rChild.top;
-
- // Get the Height and Width of the parent window
- GetWindowRect (hwndParent, &rParent);
- wParent = rParent.right - rParent.left;
- hParent = rParent.bottom - rParent.top;
-
- // Get the limits of the 'workarea'
- bResult = SystemParametersInfo(
- SPI_GETWORKAREA, // system parameter to query or set
- sizeof(RECT),
- &rWorkArea,
- 0);
- if (!bResult) {
- rWorkArea.left = rWorkArea.top = 0;
- rWorkArea.right = GetSystemMetrics(SM_CXSCREEN);
- rWorkArea.bottom = GetSystemMetrics(SM_CYSCREEN);
- }
-
- // Calculate new X position, then adjust for workarea
- xNew = rParent.left + ((wParent - wChild) /2);
- if (xNew < rWorkArea.left) {
- xNew = rWorkArea.left;
- } else if ((xNew+wChild) > rWorkArea.right) {
- xNew = rWorkArea.right - wChild;
- }
-
- // Calculate new Y position, then adjust for workarea
- yNew = rParent.top + ((hParent - hChild) /2);
- if (yNew < rWorkArea.top) {
- yNew = rWorkArea.top;
- } else if ((yNew+hChild) > rWorkArea.bottom) {
- yNew = rWorkArea.bottom - hChild;
- }
-
- // Set it, and return
- return SetWindowPos (hwndChild, NULL, xNew, yNew, 0, 0, SWP_NOSIZE |
- SWP_NOZORDER);
-}
-
-//----------------
-// BuildPngList
-//----------------
-
-BOOL BuildPngList (PTSTR pstrPathName, TCHAR **ppFileList, int *pFileCount,
- int *pFileIndex)
-{
- static TCHAR szImgPathName [MAX_PATH];
- static TCHAR szImgFileName [MAX_PATH];
- static TCHAR szImgFindName [MAX_PATH];
-
- WIN32_FIND_DATA finddata;
- HANDLE hFind;
-
- static TCHAR szTmp [MAX_PATH];
- BOOL bOk;
- int i, ii;
- int j, jj;
-
- // free previous file-list
-
- if (*ppFileList != NULL)
- {
- free (*ppFileList);
- *ppFileList = NULL;
- }
-
- // extract foldername, filename and search-name
-
- strcpy (szImgPathName, pstrPathName);
- strcpy (szImgFileName, strrchr (pstrPathName, '\\') + 1);
-
- strcpy (szImgFindName, szImgPathName);
- *(strrchr (szImgFindName, '\\') + 1) = '\0';
- strcat (szImgFindName, "*.png");
-
- // first cycle: count number of files in directory for memory allocation
-
- *pFileCount = 0;
-
- hFind = FindFirstFile(szImgFindName, &finddata);
- bOk = (hFind != (HANDLE) -1);
-
- while (bOk)
- {
- *pFileCount += 1;
- bOk = FindNextFile(hFind, &finddata);
- }
- FindClose(hFind);
-
- // allocation memory for file-list
-
- *ppFileList = (TCHAR *) malloc (*pFileCount * MAX_PATH);
-
- // second cycle: read directory and store filenames in file-list
-
- hFind = FindFirstFile(szImgFindName, &finddata);
- bOk = (hFind != (HANDLE) -1);
-
- i = 0;
- ii = 0;
- while (bOk)
- {
- strcpy (*ppFileList + ii, szImgPathName);
- strcpy (strrchr(*ppFileList + ii, '\\') + 1, finddata.cFileName);
-
- if (strcmp(pstrPathName, *ppFileList + ii) == 0)
- *pFileIndex = i;
-
- ii += MAX_PATH;
- i++;
-
- bOk = FindNextFile(hFind, &finddata);
- }
- FindClose(hFind);
-
- // finally we must sort the file-list
-
- for (i = 0; i < *pFileCount - 1; i++)
- {
- ii = i * MAX_PATH;
- for (j = i+1; j < *pFileCount; j++)
- {
- jj = j * MAX_PATH;
- if (strcmp (*ppFileList + ii, *ppFileList + jj) > 0)
- {
- strcpy (szTmp, *ppFileList + jj);
- strcpy (*ppFileList + jj, *ppFileList + ii);
- strcpy (*ppFileList + ii, szTmp);
-
- // check if this was the current image that we moved
-
- if (*pFileIndex == i)
- *pFileIndex = j;
- else
- if (*pFileIndex == j)
- *pFileIndex = i;
- }
- }
- }
-
- return TRUE;
-}
-
-//----------------
-// SearchPngList
-//----------------
-
-BOOL SearchPngList (
- TCHAR *pFileList, int FileCount, int *pFileIndex,
- PTSTR pstrPrevName, PTSTR pstrNextName)
-{
- if (FileCount > 0)
- {
- // get previous entry
-
- if (pstrPrevName != NULL)
- {
- if (*pFileIndex > 0)
- *pFileIndex -= 1;
- else
- *pFileIndex = FileCount - 1;
-
- strcpy (pstrPrevName, pFileList + (*pFileIndex * MAX_PATH));
- }
-
- // get next entry
-
- if (pstrNextName != NULL)
- {
- if (*pFileIndex < FileCount - 1)
- *pFileIndex += 1;
- else
- *pFileIndex = 0;
-
- strcpy (pstrNextName, pFileList + (*pFileIndex * MAX_PATH));
- }
-
- return TRUE;
- }
- else
- {
- return FALSE;
- }
-}
-
-//-----------------
-// LoadImageFile
-//-----------------
-
-BOOL LoadImageFile (HWND hwnd, PTSTR pstrPathName,
- png_byte **ppbImage, int *pxImgSize, int *pyImgSize,
- int *piChannels, png_color *pBkgColor)
-{
- static TCHAR szTmp [MAX_PATH];
-
- // if there's an existing PNG, free the memory
-
- if (*ppbImage)
- {
- free (*ppbImage);
- *ppbImage = NULL;
- }
-
- // Load the entire PNG into memory
-
- SetCursor (LoadCursor (NULL, IDC_WAIT));
- ShowCursor (TRUE);
-
- PngLoadImage (pstrPathName, ppbImage, pxImgSize, pyImgSize, piChannels,
- pBkgColor);
-
- ShowCursor (FALSE);
- SetCursor (LoadCursor (NULL, IDC_ARROW));
-
- if (*ppbImage != NULL)
- {
- sprintf (szTmp, "VisualPng - %s", strrchr(pstrPathName, '\\') + 1);
- SetWindowText (hwnd, szTmp);
- }
- else
- {
- MessageBox (hwnd, TEXT ("Error in loading the PNG image"),
- szProgName, MB_ICONEXCLAMATION | MB_OK);
- return FALSE;
- }
-
- return TRUE;
-}
-
-//----------------
-// DisplayImage
-//----------------
-
-BOOL DisplayImage (HWND hwnd, BYTE **ppDib,
- BYTE **ppDiData, int cxWinSize, int cyWinSize,
- BYTE *pbImage, int cxImgSize, int cyImgSize, int cImgChannels,
- BOOL bStretched)
-{
- BYTE *pDib = *ppDib;
- BYTE *pDiData = *ppDiData;
- // BITMAPFILEHEADER *pbmfh;
- BITMAPINFOHEADER *pbmih;
- WORD wDIRowBytes;
- png_color bkgBlack = {0, 0, 0};
- png_color bkgGray = {127, 127, 127};
- png_color bkgWhite = {255, 255, 255};
-
- // allocate memory for the Device Independant bitmap
-
- wDIRowBytes = (WORD) ((3 * cxWinSize + 3L) >> 2) << 2;
-
- if (pDib)
- {
- free (pDib);
- pDib = NULL;
- }
-
- if (!(pDib = (BYTE *) malloc (sizeof(BITMAPINFOHEADER) +
- wDIRowBytes * cyWinSize)))
- {
- MessageBox (hwnd, TEXT ("Error in displaying the PNG image"),
- szProgName, MB_ICONEXCLAMATION | MB_OK);
- *ppDib = pDib = NULL;
- return FALSE;
- }
- *ppDib = pDib;
- memset (pDib, 0, sizeof(BITMAPINFOHEADER));
-
- // initialize the dib-structure
-
- pbmih = (BITMAPINFOHEADER *) pDib;
- pbmih->biSize = sizeof(BITMAPINFOHEADER);
- pbmih->biWidth = cxWinSize;
- pbmih->biHeight = -((long) cyWinSize);
- pbmih->biPlanes = 1;
- pbmih->biBitCount = 24;
- pbmih->biCompression = 0;
- pDiData = pDib + sizeof(BITMAPINFOHEADER);
- *ppDiData = pDiData;
-
- // first fill bitmap with gray and image border
-
- InitBitmap (pDiData, cxWinSize, cyWinSize);
-
- // then fill bitmap with image
-
- if (pbImage)
- {
- FillBitmap (
- pDiData, cxWinSize, cyWinSize,
- pbImage, cxImgSize, cyImgSize, cImgChannels,
- bStretched);
- }
-
- return TRUE;
-}
-
-//--------------
-// InitBitmap
-//--------------
-
-BOOL InitBitmap (BYTE *pDiData, int cxWinSize, int cyWinSize)
-{
- BYTE *dst;
- int x, y, col;
-
- // initialize the background with gray
-
- dst = pDiData;
- for (y = 0; y < cyWinSize; y++)
- {
- col = 0;
- for (x = 0; x < cxWinSize; x++)
- {
- // fill with GRAY
- *dst++ = 127;
- *dst++ = 127;
- *dst++ = 127;
- col += 3;
- }
- // rows start on 4 byte boundaries
- while ((col % 4) != 0)
- {
- dst++;
- col++;
- }
- }
-
- return TRUE;
-}
-
-//--------------
-// FillBitmap
-//--------------
-
-BOOL FillBitmap (
- BYTE *pDiData, int cxWinSize, int cyWinSize,
- BYTE *pbImage, int cxImgSize, int cyImgSize, int cImgChannels,
- BOOL bStretched)
-{
- BYTE *pStretchedImage;
- BYTE *pImg;
- BYTE *src, *dst;
- BYTE r, g, b, a;
- const int cDIChannels = 3;
- WORD wImgRowBytes;
- WORD wDIRowBytes;
- int cxNewSize, cyNewSize;
- int cxImgPos, cyImgPos;
- int xImg, yImg;
- int xWin, yWin;
- int xOld, yOld;
- int xNew, yNew;
-
- if (bStretched)
- {
- cxNewSize = cxWinSize - 2 * MARGIN;
- cyNewSize = cyWinSize - 2 * MARGIN;
-
- // stretch the image to it's window determined size
-
- // the following two are the same, but the first has side-effects
- // because of rounding
-// if ((cyNewSize / cxNewSize) > (cyImgSize / cxImgSize))
- if ((cyNewSize * cxImgSize) > (cyImgSize * cxNewSize))
- {
- cyNewSize = cxNewSize * cyImgSize / cxImgSize;
- cxImgPos = MARGIN;
- cyImgPos = (cyWinSize - cyNewSize) / 2;
- }
- else
- {
- cxNewSize = cyNewSize * cxImgSize / cyImgSize;
- cyImgPos = MARGIN;
- cxImgPos = (cxWinSize - cxNewSize) / 2;
- }
-
- pStretchedImage = malloc (cImgChannels * cxNewSize * cyNewSize);
- pImg = pStretchedImage;
-
- for (yNew = 0; yNew < cyNewSize; yNew++)
- {
- yOld = yNew * cyImgSize / cyNewSize;
- for (xNew = 0; xNew < cxNewSize; xNew++)
- {
- xOld = xNew * cxImgSize / cxNewSize;
-
- r = *(pbImage + cImgChannels * ((yOld * cxImgSize) + xOld) + 0);
- g = *(pbImage + cImgChannels * ((yOld * cxImgSize) + xOld) + 1);
- b = *(pbImage + cImgChannels * ((yOld * cxImgSize) + xOld) + 2);
- *pImg++ = r;
- *pImg++ = g;
- *pImg++ = b;
- if (cImgChannels == 4)
- {
- a = *(pbImage + cImgChannels * ((yOld * cxImgSize) + xOld)
- + 3);
- *pImg++ = a;
- }
- }
- }
-
- // calculate row-bytes
-
- wImgRowBytes = cImgChannels * cxNewSize;
- wDIRowBytes = (WORD) ((cDIChannels * cxWinSize + 3L) >> 2) << 2;
-
- // copy image to screen
-
- for (yImg = 0, yWin = cyImgPos; yImg < cyNewSize; yImg++, yWin++)
- {
- if (yWin >= cyWinSize - cyImgPos)
- break;
- src = pStretchedImage + yImg * wImgRowBytes;
- dst = pDiData + yWin * wDIRowBytes + cxImgPos * cDIChannels;
-
- for (xImg = 0, xWin = cxImgPos; xImg < cxNewSize; xImg++, xWin++)
- {
- if (xWin >= cxWinSize - cxImgPos)
- break;
- r = *src++;
- g = *src++;
- b = *src++;
- *dst++ = b; /* note the reverse order */
- *dst++ = g;
- *dst++ = r;
- if (cImgChannels == 4)
- {
- a = *src++;
- }
- }
- }
-
- // free memory
-
- if (pStretchedImage != NULL)
- {
- free (pStretchedImage);
- pStretchedImage = NULL;
- }
-
- }
-
- // process the image not-stretched
-
- else
- {
- // calculate the central position
-
- cxImgPos = (cxWinSize - cxImgSize) / 2;
- cyImgPos = (cyWinSize - cyImgSize) / 2;
-
- // check for image larger than window
-
- if (cxImgPos < MARGIN)
- cxImgPos = MARGIN;
- if (cyImgPos < MARGIN)
- cyImgPos = MARGIN;
-
- // calculate both row-bytes
-
- wImgRowBytes = cImgChannels * cxImgSize;
- wDIRowBytes = (WORD) ((cDIChannels * cxWinSize + 3L) >> 2) << 2;
-
- // copy image to screen
-
- for (yImg = 0, yWin = cyImgPos; yImg < cyImgSize; yImg++, yWin++)
- {
- if (yWin >= cyWinSize - MARGIN)
- break;
- src = pbImage + yImg * wImgRowBytes;
- dst = pDiData + yWin * wDIRowBytes + cxImgPos * cDIChannels;
-
- for (xImg = 0, xWin = cxImgPos; xImg < cxImgSize; xImg++, xWin++)
- {
- if (xWin >= cxWinSize - MARGIN)
- break;
- r = *src++;
- g = *src++;
- b = *src++;
- *dst++ = b; /* note the reverse order */
- *dst++ = g;
- *dst++ = r;
- if (cImgChannels == 4)
- {
- a = *src++;
- }
- }
- }
- }
-
- return TRUE;
-}
-
-//-----------------
-// end of source
-//-----------------
diff --git a/contrib/visupng/VisualPng.dsp b/contrib/visupng/VisualPng.dsp
deleted file mode 100644
index c13c5a7..0000000
--- a/contrib/visupng/VisualPng.dsp
+++ /dev/null
@@ -1,147 +0,0 @@
-# Microsoft Developer Studio Project File - Name="VisualPng" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=VisualPng - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "VisualPng.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "VisualPng.mak" CFG="VisualPng - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "VisualPng - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "VisualPng - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "VisualPng - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /O2 /I "..\.." /I "..\..\..\zlib" /D "WIN32" /D "NDEBUG" /D "PNG_NO_STDIO" /D "PNG_NO_GLOBAL_ARRAYS" /FD /c
-# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MD /W3 /O2 /I "..\.." /I "..\..\..\zlib" /D "WIN32" /D "NDEBUG" /D "PNG_NO_STDIO" /D "PNG_NO_GLOBAL_ARRAYS" /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 ..\..\projects\visualc6\Win32_LIB_Release\libpng.lib ..\..\..\zlib\projects\visualc6\Win32_LIB_Release\zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# Begin Special Build Tool
-OutDir=.\Release
-SOURCE="$(InputPath)"
-PostBuild_Cmds=$(outdir)\VisualPng.exe ..\..\contrib\pngsuite\basn6a16.png
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "VisualPng - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /ZI /Od /I "..\.." /I "..\..\..\zlib" /D "WIN32" /D "_DEBUG" /D "PNG_NO_STDIO" /D "PNG_NO_GLOBAL_ARRAYS" /FD /GZ /c
-# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "..\.." /I "..\..\..\zlib" /D "WIN32" /D "_DEBUG" /D "PNG_NO_STDIO" /D "PNG_NO_GLOBAL_ARRAYS" /FD /GZ /c
-# SUBTRACT CPP /YX
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 ..\..\projects\visualc6\Win32_LIB_Release\libpng.lib ..\..\..\zlib\projects\visualc6\Win32_LIB_Release\zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"msvcrt.lib" /pdbtype:sept
-# Begin Special Build Tool
-OutDir=.\Debug
-SOURCE="$(InputPath)"
-PostBuild_Cmds=$(outdir)\VisualPng.exe ..\..\contrib\pngsuite\basn6a16.png
-# End Special Build Tool
-
-!ENDIF
-
-# Begin Target
-
-# Name "VisualPng - Win32 Release"
-# Name "VisualPng - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\PngFile.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\VisualPng.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\cexcept.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\PngFile.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\resource.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# Begin Source File
-
-SOURCE=.\VisualPng.ico
-# End Source File
-# Begin Source File
-
-SOURCE=.\VisualPng.rc
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/contrib/visupng/VisualPng.dsw b/contrib/visupng/VisualPng.dsw
deleted file mode 100644
index 17ad83a..0000000
--- a/contrib/visupng/VisualPng.dsw
+++ /dev/null
@@ -1,29 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "VisualPng"=.\VisualPng.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/contrib/visupng/VisualPng.ico b/contrib/visupng/VisualPng.ico
deleted file mode 100644
index 68aa371..0000000
--- a/contrib/visupng/VisualPng.ico
+++ /dev/null
Binary files differ
diff --git a/contrib/visupng/VisualPng.png b/contrib/visupng/VisualPng.png
deleted file mode 100644
index c6aa80a..0000000
--- a/contrib/visupng/VisualPng.png
+++ /dev/null
Binary files differ
diff --git a/contrib/visupng/VisualPng.rc b/contrib/visupng/VisualPng.rc
deleted file mode 100644
index 151c68c..0000000
--- a/contrib/visupng/VisualPng.rc
+++ /dev/null
@@ -1,152 +0,0 @@
-//Microsoft Developer Studio generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "afxres.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// English (U.S.) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-#ifdef _WIN32
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page(1252)
-#endif //_WIN32
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE DISCARDABLE
-BEGIN
- "#include ""afxres.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE DISCARDABLE
-BEGIN
- "\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Menu
-//
-
-VISUALPNG MENU DISCARDABLE
-BEGIN
- POPUP "&File"
- BEGIN
- MENUITEM "&Open Image...\tCtrl+O", IDM_FILE_OPEN
- MENUITEM "Save &As...", IDM_FILE_SAVE
- MENUITEM SEPARATOR
- MENUITEM "&Next Image\tCtrl+N", IDM_FILE_NEXT
- MENUITEM "Pre&vious Image\tCtrl+V", IDM_FILE_PREVIOUS
- MENUITEM SEPARATOR
- MENUITEM "E&xit\tAlt+X", IDM_FILE_EXIT
- END
- POPUP "&Options"
- BEGIN
- MENUITEM "&Stretch", IDM_OPTIONS_STRETCH, CHECKED
- END
- POPUP "&Help"
- BEGIN
- MENUITEM "&About", IDM_HELP_ABOUT
- END
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Accelerator
-//
-
-VISUALPNG ACCELERATORS DISCARDABLE
-BEGIN
- "N", IDM_FILE_NEXT, VIRTKEY, CONTROL, NOINVERT
- "O", IDM_FILE_OPEN, VIRTKEY, CONTROL, NOINVERT
- "P", IDM_FILE_PREVIOUS, VIRTKEY, CONTROL, NOINVERT
- "V", IDM_FILE_PREVIOUS, VIRTKEY, CONTROL, NOINVERT
- "X", IDM_FILE_EXIT, VIRTKEY, ALT, NOINVERT
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-VISUALPNG ICON DISCARDABLE "VisualPng.ico"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-ABOUTBOX DIALOG DISCARDABLE 0, 0, 186, 94
-STYLE DS_MODALFRAME | WS_POPUP
-FONT 8, "MS Sans Serif"
-BEGIN
- DEFPUSHBUTTON "OK",IDOK,68,67,50,14
- CTEXT "VisualPng 1.0 - June 2000",IDC_STATIC,49,14,88,8
- LTEXT "a PNG image viewer",IDC_STATIC,60,30,66,8
- LTEXT "(c) Willem van Schaik, 2000",IDC_STATIC,48,52,90,8
- LTEXT "to demonstrate the use of libpng in Visual C",
- IDC_STATIC,25,38,136,8
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO DISCARDABLE
-BEGIN
- "ABOUTBOX", DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 179
- TOPMARGIN, 7
- BOTTOMMARGIN, 87
- END
-END
-#endif // APSTUDIO_INVOKED
-
-#endif // English (U.S.) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
-
diff --git a/contrib/visupng/cexcept.h b/contrib/visupng/cexcept.h
deleted file mode 100644
index dbea51e..0000000
--- a/contrib/visupng/cexcept.h
+++ /dev/null
@@ -1,243 +0,0 @@
-/*===
-cexcept.h 2.0.0 (2001-Jul-12-Thu)
-Adam M. Costello <amc@cs.berkeley.edu>
-
-An interface for exception-handling in ANSI C (C89 and subsequent ISO
-standards), developed jointly with Cosmin Truta <cosmin@cs.toronto.edu>.
-
- Copyright (c) 2001 Adam M. Costello and Cosmin Truta. Everyone
- is hereby granted permission to do whatever they like with this
- file, provided that if they modify it they take reasonable steps to
- avoid confusing or misleading people about the authors, version,
- and terms of use of the derived file. The copyright holders make
- no guarantees regarding this file, and are not responsible for any
- damage resulting from its use.
-
-Only user-defined exceptions are supported, not "real" exceptions like
-division by zero or memory segmentation violations.
-
-If this interface is used by multiple .c files, they shouldn't include
-this header file directly. Instead, create a wrapper header file that
-includes this header file and then invokes the define_exception_type
-macro (see below), and let your .c files include that header file.
-
-The interface consists of one type, one well-known name, and six macros.
-
-
-define_exception_type(type_name);
-
- This macro is used like an external declaration. It specifies
- the type of object that gets copied from the exception thrower to
- the exception catcher. The type_name can be any type that can be
- assigned to, that is, a non-constant arithmetic type, struct, union,
- or pointer. Examples:
-
- define_exception_type(int);
-
- enum exception { out_of_memory, bad_arguments, disk_full };
- define_exception_type(enum exception);
-
- struct exception { int code; const char *msg; };
- define_exception_type(struct exception);
-
- Because throwing an exception causes the object to be copied (not
- just once, but twice), programmers may wish to consider size when
- choosing the exception type.
-
-
-struct exception_context;
-
- This type may be used after the define_exception_type() macro has
- been invoked. A struct exception_context must be known to both
- the thrower and the catcher. It is expected that there be one
- context for each thread that uses exceptions. It would certainly
- be dangerous for multiple threads to access the same context.
- One thread can use multiple contexts, but that is likely to be
- confusing and not typically useful. The application can allocate
- this structure in any way it pleases--automatic, static, or dynamic.
- The application programmer should pretend not to know the structure
- members, which are subject to change.
-
-
-struct exception_context *the_exception_context;
-
- The Try/Catch and Throw statements (described below) implicitly
- refer to a context, using the name the_exception_context. It is
- the application's responsibility to make sure that this name yields
- the address of a mutable (non-constant) struct exception_context
- wherever those statements are used. Subject to that constraint, the
- application may declare a variable of this name anywhere it likes
- (inside a function, in a parameter list, or externally), and may
- use whatever storage class specifiers (static, extern, etc) or type
- qualifiers (const, volatile, etc) it likes. Examples:
-
- static struct exception_context
- * const the_exception_context = &foo;
-
- { struct exception_context *the_exception_context = bar; ... }
-
- int blah(struct exception_context *the_exception_context, ...);
-
- extern struct exception_context the_exception_context[1];
-
- The last example illustrates a trick that avoids creating a pointer
- object separate from the structure object.
-
- The name could even be a macro, for example:
-
- struct exception_context ec_array[numthreads];
- #define the_exception_context (ec_array + thread_id)
-
- Be aware that the_exception_context is used several times by the
- Try/Catch/Throw macros, so it shouldn't be expensive or have side
- effects. The expansion must be a drop-in replacement for an
- identifier, so it's safest to put parentheses around it.
-
-
-void init_exception_context(struct exception_context *ec);
-
- For context structures allocated statically (by an external
- definition or using the "static" keyword), the implicit
- initialization to all zeros is sufficient, but contexts allocated
- by other means must be initialized using this macro before they
- are used by a Try/Catch statement. It does no harm to initialize
- a context more than once (by using this macro on a statically
- allocated context, or using this macro twice on the same context),
- but a context must not be re-initialized after it has been used by a
- Try/Catch statement.
-
-
-Try statement
-Catch (expression) statement
-
- The Try/Catch/Throw macros are capitalized in order to avoid
- confusion with the C++ keywords, which have subtly different
- semantics.
-
- A Try/Catch statement has a syntax similar to an if/else statement,
- except that the parenthesized expression goes after the second
- keyword rather than the first. As with if/else, there are two
- clauses, each of which may be a simple statement ending with a
- semicolon or a brace-enclosed compound statement. But whereas
- the else clause is optional, the Catch clause is required. The
- expression must be a modifiable lvalue (something capable of being
- assigned to) of the same type (disregarding type qualifiers) that
- was passed to define_exception_type().
-
- If a Throw that uses the same exception context as the Try/Catch is
- executed within the Try clause (typically within a function called
- by the Try clause), and the exception is not caught by a nested
- Try/Catch statement, then a copy of the exception will be assigned
- to the expression, and control will jump to the Catch clause. If no
- such Throw is executed, then the assignment is not performed, and
- the Catch clause is not executed.
-
- The expression is not evaluated unless and until the exception is
- caught, which is significant if it has side effects, for example:
-
- Try foo();
- Catch (p[++i].e) { ... }
-
- IMPORTANT: Jumping into or out of a Try clause (for example via
- return, break, continue, goto, longjmp) is forbidden--the compiler
- will not complain, but bad things will happen at run-time. Jumping
- into or out of a Catch clause is okay, and so is jumping around
- inside a Try clause. In many cases where one is tempted to return
- from a Try clause, it will suffice to use Throw, and then return
- from the Catch clause. Another option is to set a flag variable and
- use goto to jump to the end of the Try clause, then check the flag
- after the Try/Catch statement.
-
- IMPORTANT: The values of any non-volatile automatic variables
- changed within the Try clause are undefined after an exception is
- caught. Therefore, variables modified inside the Try block whose
- values are needed later outside the Try block must either use static
- storage or be declared with the "volatile" type qualifier.
-
-
-Throw expression;
-
- A Throw statement is very much like a return statement, except that
- the expression is required. Whereas return jumps back to the place
- where the current function was called, Throw jumps back to the Catch
- clause of the innermost enclosing Try clause. The expression must
- be compatible with the type passed to define_exception_type(). The
- exception must be caught, otherwise the program may crash.
-
- Slight limitation: If the expression is a comma-expression it must
- be enclosed in parentheses.
-
-
-Try statement
-Catch_anonymous statement
-
- When the value of the exception is not needed, a Try/Catch statement
- can use Catch_anonymous instead of Catch (expression).
-
-
-Everything below this point is for the benefit of the compiler. The
-application programmer should pretend not to know any of it, because it
-is subject to change.
-
-===*/
-
-
-#ifndef CEXCEPT_H
-#define CEXCEPT_H
-
-
-#include <setjmp.h>
-
-#define define_exception_type(etype) \
-struct exception_context { \
- jmp_buf *penv; \
- int caught; \
- volatile struct { etype etmp; } v; \
-}
-
-/* etmp must be volatile because the application might use automatic */
-/* storage for the_exception_context, and etmp is modified between */
-/* the calls to setjmp() and longjmp(). A wrapper struct is used to */
-/* avoid warnings about a duplicate volatile qualifier in case etype */
-/* already includes it. */
-
-#define init_exception_context(ec) ((void)((ec)->penv = 0))
-
-#define Try \
- { \
- jmp_buf *exception__prev, exception__env; \
- exception__prev = the_exception_context->penv; \
- the_exception_context->penv = &exception__env; \
- if (setjmp(exception__env) == 0) { \
- if (&exception__prev)
-
-#define exception__catch(action) \
- else { } \
- the_exception_context->caught = 0; \
- } \
- else { \
- the_exception_context->caught = 1; \
- } \
- the_exception_context->penv = exception__prev; \
- } \
- if (!the_exception_context->caught || action) { } \
- else
-
-#define Catch(e) exception__catch(((e) = the_exception_context->v.etmp, 0))
-#define Catch_anonymous exception__catch(0)
-
-/* Try ends with if(), and Catch begins and ends with else. This */
-/* ensures that the Try/Catch syntax is really the same as the */
-/* if/else syntax. */
-/* */
-/* We use &exception__prev instead of 1 to appease compilers that */
-/* warn about constant expressions inside if(). Most compilers */
-/* should still recognize that &exception__prev is never zero and */
-/* avoid generating test code. */
-
-#define Throw \
- for (;; longjmp(*the_exception_context->penv, 1)) \
- the_exception_context->v.etmp =
-
-
-#endif /* CEXCEPT_H */
diff --git a/contrib/visupng/resource.h b/contrib/visupng/resource.h
deleted file mode 100644
index 611dd03..0000000
--- a/contrib/visupng/resource.h
+++ /dev/null
@@ -1,23 +0,0 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Developer Studio generated include file.
-// Used by VisualPng.rc
-//
-#define IDM_FILE_OPEN 40001
-#define IDM_FILE_SAVE 40002
-#define IDM_FILE_NEXT 40003
-#define IDM_FILE_PREVIOUS 40004
-#define IDM_FILE_EXIT 40005
-#define IDM_OPTIONS_BACKGROUND 40006
-#define IDM_OPTIONS_STRETCH 40007
-#define IDM_HELP_ABOUT 40008
-
-// Next default values for new objects
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 113
-#define _APS_NEXT_COMMAND_VALUE 40009
-#define _APS_NEXT_CONTROL_VALUE 1001
-#define _APS_NEXT_SYMED_VALUE 101
-#endif
-#endif