/* * Copyright (C) 1998, 1989 Transarc Corporation - All rights reserved * * (C) COPYRIGHT IBM CORPORATION 1987, 1988 * LICENSED MATERIALS - PROPERTY OF IBM * */ /* Copyright (C) 1994 Cazamar Systems, Inc. */ #include #include #include #include #include #include #include #if (_MSC_VER >= 1300) LARGE_INTEGER LargeIntegerAdd(LARGE_INTEGER a, LARGE_INTEGER b) { LARGE_INTEGER result; int carry; result.LowPart=a.LowPart+b.LowPart; carry=(result.LowPart < b.LowPart) ? 1 : 0; result.HighPart=a.HighPart+b.HighPart+ carry; return result; } LARGE_INTEGER LargeIntegerSubtract(LARGE_INTEGER a, LARGE_INTEGER b) { LARGE_INTEGER result; int borrow; result.LowPart=a.LowPart-b.LowPart; borrow=(result.LowPart > a.LowPart) ? 1 : 0; result.HighPart=a.HighPart-b.HighPart- borrow; return result; } LARGE_INTEGER ExtendedLargeIntegerDivide(LARGE_INTEGER a, unsigned long b, unsigned long *remainder) { LARGE_INTEGER result; ULONGLONG a1,q1,r1; result.HighPart=0; result.LowPart=0; if (b == 0) { return result; } if (b == 1) { *remainder = 0; return a; } a1=(a.HighPart << 32) | a.LowPart; q1=a1/b; r1=a1-(q1*b); if (r1 > ULONG_MAX) /*XXX */; result.HighPart=q1 >> 32; result.LowPart=q1 & 0xffffffff; *remainder=r1 & 0xffffffff; return result; } LARGE_INTEGER LargeIntegerDivide(LARGE_INTEGER a, LARGE_INTEGER b, LARGE_INTEGER *remainder) { LARGE_INTEGER result; ULONGLONG a1,b1,q1,r1; result.HighPart=0; result.LowPart=0; if (b.HighPart == 0 && b.LowPart == 0) { return result; } if (b.HighPart == 0 && b.LowPart == 1) { remainder->HighPart = 0; remainder->LowPart = 0; return a; } a1=(a.HighPart << 32) | a.LowPart; b1=(b.HighPart << 32) | a.LowPart; q1=a1/b1; r1=a1-(q1*b1); result.HighPart=q1 >> 32; result.LowPart=q1 & 0xffffffff; remainder->HighPart=r1 >> 32; remainder->LowPart=r1 & 0xffffffff; return result; } LARGE_INTEGER ConvertLongToLargeInteger(unsigned long a) { LARGE_INTEGER result; result.HighPart=0; result.LowPart=a; return result; } #endif