fatlite.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:39k
源码类别:

VxWorks

开发平台:

C/C++

  1. /*
  2.  * $Log:   P:/user/amir/lite/vcs/fatlite.h_v  $
  3.    
  4.       Rev 1.13   11 Sep 1997 15:24:04   danig
  5.    FlashType -> unsigned short
  6.    
  7.       Rev 1.12   10 Aug 1997 18:02:26   danig
  8.    Comments
  9.    
  10.       Rev 1.11   04 Aug 1997 13:18:28   danig
  11.    Low level API
  12.    
  13.       Rev 1.10   07 Jul 1997 15:23:24   amirban
  14.    Ver 2.0
  15.    
  16.       Rev 1.9   21 Oct 1996 18:10:10   amirban
  17.    Defragment I/F change
  18.    
  19.       Rev 1.8   17 Oct 1996 16:19:24   danig
  20.    Audio features
  21.    
  22.       Rev 1.7   20 Aug 1996 13:22:44   amirban
  23.    fsGetBPB
  24.       Rev 1.6   14 Jul 1996 16:47:44   amirban
  25.    Format Params
  26.       Rev 1.5   04 Jul 1996 18:19:24   amirban
  27.    New fsInit and modified fsGetDiskInfo
  28.    
  29.       Rev 1.4   09 Jun 1996 18:16:56   amirban
  30.    Added fsExit
  31.    
  32.       Rev 1.3   03 Jun 1996 16:20:48   amirban
  33.    Separated fsParsePath
  34.    
  35.       Rev 1.2   19 May 1996 19:31:16   amirban
  36.    Got rid of aliases in IOreq
  37.    
  38.       Rev 1.1   12 May 1996 20:05:38   amirban
  39.    Changes to findFile
  40.    
  41.       Rev 1.0   20 Mar 1996 13:33:20   amirban
  42.    Initial revision.
  43.  */
  44. /************************************************************************/
  45. /*                                                                      */
  46. /* FAT-FTL Lite Software Development Kit */
  47. /* Copyright (C) M-Systems Ltd. 1995-1996 */
  48. /* */
  49. /************************************************************************/
  50. #ifndef FATLITE_H
  51. #define FATLITE_H
  52. #ifdef __cplusplus
  53. extern "C" {
  54. #endif
  55. #include "flbase.h"
  56. #include "dosformt.h"
  57. typedef unsigned FLHandle; /* Handle of an open file or drive. */
  58. /* Actually an index to file table or */
  59. /* drive table. */
  60. /*----------------------------------------------------------------------*/
  61. /* P a t h - N a m e s */
  62. /* */
  63. /* A path-name is represented as an array of SimplePath records. */
  64. /* Each SimplePath record holds a directory or file name segment, with  */
  65. /* the full 8.3 (spaces not compressed) name. */
  66. /* */
  67. /* Path-names always start at the root directory. There is no current   */
  68. /* directory. The directories pointers '.' and '..' can be specified */
  69. /* as the 'name' part of the path-segment, except at the root-directory.*/
  70. /* */
  71. /* Lower-case letters are different from upper-case. To be compatible   */
  72. /* with DOS, file-names should be upper-case. File names may contain    */
  73. /* any character, but files starting with hex E5 are considered deleted */
  74. /* according to DOS convention. */
  75. /* */
  76. /* A null (hex 0) in the first byte of the name field denotes that the  */
  77. /* path ends here. */
  78. /*                                                                      */
  79. /* Note that paths can be specified as strings: For example:      */
  80. /* */
  81. /* "UTIL       FATLITE H  "    ===> "UTILFATLITE.H". */
  82. /* ""  ===> "" (root directory) */
  83. /* "AUTOEXECBAT"                ===> "AUTOEXEC.BAT" */
  84. /* "UTIL       ..         "  ===> "UTIL.." (root directory) */
  85. /* */
  86. /* The optional service flParsePath may be used to convert regular */
  87. /* string paths to this format. */
  88. /*----------------------------------------------------------------------*/
  89. typedef struct {
  90.    char name[8]; /* name part of path segment */
  91. /* A hex 0 in 1st character indicates end of path */
  92.    char ext[3]; /* extension part of path segment */
  93. } FLSimplePath;
  94. /*----------------------------------------------------------------------*/
  95. /*   I O r e q */
  96. /* */
  97. /* IOreq is a common structure passed to all file-system functions. */
  98. /* Refer to the description of individual functions for specific usage  */
  99. /* of fields. Some fields have different names when used by different   */
  100. /* functions, hence the use of unions. */
  101. /* */
  102. /*----------------------------------------------------------------------*/
  103. typedef struct {
  104.   FLHandle irHandle; /* Handle of file or drive for operation*/
  105.   unsigned irFlags; /* function-specific flags  */
  106.   FLSimplePath FAR1 * irPath; /* path of file for operation  */
  107.   void FAR1 * irData; /* Pointer to user-buffer for operation */
  108.   long irLength; /* No. of bytes, size or position for   */
  109. /* operation   */
  110. } IOreq;
  111. /* definiftions for absolute read & write */
  112. #define irSectorCount irFlags
  113. #define irSectorNo irLength
  114. /* definitions for physical read & write */
  115. #define irByteCount irFlags
  116. #define irAddress       irLength
  117. /* definitions for physical erase */
  118. #define irUnitCount     irFlags
  119. #define irUnitNo irLength
  120. /*----------------------------------------------------------------------*/
  121. /*            f l C a l l    */
  122. /* */
  123. /* Common entry-point to all file-system functions. Macros are          */
  124. /* to call individual function, which are separately described below. */
  125. /*                                                                      */
  126. /* Parameters:                                                          */
  127. /* function : file-system function code (listed below) */
  128. /* ioreq : IOreq structure */
  129. /*                                                                      */
  130. /* Returns:                                                             */
  131. /* FLStatus : 0 on success, otherwise failed                */
  132. /*----------------------------------------------------------------------*/
  133. typedef enum    {FL_MOUNT_VOLUME,
  134.  FL_DISMOUNT_VOLUME,
  135.  FL_CHECK_VOLUME,
  136.  FL_OPEN_FILE,
  137.  FL_CLOSE_FILE,
  138.  FL_READ_FILE,
  139.  FL_WRITE_FILE,
  140.  FL_SEEK_FILE,
  141.  FL_FIND_FILE,
  142.  FL_FIND_FIRST_FILE,
  143.  FL_FIND_NEXT_FILE,
  144.  FL_GET_DISK_INFO,
  145.  FL_DELETE_FILE,
  146.  FL_RENAME_FILE,
  147.  FL_DEFRAGMENT_VOLUME,
  148.  FL_FORMAT_VOLUME,
  149.  FL_MAKE_DIR,
  150.  FL_REMOVE_DIR,
  151.  FL_ABS_READ,
  152.  FL_ABS_WRITE,
  153.  FL_ABS_DELETE,
  154.  FL_GET_BPB,
  155.  FL_SPLIT_FILE,
  156.  FL_JOIN_FILE,
  157.  FL_GET_PHYSICAL_INFO,
  158.  FL_PHYSICAL_READ,
  159.  FL_PHYSICAL_WRITE,
  160.  FL_PHYSICAL_ERASE,
  161.  FL_DONT_MONITOR_FAT} FLFunctionNo;
  162. FLStatus flCall(FLFunctionNo functionNo, IOreq FAR2 *ioreq);
  163. /*----------------------------------------------------------------------*/
  164. /*       f l M o u n t V o l u m e */
  165. /* */
  166. /* Mounts, verifies or dismounts the Flash medium. */
  167. /* */
  168. /* In case the inserted volume has changed, or on the first access to   */
  169. /* the file system, it should be mounted before file operations can be  */
  170. /* done on it. */
  171. /* Mounting a volume has the effect of discarding all open files (the   */
  172. /* files cannot be properly closed since the original volume is gone),  */
  173. /* and turning off the media-change indication to allow file processing */
  174. /* calls. */
  175. /* */
  176. /* The volume automatically becomes unmounted if it is removed or       */
  177. /* changed. */
  178. /*                                                                      */
  179. /* Parameters:                                                          */
  180. /* irHandle : Drive number (0, 1, ...) */
  181. /*                                                                      */
  182. /* Returns:                                                             */
  183. /* FLStatus : 0 on success, otherwise failed                */
  184. /*----------------------------------------------------------------------*/
  185. #define flMountVolume(ioreq) flCall(FL_MOUNT_VOLUME,ioreq)
  186. /*----------------------------------------------------------------------*/
  187. /*    f l D i s m o u n t V o l u m e */
  188. /* */
  189. /* Dismounts the volume, closing all files. */
  190. /* This call is not normally necessary, unless it is known the volume   */
  191. /* will soon be removed. */
  192. /* */
  193. /* Parameters:                                                          */
  194. /* irHandle : Drive number (0, 1, ...) */
  195. /*                                                                      */
  196. /* Returns:                                                             */
  197. /* FLStatus : 0 on success, otherwise failed                */
  198. /*----------------------------------------------------------------------*/
  199. #define flDismountVolume(ioreq) flCall(FL_DISMOUNT_VOLUME,ioreq)
  200. /*----------------------------------------------------------------------*/
  201. /*      f l C h e c k V o l u m e */
  202. /* */
  203. /* Verifies that the current volume is mounted. */
  204. /*                                                                      */
  205. /* Parameters:                                                          */
  206. /* irHandle : Drive number (0, 1, ...) */
  207. /*                                                                      */
  208. /* Returns:                                                             */
  209. /* FLStatus : 0 on success, otherwise failed                */
  210. /*----------------------------------------------------------------------*/
  211. #define flCheckVolume(ioreq) flCall(FL_CHECK_VOLUME,ioreq)
  212. #ifdef DEFRAGMENT_VOLUME
  213. /*----------------------------------------------------------------------*/
  214. /*       f l D e f r a g m e n t V o l u m e */
  215. /* */
  216. /* Performs a general defragmentation and recycling of non-writable */
  217. /* Flash areas, to achieve optimal write speed. */
  218. /*                                                                      */
  219. /* NOTE: The required number of sectors (in irLength) may be changed    */
  220. /* (from another execution thread) while defragmentation is active. In  */
  221. /* particular, the defragmentation may be cut short after it began by */
  222. /* modifying the irLength field to 0. */
  223. /* */
  224. /* Parameters:                                                          */
  225. /* irHandle : Drive number (0, 1, ...) */
  226. /* irLength : Minimum number of sectors to make available   */
  227. /*   for writes. */
  228. /*                                                                      */
  229. /* Returns:                                                             */
  230. /* irLength : Actual number of sectors available for writes */
  231. /* FLStatus : 0 on success, otherwise failed                */
  232. /*----------------------------------------------------------------------*/
  233. #define flDefragmentVolume(ioreq) flCall(FL_DEFRAGMENT_VOLUME,ioreq)
  234. #endif /* DEFRAGMENT_VOLUME */
  235. #ifdef FORMAT_VOLUME
  236. /*----------------------------------------------------------------------*/
  237. /*       f l F o r m a t V o l u m e */
  238. /* */
  239. /* Formats a volume, writing a new and empty file-system. All existing  */
  240. /* data is destroyed. Optionally, a low-level FTL formatting is also    */
  241. /* done. */
  242. /* Formatting leaves the volume in the dismounted state, so that a */
  243. /* flMountVolume call is necessary after it. */
  244. /*                                                                      */
  245. /* Parameters:                                                          */
  246. /* irHandle : Drive number (0, 1, ...) */
  247. /* irFlags : NO_FTL_FORMAT: Do FAT formatting only */
  248. /*   FTL_FORMAT: Do FTL & FAT formatting           */
  249. /*   FTL_FORMAT_IF_NEEDED: Do FTL formatting only */
  250. /*       if current format is invalid */
  251. /* irData : Address of FormatParams structure to use */
  252. /*   (defined in dosformt.h) */
  253. /*                                                                      */
  254. /* Returns:                                                             */
  255. /* FLStatus : 0 on success, otherwise failed                */
  256. /*----------------------------------------------------------------------*/
  257. /** Values of irFlags for flFormatVolume: */
  258. #define NO_FTL_FORMAT 0 /* FAT formatting only */
  259. #define FTL_FORMAT 1 /* FAT & FTL formatting */
  260. #define FTL_FORMAT_IF_NEEDED 2 /* FAT formatting & FTL formatting if necessary */
  261. #define PROGRESS_REPORT /* Format progress is reported via callback */
  262. #define flFormatVolume(ioreq) flCall(FL_FORMAT_VOLUME,ioreq)
  263. #endif /* FORMAT_VOLUME */
  264. #if FILES > 0
  265. /*----------------------------------------------------------------------*/
  266. /*       f l O p e n F i l e */
  267. /* */
  268. /* Opens an existing file or creates a new file. Creates a file handle  */
  269. /* for further file processing. */
  270. /*                                                                      */
  271. /* Parameters:                                                          */
  272. /* irHandle : Drive number (0, 1, ...) */
  273. /* irFlags : Access and action options, defined below */
  274. /* irPath : path of file to open              */
  275. /*                                                                      */
  276. /* Returns:                                                             */
  277. /* FLStatus : 0 on success, otherwise failed                */
  278. /* irHandle : New file handle for open file                 */
  279. /*                                                                      */
  280. /*----------------------------------------------------------------------*/
  281. /** Values of irFlags for flOpenFile: */
  282. #define ACCESS_MODE_MASK 3 /* Mask for access mode bits */
  283. /* Individual flags */
  284. #define ACCESS_READ_WRITE 1 /* Allow read and write */
  285. #define ACCESS_CREATE 2 /* Create new file */
  286. /* Access mode combinations */
  287. #define OPEN_FOR_READ 0 /* open existing file for read-only */
  288. #define OPEN_FOR_UPDATE 1 /* open existing file for read/write access */
  289. #define OPEN_FOR_WRITE 3 /* create a new file, even if it exists */
  290. #define flOpenFile(ioreq) flCall(FL_OPEN_FILE,ioreq)
  291. /*----------------------------------------------------------------------*/
  292. /*       f l C l o s e F i l e */
  293. /* */
  294. /* Closes an open file, records file size and dates in directory and    */
  295. /* releases file handle. */
  296. /*                                                                      */
  297. /* Parameters:                                                          */
  298. /* irHandle : Handle of file to close.                      */
  299. /*                                                                      */
  300. /* Returns:                                                             */
  301. /* FLStatus : 0 on success, otherwise failed                */
  302. /*----------------------------------------------------------------------*/
  303. #define flCloseFile(ioreq)      flCall(FL_CLOSE_FILE,ioreq)
  304. #ifdef SPLIT_JOIN_FILE
  305. /*------------------------------------------------------------------------*/
  306. /*       f l S p l i t F i l e                               */
  307. /*                                                                        */
  308. /* Splits the file into two files. The original file contains the first   */
  309. /* part, and a new file (which is created for that purpose) contains      */
  310. /* the second part. If the current position is on a cluster               */
  311. /* boundary, the file will be split at the current position. Otherwise,   */
  312. /* the cluster of the current position is duplicated, one copy is the     */
  313. /* first cluster of the new file, and the other is the last cluster of the*/
  314. /* original file, which now ends at the current position.                 */
  315. /*                                                                        */
  316. /* Parameters:                                                            */
  317. /* file            : file to split.                                  */
  318. /*      irPath          : Path name of the new file.                      */
  319. /*                                                                        */
  320. /* Returns:                                                               */
  321. /* irHandle        : handle of the new file.                         */
  322. /* FLStatus        : 0 on success, otherwise failed.                 */
  323. /*                                                                        */
  324. /*------------------------------------------------------------------------*/
  325. #define flSplitFile(ioreq)     flCall(FL_SPLIT_FILE,ioreq)
  326. /*------------------------------------------------------------------------*/
  327. /*       f l J o i n F i l e                                 */
  328. /*                                                                        */
  329. /* joins two files. If the end of the first file is on a cluster          */
  330. /* boundary, the files will be joined there. Otherwise, the data in       */
  331. /* the second file from the beginning until the offset that is equal to   */
  332. /* the offset in cluster of the end of the first file will be lost. The   */
  333. /* rest of the second file will be joined to the first file at the end of */
  334. /* the first file. On exit, the first file is the expanded file and the   */
  335. /* second file is deleted.                                                */
  336. /* Note: The second file will be open by this function, it is advised to  */
  337. /*  close it before calling this function in order to avoid          */
  338. /*  inconsistencies.                                                 */
  339. /*                                                                        */
  340. /* Parameters:                                                            */
  341. /* file            : file to join to.                                */
  342. /* irPath          : Path name of the file to be joined.             */
  343. /*                                                                        */
  344. /* Return:                                                                */
  345. /* FLStatus        : 0 on success, otherwise failed.                 */
  346. /*                                                                        */
  347. /*------------------------------------------------------------------------*/
  348. #define flJoinFile(ioreq)     flCall(FL_JOIN_FILE,ioreq)
  349. #endif /* SPLIT_JOIN_FILE */
  350. /*----------------------------------------------------------------------*/
  351. /*       f l R e a d F i l e */
  352. /* */
  353. /* Reads from the current position in the file to the user-buffer. */
  354. /* Parameters:                                                          */
  355. /* irHandle : Handle of file to read.                       */
  356. /*      irData : Address of user buffer */
  357. /* irLength : Number of bytes to read. If the read extends  */
  358. /*   beyond the end-of-file, the read is truncated */
  359. /*   at the end-of-file. */
  360. /*                                                                      */
  361. /* Returns:                                                             */
  362. /* FLStatus : 0 on success, otherwise failed                */
  363. /* irLength : Actual number of bytes read */
  364. /*----------------------------------------------------------------------*/
  365. #define flReadFile(ioreq) flCall(FL_READ_FILE,ioreq)
  366. /*----------------------------------------------------------------------*/
  367. /*       f l W r i t e F i l e */
  368. /* */
  369. /* Writes from the current position in the file from the user-buffer.   */
  370. /*                                                                      */
  371. /* Parameters:                                                          */
  372. /* irHandle : Handle of file to write. */
  373. /*      irData : Address of user buffer */
  374. /* irLength : Number of bytes to write. */
  375. /*                                                                      */
  376. /* Returns:                                                             */
  377. /* FLStatus : 0 on success, otherwise failed                */
  378. /* irLength : Actual number of bytes written */
  379. /*----------------------------------------------------------------------*/
  380. #define flWriteFile(ioreq) flCall(FL_WRITE_FILE,ioreq)
  381. /*----------------------------------------------------------------------*/
  382. /*       f l S e e k F i l e */
  383. /* */
  384. /* Sets the current position in the file, relative to file start, end or*/
  385. /* current position. */
  386. /* Note: This function will not move the file pointer beyond the */
  387. /* beginning or end of file, so the actual file position may be */
  388. /* different from the required. The actual position is indicated on     */
  389. /* return. */
  390. /*                                                                      */
  391. /* Parameters:                                                          */
  392. /* irHandle : File handle to close.                         */
  393. /*      irLength : Offset to set position. */
  394. /* irFlags : Method code */
  395. /*   SEEK_START: absolute offset from start of file  */
  396. /*   SEEK_CURR:  signed offset from current position */
  397. /*   SEEK_END:   signed offset from end of file    */
  398. /*                                                                      */
  399. /* Returns:                                                             */
  400. /* FLStatus : 0 on success, otherwise failed                */
  401. /* irLength : Actual absolute offset from start of file */
  402. /*----------------------------------------------------------------------*/
  403. /** Values of irFlags for flSeekFile: */
  404. #define SEEK_START 0 /* offset from start of file */
  405. #define SEEK_CURR 1 /* offset from current position */
  406. #define SEEK_END 2 /* offset from end of file */
  407. #define flSeekFile(ioreq) flCall(FL_SEEK_FILE,ioreq)
  408. /*----------------------------------------------------------------------*/
  409. /*           f l F i n d F i l e */
  410. /*                                                                      */
  411. /* Finds a file entry in a directory, optionally modifying the file     */
  412. /* time/date and/or attributes.                                         */
  413. /* Files may be found by handle no. provided they are open, or by name. */
  414. /* Only the Hidden, System or Read-only attributes may be modified. */
  415. /* Entries may be found for any existing file or directory other than   */
  416. /* the root. A DirectoryEntry structure describing the file is copied   */
  417. /* to a user buffer. */
  418. /*                                                                      */
  419. /* The DirectoryEntry structure is defined in dosformt.h */
  420. /*                                                                      */
  421. /* Parameters:                                                          */
  422. /* irHandle : If by name: Drive number (0, 1, ...) */
  423. /*   else      : Handle of open file */
  424. /* irPath : If by name: Specifies a file or directory path*/
  425. /* irFlags : Options flags */
  426. /*   FIND_BY_HANDLE: Find open file by handle.  */
  427. /*   Default is access by path.    */
  428. /*                        SET_DATETIME: Update time/date from buffer */
  429. /*   SET_ATTRIBUTES: Update attributes from buffer */
  430. /* irDirEntry : Address of user buffer to receive a */
  431. /*   DirectoryEntry structure */
  432. /*                                                                      */
  433. /* Returns:                                                             */
  434. /* irLength : Modified */
  435. /* FLStatus : 0 on success, otherwise failed                */
  436. /*----------------------------------------------------------------------*/
  437. /** Bit assignment of irFlags for flFindFile: */
  438. #define SET_DATETIME 1 /* Change date/time */
  439. #define SET_ATTRIBUTES 2 /* Change attributes */
  440. #define FIND_BY_HANDLE 4 /* Find file by handle rather than by name */
  441. #define flFindFile(ioreq) flCall(FL_FIND_FILE,ioreq)
  442. /*----------------------------------------------------------------------*/
  443. /*  f l F i n d F i r s t F i l e */
  444. /*                                                                      */
  445. /* Finds the first file entry in a directory. */
  446. /* This function is used in combination with the flFindNextFile call,   */
  447. /* which returns the remaining file entries in a directory sequentially.*/
  448. /* Entries are returned according to the unsorted directory order. */
  449. /* flFindFirstFile creates a file handle, which is returned by it. Calls*/
  450. /* to flFindNextFile will provide this file handle. When flFindNextFile */
  451. /* returns 'noMoreEntries', the file handle is automatically closed.    */
  452. /* Alternatively the file handle can be closed by a 'closeFile' call    */
  453. /* before actually reaching the end of directory. */
  454. /* A DirectoryEntry structure is copied to the user buffer describing   */
  455. /* each file found. This structure is defined in dosformt.h. */
  456. /*                                                                      */
  457. /* Parameters:                                                          */
  458. /* irHandle : Drive number (0, 1, ...) */
  459. /* irPath : Specifies a directory path */
  460. /* irData : Address of user buffer to receive a */
  461. /*   DirectoryEntry structure */
  462. /*                                                                      */
  463. /* Returns:                                                             */
  464. /* irHandle : File handle to use for subsequent operations. */
  465. /* FLStatus : 0 on success, otherwise failed                */
  466. /*----------------------------------------------------------------------*/
  467. #define flFindFirstFile(ioreq) flCall(FL_FIND_FIRST_FILE,ioreq)
  468. /*----------------------------------------------------------------------*/
  469. /*  f l F i n d N e x t F i l e */
  470. /*                                                                      */
  471. /* See the description of 'flFindFirstFile'. */
  472. /*                                                                      */
  473. /* Parameters:                                                          */
  474. /* irHandle : File handle returned by flFindFirstFile. */
  475. /* irData : Address of user buffer to receive a */
  476. /*   DirectoryEntry structure */
  477. /*                                                                      */
  478. /* Returns:                                                             */
  479. /* FLStatus : 0 on success, otherwise failed                */
  480. /*----------------------------------------------------------------------*/
  481. #define flFindNextFile(ioreq) flCall(FL_FIND_NEXT_FILE,ioreq)
  482. /*----------------------------------------------------------------------*/
  483. /*       f l G e t D i s k I n f o */
  484. /* */
  485. /* Returns general allocation information. */
  486. /* */
  487. /* The bytes/sector, sector/cluster, total cluster and free cluster */
  488. /* information are returned into a DiskInfo structure. */
  489. /*                                                                      */
  490. /* Parameters:                                                          */
  491. /* irHandle : Drive number (0, 1, ...) */
  492. /* irData : Address of DiskInfo structure                 */
  493. /*                                                                      */
  494. /* Returns:                                                             */
  495. /* FLStatus : 0 on success, otherwise failed                */
  496. /*----------------------------------------------------------------------*/
  497. typedef struct {
  498.   unsigned bytesPerSector;
  499.   unsigned sectorsPerCluster;
  500.   unsigned totalClusters;
  501.   unsigned freeClusters;
  502. } DiskInfo;
  503. #define flGetDiskInfo(ioreq) flCall(FL_GET_DISK_INFO,ioreq)
  504. /*----------------------------------------------------------------------*/
  505. /*       f l D e l e t e F i l e */
  506. /* */
  507. /* Deletes a file.                                                      */
  508. /*                                                                      */
  509. /* Parameters:                                                          */
  510. /* irHandle : Drive number (0, 1, ...) */
  511. /* irPath : path of file to delete */
  512. /*                                                                      */
  513. /* Returns:                                                             */
  514. /* FLStatus : 0 on success, otherwise failed                */
  515. /*----------------------------------------------------------------------*/
  516. #define flDeleteFile(ioreq) flCall(FL_DELETE_FILE,ioreq)
  517. #ifdef RENAME_FILE
  518. /*----------------------------------------------------------------------*/
  519. /*       f l R e n a m e F i l e */
  520. /* */
  521. /* Renames a file to another name. */
  522. /* */
  523. /* Parameters:                                                          */
  524. /* irHandle : Drive number (0, 1, ...) */
  525. /* irPath : path of existing file */
  526. /*      irData : path of new name. */
  527. /*                                                                      */
  528. /* Returns:                                                             */
  529. /* FLStatus : 0 on success, otherwise failed                */
  530. /*----------------------------------------------------------------------*/
  531. #define flRenameFile(ioreq) flCall(FL_RENAME_FILE,ioreq)
  532. #endif /* RENAME_FILE */
  533. #ifdef SUB_DIRECTORY
  534. /*----------------------------------------------------------------------*/
  535. /*       f l M a k e D i r */
  536. /* */
  537. /* Creates a new directory. */
  538. /*                                                                      */
  539. /* Parameters:                                                          */
  540. /* irHandle : Drive number (0, 1, ...) */
  541. /* irPath : path of new directory. */
  542. /*                                                                      */
  543. /* Returns:                                                             */
  544. /* FLStatus : 0 on success, otherwise failed                */
  545. /*----------------------------------------------------------------------*/
  546. #define flMakeDir(ioreq) flCall(FL_MAKE_DIR,ioreq)
  547. /*----------------------------------------------------------------------*/
  548. /*       f l R e m o v e D i r */
  549. /* */
  550. /* Removes an empty directory. */
  551. /*                                                                      */
  552. /* Parameters:                                                          */
  553. /* irHandle : Drive number (0, 1, ...) */
  554. /* irPath : path of directory to remove. */
  555. /*                                                                      */
  556. /* Returns:                                                             */
  557. /* FLStatus : 0 on success, otherwise failed                */
  558. /*----------------------------------------------------------------------*/
  559. #define flRemoveDir(ioreq) flCall(FL_REMOVE_DIR,ioreq)
  560. #endif /* SUB_DIRECTORY */
  561. #endif /* FILES > 0 */
  562. #ifdef PARSE_PATH
  563. /*----------------------------------------------------------------------*/
  564. /*       f l P a r s e P a t h */
  565. /* */
  566. /* Converts a DOS-like path string to a simple-path array. */
  567. /*                                                                      */
  568. /* Parameters:                                                          */
  569. /* irHandle : Drive number (0, 1, ...) */
  570. /* irData : address of path string to convert */
  571. /* irPath : address of array to receive parsed-path */
  572. /*                                                                      */
  573. /* Returns:                                                             */
  574. /* FLStatus : 0 on success, otherwise failed                */
  575. /*----------------------------------------------------------------------*/
  576. extern FLStatus flParsePath(IOreq FAR2 *ioreq);
  577. #endif /* PARSE_PATH */
  578. #ifdef ABS_READ_WRITE
  579. /*----------------------------------------------------------------------*/
  580. /*            f l A b s R e a d  */
  581. /* */
  582. /* Reads absolute sectors by sector no. */
  583. /* */
  584. /* Parameters:                                                          */
  585. /* irHandle : Drive number (0, 1, ...) */
  586. /*      irData : Address of user buffer to read into */
  587. /* irSectorNo : First sector no. to read (sector 0 is the */
  588. /*   DOS boot sector). */
  589. /* irSectorCount : Number of consectutive sectors to read */
  590. /*                                                                      */
  591. /* Returns:                                                             */
  592. /* FLStatus : 0 on success, otherwise failed                */
  593. /* irSectorCount : Number of sectors actually read */
  594. /*----------------------------------------------------------------------*/
  595. #define flAbsRead(ioreq) flCall(FL_ABS_READ,ioreq)
  596. /*----------------------------------------------------------------------*/
  597. /*          f l A b s W r i t e  */
  598. /* */
  599. /* Writes absolute sectors by sector no. */
  600. /* */
  601. /* Parameters:                                                          */
  602. /* irHandle : Drive number (0, 1, ...) */
  603. /*      irData : Address of user buffer to write from */
  604. /* irSectorNo : First sector no. to write (sector 0 is the */
  605. /*   DOS boot sector). */
  606. /* irSectorCount : Number of consectutive sectors to write */
  607. /*                                                                      */
  608. /* Returns:                                                             */
  609. /* FLStatus : 0 on success, otherwise failed                */
  610. /* irSectorCount : Number of sectors actually written */
  611. /*----------------------------------------------------------------------*/
  612. #define flAbsWrite(ioreq) flCall(FL_ABS_WRITE,ioreq)
  613. /*----------------------------------------------------------------------*/
  614. /*          f l A b s D e l e t e  */
  615. /* */
  616. /* Marks absolute sectors by sector no. as deleted. */
  617. /* */
  618. /* Parameters:                                                          */
  619. /* irHandle : Drive number (0, 1, ...) */
  620. /* irSectorNo : First sector no. to write (sector 0 is the */
  621. /*   DOS boot sector). */
  622. /* irSectorCount : Number of consectutive sectors to delete */
  623. /*                                                                      */
  624. /* Returns:                                                             */
  625. /* FLStatus : 0 on success, otherwise failed                */
  626. /* irSectorCount : Number of sectors actually deleted */
  627. /*----------------------------------------------------------------------*/
  628. #define flAbsDelete(ioreq) flCall(FL_ABS_DELETE,ioreq)
  629. /*----------------------------------------------------------------------*/
  630. /*            f l G e t B P B  */
  631. /* */
  632. /* Reads the BIOS Parameter Block from the boot sector */
  633. /* */
  634. /* Parameters:                                                          */
  635. /* irHandle : Drive number (0, 1, ...) */
  636. /*      irData : Address of user buffer to read BPB into */
  637. /*                                                                      */
  638. /* Returns:                                                             */
  639. /* FLStatus : 0 on success, otherwise failed                */
  640. /*----------------------------------------------------------------------*/
  641. #define flGetBPB(ioreq) flCall(FL_GET_BPB,ioreq)
  642. #endif /* ABS_READ_WRITE */
  643. #ifdef LOW_LEVEL
  644. /*----------------------------------------------------------------------*/
  645. /*   P h y s i c a l I n f o */
  646. /* */
  647. /* A structure that holds physical information about the media. The  */
  648. /* information includes JEDEC ID, unit size and media size. Pointer */
  649. /* to this structure is passed to the function flGetPhysicalInfo where  */
  650. /* it receives the relevant data. */
  651. /* */
  652. /*----------------------------------------------------------------------*/
  653. typedef struct {
  654.   unsigned short type; /* Flash device type (JEDEC id) */
  655.   long int unitSize; /* Smallest physically erasable size
  656.    (with interleaving taken in account) */
  657.   long int mediaSize; /* media size */
  658. } PhysicalInfo;
  659. /*----------------------------------------------------------------------*/
  660. /*          f l G e t P h y s i c a l I n f o  */
  661. /* */
  662. /* Get physical information of the media. The information includes */
  663. /* JEDEC ID, unit size and media size. */
  664. /* */
  665. /* Parameters: */
  666. /* irHandle : Drive number (0,1,..) */
  667. /*      irData : Address of user buffer to read physical */
  668. /*   information into. */
  669. /*                                                                      */
  670. /* Returns:                                                             */
  671. /* FLStatus : 0 on success, otherwise failed                */
  672. /*----------------------------------------------------------------------*/
  673. #define flGetPhysicalInfo(ioreq) flCall(FL_GET_PHYSICAL_INFO, ioreq)
  674. /*----------------------------------------------------------------------*/
  675. /*              f l P h y s i c a l R e a d   */
  676. /* */
  677. /* Read from a physical address. */
  678. /* */
  679. /* Parameters: */
  680. /* irHandle : Drive number (0,1,..) */
  681. /* irAddress : Physical address to read from. */
  682. /* irByteCount : Number of bytes to read. */
  683. /*      irData : Address of user buffer to read into. */
  684. /*                                                                      */
  685. /* Returns:                                                             */
  686. /* FLStatus : 0 on success, otherwise failed                */
  687. /*----------------------------------------------------------------------*/
  688. #define flPhysicalRead(ioreq) flCall(FL_PHYSICAL_READ,ioreq)
  689. /*----------------------------------------------------------------------*/
  690. /*              f l P h y s i c a l W r i t e   */
  691. /* */
  692. /* Write to a physical address. */
  693. /* */
  694. /* Parameters: */
  695. /* irHandle : Drive Number (0,1,..) */
  696. /* irAddress : Physical address to write to. */
  697. /* irByteCount : Number of bytes to write. */
  698. /*      irData : Address of user buffer to write from. */
  699. /*                                                                      */
  700. /* Returns:                                                             */
  701. /* FLStatus : 0 on success, otherwise failed                */
  702. /*----------------------------------------------------------------------*/
  703. #define flPhysicalWrite(ioreq) flCall(FL_PHYSICAL_WRITE,ioreq)
  704. /*----------------------------------------------------------------------*/
  705. /*              f l P h y s i c a l E r a s e   */
  706. /* */
  707. /* Erase physical units. */
  708. /* */
  709. /* Parameters: */
  710. /*  irHandle : Drive number (0,1,..) */
  711. /* irUnitNo : First unit to erase. */
  712. /* irUnitCount : Number of units to erase. */
  713. /*                                                                      */
  714. /* Returns:                                                             */
  715. /* FLStatus : 0 on success, otherwise failed                */
  716. /*----------------------------------------------------------------------*/
  717. #define flPhysicalErase(ioreq) flCall(FL_PHYSICAL_ERASE,ioreq)
  718. #endif /* LOW_LEVEL */
  719. /*----------------------------------------------------------------------*/
  720. /*                 f l D o n t W a t c h F A T                          */
  721. /*                                                                      */
  722. /* Turns off FAT monitoring.                                            */
  723. /*                                                                      */
  724. /* Parameters:                                                          */
  725. /*      irHandle        : Drive number (0, 1, ...)                      */
  726. /*                                                                      */
  727. /* Returns:                                                             */
  728. /*      FLStatus        : 0 on success, otherwise failed                */
  729. /*----------------------------------------------------------------------*/
  730. #define flDontMonitorFAT(ioreq)    flCall(FL_DONT_MONITOR_FAT,ioreq)
  731. /*----------------------------------------------------------------------*/
  732. /*             f l I n i t */
  733. /* */
  734. /* Initializes the FLite system, sockets and timers. */
  735. /* */
  736. /* Calling this function is optional. If it is not called, */
  737. /* initialization will be done automatically on the first FLite call. */
  738. /* This function is provided for those applications who want to */
  739. /* explicitly initialize the system and get an initialization status. */
  740. /* */
  741. /* Calling flInit after initialization was done has no effect. */
  742. /* */
  743. /* Parameters:                                                          */
  744. /* None */
  745. /*                                                                      */
  746. /* Returns:                                                             */
  747. /* FLStatus : 0 on success, otherwise failed                */
  748. /*----------------------------------------------------------------------*/
  749. extern FLStatus flInit(void);
  750. #ifdef EXIT
  751. /*----------------------------------------------------------------------*/
  752. /*             f l E x i t */
  753. /* */
  754. /* If the application ever exits, flExit should be called before exit.  */
  755. /* flExit flushes all buffers, closes all open files, powers down the   */
  756. /* sockets and removes the interval timer. */
  757. /*                                                                      */
  758. /* Parameters:                                                          */
  759. /* None */
  760. /*                                                                      */
  761. /* Returns:                                                             */
  762. /* Nothing */
  763. /*----------------------------------------------------------------------*/
  764. extern void flExit(void);
  765. #endif /* EXIT */
  766. #ifdef __cplusplus
  767. }
  768. #endif
  769. #endif