X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9a29912f608e082001ee53b9873323c4bcd71f21..3be926e348e2d0a3a2c278b9f2cff7843971e0c9:/utils/tex2rtf/src/bmputils.h?ds=sidebyside diff --git a/utils/tex2rtf/src/bmputils.h b/utils/tex2rtf/src/bmputils.h index 0f8b07a453..f283af196a 100644 --- a/utils/tex2rtf/src/bmputils.h +++ b/utils/tex2rtf/src/bmputils.h @@ -3,7 +3,8 @@ // Purpose: Utilities for manipulating bitmap and metafile images for // the purposes of conversion to RTF // Author: Julian Smart -// Modified by: +// Modified by: Wlodzimiez ABX Skiba 2003/2004 Unicode support +// Ron Lee // Created: 7.9.93 // RCS-ID: $Id$ // Copyright: (c) Julian Smart @@ -13,7 +14,7 @@ static char hexArray[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; -void DecToHex(int dec, char *buf) +void DecToHex(int dec, wxChar *buf) { int firstDigit = (int)(dec/16.0); int secondDigit = (int)(dec - (firstDigit*16.0)); @@ -21,7 +22,7 @@ void DecToHex(int dec, char *buf) buf[1] = hexArray[secondDigit]; buf[2] = 0; } - + static unsigned int getshort(FILE *fp) { int c, c1; @@ -34,37 +35,53 @@ static unsigned long getint(FILE *fp) int c, c1, c2, c3; c = getc(fp); c1 = getc(fp); c2 = getc(fp); c3 = getc(fp); return (long)((long) c) + - (((long) c1) << 8) + - (((long) c2) << 16) + - (((long) c3) << 24); + (((long) c1) << 8) + + (((long) c2) << 16) + + (((long) c3) << 24); } bool GetBMPHeader(FILE *fp, int *Width, int *Height, int *Planes, int *BitsPerPixel) { - unsigned long bfSize, bfOffBits, biSize, biWidth, biHeight, biPlanes; - unsigned long biBitCount, biCompression, biSizeImage, biXPelsPerMeter; - unsigned long biYPelsPerMeter, biClrUsed, biClrImportant; + // Remember about all fields but store only important ones + unsigned long /* + bfSize, + bfOffBits, + biSize, + */ + biWidth, + biHeight, + biPlanes, + biBitCount + /* , + biCompression, + biSizeImage, + biXPelsPerMeter, + biYPelsPerMeter, + biClrUsed, + biClrImportant + */ + ; /* read the file type (first two bytes) */ int c = getc(fp); int c1 = getc(fp); - if (c!='B' || c1!='M') { return FALSE; } + if (c!='B' || c1!='M') { return false; } - bfSize = getint(fp); + /* bfSize = */ getint(fp); getshort(fp); /* reserved and ignored */ getshort(fp); - bfOffBits = getint(fp); + /* bfOffBits = */ getint(fp); - biSize = getint(fp); + /* biSize = */ getint(fp); biWidth = getint(fp); biHeight = getint(fp); biPlanes = getshort(fp); biBitCount = getshort(fp); - biCompression = getint(fp); - biSizeImage = getint(fp); - biXPelsPerMeter = getint(fp); - biYPelsPerMeter = getint(fp); - biClrUsed = getint(fp); - biClrImportant = getint(fp); + /* biCompression = */ getint(fp); + /* biSizeImage = */ getint(fp); + /* biXPelsPerMeter = */ getint(fp); + /* biYPelsPerMeter = */ getint(fp); + /* biClrUsed = */ getint(fp); + /* biClrImportant = */ getint(fp); *Width = (int)biWidth; *Height = (int)biHeight; @@ -72,39 +89,39 @@ bool GetBMPHeader(FILE *fp, int *Width, int *Height, int *Planes, int *BitsPerPi *BitsPerPixel = (int)biBitCount; // fseek(fp, bfOffBits, SEEK_SET); - - return TRUE; + + return true; } static int scanLineWidth = 0; -bool OutputBitmapHeader(FILE *fd, bool isWinHelp = FALSE) +bool OutputBitmapHeader(FILE *fd, bool isWinHelp = false) { int Width, Height, Planes, BitsPerPixel; if (!GetBMPHeader(fd, &Width, &Height, &Planes, &BitsPerPixel)) - return FALSE; + return false; scanLineWidth = (int)((float)Width/(8.0/(float)BitsPerPixel)); if ((float)((int)(scanLineWidth/2.0)) != (float)(scanLineWidth/2.0)) scanLineWidth ++; - + int goalW = 15*Width; int goalH = 15*Height; - TexOutput("{\\pict"); - if (isWinHelp) TexOutput("\\wbitmap0"); - else TexOutput("\\dibitmap"); - - char buf[50]; - TexOutput("\\picw"); sprintf(buf, "%d", Width); TexOutput(buf); - TexOutput("\\pich"); sprintf(buf, "%d", Height); TexOutput(buf); - TexOutput("\\wbmbitspixel"); sprintf(buf, "%d", BitsPerPixel); TexOutput(buf); - TexOutput("\\wbmplanes"); sprintf(buf, "%d", Planes); TexOutput(buf); - TexOutput("\\wbmwidthbytes"); sprintf(buf, "%d", scanLineWidth); TexOutput(buf); - TexOutput("\\picwgoal"); sprintf(buf, "%d", goalW); TexOutput(buf); - TexOutput("\\pichgoal"); sprintf(buf, "%d", goalH); TexOutput(buf); - TexOutput("\n"); - return TRUE; + TexOutput(_T("{\\pict")); + if (isWinHelp) TexOutput(_T("\\wbitmap0")); + else TexOutput(_T("\\dibitmap)")); + + wxChar buf[50]; + TexOutput(_T("\\picw")); wxSnprintf(buf, sizeof(buf), _T("%d"), Width); TexOutput(buf); + TexOutput(_T("\\pich")); wxSnprintf(buf, sizeof(buf), _T("%d"), Height); TexOutput(buf); + TexOutput(_T("\\wbmbitspixel")); wxSnprintf(buf, sizeof(buf), _T("%d"), BitsPerPixel); TexOutput(buf); + TexOutput(_T("\\wbmplanes")); wxSnprintf(buf, sizeof(buf), _T("%d"), Planes); TexOutput(buf); + TexOutput(_T("\\wbmwidthbytes")); wxSnprintf(buf, sizeof(buf), _T("%d"), scanLineWidth); TexOutput(buf); + TexOutput(_T("\\picwgoal")); wxSnprintf(buf, sizeof(buf), _T("%d"), goalW); TexOutput(buf); + TexOutput(_T("\\pichgoal")); wxSnprintf(buf, sizeof(buf), _T("%d"), goalH); TexOutput(buf); + TexOutput(_T("\n")); + return true; } @@ -113,56 +130,56 @@ bool OutputBitmapData(FILE *fd) fseek(fd, 14, SEEK_SET); int bytesSoFar = 0; int ch = getc(fd); - char hexBuf[3]; + wxChar hexBuf[3]; while (ch != EOF) { if (bytesSoFar == scanLineWidth) { bytesSoFar = 0; - TexOutput("\n"); + TexOutput(_T("\n")); } DecToHex(ch, hexBuf); TexOutput(hexBuf); bytesSoFar ++; ch = getc(fd); } - TexOutput("\n}\n"); - return TRUE; + TexOutput(_T("\n}\n")); + return true; } #ifdef __WXMSW__ struct mfPLACEABLEHEADER { - DWORD key; - HANDLE hmf; - RECT bbox; - WORD inch; - DWORD reserved; - WORD checksum; + DWORD key; + HANDLE hmf; + RECT bbox; + WORD inch; + DWORD reserved; + WORD checksum; }; // Returns size in TWIPS bool GetMetafileHeader(FILE *handle, int *width, int *height) { char buffer[40]; - mfPLACEABLEHEADER *theHeader = (mfPLACEABLEHEADER *)&buffer; + mfPLACEABLEHEADER *theHeader = (mfPLACEABLEHEADER *)&buffer[0]; fread((void *)theHeader, sizeof(char), sizeof(mfPLACEABLEHEADER), handle); if (theHeader->key != 0x9AC6CDD7) { - return FALSE; + return false; } float widthInUnits = (float)theHeader->bbox.right - theHeader->bbox.left; float heightInUnits = (float)theHeader->bbox.bottom - theHeader->bbox.top; *width = (int)((widthInUnits*1440.0)/theHeader->inch); *height = (int)((heightInUnits*1440.0)/theHeader->inch); - return TRUE; + return true; } -bool OutputMetafileHeader(FILE *handle, bool isWinHelp, int userWidth, int userHeight) +bool OutputMetafileHeader(FILE *handle, bool WXUNUSED(isWinHelp), int userWidth, int userHeight) { int Width, Height; if (!GetMetafileHeader(handle, &Width, &Height)) - return FALSE; + return false; scanLineWidth = 64; int goalW = Width; @@ -187,30 +204,30 @@ bool OutputMetafileHeader(FILE *handle, bool isWinHelp, int userWidth, int userH goalH = userHeight; } - TexOutput("{\\pict"); - TexOutput("\\wmetafile8"); + TexOutput(_T("{\\pict")); + TexOutput(_T("\\wmetafile8")); - char buf[50]; - TexOutput("\\picw"); sprintf(buf, "%d", Width); TexOutput(buf); - TexOutput("\\pich"); sprintf(buf, "%d", Height); TexOutput(buf); - TexOutput("\\picwgoal"); sprintf(buf, "%d", goalW); TexOutput(buf); - TexOutput("\\pichgoal"); sprintf(buf, "%d", goalH); TexOutput(buf); - TexOutput("\n"); - return TRUE; + wxChar buf[50]; + TexOutput(_T("\\picw")); wxSnprintf(buf, sizeof(buf), _T("%d"), Width); TexOutput(buf); + TexOutput(_T("\\pich")); wxSnprintf(buf, sizeof(buf), _T("%d"), Height); TexOutput(buf); + TexOutput(_T("\\picwgoal")); wxSnprintf(buf, sizeof(buf), _T("%d"), goalW); TexOutput(buf); + TexOutput(_T("\\pichgoal")); wxSnprintf(buf, sizeof(buf), _T("%d"), goalH); TexOutput(buf); + TexOutput(_T("\n")); + return true; } bool OutputMetafileData(FILE *handle) { int bytesSoFar = 0; - char hexBuf[3]; + wxChar hexBuf[3]; int ch; do { - ch = getc(handle); + ch = getc(handle); if (bytesSoFar == scanLineWidth) { bytesSoFar = 0; - TexOutput("\n"); + TexOutput(_T("\n")); } if (ch != EOF) { @@ -219,8 +236,8 @@ bool OutputMetafileData(FILE *handle) bytesSoFar ++; } } while (ch != EOF); - TexOutput("\n}\n"); - return TRUE; + TexOutput(_T("\n}\n")); + return true; } #endif