From 79aa922282edd795d55bf06cf622ddf33884dff5 Mon Sep 17 00:00:00 2001 From: Stef Walter Date: Wed, 17 Sep 2003 19:41:13 +0000 Subject: Initial Import --- .cvsignore | 1 + FontInfo.cpp | 325 ++++++++++++++++++++++++++ FontInfo.h | 111 +++++++++ FontInfo.rgs | 24 ++ StdAfx.cpp | 12 + StdAfx.h | 35 +++ TTF.h | 67 ++++++ TtfInfo Client/FontInfo.frm | 321 +++++++++++++++++++++++++ TtfInfo Client/FontInfo.vbp | 37 +++ TtfInfo Client/FontInfo.vbw | 2 + TtfInfo Client/FontView.frm | 78 +++++++ TtfInfo Client/FontView.frx | Bin 0 -> 201 bytes TtfInfo.cpp | 73 ++++++ TtfInfo.def | 9 + TtfInfo.dsp | 437 ++++++++++++++++++++++++++++++++++ TtfInfo.dsw | 29 +++ TtfInfo.h | 556 ++++++++++++++++++++++++++++++++++++++++++++ TtfInfo.idl | 54 +++++ TtfInfo.rc | 134 +++++++++++ TtfInfops.def | 11 + TtfInfops.mk | 14 ++ dlldata.c | 38 +++ resource.h | 23 ++ 23 files changed, 2391 insertions(+) create mode 100644 .cvsignore create mode 100644 FontInfo.cpp create mode 100644 FontInfo.h create mode 100644 FontInfo.rgs create mode 100644 StdAfx.cpp create mode 100644 StdAfx.h create mode 100644 TTF.h create mode 100644 TtfInfo Client/FontInfo.frm create mode 100644 TtfInfo Client/FontInfo.vbp create mode 100644 TtfInfo Client/FontInfo.vbw create mode 100644 TtfInfo Client/FontView.frm create mode 100644 TtfInfo Client/FontView.frx create mode 100644 TtfInfo.cpp create mode 100644 TtfInfo.def create mode 100644 TtfInfo.dsp create mode 100644 TtfInfo.dsw create mode 100644 TtfInfo.h create mode 100644 TtfInfo.idl create mode 100644 TtfInfo.rc create mode 100644 TtfInfops.def create mode 100644 TtfInfops.mk create mode 100644 dlldata.c create mode 100644 resource.h diff --git a/.cvsignore b/.cvsignore new file mode 100644 index 0000000..3afc713 --- /dev/null +++ b/.cvsignore @@ -0,0 +1 @@ +ReleaseMinSize \ No newline at end of file diff --git a/FontInfo.cpp b/FontInfo.cpp new file mode 100644 index 0000000..beed324 --- /dev/null +++ b/FontInfo.cpp @@ -0,0 +1,325 @@ +// FontInfo.cpp : Implementation of CFontInfo +#include "stdafx.h" +#include "TtfInfo.h" +#include "FontInfo.h" + +///////////////////////////////////////////////////////////////////////////// +// CFontInfo +LPCTSTR CFontInfo::m_strFontsKey = NULL; + +STDMETHODIMP CFontInfo::InterfaceSupportsErrorInfo(REFIID riid) +{ + static const IID* arr[] = + { + &IID_ITrueTypeFontInfo, + }; + for ( int i = 0; i < sizeof( arr ) / sizeof( arr[0] ); i++ ) + { + if ( InlineIsEqualGUID( *arr[i], riid ) ) + return S_OK; + } + return S_FALSE; +} + +STDMETHODIMP CFontInfo::get__FileName(BSTR * pVal) +{ + *pVal = m_bstrFileName.copy(); + return S_OK; +} + +STDMETHODIMP CFontInfo::put__FileName(BSTR newVal) +{ + using namespace std; + + Initialize(); + + try + { + m_bstrFileName = _bstr_t(newVal).copy(); + } + catch (_com_error Err) + { + m_bstrFileName = ""; + return Err.Error(); + } + + const int BUFFER_SIZE = 512; + const int MAX_TABLES = 40; + + wchar_t namebuf[BUFFER_SIZE]; + unsigned short numNames; + unsigned int cTables; + sfnt_OffsetTable OffsetTable; + sfnt_DirectoryEntry Table; + sfnt_NamingTable NamingTable; + sfnt_NameRecord NameRecord; + streampos curseek; + + try + { + + USES_CONVERSION; + ifstream TtfFile( W2CA( newVal ), ios_base::in | ios_base::binary ); + + if ( !TtfFile.is_open() ) + { + m_bstrFileName = ""; + return AtlReportError( CLSID_FontInfo, IDERR_FileOpen, GUID_NULL, E_FAIL, _Module.GetResourceInstance() ); + } + + TtfFile.read( reinterpret_cast( &OffsetTable ), sizeof( OffsetTable ) - sizeof( sfnt_DirectoryEntry ) ); + cTables = (int) SWAPW( OffsetTable.numOffsets ); + + for (int i = 0; i < cTables and i < MAX_TABLES; i++) + { + TtfFile.read( reinterpret_cast( &Table ), sizeof( Table ) ); + + if (Table.tag == tag_NamingTable) + { + TtfFile.seekg( SWAPL( Table.offset ) ); + TtfFile.read( reinterpret_cast( &NamingTable ), + sizeof( NamingTable ) ); + numNames = SWAPW( NamingTable.count ); + + while ( numNames-- ) + { + TtfFile.read ( reinterpret_cast( &NameRecord ), + sizeof( NameRecord ) ); + + curseek = TtfFile.tellg(); + + if ( SWAPW( NameRecord.platformID ) == TTF::Microsoft ) + { + TtfFile.seekg( SWAPW( NameRecord.offset ) + + SWAPW( NamingTable.stringOffset ) + + SWAPL( Table.offset ) ); + TtfFile.read( reinterpret_cast( &namebuf ), + min(SWAPW(NameRecord.length), BUFFER_SIZE) ); + namebuf[SWAPW( NameRecord.length ) / sizeof( wchar_t ) ] = L'\0'; + + for (int i = 0; i < BUFFER_SIZE and i < SWAPW( NameRecord.length ) / sizeof( wchar_t ); i++) + namebuf[i] = SWAPW( namebuf[i] ); + + TtfFile.seekg( curseek ); + + switch ( SWAPW( NameRecord.nameID ) ) + { + case TTF::Copyright: + m_bstrCopyright = namebuf; + break; + case TTF::Family: + m_bstrFamily = namebuf; + break; + case TTF::ID: + m_bstrID = namebuf; + break; + case TTF::Name: + m_bstrName = namebuf; + break; + case TTF::PostscriptName: + m_bstrPostscriptName = namebuf; + break; + case TTF::Subfamily: + m_bstrSubfamily = namebuf; + break; + case TTF::Trademark: + m_bstrTrademark = namebuf; + break; + case TTF::Version: + m_bstrVersion = namebuf; + break; + default: + break; + } + + } // if ( SWAPW( NameRecord.platformID ) == TTF::Microsoft + + } // while ( numNames-- ) + + } // if (Table.tag == tag_NamingTable) + + } // for (int i = 0; i < cTables and i < 40; i++) + + } + catch(...) + { + return E_UNEXPECTED; + } + + return S_OK; +} + +STDMETHODIMP CFontInfo::get_FileName(BSTR * pVal) +{ + return get__FileName(pVal); +} + +STDMETHODIMP CFontInfo::put_FileName(BSTR newVal) +{ + return put__FileName(newVal); +} + +STDMETHODIMP CFontInfo::get_Copyright(BSTR * pVal) +{ + *pVal = m_bstrCopyright.copy(); + return S_OK; +} + +STDMETHODIMP CFontInfo::get_Family(BSTR * pVal) +{ + *pVal = m_bstrFamily.copy(); + return S_OK; +} + +STDMETHODIMP CFontInfo::get_ID(BSTR * pVal) +{ + *pVal = m_bstrID.copy(); + return S_OK; +} + +STDMETHODIMP CFontInfo::get_Name(BSTR * pVal) +{ + *pVal = m_bstrName.copy(); + return S_OK; +} + +STDMETHODIMP CFontInfo::get_PostscriptName(BSTR * pVal) +{ + *pVal = m_bstrPostscriptName.copy(); + return S_OK; +} + +STDMETHODIMP CFontInfo::get_Subfamily(BSTR * pVal) +{ + *pVal = m_bstrSubfamily.copy(); + return S_OK; +} + +STDMETHODIMP CFontInfo::get_Trademark(BSTR * pVal) +{ + *pVal = m_bstrTrademark.copy(); + return S_OK; +} + +STDMETHODIMP CFontInfo::get_Version(BSTR * pVal) +{ + *pVal = m_bstrVersion.copy(); + return S_OK; +} + +STDMETHODIMP CFontInfo::get_RegisteredFileName(BSTR * pVal) +{ + CRegKey reg; + LONG lRet = 0; + + lRet = OpenFontsKey( reg, KEY_READ ); + // We'll only return an error in the event that we can't open + // the Fonts key, any other registry errors will result in an + // empty RegisteredFileName string + if ( ERROR_SUCCESS != lRet ) + return HRESULT_FROM_WIN32( lRet ); + + // First get the size + DWORD dwSize = 0; + lRet = reg.QueryValue( NULL, GetRegistryFontName(), &dwSize ); + + if ( 0 == dwSize ) + { + *pVal = _bstr_t("").copy(); + return S_OK; + } + + LPTSTR strFileName = new TCHAR [dwSize]; + lRet = reg.QueryValue( strFileName, GetRegistryFontName(), &dwSize ); + + if ( ERROR_SUCCESS != lRet) + *pVal = _bstr_t("").copy(); + else + *pVal = _bstr_t(strFileName).copy(); + + delete [] strFileName; + return S_OK; +} + +STDMETHODIMP CFontInfo::GetFontsDirectory(BSTR * pVal) +{ + LPITEMIDLIST pIDL = NULL; + HRESULT hRes = SHGetSpecialFolderLocation( NULL, CSIDL_FONTS, &pIDL ); + + if ( SUCCEEDED( hRes ) ) + { + TCHAR pszPath [MAX_PATH] = {0}; + BOOL bSuccess = SHGetPathFromIDList( pIDL, pszPath ); + CoTaskMemFree( pIDL ); + if ( bSuccess ) + { + *pVal = _bstr_t( pszPath ).copy(); + return S_OK; + } + else + hRes = E_FAIL; + } + + return AtlReportError( CLSID_FontInfo, IDERR_GetFontsDirectory, GUID_NULL, hRes, _Module.GetResourceInstance() ); +} + +STDMETHODIMP CFontInfo::Install(VARIANT_BOOL bPermanent) +{ + if ( _bstr_t("") == m_bstrFileName ) + return AtlReportError( CLSID_FontInfo, + IDERR_NoFileName, GUID_NULL, E_FAIL, _Module.GetResourceInstance() ); + + if ( VARIANT_TRUE == bPermanent ) + { + // It's up to the user to check whether this font is already installed + CRegKey reg; + LONG lRet = 0; + + lRet = OpenFontsKey( reg, KEY_WRITE ); + if ( ERROR_SUCCESS != lRet ) + return AtlReportError( CLSID_FontInfo, + IDERR_OpenFontsKey, GUID_NULL, HRESULT_FROM_WIN32( lRet ), _Module.GetResourceInstance() ); + + lRet = reg.SetValue( m_bstrFileName, GetRegistryFontName() ); + if ( ERROR_SUCCESS != lRet ) + return AtlReportError( CLSID_FontInfo, + IDERR_Install, GUID_NULL, HRESULT_FROM_WIN32( lRet ), _Module.GetResourceInstance() ); + + } + + int ret = AddFontResource( m_bstrFileName ); + ::SendMessage( HWND_BROADCAST, WM_FONTCHANGE, 0, 0 ); + + return S_OK; +} + +STDMETHODIMP CFontInfo::Uninstall(VARIANT_BOOL bPermanent) +{ + if ( _bstr_t("") == m_bstrFileName ) + return AtlReportError( CLSID_FontInfo, + IDERR_NoFileName, GUID_NULL, E_FAIL, _Module.GetResourceInstance() ); + + if ( VARIANT_TRUE == bPermanent ) + { + // It's up to the user to ensure that they really + // want to remove the font before calling this method + CRegKey reg; + LONG lRet = 0; + + lRet = OpenFontsKey(reg, KEY_WRITE ); + if ( ERROR_SUCCESS != lRet ) + return AtlReportError( CLSID_FontInfo, + IDERR_OpenFontsKey, GUID_NULL, HRESULT_FROM_WIN32( lRet ), _Module.GetResourceInstance() ); + + lRet = reg.DeleteValue( GetRegistryFontName() ); + if ( ERROR_SUCCESS != lRet ) + return AtlReportError( CLSID_FontInfo, + IDERR_Uninstall, GUID_NULL, HRESULT_FROM_WIN32( lRet ), _Module.GetResourceInstance() ); + + } + + int ret = RemoveFontResource( m_bstrFileName ); + ::SendMessage( HWND_BROADCAST, WM_FONTCHANGE, 0, 0 ); + + return S_OK; +} diff --git a/FontInfo.h b/FontInfo.h new file mode 100644 index 0000000..7385c33 --- /dev/null +++ b/FontInfo.h @@ -0,0 +1,111 @@ +// FontInfo.h : Declaration of the CFontInfo + +#ifndef __FONTINFO_H_ +#define __FONTINFO_H_ + +#include "resource.h" // main symbols + +///////////////////////////////////////////////////////////////////////////// +// CFontInfo +class ATL_NO_VTABLE CFontInfo : + public CComObjectRootEx, + public CComCoClass, + public ISupportErrorInfo, + public IDispatchImpl +{ +public: + CFontInfo() + { + OSVERSIONINFO info = {0}; + info.dwOSVersionInfoSize = sizeof( OSVERSIONINFO ); + GetVersionEx( &info ); + + if ( VER_PLATFORM_WIN32_NT == info.dwPlatformId ) + m_strFontsKey = _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts"); + else + m_strFontsKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Fonts"); + + Initialize(); + } + +DECLARE_REGISTRY_RESOURCEID(IDR_FONTINFO) + +BEGIN_COM_MAP(CFontInfo) + COM_INTERFACE_ENTRY(ITrueTypeFontInfo) + COM_INTERFACE_ENTRY(IDispatch) + COM_INTERFACE_ENTRY(ISupportErrorInfo) +END_COM_MAP() + +// Attributes +protected: + _bstr_t m_bstrFileName; + _bstr_t m_bstrCopyright; + _bstr_t m_bstrFamily; + _bstr_t m_bstrID; + _bstr_t m_bstrName; + _bstr_t m_bstrPostscriptName; + _bstr_t m_bstrSubfamily; + _bstr_t m_bstrTrademark; + _bstr_t m_bstrVersion; + static LPCTSTR m_strFontsKey; + +// Inline helpers +public: + inline void Initialize(); + inline _bstr_t GetRegistryFontName() const; + inline static LONG OpenFontsKey( CRegKey& reg, REGSAM samDesired = KEY_ALL_ACCESS ); + + +// ISupportsErrorInfo +public: + STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid); + +// ITrueTypeFontInfo +public: + STDMETHOD(Uninstall)(/*[in, optional]*/ VARIANT_BOOL bPermanent); + STDMETHOD(Install)(/*[in, optional]*/ VARIANT_BOOL bPermanent); + STDMETHOD(GetFontsDirectory)(/*[out, retval]*/ BSTR* pVal); + STDMETHOD(get_RegisteredFileName)(/*[out, retval]*/ BSTR *pVal); + STDMETHOD(get_Version)(/*[out, retval]*/ BSTR *pVal); + STDMETHOD(get_Trademark)(/*[out, retval]*/ BSTR *pVal); + STDMETHOD(get_Subfamily)(/*[out, retval]*/ BSTR *pVal); + STDMETHOD(get_PostscriptName)(/*[out, retval]*/ BSTR *pVal); + STDMETHOD(get_Name)(/*[out, retval]*/ BSTR *pVal); + STDMETHOD(get_ID)(/*[out, retval]*/ BSTR *pVal); + STDMETHOD(get_Family)(/*[out, retval]*/ BSTR *pVal); + STDMETHOD(get_Copyright)(/*[out, retval]*/ BSTR *pVal); + STDMETHOD(get_FileName)(/*[out, retval]*/ BSTR *pVal); + STDMETHOD(put_FileName)(/*[in]*/ BSTR newVal); + STDMETHOD(get__FileName)(/*[out, retval]*/ BSTR *pVal); + STDMETHOD(put__FileName)(/*[in]*/ BSTR newVal); +}; + +/////////////////////////////////////////////////////////////////////////////////// +// Inline Helpers +/////////////////////////////////////////////////////////////////////////////////// + +inline void CFontInfo::Initialize() +{ + m_bstrFileName = ""; + m_bstrCopyright = ""; + m_bstrFamily = ""; + m_bstrID = ""; + m_bstrName = ""; + m_bstrPostscriptName = ""; + m_bstrSubfamily = ""; + m_bstrTrademark = ""; + m_bstrVersion = ""; +} + +inline _bstr_t CFontInfo::GetRegistryFontName() const +{ + return m_bstrName + _T(" (TrueType)"); +} + +inline LONG CFontInfo::OpenFontsKey( CRegKey& reg, REGSAM samDesired /* = KEY_ALL_ACCESS */ ) +{ + return reg.Open( HKEY_LOCAL_MACHINE, m_strFontsKey, samDesired ); +} + + +#endif //__FONTINFO_H_ diff --git a/FontInfo.rgs b/FontInfo.rgs new file mode 100644 index 0000000..c390f0e --- /dev/null +++ b/FontInfo.rgs @@ -0,0 +1,24 @@ +HKCR +{ + FontInfo.FontInfo.1 = s 'FontInfo Class' + { + CLSID = s '{F6CC491E-26B2-11D1-ACED-204C4F4F5020}' + } + FontInfo.FontInfo = s 'FontInfo Class' + { + CurVer = s 'FontInfo.FontInfo.1' + } + NoRemove CLSID + { + ForceRemove {F6CC491E-26B2-11D1-ACED-204C4F4F5020} = s 'FontInfo Class' + { + ProgID = s 'FontInfo.FontInfo.1' + VersionIndependentProgID = s 'FontInfo.FontInfo' + ForceRemove 'Programmable' + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Apartment' + } + } + } +} diff --git a/StdAfx.cpp b/StdAfx.cpp new file mode 100644 index 0000000..a5eea17 --- /dev/null +++ b/StdAfx.cpp @@ -0,0 +1,12 @@ +// stdafx.cpp : source file that includes just the standard includes +// stdafx.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + +#ifdef _ATL_STATIC_REGISTRY +#include +#include +#endif + +#include diff --git a/StdAfx.h b/StdAfx.h new file mode 100644 index 0000000..eb774c3 --- /dev/null +++ b/StdAfx.h @@ -0,0 +1,35 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, +// but are changed infrequently + +#if !defined(AFX_STDAFX_H__F6CC4914_26B2_11D1_ACED_204C4F4F5020__INCLUDED_) +#define AFX_STDAFX_H__F6CC4914_26B2_11D1_ACED_204C4F4F5020__INCLUDED_ + +#if _MSC_VER >= 1000 +#pragma once +#endif // _MSC_VER >= 1000 + +#define STRICT + + +#define _WIN32_WINNT 0x0400 +#define _ATL_APARTMENT_THREADED + + +#include +//You may derive a class from CComModule and use it if you want to override +//something, but do not change the name of _Module +extern CComModule _Module; +#include + + +#include // Windows shell +#include // Compiler COM suport +#include // Standard file streams +#include // ISO standard logic keywords +#include "TTF.h" // TrueType header + +//{{AFX_INSERT_LOCATION}} +// Microsoft Developer Studio will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_STDAFX_H__F6CC4914_26B2_11D1_ACED_204C4F4F5020__INCLUDED) diff --git a/TTF.h b/TTF.h new file mode 100644 index 0000000..2513cc1 --- /dev/null +++ b/TTF.h @@ -0,0 +1,67 @@ +// TTF.h +////////////////////////////////////////////////////////////////////////////////////////////////////// +// Macros for TrueType portability +#define FS_2BYTE(p) ( ((unsigned short)((p)[0]) << 8) | (p)[1]) +#define FS_4BYTE(p) ( FS_2BYTE((p)+2) | ( (FS_2BYTE(p)+0L) << 16) ) +#define SWAPW(a) ((short) FS_2BYTE( (unsigned char *)(&a) )) +#define SWAPL(a) ((long) FS_4BYTE( (unsigned char *)(&a) )) + + +typedef short int16; +typedef unsigned short uint16; +typedef long int32; +typedef unsigned long uint32; +typedef long sfnt_TableTag; + +typedef struct { + uint16 platformID; + uint16 specificID; + uint16 languageID; + uint16 nameID; + uint16 length; + uint16 offset; +} sfnt_NameRecord; + +typedef struct { + uint16 format; + uint16 count; + uint16 stringOffset; +} sfnt_NamingTable; + +typedef struct { + sfnt_TableTag tag; + uint32 checkSum; + uint32 offset; + uint32 length; +} sfnt_DirectoryEntry; + +typedef struct { + int32 version; /* 0x10000 (1.0) */ + uint16 numOffsets; /* number of tables */ + uint16 searchRange; /* (max2 <= numOffsets)*16 */ + uint16 entrySelector; /* log2 (max2 <= numOffsets) */ + uint16 rangeShift; /* numOffsets*16-searchRange*/ + sfnt_DirectoryEntry table[1]; /* table[numOffsets] */ +} sfnt_OffsetTable; + +#define OFFSETTABLESIZE 12 /* not including any entries */ +#define tag_NamingTable 0x656d616e /* 'name' */ + +namespace TTF +{ + enum + { AppleUnicode = 0, + Macintosh = 1, + ISO = 2, + Microsoft = 3 }; + + enum + { Copyright = 0, + Family = 1, + Subfamily = 2, + ID = 3, + Name = 4, + Version = 5, + PostscriptName = 6, + Trademark = 7 }; +}; \ No newline at end of file diff --git a/TtfInfo Client/FontInfo.frm b/TtfInfo Client/FontInfo.frm new file mode 100644 index 0000000..5a788f8 --- /dev/null +++ b/TtfInfo Client/FontInfo.frm @@ -0,0 +1,321 @@ +VERSION 5.00 +Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.1#0"; "COMDLG32.OCX" +Begin VB.Form frmFontInfo + BorderStyle = 1 'Fixed Single + Caption = "FontInfo" + ClientHeight = 5490 + ClientLeft = 45 + ClientTop = 330 + ClientWidth = 7620 + LinkTopic = "Form1" + MaxButton = 0 'False + ScaleHeight = 5490 + ScaleWidth = 7620 + StartUpPosition = 3 'Windows Default + Begin VB.CommandButton cmdView + Caption = "View..." + Height = 375 + Left = 6240 + TabIndex = 11 + Top = 720 + Width = 1215 + End + Begin VB.CommandButton cmdUninstall + Caption = "Uninstall" + Height = 375 + Left = 6240 + TabIndex = 10 + Top = 1920 + Width = 1215 + End + Begin VB.CommandButton cmdInstall + Caption = "Install" + Height = 375 + Left = 6240 + TabIndex = 9 + Top = 1320 + Width = 1215 + End + Begin MSComDlg.CommonDialog cdlFont + Left = 6960 + Top = 2520 + _ExtentX = 847 + _ExtentY = 847 + _Version = 327680 + CancelError = -1 'True + DefaultExt = "*.ttf" + DialogTitle = "Choose A Font" + Filter = "TrueType Fonts (*.ttf) | *.ttf" + InitDir = "C:\" + End + Begin VB.CommandButton cmdSelect + Caption = "Select..." + Height = 375 + Left = 6240 + TabIndex = 0 + Top = 120 + Width = 1215 + End + Begin VB.Label Label8 + AutoSize = -1 'True + Caption = "Copyright:" + Height = 195 + Left = 240 + TabIndex = 19 + Top = 4440 + Width = 705 + End + Begin VB.Label Label7 + AutoSize = -1 'True + Caption = "Version:" + Height = 195 + Left = 240 + TabIndex = 18 + Top = 600 + Width = 570 + End + Begin VB.Label Label6 + AutoSize = -1 'True + Caption = "Trademark:" + Height = 195 + Left = 240 + TabIndex = 17 + Top = 3600 + Width = 810 + End + Begin VB.Label Label5 + AutoSize = -1 'True + Caption = "Postscript Name:" + Height = 195 + Left = 240 + TabIndex = 16 + Top = 3120 + Width = 1200 + End + Begin VB.Label Label4 + AutoSize = -1 'True + Caption = "ID:" + Height = 195 + Left = 240 + TabIndex = 15 + Top = 2640 + Width = 210 + End + Begin VB.Label Label3 + AutoSize = -1 'True + Caption = "Subfamily:" + Height = 195 + Left = 240 + TabIndex = 14 + Top = 2160 + Width = 720 + End + Begin VB.Label Label2 + AutoSize = -1 'True + Caption = "Family:" + Height = 195 + Left = 240 + TabIndex = 13 + Top = 1680 + Width = 480 + End + Begin VB.Label Label1 + AutoSize = -1 'True + Caption = "Name:" + Height = 195 + Left = 240 + TabIndex = 12 + Top = 120 + Width = 465 + End + Begin VB.Label lblVersion + BackColor = &H80000005& + Caption = "lblVersion" + ForeColor = &H80000008& + Height = 915 + Left = 1560 + TabIndex = 8 + Top = 600 + Width = 4455 + End + Begin VB.Label lblTrademark + BackColor = &H80000005& + Caption = "lblTrademark" + ForeColor = &H80000008& + Height = 615 + Left = 1560 + TabIndex = 7 + Top = 3600 + Width = 4455 + End + Begin VB.Label lblSubfamily + BackColor = &H80000005& + Caption = "lblSubfamily" + ForeColor = &H80000008& + Height = 255 + Left = 1560 + TabIndex = 6 + Top = 2160 + Width = 4455 + End + Begin VB.Label lblPostscriptName + BackColor = &H80000005& + Caption = "lblPostscriptName" + ForeColor = &H80000008& + Height = 255 + Left = 1560 + TabIndex = 5 + Top = 3120 + Width = 4455 + End + Begin VB.Label lblName + BackColor = &H80000005& + Caption = "lblName" + ForeColor = &H80000008& + Height = 255 + Left = 1560 + TabIndex = 4 + Top = 120 + Width = 4455 + End + Begin VB.Label lblID + BackColor = &H80000005& + Caption = "lblID" + ForeColor = &H80000008& + Height = 255 + Left = 1560 + TabIndex = 3 + Top = 2640 + Width = 4455 + End + Begin VB.Label lblFamily + BackColor = &H80000005& + Caption = "lblFamily" + ForeColor = &H80000008& + Height = 255 + Left = 1560 + TabIndex = 2 + Top = 1680 + Width = 4455 + End + Begin VB.Label lblCopyright + BackColor = &H80000005& + Caption = "lblCopyright" + ForeColor = &H80000008& + Height = 915 + Left = 1560 + TabIndex = 1 + Top = 4440 + Width = 4455 + End +End +Attribute VB_Name = "frmFontInfo" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False +Option Explicit +Private f As TtfInfoLib.FontInfo + +Private Sub cmdInstall_Click() + On Error GoTo err_Unexpected + + If f = "" Then + MsgBox "Pick a font first" + Exit Sub + End If + + If f.RegisteredFileName <> "" Then + MsgBox "A font with this name is already installed" & _ + vbCrLf & f.RegisteredFileName + Exit Sub + End If + + f.Install True + Exit Sub + +err_Unexpected: + MsgBox Err.Description +End Sub + +Private Sub cmdSelect_Click() + On Error GoTo err_Cancel + cdlFont.ShowOpen + + On Error GoTo err_Create + Set f = New TtfInfoLib.FontInfo + + On Error GoTo err_FileName + ' FileName is the default property + f = cdlFont.filename + + On Error GoTo err_Unexpected + With f + Caption = "FontInfo - " & .filename + + lblCopyright = .Copyright + lblFamily = .Family + lblID = .ID + lblName = .Name + lblPostscriptName = .PostscriptName + lblSubfamily = .Subfamily + lblTrademark = .Trademark + lblVersion = .Version + End With + + Exit Sub + + +err_Create: +err_FileName: +err_Unexpected: + MsgBox Err.Description +err_Cancel: + Exit Sub +End Sub + +Private Sub cmdUninstall_Click() + On Error GoTo err_Unexpected + + If f.RegisteredFileName = "" Then + MsgBox "This font is not installed" + Exit Sub + End If + + If f.RegisteredFileName <> f.filename Then + MsgBox "The font that you have picked is installed, but a different file has been registered" _ + & vbCrLf & f.RegisteredFileName + Exit Sub + End If + + f.Uninstall True + Exit Sub + +err_Unexpected: + MsgBox Err.Description +End Sub + +Private Sub cmdView_Click() + On Error GoTo err_Unexpected + + Dim frm As New frmFontView + With frm + Set .DisplayFont = f + .Show + End With + Exit Sub + +err_Unexpected: + MsgBox Err.Description +End Sub + +Private Sub Form_Load() + On Error GoTo err_Unexpected + + Set f = New TtfInfoLib.FontInfo + cdlFont.InitDir = f.GetFontsDirectory() + Exit Sub + +err_Unexpected: + MsgBox Err.Description +End Sub diff --git a/TtfInfo Client/FontInfo.vbp b/TtfInfo Client/FontInfo.vbp new file mode 100644 index 0000000..d7f6fb2 --- /dev/null +++ b/TtfInfo Client/FontInfo.vbp @@ -0,0 +1,37 @@ +Type=Exe +Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\..\..\System32\STDOLE2.TLB#OLE Automation +Object={F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.1#0; COMDLG32.OCX +Reference=*\G{F6CC4910-26B2-11D1-ACED-204C4F4F5020}#1.0#0#\\GONZO\Desktop\TTF\TtfInfo\Debug\TtfInfo.dll#TtfInfo 1.0 Type Library +Form=FontInfo.frm +Form=FontView.frm +Object={3B7C8863-D78F-101B-B9B5-04021C009402}#1.1#0; RICHTX32.OCX +IconForm="frmFontInfo" +Startup="frmFontInfo" +HelpFile="" +Title="FontInfo" +ExeName32="FontInfo.exe" +Path32="..\..\..\..\..\Administrator\Desktop\TTF\TtfInfo\VBClient" +Command32="" +Name="FontInfo" +HelpContextID="0" +CompatibleMode="0" +MajorVer=1 +MinorVer=0 +RevisionVer=0 +AutoIncrementVer=0 +ServerSupportFiles=0 +VersionCompanyName="Gonzo ESM" +CompilationType=0 +OptimizationType=0 +FavorPentiumPro(tm)=-1 +CodeViewDebugInfo=-1 +NoAliasing=0 +BoundsCheck=0 +OverflowCheck=0 +FlPointCheck=0 +FDIVCheck=0 +UnroundedFP=0 +StartMode=0 +Unattended=0 +ThreadPerObject=0 +MaxNumberOfThreads=1 diff --git a/TtfInfo Client/FontInfo.vbw b/TtfInfo Client/FontInfo.vbw new file mode 100644 index 0000000..fe614c7 --- /dev/null +++ b/TtfInfo Client/FontInfo.vbw @@ -0,0 +1,2 @@ +frmFontInfo = 160, 185, 685, 625, C, 17, 12, 551, 626, C +frmFontView = 88, 88, 613, 528, , 44, 44, 569, 484, diff --git a/TtfInfo Client/FontView.frm b/TtfInfo Client/FontView.frm new file mode 100644 index 0000000..f62c912 --- /dev/null +++ b/TtfInfo Client/FontView.frm @@ -0,0 +1,78 @@ +VERSION 5.00 +Object = "{3B7C8863-D78F-101B-B9B5-04021C009402}#1.1#0"; "RICHTX32.OCX" +Begin VB.Form frmFontView + BorderStyle = 1 'Fixed Single + Caption = "FontView" + ClientHeight = 4410 + ClientLeft = 45 + ClientTop = 330 + ClientWidth = 7500 + LinkTopic = "Form1" + MaxButton = 0 'False + ScaleHeight = 4410 + ScaleWidth = 7500 + StartUpPosition = 3 'Windows Default + Begin RichTextLib.RichTextBox rtbFontView + Height = 4095 + Left = 120 + TabIndex = 0 + Top = 120 + Width = 7215 + _ExtentX = 12726 + _ExtentY = 7223 + _Version = 327680 + ReadOnly = -1 'True + OLEDragMode = 0 + OLEDropMode = 0 + TextRTF = $"FontView.frx":0000 + End +End +Attribute VB_Name = "frmFontView" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False +Option Explicit +Public DisplayFont As TtfInfoLib.FontInfo + +Private Sub Form_Load() +On Error GoTo err_Unexpected + ' Temporarily install the font + DisplayFont.Install False + Caption = "FontView - " & DisplayFont.filename + + With rtbFontView + .Text = "" + + .SelFontName = "Times" + .SelFontSize = 20 + .SelText = DisplayFont.Name & vbCrLf + + .SelFontSize = 10 + .SelText = "Version: " & DisplayFont.Version & vbCrLf + + .SelFontName = DisplayFont.Name + .SelFontSize = 24 + .SelText = "abcdefghijklmnopqrstuvwxyz" & vbCrLf + .SelText = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" & vbCrLf + .SelText = "1234567890 !'£$%^&*();':.," + + .SelStart = 0 + End With + Exit Sub + +err_Unexpected: + MsgBox Err.Description +End Sub + +Private Sub Form_Unload(Cancel As Integer) +On Error GoTo err_Unexpected + ' Uninstall the font + ' (This has no effect if the font is permanently installed) + DisplayFont.Uninstall False + Exit Sub + +err_Unexpected: + MsgBox Err.Description +End Sub + diff --git a/TtfInfo Client/FontView.frx b/TtfInfo Client/FontView.frx new file mode 100644 index 0000000..523de71 Binary files /dev/null and b/TtfInfo Client/FontView.frx differ diff --git a/TtfInfo.cpp b/TtfInfo.cpp new file mode 100644 index 0000000..e45d364 --- /dev/null +++ b/TtfInfo.cpp @@ -0,0 +1,73 @@ +// TtfInfo.cpp : Implementation of DLL Exports. + + +// Note: Proxy/Stub Information +// To build a separate proxy/stub DLL, +// run nmake -f TtfInfops.mk in the project directory. + +#include "stdafx.h" +#include "resource.h" +#include "initguid.h" +#include "TtfInfo.h" + +#include "TtfInfo_i.c" +#include "FontInfo.h" + + +CComModule _Module; + +BEGIN_OBJECT_MAP(ObjectMap) + OBJECT_ENTRY(CLSID_FontInfo, CFontInfo) +END_OBJECT_MAP() + +///////////////////////////////////////////////////////////////////////////// +// DLL Entry Point + +extern "C" +BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/) +{ + if (dwReason == DLL_PROCESS_ATTACH) + { + _Module.Init(ObjectMap, hInstance); + DisableThreadLibraryCalls(hInstance); + } + else if (dwReason == DLL_PROCESS_DETACH) + _Module.Term(); + return TRUE; // ok +} + +///////////////////////////////////////////////////////////////////////////// +// Used to determine whether the DLL can be unloaded by OLE + +STDAPI DllCanUnloadNow(void) +{ + return (_Module.GetLockCount()==0) ? S_OK : S_FALSE; +} + +///////////////////////////////////////////////////////////////////////////// +// Returns a class factory to create an object of the requested type + +STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv) +{ + return _Module.GetClassObject(rclsid, riid, ppv); +} + +///////////////////////////////////////////////////////////////////////////// +// DllRegisterServer - Adds entries to the system registry + +STDAPI DllRegisterServer(void) +{ + // registers object, typelib and all interfaces in typelib + return _Module.RegisterServer(TRUE); +} + +///////////////////////////////////////////////////////////////////////////// +// DllUnregisterServer - Removes entries from the system registry + +STDAPI DllUnregisterServer(void) +{ + _Module.UnregisterServer(); + return S_OK; +} + + diff --git a/TtfInfo.def b/TtfInfo.def new file mode 100644 index 0000000..023ba8e --- /dev/null +++ b/TtfInfo.def @@ -0,0 +1,9 @@ +; TtfInfo.def : Declares the module parameters. + +LIBRARY "TtfInfo.DLL" + +EXPORTS + DllCanUnloadNow @1 PRIVATE + DllGetClassObject @2 PRIVATE + DllRegisterServer @3 PRIVATE + DllUnregisterServer @4 PRIVATE diff --git a/TtfInfo.dsp b/TtfInfo.dsp new file mode 100644 index 0000000..f9de504 --- /dev/null +++ b/TtfInfo.dsp @@ -0,0 +1,437 @@ +# Microsoft Developer Studio Project File - Name="TtfInfo" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=TtfInfo - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "TtfInfo.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "TtfInfo.mak" CFG="TtfInfo - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "TtfInfo - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "TtfInfo - Win32 Unicode Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "TtfInfo - Win32 Release MinSize" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "TtfInfo - Win32 Release MinDependency" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "TtfInfo - Win32 Unicode Release MinSize" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "TtfInfo - Win32 Unicode Release MinDependency" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "TtfInfo - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /Yu"stdafx.h" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept +# Begin Custom Build - Registering ActiveX Control... +OutDir=.\Debug +TargetPath=.\Debug\TtfInfo.dll +InputPath=.\Debug\TtfInfo.dll +SOURCE="$(InputPath)" + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + regsvr32 /s /c "$(TargetPath)" + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + +# End Custom Build + +!ELSEIF "$(CFG)" == "TtfInfo - Win32 Unicode Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "DebugU" +# PROP BASE Intermediate_Dir "DebugU" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "DebugU" +# PROP Intermediate_Dir "DebugU" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /Yu"stdafx.h" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept +# Begin Custom Build - Registering ActiveX Control... +OutDir=.\DebugU +TargetPath=.\DebugU\TtfInfo.dll +InputPath=.\DebugU\TtfInfo.dll +SOURCE="$(InputPath)" + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + regsvr32 /s /c "$(TargetPath)" + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + +# End Custom Build + +!ELSEIF "$(CFG)" == "TtfInfo - Win32 Release MinSize" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "ReleaseMinSize" +# PROP BASE Intermediate_Dir "ReleaseMinSize" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "ReleaseMinSize" +# PROP Intermediate_Dir "ReleaseMinSize" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /MT /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_ATL_DLL" /Yu"stdafx.h" /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# Begin Custom Build - Registering ActiveX Control... +OutDir=.\ReleaseMinSize +TargetPath=.\ReleaseMinSize\TtfInfo.dll +InputPath=.\ReleaseMinSize\TtfInfo.dll +SOURCE="$(InputPath)" + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + regsvr32 /s /c "$(TargetPath)" + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + +# End Custom Build + +!ELSEIF "$(CFG)" == "TtfInfo - Win32 Release MinDependency" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "ReleaseMinDependency" +# PROP BASE Intermediate_Dir "ReleaseMinDependency" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "ReleaseMinDependency" +# PROP Intermediate_Dir "ReleaseMinDependency" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /MT /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# Begin Custom Build - Registering ActiveX Control... +OutDir=.\ReleaseMinDependency +TargetPath=.\ReleaseMinDependency\TtfInfo.dll +InputPath=.\ReleaseMinDependency\TtfInfo.dll +SOURCE="$(InputPath)" + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + regsvr32 /s /c "$(TargetPath)" + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + +# End Custom Build + +!ELSEIF "$(CFG)" == "TtfInfo - Win32 Unicode Release MinSize" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "ReleaseUMinSize" +# PROP BASE Intermediate_Dir "ReleaseUMinSize" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "ReleaseUMinSize" +# PROP Intermediate_Dir "ReleaseUMinSize" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /MT /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# Begin Custom Build - Registering ActiveX Control... +OutDir=.\ReleaseUMinSize +TargetPath=.\ReleaseUMinSize\TtfInfo.dll +InputPath=.\ReleaseUMinSize\TtfInfo.dll +SOURCE="$(InputPath)" + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + regsvr32 /s /c "$(TargetPath)" + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + +# End Custom Build + +!ELSEIF "$(CFG)" == "TtfInfo - Win32 Unicode Release MinDependency" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "ReleaseUMinDependency" +# PROP BASE Intermediate_Dir "ReleaseUMinDependency" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "ReleaseUMinDependency" +# PROP Intermediate_Dir "ReleaseUMinDependency" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /MT /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# Begin Custom Build - Registering ActiveX Control... +OutDir=.\ReleaseUMinDependency +TargetPath=.\ReleaseUMinDependency\TtfInfo.dll +InputPath=.\ReleaseUMinDependency\TtfInfo.dll +SOURCE="$(InputPath)" + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + regsvr32 /s /c "$(TargetPath)" + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + +# End Custom Build + +!ENDIF + +# Begin Target + +# Name "TtfInfo - Win32 Debug" +# Name "TtfInfo - Win32 Unicode Debug" +# Name "TtfInfo - Win32 Release MinSize" +# Name "TtfInfo - Win32 Release MinDependency" +# Name "TtfInfo - Win32 Unicode Release MinSize" +# Name "TtfInfo - Win32 Unicode Release MinDependency" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\FontInfo.cpp +# End Source File +# Begin Source File + +SOURCE=.\StdAfx.cpp +# ADD CPP /Yc"stdafx.h" +# End Source File +# Begin Source File + +SOURCE=.\TtfInfo.cpp +# End Source File +# Begin Source File + +SOURCE=.\TtfInfo.def +# End Source File +# Begin Source File + +SOURCE=.\TtfInfo.idl + +!IF "$(CFG)" == "TtfInfo - Win32 Debug" + +# PROP Ignore_Default_Tool 1 +# Begin Custom Build - Performing MIDL step +InputPath=.\TtfInfo.idl + +BuildCmds= \ + midl /Oicf /h "TtfInfo.h" /iid "TtfInfo_i.c" "TtfInfo.idl" + +".\TtfInfo.tlb" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\TtfInfo.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\TtfInfo_i.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ELSEIF "$(CFG)" == "TtfInfo - Win32 Unicode Debug" + +# PROP Ignore_Default_Tool 1 +# Begin Custom Build - Performing MIDL step +InputPath=.\TtfInfo.idl + +BuildCmds= \ + midl /Oicf /h "TtfInfo.h" /iid "TtfInfo_i.c" "TtfInfo.idl" + +".\TtfInfo.tlb" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\TtfInfo.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\TtfInfo_i.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ELSEIF "$(CFG)" == "TtfInfo - Win32 Release MinSize" + +# PROP Ignore_Default_Tool 1 +# Begin Custom Build - Performing MIDL step +InputPath=.\TtfInfo.idl + +BuildCmds= \ + midl /Oicf /h "TtfInfo.h" /iid "TtfInfo_i.c" "TtfInfo.idl" + +".\TtfInfo.tlb" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\TtfInfo.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\TtfInfo_i.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ELSEIF "$(CFG)" == "TtfInfo - Win32 Release MinDependency" + +# PROP Ignore_Default_Tool 1 +# Begin Custom Build - Performing MIDL step +InputPath=.\TtfInfo.idl + +BuildCmds= \ + midl /Oicf /h "TtfInfo.h" /iid "TtfInfo_i.c" "TtfInfo.idl" + +".\TtfInfo.tlb" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\TtfInfo.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\TtfInfo_i.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ELSEIF "$(CFG)" == "TtfInfo - Win32 Unicode Release MinSize" + +# PROP Ignore_Default_Tool 1 +# Begin Custom Build - Performing MIDL step +InputPath=.\TtfInfo.idl + +BuildCmds= \ + midl /Oicf /h "TtfInfo.h" /iid "TtfInfo_i.c" "TtfInfo.idl" + +".\TtfInfo.tlb" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\TtfInfo.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\TtfInfo_i.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ELSEIF "$(CFG)" == "TtfInfo - Win32 Unicode Release MinDependency" + +# PROP Ignore_Default_Tool 1 +# Begin Custom Build - Performing MIDL step +InputPath=.\TtfInfo.idl + +BuildCmds= \ + midl /Oicf /h "TtfInfo.h" /iid "TtfInfo_i.c" "TtfInfo.idl" + +".\TtfInfo.tlb" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\TtfInfo.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\TtfInfo_i.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\TtfInfo.rc +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\FontInfo.h +# End Source File +# Begin Source File + +SOURCE=.\Resource.h +# End Source File +# Begin Source File + +SOURCE=.\StdAfx.h +# End Source File +# Begin Source File + +SOURCE=.\TTF.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=.\FontInfo.rgs +# End Source File +# End Target +# End Project diff --git a/TtfInfo.dsw b/TtfInfo.dsw new file mode 100644 index 0000000..b8add7c --- /dev/null +++ b/TtfInfo.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "TtfInfo"=".\TtfInfo.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/TtfInfo.h b/TtfInfo.h new file mode 100644 index 0000000..132d85d --- /dev/null +++ b/TtfInfo.h @@ -0,0 +1,556 @@ +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + +/* File created by MIDL compiler version 3.01.75 */ +/* at Sat Sep 06 15:15:40 1997 + */ +/* Compiler settings for TtfInfo.idl: + Oicf (OptLev=i2), W1, Zp8, env=Win32, ms_ext, c_ext + error checks: none +*/ +//@@MIDL_FILE_HEADING( ) +#include "rpc.h" +#include "rpcndr.h" +#ifndef COM_NO_WINDOWS_H +#include "windows.h" +#include "ole2.h" +#endif /*COM_NO_WINDOWS_H*/ + +#ifndef __TtfInfo_h__ +#define __TtfInfo_h__ + +#ifdef __cplusplus +extern "C"{ +#endif + +/* Forward Declarations */ + +#ifndef __ITrueTypeFontInfo_FWD_DEFINED__ +#define __ITrueTypeFontInfo_FWD_DEFINED__ +typedef interface ITrueTypeFontInfo ITrueTypeFontInfo; +#endif /* __ITrueTypeFontInfo_FWD_DEFINED__ */ + + +#ifndef __FontInfo_FWD_DEFINED__ +#define __FontInfo_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class FontInfo FontInfo; +#else +typedef struct FontInfo FontInfo; +#endif /* __cplusplus */ + +#endif /* __FontInfo_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "oaidl.h" +#include "ocidl.h" + +void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t); +void __RPC_USER MIDL_user_free( void __RPC_FAR * ); + +#ifndef __ITrueTypeFontInfo_INTERFACE_DEFINED__ +#define __ITrueTypeFontInfo_INTERFACE_DEFINED__ + +/**************************************** + * Generated header for interface: ITrueTypeFontInfo + * at Sat Sep 06 15:15:40 1997 + * using MIDL 3.01.75 + ****************************************/ +/* [unique][helpstring][dual][uuid][object] */ + + + +EXTERN_C const IID IID_ITrueTypeFontInfo; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + interface DECLSPEC_UUID("F6CC491D-26B2-11D1-ACED-204C4F4F5020") + ITrueTypeFontInfo : public IDispatch + { + public: + virtual /* [helpstring][id][propget][hidden] */ HRESULT STDMETHODCALLTYPE get__FileName( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propput][hidden] */ HRESULT STDMETHODCALLTYPE put__FileName( + /* [in] */ BSTR newVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_FileName( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_FileName( + /* [in] */ BSTR newVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Copyright( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Family( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_ID( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Name( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_PostscriptName( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Subfamily( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Trademark( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Version( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_RegisteredFileName( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetFontsDirectory( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Install( + /* [optional][in] */ VARIANT_BOOL bPermanent) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Uninstall( + /* [optional][in] */ VARIANT_BOOL bPermanent) = 0; + + }; + +#else /* C style interface */ + + typedef struct ITrueTypeFontInfoVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( + ITrueTypeFontInfo __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( + ITrueTypeFontInfo __RPC_FAR * This); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( + ITrueTypeFontInfo __RPC_FAR * This); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )( + ITrueTypeFontInfo __RPC_FAR * This, + /* [out] */ UINT __RPC_FAR *pctinfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )( + ITrueTypeFontInfo __RPC_FAR * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )( + ITrueTypeFontInfo __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames, + /* [in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID __RPC_FAR *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )( + ITrueTypeFontInfo __RPC_FAR * This, + /* [in] */ DISPID dispIdMember, + /* [in] */ REFIID riid, + /* [in] */ LCID lcid, + /* [in] */ WORD wFlags, + /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams, + /* [out] */ VARIANT __RPC_FAR *pVarResult, + /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo, + /* [out] */ UINT __RPC_FAR *puArgErr); + + /* [helpstring][id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get__FileName )( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put__FileName )( + ITrueTypeFontInfo __RPC_FAR * This, + /* [in] */ BSTR newVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_FileName )( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_FileName )( + ITrueTypeFontInfo __RPC_FAR * This, + /* [in] */ BSTR newVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Copyright )( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Family )( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ID )( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Name )( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PostscriptName )( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Subfamily )( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Trademark )( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Version )( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_RegisteredFileName )( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetFontsDirectory )( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Install )( + ITrueTypeFontInfo __RPC_FAR * This, + /* [optional][in] */ VARIANT_BOOL bPermanent); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Uninstall )( + ITrueTypeFontInfo __RPC_FAR * This, + /* [optional][in] */ VARIANT_BOOL bPermanent); + + END_INTERFACE + } ITrueTypeFontInfoVtbl; + + interface ITrueTypeFontInfo + { + CONST_VTBL struct ITrueTypeFontInfoVtbl __RPC_FAR *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ITrueTypeFontInfo_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define ITrueTypeFontInfo_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define ITrueTypeFontInfo_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define ITrueTypeFontInfo_GetTypeInfoCount(This,pctinfo) \ + (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) + +#define ITrueTypeFontInfo_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) + +#define ITrueTypeFontInfo_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) + +#define ITrueTypeFontInfo_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) + + +#define ITrueTypeFontInfo_get__FileName(This,pVal) \ + (This)->lpVtbl -> get__FileName(This,pVal) + +#define ITrueTypeFontInfo_put__FileName(This,newVal) \ + (This)->lpVtbl -> put__FileName(This,newVal) + +#define ITrueTypeFontInfo_get_FileName(This,pVal) \ + (This)->lpVtbl -> get_FileName(This,pVal) + +#define ITrueTypeFontInfo_put_FileName(This,newVal) \ + (This)->lpVtbl -> put_FileName(This,newVal) + +#define ITrueTypeFontInfo_get_Copyright(This,pVal) \ + (This)->lpVtbl -> get_Copyright(This,pVal) + +#define ITrueTypeFontInfo_get_Family(This,pVal) \ + (This)->lpVtbl -> get_Family(This,pVal) + +#define ITrueTypeFontInfo_get_ID(This,pVal) \ + (This)->lpVtbl -> get_ID(This,pVal) + +#define ITrueTypeFontInfo_get_Name(This,pVal) \ + (This)->lpVtbl -> get_Name(This,pVal) + +#define ITrueTypeFontInfo_get_PostscriptName(This,pVal) \ + (This)->lpVtbl -> get_PostscriptName(This,pVal) + +#define ITrueTypeFontInfo_get_Subfamily(This,pVal) \ + (This)->lpVtbl -> get_Subfamily(This,pVal) + +#define ITrueTypeFontInfo_get_Trademark(This,pVal) \ + (This)->lpVtbl -> get_Trademark(This,pVal) + +#define ITrueTypeFontInfo_get_Version(This,pVal) \ + (This)->lpVtbl -> get_Version(This,pVal) + +#define ITrueTypeFontInfo_get_RegisteredFileName(This,pVal) \ + (This)->lpVtbl -> get_RegisteredFileName(This,pVal) + +#define ITrueTypeFontInfo_GetFontsDirectory(This,pVal) \ + (This)->lpVtbl -> GetFontsDirectory(This,pVal) + +#define ITrueTypeFontInfo_Install(This,bPermanent) \ + (This)->lpVtbl -> Install(This,bPermanent) + +#define ITrueTypeFontInfo_Uninstall(This,bPermanent) \ + (This)->lpVtbl -> Uninstall(This,bPermanent) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +/* [helpstring][id][propget][hidden] */ HRESULT STDMETHODCALLTYPE ITrueTypeFontInfo_get__FileName_Proxy( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB ITrueTypeFontInfo_get__FileName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propput][hidden] */ HRESULT STDMETHODCALLTYPE ITrueTypeFontInfo_put__FileName_Proxy( + ITrueTypeFontInfo __RPC_FAR * This, + /* [in] */ BSTR newVal); + + +void __RPC_STUB ITrueTypeFontInfo_put__FileName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE ITrueTypeFontInfo_get_FileName_Proxy( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB ITrueTypeFontInfo_get_FileName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE ITrueTypeFontInfo_put_FileName_Proxy( + ITrueTypeFontInfo __RPC_FAR * This, + /* [in] */ BSTR newVal); + + +void __RPC_STUB ITrueTypeFontInfo_put_FileName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE ITrueTypeFontInfo_get_Copyright_Proxy( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB ITrueTypeFontInfo_get_Copyright_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE ITrueTypeFontInfo_get_Family_Proxy( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB ITrueTypeFontInfo_get_Family_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE ITrueTypeFontInfo_get_ID_Proxy( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB ITrueTypeFontInfo_get_ID_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE ITrueTypeFontInfo_get_Name_Proxy( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB ITrueTypeFontInfo_get_Name_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE ITrueTypeFontInfo_get_PostscriptName_Proxy( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB ITrueTypeFontInfo_get_PostscriptName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE ITrueTypeFontInfo_get_Subfamily_Proxy( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB ITrueTypeFontInfo_get_Subfamily_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE ITrueTypeFontInfo_get_Trademark_Proxy( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB ITrueTypeFontInfo_get_Trademark_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE ITrueTypeFontInfo_get_Version_Proxy( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB ITrueTypeFontInfo_get_Version_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE ITrueTypeFontInfo_get_RegisteredFileName_Proxy( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB ITrueTypeFontInfo_get_RegisteredFileName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE ITrueTypeFontInfo_GetFontsDirectory_Proxy( + ITrueTypeFontInfo __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB ITrueTypeFontInfo_GetFontsDirectory_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE ITrueTypeFontInfo_Install_Proxy( + ITrueTypeFontInfo __RPC_FAR * This, + /* [optional][in] */ VARIANT_BOOL bPermanent); + + +void __RPC_STUB ITrueTypeFontInfo_Install_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE ITrueTypeFontInfo_Uninstall_Proxy( + ITrueTypeFontInfo __RPC_FAR * This, + /* [optional][in] */ VARIANT_BOOL bPermanent); + + +void __RPC_STUB ITrueTypeFontInfo_Uninstall_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __ITrueTypeFontInfo_INTERFACE_DEFINED__ */ + + + +#ifndef __TtfInfoLib_LIBRARY_DEFINED__ +#define __TtfInfoLib_LIBRARY_DEFINED__ + +/**************************************** + * Generated header for library: TtfInfoLib + * at Sat Sep 06 15:15:40 1997 + * using MIDL 3.01.75 + ****************************************/ +/* [helpstring][version][uuid] */ + + + +EXTERN_C const IID LIBID_TtfInfoLib; + +#ifdef __cplusplus +EXTERN_C const CLSID CLSID_FontInfo; + +class DECLSPEC_UUID("F6CC491E-26B2-11D1-ACED-204C4F4F5020") +FontInfo; +#endif +#endif /* __TtfInfoLib_LIBRARY_DEFINED__ */ + +/* Additional Prototypes for ALL interfaces */ + +unsigned long __RPC_USER BSTR_UserSize( unsigned long __RPC_FAR *, unsigned long , BSTR __RPC_FAR * ); +unsigned char __RPC_FAR * __RPC_USER BSTR_UserMarshal( unsigned long __RPC_FAR *, unsigned char __RPC_FAR *, BSTR __RPC_FAR * ); +unsigned char __RPC_FAR * __RPC_USER BSTR_UserUnmarshal(unsigned long __RPC_FAR *, unsigned char __RPC_FAR *, BSTR __RPC_FAR * ); +void __RPC_USER BSTR_UserFree( unsigned long __RPC_FAR *, BSTR __RPC_FAR * ); + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/TtfInfo.idl b/TtfInfo.idl new file mode 100644 index 0000000..f682a4d --- /dev/null +++ b/TtfInfo.idl @@ -0,0 +1,54 @@ +// TtfInfo.idl : IDL source for TtfInfo.dll +// + +// This file will be processed by the MIDL tool to +// produce the type library (TtfInfo.tlb) and marshalling code. + +import "oaidl.idl"; +import "ocidl.idl"; + + [ + object, + uuid(F6CC491D-26B2-11D1-ACED-204C4F4F5020), + dual, + helpstring("ITrueTypeFontInfo Interface"), + pointer_default(unique) + ] + interface ITrueTypeFontInfo : IDispatch + { + [hidden, propget, id(0), helpstring("default property")] HRESULT _FileName([out, retval] BSTR *pVal); + [hidden, propput, id(0), helpstring("default property")] HRESULT _FileName([in] BSTR newVal); + [propget, id(1), helpstring("property FileName")] HRESULT FileName([out, retval] BSTR *pVal); + [propput, id(1), helpstring("property FileName")] HRESULT FileName([in] BSTR newVal); + [propget, id(2), helpstring("property Copyright")] HRESULT Copyright([out, retval] BSTR *pVal); + [propget, id(3), helpstring("property Family")] HRESULT Family([out, retval] BSTR *pVal); + [propget, id(4), helpstring("property ID")] HRESULT ID([out, retval] BSTR *pVal); + [propget, id(5), helpstring("property Name")] HRESULT Name([out, retval] BSTR *pVal); + [propget, id(6), helpstring("property PostscriptName")] HRESULT PostscriptName([out, retval] BSTR *pVal); + [propget, id(7), helpstring("property Subfamily")] HRESULT Subfamily([out, retval] BSTR *pVal); + [propget, id(8), helpstring("property Trademark")] HRESULT Trademark([out, retval] BSTR *pVal); + [propget, id(9), helpstring("property Version")] HRESULT Version([out, retval] BSTR *pVal); + [propget, id(10), helpstring("property RegisteredFileName")] HRESULT RegisteredFileName([out, retval] BSTR *pVal); + [id(11), helpstring("method GetFontsDirectory")] HRESULT GetFontsDirectory([out, retval] BSTR* pVal); + [id(12), helpstring("method Install")] HRESULT Install([in, optional] VARIANT_BOOL bPermanent); + [id(13), helpstring("method Uninstall")] HRESULT Uninstall([in, optional] VARIANT_BOOL bPermanent); + }; +[ + uuid(F6CC4910-26B2-11D1-ACED-204C4F4F5020), + version(1.0), + helpstring("TtfInfo 1.0 Type Library") +] +library TtfInfoLib +{ + importlib("stdole32.tlb"); + importlib("stdole2.tlb"); + + [ + uuid(F6CC491E-26B2-11D1-ACED-204C4F4F5020), + helpstring("FontInfo Class") + ] + coclass FontInfo + { + [default] interface ITrueTypeFontInfo; + }; +}; diff --git a/TtfInfo.rc b/TtfInfo.rc new file mode 100644 index 0000000..92ad5c8 --- /dev/null +++ b/TtfInfo.rc @@ -0,0 +1,134 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "1 TYPELIB ""TtfInfo.tlb""\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904B0" + BEGIN + VALUE "CompanyName", "\0" + VALUE "FileDescription", "TtfInfo Module\0" + VALUE "FileVersion", "1, 0, 0, 1\0" + VALUE "InternalName", "TTFINFO\0" + VALUE "LegalCopyright", "Copyright 1997\0" + VALUE "OriginalFilename", "TTFINFO.DLL\0" + VALUE "ProductName", "TtfInfo Module\0" + VALUE "ProductVersion", "1, 0, 0, 1\0" + VALUE "OLESelfRegister", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // !_MAC + + +///////////////////////////////////////////////////////////////////////////// +// +// REGISTRY +// + +IDR_FONTINFO REGISTRY DISCARDABLE "FontInfo.rgs" + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + IDS_PROJNAME "TtfInfo" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDERR_GetFontsDirectory "Testing123" + IDERR_OpenFontsKey "IDERR_OpenFontsKey" + IDERR_Install "Install failed" + IDERR_Uninstall "Uninstall failed" + IDERR_FileOpen "Couldn't open file" + IDERR_NoFileName "Blank file name. Set the filename first!!!!!!" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// +1 TYPELIB "TtfInfo.tlb" + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/TtfInfops.def b/TtfInfops.def new file mode 100644 index 0000000..f48208c --- /dev/null +++ b/TtfInfops.def @@ -0,0 +1,11 @@ + +LIBRARY "TtfInfoPS" + +DESCRIPTION 'Proxy/Stub DLL' + +EXPORTS + DllGetClassObject @1 PRIVATE + DllCanUnloadNow @2 PRIVATE + GetProxyDllInfo @3 PRIVATE + DllRegisterServer @4 PRIVATE + DllUnregisterServer @5 PRIVATE diff --git a/TtfInfops.mk b/TtfInfops.mk new file mode 100644 index 0000000..c2bbd2d --- /dev/null +++ b/TtfInfops.mk @@ -0,0 +1,14 @@ + +TtfInfops.dll: dlldata.obj TtfInfo_p.obj TtfInfo_i.obj + link /dll /out:TtfInfops.dll /def:TtfInfops.def /entry:DllMain dlldata.obj TtfInfo_p.obj TtfInfo_i.obj kernel32.lib rpcndr.lib rpcns4.lib rpcrt4.lib oleaut32.lib uuid.lib + +.c.obj: + cl /c /Ox /DWIN32 /D_WIN32_WINNT=0x0400 /DREGISTER_PROXY_DLL $< + +clean: + @del TtfInfops.dll + @del TtfInfops.lib + @del TtfInfops.exp + @del dlldata.obj + @del TtfInfo_p.obj + @del TtfInfo_i.obj diff --git a/dlldata.c b/dlldata.c new file mode 100644 index 0000000..fb08b20 --- /dev/null +++ b/dlldata.c @@ -0,0 +1,38 @@ +/********************************************************* + DllData file -- generated by MIDL compiler + + DO NOT ALTER THIS FILE + + This file is regenerated by MIDL on every IDL file compile. + + To completely reconstruct this file, delete it and rerun MIDL + on all the IDL files in this DLL, specifying this file for the + /dlldata command line option + +*********************************************************/ + +#define PROXY_DELEGATION + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +EXTERN_PROXY_FILE( TtfInfo ) + + +PROXYFILE_LIST_START +/* Start of list */ + REFERENCE_PROXY_FILE( TtfInfo ), +/* End of list */ +PROXYFILE_LIST_END + + +DLLDATA_ROUTINES( aProxyFileList, GET_DLL_CLSID ) + +#ifdef __cplusplus +} /*extern "C" */ +#endif + +/* end of generated dlldata file */ diff --git a/resource.h b/resource.h new file mode 100644 index 0000000..495eb8f --- /dev/null +++ b/resource.h @@ -0,0 +1,23 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by TtfInfo.rc +// +#define IDS_PROJNAME 100 +#define IDR_FONTINFO 101 +#define IDERR_GetFontsDirectory 512 +#define IDERR_OpenFontsKey 513 +#define IDERR_Install 514 +#define IDERR_Uninstall 515 +#define IDERR_FileOpen 516 +#define IDERR_NoFileName 517 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 201 +#define _APS_NEXT_COMMAND_VALUE 32768 +#define _APS_NEXT_CONTROL_VALUE 201 +#define _APS_NEXT_SYMED_VALUE 102 +#endif +#endif -- cgit v1.2.3