OSDN Git Service

(none)
[hos/hos-v4a.git] / aplfw / system / file / file.h
1 /** 
2  *  Hyper Operating System  Application Framework
3  *
4  * @file  file.h
5  * @brief %jp{ファイルシステム}
6  *
7  * Copyright (C) 2006-2007 by Project HOS
8  * http://sourceforge.jp/projects/hos/
9  */
10
11
12 #ifndef __HOS__file_h__
13 #define __HOS__file_h__
14
15
16 #include <stdarg.h>
17 #include "system/handle/handleobj.h"
18
19
20 #define FILE_MAX_PATH                           128                     /* パス名の最大値 */
21 #define FILE_MAX_NAME                           12                      /* 名前の最大値 */
22
23
24 /* エラーコード定義 */
25 #define FILE_ERR_OK                                     0
26 #define FILE_ERR_NG                                     (-1)
27
28 /* 定数定義 */
29 #define FILE_EOF                                        (-1)
30
31 /* Openモード定義 */
32 #define FILE_OPEN_READ                          0x01            /* 読込み許可 */
33 #define FILE_OPEN_WRITE                         0x02            /* 書込み許可 */
34 #define FILE_OPEN_CREATE                        0x04            /* 常に新規作成 */
35 #define FILE_OPEN_EXIST                         0x08            /* 存在しなければエラー */
36 #define FILE_OPEN_SHARE_READ            0x10            /* 読込み共有許可 */
37 #define FILE_OPEN_SHARE_WRITE           0x20            /* 書込み共有許可 */
38 #define FILE_OPEN_TEXT                          0x40            /* テキストモード */
39 #define FILE_OPEN_DIR                           0x80            /* ディレクトリをオープン */
40
41 /* シーク */
42 #define FILE_SEEK_SET                           0
43 #define FILE_SEEK_CUR                           1
44 #define FILE_SEEK_END                           2
45
46 /* 同期モード */
47 #define FILE_WMODE_BLOCKING                     0x00            /* 書込み ブロッキングモード */
48 #define FILE_WMODE_POLING                       0x01            /* 書込み ポーリングモード */
49 #define FILE_RMODE_BLOCKING                     0x00            /* 読込み ブロッキングモード */
50 #define FILE_RMODE_POLING                       0x01            /* 読込み ポーリングモード */
51
52
53 /* IoControl機能コード(共通) */
54 #define FILE_IOCTL_GETDEVINF            0x0000          /* デバイス情報を得る */
55 #define FILE_IOCTL_SYNC                         0x0001          /* 同期する */
56 #define FILE_IOCTL_GETSIZE                      0x0010          /* ファイルサイズを取得 */
57 #define FILE_IOCTL_GETREADSIZE          0x0010          /* 読み込み可能サイズ(受信バッファ内のデータ量)を取得 */
58 #define FILE_IOCTL_GETWRITESIZE         0x0011          /* 書き込み可能サイズ(送信バッファ内の空きサイズ)を取得 */
59 #define FILE_IOCTL_GETREADBUF           0x0020          /* リードバッファ取得(省コピー版Read) */
60 #define FILE_IOCTL_RELREADBUF           0x0021          /* リードバッファ返却(省コピー版Read) */
61 #define FILE_IOCTL_GETWRITEBUF          0x0030          /* ライトバッファ取得(省コピー版Write) */
62 #define FILE_IOCTL_SENDWRITEBUF         0x0031          /* ライトバッファ送信(省コピー版Write) */
63 #define FILE_IOCTL_CANWRITEBUF          0x0032          /* ライトバッファ破棄(省コピー版Write) */
64
65
66 /* IoControl機能コード(ディレクトリ) */
67 #define FILE_IOCTL_DIR_READ                     0x0101          /* デバイス情報を得る */
68
69 /* IoControl機能コード(コンソール) */
70 #define FILE_IOCTL_CON_GETCH            0x0201          /* 文字読込み */
71
72 /* IoControl機能コード(シリアル通信) */
73 #define FILE_IOCTL_COM_GETSPEED         0x2101          /* BPS取得 */
74 #define FILE_IOCTL_COM_SETSPEED         0x2101          /* BPS設定 */
75
76 /* IoControl機能コード(Ether) */
77 #define FILE_IOCTL_ETHER_GETPHA         0x2201          /* 物理アドレス取得 */
78 #define FILE_IOCTL_ETHER_SETPHA         0x2202          /* 物理アドレス設定 */
79
80 /* IoControl機能コード(IP層) */
81 #define FILE_IOCTL_IP_GETIP                     0x2301          /* IPアドレス取得 */
82 #define FILE_IOCTL_IP_SETIP                     0x2302          /* IPアドレス設定 */
83 #define FILE_IOCTL_IP_GETMASK           0x2303          /* IPサブネットマスク取得 */
84 #define FILE_IOCTL_IP_SETMASK           0x2304          /* IPサブネットマスク設定 */
85
86 /* IoControl機能コード(ユーザー定義) */
87 #define FILE_IOCTL_USER                         0x6000          /* 0x6000〜0x7fff */
88
89
90 /* ファイル属性 */
91 #define FILE_ATTR_READONLY                      0x01
92 #define FILE_ATTR_DIR                           0x08
93 #define FILE_ATTR_DEVICE                        0x80
94
95
96
97 /* 型定義 */
98 typedef char                    FILE_ATTR;                              /* ファイル属性 */
99 typedef int                             FILE_ERR;                               /* ファイルのエラー型 */
100 typedef long                    FILE_POS;                               /* ファイル位置の型定義 */
101 typedef long                    FILE_SIZE;                              /* 読み書き時のサイズ用の型定義 */
102 typedef unsigned long   FILE_TIME;                              /* 読み書き時のサイズ用の時刻型定義 */
103
104 struct c_drvobj;
105 struct c_volobj;
106
107
108
109 /* ファイル情報 */
110 typedef struct t_file_fileinf
111 {
112         char            szFileName[FILE_MAX_NAME];
113         FILE_ATTR       Attribute;
114         FILE_POS        FileSize;
115
116 /*
117         FILE_TIME       timeCreate;
118         FILE_TIME       timeAceess;
119         FILE_TIME       timeWrite;
120 */
121 } T_FILE_FILEINF;
122
123
124 #include "fileobj.h"
125 #include "drvobj.h"
126
127
128 #ifdef __cplusplus
129 extern "C" {
130 #endif
131
132 /* システム */
133 void      File_Initialize(void);                                                                                        /* ファイルシステムの初期化 */
134
135 FILE_ERR  File_AddDevice(const char *pszName, struct c_drvobj *pDrvObj);        /* デバイスドライバの登録 */
136 FILE_ERR  File_RemoveDevice(const char *pszName);                                                       /* デバイスドライバの削除 */
137
138 FILE_ERR  File_AddVolume(const char *pszName, struct c_volobj *pVolObj);        /* ボリュームのマウント */
139 FILE_ERR  File_RemoveVolume(const char *pszName);                                                       /* ボリュームのアンマウント */
140
141
142 /* 基本API */
143 HANDLE    File_Open(const char *pszPatah, int iMode);
144 void      File_Close(HANDLE hFile);
145 FILE_ERR  File_IoControl(HANDLE hFile, int iFunc, void *pInBuf, FILE_SIZE InSize, const void *pOutBuf, FILE_SIZE OutSize);
146 FILE_POS  File_Seek(HANDLE hFile, FILE_POS Offset, int iOrign);
147 FILE_SIZE File_Read(HANDLE hFile, void *pBuf, FILE_SIZE Size);
148 FILE_SIZE File_Write(HANDLE hFile, const void *pData, FILE_SIZE Size);
149 FILE_ERR  File_Flush(HANDLE hFile);
150
151 /* 同期制御API */
152 FILE_ERR  File_SetWriteMode(HANDLE hFile, int iWriteMode);
153 FILE_ERR  File_GetWriteStatus(HANDLE hFile);
154 FILE_ERR  File_SetWriteMonitor(HANDLE hFile, HANDLE hEvent);
155 FILE_ERR  File_SetReadMode(HANDLE hFile, int iReadMode);
156 FILE_ERR  File_GetReadStatus(HANDLE hFile);
157 FILE_ERR  File_SetReadMonitor(HANDLE hFile, HANDLE hEvent);
158
159
160 /* 文字列用API */
161 int       File_GetChar(HANDLE hFile);
162 int       File_GetString(HANDLE hFile, char *pszString, int iSize);
163 int       File_PutChar(HANDLE hFile, int c);
164 int       File_PutString(HANDLE hFile, const char *pszString);
165
166 /* 書式付き文字列用API */
167 int       File_PrintFormatV(HANDLE hFile, const char *pszFormat, va_list argptr);
168 int       File_PrintFormat(HANDLE hFile, const char *pszFormat, ...);
169
170 int       File_PrintHexNibble(HANDLE hFile, unsigned char c);           /* 4bitの16進数を出力 */
171
172 int       File_PrintFormatDecimal(HANDLE hFile, long lNum, int iWidth, int iPadChar);           /* 書式付き10進数出力 */
173 int       File_PrintFormatVL(HANDLE hFile, const char *pszFormat, va_list argptr);                      /* 書式付き出力軽量版 */
174
175
176 /* ディレクトリ読み出し */
177 FILE_ERR  File_ReadDir(HANDLE hFile, T_FILE_FILEINF *pFileInf);
178
179
180 /* 拡張操作 */
181 FILE_POS  File_GetFileSize(HANDLE hFile);
182 FILE_SIZE File_GetReadSize(HANDLE hFile);
183 FILE_SIZE File_GetWriteSize(HANDLE hFile);
184 FILE_SIZE File_GetReadBuf(HANDLE hFile, void **ppBuf);
185 FILE_SIZE File_RelReadBuf(HANDLE hFile, void *pBuf, long lSize);
186 FILE_SIZE File_GetWriteBuf(HANDLE hFile, void **ppBuf);
187 FILE_SIZE File_SendWriteBuf(HANDLE hFile, void *pBuf, long lSize);
188 FILE_ERR  File_CanWriteBuf(HANDLE hFile, void *pBuf);
189
190 /* ディレクトリ操作 */
191 HANDLE    File_OpenDir(const char *pszName);                                            /* ディレクトリを開く */
192 FILE_ERR  File_ReadDir(HANDLE hDir, T_FILE_FILEINF *pFileInf);          /* ディレクトリからファイルを検索 */
193 HANDLE    File_MakeDir(const char *pszName);                                            /* サブディレクトリを作成 */
194 HANDLE    File_Remove(const char *pszName);                                                     /* ファイルを削除 */
195
196
197 #ifdef __cplusplus
198 }
199 #endif
200
201
202 #endif  /* __HOS__file_h__ */
203
204
205 /* end of file */