From e743059ad2e04d87704733a998b92898bc0134d5 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Tue, 6 Apr 2021 04:15:42 +0100 Subject: [PATCH] Add missing definitions for Borland C++ 2.0. --- setter/src/dos/dosdefs.h | 29 ++++++++++++++++++++++++++++- setter/src/dos/volume.c | 22 ++++++++++++++++++++-- 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/setter/src/dos/dosdefs.h b/setter/src/dos/dosdefs.h index 8060d81..0cb1d82 100644 --- a/setter/src/dos/dosdefs.h +++ b/setter/src/dos/dosdefs.h @@ -27,10 +27,13 @@ Copyright (C) 2011-2021 Natalia Portillo #if defined(__WATCOM__) #include -#define __dos_mkdir(a) mkdir(a) +#define __dos_mkdir(path) mkdir(path) #elif defined(__DJGPP__) #include #define __dos_mkdir(path) mkdir(path, 0) +#elif defined(__TURBOC__) +#include +#define __dos_mkdir(path) mkdir(path) #endif #if defined(__WATCOM__) @@ -69,6 +72,30 @@ unsigned int _dos_getdiskfree_ex(unsigned int drive, struct diskfree_ex_t* disks #define MINUTE(t) ((t & 0x07E0) >> 5) #define SECOND(t) ((t & 0x001F) << 1) +#ifndef ENOMEM +#define ENOMEN 12 +#endif + +#ifndef ENOSYS +#define ENOSYS 38 +#endif + +#ifndef EINVAL +#define EINVAL 22 +#endif + +// Seems these were defined starting in Borland C++ 3.0 +#if defined(__BORLANDC__) && __BORLANDC__ <= 0x200 +#include + +#define _dos_setfileattr(path, attrib) _chmod(path, 1, attrib) +#define _dos_close(handle) _close(handle) +#define _dos_setdrive(drivep, ndrives) setdisk(drivep) + +unsigned _dos_write(int handle, void far* buf, unsigned len, unsigned* nwritten); +unsigned _dos_creat(const char* path, int attrib, int* handlep); +unsigned _dos_creatnew(const char* path, int attrib, int* handlep); + #endif #endif \ No newline at end of file diff --git a/setter/src/dos/volume.c b/setter/src/dos/volume.c index 00b97f7..66a188e 100644 --- a/setter/src/dos/volume.c +++ b/setter/src/dos/volume.c @@ -34,12 +34,20 @@ Copyright (C) 2011-2021 Natalia Portillo void GetVolumeInfo(const char* path, size_t* clusterSize) { - char driveNo = path[0] - '@'; - struct diskfree_t oldFreeSpace; + char driveNo = path[0] - '@'; +#ifdef __TURBOC__ + struct dfree oldFreeSpace; +#else + struct diskfree_t oldFreeSpace; +#endif struct diskfree_ex_t freeSpace; unsigned int rc; +#ifdef __TURBOC__ + memset(&oldFreeSpace, 0, sizeof(struct dfree)); +#else memset(&oldFreeSpace, 0, sizeof(struct diskfree_t)); +#endif memset(&freeSpace, 0, sizeof(struct diskfree_ex_t)); if(driveNo > 32) driveNo -= 32; @@ -50,11 +58,21 @@ void GetVolumeInfo(const char* path, size_t* clusterSize) { if(errno == ENOSYS) { +#ifdef __TURBOC__ + getdfree(driveNo, &oldFreeSpace); + freeSpace.sectorsPerCluster = oldFreeSpace.df_sclus; + freeSpace.freeClusters = oldFreeSpace.df_avail; + freeSpace.bytesPerSector = oldFreeSpace.df_bsec; + freeSpace.totalClusters = oldFreeSpace.df_total; + + rc = oldFreeSpace.df_sclus == 0xFFFF; +#else rc = _dos_getdiskfree(driveNo, &oldFreeSpace); freeSpace.sectorsPerCluster = oldFreeSpace.sectors_per_cluster; freeSpace.freeClusters = oldFreeSpace.avail_clusters; freeSpace.bytesPerSector = oldFreeSpace.bytes_per_sector; freeSpace.totalClusters = oldFreeSpace.total_clusters; +#endif } else {