home *** CD-ROM | disk | FTP | other *** search
/ Solo Programadores 22 / SOLO_22.iso / packages / win32ada / data.z / POLY.ADB < prev    next >
Encoding:
Text File  |  1995-12-19  |  16.8 KB  |  459 lines

  1. -- $Source: /home/harp/1/proto/monoBANK/winnt/poly.adb,v $ 
  2. -- $Revision: 1.3 $ $Date: 95/12/18 19:44:36 $ $Author: mg $ 
  3. -- 
  4. -- $Id: poly.adb 1.2 1995/01/25 15:55:43 teg Exp teg $
  5. --
  6. --  package Poly body
  7. --
  8. --  This is a translation of poly.c, which is part of the Microsoft gdidemo
  9. --  sample application.  Implementation of this in Ada required some design
  10. --  change to do away with some fance C pointer arithmetic which just wasn't
  11. --  translating well.
  12. -- 
  13. -- | POLYBEZIER MODULE
  14. -- |   This module contains the routines for demo
  15.  
  16. with Win32;  use Win32;
  17. with Win32.WinBase;
  18. with Win32.WinDef;
  19. with Win32.WinGdi;
  20. with Win32.WinUser;
  21. with Gdidemo_Util;
  22. with Wininfo;
  23. with Interfaces.C.Pointers;
  24. with Unchecked_Conversion;
  25. with Convert;
  26.  
  27. use Interfaces.C;
  28.  
  29. package body Poly is 
  30.  
  31.   use type System.Address;
  32.  
  33.   -- dummy return parameters
  34.   bResult : Win32.BOOL := Win32.TRUE;
  35.   uResult : Win32.UINT;
  36.   iResult : Win32.INT;
  37.   lReturn : Win32.LRESULT;
  38.   hGResult : Win32.Windef.HGLOBAL;
  39.  
  40.   -- conversion utilities
  41.   function HANDLE_TO_PPOLYDATA is new Unchecked_Conversion (Win32.Winnt.HANDLE,
  42.                                                             PPOLYDATA);
  43.   function LPVOID_TO_PBEZBUFFER is new Unchecked_Conversion (Win32.LPVOID,
  44.                                                              PBEZBUFFER);
  45.   function TO_AC_POINT_T is new Unchecked_Conversion (pt_array_ptr,
  46.                                                       Win32.Wingdi.ac_POINT_t);
  47.   --  Note; can't use Interfaces.C.Pointers yet since there appear to be 
  48.   --  unimplemented attributes used in the pointer arithmetic packages.
  49. --  package BEZBUF_Ptrs is new Interfaces.C.Pointers
  50. --          (Index         => Natural, --Interfaces.C.ptrdiff_t,
  51. --           Element       => BEZBUFFER,
  52. --           Element_Array => BEZBUFFER_ARRAY,
  53. --           Default_Terminator => null_BEZBUFFER); 
  54. --  use BEZBUF_Ptrs;
  55.  
  56.   function LPVOID_TO_PBEZBUFFER_ARRAY is new Unchecked_Conversion 
  57.            (Win32.LPVOID, PBEZBUFFER_ARRAY);
  58.  
  59.   mcs      : aliased Win32.WinUser.MDICREATESTRUCT;
  60.   ps       : aliased Win32.WinUser.PAINTSTRUCT;
  61.   rect_p   : aliased Win32.WinDef.RECT;
  62.   rect2_p  : aliased Win32.WinDef.RECT;
  63.   bez1_pts : aliased pt_array; 
  64.   rect3_p  : aliased Win32.WinDef.RECT;
  65.   bez2_pts : aliased pt_array;
  66.  
  67.                                              
  68.   -- array of colors to be used for curves.
  69.   type COLORREF_ARRAY is array (0 .. 19) of Win32.WinDef.COLORREF;
  70.   crColor : COLORREF_ARRAY := (
  71.                          16#000000FF#,16#0000FF00#,16#00FF0000#,16#0000FFFF#,
  72.                          16#00FF00FF#,16#00FFFF00#,16#00FFFFFF#,16#00000080#,
  73.                          16#00008000#,16#00800000#,16#00008080#,16#00800080#,
  74.                          16#00808000#,16#00808080#,16#000000FF#,16#0000FF00#,
  75.                          16#00FF0000#,16#0000FFFF#,16#00FF00FF#,16#00FFFF00#);
  76.  
  77. -- | CREATE BEZIER WINDOW PROCEDURE
  78. -- |   Create the bezier MDI-child window.
  79. procedure CreatePolyWindow (hWndClient : Win32.WinDef.HWND;
  80.                             nItem      : Win32.INT) is
  81.   hInst : Win32.Winnt.HANDLE;
  82.   mcs_p : Win32.WinUser.LPMDICREATESTRUCT;
  83. begin
  84.   hInst := Gdidemo_Util.GETINSTANCE (hWndClient);
  85.  
  86.   --  Initialize the MDI create struct for creation of the
  87.   --  test window.
  88.   mcs.szClass := POLYCLASS;
  89.   mcs.szTitle := POLYTITLE;
  90.   mcs.hOwner  := hInst;
  91.   mcs.x       := Win32.WinUser.CW_USEDEFAULT;
  92.   mcs.y       := Win32.WinUser.CW_USEDEFAULT;
  93.   mcs.cx      := Win32.WinUser.CW_USEDEFAULT;
  94.   mcs.cy      := Win32.WinUser.CW_USEDEFAULT;
  95.   mcs.style   := 0;
  96.   mcs.lParam  := Win32.LPARAM (nItem);
  97.  
  98.   mcs_p := mcs'Access;
  99.  
  100.   lReturn := Win32.WinUser.SendMessage
  101.                                 (hWndClient,
  102.                                  Win32.WinUser.WM_MDICREATE,
  103.                                  0,
  104.                                  Convert.LPMDICREATESTRUCT_TO_LPARAM (mcs_p));
  105.                                               
  106.  
  107. end CreatePolyWindow;
  108.  
  109.  
  110. -- | POLYBEZIER WINDOW PROCEDURE
  111. -- |   This is the main window function for the polybezier demo window.
  112. function PolyProc (hWnd_p   : Win32.WinDef.HWND;
  113.                    wMsg     : Win32.UINT;
  114.                    wParam_p : Win32.WPARAM;
  115.                    lParam_p : Win32.LPARAM) return Win32.LRESULT is
  116. begin
  117.   case wMsg is
  118.     when Win32.WinUser.WM_CREATE =>
  119.       bResult := PolyCreateProc(hWnd_p);
  120.  
  121.     when Win32.WinUser.WM_COMMAND =>
  122.       bResult := PolyCommandProc(hWnd_p,wParam_p,lParam_p);
  123.  
  124.     when Win32.WinUser.WM_MOVE =>
  125.       PolyRedraw(hWnd_p);
  126.  
  127.     when Win32.WinUser.WM_TIMER =>
  128.       PolyDrawBez(hWnd_p);
  129.  
  130.     when Win32.WinUser.WM_PAINT =>
  131.       PolyPaintProc(hWnd_p);
  132.  
  133.     when Win32.WinUser.WM_DESTROY =>
  134.       PolyDestroyProc(hWnd_p);
  135.  
  136.     when others =>
  137.       return Win32.WinUser.DefMDIChildProc (hWnd_p,wMsg,wParam_p,lParam_p);
  138.   end case;
  139.   return 0;
  140. end PolyProc;
  141.  
  142.  
  143. -- | POLYBEZIER CREATE PROCEDURE
  144. -- |   Create the polybezier window for the demo application.  This is a child
  145. -- |   of the MDI client window.  Allocate the extra object information for
  146. -- |   handling of the polybezier demo.
  147. function PolyCreateProc (hWnd_p : Win32.WinDef.HWND) return Win32.BOOL is
  148.   ppd : PPOLYDATA;
  149.   ppd_handle : Win32.Winnt.HANDLE;
  150. begin
  151.   if Wininfo.AllocWindowInfo (hwnd_p, (POLYDATA'size / 8)) = Win32.True then
  152.     ppd_handle := Wininfo.LockWindowInfo (hWnd_p);
  153.     if ppd_handle /= System.Null_Address then 
  154.       ppd := HANDLE_TO_PPOLYDATA (ppd_handle);
  155.       ppd.nBezTotal := 20;
  156.       ppd.nBezCurr  := 0;
  157.       ppd.nColor    := 0;
  158.       ppd.hBezBuffer := Win32.WinBase.GlobalAlloc (Win32.WinBase.GHND,
  159.                                             (BEZBUFFER'Size / 8) * MAX_BEZIER);
  160.       bResult := Wininfo.UnlockWindowInfo (hwnd_p);
  161.       PolyInitPoints (hWnd_p);
  162.       uResult := Win32.WinUser.SetTimer (hWnd_p,1,50,null);
  163.       return Win32.TRUE;
  164.     end if;
  165.     bResult := Wininfo.FreeWindowInfo (hWnd_p);
  166.   end if;
  167.   return Win32.FALSE;
  168. end PolyCreateProc;
  169.  
  170.  
  171. -- | POLYBEZIER COMMAND PROCEDURE
  172. -- |   Process polybezier commands.  This is a NOP for now.  But who knows what
  173. -- |   tomorrow may bring.
  174. function PolyCommandProc (hWnd_p : Win32.WinDef.HWND;
  175.                           wParam_p : Win32.WPARAM;
  176.                           lParam_p : Win32.LPARAM) return Win32.BOOL is
  177. begin
  178.   return Win32.TRUE;
  179. end PolyCommandProc; 
  180.  
  181.  
  182. -- | POLYBEZIER PAINT PROCEDURE
  183. -- |   Repaint the bezier window.  All we really do here is validate our window,
  184. -- |   and reset the array of bezier objects.
  185. procedure PolyPaintProc (hWnd_p : WinDef.HWND) is
  186.   hDC_p : Win32.WinDef.HDC;
  187. begin
  188.   hDC_p := Win32.WinUser.BeginPaint (hWnd_p, ps'Access);
  189.   if hDC_p /= System.Null_Address then 
  190.     bResult := Win32.WinUser.EndPaint (hWnd_p, ps'Access);
  191.   end if;
  192.   PolyRedraw (hWnd_p);
  193. end PolyPaintProc;
  194.  
  195.  
  196. -- | POLYBEZIER DESTROY PROCEDURE
  197. -- |   Kill the polybezier demo.  Free up the resources allocated on behalf of
  198. -- |   this object.
  199. procedure PolyDestroyProc (hWnd_p : Win32.WinDef.HWND) is
  200.   ppd : PPOLYDATA;
  201.   ppd_handle : Win32.Winnt.HANDLE;
  202. begin
  203.   bResult := Win32.WinUser.KillTimer(hWnd_p,1);
  204.   ppd_handle := Wininfo.LockWindowInfo (hWnd_p);
  205.   if ppd_handle /= System.Null_Address then 
  206.     ppd := HANDLE_TO_PPOLYDATA (ppd_handle);
  207.     hGResult := Win32.WinBase.GlobalFree(ppd.hBezBuffer);
  208.     bResult := Wininfo.UnlockWindowInfo(hWnd_p);
  209.   end if;
  210.   bResult := Wininfo.FreeWindowInfo(hWnd_p);
  211. end PolyDestroyProc; 
  212.  
  213.  
  214. -- | GET NEW VELOCITY
  215. -- |   This routine creates a new velocity for the bezier points.  Each bezier
  216. -- |   point is randomly chosen.  The two inside points should have a speed
  217. -- |   less then the endpoints (most of the time-better effect).
  218. function PolyNewVel (i : Win32.INT) return Win32.LONG is
  219.   nRet : Win32.LONG;
  220. begin
  221.   if (i = 1) or (i = 2) then
  222. --    nRet := ((Win32.INT (Gdidemo_Util.lRandom) rem VELMAX) / 3) + VELMIN;
  223. -- yes, it is important where that INT_T conversion goes!
  224.     nRet := ((Gdidemo_Util.lRandom rem VELMAX) / 3) + VELMIN;
  225.   else
  226. --    nRet := (Win32.INT (Gdidemo_Util.lRandom) rem VELMAX) + VELMIN; 
  227.     nRet := (Gdidemo_Util.lRandom rem VELMAX) + VELMIN; 
  228.   end if;
  229.   if nRet < 0 then
  230.     return (-1 * nRet);
  231.   else
  232.     return nRet;
  233.   end if;   
  234. end PolyNewVel;
  235.  
  236.  
  237. -- | INITIALIZE POLYBEZIER POINTS
  238. -- |   This routine initializes the polybezier points for the first object.
  239. -- |   This is performed on startup of the window.
  240. procedure PolyInitPoints (hWnd_p : Win32.WinDef.HWND) is
  241.   ppd   : PPOLYDATA;
  242.   lpBez : PBEZBUFFER;
  243.   idx   : Integer;
  244.   ppd_handle : Win32.Winnt.HANDLE;
  245.   lpBez_void : Win32.LPVOID;
  246. begin
  247.   ppd_handle := Wininfo.LockWindowInfo (hWnd_p);
  248.   if ppd_handle /= System.Null_Address then 
  249.     ppd := HANDLE_TO_PPOLYDATA (ppd_handle);
  250.     lpBez_void := WinBase.GlobalLock (ppd.hBezBuffer);
  251.     if lpBez_void /= System.Null_Address then 
  252.       lpBez := LPVOID_TO_PBEZBUFFER (lpBez_void);
  253.       bResult := Win32.WinUser.GetClientRect (hWnd_p, rect_p'Access);
  254.       for idx in 0 .. BEZ_PTS - 1 loop 
  255.         lpBez.pPts(idx).x := (Gdidemo_Util.lRandom) rem rect_p.right;
  256.         lpBez.pPts(idx).y := (Gdidemo_Util.lRandom) rem rect_p.bottom;
  257.  
  258.         ppd.pVel(idx).x := PolyNewVel(Win32.INT (idx));
  259.         ppd.pVel(idx).y := PolyNewVel(Win32.INT (idx));
  260.       end loop;
  261.       bResult := Win32.WinBase.GlobalUnlock(ppd.hBezBuffer);
  262.     end if;
  263.     bResult := Wininfo.UnlockWindowInfo(hWnd_p);
  264.   end if;
  265. end PolyInitPoints;
  266.  
  267.  
  268. -- | POLYBEZIER REDRAW
  269. -- |   This routine resets the bezier curves and redraws the poly-bezier client
  270. -- |   area.
  271. procedure PolyRedraw (hWnd_p : Win32.WinDef.HWND) is
  272.   ppd          : PPOLYDATA;
  273.   lpBez        : PBEZBUFFER_ARRAY;
  274.   -- lpBez,lpCurr : BEZBUF_Ptrs.Pointer;  --PBEZBUFFER;
  275.   hDC_p        : Win32.WinDef.HDC;
  276.   i,j          : Win32.INT;
  277.   ppd_handle   : Win32.Winnt.HANDLE;
  278.   lpBez_void   : Win32.LPVOID;
  279.   -- note that bez_pts is pt_array, not the array defined in Wingdi.  This 
  280.   -- will not execute properly if that type is used.
  281.   bez_pts_ptr  : pt_array_ptr;
  282. begin
  283.   ppd_handle := Wininfo.LockWindowInfo (hWnd_p);
  284.   if ppd_handle /= System.Null_Address then 
  285.     ppd := HANDLE_TO_PPOLYDATA (ppd_handle);
  286.     lpBez_void := Win32.WinBase.GlobalLock (ppd.hBezBuffer);
  287.     if lpBez_void /= System.Null_Address then 
  288.       lpBez := LPVOID_TO_PBEZBUFFER_ARRAY (lpBez_void);
  289.       -- lpBez := LPVOID_TO_Pointer (lpBez_void);
  290.       hDC_p := Win32.WinUser.GetDC (hWnd_p);
  291.       if hDC_p /= System.Null_Address then 
  292.         -- /*
  293.         -- ** Save the current bezier.  Set the first bezier in the
  294.         -- ** array to that curve, and use it as a basis for the next
  295.         -- ** series.
  296.         -- */
  297. --                 lpCurr        = lpBez+ppd->nBezCurr;
  298. --                 *lpBez        = *lpCurr;
  299. --                 ppd->nBezCurr = 0;
  300.         lpBez (0) := lpBez (ppd.nBezCurr);
  301.         ppd.nBezCurr := 0;
  302.  
  303.         -- /*
  304.         -- ** Clean the curves (all but the first curve).
  305.         -- */
  306.         for j in 1 .. ppd.nBezTotal - 1 loop
  307.           for i in 0 .. 3 loop -- BEZ_PTS - 1 loop
  308.             lpBez(j).pPts(i).x := -1;
  309.             lpBez(j).pPts(i).y :=  0;
  310.           end loop;
  311.         end loop;
  312.         -- /*
  313.         -- ** Clear the display.
  314.         -- */
  315.         bResult := Win32.WinUser.GetClientRect(hWnd_p,rect2_p'Access);
  316.         bResult := Win32.WinGdi.BitBlt(hDC_p,0,0,Win32.INT(rect2_p.right), 
  317.                                        Win32.INT(rect2_p.bottom), 
  318.                                        System.Null_Address, 0,0,0);
  319.  
  320.         -- /*
  321.         -- ** Draw the first curve in the bezier array.
  322.         -- */
  323.         -- Create a real array of points to pass to the PolyBezier function
  324.         for i in 0 .. 3 loop -- BEZ_PTS - 1 loop
  325.           bez1_pts(i).x := lpBez(0).pPts(i).x;
  326.           bez1_pts(i).y := lpBez(0).pPts(i).y;
  327.         end loop;
  328.         bez_pts_ptr := bez1_pts'access;
  329.         -- can't convert BEZ_PTS to DWORD, so 
  330.         bResult := Win32.WinGdi.PolyBezier (hDC_p,
  331.                    --bez1_pts'access, BEZ_PTS_DW);
  332.                    TO_AC_POINT_T (bez_pts_ptr), BEZ_PTS_DW);
  333.         iResult := Win32.WinUser.ReleaseDC(hWnd_p,hDC_p);
  334.       end if;
  335.       bResult := Win32.WinBase.GlobalUnlock(ppd.hBezBuffer);
  336.     end if;
  337.     bResult := Wininfo.UnlockWindowInfo(hWnd_p);
  338.   end if;
  339. end PolyRedraw;
  340.  
  341.  
  342. procedure PolyDrawBez (hWnd_p : Win32.WinDef.HWND) is
  343.   ppd     : PPOLYDATA;
  344.   lpBez   : PBEZBUFFER_ARRAY;
  345.   lpCurr,lpPrev : BEZBUFFER;
  346.   idx     : Win32.INT;
  347.   x,y     : Win32.LONG;
  348.   hDC_p   : Win32.WinDef.HDC;
  349.   hPen_p  : Win32.WinDef.HGDIOBJ;
  350.   ppd_handle : Win32.Winnt.HANDLE;
  351.   lpBez_void : Win32.LPVOID;
  352.   bez_pts_ptr : pt_array_ptr;
  353.   gdi_obj     : Win32.Windef.HGDIOBJ;
  354. begin
  355.   ppd_handle := Wininfo.LockWindowInfo (hWnd_p);
  356.   if ppd_handle /= System.Null_Address then 
  357.     ppd := HANDLE_TO_PPOLYDATA (ppd_handle);
  358.     lpBez_void := Win32.WinBase.GlobalLock (ppd.hBezBuffer);
  359.     if lpBez_void /= System.Null_Address then 
  360.       lpBez := LPVOID_TO_PBEZBUFFER_ARRAY (lpBez_void); 
  361.       hDC_p := Win32.WinUser.GetDC (hWnd_p);
  362.       if hDC_p /= System.Null_Address then 
  363.         bResult := Win32.WinUser.GetClientRect(hWnd_p,rect3_p'Access);
  364. --                 lpPrev = lpBez+ppd->nBezCurr;
  365. --                 ppd->nBezCurr += 1;
  366.         lpPrev := lpBez (ppd.nBezCurr);
  367.         ppd.nBezCurr := ppd.nBezCurr + 1;
  368.         if ppd.nBezCurr >= ppd.nBezTotal then
  369.           ppd.nBezCurr := 0;
  370.           ppd.nColor  := (ppd.nColor + 1) rem 20; -- (++ppd->nColor % 20);
  371.         end if;
  372.         lpCurr := lpBez(ppd.nBezCurr);
  373.  
  374.         if lpCurr.pPts(0).x /= -1 then
  375.           hPen_p := Win32.WinGdi.SelectObject(hDC_p, Win32.Windef.HGDIOBJ (
  376.                     Win32.WinGdi.GetStockObject(Win32.WinGdi.BLACK_PEN)));
  377.           -- make a real array of points to pass to polybezier
  378.           for i in 0 .. 3 loop -- BEZ_PTS - 1 loop
  379.             bez2_pts(i).x := lpCurr.pPts(i).x;
  380.             bez2_pts(i).y := lpCurr.pPts(i).y;
  381.           end loop;
  382.           bez_pts_ptr := bez2_pts'access;
  383.           bResult := Win32.WinGdi.PolyBezier(hDC_p,
  384.                      TO_AC_POINT_T (bez_pts_ptr), BEZ_PTS_DW);
  385.           gdi_obj := Win32.WinGdi.SelectObject(hDC_p,hPen_p);
  386.         end if;
  387.  
  388.         for idx in 0 .. 3 loop --BEZ_PTS - 1 loop -- =0; idx < BEZ_PTS; idx++)
  389.           x := lpPrev.pPts(idx).x + ppd.pVel(idx).x;
  390.           y := lpPrev.pPts(idx).y + ppd.pVel(idx).y;
  391.  
  392.           if x >= rect3_p.right then
  393.             x := rect3_p.right - ((x - rect3_p.right)+1);
  394.             ppd.pVel(idx).x := -1 * PolyNewVel(Win32.INT(idx));
  395.           end if;
  396.  
  397.           if x <= rect3_p.left then
  398.             x := rect3_p.left + ((rect3_p.left - x)+1);
  399.             ppd.pVel(idx).x := PolyNewVel(Win32.INT(idx));
  400.           end if;
  401.  
  402.           if y >= rect3_p.bottom then
  403.             y := rect3_p.bottom - ((y - rect3_p.bottom)+1);
  404.             ppd.pVel(idx).y := -1 * PolyNewVel(Win32.INT(idx));
  405.           end if;
  406.  
  407.           if y <= rect3_p.top then
  408.             y := rect3_p.top + ((rect3_p.top - y)+1);
  409.             ppd.pVel(idx).y := PolyNewVel(Win32.INT(idx));
  410.           end if;
  411.  
  412.           lpCurr.pPts(idx).x := x;
  413.           lpCurr.pPts(idx).y := y;
  414.  
  415.         end loop;
  416.         hPen_p := Win32.WinGdi.SelectObject(hDC_p, Win32.Windef.HGDIOBJ (
  417.                                Win32.WinGdi.CreatePen(Win32.WinGdi.PS_SOLID,
  418.                                                       1,crColor(ppd.nColor))));
  419.         -- make a real array of points to pass to polybezier
  420.         for i in 0 .. 3 loop -- BEZ_PTS - 1 loop
  421.           bez2_pts(i).x := lpCurr.pPts(i).x;
  422.           bez2_pts(i).y := lpCurr.pPts(i).y;
  423.         end loop;
  424.         bez_pts_ptr := bez2_pts'access;
  425.         bResult := Win32.WinGdi.PolyBezier(hDC_p, 
  426.                                 TO_AC_POINT_T (bez_pts_ptr), BEZ_PTS_DW);
  427.         bResult := Win32.WinGdi.DeleteObject(Win32.WinGdi.SelectObject
  428.                                                           (hDC_p,hPen_p));
  429.         iResult := Win32.WinGdi.SetROP2(hDC_p,Win32.WinGdi.R2_COPYPEN);
  430.         iResult := Win32.WinUser.ReleaseDC(hWnd_p,hDC_p);
  431.         -- store new bez data back in buffer
  432.         lpBez(ppd.nBezCurr) := lpCurr;
  433.       end if;
  434.       bResult := Win32.WinBase.GlobalUnlock(ppd.hBezBuffer);
  435.     end if;
  436.     bResult := Wininfo.UnlockWindowInfo(hWnd_p);
  437.   end if;
  438. end PolyDrawBez;
  439.  
  440. -------------------------------------------------------------------------------
  441. --
  442. -- THIS FILE AND ANY ASSOCIATED DOCUMENTATION IS PROVIDED "AS IS" WITHOUT 
  443. -- WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT 
  444. -- LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR 
  445. -- A PARTICULAR PURPOSE.  The user assumes the entire risk as to the accuracy 
  446. -- and the use of this file.  This file may be used only by licensees of 
  447. -- Microsoft Corporation's WIN32 Software Development Kit in accordance with 
  448. -- the terms of the licensee's End-User License Agreement for Microsoft 
  449. -- Software for the WIN32 Development Kit.
  450. --
  451. -- Copyright (c) Intermetrics, Inc. 1995
  452. -- Portions (c) 1985-1994 Microsoft Corporation with permission.
  453. -- Microsoft is a registered trademark and Windows and Windows NT are 
  454. -- trademarks of Microsoft Corporation.
  455. --
  456. -------------------------------------------------------------------------------
  457.  
  458. end Poly;
  459.