OSDN Git Service

(none)
authorryuz <ryuz>
Mon, 30 Apr 2007 03:08:56 +0000 (03:08 +0000)
committerryuz <ryuz>
Mon, 30 Apr 2007 03:08:56 +0000 (03:08 +0000)
42 files changed:
aplfw/build/win/win32/vc60/hosaplfw.dsp
aplfw/driver/console/vt100/vt100drv.h
aplfw/driver/console/vt100/vt100drv_close.c [new file with mode: 0755]
aplfw/driver/console/vt100/vt100drv_create.c [new file with mode: 0755]
aplfw/driver/console/vt100/vt100drv_flush.c [new file with mode: 0755]
aplfw/driver/console/vt100/vt100drv_getch.c
aplfw/driver/console/vt100/vt100drv_iocontrol.c [new file with mode: 0755]
aplfw/driver/console/vt100/vt100drv_local.h
aplfw/driver/console/vt100/vt100drv_open.c [new file with mode: 0755]
aplfw/driver/console/vt100/vt100drv_read.c
aplfw/driver/console/vt100/vt100drv_seek.c [new file with mode: 0755]
aplfw/driver/console/vt100/vt100drv_write.c
aplfw/driver/serial/winsock/winsockdrv.c
aplfw/driver/serial/winsock/winsockdrv.h
aplfw/driver/serial/winsock/winsockdrv_local.h [new file with mode: 0755]
aplfw/sample/win/win32/sample.c
aplfw/sample/win/win32/vc60/sample.dsp
aplfw/system/file/console.h
aplfw/system/file/console_getch.c
aplfw/system/file/drvfile.h
aplfw/system/file/drvfile_create.c
aplfw/system/file/drvobj.h
aplfw/system/file/drvobj_create.c [new file with mode: 0755]
aplfw/system/file/drvobj_local.h
aplfw/system/file/file.h
aplfw/system/file/file_iocontrol.c
aplfw/system/file/file_local.h
aplfw/system/file/file_open.c
aplfw/system/file/file_read.c
aplfw/system/file/file_seek.c
aplfw/system/file/file_write.c
aplfw/system/file/fileobj.h
aplfw/system/file/fileobj_create.c
aplfw/system/file/fileobj_local.h [new file with mode: 0755]
aplfw/system/file/volume_openfile.c
aplfw/system/file/volumeobj.h
aplfw/system/file/volumeobj_create.c
aplfw/volume/dev/devvol.h
aplfw/volume/dev/devvol_adddevice.c
aplfw/volume/dev/devvol_create.c
aplfw/volume/dev/devvol_openfile.c
aplfw/volume/fat/fatfile_create.c

index 2ceea81..d8ae5f5 100755 (executable)
@@ -201,30 +201,6 @@ SOURCE=..\..\..\..\library\container\array\array_setsize.c
 # Begin Group "renesus"
 
 # PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\..\..\driver\serial\renesas\scidrv.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\driver\serial\renesas\scidrv.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\driver\serial\renesas\scifile.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\driver\serial\renesas\scifile.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\driver\serial\renesas\scihal.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\driver\serial\renesas\scihal.h
-# End Source File
 # End Group
 # Begin Group "winsock"
 
@@ -239,40 +215,12 @@ SOURCE=..\..\..\..\driver\serial\winsock\winsockdrv.h
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\..\..\driver\serial\winsock\winsockfile.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\driver\serial\winsock\winsockfile.h
+SOURCE=..\..\..\..\driver\serial\winsock\winsockdrv_local.h
 # End Source File
 # End Group
 # Begin Group "pc16550"
 
 # PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\..\..\driver\serial\pc16550\pc16550drv.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\driver\serial\pc16550\pc16550drv.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\driver\serial\pc16550\pc16550file.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\driver\serial\pc16550\pc16550file.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\driver\serial\pc16550\pc16550hal.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\driver\serial\pc16550\pc16550hal.h
-# End Source File
 # End Group
 # End Group
 # Begin Group "ether"
@@ -281,25 +229,9 @@ SOURCE=..\..\..\..\driver\serial\pc16550\pc16550hal.h
 # Begin Group "ne2000"
 
 # PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\..\..\driver\ether\ne2000\ne2000drv.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\driver\ether\ne2000\ne2000drv.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\driver\ether\ne2000\ne2000hal.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\driver\ether\ne2000\ne2000hal.h
-# End Source File
 # End Group
 # End Group
-# Begin Group "terminal"
+# Begin Group "console"
 
 # PROP Default_Filter ""
 # Begin Group "vt100"
@@ -307,31 +239,23 @@ SOURCE=..\..\..\..\driver\ether\ne2000\ne2000hal.h
 # PROP Default_Filter ""
 # Begin Source File
 
-SOURCE=..\..\..\..\driver\terminal\vt100\vt100con.h
+SOURCE=..\..\..\..\driver\console\vt100\vt100drv.h
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\..\..\driver\terminal\vt100\vt100con_create.c
+SOURCE=..\..\..\..\driver\console\vt100\vt100drv_getch.c
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\..\..\driver\terminal\vt100\vt100drv.h
+SOURCE=..\..\..\..\driver\console\vt100\vt100drv_local.h
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\..\..\driver\terminal\vt100\vt100drv_getch.c
+SOURCE=..\..\..\..\driver\console\vt100\vt100drv_read.c
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\..\..\driver\terminal\vt100\vt100drv_local.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\driver\terminal\vt100\vt100drv_read.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\driver\terminal\vt100\vt100drv_write.c
+SOURCE=..\..\..\..\driver\console\vt100\vt100drv_write.c
 # End Source File
 # End Group
 # End Group
@@ -476,23 +400,27 @@ SOURCE=..\..\..\..\system\sysapi\system_unlock.c
 # PROP Default_Filter ""
 # Begin Source File
 
-SOURCE=..\..\..\..\system\file\confile.c
+SOURCE=..\..\..\..\system\file\console.h
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\..\..\system\file\confile.h
+SOURCE=..\..\..\..\system\file\console_getch.c
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\..\..\system\file\console.h
+SOURCE=..\..\..\..\system\file\consoleobj.h
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\..\..\system\file\console_getch.c
+SOURCE=..\..\..\..\system\file\drvobj.h
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\..\..\system\file\consoleobj.h
+SOURCE=..\..\..\..\system\file\drvobj_create.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\system\file\drvobj_local.h
 # End Source File
 # Begin Source File
 
@@ -726,75 +654,31 @@ SOURCE=..\..\..\..\volume\dev\devvol_openfile.c
 # Begin Group "fat"
 
 # PROP Default_Filter ""
+# End Group
+# End Group
 # Begin Source File
 
-SOURCE=..\..\..\..\volume\fat\fatfile.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\volume\fat\fatfile_create.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\volume\fat\fatfile_local.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\volume\fat\fatfile_read.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\volume\fat\fatvol.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\volume\fat\fatvol_clusterread.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\volume\fat\fatvol_clusterwrite.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\volume\fat\fatvol_create.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\volume\fat\fatvol_createfile.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\volume\fat\fatvol_flushfat.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\volume\fat\fatvol_getclusterbuf.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\volume\fat\fatvol_getnextcluster.c
+SOURCE=..\..\..\..\hosaplfw.h
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\..\..\volume\fat\fatvol_local.h
+SOURCE=..\..\..\..\driver\console\vt100\vt100drv_close.c
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\..\..\volume\fat\fatvol_open.c
+SOURCE=..\..\..\..\driver\console\vt100\vt100drv_create.c
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\..\..\volume\fat\fatvol_relclusterbuf.c
+SOURCE=..\..\..\..\driver\console\vt100\vt100drv_iocontrol.c
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\..\..\volume\fat\fatvol_setnextcluster.c
+SOURCE=..\..\..\..\driver\console\vt100\vt100drv_open.c
 # End Source File
-# End Group
-# End Group
 # Begin Source File
 
-SOURCE=..\..\..\..\hosaplfw.h
+SOURCE=..\..\..\..\driver\console\vt100\vt100drv_seek.c
 # End Source File
 # End Target
 # End Project
index 6ef8bcd..163b0a0 100755 (executable)
@@ -1,12 +1,14 @@
 
 
-#include "system/file/consoleobj.h"
+#include "system/file/console.h"
+#include "system/file/drvobj.h"
 
 
 
 typedef struct c_vt100drv
 {
-       C_CONSOLEOBJ    ConObj;
+       C_DRVOBJ                DrvObj;
+
        HANDLE                  hTty;
        int                             iEscState;
        int                             iEscNum;
@@ -20,9 +22,6 @@ extern "C" {
 
 void      Vt100Drv_Create(C_VT100DRV *self, HANDLE hTty);                                      /**< コンストラクタ */
 void      Vt100Drv_Delete(C_VT100DRV *self);                                                           /**< デストラクタ */
-FILE_ERR  Vt100Drv_IoControl(HANDLE hFile, int iFunc, const void *pInBuf, FILE_SIZE InSize, void *pOutBuf, FILE_SIZE OutSize);
-FILE_SIZE Vt100Drv_Read(HANDLE hFile, void *pBuf, FILE_SIZE Size);
-FILE_SIZE Vt100Drv_Write(HANDLE hFile, const void *pData, FILE_SIZE Size);
 
 #ifdef __cplusplus
 }
diff --git a/aplfw/driver/console/vt100/vt100drv_close.c b/aplfw/driver/console/vt100/vt100drv_close.c
new file mode 100755 (executable)
index 0000000..b18444a
--- /dev/null
@@ -0,0 +1,22 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  vt100drv_open.c
+ * @brief %jp{VT100 ターミナルドライバ}
+ *
+ * Copyright (C) 2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "vt100drv_local.h"
+#include "system/sysapi/sysapi.h"
+
+
+FILE_ERR  Vt100Drv_Close(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj)
+{
+       return FILE_ERR_OK;
+}
+
+
+/* end of file */
diff --git a/aplfw/driver/console/vt100/vt100drv_create.c b/aplfw/driver/console/vt100/vt100drv_create.c
new file mode 100755 (executable)
index 0000000..5634d2f
--- /dev/null
@@ -0,0 +1,39 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  vt100drv_create.c
+ * @brief %jp{VT100 ターミナルドライバ}
+ *
+ * Copyright (C) 2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "vt100drv_local.h"
+#include "system/sysapi/sysapi.h"
+
+
+const T_DRVOBJ_METHODS  Vt100Drv_Methods = 
+       {
+               Vt100Drv_Open,
+               Vt100Drv_Close,
+               Vt100Drv_IoControl,
+               Vt100Drv_Seek,
+               Vt100Drv_Read,
+               Vt100Drv_Write,
+               Vt100Drv_Flush,
+       };
+
+
+
+/**< コンストラクタ */
+void Vt100Drv_Create(C_VT100DRV *self, HANDLE hTty)
+{
+       /* 親クラスコンストラクタ */
+       DrvObj_Create(&self->DrvObj, &Vt100Drv_Methods);
+
+       self->hTty = hTty;
+}
+
+
+/* end of file */
diff --git a/aplfw/driver/console/vt100/vt100drv_flush.c b/aplfw/driver/console/vt100/vt100drv_flush.c
new file mode 100755 (executable)
index 0000000..030be46
--- /dev/null
@@ -0,0 +1,22 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  vt100drv_open.c
+ * @brief %jp{VT100 ターミナルドライバ}
+ *
+ * Copyright (C) 2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "vt100drv_local.h"
+#include "system/sysapi/sysapi.h"
+
+
+FILE_ERR  Vt100Drv_Flush(struct c_drvobj *self, C_FILEOBJ *pFileObj)
+{
+       return  FILE_ERR_OK;
+}
+
+
+/* end of file */
index 7e1d4dc..45e2189 100755 (executable)
 
 
 #include "vt100drv_local.h"
+#include "system/sysapi/sysapi.h"
 
-/**< コンストラクタ */
-void Vt100Drv_Create(C_VT100DRV *self, HANDLE hTty)
-{
-       self->hTty = hTty;
-}
 
 
 /* 1文字取得 */
diff --git a/aplfw/driver/console/vt100/vt100drv_iocontrol.c b/aplfw/driver/console/vt100/vt100drv_iocontrol.c
new file mode 100755 (executable)
index 0000000..d60d264
--- /dev/null
@@ -0,0 +1,34 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  vt100drv_open.c
+ * @brief %jp{VT100 ターミナルドライバ}
+ *
+ * Copyright (C) 2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "vt100drv_local.h"
+#include "system/sysapi/sysapi.h"
+
+FILE_ERR  Vt100Drv_IoControl(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, int iFunc, void *pInBuf, FILE_SIZE InSize, const void *pOutBuf, FILE_SIZE OutSize)
+{
+       C_VT100DRV                      *self;
+       
+       /* upper cast */
+       self = (C_VT100DRV *)pDrvObj;
+       
+       switch ( iFunc )
+       {
+       case FILE_IOCTL_CON_GETCH:
+               *(int *)pInBuf = Vt100Drv_GetCh(self);
+               return FILE_ERR_OK;
+
+       default:
+               return  FILE_ERR_NG;
+       }
+}
+
+
+/* end of file */
index aad66f4..0187490 100755 (executable)
 #define VT100DRV_ESC_NUM               4
 
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HANDLE    Vt100Drv_Open(struct c_drvobj *self, const char *pszPath, int iMode);
+FILE_ERR  Vt100Drv_Close(struct c_drvobj *self, C_FILEOBJ *pFileObj);
+FILE_ERR  Vt100Drv_IoControl(struct c_drvobj *self, C_FILEOBJ *pFileObj, int iFunc, void *pInBuf, FILE_SIZE InSize, const void *pOutBuf, FILE_SIZE OutSize);
+FILE_POS  Vt100Drv_Seek(struct c_drvobj *self, C_FILEOBJ *pFileObj, FILE_POS Offset, int iOrign);
+FILE_SIZE Vt100Drv_Read(struct c_drvobj *self, C_FILEOBJ *pFileObj, void *pBuf, FILE_SIZE Size);
+FILE_SIZE Vt100Drv_Write(struct c_drvobj *self, C_FILEOBJ *pFileObj, const void *pData, FILE_SIZE Size);
+FILE_ERR  Vt100Drv_Flush(struct c_drvobj *self, C_FILEOBJ *pFileObj);
+
+int       Vt100Drv_GetCh(C_VT100DRV *self);
+
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/aplfw/driver/console/vt100/vt100drv_open.c b/aplfw/driver/console/vt100/vt100drv_open.c
new file mode 100755 (executable)
index 0000000..9ac8009
--- /dev/null
@@ -0,0 +1,36 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  vt100drv_open.c
+ * @brief %jp{VT100 ターミナルドライバ}
+ *
+ * Copyright (C) 2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "vt100drv_local.h"
+#include "system/sysapi/sysapi.h"
+
+
+
+HANDLE Vt100Drv_Open(C_DRVOBJ *pDrvObj, const char *pszPath, int iMode)
+{
+       C_VT100DRV                      *self;
+       C_FILEOBJ                       *pFileObj;
+       
+       /* upper cast */
+       self = (C_VT100DRV *)pDrvObj;
+       
+       /* create file descriptor */
+       if ( (pFileObj = SysMem_Alloc(sizeof(*pFileObj))) == NULL )
+       {
+               return HANDLE_NULL;
+       }
+       FileObj_Create(pFileObj, pDrvObj, NULL);
+       
+       return (HANDLE)pFileObj;
+}
+
+
+/* end of file */
index f89c39e..2c63d1f 100755 (executable)
@@ -3,12 +3,16 @@
 #include "vt100drv_local.h"
 
 
-FILE_SIZE Vt100Drv_Read(C_VT100DRV *self, void *pBuf, FILE_SIZE Size)
+FILE_SIZE Vt100Drv_Read(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, void *pBuf, FILE_SIZE Size)
 {
+       C_VT100DRV *self;
        char       *pcBuf;
        FILE_SIZE  i;
        int        c;
 
+       /* upper cast */
+       self = (C_VT100DRV *)pDrvObj;
+
        pcBuf = (char *)pBuf;
        
        for ( i = 0; i < Size; i++ )
diff --git a/aplfw/driver/console/vt100/vt100drv_seek.c b/aplfw/driver/console/vt100/vt100drv_seek.c
new file mode 100755 (executable)
index 0000000..c1da626
--- /dev/null
@@ -0,0 +1,22 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  vt100drv_open.c
+ * @brief %jp{VT100 ターミナルドライバ}
+ *
+ * Copyright (C) 2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "vt100drv_local.h"
+#include "system/sysapi/sysapi.h"
+
+
+FILE_POS  Vt100Drv_Seek(struct c_drvobj *self, C_FILEOBJ *pFileObj, FILE_POS Offset, int iOrign)
+{
+       return  FILE_ERR_NG;
+}
+
+
+/* end of file */
index 0516b0f..c79bbea 100755 (executable)
@@ -3,11 +3,15 @@
 #include "vt100drv_local.h"
 
 
-FILE_SIZE Vt100Drv_Write(C_VT100DRV *self, const void *pData, FILE_SIZE Size)
+FILE_SIZE Vt100Drv_Write(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, const void *pData, FILE_SIZE Size)
 {
-       const char *pcBuf;
-       FILE_SIZE  i;
-
+       C_VT100DRV      *self;
+       const char      *pcBuf;
+       FILE_SIZE       i;
+       
+       /* upper cast */
+       self = (C_VT100DRV *)pDrvObj;
+       
        /* '\n' -> '\r\n' へ変換 */
        pcBuf = (const char *)pData;
        for ( i = 0; i < Size; i++ )
@@ -25,4 +29,3 @@ FILE_SIZE Vt100Drv_Write(C_VT100DRV *self, const void *pData, FILE_SIZE Size)
        return i;
 }
 
-
index e517c0c..99ea390 100755 (executable)
@@ -1,7 +1,19 @@
 
 
 
-#include "winsockdrv.h"
+#include "winsockdrv_local.h"
+
+
+const T_DRVOBJ_METHODS  WinSockDrv_Methods = 
+       {
+               WinSockDrv_Open,
+               WinSockDrv_Close,
+               WinSockDrv_IoControl,
+               WinSockDrv_Seek,
+               WinSockDrv_Read,
+               WinSockDrv_Write,
+               WinSockDrv_Flush,
+       };
 
 
 /** コンストラクタ */
@@ -9,6 +21,9 @@ void WinSockDrv_Create(C_WINSOCKDRV *self, int iPortNum, int iIntNum, int iBufSi
 {
        WSADATA wsaData;
        struct sockaddr_in addr;
+       
+       /* 親クラス初期化 */
+       DrvObj_Create(&self->DrvObj, &WinSockDrv_Methods);
 
        WSAStartup(MAKEWORD(2,0), &wsaData);
        
@@ -32,36 +47,89 @@ void WinSockDrv_Delete(C_WINSOCKDRV *self)
 
 
 /** オープン */
-void WinSockDrv_Open(C_WINSOCKDRV *self)
+HANDLE WinSockDrv_Open(C_DRVOBJ *pDrvObj, const char *pszPath, int iMode)
 {
-       struct sockaddr_in client;
-       int len;
+       C_WINSOCKDRV            *self;
+       C_FILEOBJ                       *pFileObj;
+       struct sockaddr_in      client;
+       int                                     len;
+
+       /* upper cast */
+       self = (C_WINSOCKDRV *)pDrvObj;
+
+       /* create file descriptor */
+       if ( (pFileObj = SysMem_Alloc(sizeof(*pFileObj))) == NULL )
+       {
+               return HANDLE_NULL;
+       }
+       FileObj_Create(pFileObj, pDrvObj, NULL);
 
+       /* オープン処理 */
        if ( self->iOpenCount++ == 0 )
        {
                len = sizeof(client);
                self->sock = accept(self->sock0, (struct sockaddr *)&client, &len);
        }
+
+       return (HANDLE)pFileObj;
 }
 
 
 /** クローズ */
-void WinSockDrv_Close(C_WINSOCKDRV *self)
+FILE_ERR WinSockDrv_Close(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj)
+{
+       C_WINSOCKDRV *self;
+
+       /* upper cast */
+       self = (C_WINSOCKDRV *)pDrvObj;
+
+       if ( --self->iOpenCount == 0 )
+       {
+               closesocket(self->sock);
+       }
+
+       return FILE_ERR_OK;
+}
+
+
+FILE_ERR  WinSockDrv_IoControl(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, int iFunc, const void *pInBuf, FILE_SIZE InSize, void *pOutBuf, FILE_SIZE OutSize)
+{
+       return FILE_ERR_NG;
+}
+
+
+FILE_POS  WinSockDrv_Seek(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, FILE_POS Offset, int iOrign)
 {
-       closesocket(self->sock);
+       return FILE_ERR_NG;
 }
 
 
 /** 読み出し */
-int WinSockDrv_Read(C_WINSOCKDRV *self, void *pRecvBuf, int iSize)
+FILE_SIZE WinSockDrv_Read(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, void *pBuf, FILE_SIZE Size)
 {
-       return recv(self->sock, pRecvBuf, iSize, 0);
+       C_WINSOCKDRV *self;
+
+       /* upper cast */
+       self = (C_WINSOCKDRV *)pDrvObj;
+
+       return recv(self->sock, pBuf, Size, 0);
 }
 
+
 /** 書き込み */
-int WinSockDrv_Write(C_WINSOCKDRV *self, const void *pData, int iSize)
+FILE_SIZE WinSockDrv_Write(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, const void *pData, FILE_SIZE Size)
 {
-       return send(self->sock, pData, iSize, 0);
+       C_WINSOCKDRV *self;
+
+       /* upper cast */
+       self = (C_WINSOCKDRV *)pDrvObj;
+
+       return send(self->sock, pData, Size, 0);
 }
 
 
+FILE_ERR  WinSockDrv_Flush(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj)
+{
+       return FILE_ERR_OK;
+}
+
index bcd054e..16cf2c2 100755 (executable)
 
 #define SIZE   WINSIZE
 #include <winsock2.h>
+#include "system/file/drvobj.h"
 #include "system/sysapi/sysapi.h"
 #include "library/container/stmbuf/stmbuf.h"
 
 
-/* SCI用ドライバ制御部 */
+/* WinSock用ドライバ制御部 */
 typedef struct c_winsockdrv
 {
-       int           iOpenCount;
-       SYSEVT_HANDLE hEvtSend;
-       SYSEVT_HANDLE hEvtRecv;
-       SYSMTX_HANDLE hMtxSend;
-       SYSMTX_HANDLE hMtxRecv;
-
-       SOCKET sock0;
-       SOCKET sock;
-
-
-       C_STREAMBUF   StmBuf;
+       C_DRVOBJ                DrvObj;                 /* デバイスドライバクラスを継承 */
+       
+       int                             iOpenCount;
+       SYSEVT_HANDLE   hEvtSend;
+       SYSEVT_HANDLE   hEvtRecv;
+       SYSMTX_HANDLE   hMtxSend;
+       SYSMTX_HANDLE   hMtxRecv;
+
+       SOCKET                  sock0;
+       SOCKET                  sock;
+
+       C_STREAMBUF             StmBuf;
 } C_WINSOCKDRV;
 
 
@@ -42,17 +44,13 @@ extern "C" {
 #endif
 
 void WinSockDrv_Create(C_WINSOCKDRV *self, int iPortNum, int iIntNum, int iBufSize);           /**< コンストラクタ */
-void WinSockDrv_Delete(C_WINSOCKDRV *self);                                                                                                    /**< デストラクタ */
-void WinSockDrv_Open(C_WINSOCKDRV *self);                                                                                                      /**< オープン初期化 */
-void WinSockDrv_Close(C_WINSOCKDRV *self);                                                                                                     /**< クローズ */
-int  WinSockDrv_Read(C_WINSOCKDRV *self, void *pRecvBuf, int iSize);                                           /**< 書き込み */
-int  WinSockDrv_Write(C_WINSOCKDRV *self, const void *pData, int iSize);                                       /**< 読み出し */
 
 #ifdef __cplusplus
 }
 #endif
 
 
+
 #endif /* __HOS__winsockdrv_h__ */
 
 
diff --git a/aplfw/driver/serial/winsock/winsockdrv_local.h b/aplfw/driver/serial/winsock/winsockdrv_local.h
new file mode 100755 (executable)
index 0000000..f919d3b
--- /dev/null
@@ -0,0 +1,40 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  winsockdrv.h
+ * @brief %jp{WinSockでシリアルを擬似するドライバ}
+ *
+ * Copyright (C) 2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef __HOS__winsockdrv_local_h__
+#define __HOS__winsockdrv_local_h__
+
+
+#include "winsockdrv.h"
+#include "system/file/drvobj.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HANDLE    WinSockDrv_Open(C_DRVOBJ *pDrvObj, const char *pszPath, int iMode);
+FILE_ERR  WinSockDrv_Close(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj);
+FILE_ERR  WinSockDrv_IoControl(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, int iFunc, void *pInBuf, FILE_SIZE InSize, const void *pOutBuf, FILE_SIZE OutSize);
+FILE_POS  WinSockDrv_Seek(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, FILE_POS Offset, int iOrign);
+FILE_SIZE WinSockDrv_Read(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, void *pBuf, FILE_SIZE Size);
+FILE_SIZE WinSockDrv_Write(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, const void *pData, FILE_SIZE Size);
+FILE_ERR  WinSockDrv_Flush(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __HOS__winsockdrv_local_h__ */
+
+
+/* end of file */
index 1d51fa3..016572a 100755 (executable)
@@ -65,21 +65,16 @@ void Sample_Startup(VP_INT exinf)
        
        /*  /dev/com0 に登録 */
        strcpy(DevInf.szName, "com0");
-       DevInf.pfncCreate = WinSockFile_Create;
-       DevInf.ObjSize    = sizeof(C_WINSOCKFILE);
-       DevInf.pParam     = &g_WinSockDrv[0];
+       DevInf.pDrvObj = (C_DRVOBJ *)&g_WinSockDrv[0];
        File_AddDevice(&DevInf);
 
-
        /* /dev/com0 の上に VT100コンソールを形成 */
        hTty = File_Open("/dev/com0", FILE_MODE_READ | FILE_MODE_WRITE);
        Vt100Drv_Create(&g_Vt100Drv[1], hTty);
 
        /*  /dev/con0 に登録 */
        strcpy(DevInf.szName, "con0");
-       DevInf.pfncCreate = Vt100Con_Create;
-       DevInf.ObjSize    = sizeof(C_VT100CON);
-       DevInf.pParam     = &g_Vt100Drv[1];
+       DevInf.pDrvObj = (C_DRVOBJ *)&g_Vt100Drv[1];
        File_AddDevice(&DevInf);
 
        hCon = File_Open("/dev/con0", FILE_MODE_READ | FILE_MODE_WRITE);
index 88b8762..92a7e0a 100755 (executable)
@@ -110,6 +110,10 @@ SOURCE=..\wintimer.c
 # PROP Default_Filter "h;hpp;hxx;hm;inl"
 # Begin Source File
 
+SOURCE=..\..\..\..\system\file\drvobj.h
+# End Source File
+# Begin Source File
+
 SOURCE=..\kernel_id.h
 # End Source File
 # Begin Source File
index 1417eb6..b39e53d 100755 (executable)
@@ -47,7 +47,7 @@
 extern "C" {
 #endif
 
-FILE_ERR Console_GetCh(HANDLE hConsole);                                       /**< コンストラクタ */
+FILE_ERR Console_GetCh(HANDLE hConsole);
 
 #ifdef __cplusplus
 }
index 002dd19..b1c5316 100755 (executable)
@@ -2,18 +2,16 @@
 
 
 
-FILE_ERR Console_GetCh(HANDLE hConsole)
+int Console_GetCh(HANDLE hFile)
 {
-       C_CONSOLEOBJ *self;
+       int c;
 
-       self = (C_CONSOLEOBJ *)hConsole;
-
-       if ( ConsoleObj_GetMethods(self)->pfncGetCh != NULL )
+       if ( File_IoControl(hFile, FILE_IOCTL_CON_GETCH, &c, sizeof(c), NULL, 0) != FILE_ERR_OK )
        {
-               return ConsoleObj_GetMethods(self)->pfncGetCh(hConsole);
+               return FILE_ERR_NG;
        }
 
-       return FILE_ERR_NG;
+       return c;
 }
 
 
index c9ad780..db57c3c 100755 (executable)
@@ -31,7 +31,7 @@ typedef struct c_drvfile
 extern "C" {
 #endif
 
-void DrvFile_Create(C_DRVFILE *self, C_DRVOBJ *pDrvObj, int iMode, const T_FILEOBJ_METHODS *pMethods);         /**< コンストラクタ */
+void DrvFile_Create(C_DRVFILE *self, C_DRVOBJ *pDrvObj, int iMode);            /**< コンストラクタ */
 
 #ifdef __cplusplus
 }
index 9788bb9..4b36aca 100755 (executable)
@@ -23,14 +23,10 @@ const T_FILEOBJ_METHODS DrvFile_FileObjMethods =
 
 
 /** コンストラクタ */
-void DrvFile_Create(C_DRVFILE *self, C_DRVOBJ *pDrvObj, int iMode, const T_FILEOBJ_METHODS *pMethods)
+void DrvFile_Create(C_DRVFILE *self, C_DRVOBJ *pDrvObj, int iMode)
 {
        /* 親クラスの初期化 */
-       if ( pMethods == NULL )
-       {
-               pMethods = &DrvFile_FileObjMethods;
-       }
-       FileObj_Create(&self->FileObj, pMethods);
+       FileObj_Create(&self->FileObj, &DrvFile_FileObjMethods);
        
        /* メンバ初期化 */
        self->pDrvObj = pDrvObj;
index 40efd8a..2ca7f9e 100755 (executable)
 #define __HOS__drvobj_h__
 
 
-#include "system/file/file.h"
-
+#include "system/file/fileobj.h"
 
 struct c_drvobj;
 
 /* デバイスドライバオブジェクト基本クラス メソッドテーブル */
 typedef struct t_drvobj_methods
 {
-       T_HANDLEOBJ_METHODS HandlObjMethods;
-       FILE_ERR  (*pfncClose)(struct c_drvobj *self, HANDLE hFile);
-       FILE_ERR  (*pfncIoControl)(struct c_drvobj *self, HANDLE hFile, int iFunc, const void *pInBuf, FILE_SIZE InSize, void *pOutBuf, FILE_SIZE OutSize);
-       FILE_POS  (*pfncSeek)(struct c_drvobj *self, HANDLE hFile, FILE_POS Offset, int iOrign);
-       FILE_SIZE (*pfncRead)(struct c_drvobj *self, HANDLE hFile, void *pBuf, FILE_SIZE Size);
-       FILE_SIZE (*pfncWrite)(struct c_drvobj *self, HANDLE hFile, const void *pData, FILE_SIZE Size);
-       FILE_ERR  (*pfncFlush)(struct c_drvobj *self, HANDLE hFile);
+       HANDLE    (*pfncOpen)(struct c_drvobj *self, const char *pszPath, int iMode);
+       FILE_ERR  (*pfncClose)(struct c_drvobj *self, C_FILEOBJ *pFileObj);
+       FILE_ERR  (*pfncIoControl)(struct c_drvobj *self, C_FILEOBJ *pFileObj, int iFunc, void *pInBuf, FILE_SIZE InSize, const void *pOutBuf, FILE_SIZE OutSize);
+       FILE_POS  (*pfncSeek)(struct c_drvobj *self, C_FILEOBJ *pFileObj, FILE_POS Offset, int iOrign);
+       FILE_SIZE (*pfncRead)(struct c_drvobj *self, C_FILEOBJ *pFileObj, void *pBuf, FILE_SIZE Size);
+       FILE_SIZE (*pfncWrite)(struct c_drvobj *self, C_FILEOBJ *pFileObj, const void *pData, FILE_SIZE Size);
+       FILE_ERR  (*pfncFlush)(struct c_drvobj *self, C_FILEOBJ *pFileObj);
 } T_DRVOBJ_METHODS;
 
 
@@ -42,18 +41,17 @@ typedef struct c_drvobj
 extern "C" {
 #endif
 
-void    DrvObj_Create(C_DRVOBJ *self, const T_DRVOBJ_METHODS *pMethods);               /**< コンストラクタ */
-void    DrvObj_Delete(C_DRVOBJ *self);                                                                                 /**< デストラクタ */
-
-HANDLE  DrvObj_Open(C_DRVOBJ *self, int iMode);
-#define DrvObj_Close(self, hFile)                                              (self)->pMethods->pfncClose((self), (hFile))
-#define DrvObj_IoControl(self, hFile, iFunc, pInBuf, InSize, pOutBuf, OutSize) \
-                                                                                                               (self)->pMethods->pfncIoControl((self), (hFile), (iFunc), (pInBuf), (InSize), (pOutBuf), (OutSize))
-#define DrvObj_Seek(self, hFile, Offset, iOrign)               (self)->pMethods->pfncSeek((self), (hFile), (Offset), (iOrign))
-#define DrvObj_Read(self, hFile, pBuf, Size)                   (self)->pMethods->pfncRead((self), (hFile), (pBuf), (Size))
-#define DrvObj_Write(self, hFile, pData, Size)                 (self)->pMethods->pfncWrite((self), (hFile), (pData), (Size))   
-#define DrvObj_Flush(self, hFile)                                              (self)->pMethods->pfncFlush((self), (hFile))
-
+void     DrvObj_Create(C_DRVOBJ *self, const T_DRVOBJ_METHODS *pMethods);              /**< コンストラクタ */
+void     DrvObj_Delete(C_DRVOBJ *self);                                                                                        /**< デストラクタ */
+
+#define  DrvObj_Open(self, pszPath, iMode)                             ((self)->pMethods->pfncOpen((self), (pszPath), (iMode)))
+#define  DrvObj_Close(self, pFileObj)                                  ((self)->pMethods->pfncClose((self), (pFileObj)))
+#define  DrvObj_IoControl(self, pFileObj, iFunc, pInBuf, InSize, pOutBuf, OutSize)     \
+                                                                                                               ((self)->pMethods->pfncIoControl((self), (pFileObj), (iFunc), (pInBuf), (InSize), (pOutBuf), (OutSize)))
+#define  DrvObj_Seek(self, pFileObj, Offset, iOrign)   ((self)->pMethods->pfncSeek((self), (pFileObj), (Offset), (iOrign)))
+#define  DrvObj_Read(self, pFileObj, pBuf, Size)               ((self)->pMethods->pfncRead((self), (pFileObj), (pBuf), (Size)))
+#define  DrvObj_Write(self, pFileObj, pData, Size)             ((self)->pMethods->pfncWrite((self), (pFileObj), (pData), (Size)))
+#define  DrvObj_Flush(self, pFileObj)                                  ((self)->pMethods->pfncFlush((self), (pFileObj)))
 
 #ifdef __cplusplus
 }
diff --git a/aplfw/system/file/drvobj_create.c b/aplfw/system/file/drvobj_create.c
new file mode 100755 (executable)
index 0000000..f1ba952
--- /dev/null
@@ -0,0 +1,11 @@
+
+#include "drvobj_local.h"
+
+
+/**< コンストラクタ */
+void DrvObj_Create(C_DRVOBJ *self, const T_DRVOBJ_METHODS *pMethods)
+{
+       self->pMethods = pMethods;
+}
+
+
index a3a651a..4e30b46 100755 (executable)
 extern "C" {
 #endif
 
-FILE_ERR  DrvObj_Close(HANDLE hDrv, HANDLE hFile);
-FILE_ERR  DrvObj_IoControl(HANDLE hDrv, HANDLE hFile, int iFunc, const void *pInBuf, FILE_SIZE InSize, void *pOutBuf, FILE_SIZE OutSize);
-FILE_SIZE DrvObj_Read(HANDLE hDrv, HANDLE hFile, void *pBuf, FILE_POS Pos, FILE_SIZE Size);
-FILE_SIZE DrvObj_Write(HANDLE hDrv, HANDLE hFile, const void *pData, FILE_POS Pos, FILE_SIZE Size);
-FILE_ERR  DrvObj_Flush(HANDLE hDrv, HANDLE hFile);
-
 #ifdef __cplusplus
 }
 #endif
index 4a09e0e..451dd47 100755 (executable)
@@ -43,8 +43,9 @@
 #define FILE_SEEK_CUR                          1
 #define FILE_SEEK_END                          2
 
+
 /* IoControl機能コード(共通) */
-#define FILE_IOCTL_GETDEVTYPE          0x0000          /* デバイスタイプを得る */
+#define FILE_IOCTL_GETDEVINF           0x0000          /* デバイス情報を得る */
 #define FILE_IOCTL_SYNC                                0x0001          /* 同期する */
 #define FILE_IOCTL_GETSIZE                     0x0010          /* ファイルサイズを取得 */
 #define FILE_IOCTL_GETREADSIZE         0x0010          /* 読み込み可能サイズ(受信バッファ内のデータ量)を取得 */
 #define FILE_IOCTL_RELREADBUF          0x0021          /* リードバッファ返却(省コピー版Read) */
 #define FILE_IOCTL_GETWRITEBUF         0x0030          /* ライトバッファ取得(省コピー版Write) */
 #define FILE_IOCTL_SENDWRITEBUF                0x0031          /* ライトバッファ送信(省コピー版Write) */
-#define FILE_IOCTL_RELWRITEBUF         0x0032          /* ライトバッファ破棄(省コピー版Write) */
+#define FILE_IOCTL_CANWRITEBUF         0x0032          /* ライトバッファ破棄(省コピー版Write) */
+
+/* IoControl機能コード(コンソール) */
+#define FILE_IOCTL_CON_GETCH           0x0101          /* 文字読込み */
 
 /* IoControl機能コード(シリアル通信) */
 #define FILE_IOCTL_COM_GETSPEED                0x2101          /* BPS取得 */
@@ -70,7 +74,8 @@
 #define FILE_IOCTL_IP_SETMASK          0x2304          /* IPサブネットマスク設定 */
 
 /* IoControl機能コード(ユーザー定義) */
-#define FILE_IOCTL_USER                                0x6000          /* 0x6000〜0x7fff あたりを使ってね */
+#define FILE_IOCTL_USER                                0x6000          /* 0x6000〜0x7fff */
+
 
 
 /* 型定義 */
@@ -90,12 +95,11 @@ typedef struct t_file_volinf
 
 
 /* デバイス情報 */
+struct c_drvobj;
 typedef struct t_file_devinf
 {
-       char            szName[FILE_MAX_NAME];                                                                  /* ファイル名 */
-       FILE_ERR        (*pfncCreate)(HANDLE hFile, void *pParam, int iMode);   /* コンストラクタアドレス */
-       int             ObjSize;                                                                                                /* オブジェクトのサイズ */
-       void            *pParam;                                                                                                /* オブジェクトの生成パラメータ */
+       char                    szName[FILE_MAX_NAME];                  /* デバイス名 */
+       struct c_drvobj *pDrvObj;                                               /* デバイスドライバへの参照 */
 } T_FILE_DEVINF;
 
 
@@ -120,19 +124,19 @@ extern "C" {
 #endif
 
 /* システム */
-void     File_Initialize(void);                                                                        /* ファイルシステムの初期化 */
+void      File_Initialize(void);                                                               /* ファイルシステムの初期化 */
 
-FILE_ERR File_AddVolume(const T_FILE_VOLINF *pVolInf);                 /* ボリュームのマウント */
-FILE_ERR File_RemoveVolume(const T_FILE_VOLINF *pVolInf);              /* ボリュームのマウント */
+FILE_ERR  File_AddVolume(const T_FILE_VOLINF *pVolInf);                        /* ボリュームのマウント */
+FILE_ERR  File_RemoveVolume(const T_FILE_VOLINF *pVolInf);             /* ボリュームのマウント */
 
-FILE_ERR File_AddDevice(const T_FILE_DEVINF *pDevInf);                 /* デバイスファイルの追加 */
-FILE_ERR File_RemoveDevice(const char *pszName);                               /* デバイスファイルの削除 */
+FILE_ERR  File_AddDevice(const T_FILE_DEVINF *pDevInf);                        /* デバイスファイルの追加 */
+FILE_ERR  File_RemoveDevice(const char *pszName);                              /* デバイスファイルの削除 */
 
 
 /* 基本API */
 HANDLE    File_Open(const char *pszPatah, int iMode);
 #define   File_Close(hFile)            Handle_Close(hFile)
-FILE_ERR  File_IoControl(HANDLE hFile, int iFunc, const void *pInBuf, FILE_SIZE InSize, void *pOutBuf, FILE_SIZE OutSize);
+FILE_ERR  File_IoControl(HANDLE hFile, int iFunc, void *pInBuf, FILE_SIZE InSize, const void *pOutBuf, FILE_SIZE OutSize);
 FILE_POS  File_Seek(HANDLE hFile, FILE_POS Offset, int iOrign);
 FILE_SIZE File_Read(HANDLE hFile, void *pBuf, FILE_SIZE Size);
 FILE_SIZE File_Write(HANDLE hFile, const void *pData, FILE_SIZE Size);
@@ -156,7 +160,6 @@ int       File_PrintFormatVL(HANDLE hFile, const char *pszFormat, va_list argptr
 
 
 /* 拡張操作 */
-FILE_ERR  File_Sync(HANDLE hFile);
 FILE_POS  File_GetFileSize(HANDLE hFile);
 FILE_SIZE File_GetReadSize(HANDLE hFile);
 FILE_SIZE File_GetWriteSize(HANDLE hFile);
index b2ba135..72ad5a8 100755 (executable)
@@ -9,23 +9,17 @@
  */
 
 
-#include <stdio.h>
 #include "file_local.h"
 #include "fileobj.h"
 
 
-FILE_ERR File_IoControl(HANDLE hFile, int iFunc, const void *pInBuf, FILE_SIZE InSize, void *pOutBuf, FILE_SIZE OutSize)
+FILE_ERR File_IoControl(HANDLE hFile, int iFunc, void *pInBuf, FILE_SIZE InSize, const void *pOutBuf, FILE_SIZE OutSize)
 {
        C_FILEOBJ *self;
 
        self = FILE_HANDLE2OBJ(hFile);
 
-       if ( FileObj_GetMethods(self)->pfncIoControl != NULL )
-       {
-               return FileObj_GetMethods(self)->pfncIoControl(hFile, iFunc, pInBuf, InSize, pOutBuf, OutSize);
-       }
-
-       return FILE_ERR_NG;
+       return DrvObj_IoControl(self->pDrvObj, self, iFunc, pInBuf, InSize, pOutBuf, OutSize);
 }
 
 
index c90d977..ea5b6eb 100755 (executable)
@@ -28,7 +28,6 @@ typedef struct c_file
 extern C_FILE  g_File;
 
 
-
 #endif /* __HOS__file_local_h__ */
 
 
index 53eb90f..aada22c 100755 (executable)
@@ -18,7 +18,6 @@
 HANDLE File_Open(const char *pszPatah, int iMode)
 {
        C_FILE *self;
-       HANDLE hFile;
        int    iNameLen;
        int    i;
        
index 4201df5..1c92f70 100755 (executable)
@@ -20,13 +20,9 @@ FILE_SIZE File_Read(HANDLE hFile, void *pBuf, FILE_SIZE Size)
        C_FILEOBJ *self;
 
        self = FILE_HANDLE2OBJ(hFile);
-
-       if ( FileObj_GetMethods(self)->pfncRead != NULL )
-       {
-               return FileObj_GetMethods(self)->pfncRead(hFile, pBuf, Size);
-       }
-
-       return FILE_ERR_NG;
+       self->pDrvObj;
+       
+       return DrvObj_Read(self->pDrvObj, self, pBuf, Size);
 }
 
 
index 8887b29..e22f0af 100755 (executable)
@@ -19,13 +19,8 @@ FILE_POS File_Seek(HANDLE hFile, FILE_POS Offset, int iOrign)
        C_FILEOBJ *self;
        
        self = FILE_HANDLE2OBJ(hFile);
-       
-       if ( FileObj_GetMethods(self)->pfncSeek != NULL )
-       {
-               return FileObj_GetMethods(self)->pfncSeek(hFile, Offset, iOrign);
-       }
-       
-       return FILE_ERR_NG;
+
+       return DrvObj_Seek(self->pDrvObj, self, Offset, iOrign);
 }
 
 
index fdacc36..e940672 100755 (executable)
@@ -19,13 +19,8 @@ FILE_SIZE File_Write(HANDLE hFile, const void *pData, FILE_SIZE Size)
        C_FILEOBJ *self;
 
        self = FILE_HANDLE2OBJ(hFile);
-
-       if ( FileObj_GetMethods(self)->pfncWrite != NULL )
-       {
-               return FileObj_GetMethods(self)->pfncWrite(hFile, pData, Size);
-       }
-
-       return FILE_ERR_NG;
+       
+       return DrvObj_Write(self->pDrvObj, self, pData, Size);
 }
 
 
index 1838fa5..a5316e9 100755 (executable)
@@ -4,6 +4,8 @@
  * @file  fileobj.h
  * @brief %jp{ファイルオブジェクト}
  *
+ * %jp{ファイルディスクリプタとして機能するクラス}
+ *
  * Copyright (C) 2006 by Project HOS
  * http://sourceforge.jp/projects/hos/
  */
 
 #include "system/handle/handleobj.h"
 #include "system/file/file.h"
-#include "system/file/drvobj.h"
 
+struct c_drvobj;
 
 /* ファイルオブジェクトクラス基本メソッドテーブル */
 typedef struct t_fileobj_methods
 {
-       T_HANDLEOBJ_METHODS HandlObjMethods;
-       FILE_ERR  (*pfncIoControl)(HANDLE hFile, int iFunc, const void *pInBuf, FILE_SIZE InSize, void *pOutBuf, FILE_SIZE OutSize);
-       FILE_POS  (*pfncSeek)(HANDLE hFile, FILE_POS Offset, int iOrign);
-       FILE_SIZE (*pfncRead)(HANDLE hFile, void *pBuf, FILE_SIZE Size);
-       FILE_SIZE (*pfncWrite)(HANDLE hFile, const void *pData, FILE_SIZE Size);
-       FILE_ERR  (*pfncFlush)(HANDLE hFile);
+       T_HANDLEOBJ_METHODS     HandlObjMethods;        /* ハンドルオブジェクトを継承 */
 } T_FILEOBJ_METHODS;
 
 
 /* ファイルブジェクト基本クラス定義 */
 typedef struct c_fileobj
 {
-       C_HANDLEOBJ     HandleObj;                              /* ハンドルオブジェクトを継承 */
-       C_DRVOBJ    *pDrvObj;                           /* デバイスドライバ本体への参照 */
+       C_HANDLEOBJ             HandleObj;                              /* ハンドルオブジェクトを継承 */
+       struct c_drvobj *pDrvObj;                               /* デバイスドライバへの参照 */
 } C_FILEOBJ;
 
 
+#include "drvobj.h"
+
+
 /* ハンドル変換 */
 #define FILE_HANDLE2OBJ(hFile)         ((C_FILEOBJ *)(hFile))
 
@@ -46,15 +46,16 @@ typedef struct c_fileobj
 extern "C" {
 #endif
 
-void     FileObj_Create(C_FILEOBJ *self, const T_FILEOBJ_METHODS* pMethods);
-void     FileObj_Delete(C_FILEOBJ *self);
-#define  FileObj_GetMethods(self)                      ((T_FILEOBJ_METHODS *)HandleObj_GetMethods(&(self)->HandleObj))
+void FileObj_Create(C_FILEOBJ *self, struct c_drvobj *pDrvObj, const T_FILEOBJ_METHODS *pMethods);
+void FileObj_Delete(HANDLE self);
 
 #ifdef __cplusplus
 }
 #endif
 
 
+
+
 #endif /* __HOS__file_h__ */
 
 
index e742c74..b6130db 100755 (executable)
 #include "fileobj.h"
 
 
-void FileObj_Create(C_FILEOBJ *self, const T_FILEOBJ_METHODS* pMethods)
+static const T_FILEOBJ_METHODS FileObj_FileObjMethods =
+       {
+               {FileObj_Delete},       /* デストラクタ */
+       };
+
+
+void FileObj_Create(C_FILEOBJ *self, C_DRVOBJ *pDrvObj, const T_FILEOBJ_METHODS *pMethods)
 {
+       if ( pMethods == NULL ) /* オーバーライド無しなら */
+       {
+               pMethods = &FileObj_FileObjMethods;
+       }
+
+       /* 親クラスコンストラクタ */
        HandleObj_Create(&self->HandleObj, &pMethods->HandlObjMethods);
+       
+       self->pDrvObj = pDrvObj;
 }
 
 
diff --git a/aplfw/system/file/fileobj_local.h b/aplfw/system/file/fileobj_local.h
new file mode 100755 (executable)
index 0000000..43437e7
--- /dev/null
@@ -0,0 +1,39 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  fileobj_local.h
+ * @brief %jp{ファイルオブジェクト ローカルヘッダファイル}
+ *
+ * %jp{ファイルディスクリプタとして機能するクラス}
+ *
+ * Copyright (C) 2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef __HOS__fileobj_local_h__
+#define __HOS__fileobj_local_h__
+
+
+#include "fileobj.h"
+
+
+/* ハンドル変換 */
+#define FILE_HANDLE2OBJ(hFile)         ((C_FILEOBJ *)(hFile))
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void FileObj_Delete(C_FILEOBJ *self);  /**< デストラクタ */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __HOS__fileobj_local_h__ */
+
+
+/* end of file */
index 6bcafac..2c2b3bf 100755 (executable)
@@ -10,11 +10,11 @@ HANDLE Volume_OpenFile(HANDLE hVolume, const char *pszPath, int iMode)
        
        self = (C_VOLUMEOBJ *)hVolume;
        
-       if ( VolumeObj_GetMethods(self)->pfncOpenFile != NULL )
+       if ( self->pMethods->pfncOpenFile == NULL )
        {
-               return VolumeObj_GetMethods(self)->pfncOpenFile(hVolume, pszPath, iMode);
+               return HANDLE_NULL;
        }
 
-       return HANDLE_NULL;
+       return self->pMethods->pfncOpenFile(hVolume, pszPath, iMode);
 }
 
index 85e595e..2ee85a4 100755 (executable)
@@ -20,8 +20,6 @@
 /* ボリューム操作オブジェクトクラス基本メソッドテーブル */
 typedef struct t_volumeobj_methods
 {
-       T_HANDLEOBJ_METHODS HandlObjMethods;
-       
        HANDLE   (*pfncOpenFile)(HANDLE hVolume, const char *pszPath, int iMode);               /* ファイルを開く */
        FILE_ERR (*pfncMakeDir)(HANDLE hVolume, const char *pszPath);                                   /* サブディレクトリを作成 */
        FILE_ERR (*pfncRemove)(HANDLE hVolume, const char *pszPath);                                    /* ファイルを削除 */
@@ -29,21 +27,21 @@ typedef struct t_volumeobj_methods
 
 typedef struct c_volumeobj
 {
-       C_HANDLEOBJ HandleObj;                                                          /* ハンドルオブジェクトを継承 */
+       const T_VOLUMEOBJ_METHODS *pMethods;
 } C_VOLUMEOBJ;
 
+
 /* ハンドル変換 */
 #define VOLUME_HANDLE2OBJ(hVolume)             ((C_VOLUMEOBJ *)hVolume)
 
 
-
-
-
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 void    VolumeObj_Create(C_VOLUMEOBJ *self, const T_VOLUMEOBJ_METHODS *pVolumeObjMethods);
+void    VolumeObj_Delete(C_VOLUMEOBJ *self);
+
 #define VolumeObj_GetMethods(self)             ((T_VOLUMEOBJ_METHODS *)HandleObj_GetMethods(&(self)->HandleObj))
 
 
index c7afbfe..3bb6f06 100755 (executable)
@@ -4,7 +4,7 @@
 
 void VolumeObj_Create(C_VOLUMEOBJ *self, const T_VOLUMEOBJ_METHODS *pVolumeObjMethods)
 {
-       HandleObj_Create(&self->HandleObj, &pVolumeObjMethods->HandlObjMethods);        
+       self->pMethods = pVolumeObjMethods;
 }
 
 
index fda5d46..80219a2 100755 (executable)
@@ -1,3 +1,13 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  devvol.h
+ * @brief %jp{デバイスドライバをファイルとして管理するボリューム}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
 
 #ifndef __HOS__devvol_h__
 #define __HOS__devvol_h__
index 2de350b..7e0bd1a 100755 (executable)
@@ -9,7 +9,7 @@ FILE_ERR DevVol_AddDevice(C_DEVVOL *self, const T_FILE_DEVINF *pDevInf)
        /* テーブルの空きを検索 */
        for ( i = 0; i < DEVVOL_MAX_DEVICE; i++ )
        {
-               if ( self->DevTable[i].ObjSize == 0 )
+               if ( self->DevTable[i].pDrvObj == NULL )
                {
                        self->DevTable[i] = *pDevInf;
                        return FILE_ERR_OK;
index 6804c44..da81334 100755 (executable)
@@ -5,7 +5,6 @@
 
 const T_VOLUMEOBJ_METHODS DevVol_VolumeObjMethods =
 {
-       { DevVol_Delete },                      /* デストラクタ */
        DevVol_OpenFile,
        NULL,
        NULL,
@@ -22,7 +21,7 @@ void DevVol_Create(C_DEVVOL *self)
        /* 初期化 */
        for ( i = 0; i < DEVVOL_MAX_DEVICE; i++ )
        {
-               self->DevTable[i].ObjSize = 0;
+               self->DevTable[i].pDrvObj = NULL;
        }
 }
 
index fc4d9e6..0931f6a 100755 (executable)
@@ -2,13 +2,13 @@
 #include <string.h>
 #include "devvol_local.h"
 #include "system/sysapi/sysapi.h"
+#include "system/file/drvobj.h"
 
 
 /* ファイルを開く */
 HANDLE DevVol_OpenFile(HANDLE hVolume, const char *pszPath, int iMode)
 {
        C_DEVVOL *self;
-       HANDLE   hFile;
        int      i;
 
        self = (C_DEVVOL *)hVolume;
@@ -30,21 +30,7 @@ HANDLE DevVol_OpenFile(HANDLE hVolume, const char *pszPath, int iMode)
                return HANDLE_NULL;
        }
        
-       /* メモリ確保 */
-       hFile = (HANDLE)SysMem_Alloc(self->DevTable[i].ObjSize);
-       if ( hFile == 0 )
-       {
-               return HANDLE_NULL;
-       }
-       
-       /* ファイルハンドル生成 */
-       if ( self->DevTable[i].pfncCreate(hFile, self->DevTable[i].pParam, iMode) != FILE_ERR_OK )
-       {
-               SysMem_Free((void *)hFile);
-               return HANDLE_NULL;
-       }
-
-       return hFile;
+       return DrvObj_Open(self->DevTable[i].pDrvObj, pszPath, iMode);
 }
 
 
index f7d43e7..46dbd85 100755 (executable)
@@ -5,7 +5,7 @@
 
 const T_FILEOBJ_METHODS FatFile_FileObjMethods =
 {
-       { FatFile_Delete },             /* デストラクタ */
+/*     { FatFile_Delete },     */      /* デストラクタ */
        FatFile_IoControl,              /* IoControl */
        FatFile_Seek,                   /* Seek */
        FatFile_Read,                   /* Read */