diff --git a/Tools/unix/zxcc/Build-OW.cmd b/Tools/unix/zxcc/Build-OW.cmd deleted file mode 100644 index 3be3cdaa..00000000 --- a/Tools/unix/zxcc/Build-OW.cmd +++ /dev/null @@ -1,21 +0,0 @@ -@echo off -setlocal - -:: -:: Edit WATCOM variable below as needed for your environment -:: -set WATCOM=..\..\Tools\WATCOM2 - -set PATH=%WATCOM%\BINNT;%WATCOM%\BINW;%PATH% -set EDPATH=%WATCOM%\EDDAT -set INCLUDE=%WATCOM%\H;%WATCOM%\H\NT - -copy config.h.windows config.h - -cl /Fe"zxcc.exe" zxcc.c cpmdrv.c cpmglob.c cpmparse.c cpmredir.c drdos.c util.c track.c xlt.c zxbdos.c zxcbdos.c zxdbdos.c z80.c -if errorlevel 1 exit /b 255 - -cl /Fe"zxccdbg.exe" /DDEBUG zxcc.c cpmdrv.c cpmglob.c cpmparse.c cpmredir.c drdos.c util.c track.c xlt.c zxbdos.c zxcbdos.c zxdbdos.c z80.c -if errorlevel 1 exit /b 255 - -copy cpm\bios.bin . \ No newline at end of file diff --git a/Tools/unix/zxcc/Build-VC.cmd b/Tools/unix/zxcc/Build-VC.cmd deleted file mode 100644 index b9383633..00000000 --- a/Tools/unix/zxcc/Build-VC.cmd +++ /dev/null @@ -1,25 +0,0 @@ -@echo off -setlocal - -:: -:: Visual Studio x86 Native Tools Command Prompt is assumed -:: - -:: Below configures VS2012 to target Windows XP. -:: Not sure if it will work in later versions of VS, but seems -:: to do no harm. -set INCLUDE=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Include;%INCLUDE% -set PATH=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Bin;%PATH% -set LIB=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Lib;%LIB% -set CL=/D_USING_V110_SDK71_;%CL% -set LINK=/SUBSYSTEM:CONSOLE,5.01 %LINK% - -copy config.h.windows config.h - -cl -I. zxcc.c cpmdrv.c cpmglob.c cpmparse.c cpmredir.c drdos.c util.c xlt.c zxbdos.c zxcbdos.c zxdbdos.c z80.c dirent.c track.c -if errorlevel 1 exit /b 255 - -cl -I. /DDEBUG /Fe"zxccdbg.exe" zxcc.c cpmdrv.c cpmglob.c cpmparse.c cpmredir.c drdos.c util.c xlt.c zxbdos.c zxcbdos.c zxdbdos.c z80.c dirent.c track.c -if errorlevel 1 exit /b 255 - -copy cpm\bios.bin . \ No newline at end of file diff --git a/Tools/unix/zxcc/Clean.cmd b/Tools/unix/zxcc/Clean.cmd deleted file mode 100644 index eb7fc764..00000000 --- a/Tools/unix/zxcc/Clean.cmd +++ /dev/null @@ -1,11 +0,0 @@ -@echo off -setlocal - -if exist *.exe del *.exe -if exist *.obj del *.obj -if exist *.err del *.err -if exist *.o del *.o -if exist *.bin del *.bin -if exist zxcc del zxcc -if exist zxccdbg del zxccdbg -if exist config.h del config.h diff --git a/Tools/unix/zxcc/ReadMe.txt b/Tools/unix/zxcc/ReadMe.txt index ba94bf5d..a0b0a63e 100644 --- a/Tools/unix/zxcc/ReadMe.txt +++ b/Tools/unix/zxcc/ReadMe.txt @@ -84,3 +84,10 @@ January 9, 2022 --WBW 9:34 AM 2/10/2022 +- Added a call to trackFile in fcb_close. I think it was always + supposed to be there. Was not causing any real problems other + than superfluous attempts by releaseFile to close files that + were already closed. + +--WBW 3:58 PM 3/2/2022 + diff --git a/Tools/unix/zxcc/cpmredir.c b/Tools/unix/zxcc/cpmredir.c index cb47cc1c..ff32a3c0 100644 --- a/Tools/unix/zxcc/cpmredir.c +++ b/Tools/unix/zxcc/cpmredir.c @@ -204,6 +204,8 @@ cpm_word fcb_close(cpm_byte* fcb) } #endif + trackFile(NULL, fcb, handle); + FCBRET(0); } diff --git a/Tools/unix/zxcc/track.c b/Tools/unix/zxcc/track.c index 7c944b79..6b961e31 100644 --- a/Tools/unix/zxcc/track.c +++ b/Tools/unix/zxcc/track.c @@ -97,6 +97,8 @@ #ifdef FILETRACKER +#include "cpmint.h" + typedef struct _track { struct _track* next; int handle; @@ -115,10 +117,21 @@ static track_t* rmHandle(track_t* s) { void releaseFile(char* fname) { track_t* s = (track_t*)&openFiles; + DBGMSGV("releaseFile: \"%s\"\n", fname); while (s->next) if (strcmp(s->next->fname, fname) == 0) { - close(s->next->handle); - Msg("releaseFile closed file \"%s\"\n", s->next->fname); + DBGMSGV(" closing file #%i: \"%s\"\n", s->next->handle, s->next->fname); +#ifdef _WIN32 + { + BOOL b; + b = CloseHandle((HANDLE)s->next->handle); + if (!b) + DBGMSGV(" failed to close file #%i (Error=%lu): %s\n", s->next->handle, GetLastError(), GetErrorStr(GetLastError())); + } +#else + if (close(s->next->handle)) + DBGMSGV(" failed to close file #%i (errno=%lu): %s\n", s->next->handle, errno, strerror(errno)); +#endif s->next = rmHandle(s->next); } else @@ -127,14 +140,24 @@ void releaseFile(char* fname) { int trackFile(char* fname, void* fcb, int fd) { track_t* s = (track_t*)&openFiles; - Msg("trackFile: \"%s\", FCB=0x%X, Handle=%i\n", fname, (byte*)fcb - RAM, fd); + DBGMSGV("trackFile: \"%s\", FCB=0x%X, Handle=%i\n", fname, (byte*)fcb - RAM, fd); while (s->next) { /* find any existing fcb or fd */ if (s->next->fcb == fcb || s->next->handle == fd) { if (s->next->handle != fd) { - close(s->next->handle); - Msg(" closed file \"%s\", Handle=%i\n", s->next->fname, s->next->handle); + DBGMSGV(" closing file #%i: \"%s\"\n", s->next->handle, s->next->fname); +#ifdef _WIN32 + { + BOOL b; + b = CloseHandle((HANDLE)s->next->handle); + if (!b) + DBGMSGV(" failed to close file #%i (Error=%lu): %s\n", s->next->handle, GetLastError(), GetErrorStr(GetLastError())); + } +#else + if (close(s->next->handle)) + DBGMSGV(" failed to close file #%i (errno=%lu): %s\n", s->next->handle, errno, strerror(errno)); +#endif } - Msg(" released file \"%s\", Handle=%i\n", s->next->fname, s->next->handle); + DBGMSGV(" released file \"%s\", Handle=%i\n", s->next->fname, s->next->handle); s->next = rmHandle(s->next); /* release the tracker */ } else diff --git a/Tools/unix/zxcc/zxcc.c b/Tools/unix/zxcc/zxcc.c index 1dacc9bd..21929704 100644 --- a/Tools/unix/zxcc/zxcc.c +++ b/Tools/unix/zxcc/zxcc.c @@ -306,6 +306,12 @@ int main(int ac, char** av) fprintf(stderr, "Could not initialise CPMREDIR library\n"); zxcc_exit(1); } + +#ifdef FILETRACKER + DBGMSG("File tracking is ENABLED\n"); +#else + DBGMSG("File tracking is DISABLED\n"); +#endif /* allow environment variables to override default locations */ /* two options are supported, explicit overrides for each directory diff --git a/Tools/zxcc/zxcc-src.zip b/Tools/zxcc/zxcc-src.zip index 99e39026..9f6a04cf 100644 Binary files a/Tools/zxcc/zxcc-src.zip and b/Tools/zxcc/zxcc-src.zip differ diff --git a/Tools/zxcc/zxcc.exe b/Tools/zxcc/zxcc.exe index cdd06094..fa4df35f 100644 Binary files a/Tools/zxcc/zxcc.exe and b/Tools/zxcc/zxcc.exe differ diff --git a/Tools/zxcc/zxcc_ft.exe b/Tools/zxcc/zxcc_ft.exe new file mode 100644 index 00000000..9f8c9838 Binary files /dev/null and b/Tools/zxcc/zxcc_ft.exe differ diff --git a/Tools/zxcc/zxccdbg.exe b/Tools/zxcc/zxccdbg.exe index 38cdd2e6..7a8a7388 100644 Binary files a/Tools/zxcc/zxccdbg.exe and b/Tools/zxcc/zxccdbg.exe differ diff --git a/Tools/zxcc/zxccdbg_ft.exe b/Tools/zxcc/zxccdbg_ft.exe new file mode 100644 index 00000000..aa6a6c0f Binary files /dev/null and b/Tools/zxcc/zxccdbg_ft.exe differ