oleview: Added open TypeLib file functionality.
diff --git a/programs/oleview/oleview.c b/programs/oleview/oleview.c
index 73980b2..88ce725 100644
--- a/programs/oleview/oleview.c
+++ b/programs/oleview/oleview.c
@@ -25,6 +25,13 @@
 static WCHAR wszFormat[] = { '<','o','b','j','e','c','t','\n',' ',' ',' ',
     'c','l','a','s','s','i','d','=','\"','c','l','s','i','d',':','%','s','\"','\n',
     '>','\n','<','/','o','b','j','e','c','t','>','\0' };
+WCHAR wszFilter[] = { 'T','y','p','e','L','i','b',' ','F','i','l','e','s',' ',
+    '(','*','t','l','b',';','*','o','l','b',';','*','.','d','l','l',';',
+    '*','.','o','c','x',';','*','.','e','x','e',')','\0',
+    '*','.','t','l','b',';','*','.','o','l','b',';','*','.','d','l','l',';',
+    '*','.','o','c','x','*','.','e','x','e','\0',
+    'A','l','l',' ','F','i','l','e','s',' ','(','*','.','*',')','\0',
+    '*','.','*','\0','\0' };
 
 INT_PTR CALLBACK SysConfProc(HWND hDlgWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
@@ -124,6 +131,22 @@
     return FALSE;
 }
 
+void InitOpenFileName(HWND hWnd, OPENFILENAME *pofn, WCHAR *wszFilter,
+        WCHAR *wszTitle, WCHAR *wszFileName)
+{
+    memset(pofn, 0, sizeof(OPENFILENAME));
+    pofn->lStructSize = sizeof(OPENFILENAME);
+    pofn->hwndOwner = hWnd;
+    pofn->hInstance = globals.hMainInst;
+
+    pofn->lpstrTitle = wszTitle;
+    pofn->lpstrFilter = wszFilter;
+    pofn->nFilterIndex = 0;
+    pofn->lpstrFile = wszFileName;
+    pofn->nMaxFile = MAX_LOAD_STRING;
+    pofn->Flags = OFN_HIDEREADONLY;
+}
+
 void CopyClsid(HTREEITEM item)
 {
     TVITEM tvi;
@@ -380,10 +403,21 @@
                     vis ? MF_UNCHECKED : MF_CHECKED);
             ResizeChild();
             break;
+        case IDM_TYPELIB:
+            {
+            OPENFILENAME ofn;
+            static WCHAR wszTitle[MAX_LOAD_STRING];
+            static WCHAR wszName[MAX_LOAD_STRING];
+
+            LoadString(globals.hMainInst, IDS_OPEN, wszTitle, sizeof(wszTitle));
+            InitOpenFileName(hWnd, &ofn, wszFilter, wszTitle, wszName);
+            if(GetOpenFileName(&ofn)) CreateTypeLibWindow(globals.hMainInst, wszName);
+            break;
+            }
         case IDM_VIEW:
             hSelect = TreeView_GetSelection(globals.hTree);
             if(IsInterface(hSelect)) InterfaceViewer(hSelect);
-            else CreateTypeLibWindow(globals.hMainInst);
+            else CreateTypeLibWindow(globals.hMainInst, NULL);
             break;
         case IDM_EXIT:
             DestroyWindow(hWnd);