11#include "irx_imports.h"
15IRX_ID(
"S147MDEV", 2, 1);
19static int register_atfile_ioman_device(
const char *atfile_name,
const char *atfile_desc);
20static int atfile_drv_op_nulldev(
const iop_file_t *f);
23static int atfile_drv_op_open(
iop_file_t *f,
const char *name,
int flags);
25static int atfile_drv_op_read(
iop_file_t *f,
void *ptr,
int size);
26static int atfile_drv_op_write(
iop_file_t *f,
void *ptr,
int size);
27static int atfile_drv_op_lseek(
iop_file_t *f,
int offset,
int mode);
32 &atfile_drv_op_deinit,
33 (
void *)&atfile_drv_op_nulldev,
39 (
void *)&atfile_drv_op_nulldev,
40 (
void *)&atfile_drv_op_nulldev,
41 (
void *)&atfile_drv_op_nulldev,
42 (
void *)&atfile_drv_op_nulldev,
43 (
void *)&atfile_drv_op_nulldev,
44 (
void *)&atfile_drv_op_nulldev,
45 (
void *)&atfile_drv_op_nulldev,
46 (
void *)&atfile_drv_op_nulldev,
47 (
void *)&atfile_drv_op_nulldev,
52int _start(
int ac,
char **av)
56 Kprintf(
"\ns147mdev.irx: System147 Multi Device File System Manager v%d.%d\n", 2, 1);
57 register_atfile_ioman_device(
"atfile",
"Multi Device File System");
58 if ( RegisterLibraryEntries(&_exp_s147mdev) )
60 Kprintf(
"s147mdev.irx: RegisterLibraryEntries - Failed.\n");
61 return MODULE_NO_RESIDENT_END;
63 Kprintf(
"s147mdev.irx: RegisterLibraryEntries - OK.\n");
64 return MODULE_RESIDENT_END;
67static int register_atfile_ioman_device(
const char *atfile_name,
const char *atfile_desc)
71 for ( i = 0; i < 10; i += 1 )
72 g_atfile_unit_info[i] = 0;
73 g_atfile_device.name = atfile_name;
74 g_atfile_device.type = IOP_DT_FS;
76 g_atfile_device.desc = atfile_desc;
77 g_atfile_device.ops = &atfile_drv_ops;
79 AddDrv(&g_atfile_device);
87 if ( unit10 < 0 || unit10 >= 100 )
89 Kprintf(
"s147mdev.irx: Invalid unit number\n");
94 Kprintf(
"s147mdev.irx: Invalid device table\n");
97 retres = drv->ops->init(drv);
99 g_atfile_unit_info[unit10 / 10] = drv;
103int s147mdev_5_delfs(
int unit10)
107 if ( unit10 < 0 || unit10 >= 100 )
109 Kprintf(
"s147mdev.irx: Invalid unit number\n");
112 retres = (g_atfile_unit_info[unit10 / 10]) ?
113 g_atfile_unit_info[unit10 / 10]->ops->deinit(g_atfile_unit_info[unit10 / 10]) :
116 g_atfile_unit_info[unit10 / 10] = 0;
120static int atfile_drv_op_nulldev(
const iop_file_t *f)
126 if ( unit < 0 || unit >= 100 )
128 Kprintf(
"s147mdev.irx: Invalid unit number\n");
131 if ( !g_atfile_unit_info[unit / 10] )
133 Kprintf(
"s147mdev.irx: Undefined unit number (%d), do nothing\n", unit);
151static int atfile_drv_op_open(
iop_file_t *f,
const char *name,
int flags)
158 if ( unit < 0 || unit >= 100 )
160 Kprintf(
"s147mdev.irx: Invalid unit number\n");
166 if ( !g_atfile_unit_info[unit / 10] )
168 Kprintf(
"s147mdev.irx: Undefined unit number (%d), do nothing\n", unit);
171 retres = g_atfile_unit_info[unit / 10]->ops->open(&fstk, name, flags);
182 if ( unit < 0 || unit >= 100 )
184 Kprintf(
"s147mdev.irx: Invalid unit number\n");
191 if ( !g_atfile_unit_info[unit / 10] )
193 Kprintf(
"s147mdev.irx: Undefined unit number (%d), do nothing\n", unit);
196 return g_atfile_unit_info[unit / 10]->ops->close(&fstk);
199static int atfile_drv_op_read(
iop_file_t *f,
void *ptr,
int size)
205 if ( unit < 0 || unit >= 100 )
207 Kprintf(
"s147mdev.irx: Invalid unit number\n");
214 if ( !g_atfile_unit_info[unit / 10] )
216 Kprintf(
"s147mdev.irx: Undefined unit number (%d), do nothing\n", unit);
219 return g_atfile_unit_info[unit / 10]->ops->read(&fstk, ptr, size);
222static int atfile_drv_op_write(
iop_file_t *f,
void *ptr,
int size)
228 if ( unit < 0 || unit >= 100 )
230 Kprintf(
"s147mdev.irx: Invalid unit number\n");
237 if ( !g_atfile_unit_info[unit / 10] )
239 Kprintf(
"s147mdev.irx: Undefined unit number (%d), do nothing\n", unit);
242 return g_atfile_unit_info[unit / 10]->ops->write(&fstk, ptr, size);
245static int atfile_drv_op_lseek(
iop_file_t *f,
int offset,
int mode)
251 if ( unit < 0 || unit >= 100 )
253 Kprintf(
"s147mdev.irx: Invalid unit number\n");
260 if ( !g_atfile_unit_info[unit / 10] )
262 Kprintf(
"s147mdev.irx: Undefined unit number (%d), do nothing\n", unit);
265 return g_atfile_unit_info[unit / 10]->ops->lseek(&fstk, offset, mode);
struct _iop_device * device