Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1182 lines
26 KiB

//-----------------------------------------------------------------------------
//
// Common utility functions
//
//-----------------------------------------------------------------------------
#include <stdio.h>
#include <windows.h>
#include <objbase.h>
#include <initguid.h>
#include "imaging.h"
#include "gdiplusimaging.h"
#include "frametest.h"
BOOL
AnsiToUnicodeStr(
const CHAR* ansiStr,
WCHAR* unicodeStr,
INT unicodeSize
)
{
return MultiByteToWideChar(CP_ACP,
0,
ansiStr,
-1,
unicodeStr,
unicodeSize) > 0;
}
BOOL
UnicodeToAnsiStr(
const WCHAR* unicodeStr,
CHAR* ansiStr,
INT ansiSize
)
{
return WideCharToMultiByte(
CP_ACP,
0,
unicodeStr,
-1,
ansiStr,
ansiSize,
NULL,
NULL) > 0;
}
void
USAGE()
{
printf("******************************************************\n");
printf("Usage: frametest [-?] [-w width] [-h height] [-x x] [-y y] Img\n");
printf("-w-----------Specify the window width. Default is 300\n");
printf("-h-----------Specify the window height. Default is 300\n");
printf("-x-----------Specify the window X position. Default is 0\n");
printf("-y-----------Specify the window Y position. Default is 0\n");
printf("-?-----------Print this usage message\n");
printf("ImageFile----File to be opened\n");
printf("Use PageDown and PageUp to goto next/previous page\n");
}// USAGE()
#define SizeofWSTR(s) (sizeof(WCHAR) * (wcslen(s) + 1))
#define SizeofSTR(s) (strlen(s) + 1)
//
// Compose a file type filter string given an array of
// ImageCodecInfo structures
//
CHAR*
MakeFilterFromCodecs(
UINT count,
const ImageCodecInfo* codecs,
BOOL open
)
{
static const CHAR allFiles[] = "All Files\0*.*";
// Figure out the total size of the filter string
UINT index;
UINT size;
for ( index = size = 0; index < count; ++index )
{
size += SizeofWSTR(codecs[index].FormatDescription)
+ SizeofWSTR(codecs[index].FilenameExtension);
}
if ( open )
{
size += sizeof(allFiles);
}
size += sizeof(CHAR);
// Allocate memory
CHAR *filter = (CHAR*)malloc(size);
CHAR* p = filter;
const WCHAR* ws;
if ( !filter )
{
return NULL;
}
if ( open )
{
memcpy(p, allFiles, sizeof(allFiles));
p += sizeof(allFiles);
}
for ( index = 0; index < count; ++index )
{
ws = codecs[index].FormatDescription;
size = SizeofWSTR(ws);
if ( UnicodeToAnsiStr(ws, p, size) )
{
p += SizeofSTR(p);
}
else
{
break;
}
ws = codecs[index].FilenameExtension;
size = SizeofWSTR(ws);
if ( UnicodeToAnsiStr(ws, p, size) )
{
p += SizeofSTR(p);
}
else
{
break;
}
}
if ( index < count )
{
free(filter);
return NULL;
}
*((CHAR*)p) = '\0';
return filter;
}// MakeFilterFromCodecs()
/****************************************************************************\
*
* FUNCTION : ShowMyDialog(int id,HWND hwnd,FARPROC fpfn)
*
* PURPOSE : This function displays a dialog box
*
* RETURNS : The exit code.
*
\****************************************************************************/
BOOL
ShowMyDialog(
INT id,
HWND hwnd,
DLGPROC fpfn
)
{
BOOL fRC;
HINSTANCE hInst;
hInst = (HINSTANCE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE);
fRC = (BOOL)DialogBox(hInst, MAKEINTRESOURCE(id), hwnd, fpfn);
FreeProcInstance(fpfn);
return fRC;
}// ShowMyDialog()
typedef struct _SFFS
{
// Search Find File Structure
unsigned char buff[21]; // dos search info
unsigned char wAttr;
union
{
unsigned short timeVariable; // RPC47
unsigned int time:16;
struct
{
unsigned int sec : 5;
unsigned int mint: 6;
unsigned int hr : 5;
};
};
union
{
unsigned short dateVariable;
unsigned int date:16;
struct
{
unsigned int dom : 5;
unsigned int mon : 4;
unsigned int yr : 7;
};
};
unsigned long cbFile;
unsigned char szFileName[13];
} SFFS;
VOID
FileTimeToDosTime(
FILETIME fileTime
)
{
SFFS sffs;
INT yr, mo, dy, sc;
if ( CoFileTimeToDosDateTime(&fileTime,
&sffs.dateVariable, &sffs.timeVariable))
{
yr = sffs.yr + 1980;
mo = sffs.mon;
dy = sffs.dom;
// sc = (DWORD)sffs.hr * 3600 + sffs.mint * 60 + sffs.sec * 2;
printf("%d:%d:%d %d:%d:%d\n", yr, mo, dy, sffs.hr, sffs.mint,sffs.sec);
}
}
VOID
DisplayTagName(PROPID id)
{
VERBOSE(("ID=%d [0x%x] ", id, id));
// Print the TAG name according to its ID
switch ( id )
{
case TAG_EXIF_IFD:
VERBOSE(("EXIF IFD: "));
break;
case TAG_GPS_IFD:
VERBOSE(("GPS IFD: "));
break;
case TAG_NEW_SUBFILE_TYPE:
VERBOSE(("New Subfile Type: "));
break;
case TAG_SUBFILE_TYPE:
VERBOSE(("Subfile Type: "));
break;
case TAG_IMAGE_WIDTH:
VERBOSE(("Image Width: "));
break;
case TAG_IMAGE_HEIGHT:
VERBOSE(("Image Height: "));
break;
case TAG_BITS_PER_SAMPLE:
VERBOSE(("Bits Per Sample: "));
break;
case TAG_COMPRESSION:
VERBOSE(("Compression: "));
break;
case TAG_THUMBNAIL_COMPRESSION:
VERBOSE(("Thumbnail Compression: "));
break;
case TAG_THUMBNAIL_RESOLUTION_X:
VERBOSE(("Thumbnail X resolution: "));
break;
case TAG_THUMBNAIL_RESOLUTION_Y:
VERBOSE(("Thumbnail Y resolution: "));
break;
case TAG_THUMBNAIL_RESOLUTION_UNIT:
VERBOSE(("Thumbnail resolution unit: "));
break;
case TAG_PHOTOMETRIC_INTERP:
VERBOSE(("Photometric Interpolation: "));
break;
case TAG_THRESH_HOLDING:
VERBOSE(("Photometric Interpolation: "));
break;
case TAG_CELL_WIDTH:
VERBOSE(("Cell Width: "));
break;
case TAG_CELL_HEIGHT:
VERBOSE(("Cell Height: "));
break;
case TAG_FILL_ORDER:
VERBOSE(("Fill Order: "));
break;
case TAG_DOCUMENT_NAME:
VERBOSE(("Document name: "));
break;
case TAG_ORIENTATION:
VERBOSE(("Orientation: "));
break;
case TAG_SAMPLES_PER_PIXEL:
VERBOSE(("Sample Per Pixel: "));
break;
case TAG_PLANAR_CONFIG:
VERBOSE(("Planar Configuration: "));
break;
case TAG_PAGE_NAME:
VERBOSE(("Page Name: "));
break;
case TAG_X_POSITION:
VERBOSE(("X Position: "));
break;
case TAG_Y_POSITION:
VERBOSE(("Y Position: "));
break;
case TAG_FREE_OFFSET:
VERBOSE(("Free Offset: "));
break;
case TAG_FREE_BYTE_COUNTS:
VERBOSE(("Free Byte Count: "));
break;
case TAG_GRAY_RESPONSE_UNIT:
VERBOSE(("Gray Response Unit: "));
break;
case TAG_GRAY_RESPONSE_CURVE:
VERBOSE(("Gray Response Curve: "));
break;
case TAG_T4_OPTION:
VERBOSE(("T4 Option: "));
break;
case TAG_T6_OPTION:
VERBOSE(("T6 Option: "));
break;
case TAG_YCbCr_SUBSAMPLING:
VERBOSE(("YCbCr Subsampling: "));
break;
case TAG_YCbCr_POSITIONING:
VERBOSE(("YCbCr position: "));
break;
case TAG_MIN_SAMPLE_VALUE:
VERBOSE(("Min sample value: "));
break;
case TAG_MAX_SAMPLE_VALUE:
VERBOSE(("Max sample value: "));
break;
case TAG_X_RESOLUTION:
VERBOSE(("X Resolution: "));
break;
case TAG_Y_RESOLUTION:
VERBOSE(("Y Resolution: "));
break;
case TAG_RESOLUTION_UNIT:
VERBOSE(("Resolution UNIT: "));
break;
case TAG_PAGE_NUMBER:
VERBOSE(("Page Number: "));
break;
case TAG_HOST_COMPUTER:
VERBOSE(("Host Computer: "));
break;
case TAG_PREDICTOR:
VERBOSE(("Predictor: "));
break;
case TAG_RESOLUTION_X_UNIT:
VERBOSE(("X Resolution UNIT: "));
break;
case TAG_RESOLUTION_Y_UNIT:
VERBOSE(("Y Resolution UNIT: "));
break;
case TAG_RESOLUTION_X_LENGTH_UNIT:
VERBOSE(("X Resolution UNIT LENGTH: "));
break;
case TAG_RESOLUTION_Y_LENGTH_UNIT:
VERBOSE(("Y Resolution UNIT LENGTH: "));
break;
case TAG_STRIP_OFFSETS:
VERBOSE(("Strip Offsets: "));
break;
case TAG_ROWS_PER_STRIP:
VERBOSE(("Rows Per Strip: "));
break;
case TAG_STRIP_BYTES_COUNT:
VERBOSE(("Strip Bytes Count: "));
break;
case TAG_JPEG_INTER_FORMAT:
VERBOSE(("JPEG thumbnail offset: "));
break;
case TAG_JPEG_INTER_LENGTH:
VERBOSE(("JPEG thumbnail Length: "));
break;
case TAG_TRANSFER_FUNCTION:
VERBOSE(("Transfer Function: "));
break;
case TAG_WHITE_POINT:
VERBOSE(("White Point: "));
break;
case TAG_PRIMAY_CHROMATICS:
VERBOSE(("Primay_Chromatics: "));
break;
case TAG_COLOR_MAP:
VERBOSE(("Color Map: "));
break;
case TAG_HALFTONE_HINTS:
VERBOSE(("HalfTone Hints: "));
break;
case TAG_TILE_WIDTH:
VERBOSE(("Tile Width: "));
break;
case TAG_TILE_LENGTH:
VERBOSE(("Tile Height: "));
break;
case TAG_TILE_OFFSET:
VERBOSE(("Tile Offset: "));
break;
case TAG_TILE_BYTE_COUNTS:
VERBOSE(("Tile Byte Count: "));
break;
case TAG_INK_SET:
VERBOSE(("Ink Set: "));
break;
case TAG_INK_NAMES:
VERBOSE(("Ink Names: "));
break;
case TAG_NUMBER_OF_INKS:
VERBOSE(("Number of Inks: "));
break;
case TAG_DOT_RANGE:
VERBOSE(("Dot Range: "));
break;
case TAG_TARGET_PRINTER:
VERBOSE(("Target Printer: "));
break;
case TAG_EXTRA_SAMPLES:
VERBOSE(("Extra Samples: "));
break;
case TAG_SAMPLE_FORMAT:
VERBOSE(("Sample Format: "));
break;
case TAG_SMIN_SAMPLE_VALUE:
VERBOSE(("SMin Sample Value: "));
break;
case TAG_SMAX_SAMPLE_VALUE:
VERBOSE(("SMax Sample Value: "));
break;
case TAG_TRANSFER_RANGE:
VERBOSE(("Transfer Range: "));
break;
case TAG_JPEG_PROC:
VERBOSE(("JPEG Proc: "));
break;
case TAG_JPEG_RESTART_INTERVAL:
VERBOSE(("JPEG Restart Interval: "));
break;
case TAG_JPEG_LOSSLESS_PREDICTORS:
VERBOSE(("JPEG Lossless Predictors: "));
break;
case TAG_JPEG_POINT_TRANSFORMS:
VERBOSE(("JPEG Point Transforms: "));
break;
case TAG_JPEG_Q_TABLES:
VERBOSE(("JPEG Q Tables: "));
break;
case TAG_JPEG_DC_TABLES:
VERBOSE(("JPEG DC Tables: "));
break;
case TAG_JPEG_AC_TABLES:
VERBOSE(("JPEG AC Tables: "));
break;
case TAG_YCbCr_COEFFICIENTS:
VERBOSE(("YCbCr Coefficients: "));
break;
case TAG_REF_BLACK_WHITE:
VERBOSE(("ReferenceBlackWhite: "));
break;
case TAG_DATE_TIME:
VERBOSE(("Date Time: "));
break;
case TAG_IMAGE_DESCRIPTION:
VERBOSE(("Description: "));
break;
case TAG_EQUIP_MAKE:
VERBOSE(("Equipment Make "));
break;
case TAG_EQUIP_MODEL:
VERBOSE(("Equipment Model "));
break;
case TAG_SOFTWARE_USED:
VERBOSE(("Software Used: "));
break;
case TAG_ARTIST:
VERBOSE(("Artist: "));
break;
case TAG_COPYRIGHT:
VERBOSE(("Copyright: "));
break;
case TAG_PRINT_FLAGS:
VERBOSE(("Print flags: "));
break;
case TAG_PRINT_FLAGS_VERSION:
VERBOSE(("Print flags information---Version: "));
break;
case TAG_PRINT_FLAGS_CROP:
VERBOSE(("Print flags information---Crop: "));
break;
case TAG_PRINT_FLAGS_BLEEDWIDTH:
VERBOSE(("Print flags information---Bleed Width: "));
break;
case TAG_PRINT_FLAGS_BLEEDWIDTHSCALE:
VERBOSE(("Print flags information---Bleed Width Scale: "));
break;
case TAG_COLORTRANSFER_FUNCTION:
VERBOSE(("Color transfer function--"));
break;
case TAG_PIXEL_UNIT:
VERBOSE(("Pixel UNIT: "));
break;
case TAG_PIXEL_PER_UNIT_X:
VERBOSE(("Pixels Per UNIT in X: "));
break;
case TAG_PIXEL_PER_UNIT_Y:
VERBOSE(("Pixels Per UNIT in Y: "));
break;
case TAG_PALETTE_HISTOGRAM:
VERBOSE(("Palette histogram: "));
break;
case TAG_HALFTONE_LPI:
VERBOSE(("Color halftoning information LPI:"));
break;
case TAG_HALFTONE_LPI_UNIT:
VERBOSE(("Color halftoning information LPI UNIT:"));
break;
case TAG_HALFTONE_DEGREE:
VERBOSE(("Color halftoning information Degree:"));
break;
case TAG_HALFTONE_SHAPE:
VERBOSE(("Color halftoning information Shape:"));
break;
case TAG_HALFTONE_MISC:
VERBOSE(("Color halftoning information Misc:"));
break;
case TAG_HALFTONE_SCREEN:
VERBOSE(("Color halftoning information Screen:"));
break;
case TAG_JPEG_QUALITY:
VERBOSE(("JPEG quality: "));
break;
case TAG_GRID_SIZE:
VERBOSE(("Grid and guides: "));
break;
case TAG_THUMBNAIL_FORMAT:
VERBOSE(("Thumbnail Data Format: "));
break;
case TAG_THUMBNAIL_WIDTH:
case TAG_THUMBNAIL_IMAGE_WIDTH:
VERBOSE(("Thumbnail Width: "));
break;
case TAG_THUMBNAIL_HEIGHT:
case TAG_THUMBNAIL_IMAGE_HEIGHT:
VERBOSE(("Thumbnail Height: "));
break;
case TAG_THUMBNAIL_COLORDEPTH:
VERBOSE(("Thumbnail Color depth: "));
break;
case TAG_THUMBNAIL_PLANES:
VERBOSE(("Thumbnail Number of plane: "));
break;
case TAG_THUMBNAIL_RAWBYTES:
VERBOSE(("Thumbnail Raw bytes (bytes): "));
break;
case TAG_THUMBNAIL_SIZE:
VERBOSE(("Thumbnail Data Size (bytes): "));
break;
case TAG_THUMBNAIL_COMPRESSED_SIZE:
VERBOSE(("Thumbnail Compressed Size (bytes): "));
break;
case TAG_THUMBNAIL_DATA:
VERBOSE(("Thumbnail data bits: "));
break;
case TAG_LUMINANCE_TABLE:
VERBOSE(("Luminance table "));
break;
case TAG_CHROMINANCE_TABLE:
VERBOSE(("Chrominance table "));
break;
case TAG_IMAGE_TITLE:
VERBOSE(("Image title: "));
break;
case TAG_ICC_PROFILE:
VERBOSE(("ICC PROFILE "));
break;
case TAG_ICC_PROFILE_DESCRIPTOR:
VERBOSE(("ICC PROFILE descriptor: "));
break;
case TAG_SRGB_RENDERING_INTENT:
VERBOSE(("sRGB rendering intent: "));
break;
case TAG_GAMMA:
VERBOSE(("GAMMA "));
break;
case TAG_FRAMEDELAY:
VERBOSE(("Frame delay "));
break;
case TAG_LOOPCOUNT:
VERBOSE(("Loop count "));
break;
case EXIF_TAG_VER:
VERBOSE(("EXIF Version: "));
break;
case EXIF_TAG_FPX_VER:
VERBOSE(("FlashPixVersion Version: "));
break;
case EXIF_TAG_COLOR_SPACE:
VERBOSE(("Color Space: "));
break;
case EXIF_TAG_COMP_CONFIG:
VERBOSE(("Components Configuration: "));
break;
case EXIF_TAG_COMP_BPP:
VERBOSE(("Components Bits Per Pixel: "));
break;
case EXIF_TAG_PIX_X_DIM:
VERBOSE(("Pixel X Dimension: "));
break;
case EXIF_TAG_PIX_Y_DIM:
VERBOSE(("Pixel Y Dimension: "));
break;
case EXIF_TAG_MAKER_NOTE:
VERBOSE(("Maker Note: "));
break;
case EXIF_TAG_USER_COMMENT:
VERBOSE(("User Comments: "));
break;
case EXIF_TAG_RELATED_WAV:
VERBOSE(("Related WAV File: "));
break;
case EXIF_TAG_D_T_ORIG:
VERBOSE(("Date Time Original: "));
break;
case EXIF_TAG_D_T_DIGITIZED:
VERBOSE(("Date Time Digitized: "));
break;
case EXIF_TAG_D_T_SUBSEC:
VERBOSE(("Date & Time subseconds: "));
break;
case EXIF_TAG_D_T_ORIG_SS:
VERBOSE(("Date & Time original subseconds: "));
break;
case EXIF_TAG_D_T_DIG_SS:
VERBOSE(("Date & Time digitized subseconds: "));
break;
case EXIF_TAG_EXPOSURE_TIME:
VERBOSE(("Exposure Time: "));
break;
case EXIF_TAG_F_NUMBER:
VERBOSE(("F Number: "));
break;
case EXIF_TAG_EXPOSURE_PROG:
VERBOSE(("Exposure Program: "));
break;
case EXIF_TAG_SPECTRAL_SENSE:
VERBOSE(("Spectral Sense: "));
break;
case EXIF_TAG_ISO_SPEED:
VERBOSE(("ISO Speed: "));
break;
case EXIF_TAG_OECF:
VERBOSE(("Opto-Electric Conversion Function values: "));
break;
case EXIF_TAG_SHUTTER_SPEED:
VERBOSE(("Shutter Speed: "));
break;
case EXIF_TAG_APERATURE:
VERBOSE(("Aperature: "));
break;
case EXIF_TAG_BRIGHTNESS:
VERBOSE(("Brightness: "));
break;
case EXIF_TAG_EXPOSURE_BIAS:
VERBOSE(("Exposure Bias: "));
break;
case EXIF_TAG_MAX_APERATURE:
VERBOSE(("Max Aperature: "));
break;
case EXIF_TAG_SUBJECT_DIST:
VERBOSE(("Subject Distance: "));
break;
case EXIF_TAG_METERING_MODE:
VERBOSE(("Metering Mode: "));
break;
case EXIF_TAG_LIGHT_SOURCE:
VERBOSE(("Light Source: "));
break;
case EXIF_TAG_FLASH:
VERBOSE(("Flash: "));
break;
case EXIF_TAG_FOCAL_LENGTH:
VERBOSE(("Focal Length: "));
break;
case EXIF_TAG_FLASH_ENERGY:
VERBOSE(("Flash Energy: "));
break;
case EXIF_TAG_SPATIAL_FR:
VERBOSE(("Spacial Frequency Response: "));
break;
case EXIF_TAG_FOCAL_X_RES:
VERBOSE(("Focal Plane X Resolution: "));
break;
case EXIF_TAG_FOCAL_Y_RES:
VERBOSE(("Focal Plane Y Resolution: "));
break;
case EXIF_TAG_FOCAL_RES_UNIT:
VERBOSE(("Focal Plane Resolution Unit: "));
break;
case EXIF_TAG_SUBJECT_LOC:
VERBOSE(("Subject Location: "));
break;
case EXIF_TAG_EXPOSURE_INDEX:
VERBOSE(("Exposure Index: "));
break;
case EXIF_TAG_SENSING_METHOD:
VERBOSE(("Sensing Method: "));
break;
case EXIF_TAG_FILE_SOURCE:
VERBOSE(("File Source: "));
break;
case EXIF_TAG_SCENE_TYPE:
VERBOSE(("Scene Type: "));
break;
case EXIF_TAG_CFA_PATTERN:
VERBOSE(("CFA Pattern: "));
break;
case EXIF_TAG_INTEROP:
VERBOSE(("Interoperability Unit: "));
break;
case GPS_TAG_VER:
VERBOSE(("GPS Version: "));
break;
case GPS_TAG_LATTITUDE_REF:
VERBOSE(("GPS Lattitude Reference: "));
break;
case GPS_TAG_LATTITUDE:
VERBOSE(("GPS Lattitude: "));
break;
case GPS_TAG_LONGITUDE_REF:
VERBOSE(("GPS Longitude Reference: "));
break;
case GPS_TAG_LONGITUDE:
VERBOSE(("GPS Longitude: "));
break;
case GPS_TAG_ALTITUDE_REF:
VERBOSE(("GPS Altitude Reference: "));
break;
case GPS_TAG_ALTITUDE:
VERBOSE(("GPS Altitude: "));
break;
case GPS_TAG_GPS_TIME:
VERBOSE(("GPS Time: "));
break;
case GPS_TAG_GPS_SATELLITES:
VERBOSE(("GPS Satellites: "));
break;
case GPS_TAG_GPS_STATUS:
VERBOSE(("GPS Status: "));
break;
case GPS_TAG_GPS_MEASURE_MODE:
VERBOSE(("GPS Measure Mode: "));
break;
case GPS_TAG_GPS_DOP:
VERBOSE(("GPS Measurement precision: "));
break;
case GPS_TAG_SPEED_REF:
VERBOSE(("GPS Speed Reference: "));
break;
case GPS_TAG_SPEED:
VERBOSE(("GPS Speed: "));
break;
case GPS_TAG_TRACK_REF:
VERBOSE(("GPS Track Reference: "));
break;
case GPS_TAG_TRACK:
VERBOSE(("GPS Track: "));
break;
case GPS_TAG_IMG_DIR_REF:
VERBOSE(("GPS Image Direction Reference: "));
break;
case GPS_TAG_IMG_DIR:
VERBOSE(("GPS Image Direction: "));
break;
case GPS_TAG_MAP_DATUM:
VERBOSE(("GPS Map Datum: "));
break;
case GPS_TAG_DEST_LAT_REF:
VERBOSE(("GPS Destination Latitude Reference: "));
break;
case GPS_TAG_DEST_LAT:
VERBOSE(("GPS Destination Latitude: "));
break;
case GPS_TAG_DEST_LONG_REF:
VERBOSE(("GPS Longitude Reference: "));
break;
case GPS_TAG_DEST_LONG:
VERBOSE(("GPS Longitude: "));
break;
case GPS_TAG_DEST_BEAR_REF:
VERBOSE(("GPS Destination Bear Reference: "));
break;
case GPS_TAG_DEST_BEAR:
VERBOSE(("GPS Destination Bear: "));
break;
case GPS_TAG_DEST_DIST_REF:
VERBOSE(("GPS Destination Distance Reference: "));
break;
case GPS_TAG_DEST_DIST:
VERBOSE(("GPS Destination Distance: "));
break;
default:
VERBOSE(("Unknown Tag "));
break;
}
}// DisplayTagName()
VOID
DisplayPropertyItem(
PropertyItem* pItem
)
{
// Print out the name first
DisplayTagName(pItem->id);
switch ( pItem->type )
{
case TAG_TYPE_BYTE:
{
// Print pItem->length bytes of information
BYTE* pcTemp = (BYTE*)pItem->value;
for ( int i = 0; i < (int)pItem->length; ++i )
{
VERBOSE(("%2.2x", *pcTemp++));
}
VERBOSE(("\n"));
#if 0 //(THUMBNAIL DATA testing)
if ( pItem->id == TAG_THUMBNAIL_DATA )
{
FILE* fHandle = fopen("foo.jpg", "w");
fwrite(pItem->value, 1, pItem->length, fHandle);
fclose(fHandle);
}
#endif
break;
}
case TAG_TYPE_ASCII:
VERBOSE(("%s\n", pItem->value));
break;
case TAG_TYPE_SHORT:
{
int iTotalItems = pItem->length / sizeof(SHORT);
unsigned short* pusTemp = (unsigned short*)pItem->value;
for ( int i = 0; i < iTotalItems; ++i )
{
VERBOSE(("%d ", *pusTemp));
pusTemp++;
}
VERBOSE(("\n"));
break;
}
case TAG_TYPE_LONG:
{
int iTotalItems = pItem->length / sizeof(LONG);
long* plTemp = (long*)pItem->value;
for ( int i = 0; i < iTotalItems; ++i )
{
VERBOSE(("%ld ", *plTemp));
plTemp++;
}
VERBOSE(("\n"));
break;
}
case TAG_TYPE_RATIONAL:
case TAG_TYPE_SRATIONAL:
{
// Each RATIONAL/SRATIONAL contains 2 LONGs
INT iNumOfValue = pItem->length / ( 2 * sizeof(LONG) );
LONG* pLong = (LONG*)pItem->value;
for ( int i = 0; i < iNumOfValue; ++i )
{
LONG lNum = *pLong;
LONG lDen = *(pLong + 1);
VERBOSE(("%f ", (float)lNum/lDen));
pLong += 2;
}
VERBOSE(("\n"));
break;
}
case TAG_TYPE_UNDEFINED:
{
// Print pItem->length bytes of information
BYTE* pcTemp = (BYTE*)pItem->value;
for ( int i = 0; i < (int)pItem->length; ++i )
{
VERBOSE(("%2.2x ", *pcTemp++));
}
VERBOSE(("\n"));
break;
}
case TAG_TYPE_SLONG:
VERBOSE(("%p\n", pItem->value));
break;
default:
VERBOSE(("Unknown VT type\n"));
break;
}
}// DisplayPropertyItem()
VOID
ToggleScaleFactorMenu(
UINT uiMenuItem,
HMENU hMenu
)
{
for ( UINT uiTemp = IDM_VIEW_ZOOM_FITWINDOW_W;
uiTemp <= IDM_VIEW_ZOOM_REALSIZE; uiTemp++ )
{
if ( uiTemp == uiMenuItem )
{
CheckMenuItem(hMenu, uiMenuItem, MF_BYCOMMAND | MF_CHECKED);
}
else
{
CheckMenuItem(hMenu, uiTemp, MF_BYCOMMAND | MF_UNCHECKED);
}
}
}// ToggleScaleFactorMenu()
VOID
ToggleScaleOptionMenu(
UINT uiMenuItem,
HMENU hMenu
)
{
for ( UINT uiTemp = IDM_VIEW_OPTION_BILINEAR;
uiTemp <= IDM_VIEW_OPTION_HIGHCUBIC; uiTemp++ )
{
if ( uiTemp == uiMenuItem )
{
CheckMenuItem(hMenu, uiMenuItem, MF_BYCOMMAND | MF_CHECKED);
}
else
{
CheckMenuItem(hMenu, uiTemp, MF_BYCOMMAND | MF_UNCHECKED);
}
}
}// ToggleScaleOptionMenu()
VOID
ToggleWrapModeOptionMenu(
UINT uiMenuItem,
HMENU hMenu
)
{
for ( UINT uiTemp = IDM_VIEW_OPTION_WRAPMODETILE;
uiTemp <= IDM_VIEW_OPTION_WRAPMODECLAMPFF; uiTemp++ )
{
if ( uiTemp == uiMenuItem )
{
CheckMenuItem(hMenu, uiMenuItem, MF_BYCOMMAND | MF_CHECKED);
}
else
{
CheckMenuItem(hMenu, uiTemp, MF_BYCOMMAND | MF_UNCHECKED);
}
}
}// ToggleWrapModeOptionMenu()