mirror of
https://github.com/jfdelnero/HxCFloppyEmulator.git
synced 2026-09-11 09:02:45 +00:00
File system manager : Complete the plug-in interface.
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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,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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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[];
|
||||
@@ -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 );
|
||||
|
||||
Reference in New Issue
Block a user