Lab 1 Program C

Dependents:   Lab1C

Fork of mbed by -deleted-

Committer:
mattsims12
Date:
Tue Sep 29 03:04:58 2015 +0000
Revision:
44:1c5f591fce58
Parent:
43:aff670d0d510
Lab 1 Program C

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
screamer 43:aff670d0d510 22 /** Represents a directory stream. Objects of this type are returned
simon.ford@mbed.co.uk 8:00a04e5cd407 23 * by a FileSystemLike's opendir method. Implementations must define
simon.ford@mbed.co.uk 8:00a04e5cd407 24 * at least closedir, readdir and rewinddir.
simon.ford@mbed.co.uk 8:00a04e5cd407 25 *
simon.ford@mbed.co.uk 8:00a04e5cd407 26 * If a FileSystemLike class defines the opendir method, then the
simon.ford@mbed.co.uk 8:00a04e5cd407 27 * directories of an object of that type can be accessed by
simon.ford@mbed.co.uk 8:00a04e5cd407 28 * DIR *d = opendir("/example/directory") (or opendir("/example")
simon.ford@mbed.co.uk 8:00a04e5cd407 29 * to open the root of the filesystem), and then using readdir(d) etc.
simon.ford@mbed.co.uk 8:00a04e5cd407 30 *
simon.ford@mbed.co.uk 8:00a04e5cd407 31 * The root directory is considered to contain all FileLike and
simon.ford@mbed.co.uk 8:00a04e5cd407 32 * FileSystemLike objects, so the DIR* returned by opendir("/") will
simon.ford@mbed.co.uk 8:00a04e5cd407 33 * reflect this.
simon.ford@mbed.co.uk 8:00a04e5cd407 34 */
simon.ford@mbed.co.uk 8:00a04e5cd407 35 class DirHandle {
simon.ford@mbed.co.uk 8:00a04e5cd407 36
simon.ford@mbed.co.uk 8:00a04e5cd407 37 public:
screamer 43:aff670d0d510 38 /** Closes the directory.
simon.ford@mbed.co.uk 8:00a04e5cd407 39 *
screamer 43:aff670d0d510 40 * @returns
screamer 43:aff670d0d510 41 * 0 on success,
screamer 43:aff670d0d510 42 * -1 on error.
simon.ford@mbed.co.uk 8:00a04e5cd407 43 */
simon.ford@mbed.co.uk 8:00a04e5cd407 44 virtual int closedir()=0;
simon.ford@mbed.co.uk 8:00a04e5cd407 45
screamer 43:aff670d0d510 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 *
screamer 43:aff670d0d510 49 * @returns
screamer 43:aff670d0d510 50 * A pointer to a dirent structure representing the
screamer 43:aff670d0d510 51 * directory entry at the current position, or NULL on reaching
screamer 43:aff670d0d510 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
screamer 43:aff670d0d510 56 /** Resets the position to the beginning of the directory.
simon.ford@mbed.co.uk 8:00a04e5cd407 57 */
simon.ford@mbed.co.uk 8:00a04e5cd407 58 virtual void rewinddir()=0;
simon.ford@mbed.co.uk 8:00a04e5cd407 59
screamer 43:aff670d0d510 60 /** Returns the current position of the DirHandle.
simon.ford@mbed.co.uk 8:00a04e5cd407 61 *
screamer 43:aff670d0d510 62 * @returns
screamer 43:aff670d0d510 63 * the current position,
screamer 43:aff670d0d510 64 * -1 on error.
simon.ford@mbed.co.uk 8:00a04e5cd407 65 */
simon.ford@mbed.co.uk 8:00a04e5cd407 66 virtual off_t telldir() { return -1; }
simon.ford@mbed.co.uk 8:00a04e5cd407 67
screamer 43:aff670d0d510 68 /** Sets the position of the DirHandle.
simon.ford@mbed.co.uk 8:00a04e5cd407 69 *
screamer 43:aff670d0d510 70 * @param location The location to seek to. Must be a value returned by telldir.
simon.ford@mbed.co.uk 8:00a04e5cd407 71 */
simon.ford@mbed.co.uk 8:00a04e5cd407 72 virtual void seekdir(off_t location) { }
simon.ford@mbed.co.uk 8:00a04e5cd407 73
simon.ford@mbed.co.uk 8:00a04e5cd407 74 };
simon.ford@mbed.co.uk 8:00a04e5cd407 75
rolf.meyer@arm.com 11:1c1ebd0324fa 76 } // namespace mbed
simon.ford@mbed.co.uk 8:00a04e5cd407 77
simon.ford@mbed.co.uk 8:00a04e5cd407 78 typedef mbed::DirHandle DIR;
simon.ford@mbed.co.uk 8:00a04e5cd407 79
simon.ford@mbed.co.uk 8:00a04e5cd407 80 extern "C" {
simon.ford@mbed.co.uk 8:00a04e5cd407 81 DIR *opendir(const char*);
simon.ford@mbed.co.uk 8:00a04e5cd407 82 struct dirent *readdir(DIR *);
simon.ford@mbed.co.uk 8:00a04e5cd407 83 int closedir(DIR*);
simon.ford@mbed.co.uk 8:00a04e5cd407 84 void rewinddir(DIR*);
simon.ford@mbed.co.uk 8:00a04e5cd407 85 long telldir(DIR*);
simon.ford@mbed.co.uk 8:00a04e5cd407 86 void seekdir(DIR*, long);
simon.ford@mbed.co.uk 8:00a04e5cd407 87 int mkdir(const char *name, mode_t n);
simon.ford@mbed.co.uk 8:00a04e5cd407 88 };
simon.ford@mbed.co.uk 8:00a04e5cd407 89
simon.ford@mbed.co.uk 8:00a04e5cd407 90 #endif /* MBED_DIRHANDLE_H */