File system manager : Complete the plug-in interface.

This commit is contained in:
Jean-François DEL NERO
2026-08-13 19:57:28 +02:00
parent 04ee2045fa
commit c1e5550fe2
14 changed files with 635 additions and 235 deletions
+4 -1
View File
@@ -147,7 +147,7 @@ TRACK_FORMATS_SUPPORT = luts.o track_types_defs.o aed6200p_track.o amiga_mfm_tra
ENCODING_SUPPORT = fm_encoding.o mfm_encoding.o dec_m2fm_encoding.o
FS_SUPPORT = fs_manager.o fs_amigados.o fs_fat12.o fs_cpm.o libcpmfs.o
FS_SUPPORT = fs_manager.o fs_manager_list.o fs_amigados.o fs_fat12.o fs_cpm.o libcpmfs.o
XML_DISK = xml_disk.o lzw.o pack.o rle.o
XML_PARSER_EXPAT = xmlparse.o xmlrole.o xmltok.o
@@ -298,6 +298,9 @@ streamConvert.o : $(BASEDIR)/stream_analyzer/streamConvert.c $(BASEDIR)/stream_a
fs_manager.o : $(BASEDIR)/fs_manager/fs_manager.c $(BASEDIR)/fs_manager/fs_manager.h
$(CC) -o $@ -c $< $(CFLAGS)
fs_manager_list.o : $(BASEDIR)/fs_manager/fs_manager_list.c $(BASEDIR)/fs_manager/fs_manager_list.h
$(CC) -o $@ -c $< $(CFLAGS)
fs_fat12.o : $(BASEDIR)/fs_manager/fs_fat12/fs_fat12.c $(BASEDIR)/fs_manager/fs_fat12/fs_fat12.h
$(CC) -o $@ -c $< $(CFLAGS)
+5 -70
View File
@@ -76,6 +76,7 @@
#include "tracks/track_types_defs.h"
#include "fs_manager/fs_manager.h"
int dummy_output(int MSGTYPE,const char * chaine, ...)
{
@@ -2335,68 +2336,6 @@ alloc_error:
return NULL;
}
fs_config fs_config_table[]=
{
{"fatst", "",FS_720KB_ATARI_FAT12,0},
{"fatst902", "",FS_902KB_ATARI_FAT12,0},
{"fatst360", "",FS_360KB_ATARI_FAT12,0},
{"amigados", "3\"5 880KB DSDD AmigaDOS",FS_880KB_AMIGADOS,1},
{"amigados_hd", "3\"5 1760KB DSHD AmigaDOS",FS_1760KB_AMIGADOS,2},
{"fat160a", "5\"25 & 8\" 160KB SSDD 300RPM FAT12",FS_5P25_300RPM_160KB_MSDOS_FAT12,0},
{"fat160b", "5\"25 & 8\" 160KB SSDD 360RPM FAT12",FS_5P25_360RPM_160KB_MSDOS_FAT12,0},
{"fat180a", "5\"25 180KB SSDD 300RPM FAT12",FS_5P25_300RPM_180KB_MSDOS_FAT12,0},
{"fat180b", "5\"25 180KB SSDD 360RPM FAT12",FS_5P25_360RPM_180KB_MSDOS_FAT12,0},
{"fat320ssa", "5\"25 320KB SSDD 300RPM FAT12",FS_5P25_SS_300RPM_320KB_MSDOS_FAT12,0},
{"fat320ssb", "5\"25 320KB SSDD 360RPM FAT12",FS_5P25_SS_360RPM_320KB_MSDOS_FAT12,0},
{"fat320dsa", "5\"25 320KB DSDD 300RPM FAT12",FS_5P25_DS_300RPM_320KB_MSDOS_FAT12,0},
{"fat320dsb", "5\"25 320KB DSDD 360RPM FAT12",FS_5P25_DS_360RPM_320KB_MSDOS_FAT12,0},
{"fat360a", "5\"25 & 8\" 360KB DSDD 300RPM FAT12",FS_5P25_DS_300RPM_360KB_MSDOS_FAT12,0},
{"fat360b", "5\"25 & 8\" 360KB DSDD 360RPM FAT12",FS_5P25_DS_360RPM_360KB_MSDOS_FAT12,0},
{"fat640", "3\"5 640KB DSDD FAT12",FS_3P5_DS_300RPM_640KB_MSDOS_FAT12,0},
{"fat720", "3\"5 720KB DSDD FAT12",FS_720KB_MSDOS_FAT12,0},
{"fat738", "3\"5 738KB DSDD FAT12",FS_738KB_MSDOS_FAT12,0},
{"fat800", "3\"5 800KB DSDD FAT12",FS_800KB_MSDOS_FAT12,0},
{"fat820", "3\"5 820KB DSDD FAT12",FS_820KB_MSDOS_FAT12,0},
{"fat1200", "5\"25 1.2MB DSHD FAT12",FS_5P25_300RPM_1200KB_MSDOS_FAT12,0},
{"fat1230", "5\"25 1.23MB DSHD FAT12",FS_5P25_300RPM_1230KB_MSDOS_FAT12,0},
{"fat1440", "3\"5 1.44MB DSHD FAT12",FS_1_44MB_MSDOS_FAT12,0},
{"fat1476", "3\"5 1.478MB DSHD FAT12",FS_1_476MB_MSDOS_FAT12,0},
{"fat1600", "3\"5 1.6MB DSHD FAT12",FS_1_600MB_MSDOS_FAT12,0},
{"fat1640", "3\"5 1.64MB DSHD FAT12",FS_1_640MB_MSDOS_FAT12,0},
{"fat1680", "3\"5 1.68MB DSHD FAT12",FS_1_68MB_MSDOS_FAT12,0},
{"fat1722", "3\"5 1.722MB DSHD FAT12",FS_1_722MB_MSDOS_FAT12,0},
{"fat1743", "3\"5 1.743MB DSHD FAT12",FS_1_743MB_MSDOS_FAT12,0},
{"fat1764", "3\"5 1.764MB DSHD FAT12",FS_1_764MB_MSDOS_FAT12,0},
{"fat1785", "3\"5 1.785MB DSHD FAT12",FS_1_785MB_MSDOS_FAT12,0},
{"fat2540", "3\"5 2.50MB DSDD FAT12",FS_2_50MB_MSDOS_FAT12,0},
{"fat2880", "3\"5 2.88MB DSED FAT12",FS_2_88MB_MSDOS_FAT12,0},
{"fat3381", "3\"5 3.38MB DSHD FAT12",FS_3_38MB_MSDOS_FAT12,0},
{"fatbigst", "3\"5 3.42MB DSDD Atari FAT12",FS_3_42MB_ATARI_FAT12,0},
{"fat5355", "3\"5 5.35MB DSHD FAT12",FS_5_35MB_MSDOS_FAT12,0},
{"fat5355b", "3\"5 5.35MB DSHD FAT12",FS_5_35MB_B_MSDOS_FAT12,0},
{"fat6789", "3\"5 6.78MB DSHD FAT12",FS_6_78MB_MSDOS_FAT12,0},
{"fatbig", "",FS_16MB_MSDOS_FAT12,0},
{"fat4572", "3\"5 4.50MB DSHD FAT12",FS_4_50MB_MSDOS_FAT12,0},
{0,0,0,0}
};
HXCFE_FLOPPY * hxcfe_generateFloppy( HXCFE* floppycontext, char* path, int32_t fsID, int32_t * err_ret )
{
int ret;
@@ -2404,8 +2343,8 @@ HXCFE_FLOPPY * hxcfe_generateFloppy( HXCFE* floppycontext, char* path, int32_t f
HXCFE_IMGLDR * imgldr_ctx;
plugins_ptr func_ptr;
int moduleID;
int i;
image_plugin* plugin_ptr;
const char * fsname;
floppycontext->hxc_printf(MSG_INFO_0,"Create file system (source path : %s) ...",path);
@@ -2421,13 +2360,9 @@ HXCFE_FLOPPY * hxcfe_generateFloppy( HXCFE* floppycontext, char* path, int32_t f
else
moduleID = hxcfe_imgGetLoaderID (imgldr_ctx,PLUGIN_FAT12FLOPPY);
i=0;
while(fs_config_table[i].name && (fs_config_table[i].fsID != fsID))
{
i++;
}
fsname = hxcfe_getFSName(floppycontext, fsID);
if(hxcfe_checkLoaderID(imgldr_ctx,moduleID)==HXCFE_NOERROR && fs_config_table[i].name)
if(hxcfe_checkLoaderID(imgldr_ctx,moduleID)==HXCFE_NOERROR && fsname)
{
ret = plugin_ptr[moduleID].infos_handler(imgldr_ctx,GETFUNCPTR,&func_ptr);
if(ret==HXCFE_NOERROR)
@@ -2437,7 +2372,7 @@ HXCFE_FLOPPY * hxcfe_generateFloppy( HXCFE* floppycontext, char* path, int32_t f
{
floppycontext->hxc_printf(MSG_INFO_0,"file loader found!");
ret=func_ptr.libLoad_DiskFile(imgldr_ctx,newfloppy,path,fs_config_table[i].name);
ret=func_ptr.libLoad_DiskFile(imgldr_ctx,newfloppy,path,(char*)fsname);
if(ret!=HXCFE_NOERROR)
{
free( newfloppy );
@@ -55,6 +55,7 @@
#include "fdc_ctrl.h"
#include "fs_manager/fs_manager.h"
#include "libhxcfe.h"
#include "fs_manager/fs_manager_access.h"
#include "libhxcadaptor.h"
#include "floppy_loader.h"
@@ -844,3 +845,46 @@ int32_t amigados_fseek( HXCFE_FSMNG * fsmng,int32_t filehandle,int32_t offset,in
return HXCFE_ACCESSERROR;
}
int amigados_libGetPluginInfo(HXCFE_FSMNG * fsmng_ctx, uint32_t infotype, void * returnvalue)
{
static const char fs_plug_id[] = "FS_AMIGADOS";
static const char fs_plug_desc[] = "AMIGADOS";
fs_plugins_ptr fs_plug_funcs=
{
.fsmng_init = (fn_fsmng_init) init_amigados,
.fsmng_mountImage = (fn_fsmng_mountImage) amigados_mountImage,
.fsmng_umountImage = (fn_fsmng_umountImage) amigados_umountImage,
.fsmng_getFreeSpace = (fn_fsmng_getFreeSpace) amigados_getFreeSpace,
.fsmng_getTotalSpace = (fn_fsmng_getTotalSpace) amigados_getTotalSpace,
.fsmng_deleteFile = (fn_fsmng_deleteFile) amigados_deleteFile,
.fsmng_openFile = (fn_fsmng_openFile) amigados_openFile,
.fsmng_closeFile = (fn_fsmng_closeFile) amigados_closeFile,
.fsmng_createFile = (fn_fsmng_createFile) amigados_createFile,
.fsmng_writeFile = (fn_fsmng_writeFile) amigados_writeFile,
.fsmng_readFile = (fn_fsmng_readFile) amigados_readFile,
.fsmng_ftell = (fn_fsmng_ftell) amigados_ftell,
.fsmng_fseek = (fn_fsmng_fseek) amigados_fseek,
.fsmng_createDir = (fn_fsmng_createDir) amigados_createDir,
.fsmng_removeDir = (fn_fsmng_removeDir) amigados_removeDir,
.fsmng_openDir = (fn_fsmng_openDir) amigados_openDir,
.fsmng_readDir = (fn_fsmng_readDir) amigados_readDir,
.fsmng_closeDir = (fn_fsmng_closeDir) amigados_closeDir,
.fsmng_getplugininfos = (fn_fsmng_getplugininfos) amigados_libGetPluginInfo
};
return libGetFSPluginInfo(
fsmng_ctx,
infotype,
returnvalue,
fs_plug_id,
fs_plug_desc,
&fs_plug_funcs
);
}
@@ -1,20 +1,2 @@
void init_amigados(HXCFE_FSMNG * fsmng);
int32_t amigados_mountImage(HXCFE_FSMNG * fsmng, HXCFE_FLOPPY *floppy);
int32_t amigados_umountImage(HXCFE_FSMNG * fsmng);
int32_t amigados_getFreeSpace(HXCFE_FSMNG * fsmng);
int32_t amigados_getTotalSpace(HXCFE_FSMNG * fsmng);
int32_t amigados_openFile(HXCFE_FSMNG * fsmng, char * filename);
int32_t amigados_createFile(HXCFE_FSMNG * fsmng, char * filename);
int32_t amigados_writeFile(HXCFE_FSMNG * fsmng,int32_t filehandle,unsigned char * buffer,int32_t size);
int32_t amigados_readFile( HXCFE_FSMNG * fsmng,int32_t filehandle,unsigned char * buffer,int32_t size);
int32_t amigados_deleteFile(HXCFE_FSMNG * fsmng, char * filename);
int32_t amigados_closeFile( HXCFE_FSMNG * fsmng,int32_t filehandle);
int32_t amigados_createDir( HXCFE_FSMNG * fsmng,char * foldername);
int32_t amigados_removeDir( HXCFE_FSMNG * fsmng,char * foldername);
int amigados_libGetPluginInfo(HXCFE_FSMNG * fsmng_ctx, uint32_t infotype, void * returnvalue);
int32_t amigados_ftell( HXCFE_FSMNG * fsmng,int32_t filehandle);
int32_t amigados_fseek( HXCFE_FSMNG * fsmng,int32_t filehandle,int32_t offset,int32_t origin);
int32_t amigados_openDir(HXCFE_FSMNG * fsmng, char * path);
int32_t amigados_readDir(HXCFE_FSMNG * fsmng,int32_t dirhandle,HXCFE_FSENTRY * dirent);
int32_t amigados_closeDir(HXCFE_FSMNG * fsmng, int32_t dirhandle);
@@ -55,6 +55,7 @@
#include "fdc_ctrl.h"
#include "fs_manager/fs_manager.h"
#include "libhxcfe.h"
#include "fs_manager/fs_manager_access.h"
#include "floppy_loader.h"
#include "floppy_utils.h"
@@ -414,3 +415,47 @@ int32_t cpm_fseek( HXCFE_FSMNG * fsmng,int32_t filehandle,int32_t offset,int32_t
return HXCFE_ACCESSERROR;
}
int cpm_libGetPluginInfo(HXCFE_FSMNG * fsmng_ctx, uint32_t infotype, void * returnvalue)
{
static const char fs_plug_id[] = "FS_CPM";
static const char fs_plug_desc[] = "CPM";
fs_plugins_ptr fs_plug_funcs=
{
.fsmng_init = (fn_fsmng_init) init_cpm,
.fsmng_mountImage = (fn_fsmng_mountImage) cpm_mountImage,
.fsmng_umountImage = (fn_fsmng_umountImage) cpm_umountImage,
.fsmng_getFreeSpace = (fn_fsmng_getFreeSpace) cpm_getFreeSpace,
.fsmng_getTotalSpace = (fn_fsmng_getTotalSpace) cpm_getTotalSpace,
.fsmng_deleteFile = (fn_fsmng_deleteFile) cpm_deleteFile,
.fsmng_openFile = (fn_fsmng_openFile) cpm_openFile,
.fsmng_closeFile = (fn_fsmng_closeFile) cpm_closeFile,
.fsmng_createFile = (fn_fsmng_createFile) cpm_createFile,
.fsmng_writeFile = (fn_fsmng_writeFile) cpm_writeFile,
.fsmng_readFile = (fn_fsmng_readFile) cpm_readFile,
.fsmng_ftell = (fn_fsmng_ftell) cpm_ftell,
.fsmng_fseek = (fn_fsmng_fseek) cpm_fseek,
.fsmng_createDir = (fn_fsmng_createDir) cpm_createDir,
.fsmng_removeDir = (fn_fsmng_removeDir) cpm_removeDir,
.fsmng_openDir = (fn_fsmng_openDir) cpm_openDir,
.fsmng_readDir = (fn_fsmng_readDir) cpm_readDir,
.fsmng_closeDir = (fn_fsmng_closeDir) cpm_closeDir,
.fsmng_getplugininfos = (fn_fsmng_getplugininfos) cpm_libGetPluginInfo
};
return libGetFSPluginInfo(
fsmng_ctx,
infotype,
returnvalue,
fs_plug_id,
fs_plug_desc,
&fs_plug_funcs
);
}
+1 -19
View File
@@ -1,20 +1,2 @@
void init_cpm(HXCFE_FSMNG * fsmng);
int32_t cpm_mountImage(HXCFE_FSMNG * fsmng, HXCFE_FLOPPY *floppy);
int32_t cpm_umountImage(HXCFE_FSMNG * fsmng);
int32_t cpm_getFreeSpace(HXCFE_FSMNG * fsmng);
int32_t cpm_getTotalSpace(HXCFE_FSMNG * fsmng);
int32_t cpm_openFile(HXCFE_FSMNG * fsmng, char * filename);
int32_t cpm_createFile(HXCFE_FSMNG * fsmng, char * filename);
int32_t cpm_writeFile(HXCFE_FSMNG * fsmng,int32_t filehandle,unsigned char * buffer,int32_t size);
int32_t cpm_readFile( HXCFE_FSMNG * fsmng,int32_t filehandle,unsigned char * buffer,int32_t size);
int32_t cpm_deleteFile(HXCFE_FSMNG * fsmng, char * filename);
int32_t cpm_closeFile( HXCFE_FSMNG * fsmng,int32_t filehandle);
int32_t cpm_createDir( HXCFE_FSMNG * fsmng,char * foldername);
int32_t cpm_removeDir( HXCFE_FSMNG * fsmng,char * foldername);
int cpm_libGetPluginInfo(HXCFE_FSMNG * fsmng_ctx, uint32_t infotype, void * returnvalue);
int32_t cpm_ftell( HXCFE_FSMNG * fsmng,int32_t filehandle);
int32_t cpm_fseek( HXCFE_FSMNG * fsmng,int32_t filehandle,int32_t offset,int32_t origin);
int32_t cpm_openDir(HXCFE_FSMNG * fsmng, char * path);
int32_t cpm_readDir(HXCFE_FSMNG * fsmng,int32_t dirhandle,HXCFE_FSENTRY * dirent);
int32_t cpm_closeDir(HXCFE_FSMNG * fsmng, int32_t dirhandle);
@@ -55,6 +55,7 @@
#include "fdc_ctrl.h"
#include "fs_manager/fs_manager.h"
#include "libhxcfe.h"
#include "fs_manager/fs_manager_access.h"
#include "floppy_loader.h"
#include "floppy_utils.h"
@@ -522,3 +523,46 @@ int32_t fat12_fseek( HXCFE_FSMNG * fsmng,int32_t filehandle,int32_t offset,int32
return HXCFE_ACCESSERROR;
}
int fat12_libGetPluginInfo(HXCFE_FSMNG * fsmng_ctx, uint32_t infotype,void * returnvalue)
{
static const char fs_plug_id[] = "FS_FAT12";
static const char fs_plug_desc[] = "FAT12";
fs_plugins_ptr fs_plug_funcs=
{
.fsmng_init = (fn_fsmng_init) init_fat12,
.fsmng_mountImage = (fn_fsmng_mountImage) fat12_mountImage,
.fsmng_umountImage = (fn_fsmng_umountImage) fat12_umountImage,
.fsmng_getFreeSpace = (fn_fsmng_getFreeSpace) fat12_getFreeSpace,
.fsmng_getTotalSpace = (fn_fsmng_getTotalSpace) fat12_getTotalSpace,
.fsmng_deleteFile = (fn_fsmng_deleteFile) fat12_deleteFile,
.fsmng_openFile = (fn_fsmng_openFile) fat12_openFile,
.fsmng_closeFile = (fn_fsmng_closeFile) fat12_closeFile,
.fsmng_createFile = (fn_fsmng_createFile) fat12_createFile,
.fsmng_writeFile = (fn_fsmng_writeFile) fat12_writeFile,
.fsmng_readFile = (fn_fsmng_readFile) fat12_readFile,
.fsmng_ftell = (fn_fsmng_ftell) fat12_ftell,
.fsmng_fseek = (fn_fsmng_fseek) fat12_fseek,
.fsmng_createDir = (fn_fsmng_createDir) fat12_createDir,
.fsmng_removeDir = (fn_fsmng_removeDir) fat12_removeDir,
.fsmng_openDir = (fn_fsmng_openDir) fat12_openDir,
.fsmng_readDir = (fn_fsmng_readDir) fat12_readDir,
.fsmng_closeDir = (fn_fsmng_closeDir) fat12_closeDir,
.fsmng_getplugininfos = (fn_fsmng_getplugininfos) fat12_libGetPluginInfo
};
return libGetFSPluginInfo(
fsmng_ctx,
infotype,
returnvalue,
fs_plug_id,
fs_plug_desc,
&fs_plug_funcs
);
}
@@ -1,20 +1,2 @@
void init_fat12(HXCFE_FSMNG * fsmng);
int32_t fat12_mountImage(HXCFE_FSMNG * fsmng, HXCFE_FLOPPY *floppy);
int32_t fat12_umountImage(HXCFE_FSMNG * fsmng);
int32_t fat12_getFreeSpace(HXCFE_FSMNG * fsmng);
int32_t fat12_getTotalSpace(HXCFE_FSMNG * fsmng);
int32_t fat12_openFile(HXCFE_FSMNG * fsmng, char * filename);
int32_t fat12_createFile(HXCFE_FSMNG * fsmng, char * filename);
int32_t fat12_writeFile(HXCFE_FSMNG * fsmng,int32_t filehandle,unsigned char * buffer,int32_t size);
int32_t fat12_readFile( HXCFE_FSMNG * fsmng,int32_t filehandle,unsigned char * buffer,int32_t size);
int32_t fat12_deleteFile(HXCFE_FSMNG * fsmng, char * filename);
int32_t fat12_closeFile( HXCFE_FSMNG * fsmng,int32_t filehandle);
int32_t fat12_createDir( HXCFE_FSMNG * fsmng,char * foldername);
int32_t fat12_removeDir( HXCFE_FSMNG * fsmng,char * foldername);
int fat12_libGetPluginInfo(HXCFE_FSMNG * fsmng_ctx, uint32_t infotype, void * returnvalue);
int32_t fat12_ftell( HXCFE_FSMNG * fsmng,int32_t filehandle);
int32_t fat12_fseek( HXCFE_FSMNG * fsmng,int32_t filehandle,int32_t offset,int32_t origin);
int32_t fat12_openDir(HXCFE_FSMNG * fsmng, char * path);
int32_t fat12_readDir(HXCFE_FSMNG * fsmng,int32_t dirhandle,HXCFE_FSENTRY * dirent);
int32_t fat12_closeDir(HXCFE_FSMNG * fsmng, int32_t dirhandle);
+266 -96
View File
@@ -55,26 +55,101 @@
#include "fdc_ctrl.h"
#include "fs_manager.h"
#include "libhxcfe.h"
#include "fs_manager_access.h"
#include "fs_fat12/fs_fat12.h"
#include "fs_amigados/fs_amigados.h"
#include "fs_cpm/fs_cpm.h"
fs_config fs_config_table[]=
{
{"fatst", "",FS_720KB_ATARI_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fatst902", "",FS_902KB_ATARI_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fatst360", "",FS_360KB_ATARI_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"amigados", "3\"5 880KB DSDD AmigaDOS",FS_880KB_AMIGADOS,1, (fn_fsmng_getplugininfos)amigados_libGetPluginInfo},
{"amigados_hd", "3\"5 1760KB DSHD AmigaDOS",FS_1760KB_AMIGADOS,2, (fn_fsmng_getplugininfos)amigados_libGetPluginInfo},
int32_t hxcfe_checkFSID(HXCFE* floppycontext,int32_t FSID)
{"fat160a", "5\"25 & 8\" 160KB SSDD 300RPM FAT12",FS_5P25_300RPM_160KB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat160b", "5\"25 & 8\" 160KB SSDD 360RPM FAT12",FS_5P25_360RPM_160KB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat180a", "5\"25 180KB SSDD 300RPM FAT12",FS_5P25_300RPM_180KB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat180b", "5\"25 180KB SSDD 360RPM FAT12",FS_5P25_360RPM_180KB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat320ssa", "5\"25 320KB SSDD 300RPM FAT12",FS_5P25_SS_300RPM_320KB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat320ssb", "5\"25 320KB SSDD 360RPM FAT12",FS_5P25_SS_360RPM_320KB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat320dsa", "5\"25 320KB DSDD 300RPM FAT12",FS_5P25_DS_300RPM_320KB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat320dsb", "5\"25 320KB DSDD 360RPM FAT12",FS_5P25_DS_360RPM_320KB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat360a", "5\"25 & 8\" 360KB DSDD 300RPM FAT12",FS_5P25_DS_300RPM_360KB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat360b", "5\"25 & 8\" 360KB DSDD 360RPM FAT12",FS_5P25_DS_360RPM_360KB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat640", "3\"5 640KB DSDD FAT12",FS_3P5_DS_300RPM_640KB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat720", "3\"5 720KB DSDD FAT12",FS_720KB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat738", "3\"5 738KB DSDD FAT12",FS_738KB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat800", "3\"5 800KB DSDD FAT12",FS_800KB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat820", "3\"5 820KB DSDD FAT12",FS_820KB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat1200", "5\"25 1.2MB DSHD FAT12",FS_5P25_300RPM_1200KB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat1230", "5\"25 1.23MB DSHD FAT12",FS_5P25_300RPM_1230KB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat1440", "3\"5 1.44MB DSHD FAT12",FS_1_44MB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat1476", "3\"5 1.478MB DSHD FAT12",FS_1_476MB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat1600", "3\"5 1.6MB DSHD FAT12",FS_1_600MB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat1640", "3\"5 1.64MB DSHD FAT12",FS_1_640MB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat1680", "3\"5 1.68MB DSHD FAT12",FS_1_68MB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat1722", "3\"5 1.722MB DSHD FAT12",FS_1_722MB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat1743", "3\"5 1.743MB DSHD FAT12",FS_1_743MB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat1764", "3\"5 1.764MB DSHD FAT12",FS_1_764MB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat1785", "3\"5 1.785MB DSHD FAT12",FS_1_785MB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat2540", "3\"5 2.50MB DSDD FAT12",FS_2_50MB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat2880", "3\"5 2.88MB DSED FAT12",FS_2_88MB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat3381", "3\"5 3.38MB DSHD FAT12",FS_3_38MB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fatbigst", "3\"5 3.42MB DSDD Atari FAT12",FS_3_42MB_ATARI_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat5355", "3\"5 5.35MB DSHD FAT12",FS_5_35MB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat5355b", "3\"5 5.35MB DSHD FAT12",FS_5_35MB_B_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat6789", "3\"5 6.78MB DSHD FAT12",FS_6_78MB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fatbig", "",FS_16MB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{"fat4572", "3\"5 4.50MB DSHD FAT12",FS_4_50MB_MSDOS_FAT12,0, (fn_fsmng_getplugininfos)fat12_libGetPluginInfo},
{0,0,0,0, NULL}
};
static int find_FSID_idx(int32_t FSID)
{
int i;
floppycontext->hxc_printf(MSG_DEBUG,"hxcfe_checkFSID : %d",FSID);
i=0;
do
{
i++;
}while(fs_config_table[i].name && i<FSID);
}while(fs_config_table[i].name && (fs_config_table[i].fsID != FSID) );
if( !fs_config_table[i].name )
if(fs_config_table[i].name)
{
return i;
}
return -1;
}
int32_t hxcfe_checkFSID(HXCFE* floppycontext,int32_t FSID)
{
int idx;
floppycontext->hxc_printf(MSG_DEBUG,"hxcfe_checkFSID : %d",FSID);
idx = find_FSID_idx(FSID);
if( idx < 0 )
{
floppycontext->hxc_printf(MSG_DEBUG,"hxcfe_checkFSID : Error !");
return HXCFE_BADPARAMETER;
@@ -85,7 +160,6 @@ int32_t hxcfe_checkFSID(HXCFE* floppycontext,int32_t FSID)
}
}
HXCFE_FSMNG * hxcfe_initFsManager(HXCFE * hxcfe)
{
HXCFE_FSMNG * fsmng;
@@ -101,6 +175,9 @@ HXCFE_FSMNG * hxcfe_initFsManager(HXCFE * hxcfe)
fsmng->sidepertrack = 2;
fsmng->trackperdisk = 80;
fsmng->sectorsize = 512;
fsmng->fs_selected = -1;
fsmng->fn = calloc(1, sizeof(fs_plugins_ptr));
return fsmng;
}
hxcfe->hxc_printf(MSG_DEBUG,"hxcfe_initFsManager Error!");
@@ -142,12 +219,15 @@ int32_t hxcfe_numberOfFS(HXCFE* floppycontext)
const char* hxcfe_getFSDesc(HXCFE* floppycontext,int32_t FSID)
{
int idx;
floppycontext->hxc_printf(MSG_DEBUG,"hxcfe_getFSDesc : %d",FSID);
if(hxcfe_checkFSID(floppycontext,FSID)==HXCFE_NOERROR)
idx = find_FSID_idx(FSID);
if(idx >= 0)
{
return fs_config_table[FSID].desc;
return fs_config_table[idx].desc;
}
else
{
@@ -159,12 +239,15 @@ const char* hxcfe_getFSDesc(HXCFE* floppycontext,int32_t FSID)
const char* hxcfe_getFSName(HXCFE* floppycontext,int32_t FSID)
{
int idx;
floppycontext->hxc_printf(MSG_DEBUG,"hxcfe_getFSName : %d",FSID);
if(hxcfe_checkFSID(floppycontext,FSID)==HXCFE_NOERROR)
idx = find_FSID_idx(FSID);
if(idx >= 0)
{
return fs_config_table[FSID].name;
return fs_config_table[idx].name;
}
else
{
@@ -176,17 +259,28 @@ const char* hxcfe_getFSName(HXCFE* floppycontext,int32_t FSID)
int32_t hxcfe_selectFS(HXCFE_FSMNG * fsmng, int32_t FSID)
{
int idx;
fsmng->hxcfe->hxc_printf(MSG_DEBUG,"hxcfe_selectFS : %d",FSID);
fsmng->fs_selected = FSID;
idx = find_FSID_idx(FSID);
if( fsmng->fs_selected == FS_880KB_AMIGADOS || fsmng->fs_selected == FS_1760KB_AMIGADOS )
init_amigados(fsmng);
if(idx >= 0)
{
fsmng->fs_selected = idx;
fs_config_table[idx].fsgetplug(fsmng, GETFSFUNCPTR, fsmng->fn);
((fs_plugins_ptr*)(fsmng->fn))->fsmng_init(fsmng);
return HXCFE_NOERROR;
}
else
init_fat12(fsmng);
{
fsmng->fs_selected = -1;
return HXCFE_BADPARAMETER;
}
return HXCFE_NOERROR;
}
void hxcfe_deinitFsManager(HXCFE_FSMNG * fsmng)
@@ -198,28 +292,26 @@ void hxcfe_deinitFsManager(HXCFE_FSMNG * fsmng)
int32_t hxcfe_mountImage(HXCFE_FSMNG * fsmng, HXCFE_FLOPPY *floppy)
{
int i;
int32_t ret;
int fs_list[]={FS_720KB_MSDOS_FAT12,FS_880KB_AMIGADOS,FS_1760KB_AMIGADOS, -1};
fsmng->hxcfe->hxc_printf(MSG_DEBUG,"hxcfe_mountImage");
/* if( fsmng->fs_selected == FS_880KB_AMIGADOS )
return amigados_mountImage(fsmng, floppy);
else
return fat12_mountImage(fsmng, floppy);*/
i = 0;
do
{
ret = hxcfe_selectFS(fsmng, fs_list[i]);
ret = hxcfe_selectFS(fsmng, 0);
ret = fat12_mountImage(fsmng, floppy);
if(ret == HXCFE_NOERROR)
return ret;
ret = HXCFE_UNSUPPORTEDFILE;
if(fsmng->fs_selected >= 0)
{
if( ((fs_plugins_ptr*)(fsmng->fn))->fsmng_mountImage )
ret = ((fs_plugins_ptr*)(fsmng->fn))->fsmng_mountImage(fsmng, floppy);
}
ret = hxcfe_selectFS(fsmng, FS_880KB_AMIGADOS);
ret = amigados_mountImage(fsmng, floppy);
if(ret == HXCFE_NOERROR)
return ret;
ret = hxcfe_selectFS(fsmng, FS_1760KB_AMIGADOS);
ret = amigados_mountImage(fsmng, floppy);
if(ret == HXCFE_NOERROR)
return ret;
i++;
}while(fs_list[i] >= 0 && ret != HXCFE_NOERROR);
return ret;
@@ -229,159 +321,237 @@ int32_t hxcfe_umountImage(HXCFE_FSMNG * fsmng)
{
fsmng->hxcfe->hxc_printf(MSG_DEBUG,"hxcfe_umountImage");
if( fsmng->fs_selected == FS_880KB_AMIGADOS || fsmng->fs_selected == FS_1760KB_AMIGADOS )
return amigados_umountImage(fsmng);
else
return fat12_umountImage(fsmng);
if(fsmng->fs_selected >= 0)
{
if( ((fs_plugins_ptr*)(fsmng->fn))->fsmng_umountImage )
return ((fs_plugins_ptr*)(fsmng->fn))->fsmng_umountImage(fsmng);
}
return HXCFE_UNSUPPORTEDFILE;
}
int32_t hxcfe_getFreeFsSpace(HXCFE_FSMNG * fsmng)
{
fsmng->hxcfe->hxc_printf(MSG_DEBUG,"hxcfe_getFreeFsSpace");
if( fsmng->fs_selected == FS_880KB_AMIGADOS || fsmng->fs_selected == FS_1760KB_AMIGADOS )
return amigados_getFreeSpace( fsmng );
else
return fat12_getFreeSpace( fsmng );
if(fsmng->fs_selected >= 0)
{
if( ((fs_plugins_ptr*)(fsmng->fn))->fsmng_getFreeSpace )
return ((fs_plugins_ptr*)(fsmng->fn))->fsmng_getFreeSpace(fsmng);
}
return HXCFE_UNSUPPORTEDFILE;
}
int32_t hxcfe_getTotalFsSpace(HXCFE_FSMNG * fsmng)
{
fsmng->hxcfe->hxc_printf(MSG_DEBUG,"hxcfe_getTotalFsSpace");
if( fsmng->fs_selected == FS_880KB_AMIGADOS || fsmng->fs_selected == FS_1760KB_AMIGADOS )
return amigados_getTotalSpace( fsmng );
else
return fat12_getTotalSpace( fsmng );
if(fsmng->fs_selected >= 0)
{
if( ((fs_plugins_ptr*)(fsmng->fn))->fsmng_getTotalSpace )
return ((fs_plugins_ptr*)(fsmng->fn))->fsmng_getTotalSpace(fsmng);
}
return HXCFE_UNSUPPORTEDFILE;
}
int32_t hxcfe_openDir(HXCFE_FSMNG * fsmng, char * path)
{
fsmng->hxcfe->hxc_printf(MSG_DEBUG,"hxcfe_openDir : %s",path);
if( fsmng->fs_selected == FS_880KB_AMIGADOS || fsmng->fs_selected == FS_1760KB_AMIGADOS )
return amigados_openDir(fsmng,path);
else
return fat12_openDir(fsmng,path);
if(fsmng->fs_selected >= 0)
{
if( ((fs_plugins_ptr*)(fsmng->fn))->fsmng_openDir )
return ((fs_plugins_ptr*)(fsmng->fn))->fsmng_openDir(fsmng,path);
}
return HXCFE_UNSUPPORTEDFILE;
}
int32_t hxcfe_readDir(HXCFE_FSMNG * fsmng,int32_t dirhandle,HXCFE_FSENTRY * dirent)
{
fsmng->hxcfe->hxc_printf(MSG_DEBUG,"hxcfe_readDir : 0x%.8x",dirhandle);
if( fsmng->fs_selected == FS_880KB_AMIGADOS || fsmng->fs_selected == FS_1760KB_AMIGADOS )
return amigados_readDir(fsmng,dirhandle,dirent);
else
return fat12_readDir(fsmng,dirhandle,dirent);
if(fsmng->fs_selected >= 0)
{
if( ((fs_plugins_ptr*)(fsmng->fn))->fsmng_readDir )
return ((fs_plugins_ptr*)(fsmng->fn))->fsmng_readDir(fsmng,dirhandle,dirent);
}
return HXCFE_UNSUPPORTEDFILE;
}
int32_t hxcfe_closeDir(HXCFE_FSMNG * fsmng, int32_t dirhandle)
{
fsmng->hxcfe->hxc_printf(MSG_DEBUG,"hxcfe_closeDir : 0x%.8x",dirhandle);
if( fsmng->fs_selected == FS_880KB_AMIGADOS || fsmng->fs_selected == FS_1760KB_AMIGADOS )
return amigados_closeDir(fsmng, dirhandle);
else
return fat12_closeDir(fsmng, dirhandle);
if(fsmng->fs_selected >= 0)
{
if( ((fs_plugins_ptr*)(fsmng->fn))->fsmng_closeDir )
return ((fs_plugins_ptr*)(fsmng->fn))->fsmng_closeDir(fsmng,dirhandle);
}
return HXCFE_UNSUPPORTEDFILE;
}
int32_t hxcfe_openFile(HXCFE_FSMNG * fsmng, char * filename)
{
fsmng->hxcfe->hxc_printf(MSG_DEBUG,"hxcfe_openFile : %s",filename);
if( fsmng->fs_selected == FS_880KB_AMIGADOS || fsmng->fs_selected == FS_1760KB_AMIGADOS )
return amigados_openFile(fsmng,filename);
else
return fat12_openFile(fsmng,filename);
if(fsmng->fs_selected >= 0)
{
if( ((fs_plugins_ptr*)(fsmng->fn))->fsmng_openFile )
return ((fs_plugins_ptr*)(fsmng->fn))->fsmng_openFile(fsmng,filename);
}
return HXCFE_UNSUPPORTEDFILE;
}
int32_t hxcfe_createFile(HXCFE_FSMNG * fsmng, char * filename)
{
fsmng->hxcfe->hxc_printf(MSG_DEBUG,"hxcfe_createFile : %s",filename);
if( fsmng->fs_selected == FS_880KB_AMIGADOS || fsmng->fs_selected == FS_1760KB_AMIGADOS )
return amigados_createFile(fsmng,filename);
else
return fat12_createFile(fsmng,filename);
if(fsmng->fs_selected >= 0)
{
if( ((fs_plugins_ptr*)(fsmng->fn))->fsmng_createFile )
return ((fs_plugins_ptr*)(fsmng->fn))->fsmng_createFile(fsmng,filename);
}
return HXCFE_UNSUPPORTEDFILE;
}
int32_t hxcfe_writeFile(HXCFE_FSMNG * fsmng,int32_t filehandle,uint8_t * buffer,int32_t size)
{
fsmng->hxcfe->hxc_printf(MSG_DEBUG,"hxcfe_writeFile : 0x%.8x - 0x%.8x / %d bytes",filehandle,buffer,size);
if( fsmng->fs_selected == FS_880KB_AMIGADOS || fsmng->fs_selected == FS_1760KB_AMIGADOS )
return amigados_writeFile(fsmng,filehandle,buffer,size);
else
return fat12_writeFile(fsmng,filehandle,buffer,size);
if(fsmng->fs_selected >= 0)
{
if( ((fs_plugins_ptr*)(fsmng->fn))->fsmng_writeFile )
return ((fs_plugins_ptr*)(fsmng->fn))->fsmng_writeFile(fsmng,filehandle,buffer,size);
}
return HXCFE_UNSUPPORTEDFILE;
}
int32_t hxcfe_readFile( HXCFE_FSMNG * fsmng,int32_t filehandle,uint8_t * buffer,int32_t size)
{
fsmng->hxcfe->hxc_printf(MSG_DEBUG,"hxcfe_readFile : 0x%.8x - 0x%.8x / %d bytes",filehandle,buffer,size);
if( fsmng->fs_selected == FS_880KB_AMIGADOS || fsmng->fs_selected == FS_1760KB_AMIGADOS )
return amigados_readFile( fsmng,filehandle,buffer,size);
else
return fat12_readFile( fsmng,filehandle,buffer,size);
if(fsmng->fs_selected >= 0)
{
if( ((fs_plugins_ptr*)(fsmng->fn))->fsmng_readFile )
return ((fs_plugins_ptr*)(fsmng->fn))->fsmng_readFile(fsmng,filehandle,buffer,size);
}
return HXCFE_UNSUPPORTEDFILE;
}
int32_t hxcfe_deleteFile(HXCFE_FSMNG * fsmng, char * filename)
{
fsmng->hxcfe->hxc_printf(MSG_DEBUG,"hxcfe_deleteFile : %s",filename);
if( fsmng->fs_selected == FS_880KB_AMIGADOS || fsmng->fs_selected == FS_1760KB_AMIGADOS )
return amigados_deleteFile(fsmng,filename);
else
return fat12_deleteFile(fsmng,filename);
if(fsmng->fs_selected >= 0)
{
if( ((fs_plugins_ptr*)(fsmng->fn))->fsmng_deleteFile )
return ((fs_plugins_ptr*)(fsmng->fn))->fsmng_deleteFile(fsmng,filename);
}
return HXCFE_UNSUPPORTEDFILE;
}
int32_t hxcfe_closeFile(HXCFE_FSMNG * fsmng, int32_t filehandle)
{
fsmng->hxcfe->hxc_printf(MSG_DEBUG,"hxcfe_closeFile : 0x%.8x",filehandle);
if( fsmng->fs_selected == FS_880KB_AMIGADOS || fsmng->fs_selected == FS_1760KB_AMIGADOS )
return amigados_closeFile(fsmng,filehandle);
else
return fat12_closeFile(fsmng,filehandle);
if(fsmng->fs_selected >= 0)
{
if( ((fs_plugins_ptr*)(fsmng->fn))->fsmng_closeFile )
return ((fs_plugins_ptr*)(fsmng->fn))->fsmng_closeFile(fsmng,filehandle);
}
return HXCFE_UNSUPPORTEDFILE;
}
int32_t hxcfe_createDir( HXCFE_FSMNG * fsmng, char * foldername)
{
fsmng->hxcfe->hxc_printf(MSG_DEBUG,"hxcfe_createDir : %s",foldername);
if( fsmng->fs_selected == FS_880KB_AMIGADOS || fsmng->fs_selected == FS_1760KB_AMIGADOS )
return amigados_createDir( fsmng,foldername);
else
return fat12_createDir( fsmng,foldername);
if(fsmng->fs_selected >= 0)
{
if( ((fs_plugins_ptr*)(fsmng->fn))->fsmng_createDir )
return ((fs_plugins_ptr*)(fsmng->fn))->fsmng_createDir(fsmng,foldername);
}
return HXCFE_UNSUPPORTEDFILE;
}
int32_t hxcfe_removeDir( HXCFE_FSMNG * fsmng, char * foldername)
{
fsmng->hxcfe->hxc_printf(MSG_DEBUG,"hxcfe_removeDir : %s",foldername);
if( fsmng->fs_selected == FS_880KB_AMIGADOS || fsmng->fs_selected == FS_1760KB_AMIGADOS )
return amigados_removeDir( fsmng,foldername);
else
return fat12_removeDir( fsmng,foldername);
if(fsmng->fs_selected >= 0)
{
if( ((fs_plugins_ptr*)(fsmng->fn))->fsmng_removeDir )
return ((fs_plugins_ptr*)(fsmng->fn))->fsmng_removeDir(fsmng,foldername);
}
return HXCFE_UNSUPPORTEDFILE;
}
int32_t hxcfe_fseek( HXCFE_FSMNG * fsmng,int32_t filehandle,int32_t offset,int32_t origin)
{
fsmng->hxcfe->hxc_printf(MSG_DEBUG,"hxcfe_fseek : 0x%.8x - 0x%.8x (%d) ",filehandle,offset,origin);
if( fsmng->fs_selected == FS_880KB_AMIGADOS || fsmng->fs_selected == FS_1760KB_AMIGADOS )
return amigados_fseek(fsmng,filehandle,offset,origin);
else
return fat12_fseek(fsmng,filehandle,offset,origin);
if(fsmng->fs_selected >= 0)
{
if( ((fs_plugins_ptr*)(fsmng->fn))->fsmng_fseek )
return ((fs_plugins_ptr*)(fsmng->fn))->fsmng_fseek(fsmng,filehandle,offset,origin);
}
return HXCFE_UNSUPPORTEDFILE;
}
int32_t hxcfe_ftell( HXCFE_FSMNG * fsmng,int32_t filehandle)
{
fsmng->hxcfe->hxc_printf(MSG_DEBUG,"hxcfe_ftell : 0x%.8x",filehandle);
if( fsmng->fs_selected == FS_880KB_AMIGADOS || fsmng->fs_selected == FS_1760KB_AMIGADOS )
return amigados_ftell( fsmng,filehandle);
else
return fat12_ftell( fsmng,filehandle);
if(fsmng->fs_selected >= 0)
{
if( ((fs_plugins_ptr*)(fsmng->fn))->fsmng_ftell )
return ((fs_plugins_ptr*)(fsmng->fn))->fsmng_ftell(fsmng,filehandle);
}
return HXCFE_UNSUPPORTEDFILE;
}
int libGetFSPluginInfo( HXCFE_FSMNG * fsmng_ctx, uint32_t infotype, void * returnvalue, const char * pluginid, const char * plugindesc, fs_plugins_ptr * pluginfunc )
{
if(fsmng_ctx)
{
if(returnvalue)
{
switch(infotype)
{
case GETFSPLUGINID:
*(char**)(returnvalue)=(char*)pluginid;
break;
case GETFSDESCRIPTION:
*(char**)(returnvalue)=(char*)plugindesc;
break;
case GETFSFUNCPTR:
memcpy(returnvalue,pluginfunc,sizeof(fs_plugins_ptr));
break;
default:
return HXCFE_BADPARAMETER;
break;
}
return HXCFE_NOERROR;
}
}
return HXCFE_BADPARAMETER;
}
+27
View File
@@ -1,3 +1,29 @@
/*
//
// Copyright (C) 2006-2026 Jean-François DEL NERO
//
// This file is part of the HxCFloppyEmulator library
//
// HxCFloppyEmulator may be used and distributed without restriction provided
// that this copyright statement is not removed from the file and that any
// derivative work contains the original copyright notice and the associated
// disclaimer.
//
// HxCFloppyEmulator is free software; you can redistribute it
// and/or modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// HxCFloppyEmulator is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with HxCFloppyEmulator; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
*/
#ifndef _HXCFE_FSMNG_
@@ -5,6 +31,7 @@ typedef struct _HXCFE_FSMNG
{
HXCFE * hxcfe;
int32_t fs_selected;
void * fn;
// Mounted Floppy disk
HXCFE_FLOPPY *fp;
@@ -0,0 +1,106 @@
/*
//
// Copyright (C) 2006-2026 Jean-François DEL NERO
//
// This file is part of the HxCFloppyEmulator library
//
// HxCFloppyEmulator may be used and distributed without restriction provided
// that this copyright statement is not removed from the file and that any
// derivative work contains the original copyright notice and the associated
// disclaimer.
//
// HxCFloppyEmulator is free software; you can redistribute it
// and/or modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// HxCFloppyEmulator is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with HxCFloppyEmulator; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
*/
#ifndef _HXCFE_FSMNG_ACCESS_H_
typedef void (*fn_fsmng_init) (HXCFE_FSMNG * fsmng);
typedef int32_t (*fn_fsmng_mountImage) (HXCFE_FSMNG * fsmng, HXCFE_FLOPPY *floppy);
typedef int32_t (*fn_fsmng_umountImage) (HXCFE_FSMNG * fsmng);
typedef int32_t (*fn_fsmng_getFreeSpace) (HXCFE_FSMNG * fsmng);
typedef int32_t (*fn_fsmng_getTotalSpace) (HXCFE_FSMNG * fsmng);
typedef int32_t (*fn_fsmng_deleteFile) (HXCFE_FSMNG * fsmng, char * filename);
typedef int32_t (*fn_fsmng_openFile) (HXCFE_FSMNG * fsmng, char * filename);
typedef int32_t (*fn_fsmng_createFile) (HXCFE_FSMNG * fsmng, char * filename);
typedef int32_t (*fn_fsmng_writeFile) (HXCFE_FSMNG * fsmng, int32_t filehandle, unsigned char * buffer, int32_t size);
typedef int32_t (*fn_fsmng_readFile) (HXCFE_FSMNG * fsmng, int32_t filehandle, unsigned char * buffer, int32_t size);
typedef int32_t (*fn_fsmng_ftell) (HXCFE_FSMNG * fsmng, int32_t filehandle);
typedef int32_t (*fn_fsmng_fseek) (HXCFE_FSMNG * fsmng, int32_t filehandle, int32_t offset, int32_t origin);
typedef int32_t (*fn_fsmng_closeFile) (HXCFE_FSMNG * fsmng, int32_t filehandle);
typedef int32_t (*fn_fsmng_createDir) (HXCFE_FSMNG * fsmng, char * foldername);
typedef int32_t (*fn_fsmng_removeDir) (HXCFE_FSMNG * fsmng, char * foldername);
typedef int32_t (*fn_fsmng_openDir) (HXCFE_FSMNG * fsmng, char * path);
typedef int32_t (*fn_fsmng_readDir) (HXCFE_FSMNG * fsmng, int32_t dirhandle, HXCFE_FSENTRY * dirent);
typedef int32_t (*fn_fsmng_closeDir) (HXCFE_FSMNG * fsmng, int32_t dirhandle);
typedef int32_t (*fn_fsmng_getplugininfos) (HXCFE_FSMNG * fsmng, uint32_t infotype, void * returnvalue);
typedef struct fs_plugins_ptr_
{
fn_fsmng_init fsmng_init;
fn_fsmng_mountImage fsmng_mountImage;
fn_fsmng_umountImage fsmng_umountImage;
fn_fsmng_getFreeSpace fsmng_getFreeSpace;
fn_fsmng_getTotalSpace fsmng_getTotalSpace;
fn_fsmng_deleteFile fsmng_deleteFile;
fn_fsmng_openFile fsmng_openFile;
fn_fsmng_closeFile fsmng_closeFile;
fn_fsmng_createFile fsmng_createFile;
fn_fsmng_writeFile fsmng_writeFile;
fn_fsmng_readFile fsmng_readFile;
fn_fsmng_ftell fsmng_ftell;
fn_fsmng_fseek fsmng_fseek;
fn_fsmng_createDir fsmng_createDir;
fn_fsmng_removeDir fsmng_removeDir;
fn_fsmng_openDir fsmng_openDir;
fn_fsmng_readDir fsmng_readDir;
fn_fsmng_closeDir fsmng_closeDir;
fn_fsmng_getplugininfos fsmng_getplugininfos;
}fs_plugins_ptr;
int libGetFSPluginInfo( HXCFE_FSMNG * fsmng_ctx, uint32_t infotype, void * returnvalue, const char * pluginid, const char * plugindesc, fs_plugins_ptr * pluginfunc );
enum {
GETFSPLUGINID = 1,
GETFSDESCRIPTION = 2,
GETFSFUNCPTR = 3
};
typedef struct _fs_config
{
char * name;
char * desc;
int32_t fsID;
int32_t type;
fn_fsmng_getplugininfos fsgetplug;
}fs_config;
extern fs_config fs_config_table[];
#define _HXCFE_FSMNG_ACCESS_H_
#endif
@@ -0,0 +1,54 @@
/*
//
// Copyright (C) 2006-2026 Jean-François DEL NERO
//
// This file is part of the HxCFloppyEmulator library
//
// HxCFloppyEmulator may be used and distributed without restriction provided
// that this copyright statement is not removed from the file and that any
// derivative work contains the original copyright notice and the associated
// disclaimer.
//
// HxCFloppyEmulator is free software; you can redistribute it
// and/or modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// HxCFloppyEmulator is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with HxCFloppyEmulator; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "types.h"
#include "internal_libhxcfe.h"
#include "tracks/track_generator.h"
#include "sector_search.h"
#include "fdc_ctrl.h"
#include "fs_manager.h"
#include "libhxcfe.h"
#include "fs_manager_access.h"
#include "fs_manager_list.h"
#include "fs_fat12/fs_fat12.h"
#include "fs_amigados/fs_amigados.h"
#include "fs_cpm/fs_cpm.h"
const fn_fsmng_getplugininfos staticfsplugins[]=
{
(fn_fsmng_getplugininfos)fat12_libGetPluginInfo,
(fn_fsmng_getplugininfos)amigados_libGetPluginInfo,
(fn_fsmng_getplugininfos)cpm_libGetPluginInfo,
0
};
@@ -0,0 +1,37 @@
/*
//
// Copyright (C) 2006-2026 Jean-François DEL NERO
//
// This file is part of the HxCFloppyEmulator library
//
// HxCFloppyEmulator may be used and distributed without restriction provided
// that this copyright statement is not removed from the file and that any
// derivative work contains the original copyright notice and the associated
// disclaimer.
//
// HxCFloppyEmulator is free software; you can redistribute it
// and/or modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// HxCFloppyEmulator is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with HxCFloppyEmulator; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
*/
#define FS_MANAGER_DISABLED 0x00000001
typedef struct fs_plugin_
{
fn_fsmng_getplugininfos infos_handler;
int sub_id;
unsigned int flags;
}fs_plugin;
extern const fn_fsmng_getplugininfos staticfsplugins[];
-11
View File
@@ -207,15 +207,4 @@ typedef struct _HXCFE_FXSA
#define _HXCFE_FXSA_
typedef struct _fs_config
{
char * name;
char * desc;
int32_t fsID;
int32_t type;
}fs_config;
extern fs_config fs_config_table[];
int32_t hxcfe_imgCallProgressCallback( HXCFE_IMGLDR * imgldr_ctx, int32_t cur, int32_t max );