| /* |
| * Dump a font file |
| * |
| * Copyright 2009 Dmitry Timoshkov |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
| */ |
| |
| #include "config.h" |
| #include "wine/port.h" |
| |
| #include <stdarg.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| #ifdef HAVE_UNISTD_H |
| # include <unistd.h> |
| #endif |
| #ifdef HAVE_SYS_TYPES_H |
| # include <sys/types.h> |
| #endif |
| #ifdef HAVE_SYS_MMAN_H |
| #include <sys/mman.h> |
| #endif |
| #include <fcntl.h> |
| |
| #define NONAMELESSUNION |
| #define NONAMELESSSTRUCT |
| #include "windef.h" |
| #include "winbase.h" |
| #include "winnt.h" |
| |
| #include "winedump.h" |
| |
| #include <pshpack1.h> |
| typedef struct |
| { |
| INT16 dfType; |
| INT16 dfPoints; |
| INT16 dfVertRes; |
| INT16 dfHorizRes; |
| INT16 dfAscent; |
| INT16 dfInternalLeading; |
| INT16 dfExternalLeading; |
| BYTE dfItalic; |
| BYTE dfUnderline; |
| BYTE dfStrikeOut; |
| INT16 dfWeight; |
| BYTE dfCharSet; |
| INT16 dfPixWidth; |
| INT16 dfPixHeight; |
| BYTE dfPitchAndFamily; |
| INT16 dfAvgWidth; |
| INT16 dfMaxWidth; |
| BYTE dfFirstChar; |
| BYTE dfLastChar; |
| BYTE dfDefaultChar; |
| BYTE dfBreakChar; |
| INT16 dfWidthBytes; |
| LONG dfDevice; |
| LONG dfFace; |
| LONG dfBitsPointer; |
| LONG dfBitsOffset; |
| BYTE dfReserved; |
| /* Fields, introduced for Windows 3.x fonts */ |
| LONG dfFlags; |
| INT16 dfAspace; |
| INT16 dfBspace; |
| INT16 dfCspace; |
| LONG dfColorPointer; |
| LONG dfReserved1[4]; |
| } FONTINFO16; |
| |
| typedef struct |
| { |
| SHORT dfVersion; /* Version */ |
| LONG dfSize; /* Total File Size */ |
| char dfCopyright[60]; /* Copyright notice */ |
| FONTINFO16 fi; /* FONTINFO structure */ |
| } WINFNT; |
| #include <poppack.h> |
| |
| /* FIXME: recognize and dump also NE/PE wrapped fonts */ |
| |
| enum FileSig get_kind_fnt(void) |
| { |
| const WINFNT *fnt = PRD(0, sizeof(WINFNT)); |
| if (fnt && (fnt->dfVersion == 0x200 || fnt->dfVersion == 0x300) && |
| PRD(0, fnt->dfSize) != NULL) |
| return SIG_FNT; |
| return SIG_UNKNOWN; |
| } |
| |
| void fnt_dump(void) |
| { |
| const WINFNT *fnt = PRD(0, sizeof(WINFNT)); |
| |
| printf("dfVersion %#x, dfSize %d bytes, dfCopyright %.60s\n", |
| fnt->dfVersion, fnt->dfSize, fnt->dfCopyright); |
| printf("dfType %d\n" |
| "dfPoints %d\n" |
| "dfVertRes %d\n" |
| "dfHorizRes %d\n" |
| "dfAscent %d\n" |
| "dfInternalLeading %d\n" |
| "dfExternalLeading %d\n" |
| "dfItalic %d\n" |
| "dfUnderline %d\n" |
| "dfStrikeOut %d\n" |
| "dfWeight %d\n" |
| "dfCharSet %d\n" |
| "dfPixWidth %d\n" |
| "dfPixHeight %d\n" |
| "dfPitchAndFamily %#x\n" |
| "dfAvgWidth %d\n" |
| "dfMaxWidth %d\n" |
| "dfFirstChar %#x\n" |
| "dfLastChar %#x\n" |
| "dfDefaultChar %#x\n" |
| "dfBreakChar %#x\n" |
| "dfWidthBytes %d\n", |
| fnt->fi.dfType, fnt->fi.dfPoints, fnt->fi.dfVertRes, fnt->fi.dfHorizRes, |
| fnt->fi.dfAscent, fnt->fi.dfInternalLeading, fnt->fi.dfExternalLeading, |
| fnt->fi.dfItalic, fnt->fi.dfUnderline, fnt->fi.dfStrikeOut, fnt->fi.dfWeight, |
| fnt->fi.dfCharSet, fnt->fi.dfPixWidth, fnt->fi.dfPixHeight, fnt->fi.dfPitchAndFamily, |
| fnt->fi.dfAvgWidth, fnt->fi.dfMaxWidth, fnt->fi.dfFirstChar, fnt->fi.dfLastChar, |
| fnt->fi.dfDefaultChar, fnt->fi.dfBreakChar, fnt->fi.dfWidthBytes); |
| } |