home *** CD-ROM | disk | FTP | other *** search
- -- $Source: /home/harp/1/proto/monoBANK/winnt/zoomin_pkg.adb,v $
- -- $Revision: 1.2 $ $Date: 95/12/15 16:49:42 $ $Author: mg $
-
- with Interfaces.C;
- with System;
- with Win32;
- with Win32.Windef;
- with Win32.Winuser;
-
-
- package body Zoomin_Pkg is
-
- use Interfaces.C;
- use Win32;
-
- function CP(S : Win32.CHAR_Array) return Win32.LPCSTR is
- function UC is new Ada.Unchecked_Conversion(System.Address,Win32.LPCSTR);
- begin
- return UC(S(S'First)'Address);
- end CP;
-
- function Is_Null (Addr: System.Address) return Boolean is
- use type System.Address;
- begin
- return Addr = System.Null_Address;
- end Is_Null;
- pragma Inline(Is_Null);
-
-
- --
- -- This function was a macro in zoomin.h.
- --
- function Bound(X : Win32.LONG;
- MIN : Win32.LONG;
- MAX : Win32.LONG) return Win32.LONG is
-
- RETVAL : Win32.LONG;
- begin
- RETVAL := X;
- if X < MIN then
- RETVAL := MIN;
- elsif X > MAX then
- RETVAL := MAX;
- end if;
- return RETVAL;
- end Bound;
-
-
- --
- --/************************************************************************
- --* CalcZoomedSize
- --*
- --* Calculates some globals. This routine needs to be called any
- --* time that the size of the app or the zoom factor changes.
- --*
- --* History:
- --*
- --************************************************************************/
- --
- procedure CalcZoomedSize is
-
- RC : Win32.WinDef.LPRECT;
-
- begin
- RC := new Win32.WinDef.RECT;
- bResult := Win32.WinUser.GetClientRect(GHWNDAPP, RC);
-
- GCXZOOMED := (RC.RIGHT / GNZOOM) + 1;
- GCYZOOMED := (RC.BOTTOM / GNZOOM) + 1;
- end CalcZoomedSize;
-
- --
- --/************************************************************************
- --* DoTheZoomIn
- --*
- --* Does the actual paint of the zoomed image.
- --*
- --* Arguments:
- --* HDC hdc - If not NULL, this hdc will be used to paint with.
- --* If NULL, a dc for the apps window will be obtained.
- --*
- --* History:
- --*
- --************************************************************************/
- --
- procedure DoTheZoomIn(HDC_IN : WinDef.HDC) is
-
- HDC_P : WinDef.HDC;
- FRELEASE : Win32.BOOL;
- HPALOLD : WinDef.HPALETTE := System.Null_Address;
- HDCSCREEN : WinDef.HDC;
- X : Win32.LONG;
- Y : Win32.LONG;
-
- begin
- if Is_Null(HDC_IN) then
- HDC_P := WinUser.GetDC(GHWNDAPP);
- FRELEASE := Win32.TRUE;
- else
- HDC_P := HDC_IN;
- FRELEASE := Win32.FALSE;
- end if;
- if not Is_Null(GHPALPHYSICAL) then
- HPALOLD := WinGdi.SelectPalette(HDC_P, GHPALPHYSICAL, Win32.FALSE);
- uResult := WinGdi.RealizePalette(HDC_P);
- end if;
-
- -- /*
- -- * The point must not include areas outside the screen dimensions.
- -- */
- X := BOUND(GPTZOOM.X, GCXZOOMED / 2, GCXSCREENMAX - (GCXZOOMED / 2));
- Y := BOUND(GPTZOOM.Y, GCYZOOMED / 2, GCYSCREENMAX - (GCYZOOMED / 2));
-
- HDCSCREEN := WinUser.GetDC(System.Null_Address);
- siResult := WinGdi.SetStretchBltMode(HDC_P, WinGdi.COLORONCOLOR);
- bResult := WinGdi.StretchBlt(HDC_P, 0, 0,
- Win32.INT (GNZOOM * GCXZOOMED),
- Win32.INT (GNZOOM * GCYZOOMED),
- HDCSCREEN,
- Win32.INT (X - GCXZOOMED / 2),
- Win32.INT (Y - GCYZOOMED / 2),
- Win32.INT (GCXZOOMED),
- Win32.INT (GCYZOOMED), WinGdi.SRCCOPY);
- siResult := WinUser.ReleaseDC(System.Null_Address, HDCSCREEN);
-
- if not Is_Null(HPALOLD) then
- hResult := WinGdi.SelectPalette(HDC_P, HPALOLD, Win32.FALSE);
- end if;
-
- if FRELEASE /= Win32.FALSE then
- siResult := WinUser.ReleaseDC(GHWNDAPP, HDC_P);
- end if;
- end DoTheZoomIn;
-
- --
- --/************************************************************************
- --* MoveView
- --*
- --* This function moves the current view around.
- --*
- --* Arguments:
- --* INT nDirectionCode - Direction to move. Must be VK_UP, VK_DOWN,
- --* VK_LEFT or VK_RIGHT.
- --* BOOL fFast - TRUE if the move should jump a larger increment.
- --* If FALSE, the move is just one pixel.
- --* BOOL fPeg - If TRUE, the view will be pegged to the screen
- --* boundary in the specified direction. This overides
- --* the fFast parameter.
- --*
- --* History:
- --*
- --************************************************************************/
- --
- procedure MoveView(NDIRECTIONCODE : Win32.WPARAM;
- FFAST : Win32.BOOL;
- FPEG : Win32.BOOL) is
-
- DDELTA : Win32.LONG;
-
- begin
- if FFAST /= Win32.FALSE then
- DDELTA := FASTDELTA;
- else
- DDELTA := 1;
- end if;
- case NDIRECTIONCODE is
- when WinUser.VK_UP =>
- if FPEG /= Win32.FALSE then
- GPTZOOM.Y := GCYZOOMED / 2;
- else
- GPTZOOM.Y := GPTZOOM.Y - DDELTA;
- end if;
- GPTZOOM.Y := BOUND(GPTZOOM.Y, 0, GCYSCREENMAX);
-
- when WinUser.VK_DOWN =>
- if FPEG /= Win32.FALSE then
- GPTZOOM.Y := GCYSCREENMAX - (GCYZOOMED / 2);
- else
- GPTZOOM.Y := GPTZOOM.Y + DDELTA;
- end if;
- GPTZOOM.Y := BOUND(GPTZOOM.Y, 0, GCYSCREENMAX);
-
- when WinUser.VK_LEFT =>
- if FPEG /= Win32.FALSE then
- GPTZOOM.X := GCXZOOMED / 2;
- else
- GPTZOOM.X := GPTZOOM.X - DDELTA;
- end if;
- GPTZOOM.X := BOUND(GPTZOOM.X, 0, GCXSCREENMAX);
-
- when WinUser.VK_RIGHT =>
- if FPEG /= Win32.FALSE then
- GPTZOOM.X := GCXSCREENMAX - (GCXZOOMED / 2);
- else
- GPTZOOM.X := GPTZOOM.X + DDELTA;
- end if;
- GPTZOOM.X := BOUND(GPTZOOM.X, 0, GCXSCREENMAX);
-
- when others => null;
- end case;
- DoTheZoomIn(System.Null_Address);
- end MoveView;
-
- --
- --/************************************************************************
- --* DrawZoomRect
- --*
- --* This function draws the tracking rectangle. The size and shape of
- --* the rectangle will be proportional to the size and shape of the
- --* app's client, and will be affected by the zoom factor as well.
- --*
- --* History:
- --*
- --************************************************************************/
- --
- procedure DrawZoomRect is
-
- HDC_P : WinDef.HDC;
- RC : WinDef.LPRECT;
- X : Win32.LONG;
- Y : Win32.LONG;
-
- begin
- X := BOUND(GPTZOOM.X, GCXZOOMED / 2, GCXSCREENMAX - (GCXZOOMED / 2));
- Y := BOUND(GPTZOOM.Y, GCYZOOMED / 2, GCYSCREENMAX - (GCYZOOMED / 2));
-
- RC := new WinDef.RECT;
-
- RC.LEFT := X - GCXZOOMED / 2;
- RC.TOP := Y - GCYZOOMED / 2;
- RC.RIGHT := RC.LEFT + GCXZOOMED;
- RC.BOTTOM := RC.TOP + GCYZOOMED;
-
- bResult := WinUser.InflateRect(RC, 1, 1);
-
- HDC_P := WinUser.GetDC(System.Null_Address);
-
- bResult := WinGdi.PatBlt(HDC_P, Win32.INT (RC.LEFT),
- Win32.INT (RC.TOP), Win32.INT (RC.RIGHT-RC.LEFT),
- 1, WinGdi.DSTINVERT);
- -- note: input types INT can also be input as Win32.INT
- bResult := WinGdi.PatBlt(HDC_P, Win32.INT (RC.LEFT),
- Win32.INT (RC.BOTTOM), 1,
- Win32.INT (-(RC.BOTTOM-RC.TOP)),
- WinGdi.DSTINVERT);
- bResult := WinGdi.PatBlt(HDC_P, Win32.INT (RC.RIGHT-1),
- Win32.INT (RC.TOP), 1,
- Win32.INT (RC.BOTTOM-RC.TOP),
- WinGdi.DSTINVERT);
- bResult := WinGdi.PatBlt(HDC_P, Win32.INT (RC.RIGHT),
- Win32.INT (RC.BOTTOM-1),
- Win32.INT (-(RC.RIGHT-RC.LEFT)), 1,
- WinGdi.DSTINVERT);
-
- siResult := WinUser.ReleaseDC(System.Null_Address, HDC_P);
- end DrawZoomRect;
-
- --
- --/************************************************************************
- --* EnableRefresh
- --*
- --* This function turns on or off the auto-refresh feature.
- --*
- --* Arguments:
- --* BOOL fEnable - TRUE to turn the refresh feature on, FALSE to
- --* turn it off.
- --*
- --* History:
- --*
- --************************************************************************/
- --
- procedure EnableRefresh(FENABLE : Win32.BOOL) is
-
- URESULT : Win32.UINT;
-
- begin
- if FENABLE = Win32.TRUE then
- -- /*
- -- * Already enabled. Do nothing.
- -- */
- if GFREFENABLE = Win32.TRUE then
- return;
- end if;
- URESULT := WinUser.SetTimer(GHWNDAPP, idtimer_zoomin,
- GNREFINTERVAL * 100, null);
- if URESULT /= 0 then
- GFREFENABLE := Win32.TRUE;
- end if;
- else
- -- /*
- -- * Not enabled yet. Do nothing.
- -- */
- if GFREFENABLE = Win32.FALSE then
- return;
- end if;
- bResult := WinUser.KillTimer(GHWNDAPP, idtimer_zoomin);
- GFREFENABLE := Win32.FALSE;
- end if;
- end EnableRefresh;
-
- --
- --/************************************************************************
- --* CopyToClipboard
- --*
- --* This function copies the client area image of the app into the
- --* clipboard.
- --*
- --* History:
- --*
- --************************************************************************/
- --
- procedure CopyToClipboard is
-
- HDCSRC : WinDef.HDC;
- HDCDST : WinDef.HDC;
- RC : WinDef.LPRECT;
- HBM : WinDef.HBITMAP;
- RESULT : Win32.BOOL;
- DEVCAPS : Win32.INT;
- SIZE_X : Win32.INT;
- SIZE_Y : Win32.INT;
-
- begin
- RESULT := WinUser.OpenClipboard(GHWNDAPP);
- if RESULT = Win32.TRUE then
- bResult := WinUser.EmptyClipboard;
- HDCSRC := WinUser.GetDC(GHWNDAPP);
- if not Is_Null(HDCSRC) then
- RC := new WinDef.RECT;
- bResult := WinUser.GetClientRect(GHWNDAPP, RC);
- HBM := WinGdi.CreateCompatibleBitmap(HDCSRC,
- Win32.INT (RC.RIGHT - RC.LEFT),
- Win32.INT (RC.BOTTOM - RC.TOP));
- if not Is_Null(HBM) then
- HDCDST := WinGdi.CreateCompatibleDC(HDCSRC);
- if not Is_Null(HDCDST) then
- -- /*
- -- * Calculate the dimensions of the bitmap and
- -- * convert them to tenths of a millimeter for
- -- * setting the size with the SetBitmapDimensionEx
- -- * call. This allows programs like WinWord to
- -- * retrieve the bitmap and know what size to
- -- * display it as.
- -- */
-
- DEVCAPS := WinGdi.GetDeviceCaps(HDCSRC, WinGdi.LOGPIXELSX);
- SIZE_X := Win32.INT ((RC.RIGHT-RC.LEFT) * mm10perinch) / DEVCAPS;
- DEVCAPS := WinGdi.GetDeviceCaps(HDCSRC, WinGdi.LOGPIXELSY);
- SIZE_Y := Win32.INT ((RC.BOTTOM-RC.TOP) * mm10perinch) / DEVCAPS;
- bResult := WinGdi.SetBitmapDimensionEx(HBM, SIZE_X, SIZE_Y, null);
- hgdiResult := WinGdi.SelectObject(HDCDST, WinDef.HGDIOBJ(HBM));
- bResult := WinGdi.BitBlt(HDCDST, 0, 0,
- Win32.INT (RC.RIGHT - RC.LEFT),
- Win32.INT (RC.BOTTOM - RC.TOP),
- HDCSRC,
- Win32.INT (RC.LEFT),
- Win32.INT (RC.TOP), WinGdi.SRCCOPY);
- bResult := WinGdi.DeleteDC(HDCDST);
- handResult := WinUser.SetClipboardData(WinUser.CF_BITMAP,
- Winnt.HANDLE (HBM));
- else
- bResult := WinGdi.DeleteObject(WinDef.HGDIOBJ(HBM));
- end if;
- end if;
- end if;
- siResult := WinUser.ReleaseDC(ghwndApp, hdcSrc);
- bResult := WinUser.CloseClipboard;
- else
- bResult := WinUser.MessageBeep(0);
- end if;
- end CopyToClipBoard;
-
-
-
- --
- --/************************************************************************
- --* AboutDlgProc
- --*
- --* This is the About Box dialog procedure.
- --*
- --* History:
- --*
- --************************************************************************/
- --
-
- function AboutDlgProc(HWND_P : Win32.Windef.HWND;
- MSG : Win32.UINT;
- WPARAM_P : Win32.WPARAM;
- LPARAM_P : Win32.LPARAM) return Win32.BOOL is
-
- RETVAL : Win32.BOOL;
-
- begin
- case MSG is
- when Win32.WinUser.WM_INITDIALOG =>
- RETVAL := Win32.TRUE;
-
- when WinUser.WM_COMMAND =>
- bResult := Win32.Winuser.EndDialog(HWND_P, Win32.Winuser.IDOK);
- RETVAL := Win32.TRUE;
-
- when others =>
- RETVAL := Win32.FALSE;
-
- end case;
- return RETVAL;
- end AboutDlgProc;
-
- --
- --/************************************************************************
- --* RefreshRateDlgProc
- --*
- --* This is the Refresh Rate dialog procedure.
- --*
- --* History:
- --*
- --************************************************************************/
- --
-
- function RefreshRateDlgProc(HWND_P : Win32.Windef.HWND;
- MSG : Win32.UINT;
- WPARAM_P : Win32.WPARAM;
- LPARAM_P : Win32.LPARAM) return Win32.BOOL is
-
- RETVAL : Win32.BOOL;
-
- begin
- RETVAL := Win32.FALSE;
- case MSG is
- when WinUser.WM_INITDIALOG =>
- longResult := Win32.Winuser.SendDlgItemMessage(
- HWND_P, did_refreshrateinterval,
- Win32.Winuser.EM_LIMITTEXT, 3, 0);
- bResult := Win32.Winuser.SetDlgItemInt(HWND_P, did_refreshrateinterval,
- GNREFINTERVAL, Win32.FALSE);
- bResult := Win32.Winuser.CheckDlgButton(HWND_P, did_refreshrateenable,
- Win32.UINT(GFREFENABLE));
- RETVAL := Win32.TRUE;
-
- when WinUser.WM_COMMAND =>
- case Utils.LoWord(DWORD(WPARAM_P)) is
- when Win32.Winuser.IDOK =>
- GNREFINTERVAL := Win32.Winuser.GetDlgItemInt(HWND_P,
- did_refreshrateinterval,
- FTRANSLATED'access,
- Win32.FALSE);
- -- /*
- -- * Stop any existing timers then start one with the
- -- * new interval if requested to.
- -- */
- EnableRefresh(Win32.FALSE);
- EnableRefresh(Win32.BOOL(
- Win32.Winuser.IsDlgButtonChecked(
- HWND_P, did_refreshrateenable)));
- bResult := Win32.Winuser.EndDialog(HWND_P, WinUser.IDOK);
-
- when WinUser.IDCANCEL =>
- bResult := Win32.Winuser.EndDialog(HWND_P, Win32.Winuser.IDCANCEL);
-
- when others =>
- null;
- end case;
-
- when others =>
- null;
- end case;
- return RETVAL;
- end RefreshRateDlgProc;
-
- --/************************************************************************
- --* AppWndProc
- --*
- --* Main window proc for the zoomin utility.
- --*
- --* Arguments:
- --* Standard window proc args.
- --*
- --* History:
- --*
- --************************************************************************/
- --
-
- function AppWndProc(HWND_P : Win32.Windef.HWND;
- MSG : Win32.UINT;
- WPARAM_P : Win32.WPARAM;
- LPARAM_P : Win32.LPARAM) return Win32.LRESULT is
-
- PS : Win32.Winuser.LPPAINTSTRUCT;
- HCUROLD : Win32.Windef.HCURSOR;
- RETVAL : Win32.LRESULT;
-
- begin
- RETVAL := 0;
- case MSG is
- when Win32.Winuser.WM_CREATE =>
- bResult := Win32.Winuser.SetScrollRange(hwnd_p,
- Win32.Winuser.SB_VERT,
- MIN_ZOOM, MAX_ZOOM,
- Win32.FALSE);
- siResult := Win32.Winuser.SetScrollPos(hwnd_p,
- Win32.Winuser.SB_VERT,
- Win32.INT (GNZOOM),
- Win32.FALSE);
-
- when Win32.Winuser.WM_TIMER =>
- -- /*
- -- * Update on every timer message. The cursor will be
- -- * flashed to the hourglash for some visual feedback
- -- * of when a snapshot is being taken.
- -- */
- HCUROLD := Win32.WinUser.SetCursor(Win32.Winuser.LoadCursor(
- System.Null_Address, LPCSTR(WinUser.IDC_WAIT)));
- DoTheZoomIn(System.Null_Address);
- hcurResult := Win32.Winuser.SetCursor(HCUROLD);
-
- when Win32.Winuser.WM_PAINT =>
- PS := new Win32.Winuser.PAINTSTRUCT;
- handResult := Win32.Winnt.HANDLE(WinUser.BeginPaint(HWND_P, PS));
- DoTheZoomIn(PS.HDC);
- bResult := Win32.Winuser.EndPaint(HWND_P, Win32.Winuser.ac_PAINTt(PS));
-
- when Win32.Winuser.WM_SIZE =>
- CalcZoomedSize;
-
- when Win32.Winuser.WM_LBUTTONDOWN =>
- GPTZOOM.X := Win32.LONG(Utils.LoWord(DWORD(LPARAM_P)));
- GPTZOOM.Y := Win32.LONG(Utils.HiWord(DWORD(LPARAM_P)));
- bResult := Win32.Winuser.ClientToScreen(HWND_P, GPTZOOM);
- DrawZoomRect;
- DoTheZoomIn(System.Null_Address);
-
- handResult := Win32.Winnt.HANDLE (Win32.Winuser.SetCapture(HWND_P));
- GFTRACKING := Win32.TRUE;
-
- when Win32.Winuser.WM_MOUSEMOVE =>
- if GFTRACKING = Win32.TRUE then
- DrawZoomRect;
- GPTZOOM.X := Win32.LONG(Utils.LoWord(DWORD(LPARAM_P)));
- GPTZOOM.Y := Win32.LONG(Utils.HiWord(DWORD(LPARAM_P)));
- bResult := Win32.Winuser.ClientToScreen(HWND_P, GPTZOOM);
- DrawZoomRect;
- DoTheZoomIn(System.Null_Address);
- end if;
-
- when Win32.Winuser.WM_LBUTTONUP =>
- if gfTracking = Win32.TRUE then
- DrawZoomRect;
- bResult := Win32.Winuser.ReleaseCapture;
- GFTRACKING := Win32.FALSE;
- end if;
-
- when Win32.Winuser.WM_VSCROLL =>
- case Utils.LoWord(DWORD(WPARAM_P)) is
- when Win32.Winuser.SB_LINEDOWN =>
- GNZOOM := GNZOOM + 1;
-
- when Win32.Winuser.SB_LINEUP =>
- GNZOOM := GNZOOM - 1;
-
- when Win32.Winuser.SB_PAGEUP =>
- GNZOOM := GNZOOM - 2;
-
- when Win32.Winuser.SB_PAGEDOWN =>
- GNZOOM := GNZOOM + 2;
-
- when Win32.Winuser.SB_THUMBPOSITION | Win32.Winuser.SB_THUMBTRACK =>
- GNZOOM := Win32.LONG(Utils.HiWord(DWORD(WPARAM_P)));
-
- when others => null;
- end case;
-
- GNZOOM := BOUND(GNZOOM, MIN_ZOOM, MAX_ZOOM);
- siResult := Win32.Winuser.SetScrollPos(HWND_P, Win32.Winuser.SB_VERT,
- Win32.INT (GNZOOM), Win32.TRUE);
- CalcZoomedSize;
- DoTheZoomIn(System.Null_Address);
-
- when Win32.Winuser.WM_KEYDOWN =>
- case WPARAM_P is
- when Win32.Winuser.VK_UP |
- Win32.Winuser.VK_DOWN |
- Win32.Winuser.VK_LEFT |
- Win32.Winuser.VK_RIGHT =>
- MoveView(WPARAM_P,
- Win32.BOOL(Win32.USHORT (Win32.USHORT (
- Win32.Winuser.GetKeyState(Win32.Winuser.VK_SHIFT)) and
- Win32.USHORT(16#8000#))),
- Win32.BOOL(Win32.USHORT (Win32.USHORT (
- Win32.Winuser.GetKeyState(Win32.Winuser.VK_CONTROL))
- and Win32.USHORT(16#8000#))));
- when others => null;
- end case;
-
- when Win32.Winuser.WM_COMMAND =>
- case Utils.LoWord(DWORD(WPARAM_P)) is
- when MENU_EDIT_COPY =>
- CopyToClipBoard;
-
- when MENU_EDIT_REFRESH =>
- DoTheZoomIn(System.Null_Address);
-
- when MENU_OPTIONS_REFRESHRATE =>
- siResult := Win32.Winuser.DialogBox(GHINST,
- PCSTR(Win32.Winuser.MAKEINTRESOURCE(DID_REFRESHRATE)),
- HWND_P,
- RefreshRateDlgProc'access);
-
- when MENU_HELP_ABOUT =>
- siResult := Win32.Winuser.DialogBox(GHINST,
- LPCSTR(WinUser.MAKEINTRESOURCE(DID_ABOUT)),
- HWND_P,
- AboutDlgProc'access);
-
- when others => null;
- end case;
-
- when Win32.Winuser.WM_CLOSE =>
- if not Is_Null(GHPALPHYSICAL) then
- bResult := Win32.Wingdi.DeleteObject(
- Win32.Windef.HGDIOBJ(GHPALPHYSICAL));
- end if;
- bResult := Win32.Winuser.DestroyWindow(HWND_P);
-
- when Win32.Winuser.WM_DESTROY =>
- Win32.Winuser.PostQuitMessage(0);
-
- when others =>
- RETVAL := Win32.Winuser.DefWindowProc(HWND_P, MSG, WPARAM_P, LPARAM_P);
- end case;
- return RETVAL;
- end AppWndProc;
-
- -------------------------------------------------------------------------------
- --
- -- THIS FILE AND ANY ASSOCIATED DOCUMENTATION IS PROVIDED "AS IS" WITHOUT
- -- WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT
- -- LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR
- -- A PARTICULAR PURPOSE. The user assumes the entire risk as to the accuracy
- -- and the use of this file. This file may be used only by licensees of
- -- Microsoft Corporation's WIN32 Software Development Kit in accordance with
- -- the terms of the licensee's End-User License Agreement for Microsoft
- -- Software for the WIN32 Development Kit.
- --
- -- Copyright (c) Intermetrics, Inc. 1995
- -- Portions (c) 1985-1994 Microsoft Corporation with permission.
- -- Microsoft is a registered trademark and Windows and Windows NT are
- -- trademarks of Microsoft Corporation.
- --
- -------------------------------------------------------------------------------
-
- end Zoomin_Pkg;
-