diff --git a/harbour/ChangeLog b/harbour/ChangeLog index fa1c2b3ce8..37cbb31482 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,10 @@ +20000407-15:25 GMT+2 Maurilio Longo + + * source/rtl/diskspac.c + + Added OS/2 (GCC and icc) support + * tests/MakeFile + + db_brows was missing from sources list + 20000407-03:26 GMT+1 Victor Szakats * include/hbver.h @@ -15,8 +22,8 @@ 20000406-10:55 GMT+1 Ryszard Glab *source/compiler/harbour.y - * the parser resumes parsing after 'parse errors' (parsing errors - are non-fatal now) + * the parser resumes parsing after 'parse errors' (parsing errors + are non-fatal now) 20000406-08:52 GMT+1 Victor Szakats @@ -69,7 +76,7 @@ * source/rtl/math.c ! exception redefined as _exception for Borland C++ 5.5 and upper. ! Disabled math exception handling for Borland C++ 5.3 C++ mode, - since it won't work. Other Borland C++ version (4.x,5.x) should be + since it won't work. Other Borland C++ version (4.x,5.x) should be also checked in this respect. * source/rtl/gtwin/gtwin.c @@ -87,8 +94,8 @@ * makefile.vc ! Using a safer method for the unistd.h workaround. It's now created - in the local OBJ dir instead of the common INCLUDE. This way it's - impossible to accidently leave it there and break Cygnus and other + in the local OBJ dir instead of the common INCLUDE. This way it's + impossible to accidently leave it there and break Cygnus and other GCC make processes. + utils/hbtest/rt_stra.prg @@ -96,10 +103,10 @@ * makefile.* ! rt_str.prg split to make it compile with BCC31. - ; All these fixes were needed to compile in C++ mode with Borland C++ + ; All these fixes were needed to compile in C++ mode with Borland C++ (3.1, 5.3, 5.5). Hmm, the Harbour .EXE sizes are actually 10% smaller than with 32 bit Borland Cs. - + 2000-04-04 20:00 GMT-4 David G. Holm * source/rtl/dir.c @@ -146,7 +153,7 @@ * source/rtl/dircmd.prg + Changed to use NationMsg() instead of the hard-wired English - string. The previous 100% compatible version left in STRICT_COMPAT + string. The previous 100% compatible version left in STRICT_COMPAT branch. * source/rtl/console.c @@ -205,7 +212,7 @@ * source/rtl/tget.prg + Added XPP compatible _Assign and _End() methods. - ! Home(), End(), Access(), ColorDisp(), UpdateBuffer() + ! Home(), End(), Access(), ColorDisp(), UpdateBuffer() fixed to return Self. + TODO added about Xbase++ compatible method. diff --git a/harbour/source/rtl/diskspac.c b/harbour/source/rtl/diskspac.c index e24afb1baa..6747110309 100644 --- a/harbour/source/rtl/diskspac.c +++ b/harbour/source/rtl/diskspac.c @@ -44,7 +44,7 @@ * */ -/* NOTE: DISKSPACE() supports larger disks than 2GB. CA-Cl*pper will always +/* NOTE: DISKSPACE() supports larger disks than 2GB. CA-Cl*pper will always return a (long) value, Harbour may return a (double) for large values, the decimal places are always set to zero, though. */ @@ -58,6 +58,12 @@ #include #endif +#if defined(HB_OS_OS2) + #define INCL_BASE + #define INCL_DOSERRORS + #include +#endif + /* NOTE: The second parameter is a Harbour extension, check fileio.ch for the possible values. */ @@ -120,7 +126,7 @@ HB_FUNC( DISKSPACE ) while( TRUE ) { - typedef BOOL (WINAPI *P_GDFSE)(LPCTSTR, PULARGE_INTEGER, + typedef BOOL (WINAPI *P_GDFSE)(LPCTSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER); char szPath[ 4 ]; @@ -202,7 +208,7 @@ HB_FUNC( DISKSPACE ) ( double ) i64RetVal.u.HighPart + ( double ) i64RetVal.u.HighPart * ( double ) 0xFFFFFFFF; - + if( uiType == HB_DISK_USED ) { dSpace -= ( double ) i64FreeBytes.u.LowPart + @@ -214,7 +220,7 @@ HB_FUNC( DISKSPACE ) #endif } } - else + else { DWORD dwSectorsPerCluster; DWORD dwBytesPerSector; @@ -271,6 +277,53 @@ HB_FUNC( DISKSPACE ) break; } +#elif defined(HB_OS_OS2) + + struct _FSALLOCATE fsa; + USHORT rc; + + uiType = HB_MIN( uiType, HB_DISK_TOTAL ); + + /* Query level 1 info from filesystem */ + while( ( rc = DosQueryFSInfo(uiDrive, 1, &fsa, sizeof(fsa)) ) != 0 ) + { + USHORT uiAction = hb_errRT_BASE_Ext1( EG_OPEN, 2018, NULL, NULL, 0, EF_CANDEFAULT ); + + /* NOTE: Under 'Standard' behaviour, this error does not allow 'retry' + but if you should wish to make it so, then or EF_CANRETRY with + EF_CANDEFAULT above) + */ + + if( uiAction != E_RETRY ) + break; + } + + if(rc == 0) + { + switch( uiType ) + { + case HB_DISK_AVAIL: + case HB_DISK_FREE: + dSpace = ( double ) fsa.cUnitAvail * + ( double ) fsa.cSectorUnit * + ( double ) fsa.cbSector; + break; + + case HB_DISK_USED: + case HB_DISK_TOTAL: + dSpace = ( double ) fsa.cUnit * + ( double ) fsa.cSectorUnit * + ( double ) fsa.cbSector; + + if( uiType == HB_DISK_USED ) + dSpace -= ( double ) fsa.cUnitAvail * + ( double ) fsa.cSectorUnit * + ( double ) fsa.cbSector; + break; + } + + } + #else HB_SYMBOL_UNUSED( uiDrive ); diff --git a/harbour/tests/Makefile b/harbour/tests/Makefile index a8d889b286..8c5cbd1827 100644 --- a/harbour/tests/Makefile +++ b/harbour/tests/Makefile @@ -57,6 +57,7 @@ PRG_SOURCES=\ dates2.prg \ dates3.prg \ dates4.prg \ + db_brows.prg \ dbevalts.prg \ debugtst.prg \ devtest.prg \