Lab 1 Program C

Dependents:   Lab1C

Fork of mbed by -deleted-

Committer:
simon.ford@mbed.co.uk
Date:
Tue Feb 03 18:02:02 2009 +0000
Revision:
8:00a04e5cd407
Child:
11:1c1ebd0324fa
* Update to improve filesystem support
* Add a generic FATFileSystem

Who changed what in which revision?

UserRevisionLine numberNew contents of line
simon.ford@mbed.co.uk 8:00a04e5cd407 1 /* Copyright 2008 ARM Limited. All rights reserved. */
simon.ford@mbed.co.uk 8:00a04e5cd407 2
simon.ford@mbed.co.uk 8:00a04e5cd407 3 #ifndef MBED_DIRHANDLE_H
simon.ford@mbed.co.uk 8:00a04e5cd407 4 #define MBED_DIRHANDLE_H
simon.ford@mbed.co.uk 8:00a04e5cd407 5
simon.ford@mbed.co.uk 8:00a04e5cd407 6 #ifdef __ARMCC_VERSION
simon.ford@mbed.co.uk 8:00a04e5cd407 7 # define NAME_MAX 255
simon.ford@mbed.co.uk 8:00a04e5cd407 8 typedef int mode_t;
simon.ford@mbed.co.uk 8:00a04e5cd407 9 #else
simon.ford@mbed.co.uk 8:00a04e5cd407 10 # include <sys/syslimits.h>
simon.ford@mbed.co.uk 8:00a04e5cd407 11 #endif
simon.ford@mbed.co.uk 8:00a04e5cd407 12 #include "FileHandle.h"
simon.ford@mbed.co.uk 8:00a04e5cd407 13
simon.ford@mbed.co.uk 8:00a04e5cd407 14 struct dirent {
simon.ford@mbed.co.uk 8:00a04e5cd407 15 char d_name[NAME_MAX+1];
simon.ford@mbed.co.uk 8:00a04e5cd407 16 };
simon.ford@mbed.co.uk 8:00a04e5cd407 17
simon.ford@mbed.co.uk 8:00a04e5cd407 18 namespace mbed {
simon.ford@mbed.co.uk 8:00a04e5cd407 19
simon.ford@mbed.co.uk 8:00a04e5cd407 20 /* Class DirHandle
simon.ford@mbed.co.uk 8:00a04e5cd407 21 * Represents a directory stream. Objects of this type are returned
simon.ford@mbed.co.uk 8:00a04e5cd407 22 * by a FileSystemLike's opendir method. Implementations must define
simon.ford@mbed.co.uk 8:00a04e5cd407 23 * at least closedir, readdir and rewinddir.
simon.ford@mbed.co.uk 8:00a04e5cd407 24 *
simon.ford@mbed.co.uk 8:00a04e5cd407 25 * If a FileSystemLike class defines the opendir method, then the
simon.ford@mbed.co.uk 8:00a04e5cd407 26 * directories of an object of that type can be accessed by
simon.ford@mbed.co.uk 8:00a04e5cd407 27 * DIR *d = opendir("/example/directory") (or opendir("/example")
simon.ford@mbed.co.uk 8:00a04e5cd407 28 * to open the root of the filesystem), and then using readdir(d) etc.
simon.ford@mbed.co.uk 8:00a04e5cd407 29 *
simon.ford@mbed.co.uk 8:00a04e5cd407 30 * The root directory is considered to contain all FileLike and
simon.ford@mbed.co.uk 8:00a04e5cd407 31 * FileSystemLike objects, so the DIR* returned by opendir("/") will
simon.ford@mbed.co.uk 8:00a04e5cd407 32 * reflect this.
simon.ford@mbed.co.uk 8:00a04e5cd407 33 */
simon.ford@mbed.co.uk 8:00a04e5cd407 34 class DirHandle {
simon.ford@mbed.co.uk 8:00a04e5cd407 35
simon.ford@mbed.co.uk 8:00a04e5cd407 36 public:
simon.ford@mbed.co.uk 8:00a04e5cd407 37 /* Function closedir
simon.ford@mbed.co.uk 8:00a04e5cd407 38 * Closes the directory.
simon.ford@mbed.co.uk 8:00a04e5cd407 39 *
simon.ford@mbed.co.uk 8:00a04e5cd407 40 * Variables
simon.ford@mbed.co.uk 8:00a04e5cd407 41 * returns - 0 on success, or -1 on error.
simon.ford@mbed.co.uk 8:00a04e5cd407 42 */
simon.ford@mbed.co.uk 8:00a04e5cd407 43 virtual int closedir()=0;
simon.ford@mbed.co.uk 8:00a04e5cd407 44
simon.ford@mbed.co.uk 8:00a04e5cd407 45 /* Function readdir
simon.ford@mbed.co.uk 8:00a04e5cd407 46 * Return the directory entry at the current position, and
simon.ford@mbed.co.uk 8:00a04e5cd407 47 * advances the position to the next entry.
simon.ford@mbed.co.uk 8:00a04e5cd407 48 *
simon.ford@mbed.co.uk 8:00a04e5cd407 49 * Variables
simon.ford@mbed.co.uk 8:00a04e5cd407 50 * returns - A pointer to a dirent structure representing the
simon.ford@mbed.co.uk 8:00a04e5cd407 51 * directory entry at the current position, or NULL on reaching
simon.ford@mbed.co.uk 8:00a04e5cd407 52 * end of directory or error.
simon.ford@mbed.co.uk 8:00a04e5cd407 53 */
simon.ford@mbed.co.uk 8:00a04e5cd407 54 virtual struct dirent *readdir()=0;
simon.ford@mbed.co.uk 8:00a04e5cd407 55
simon.ford@mbed.co.uk 8:00a04e5cd407 56 /* Function rewinddir
simon.ford@mbed.co.uk 8:00a04e5cd407 57 * Resets the position to the beginning of the directory.
simon.ford@mbed.co.uk 8:00a04e5cd407 58 */
simon.ford@mbed.co.uk 8:00a04e5cd407 59 virtual void rewinddir()=0;
simon.ford@mbed.co.uk 8:00a04e5cd407 60
simon.ford@mbed.co.uk 8:00a04e5cd407 61 /* Function telldir
simon.ford@mbed.co.uk 8:00a04e5cd407 62 * Returns the current position of the DirHandle.
simon.ford@mbed.co.uk 8:00a04e5cd407 63 *
simon.ford@mbed.co.uk 8:00a04e5cd407 64 * Variables
simon.ford@mbed.co.uk 8:00a04e5cd407 65 * returns - The current position, or -1 on error.
simon.ford@mbed.co.uk 8:00a04e5cd407 66 */
simon.ford@mbed.co.uk 8:00a04e5cd407 67 virtual off_t telldir() { return -1; }
simon.ford@mbed.co.uk 8:00a04e5cd407 68
simon.ford@mbed.co.uk 8:00a04e5cd407 69 /* Function seekdir
simon.ford@mbed.co.uk 8:00a04e5cd407 70 * Sets the position of the DirHandle.
simon.ford@mbed.co.uk 8:00a04e5cd407 71 *
simon.ford@mbed.co.uk 8:00a04e5cd407 72 * Variables
simon.ford@mbed.co.uk 8:00a04e5cd407 73 * location - The location to seek to. Must be a value returned
simon.ford@mbed.co.uk 8:00a04e5cd407 74 * by telldir.
simon.ford@mbed.co.uk 8:00a04e5cd407 75 */
simon.ford@mbed.co.uk 8:00a04e5cd407 76 virtual void seekdir(off_t location) { }
simon.ford@mbed.co.uk 8:00a04e5cd407 77
simon.ford@mbed.co.uk 8:00a04e5cd407 78 };
simon.ford@mbed.co.uk 8:00a04e5cd407 79
simon.ford@mbed.co.uk 8:00a04e5cd407 80 } /* namespace mbed */
simon.ford@mbed.co.uk 8:00a04e5cd407 81
simon.ford@mbed.co.uk 8:00a04e5cd407 82 typedef mbed::DirHandle DIR;
simon.ford@mbed.co.uk 8:00a04e5cd407 83
simon.ford@mbed.co.uk 8:00a04e5cd407 84 extern "C" {
simon.ford@mbed.co.uk 8:00a04e5cd407 85 DIR *opendir(const char*);
simon.ford@mbed.co.uk 8:00a04e5cd407 86 struct dirent *readdir(DIR *);
simon.ford@mbed.co.uk 8:00a04e5cd407 87 int closedir(DIR*);
simon.ford@mbed.co.uk 8:00a04e5cd407 88 void rewinddir(DIR*);
simon.ford@mbed.co.uk 8:00a04e5cd407 89 long telldir(DIR*);
simon.ford@mbed.co.uk 8:00a04e5cd407 90 void seekdir(DIR*, long);
simon.ford@mbed.co.uk 8:00a04e5cd407 91 int mkdir(const char *name, mode_t n);
simon.ford@mbed.co.uk 8:00a04e5cd407 92 };
simon.ford@mbed.co.uk 8:00a04e5cd407 93
simon.ford@mbed.co.uk 8:00a04e5cd407 94 #endif /* MBED_DIRHANDLE_H */