From 3995a8bba21ba48f62b94ffc6ae2e80ab49c90d7 Mon Sep 17 00:00:00 2001 From: florian Date: Sun, 8 Aug 2004 16:52:51 +0000 Subject: [PATCH] * tried to fix some wsprintf issues + now compiled in objfpc mode so some integer => smallint changes where necessary; hopefully, I didn't forget one --- rtl/win32/windows.pp | 10 +++++++++- rtl/win32/wininc/ascfun.inc | 15 ++++++++++++--- rtl/win32/wininc/base.inc | 18 ++++++++++++------ rtl/win32/wininc/redef.inc | 25 ++++++++++++++----------- rtl/win32/wininc/unidef.inc | 10 ++++++++-- rtl/win32/wininc/unifun.inc | 12 +++++++++--- 6 files changed, 64 insertions(+), 26 deletions(-) diff --git a/rtl/win32/windows.pp b/rtl/win32/windows.pp index 0168a3429f..d2b0a3f893 100644 --- a/rtl/win32/windows.pp +++ b/rtl/win32/windows.pp @@ -19,6 +19,8 @@ unit windows; {$smartlink on} {$endif} +{ stuff like array of const is used } +{$mode objfpc} {$calling stdcall} interface @@ -64,7 +66,13 @@ implementation end. { $Log$ - Revision 1.6 2003-09-17 15:06:36 peter + Revision 1.7 2004-08-08 16:52:51 florian + * tried to fix some wsprintf issues + + now compiled in objfpc mode + so some integer => smallint changes where necessary; hopefully, + I didn't forget one + + Revision 1.6 2003/09/17 15:06:36 peter * stdcall patch Revision 1.5 2002/11/04 12:19:01 marco diff --git a/rtl/win32/wininc/ascfun.inc b/rtl/win32/wininc/ascfun.inc index fef30a3496..6a1f14753f 100644 --- a/rtl/win32/wininc/ascfun.inc +++ b/rtl/win32/wininc/ascfun.inc @@ -13,7 +13,6 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. **********************************************************************} - { ASCIIFunctions.h @@ -165,6 +164,10 @@ function GetComputerNameA(lpBuffer:LPSTR; nSize:LPDWORD):WINBOOL; external 'kern function SetComputerNameA(lpComputerName:LPCSTR):WINBOOL; external 'kernel32' name 'SetComputerNameA'; function GetUserNameA(lpBuffer:LPSTR; nSize:LPDWORD):WINBOOL; external 'advapi32' name 'GetUserNameA'; function wvsprintfA(_para1:LPSTR; _para2:LPCSTR; arglist:va_list):longint; external 'user32' name 'wvsprintfA'; +function wsprintfA(_para1:LPSTR; _para2:LPCSTR; const args:array of const):longint; cdecl; external 'user32' name 'wsprintfA'; +function wsprintfA(_para1:LPSTR; _para2:LPCSTR):longint; external 'user32' name 'wsprintfA'; +function wsprintf(_para1:LPSTR; _para2:LPCSTR; const args:array of const):longint; external 'user32' name 'wsprintfA'; +function wsprintf(_para1:LPSTR; _para2:LPCSTR):longint; cdecl; external 'user32' name 'wsprintfA'; function LoadKeyboardLayoutA(pwszKLID:LPCSTR; Flags:UINT):HKL; external 'user32' name 'LoadKeyboardLayoutA'; function GetKeyboardLayoutNameA(pwszKLID:LPSTR):WINBOOL; external 'user32' name 'GetKeyboardLayoutNameA'; function CreateDesktopA(lpszDesktop:LPSTR; lpszDevice:LPSTR; pDevmode:LPDEVMODE; dwFlags:DWORD; dwDesiredAccess:DWORD;lpsa:LPSECURITY_ATTRIBUTES):HDESK; external 'user32' name 'CreateDesktopA'; @@ -491,7 +494,13 @@ end; { $Log$ - Revision 1.9 2004-05-02 14:46:45 marco + Revision 1.10 2004-08-08 16:52:51 florian + * tried to fix some wsprintf issues + + now compiled in objfpc mode + so some integer => smallint changes where necessary; hopefully, + I didn't forget one + + Revision 1.9 2004/05/02 14:46:45 marco * some confusion over createfont, cleaned up (bug 3056) Revision 1.8 2002/12/12 17:34:35 peter @@ -509,4 +518,4 @@ end; Revision 1.1.2.3 2002/01/19 11:48:20 peter * more functions added from webbugs -} +} \ No newline at end of file diff --git a/rtl/win32/wininc/base.inc b/rtl/win32/wininc/base.inc index 484ebbf578..c0c8d027cf 100644 --- a/rtl/win32/wininc/base.inc +++ b/rtl/win32/wininc/base.inc @@ -62,7 +62,7 @@ COLORREF = cardinal; TCOLORREF = cardinal; - SHORT = integer; + SHORT = smallint; WINT = longint; LONG = longint; DWORD = cardinal; @@ -190,7 +190,7 @@ PINT = ^longint; PLONG = ^longint; - PSHORT = ^integer; + PSHORT = ^SHORT; PSTR = Pchar; @@ -218,7 +218,7 @@ PVOID = pointer; - RETCODE = integer; + RETCODE = SHORT; SC_HANDLE = HANDLE; SC_LOCK = LPVOID; @@ -776,7 +776,7 @@ type { argument types are unknown } function SEXT_LOWORD(l : longint) : longint; begin - SEXT_LOWORD:=longint(integer(l)); + SEXT_LOWORD:=longint(SHORT(l)); end; { was #define dname(params) def_expr } @@ -939,7 +939,13 @@ type { $Log$ - Revision 1.21 2003-12-08 21:23:24 peter + Revision 1.22 2004-08-08 16:52:52 florian + * tried to fix some wsprintf issues + + now compiled in objfpc mode + so some integer => smallint changes where necessary; hopefully, + I didn't forget one + + Revision 1.21 2003/12/08 21:23:24 peter * hmodule added Revision 1.20 2003/12/05 11:53:12 marco @@ -980,4 +986,4 @@ type * LARGE_INT and ULARGE_INT types fixed * LONGLONG defined properly -} \ No newline at end of file +} diff --git a/rtl/win32/wininc/redef.inc b/rtl/win32/wininc/redef.inc index ef88d885ed..f37c97f8b2 100644 --- a/rtl/win32/wininc/redef.inc +++ b/rtl/win32/wininc/redef.inc @@ -180,8 +180,6 @@ function InitializeCriticalSectionAndSpinCount(var CriticalSection : TRTLCritica function SetCriticalSectionSpinCount(var CriticalSection : TRTLCriticalSection;dwSpinCount : DWORD ): DWORD; external 'kernel32' name 'SetCriticalSectionSpinCount'; function TryEnterCriticalSection(var CriticalSection : TRTLCriticalSection) : BOOL; external 'kernel32' name 'TryEnterCriticalSection'; -function _lcreat(const lpPathName: LPCSTR; iAttribute: Integer): HFILE; external 'kernel32' name '_lcreat'; -function _lopen(const lpPathName: LPCSTR; iReadWrite: Integer): HFILE; external 'kernel32' name '_lopen'; //function _lwrite(hFile: HFILE; const lpBuffer: LPCSTR; uBytes: UINT): UINT; external 'kernel32' name '_lwrite'; //function AccessCheck(pSecurityDescriptor: PSecurityDescriptor; ClientToken: THandle; DesiredAccess: DWORD; const GenericMapping: TGenericMapping; var PrivilegeSet: TPrivilegeSet; var PrivilegeSetLength: DWORD; var GrantedAccess: DWORD; // var AccessStatus: BOOL): BOOL; external 'advapi32' name 'AccessCheck'; @@ -339,7 +337,7 @@ function DispatchMessageA(const lpMsg: TMsg): Longint; external 'user32' name 'D function DispatchMessageW(const lpMsg: TMsg): Longint; external 'user32' name 'DispatchMessageW'; function DosDateTimeToFileTime(wFatDate, wFatTime: Word; var lpFileTime: TFileTime): BOOL; external 'kernel32' name 'DosDateTimeToFileTime'; function DPtoLP(DC: HDC; var Points; Count: Integer): BOOL; external 'gdi32' name 'DPtoLP'; -function DrawAnimatedRects(hwnd: HWND; idAni: Integer; const lprcFrom, lprcTo: TRect): BOOL; external 'user32' name 'DrawAnimatedRects'; +// function DrawAnimatedRects(hwnd: HWND; idAni: Integer; const lprcFrom, lprcTo: TRect): BOOL; external 'user32' name 'DrawAnimatedRects'; //function DrawCaption(p1: HWND; p2: HDC; const p3: TRect; p4: UINT): BOOL; external 'user32' name 'DrawCaption'; function DrawEdge(hdc: HDC; var qrc: TRect; edge: UINT; grfFlags: UINT): BOOL; external 'user32' name 'DrawEdge'; //function DrawFocusRect(hDC: HDC; const lprc: TRect): BOOL; external 'user32' name 'DrawFocusRect'; @@ -366,7 +364,7 @@ function EnumDisplaySettingsA(lpszDeviceName: LPCSTR; iModeNum: DWORD; var lpDev //function EqualRect(const lprc1, lprc2: TRect): BOOL; external 'user32' name 'EqualRect'; function ExtCreatePen(PenStyle, Width: DWORD; const Brush: TLogBrush; StyleCount: DWORD; Style: Pointer): HPEN; external 'gdi32' name 'ExtCreatePen'; function ExtCreateRegion(p1: PXForm; p2: DWORD; const p3: TRgnData): HRGN; external 'gdi32' name 'ExtCreateRegion'; -function ExtEscape(DC: HDC; p2, p3: Integer; const p4: LPCSTR; p5: Integer; p6: LPSTR): Integer; external 'gdi32' name 'ExtEscape'; +// function ExtEscape(DC: HDC; p2, p3: Integer; const p4: LPCSTR; p5: Integer; p6: LPSTR): Integer; external 'gdi32' name 'ExtEscape'; function FileTimeToDosDateTime(const lpFileTime: TFileTime; var lpFatDate, lpFatTime: Word): BOOL; external 'kernel32' name 'FileTimeToDosDateTime'; function FileTimeToLocalFileTime(const lpFileTime: TFileTime; var lpLocalFileTime: TFileTime): BOOL; external 'kernel32' name 'FileTimeToLocalFileTime'; function FileTimeToSystemTime(const lpFileTime: TFileTime; var lpSystemTime: TSystemTime): BOOL; external 'kernel32' name 'FileTimeToSystemTime'; @@ -464,7 +462,6 @@ function GetDiskFreeSpaceW(lpRootPathName: LPWSTR; var lpSectorsPerCluster, lpBy function GetDiskFreeSpaceEx(lpDirectoryName: PChar; lpFreeBytesAvailableToCaller, lpTotalNumberOfBytes:pLargeInteger; lpTotalNumberOfFreeBytes: PLargeInteger): BOOL;external 'kernel32' name 'GetDiskFreeSpaceExA'; function GetDiskFreeSpaceExA(lpDirectoryName: LPCSTR; lpFreeBytesAvailableToCaller, lpTotalNumberOfBytes: pLargeInteger; lpTotalNumberOfFreeBytes: PLargeInteger): BOOL;external 'kernel32' name 'GetDiskFreeSpaceExA'; function GetDiskFreeSpaceExW(lpDirectoryName: LPWSTR; lpFreeBytesAvailableToCaller, lpTotalNumberOfBytes: pLargeInteger; lpTotalNumberOfFreeBytes: PLargeInteger): BOOL;external 'kernel32' name 'GetDiskFreeSpaceExW'; -function GetDlgItemInt(hDlg: HWND; nIDDlgItem: Integer; var lpTranslated: BOOL; bSigned: BOOL): UINT; external 'user32' name 'GetDlgItemInt'; //function GetEnhMetaFilePixelFormat(p1: HENHMETAFILE; p2: Cardinal; var p3: TPixelFormatDescriptor): UINT;external 'gdi32' name 'GetEnhMetaFilePixelFormat'; function GetExitCodeProcess(hProcess: THandle; var lpExitCode: DWORD): BOOL; external 'kernel32' name 'GetExitCodeProcess'; function GetExitCodeThread(hThread: THandle; var lpExitCode: DWORD): BOOL; external 'kernel32' name 'GetExitCodeThread'; @@ -663,7 +660,7 @@ function MsgWaitForMultipleObjects(nCount: DWORD; var pHandles; fWaitAll: BOOL; {$ifdef support_smartlink} function MsgWaitForMultipleObjectsEx(nCount: DWORD; var pHandles; dwMilliseconds, dwWakeMask, dwFlags: DWORD): DWORD;external 'user32' name 'MsgWaitForMultipleObjectsEx'; {$endif support_smartlink} -function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; const lpMultiByteStr: LPCSTR; cchMultiByte: Integer; lLPWSTRStr: LPWSTR; cchWideChar: Integer): Integer; external 'kernel32' name 'MultiByteToWideChar'; +// function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; const lpMultiByteStr: LPCSTR; cchMultiByte: Integer; lLPWSTRStr: LPWSTR; cchWideChar: Integer): Integer; external 'kernel32' name 'MultiByteToWideChar'; function ObjectOpenAuditAlarm(SubsystemName: PChar; HandleId: Pointer; ObjectTypeName: PChar; ObjectName: PChar; pSecurityDescriptor: PSecurityDescriptor; ClientToken: THandle; DesiredAccess, GrantedAccess: DWORD; var Privileges: TPrivilegeSet; ObjectCreation, AccessGranted: BOOL; var GenerateOnClose: BOOL): BOOL;external 'advapi32' name 'ObjectOpenAuditAlarmA'; function ObjectOpenAuditAlarmA(SubsystemName: LPCSTR; HandleId: Pointer; ObjectTypeName: LPCSTR; ObjectName: LPCSTR; pSecurityDescriptor: PSecurityDescriptor; ClientToken: THandle; DesiredAccess, GrantedAccess: DWORD; var Privileges: TPrivilegeSet; @@ -777,7 +774,7 @@ function ScreenToClient(hWnd: HWND; var lpPoint: TPoint): BOOL; external 'user32 function ScrollConsoleScreenBuffer(hConsoleOutput: THandle; const lpScrollRectangle: TSmallRect; const lpClipRectangle: TSmallRect; dwDestinationOrigin: TCoord; var lpFill: TCharInfo): BOOL;external 'kernel32' name 'ScrollConsoleScreenBufferA'; function ScrollConsoleScreenBufferA(hConsoleOutput: THandle; const lpScrollRectangle: TSmallRect; const lpClipRectangle: TSmallRect; dwDestinationOrigin: TCoord; var lpFill: TCharInfo): BOOL; external 'kernel32' name 'ScrollConsoleScreenBufferA'; function ScrollConsoleScreenBufferW(hConsoleOutput: THandle; const lpScrollRectangle: TSmallRect; const lpClipRectangle: TSmallRect; dwDestinationOrigin: TCoord; var lpFill: TCharInfo): BOOL; external 'kernel32' name 'ScrollConsoleScreenBufferW'; -function ScrollDC(DC: HDC; DX, DY: Integer; var Scroll, Clip: TRect; Rgn: HRGN; Update: PRect): BOOL; external 'user32' name 'ScrollDC'; +//function ScrollDC(DC: HDC; DX, DY: Integer; var Scroll, Clip: TRect; Rgn: HRGN; Update: PRect): BOOL; external 'user32' name 'ScrollDC'; //function SearchPath(lpPath, lpFileName, lpExtension: PChar; nBufferLength: DWORD; lpBuffer: PChar; var lpFilePart: PChar): DWORD;external 'kernel32' name 'SearchPathA'; //function SearchPathA(lpPath, lpFileName, lpExtension: LPCSTR; nBufferLength: DWORD; lpBuffer: LPCSTR; var lpFilePart: LPCSTR): DWORD; external 'kernel32' name 'SearchPathA'; //function SearchPathW(lpPath, lpFileName, lpExtension: LPWSTR; nBufferLength: DWORD; lpBuffer: LPWSTR; var lpFilePart: LPWSTR): DWORD; external 'kernel32' name 'SearchPathW'; @@ -798,7 +795,7 @@ function SetCriticalSectionSpinCount(var lpCriticalSection: TRTLCriticalSection; function SetDeviceGammaRamp(DC: HDC; var Ramp): BOOL; external 'gdi32' name 'SetDeviceGammaRamp'; function SetDIBColorTable(DC: HDC; p2, p3: UINT; var RGBQuadSTructs): UINT; external 'gdi32' name 'SetDIBColorTable'; function SetDIBits(DC: HDC; Bitmap: HBITMAP; StartScan, NumScans: UINT; Bits: Pointer; var BitsInfo: TBitmapInfo; Usage: UINT): Integer; external 'gdi32' name 'SetDIBits'; -function SetDIBitsToDevice(DC: HDC; DestX, DestY: Integer; Width, Height: DWORD; SrcX, SrcY: Integer; nStartScan, NumScans: UINT; Bits: Pointer; var BitsInfo: TBitmapInfo; Usage: UINT): Integer; external 'gdi32' name 'SetDIBitsToDevice'; +//function SetDIBitsToDevice(DC: HDC; DestX, DestY: Integer; Width, Height: DWORD; SrcX, SrcY: Integer; nStartScan, NumScans: UINT; Bits: Pointer; var BitsInfo: TBitmapInfo; Usage: UINT): Integer; external 'gdi32' name 'SetDIBitsToDevice'; function SetFileTime(hFile:HANDLE; var lpCreationTime:FILETIME; var lpLastAccessTime:FILETIME; var lpLastWriteTime:FILETIME):WINBOOL; external 'kernel32' name 'SetFileTime'; //function SetKeyboardState(var KeyState: TKeyboardState): BOOL; external 'user32' name 'SetKeyboardState'; //function SetLocalTime(const lpSystemTime: TSystemTime): BOOL; external 'kernel32' name 'SetLocalTime'; @@ -827,7 +824,7 @@ function SetWinMetaFileBits(p1: UINT; p2: PChar; p3: HDC; const p4: TMetaFilePic function StartDoc(DC: HDC; const p2: TDocInfo): Integer;external 'gdi32' name 'StartDocA'; function StartDocA(DC: HDC; const p2: TDocInfoA): Integer; external 'gdi32' name 'StartDocA'; //function StartDocW(DC: HDC; const p2: TDocInfoW): Integer; external 'gdi32' name 'StartDocW'; -function StretchDIBits(DC: HDC; DestX, DestY, DestWidth, DestHegiht, SrcX, SrcY, SrcWidth, SrcHeight: Integer; Bits: Pointer; var BitsInfo: TBitmapInfo; Usage: UINT; Rop: DWORD): Integer; external 'gdi32' name 'StretchDIBits'; +//function StretchDIBits(DC: HDC; DestX, DestY, DestWidth, DestHegiht, SrcX, SrcY, SrcWidth, SrcHeight: Integer; Bits: Pointer; var BitsInfo: TBitmapInfo; Usage: UINT; Rop: DWORD): Integer; external 'gdi32' name 'StretchDIBits'; function SubtractRect(var lprcDst: TRect; const lprcSrc1, lprcSrc2: TRect): BOOL; external 'user32' name 'SubtractRect'; function SystemTimeToFileTime(const lpSystemTime: TSystemTime; var lpFileTime: TFileTime): BOOL; external 'kernel32' name 'SystemTimeToFileTime'; function SystemTimeToTzSpecificLocalTime(lpTimeZoneInformation: PTimeZoneInformation; var lpUniversalTime, lpLocalTime: TSystemTime): BOOL; external 'kernel32' name 'SystemTimeToTzSpecificLocalTime'; @@ -1062,7 +1059,13 @@ end; { $Log$ - Revision 1.24 2004-07-26 06:48:30 michael + Revision 1.25 2004-08-08 16:52:52 florian + * tried to fix some wsprintf issues + + now compiled in objfpc mode + so some integer => smallint changes where necessary; hopefully, + I didn't forget one + + Revision 1.24 2004/07/26 06:48:30 michael + Added trackmouseevent call and structures Revision 1.23 2004/05/09 10:46:34 peter @@ -1117,4 +1120,4 @@ end; * Some macro functions fixed. Didn't commit win32platform first because of mandatory init. -} \ No newline at end of file +} diff --git a/rtl/win32/wininc/unidef.inc b/rtl/win32/wininc/unidef.inc index 7862d5c9f6..7e5be98c1f 100644 --- a/rtl/win32/wininc/unidef.inc +++ b/rtl/win32/wininc/unidef.inc @@ -164,7 +164,7 @@ function GetComputerName(lpBuffer:LPWSTR; nSize:LPDWORD):WINBOOL; external 'kern function SetComputerName(lpComputerName:LPCWSTR):WINBOOL; external 'kernel32' name 'SetComputerNameW'; function GetUserName(lpBuffer:LPWSTR; nSize:LPDWORD):WINBOOL; external 'advapi32' name 'GetUserNameW'; function wvsprintf(_para1:LPWSTR; _para2:LPCWSTR; arglist:va_list):longint; external 'user32' name 'wvsprintfW'; -{function wsprintf(_para1:LPWSTR; _para2:LPCWSTR; const args:array of const):longint;CDECL; external 'user32' name 'wsprintfW';} +function wsprintf(_para1:LPWSTR; _para2:LPCWSTR; const args:array of const):longint;cdecl; external 'user32' name 'wsprintfW'; function wsprintf(_para1:LPWSTR; _para2:LPCWSTR):longint;CDECL; external 'user32' name 'wsprintfW'; function LoadKeyboardLayout(pwszKLID:LPCWSTR; Flags:UINT):HKL; external 'user32' name 'LoadKeyboardLayoutW'; function GetKeyboardLayoutName(pwszKLID:LPWSTR):WINBOOL; external 'user32' name 'GetKeyboardLayoutNameW'; @@ -492,7 +492,13 @@ end; { $Log$ - Revision 1.8 2004-05-02 14:46:45 marco + Revision 1.9 2004-08-08 16:52:52 florian + * tried to fix some wsprintf issues + + now compiled in objfpc mode + so some integer => smallint changes where necessary; hopefully, + I didn't forget one + + Revision 1.8 2004/05/02 14:46:45 marco * some confusion over createfont, cleaned up (bug 3056) Revision 1.7 2002/12/12 17:34:36 peter diff --git a/rtl/win32/wininc/unifun.inc b/rtl/win32/wininc/unifun.inc index c19a64f6de..734b2c1d41 100644 --- a/rtl/win32/wininc/unifun.inc +++ b/rtl/win32/wininc/unifun.inc @@ -164,8 +164,8 @@ function GetComputerNameW(lpBuffer:LPWSTR; nSize:LPDWORD):WINBOOL; external 'ker function SetComputerNameW(lpComputerName:LPCWSTR):WINBOOL; external 'kernel32' name 'SetComputerNameW'; function GetUserNameW(lpBuffer:LPWSTR; nSize:LPDWORD):WINBOOL; external 'advapi32' name 'GetUserNameW'; function wvsprintfW(_para1:LPWSTR; _para2:LPCWSTR; arglist:va_list):longint; external 'user32' name 'wvsprintfW'; -{function wsprintfW(_para1:LPWSTR; _para2:LPCWSTR; const args:array of const):longint;CDECL; external 'user32' name 'wsprintfW';} -function wsprintfW(_para1:LPWSTR; _para2:LPCWSTR):longint;CDECL; external 'user32' name 'wsprintfW'; +function wsprintfW(_para1:LPWSTR; _para2:LPCWSTR; const args:array of const):longint;cdecl; external 'user32' name 'wsprintfW'; +function wsprintfW(_para1:LPWSTR; _para2:LPCWSTR):longint; external 'user32' name 'wsprintfW'; function LoadKeyboardLayoutW(pwszKLID:LPCWSTR; Flags:UINT):HKL; external 'user32' name 'LoadKeyboardLayoutW'; function GetKeyboardLayoutNameW(pwszKLID:LPWSTR):WINBOOL; external 'user32' name 'GetKeyboardLayoutNameW'; function CreateDesktopW(lpszDesktop:LPWSTR; lpszDevice:LPWSTR; pDevmode:LPDEVMODE; dwFlags:DWORD; dwDesiredAccess:DWORD;lpsa:LPSECURITY_ATTRIBUTES):HDESK; external 'user32' name 'CreateDesktopW'; @@ -492,7 +492,13 @@ end; { $Log$ - Revision 1.8 2004-05-02 14:46:46 marco + Revision 1.9 2004-08-08 16:52:52 florian + * tried to fix some wsprintf issues + + now compiled in objfpc mode + so some integer => smallint changes where necessary; hopefully, + I didn't forget one + + Revision 1.8 2004/05/02 14:46:46 marco * some confusion over createfont, cleaned up (bug 3056) Revision 1.7 2002/12/12 17:34:36 peter