GFX2_DiskFreeSpace()

This commit is contained in:
Thomas Bernard 2020-04-12 00:03:36 +02:00
parent 2fdceab6bc
commit 776884f0fe
No known key found for this signature in database
GPG Key ID: 0FF11B67A5C0863C
3 changed files with 80 additions and 76 deletions

View File

@ -26,36 +26,9 @@
#include <stdio.h>
#include <string.h>
#if defined(__WIN32__) || defined(WIN32)
#include <windows.h>
#if defined(_MSC_VER) && _MSC_VER < 1900
#define snprintf _snprintf
#endif
#elif defined(__macosx__) || defined(__FreeBSD__) || defined(__OpenBSD__)
#include <sys/param.h>
#include <sys/mount.h>
#elif defined(__NetBSD__)
#include <sys/statvfs.h>
#elif defined (__linux__) || defined(__SYLLABLE__)
#include <sys/vfs.h>
#elif defined (__HAIKU__)
#include "haiku.h"
#elif defined (__MINT__)
#include <mint/sysbind.h>
#include <mint/osbind.h>
#include <mint/ostruct.h>
#elif defined(__AROS__)
#include <sys/mount.h>
#endif
#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
#include <stdlib.h>
#endif
#if defined(__macosx__)
#import <CoreFoundation/CoreFoundation.h>
#import <ApplicationServices/ApplicationServices.h>
#endif
#if defined(USE_SDL) || defined(USE_SDL2)
#include <SDL_image.h>
@ -756,7 +729,6 @@ void Button_Stats(int btn)
qword mem_size = 0;
int y;
#if defined (__MINT__)
_DISKINFO drvInfo;
unsigned long STRAM = 0, TTRAM = 0;
char helpBuf[3][16];
#endif
@ -927,50 +899,8 @@ void Button_Stats(int btn)
Print_in_window(162,y,buffer,STATS_DATA_COLOR,MC_Black);
y+=8;
#if defined(__WIN32__) || defined(WIN32)
{
ULARGE_INTEGER tailleU, totalbytes, totalfreebytes;
if (GetDiskFreeSpaceExA(Main.selector.Directory, &tailleU, &totalbytes, &totalfreebytes))
{
GFX2_Log(GFX2_DEBUG, "%s: %luMB free for GrafX2 (total %luMB, %luMB free)\n",
Main.selector.Directory, (unsigned long)(tailleU.QuadPart >> 20),
(unsigned long)(totalbytes.QuadPart >> 20), (unsigned long)(totalfreebytes.QuadPart >> 20));
mem_size = tailleU.QuadPart;
}
else
{
mem_size = 0;
GFX2_Log(GFX2_ERROR, "GetDiskFreeSpaceExA() failed\n");
}
}
#elif defined(__linux__) || defined(__macosx__) || defined(__FreeBSD__) || defined(__SYLLABLE__) || defined(__AROS__) || defined(__OpenBSD__)
{
struct statfs disk_info;
statfs(Main.selector.Directory,&disk_info);
mem_size=(qword) disk_info.f_bfree * (qword) disk_info.f_bsize;
}
#elif defined(__NetBSD__)
{
struct statvfs disk_info;
statvfs(Main.selector.Directory,&disk_info);
mem_size=(qword) disk_info.f_bfree * (qword) disk_info.f_bsize;
}
#elif defined(__HAIKU__)
mem_size = haiku_get_free_space(Main.selector.Directory);
#elif defined (__MINT__)
mem_size=0;
Dfree(&drvInfo,0);
//number of free clusters*sectors per cluster*bytes per sector;
// reports current drive
mem_size=drvInfo.b_free*drvInfo.b_clsiz*drvInfo.b_secsiz;
#else
#define NODISKSPACESUPPORT
// Free disk space is only for shows. Other platforms can display 0.
#if !defined(__SWITCH__)
#warning "Missing code for your platform !!! Check and correct please :)"
#endif
mem_size=0;
#endif
mem_size = GFX2_DiskFreeSpace(Main.selector.Directory);
// Display free space
if (mem_size != 0)

View File

@ -24,12 +24,38 @@
*/
#if defined(USE_SDL) || defined(USE_SDL2)
#include <SDL.h>
#else
#if defined(WIN32)
#include <windows.h>
#else
#elif !defined(WIN32)
#include <sys/time.h>
#endif
#if defined(WIN32)
#include <windows.h>
#endif
#if defined(__macosx__) || defined(__FreeBSD__) || defined(__OpenBSD__)
#include <sys/param.h>
#include <sys/mount.h>
#elif defined(__NetBSD__)
#include <sys/statvfs.h>
#elif defined (__linux__) || defined(__SYLLABLE__)
#include <sys/vfs.h>
#elif defined (__HAIKU__)
#include "haiku.h"
#elif defined (__MINT__)
#include <mint/sysbind.h>
#include <mint/osbind.h>
#include <mint/ostruct.h>
#elif defined(__AROS__)
#include <sys/mount.h>
#endif
#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
#include <stdlib.h>
#endif
#if defined(__macosx__)
#import <CoreFoundation/CoreFoundation.h>
#import <ApplicationServices/ApplicationServices.h>
#endif
#include "struct.h"
@ -86,6 +112,49 @@ void GFX2_OpenURL(const char * buffer, unsigned int len)
#endif
}
qword GFX2_DiskFreeSpace(const char * path)
{
#if defined(__WIN32__) || defined(WIN32)
ULARGE_INTEGER tailleU, totalbytes, totalfreebytes;
if (GetDiskFreeSpaceExA(path, &tailleU, &totalbytes, &totalfreebytes))
{
GFX2_Log(GFX2_DEBUG, "%s: %luMB free for GrafX2 (total %luMB, %luMB free)\n",
path, (unsigned long)(tailleU.QuadPart >> 20),
(unsigned long)(totalbytes.QuadPart >> 20), (unsigned long)(totalfreebytes.QuadPart >> 20));
return tailleU.QuadPart;
}
else
{
GFX2_Log(GFX2_ERROR, "GetDiskFreeSpaceExA() failed\n");
return 0;
}
#elif defined(__linux__) || defined(__macosx__) || defined(__FreeBSD__) || defined(__SYLLABLE__) || defined(__AROS__) || defined(__OpenBSD__)
struct statfs disk_info;
statfs(path ,&disk_info);
return (qword) disk_info.f_bfree * (qword) disk_info.f_bsize;
#elif defined(__NetBSD__)
struct statvfs disk_info;
statvfs(path, &disk_info);
return (qword) disk_info.f_bfree * (qword) disk_info.f_bsize;
#elif defined(__HAIKU__)
return haiku_get_free_space(path);
#elif defined (__MINT__)
_DISKINFO drvInfo;
Dfree(&drvInfo, 0);
//number of free clusters*sectors per cluster*bytes per sector;
// reports current drive
return drvInfo.b_free*drvInfo.b_clsiz*drvInfo.b_secsiz;
#else
#define NODISKSPACESUPPORT
// Free disk space is only for shows. Other platforms can display 0.
#if !defined(__SWITCH__)
#warning "Missing code for your platform !!! Check and correct please :)"
#endif
return 0;
#endif
}
#if defined(__macosx__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__SWITCH__)
#if defined(__OpenBSD__)
#include <sys/param.h>

View File

@ -40,6 +40,11 @@ dword GFX2_GetTicks(void);
*/
void GFX2_OpenURL(const char * url, unsigned int len);
/**
* Disk free space
*/
qword GFX2_DiskFreeSpace(const char * path);
#if defined (__MINT__)
void Atari_Memory_free(unsigned long *stRam, unsigned long *ttRam);
#else