Lab 1 Program C

Dependents:   Lab1C

Fork of mbed by -deleted-

Committer:
emilmont
Date:
Tue Nov 29 14:59:27 2011 +0000
Revision:
27:7110ebee3484
Parent:
11:1c1ebd0324fa
Child:
43:aff670d0d510
New Libraries 11.11

Who changed what in which revision?

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