Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

285 lines
6.5 KiB

#pragma warning(disable:4200) // Zero-sized array in struct
#ifdef WINNT
/*
* FONT_INFO
*
* The distinction between the desired and actual font dimensions obtained
* is important in the case of TrueType fonts, in which there is no guarantee
* that what you ask for is what you will get.
*
* Note that the correspondence between "Desired" and "Actual" is broken
* whenever the user changes his display driver, because GDI uses driver
* parameters to control the font rasterization.
*
* The SizeDesired is {0, 0} if the font is a raster font.
*/
typedef struct _FONT_INFO {
HFONT hFont;
COORD Size; // font size obtained
COORD SizeWant; // 0;0 if Raster font
LONG Weight;
LPTSTR FaceName;
BYTE Family;
} FONT_INFO, *PFONT_INFO;
typedef struct tagFACENODE {
struct tagFACENODE *pNext;
DWORD dwFlag;
TCHAR atch[];
} FACENODE, *PFACENODE;
#ifdef MAX_TITLE_LEN
#undef MAX_TITLE_LEN
#endif
#define MAX_TITLE_LEN 256
#define MAXDIMENSTRING 40 // max text in combo box
#define DX_TTBITMAP 20
#define DY_TTBITMAP 12
#define CCH_RASTERFONTS 24
#define CCH_SELECTEDFONT 30
typedef struct {
IShellLink * psl;
LPNT_CONSOLE_PROPS lpConsole;
BOOL bConDirty;
int xScreen;
int yScreen;
POINT NonClientSize;
RECT WindowRect;
DWORD PreviewFlags;
PFONT_INFO FontInfo;
ULONG FontInfoLength;
ULONG NumberOfFonts;
BOOL gbEnumerateFaces;
BOOL gbPointSizeError;
BOOL gbBold;
BOOL bFontInit;
BOOL bColorInit;
PFACENODE gpFaceNames;
TCHAR DefaultFaceName[LF_FACESIZE];
LPTSTR lpFaceName;
#ifndef UNICODE
CHAR szFaceName[LF_FACESIZE];
#endif
COORD DefaultFontSize;
BYTE DefaultFontFamily;
ULONG DefaultFontIndex;
ULONG CurrentFontIndex;
LONG FontLong;
int Index;
BYTE ColorArray[4];
TCHAR ConsoleTitle[ MAX_TITLE_LEN + 1 ];
} CONSOLEPROP_DATA, *LPCONSOLEPROP_DATA; // cpd
typedef struct {
HWND hDlg;
BOOL bCheckRunInSep;
HANDLE hCheckNow;
} RUNSEPINFO, * LPRUNSEPINFO;
#define TM_IS_TT_FONT(x) (((x) & TMPF_TRUETYPE) == TMPF_TRUETYPE)
#define IS_BOLD(w) ((w) >= FW_SEMIBOLD)
#define SIZE_EQUAL(s1, s2) (((s1).X == (s2).X) && ((s1).Y == (s2).Y))
#define POINTS_PER_INCH 72
#define MIN_PIXEL_HEIGHT 5
#define MAX_PIXEL_HEIGHT 72
#define CONSOLE_REGISTRY_CURRENTPAGE (L"CurrentPage")
#define MAX_SCRBUF_WIDTH 9999
#define MAX_SCRBUF_HEIGHT 9999
#define INITIAL_FONTS 20
#define FONT_INCREMENT 3
#define CONSOLE_MAX_FONT_NAME_LENGTH 256
#define CM_SETCOLOR (WM_USER+1)
#define CM_PREVIEW_UPDATE (WM_USER+2)
#define CM_PREVIEW_INIT (WM_USER+3)
#define CM_COLOR_INIT (WM_USER+4)
#define PREVIEW_HSCROLL 0x01
#define PREVIEW_VSCROLL 0x02
#define FE_ABANDONFONT 0
#define FE_SKIPFONT 1
#define FE_FONTOK 2
#define EF_NEW 0x0001 // a newly available face
#define EF_OLD 0x0002 // a previously available face
#define EF_ENUMERATED 0x0004 // all sizes have been enumerated
#define EF_OEMFONT 0x0008 // an OEM face
#define EF_TTFONT 0x0010 // a TT face
#define EF_DEFFACE 0x0020 // the default face
/* ----- Macros ----- */
/*
* High-level macros
*
* These macros handle the SendMessages that go tofrom list boxes
* and combo boxes.
*
* The "xxx_lcb" prefix stands for leaves CritSect & "list or combo box".
*
* Basically, we're providing mnemonic names for what would otherwise
* look like a whole slew of confusing SendMessage's.
*
*/
#define lcbRESETCONTENT(hWnd, bLB) \
SendMessage(hWnd, bLB ? LB_RESETCONTENT : CB_RESETCONTENT, 0, 0L)
#define lcbGETTEXT(hWnd, bLB, w) \
SendMessage(hWnd, bLB ? LB_GETTEXT : CB_GETLBTEXT, w, 0L)
#define lcbFINDSTRINGEXACT(hWnd, bLB, pwsz) \
SendMessage(hWnd, bLB ? LB_FINDSTRINGEXACT : CB_FINDSTRINGEXACT, \
(DWORD)-1, (LPARAM)pwsz)
#define lcbADDSTRING(hWnd, bLB, pwsz) \
SendMessage(hWnd, bLB ? LB_ADDSTRING : CB_ADDSTRING, 0, (LPARAM)pwsz)
#define lcbSETITEMDATA(hWnd, bLB, w, nFont) \
SendMessage(hWnd, bLB ? LB_SETITEMDATA : CB_SETITEMDATA, w, nFont)
#define lcbGETITEMDATA(hWnd, bLB, w) \
SendMessage(hWnd, bLB ? LB_GETITEMDATA : CB_GETITEMDATA, w, 0L)
#define lcbGETCOUNT(hWnd, bLB) \
SendMessage(hWnd, bLB ? LB_GETCOUNT : CB_GETCOUNT, 0, 0L)
#define lcbGETCURSEL(hWnd, bLB) \
SendMessage(hWnd, bLB ? LB_GETCURSEL : CB_GETCURSEL, 0, 0L)
#define lcbSETCURSEL(hWnd, bLB, w) \
SendMessage(hWnd, bLB ? LB_SETCURSEL : CB_SETCURSEL, w, 0L)
#define NELEM(array) (sizeof(array)/sizeof(array[0]))
#define AttrToRGB(Attr) (pcpd->lpConsole->ColorTable[(Attr) & 0x0F])
#define ScreenTextColor(pcpd) \
(AttrToRGB(LOBYTE(pcpd->lpConsole->wFillAttribute) & 0x0F))
#define ScreenBkColor(pcpd) \
(AttrToRGB(LOBYTE(pcpd->lpConsole->wFillAttribute >> 4)))
#define PopupTextColor(pcpd) \
(AttrToRGB(LOBYTE(pcpd->lpConsole->wPopupFillAttribute) & 0x0F))
#define PopupBkColor(pcpd) \
(AttrToRGB(LOBYTE(pcpd->lpConsole->wPopupFillAttribute >> 4)))
//
// Function prototypes
//
VOID
InitializeFonts( LPCONSOLEPROP_DATA pcpd );
VOID
DestroyFonts( LPCONSOLEPROP_DATA pcpd );
NTSTATUS
EnumerateFonts( LPCONSOLEPROP_DATA pcpd, DWORD Flags);
int
FindCreateFont(
LPCONSOLEPROP_DATA pcpd,
DWORD Family,
LPTSTR ptszFace,
COORD Size,
LONG Weight);
BOOL
DoFontEnum(
LPCONSOLEPROP_DATA pcpd,
HDC hDC,
LPTSTR ptszFace,
PSHORT pTTPoints,
UINT nTTPoints);
VOID
GetTitleFromLinkName(
LPTSTR szLinkName,
LPTSTR szTitle
);
VOID
SetRegistryValues(
LPCONSOLEPROP_DATA pcpd
);
VOID
GetRegistryValues(
LPCONSOLEPROP_DATA pcpd
);
void
InitRegistryValues(
LPCONSOLEPROP_DATA pcpd
);
VOID
GetRegistryValues(
LPCONSOLEPROP_DATA pcpd
);
#endif // WINNT
typedef struct {
// input params
HIDA hida;
IShellLink *psl;
// local state variables
HWND hDlg;
#ifdef WINNT
LPRUNSEPINFO lpInfo;
#endif
BOOL bIsFile;
int iIconIndex;
TCHAR szFile[MAX_PATH];
TCHAR szIconPath[MAX_PATH];
} LINKPROP_DATA, *LPLINKPROP_DATA; // lpd
typedef struct {
LINKPROP_DATA lpd;
#ifdef WINNT
CONSOLEPROP_DATA cpd;
#endif
} LINKDATA, *LPLINKDATA;
typedef struct {
PROPSHEETPAGE psp;
LPLINKDATA pld;
} LINKPSP, *LPLINKPSP;
HRESULT _SaveLink(LPLINKDATA pld);
#ifdef WINNT
VOID
LinkConsolePagesSave(
LPLINKDATA pld
);
void
AddLinkConsolePages(
LPLINKDATA pld,
IShellLink * psl,
LPCTSTR pszFile,
LPFNADDPROPSHEETPAGE pfnAddPage,
LPARAM lParam
);
#endif