summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.cvsignore1
-rw-r--r--FontInfo.cpp325
-rw-r--r--FontInfo.h111
-rw-r--r--FontInfo.rgs24
-rw-r--r--StdAfx.cpp12
-rw-r--r--StdAfx.h35
-rw-r--r--TTF.h67
-rw-r--r--TtfInfo Client/FontInfo.frm321
-rw-r--r--TtfInfo Client/FontInfo.vbp37
-rw-r--r--TtfInfo Client/FontInfo.vbw2
-rw-r--r--TtfInfo Client/FontView.frm78
-rw-r--r--TtfInfo Client/FontView.frxbin0 -> 201 bytes
-rw-r--r--TtfInfo.cpp73
-rw-r--r--TtfInfo.def9
-rw-r--r--TtfInfo.dsp437
-rw-r--r--TtfInfo.dsw29
-rw-r--r--TtfInfo.h556
-rw-r--r--TtfInfo.idl54
-rw-r--r--TtfInfo.rc134
-rw-r--r--TtfInfops.def11
-rw-r--r--TtfInfops.mk14
-rw-r--r--dlldata.c38
-rw-r--r--resource.h23
23 files changed, 2391 insertions, 0 deletions
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<char*>( &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<char*>( &Table ), sizeof( Table ) );
+
+ if (Table.tag == tag_NamingTable)
+ {
+ TtfFile.seekg( SWAPL( Table.offset ) );
+ TtfFile.read( reinterpret_cast<char*>( &NamingTable ),
+ sizeof( NamingTable ) );
+ numNames = SWAPW( NamingTable.count );
+
+ while ( numNames-- )
+ {
+ TtfFile.read ( reinterpret_cast<char*>( &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<char*>( &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<CComSingleThreadModel>,
+ public CComCoClass<CFontInfo, &CLSID_FontInfo>,
+ public ISupportErrorInfo,
+ public IDispatchImpl<ITrueTypeFontInfo, &IID_ITrueTypeFontInfo, &LIBID_TtfInfoLib>
+{
+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 <statreg.h>
+#include <statreg.cpp>
+#endif
+
+#include <atlimpl.cpp>
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 <atlbase.h>
+//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 <atlcom.h>
+
+
+#include <shlobj.h> // Windows shell
+#include <comdef.h> // Compiler COM suport
+#include <fstream> // Standard file streams
+#include <iso646.h> // 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
--- /dev/null
+++ b/TtfInfo Client/FontView.frx
Binary files 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 <rpcproxy.h>
+
+#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