#include <stdlib.h>
#define WIDER_LEFT 1
#define WIDER_RIGHT 2
#define WIDER_BOTH 3
#define NARROWER_LEFT 4
#define NARROWER_RIGHT 5
#define NARROWER_BOTH 6
#define WIDTH 7
#define BOX_WIDTH 8
#define BOX_REFRESH 10 /* Restore char to original form */
#define BOX_CLEAR 11
#define BOX_FILL 12
#define BOX_INV 13
#define BOX_HATCH 14
#define BOX_UNDO 15 /* Undo last change */
#define BOX_LEFTRIGHT 16 /* Flip left to right */
#define BOX_TOPBOTTOM 17 /* Flip top over bottom */
#define BOX_COPY 18
#define BOX_PASTE 19
#define ROW_ADD 21
#define ROW_DEL 22
#define COL_ADD 31
#define COL_DEL 32
#define ID_EDIT 34
#define ID_PATH 35
#define ID_LISTBOX 36
#define ID_FACE_NAME 37
#define ID_FONT_NAME 38
#define ID_COPYRIGHT 39
#define FONT_START 40 /* Generated if win fontedit arg. */
#define FONT_LOAD 41 /* Codes for Font Window */
#define FONT_SAVE 42
#define FONT_HEADER 43
#define FONT_COPY 44
#define FONT_PASTE 45 /* Paste in without rescaling */
#define FONT_ABOUT 46 /* Display the about box */
#define FONT_RESIZE 47 /* Go to Resize Dialog Box */
#define FONT_NEW 95 /* Menu id: create new font */
#define ID_FIRST_CHAR 48 /* First character in the font */
#define ID_LAST_CHAR 49 /* Last character in the font */
#define ID_POINTS 50 /* Nominal Point Size */
#define ID_VERT_RES 51 /* Nominal Vertical Resolution */
#define ID_HORIZ_RES 52 /* Nominal Horizontal Resolution */
#define ID_ASCENT 53 /* Height of Ascent */
#define ID_EXT_LEADING 54 /* Height of External Leading */
#define ID_INT_LEADING 55 /* Height of Internal Leading */
#define FONT_EXIT 56 /* exit the font editor */
#define ID_ITALIC 60 /* Flag for Italic Fonts */
#define ID_UNDERLINE 61 /* Flag for Underlined Fonts */
#define ID_STRIKEOUT 62 /* Flag for Struckout Fonts */
#define ID_ANSI 63 /* 0 = ANSI, 255 = other */
#define ID_OEM 64
#define ID_CHAR_SET 65
#define ID_DEFAULT_CHAR 66 /* Default for undefined Chars. */
#define ID_BREAK_CHAR 67
#define ID_SYMBOL 68
#define ID_UNKNOWN 70
#define ID_ROMAN 71
#define ID_SWISS 72 /* Pitch Families */
#define ID_MODERN 73
#define ID_SCRIPT 74
#define ID_DECORATIVE 75
#define ID_PIX_HEIGHT 80 /* Height of Characters */
#define ID_WIDTH 81 /* Fixed or Maximum Width */
#define ID_WIDTH_TEXT 82 /* Caption for above */
#define ID_AVERAGE 83 /* Average Character Width */
#define ID_FIXED 84 /* Fixed Width Font */
#define ID_VARIABLE 85 /* Variable width font */
#define ID_THIN 86
#define ID_EXTRALIGHT 87
#define ID_LIGHT 88
#define ID_NORMAL 89
#define ID_MEDIUM 90
#define ID_SEMIBOLD 91
#define ID_BOLD 92
#define ID_EXTRABOLD 93
#define ID_HEAVY 94
#define ID_BOXOPEN 96 /* dialog box frame id for File Open */
#define FONT_SAVEAS 97
#define ID_FORMAT2 102 /* Windows 2.0 Font Format */
#define ID_FORMAT3 103 /* Windows 3.0 Font Format */
/* string IDS for strings in resource file - LR */
#define IDS_NOMPTSIZENOTOK 0
#define IDS_NOMVERTRESNOTOK 1
#define IDS_NOMHORRESNOTOK 2
#define IDS_ASCENTTOOBIG 3
#define IDS_ASCENTNOTOK 4
#define IDS_EXTLEADNOTOK 5
#define IDS_INTLEADTOOBIG 6
#define IDS_INTLEADNOTOK 7
#define IDS_CHARSETOUTOFBOUNDS 8
#define IDS_DEFCHAROUTSIDEFONT 9
#define IDS_DEFCHARNOTOK 10
#define IDS_BREAKCHAROUTSIDEFONT 11
#define IDS_BREAKCHARNOTOK 12
#define IDS_UNKNOWNFACE 13
#define IDS_NOVARTOFIXCHANGE 14
#define IDS_TOOBIGFOR20 15
#define IDS_HEIGHTOUTOFBOUNDS 16
#define IDS_WIDTHOUTOFBOUNDS 17
#define IDS_CHAR1MORETHANDCHAR 18
#define IDS_CHAR1NOTOK 19
#define IDS_LASTCHARTOOSMALL 20
#define IDS_LASTCHARNOTOK 21
#define IDS_CANNOTOPENCLIP 22
#define IDS_COPYINGTOCLIP 23
#define IDS_NOTENOUGHMEM 24
#define IDS_ALLOCATINGSPACE 25
#define IDS_FONTEDIT 26
#define IDS_FONTSHOW 27
#define IDS_DOTFNT 28
#define IDS_BLANKDASHBLANK 29
#define IDS_ERROROPENINGFILE 30
#define IDS_ERRORREADINGHDR 31
#define IDS_UNKNOWNFORMAT 32
#define IDS_ERRORREADINGBODY 33
#define IDS_FILETOOLARGE 34
#define IDS_ERRORWRITINGHDR 35
#define IDS_ERRORWRITINGOFFSETS 36
#define IDS_ERRORWRITINGBODY 37
#define IDS_STARDOTFNT 38
#define IDS_UNKNOWN 39
#define IDS_MAXWIDTH 40
#define IDS_CHARPIXELWIDTH 41
#define IDS_ABOUT 42
#define IDS_DHEADER 43
#define IDS_DRESIZE 44
#define IDS_DWIDTH 45
#define IDS_EDLIMITS0TO64 46
#define IDS_MAXWIDTHINCREASE 47
#define IDS_CANNOTCHANGEWIDTH 48
#define IDS_WARNING 49
#define IDS_INCORRECTPIXWIDTH 50
#define IDS_MAXWIDTHOUTOFBOUNDS 51
#define IDS_AVGWIDTHOUTOFBOUNDS 52
#define IDS_WIDTHBYTESNOTOK 53
#define IDS_BITSOFFSETNOTOK 54
#define IDS_TABLEWIDTHSBAD 55
#define IDS_TABLEOFFSETSBAD 56
#define IDS_COLOR 57
#define IDS_APPWORKSPACE 58
#define IDS_FILEREADONLY 59
#define IDS_APPNAME 60
#define IDS_IFN 61
#define IDS_FNF 62
#define IDS_REF 63
#define IDS_SCC 64
#define IDS_EOF 65
#define IDS_ECF 66
#define IDS_FRO 67
#define IDS_EXT 68
#define IDS_EXTDESC 69
#define IDS_NEW_FONT 70
#define IDS_ERRORCLIP 71
#define IDS_CHAR72
#define IDS_WIDTH73
#define IDS_HEIGHT74
#define CSTRINGS 75 /* total number of strings in
resource file */
#define CCHSTRINGSMAX 4096 /* total length of all strings
loaded must be <= this */
#define CCHCOLORSTRING 15 /* size of App Workspace color inf.
string loaded from win.ini */
#define ID_SHIFTJIS 76
/*****************************************************************************/
/* Typedef's etc. */
/*****************************************************************************/
// typedef unsigned char CHAR; /* ... since we use these to index */
/* font file header (Adaptation Guide section 6.4) */
typedef struct {
WORD Version; /* Always 17985 for the Nonce */
DWORD Size; /* Size of whole file */
CHAR Copyright[60];
WORD Type; /* Raster Font if Type & 1 == 0 */
WORD Points; /* Nominal Point size */
WORD VertRes; /* Nominal Vertical resolution */
WORD HorizRes; /* Nominal Horizontal resolution */
WORD Ascent; /* Height of Ascent */
WORD IntLeading; /* Internal (Microsoft) Leading */
WORD ExtLeading; /* External (Microsoft) Leading */
BYTE Italic; /* Italic font if set */
BYTE Underline; /* Etc. */
BYTE StrikeOut; /* Etc. */
WORD Weight; /* Weight: 200 = regular */
BYTE CharSet; /* ANSI=0. other=255 */
WORD PixWidth; /* Fixed width. 0 ==> Variable */
WORD PixHeight; /* Fixed Height */
BYTE Family; /* Pitch and Family */
WORD AvgWidth; /* Width of character 'X' */
WORD MaxWidth; /* Maximum width */
BYTE FirstChar; /* First character defined in font */
BYTE LastChar; /* Last character defined in font */
BYTE DefaultChar; /* Sub. for out of range chars. */
BYTE BreakChar; /* Word Break Character */
WORD WidthBytes; /* No.Bytes/row of Bitmap */
DWORD Device; /* Pointer to Device Name string */
DWORD Face; /* Pointer to Face Name String */
DWORD BitsPointer; /* Pointer to Bit Map */
DWORD BitsOffset; /* Offset to Bit Map */
} FontHeaderType; /* Above pointers all rel. to start of file */
typedef struct {
WORD fsVersion;
DWORD fsSize;
CHAR fsCopyright[60];
WORD fsType; /* Type field for the font */
WORD fsPoints; /* Point size of font */
WORD fsVertRes; /* Vertical digitization */
WORD fsHorizRes; /* Horizontal digitization */
WORD fsAscent; /* Baseline offset from char cell top */
WORD fsInternalLeading; /* Internal leading included in font */
WORD fsExternalLeading; /* Prefered extra space between lines */
BYTE fsItalic; /* Flag specifying if italic */
BYTE fsUnderline; /* Flag specifying if underlined */
BYTE fsStrikeOut; /* Flag specifying if struck out */
WORD fsWeight; /* Weight of font */
BYTE fsCharSet; /* Character set of font */
WORD fsPixWidth; /* Width field for the font */
WORD fsPixHeight; /* Height field for the font */
BYTE fsPitchAndFamily; /* Flag specifying pitch and family */
WORD fsAvgWidth; /* Average character width */
WORD fsMaxWidth; /* Maximum character width */
BYTE fsFirstChar; /* First character in the font */
BYTE fsLastChar; /* Last character in the font */
BYTE fsDefaultChar; /* Default character for out of range */
BYTE fsBreakChar; /* Character to define wordbreaks */
WORD fsWidthBytes; /* Number of bytes in each row */
DWORD fsDevice; /* Offset to device name */
DWORD fsFace; /* Offset to face name */
DWORD fsBitsPointer; /* Bits pointer */
DWORD fsBitsOffset; /* Offset to the begining of the bitmap */
BYTEfsDBfiller; /* Word alignment for the offset table */
DWORD fsFlags; /* Bit flags */
WORD fsAspace; /* Global A space, if any */
WORD fsBspace; /* Global B space, if any */
WORD fsCspace; /* Global C space, if any */
DWORD fsColorPointer; /* offset to color table, if any */
DWORD fsReserved[4]; /* */
BYTE fsCharOffset; /* Area for storing the char. offsets */
} FontHeader30;
#define CCHEXTRA 31 /* no. of extra bytes in the 3.0 header */
//
// These are the old glyph info structures. Since they are not DWORD aligned
// they must be converted to new structure types.
//
typedef struct{
SHORT GIwidth;
SHORT GIoffset;
} GLYPHINFO_20;
typedef struct{
SHORT GIwidth;
LONG GIoffset;
} GLYPHINFO_30;
#define ClipBoard TRUE
LONG APIENTRY FontEditWndProc(HWND, WORD, WPARAM, LONG);
LONG APIENTRY FontShowWndProc(HWND, WORD, WPARAM, LONG);
BOOL APIENTRY
HeaderProc(
HWND hDial,
WORD message,
WPARAM wParam,
LPARAM lParam
);
BOOL APIENTRY
ReSizeProc(
HWND hDial,
WORD message,
WPARAM wParam,
LPARAM lParam
);
BOOL APIENTRY
WidthProc(
HWND hDial,
WORD message,
WPARAM wParam,
LPARAM lParam
);
CHAR * FontLoad(CHAR *, OFSTRUCT *);
CHAR * FontSave(CHAR *, OFSTRUCT *);
BOOL ResizeBody(); /* Change Height of Font. MAde return type BOOL istead of VOID - LR */
BOOL ResizeWidths(); /* Change Widths (Fixed Width Fonts).MAde return type BOOL istead of VOID - LR */
BOOL SpreadWidths(DWORD); /* Change Widths (Var. Width Fonts). MAde return type BOOL istead of VOID - LR */
VOID DeleteGlobalBitmap();
VOID ScrollFont();
VOID ExciseChars(); /* Delete part of a font */
BOOL
CharWidth(
BYTE iChar, /* Character to change */
DWORD wBox /* New width */
);
BOOL NewLastChar(DWORD); /* MAde return type BOOL istead of VOID - LR */
BOOL NewFirstChar(DWORD); /* MAde return type BOOL istead of VOID - LR */
#define kBoxLim 65 /* was 49 */
#define wBoxLim 65
#define szNamesMax 32
#define BLACK (LONG)0
#define WHITE (LONG)0x00FFFFFF /* For SetPixel rgbColor */
#define FILENAMEMAX _MAX_PATH /* Maximum allowed length of file names */
/*********
the following added 11-Sep-1986 to use dlgsave.c and dlgopen.c
**********/
#define IDD_OPEN 1 /* dialog box ids */
#define IDD_SAVE 2
#define IDD_FORMAT 3
#define MAX_STR_LEN 128
#define MAX_FNAME_LEN 128
#define CBEXTMAX 6 /* Number of bytes in "\*.ext" */
#define NOSAVE 0 /* return flags for DlgFnSave() */
#define NEWSAVE 1
#define OLDSAVE 2
#define NOOPEN 0 /* return flags for DlgFnOpen() */
#define NEWOPEN 1
#define OLDOPEN 2
#define WORD_LIMIT 65534 /* max. number of bytes that can be read(written) by */
#define SEGMENT_SIZE 65536 /* segment length in bytes */
/* abbreviations for accessing resource strings - LR */
#define vszNomPtSizeNotOk vrgsz[IDS_NOMPTSIZENOTOK ]
#define vszNomVertResNotOk vrgsz[IDS_NOMVERTRESNOTOK ]
#define vszNomHorResNotOk vrgsz[IDS_NOMHORRESNOTOK ]
#define vszAscentTooBig vrgsz[IDS_ASCENTTOOBIG ]
#define vszAscentNotOk vrgsz[IDS_ASCENTNOTOK ]
#define vszExtLeadNotOk vrgsz[IDS_EXTLEADNOTOK ]
#define vszIntLeadTooBig vrgsz[IDS_INTLEADTOOBIG ]
#define vszIntLeadNotOk vrgsz[IDS_INTLEADNOTOK ]
#define vszCharSetOutOfBounds vrgsz[IDS_CHARSETOUTOFBOUNDS ]
#define vszDefCharOutsideFont vrgsz[IDS_DEFCHAROUTSIDEFONT ]
#define vszDefCharNotOk vrgsz[IDS_DEFCHARNOTOK ]
#define vszBreakCharOutsideFont vrgsz[IDS_BREAKCHAROUTSIDEFONT]
#define vszBreakCharNotOk vrgsz[IDS_BREAKCHARNOTOK ]
#define vszUnknownFace vrgsz[IDS_UNKNOWNFACE ]
#define vszNoVarToFixChange vrgsz[IDS_NOVARTOFIXCHANGE ]
#define vszTooBigFor20 vrgsz[IDS_TOOBIGFOR20 ]
#define vszHeightOutOfBounds vrgsz[IDS_HEIGHTOUTOFBOUNDS ]
#define vszWidthOutOfBounds vrgsz[IDS_WIDTHOUTOFBOUNDS ]
#define vszChar1MoreThanDChar vrgsz[IDS_CHAR1MORETHANDCHAR ]
#define vszChar1NotOk vrgsz[IDS_CHAR1NOTOK ]
#define vszLastCharTooSmall vrgsz[IDS_LASTCHARTOOSMALL ]
#define vszLastCharNotOk vrgsz[IDS_LASTCHARNOTOK ]
#define vszCannotOpenClip vrgsz[IDS_CANNOTOPENCLIP ]
#define vszCopyingToClip vrgsz[IDS_COPYINGTOCLIP ]
#define vszNotEnoughMem vrgsz[IDS_NOTENOUGHMEM ]
#define vszAllocatingSpace vrgsz[IDS_ALLOCATINGSPACE ]
#define vszFontEdit vrgsz[IDS_FONTEDIT ]
#define vszFontShow vrgsz[IDS_FONTSHOW ]
#define vszDotFNT vrgsz[IDS_DOTFNT ]
#define vszBlankDashBlank vrgsz[IDS_BLANKDASHBLANK ]
#define vszErrorOpeningFile vrgsz[IDS_ERROROPENINGFILE ]
#define vszErrorReadingHdr vrgsz[IDS_ERRORREADINGHDR ]
#define vszUnknownFormat vrgsz[IDS_UNKNOWNFORMAT ]
#define vszErrorReadingBody vrgsz[IDS_ERRORREADINGBODY ]
#define vszFileTooLarge vrgsz[IDS_FILETOOLARGE ]
#define vszErrorWritingHdr vrgsz[IDS_ERRORWRITINGHDR ]
#define vszErrorWritingOffsets vrgsz[IDS_ERRORWRITINGOFFSETS ]
#define vszErrorWritingBody vrgsz[IDS_ERRORWRITINGBODY ]
#define vszStarDotFNT vrgsz[IDS_STARDOTFNT ]
#define vszUnknown vrgsz[IDS_UNKNOWN ]
#define vszMaxWidth vrgsz[IDS_MAXWIDTH ]
#define vszCharPixelWidth vrgsz[IDS_CHARPIXELWIDTH ]
#define vszABOUT vrgsz[IDS_ABOUT ]
#define vszDHeader vrgsz[IDS_DHEADER ]
#define vszDResize vrgsz[IDS_DRESIZE ]
#define vszDWidth vrgsz[IDS_DWIDTH ]
#define vszEdLimits0To64 vrgsz[IDS_EDLIMITS0TO64 ]
#define vszMaxWidthIncrease vrgsz[IDS_MAXWIDTHINCREASE ]
#define vszCannotChangeWidth vrgsz[IDS_CANNOTCHANGEWIDTH ]
#define vszWarning vrgsz[IDS_WARNING ]
#define vszIncorrectPixWidth vrgsz[IDS_INCORRECTPIXWIDTH ]
#define vszMaxWidthOutOfBounds vrgsz[IDS_MAXWIDTHOUTOFBOUNDS ]
#define vszAvgWidthOutOfBounds vrgsz[IDS_AVGWIDTHOUTOFBOUNDS ]
#define vszWidthBytesNotOk vrgsz[IDS_WIDTHBYTESNOTOK ]
#define vszBitsOffsetNotOk vrgsz[IDS_BITSOFFSETNOTOK ]
#define vszTableWidthsBad vrgsz[IDS_TABLEWIDTHSBAD ]
#define vszTableOffsetsBad vrgsz[IDS_TABLEOFFSETSBAD ]
#define vszcolors vrgsz[IDS_COLOR ]
#define vszAppWorkspace vrgsz[IDS_APPWORKSPACE ]
#define vszFileReadOnly vrgsz[IDS_FILEREADONLY ]
#define vszErrorClip vrgsz[IDS_ERRORCLIP ]
#define vszCHARvrgsz[IDS_CHAR]
#define vszWIDTHvrgsz[IDS_WIDTH]
#define vszHEIGHTvrgsz[IDS_HEIGHT]
/*------ fontedit.c -------*/
extern VOID ResizeShow(VOID);
extern VOID ScrollFont(VOID);
extern VOID CharToBox(BYTE);
extern VOID FontRename(CHAR *);
extern VOID BoxToChar(BYTE);
extern DWORD GetkStuff(VOID);
/*------ fontload.c -------*/
extern VOID ToClipboard(BYTE, DWORD, DWORD);
extern VOID BoxToClipboard(POINT, DWORD, DWORD);
extern DWORD ClipboardToBox(POINT, DWORD, DWORD, BOOL);
/*------ fontdlg.c -------*/
BOOL
CommDlgOpen (
HWND hWndParent, /* window handle of parent window */
OFSTRUCT *pOfstrIn, /* ptr to current file OFSTRUCT (->cBytes=0 if no
* cur. file)*/
CHAR *pszNewNameIn, /* ptr to array which will get new file's name */
CHAR *pszExtIn, /* ptr to current default extension */
CHAR *pszAppNameIn, /* ptr to application name */
BOOL fOpenType
);
BOOL
CommDlgSaveAs(
HANDLE hInstance,
HWND hWndParent, /* window handle of parent window */
OFSTRUCT *pOfstrIn, /* ptr to current file OFSTRUCT (->cBytes=0 if no
* cur. file)*/
CHAR *pszNewNameIn, /* ptr to array which will get new file's name
* (no path) */
CHAR *pszExtIn, /* ptr to current default extension */
CHAR *pszAppNameIn /* ptr to application name */
);
BOOL
DlgMergeStrings(
CHAR *szSrc,
CHAR *szMerge,
CHAR *szDst
);
/*------ fonthead.c -------*/
extern VOID ErrorBox(HWND, CHAR *);
/*------ fontchar.c -------*/
extern VOID ClearBox(VOID);
/*------ fontcvt.c --------*/
BOOL
fConvStructInit ();
VOID
vFontStructFromBuffer (
PBYTE pjSourceBuff,
FontHeaderType *pfhDestFHStruct
);
VOID
vBufferFromFontStruct (
FontHeaderType *pfhSourceFHStruct,
PBYTE pjDestBuff
);
VOID
vBufferFromFont30Struct (
FontHeader30 *pfh3SourceFH3Struct,
PBYTE pjDestBuff
);
VOID
vGlyphInfo20FromBuffer (
PBYTE pjSourceBuff,
GLYPHINFO_20 *pgi2DestGI2Struct
);
VOID
vGlyphInfo30FromBuffer (
PBYTE pjSourceBuff,
GLYPHINFO_30 *pgi3DestGI3Struct
);
VOID
vBufferFromGlyphInfo20 (
GLYPHINFO_20 *pgi2SrcGI2Struct,
PBYTE pjDestBuff
);
VOID
vBufferFromGlyphInfo30 (
GLYPHINFO_30 *pgi3SrcGI3Struct,
PBYTE pjDestBuff
);
// dword alligned size of DIB scan in bytes
#define CJ_DIB_SCAN(cx) ((((cx) + 31) & ~31) >> 3)