Lab 1 Program C

Dependents:   Lab1C

Fork of mbed by -deleted-

Committer:
rolf.meyer@arm.com
Date:
Fri Aug 28 12:10:11 2009 +0000
Revision:
11:1c1ebd0324fa
Parent:
8:00a04e5cd407
Child:
27:7110ebee3484
A shiny new version

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