summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrucewattendorf <brucewattendorf@cb376a5e-1013-0410-a455-b6b1f9ac8223>2009-01-20 14:59:33 +0000
committerbrucewattendorf <brucewattendorf@cb376a5e-1013-0410-a455-b6b1f9ac8223>2009-01-20 14:59:33 +0000
commit098c871b8ddfaf630fd27eaeb9fa9132052f303a (patch)
treea0551cff2a2d0183ce2989388b8838fc02562754
parent9992226bd688b4617fa367d1619335a8ecc3d753 (diff)
downloadreprap-backup-098c871b8ddfaf630fd27eaeb9fa9132052f303a.tar.gz
reprap-backup-098c871b8ddfaf630fd27eaeb9fa9132052f303a.zip
added folder and library to test SD card on sanguino motherboard library is from fat16lib.googlecode.com
git-svn-id: https://reprap.svn.sourceforge.net/svnroot/reprap@2415 cb376a5e-1013-0410-a455-b6b1f9ac8223
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16.pdfbin0 -> 147263 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/BlockDevice.h49
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/Fat16.cpp603
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/Fat16.h201
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/Fat16Config.h62
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/Fat16mainpage.h183
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/Fat16structs.h352
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/SdCard.cpp204
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/SdCard.h43
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/SdInfo.h117
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/clean.bat1
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/GPSLogger_mem/GPSLogger_mem.pde304
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/GPStest/GPStest.pde303
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/clean.bat2
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16info/applet/fat16info.cpp227
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16info/fat16info.pde207
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/applet/fat16print.cpp74
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/applet/fat16print.elfbin0 -> 72860 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/applet/fat16print.hex587
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/applet/fat16print.pde57
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/applet/fat16print.rom588
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/fat16print.pde57
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/applet/fat16read.cpp70
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/applet/fat16read.elfbin0 -> 64586 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/applet/fat16read.hex527
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/applet/fat16read.pde53
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/applet/fat16read.rom528
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/fat16read.pde53
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16tail/fat16tail.pde77
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/applet/fat16write.cpp107
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/applet/fat16write.elfbin0 -> 66087 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/applet/fat16write.hex552
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/applet/fat16write.pde90
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/applet/fat16write.rom553
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/fat16write.pde90
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/spiBus.cpp60
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/Fat16/spiBus.h33
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/_fat16_config_8h.html182
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/_fat16structs_8h.html574
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/annotated.html42
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/class_block_device-members.html33
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/class_block_device.html134
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/class_block_device__inherit__graph.pngbin0 -> 1200 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/class_fat16-members.html69
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/class_fat16.html622
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/class_fat16__coll__graph.pngbin0 -> 10602 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/class_fat16__inherit__graph.pngbin0 -> 1011 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/class_print-members.html49
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/class_print.html573
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/class_print__inherit__graph.pngbin0 -> 1009 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/class_sd_card-members.html35
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/class_sd_card.html190
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/class_sd_card__coll__graph.pngbin0 -> 1212 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/class_sd_card__inherit__graph.pngbin0 -> 1212 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/doxygen.css473
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/doxygen.pngbin0 -> 1281 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/files.html33
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/functions.html267
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/functions_func.html118
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/functions_type.html44
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/functions_vars.html215
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/globals.html140
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/globals_defs.html127
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/globals_type.html50
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/graph_legend.html85
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/graph_legend.pngbin0 -> 13783 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/hierarchy.html48
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/index.html80
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__0.pngbin0 -> 479 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__1.pngbin0 -> 1002 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__2.pngbin0 -> 372 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__3.pngbin0 -> 443 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__4.pngbin0 -> 505 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__5.pngbin0 -> 503 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__6.pngbin0 -> 447 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__7.pngbin0 -> 876 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/inherits.html58
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/structbios_pram_block-members.html43
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/structbios_pram_block.html251
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/structdirectory_entry-members.html43
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/structdirectory_entry.html252
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/structfat16_boot_sector-members.html43
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/structfat16_boot_sector.html256
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/structfat16_boot_sector__coll__graph.pngbin0 -> 1463 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/structmaster_boot_record-members.html37
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/structmaster_boot_record.html156
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/structmaster_boot_record__coll__graph.pngbin0 -> 1447 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/structpartition_table-members.html43
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/structpartition_table.html251
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/tab_b.gifbin0 -> 35 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/tab_l.gifbin0 -> 706 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/tab_r.gifbin0 -> 2585 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/tabs.css102
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/unioncache__t-members.html36
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/unioncache__t.html137
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/html/unioncache__t__coll__graph.pngbin0 -> 6260 bytes
-rw-r--r--trunk/users/bruce/SD card test/Fat16Lib/readme.txt42
97 files changed, 12947 insertions, 0 deletions
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16.pdf b/trunk/users/bruce/SD card test/Fat16Lib/Fat16.pdf
new file mode 100644
index 00000000..126d88a8
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16.pdf
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/BlockDevice.h b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/BlockDevice.h
new file mode 100644
index 00000000..77e46759
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/BlockDevice.h
@@ -0,0 +1,49 @@
+/* Arduino FAT16 Library
+ * Copyright (C) 2008 by William Greiman
+ *
+ * This file is part of the Arduino FAT16 Library
+ *
+ * This Library is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This Library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with the Arduino Fat16 Library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+#ifndef BlockDevice_h
+#define BlockDevice_h
+#include <stdint.h>
+/**
+ * \class BlockDevice
+ *
+ * \brief BlockDevice is the base class for devices supported by Fat16.
+ */
+class BlockDevice {
+public:
+/**
+ * Read a 512 byte block from a storage device.
+ *
+ * \param[in] blockNumber Logical block to be read.
+ * \param[out] dst Pointer to the location that will receive the data.
+ * \return The value one, true, is returned for success and
+ * the value zero, false, is returned for failure.
+ */
+ virtual uint8_t readBlock(uint32_t blockNumber, uint8_t *dst);
+/**
+ * Write a 512 byte block to a storage device.
+ *
+ * \param[in] blockNumber Logical block to be written.
+ * \param[in] src Pointer to the location of the data to be written.
+ * \return The value one, true, is returned for success and
+ * the value zero, false, is returned for failure.
+ */
+ virtual uint8_t writeBlock(uint32_t blockNumber, uint8_t *src);
+};
+#endif //BlockDevice_h
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/Fat16.cpp b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/Fat16.cpp
new file mode 100644
index 00000000..6de4a7cf
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/Fat16.cpp
@@ -0,0 +1,603 @@
+/* Arduino FAT16 Library
+ * Copyright (C) 2008 by William Greiman
+ *
+ * This file is part of the Arduino FAT16 Library
+ *
+ * This Library is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This Library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with the Arduino Fat16 Library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+#include <avr/pgmspace.h>
+#include "Fat16Config.h"
+#include "Fat16.h"
+
+static uint8_t make83Name(char *str, uint8_t *name);
+
+// block device driver
+BlockDevice *Fat16::rawDev_ = 0; //class for block read and write
+// volume info
+uint8_t Fat16::volumeInitialized_ = 0; //true if FAT16 volume is valid
+uint8_t Fat16::fatCount_; //number of file allocation tables
+uint8_t Fat16::blocksPerCluster_; //must be power of 2
+uint16_t Fat16::rootDirEntryCount_; //should be 512 for FAT16
+uint16_t Fat16::blocksPerFat_; //number of blocks in one FAT
+uint16_t Fat16::clusterCount_; //total clusters in volume
+uint32_t Fat16::fatStartBlock_; //start of first FAT
+uint32_t Fat16::rootDirStartBlock_; //start of root dir
+uint32_t Fat16::dataStartBlock_; //start of data clusters
+
+//raw block cache
+uint32_t Fat16::cacheBlockNumber_ = 0XFFFFFFFF; //init to invalid block number
+cache_t Fat16::cacheBuffer_; //512 byte cache for BlockDevice
+uint8_t Fat16::cacheDirty_ = 0; //cacheFlush() will write block if true
+// form 8.3 name for directory entry
+uint8_t make83Name(char *str, uint8_t *name)
+{
+ uint8_t c;
+ uint8_t n = 7;
+ uint8_t i = 0;
+ //blank fill name and extension
+ while (i < 11)name[i++] = ' ';
+ i = 0;
+ while ((c = *str++) != '\0') {
+ if (c == '.') {
+ if (n == 10) return 0;// only one dot allowed
+ n = 10;
+ i = 8;
+ }
+ else {
+#if FAT16_SAVE_RAM
+ // using PSTR gives incorrect warning in C++ files for Arduino V12
+ // illegal FAT16 characters
+ char b, *p = (char *)PSTR("|<>^+=?/[];,*\"\\");
+ while ((b = pgm_read_byte(p++))) if (b == c) return 0;
+#else //FAT16_SAVE_RAM
+ // illegal FAT16 characters
+ const char *p = "|<>^+=?/[];,*\"\\";
+ while (*p) if (*p++ == c) return 0;
+#endif //FAT16_SAVE_RAM
+ // check length and only allow ASCII printable characters
+ if (i > n || c < 0X21 || c > 0X7E)return 0;
+ //only upper case allowed in 8.3 names - convert lower to upper
+ name[i++] = c < 'a' || c > 'z' ? c : c + ('A' - 'a');
+ }
+ }
+ //must have a file name, extension optional
+ if (name[0] == ' ') return 0;
+ return 1;
+}
+
+#if FAT16_WRITE_SUPPORT
+uint8_t Fat16::addCluster(void)
+{
+ fat_t *f;
+ //start search after last cluster of file or at cluster two in FAT
+ fat_t freeCluster = writeCluster_ != 0 ? writeCluster_ : 1;
+ for (uint16_t i = 0; ; i++) {
+ // return no free clusters
+ if (i >= clusterCount_) return 0;
+ // Fat has clusterCount + 2 entries
+ if (freeCluster > clusterCount_) freeCluster = 1;
+ freeCluster++;
+ if (!(f = cacheFatEntry(freeCluster))) return 0;
+ if (*f == 0) break;
+ }
+ if (writeCluster_ == 0) {
+ // first cluster of file so link to directory entry
+ dir_t *d = cacheDirEntry(dirEntryIndex_, CACHE_FOR_WRITE);
+ if (!d) return 0;
+ d->firstClusterLow = freeCluster;
+ firstCluster_ = freeCluster;
+ }
+ //link freeCluster to chain and mark it as allocated in each FAT
+ for (uint8_t i = 0; i < fatCount_; i++) {
+ if (writeCluster_ != 0) {
+ // link cluster to chain
+ if (!(f = cacheFatEntry(writeCluster_, CACHE_FOR_WRITE, i))) return 0;
+ *f = freeCluster;
+ }
+ // mark cluster allocated
+ if (!(f = cacheFatEntry(freeCluster, CACHE_FOR_WRITE, i))) return 0;
+ *f = FAT_EOC;
+ }
+ writeCluster_ = freeCluster;
+ return 1;
+}
+#endif //FAT16_WRITE_SUPPORT
+uint8_t Fat16::cacheDataBlock(fat_t cluster, uint8_t blockOfCluster, uint8_t action)
+{
+ uint32_t lba = dataStartBlock_ + (cluster - 2)*blocksPerCluster_ + blockOfCluster;
+ return cacheRawBlock(lba, action);
+}
+
+dir_t *Fat16::cacheDirEntry(uint16_t index, uint8_t action)
+{
+ if (index >= rootDirEntryCount_) return 0;
+ if (!cacheRawBlock(rootDirStartBlock_ + (index >> 4), action)) return 0;
+ return &cacheBuffer_.dir[index & 0XF];
+}
+
+fat_t *Fat16::cacheFatEntry(fat_t cluster, uint8_t action, uint8_t table)
+{
+ if (cluster > (clusterCount_ + 1)) return 0;
+ uint32_t lba = fatStartBlock_ + (cluster >> 8) + table*blocksPerFat_ ;
+ if (!cacheRawBlock(lba, action)) return 0;
+ return &cacheBuffer_.fat[cluster & 0XFF];
+}
+uint8_t Fat16::cacheFlush(void)
+{
+ if (cacheDirty_) {
+#if FAT16_WRITE_SUPPORT
+ if (!rawDev_->writeBlock(cacheBlockNumber_, cacheBuffer_.data)) return 0;
+ cacheDirty_ = 0;
+#else //FAT16_WRITE_SUPPORT
+ //error if dirty with no write support
+ return 0;
+#endif //FAT16_WRITE_SUPPORT
+ }
+ return 1;
+}
+
+uint8_t Fat16::cacheRawBlock(uint32_t blockNumber, uint8_t action)
+{
+ if (action == CACHE_ZERO_BLOCK) {
+ if (!cacheFlush()) return 0;
+ for (uint16_t i = 0; i < sizeof(cacheBuffer_); i++) {
+ cacheBuffer_.data[i] = 0;
+ }
+ cacheBlockNumber_ = blockNumber;
+ }
+ else if (cacheBlockNumber_ != blockNumber) {
+ if (!cacheFlush()) return 0;
+ if (!rawDev_->readBlock(blockNumber, cacheBuffer_.data)) return 0;
+ cacheBlockNumber_ = blockNumber;
+ }
+ cacheDirty_ |= action;
+ return 1;
+}
+/**
+ * Closes a file and forces cached data and directory information
+ * to be written to the storage device.
+ *
+ * \return The value one, true, is returned for success and
+ * the value zero, false, is returned for failure.
+ * Reasons for failure include no file is open or an I/O error.
+ */
+uint8_t Fat16::close(void)
+{
+#if FAT16_WRITE_SUPPORT
+ if (!sync())return 0;
+#else //FAT16_WRITE_SUPPORT
+ if (!isOpen()) return 0;
+#endif //FAT16_WRITE_SUPPORT
+ attributes_ = 0;
+ return 1;
+}
+#if FAT16_WRITE_SUPPORT
+/**
+ * Create and open a new file.
+ *
+ * \note This function only creates files in the root directory and
+ * only supports short DOS 8.3 names. See open() for more information.
+ *
+ * \param[in] fileName a valid DOS 8.3 file name.
+ *
+ * \return The value one, true, is returned for success and
+ * the value zero, false, is returned for failure.
+ * Reasons for failure include \a fileName contains
+ * an invalid DOS 8.3 file name, the FAT volume has not been initialized,
+ * a file is already open, the file already exists, the root
+ * directory is full or an I/O error.
+ *
+ */
+uint8_t Fat16::create(char *fileName)
+{
+ uint8_t name[11];
+ uint16_t index = 0;
+ if (isOpen())return 0;
+ //error if bad file name
+ if (!make83Name(fileName, name)) return 0;
+ //error if name exists
+ if (findDirEntry(index, name)) return 0;
+ index = 0;
+ //find unused directory entry
+ uint8_t *p = (uint8_t *)findDirEntry(index, 0);
+ //error if directory full
+ if(!p) return 0;
+ //insure created directory entry will be written to storage device
+ cacheSetDirty();
+ //initialize as empty file
+ for (uint8_t i = 0; i < sizeof(dir_t); i++) {
+ p[i] = i < sizeof(name) ? name[i] : 0;
+ }
+ // open entry
+ return open(index);
+}
+#endif //FAT16_WRITE_SUPPORT
+//
+dir_t *Fat16::findDirEntry(uint16_t &entry, uint8_t *name, uint8_t skip)
+{
+ if(!volumeInitialized_) return 0;
+ uint16_t index = entry;
+ dir_t *d;
+ for(; ; index++) {
+ if (index >= rootDirEntryCount_) return 0;
+ if(!(d = cacheDirEntry(index))) return 0;
+ if (name == 0) {
+ // done if unused entry
+ if (d->name[0] == DIR_NAME_FREE || d->name[0] == DIR_NAME_DELETED) break;
+ }
+ else {
+ // done if beyond last used entry
+ if (d->name[0] == DIR_NAME_FREE) return 0;
+ // skip deleted entry
+ if (d->name[0] == DIR_NAME_DELETED) continue;
+ // skip long names
+ if ((d->attributes & DIR_ATT_LONG_NAME_MASK) == DIR_ATT_LONG_NAME) continue;
+ // skip if attribute match
+ if (d->attributes & skip) continue;
+ // done if no name
+ if (name[0] == '\0') break;
+ //check for match of name and extension
+ uint8_t i;
+ for (i = 10; d->name[i] == name[i] && i > 0; i--);
+ if(i == 0)break;
+ }
+ }
+ entry = index;
+ return d;
+}
+/**
+ * Initialize a FAT16 volume.
+ *
+ * \param[in] dev The BlockDevice where the volume is located.
+ *
+ * \param[in] part The partition to be used. Legal values for \a part are
+ * 1-4 to use the corresponding partition on a device formatted with
+ * a MBR, Master Boot Record, or zero if the device is formatted as
+ * a super floppy with the FAT boot sector in block zero.
+ *
+ * \return The value one, true, is returned for success and
+ * the value zero, false, is returned for failure. reasons for
+ * failure include not finding a valid FAT16 file system in the
+ * specified partition, a call to init() after a volume has
+ * been successful initialized or an I/O error.
+ *
+ */
+uint8_t Fat16::init(BlockDevice &dev, uint8_t part)
+{
+ //error if volume already open or invalid partition
+ if (volumeInitialized_ || part > 4) return 0;
+ rawDev_ = &dev;
+ uint32_t volumeStartBlock = 0;
+ // if part == 0 assume super floppy with FAT16 boot sector in block zero
+ // if part > 0 assume mbr volume with partition table
+ if (part) {
+ if (!cacheRawBlock(volumeStartBlock)) return 0;
+ volumeStartBlock = cacheBuffer_.mbr.part[part - 1].firstSector;
+ }
+ if (!cacheRawBlock(volumeStartBlock)) return 0;
+ //check boot block signature
+ if (cacheBuffer_.data[510] != BOOTSIG0 ||
+ cacheBuffer_.data[511] != BOOTSIG1) return 0;
+ bpb_t *bpb = &cacheBuffer_.fbs.bpb;
+ fatCount_ = bpb->fatCount;
+ blocksPerCluster_ = bpb->sectorsPerCluster;
+ blocksPerFat_ = bpb->sectorsPerFat16;
+ rootDirEntryCount_ = bpb->rootDirEntryCount;
+ fatStartBlock_ = volumeStartBlock + bpb->reservedSectorCount;
+ rootDirStartBlock_ = fatStartBlock_ + bpb->fatCount*bpb->sectorsPerFat16;
+ dataStartBlock_ = rootDirStartBlock_ + ((32*bpb->rootDirEntryCount + 511)/512);
+ uint32_t totalBlocks = bpb->totalSectors16 ?
+ bpb->totalSectors16 : bpb->totalSectors32;
+ clusterCount_ = (totalBlocks - (dataStartBlock_ - volumeStartBlock))
+ /bpb->sectorsPerCluster;
+ //verify valid FAT16 volume
+ if (bpb->bytesPerSector != 512 //only allow 512 byte blocks
+ || bpb->sectorsPerFat16 == 0 //zero for FAT32
+ || clusterCount_ < 4085 //FAT12 if true
+ || totalBlocks > 0X800000 //Max size for FAT16 volume
+ || bpb->reservedSectorCount == 0 //invalid volume
+ || bpb->fatCount == 0 //invalid volume
+ || bpb->sectorsPerFat16 < (clusterCount_ >> 8) //invalid volume
+ || bpb->sectorsPerCluster == 0 //invalid volume
+ || bpb->sectorsPerCluster & (bpb->sectorsPerCluster - 1)) {//power of 2 test
+ //not a usable FAT16 bpb
+ return 0;
+ }
+ volumeInitialized_ = 1;
+ return 1;
+}
+/**
+ * Open a file for read and write by file name. Two file positions are
+ * maintained. The write position is at the end of the file. Data is
+ * appended to the file. The read position starts at the beginning of the file.
+ *
+ *\note The file must be in the root directory and must have a DOS
+ * 8.3 name.
+ *
+ * \param[in] fileName A valid 8.3 DOS name for a file in the root directory.
+ *
+ * \return The value one, true, is returned for success and
+ * the value zero, false, is returned for failure.
+ * Reasons for failure include the FAT volume has not been initialized,
+ * a file is already open, \a fileName is invalid, the file does not
+ * exist or it is a directory.
+ */
+uint8_t Fat16::open(char *fileName)
+{
+ uint8_t name[11];
+ // error if invalid name
+ if (!make83Name(fileName, name)) return 0;
+ // start search at start of root directory
+ uint16_t index = 0;
+ // error if name not found
+ if(!findDirEntry(index, name)) return 0;
+ // open found entry
+ return open(index);
+}
+/**
+ * Open a file for read and write by file index. Two file positions are
+ * maintained. The write position is at the end of the file. Data is
+ * appended to the file. The read position starts at the beginning of the file.
+ *
+ * \param[in] index The root directory index of the file to be opened. See \link
+ * Fat16::readDir() readDir()\endlink.
+ *
+ * \return The value one, true, is returned for success and
+ * the value zero, false, is returned for failure.
+ * Reasons for failure include the FAT volume has not been initialized,
+ * a file is already open, \a index is invalid or is not the index of a
+ * file.
+ */
+uint8_t Fat16::open(uint16_t index)
+{
+ if (isOpen() || !volumeInitialized_ )return 0;
+ dir_t *d = cacheDirEntry(index);
+ // if bad file index or I/O error
+ if (!d) return 0;
+ // error if unused entry
+ if (d->name[0] == DIR_NAME_FREE || d->name[0] == DIR_NAME_DELETED) return 0;
+ //error if long name, volume label or subdirectory
+ if ((d->attributes & (DIR_ATT_VOLUME_ID | DIR_ATT_DIRECTORY)) != 0) return 0;
+ attributes_ = d->attributes & ATTR_DIR_MASK;
+ firstCluster_ = d->firstClusterLow;
+ fileSize_ = d->fileSize;
+#if FAT16_READ_SUPPORT
+ readCluster_ = 0;
+ readPosition_ = 0;
+#endif //FAT16_READ_SUPPORT
+#if FAT16_WRITE_SUPPORT
+ if (fileSize_ == 0) {
+ writeCluster_ = 0;
+ }
+ else {
+ // find cluster for end of file
+ writeCluster_ = firstCluster_;
+ //assumes 512 byte blocks
+ uint16_t n = fileSize_/(blocksPerCluster_ << 9);
+ while (n-- > 0) {
+ writeCluster_ = nextCluster(writeCluster_);
+ // return error if bad cluster chain
+ if (writeCluster_ < 2 || isEOC(writeCluster_)) return 0;
+ }
+ }
+ #endif //FAT16_WRITE_SUPPORT
+ // set file open
+ attributes_ |= ATTR_IS_OPEN;
+ dirEntryIndex_ = index;
+ #if FAT16_WRITE_SUPPORT
+ return sync();
+ #else //FAT16_WRITE_SUPPORT
+ return 1;
+ #endif //FAT16_WRITE_SUPPORT
+}
+//get next cluster in chain
+fat_t Fat16::nextCluster(fat_t cluster)
+{
+ fat_t *f;
+ if (!(f = cacheFatEntry(cluster))) return 0;
+ return *f;
+}
+#if FAT16_READ_SUPPORT
+/**
+ * Read the next byte from a file.
+ *
+ * \return For success read returns the next byte in the file as an int.
+ * If an error occurs or end of file is reached -1 is returned.
+ */
+int16_t Fat16::read(void)
+{
+ uint8_t b;
+ return read(&b, 1) == 1 ? b : -1;
+}
+/**
+ * Read data from a file at starting at the current read position.
+ *
+ * \param[out] dst Pointer to the location that will receive the data.
+ *
+ * \param[in] count Maximum number of bytes to read.
+ *
+ * \return For success read returns the number of bytes read.
+ * A value less than \a count, including zero, may be returned
+ * if end of file is reached.
+ * If an error occurs, read returns -1. Possible errors include
+ * read called before a file has been opened, corrupt file system
+ * or I/O error.
+ */
+int16_t Fat16::read(uint8_t *dst, uint16_t count)
+{
+ if (!isOpen()) return -1;
+ // don't read beyond end of file
+ if (readPosition_ + count > fileSize_) count = fileSize_ - readPosition_;
+ uint16_t nToRead = count;
+ while (nToRead > 0) {
+ uint8_t blkOfCluster = blockOfCluster(readPosition_);
+ uint16_t blockOffset = cacheDataOffset(readPosition_);
+ if (blkOfCluster == 0 && blockOffset == 0) {
+ // start next cluster
+ readCluster_ = readCluster_ ? nextCluster(readCluster_) : firstCluster_;
+ // return error if bad cluster chain
+ if (readCluster_ < 2 || isEOC(readCluster_)) return -1;
+ }
+ if (!cacheDataBlock(readCluster_, blkOfCluster)) return -1;
+ // max number of byte available in block
+ uint16_t n = 512 - blockOffset;
+ //lesser of available and amount to read
+ if(n > nToRead) n = nToRead;
+ uint8_t *src = cacheBuffer_.data + blockOffset;
+ uint8_t *end = src + n;
+ while (src != end) *dst++ = *src++;
+ nToRead -= n;
+ readPosition_ += n;
+ }
+ return count;
+}
+#endif //FAT16_READ_SUPPORT
+#if FAT16_SEEK_SUPPORT & FAT16_READ_SUPPORT
+/**
+ * Sets the file's read position.
+ *
+ * \param[in] pos The new read position in bytes from the beginning of the file.
+ *
+ * \return The value one, true, is returned for success and
+ * the value zero, false, is returned for failure.
+ */
+
+uint8_t Fat16::seek(uint32_t pos)
+{
+ // error if file not open or seek past end of file
+ if (!isOpen() || pos > fileSize_) return 0;
+ if (pos == 0) {
+ //set position to start of file
+ readCluster_ = 0;
+ }
+ else {
+ // find cluster for new read position
+ fat_t tmpCluster = firstCluster_;
+ uint16_t n = pos/(blocksPerCluster_ << 9);
+ while (n-- > 0) {
+ tmpCluster = nextCluster(tmpCluster);
+ // return error if bad cluster chain
+ if (tmpCluster < 2 || isEOC(tmpCluster)) return 0;
+ }
+ readCluster_ = tmpCluster;
+ }
+ readPosition_ = pos;
+ return 1;
+}
+#endif //FAT16_SEEK_SUPPORT & FAT16_READ_SUPPORT
+
+#if FAT16_WRITE_SUPPORT
+/**
+ * The sync() call causes all modified data and directory fields
+ * to be written to the storage device.
+ *
+ * \return The value one, true, is returned for success and
+ * the value zero, false, is returned for failure.
+ * Reasons for failure include a call to sync() before a file has been
+ * opened or an I/O error.
+ */
+uint8_t Fat16::sync(void)
+{
+ dir_t *d;
+ if (!isOpen()) return 0;
+ if (attributes_ & ATTR_FILE_SIZE_DIRTY) {
+ // update file size
+ if(!(d = cacheDirEntry(dirEntryIndex_, CACHE_FOR_WRITE))) return 0;
+ d->fileSize = fileSize_;
+ attributes_ &= ~ATTR_FILE_SIZE_DIRTY;
+ }
+ return cacheFlush();
+}
+ /**
+ * Append one byte to a file. This function is called by Arduino's Print class.
+ *
+ * \note The byte is moved to the cache but may not be written to the
+ * storage device until sync() is called.
+ *
+ * \param[in] b The byte to be written.
+ */
+void Fat16::write(uint8_t b)
+{
+ write(&b, 1);
+}
+/**
+ * Write data at the end of an open file.
+ *
+ * \note Data is moved to the cache but may not be written to the
+ * storage device until sync() is called.
+ *
+ * \param[in] src Pointer to the location of the data to be written.
+ *
+ * \param[in] count Number of bytes to write.
+ *
+ * \return For success write() returns the number of bytes written, always
+ * \a count. If an error occurs, write() returns -1. Possible errors
+ * include write() is called before a file has been opened, write is called
+ * for a read-only file, device is full, a corrupt file system or an I/O error.
+ *
+ */
+int16_t Fat16::write(uint8_t *src, uint16_t count)
+{
+ if (!isOpen()) return -1;
+ //error if file is read only
+ if (attributes_ & DIR_ATT_READ_ONLY) return -1;
+ uint16_t nToWrite = count;
+ while (nToWrite > 0) {
+ uint8_t blkOfCluster = blockOfCluster(fileSize_);
+ uint16_t blockOffset = cacheDataOffset(fileSize_);
+ if (blkOfCluster == 0 && blockOffset == 0) {
+ //start of new cluster
+ if (writeCluster_ == 0) {
+ if (firstCluster_ == 0) {
+ // allocate first cluster of file
+ if (!addCluster()) return -1;
+ }
+ else {
+ // only happens if empty file has allocated clusters
+ writeCluster_ = firstCluster_;
+ }
+ }
+ else {
+ uint16_t next = nextCluster(writeCluster_);
+ if (isEOC(next)) {
+ // add cluster if at end of chain
+ if (!addCluster()) return -1;
+ }
+ else {
+ // error in cluster chain
+ if(next < 2) return -1;
+ // only happens if file has extra allocated clusters
+ writeCluster_ = next;
+ }
+ }
+ }
+ // just zero cache if start of new block otherwise read block into cache
+ uint8_t action = blockOffset == 0 ? CACHE_ZERO_BLOCK : CACHE_FOR_WRITE;
+ if (!cacheDataBlock(writeCluster_, blkOfCluster, action)) return -1;
+ // max space in block
+ uint16_t n = 512 - blockOffset;
+ // lesser of space and amount to write
+ if(n > nToWrite) n = nToWrite;
+ uint8_t *dst = cacheBuffer_.data + blockOffset;
+ uint8_t *end = dst + n;
+ while (dst != end) *dst++ = *src++;
+ nToWrite -= n;
+ // update fileSize and insure sync will update dir entry
+ fileSize_ += n;
+ attributes_ |= ATTR_FILE_SIZE_DIRTY;
+ }
+ return count - nToWrite;
+}
+#endif //FAT16_WRITE_SUPPORT
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/Fat16.h b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/Fat16.h
new file mode 100644
index 00000000..bd8418d9
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/Fat16.h
@@ -0,0 +1,201 @@
+/* Arduino FAT16 Library
+ * Copyright (C) 2008 by William Greiman
+ *
+ * This file is part of the Arduino FAT16 Library
+ *
+ * This Library is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This Library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with the Arduino Fat16 Library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+#ifndef Fat16_h
+#define Fat16_h
+#include "BlockDevice.h"
+#include "Print.h"
+#include "Fat16structs.h"
+#include "Fat16Config.h"
+/**
+ * \typedef fat_t
+ *
+ * \brief Type fot FAT entry
+ */
+typedef uint16_t fat_t;
+/**
+ * \union cache_t
+ *
+ * \brief Cache buffer data type
+ *
+ */
+union cache_t {
+ /** Used to access cached file data blocks. */
+ uint8_t data[512];
+ /** Used to access cached FAT entries. */
+ fat_t fat[256];
+ /** Used to access cached directory entries. */
+ dir_t dir[16];
+ /** Used to access a cached MasterBoot Record. */
+ mbr_t mbr;
+ /** Used to access to a cached FAT16 boot sector. */
+ fbs_t fbs;
+};
+
+/** \class Fat16
+ * \brief Fat16 implements a minimal Arduino FAT16 Library
+ *
+ * Fat16 does not support subdirectories or long file names.
+ */
+#if FAT16_WRITE_SUPPORT && FAT16_PRINT_SUPPORT
+class Fat16 : public Print {
+#else // FAT16_WRITE_SUPPORT
+class Fat16 {
+#endif //FAT16_WRITE_SUPPORT
+ // Device
+ static BlockDevice *rawDev_;
+ // Volume info
+ static uint8_t volumeInitialized_; //true if volume has been initialized
+ static uint8_t fatCount_; //number of FATs
+ static uint8_t blocksPerCluster_; //must be power of 2, max cluster size 32K
+ static uint16_t rootDirEntryCount_; //should be 512 for FAT16
+ static uint16_t blocksPerFat_; //number of blocks in one FAT
+ static uint16_t clusterCount_; //total clusters in volume
+ static uint32_t fatStartBlock_; //start of first FAT
+ static uint32_t rootDirStartBlock_; //start of root dir
+ static uint32_t dataStartBlock_; //start of data clusters
+
+#define CACHE_FOR_READ 0 //cache a block for read
+#define CACHE_FOR_WRITE 1 //cache a block and set dirty for the block
+#define CACHE_ZERO_BLOCK 2 //zero the cache and set dirty fot the block
+
+ //block cache
+ static cache_t cacheBuffer_; //512 byte cache for storage device blocks
+ static uint32_t cacheBlockNumber_; //Logical number of block in the cache
+ static uint8_t cacheDirty_; //cacheFlush() will write block if true
+
+ // File info
+
+#define ATTR_DIR_MASK 0X3F //attributes from directory entry
+#define ATTR_FILE_SIZE_DIRTY 0X40 //sync of directory entery file size required
+#define ATTR_IS_OPEN 0X80 //file open
+
+ uint8_t attributes_; //see above ATTR defines
+ int16_t dirEntryIndex_; //index of directory entry for open file
+ fat_t firstCluster_; //first cluster of file
+ uint32_t fileSize_; //fileSize
+#if FAT16_READ_SUPPORT
+ fat_t readCluster_; //cluster for read position
+ uint32_t readPosition_; //byte offset for next read
+#endif //FAT16_READ_SUPPORT
+#if FAT16_WRITE_SUPPORT
+ fat_t writeCluster_; //cluster for write position at end of file
+#endif//FAT16_WRITE_SUPPORT
+ //private functions for cache
+ static uint8_t blockOfCluster(uint32_t position) {
+ // depends on blocks per cluster being power of two
+ return ((position)>> 9) & (blocksPerCluster_ - 1);}
+ static uint16_t cacheDataOffset(uint32_t position) {return position & 0X1FF;}
+ static uint8_t cacheDataBlock(fat_t cluster,
+ uint8_t blockOfCluster, uint8_t action = 0);
+ static dir_t *cacheDirEntry(uint16_t index, uint8_t action = 0);
+ static fat_t *cacheFatEntry(fat_t cluster, uint8_t action = 0, uint8_t table = 0);
+ static uint8_t cacheRawBlock(uint32_t blockNumber, uint8_t action = 0);
+ static uint8_t cacheFlush(void);
+ static void cacheSetDirty(void) {cacheDirty_ |= CACHE_FOR_WRITE;}
+ static uint8_t cacheZeroBlock(uint32_t blockNumber);
+ //find and cache a directory entery
+ static dir_t *findDirEntry(uint16_t &entry, uint8_t *name,
+ uint8_t skip = DIR_ATT_VOLUME_ID);
+ //get next cluster in chain
+ static fat_t nextCluster(fat_t cluster);
+ //end of chain test
+ static uint8_t isEOC(fat_t cluster) {return cluster >= 0XFFF8;}
+ //allocate a cluster to a file
+ uint8_t addCluster(void);
+ /*
+ * Public functions
+ */
+ public:
+ //create with file closed
+ Fat16(void) : attributes_(0) {}
+ static uint8_t init(BlockDevice &dev, uint8_t part);
+// static dir_t *readDir(uint16_t &index, uint8_t skip = DIR_ATT_DIRECTORY);
+/**
+ * Read the next short, 8.3, directory entry into the cache buffer.
+ *
+ * Unused entries and entries for long names are skipped.
+ *
+ * The directory entry must not be modified since the cached block
+ * containing the entry may be written back to the storage device.
+ *
+ * \param[in,out] entry The search starts at \a entry and \a entry is
+ * updated with the root directory index of the found directory entry.
+ * If the entry is a file, it may be opened by calling
+ * \link Fat16::open(uint16_t) open(entry)\endlink.
+ *
+ * \param[in] skip Skip entries that have these attributes. If \a skip
+ * is not specified, the default is to skip the volume label and directories.
+ *
+ * \return A pointer to a dir_t structure for the found directory entry,
+ * or NULL if an error occurs or the end of the root directory is reached.
+ * On success, \a entry is set to the index of the found directory entry.
+ */
+ static dir_t *readDir(uint16_t &entry,
+ uint8_t skip = (DIR_ATT_VOLUME_ID | DIR_ATT_DIRECTORY)) {
+ return findDirEntry(entry, (uint8_t *)"", skip);}
+ /**
+ * \return The number of entries in the root directory.
+ */
+ static uint16_t rootDirEntryCount(void) {
+ return rootDirEntryCount_;}
+ //file access functions
+ uint8_t close(void);
+ uint8_t create(char *fileName);
+ /**
+ * \return The file's size in bytes.
+ * This is also the write position for the file.
+ */
+ uint32_t fileSize(void) {return fileSize_;}
+ /**
+ * Checks the file's open/closed status for this instance of Fat16.
+ * \return The value true if a file is open otherwise false;
+ */
+ uint8_t isOpen(void) {return (attributes_ & ATTR_IS_OPEN) != 0;}
+ uint8_t open(char *fileName);
+ uint8_t open(uint16_t entry);
+#if FAT16_READ_SUPPORT
+ int16_t read(void);
+ int16_t read(uint8_t *dst, uint16_t count);
+ /**
+ * \return The read position in bytes.
+ */
+ uint32_t readPos(void) {return readPosition_;}
+ uint8_t seek(uint32_t pos);
+#endif //FAT16_READ_SUPPORT
+#if FAT16_WRITE_SUPPORT
+ uint8_t sync(void);
+ void write(uint8_t b);
+ int16_t write(uint8_t *src, uint16_t count);
+#endif //FAT16_WRITE_SUPPORT
+#if FAT16_DEBUG_SUPPORT
+ /** For debug only. Do not use in applications. */
+ static void dbgSetDev(BlockDevice &dev) {rawDev_ = &dev;}
+ /** For debug only. Do not use in applications. */
+ static uint8_t *dbgCacheBlock(uint32_t blockNumber) {
+ return cacheRawBlock(blockNumber) ? cacheBuffer_.data : 0; }
+ /** For debug only. Do not use in applications. */
+ static dir_t *dbgCacheDir(uint16_t index) {
+ return cacheDirEntry(index);}
+ /** For debug only. Do not use in applications. */
+ static uint16_t *dbgCacheFat(uint16_t cluster) {
+ return cacheFatEntry(cluster);}
+#endif //FAT16_DEBUG_SUPPORT
+};
+#endif//Fat16_h
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/Fat16Config.h b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/Fat16Config.h
new file mode 100644
index 00000000..1beda372
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/Fat16Config.h
@@ -0,0 +1,62 @@
+/* Arduino FAT16 Library
+ * Copyright (C) 2008 by William Greiman
+ *
+ * This file is part of the Arduino FAT16 Library
+ *
+ * This Library is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This Library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with the Arduino Fat16 Library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+ /**
+ * \file
+ * Configuration file
+ */
+#ifndef Fat16Config_h
+#define Fat16Config_h
+/**
+ * Set non-zero to enable Arduino V12 Print support
+ */
+#define FAT16_PRINT_SUPPORT 1
+/**
+ * SdCard::writeBlock will protect block zero if set non-zero
+ */
+#define SD_PROTECT_BLOCK_ZERO 1
+/**
+ * Set non-zero to enable read() support
+ */
+#define FAT16_READ_SUPPORT 1
+/**
+ * Set non-zero to enable seek() support
+ */
+#define FAT16_SEEK_SUPPORT 1
+/**
+ * Set non-zero to enable write() and create() support
+ */
+#define FAT16_WRITE_SUPPORT 1
+/**
+ * Set non-zero to enable SdCard::cardSize()
+ */
+#define SD_CARD_SIZE_SUPPORT 1
+/**
+ * Set non-zero to store strings in PROGMEM. Will cause bogus warnings from gcc.
+ */
+#define FAT16_SAVE_RAM 1
+/**
+ * Set non-zero to allow access to Fat16 internals by cardInfo debug sketch
+ */
+#define FAT16_DEBUG_SUPPORT 1
+/**
+ * Should be zero - only useful for debug
+ */
+#define SD_CARD_READ_REG_SUPPORT 0
+#endif //Fat16Config_h
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/Fat16mainpage.h b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/Fat16mainpage.h
new file mode 100644
index 00000000..6820aeb6
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/Fat16mainpage.h
@@ -0,0 +1,183 @@
+/* Arduino FAT16 Library
+ * Copyright (C) 2008 by William Greiman
+ *
+ * This file is part of the Arduino FAT16 Library
+ *
+ * This Library is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This Library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with the Arduino Fat16 Library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+/**
+\mainpage Arduino Fat16 Library
+<CENTER>Copyright &copy; 2008 by William Greiman
+</CENTER>
+
+\section Intro Introduction
+The Arduino Fat16 Library is a minimal implementation of the FAT16 file system
+on standard SD flash memory cards. Fat16 supports read, write and file creation.
+
+The Fat16 class only supports access to files in the root directory and only
+supports short 8.3 names. Directory time and date fields for creation, access
+and write are not maintained.
+
+
+Fat16 was designed to use the Arduino Version 12 Print class which
+allows files to be written with \link Print::print() print() \endlink and
+\link Print::println() println()\endlink.
+
+It should be possible to use Fat16 with storage devices other than
+SD flash cards. Hardware access can be through any class derived from
+the BlockDevice class.
+
+\section Hardware Hardware Configuration
+Fat16 was developed using an <A HREF = "http://www.adafruit.com/"> Adafruit Industries</A>
+<A HREF = "http://ladyada.net/make/gpsshield/modules.html"> GPS Shield</A>.
+See the <A HREF = "http://ladyada.net/make/gpsshield/download.html"> Schematic </A>
+for details.
+
+\section Warning Warning
+
+Fat16 has been tested with several SD Cards but is bound to contain many bugs.
+In most companies this would be called pre-alpha software.
+I hope people will try it and send me comments.
+
+\section comment Bugs and Comments
+
+If you wish to report bugs or have comments, send email to fat16lib@sbcglobal.net.
+
+
+\section Fat16Class Fat16 Usage
+
+The class Fat16 is a minimal implementation of FAT16 on standard SD cards.
+High Capacity SD cards, SDHC, are not supported. It should work on all
+standard cards from 8MB to 2GB formatted with a FAT16 file system.
+
+\note
+ The Arduino Print class uses character
+at a time writes so it was necessary to use a \link Fat16::sync() sync() \endlink
+function to control when data is written to the SD card.
+
+\par
+An application which writes to a file using \link Print::print() print()\endlink,
+\link Print::println() println() \endlink
+or \link Fat16::write write() \endlink must call \link Fat16::sync() sync() \endlink
+at the appropriate time to force data and directory information to be written
+to the SD Card. Data and directory information are also written to the SD card
+when \link Fat16::close() close() \endlink is called.
+
+\par
+Applications must use care calling \link Fat16::sync() sync() \endlink
+since 2048 bytes of I/O is required to update file and
+directory information. This includes writing the current data block, reading
+the block that contains the directory entry for update, writing the directory
+block back and reading back the current data block.
+
+Fat16 only supports access to files in the root directory and only supports
+short 8.3 names.
+
+It is possible to open a file with two or more instances of Fat16. A file may
+be corrupted if data is written to the file by more than one instance of Fat16.
+
+Short names are limited to 8 characters followed by an optional period (.)
+and extension of up to 3 characters. The characters may be any combination
+of letters and digits. The following special characters are also allowed:
+
+$ % ' - _ @ ~ ` ! ( ) { } ^ # &
+
+Short names are always converted to upper case and their original case
+value is lost.
+
+Fat16 uses a slightly restricted form of short names.
+Only printable ASCII characters are supported. No characters with code point
+values greater than 127 are allowed. Space is not allowed even though space
+was allowed in the API of early versions of DOS.
+
+Fat16 has been optimized for The Arduino ATmega168. Minimizing RAM use is the
+highest priority goal followed by flash use and finally performance.
+Most SD cards only support 512 byte block write operations so a 512 byte
+cache buffer is used by Fat16. This is the main use of RAM. A small
+amount of RAM is used to store key volume and file information.
+Flash memory usage can be controlled by selecting options in Fat16Config.h.
+
+\section HowTo How to format SD Cards as FAT16 Volumes
+
+Microsoft operating systems support removable media formatted with a
+Master Boot Record, MBR, or formatted as a super floppy with a FAT Boot Sector
+in block zero.
+
+Microsoft operating systems expect MBR formatted removable media
+to have only one partition. The first partition should be used.
+
+Microsoft operating systems do not support partitioning SD flash cards.
+If you erase an SD card with a program like KillDisk, Most versions of
+Windows will format the card as a super floppy.
+
+The best way to restore an SD card's MBR is to use SDFormatter
+which can be downloaded from:
+
+http://www.sdcard.org/consumers/formatter/
+
+SDFormatter does not have an option for FAT type so it may format
+small cards as FAT12 and larger cards as FAT32.
+
+After the MBR is restored by SDFormatter you can reformat it
+and force the volume type to be FAT16 by selecting the FAT option on XP
+or specifying the "Allocation unit size" on Vista.
+
+The FAT type, FAT12, FAT16, or FAT32, is determined by the count
+of clusters on the volume and nothing else.
+
+Microsoft published the following code for determining FAT type:
+
+\code
+if (CountOfClusters < 4085) {
+ // Volume is FAT12
+}
+else if (CountOfClusters < 65525) {
+ // Volume is FAT16
+}
+else {
+ // Volume is FAT32
+}
+
+\endcode
+When you format a FAT volume, choose a cluster size that will result in:
+
+4084 < CountOfClusters && CountOfClusters < 65525
+
+The volume will then be FAT16.
+
+If you are formatting an SD card on OS X or Linux, be sure to use the first
+partition. Format this partition with a cluster count in above range.
+
+\section References References
+
+The Arduino site:
+
+http://www.arduino.cc/
+
+For more information about FAT file systems see:
+
+http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx
+
+For information about using SD cards as SPI devices see:
+
+http://www.sdcard.org/developers/tech/sdcard/pls/Simplified_Physical_Layer_Spec.pdf
+
+The ATmega168 datasheet:
+
+http://www.atmel.com/dyn/resources/prod_documents/doc8025.pdf
+
+
+ */ \ No newline at end of file
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/Fat16structs.h b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/Fat16structs.h
new file mode 100644
index 00000000..1e73945b
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/Fat16structs.h
@@ -0,0 +1,352 @@
+/* Arduino FAT16 Library
+ * Copyright (C) 2008 by William Greiman
+ *
+ * This file is part of the Arduino FAT16 Library
+ *
+ * This Library is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This Library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with the Arduino Fat16 Library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+/**
+ * \file
+ * FAT data structures
+ */
+#ifndef Fat16structs_h
+#define Fat16structs_h
+/*
+ * mostly from Microsoft document fatgen103.doc
+ * http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx
+ */
+/**
+ * \struct partitionTable
+ * \brief MBR partition table entry
+ *
+ * A partiton table entry for a MBR formatted storage device.
+ * The MBR partiton table has four entries.
+ */
+struct partitionTable {
+ /**
+ * Boot Indicator . Indicates whether the volume is the active
+ * partition. Legal values include: 0X00. Do not use for booting.
+ * 0X80 Active partition.
+ */
+ uint8_t boot;
+ /**
+ * Head part of Cylinder-head-sector address of the first block in
+ * the partition. Legal values are 0-255. Only used in old PC BIOS.
+ */
+ uint8_t beginHead;
+ /**
+ * Sector part of Cylinder-head-sector address of the first block in
+ * the partition. Legal values are 1-63. Only used in old PC BIOS.
+ */
+ unsigned beginSector : 6;
+ /** High bits cylinder for first block in partition. */
+ unsigned beginCylinderHigh : 2;
+ /**
+ * Combine beginCylinderLow with beginCylinderHigh. Legal values
+ * are 0-1023. Only used in old PC BIOS.
+ */
+ uint8_t beginCylinderLow;
+ /**
+ * Partition type. See defines that begin with PART_TYPE_ for
+ * some Microsoft partition types.
+ */
+ uint8_t type;
+ /**
+ * head part of cylinder-head-sector address of the last sector in the
+ * partition. Legal values are 0-255. Only used in old PC BIOS.
+ */
+ uint8_t endHead;
+ /**
+ * Sector part of cylinder-head-sector address of the last sector in
+ * the partition. Legal values are 1-63. Only used in old PC BIOS.
+ */
+ unsigned endSector : 6;
+ /** High bits of end cylinder */
+ unsigned endCylinderHigh : 2;
+ /**
+ * Combine endCylinderLow with endCylinderHigh. Legal values
+ * are 0-1023. Only used in old PC BIOS.
+ */
+ uint8_t endCylinderLow;
+ /** Logical block address of the first block in the partition. */
+ uint32_t firstSector;
+ /** Length of the partition, in blocks. */
+ uint32_t totalSectors;
+};
+/** Type name for partitionTable */
+typedef struct partitionTable part_t;
+
+ /** Boot indicator for active bootable partition. */
+#define PART_BOOT_ACTIVE 0X80
+ /** Boot indicator for non-bootable partition */
+#define PART_BOOT_NON_BOOTABLE 0X00
+ /**
+ * FAT12 primary partition or logical drive
+ * (fewer than 32,680 sectors in the volume)
+ */
+#define PART_TYPE_FAT12 0x01
+ /** FAT16 partition or logical drive (32,680�65,535 sectors or 16 MB�33 MB) */
+#define PART_TYPE_DOSFAT16 0x04
+ /** Extended partition */
+#define PART_TYPE_EXTENDED 0x05
+ /** BIGDOS FAT16 partition or logical drive (33 MB�4 GB) */
+#define PART_TYPE_FAT16 0x06
+ /** Installable File System (NTFS partition or logical drive) */
+#define PART_TYPE_NTFS 0x07
+ /** FAT32 partition or logical drive */
+#define PART_TYPE_FAT32 0x0B
+ /** FAT32 partition or logical drive using BIOS INT 13h extensions */
+#define PART_TYPE_FAT32LBA 0x0C
+ /** BIGDOS FAT16 partition or logical drive using BIOS INT 13h extensions */
+#define PART_TYPE_FAT16LBA 0x0E
+ /** Extended partition using BIOS INT 13h extensions */
+#define PART_TYPE_EXTDOSLBA 0x0F
+/**
+ * \struct masterBootRecord
+ *
+ * \brief Master Boot Record
+ *
+ * The first block of a storage device that is formatted with a MBR.
+ */
+struct masterBootRecord {
+ /** Code Area for master boot program. */
+ uint8_t codeArea[440];
+ /** Optional WindowsNT disk signature. May contain more boot code. */
+ uint32_t diskSignature;
+ /** Usually zero but may be more boot code. */
+ uint16_t usuallyZero;
+ /** Partition tables. */
+ part_t part[4];
+ /** First MBR signature byte. Must be 0X55 */
+ uint8_t mbrSig0;
+ /** Second MBR signature byte. Must be 0XAA */
+ uint8_t mbrSig1;
+};
+/** Type name for masterBootRecord */
+typedef struct masterBootRecord mbr_t;
+/**
+ * \struct biosPramBlock
+ *
+ * \brief Structure that defines a FAT16 volume.
+ *
+ * See FAT boot sector for entire block.
+ */
+struct biosPramBlock{
+ /**
+ * Count of bytes per sector. This value may take on only the
+ * following values: 512, 1024, 2048 or 4096
+ */
+ uint16_t bytesPerSector;
+ /**
+ * Number of sectors per allocation unit. This value must be a
+ * power of 2 that is greater than 0. The legal values are
+ * 1, 2, 4, 8, 16, 32, 64, and 128.
+ */
+ uint8_t sectorsPerCluster;
+ /**
+ * Number of sectors before the first FAT.
+ * This value must not be zero.
+ */
+ uint16_t reservedSectorCount;
+ /** The count of FAT data structures on the volume. This field should
+ * always contain the value 2 for any FAT volume of any type.
+ */
+ uint8_t fatCount;
+ /**
+ * For FAT12 and FAT16 volumes, this field contains the count of
+ * 32-byte directory entries in the root directory. For FAT32 volumes,
+ * this field must be set to 0. For FAT12 and FAT16 volumes, this
+ * value should always specify a count that when multiplied by 32
+ * results in a multiple of bytesPerSector. FAT16 volumes should
+ * use the value 512.
+ */
+ uint16_t rootDirEntryCount;
+ /**
+ * This field is the old 16-bit total count of sectors on the volume.
+ * This count includes the count of all sectors in all four regions
+ * of the volume. This field can be 0; if it is 0, then totalSectors32
+ * must be non-zero. For FAT32 volumes, this field must be 0. For
+ * FAT12 and FAT16 volumes, this field contains the sector count, and
+ * totalSectors32 is 0 if the total sector count fits
+ * (is less than 0x10000).
+ */
+ uint16_t totalSectors16;
+ /**
+ * This dates back to the old MS-DOS 1.x media determination and is
+ * no longer usually used for anything. 0xF8 is the standard value
+ * for fixed (non-removable) media. For removable media, 0xF0 is
+ * frequently used. Legal values are 0xF0 or 0xF8-0xFF.
+ */
+ uint8_t mediaType;
+ /**
+ * This field is the FAT12/FAT16 16-bit count of sectors occupied by
+ * ONE FAT. On FAT32 volumes this field must be 0, and sectorsPerFat32
+ * contains the FAT size count.
+ */
+ uint16_t sectorsPerFat16;
+ /** Sectors per track for interrupt 0x13. Not used otherwise. */
+ uint16_t sectorsPerTrtack;
+ /** Number of heads for interrupt 0x13. Not used otherwise. */
+ uint16_t headCount;
+ /**
+ * Count of hidden sectors preceding the partition that contains this
+ * FAT volume. This field is generally only relevant for media
+ * visible on interrupt 0x13.
+ */
+ uint32_t hidddenSectors;
+ /**
+ * This field is the new 32-bit total count of sectors on the volume.
+ * This count includes the count of all sectors in all four regions
+ * of the volume. This field can be 0; if it is 0, then
+ * totalSectors16 must be non-zero.
+ */
+ uint32_t totalSectors32;
+};
+
+/** Type name for biosParmBlock */
+typedef struct biosPramBlock bpb_t;
+/*
+ * Some derived values
+ * firstFatSector = reservedSectorCount
+ * rootDirSectors = (32*rootEntryCount + bytesPerSector - 1)/bytesPerSector
+ * firstDataSector = reservedSectorCount + (fatCount * fatSize) + rootDirSectors
+ * dataSectorCount = totalSectors - firstDataSector
+ * clusterCount = dataSectorCount/sectorsPerCluster
+ * for cluster number N
+ * firstSectorOfCluster = (N - 2)*sectorsPerCluster + firstDataCluster
+ */
+/**
+ * \struct fat16BootSector
+ * \brief Boot Sector of a FAT16 volume
+ */
+struct fat16BootSector {
+ /** X86 jmp to boot program */
+ uint8_t jmpToBootCode[3];
+ /** informational only - don't depend on it */
+ char oemName[8];
+ /** BIOS Pramameter Block */
+ bpb_t bpb;
+ /** for int0x13 use value 0X80 for hard drive */
+ uint8_t driveNumber;
+ /**used by Windows NT - should be zero for FAT16 */
+ uint8_t reserved1;
+ /** 0X29 if next three fields are vaild */
+ uint8_t bootSignature;
+ /** usually generated by combining date and time */
+ uint32_t volumeSerialNumber;
+ /** should match volume label in root dir */
+ char volumeLabel[11];
+ /** informational only - don't depend on it */
+ char fileSystemType[8];
+ /** X86 boot code */
+ uint8_t bootCode[448];
+ /** must be 0X55 */
+ uint8_t bootSectorSig0;
+ /** must be 0XAA */
+ uint8_t bootSectorSig1;
+};
+
+/** Type name for fat16BootSector */
+typedef struct fat16BootSector fbs_t;
+
+ /** Value for byte 254 of boot block */
+#define BOOTSIG0 0X55
+ /** value for byte 255 of boot block */
+#define BOOTSIG1 0XAA
+/**
+ * \struct directoryEntry
+ * \brief FAT short directory entry
+ *
+ * Short means short 8.3 name, not the entry size.
+ */
+struct directoryEntry {
+ /**
+ * Short 8.3 name.
+ * The first eight bytes contain the file name with blank fill.
+ * The last three bytes contain the file extension with blank fill.
+ */
+ uint8_t name[11];
+ /** Entry attributes.
+ *
+ * The upper two bits of the attribute byte are reserved and should
+ * always be set to 0 when a file is created and never modified or
+ * looked at after that. See defines that begin with DIR_ATT_.
+ */
+ uint8_t attributes;
+ /**
+ * Reserved for use by Windows NT. Set value to 0 when a file is
+ * created and never modify or look at it after that.
+ */
+ uint8_t reservedNT;
+ /**
+ * The granularity of the seconds part of creationTime is 2 seconds
+ * so this field is a count of tenths of a second and its valid
+ * value range is 0-199 inclusive.
+ */
+ uint8_t creationTimeTenths;
+ /** Time file was created. */
+ uint16_t creationTime;
+ /** Date file was created. */
+ uint16_t creationDate;
+ /**
+ * Last access date. Note that there is no last access time, only
+ * a date. This is the date of last read or write. In the case of
+ * a write, this should be set to the same date as lastWriteDate.
+ */
+ uint16_t lastAccessDate;
+ /**
+ * High word of this entry�s first cluster number (always 0 for a
+ * FAT12 or FAT16 volume).
+ */
+ uint16_t firstClusterHigh;
+ /** Time of last write. File creation is considered a write. */
+ uint16_t lastWriteTime;
+ /** Date of last write. File creation is considered a write. */
+ uint16_t lastWriteDate;
+ /** Low word of this entry�s first cluster number. */
+ uint16_t firstClusterLow;
+ /** 32-bit unsigned holding this file�s size in bytes. */
+ uint32_t fileSize;
+};
+ /** Type name for directoryEntry */
+typedef struct directoryEntry dir_t;
+ /** escape for name[0] = 0XE5 */
+#define DIR_NAME_0XE5 0X05
+ /** name[0] value for entry that is free after being "deleted" */
+#define DIR_NAME_DELETED 0XE5
+ /** name[0] value for entry that is free and no allocated entries follow */
+#define DIR_NAME_FREE 0X00
+ /** file is read-only */
+#define DIR_ATT_READ_ONLY 0X01
+ /** File should hidden in directory listings */
+#define DIR_ATT_HIDDEN 0X02
+ /** Entry is for a system file */
+#define DIR_ATT_SYSTEM 0X04
+ /** Directory entry contains the volume label */
+#define DIR_ATT_VOLUME_ID 0X08
+ /** Entry is for a directory */
+#define DIR_ATT_DIRECTORY 0X10
+ /** Old DOS archive bit for backup support */
+#define DIR_ATT_ARCHIVE 0X20
+ /** Test value for long name entry. Test is
+ d->attributes & DIR_ATT_LONG_NAME_MASK) == DIR_ATT_LONG_NAME. */
+#define DIR_ATT_LONG_NAME 0X0F
+ /** Test mask for long name entry */
+#define DIR_ATT_LONG_NAME_MASK 0X3F
+ /** cluster alue to test for end of chain */
+#define FAT_LAST_USED 0XFFEF
+ /** cluster value used to mark end of chain in FAT */
+#define FAT_EOC 0XFFFF
+#endif //Fat16structs_h
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/SdCard.cpp b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/SdCard.cpp
new file mode 100644
index 00000000..4d427e03
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/SdCard.cpp
@@ -0,0 +1,204 @@
+/* Arduino FAT16 Library
+ * Copyright (C) 2008 by William Greiman
+ *
+ * This file is part of the Arduino FAT16 Library
+ *
+ * This Library is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This Library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with the Arduino Fat16 Library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+#include <stdint.h>
+#include "Fat16Config.h"
+#include "SdCard.h"
+#include "spiBus.h"
+#include "sdInfo.h"
+
+#define CMD0 0X00 //GO_IDLE_STATE - init card spi mode if CS low
+#define CMD9 0X09 //SEND_CSD
+#define CMD16 0X10 //SET_BLKLEN
+#define CMD17 0X11 //READ_BLOCK
+#define CMD24 0X18 //WRITE_BLOCK
+#define CMD55 0X37 //APP_CMD - escape for application specific command
+#define ACMD41 0X29 //SD_SEND_OP_COMD
+//
+#define R1_READY_STATE 0
+#define R1_IDLE_STATE 1
+//start data token for read or write
+#define DATA_START_BLOCK 0XFE
+//data response tokens for write block
+#define DATA_RES_MASK 0X1F
+#define DATA_RES_ACCEPTED 0X05
+#define DATA_RES_CRC_ERROR 0X0B
+#define DATA_RES_WRITE_ERROR 0X0D
+
+static uint8_t cardCommand(uint8_t cmd, uint32_t arg)
+{
+ uint8_t r1;
+ // some cards need extra clocks after transaction to go to ready state
+ // easiest to put extra clocks before next transaction
+ spiRec();
+ spiSend(cmd | 0x40);
+ for (int8_t s = 24; s >= 0; s -= 8) spiSend(arg >> s);
+ spiSend(cmd == CMD0 ? 0x95 : 0XFF);//must send valid CRC for CMD0
+ //wait for not busy
+ for (uint8_t retry = 0; (r1 = spiRec()) == 0xFF && retry != 0XFF; retry++);
+ return r1;
+}
+
+static uint8_t readTransfer(uint8_t *dst, uint16_t count)
+{
+ //wait for start of data
+ for (uint16_t retry = 0; spiRec() != DATA_START_BLOCK; retry++) {
+ if (retry == 0XFFFF) {
+ spiSSHigh();
+ return 0;
+ }
+ }
+ //transfer data
+ for (uint16_t i = 0; i < count; i++) {
+ dst[i] = spiRec();
+ }
+ spiRec();//first CRC byte
+ spiRec();//second CRC byte
+ spiSSHigh();
+ return 1;
+ }
+//
+#if SD_CARD_SIZE_SUPPORT
+/**
+ * Determine the size of a standard SD flash memory card
+ * \return The number of 512 byte data blocks in the card
+ */
+uint32_t SdCard::cardSize(void)
+{
+ csd_t csd;
+ spiSSLow();
+ if (cardCommand(CMD9, 0)) {
+ spiSSHigh();
+ return 0;
+ }
+ if (!readTransfer((uint8_t *)&csd, sizeof(csd))) return 0;
+ uint8_t read_bl_len = csd.read_bl_len;
+ uint16_t c_size = (csd.c_size_high << 10) | (csd.c_size_mid << 2) | csd.c_size_low;
+ uint8_t c_size_mult = (csd.c_size_mult_high << 1) | csd.c_size_mult_low;
+ return (uint32_t)(c_size+1) << (c_size_mult + read_bl_len - 7);
+}
+#endif //SD_CARD_SIZE_SUPPORT
+/**
+ * Initialize a SD flash memory card.
+ *
+* \return The value one, true, is returned for success and
+ * the value zero, false, is returned for failure.
+ *
+ */
+uint8_t SdCard::init(void)
+{
+ spiInit();
+ //must supply min of 74 clock cycles with CS high.
+ for (uint8_t i = 0; i < 10; i++) spiSend(0XFF);
+ spiSSLow();
+ uint8_t r = cardCommand(CMD0, 0);
+ for (uint16_t retry = 0; r != R1_IDLE_STATE; retry++){
+ if (retry == 0XFFFF) {
+ spiSSHigh();
+ return 0;
+ }
+ r = spiRec();
+ }
+ for (uint16_t retry = 0; ; retry++) {
+ cardCommand(CMD55, 0);
+ if (cardCommand(ACMD41, 0) == R1_READY_STATE)break;
+ if (retry == 1000) {
+ spiSSHigh();
+ return 0;
+ }
+ }
+ //use max SPI frequency
+ spiMaxSpeed();
+ //set block length to 512 (not required? default is 512)
+ r = cardCommand(CMD16, 512) ? 0 : 1;
+ spiSSHigh();
+ return r;
+return 1;
+}
+/**
+ * Reads a 512 byte block from a storage device.
+ *
+ * \param[in] blockNumber Logical block to be read.
+ * \param[out] dst Pointer to the location that will receive the data.
+ * \return The value one, true, is returned for success and
+ * the value zero, false, is returned for failure.
+ */
+uint8_t SdCard::readBlock(uint32_t blockNumber, uint8_t *dst)
+{
+ spiSSLow();
+ if (cardCommand(CMD17, blockNumber << 9)) {
+ spiSSHigh();
+ return 0;
+ }
+ return readTransfer(dst, 512);
+}
+/**
+ * Writes a 512 byte block to a storage device.
+ *
+ * \param[in] blockNumber Logical block to be written.
+ * \param[in] src Pointer to the location of the data to be written.
+ * \return The value one, true, is returned for success and
+ * the value zero, false, is returned for failure.
+ */
+uint8_t SdCard::writeBlock(uint32_t blockNumber, uint8_t *src)
+{
+#if FAT16_WRITE_SUPPORT
+ uint32_t address = blockNumber << 9;
+#if SD_PROTECT_BLOCK_ZERO
+ //don't allow write to first block
+ if (address == 0) return 0;
+#endif //SD_PROTECT_BLOCK_ZERO
+ spiSSLow();
+ if (cardCommand(CMD24, address)) {
+ spiSSHigh();
+ return 0;
+ }
+ spiSend(DATA_START_BLOCK);
+ //transfer block
+ for (uint16_t i = 0; i < 512; i++) {
+ spiSend(src[i]);
+ }
+ spiSend(0xff);// dummy crc
+ spiSend(0xff);// dummy crc
+ uint8_t r1 = spiRec();
+ if ((r1 & DATA_RES_MASK) != DATA_RES_ACCEPTED) return 0;
+ // wait for card to complete write programming
+ for (uint16_t retry = 0; spiRec() != 0XFF ; retry++) {
+ if (retry == 0XFFFF) {
+ spiSSHigh();
+ return 0;
+ }
+ }
+ spiSSHigh();
+ return 1;
+#else //FAT16_WRITE_SUPPORT
+ return 0;
+#endif // FAT16_WRITE_SUPPORT
+}
+#if SD_CARD_READ_REG_SUPPORT
+uint8_t SdCard::readReg(uint8_t cmd, uint8_t *dst, uint16_t count)
+{
+ spiSSLow();
+ if (cardCommand(cmd, 0)) {
+ spiSSHigh();
+ return 0;
+ }
+ return readTransfer(dst, count);
+}
+#endif//SD_CARD_READ_REG_SUPPORT
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/SdCard.h b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/SdCard.h
new file mode 100644
index 00000000..3b88cde3
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/SdCard.h
@@ -0,0 +1,43 @@
+/* Arduino FAT16 Library
+ * Copyright (C) 2008 by William Greiman
+ *
+ * This file is part of the Arduino FAT16 Library
+ *
+ * This Library is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This Library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with the Arduino Fat16 Library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+#ifndef SdCard_h
+#define SdCard_h
+#include "BlockDevice.h"
+/**
+ * \class SdCard
+ * \brief Hardware access class for SD flash cards
+ *
+ * Supports raw access to a standard SD flash memory card.
+ *
+ */
+class SdCard : public BlockDevice {
+uint8_t readReg(uint8_t cmd, uint8_t *dst, uint16_t count);
+public:
+ uint32_t cardSize(void);
+ uint8_t init(void);
+ uint8_t readBlock(uint32_t block, uint8_t *dst);
+ uint8_t writeBlock(uint32_t block, uint8_t *src);
+ //debug functions
+#if SD_CARD_READ_REG_SUPPORT
+ void dmpCID(void);
+ void dmpCSD(void);
+#endif //SD_CARD_READ_REG_SUPPORT
+};
+#endif //SdCard_h \ No newline at end of file
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/SdInfo.h b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/SdInfo.h
new file mode 100644
index 00000000..73b4713f
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/SdInfo.h
@@ -0,0 +1,117 @@
+/* Arduino FAT16 Library
+ * Copyright (C) 2008 by William Greiman
+ *
+ * This file is part of the Arduino FAT16 Library
+ *
+ * This Library is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This Library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with the Arduino Fat16 Library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+#ifndef SdInfo_h
+#define SdInfo_h
+#include <stdint.h>
+//#include "sdio.h"
+//Based on the document:
+//
+//SD Specifications
+//Part 1
+//Physical Layer
+//Simplified Specification
+//Version 2.00
+//September 25, 2006
+//
+//www.sdcard.org/developers/tech/sdcard/pls/Simplified_Physical_Layer_Spec.pdf
+//
+typedef struct CID {
+ //byte 0
+ uint8_t mid;//Manufacturer ID
+ //byte 1-2
+ char oid[2];//OEM/Application ID
+ //byte 3-7
+ char pnm[5];//Product name
+ //byte 8
+ unsigned prv_m : 4;// Product revision n.m
+ unsigned prv_n : 4;
+ //byte 9-12
+ uint32_t psn;//Product serial number
+ //byte 13
+ unsigned mdt_year_high : 4;//Manufacturing date
+ unsigned reserved : 4;
+ //byte 14
+ unsigned mdt_month : 4;
+ unsigned mdt_year_low :4;
+ //byte 15
+ unsigned always1 : 1;
+ unsigned crc : 7;
+}cid_t;
+typedef struct CSD {
+ //byte 0
+ unsigned reserved1 : 6;
+ unsigned csd_ver : 2;
+ //byte 1
+ uint8_t taac;
+ //byte 2
+ uint8_t nsac;
+ //byte 3
+ uint8_t tran_speed;
+ //byte 4
+ uint8_t ccc_high;
+ //byte 5
+ unsigned read_bl_len : 4;
+ unsigned ccc_low : 4;
+// unsigned read_bl_len : 4;
+ //byte 6
+ unsigned c_size_high : 2;
+ unsigned reserved2 : 2;
+ unsigned dsr_imp : 1;
+ unsigned read_blk_misalign :1;
+ unsigned write_blk_misalign : 1;
+ unsigned read_bl_partial : 1;
+ //byte 7
+ uint8_t c_size_mid;
+ //byte 8
+ unsigned vdd_r_curr_max : 3;
+ unsigned vdd_r_curr_min : 3;
+ unsigned c_size_low :2;
+ //byte 9
+ unsigned c_size_mult_high : 2;
+ unsigned vdd_w_cur_max : 3;
+ unsigned vdd_w_curr_min : 3;
+ //byte 10
+ unsigned sector_size_high : 6;
+ unsigned erase_blk_en : 1;
+ unsigned c_size_mult_low : 1;
+ //byte 11
+ unsigned wp_grp_size : 7;
+ unsigned sector_size_low : 1;
+ //byte 12
+ unsigned write_bl_len_high : 2;
+ unsigned r2w_factor : 3;
+ unsigned reserved3 : 2;
+ unsigned wp_grp_enable : 1;
+ //byte 13
+ unsigned reserved4 : 5;
+ unsigned write_partial : 1;
+ unsigned write_bl_len_low : 2;
+ //byte 14
+ unsigned reserved5: 2;
+ unsigned file_format : 2;
+ unsigned tmp_write_protect : 1;
+ unsigned perm_write_protect : 1;
+ unsigned copy : 1;
+ unsigned file_format_grp : 1;
+ //byte 15
+ unsigned always1 : 1;
+ unsigned crc : 7;
+}csd_t;
+#endif //SdInfo_h
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/clean.bat b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/clean.bat
new file mode 100644
index 00000000..0f732cbd
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/clean.bat
@@ -0,0 +1 @@
+del *.o \ No newline at end of file
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/GPSLogger_mem/GPSLogger_mem.pde b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/GPSLogger_mem/GPSLogger_mem.pde
new file mode 100644
index 00000000..47848b75
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/GPSLogger_mem/GPSLogger_mem.pde
@@ -0,0 +1,304 @@
+// this is a generic logger that does checksum testing so the data written should be always good
+// Assumes a sirf III chipset logger attached to pin 0 and 1
+
+#include "AF_SDLog.h"
+#include "util.h"
+#include <avr/pgmspace.h>
+#include <avr/sleep.h>
+// this function will return the number of bytes currently free in RAM
+int freeRam(void)
+{
+ extern int __bss_end;
+ extern int *__brkval;
+ int free_memory;
+ if((int)__brkval == 0) {
+ free_memory = ((int)&free_memory) - ((int)&__bss_end);
+ }
+ else {
+ free_memory = ((int)&free_memory) - ((int)__brkval);
+ }
+ return free_memory;
+}
+
+// power saving modes
+#define SLEEPDELAY 0 // how long to sleep before reading another NMEA sentence
+#define TURNOFFGPS 0 // probably only want to do this if the sleep delay > 60 or so
+#define LOG_RMC_FIXONLY 1 // log only when we get RMC's with fix?
+
+AF_SDLog card;
+File f;
+
+#define led1Pin 4 // LED1 connected to digital pin 4
+#define led2Pin 3 // LED2 connected to digital pin 3
+#define powerPin 2 // GPS power control
+
+// set the RX_BUFFER_SIZE to 32!
+#define BUFFSIZE 75 // we buffer one NMEA sentense at a time, 83 bytes is longer than the max length
+char buffer[BUFFSIZE]; // this is the double buffer
+uint8_t bufferidx = 0;
+
+#define LOG_RMC 1 // essential location data
+#define RMC_ON "$PSRF103,4,0,1,1*21\r\n" // the command we send to turn RMC on (1 hz rate)
+//#define RMC_ON "$PSRF103,4,0,10,1*11\r\n" // 1/30 hz
+#define RMC_OFF "$PSRF103,4,0,0,1*20\r\n" // the command we send to turn RMC off
+
+#define LOG_GGA 0 // contains fix, hdop & vdop data
+#define GGA_ON "$PSRF103,0,0,1,1*25\r\n" // the command we send to turn GGA on (1 hz rate)
+#define GGA_OFF "$PSRF103,0,0,0,1*24\r\n" // the command we send to turn GGA off
+
+#define LOG_GSA 0 // satelite data
+#define GSA_ON "$PSRF103,2,0,1,1*27\r\n" // the command we send to turn GSA on (1 hz rate)
+#define GSA_OFF "$PSRF103,2,0,0,1*26\r\n" // the command we send to turn GSA off
+
+#define LOG_GSV 0 // detailed satellite data
+#define GSV_ON "$PSRF103,3,0,1,1*26\r\n" // the command we send to turn GSV on (1 hz rate)
+#define GSV_OFF "$PSRF103,3,0,0,1*27\r\n" // the command we send to turn GSV off
+
+#define LOG_GLL 0 // Loran-compatibility data
+// this isnt output by default
+
+#define USE_WAAS 1 // useful in US, but slower fix
+#define WAAS_ON "$PSRF151,1*3F\r\n" // the command for turning on WAAS
+#define WAAS_OFF "$PSRF151,0*3E\r\n" // the command for turning off WAAS
+
+
+uint8_t fix = 0; // current fix data
+
+// read a Hex value and return the decimal equivalent
+uint8_t parseHex(char c) {
+ if (c < '0')
+ return 0;
+ if (c <= '9')
+ return c - '0';
+ if (c < 'A')
+ return 0;
+ if (c <= 'F')
+ return (c - 'A')+10;
+}
+
+uint8_t i;
+
+// blink out an error code
+void error(uint8_t errno) {
+ while(1) {
+ for (i=0; i<errno; i++) {
+ digitalWrite(led1Pin, HIGH);
+ digitalWrite(led2Pin, HIGH);
+ delay(100);
+ digitalWrite(led1Pin, LOW);
+ digitalWrite(led2Pin, LOW);
+ delay(100);
+ }
+ for (; i<10; i++) {
+ delay(200);
+ }
+ }
+}
+
+void setup() // run once, when the sketch starts
+{
+ WDTCSR |= (1 << WDCE) | (1 << WDE);
+ WDTCSR = 0;
+
+
+ Serial.begin(4800);
+ putstring_nl("GPSlogger");
+ Serial.println(freeRam());
+ pinMode(led1Pin, OUTPUT); // sets the digital pin as output
+ pinMode(led2Pin, OUTPUT); // sets the digital pin as output
+ pinMode(powerPin, OUTPUT);
+ digitalWrite(powerPin, LOW);
+
+ if (!card.init_card()) {
+ putstring_nl("Card init. failed!");
+ error(1);
+ }
+ if (!card.open_partition()) {
+ putstring_nl("No partition!");
+ error(2);
+ }
+ if (!card.open_filesys()) {
+ putstring_nl("Can't open filesys");
+ error(3);
+ }
+ if (!card.open_dir("/")) {
+ putstring_nl("Can't open /");
+ error(4);
+ }
+
+ strcpy(buffer, "GPSLOG00.TXT");
+ for (buffer[6] = '0'; buffer[6] <= '9'; buffer[6]++) {
+ for (buffer[7] = '0'; buffer[7] <= '9'; buffer[7]++) {
+ //putstring("\n\rtrying to open ");Serial.println(buffer);
+ f = card.open_file(buffer);
+ if (!f)
+ break; // found a file!
+ card.close_file(f);
+ }
+ if (!f)
+ break;
+ }
+
+ if(!card.create_file(buffer)) {
+ putstring("couldnt create "); Serial.println(buffer);
+ error(5);
+ }
+ f = card.open_file(buffer);
+ if (!f) {
+ putstring("error opening "); Serial.println(buffer);
+ card.close_file(f);
+ error(6);
+ }
+ putstring("writing to "); Serial.println(buffer);
+ putstring_nl("ready!");
+
+delay(1000);
+
+ putstring("\r\n");
+#if USE_WAAS == 1
+ putstring(WAAS_ON); // turn on WAAS
+#else
+ putstring(WAAS_OFF; // turn on WAAS
+#endif
+
+#if LOG_RMC == 1
+ putstring(RMC_ON); // turn on RMC
+#else
+ putstring(RMC_OFF); // turn off RMC
+#endif
+
+#if LOG_GSV == 1
+ putstring(GSV_ON); // turn on GSV
+#else
+ putstring(GSV_OFF); // turn off GSV
+#endif
+
+#if LOG_GSA == 1
+ putstring(GSA_ON); // turn on GSA
+#else
+ putstring(GSA_OFF); // turn off GSA
+#endif
+
+#if LOG_GGA == 1
+ putstring(GGA_ON); // turn on GGA
+#else
+ putstring(GGA_OFF); // turn off GGA
+#endif
+}
+
+void loop() // run over and over again
+{
+ //Serial.println(Serial.available(), DEC);
+ char c;
+ uint8_t sum;
+
+ // read one 'line'
+ if (Serial.available()) {
+ c = Serial.read();
+ //Serial.print(c, BYTE);
+ if (bufferidx == 0) {
+ while (c != '$')
+ c = Serial.read(); // wait till we get a $
+ }
+ buffer[bufferidx] = c;
+
+ //Serial.print(c, BYTE);
+ if (c == '\n') {
+ //putstring_nl("EOL");
+ //Serial.print(buffer);
+ buffer[bufferidx+1] = 0; // terminate it
+
+ if (buffer[bufferidx-4] != '*') {
+ // no checksum?
+ Serial.print('*', BYTE);
+ bufferidx = 0;
+ return;
+ }
+ // get checksum
+ sum = parseHex(buffer[bufferidx-3]) * 16;
+ sum += parseHex(buffer[bufferidx-2]);
+
+ // check checksum
+ for (i=1; i < (bufferidx-4); i++) {
+ sum ^= buffer[i];
+ }
+ if (sum != 0) {
+ //putstring_nl("Cxsum mismatch");
+ Serial.print('~', BYTE);
+ bufferidx = 0;
+ return;
+ }
+ // got good data!
+
+ if (strstr(buffer, "GPRMC")) {
+ // find out if we got a fix
+ char *p = buffer;
+ p = strchr(p, ',')+1;
+ p = strchr(p, ',')+1; // skip to 3rd item
+
+ if (p[0] == 'V') {
+ digitalWrite(led1Pin, LOW);
+ fix = 0;
+ } else {
+ digitalWrite(led1Pin, HIGH);
+ fix = 1;
+ }
+ }
+#if LOG_RMC_FIXONLY
+ if (!fix) {
+ Serial.print('_', BYTE);
+ bufferidx = 0;
+ return;
+ }
+#endif
+ // rad. lets log it!
+ //Serial.print(buffer);
+ Serial.print('#', BYTE);
+ digitalWrite(led2Pin, HIGH); // sets the digital pin as output
+ // write both CR and LF (mod by Bill Greiman)
+ bufferidx++;
+ if(card.write_file(f, (uint8_t *) buffer, bufferidx) != bufferidx) {
+ putstring_nl("can't write!");
+ return;
+ }
+ digitalWrite(led2Pin, LOW);
+
+ bufferidx = 0;
+
+ // turn off GPS module?
+ if (TURNOFFGPS) {
+ digitalWrite(powerPin, HIGH);
+ }
+ sleep_sec(SLEEPDELAY);
+ digitalWrite(powerPin, LOW);
+
+ return;
+ }
+ bufferidx++;
+ if (bufferidx == BUFFSIZE-1) {
+ Serial.print('!', BYTE);
+ bufferidx = 0;
+ }
+ } else {
+
+ }
+
+}
+
+void sleep_sec(uint8_t x) {
+ while (x--) {
+ // set the WDT to wake us up!
+ WDTCSR |= (1 << WDCE) | (1 << WDE); // enable watchdog & enable changing it
+ WDTCSR = (1<< WDE) | (1 <<WDP2) | (1 << WDP1);
+ WDTCSR |= (1<< WDIE);
+ set_sleep_mode(SLEEP_MODE_PWR_DOWN);
+ sleep_enable();
+ sleep_mode();
+ sleep_disable();
+ }
+}
+
+SIGNAL(SIG_WATCHDOG_TIMEOUT) {
+ WDTCSR |= (1 << WDCE) | (1 << WDE);
+ WDTCSR = 0;
+}
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/GPStest/GPStest.pde b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/GPStest/GPStest.pde
new file mode 100644
index 00000000..c07232c5
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/GPStest/GPStest.pde
@@ -0,0 +1,303 @@
+// this is a generic logger that does checksum testing so the data written should be always good
+// Assumes a sirf III chipset logger attached to pin 0 and 1
+#include <avr/pgmspace.h>
+#include <avr/sleep.h>
+#include "SdCard.h"
+#include "Fat16.h"
+
+// this function will return the number of bytes currently free in RAM
+int freeRam(void)
+{
+ extern int __bss_end;
+ extern int *__brkval;
+ int free_memory;
+ if((int)__brkval == 0) {
+ free_memory = ((int)&free_memory) - ((int)&__bss_end);
+ }
+ else {
+ free_memory = ((int)&free_memory) - ((int)__brkval);
+ }
+ return free_memory;
+}
+
+void ROM_putstring(const char *str, uint8_t nl) {
+ uint8_t i;
+
+ for (i=0; pgm_read_byte(&str[i]); i++) {
+ Serial.print(pgm_read_byte(&str[i]));
+ }
+ if (nl) {
+ Serial.print('\n'); Serial.print('\r');
+ }
+}
+#define putstring(x) ROM_putstring(PSTR(x), 0)
+#define putstring_nl(x) ROM_putstring(PSTR(x), 1)
+
+void sleep_sec(uint8_t x);
+
+// power saving modes
+#define SLEEPDELAY 0 // how long to sleep before reading another NMEA sentence
+#define TURNOFFGPS 0 // probably only want to do this if the sleep delay > 60 or so
+#define LOG_RMC_FIXONLY 1 // log only when we get RMC's with fix?
+
+SdCard card;
+Fat16 fd;
+
+#define led1Pin 4 // LED1 connected to digital pin 4
+#define led2Pin 3 // LED2 connected to digital pin 3
+#define powerPin 2 // GPS power control
+
+// set the RX_BUFFER_SIZE to 32!
+#define BUFFSIZE 75 // we buffer one NMEA sentense at a time, 83 bytes is longer than the max length
+char buffer[BUFFSIZE]; // this is the double buffer
+uint8_t bufferidx = 0;
+
+#define LOG_RMC 1 // essential location data
+#define RMC_ON "$PSRF103,4,0,1,1*21\r\n" // the command we send to turn RMC on (1 hz rate)
+//#define RMC_ON "$PSRF103,4,0,10,1*11\r\n" // 1/30 hz
+#define RMC_OFF "$PSRF103,4,0,0,1*20\r\n" // the command we send to turn RMC off
+
+#define LOG_GGA 0 // contains fix, hdop & vdop data
+#define GGA_ON "$PSRF103,0,0,1,1*25\r\n" // the command we send to turn GGA on (1 hz rate)
+#define GGA_OFF "$PSRF103,0,0,0,1*24\r\n" // the command we send to turn GGA off
+
+#define LOG_GSA 0 // satelite data
+#define GSA_ON "$PSRF103,2,0,1,1*27\r\n" // the command we send to turn GSA on (1 hz rate)
+#define GSA_OFF "$PSRF103,2,0,0,1*26\r\n" // the command we send to turn GSA off
+
+#define LOG_GSV 0 // detailed satellite data
+#define GSV_ON "$PSRF103,3,0,1,1*26\r\n" // the command we send to turn GSV on (1 hz rate)
+#define GSV_OFF "$PSRF103,3,0,0,1*27\r\n" // the command we send to turn GSV off
+
+#define LOG_GLL 0 // Loran-compatibility data
+// this isnt output by default
+
+#define USE_WAAS 1 // useful in US, but slower fix
+#define WAAS_ON "$PSRF151,1*3F\r\n" // the command for turning on WAAS
+#define WAAS_OFF "$PSRF151,0*3E\r\n" // the command for turning off WAAS
+
+
+uint8_t fix = 0; // current fix data
+
+// read a Hex value and return the decimal equivalent
+uint8_t parseHex(char c) {
+ if (c < '0')
+ return 0;
+ if (c <= '9')
+ return c - '0';
+ if (c < 'A')
+ return 0;
+ if (c <= 'F')
+ return (c - 'A')+10;
+}
+
+uint8_t i;
+
+// blink out an error code
+void error(uint8_t errno) {
+ while(1) {
+ for (i=0; i<errno; i++) {
+ digitalWrite(led1Pin, HIGH);
+ digitalWrite(led2Pin, HIGH);
+ delay(100);
+ digitalWrite(led1Pin, LOW);
+ digitalWrite(led2Pin, LOW);
+ delay(100);
+ }
+ for (; i<10; i++) {
+ delay(200);
+ }
+ }
+}
+
+void setup() // run once, when the sketch starts
+{
+ WDTCSR |= (1 << WDCE) | (1 << WDE);
+ WDTCSR = 0;
+
+ Serial.begin(4800);
+ Serial.println();
+ putstring_nl("GPStest");
+ putstring("Free RAM: ");
+ Serial.println(freeRam());
+ pinMode(led1Pin, OUTPUT); // sets the digital pin as output
+ pinMode(led2Pin, OUTPUT); // sets the digital pin as output
+ pinMode(powerPin, OUTPUT);
+ digitalWrite(powerPin, LOW);
+ if (!card.init()) {
+ putstring_nl("sdInit failed!");
+ error(1);
+ }
+ if (!Fat16::init(card, 1)) {
+ if (!Fat16::init(card,0)) {
+ putstring_nl("No partition!");
+ error(2);
+ }
+ }
+
+ strcpy(buffer, "GPSTST00.TXT");
+ for (i = 0; i < 100; i++) {
+ buffer[6] = '0' + i/10;
+ buffer[7] = '0' + i%10;
+ if (fd.create(buffer)) break;
+ }
+
+ if(!fd.isOpen()) {
+ putstring("couldnt create "); Serial.println(buffer);
+ error(3);
+ }
+
+ putstring("writing to "); Serial.println(buffer);
+ putstring_nl("ready!");
+
+delay(1000);
+
+ putstring("\r\n");
+#if USE_WAAS == 1
+ putstring(WAAS_ON); // turn on WAAS
+#else
+ putstring(WAAS_OFF; // turn on WAAS
+#endif
+
+#if LOG_RMC == 1
+ putstring(RMC_ON); // turn on RMC
+#else
+ putstring(RMC_OFF); // turn off RMC
+#endif
+
+#if LOG_GSV == 1
+ putstring(GSV_ON); // turn on GSV
+#else
+ putstring(GSV_OFF); // turn off GSV
+#endif
+
+#if LOG_GSA == 1
+ putstring(GSA_ON); // turn on GSA
+#else
+ putstring(GSA_OFF); // turn off GSA
+#endif
+
+#if LOG_GGA == 1
+ putstring(GGA_ON); // turn on GGA
+#else
+ putstring(GGA_OFF); // turn off GGA
+#endif
+}
+
+void loop() // run over and over again
+{
+ //Serial.println(Serial.available(), DEC);
+ char c;
+ uint8_t sum;
+
+ // read one 'line'
+ if (Serial.available()) {
+ c = Serial.read();
+ //Serial.print(c, BYTE);
+ if (bufferidx == 0) {
+ while (c != '$')
+ c = Serial.read(); // wait till we get a $
+ }
+ buffer[bufferidx] = c;
+
+ //Serial.print(c, BYTE);
+ if (c == '\n') {
+ //putstring_nl("EOL");
+ //Serial.print(buffer);
+ buffer[bufferidx+1] = 0; // terminate it
+
+ if (buffer[bufferidx-4] != '*') {
+ // no checksum?
+ Serial.print('*', BYTE);
+ bufferidx = 0;
+ return;
+ }
+ // get checksum
+ sum = parseHex(buffer[bufferidx-3]) * 16;
+ sum += parseHex(buffer[bufferidx-2]);
+
+ // check checksum
+ for (i=1; i < (bufferidx-4); i++) {
+ sum ^= buffer[i];
+ }
+ if (sum != 0) {
+ //putstring_nl("Cxsum mismatch");
+ Serial.print('~', BYTE);
+ bufferidx = 0;
+ return;
+ }
+ // got good data!
+
+ if (strstr(buffer, "GPRMC")) {
+ // find out if we got a fix
+ char *p = buffer;
+ p = strchr(p, ',')+1;
+ p = strchr(p, ',')+1; // skip to 3rd item
+
+ if (p[0] == 'V') {
+ digitalWrite(led1Pin, LOW);
+ fix = 0;
+ } else {
+ digitalWrite(led1Pin, HIGH);
+ fix = 1;
+ }
+ }
+#if LOG_RMC_FIXONLY
+ if (!fix) {
+ Serial.print('_', BYTE);
+ bufferidx = 0;
+ return;
+ }
+#endif
+ // rad. lets log it!
+ //Serial.print(buffer);
+ Serial.print('#', BYTE);
+ digitalWrite(led2Pin, HIGH); // sets the digital pin as output
+ // write both CR and LF (mod by Bill Greiman)
+ bufferidx++;
+ if(fd.write((uint8_t *)buffer, bufferidx) != bufferidx) {
+ putstring_nl("can't write!");
+ return;
+ }
+ fd.sync();
+
+ digitalWrite(led2Pin, LOW);
+
+ bufferidx = 0;
+
+ // turn off GPS module?
+ if (TURNOFFGPS) {
+ digitalWrite(powerPin, HIGH);
+ }
+ sleep_sec(SLEEPDELAY);
+ digitalWrite(powerPin, LOW);
+
+ return;
+ }
+ bufferidx++;
+ if (bufferidx == BUFFSIZE-1) {
+ Serial.print('!', BYTE);
+ bufferidx = 0;
+ }
+ } else {
+
+ }
+
+}
+void sleep_sec(uint8_t x) {
+ while (x--) {
+ // set the WDT to wake us up!
+ WDTCSR |= (1 << WDCE) | (1 << WDE); // enable watchdog & enable changing it
+ WDTCSR = (1<< WDE) | (1 <<WDP2) | (1 << WDP1);
+ WDTCSR |= (1<< WDIE);
+ set_sleep_mode(SLEEP_MODE_PWR_DOWN);
+ sleep_enable();
+ sleep_mode();
+ sleep_disable();
+ }
+}
+
+SIGNAL(SIG_WATCHDOG_TIMEOUT) {
+ WDTCSR |= (1 << WDCE) | (1 << WDE);
+ WDTCSR = 0;
+}
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/clean.bat b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/clean.bat
new file mode 100644
index 00000000..782a4986
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/clean.bat
@@ -0,0 +1,2 @@
+rm -r */applet
+pause \ No newline at end of file
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16info/applet/fat16info.cpp b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16info/applet/fat16info.cpp
new file mode 100644
index 00000000..0f15ac6a
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16info/applet/fat16info.cpp
@@ -0,0 +1,227 @@
+/*
+ * cardInfo.pde
+ */
+
+#include <avr/pgmspace.h>
+#include "Fat16.h"
+#include "SdCard.h"
+
+#include "WProgram.h"
+void printProgStr(const char *str);
+void printProgStrln(const char *str);
+uint8_t partitionInfo(void);
+uint8_t volumeInfo(uint8_t part);
+void setup();
+void loop();
+SdCard card;
+Fat16 file;
+/*
+ * print PROGMEM string
+ */
+ void printProgStr(const char *str)
+{
+ uint8_t b;
+ while((b = pgm_read_byte(str++)))Serial.print(b);
+}
+/*
+ * print PROGMEM string and CR LF
+ */
+void printProgStrln(const char *str)
+{
+ printProgStr(str);
+ Serial.println();
+}
+// macros to use PSTR
+#define progPrint(str) printProgStr(PSTR(str))
+#define progPrintln(str) printProgStrln(PSTR(str))
+/*
+ * print partition info
+ */
+uint8_t partitionInfo(void)
+{
+ mbr_t *mbr = (mbr_t *)Fat16::dbgCacheBlock(0);
+ if (mbr == 0) {
+ progPrintln("partitionInfo: cacheBlock(0) failed");
+ return 0;
+ }
+ uint8_t good = 0;
+ for (uint8_t i = 0; i < 4; i++) {
+ if ((mbr->part[i].boot & 0X7F) != 0 ||
+ (mbr->part[i].firstSector == 0 && mbr->part[i].totalSectors != 0)) {
+ return 0;
+ }
+ if (mbr->part[i].firstSector != 0 && mbr->part[i].totalSectors != 0) {
+ good = 1;
+ }
+ }
+ if (!good) return 0;
+ progPrintln("Partition Table:");
+ progPrintln("part,boot,start,size");
+ for (uint8_t i = 0; i < 4; i++) {
+ Serial.print(i+1);
+ progPrint(",0X");
+ Serial.print(mbr->part[i].boot, HEX);
+ Serial.print(',');
+ Serial.print(mbr->part[i].firstSector);
+ Serial.print(',');
+ Serial.println(mbr->part[i].totalSectors);
+ }
+ Serial.println();
+ return 1;
+}
+/*
+ * print info for FAT volume
+ */
+uint8_t volumeInfo(uint8_t part)
+{
+ uint8_t volumeType = 0;
+ if (part > 4) {
+ progPrintln("volumeInfo: invalid partition number");
+ return 0;
+ }
+ mbr_t *mbr = (mbr_t *)Fat16::dbgCacheBlock(0);
+ if (mbr == 0) {
+ progPrintln("volumeInfo: cacheBlock(0) failed");
+ return 0;
+ }
+ bpb_t *bpb = &(((fbs_t *)mbr)->bpb);
+ if (part != 0) {
+ if ((mbr->part[part-1].boot & 0X7F) !=0 ||
+ mbr->part[part-1].totalSectors < 100 ||
+ mbr->part[part-1].firstSector == 0) {
+ return 0;
+ }
+ fbs_t *fbs = (fbs_t *)Fat16::dbgCacheBlock(mbr->part[part-1].firstSector);
+ if (fbs == 0) {
+ progPrintln("volumeInfo cacheBlock(fat boot sector) failed");
+ return 0;
+ }
+ if (fbs->bootSectorSig0 != 0X55 || fbs->bootSectorSig1 != 0XAA) {
+ progPrintln("Bad FAT boot sector signature for partition: ");
+ Serial.println(part, DEC);
+ return 0;
+ }
+ bpb = &fbs->bpb;
+ }
+ if (bpb->bytesPerSector != 512 ||
+ bpb->fatCount == 0 ||
+ bpb->reservedSectorCount == 0 ||
+ bpb->sectorsPerCluster == 0 ||
+ (bpb->sectorsPerCluster & (bpb->sectorsPerCluster - 1)) != 0) {
+ // not valid FAT volume
+ return 0;
+ }
+ uint32_t totalBlocks = bpb->totalSectors16 ? bpb->totalSectors16 : bpb->totalSectors32;
+ uint32_t fatSize = bpb->sectorsPerFat16;
+ if (fatSize == 0) {
+ // first entry of FAT32 structure is FatSize32
+ // don't ask why this works
+ fatSize = *(&bpb->totalSectors32 + 1);
+ }
+ uint16_t rootDirSectors = (32*bpb->rootDirEntryCount + 511)/512;
+ uint32_t firstDataSector = bpb->reservedSectorCount +
+ bpb->fatCount*fatSize + rootDirSectors;
+ uint32_t dataBlockCount = totalBlocks - firstDataSector;
+ uint32_t clusterCount = dataBlockCount/bpb->sectorsPerCluster;
+ if (part) {
+ progPrint("FAT Volume info for MBR partition: ");
+ Serial.println(part, DEC);
+ }
+ else {
+ progPrintln("FAT Volume is super floppy format");
+ }
+ if (clusterCount < 4085) {
+ volumeType = 12;
+ }
+ else if (clusterCount < 65525) {
+ volumeType = 16;
+ }
+ else {
+ volumeType = 32;
+ }
+ progPrint("Volume is FAT");
+ Serial.println(volumeType, DEC);
+ progPrint("clusterSize: ");
+ Serial.println(bpb->sectorsPerCluster, DEC);
+ progPrint("clusterCount: ");
+ Serial.println(clusterCount);
+ progPrint("fatCount: ");
+ Serial.println(bpb->fatCount, DEC);
+ progPrint("fatSize: ");
+ Serial.println(fatSize);
+ progPrint("totalBlocks: ");
+ Serial.println(totalBlocks);
+ Serial.println();
+ return volumeType;
+}
+void setup()
+{
+ int8_t part = -1;
+ Serial.begin(9600);
+ Serial.println();
+ if (!card.init()) {
+ progPrintln("card.init failed");
+ progPrintln("May be SDHC card");
+ while(1);
+ }
+ uint32_t size = card.cardSize();
+ progPrint("Card Size(blocks): ");
+ Serial.println(size);
+ if (size < 1000 || size > 5000000) {
+ progPrint("Quitting, bad size");
+ while(1);
+ }
+ Serial.println();
+ Fat16::dbgSetDev(card);
+ if (partitionInfo()) {
+ for (uint8_t i = 1; i < 5; i++) {
+ if (volumeInfo(i) == 16) part = i;
+ }
+ }
+ else {
+ progPrintln("Card is not MBR trying super floppy");
+ if (volumeInfo(0) == 16) part = 0;
+ }
+ if (part >= 0) {
+ if (!Fat16::init(card, part)) {
+ progPrintln("Can't init volume");
+ while(1);
+ }
+ uint16_t index = 0;
+ dir_t *d;
+ progPrintln("Root Directory:");
+ progPrintln("name,ext,attr,size");
+ uint8_t nd = 0;
+ while ((d = Fat16::readDir(index)) && nd++ < 20) {
+ for (uint8_t i = 0; i < 11; i++) {
+ if (i == 8)Serial.print(' ');
+ Serial.print((char)d->name[i]);
+ }
+ Serial.print(' ');
+ Serial.print(d->attributes, HEX);
+ Serial.print(' ');
+ Serial.println(d->fileSize);
+ index++;
+ }
+ }
+ else {
+ progPrintln("FAT16 volume not found");
+ }
+}
+
+void loop()
+{
+}
+
+int main(void)
+{
+ init();
+
+ setup();
+
+ for (;;)
+ loop();
+
+ return 0;
+}
+
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16info/fat16info.pde b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16info/fat16info.pde
new file mode 100644
index 00000000..bafb301c
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16info/fat16info.pde
@@ -0,0 +1,207 @@
+/*
+ * cardInfo.pde
+ */
+
+#include <avr/pgmspace.h>
+#include "Fat16.h"
+#include "SdCard.h"
+
+SdCard card;
+Fat16 file;
+/*
+ * print PROGMEM string
+ */
+ void printProgStr(const char *str)
+{
+ uint8_t b;
+ while((b = pgm_read_byte(str++)))Serial.print(b);
+}
+/*
+ * print PROGMEM string and CR LF
+ */
+void printProgStrln(const char *str)
+{
+ printProgStr(str);
+ Serial.println();
+}
+// macros to use PSTR
+#define progPrint(str) printProgStr(PSTR(str))
+#define progPrintln(str) printProgStrln(PSTR(str))
+/*
+ * print partition info
+ */
+uint8_t partitionInfo(void)
+{
+ mbr_t *mbr = (mbr_t *)Fat16::dbgCacheBlock(0);
+ if (mbr == 0) {
+ progPrintln("partitionInfo: cacheBlock(0) failed");
+ return 0;
+ }
+ uint8_t good = 0;
+ for (uint8_t i = 0; i < 4; i++) {
+ if ((mbr->part[i].boot & 0X7F) != 0 ||
+ (mbr->part[i].firstSector == 0 && mbr->part[i].totalSectors != 0)) {
+ return 0;
+ }
+ if (mbr->part[i].firstSector != 0 && mbr->part[i].totalSectors != 0) {
+ good = 1;
+ }
+ }
+ if (!good) return 0;
+ progPrintln("Partition Table:");
+ progPrintln("part,boot,start,size");
+ for (uint8_t i = 0; i < 4; i++) {
+ Serial.print(i+1);
+ progPrint(",0X");
+ Serial.print(mbr->part[i].boot, HEX);
+ Serial.print(',');
+ Serial.print(mbr->part[i].firstSector);
+ Serial.print(',');
+ Serial.println(mbr->part[i].totalSectors);
+ }
+ Serial.println();
+ return 1;
+}
+/*
+ * print info for FAT volume
+ */
+uint8_t volumeInfo(uint8_t part)
+{
+ uint8_t volumeType = 0;
+ if (part > 4) {
+ progPrintln("volumeInfo: invalid partition number");
+ return 0;
+ }
+ mbr_t *mbr = (mbr_t *)Fat16::dbgCacheBlock(0);
+ if (mbr == 0) {
+ progPrintln("volumeInfo: cacheBlock(0) failed");
+ return 0;
+ }
+ bpb_t *bpb = &(((fbs_t *)mbr)->bpb);
+ if (part != 0) {
+ if ((mbr->part[part-1].boot & 0X7F) !=0 ||
+ mbr->part[part-1].totalSectors < 100 ||
+ mbr->part[part-1].firstSector == 0) {
+ return 0;
+ }
+ fbs_t *fbs = (fbs_t *)Fat16::dbgCacheBlock(mbr->part[part-1].firstSector);
+ if (fbs == 0) {
+ progPrintln("volumeInfo cacheBlock(fat boot sector) failed");
+ return 0;
+ }
+ if (fbs->bootSectorSig0 != 0X55 || fbs->bootSectorSig1 != 0XAA) {
+ progPrintln("Bad FAT boot sector signature for partition: ");
+ Serial.println(part, DEC);
+ return 0;
+ }
+ bpb = &fbs->bpb;
+ }
+ if (bpb->bytesPerSector != 512 ||
+ bpb->fatCount == 0 ||
+ bpb->reservedSectorCount == 0 ||
+ bpb->sectorsPerCluster == 0 ||
+ (bpb->sectorsPerCluster & (bpb->sectorsPerCluster - 1)) != 0) {
+ // not valid FAT volume
+ return 0;
+ }
+ uint32_t totalBlocks = bpb->totalSectors16 ? bpb->totalSectors16 : bpb->totalSectors32;
+ uint32_t fatSize = bpb->sectorsPerFat16;
+ if (fatSize == 0) {
+ // first entry of FAT32 structure is FatSize32
+ // don't ask why this works
+ fatSize = *(&bpb->totalSectors32 + 1);
+ }
+ uint16_t rootDirSectors = (32*bpb->rootDirEntryCount + 511)/512;
+ uint32_t firstDataSector = bpb->reservedSectorCount +
+ bpb->fatCount*fatSize + rootDirSectors;
+ uint32_t dataBlockCount = totalBlocks - firstDataSector;
+ uint32_t clusterCount = dataBlockCount/bpb->sectorsPerCluster;
+ if (part) {
+ progPrint("FAT Volume info for MBR partition: ");
+ Serial.println(part, DEC);
+ }
+ else {
+ progPrintln("FAT Volume is super floppy format");
+ }
+ if (clusterCount < 4085) {
+ volumeType = 12;
+ }
+ else if (clusterCount < 65525) {
+ volumeType = 16;
+ }
+ else {
+ volumeType = 32;
+ }
+ progPrint("Volume is FAT");
+ Serial.println(volumeType, DEC);
+ progPrint("clusterSize: ");
+ Serial.println(bpb->sectorsPerCluster, DEC);
+ progPrint("clusterCount: ");
+ Serial.println(clusterCount);
+ progPrint("fatCount: ");
+ Serial.println(bpb->fatCount, DEC);
+ progPrint("fatSize: ");
+ Serial.println(fatSize);
+ progPrint("totalBlocks: ");
+ Serial.println(totalBlocks);
+ Serial.println();
+ return volumeType;
+}
+void setup()
+{
+ int8_t part = -1;
+ Serial.begin(9600);
+ Serial.println();
+ if (!card.init()) {
+ progPrintln("card.init failed");
+ progPrintln("May be SDHC card");
+ while(1);
+ }
+ uint32_t size = card.cardSize();
+ progPrint("Card Size(blocks): ");
+ Serial.println(size);
+ if (size < 1000 || size > 5000000) {
+ progPrint("Quitting, bad size");
+ while(1);
+ }
+ Serial.println();
+ Fat16::dbgSetDev(card);
+ if (partitionInfo()) {
+ for (uint8_t i = 1; i < 5; i++) {
+ if (volumeInfo(i) == 16) part = i;
+ }
+ }
+ else {
+ progPrintln("Card is not MBR trying super floppy");
+ if (volumeInfo(0) == 16) part = 0;
+ }
+ if (part >= 0) {
+ if (!Fat16::init(card, part)) {
+ progPrintln("Can't init volume");
+ while(1);
+ }
+ uint16_t index = 0;
+ dir_t *d;
+ progPrintln("Root Directory:");
+ progPrintln("name,ext,attr,size");
+ uint8_t nd = 0;
+ while ((d = Fat16::readDir(index)) && nd++ < 20) {
+ for (uint8_t i = 0; i < 11; i++) {
+ if (i == 8)Serial.print(' ');
+ Serial.print((char)d->name[i]);
+ }
+ Serial.print(' ');
+ Serial.print(d->attributes, HEX);
+ Serial.print(' ');
+ Serial.println(d->fileSize);
+ index++;
+ }
+ }
+ else {
+ progPrintln("FAT16 volume not found");
+ }
+}
+
+void loop()
+{
+}
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/applet/fat16print.cpp b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/applet/fat16print.cpp
new file mode 100644
index 00000000..b3b9ac12
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/applet/fat16print.cpp
@@ -0,0 +1,74 @@
+/*
+ * Print Example
+ *
+ * This sketch shows how to use the Arduino V12 Print class with Fat16
+ */
+#include "Fat16.h"
+#include "SdCard.h"
+
+#include "WProgram.h"
+void error(char *str);
+void setup(void);
+void loop(void);
+SdCard card;
+Fat16 file;
+
+void error(char *str)
+{
+ Serial.print("error: ");
+ Serial.println(str);
+ while(1);
+}
+
+void setup(void)
+{
+ Serial.begin(9600);
+ Serial.println();
+ Serial.println("Type any character to start");
+ while (!Serial.available());
+
+ // initialize the SD card
+ if (!card.init()) error("card.init");
+
+ // initialize a FAT16 volume
+ // Assume MBR volume and try partition one
+ if (!Fat16::init(card, 1)) {
+ // try super floppy
+ if (!Fat16::init(card, 0)) error("Fat16::init");
+ }
+ // create a new file
+ char name[] = "PRINT00.TXT";
+ for (uint8_t i = 0; i < 100; i++) {
+ name[5] = i/10 + '0';
+ name[6] = i%10 + '0';
+ if (file.create(name)) break;
+ }
+ if (!file.isOpen()) error ("file.create");
+ Serial.print("Printing to: ");
+ Serial.println(name);
+
+ // print 100 line to file
+ for (uint8_t i = 0; i < 100; i++) {
+ file.print("line ");
+ file.print(i, DEC);
+ file.print(" millis = ");
+ file.println(millis());
+ }
+ // force write of all data to the SD card
+ file.sync();
+ Serial.println("Done");
+}
+void loop(void){}
+
+int main(void)
+{
+ init();
+
+ setup();
+
+ for (;;)
+ loop();
+
+ return 0;
+}
+
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/applet/fat16print.elf b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/applet/fat16print.elf
new file mode 100644
index 00000000..d450ecbb
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/applet/fat16print.elf
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/applet/fat16print.hex b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/applet/fat16print.hex
new file mode 100644
index 00000000..81bba1ed
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/applet/fat16print.hex
@@ -0,0 +1,587 @@
+:100000000C9480000C94A8000C94A8000C94A800F8
+:100010000C94A8000C94A8000C94A8000C94A800C0
+:100020000C94A8000C94A8000C94A8000C94A800B0
+:100030000C94A8000C94A8000C94A8000C94A800A0
+:100040000C94A8000C94A8000C94800E0C94A800AA
+:100050000C94640D0C94A8000C94FE0C0C94A80055
+:100060000C94A8000C94A8000C94A8000C94A80070
+:100070000C94380D0C94A8000C94D00C7C3C3E5E83
+:100080002B3D3F2F5B5D3B2C2A225C000021242767
+:100090002A002225282B0020232629020202020200
+:1000A000020202040404040404040403030303031B
+:1000B0000303030101010101010101010204081010
+:1000C0002040800102040810204080010204081032
+:1000D000204080804020100804020100000001023E
+:1000E00000000000000000040307060000000000FC
+:1000F000000000000000000000000000D808C60951
+:1001000011241FBECFEFD0E1DEBFCDBF11E0A0E0D4
+:10011000B1E0E4E0F4E202C005900D92AE38B10720
+:10012000D9F714E0AEE8B1E001C01D92A53FB107D8
+:10013000E1F710E0C0E0D1E004C02297FE010E9488
+:10014000FC11CC3FD107C9F70E94B1090C940012F1
+:100150000C940000CF93DF93EC01DB0180E090E092
+:1001600020E2FD01E80FF91F208301968B309105F5
+:10017000C1F757E040E022C02E3219F08CE790E042
+:1001800007C05A3029F15AE048E018C0321701F18F
+:10019000FC01019634913323C9F75417C8F021327A
+:1001A000B8F02F37A8F4822F81568A3110F4622FCD
+:1001B0006052FD01E40FF11D60834F5F2991622FB2
+:1001C0002223D1F690E08C91803219F091E001C0A9
+:1001D00090E0892FDF91CF9108958091A503882326
+:1001E00011F481E00895A0918E01B0918F01ED91FD
+:1001F000FC91119740910001509101016091020121
+:10020000709103010280F381E02D25EA31E0CD01F8
+:100210000995882319F01092A50381E00895DF92D3
+:10022000EF92FF920F931F937B018C01D42E82E0FB
+:10023000481761F40E94ED008823D1F1E5EAF1E06E
+:10024000119283E0E53AF807D9F723C080910001C5
+:1002500090910101A0910201B09103018E159F05BB
+:10026000A007B107F1F00E94ED00882309F1E091A9
+:100270008E01F0918F01A081B1810D90BC91A02DD4
+:1002800025EA31E0B801A701CF01FD0109958823D6
+:1002900079F0E0920001F0920101009302011093C5
+:1002A00003018091A5038D298093A50381E001C0FE
+:1002B00080E01F910F91FF90EF90DF900895CF9312
+:1002C000DF93EC01F62FE42F809197019091980134
+:1002D00001968C179D0780F16D2F772780E090E0C5
+:1002E0002091990130919A0140919B0150919C017C
+:1002F000620F731F841F951F4E2F50E020919501B0
+:1003000030919601D9014A9F90014B9F300D5A9F21
+:10031000300D112440E050E0620F731F841F951FC1
+:100320004F2F0E940F01882339F0BE017070660FB5
+:10033000771F6B557E4F02C060E070E0CB01DF910C
+:10034000CF910895CF93DF93EC01E62F8091930135
+:1003500090919401C817D90720F5BE0134E0769535
+:1003600067953A95E1F780E090E020919D0130910A
+:100370009E0140919F015091A001620F731F841F45
+:10038000951F4E2F0E940F01882359F0BE016F70F8
+:10039000707025E0660F771F2A95E1F76B557E4F49
+:1003A00002C060E070E0CB01DF91CF910895CF9261
+:1003B000DF92EF92FF920F931F93CF93DF937C0115
+:1003C000FC01C189D289209711F4C1E0D0E000E09E
+:1003D00010E080919701909198010817190708F093
+:1003E0004FC08C179D0710F4C1E0D0E0219640E08B
+:1003F00060E0CE010E945F01FC01009709F440C05B
+:1004000080819181892B19F00F5F1F4FE2CFF70197
+:1004100081899289892B69F461E0838194810E94AA
+:10042000A201FC01009761F1D38FC28FF701D6833F
+:10043000C58310E0CC24CA94DC2C19C0F701818953
+:100440009289009749F0412F61E00E945F01FC0111
+:100450000097B1F0D183C083412F61E0CE010E94AB
+:100460005F01FC01009761F0D182C0821F5F809123
+:100470009101181718F3F701D28BC18B81E001C0ED
+:1004800080E0DF91CF911F910F91FF90EF90DF906F
+:10049000CF900895EF92FF920F931F93E090A101E8
+:1004A000F090A2010091A3011091A401E60EF11CAD
+:1004B000011D111D02972091920130E0BC01629F45
+:1004C000C001639F900D729F900D1124A0E0B0E0D9
+:1004D000E80EF91E0A1F1B1FC801B7010E940F0179
+:1004E0001F910F91FF90EF900895AF92BF92CF921E
+:1004F000DF92EF92FF920F931F93CF93DF936C01E4
+:100500007B0180919001882309F44BC0F6010081A2
+:100510001181A42EBB24809193019091940108171E
+:10052000190708F03EC060E0C8010E94A201EC017A
+:100530000097C9F18881E114F10429F4882369F155
+:10054000853E41F52AC0882361F1853E19F18B85EE
+:10055000282F30E0C9018F7390700F97D9F02A21AE
+:100560003B21232BB9F4F70180818823B1F02AE0E5
+:1005700001C02150E22FF0E0DE01AE0FBF1FEE0DF3
+:10058000FF1D9C918081981719F4222391F705C0D3
+:10059000222319F00F5F1F4FBECFF6011183008396
+:1005A00002C0C0E0D0E0CE01DF91CF911F910F914A
+:1005B000FF90EF90DF90CF90BF90AF9008956F9233
+:1005C0007F928F929F92AF92BF92CF92DF92EF92E3
+:1005D000FF920F931F93CF93DF939C01162F80916F
+:1005E0009001882309F0E6C0653008F0E3C030933D
+:1005F0008F0120938E01662321F4EE24FF248701CE
+:1006000017C040E060E070E080E090E00E940F01E1
+:10061000882309F4CFC0E12FF0E0A4E0EE0FFF1F24
+:10062000AA95E1F7E55AFC4FE080F1800281138141
+:1006300040E0C801B7010E940F01882309F4BAC045
+:100640008091A303853509F0B5C08091A4038A3A4F
+:1006500009F0B0C08090B501809291019090B201F4
+:1006600090929201C091BB01D091BC01D0939601B0
+:10067000C09395016091B6017091B7017093940198
+:10068000609393016090B3017090B401930140E0D6
+:1006900050E02E0D3F1D401F511F209399013093B4
+:1006A0009A0140939B0150939C01882D90E0FC019E
+:1006B000EC9FC001ED9F900DFC9F900D1124A0E0D8
+:1006C000B0E0820F931FA41FB51F80939D019093EC
+:1006D0009E01A0939F01B093A001F5E0660F771FE4
+:1006E000FA95E1F761507E4F672F772766959B015A
+:1006F00040E050E0280F391F4A1F5B1F2093A101E3
+:100700003093A2014093A3015093A4018091B801BA
+:100710009091B901009721F05C01CC24DD2408C040
+:10072000A090C501B090C601C090C701D090C8018B
+:10073000E21AF30A040B150BEA0CFB1C0C1D1D1D21
+:10074000292D30E040E050E0C801B7010E94D811E7
+:10075000A90130939801209397018091B001909165
+:10076000B1018050924031F5209721F12FE0453FB3
+:10077000520700F181E0A81680E0B80680E8C806BC
+:1007800080E0D806B8F46728A9F0882099F0852F72
+:100790009927C817D90770F0992061F0292D30E00A
+:1007A000C901019782239323892B21F481E080934F
+:1007B000900101C080E0DF91CF911F910F91FF90D8
+:1007C000EF90DF90CF90BF90AF909F908F907F90F1
+:1007D0006F90089540E060E00E945F01FC01009787
+:1007E00019F420E030E002C020813181C901089570
+:1007F0006F927F928F929F92AF92BF92CF92DF9231
+:10080000EF92FF920F931F93CF93DF93EC014B0175
+:100810005A018A8187FF82C0ED84FE840F85188982
+:100820002F81388549855A85C501A0E0B0E08E0D3D
+:100830009F1DA01FB11F281739074A075B0718F42F
+:100840005901AE18BF086501612C02E0702E60C02E
+:100850002D853E854F855889DA01C90119E0B69585
+:10086000A795979587951A95D1F7109192011150F8
+:100870001823BFEFEB2EB1E0FB2EE222F32211236F
+:10088000A1F4E114F10489F48B859C85009719F09B
+:100890000E94EA0302C08D819E819C878B878230F3
+:1008A0009105E0F1885F9F4FC8F540E0612F8B858F
+:1008B0009C850E944A02882389F1C3018E199F09F1
+:1008C000A6018C159D0508F4AC0197012B553E4FF0
+:1008D000B901640F751FD401F90102C081918D9394
+:1008E000E617F707D9F7E21BF30B8E0E9F1EC41A0B
+:1008F000D50A9A0140E050E08D859E85AF85B88984
+:10090000820F931FA41FB51F8D879E87AF87B88B5B
+:10091000C114D10409F09CCFA50102C04FEF5FEFD5
+:10092000CA01DF91CF911F910F91FF90EF90DF905F
+:10093000CF90BF90AF909F908F907F906F900895D1
+:10094000DF93CF930F92CDB7DEB741E050E0BE0109
+:100950006F5F7F4F0E94F803019719F02FEF3FEF71
+:1009600003C08981282F30E0C9010F90CF91DF911A
+:100970000895AF92BF92CF92DF92EF92FF920F93C2
+:100980001F93CF93DF935C016A017B01FC0182819D
+:1009900087FF38C087819085A185B2858417950728
+:1009A000A607B70778F13AC0F5011486138623C06D
+:1009B000F5010581168180919201382F330F20E0D7
+:1009C000442737FD4095542FC701B6010E94D81126
+:1009D000E9010CC0C8010E94EA038C018230910534
+:1009E00088F02197FFEF883F9F0760F4209791F7E9
+:1009F000F50114870387F501C586D686E786F08A58
+:100A000081E001C080E0DF91CF911F910F91FF90B5
+:100A1000EF90DF90CF90BF90AF90089541155105B2
+:100A20006105710509F2C4CFCF93DF93EC018A8190
+:100A300087FF18C086FF13C061E08B819C810E94F4
+:100A4000A201FC01009771F08F819885A985BA8574
+:100A5000848F958FA68FB78F8A818F7B8A830E9420
+:100A6000ED0001C080E0DF91CF910895CF92DF9239
+:100A7000EF92FF920F931F93CF93DF93EC016B01E3
+:100A80008A8187FD59C080919001882309F454C060
+:100A90005DC08081882309F44FC0853E09F44CC0B5
+:100AA0009385892F887109F047C09F739A83828D3F
+:100AB000938D9E838D83E48CF58C068D178DEF824C
+:100AC000F88609871A871C861B861D861E861F8648
+:100AD000188AE114F1040105110519F41A8A198A1A
+:100AE00022C09A8B898B80919201382F330F20E09E
+:100AF000442737FD4095542FC801B7010E94D811F3
+:100B000089010EC089899A890E94EA039A8B898B90
+:100B10008230910588F001501040885F9F4F60F44B
+:100B20000115110579F78A8180688A83DC82CB827E
+:100B3000CE010E94140501C080E0DF91CF911F918A
+:100B40000F91FF90EF90DF90CF90089560E0C60185
+:100B50000E94A201FC01009709F09BCFEDCFEF921C
+:100B6000FF920F931F93DF93CF93CDB7DEB72D97EF
+:100B70000FB6F894DEBF0FBECDBF7C01CB018E0156
+:100B80000D5F1F4FB8010E94AA00882381F01A82CE
+:100B9000198248E0B801CE0101960E947502892BA6
+:100BA00031F069817A81C7010E94360501C080E079
+:100BB0002D960FB6F894DEBF0FBECDBFCF91DF915B
+:100BC0001F910F91FF90EF900895CF92DF92EF92D7
+:100BD000FF920F931F93DF93CF93CDB7DEB72D977F
+:100BE0000FB6F894DEBF0FBECDBF6C019B01FC01B8
+:100BF000828187FD41C01A82198283E0E82EF12CA0
+:100C0000EC0EFD1EB701C9010E94AA008823A1F1C4
+:100C100048E0B7018E010F5F1F4FC8010E947502A7
+:100C2000892B51F51A82198248E060E070E0C80112
+:100C30000E947502AC010097F9F08091A5038160D4
+:100C40008093A50320E030E0B7012B3010F080E066
+:100C500004C0FB01E20FF31F8081FA01E20FF31FD2
+:100C600080832F5F3F4F2032310579F769817A8188
+:100C7000C6010E94360501C080E02D960FB6F8949B
+:100C8000DEBF0FBECDBFCF91DF911F910F91FF90BF
+:100C9000EF90DF90CF900895CF93DF93EC010E9407
+:100CA0001405882311F01A8281E0DF91CF91089515
+:100CB0006F927F929F92AF92BF92CF92DF92EF920C
+:100CC000FF920F931F93CF93DF93EC015B01E42E10
+:100CD000952E8A8187FF4AC080FD48C0842F952FBA
+:100CE0009C016901612C52E0752E71C02F813885FD
+:100CF00049855A85DA01C90149E0B695A7959795C6
+:100D000087954A95D1F7F0909201FA94F8228901DB
+:100D10001170FF20F1F40115110501F589899A89F7
+:100D2000009729F48D819E81009781F406C00E946E
+:100D3000EA032FEF883F920730F0CE010E94D701DF
+:100D4000882351F413C08230910580F09A8B898BEF
+:100D500003C00115110511F442E001C041E06F2DFF
+:100D600089899A890E944A02882319F42FEF3FEF5C
+:100D700035C09301201B310BA6012C153D0508F44D
+:100D8000A90198012B553E4FB901640F751FD5017C
+:100D9000F90102C08D918193E617F707D9F7E21B9D
+:100DA000F30BAE0EBF1EC41AD50ACA01A0E0B0E014
+:100DB0002F81388549855A85280F391F4A1F5B1FA7
+:100DC0002F83388749875A878A8180648A83C11430
+:100DD000D10409F08BCF8E2D992D9C01C901DF9193
+:100DE000CF911F910F91FF90EF90DF90CF90BF9028
+:100DF000AF909F907F906F900895DF93CF930F9265
+:100E0000CDB7DEB7698341E050E0BE016F5F7F4F31
+:100E10000E9458060F90CF91DF910895DF92EF92D4
+:100E2000FF920F931F93D82E7A018B010E94B00876
+:100E30008D2D80640E94B708812F9927AA27BB2790
+:100E40000E94B708C801AA27BB270E94B708BB2782
+:100E5000A12F902F8F2D0E94B7088E2D0E94B708CA
+:100E6000DD2011F08FEF01C085E90E94B7081FEF68
+:100E70000E94B0088F3F21F4112311F01150F8CFD8
+:100E80001F910F91FF90EF90DF900895EF92FF92E6
+:100E90000F931F93CF93DF937A018B01E90139E020
+:100EA000EE0CFF1C001F111F3A95D1F7E114F1045D
+:100EB00001051105C1F10E94BC08B801A70188E134
+:100EC0000E940E07882311F58EEF0E94B70800E0FC
+:100ED00010E0FE01E00FF11F80810E94B7080F5F54
+:100EE0001F4F82E000301807A1F78FEF0E94B7086C
+:100EF0008FEF0E94B7080E94B0088F71853099F477
+:100F00000FEF1FEF08C00115110519F40E94C10869
+:100F10000AC0015010400E94B0088F3FA1F70E9404
+:100F2000C10881E001C080E0DF91CF911F910F9156
+:100F3000FF90EF900895EF92FF920F931F93CF933E
+:100F4000DF937C018B01C0E0D0E006C0219721F443
+:100F50000E94C10880E018C00E94B0088E3FB1F71F
+:100F6000C0E0D0E007C00E94B008F701EC0FFD1F01
+:100F700080832196C017D107B0F30E94B0080E9469
+:100F8000B0080E94C10881E0DF91CF911F910F91BD
+:100F9000FF90EF900895EF92FF920F931F93CF93DE
+:100FA000DF937A018B01E9010E94BC0849E0EE0C55
+:100FB000FF1C001F111F4A95D1F7B801A70181E15D
+:100FC0000E940E07882321F00E94C10880E005C01E
+:100FD00060E072E0CE010E949B07DF91CF911F91EC
+:100FE0000F91FF90EF900895EF92FF920F931F9350
+:100FF000DF93CF93CDB7DEB760970FB6F894DEBF1F
+:101000000FBECDBF0E94BC0840E050E060E070E041
+:1010100089E00E940E07882319F00E94C10808C0C9
+:1010200060E170E0CE0101960E949B07882321F4C5
+:10103000EE24FF24870130C08F818370382F330F57
+:10104000330F20E0888590E0880F991F880F991F43
+:10105000282B392B8985829586958695837090E01B
+:10106000282B392B2F5F3F4F790100E010E08E8154
+:101070008F7090E007972A852370220F3B85331FDE
+:101080003327331F232B820F911D04C0EE0CFF1C4E
+:10109000001F111F8A95D2F7B701C80160960FB6DD
+:1010A000F894DEBF0FBECDBFCF91DF911F910F919E
+:1010B000FF90EF9008951F93CF93DF930E94C6088F
+:1010C00010E08FEF0E94B7081F5F1A30D1F70E941F
+:1010D000BC0840E050E060E070E080E00E940E0755
+:1010E000C0E0D0E004C02197D1F00E94B008813068
+:1010F000D1F7C0E0D0E040E050E060E070E087E38E
+:101100000E940E0740E050E060E070E089E20E943B
+:101110000E07882351F083E0C83ED80721F40E94CF
+:10112000C10810E011C02196E6CF0E94A90840E056
+:1011300052E060E070E080E10E940E0710E088233A
+:1011400009F411E00E94C108812FDF91CF911F9116
+:1011500008958CB58C7F8CBD8DB581608DBD089553
+:101160008FEF8EBD0DB407FEFDCF8EB508958EBDF9
+:101170000DB407FEFDCF089560E08AE00E947B0F6A
+:10118000089561E08AE00E947B0F089561E08AE0A3
+:101190000E945D0F0E94C10861E08BE00E945D0F1C
+:1011A00061E08DE00E945D0F83E58CBD0895089598
+:1011B0008EE091E09093A7038093A60388E091E0EE
+:1011C0009093A9038093A8031092AA0308950F9304
+:1011D0001F938C0162E171E08BEB93E00E94E90ABE
+:1011E000B8018BEB93E00E94140BFFCFEF92FF92BC
+:1011F0000F931F93DF93CF93CDB7DEB72C970FB626
+:10120000F894DEBF0FBECDBF40E855E260E070E06D
+:101210008BEB93E00E942E0B8BEB93E00E946D0A08
+:101220006AE171E08BEB93E00E94140B8BEB93E08F
+:101230000E94290B8823D1F386EA93E00E945B0881
+:10124000882321F486E391E00E94E70861E086EAC2
+:1012500093E00E94DF02882359F460E086EA93E07D
+:101260000E94DF02882321F480E491E00E94E708D5
+:10127000DE011196ECE7F1E08CE001900D928150D7
+:10128000E1F710E07E010894E11CF11C812F6AE077
+:101290000E94CC11805D8E83812F0E94CC11905DC5
+:1012A0009F83B70188EA93E00E94E505882319F43B
+:1012B0001F5F143659F78091AA0387FD04C08CE4A0
+:1012C00091E00E94E70868E571E08BEB93E00E94F3
+:1012D000E90ABE016F5F7F4F8BEB93E00E94140B16
+:1012E000EE24FF24870166E671E088EA93E00E941D
+:1012F000430B2AE030E0B801A70188EA93E00E949E
+:10130000A20C6CE671E088EA93E00E94430B0E9415
+:10131000DD0EAB01BC0188EA93E00E94390C089411
+:10132000E11CF11C011D111D84E6E816F104010504
+:101330001105C9F688EA93E00E94140567E771E099
+:101340008BEB93E00E94140B2C960FB6F894DEBF43
+:101350000FBECDBFCF91DF911F910F91FF90EF9006
+:1013600008950E94230F0E94F608FFCFFC01662318
+:1013700011F41082089581E080830895FC016623B2
+:1013800011F41082089581E0808308951092BB03C8
+:1013900081E08093BC030895DF93CF930F92CDB784
+:1013A000DEB7FC01698341E0BE016F5F7F4F808142
+:1013B0000E94900D0F90CF91DF910895DF93CF930E
+:1013C0000F92CDB7DEB7FC01698341E0BE016F5FCC
+:1013D0007F4F80810E94900D0F90CF91DF910895F3
+:1013E0002F923F924F925F926F927F928F929F9235
+:1013F000AF92BF92CF92DF92EF92FF920F931F9323
+:10140000DF93CF93CDB7DEB7A0970FB6F894DEBFCA
+:101410000FBECDBF2C016A017B014115510561054D
+:10142000710521F460E30E94DE093EC0AA24BB24BA
+:10143000622E7724882499241E010894211C311CD3
+:1014400081010A0D1B1DC701B601A40193010E9471
+:10145000D811F80160830894A11CB11CC701B60122
+:10146000A40193010E94D811C901DA016C017D0128
+:10147000C114D104E104F10419F775010894E108DD
+:10148000F108E20CF31C0DC0F70160816A3010F422
+:10149000605D01C0695CC2010E94DE090894E10838
+:1014A000F108EC16FD0681F7A0960FB6F894DEBFA2
+:1014B0000FBECDBFCF91DF911F910F91FF90EF90A5
+:1014C000DF90CF90BF90AF909F908F907F906F9064
+:1014D0005F904F903F902F9008950F931F938C0132
+:1014E0006DE00E94DE096AE0C8010E94DE091F91DA
+:1014F0000F9108950F931F938C010E94CC09C8018E
+:101500000E946D0A1F910F9108950F931F938C01F4
+:101510000E94DE09C8010E946D0A1F910F91089573
+:10152000EF92FF920F931F93CF93DF93EC017A0119
+:101530008B0177FF0BC06DE20E94DE0910950095CC
+:10154000F094E094E11CF11C011D111D2AE0B8018A
+:10155000A701CE010E94F009DF91CF911F910F9159
+:10156000FF90EF9008950F931F938C010E94900AB3
+:10157000C8010E946D0A1F910F910895AB01662763
+:1015800057FD6095762F0E94B30A0895AB01662738
+:1015900057FD6095762F0E94900A08952115310518
+:1015A00021F4642F0E94DE0908952A30310519F4D0
+:1015B0000E94900A08950E94F00908950F931F93C6
+:1015C0008C010E94CE0AC8010E946D0A1F910F91E2
+:1015D0000895CF92DF92EF92FF920F931F93CF93D4
+:1015E000DF936C017B01DB010D900020E9F78D0199
+:1015F00001501040061B170BC0E0D0E009C0B70136
+:101600006C0F7D1F41E0F60180810E94900D2196B4
+:10161000C017D107A4F3DF91CF911F910F91FF90D5
+:10162000EF90DF90CF9008950F931F938C010E944D
+:10163000E90AC8010E946D0A1F910F910895FC01EB
+:1016400080810E94E20D0895FC0180810E942C0D92
+:101650000895FC0180810E94C40C0895FC018081E2
+:101660000E94EC0D0895DC01ED91FC910190F08158
+:10167000E02D09950895DC01ED91FC910190F08138
+:10168000E02D099508950F931F93CF93DF938C015D
+:10169000EB0109C02196D801ED91FC910190F081F8
+:1016A000E02DC801099568816623A1F7DF91CF91EC
+:1016B0001F910F9108950F931F938C01DC01ED9101
+:1016C000FC910190F081E02D6DE00995D801ED913C
+:1016D000FC910190F081E02D6AE0C80109951F910D
+:1016E0000F9108950F931F938C01DC01ED91FC91F4
+:1016F0000190F081E02D0995C8010E945B0B1F91BC
+:101700000F9108950F931F938C010E94430BC80102
+:101710000E945B0B1F910F9108950F931F938C01F3
+:10172000DC01ED91FC910190F081E02D0995C8015B
+:101730000E945B0B1F910F9108952F923F924F9241
+:101740005F926F927F928F929F92AF92BF92CF9251
+:10175000DF92EF92FF920F931F93DF93CF93CDB75A
+:10176000DEB7A0970FB6F894DEBF0FBECDBF1C0149
+:101770006A017B01411551056105710549F4DC01E0
+:10178000ED91FC910190F081E02D60E3099554C04A
+:10179000882499245401422E55246624772401E09C
+:1017A00010E00C0F1D1F080D191DC701B601A30184
+:1017B00092010E94D811F80160830894811C911C49
+:1017C000A11CB11CC701B601A30192010E94D8114E
+:1017D000C901DA016C017D01C114D104E104F104F5
+:1017E000F1F681E0E82EF12CEC0EFD1EE80CF91C60
+:1017F0003E010894611C711CD501C4010197A10927
+:10180000B1096C01C818D90814C0F601EE0DFF1D0E
+:1018100060816A3010F4605D01C0695CD101ED91B6
+:10182000FC910190F081E02DC10109950894E10837
+:10183000F1086E147F0449F7A0960FB6F894DEBF46
+:101840000FBECDBFCF91DF911F910F91FF90EF9011
+:10185000DF90CF90BF90AF909F908F907F906F90D0
+:101860005F904F903F902F9008952AE00E949D0B2B
+:1018700008950F931F938C010E94350CC8010E949C
+:101880005B0B1F910F910895AB0160E070E00E9427
+:10189000350C08950F931F938C01AB0160E070E04D
+:1018A0000E94350CC8010E945B0B1F910F91089597
+:1018B000EF92FF920F931F93CF93DF93EC017A0186
+:1018C0008B0177FF0FC0E881F9810190F081E02D55
+:1018D0006DE2099510950095F094E094E11CF11CDF
+:1018E000011D111D2AE0B801A701CE010E949D0B28
+:1018F000DF91CF911F910F91FF90EF9008950F937B
+:101900001F938C010E94580CC8010E945B0B1F9111
+:101910000F910895AB01662757FD6095762F0E94C1
+:10192000580C08950F931F938C01AB01662757FD48
+:101930006095762F0E94580CC8010E945B0B1F9186
+:101940000F910895DC012115310541F4ED91FC91D1
+:101950000190F081E02D642F099508952A3031051A
+:1019600019F40E94580C08950E949D0B08950F933E
+:101970001F938C010E94A20CC8010E945B0B1F9157
+:101980000F91089518951895882329F489ED94E00E
+:101990000E947910089585EC94E00E9479100895D2
+:1019A0001F920F920FB60F9211242F933F934F93D4
+:1019B0005F936F937F938F939F93AF93BF93EF93B7
+:1019C000FF9383EE94E00E947910882331F083EE38
+:1019D00094E00E944A108093CE00FF91EF91BF9156
+:1019E000AF919F918F917F916F915F914F913F91B7
+:1019F0002F910F900FBE0F901F9018951F920F926E
+:101A00000FB60F9211242F933F934F935F936F93D1
+:101A10007F938F939F93AF93BF93EF93FF938FEC3D
+:101A200094E00E947910882331F08FEC94E00E94BA
+:101A30004A108093C600FF91EF91BF91AF919F91A3
+:101A40008F917F916F915F914F913F912F910F9067
+:101A50000FBE0F901F901895882329F489ED94E00C
+:101A60000E944A10089585EC94E00E944A1008955F
+:101A70001F920F920FB60F9211242F933F934F9303
+:101A80005F936F937F938F939F93AF93BF93EF93E6
+:101A9000FF936091CE008091C80084FD04C085EC66
+:101AA00094E00E941E10FF91EF91BF91AF919F9122
+:101AB0008F917F916F915F914F913F912F910F90F7
+:101AC0000FBE0F901F9018951F920F920FB60F9296
+:101AD00011242F933F934F935F936F937F938F9333
+:101AE0009F93AF93BF93EF93FF936091C600809154
+:101AF000C00084FD04C089ED94E00E941E10FF9197
+:101B0000EF91BF91AF919F918F917F916F915F9175
+:101B10004F913F912F910F900FBE0F901F901895EE
+:101B2000FF920F931F93CF93DF93162F042F44231D
+:101B300009F442C0FFB6F8948823E9F4862F972F62
+:101B40009C01E90169918FEC94E00E941E109E01B6
+:101B5000211B2017B8F38091C00080648093C000DF
+:101B60008091C00085FFFCCF8FEC94E00E944A106A
+:101B70008093C6001CC0862F972F9C01E9016991B4
+:101B800083EE94E00E941E109E01211B2017B8F3E3
+:101B90008091C80080648093C8008091C80085FF50
+:101BA000FCCF83EE94E00E944A108093CE008FB762
+:101BB00030E8F322F82AFFBEDF91CF911F910F91F9
+:101BC000FF900895882319F489ED94E002C085EC14
+:101BD00094E00E94C0100895EF92FF920F931F931C
+:101BE0007A018B019A01AB01569547953795279558
+:101BF0008823B1F5205C3D4B404F5F4FCA01B901CE
+:101C0000A80197010E94D811C901DA010197A10921
+:101C1000B109292F3A2F4B2F55270196A11DB11D30
+:101C20002093C50081508093C4001092C000109290
+:101C3000C1001092C20088ED8093C10086E08093BD
+:101C4000C20040E850E06DEB73E089ED94E00E9443
+:101C5000121040E850E06DE374E08FEC94E049C06E
+:101C6000205C3D4B404F5F4FCA01B901A80197016D
+:101C70000E94D811C901DA010197A109B109292FE0
+:101C80003A2F4B2F55270196A11DB11D2093CD0052
+:101C900081508093CC001092C8001092C90010921D
+:101CA000CA0088ED8093C90086E08093CA0080E86E
+:101CB00090E00E94CA108093EF049093F00480E8B3
+:101CC00090E00E94CA108093ED049093EE0460911E
+:101CD000EF047091F00442E050E085EC94E00E9443
+:101CE00012106091ED047091EE0442E050E083EE3A
+:101CF00094E00E9412101F910F91FF90EF900895B1
+:101D00001F920F920FB60F9211242F938F939F93D0
+:101D1000AF93BF938091BD049091BE04A091BF0486
+:101D2000B091C0048050904CAF4FBF4F8093BD0422
+:101D30009093BE04A093BF04B093C00427C08091C9
+:101D4000BD049091BE04A091BF04B091C00480581E
+:101D50009E43A040B0408093BD049093BE04A093E6
+:101D6000BF04B093C0048091C1049091C204A091BB
+:101D7000C304B091C4040196A11DB11D8093C10498
+:101D80009093C204A093C304B093C4048091BD0493
+:101D90009091BE04A091BF04B091C00481589E43AD
+:101DA000A040B04060F6BF91AF919F918F912F916D
+:101DB0000F900FBE0F901F9018958FB7F894209139
+:101DC000C1043091C2044091C3045091C4048FBF38
+:101DD000B901CA010895EF92FF920F931F937B01FF
+:101DE0008C018FB7F8944091C1045091C204609166
+:101DF000C3047091C4048FBF2FB7F8948091C104BD
+:101E00009091C204A091C304B091C4042FBF841B5D
+:101E1000950BA60BB70B8E159F05A007B10760F3B6
+:101E20001F910F91FF90EF900895019759F0FC01D9
+:101E3000EE0FFF1FEE0FFF1F32978FB7F894319709
+:101E4000F1F78FBF0895789484B5826084BD84B51E
+:101E5000816084BD85B5826085BD85B5816085BDA5
+:101E6000EEE6F0E0808181608083E1E8F0E080814F
+:101E700082608083808181608083E0E8F0E08081FF
+:101E800081608083E1EBF0E0808184608083E0EB1F
+:101E9000F0E0808181608083EAE7F0E08081846007
+:101EA0008083808182608083808181608083808163
+:101EB000806880831092C1000895282F30E0C90106
+:101EC00085549F4FFC01949125563F4FF901849111
+:101ED000882381F0E82FF0E0E457FF4FE491F0E031
+:101EE000662329F4808190958923808308958081D9
+:101EF000892B80830895482F50E0CA0185529F4F57
+:101F0000FC012491CA0185549F4FFC0194914556D0
+:101F10005F4FFA0134913323C1F1222331F1213093
+:101F200019F484B58F7704C0223021F484B58F7DF5
+:101F300084BD1BC0233021F4809180008F7705C0C1
+:101F4000243031F4809180008F7D809380000DC01B
+:101F5000263021F48091B0008F7705C0273029F416
+:101F60008091B0008F7D8093B000E32FF0E0EF56BA
+:101F7000FF4FE491F0E0662329F480819095892356
+:101F8000808308958081892B80830895482F50E0B5
+:101F9000CA0185529F4FFC012491CA0185549F4F6D
+:101FA000FC01949145565F4FFA013491332319F4A3
+:101FB00020E030E035C0222331F1213019F484B51E
+:101FC0008F7704C0223021F484B58F7D84BD1BC07F
+:101FD000233021F4809180008F7705C0243031F4C4
+:101FE000809180008F7D809380000DC0263021F489
+:101FF0008091B0008F7705C0273029F48091B00020
+:102000008F7D8093B000E32FF0E0EA56FF4FE4911C
+:10201000F0E0808120E030E0892311F021E030E021
+:10202000C9010895FC015783468311861086718388
+:10203000608373836283758364830895DC011896DB
+:102040002D913C91199716968D919C911797281771
+:102050003907F8F4ED91FC91119761931196FC9377
+:10206000EE9318968D919C911997019619969C93D1
+:102070008E93189714962D913C91159716968D91E5
+:102080009C911797820F931FE817F90710F02D9373
+:102090003C930895DC0118968D919C9119970097B7
+:1020A00019F42FEF3FEF23C01296ED91FC91139797
+:1020B00041911396FC93EE931297019719969C9376
+:1020C0008E93189714962D913C91159716968D9195
+:1020D0009C911797820F931FE817F90720F013962A
+:1020E0003C932E931297242F332727FD3095C90157
+:1020F0000895FC0180850895FC0180859185892BD8
+:1021000011F480E008950280F381E02D808108952C
+:10211000CF93DF93DC01562F18966D917C91199720
+:102120006115710541F11296ED91FC911397CD91D6
+:10213000DC91119740E01CC08081851711F4652F58
+:102140001BC04F5F842F90E086179707A0F49F0174
+:102150002F5F3F4F1496ED91FC91159716968D9138
+:102160009C9117978E0F9F1F8217930708F0F90114
+:10217000EC17FD0709F760E0862FDF91CF910895F6
+:10218000FC011186108684819581918380839383DD
+:1021900082830895CF93DF93BC018230910510F4C0
+:1021A00062E070E0A091F304B091F404ED01E0E08E
+:1021B000F0E040E050E021C08881998186179707C0
+:1021C00069F48A819B81309719F09383828304C0DC
+:1021D0009093F4048093F304FE0134C068177907E8
+:1021E00038F44115510519F08417950708F4AC012E
+:1021F000FE018A819B819C01E9012097E9F6411546
+:102200005105A9F1CA01861B970B049708F4BA017E
+:10221000E0E0F0E02AC08D919C911197841795071A
+:10222000F9F46417750781F412968D919C911397B8
+:10223000309719F09383828304C09093F4048093C1
+:10224000F304FD0132964CC0CA01861B970BFD01B9
+:10225000E80FF91F6193719302978D939C9340C08F
+:10226000FD01828193819C01D9011097A1F6809193
+:10227000F1049091F204892B41F480918A019091AC
+:102280008B019093F2048093F10440918C01509162
+:102290008D014115510541F44DB75EB7809188011C
+:1022A00090918901481B590B2091F1043091F2045F
+:1022B000CA01821B930B8617970780F0AB014E5F14
+:1022C0005F4F8417950750F0420F531F5093F2044D
+:1022D0004093F104F9016193719302C0E0E0F0E0F2
+:1022E000CF01DF91CF910895CF93DF93009709F449
+:1022F00050C0EC0122971B821A82A091F304B09186
+:10230000F404109709F140E050E0AC17BD0708F164
+:10231000BB83AA83FE0121913191E20FF31FAE1717
+:10232000BF0779F48D919C911197280F391F2E5F6B
+:102330003F4F3983288312968D919C9113979B83ED
+:102340008A834115510571F4D093F404C093F304CA
+:1023500020C012968D919C911397AD01009711F0BA
+:10236000DC01D3CFFA01D383C28321913191E20FF3
+:10237000F31FCE17DF0769F488819981280F391F71
+:102380002E5F3F4FFA01318320838A819B819383A3
+:102390008283DF91CF910895991B79E004C0991F42
+:1023A000961708F0961B881F7A95C9F780950895AF
+:1023B000A1E21A2EAA1BBB1BFD010DC0AA1FBB1F49
+:1023C000EE1FFF1FA217B307E407F50720F0A21BBB
+:1023D000B30BE40BF50B661F771F881F991F1A9428
+:1023E00069F760957095809590959B01AC01BD0152
+:1023F000CF010895EE0FFF1F0590F491E02D099491
+:04240000F894FFCF7E
+:10240400FFFFFFFF00000000FD0600000000CB07F7
+:1024140046076572726F723A2000547970652061C4
+:102424006E792063686172616374657220746F20D1
+:10243400737461727400636172642E696E697400EE
+:1024440046617431363A3A696E69740066696C653E
+:102454002E637265617465005072696E74696E678B
+:1024640020746F3A20006C696E652000206D696CE1
+:102474006C6973203D2000446F6E65005052494ED4
+:0E2484005430302E545854002000F50400004F
+:00000001FF
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/applet/fat16print.pde b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/applet/fat16print.pde
new file mode 100644
index 00000000..8a1bb556
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/applet/fat16print.pde
@@ -0,0 +1,57 @@
+/*
+ * Print Example
+ *
+ * This sketch shows how to use the Arduino V12 Print class with Fat16
+ */
+#include "Fat16.h"
+#include "SdCard.h"
+
+SdCard card;
+Fat16 file;
+
+void error(char *str)
+{
+ Serial.print("error: ");
+ Serial.println(str);
+ while(1);
+}
+
+void setup(void)
+{
+ Serial.begin(9600);
+ Serial.println();
+ Serial.println("Type any character to start");
+ while (!Serial.available());
+
+ // initialize the SD card
+ if (!card.init()) error("card.init");
+
+ // initialize a FAT16 volume
+ // Assume MBR volume and try partition one
+ if (!Fat16::init(card, 1)) {
+ // try super floppy
+ if (!Fat16::init(card, 0)) error("Fat16::init");
+ }
+ // create a new file
+ char name[] = "PRINT00.TXT";
+ for (uint8_t i = 0; i < 100; i++) {
+ name[5] = i/10 + '0';
+ name[6] = i%10 + '0';
+ if (file.create(name)) break;
+ }
+ if (!file.isOpen()) error ("file.create");
+ Serial.print("Printing to: ");
+ Serial.println(name);
+
+ // print 100 line to file
+ for (uint8_t i = 0; i < 100; i++) {
+ file.print("line ");
+ file.print(i, DEC);
+ file.print(" millis = ");
+ file.println(millis());
+ }
+ // force write of all data to the SD card
+ file.sync();
+ Serial.println("Done");
+}
+void loop(void){}
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/applet/fat16print.rom b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/applet/fat16print.rom
new file mode 100644
index 00000000..05331365
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/applet/fat16print.rom
@@ -0,0 +1,588 @@
+S02B0000433A5C446F63756D656E747320616E642053657474696E67735C41646D696E6973747261746F725C6C
+S11300000C9480000C94A8000C94A8000C94A800F4
+S11300100C94A8000C94A8000C94A8000C94A800BC
+S11300200C94A8000C94A8000C94A8000C94A800AC
+S11300300C94A8000C94A8000C94A8000C94A8009C
+S11300400C94A8000C94A8000C94800E0C94A800A6
+S11300500C94640D0C94A8000C94FE0C0C94A80051
+S11300600C94A8000C94A8000C94A8000C94A8006C
+S11300700C94380D0C94A8000C94D00C7C3C3E5E7F
+S11300802B3D3F2F5B5D3B2C2A225C000021242763
+S11300902A002225282B00202326290202020202FC
+S11300A00202020404040404040404030303030317
+S11300B0030303010101010101010101020408100C
+S11300C0204080010204081020408001020408102E
+S11300D0204080804020100804020100000001023A
+S11300E000000000000000040307060000000000F8
+S11300F0000000000000000000000000D808C6094D
+S113010011241FBECFEFD0E1DEBFCDBF11E0A0E0D0
+S1130110B1E0E4E0F4E202C005900D92AE38B1071C
+S1130120D9F714E0AEE8B1E001C01D92A53FB107D4
+S1130130E1F710E0C0E0D1E004C02297FE010E9484
+S1130140FC11CC3FD107C9F70E94B1090C940012ED
+S11301500C940000CF93DF93EC01DB0180E090E08E
+S113016020E2FD01E80FF91F208301968B309105F1
+S1130170C1F757E040E022C02E3219F08CE790E03E
+S113018007C05A3029F15AE048E018C0321701F18B
+S1130190FC01019634913323C9F75417C8F0213276
+S11301A0B8F02F37A8F4822F81568A3110F4622FC9
+S11301B06052FD01E40FF11D60834F5F2991622FAE
+S11301C02223D1F690E08C91803219F091E001C0A5
+S11301D090E0892FDF91CF9108958091A503882322
+S11301E011F481E00895A0918E01B0918F01ED91F9
+S11301F0FC9111974091000150910101609102011D
+S1130200709103010280F381E02D25EA31E0CD01F4
+S11302100995882319F01092A50381E00895DF92CF
+S1130220EF92FF920F931F937B018C01D42E82E0F7
+S1130230481761F40E94ED008823D1F1E5EAF1E06A
+S1130240119283E0E53AF807D9F723C080910001C1
+S113025090910101A0910201B09103018E159F05B7
+S1130260A007B107F1F00E94ED00882309F1E091A5
+S11302708E01F0918F01A081B1810D90BC91A02DD0
+S113028025EA31E0B801A701CF01FD0109958823D2
+S113029079F0E0920001F0920101009302011093C1
+S11302A003018091A5038D298093A50381E001C0FA
+S11302B080E01F910F91FF90EF90DF900895CF930E
+S11302C0DF93EC01F62FE42F809197019091980130
+S11302D001968C179D0780F16D2F772780E090E0C1
+S11302E02091990130919A0140919B0150919C0178
+S11302F0620F731F841F951F4E2F50E020919501AC
+S113030030919601D9014A9F90014B9F300D5A9F1D
+S1130310300D112440E050E0620F731F841F951FBD
+S11303204F2F0E940F01882339F0BE017070660FB1
+S1130330771F6B557E4F02C060E070E0CB01DF9108
+S1130340CF910895CF93DF93EC01E62F8091930131
+S113035090919401C817D90720F5BE0134E0769531
+S113036067953A95E1F780E090E020919D01309106
+S11303709E0140919F015091A001620F731F841F41
+S1130380951F4E2F0E940F01882359F0BE016F70F4
+S1130390707025E0660F771F2A95E1F76B557E4F45
+S11303A002C060E070E0CB01DF91CF910895CF925D
+S11303B0DF92EF92FF920F931F93CF93DF937C0111
+S11303C0FC01C189D289209711F4C1E0D0E000E09A
+S11303D010E080919701909198010817190708F08F
+S11303E04FC08C179D0710F4C1E0D0E0219640E087
+S11303F060E0CE010E945F01FC01009709F440C057
+S113040080819181892B19F00F5F1F4FE2CFF70193
+S113041081899289892B69F461E0838194810E94A6
+S1130420A201FC01009761F1D38FC28FF701D6833B
+S1130430C58310E0CC24CA94DC2C19C0F70181894F
+S11304409289009749F0412F61E00E945F01FC010D
+S11304500097B1F0D183C083412F61E0CE010E94A7
+S11304605F01FC01009761F0D182C0821F5F80911F
+S11304709101181718F3F701D28BC18B81E001C0E9
+S113048080E0DF91CF911F910F91FF90EF90DF906B
+S1130490CF900895EF92FF920F931F93E090A101E4
+S11304A0F090A2010091A3011091A401E60EF11CA9
+S11304B0011D111D02972091920130E0BC01629F41
+S11304C0C001639F900D729F900D1124A0E0B0E0D5
+S11304D0E80EF91E0A1F1B1FC801B7010E940F0175
+S11304E01F910F91FF90EF900895AF92BF92CF921A
+S11304F0DF92EF92FF920F931F93CF93DF936C01E0
+S11305007B0180919001882309F44BC0F60100819E
+S11305101181A42EBB24809193019091940108171A
+S1130520190708F03EC060E0C8010E94A201EC0176
+S11305300097C9F18881E114F10429F4882369F151
+S1130540853E41F52AC0882361F1853E19F18B85EA
+S1130550282F30E0C9018F7390700F97D9F02A21AA
+S11305603B21232BB9F4F70180818823B1F02AE0E1
+S113057001C02150E22FF0E0DE01AE0FBF1FEE0DEF
+S1130580FF1D9C918081981719F4222391F705C0CF
+S1130590222319F00F5F1F4FBECFF6011183008392
+S11305A002C0C0E0D0E0CE01DF91CF911F910F9146
+S11305B0FF90EF90DF90CF90BF90AF9008956F922F
+S11305C07F928F929F92AF92BF92CF92DF92EF92DF
+S11305D0FF920F931F93CF93DF939C01162F80916B
+S11305E09001882309F0E6C0653008F0E3C0309339
+S11305F08F0120938E01662321F4EE24FF248701CA
+S113060017C040E060E070E080E090E00E940F01DD
+S1130610882309F4CFC0E12FF0E0A4E0EE0FFF1F20
+S1130620AA95E1F7E55AFC4FE080F180028113813D
+S113063040E0C801B7010E940F01882309F4BAC041
+S11306408091A303853509F0B5C08091A4038A3A4B
+S113065009F0B0C08090B501809291019090B201F0
+S113066090929201C091BB01D091BC01D0939601AC
+S1130670C09395016091B6017091B7017093940194
+S1130680609393016090B3017090B401930140E0D2
+S113069050E02E0D3F1D401F511F209399013093B0
+S11306A09A0140939B0150939C01882D90E0FC019A
+S11306B0EC9FC001ED9F900DFC9F900D1124A0E0D4
+S11306C0B0E0820F931FA41FB51F80939D019093E8
+S11306D09E01A0939F01B093A001F5E0660F771FE0
+S11306E0FA95E1F761507E4F672F772766959B0156
+S11306F040E050E0280F391F4A1F5B1F2093A101DF
+S11307003093A2014093A3015093A4018091B801B6
+S11307109091B901009721F05C01CC24DD2408C03C
+S1130720A090C501B090C601C090C701D090C80187
+S1130730E21AF30A040B150BEA0CFB1C0C1D1D1D1D
+S1130740292D30E040E050E0C801B7010E94D811E3
+S1130750A90130939801209397018091B001909161
+S1130760B1018050924031F5209721F12FE0453FAF
+S1130770520700F181E0A81680E0B80680E8C806B8
+S113078080E0D806B8F46728A9F0882099F0852F6E
+S11307909927C817D90770F0992061F0292D30E006
+S11307A0C901019782239323892B21F481E080934B
+S11307B0900101C080E0DF91CF911F910F91FF90D4
+S11307C0EF90DF90CF90BF90AF909F908F907F90ED
+S11307D06F90089540E060E00E945F01FC01009783
+S11307E019F420E030E002C020813181C90108956C
+S11307F06F927F928F929F92AF92BF92CF92DF922D
+S1130800EF92FF920F931F93CF93DF93EC014B0171
+S11308105A018A8187FF82C0ED84FE840F8518897E
+S11308202F81388549855A85C501A0E0B0E08E0D39
+S11308309F1DA01FB11F281739074A075B0718F42B
+S11308405901AE18BF086501612C02E0702E60C02A
+S11308502D853E854F855889DA01C90119E0B69581
+S1130860A795979587951A95D1F7109192011150F4
+S11308701823BFEFEB2EB1E0FB2EE222F32211236B
+S1130880A1F4E114F10489F48B859C85009719F097
+S11308900E94EA0302C08D819E819C878B878230EF
+S11308A09105E0F1885F9F4FC8F540E0612F8B858B
+S11308B09C850E944A02882389F1C3018E199F09ED
+S11308C0A6018C159D0508F4AC0197012B553E4FEC
+S11308D0B901640F751FD401F90102C081918D9390
+S11308E0E617F707D9F7E21BF30B8E0E9F1EC41A07
+S11308F0D50A9A0140E050E08D859E85AF85B88980
+S1130900820F931FA41FB51F8D879E87AF87B88B57
+S1130910C114D10409F09CCFA50102C04FEF5FEFD1
+S1130920CA01DF91CF911F910F91FF90EF90DF905B
+S1130930CF90BF90AF909F908F907F906F900895CD
+S1130940DF93CF930F92CDB7DEB741E050E0BE0105
+S11309506F5F7F4F0E94F803019719F02FEF3FEF6D
+S113096003C08981282F30E0C9010F90CF91DF9116
+S11309700895AF92BF92CF92DF92EF92FF920F93BE
+S11309801F93CF93DF935C016A017B01FC01828199
+S113099087FF38C087819085A185B2858417950724
+S11309A0A607B70778F13AC0F5011486138623C069
+S11309B0F5010581168180919201382F330F20E0D3
+S11309C0442737FD4095542FC701B6010E94D81122
+S11309D0E9010CC0C8010E94EA038C018230910530
+S11309E088F02197FFEF883F9F0760F4209791F7E5
+S11309F0F50114870387F501C586D686E786F08A54
+S1130A0081E001C080E0DF91CF911F910F91FF90B1
+S1130A10EF90DF90CF90BF90AF90089541155105AE
+S1130A206105710509F2C4CFCF93DF93EC018A818C
+S1130A3087FF18C086FF13C061E08B819C810E94F0
+S1130A40A201FC01009771F08F819885A985BA8570
+S1130A50848F958FA68FB78F8A818F7B8A830E941C
+S1130A60ED0001C080E0DF91CF910895CF92DF9235
+S1130A70EF92FF920F931F93CF93DF93EC016B01DF
+S1130A808A8187FD59C080919001882309F454C05C
+S1130A905DC08081882309F44FC0853E09F44CC0B1
+S1130AA09385892F887109F047C09F739A83828D3B
+S1130AB0938D9E838D83E48CF58C068D178DEF8248
+S1130AC0F88609871A871C861B861D861E861F8644
+S1130AD0188AE114F1040105110519F41A8A198A16
+S1130AE022C09A8B898B80919201382F330F20E09A
+S1130AF0442737FD4095542FC801B7010E94D811EF
+S1130B0089010EC089899A890E94EA039A8B898B8C
+S1130B108230910588F001501040885F9F4F60F447
+S1130B200115110579F78A8180688A83DC82CB827A
+S1130B30CE010E94140501C080E0DF91CF911F9186
+S1130B400F91FF90EF90DF90CF90089560E0C60181
+S1130B500E94A201FC01009709F09BCFEDCFEF9218
+S1130B60FF920F931F93DF93CF93CDB7DEB72D97EB
+S1130B700FB6F894DEBF0FBECDBF7C01CB018E0152
+S1130B800D5F1F4FB8010E94AA00882381F01A82CA
+S1130B90198248E0B801CE0101960E947502892BA2
+S1130BA031F069817A81C7010E94360501C080E075
+S1130BB02D960FB6F894DEBF0FBECDBFCF91DF9157
+S1130BC01F910F91FF90EF900895CF92DF92EF92D3
+S1130BD0FF920F931F93DF93CF93CDB7DEB72D977B
+S1130BE00FB6F894DEBF0FBECDBF6C019B01FC01B4
+S1130BF0828187FD41C01A82198283E0E82EF12C9C
+S1130C00EC0EFD1EB701C9010E94AA008823A1F1C0
+S1130C1048E0B7018E010F5F1F4FC8010E947502A3
+S1130C20892B51F51A82198248E060E070E0C8010E
+S1130C300E947502AC010097F9F08091A5038160D0
+S1130C408093A50320E030E0B7012B3010F080E062
+S1130C5004C0FB01E20FF31F8081FA01E20FF31FCE
+S1130C6080832F5F3F4F2032310579F769817A8184
+S1130C70C6010E94360501C080E02D960FB6F89497
+S1130C80DEBF0FBECDBFCF91DF911F910F91FF90BB
+S1130C90EF90DF90CF900895CF93DF93EC010E9403
+S1130CA01405882311F01A8281E0DF91CF91089511
+S1130CB06F927F929F92AF92BF92CF92DF92EF9208
+S1130CC0FF920F931F93CF93DF93EC015B01E42E0C
+S1130CD0952E8A8187FF4AC080FD48C0842F952FB6
+S1130CE09C016901612C52E0752E71C02F813885F9
+S1130CF049855A85DA01C90149E0B695A7959795C2
+S1130D0087954A95D1F7F0909201FA94F8228901D7
+S1130D101170FF20F1F40115110501F589899A89F3
+S1130D20009729F48D819E81009781F406C00E946A
+S1130D30EA032FEF883F920730F0CE010E94D701DB
+S1130D40882351F413C08230910580F09A8B898BEB
+S1130D5003C00115110511F442E001C041E06F2DFB
+S1130D6089899A890E944A02882319F42FEF3FEF58
+S1130D7035C09301201B310BA6012C153D0508F449
+S1130D80A90198012B553E4FB901640F751FD50178
+S1130D90F90102C08D918193E617F707D9F7E21B99
+S1130DA0F30BAE0EBF1EC41AD50ACA01A0E0B0E010
+S1130DB02F81388549855A85280F391F4A1F5B1FA3
+S1130DC02F83388749875A878A8180648A83C1142C
+S1130DD0D10409F08BCF8E2D992D9C01C901DF918F
+S1130DE0CF911F910F91FF90EF90DF90CF90BF9024
+S1130DF0AF909F907F906F900895DF93CF930F9261
+S1130E00CDB7DEB7698341E050E0BE016F5F7F4F2D
+S1130E100E9458060F90CF91DF910895DF92EF92D0
+S1130E20FF920F931F93D82E7A018B010E94B00872
+S1130E308D2D80640E94B708812F9927AA27BB278C
+S1130E400E94B708C801AA27BB270E94B708BB277E
+S1130E50A12F902F8F2D0E94B7088E2D0E94B708C6
+S1130E60DD2011F08FEF01C085E90E94B7081FEF64
+S1130E700E94B0088F3F21F4112311F01150F8CFD4
+S1130E801F910F91FF90EF90DF900895EF92FF92E2
+S1130E900F931F93CF93DF937A018B01E90139E01C
+S1130EA0EE0CFF1C001F111F3A95D1F7E114F10459
+S1130EB001051105C1F10E94BC08B801A70188E130
+S1130EC00E940E07882311F58EEF0E94B70800E0F8
+S1130ED010E0FE01E00FF11F80810E94B7080F5F50
+S1130EE01F4F82E000301807A1F78FEF0E94B70868
+S1130EF08FEF0E94B7080E94B0088F71853099F473
+S1130F000FEF1FEF08C00115110519F40E94C10865
+S1130F100AC0015010400E94B0088F3FA1F70E9400
+S1130F20C10881E001C080E0DF91CF911F910F9152
+S1130F30FF90EF900895EF92FF920F931F93CF933A
+S1130F40DF937C018B01C0E0D0E006C0219721F43F
+S1130F500E94C10880E018C00E94B0088E3FB1F71B
+S1130F60C0E0D0E007C00E94B008F701EC0FFD1FFD
+S1130F7080832196C017D107B0F30E94B0080E9465
+S1130F80B0080E94C10881E0DF91CF911F910F91B9
+S1130F90FF90EF900895EF92FF920F931F93CF93DA
+S1130FA0DF937A018B01E9010E94BC0849E0EE0C51
+S1130FB0FF1C001F111F4A95D1F7B801A70181E159
+S1130FC00E940E07882321F00E94C10880E005C01A
+S1130FD060E072E0CE010E949B07DF91CF911F91E8
+S1130FE00F91FF90EF900895EF92FF920F931F934C
+S1130FF0DF93CF93CDB7DEB760970FB6F894DEBF1B
+S11310000FBECDBF0E94BC0840E050E060E070E03D
+S113101089E00E940E07882319F00E94C10808C0C5
+S113102060E170E0CE0101960E949B07882321F4C1
+S1131030EE24FF24870130C08F818370382F330F53
+S1131040330F20E0888590E0880F991F880F991F3F
+S1131050282B392B8985829586958695837090E017
+S1131060282B392B2F5F3F4F790100E010E08E8150
+S11310708F7090E007972A852370220F3B85331FDA
+S11310803327331F232B820F911D04C0EE0CFF1C4A
+S1131090001F111F8A95D2F7B701C80160960FB6D9
+S11310A0F894DEBF0FBECDBFCF91DF911F910F919A
+S11310B0FF90EF9008951F93CF93DF930E94C6088B
+S11310C010E08FEF0E94B7081F5F1A30D1F70E941B
+S11310D0BC0840E050E060E070E080E00E940E0751
+S11310E0C0E0D0E004C02197D1F00E94B008813064
+S11310F0D1F7C0E0D0E040E050E060E070E087E38A
+S11311000E940E0740E050E060E070E089E20E9437
+S11311100E07882351F083E0C83ED80721F40E94CB
+S1131120C10810E011C02196E6CF0E94A90840E052
+S113113052E060E070E080E10E940E0710E0882336
+S113114009F411E00E94C108812FDF91CF911F9112
+S113115008958CB58C7F8CBD8DB581608DBD08954F
+S11311608FEF8EBD0DB407FEFDCF8EB508958EBDF5
+S11311700DB407FEFDCF089560E08AE00E947B0F66
+S1131180089561E08AE00E947B0F089561E08AE09F
+S11311900E945D0F0E94C10861E08BE00E945D0F18
+S11311A061E08DE00E945D0F83E58CBD0895089594
+S11311B08EE091E09093A7038093A60388E091E0EA
+S11311C09093A9038093A8031092AA0308950F9300
+S11311D01F938C0162E171E08BEB93E00E94E90ABA
+S11311E0B8018BEB93E00E94140BFFCFEF92FF92B8
+S11311F00F931F93DF93CF93CDB7DEB72C970FB622
+S1131200F894DEBF0FBECDBF40E855E260E070E069
+S11312108BEB93E00E942E0B8BEB93E00E946D0A04
+S11312206AE171E08BEB93E00E94140B8BEB93E08B
+S11312300E94290B8823D1F386EA93E00E945B087D
+S1131240882321F486E391E00E94E70861E086EABE
+S113125093E00E94DF02882359F460E086EA93E079
+S11312600E94DF02882321F480E491E00E94E708D1
+S1131270DE011196ECE7F1E08CE001900D928150D3
+S1131280E1F710E07E010894E11CF11C812F6AE073
+S11312900E94CC11805D8E83812F0E94CC11905DC1
+S11312A09F83B70188EA93E00E94E505882319F437
+S11312B01F5F143659F78091AA0387FD04C08CE49C
+S11312C091E00E94E70868E571E08BEB93E00E94EF
+S11312D0E90ABE016F5F7F4F8BEB93E00E94140B12
+S11312E0EE24FF24870166E671E088EA93E00E9419
+S11312F0430B2AE030E0B801A70188EA93E00E949A
+S1131300A20C6CE671E088EA93E00E94430B0E9411
+S1131310DD0EAB01BC0188EA93E00E94390C08940D
+S1131320E11CF11C011D111D84E6E816F104010500
+S11313301105C9F688EA93E00E94140567E771E095
+S11313408BEB93E00E94140B2C960FB6F894DEBF3F
+S11313500FBECDBFCF91DF911F910F91FF90EF9002
+S113136008950E94230F0E94F608FFCFFC01662314
+S113137011F41082089581E080830895FC016623AE
+S113138011F41082089581E0808308951092BB03C4
+S113139081E08093BC030895DF93CF930F92CDB780
+S11313A0DEB7FC01698341E0BE016F5F7F4F80813E
+S11313B00E94900D0F90CF91DF910895DF93CF930A
+S11313C00F92CDB7DEB7FC01698341E0BE016F5FC8
+S11313D07F4F80810E94900D0F90CF91DF910895EF
+S11313E02F923F924F925F926F927F928F929F9231
+S11313F0AF92BF92CF92DF92EF92FF920F931F931F
+S1131400DF93CF93CDB7DEB7A0970FB6F894DEBFC6
+S11314100FBECDBF2C016A017B0141155105610549
+S1131420710521F460E30E94DE093EC0AA24BB24B6
+S1131430622E7724882499241E010894211C311CCF
+S113144081010A0D1B1DC701B601A40193010E946D
+S1131450D811F80160830894A11CB11CC701B6011E
+S1131460A40193010E94D811C901DA016C017D0124
+S1131470C114D104E104F10419F775010894E108D9
+S1131480F108E20CF31C0DC0F70160816A3010F41E
+S1131490605D01C0695CC2010E94DE090894E10834
+S11314A0F108EC16FD0681F7A0960FB6F894DEBF9E
+S11314B00FBECDBFCF91DF911F910F91FF90EF90A1
+S11314C0DF90CF90BF90AF909F908F907F906F9060
+S11314D05F904F903F902F9008950F931F938C012E
+S11314E06DE00E94DE096AE0C8010E94DE091F91D6
+S11314F00F9108950F931F938C010E94CC09C8018A
+S11315000E946D0A1F910F9108950F931F938C01F0
+S11315100E94DE09C8010E946D0A1F910F9108956F
+S1131520EF92FF920F931F93CF93DF93EC017A0115
+S11315308B0177FF0BC06DE20E94DE0910950095C8
+S1131540F094E094E11CF11C011D111D2AE0B80186
+S1131550A701CE010E94F009DF91CF911F910F9155
+S1131560FF90EF9008950F931F938C010E94900AAF
+S1131570C8010E946D0A1F910F910895AB0166275F
+S113158057FD6095762F0E94B30A0895AB01662734
+S113159057FD6095762F0E94900A08952115310514
+S11315A021F4642F0E94DE0908952A30310519F4CC
+S11315B00E94900A08950E94F00908950F931F93C2
+S11315C08C010E94CE0AC8010E946D0A1F910F91DE
+S11315D00895CF92DF92EF92FF920F931F93CF93D0
+S11315E0DF936C017B01DB010D900020E9F78D0195
+S11315F001501040061B170BC0E0D0E009C0B70132
+S11316006C0F7D1F41E0F60180810E94900D2196B0
+S1131610C017D107A4F3DF91CF911F910F91FF90D1
+S1131620EF90DF90CF9008950F931F938C010E9449
+S1131630E90AC8010E946D0A1F910F910895FC01E7
+S113164080810E94E20D0895FC0180810E942C0D8E
+S11316500895FC0180810E94C40C0895FC018081DE
+S11316600E94EC0D0895DC01ED91FC910190F08154
+S1131670E02D09950895DC01ED91FC910190F08134
+S1131680E02D099508950F931F93CF93DF938C0159
+S1131690EB0109C02196D801ED91FC910190F081F4
+S11316A0E02DC801099568816623A1F7DF91CF91E8
+S11316B01F910F9108950F931F938C01DC01ED91FD
+S11316C0FC910190F081E02D6DE00995D801ED9138
+S11316D0FC910190F081E02D6AE0C80109951F9109
+S11316E00F9108950F931F938C01DC01ED91FC91F0
+S11316F00190F081E02D0995C8010E945B0B1F91B8
+S11317000F9108950F931F938C010E94430BC801FE
+S11317100E945B0B1F910F9108950F931F938C01EF
+S1131720DC01ED91FC910190F081E02D0995C80157
+S11317300E945B0B1F910F9108952F923F924F923D
+S11317405F926F927F928F929F92AF92BF92CF924D
+S1131750DF92EF92FF920F931F93DF93CF93CDB756
+S1131760DEB7A0970FB6F894DEBF0FBECDBF1C0145
+S11317706A017B01411551056105710549F4DC01DC
+S1131780ED91FC910190F081E02D60E3099554C046
+S1131790882499245401422E55246624772401E098
+S11317A010E00C0F1D1F080D191DC701B601A30180
+S11317B092010E94D811F80160830894811C911C45
+S11317C0A11CB11CC701B601A30192010E94D8114A
+S11317D0C901DA016C017D01C114D104E104F104F1
+S11317E0F1F681E0E82EF12CEC0EFD1EE80CF91C5C
+S11317F03E010894611C711CD501C4010197A10923
+S1131800B1096C01C818D90814C0F601EE0DFF1D0A
+S113181060816A3010F4605D01C0695CD101ED91B2
+S1131820FC910190F081E02DC10109950894E10833
+S1131830F1086E147F0449F7A0960FB6F894DEBF42
+S11318400FBECDBFCF91DF911F910F91FF90EF900D
+S1131850DF90CF90BF90AF909F908F907F906F90CC
+S11318605F904F903F902F9008952AE00E949D0B27
+S113187008950F931F938C010E94350CC8010E9498
+S11318805B0B1F910F910895AB0160E070E00E9423
+S1131890350C08950F931F938C01AB0160E070E049
+S11318A00E94350CC8010E945B0B1F910F91089593
+S11318B0EF92FF920F931F93CF93DF93EC017A0182
+S11318C08B0177FF0FC0E881F9810190F081E02D51
+S11318D06DE2099510950095F094E094E11CF11CDB
+S11318E0011D111D2AE0B801A701CE010E949D0B24
+S11318F0DF91CF911F910F91FF90EF9008950F9377
+S11319001F938C010E94580CC8010E945B0B1F910D
+S11319100F910895AB01662757FD6095762F0E94BD
+S1131920580C08950F931F938C01AB01662757FD44
+S11319306095762F0E94580CC8010E945B0B1F9182
+S11319400F910895DC012115310541F4ED91FC91CD
+S11319500190F081E02D642F099508952A30310516
+S113196019F40E94580C08950E949D0B08950F933A
+S11319701F938C010E94A20CC8010E945B0B1F9153
+S11319800F91089518951895882329F489ED94E00A
+S11319900E947910089585EC94E00E9479100895CE
+S11319A01F920F920FB60F9211242F933F934F93D0
+S11319B05F936F937F938F939F93AF93BF93EF93B3
+S11319C0FF9383EE94E00E947910882331F083EE34
+S11319D094E00E944A108093CE00FF91EF91BF9152
+S11319E0AF919F918F917F916F915F914F913F91B3
+S11319F02F910F900FBE0F901F9018951F920F926A
+S1131A000FB60F9211242F933F934F935F936F93CD
+S1131A107F938F939F93AF93BF93EF93FF938FEC39
+S1131A2094E00E947910882331F08FEC94E00E94B6
+S1131A304A108093C600FF91EF91BF91AF919F919F
+S1131A408F917F916F915F914F913F912F910F9063
+S1131A500FBE0F901F901895882329F489ED94E008
+S1131A600E944A10089585EC94E00E944A1008955B
+S1131A701F920F920FB60F9211242F933F934F93FF
+S1131A805F936F937F938F939F93AF93BF93EF93E2
+S1131A90FF936091CE008091C80084FD04C085EC62
+S1131AA094E00E941E10FF91EF91BF91AF919F911E
+S1131AB08F917F916F915F914F913F912F910F90F3
+S1131AC00FBE0F901F9018951F920F920FB60F9292
+S1131AD011242F933F934F935F936F937F938F932F
+S1131AE09F93AF93BF93EF93FF936091C600809150
+S1131AF0C00084FD04C089ED94E00E941E10FF9193
+S1131B00EF91BF91AF919F918F917F916F915F9171
+S1131B104F913F912F910F900FBE0F901F901895EA
+S1131B20FF920F931F93CF93DF93162F042F442319
+S1131B3009F442C0FFB6F8948823E9F4862F972F5E
+S1131B409C01E90169918FEC94E00E941E109E01B2
+S1131B50211B2017B8F38091C00080648093C000DB
+S1131B608091C00085FFFCCF8FEC94E00E944A1066
+S1131B708093C6001CC0862F972F9C01E9016991B0
+S1131B8083EE94E00E941E109E01211B2017B8F3DF
+S1131B908091C80080648093C8008091C80085FF4C
+S1131BA0FCCF83EE94E00E944A108093CE008FB75E
+S1131BB030E8F322F82AFFBEDF91CF911F910F91F5
+S1131BC0FF900895882319F489ED94E002C085EC10
+S1131BD094E00E94C0100895EF92FF920F931F9318
+S1131BE07A018B019A01AB01569547953795279554
+S1131BF08823B1F5205C3D4B404F5F4FCA01B901CA
+S1131C00A80197010E94D811C901DA010197A1091D
+S1131C10B109292F3A2F4B2F55270196A11DB11D2C
+S1131C202093C50081508093C4001092C00010928C
+S1131C30C1001092C20088ED8093C10086E08093B9
+S1131C40C20040E850E06DEB73E089ED94E00E943F
+S1131C50121040E850E06DE374E08FEC94E049C06A
+S1131C60205C3D4B404F5F4FCA01B901A801970169
+S1131C700E94D811C901DA010197A109B109292FDC
+S1131C803A2F4B2F55270196A11DB11D2093CD004E
+S1131C9081508093CC001092C8001092C900109219
+S1131CA0CA0088ED8093C90086E08093CA0080E86A
+S1131CB090E00E94CA108093EF049093F00480E8AF
+S1131CC090E00E94CA108093ED049093EE0460911A
+S1131CD0EF047091F00442E050E085EC94E00E943F
+S1131CE012106091ED047091EE0442E050E083EE36
+S1131CF094E00E9412101F910F91FF90EF900895AD
+S1131D001F920F920FB60F9211242F938F939F93CC
+S1131D10AF93BF938091BD049091BE04A091BF0482
+S1131D20B091C0048050904CAF4FBF4F8093BD041E
+S1131D309093BE04A093BF04B093C00427C08091C5
+S1131D40BD049091BE04A091BF04B091C00480581A
+S1131D509E43A040B0408093BD049093BE04A093E2
+S1131D60BF04B093C0048091C1049091C204A091B7
+S1131D70C304B091C4040196A11DB11D8093C10494
+S1131D809093C204A093C304B093C4048091BD048F
+S1131D909091BE04A091BF04B091C00481589E43A9
+S1131DA0A040B04060F6BF91AF919F918F912F9169
+S1131DB00F900FBE0F901F9018958FB7F894209135
+S1131DC0C1043091C2044091C3045091C4048FBF34
+S1131DD0B901CA010895EF92FF920F931F937B01FB
+S1131DE08C018FB7F8944091C1045091C204609162
+S1131DF0C3047091C4048FBF2FB7F8948091C104B9
+S1131E009091C204A091C304B091C4042FBF841B59
+S1131E10950BA60BB70B8E159F05A007B10760F3B2
+S1131E201F910F91FF90EF900895019759F0FC01D5
+S1131E30EE0FFF1FEE0FFF1F32978FB7F894319705
+S1131E40F1F78FBF0895789484B5826084BD84B51A
+S1131E50816084BD85B5826085BD85B5816085BDA1
+S1131E60EEE6F0E0808181608083E1E8F0E080814B
+S1131E7082608083808181608083E0E8F0E08081FB
+S1131E8081608083E1EBF0E0808184608083E0EB1B
+S1131E90F0E0808181608083EAE7F0E08081846003
+S1131EA0808380818260808380818160808380815F
+S1131EB0806880831092C1000895282F30E0C90102
+S1131EC085549F4FFC01949125563F4FF90184910D
+S1131ED0882381F0E82FF0E0E457FF4FE491F0E02D
+S1131EE0662329F4808190958923808308958081D5
+S1131EF0892B80830895482F50E0CA0185529F4F53
+S1131F00FC012491CA0185549F4FFC0194914556CC
+S1131F105F4FFA0134913323C1F1222331F121308F
+S1131F2019F484B58F7704C0223021F484B58F7DF1
+S1131F3084BD1BC0233021F4809180008F7705C0BD
+S1131F40243031F4809180008F7D809380000DC017
+S1131F50263021F48091B0008F7705C0273029F412
+S1131F608091B0008F7D8093B000E32FF0E0EF56B6
+S1131F70FF4FE491F0E0662329F480819095892352
+S1131F80808308958081892B80830895482F50E0B1
+S1131F90CA0185529F4FFC012491CA0185549F4F69
+S1131FA0FC01949145565F4FFA013491332319F49F
+S1131FB020E030E035C0222331F1213019F484B51A
+S1131FC08F7704C0223021F484B58F7D84BD1BC07B
+S1131FD0233021F4809180008F7705C0243031F4C0
+S1131FE0809180008F7D809380000DC0263021F485
+S1131FF08091B0008F7705C0273029F48091B0001C
+S11320008F7D8093B000E32FF0E0EA56FF4FE49118
+S1132010F0E0808120E030E0892311F021E030E01D
+S1132020C9010895FC015783468311861086718384
+S1132030608373836283758364830895DC011896D7
+S11320402D913C91199716968D919C91179728176D
+S11320503907F8F4ED91FC91119761931196FC9373
+S1132060EE9318968D919C911997019619969C93CD
+S11320708E93189714962D913C91159716968D91E1
+S11320809C911797820F931FE817F90710F02D936F
+S11320903C930895DC0118968D919C9119970097B3
+S11320A019F42FEF3FEF23C01296ED91FC91139793
+S11320B041911396FC93EE931297019719969C9372
+S11320C08E93189714962D913C91159716968D9191
+S11320D09C911797820F931FE817F90720F0139626
+S11320E03C932E931297242F332727FD3095C90153
+S11320F00895FC0180850895FC0180859185892BD4
+S113210011F480E008950280F381E02D8081089528
+S1132110CF93DF93DC01562F18966D917C9119971C
+S11321206115710541F11296ED91FC911397CD91D2
+S1132130DC91119740E01CC08081851711F4652F54
+S11321401BC04F5F842F90E086179707A0F49F0170
+S11321502F5F3F4F1496ED91FC91159716968D9134
+S11321609C9117978E0F9F1F8217930708F0F90110
+S1132170EC17FD0709F760E0862FDF91CF910895F2
+S1132180FC011186108684819581918380839383D9
+S113219082830895CF93DF93BC018230910510F4BC
+S11321A062E070E0A091F304B091F404ED01E0E08A
+S11321B0F0E040E050E021C08881998186179707BC
+S11321C069F48A819B81309719F09383828304C0D8
+S11321D09093F4048093F304FE0134C068177907E4
+S11321E038F44115510519F08417950708F4AC012A
+S11321F0FE018A819B819C01E9012097E9F6411542
+S11322005105A9F1CA01861B970B049708F4BA017A
+S1132210E0E0F0E02AC08D919C9111978417950716
+S1132220F9F46417750781F412968D919C911397B4
+S1132230309719F09383828304C09093F4048093BD
+S1132240F304FD0132964CC0CA01861B970BFD01B5
+S1132250E80FF91F6193719302978D939C9340C08B
+S1132260FD01828193819C01D9011097A1F680918F
+S1132270F1049091F204892B41F480918A019091A8
+S11322808B019093F2048093F10440918C0150915E
+S11322908D014115510541F44DB75EB78091880118
+S11322A090918901481B590B2091F1043091F2045B
+S11322B0CA01821B930B8617970780F0AB014E5F10
+S11322C05F4F8417950750F0420F531F5093F20449
+S11322D04093F104F9016193719302C0E0E0F0E0EE
+S11322E0CF01DF91CF910895CF93DF93009709F445
+S11322F050C0EC0122971B821A82A091F304B09182
+S1132300F404109709F140E050E0AC17BD0708F160
+S1132310BB83AA83FE0121913191E20FF31FAE1713
+S1132320BF0779F48D919C911197280F391F2E5F67
+S11323303F4F3983288312968D919C9113979B83E9
+S11323408A834115510571F4D093F404C093F304C6
+S113235020C012968D919C911397AD01009711F0B6
+S1132360DC01D3CFFA01D383C28321913191E20FEF
+S1132370F31FCE17DF0769F488819981280F391F6D
+S11323802E5F3F4FFA01318320838A819B8193839F
+S11323908283DF91CF910895991B79E004C0991F3E
+S11323A0961708F0961B881F7A95C9F780950895AB
+S11323B0A1E21A2EAA1BBB1BFD010DC0AA1FBB1F45
+S11323C0EE1FFF1FA217B307E407F50720F0A21BB7
+S11323D0B30BE40BF50B661F771F881F991F1A9424
+S11323E069F760957095809590959B01AC01BD014E
+S11323F0CF010895EE0FFF1F0590F491E02D09948D
+S1072400F894FFCF7A
+S1132404FFFFFFFF00000000FD0600000000CB07F3
+S113241446076572726F723A2000547970652061C0
+S11324246E792063686172616374657220746F20CD
+S1132434737461727400636172642E696E697400EA
+S113244446617431363A3A696E69740066696C653A
+S11324542E637265617465005072696E74696E6787
+S113246420746F3A20006C696E652000206D696CDD
+S11324746C6973203D2000446F6E65005052494ED0
+S11124845430302E545854002000F50400004B
+S9030000FC
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/fat16print.pde b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/fat16print.pde
new file mode 100644
index 00000000..8a1bb556
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16print/fat16print.pde
@@ -0,0 +1,57 @@
+/*
+ * Print Example
+ *
+ * This sketch shows how to use the Arduino V12 Print class with Fat16
+ */
+#include "Fat16.h"
+#include "SdCard.h"
+
+SdCard card;
+Fat16 file;
+
+void error(char *str)
+{
+ Serial.print("error: ");
+ Serial.println(str);
+ while(1);
+}
+
+void setup(void)
+{
+ Serial.begin(9600);
+ Serial.println();
+ Serial.println("Type any character to start");
+ while (!Serial.available());
+
+ // initialize the SD card
+ if (!card.init()) error("card.init");
+
+ // initialize a FAT16 volume
+ // Assume MBR volume and try partition one
+ if (!Fat16::init(card, 1)) {
+ // try super floppy
+ if (!Fat16::init(card, 0)) error("Fat16::init");
+ }
+ // create a new file
+ char name[] = "PRINT00.TXT";
+ for (uint8_t i = 0; i < 100; i++) {
+ name[5] = i/10 + '0';
+ name[6] = i%10 + '0';
+ if (file.create(name)) break;
+ }
+ if (!file.isOpen()) error ("file.create");
+ Serial.print("Printing to: ");
+ Serial.println(name);
+
+ // print 100 line to file
+ for (uint8_t i = 0; i < 100; i++) {
+ file.print("line ");
+ file.print(i, DEC);
+ file.print(" millis = ");
+ file.println(millis());
+ }
+ // force write of all data to the SD card
+ file.sync();
+ Serial.println("Done");
+}
+void loop(void){}
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/applet/fat16read.cpp b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/applet/fat16read.cpp
new file mode 100644
index 00000000..dd9c455f
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/applet/fat16read.cpp
@@ -0,0 +1,70 @@
+/*
+ * Sketch to read and print the file
+ * "PRINT00.TXT" created by printExample.pde or
+ * "WRITE00.TXT" created by writeExample.pde
+ */
+#include "Fat16.h"
+#include "SdCard.h"
+
+#include "WProgram.h"
+void error(char *str);
+void setup(void);
+void loop(void);
+SdCard card;
+Fat16 file;
+
+void error(char *str)
+{
+ Serial.print("error: ");
+ Serial.println(str);
+ while(1);
+}
+void setup(void)
+{
+ Serial.begin(9600);
+ Serial.println();
+ Serial.println("type any character to start");
+ while (!Serial.available());
+
+ // initialize the SD card
+ if (!card.init()) error("card.init");
+
+ // initialize a FAT16 volume
+ // try partition one
+ if (!Fat16::init(card, 1)) {
+ // try super floppy format
+ if (!Fat16::init(card, 0)) error("Fat16.init");
+ }
+
+ // open a file
+ if (!file.open("PRINT00.TXT")) {
+ // try the other file
+ if (!file.open("WRITE00.TXT")) error("file.open");
+ }
+
+ // copy file to serial port
+ uint16_t n;
+ uint8_t buf[7];
+ while ((n = file.read(buf, sizeof(buf))) > 0) {
+ for (uint8_t i = 0; i < n; i++) Serial.print(buf[i]);
+ }
+ /* easier way
+ uint16_t c;
+ while ((c = file.read()) >= 0) Serial.print((char)c);
+ */
+}
+
+void loop(void) {}
+
+int main(void)
+{
+ init();
+
+ setup();
+
+ for (;;)
+ loop();
+
+ return 0;
+}
+
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/applet/fat16read.elf b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/applet/fat16read.elf
new file mode 100644
index 00000000..c41fd669
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/applet/fat16read.elf
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/applet/fat16read.hex b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/applet/fat16read.hex
new file mode 100644
index 00000000..d47853c8
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/applet/fat16read.hex
@@ -0,0 +1,527 @@
+:100000000C9480000C94A8000C94A8000C94A800F8
+:100010000C94A8000C94A8000C94A8000C94A800C0
+:100020000C94A8000C94A8000C94A8000C94A800B0
+:100030000C94A8000C94A8000C94A8000C94A800A0
+:100040000C94A8000C94A8000C94BA0C0C94A80072
+:100050000C949E0B0C94A8000C94380B0C94A800E4
+:100060000C94A8000C94A8000C94A8000C94A80070
+:100070000C94720B0C94A8000C940A0B7C3C3E5E12
+:100080002B3D3F2F5B5D3B2C2A225C000021242767
+:100090002A002225282B0020232629020202020200
+:1000A000020202040404040404040403030303031B
+:1000B0000303030101010101010101010204081010
+:1000C0002040800102040810204080010204081032
+:1000D000204080804020100804020100000001023E
+:1000E00000000000000000040307060000000000FC
+:1000F000000000000000000000000000D8088F0988
+:1001000011241FBECFEFD0E1DEBFCDBF11E0A0E0D4
+:10011000B1E0E0E6F0E202C005900D92A437B1072D
+:10012000D9F714E0A4E7B1E001C01D92AB3DB107DF
+:10013000E1F710E0C0E0D1E004C02297FE010E9488
+:100140002A10CC3FD107C9F70E947A090C942E10CF
+:100150000C940000CF93DF93EC01DB0180E090E092
+:1001600020E2FD01E80FF91F208301968B309105F5
+:10017000C1F757E040E022C02E3219F08CE790E042
+:1001800007C05A3029F15AE048E018C0321701F18F
+:10019000FC01019634913323C9F75417C8F021327A
+:1001A000B8F02F37A8F4822F81568A3110F4622FCD
+:1001B0006052FD01E40FF11D60834F5F2991622FB2
+:1001C0002223D1F690E08C91803219F091E001C0A9
+:1001D00090E0892FDF91CF91089580918B03882340
+:1001E00011F481E00895A0917401B0917501ED9131
+:1001F000FC91119740910001509101016091020121
+:10020000709103010280F381E02D2BE831E0CD01F4
+:100210000995882319F010928B0381E00895DF92ED
+:10022000EF92FF920F931F937B018C01D42E82E0FB
+:10023000481761F40E94ED008823D1F1EBE8F1E06A
+:10024000119283E0EB38F807D9F723C080910001C1
+:1002500090910101A0910201B09103018E159F05BB
+:10026000A007B107F1F00E94ED00882309F1E091A9
+:100270007401F0917501A081B1810D90BC91A02D08
+:100280002BE831E0B801A701CF01FD0109958823D2
+:1002900079F0E0920001F0920101009302011093C5
+:1002A000030180918B038D2980938B0381E001C032
+:1002B00080E01F910F91FF90EF90DF900895CF9312
+:1002C000DF93EC01F62FE42F80917D0190917E0168
+:1002D00001968C179D0780F16D2F772780E090E0C5
+:1002E00020917F01309180014091810150918201E4
+:1002F000620F731F841F951F4E2F50E020917B01CA
+:1003000030917C01D9014A9F90014B9F300D5A9F3B
+:10031000300D112440E050E0620F731F841F951FC1
+:100320004F2F0E940F01882339F0BE017070660FB5
+:10033000771F65577E4F02C060E070E0CB01DF9110
+:10034000CF910895CF93DF93EC01E62F809179014F
+:1003500090917A01C817D90720F5BE0134E076954F
+:1003600067953A95E1F780E090E020918301309124
+:1003700084014091850150918601620F731F841F93
+:10038000951F4E2F0E940F01882359F0BE016F70F8
+:10039000707025E0660F771F2A95E1F765577E4F4D
+:1003A00002C060E070E0CB01DF91CF910895CF9261
+:1003B000DF92EF92FF920F931F93CF93DF937C0115
+:1003C000FC01C189D289209711F4C1E0D0E000E09E
+:1003D00010E080917D0190917E010817190708F0C7
+:1003E0004FC08C179D0710F4C1E0D0E0219640E08B
+:1003F00060E0CE010E945F01FC01009709F440C05B
+:1004000080819181892B19F00F5F1F4FE2CFF70197
+:1004100081899289892B69F461E0838194810E94AA
+:10042000A201FC01009761F1D38FC28FF701D6833F
+:10043000C58310E0CC24CA94DC2C19C0F701818953
+:100440009289009749F0412F61E00E945F01FC0111
+:100450000097B1F0D183C083412F61E0CE010E94AB
+:100460005F01FC01009761F0D182C0821F5F809123
+:100470007701181718F3F701D28BC18B81E001C007
+:1004800080E0DF91CF911F910F91FF90EF90DF906F
+:10049000CF900895EF92FF920F931F93E090870102
+:1004A000F09088010091890110918A01E60EF11CFB
+:1004B000011D111D02972091780130E0BC01629F5F
+:1004C000C001639F900D729F900D1124A0E0B0E0D9
+:1004D000E80EF91E0A1F1B1FC801B7010E940F0179
+:1004E0001F910F91FF90EF900895AF92BF92CF921E
+:1004F000DF92EF92FF920F931F93CF93DF936C01E4
+:100500007B0180917601882309F44BC0F6010081BC
+:100510001181A42EBB248091790190917A01081752
+:10052000190708F03EC060E0C8010E94A201EC017A
+:100530000097C9F18881E114F10429F4882369F155
+:10054000853E41F52AC0882361F1853E19F18B85EE
+:10055000282F30E0C9018F7390700F97D9F02A21AE
+:100560003B21232BB9F4F70180818823B1F02AE0E5
+:1005700001C02150E22FF0E0DE01AE0FBF1FEE0DF3
+:10058000FF1D9C918081981719F4222391F705C0D3
+:10059000222319F00F5F1F4FBECFF6011183008396
+:1005A00002C0C0E0D0E0CE01DF91CF911F910F914A
+:1005B000FF90EF90DF90CF90BF90AF9008956F9233
+:1005C0007F928F929F92AF92BF92CF92DF92EF92E3
+:1005D000FF920F931F93CF93DF939C01162F80916F
+:1005E0007601882309F0E6C0653008F0E3C0309357
+:1005F000750120937401662321F4EE24FF24870102
+:1006000017C040E060E070E080E090E00E940F01E1
+:10061000882309F4CFC0E12FF0E0A4E0EE0FFF1F24
+:10062000AA95E1F7EF5BFC4FE080F1800281138136
+:1006300040E0C801B7010E940F01882309F4BAC045
+:1006400080918903853509F0B5C080918A038A3A83
+:1006500009F0B0C080909B01809277019090980142
+:1006600090927801C091A101D091A201D0937C0118
+:10067000C0937B0160919C0170919D0170937A0100
+:10068000609379016090990170909A01930140E024
+:1006900050E02E0D3F1D401F511F20937F013093CE
+:1006A00080014093810150938201882D90E0FC01EC
+:1006B000EC9FC001ED9F900DFC9F900D1124A0E0D8
+:1006C000B0E0820F931FA41FB51F80938301909306
+:1006D0008401A0938501B0938601F5E0660F771F32
+:1006E000FA95E1F761507E4F672F772766959B015A
+:1006F00040E050E0280F391F4A1F5B1F20938701FD
+:10070000309388014093890150938A0180919E0122
+:1007100090919F01009721F05C01CC24DD2408C05A
+:10072000A090AB01B090AC01C090AD01D090AE01F3
+:10073000E21AF30A040B150BEA0CFB1C0C1D1D1D21
+:10074000292D30E040E050E0C801B7010E940610BA
+:10075000A90130937E0120937D01809196019091B3
+:1007600097018050924031F5209721F12FE0453FCD
+:10077000520700F181E0A81680E0B80680E8C806BC
+:1007800080E0D806B8F46728A9F0882099F0852F72
+:100790009927C817D90770F0992061F0292D30E00A
+:1007A000C901019782239323892B21F481E080934F
+:1007B000760101C080E0DF91CF911F910F91FF90F2
+:1007C000EF90DF90CF90BF90AF909F908F907F90F1
+:1007D0006F90089540E060E00E945F01FC01009787
+:1007E00019F420E030E002C020813181C901089570
+:1007F0006F927F928F929F92AF92BF92CF92DF9231
+:10080000EF92FF920F931F93CF93DF93EC014B0175
+:100810005A018A8187FF82C0ED84FE840F85188982
+:100820002F81388549855A85C501A0E0B0E08E0D3D
+:100830009F1DA01FB11F281739074A075B0718F42F
+:100840005901AE18BF086501612C02E0702E60C02E
+:100850002D853E854F855889DA01C90119E0B69585
+:10086000A795979587951A95D1F710917801115012
+:100870001823BFEFEB2EB1E0FB2EE222F32211236F
+:10088000A1F4E114F10489F48B859C85009719F09B
+:100890000E94EA0302C08D819E819C878B878230F3
+:1008A0009105E0F1885F9F4FC8F540E0612F8B858F
+:1008B0009C850E944A02882389F1C3018E199F09F1
+:1008C000A6018C159D0508F4AC01970125573E4FF4
+:1008D000B901640F751FD401F90102C081918D9394
+:1008E000E617F707D9F7E21BF30B8E0E9F1EC41A0B
+:1008F000D50A9A0140E050E08D859E85AF85B88984
+:10090000820F931FA41FB51F8D879E87AF87B88B5B
+:10091000C114D10409F09CCFA50102C04FEF5FEFD5
+:10092000CA01DF91CF911F910F91FF90EF90DF905F
+:10093000CF90BF90AF909F908F907F906F900895D1
+:10094000DF93CF930F92CDB7DEB741E050E0BE0109
+:100950006F5F7F4F0E94F803019719F02FEF3FEF71
+:1009600003C08981282F30E0C9010F90CF91DF911A
+:100970000895AF92BF92CF92DF92EF92FF920F93C2
+:100980001F93CF93DF935C016A017B01FC0182819D
+:1009900087FF38C087819085A185B2858417950728
+:1009A000A607B70778F13AC0F5011486138623C06D
+:1009B000F5010581168180917801382F330F20E0F1
+:1009C000442737FD4095542FC701B6010E940610F9
+:1009D000E9010CC0C8010E94EA038C018230910534
+:1009E00088F02197FFEF883F9F0760F4209791F7E9
+:1009F000F50114870387F501C586D686E786F08A58
+:100A000081E001C080E0DF91CF911F910F91FF90B5
+:100A1000EF90DF90CF90BF90AF90089541155105B2
+:100A20006105710509F2C4CFCF93DF93EC018A8190
+:100A300087FF18C086FF13C061E08B819C810E94F4
+:100A4000A201FC01009771F08F819885A985BA8574
+:100A5000848F958FA68FB78F8A818F7B8A830E9420
+:100A6000ED0001C080E0DF91CF910895CF92DF9239
+:100A7000EF92FF920F931F93CF93DF93EC016B01E3
+:100A80008A8187FD59C080917601882309F454C07A
+:100A90005DC08081882309F44FC0853E09F44CC0B5
+:100AA0009385892F887109F047C09F739A83828D3F
+:100AB000938D9E838D83E48CF58C068D178DEF824C
+:100AC000F88609871A871C861B861D861E861F8648
+:100AD000188AE114F1040105110519F41A8A198A1A
+:100AE00022C09A8B898B80917801382F330F20E0B8
+:100AF000442737FD4095542FC801B7010E940610C6
+:100B000089010EC089899A890E94EA039A8B898B90
+:100B10008230910588F001501040885F9F4F60F44B
+:100B20000115110579F78A8180688A83DC82CB827E
+:100B3000CE010E94140501C080E0DF91CF911F918A
+:100B40000F91FF90EF90DF90CF90089560E0C60185
+:100B50000E94A201FC01009709F09BCFEDCFEF921C
+:100B6000FF920F931F93DF93CF93CDB7DEB72D97EF
+:100B70000FB6F894DEBF0FBECDBF7C01CB018E0156
+:100B80000D5F1F4FB8010E94AA00882381F01A82CE
+:100B9000198248E0B801CE0101960E947502892BA6
+:100BA00031F069817A81C7010E94360501C080E079
+:100BB0002D960FB6F894DEBF0FBECDBFCF91DF915B
+:100BC0001F910F91FF90EF900895CF92DF92EF92D7
+:100BD000FF920F931F93DF93CF93CDB7DEB72D977F
+:100BE0000FB6F894DEBF0FBECDBF6C019B01FC01B8
+:100BF000828187FD41C01A82198283E0E82EF12CA0
+:100C0000EC0EFD1EB701C9010E94AA008823A1F1C4
+:100C100048E0B7018E010F5F1F4FC8010E947502A7
+:100C2000892B51F51A82198248E060E070E0C80112
+:100C30000E947502AC010097F9F080918B038160EE
+:100C400080938B0320E030E0B7012B3010F080E080
+:100C500004C0FB01E20FF31F8081FA01E20FF31FD2
+:100C600080832F5F3F4F2032310579F769817A8188
+:100C7000C6010E94360501C080E02D960FB6F8949B
+:100C8000DEBF0FBECDBFCF91DF911F910F91FF90BF
+:100C9000EF90DF90CF900895CF93DF93EC010E9407
+:100CA0001405882311F01A8281E0DF91CF91089515
+:100CB0006F927F929F92AF92BF92CF92DF92EF920C
+:100CC000FF920F931F93CF93DF93EC015B01E42E10
+:100CD000952E8A8187FF4AC080FD48C0842F952FBA
+:100CE0009C016901612C52E0752E71C02F813885FD
+:100CF00049855A85DA01C90149E0B695A7959795C6
+:100D000087954A95D1F7F0907801FA94F8228901F5
+:100D10001170FF20F1F40115110501F589899A89F7
+:100D2000009729F48D819E81009781F406C00E946E
+:100D3000EA032FEF883F920730F0CE010E94D701DF
+:100D4000882351F413C08230910580F09A8B898BEF
+:100D500003C00115110511F442E001C041E06F2DFF
+:100D600089899A890E944A02882319F42FEF3FEF5C
+:100D700035C09301201B310BA6012C153D0508F44D
+:100D8000A901980125573E4FB901640F751FD50180
+:100D9000F90102C08D918193E617F707D9F7E21B9D
+:100DA000F30BAE0EBF1EC41AD50ACA01A0E0B0E014
+:100DB0002F81388549855A85280F391F4A1F5B1FA7
+:100DC0002F83388749875A878A8180648A83C11430
+:100DD000D10409F08BCF8E2D992D9C01C901DF9193
+:100DE000CF911F910F91FF90EF90DF90CF90BF9028
+:100DF000AF909F907F906F900895DF93CF930F9265
+:100E0000CDB7DEB7698341E050E0BE016F5F7F4F31
+:100E10000E9458060F90CF91DF910895DF92EF92D4
+:100E2000FF920F931F93D82E7A018B010E94B00876
+:100E30008D2D80640E94B708812F9927AA27BB2790
+:100E40000E94B708C801AA27BB270E94B708BB2782
+:100E5000A12F902F8F2D0E94B7088E2D0E94B708CA
+:100E6000DD2011F08FEF01C085E90E94B7081FEF68
+:100E70000E94B0088F3F21F4112311F01150F8CFD8
+:100E80001F910F91FF90EF90DF900895EF92FF92E6
+:100E90000F931F93CF93DF937A018B01E90139E020
+:100EA000EE0CFF1C001F111F3A95D1F7E114F1045D
+:100EB00001051105C1F10E94BC08B801A70188E134
+:100EC0000E940E07882311F58EEF0E94B70800E0FC
+:100ED00010E0FE01E00FF11F80810E94B7080F5F54
+:100EE0001F4F82E000301807A1F78FEF0E94B7086C
+:100EF0008FEF0E94B7080E94B0088F71853099F477
+:100F00000FEF1FEF08C00115110519F40E94C10869
+:100F10000AC0015010400E94B0088F3FA1F70E9404
+:100F2000C10881E001C080E0DF91CF911F910F9156
+:100F3000FF90EF900895EF92FF920F931F93CF933E
+:100F4000DF937C018B01C0E0D0E006C0219721F443
+:100F50000E94C10880E018C00E94B0088E3FB1F71F
+:100F6000C0E0D0E007C00E94B008F701EC0FFD1F01
+:100F700080832196C017D107B0F30E94B0080E9469
+:100F8000B0080E94C10881E0DF91CF911F910F91BD
+:100F9000FF90EF900895EF92FF920F931F93CF93DE
+:100FA000DF937A018B01E9010E94BC0849E0EE0C55
+:100FB000FF1C001F111F4A95D1F7B801A70181E15D
+:100FC0000E940E07882321F00E94C10880E005C01E
+:100FD00060E072E0CE010E949B07DF91CF911F91EC
+:100FE0000F91FF90EF900895EF92FF920F931F9350
+:100FF000DF93CF93CDB7DEB760970FB6F894DEBF1F
+:101000000FBECDBF0E94BC0840E050E060E070E041
+:1010100089E00E940E07882319F00E94C10808C0C9
+:1010200060E170E0CE0101960E949B07882321F4C5
+:10103000EE24FF24870130C08F818370382F330F57
+:10104000330F20E0888590E0880F991F880F991F43
+:10105000282B392B8985829586958695837090E01B
+:10106000282B392B2F5F3F4F790100E010E08E8154
+:101070008F7090E007972A852370220F3B85331FDE
+:101080003327331F232B820F911D04C0EE0CFF1C4E
+:10109000001F111F8A95D2F7B701C80160960FB6DD
+:1010A000F894DEBF0FBECDBFCF91DF911F910F919E
+:1010B000FF90EF9008951F93CF93DF930E94C6088F
+:1010C00010E08FEF0E94B7081F5F1A30D1F70E941F
+:1010D000BC0840E050E060E070E080E00E940E0755
+:1010E000C0E0D0E004C02197D1F00E94B008813068
+:1010F000D1F7C0E0D0E040E050E060E070E087E38E
+:101100000E940E0740E050E060E070E089E20E943B
+:101110000E07882351F083E0C83ED80721F40E94CF
+:10112000C10810E011C02196E6CF0E94A90840E056
+:1011300052E060E070E080E10E940E0710E088233A
+:1011400009F411E00E94C108812FDF91CF911F9116
+:1011500008958CB58C7F8CBD8DB581608DBD089553
+:101160008FEF8EBD0DB407FEFDCF8EB508958EBDF9
+:101170000DB407FEFDCF089560E08AE00E94B50D32
+:10118000089561E08AE00E94B50D089561E08AE06B
+:101190000E94970D0E94C10861E08BE00E94970DAC
+:1011A00061E08DE00E94970D83E58CBD0895089560
+:1011B0008EE091E090938D0380938C0388E091E022
+:1011C00090938F0380938E031092900308950F9352
+:1011D0001F938C0162E171E081EA93E00E94B20A00
+:1011E000B80181EA93E00E94DD0AFFCFCF92DF923F
+:1011F000FF920F931F93DF93CF93CDB7DEB727975F
+:101200000FB6F894DEBF0FBECDBF40E855E260E0F8
+:1012100070E081EA93E00E94F70A81EA93E00E947D
+:10122000360A6AE171E081EA93E00E94DD0A81EA10
+:1012300093E00E94F20A8823D1F38CE893E00E94A5
+:101240005B08882321F486E391E00E94E70861E0CF
+:101250008CE893E00E94DF02882359F460E08CE878
+:1012600093E00E94DF02882321F480E491E00E9451
+:10127000E7086BE471E08EE893E00E94AF058823F5
+:10128000D9F467E571E08EE893E00E94AF0588230A
+:1012900099F483E691E00E94E7080EC0EC0DFD1D75
+:1012A000608181EA93E00E949509F394EF2DF0E0CC
+:1012B000E017F10728F4F2CF6E010894C11CD11C8D
+:1012C00047E050E0B6018EE893E00E94F8038C01FD
+:1012D000009711F0FF24EACF27960FB6F894DEBFEF
+:1012E0000FBECDBFCF91DF911F910F91FF90DF9087
+:1012F000CF9008950E945D0D0E94F608FFCFFC017B
+:10130000662311F41082089581E080830895FC0122
+:10131000662311F41082089581E08083089510926D
+:10132000A10381E08093A2030895DF93CF930F92EE
+:10133000CDB7DEB7FC01698341E0BE016F5F7F4F2F
+:1013400080810E94CA0B0F90CF91DF910895DF93A7
+:10135000CF930F92CDB7DEB7FC01698341E0BE01A8
+:101360006F5F7F4F80810E94CA0B0F90CF91DF91FA
+:1013700008952F923F924F925F926F927F928F9239
+:101380009F92AF92BF92CF92DF92EF92FF920F9314
+:101390001F93DF93CF93CDB7DEB7A0970FB6F89426
+:1013A000DEBF0FBECDBF2C016A017B014115510587
+:1013B0006105710521F460E30E94A7093EC0AA24DB
+:1013C000BB24622E7724882499241E010894211CB2
+:1013D000311C81010A0D1B1DC701B601A401930137
+:1013E0000E940610F80160830894A11CB11CC7017B
+:1013F000B601A40193010E940610C901DA016C0133
+:101400007D01C114D104E104F10419F775010894B8
+:10141000E108F108E20CF31C0DC0F70160816A30AD
+:1014200010F4605D01C0695CC2010E94A7090894C4
+:10143000E108F108EC16FD0681F7A0960FB6F894C6
+:10144000DEBF0FBECDBFCF91DF911F910F91FF90F7
+:10145000EF90DF90CF90BF90AF909F908F907F9054
+:101460006F905F904F903F902F9008950F931F9330
+:101470008C016DE00E94A7096AE0C8010E94A709DB
+:101480001F910F9108950F931F938C010E9495094E
+:10149000C8010E94360A1F910F9108950F931F9360
+:1014A0008C010E94A709C8010E94360A1F910F9162
+:1014B0000895EF92FF920F931F93CF93DF93EC0168
+:1014C0007A018B0177FF0BC06DE20E94A70910958E
+:1014D0000095F094E094E11CF11C011D111D2AE01F
+:1014E000B801A701CE010E94B909DF91CF911F91E8
+:1014F0000F91FF90EF9008950F931F938C010E941E
+:10150000590AC8010E94360A1F910F910895AB0134
+:10151000662757FD6095762F0E947C0A0895AB01DF
+:10152000662757FD6095762F0E94590A0895211568
+:10153000310521F4642F0E94A70908952A3031054E
+:1015400019F40E94590A08950E94B90908950F9349
+:101550001F938C010E94970AC8010E94360A1F91AE
+:101560000F910895CF92DF92EF92FF920F931F9306
+:10157000CF93DF936C017B01DB010D900020E9F735
+:101580008D0101501040061B170BC0E0D0E009C0D0
+:10159000B7016C0F7D1F41E0F60180810E94CA0BEC
+:1015A0002196C017D107A4F3DF91CF911F910F911E
+:1015B000FF90EF90DF90CF9008950F931F938C01D1
+:1015C0000E94B20AC8010E94360A1F910F91089525
+:1015D000FC0180810E941C0C0895FC0180810E9406
+:1015E000660B0895FC0180810E94FE0A0895FC01AB
+:1015F00080810E94260C089518951895882329F457
+:101600008FEB94E00E94B30E08958BEA94E00E9461
+:10161000B30E08951F920F920FB60F9211242F93BD
+:101620003F934F935F936F937F938F939F93AF936A
+:10163000BF93EF93FF9389EC94E00E94B30E88234D
+:1016400031F089EC94E00E94840E8093CE00FF91EB
+:10165000EF91BF91AF919F918F917F916F915F912A
+:101660004F913F912F910F900FBE0F901F901895A3
+:101670001F920F920FB60F9211242F933F934F9307
+:101680005F936F937F938F939F93AF93BF93EF93EA
+:10169000FF9385EB94E00E94B30E882331F085EB35
+:1016A00094E00E94840E8093C600FF91EF91BF9159
+:1016B000AF919F918F917F916F915F914F913F91EA
+:1016C0002F910F900FBE0F901F901895882329F42B
+:1016D0008FEB94E00E94840E08958BEA94E00E94C0
+:1016E000840E08951F920F920FB60F9211242F931C
+:1016F0003F934F935F936F937F938F939F93AF939A
+:10170000BF93EF93FF936091CE008091C80084FD5A
+:1017100004C08BEA94E00E94580EFF91EF91BF91B4
+:10172000AF919F918F917F916F915F914F913F9179
+:101730002F910F900FBE0F901F9018951F920F9230
+:101740000FB60F9211242F933F934F935F936F9394
+:101750007F938F939F93AF93BF93EF93FF9360918A
+:10176000C6008091C00084FD04C08FEB94E00E940D
+:10177000580EFF91EF91BF91AF919F918F917F9103
+:101780006F915F914F913F912F910F900FBE0F90EE
+:101790001F901895FF920F931F93CF93DF93162FEF
+:1017A000042F442309F442C0FFB6F8948823E9F4D7
+:1017B000862F972F9C01E901699185EB94E00E94A7
+:1017C000580E9E01211B2017B8F38091C000806441
+:1017D0008093C0008091C00085FFFCCF85EB94E032
+:1017E0000E94840E8093C6001CC0862F972F9C01F8
+:1017F000E901699189EC94E00E94580E9E01211B39
+:101800002017B8F38091C80080648093C80080914D
+:10181000C80085FFFCCF89EC94E00E94840E809381
+:10182000CE008FB730E8F322F82AFFBEDF91CF91C8
+:101830001F910F91FF900895882319F48FEB94E086
+:1018400002C08BEA94E00E94FA0E0895EF92FF9294
+:101850000F931F937A018B019A01AB01569547951F
+:10186000379527958823B1F5205C3D4B404F5F4F5E
+:10187000CA01B901A80197010E940610C901DA0145
+:101880000197A109B109292F3A2F4B2F552701960E
+:10189000A11DB11D2093C50081508093C4001092FA
+:1018A000C0001092C1001092C20088ED8093C10068
+:1018B00086E08093C20040E850E063EA73E08FEB7B
+:1018C00094E00E944C0E40E850E063E274E085EB47
+:1018D00094E049C0205C3D4B404F5F4FCA01B901C5
+:1018E000A80197010E940610C901DA010197A10918
+:1018F000B109292F3A2F4B2F55270196A11DB11D54
+:101900002093CD0081508093CC001092C80010929B
+:10191000C9001092CA0088ED8093C90086E08093C8
+:10192000CA0080E890E00E94040F8093D504909351
+:10193000D60480E890E00E94040F8093D304909333
+:10194000D4046091D5047091D60442E050E08BEA53
+:1019500094E00E944C0E6091D3047091D40442E054
+:1019600050E089EC94E00E944C0E1F910F91FF9083
+:10197000EF9008951F920F920FB60F9211242F939C
+:101980008F939F93AF93BF938091A3049091A404EE
+:10199000A091A504B091A6048050904CAF4FBF4FCA
+:1019A0008093A3049093A404A093A504B093A604E9
+:1019B00027C08091A3049091A404A091A504B091A4
+:1019C000A60480589E43A040B0408093A304909307
+:1019D000A404A093A504B093A6048091A7049091B9
+:1019E000A804A091A904B091AA040196A11DB11D5B
+:1019F0008093A7049093A804A093A904B093AA0489
+:101A00008091A3049091A404A091A504B091A60490
+:101A100081589E43A040B04060F6BF91AF919F9126
+:101A20008F912F910F900FBE0F901F9018958FB729
+:101A3000F8942091A7043091A8044091A9045091F2
+:101A4000AA048FBFB901CA010895EF92FF920F93C4
+:101A50001F937B018C018FB7F8944091A70450919C
+:101A6000A8046091A9047091AA048FBF2FB7F894BD
+:101A70008091A7049091A804A091A904B091AA0410
+:101A80002FBF841B950BA60BB70B8E159F05A007C8
+:101A9000B10760F31F910F91FF90EF9008950197A8
+:101AA00059F0FC01EE0FFF1FEE0FFF1F32978FB7AB
+:101AB000F8943197F1F78FBF0895789484B58260D8
+:101AC00084BD84B5816084BD85B5826085BD85B5E2
+:101AD000816085BDEEE6F0E0808181608083E1E891
+:101AE000F0E0808182608083808181608083E0E893
+:101AF000F0E0808181608083E1EBF0E080818460B0
+:101B00008083E0EBF0E0808181608083EAE7F0E0B1
+:101B10008081846080838081826080838081816015
+:101B200080838081806880831092C1000895282F6F
+:101B300030E0C90185549F4FFC01949125563F4FD9
+:101B4000F9018491882381F0E82FF0E0E457FF4FFA
+:101B5000E491F0E0662329F48081909589238083C5
+:101B600008958081892B80830895482F50E0CA0111
+:101B700085529F4FFC012491CA0185549F4FFC015F
+:101B8000949145565F4FFA0134913323C1F12223DA
+:101B900031F1213019F484B58F7704C0223021F45B
+:101BA00084B58F7D84BD1BC0233021F480918000DB
+:101BB0008F7705C0243031F4809180008F7D809331
+:101BC00080000DC0263021F48091B0008F7705C0D1
+:101BD000273029F48091B0008F7D8093B000E32FEF
+:101BE000F0E0EF56FF4FE491F0E0662329F48081A6
+:101BF00090958923808308958081892B808308951F
+:101C0000482F50E0CA0185529F4FFC012491CA0120
+:101C100085549F4FFC01949145565F4FFA013491D2
+:101C2000332319F420E030E035C0222331F1213094
+:101C300019F484B58F7704C0223021F484B58F7DE8
+:101C400084BD1BC0233021F4809180008F7705C0B4
+:101C5000243031F4809180008F7D809380000DC00E
+:101C6000263021F48091B0008F7705C0273029F409
+:101C70008091B0008F7D8093B000E32FF0E0EA56B2
+:101C8000FF4FE491F0E0808120E030E0892311F003
+:101C900021E030E0C9010895FC0157834683118695
+:101CA0001086718360837383628375836483089570
+:101CB000DC0118962D913C91199716968D919C9167
+:101CC000179728173907F8F4ED91FC911197619354
+:101CD0001196FC93EE9318968D919C91199701960D
+:101CE00019969C938E93189714962D913C91159765
+:101CF00016968D919C911797820F931FE817F907FD
+:101D000010F02D933C930895DC0118968D919C91D1
+:101D10001997009719F42FEF3FEF23C01296ED911A
+:101D2000FC91139741911396FC93EE9312970197B0
+:101D300019969C938E93189714962D913C91159714
+:101D400016968D919C911797820F931FE817F907AC
+:101D500020F013963C932E931297242F332727FDC0
+:101D60003095C9010895FC0180850895FC018085A6
+:101D70009185892B11F480E008950280F381E02D94
+:101D800080810895CF93DF93DC01562F18966D91D3
+:101D90007C9119976115710541F11296ED91FC91B5
+:101DA0001397CD91DC91119740E01CC0808185177D
+:101DB00011F4652F1BC04F5F842F90E086179707A3
+:101DC000A0F49F012F5F3F4F1496ED91FC91159762
+:101DD00016968D919C9117978E0F9F1F82179307D0
+:101DE00008F0F901EC17FD0709F760E0862FDF9195
+:101DF000CF910895FC01118610868481958191838D
+:101E00008083938382830895CF93DF93BC018230D4
+:101E1000910510F462E070E0A091D904B091DA0469
+:101E2000ED01E0E0F0E040E050E021C088819981E0
+:101E30008617970769F48A819B81309719F09383FD
+:101E4000828304C09093DA048093D904FE0134C0E5
+:101E50006817790738F44115510519F0841795076B
+:101E600008F4AC01FE018A819B819C01E901209765
+:101E7000E9F641155105A9F1CA01861B970B049794
+:101E800008F4BA01E0E0F0E02AC08D919C9111972E
+:101E900084179507F9F46417750781F412968D91EC
+:101EA0009C911397309719F09383828304C0909389
+:101EB000DA048093D904FD0132964CC0CA01861B16
+:101EC000970BFD01E80FF91F6193719302978D93B2
+:101ED0009C9340C0FD01828193819C01D9011097A0
+:101EE000A1F68091D7049091D804892B41F4809178
+:101EF0006F01909170019093D8048093D704409122
+:101F00007101509172014115510541F44DB75EB711
+:101F100080916D0190916E01481B590B2091D7045F
+:101F20003091D804CA01821B930B8617970780F063
+:101F3000AB014E5F5F4F8417950750F0420F531F60
+:101F40005093D8044093D704F9016193719302C070
+:101F5000E0E0F0E0CF01DF91CF910895CF93DF93E0
+:101F6000009709F450C0EC0122971B821A82A091BD
+:101F7000D904B091DA04109709F140E050E0AC17B1
+:101F8000BD0708F1BB83AA83FE0121913191E20FC5
+:101F9000F31FAE17BF0779F48D919C911197280F0D
+:101FA000391F2E5F3F4F3983288312968D919C9164
+:101FB00013979B838A834115510571F4D093DA04FA
+:101FC000C093D90420C012968D919C911397AD01B6
+:101FD000009711F0DC01D3CFFA01D383C2832191A2
+:101FE0003191E20FF31FCE17DF0769F488819981E1
+:101FF000280F391F2E5F3F4FFA01318320838A81DA
+:102000009B8193838283DF91CF910895A1E21A2E61
+:10201000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F8C
+:10202000A217B307E407F50720F0A21BB30BE40BDC
+:10203000F50B661F771F881F991F1A9469F7609523
+:102040007095809590959B01AC01BD01CF010895DD
+:10205000EE0FFF1F0590F491E02D0994F894FFCF47
+:10206000FFFFFFFF00000000FD0600000000CB079F
+:1020700046076572726F723A20007479706520614C
+:102080006E792063686172616374657220746F2079
+:10209000737461727400636172642E696E69740096
+:1020A00046617431362E696E6974005052494E543F
+:1020B00030302E54585400575249544530302E5425
+:1020C00058540066696C652E6F70656E002000DBE9
+:0420D0000400000008
+:00000001FF
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/applet/fat16read.pde b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/applet/fat16read.pde
new file mode 100644
index 00000000..6bf0ad0b
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/applet/fat16read.pde
@@ -0,0 +1,53 @@
+/*
+ * Sketch to read and print the file
+ * "PRINT00.TXT" created by printExample.pde or
+ * "WRITE00.TXT" created by writeExample.pde
+ */
+#include "Fat16.h"
+#include "SdCard.h"
+
+SdCard card;
+Fat16 file;
+
+void error(char *str)
+{
+ Serial.print("error: ");
+ Serial.println(str);
+ while(1);
+}
+void setup(void)
+{
+ Serial.begin(9600);
+ Serial.println();
+ Serial.println("type any character to start");
+ while (!Serial.available());
+
+ // initialize the SD card
+ if (!card.init()) error("card.init");
+
+ // initialize a FAT16 volume
+ // try partition one
+ if (!Fat16::init(card, 1)) {
+ // try super floppy format
+ if (!Fat16::init(card, 0)) error("Fat16.init");
+ }
+
+ // open a file
+ if (!file.open("PRINT00.TXT")) {
+ // try the other file
+ if (!file.open("WRITE00.TXT")) error("file.open");
+ }
+
+ // copy file to serial port
+ uint16_t n;
+ uint8_t buf[7];
+ while ((n = file.read(buf, sizeof(buf))) > 0) {
+ for (uint8_t i = 0; i < n; i++) Serial.print(buf[i]);
+ }
+ /* easier way
+ uint16_t c;
+ while ((c = file.read()) >= 0) Serial.print((char)c);
+ */
+}
+
+void loop(void) {}
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/applet/fat16read.rom b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/applet/fat16read.rom
new file mode 100644
index 00000000..f9ae4843
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/applet/fat16read.rom
@@ -0,0 +1,528 @@
+S02B0000433A5C446F63756D656E747320616E642053657474696E67735C41646D696E6973747261746F725C6C
+S11300000C9480000C94A8000C94A8000C94A800F4
+S11300100C94A8000C94A8000C94A8000C94A800BC
+S11300200C94A8000C94A8000C94A8000C94A800AC
+S11300300C94A8000C94A8000C94A8000C94A8009C
+S11300400C94A8000C94A8000C94BA0C0C94A8006E
+S11300500C949E0B0C94A8000C94380B0C94A800E0
+S11300600C94A8000C94A8000C94A8000C94A8006C
+S11300700C94720B0C94A8000C940A0B7C3C3E5E0E
+S11300802B3D3F2F5B5D3B2C2A225C000021242763
+S11300902A002225282B00202326290202020202FC
+S11300A00202020404040404040404030303030317
+S11300B0030303010101010101010101020408100C
+S11300C0204080010204081020408001020408102E
+S11300D0204080804020100804020100000001023A
+S11300E000000000000000040307060000000000F8
+S11300F0000000000000000000000000D8088F0984
+S113010011241FBECFEFD0E1DEBFCDBF11E0A0E0D0
+S1130110B1E0E0E6F0E202C005900D92A437B10729
+S1130120D9F714E0A4E7B1E001C01D92AB3DB107DB
+S1130130E1F710E0C0E0D1E004C02297FE010E9484
+S11301402A10CC3FD107C9F70E947A090C942E10CB
+S11301500C940000CF93DF93EC01DB0180E090E08E
+S113016020E2FD01E80FF91F208301968B309105F1
+S1130170C1F757E040E022C02E3219F08CE790E03E
+S113018007C05A3029F15AE048E018C0321701F18B
+S1130190FC01019634913323C9F75417C8F0213276
+S11301A0B8F02F37A8F4822F81568A3110F4622FC9
+S11301B06052FD01E40FF11D60834F5F2991622FAE
+S11301C02223D1F690E08C91803219F091E001C0A5
+S11301D090E0892FDF91CF91089580918B0388233C
+S11301E011F481E00895A0917401B0917501ED912D
+S11301F0FC9111974091000150910101609102011D
+S1130200709103010280F381E02D2BE831E0CD01F0
+S11302100995882319F010928B0381E00895DF92E9
+S1130220EF92FF920F931F937B018C01D42E82E0F7
+S1130230481761F40E94ED008823D1F1EBE8F1E066
+S1130240119283E0EB38F807D9F723C080910001BD
+S113025090910101A0910201B09103018E159F05B7
+S1130260A007B107F1F00E94ED00882309F1E091A5
+S11302707401F0917501A081B1810D90BC91A02D04
+S11302802BE831E0B801A701CF01FD0109958823CE
+S113029079F0E0920001F0920101009302011093C1
+S11302A0030180918B038D2980938B0381E001C02E
+S11302B080E01F910F91FF90EF90DF900895CF930E
+S11302C0DF93EC01F62FE42F80917D0190917E0164
+S11302D001968C179D0780F16D2F772780E090E0C1
+S11302E020917F01309180014091810150918201E0
+S11302F0620F731F841F951F4E2F50E020917B01C6
+S113030030917C01D9014A9F90014B9F300D5A9F37
+S1130310300D112440E050E0620F731F841F951FBD
+S11303204F2F0E940F01882339F0BE017070660FB1
+S1130330771F65577E4F02C060E070E0CB01DF910C
+S1130340CF910895CF93DF93EC01E62F809179014B
+S113035090917A01C817D90720F5BE0134E076954B
+S113036067953A95E1F780E090E020918301309120
+S113037084014091850150918601620F731F841F8F
+S1130380951F4E2F0E940F01882359F0BE016F70F4
+S1130390707025E0660F771F2A95E1F765577E4F49
+S11303A002C060E070E0CB01DF91CF910895CF925D
+S11303B0DF92EF92FF920F931F93CF93DF937C0111
+S11303C0FC01C189D289209711F4C1E0D0E000E09A
+S11303D010E080917D0190917E010817190708F0C3
+S11303E04FC08C179D0710F4C1E0D0E0219640E087
+S11303F060E0CE010E945F01FC01009709F440C057
+S113040080819181892B19F00F5F1F4FE2CFF70193
+S113041081899289892B69F461E0838194810E94A6
+S1130420A201FC01009761F1D38FC28FF701D6833B
+S1130430C58310E0CC24CA94DC2C19C0F70181894F
+S11304409289009749F0412F61E00E945F01FC010D
+S11304500097B1F0D183C083412F61E0CE010E94A7
+S11304605F01FC01009761F0D182C0821F5F80911F
+S11304707701181718F3F701D28BC18B81E001C003
+S113048080E0DF91CF911F910F91FF90EF90DF906B
+S1130490CF900895EF92FF920F931F93E0908701FE
+S11304A0F09088010091890110918A01E60EF11CF7
+S11304B0011D111D02972091780130E0BC01629F5B
+S11304C0C001639F900D729F900D1124A0E0B0E0D5
+S11304D0E80EF91E0A1F1B1FC801B7010E940F0175
+S11304E01F910F91FF90EF900895AF92BF92CF921A
+S11304F0DF92EF92FF920F931F93CF93DF936C01E0
+S11305007B0180917601882309F44BC0F6010081B8
+S11305101181A42EBB248091790190917A0108174E
+S1130520190708F03EC060E0C8010E94A201EC0176
+S11305300097C9F18881E114F10429F4882369F151
+S1130540853E41F52AC0882361F1853E19F18B85EA
+S1130550282F30E0C9018F7390700F97D9F02A21AA
+S11305603B21232BB9F4F70180818823B1F02AE0E1
+S113057001C02150E22FF0E0DE01AE0FBF1FEE0DEF
+S1130580FF1D9C918081981719F4222391F705C0CF
+S1130590222319F00F5F1F4FBECFF6011183008392
+S11305A002C0C0E0D0E0CE01DF91CF911F910F9146
+S11305B0FF90EF90DF90CF90BF90AF9008956F922F
+S11305C07F928F929F92AF92BF92CF92DF92EF92DF
+S11305D0FF920F931F93CF93DF939C01162F80916B
+S11305E07601882309F0E6C0653008F0E3C0309353
+S11305F0750120937401662321F4EE24FF248701FE
+S113060017C040E060E070E080E090E00E940F01DD
+S1130610882309F4CFC0E12FF0E0A4E0EE0FFF1F20
+S1130620AA95E1F7EF5BFC4FE080F1800281138132
+S113063040E0C801B7010E940F01882309F4BAC041
+S113064080918903853509F0B5C080918A038A3A7F
+S113065009F0B0C080909B0180927701909098013E
+S113066090927801C091A101D091A201D0937C0114
+S1130670C0937B0160919C0170919D0170937A01FC
+S1130680609379016090990170909A01930140E020
+S113069050E02E0D3F1D401F511F20937F013093CA
+S11306A080014093810150938201882D90E0FC01E8
+S11306B0EC9FC001ED9F900DFC9F900D1124A0E0D4
+S11306C0B0E0820F931FA41FB51F80938301909302
+S11306D08401A0938501B0938601F5E0660F771F2E
+S11306E0FA95E1F761507E4F672F772766959B0156
+S11306F040E050E0280F391F4A1F5B1F20938701F9
+S1130700309388014093890150938A0180919E011E
+S113071090919F01009721F05C01CC24DD2408C056
+S1130720A090AB01B090AC01C090AD01D090AE01EF
+S1130730E21AF30A040B150BEA0CFB1C0C1D1D1D1D
+S1130740292D30E040E050E0C801B7010E940610B6
+S1130750A90130937E0120937D01809196019091AF
+S113076097018050924031F5209721F12FE0453FC9
+S1130770520700F181E0A81680E0B80680E8C806B8
+S113078080E0D806B8F46728A9F0882099F0852F6E
+S11307909927C817D90770F0992061F0292D30E006
+S11307A0C901019782239323892B21F481E080934B
+S11307B0760101C080E0DF91CF911F910F91FF90EE
+S11307C0EF90DF90CF90BF90AF909F908F907F90ED
+S11307D06F90089540E060E00E945F01FC01009783
+S11307E019F420E030E002C020813181C90108956C
+S11307F06F927F928F929F92AF92BF92CF92DF922D
+S1130800EF92FF920F931F93CF93DF93EC014B0171
+S11308105A018A8187FF82C0ED84FE840F8518897E
+S11308202F81388549855A85C501A0E0B0E08E0D39
+S11308309F1DA01FB11F281739074A075B0718F42B
+S11308405901AE18BF086501612C02E0702E60C02A
+S11308502D853E854F855889DA01C90119E0B69581
+S1130860A795979587951A95D1F71091780111500E
+S11308701823BFEFEB2EB1E0FB2EE222F32211236B
+S1130880A1F4E114F10489F48B859C85009719F097
+S11308900E94EA0302C08D819E819C878B878230EF
+S11308A09105E0F1885F9F4FC8F540E0612F8B858B
+S11308B09C850E944A02882389F1C3018E199F09ED
+S11308C0A6018C159D0508F4AC01970125573E4FF0
+S11308D0B901640F751FD401F90102C081918D9390
+S11308E0E617F707D9F7E21BF30B8E0E9F1EC41A07
+S11308F0D50A9A0140E050E08D859E85AF85B88980
+S1130900820F931FA41FB51F8D879E87AF87B88B57
+S1130910C114D10409F09CCFA50102C04FEF5FEFD1
+S1130920CA01DF91CF911F910F91FF90EF90DF905B
+S1130930CF90BF90AF909F908F907F906F900895CD
+S1130940DF93CF930F92CDB7DEB741E050E0BE0105
+S11309506F5F7F4F0E94F803019719F02FEF3FEF6D
+S113096003C08981282F30E0C9010F90CF91DF9116
+S11309700895AF92BF92CF92DF92EF92FF920F93BE
+S11309801F93CF93DF935C016A017B01FC01828199
+S113099087FF38C087819085A185B2858417950724
+S11309A0A607B70778F13AC0F5011486138623C069
+S11309B0F5010581168180917801382F330F20E0ED
+S11309C0442737FD4095542FC701B6010E940610F5
+S11309D0E9010CC0C8010E94EA038C018230910530
+S11309E088F02197FFEF883F9F0760F4209791F7E5
+S11309F0F50114870387F501C586D686E786F08A54
+S1130A0081E001C080E0DF91CF911F910F91FF90B1
+S1130A10EF90DF90CF90BF90AF90089541155105AE
+S1130A206105710509F2C4CFCF93DF93EC018A818C
+S1130A3087FF18C086FF13C061E08B819C810E94F0
+S1130A40A201FC01009771F08F819885A985BA8570
+S1130A50848F958FA68FB78F8A818F7B8A830E941C
+S1130A60ED0001C080E0DF91CF910895CF92DF9235
+S1130A70EF92FF920F931F93CF93DF93EC016B01DF
+S1130A808A8187FD59C080917601882309F454C076
+S1130A905DC08081882309F44FC0853E09F44CC0B1
+S1130AA09385892F887109F047C09F739A83828D3B
+S1130AB0938D9E838D83E48CF58C068D178DEF8248
+S1130AC0F88609871A871C861B861D861E861F8644
+S1130AD0188AE114F1040105110519F41A8A198A16
+S1130AE022C09A8B898B80917801382F330F20E0B4
+S1130AF0442737FD4095542FC801B7010E940610C2
+S1130B0089010EC089899A890E94EA039A8B898B8C
+S1130B108230910588F001501040885F9F4F60F447
+S1130B200115110579F78A8180688A83DC82CB827A
+S1130B30CE010E94140501C080E0DF91CF911F9186
+S1130B400F91FF90EF90DF90CF90089560E0C60181
+S1130B500E94A201FC01009709F09BCFEDCFEF9218
+S1130B60FF920F931F93DF93CF93CDB7DEB72D97EB
+S1130B700FB6F894DEBF0FBECDBF7C01CB018E0152
+S1130B800D5F1F4FB8010E94AA00882381F01A82CA
+S1130B90198248E0B801CE0101960E947502892BA2
+S1130BA031F069817A81C7010E94360501C080E075
+S1130BB02D960FB6F894DEBF0FBECDBFCF91DF9157
+S1130BC01F910F91FF90EF900895CF92DF92EF92D3
+S1130BD0FF920F931F93DF93CF93CDB7DEB72D977B
+S1130BE00FB6F894DEBF0FBECDBF6C019B01FC01B4
+S1130BF0828187FD41C01A82198283E0E82EF12C9C
+S1130C00EC0EFD1EB701C9010E94AA008823A1F1C0
+S1130C1048E0B7018E010F5F1F4FC8010E947502A3
+S1130C20892B51F51A82198248E060E070E0C8010E
+S1130C300E947502AC010097F9F080918B038160EA
+S1130C4080938B0320E030E0B7012B3010F080E07C
+S1130C5004C0FB01E20FF31F8081FA01E20FF31FCE
+S1130C6080832F5F3F4F2032310579F769817A8184
+S1130C70C6010E94360501C080E02D960FB6F89497
+S1130C80DEBF0FBECDBFCF91DF911F910F91FF90BB
+S1130C90EF90DF90CF900895CF93DF93EC010E9403
+S1130CA01405882311F01A8281E0DF91CF91089511
+S1130CB06F927F929F92AF92BF92CF92DF92EF9208
+S1130CC0FF920F931F93CF93DF93EC015B01E42E0C
+S1130CD0952E8A8187FF4AC080FD48C0842F952FB6
+S1130CE09C016901612C52E0752E71C02F813885F9
+S1130CF049855A85DA01C90149E0B695A7959795C2
+S1130D0087954A95D1F7F0907801FA94F8228901F1
+S1130D101170FF20F1F40115110501F589899A89F3
+S1130D20009729F48D819E81009781F406C00E946A
+S1130D30EA032FEF883F920730F0CE010E94D701DB
+S1130D40882351F413C08230910580F09A8B898BEB
+S1130D5003C00115110511F442E001C041E06F2DFB
+S1130D6089899A890E944A02882319F42FEF3FEF58
+S1130D7035C09301201B310BA6012C153D0508F449
+S1130D80A901980125573E4FB901640F751FD5017C
+S1130D90F90102C08D918193E617F707D9F7E21B99
+S1130DA0F30BAE0EBF1EC41AD50ACA01A0E0B0E010
+S1130DB02F81388549855A85280F391F4A1F5B1FA3
+S1130DC02F83388749875A878A8180648A83C1142C
+S1130DD0D10409F08BCF8E2D992D9C01C901DF918F
+S1130DE0CF911F910F91FF90EF90DF90CF90BF9024
+S1130DF0AF909F907F906F900895DF93CF930F9261
+S1130E00CDB7DEB7698341E050E0BE016F5F7F4F2D
+S1130E100E9458060F90CF91DF910895DF92EF92D0
+S1130E20FF920F931F93D82E7A018B010E94B00872
+S1130E308D2D80640E94B708812F9927AA27BB278C
+S1130E400E94B708C801AA27BB270E94B708BB277E
+S1130E50A12F902F8F2D0E94B7088E2D0E94B708C6
+S1130E60DD2011F08FEF01C085E90E94B7081FEF64
+S1130E700E94B0088F3F21F4112311F01150F8CFD4
+S1130E801F910F91FF90EF90DF900895EF92FF92E2
+S1130E900F931F93CF93DF937A018B01E90139E01C
+S1130EA0EE0CFF1C001F111F3A95D1F7E114F10459
+S1130EB001051105C1F10E94BC08B801A70188E130
+S1130EC00E940E07882311F58EEF0E94B70800E0F8
+S1130ED010E0FE01E00FF11F80810E94B7080F5F50
+S1130EE01F4F82E000301807A1F78FEF0E94B70868
+S1130EF08FEF0E94B7080E94B0088F71853099F473
+S1130F000FEF1FEF08C00115110519F40E94C10865
+S1130F100AC0015010400E94B0088F3FA1F70E9400
+S1130F20C10881E001C080E0DF91CF911F910F9152
+S1130F30FF90EF900895EF92FF920F931F93CF933A
+S1130F40DF937C018B01C0E0D0E006C0219721F43F
+S1130F500E94C10880E018C00E94B0088E3FB1F71B
+S1130F60C0E0D0E007C00E94B008F701EC0FFD1FFD
+S1130F7080832196C017D107B0F30E94B0080E9465
+S1130F80B0080E94C10881E0DF91CF911F910F91B9
+S1130F90FF90EF900895EF92FF920F931F93CF93DA
+S1130FA0DF937A018B01E9010E94BC0849E0EE0C51
+S1130FB0FF1C001F111F4A95D1F7B801A70181E159
+S1130FC00E940E07882321F00E94C10880E005C01A
+S1130FD060E072E0CE010E949B07DF91CF911F91E8
+S1130FE00F91FF90EF900895EF92FF920F931F934C
+S1130FF0DF93CF93CDB7DEB760970FB6F894DEBF1B
+S11310000FBECDBF0E94BC0840E050E060E070E03D
+S113101089E00E940E07882319F00E94C10808C0C5
+S113102060E170E0CE0101960E949B07882321F4C1
+S1131030EE24FF24870130C08F818370382F330F53
+S1131040330F20E0888590E0880F991F880F991F3F
+S1131050282B392B8985829586958695837090E017
+S1131060282B392B2F5F3F4F790100E010E08E8150
+S11310708F7090E007972A852370220F3B85331FDA
+S11310803327331F232B820F911D04C0EE0CFF1C4A
+S1131090001F111F8A95D2F7B701C80160960FB6D9
+S11310A0F894DEBF0FBECDBFCF91DF911F910F919A
+S11310B0FF90EF9008951F93CF93DF930E94C6088B
+S11310C010E08FEF0E94B7081F5F1A30D1F70E941B
+S11310D0BC0840E050E060E070E080E00E940E0751
+S11310E0C0E0D0E004C02197D1F00E94B008813064
+S11310F0D1F7C0E0D0E040E050E060E070E087E38A
+S11311000E940E0740E050E060E070E089E20E9437
+S11311100E07882351F083E0C83ED80721F40E94CB
+S1131120C10810E011C02196E6CF0E94A90840E052
+S113113052E060E070E080E10E940E0710E0882336
+S113114009F411E00E94C108812FDF91CF911F9112
+S113115008958CB58C7F8CBD8DB581608DBD08954F
+S11311608FEF8EBD0DB407FEFDCF8EB508958EBDF5
+S11311700DB407FEFDCF089560E08AE00E94B50D2E
+S1131180089561E08AE00E94B50D089561E08AE067
+S11311900E94970D0E94C10861E08BE00E94970DA8
+S11311A061E08DE00E94970D83E58CBD089508955C
+S11311B08EE091E090938D0380938C0388E091E01E
+S11311C090938F0380938E031092900308950F934E
+S11311D01F938C0162E171E081EA93E00E94B20AFC
+S11311E0B80181EA93E00E94DD0AFFCFCF92DF923B
+S11311F0FF920F931F93DF93CF93CDB7DEB727975B
+S11312000FB6F894DEBF0FBECDBF40E855E260E0F4
+S113121070E081EA93E00E94F70A81EA93E00E9479
+S1131220360A6AE171E081EA93E00E94DD0A81EA0C
+S113123093E00E94F20A8823D1F38CE893E00E94A1
+S11312405B08882321F486E391E00E94E70861E0CB
+S11312508CE893E00E94DF02882359F460E08CE874
+S113126093E00E94DF02882321F480E491E00E944D
+S1131270E7086BE471E08EE893E00E94AF058823F1
+S1131280D9F467E571E08EE893E00E94AF05882306
+S113129099F483E691E00E94E7080EC0EC0DFD1D71
+S11312A0608181EA93E00E949509F394EF2DF0E0C8
+S11312B0E017F10728F4F2CF6E010894C11CD11C89
+S11312C047E050E0B6018EE893E00E94F8038C01F9
+S11312D0009711F0FF24EACF27960FB6F894DEBFEB
+S11312E00FBECDBFCF91DF911F910F91FF90DF9083
+S11312F0CF9008950E945D0D0E94F608FFCFFC0177
+S1131300662311F41082089581E080830895FC011E
+S1131310662311F41082089581E080830895109269
+S1131320A10381E08093A2030895DF93CF930F92EA
+S1131330CDB7DEB7FC01698341E0BE016F5F7F4F2B
+S113134080810E94CA0B0F90CF91DF910895DF93A3
+S1131350CF930F92CDB7DEB7FC01698341E0BE01A4
+S11313606F5F7F4F80810E94CA0B0F90CF91DF91F6
+S113137008952F923F924F925F926F927F928F9235
+S11313809F92AF92BF92CF92DF92EF92FF920F9310
+S11313901F93DF93CF93CDB7DEB7A0970FB6F89422
+S11313A0DEBF0FBECDBF2C016A017B014115510583
+S11313B06105710521F460E30E94A7093EC0AA24D7
+S11313C0BB24622E7724882499241E010894211CAE
+S11313D0311C81010A0D1B1DC701B601A401930133
+S11313E00E940610F80160830894A11CB11CC70177
+S11313F0B601A40193010E940610C901DA016C012F
+S11314007D01C114D104E104F10419F775010894B4
+S1131410E108F108E20CF31C0DC0F70160816A30A9
+S113142010F4605D01C0695CC2010E94A7090894C0
+S1131430E108F108EC16FD0681F7A0960FB6F894C2
+S1131440DEBF0FBECDBFCF91DF911F910F91FF90F3
+S1131450EF90DF90CF90BF90AF909F908F907F9050
+S11314606F905F904F903F902F9008950F931F932C
+S11314708C016DE00E94A7096AE0C8010E94A709D7
+S11314801F910F9108950F931F938C010E9495094A
+S1131490C8010E94360A1F910F9108950F931F935C
+S11314A08C010E94A709C8010E94360A1F910F915E
+S11314B00895EF92FF920F931F93CF93DF93EC0164
+S11314C07A018B0177FF0BC06DE20E94A70910958A
+S11314D00095F094E094E11CF11C011D111D2AE01B
+S11314E0B801A701CE010E94B909DF91CF911F91E4
+S11314F00F91FF90EF9008950F931F938C010E941A
+S1131500590AC8010E94360A1F910F910895AB0130
+S1131510662757FD6095762F0E947C0A0895AB01DB
+S1131520662757FD6095762F0E94590A0895211564
+S1131530310521F4642F0E94A70908952A3031054A
+S113154019F40E94590A08950E94B90908950F9345
+S11315501F938C010E94970AC8010E94360A1F91AA
+S11315600F910895CF92DF92EF92FF920F931F9302
+S1131570CF93DF936C017B01DB010D900020E9F731
+S11315808D0101501040061B170BC0E0D0E009C0CC
+S1131590B7016C0F7D1F41E0F60180810E94CA0BE8
+S11315A02196C017D107A4F3DF91CF911F910F911A
+S11315B0FF90EF90DF90CF9008950F931F938C01CD
+S11315C00E94B20AC8010E94360A1F910F91089521
+S11315D0FC0180810E941C0C0895FC0180810E9402
+S11315E0660B0895FC0180810E94FE0A0895FC01A7
+S11315F080810E94260C089518951895882329F453
+S11316008FEB94E00E94B30E08958BEA94E00E945D
+S1131610B30E08951F920F920FB60F9211242F93B9
+S11316203F934F935F936F937F938F939F93AF9366
+S1131630BF93EF93FF9389EC94E00E94B30E882349
+S113164031F089EC94E00E94840E8093CE00FF91E7
+S1131650EF91BF91AF919F918F917F916F915F9126
+S11316604F913F912F910F900FBE0F901F9018959F
+S11316701F920F920FB60F9211242F933F934F9303
+S11316805F936F937F938F939F93AF93BF93EF93E6
+S1131690FF9385EB94E00E94B30E882331F085EB31
+S11316A094E00E94840E8093C600FF91EF91BF9155
+S11316B0AF919F918F917F916F915F914F913F91E6
+S11316C02F910F900FBE0F901F901895882329F427
+S11316D08FEB94E00E94840E08958BEA94E00E94BC
+S11316E0840E08951F920F920FB60F9211242F9318
+S11316F03F934F935F936F937F938F939F93AF9396
+S1131700BF93EF93FF936091CE008091C80084FD56
+S113171004C08BEA94E00E94580EFF91EF91BF91B0
+S1131720AF919F918F917F916F915F914F913F9175
+S11317302F910F900FBE0F901F9018951F920F922C
+S11317400FB60F9211242F933F934F935F936F9390
+S11317507F938F939F93AF93BF93EF93FF93609186
+S1131760C6008091C00084FD04C08FEB94E00E9409
+S1131770580EFF91EF91BF91AF919F918F917F91FF
+S11317806F915F914F913F912F910F900FBE0F90EA
+S11317901F901895FF920F931F93CF93DF93162FEB
+S11317A0042F442309F442C0FFB6F8948823E9F4D3
+S11317B0862F972F9C01E901699185EB94E00E94A3
+S11317C0580E9E01211B2017B8F38091C00080643D
+S11317D08093C0008091C00085FFFCCF85EB94E02E
+S11317E00E94840E8093C6001CC0862F972F9C01F4
+S11317F0E901699189EC94E00E94580E9E01211B35
+S11318002017B8F38091C80080648093C800809149
+S1131810C80085FFFCCF89EC94E00E94840E80937D
+S1131820CE008FB730E8F322F82AFFBEDF91CF91C4
+S11318301F910F91FF900895882319F48FEB94E082
+S113184002C08BEA94E00E94FA0E0895EF92FF9290
+S11318500F931F937A018B019A01AB01569547951B
+S1131860379527958823B1F5205C3D4B404F5F4F5A
+S1131870CA01B901A80197010E940610C901DA0141
+S11318800197A109B109292F3A2F4B2F552701960A
+S1131890A11DB11D2093C50081508093C4001092F6
+S11318A0C0001092C1001092C20088ED8093C10064
+S11318B086E08093C20040E850E063EA73E08FEB77
+S11318C094E00E944C0E40E850E063E274E085EB43
+S11318D094E049C0205C3D4B404F5F4FCA01B901C1
+S11318E0A80197010E940610C901DA010197A10914
+S11318F0B109292F3A2F4B2F55270196A11DB11D50
+S11319002093CD0081508093CC001092C800109297
+S1131910C9001092CA0088ED8093C90086E08093C4
+S1131920CA0080E890E00E94040F8093D50490934D
+S1131930D60480E890E00E94040F8093D30490932F
+S1131940D4046091D5047091D60442E050E08BEA4F
+S113195094E00E944C0E6091D3047091D40442E050
+S113196050E089EC94E00E944C0E1F910F91FF907F
+S1131970EF9008951F920F920FB60F9211242F9398
+S11319808F939F93AF93BF938091A3049091A404EA
+S1131990A091A504B091A6048050904CAF4FBF4FC6
+S11319A08093A3049093A404A093A504B093A604E5
+S11319B027C08091A3049091A404A091A504B091A0
+S11319C0A60480589E43A040B0408093A304909303
+S11319D0A404A093A504B093A6048091A7049091B5
+S11319E0A804A091A904B091AA040196A11DB11D57
+S11319F08093A7049093A804A093A904B093AA0485
+S1131A008091A3049091A404A091A504B091A6048C
+S1131A1081589E43A040B04060F6BF91AF919F9122
+S1131A208F912F910F900FBE0F901F9018958FB725
+S1131A30F8942091A7043091A8044091A9045091EE
+S1131A40AA048FBFB901CA010895EF92FF920F93C0
+S1131A501F937B018C018FB7F8944091A704509198
+S1131A60A8046091A9047091AA048FBF2FB7F894B9
+S1131A708091A7049091A804A091A904B091AA040C
+S1131A802FBF841B950BA60BB70B8E159F05A007C4
+S1131A90B10760F31F910F91FF90EF9008950197A4
+S1131AA059F0FC01EE0FFF1FEE0FFF1F32978FB7A7
+S1131AB0F8943197F1F78FBF0895789484B58260D4
+S1131AC084BD84B5816084BD85B5826085BD85B5DE
+S1131AD0816085BDEEE6F0E0808181608083E1E88D
+S1131AE0F0E0808182608083808181608083E0E88F
+S1131AF0F0E0808181608083E1EBF0E080818460AC
+S1131B008083E0EBF0E0808181608083EAE7F0E0AD
+S1131B108081846080838081826080838081816011
+S1131B2080838081806880831092C1000895282F6B
+S1131B3030E0C90185549F4FFC01949125563F4FD5
+S1131B40F9018491882381F0E82FF0E0E457FF4FF6
+S1131B50E491F0E0662329F48081909589238083C1
+S1131B6008958081892B80830895482F50E0CA010D
+S1131B7085529F4FFC012491CA0185549F4FFC015B
+S1131B80949145565F4FFA0134913323C1F12223D6
+S1131B9031F1213019F484B58F7704C0223021F457
+S1131BA084B58F7D84BD1BC0233021F480918000D7
+S1131BB08F7705C0243031F4809180008F7D80932D
+S1131BC080000DC0263021F48091B0008F7705C0CD
+S1131BD0273029F48091B0008F7D8093B000E32FEB
+S1131BE0F0E0EF56FF4FE491F0E0662329F48081A2
+S1131BF090958923808308958081892B808308951B
+S1131C00482F50E0CA0185529F4FFC012491CA011C
+S1131C1085549F4FFC01949145565F4FFA013491CE
+S1131C20332319F420E030E035C0222331F1213090
+S1131C3019F484B58F7704C0223021F484B58F7DE4
+S1131C4084BD1BC0233021F4809180008F7705C0B0
+S1131C50243031F4809180008F7D809380000DC00A
+S1131C60263021F48091B0008F7705C0273029F405
+S1131C708091B0008F7D8093B000E32FF0E0EA56AE
+S1131C80FF4FE491F0E0808120E030E0892311F0FF
+S1131C9021E030E0C9010895FC0157834683118691
+S1131CA0108671836083738362837583648308956C
+S1131CB0DC0118962D913C91199716968D919C9163
+S1131CC0179728173907F8F4ED91FC911197619350
+S1131CD01196FC93EE9318968D919C911997019609
+S1131CE019969C938E93189714962D913C91159761
+S1131CF016968D919C911797820F931FE817F907F9
+S1131D0010F02D933C930895DC0118968D919C91CD
+S1131D101997009719F42FEF3FEF23C01296ED9116
+S1131D20FC91139741911396FC93EE9312970197AC
+S1131D3019969C938E93189714962D913C91159710
+S1131D4016968D919C911797820F931FE817F907A8
+S1131D5020F013963C932E931297242F332727FDBC
+S1131D603095C9010895FC0180850895FC018085A2
+S1131D709185892B11F480E008950280F381E02D90
+S1131D8080810895CF93DF93DC01562F18966D91CF
+S1131D907C9119976115710541F11296ED91FC91B1
+S1131DA01397CD91DC91119740E01CC08081851779
+S1131DB011F4652F1BC04F5F842F90E0861797079F
+S1131DC0A0F49F012F5F3F4F1496ED91FC9115975E
+S1131DD016968D919C9117978E0F9F1F82179307CC
+S1131DE008F0F901EC17FD0709F760E0862FDF9191
+S1131DF0CF910895FC011186108684819581918389
+S1131E008083938382830895CF93DF93BC018230D0
+S1131E10910510F462E070E0A091D904B091DA0465
+S1131E20ED01E0E0F0E040E050E021C088819981DC
+S1131E308617970769F48A819B81309719F09383F9
+S1131E40828304C09093DA048093D904FE0134C0E1
+S1131E506817790738F44115510519F08417950767
+S1131E6008F4AC01FE018A819B819C01E901209761
+S1131E70E9F641155105A9F1CA01861B970B049790
+S1131E8008F4BA01E0E0F0E02AC08D919C9111972A
+S1131E9084179507F9F46417750781F412968D91E8
+S1131EA09C911397309719F09383828304C0909385
+S1131EB0DA048093D904FD0132964CC0CA01861B12
+S1131EC0970BFD01E80FF91F6193719302978D93AE
+S1131ED09C9340C0FD01828193819C01D90110979C
+S1131EE0A1F68091D7049091D804892B41F4809174
+S1131EF06F01909170019093D8048093D70440911E
+S1131F007101509172014115510541F44DB75EB70D
+S1131F1080916D0190916E01481B590B2091D7045B
+S1131F203091D804CA01821B930B8617970780F05F
+S1131F30AB014E5F5F4F8417950750F0420F531F5C
+S1131F405093D8044093D704F9016193719302C06C
+S1131F50E0E0F0E0CF01DF91CF910895CF93DF93DC
+S1131F60009709F450C0EC0122971B821A82A091B9
+S1131F70D904B091DA04109709F140E050E0AC17AD
+S1131F80BD0708F1BB83AA83FE0121913191E20FC1
+S1131F90F31FAE17BF0779F48D919C911197280F09
+S1131FA0391F2E5F3F4F3983288312968D919C9160
+S1131FB013979B838A834115510571F4D093DA04F6
+S1131FC0C093D90420C012968D919C911397AD01B2
+S1131FD0009711F0DC01D3CFFA01D383C28321919E
+S1131FE03191E20FF31FCE17DF0769F488819981DD
+S1131FF0280F391F2E5F3F4FFA01318320838A81D6
+S11320009B8193838283DF91CF910895A1E21A2E5D
+S1132010AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F88
+S1132020A217B307E407F50720F0A21BB30BE40BD8
+S1132030F50B661F771F881F991F1A9469F760951F
+S11320407095809590959B01AC01BD01CF010895D9
+S1132050EE0FFF1F0590F491E02D0994F894FFCF43
+S1132060FFFFFFFF00000000FD0600000000CB079B
+S113207046076572726F723A200074797065206148
+S11320806E792063686172616374657220746F2075
+S1132090737461727400636172642E696E69740092
+S11320A046617431362E696E6974005052494E543B
+S11320B030302E54585400575249544530302E5421
+S11320C058540066696C652E6F70656E002000DBE5
+S10720D00400000004
+S9030000FC
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/fat16read.pde b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/fat16read.pde
new file mode 100644
index 00000000..6bf0ad0b
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16read/fat16read.pde
@@ -0,0 +1,53 @@
+/*
+ * Sketch to read and print the file
+ * "PRINT00.TXT" created by printExample.pde or
+ * "WRITE00.TXT" created by writeExample.pde
+ */
+#include "Fat16.h"
+#include "SdCard.h"
+
+SdCard card;
+Fat16 file;
+
+void error(char *str)
+{
+ Serial.print("error: ");
+ Serial.println(str);
+ while(1);
+}
+void setup(void)
+{
+ Serial.begin(9600);
+ Serial.println();
+ Serial.println("type any character to start");
+ while (!Serial.available());
+
+ // initialize the SD card
+ if (!card.init()) error("card.init");
+
+ // initialize a FAT16 volume
+ // try partition one
+ if (!Fat16::init(card, 1)) {
+ // try super floppy format
+ if (!Fat16::init(card, 0)) error("Fat16.init");
+ }
+
+ // open a file
+ if (!file.open("PRINT00.TXT")) {
+ // try the other file
+ if (!file.open("WRITE00.TXT")) error("file.open");
+ }
+
+ // copy file to serial port
+ uint16_t n;
+ uint8_t buf[7];
+ while ((n = file.read(buf, sizeof(buf))) > 0) {
+ for (uint8_t i = 0; i < n; i++) Serial.print(buf[i]);
+ }
+ /* easier way
+ uint16_t c;
+ while ((c = file.read()) >= 0) Serial.print((char)c);
+ */
+}
+
+void loop(void) {}
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16tail/fat16tail.pde b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16tail/fat16tail.pde
new file mode 100644
index 00000000..d60d1119
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16tail/fat16tail.pde
@@ -0,0 +1,77 @@
+/*
+ * Sketch to read and print the tail of files created
+ * by printExample.pde and writeExample.pde
+ */
+//#include <string.h>
+#include "Fat16.h"
+#include "SdCard.h"
+
+SdCard card;
+Fat16 file;
+
+void error(char *str)
+{
+ Serial.print("error: ");
+ Serial.println(str);
+ while(1);
+}
+void setup(void)
+{
+ Serial.begin(9600);
+ Serial.println();
+ Serial.println("type any character to start");
+ while (!Serial.available());
+
+ // initialize the SD card
+ if (!card.init()) error("card.init");
+
+ // initialize a FAT16 volume
+ // try partition one
+ if (!Fat16::init(card, 1)) {
+ // try super floppy
+ if (!Fat16::init(card, 0)) error("Fat16.init");
+ }
+}
+uint16_t index = 0;
+dir_t *dir = 0;
+/*
+ * Print tail of all Fat16 example files
+ */
+void loop(void)
+{
+ // advance index if not first time
+ if (dir) index++;
+ // read next directory entry into the cache
+ if (!(dir = Fat16::readDir(index))) {
+ Serial.println("End of Directory");
+ while(1);
+ }
+ // check for file name "PRINT*.TXT" or "WRITE*.TXT"
+ // first 8 bytes are blank filled name
+ if (strncmp((char *)dir->name, "WRITE", 5) &&
+ strncmp((char *)dir->name, "PRINT", 5)) return;
+ // last three bytes are blank filled extension
+ if (strncmp((char *)&dir->name[8], "TXT", 3)) return;
+
+ // print file name message
+ Serial.print("Tail of: ");
+ for(uint8_t i = 0; i < 8 && dir->name[i] != ' '; i++) Serial.print(dir->name[i]);
+ Serial.println(".TXT");
+
+ // open file by index - easier to use than open by name.
+ // cache will no longer contain the directory entry after open call
+ if (!file.open(index)) error("file.open");
+
+ // position to tail of file
+ if (file.fileSize() > 100) {
+ if (!file.seek(file.fileSize() - 100)) error("file.seek");
+ }
+ int16_t c;
+ // find end of line
+ while ((c = file.read()) >= 0 && c != '\n');
+
+ // print rest of file
+ while ((c = file.read()) >= 0) Serial.print((char)c);
+ file.close();
+ Serial.println();
+}
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/applet/fat16write.cpp b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/applet/fat16write.cpp
new file mode 100644
index 00000000..2dfd57e5
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/applet/fat16write.cpp
@@ -0,0 +1,107 @@
+/*
+ * Write Example
+ *
+ * This sketch creates a new file and writes 100 lines to the file.
+ */
+
+#include "Fat16.h"
+#include "SdCard.h"
+
+#include "WProgram.h"
+void error(char *str);
+void setup(void);
+void loop(void);
+SdCard card;
+Fat16 file;
+
+void error(char *str)
+{
+ Serial.print("error: ");
+ Serial.println(str);
+ while(1);
+}
+/*
+ * Write CR LF to a file
+ */
+void writeCRLF(Fat16 &f)
+{
+ f.write((uint8_t *)"\r\n", 2);
+}
+/*
+ * Write an unsigned number to a file
+ */
+void writeNumber(Fat16 &f, uint32_t n)
+{
+ uint8_t buf[10];
+ uint8_t i = 0;
+ do {
+ i++;
+ buf[sizeof(buf) - i] = n%10 + '0';
+ n /= 10;
+ } while (n);
+ f.write(&buf[sizeof(buf) - i], i);
+}
+/*
+ * Write a string to a file
+ */
+void writeString(Fat16 &f, char *str)
+{
+ uint8_t n;
+ for (n = 0; str[n]; n++);
+ f.write((uint8_t *)str, n);
+}
+
+void setup(void)
+{
+ Serial.begin(9600);
+ Serial.println();
+ Serial.println("Type any character to start");
+ while (!Serial.available());
+
+ // initialize the SD card
+ if (!card.init()) error("card.init");
+
+ // initialize a FAT16 volume
+ // Assume MBR volume and try partition one
+ if (!Fat16::init(card, 1)) {
+ // try super floppy
+ if (!Fat16::init(card, 0)) error("Fat16::init");
+ }
+ // create a new file
+ char name[] = "WRITE00.TXT";
+ for (uint8_t i = 0; i < 100; i++) {
+ name[5] = i/10 + '0';
+ name[6] = i%10 + '0';
+ if (file.create(name)) break;
+ }
+ if (!file.isOpen()) error ("file.create");
+ Serial.print("Writing to: ");
+ Serial.println(name);
+
+ // write 100 line to file
+ for (uint8_t i = 0; i < 100; i++) {
+ writeString(file, "line ");
+ writeNumber(file, i);
+ writeString(file, " millis = ");
+ writeNumber(file, millis());
+ writeCRLF(file);
+ }
+ // close file and force write of all data to the SD card
+ file.close();
+ Serial.println("Done");
+}
+
+void loop(void) {}
+
+int main(void)
+{
+ init();
+
+ setup();
+
+ for (;;)
+ loop();
+
+ return 0;
+}
+
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/applet/fat16write.elf b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/applet/fat16write.elf
new file mode 100644
index 00000000..a46bcd44
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/applet/fat16write.elf
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/applet/fat16write.hex b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/applet/fat16write.hex
new file mode 100644
index 00000000..b3bcde13
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/applet/fat16write.hex
@@ -0,0 +1,552 @@
+:100000000C9480000C94A8000C94A8000C94A800F8
+:100010000C94A8000C94A8000C94A8000C94A800C0
+:100020000C94A8000C94A8000C94A8000C94A800B0
+:100030000C94A8000C94A8000C94A8000C94A800A0
+:100040000C94A8000C94A8000C94690D0C94A800C2
+:100050000C944D0C0C94A8000C94E70B0C94A80085
+:100060000C94A8000C94A8000C94A8000C94A80070
+:100070000C94210C0C94A8000C94B90B7C3C3E5EB3
+:100080002B3D3F2F5B5D3B2C2A225C000021242767
+:100090002A002225282B0020232629020202020200
+:1000A000020202040404040404040403030303031B
+:1000B0000303030101010101010101010204081010
+:1000C0002040800102040810204080010204081032
+:1000D000204080804020100804020100000001023E
+:1000E00000000000000000040307060000000000FC
+:1000F000000000000000000000000000D8083E0AD8
+:1001000011241FBECFEFD0E1DEBFCDBF11E0A0E0D4
+:10011000B1E0E6EDF1E202C005900D92A039B10721
+:10012000D9F714E0A0E9B1E001C01D92A73FB107E3
+:10013000E1F710E0C0E0D1E004C02297FE010E9488
+:10014000E510CC3FD107C9F70E94290A0C94E910A9
+:100150000C940000CF93DF93EC01DB0180E090E092
+:1001600020E2FD01E80FF91F208301968B309105F5
+:10017000C1F757E040E022C02E3219F08CE790E042
+:1001800007C05A3029F15AE048E018C0321701F18F
+:10019000FC01019634913323C9F75417C8F021327A
+:1001A000B8F02F37A8F4822F81568A3110F4622FCD
+:1001B0006052FD01E40FF11D60834F5F2991622FB2
+:1001C0002223D1F690E08C91803219F091E001C0A9
+:1001D00090E0892FDF91CF9108958091A703882324
+:1001E00011F481E00895A0919001B0919101ED91F9
+:1001F000FC91119740910001509101016091020121
+:10020000709103010280F381E02D27EA31E0CD01F6
+:100210000995882319F01092A70381E00895DF92D1
+:10022000EF92FF920F931F937B018C01D42E82E0FB
+:10023000481761F40E94ED008823D1F1E7EAF1E06C
+:10024000119283E0E73AF807D9F723C080910001C3
+:1002500090910101A0910201B09103018E159F05BB
+:10026000A007B107F1F00E94ED00882309F1E091A9
+:100270009001F0919101A081B1810D90BC91A02DD0
+:1002800027EA31E0B801A701CF01FD0109958823D4
+:1002900079F0E0920001F0920101009302011093C5
+:1002A00003018091A7038D298093A70381E001C0FA
+:1002B00080E01F910F91FF90EF90DF900895CF9312
+:1002C000DF93EC01F62FE42F8091990190919A0130
+:1002D00001968C179D0780F16D2F772780E090E0C5
+:1002E00020919B0130919C0140919D0150919E0174
+:1002F000620F731F841F951F4E2F50E020919701AE
+:1003000030919801D9014A9F90014B9F300D5A9F1F
+:10031000300D112440E050E0620F731F841F951FC1
+:100320004F2F0E940F01882339F0BE017070660FB5
+:10033000771F69557E4F02C060E070E0CB01DF910E
+:10034000CF910895CF93DF93EC01E62F8091950133
+:1003500090919601C817D90720F5BE0134E0769533
+:1003600067953A95E1F780E090E020919F01309108
+:10037000A0014091A1015091A201620F731F841F3F
+:10038000951F4E2F0E940F01882359F0BE016F70F8
+:10039000707025E0660F771F2A95E1F769557E4F4B
+:1003A00002C060E070E0CB01DF91CF910895CF9261
+:1003B000DF92EF92FF920F931F93CF93DF937C0115
+:1003C000FC01C189D289209711F4C1E0D0E000E09E
+:1003D00010E08091990190919A010817190708F08F
+:1003E0004FC08C179D0710F4C1E0D0E0219640E08B
+:1003F00060E0CE010E945F01FC01009709F440C05B
+:1004000080819181892B19F00F5F1F4FE2CFF70197
+:1004100081899289892B69F461E0838194810E94AA
+:10042000A201FC01009761F1D38FC28FF701D6833F
+:10043000C58310E0CC24CA94DC2C19C0F701818953
+:100440009289009749F0412F61E00E945F01FC0111
+:100450000097B1F0D183C083412F61E0CE010E94AB
+:100460005F01FC01009761F0D182C0821F5F809123
+:100470009301181718F3F701D28BC18B81E001C0EB
+:1004800080E0DF91CF911F910F91FF90EF90DF906F
+:10049000CF900895EF92FF920F931F93E090A301E6
+:1004A000F090A4010091A5011091A601E60EF11CA7
+:1004B000011D111D02972091940130E0BC01629F43
+:1004C000C001639F900D729F900D1124A0E0B0E0D9
+:1004D000E80EF91E0A1F1B1FC801B7010E940F0179
+:1004E0001F910F91FF90EF900895AF92BF92CF921E
+:1004F000DF92EF92FF920F931F93CF93DF936C01E4
+:100500007B0180919201882309F44BC0F6010081A0
+:100510001181A42EBB24809195019091960108171A
+:10052000190708F03EC060E0C8010E94A201EC017A
+:100530000097C9F18881E114F10429F4882369F155
+:10054000853E41F52AC0882361F1853E19F18B85EE
+:10055000282F30E0C9018F7390700F97D9F02A21AE
+:100560003B21232BB9F4F70180818823B1F02AE0E5
+:1005700001C02150E22FF0E0DE01AE0FBF1FEE0DF3
+:10058000FF1D9C918081981719F4222391F705C0D3
+:10059000222319F00F5F1F4FBECFF6011183008396
+:1005A00002C0C0E0D0E0CE01DF91CF911F910F914A
+:1005B000FF90EF90DF90CF90BF90AF9008956F9233
+:1005C0007F928F929F92AF92BF92CF92DF92EF92E3
+:1005D000FF920F931F93CF93DF939C01162F80916F
+:1005E0009201882309F0E6C0653008F0E3C030933B
+:1005F000910120939001662321F4EE24FF248701CA
+:1006000017C040E060E070E080E090E00E940F01E1
+:10061000882309F4CFC0E12FF0E0A4E0EE0FFF1F24
+:10062000AA95E1F7E35AFC4FE080F1800281138143
+:1006300040E0C801B7010E940F01882309F4BAC045
+:100640008091A503853509F0B5C08091A6038A3A4B
+:1006500009F0B0C08090B701809293019090B401EE
+:1006600090929401C091BD01D091BE01D0939801A8
+:10067000C09397016091B8017091B9017093960190
+:10068000609395016090B5017090B601930140E0D0
+:1006900050E02E0D3F1D401F511F20939B013093B2
+:1006A0009C0140939D0150939E01882D90E0FC0198
+:1006B000EC9FC001ED9F900DFC9F900D1124A0E0D8
+:1006C000B0E0820F931FA41FB51F80939F019093EA
+:1006D000A001A093A101B093A201F5E0660F771FDE
+:1006E000FA95E1F761507E4F672F772766959B015A
+:1006F00040E050E0280F391F4A1F5B1F2093A301E1
+:100700003093A4014093A5015093A6018091BA01B2
+:100710009091BB01009721F05C01CC24DD2408C03E
+:10072000A090C701B090C801C090C901D090CA0183
+:10073000E21AF30A040B150BEA0CFB1C0C1D1D1D21
+:10074000292D30E040E050E0C801B7010E94C110FF
+:10075000A90130939A01209399018091B20190915F
+:10076000B3018050924031F5209721F12FE0453FB1
+:10077000520700F181E0A81680E0B80680E8C806BC
+:1007800080E0D806B8F46728A9F0882099F0852F72
+:100790009927C817D90770F0992061F0292D30E00A
+:1007A000C901019782239323892B21F481E080934F
+:1007B000920101C080E0DF91CF911F910F91FF90D6
+:1007C000EF90DF90CF90BF90AF909F908F907F90F1
+:1007D0006F90089540E060E00E945F01FC01009787
+:1007E00019F420E030E002C020813181C901089570
+:1007F0006F927F928F929F92AF92BF92CF92DF9231
+:10080000EF92FF920F931F93CF93DF93EC014B0175
+:100810005A018A8187FF82C0ED84FE840F85188982
+:100820002F81388549855A85C501A0E0B0E08E0D3D
+:100830009F1DA01FB11F281739074A075B0718F42F
+:100840005901AE18BF086501612C02E0702E60C02E
+:100850002D853E854F855889DA01C90119E0B69585
+:10086000A795979587951A95D1F7109194011150F6
+:100870001823BFEFEB2EB1E0FB2EE222F32211236F
+:10088000A1F4E114F10489F48B859C85009719F09B
+:100890000E94EA0302C08D819E819C878B878230F3
+:1008A0009105E0F1885F9F4FC8F540E0612F8B858F
+:1008B0009C850E944A02882389F1C3018E199F09F1
+:1008C000A6018C159D0508F4AC01970129553E4FF2
+:1008D000B901640F751FD401F90102C081918D9394
+:1008E000E617F707D9F7E21BF30B8E0E9F1EC41A0B
+:1008F000D50A9A0140E050E08D859E85AF85B88984
+:10090000820F931FA41FB51F8D879E87AF87B88B5B
+:10091000C114D10409F09CCFA50102C04FEF5FEFD5
+:10092000CA01DF91CF911F910F91FF90EF90DF905F
+:10093000CF90BF90AF909F908F907F906F900895D1
+:10094000DF93CF930F92CDB7DEB741E050E0BE0109
+:100950006F5F7F4F0E94F803019719F02FEF3FEF71
+:1009600003C08981282F30E0C9010F90CF91DF911A
+:100970000895AF92BF92CF92DF92EF92FF920F93C2
+:100980001F93CF93DF935C016A017B01FC0182819D
+:1009900087FF38C087819085A185B2858417950728
+:1009A000A607B70778F13AC0F5011486138623C06D
+:1009B000F5010581168180919401382F330F20E0D5
+:1009C000442737FD4095542FC701B6010E94C1103E
+:1009D000E9010CC0C8010E94EA038C018230910534
+:1009E00088F02197FFEF883F9F0760F4209791F7E9
+:1009F000F50114870387F501C586D686E786F08A58
+:100A000081E001C080E0DF91CF911F910F91FF90B5
+:100A1000EF90DF90CF90BF90AF90089541155105B2
+:100A20006105710509F2C4CFCF93DF93EC018A8190
+:100A300087FF18C086FF13C061E08B819C810E94F4
+:100A4000A201FC01009771F08F819885A985BA8574
+:100A5000848F958FA68FB78F8A818F7B8A830E9420
+:100A6000ED0001C080E0DF91CF910895CF92DF9239
+:100A7000EF92FF920F931F93CF93DF93EC016B01E3
+:100A80008A8187FD59C080919201882309F454C05E
+:100A90005DC08081882309F44FC0853E09F44CC0B5
+:100AA0009385892F887109F047C09F739A83828D3F
+:100AB000938D9E838D83E48CF58C068D178DEF824C
+:100AC000F88609871A871C861B861D861E861F8648
+:100AD000188AE114F1040105110519F41A8A198A1A
+:100AE00022C09A8B898B80919401382F330F20E09C
+:100AF000442737FD4095542FC801B7010E94C1100B
+:100B000089010EC089899A890E94EA039A8B898B90
+:100B10008230910588F001501040885F9F4F60F44B
+:100B20000115110579F78A8180688A83DC82CB827E
+:100B3000CE010E94140501C080E0DF91CF911F918A
+:100B40000F91FF90EF90DF90CF90089560E0C60185
+:100B50000E94A201FC01009709F09BCFEDCFEF921C
+:100B6000FF920F931F93DF93CF93CDB7DEB72D97EF
+:100B70000FB6F894DEBF0FBECDBF7C01CB018E0156
+:100B80000D5F1F4FB8010E94AA00882381F01A82CE
+:100B9000198248E0B801CE0101960E947502892BA6
+:100BA00031F069817A81C7010E94360501C080E079
+:100BB0002D960FB6F894DEBF0FBECDBFCF91DF915B
+:100BC0001F910F91FF90EF900895CF92DF92EF92D7
+:100BD000FF920F931F93DF93CF93CDB7DEB72D977F
+:100BE0000FB6F894DEBF0FBECDBF6C019B01FC01B8
+:100BF000828187FD41C01A82198283E0E82EF12CA0
+:100C0000EC0EFD1EB701C9010E94AA008823A1F1C4
+:100C100048E0B7018E010F5F1F4FC8010E947502A7
+:100C2000892B51F51A82198248E060E070E0C80112
+:100C30000E947502AC010097F9F08091A7038160D2
+:100C40008093A70320E030E0B7012B3010F080E064
+:100C500004C0FB01E20FF31F8081FA01E20FF31FD2
+:100C600080832F5F3F4F2032310579F769817A8188
+:100C7000C6010E94360501C080E02D960FB6F8949B
+:100C8000DEBF0FBECDBFCF91DF911F910F91FF90BF
+:100C9000EF90DF90CF900895CF93DF93EC010E9407
+:100CA0001405882311F01A8281E0DF91CF91089515
+:100CB0006F927F929F92AF92BF92CF92DF92EF920C
+:100CC000FF920F931F93CF93DF93EC015B01E42E10
+:100CD000952E8A8187FF4AC080FD48C0842F952FBA
+:100CE0009C016901612C52E0752E71C02F813885FD
+:100CF00049855A85DA01C90149E0B695A7959795C6
+:100D000087954A95D1F7F0909401FA94F8228901D9
+:100D10001170FF20F1F40115110501F589899A89F7
+:100D2000009729F48D819E81009781F406C00E946E
+:100D3000EA032FEF883F920730F0CE010E94D701DF
+:100D4000882351F413C08230910580F09A8B898BEF
+:100D500003C00115110511F442E001C041E06F2DFF
+:100D600089899A890E944A02882319F42FEF3FEF5C
+:100D700035C09301201B310BA6012C153D0508F44D
+:100D8000A901980129553E4FB901640F751FD5017E
+:100D9000F90102C08D918193E617F707D9F7E21B9D
+:100DA000F30BAE0EBF1EC41AD50ACA01A0E0B0E014
+:100DB0002F81388549855A85280F391F4A1F5B1FA7
+:100DC0002F83388749875A878A8180648A83C11430
+:100DD000D10409F08BCF8E2D992D9C01C901DF9193
+:100DE000CF911F910F91FF90EF90DF90CF90BF9028
+:100DF000AF909F907F906F900895DF93CF930F9265
+:100E0000CDB7DEB7698341E050E0BE016F5F7F4F31
+:100E10000E9458060F90CF91DF910895DF92EF92D4
+:100E2000FF920F931F93D82E7A018B010E94B00876
+:100E30008D2D80640E94B708812F9927AA27BB2790
+:100E40000E94B708C801AA27BB270E94B708BB2782
+:100E5000A12F902F8F2D0E94B7088E2D0E94B708CA
+:100E6000DD2011F08FEF01C085E90E94B7081FEF68
+:100E70000E94B0088F3F21F4112311F01150F8CFD8
+:100E80001F910F91FF90EF90DF900895EF92FF92E6
+:100E90000F931F93CF93DF937A018B01E90139E020
+:100EA000EE0CFF1C001F111F3A95D1F7E114F1045D
+:100EB00001051105C1F10E94BC08B801A70188E134
+:100EC0000E940E07882311F58EEF0E94B70800E0FC
+:100ED00010E0FE01E00FF11F80810E94B7080F5F54
+:100EE0001F4F82E000301807A1F78FEF0E94B7086C
+:100EF0008FEF0E94B7080E94B0088F71853099F477
+:100F00000FEF1FEF08C00115110519F40E94C10869
+:100F10000AC0015010400E94B0088F3FA1F70E9404
+:100F2000C10881E001C080E0DF91CF911F910F9156
+:100F3000FF90EF900895EF92FF920F931F93CF933E
+:100F4000DF937C018B01C0E0D0E006C0219721F443
+:100F50000E94C10880E018C00E94B0088E3FB1F71F
+:100F6000C0E0D0E007C00E94B008F701EC0FFD1F01
+:100F700080832196C017D107B0F30E94B0080E9469
+:100F8000B0080E94C10881E0DF91CF911F910F91BD
+:100F9000FF90EF900895EF92FF920F931F93CF93DE
+:100FA000DF937A018B01E9010E94BC0849E0EE0C55
+:100FB000FF1C001F111F4A95D1F7B801A70181E15D
+:100FC0000E940E07882321F00E94C10880E005C01E
+:100FD00060E072E0CE010E949B07DF91CF911F91EC
+:100FE0000F91FF90EF900895EF92FF920F931F9350
+:100FF000DF93CF93CDB7DEB760970FB6F894DEBF1F
+:101000000FBECDBF0E94BC0840E050E060E070E041
+:1010100089E00E940E07882319F00E94C10808C0C9
+:1010200060E170E0CE0101960E949B07882321F4C5
+:10103000EE24FF24870130C08F818370382F330F57
+:10104000330F20E0888590E0880F991F880F991F43
+:10105000282B392B8985829586958695837090E01B
+:10106000282B392B2F5F3F4F790100E010E08E8154
+:101070008F7090E007972A852370220F3B85331FDE
+:101080003327331F232B820F911D04C0EE0CFF1C4E
+:10109000001F111F8A95D2F7B701C80160960FB6DD
+:1010A000F894DEBF0FBECDBFCF91DF911F910F919E
+:1010B000FF90EF9008951F93CF93DF930E94C6088F
+:1010C00010E08FEF0E94B7081F5F1A30D1F70E941F
+:1010D000BC0840E050E060E070E080E00E940E0755
+:1010E000C0E0D0E004C02197D1F00E94B008813068
+:1010F000D1F7C0E0D0E040E050E060E070E087E38E
+:101100000E940E0740E050E060E070E089E20E943B
+:101110000E07882351F083E0C83ED80721F40E94CF
+:10112000C10810E011C02196E6CF0E94A90840E056
+:1011300052E060E070E080E10E940E0710E088233A
+:1011400009F411E00E94C108812FDF91CF911F9116
+:1011500008958CB58C7F8CBD8DB581608DBD089553
+:101160008FEF8EBD0DB407FEFDCF8EB508958EBDF9
+:101170000DB407FEFDCF089560E084E00E94640E88
+:10118000089561E084E00E94640E089561E084E0C7
+:101190000E94460E0E94C10861E085E00E94460E52
+:1011A00061E087E00E94460E83E58CBD08950895B6
+:1011B0008EE091E09093A9038093A80388E091E0EA
+:1011C0009093AB038093AA031092AC0308950F93FE
+:1011D0001F938C0162E171E08DEB93E00E94610B43
+:1011E000B8018DEB93E00E948C0BFFCF9C0140E097
+:1011F00001C04F5FFB01E40FF11D80818823C9F717
+:1012000050E0C9010E94580608954F925F926F9274
+:101210007F928F929F92BF92CF92DF92EF92FF9236
+:101220000F931F93DF93CF93CDB7DEB72A970FB6F7
+:10123000F894DEBF0FBECDBF4C017A018B01BB24F9
+:101240008AE0482E512C3E010894611C711CB39415
+:101250006201CB18D108C60CD71CC801B7012AE01F
+:1012600030E040E050E00E94C110605DF601608314
+:10127000C801B7012AE030E040E050E00E94C11010
+:10128000C901DA017C018D01E114F10401051105A8
+:10129000F1F64B2D50E0B601C4010E9458062A9683
+:1012A0000FB6F894DEBF0FBECDBFCF91DF911F9177
+:1012B0000F91FF90EF90DF90CF90BF909F908F9015
+:1012C0007F906F905F904F90089542E050E06AE108
+:1012D00071E00E9458060895EF92FF920F931F93BA
+:1012E000DF93CF93CDB7DEB72C970FB6F894DEBF60
+:1012F0000FBECDBF40E855E260E070E08DEB93E0BB
+:101300000E94A60B8DEB93E00E94E50A6DE171E06F
+:101310008DEB93E00E948C0B8DEB93E00E94A10B70
+:101320008823D1F388EA93E00E945B08882321F4A4
+:1013300089E391E00E94E70861E088EA93E00E9477
+:10134000DF02882359F460E088EA93E00E94DF021C
+:10135000882321F483E491E00E94E708DE011196DE
+:10136000EEE7F1E08CE001900D928150E1F710E0A2
+:101370007E010894E11CF11C812F6AE00E94B510E7
+:10138000805D8E83812F0E94B510905D9F83B70191
+:101390008AEA93E00E94E505882319F41F5F14365A
+:1013A00059F78091AC0387FD04C08FE491E00E945F
+:1013B000E7086BE571E08DEB93E00E94610BBE01E5
+:1013C0006F5F7F4F8DEB93E00E948C0BEE24FF2428
+:1013D000870168E671E08AEA93E00E94F608B801A6
+:1013E000A7018AEA93E00E9405096EE671E08AEAA5
+:1013F00093E00E94F6080E94C60DAB01BC018AEA88
+:1014000093E00E9405098AEA93E00E946509089426
+:10141000E11CF11C011D111D84E6E816F104010513
+:101420001105B9F68AEA93E00E944C0669E771E07B
+:101430008DEB93E00E948C0B2C960FB6F894DEBFD8
+:101440000FBECDBFCF91DF911F910F91FF90EF9015
+:1014500008950E940C0E0E946C09FFCFFC016623C8
+:1014600011F41082089581E080830895FC016623C1
+:1014700011F41082089581E0808308951092BD03D5
+:1014800081E08093BE030895DF93CF930F92CDB791
+:10149000DEB7FC01698341E0BE016F5F7F4F808151
+:1014A0000E94790C0F90CF91DF910895DF93CF9335
+:1014B0000F92CDB7DEB7FC01698341E0BE016F5FDB
+:1014C0007F4F80810E94790C0F90CF91DF9108951A
+:1014D0002F923F924F925F926F927F928F929F9244
+:1014E000AF92BF92CF92DF92EF92FF920F931F9332
+:1014F000DF93CF93CDB7DEB7A0970FB6F894DEBFDA
+:101500000FBECDBF2C016A017B014115510561055C
+:10151000710521F460E30E94560A3EC0AA24BB2450
+:10152000622E7724882499241E010894211C311CE2
+:1015300081010A0D1B1DC701B601A40193010E9480
+:10154000C110F80160830894A11CB11CC701B60149
+:10155000A40193010E94C110C901DA016C017D014F
+:10156000C114D104E104F10419F775010894E108EC
+:10157000F108E20CF31C0DC0F70160816A3010F431
+:10158000605D01C0695CC2010E94560A0894E108CE
+:10159000F108EC16FD0681F7A0960FB6F894DEBFB1
+:1015A0000FBECDBFCF91DF911F910F91FF90EF90B4
+:1015B000DF90CF90BF90AF909F908F907F906F9073
+:1015C0005F904F903F902F9008950F931F938C0141
+:1015D0006DE00E94560A6AE0C8010E94560A1F91F7
+:1015E0000F9108950F931F938C010E94440AC80124
+:1015F0000E94E50A1F910F9108950F931F938C018C
+:101600000E94560AC8010E94E50A1F910F91089591
+:10161000EF92FF920F931F93CF93DF93EC017A0128
+:101620008B0177FF0BC06DE20E94560A1095009562
+:10163000F094E094E11CF11C011D111D2AE0B80199
+:10164000A701CE010E94680ADF91CF911F910F91EF
+:10165000FF90EF9008950F931F938C010E94080B49
+:10166000C8010E94E50A1F910F910895AB016627FA
+:1016700057FD6095762F0E942B0B0895AB016627CE
+:1016800057FD6095762F0E94080B089521153105AE
+:1016900021F4642F0E94560A08952A30310519F466
+:1016A0000E94080B08950E94680A08950F931F93E3
+:1016B0008C010E94460BC8010E94E50A1F910F9100
+:1016C0000895CF92DF92EF92FF920F931F93CF93E3
+:1016D000DF936C017B01DB010D900020E9F78D01A8
+:1016E00001501040061B170BC0E0D0E009C0B70145
+:1016F0006C0F7D1F41E0F60180810E94790C2196DC
+:10170000C017D107A4F3DF91CF911F910F91FF90E4
+:10171000EF90DF90CF9008950F931F938C010E945C
+:10172000610BC8010E94E50A1F910F910895FC0109
+:1017300080810E94CB0C0895FC0180810E94150CD1
+:101740000895FC0180810E94AD0B0895FC01808109
+:101750000E94D50C089518951895882329F48BEDCF
+:1017600094E00E94620F089587EC94E00E94620F5B
+:1017700008951F920F920FB60F9211242F933F934B
+:101780004F935F936F937F938F939F93AF93BF9389
+:10179000EF93FF9385EE94E00E94620F882331F06F
+:1017A00085EE94E00E94330F8093CE00FF91EF917D
+:1017B000BF91AF919F918F917F916F915F914F9169
+:1017C0003F912F910F900FBE0F901F9018951F9271
+:1017D0000F920FB60F9211242F933F934F935F9365
+:1017E0006F937F938F939F93AF93BF93EF93FF93E9
+:1017F00081ED94E00E94620F882331F081ED94E046
+:101800000E94330F8093C600FF91EF91BF91AF917B
+:101810009F918F917F916F915F914F913F912F9108
+:101820000F900FBE0F901F901895882329F48BED11
+:1018300094E00E94330F089587EC94E00E94330FE8
+:1018400008951F920F920FB60F9211242F933F937A
+:101850004F935F936F937F938F939F93AF93BF93B8
+:10186000EF93FF936091CE008091C80084FD04C087
+:1018700087EC94E00E94070FFF91EF91BF91AF9129
+:101880009F918F917F916F915F914F913F912F9198
+:101890000F900FBE0F901F9018951F920F920FB6CA
+:1018A0000F9211242F933F934F935F936F937F93E6
+:1018B0008F939F93AF93BF93EF93FF936091C60075
+:1018C0008091C00084FD04C08BED94E00E94070F5E
+:1018D000FF91EF91BF91AF919F918F917F916F9108
+:1018E0005F914F913F912F910F900FBE0F901F90DE
+:1018F0001895FF920F931F93CF93DF93162F042F0A
+:10190000442309F442C0FFB6F8948823E9F4862FF3
+:10191000972F9C01E901699181ED94E00E94070FE6
+:101920009E01211B2017B8F38091C0008064809332
+:10193000C0008091C00085FFFCCF81ED94E00E9443
+:10194000330F8093C6001CC0862F972F9C01E9019E
+:10195000699185EE94E00E94070F9E01211B2017DC
+:10196000B8F38091C80080648093C8008091C8005B
+:1019700085FFFCCF85EE94E00E94330F8093CE006C
+:101980008FB730E8F322F82AFFBEDF91CF911F9185
+:101990000F91FF900895882319F48BED94E002C015
+:1019A00087EC94E00E94A90F0895EF92FF920F93A5
+:1019B0001F937A018B019A01AB0156954795379594
+:1019C00027958823B1F5205C3D4B404F5F4FCA01FE
+:1019D000B901A80197010E94C110C901DA0101975C
+:1019E000A109B109292F3A2F4B2F55270196A11D87
+:1019F000B11D2093C50081508093C4001092C00097
+:101A00001092C1001092C20088ED8093C10086E060
+:101A10008093C20040E850E06FEB73E08BED94E000
+:101A20000E94FB0E40E850E06FE374E081ED94E02B
+:101A300049C0205C3D4B404F5F4FCA01B901A8012E
+:101A400097010E94C110C901DA010197A109B109EA
+:101A5000292F3A2F4B2F55270196A11DB11D2093F9
+:101A6000CD0081508093CC001092C8001092C90024
+:101A70001092CA0088ED8093C90086E08093CA0066
+:101A800080E890E00E94B30F8093F1049093F204F9
+:101A900080E890E00E94B30F8093EF049093F004ED
+:101AA0006091F1047091F20442E050E087EC94E020
+:101AB0000E94FB0E6091EF047091F00442E050E050
+:101AC00085EE94E00E94FB0E1F910F91FF90EF9026
+:101AD00008951F920F920FB60F9211242F938F9398
+:101AE0009F93AF93BF938091BF049091C004A09146
+:101AF000C104B091C2048050904CAF4FBF4F80934F
+:101B0000BF049093C004A093C104B093C20427C043
+:101B10008091BF049091C004A091C104B091C2040F
+:101B200080589E43A040B0408093BF049093C0046F
+:101B3000A093C104B093C2048091C3049091C404E3
+:101B4000A091C504B091C6040196A11DB11D80935A
+:101B5000C3049093C404A093C504B093C6048091B9
+:101B6000BF049091C004A091C104B091C2048158F7
+:101B70009E43A040B04060F6BF91AF919F918F917E
+:101B80002F910F900FBE0F901F9018958FB7F8945C
+:101B90002091C3043091C4044091C5045091C604FF
+:101BA0008FBFB901CA010895EF92FF920F931F935F
+:101BB0007B018C018FB7F8944091C3045091C40409
+:101BC0006091C5047091C6048FBF2FB7F8948091BF
+:101BD000C3049091C404A091C504B091C6042FBF62
+:101BE000841B950BA60BB70B8E159F05A007B1079D
+:101BF00060F31F910F91FF90EF900895019759F0B6
+:101C0000FC01EE0FFF1FEE0FFF1F32978FB7F89406
+:101C10003197F1F78FBF0895789484B5826084BDC1
+:101C200084B5816084BD85B5826085BD85B58160E0
+:101C300085BDEEE6F0E0808181608083E1E8F0E040
+:101C4000808182608083808181608083E0E8F0E031
+:101C5000808181608083E1EBF0E08081846080831B
+:101C6000E0EBF0E0808181608083EAE7F0E0808152
+:101C700084608083808182608083808181608083B2
+:101C80008081806880831092C1000895282F30E001
+:101C9000C90185549F4FFC01949125563F4FF9018E
+:101CA0008491882381F0E82FF0E0E457FF4FE4911E
+:101CB000F0E0662329F4808190958923808308953C
+:101CC0008081892B80830895482F50E0CA01855276
+:101CD0009F4FFC012491CA0185549F4FFC019491B0
+:101CE00045565F4FFA0134913323C1F1222331F17C
+:101CF000213019F484B58F7704C0223021F484B5E3
+:101D00008F7D84BD1BC0233021F4809180008F77AC
+:101D100005C0243031F4809180008F7D8093800055
+:101D20000DC0263021F48091B0008F7705C0273098
+:101D300029F48091B0008F7D8093B000E32FF0E014
+:101D4000EF56FF4FE491F0E0662329F480819095EF
+:101D50008923808308958081892B80830895482F6B
+:101D600050E0CA0185529F4FFC012491CA0185545D
+:101D70009F4FFC01949145565F4FFA0134913323F4
+:101D800019F420E030E035C0222331F1213019F47C
+:101D900084B58F7704C0223021F484B58F7D84BD53
+:101DA0001BC0233021F4809180008F7705C0243040
+:101DB00031F4809180008F7D809380000DC02630AB
+:101DC00021F48091B0008F7705C0273029F48091ED
+:101DD000B0008F7D8093B000E32FF0E0EA56FF4F14
+:101DE000E491F0E0808120E030E0892311F021E0EF
+:101DF00030E0C9010895FC0157834683118610869F
+:101E00007183608373836283758364830895DC01C7
+:101E100018962D913C91199716968D919C91179734
+:101E200028173907F8F4ED91FC91119761931196F9
+:101E3000FC93EE9318968D919C91199701961996A3
+:101E40009C938E93189714962D913C911597169606
+:101E50008D919C911797820F931FE817F90710F047
+:101E60002D933C930895DC0118968D919C911997C0
+:101E7000009719F42FEF3FEF23C01296ED91FC91DC
+:101E8000139741911396FC93EE931297019719962D
+:101E90009C938E93189714962D913C9115971696B6
+:101EA0008D919C911797820F931FE817F90720F0E7
+:101EB00013963C932E931297242F332727FD3095AA
+:101EC000C9010895FC0180850895FC0180859185F4
+:101ED000892B11F480E008950280F381E02D808148
+:101EE0000895CF93DF93DC01562F18966D917C9166
+:101EF00019976115710541F11296ED91FC911397B7
+:101F0000CD91DC91119740E01CC08081851711F4C0
+:101F1000652F1BC04F5F842F90E086179707A0F4B2
+:101F20009F012F5F3F4F1496ED91FC9115971696E8
+:101F30008D919C9117978E0F9F1F8217930708F022
+:101F4000F901EC17FD0709F760E0862FDF91CF91CB
+:101F50000895FC0111861086848195819183808388
+:101F6000938382830895CF93DF93BC0182309105E0
+:101F700010F462E070E0A091F504B091F604ED0178
+:101F8000E0E0F0E040E050E021C0888199818617D0
+:101F9000970769F48A819B81309719F09383828334
+:101FA00004C09093F6048093F504FE0134C06817D2
+:101FB000790738F44115510519F08417950708F48D
+:101FC000AC01FE018A819B819C01E9012097E9F621
+:101FD00041155105A9F1CA01861B970B049708F416
+:101FE000BA01E0E0F0E02AC08D919C91119784172E
+:101FF0009507F9F46417750781F412968D919C91F9
+:102000001397309719F09383828304C09093F6045A
+:102010008093F504FD0132964CC0CA01861B970BD4
+:10202000FD01E80FF91F6193719302978D939C93C3
+:1020300040C0FD01828193819C01D9011097A1F6D6
+:102040008091F3049091F404892B41F480918C01E8
+:1020500090918D019093F4048093F30440918E014C
+:1020600050918F014115510541F44DB75EB78091F4
+:102070008A0190918B01481B590B2091F3043091F8
+:10208000F404CA01821B930B8617970780F0AB01FB
+:102090004E5F5F4F8417950750F0420F531F5093C8
+:1020A000F4044093F304F9016193719302C0E0E0FA
+:1020B000F0E0CF01DF91CF910895CF93DF930097A8
+:1020C00009F450C0EC0122971B821A82A091F504FA
+:1020D000B091F604109709F140E050E0AC17BD074D
+:1020E00008F1BB83AA83FE0121913191E20FF31F16
+:1020F000AE17BF0779F48D919C911197280F391F66
+:102100002E5F3F4F3983288312968D919C911397B0
+:102110009B838A834115510571F4D093F604C093D3
+:10212000F50420C012968D919C911397AD010097F4
+:1021300011F0DC01D3CFFA01D383C2832191319115
+:10214000E20FF31FCE17DF0769F488819981280F0A
+:10215000391F2E5F3F4FFA01318320838A819B8193
+:1021600093838283DF91CF910895991B79E004C016
+:10217000991F961708F0961B881F7A95C9F78095C6
+:102180000895A1E21A2EAA1BBB1BFD010DC0AA1FB8
+:10219000BB1FEE1FFF1FA217B307E407F50720F0D0
+:1021A000A21BB30BE40BF50B661F771F881F991F4B
+:1021B0001A9469F760957095809590959B01AC0194
+:1021C000BD01CF010895EE0FFF1F0590F491E02DA2
+:0621D0000994F894FFCF12
+:1021D600FFFFFFFF00000000FD0600000000CB0728
+:1021E60046076572726F723A20000D0A00547970C4
+:1021F6006520616E7920636861726163746572201F
+:10220600746F20737461727400636172642E696EF8
+:1022160069740046617431363A3A696E69740066CB
+:10222600696C652E637265617465005772697469BD
+:102236006E6720746F3A20006C696E652000206D11
+:10224600696C6C6973203D2000446F6E65005752BF
+:1022560049544530302E545854002000F7040000ED
+:00000001FF
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/applet/fat16write.pde b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/applet/fat16write.pde
new file mode 100644
index 00000000..397e9692
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/applet/fat16write.pde
@@ -0,0 +1,90 @@
+/*
+ * Write Example
+ *
+ * This sketch creates a new file and writes 100 lines to the file.
+ */
+
+#include "Fat16.h"
+#include "SdCard.h"
+
+SdCard card;
+Fat16 file;
+
+void error(char *str)
+{
+ Serial.print("error: ");
+ Serial.println(str);
+ while(1);
+}
+/*
+ * Write CR LF to a file
+ */
+void writeCRLF(Fat16 &f)
+{
+ f.write((uint8_t *)"\r\n", 2);
+}
+/*
+ * Write an unsigned number to a file
+ */
+void writeNumber(Fat16 &f, uint32_t n)
+{
+ uint8_t buf[10];
+ uint8_t i = 0;
+ do {
+ i++;
+ buf[sizeof(buf) - i] = n%10 + '0';
+ n /= 10;
+ } while (n);
+ f.write(&buf[sizeof(buf) - i], i);
+}
+/*
+ * Write a string to a file
+ */
+void writeString(Fat16 &f, char *str)
+{
+ uint8_t n;
+ for (n = 0; str[n]; n++);
+ f.write((uint8_t *)str, n);
+}
+
+void setup(void)
+{
+ Serial.begin(9600);
+ Serial.println();
+ Serial.println("Type any character to start");
+ while (!Serial.available());
+
+ // initialize the SD card
+ if (!card.init()) error("card.init");
+
+ // initialize a FAT16 volume
+ // Assume MBR volume and try partition one
+ if (!Fat16::init(card, 1)) {
+ // try super floppy
+ if (!Fat16::init(card, 0)) error("Fat16::init");
+ }
+ // create a new file
+ char name[] = "WRITE00.TXT";
+ for (uint8_t i = 0; i < 100; i++) {
+ name[5] = i/10 + '0';
+ name[6] = i%10 + '0';
+ if (file.create(name)) break;
+ }
+ if (!file.isOpen()) error ("file.create");
+ Serial.print("Writing to: ");
+ Serial.println(name);
+
+ // write 100 line to file
+ for (uint8_t i = 0; i < 100; i++) {
+ writeString(file, "line ");
+ writeNumber(file, i);
+ writeString(file, " millis = ");
+ writeNumber(file, millis());
+ writeCRLF(file);
+ }
+ // close file and force write of all data to the SD card
+ file.close();
+ Serial.println("Done");
+}
+
+void loop(void) {}
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/applet/fat16write.rom b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/applet/fat16write.rom
new file mode 100644
index 00000000..c84d7b53
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/applet/fat16write.rom
@@ -0,0 +1,553 @@
+S02B0000433A5C446F63756D656E747320616E642053657474696E67735C41646D696E6973747261746F725C6C
+S11300000C9480000C94A8000C94A8000C94A800F4
+S11300100C94A8000C94A8000C94A8000C94A800BC
+S11300200C94A8000C94A8000C94A8000C94A800AC
+S11300300C94A8000C94A8000C94A8000C94A8009C
+S11300400C94A8000C94A8000C94690D0C94A800BE
+S11300500C944D0C0C94A8000C94E70B0C94A80081
+S11300600C94A8000C94A8000C94A8000C94A8006C
+S11300700C94210C0C94A8000C94B90B7C3C3E5EAF
+S11300802B3D3F2F5B5D3B2C2A225C000021242763
+S11300902A002225282B00202326290202020202FC
+S11300A00202020404040404040404030303030317
+S11300B0030303010101010101010101020408100C
+S11300C0204080010204081020408001020408102E
+S11300D0204080804020100804020100000001023A
+S11300E000000000000000040307060000000000F8
+S11300F0000000000000000000000000D8083E0AD4
+S113010011241FBECFEFD0E1DEBFCDBF11E0A0E0D0
+S1130110B1E0E6EDF1E202C005900D92A039B1071D
+S1130120D9F714E0A0E9B1E001C01D92A73FB107DF
+S1130130E1F710E0C0E0D1E004C02297FE010E9484
+S1130140E510CC3FD107C9F70E94290A0C94E910A5
+S11301500C940000CF93DF93EC01DB0180E090E08E
+S113016020E2FD01E80FF91F208301968B309105F1
+S1130170C1F757E040E022C02E3219F08CE790E03E
+S113018007C05A3029F15AE048E018C0321701F18B
+S1130190FC01019634913323C9F75417C8F0213276
+S11301A0B8F02F37A8F4822F81568A3110F4622FC9
+S11301B06052FD01E40FF11D60834F5F2991622FAE
+S11301C02223D1F690E08C91803219F091E001C0A5
+S11301D090E0892FDF91CF9108958091A703882320
+S11301E011F481E00895A0919001B0919101ED91F5
+S11301F0FC9111974091000150910101609102011D
+S1130200709103010280F381E02D27EA31E0CD01F2
+S11302100995882319F01092A70381E00895DF92CD
+S1130220EF92FF920F931F937B018C01D42E82E0F7
+S1130230481761F40E94ED008823D1F1E7EAF1E068
+S1130240119283E0E73AF807D9F723C080910001BF
+S113025090910101A0910201B09103018E159F05B7
+S1130260A007B107F1F00E94ED00882309F1E091A5
+S11302709001F0919101A081B1810D90BC91A02DCC
+S113028027EA31E0B801A701CF01FD0109958823D0
+S113029079F0E0920001F0920101009302011093C1
+S11302A003018091A7038D298093A70381E001C0F6
+S11302B080E01F910F91FF90EF90DF900895CF930E
+S11302C0DF93EC01F62FE42F8091990190919A012C
+S11302D001968C179D0780F16D2F772780E090E0C1
+S11302E020919B0130919C0140919D0150919E0170
+S11302F0620F731F841F951F4E2F50E020919701AA
+S113030030919801D9014A9F90014B9F300D5A9F1B
+S1130310300D112440E050E0620F731F841F951FBD
+S11303204F2F0E940F01882339F0BE017070660FB1
+S1130330771F69557E4F02C060E070E0CB01DF910A
+S1130340CF910895CF93DF93EC01E62F809195012F
+S113035090919601C817D90720F5BE0134E076952F
+S113036067953A95E1F780E090E020919F01309104
+S1130370A0014091A1015091A201620F731F841F3B
+S1130380951F4E2F0E940F01882359F0BE016F70F4
+S1130390707025E0660F771F2A95E1F769557E4F47
+S11303A002C060E070E0CB01DF91CF910895CF925D
+S11303B0DF92EF92FF920F931F93CF93DF937C0111
+S11303C0FC01C189D289209711F4C1E0D0E000E09A
+S11303D010E08091990190919A010817190708F08B
+S11303E04FC08C179D0710F4C1E0D0E0219640E087
+S11303F060E0CE010E945F01FC01009709F440C057
+S113040080819181892B19F00F5F1F4FE2CFF70193
+S113041081899289892B69F461E0838194810E94A6
+S1130420A201FC01009761F1D38FC28FF701D6833B
+S1130430C58310E0CC24CA94DC2C19C0F70181894F
+S11304409289009749F0412F61E00E945F01FC010D
+S11304500097B1F0D183C083412F61E0CE010E94A7
+S11304605F01FC01009761F0D182C0821F5F80911F
+S11304709301181718F3F701D28BC18B81E001C0E7
+S113048080E0DF91CF911F910F91FF90EF90DF906B
+S1130490CF900895EF92FF920F931F93E090A301E2
+S11304A0F090A4010091A5011091A601E60EF11CA3
+S11304B0011D111D02972091940130E0BC01629F3F
+S11304C0C001639F900D729F900D1124A0E0B0E0D5
+S11304D0E80EF91E0A1F1B1FC801B7010E940F0175
+S11304E01F910F91FF90EF900895AF92BF92CF921A
+S11304F0DF92EF92FF920F931F93CF93DF936C01E0
+S11305007B0180919201882309F44BC0F60100819C
+S11305101181A42EBB248091950190919601081716
+S1130520190708F03EC060E0C8010E94A201EC0176
+S11305300097C9F18881E114F10429F4882369F151
+S1130540853E41F52AC0882361F1853E19F18B85EA
+S1130550282F30E0C9018F7390700F97D9F02A21AA
+S11305603B21232BB9F4F70180818823B1F02AE0E1
+S113057001C02150E22FF0E0DE01AE0FBF1FEE0DEF
+S1130580FF1D9C918081981719F4222391F705C0CF
+S1130590222319F00F5F1F4FBECFF6011183008392
+S11305A002C0C0E0D0E0CE01DF91CF911F910F9146
+S11305B0FF90EF90DF90CF90BF90AF9008956F922F
+S11305C07F928F929F92AF92BF92CF92DF92EF92DF
+S11305D0FF920F931F93CF93DF939C01162F80916B
+S11305E09201882309F0E6C0653008F0E3C0309337
+S11305F0910120939001662321F4EE24FF248701C6
+S113060017C040E060E070E080E090E00E940F01DD
+S1130610882309F4CFC0E12FF0E0A4E0EE0FFF1F20
+S1130620AA95E1F7E35AFC4FE080F180028113813F
+S113063040E0C801B7010E940F01882309F4BAC041
+S11306408091A503853509F0B5C08091A6038A3A47
+S113065009F0B0C08090B701809293019090B401EA
+S113066090929401C091BD01D091BE01D0939801A4
+S1130670C09397016091B8017091B901709396018C
+S1130680609395016090B5017090B601930140E0CC
+S113069050E02E0D3F1D401F511F20939B013093AE
+S11306A09C0140939D0150939E01882D90E0FC0194
+S11306B0EC9FC001ED9F900DFC9F900D1124A0E0D4
+S11306C0B0E0820F931FA41FB51F80939F019093E6
+S11306D0A001A093A101B093A201F5E0660F771FDA
+S11306E0FA95E1F761507E4F672F772766959B0156
+S11306F040E050E0280F391F4A1F5B1F2093A301DD
+S11307003093A4014093A5015093A6018091BA01AE
+S11307109091BB01009721F05C01CC24DD2408C03A
+S1130720A090C701B090C801C090C901D090CA017F
+S1130730E21AF30A040B150BEA0CFB1C0C1D1D1D1D
+S1130740292D30E040E050E0C801B7010E94C110FB
+S1130750A90130939A01209399018091B20190915B
+S1130760B3018050924031F5209721F12FE0453FAD
+S1130770520700F181E0A81680E0B80680E8C806B8
+S113078080E0D806B8F46728A9F0882099F0852F6E
+S11307909927C817D90770F0992061F0292D30E006
+S11307A0C901019782239323892B21F481E080934B
+S11307B0920101C080E0DF91CF911F910F91FF90D2
+S11307C0EF90DF90CF90BF90AF909F908F907F90ED
+S11307D06F90089540E060E00E945F01FC01009783
+S11307E019F420E030E002C020813181C90108956C
+S11307F06F927F928F929F92AF92BF92CF92DF922D
+S1130800EF92FF920F931F93CF93DF93EC014B0171
+S11308105A018A8187FF82C0ED84FE840F8518897E
+S11308202F81388549855A85C501A0E0B0E08E0D39
+S11308309F1DA01FB11F281739074A075B0718F42B
+S11308405901AE18BF086501612C02E0702E60C02A
+S11308502D853E854F855889DA01C90119E0B69581
+S1130860A795979587951A95D1F7109194011150F2
+S11308701823BFEFEB2EB1E0FB2EE222F32211236B
+S1130880A1F4E114F10489F48B859C85009719F097
+S11308900E94EA0302C08D819E819C878B878230EF
+S11308A09105E0F1885F9F4FC8F540E0612F8B858B
+S11308B09C850E944A02882389F1C3018E199F09ED
+S11308C0A6018C159D0508F4AC01970129553E4FEE
+S11308D0B901640F751FD401F90102C081918D9390
+S11308E0E617F707D9F7E21BF30B8E0E9F1EC41A07
+S11308F0D50A9A0140E050E08D859E85AF85B88980
+S1130900820F931FA41FB51F8D879E87AF87B88B57
+S1130910C114D10409F09CCFA50102C04FEF5FEFD1
+S1130920CA01DF91CF911F910F91FF90EF90DF905B
+S1130930CF90BF90AF909F908F907F906F900895CD
+S1130940DF93CF930F92CDB7DEB741E050E0BE0105
+S11309506F5F7F4F0E94F803019719F02FEF3FEF6D
+S113096003C08981282F30E0C9010F90CF91DF9116
+S11309700895AF92BF92CF92DF92EF92FF920F93BE
+S11309801F93CF93DF935C016A017B01FC01828199
+S113099087FF38C087819085A185B2858417950724
+S11309A0A607B70778F13AC0F5011486138623C069
+S11309B0F5010581168180919401382F330F20E0D1
+S11309C0442737FD4095542FC701B6010E94C1103A
+S11309D0E9010CC0C8010E94EA038C018230910530
+S11309E088F02197FFEF883F9F0760F4209791F7E5
+S11309F0F50114870387F501C586D686E786F08A54
+S1130A0081E001C080E0DF91CF911F910F91FF90B1
+S1130A10EF90DF90CF90BF90AF90089541155105AE
+S1130A206105710509F2C4CFCF93DF93EC018A818C
+S1130A3087FF18C086FF13C061E08B819C810E94F0
+S1130A40A201FC01009771F08F819885A985BA8570
+S1130A50848F958FA68FB78F8A818F7B8A830E941C
+S1130A60ED0001C080E0DF91CF910895CF92DF9235
+S1130A70EF92FF920F931F93CF93DF93EC016B01DF
+S1130A808A8187FD59C080919201882309F454C05A
+S1130A905DC08081882309F44FC0853E09F44CC0B1
+S1130AA09385892F887109F047C09F739A83828D3B
+S1130AB0938D9E838D83E48CF58C068D178DEF8248
+S1130AC0F88609871A871C861B861D861E861F8644
+S1130AD0188AE114F1040105110519F41A8A198A16
+S1130AE022C09A8B898B80919401382F330F20E098
+S1130AF0442737FD4095542FC801B7010E94C11007
+S1130B0089010EC089899A890E94EA039A8B898B8C
+S1130B108230910588F001501040885F9F4F60F447
+S1130B200115110579F78A8180688A83DC82CB827A
+S1130B30CE010E94140501C080E0DF91CF911F9186
+S1130B400F91FF90EF90DF90CF90089560E0C60181
+S1130B500E94A201FC01009709F09BCFEDCFEF9218
+S1130B60FF920F931F93DF93CF93CDB7DEB72D97EB
+S1130B700FB6F894DEBF0FBECDBF7C01CB018E0152
+S1130B800D5F1F4FB8010E94AA00882381F01A82CA
+S1130B90198248E0B801CE0101960E947502892BA2
+S1130BA031F069817A81C7010E94360501C080E075
+S1130BB02D960FB6F894DEBF0FBECDBFCF91DF9157
+S1130BC01F910F91FF90EF900895CF92DF92EF92D3
+S1130BD0FF920F931F93DF93CF93CDB7DEB72D977B
+S1130BE00FB6F894DEBF0FBECDBF6C019B01FC01B4
+S1130BF0828187FD41C01A82198283E0E82EF12C9C
+S1130C00EC0EFD1EB701C9010E94AA008823A1F1C0
+S1130C1048E0B7018E010F5F1F4FC8010E947502A3
+S1130C20892B51F51A82198248E060E070E0C8010E
+S1130C300E947502AC010097F9F08091A7038160CE
+S1130C408093A70320E030E0B7012B3010F080E060
+S1130C5004C0FB01E20FF31F8081FA01E20FF31FCE
+S1130C6080832F5F3F4F2032310579F769817A8184
+S1130C70C6010E94360501C080E02D960FB6F89497
+S1130C80DEBF0FBECDBFCF91DF911F910F91FF90BB
+S1130C90EF90DF90CF900895CF93DF93EC010E9403
+S1130CA01405882311F01A8281E0DF91CF91089511
+S1130CB06F927F929F92AF92BF92CF92DF92EF9208
+S1130CC0FF920F931F93CF93DF93EC015B01E42E0C
+S1130CD0952E8A8187FF4AC080FD48C0842F952FB6
+S1130CE09C016901612C52E0752E71C02F813885F9
+S1130CF049855A85DA01C90149E0B695A7959795C2
+S1130D0087954A95D1F7F0909401FA94F8228901D5
+S1130D101170FF20F1F40115110501F589899A89F3
+S1130D20009729F48D819E81009781F406C00E946A
+S1130D30EA032FEF883F920730F0CE010E94D701DB
+S1130D40882351F413C08230910580F09A8B898BEB
+S1130D5003C00115110511F442E001C041E06F2DFB
+S1130D6089899A890E944A02882319F42FEF3FEF58
+S1130D7035C09301201B310BA6012C153D0508F449
+S1130D80A901980129553E4FB901640F751FD5017A
+S1130D90F90102C08D918193E617F707D9F7E21B99
+S1130DA0F30BAE0EBF1EC41AD50ACA01A0E0B0E010
+S1130DB02F81388549855A85280F391F4A1F5B1FA3
+S1130DC02F83388749875A878A8180648A83C1142C
+S1130DD0D10409F08BCF8E2D992D9C01C901DF918F
+S1130DE0CF911F910F91FF90EF90DF90CF90BF9024
+S1130DF0AF909F907F906F900895DF93CF930F9261
+S1130E00CDB7DEB7698341E050E0BE016F5F7F4F2D
+S1130E100E9458060F90CF91DF910895DF92EF92D0
+S1130E20FF920F931F93D82E7A018B010E94B00872
+S1130E308D2D80640E94B708812F9927AA27BB278C
+S1130E400E94B708C801AA27BB270E94B708BB277E
+S1130E50A12F902F8F2D0E94B7088E2D0E94B708C6
+S1130E60DD2011F08FEF01C085E90E94B7081FEF64
+S1130E700E94B0088F3F21F4112311F01150F8CFD4
+S1130E801F910F91FF90EF90DF900895EF92FF92E2
+S1130E900F931F93CF93DF937A018B01E90139E01C
+S1130EA0EE0CFF1C001F111F3A95D1F7E114F10459
+S1130EB001051105C1F10E94BC08B801A70188E130
+S1130EC00E940E07882311F58EEF0E94B70800E0F8
+S1130ED010E0FE01E00FF11F80810E94B7080F5F50
+S1130EE01F4F82E000301807A1F78FEF0E94B70868
+S1130EF08FEF0E94B7080E94B0088F71853099F473
+S1130F000FEF1FEF08C00115110519F40E94C10865
+S1130F100AC0015010400E94B0088F3FA1F70E9400
+S1130F20C10881E001C080E0DF91CF911F910F9152
+S1130F30FF90EF900895EF92FF920F931F93CF933A
+S1130F40DF937C018B01C0E0D0E006C0219721F43F
+S1130F500E94C10880E018C00E94B0088E3FB1F71B
+S1130F60C0E0D0E007C00E94B008F701EC0FFD1FFD
+S1130F7080832196C017D107B0F30E94B0080E9465
+S1130F80B0080E94C10881E0DF91CF911F910F91B9
+S1130F90FF90EF900895EF92FF920F931F93CF93DA
+S1130FA0DF937A018B01E9010E94BC0849E0EE0C51
+S1130FB0FF1C001F111F4A95D1F7B801A70181E159
+S1130FC00E940E07882321F00E94C10880E005C01A
+S1130FD060E072E0CE010E949B07DF91CF911F91E8
+S1130FE00F91FF90EF900895EF92FF920F931F934C
+S1130FF0DF93CF93CDB7DEB760970FB6F894DEBF1B
+S11310000FBECDBF0E94BC0840E050E060E070E03D
+S113101089E00E940E07882319F00E94C10808C0C5
+S113102060E170E0CE0101960E949B07882321F4C1
+S1131030EE24FF24870130C08F818370382F330F53
+S1131040330F20E0888590E0880F991F880F991F3F
+S1131050282B392B8985829586958695837090E017
+S1131060282B392B2F5F3F4F790100E010E08E8150
+S11310708F7090E007972A852370220F3B85331FDA
+S11310803327331F232B820F911D04C0EE0CFF1C4A
+S1131090001F111F8A95D2F7B701C80160960FB6D9
+S11310A0F894DEBF0FBECDBFCF91DF911F910F919A
+S11310B0FF90EF9008951F93CF93DF930E94C6088B
+S11310C010E08FEF0E94B7081F5F1A30D1F70E941B
+S11310D0BC0840E050E060E070E080E00E940E0751
+S11310E0C0E0D0E004C02197D1F00E94B008813064
+S11310F0D1F7C0E0D0E040E050E060E070E087E38A
+S11311000E940E0740E050E060E070E089E20E9437
+S11311100E07882351F083E0C83ED80721F40E94CB
+S1131120C10810E011C02196E6CF0E94A90840E052
+S113113052E060E070E080E10E940E0710E0882336
+S113114009F411E00E94C108812FDF91CF911F9112
+S113115008958CB58C7F8CBD8DB581608DBD08954F
+S11311608FEF8EBD0DB407FEFDCF8EB508958EBDF5
+S11311700DB407FEFDCF089560E084E00E94640E84
+S1131180089561E084E00E94640E089561E084E0C3
+S11311900E94460E0E94C10861E085E00E94460E4E
+S11311A061E087E00E94460E83E58CBD08950895B2
+S11311B08EE091E09093A9038093A80388E091E0E6
+S11311C09093AB038093AA031092AC0308950F93FA
+S11311D01F938C0162E171E08DEB93E00E94610B3F
+S11311E0B8018DEB93E00E948C0BFFCF9C0140E093
+S11311F001C04F5FFB01E40FF11D80818823C9F713
+S113120050E0C9010E94580608954F925F926F9270
+S11312107F928F929F92BF92CF92DF92EF92FF9232
+S11312200F931F93DF93CF93CDB7DEB72A970FB6F3
+S1131230F894DEBF0FBECDBF4C017A018B01BB24F5
+S11312408AE0482E512C3E010894611C711CB39411
+S11312506201CB18D108C60CD71CC801B7012AE01B
+S113126030E040E050E00E94C110605DF601608310
+S1131270C801B7012AE030E040E050E00E94C1100C
+S1131280C901DA017C018D01E114F10401051105A4
+S1131290F1F64B2D50E0B601C4010E9458062A967F
+S11312A00FB6F894DEBF0FBECDBFCF91DF911F9173
+S11312B00F91FF90EF90DF90CF90BF909F908F9011
+S11312C07F906F905F904F90089542E050E06AE104
+S11312D071E00E9458060895EF92FF920F931F93B6
+S11312E0DF93CF93CDB7DEB72C970FB6F894DEBF5C
+S11312F00FBECDBF40E855E260E070E08DEB93E0B7
+S11313000E94A60B8DEB93E00E94E50A6DE171E06B
+S11313108DEB93E00E948C0B8DEB93E00E94A10B6C
+S11313208823D1F388EA93E00E945B08882321F4A0
+S113133089E391E00E94E70861E088EA93E00E9473
+S1131340DF02882359F460E088EA93E00E94DF0218
+S1131350882321F483E491E00E94E708DE011196DA
+S1131360EEE7F1E08CE001900D928150E1F710E09E
+S11313707E010894E11CF11C812F6AE00E94B510E3
+S1131380805D8E83812F0E94B510905D9F83B7018D
+S11313908AEA93E00E94E505882319F41F5F143656
+S11313A059F78091AC0387FD04C08FE491E00E945B
+S11313B0E7086BE571E08DEB93E00E94610BBE01E1
+S11313C06F5F7F4F8DEB93E00E948C0BEE24FF2424
+S11313D0870168E671E08AEA93E00E94F608B801A2
+S11313E0A7018AEA93E00E9405096EE671E08AEAA1
+S11313F093E00E94F6080E94C60DAB01BC018AEA84
+S113140093E00E9405098AEA93E00E946509089422
+S1131410E11CF11C011D111D84E6E816F10401050F
+S11314201105B9F68AEA93E00E944C0669E771E077
+S11314308DEB93E00E948C0B2C960FB6F894DEBFD4
+S11314400FBECDBFCF91DF911F910F91FF90EF9011
+S113145008950E940C0E0E946C09FFCFFC016623C4
+S113146011F41082089581E080830895FC016623BD
+S113147011F41082089581E0808308951092BD03D1
+S113148081E08093BE030895DF93CF930F92CDB78D
+S1131490DEB7FC01698341E0BE016F5F7F4F80814D
+S11314A00E94790C0F90CF91DF910895DF93CF9331
+S11314B00F92CDB7DEB7FC01698341E0BE016F5FD7
+S11314C07F4F80810E94790C0F90CF91DF91089516
+S11314D02F923F924F925F926F927F928F929F9240
+S11314E0AF92BF92CF92DF92EF92FF920F931F932E
+S11314F0DF93CF93CDB7DEB7A0970FB6F894DEBFD6
+S11315000FBECDBF2C016A017B0141155105610558
+S1131510710521F460E30E94560A3EC0AA24BB244C
+S1131520622E7724882499241E010894211C311CDE
+S113153081010A0D1B1DC701B601A40193010E947C
+S1131540C110F80160830894A11CB11CC701B60145
+S1131550A40193010E94C110C901DA016C017D014B
+S1131560C114D104E104F10419F775010894E108E8
+S1131570F108E20CF31C0DC0F70160816A3010F42D
+S1131580605D01C0695CC2010E94560A0894E108CA
+S1131590F108EC16FD0681F7A0960FB6F894DEBFAD
+S11315A00FBECDBFCF91DF911F910F91FF90EF90B0
+S11315B0DF90CF90BF90AF909F908F907F906F906F
+S11315C05F904F903F902F9008950F931F938C013D
+S11315D06DE00E94560A6AE0C8010E94560A1F91F3
+S11315E00F9108950F931F938C010E94440AC80120
+S11315F00E94E50A1F910F9108950F931F938C0188
+S11316000E94560AC8010E94E50A1F910F9108958D
+S1131610EF92FF920F931F93CF93DF93EC017A0124
+S11316208B0177FF0BC06DE20E94560A109500955E
+S1131630F094E094E11CF11C011D111D2AE0B80195
+S1131640A701CE010E94680ADF91CF911F910F91EB
+S1131650FF90EF9008950F931F938C010E94080B45
+S1131660C8010E94E50A1F910F910895AB016627F6
+S113167057FD6095762F0E942B0B0895AB016627CA
+S113168057FD6095762F0E94080B089521153105AA
+S113169021F4642F0E94560A08952A30310519F462
+S11316A00E94080B08950E94680A08950F931F93DF
+S11316B08C010E94460BC8010E94E50A1F910F91FC
+S11316C00895CF92DF92EF92FF920F931F93CF93DF
+S11316D0DF936C017B01DB010D900020E9F78D01A4
+S11316E001501040061B170BC0E0D0E009C0B70141
+S11316F06C0F7D1F41E0F60180810E94790C2196D8
+S1131700C017D107A4F3DF91CF911F910F91FF90E0
+S1131710EF90DF90CF9008950F931F938C010E9458
+S1131720610BC8010E94E50A1F910F910895FC0105
+S113173080810E94CB0C0895FC0180810E94150CCD
+S11317400895FC0180810E94AD0B0895FC01808105
+S11317500E94D50C089518951895882329F48BEDCB
+S113176094E00E94620F089587EC94E00E94620F57
+S113177008951F920F920FB60F9211242F933F9347
+S11317804F935F936F937F938F939F93AF93BF9385
+S1131790EF93FF9385EE94E00E94620F882331F06B
+S11317A085EE94E00E94330F8093CE00FF91EF9179
+S11317B0BF91AF919F918F917F916F915F914F9165
+S11317C03F912F910F900FBE0F901F9018951F926D
+S11317D00F920FB60F9211242F933F934F935F9361
+S11317E06F937F938F939F93AF93BF93EF93FF93E5
+S11317F081ED94E00E94620F882331F081ED94E042
+S11318000E94330F8093C600FF91EF91BF91AF9177
+S11318109F918F917F916F915F914F913F912F9104
+S11318200F900FBE0F901F901895882329F48BED0D
+S113183094E00E94330F089587EC94E00E94330FE4
+S113184008951F920F920FB60F9211242F933F9376
+S11318504F935F936F937F938F939F93AF93BF93B4
+S1131860EF93FF936091CE008091C80084FD04C083
+S113187087EC94E00E94070FFF91EF91BF91AF9125
+S11318809F918F917F916F915F914F913F912F9194
+S11318900F900FBE0F901F9018951F920F920FB6C6
+S11318A00F9211242F933F934F935F936F937F93E2
+S11318B08F939F93AF93BF93EF93FF936091C60071
+S11318C08091C00084FD04C08BED94E00E94070F5A
+S11318D0FF91EF91BF91AF919F918F917F916F9104
+S11318E05F914F913F912F910F900FBE0F901F90DA
+S11318F01895FF920F931F93CF93DF93162F042F06
+S1131900442309F442C0FFB6F8948823E9F4862FEF
+S1131910972F9C01E901699181ED94E00E94070FE2
+S11319209E01211B2017B8F38091C000806480932E
+S1131930C0008091C00085FFFCCF81ED94E00E943F
+S1131940330F8093C6001CC0862F972F9C01E9019A
+S1131950699185EE94E00E94070F9E01211B2017D8
+S1131960B8F38091C80080648093C8008091C80057
+S113197085FFFCCF85EE94E00E94330F8093CE0068
+S11319808FB730E8F322F82AFFBEDF91CF911F9181
+S11319900F91FF900895882319F48BED94E002C011
+S11319A087EC94E00E94A90F0895EF92FF920F93A1
+S11319B01F937A018B019A01AB0156954795379590
+S11319C027958823B1F5205C3D4B404F5F4FCA01FA
+S11319D0B901A80197010E94C110C901DA01019758
+S11319E0A109B109292F3A2F4B2F55270196A11D83
+S11319F0B11D2093C50081508093C4001092C00093
+S1131A001092C1001092C20088ED8093C10086E05C
+S1131A108093C20040E850E06FEB73E08BED94E0FC
+S1131A200E94FB0E40E850E06FE374E081ED94E027
+S1131A3049C0205C3D4B404F5F4FCA01B901A8012A
+S1131A4097010E94C110C901DA010197A109B109E6
+S1131A50292F3A2F4B2F55270196A11DB11D2093F5
+S1131A60CD0081508093CC001092C8001092C90020
+S1131A701092CA0088ED8093C90086E08093CA0062
+S1131A8080E890E00E94B30F8093F1049093F204F5
+S1131A9080E890E00E94B30F8093EF049093F004E9
+S1131AA06091F1047091F20442E050E087EC94E01C
+S1131AB00E94FB0E6091EF047091F00442E050E04C
+S1131AC085EE94E00E94FB0E1F910F91FF90EF9022
+S1131AD008951F920F920FB60F9211242F938F9394
+S1131AE09F93AF93BF938091BF049091C004A09142
+S1131AF0C104B091C2048050904CAF4FBF4F80934B
+S1131B00BF049093C004A093C104B093C20427C03F
+S1131B108091BF049091C004A091C104B091C2040B
+S1131B2080589E43A040B0408093BF049093C0046B
+S1131B30A093C104B093C2048091C3049091C404DF
+S1131B40A091C504B091C6040196A11DB11D809356
+S1131B50C3049093C404A093C504B093C6048091B5
+S1131B60BF049091C004A091C104B091C2048158F3
+S1131B709E43A040B04060F6BF91AF919F918F917A
+S1131B802F910F900FBE0F901F9018958FB7F89458
+S1131B902091C3043091C4044091C5045091C604FB
+S1131BA08FBFB901CA010895EF92FF920F931F935B
+S1131BB07B018C018FB7F8944091C3045091C40405
+S1131BC06091C5047091C6048FBF2FB7F8948091BB
+S1131BD0C3049091C404A091C504B091C6042FBF5E
+S1131BE0841B950BA60BB70B8E159F05A007B10799
+S1131BF060F31F910F91FF90EF900895019759F0B2
+S1131C00FC01EE0FFF1FEE0FFF1F32978FB7F89402
+S1131C103197F1F78FBF0895789484B5826084BDBD
+S1131C2084B5816084BD85B5826085BD85B58160DC
+S1131C3085BDEEE6F0E0808181608083E1E8F0E03C
+S1131C40808182608083808181608083E0E8F0E02D
+S1131C50808181608083E1EBF0E080818460808317
+S1131C60E0EBF0E0808181608083EAE7F0E080814E
+S1131C7084608083808182608083808181608083AE
+S1131C808081806880831092C1000895282F30E0FD
+S1131C90C90185549F4FFC01949125563F4FF9018A
+S1131CA08491882381F0E82FF0E0E457FF4FE4911A
+S1131CB0F0E0662329F48081909589238083089538
+S1131CC08081892B80830895482F50E0CA01855272
+S1131CD09F4FFC012491CA0185549F4FFC019491AC
+S1131CE045565F4FFA0134913323C1F1222331F178
+S1131CF0213019F484B58F7704C0223021F484B5DF
+S1131D008F7D84BD1BC0233021F4809180008F77A8
+S1131D1005C0243031F4809180008F7D8093800051
+S1131D200DC0263021F48091B0008F7705C0273094
+S1131D3029F48091B0008F7D8093B000E32FF0E010
+S1131D40EF56FF4FE491F0E0662329F480819095EB
+S1131D508923808308958081892B80830895482F67
+S1131D6050E0CA0185529F4FFC012491CA01855459
+S1131D709F4FFC01949145565F4FFA0134913323F0
+S1131D8019F420E030E035C0222331F1213019F478
+S1131D9084B58F7704C0223021F484B58F7D84BD4F
+S1131DA01BC0233021F4809180008F7705C024303C
+S1131DB031F4809180008F7D809380000DC02630A7
+S1131DC021F48091B0008F7705C0273029F48091E9
+S1131DD0B0008F7D8093B000E32FF0E0EA56FF4F10
+S1131DE0E491F0E0808120E030E0892311F021E0EB
+S1131DF030E0C9010895FC0157834683118610869B
+S1131E007183608373836283758364830895DC01C3
+S1131E1018962D913C91199716968D919C91179730
+S1131E2028173907F8F4ED91FC91119761931196F5
+S1131E30FC93EE9318968D919C911997019619969F
+S1131E409C938E93189714962D913C911597169602
+S1131E508D919C911797820F931FE817F90710F043
+S1131E602D933C930895DC0118968D919C911997BC
+S1131E70009719F42FEF3FEF23C01296ED91FC91D8
+S1131E80139741911396FC93EE9312970197199629
+S1131E909C938E93189714962D913C9115971696B2
+S1131EA08D919C911797820F931FE817F90720F0E3
+S1131EB013963C932E931297242F332727FD3095A6
+S1131EC0C9010895FC0180850895FC0180859185F0
+S1131ED0892B11F480E008950280F381E02D808144
+S1131EE00895CF93DF93DC01562F18966D917C9162
+S1131EF019976115710541F11296ED91FC911397B3
+S1131F00CD91DC91119740E01CC08081851711F4BC
+S1131F10652F1BC04F5F842F90E086179707A0F4AE
+S1131F209F012F5F3F4F1496ED91FC9115971696E4
+S1131F308D919C9117978E0F9F1F8217930708F01E
+S1131F40F901EC17FD0709F760E0862FDF91CF91C7
+S1131F500895FC0111861086848195819183808384
+S1131F60938382830895CF93DF93BC0182309105DC
+S1131F7010F462E070E0A091F504B091F604ED0174
+S1131F80E0E0F0E040E050E021C0888199818617CC
+S1131F90970769F48A819B81309719F09383828330
+S1131FA004C09093F6048093F504FE0134C06817CE
+S1131FB0790738F44115510519F08417950708F489
+S1131FC0AC01FE018A819B819C01E9012097E9F61D
+S1131FD041155105A9F1CA01861B970B049708F412
+S1131FE0BA01E0E0F0E02AC08D919C91119784172A
+S1131FF09507F9F46417750781F412968D919C91F5
+S11320001397309719F09383828304C09093F60456
+S11320108093F504FD0132964CC0CA01861B970BD0
+S1132020FD01E80FF91F6193719302978D939C93BF
+S113203040C0FD01828193819C01D9011097A1F6D2
+S11320408091F3049091F404892B41F480918C01E4
+S113205090918D019093F4048093F30440918E0148
+S113206050918F014115510541F44DB75EB78091F0
+S11320708A0190918B01481B590B2091F3043091F4
+S1132080F404CA01821B930B8617970780F0AB01F7
+S11320904E5F5F4F8417950750F0420F531F5093C4
+S11320A0F4044093F304F9016193719302C0E0E0F6
+S11320B0F0E0CF01DF91CF910895CF93DF930097A4
+S11320C009F450C0EC0122971B821A82A091F504F6
+S11320D0B091F604109709F140E050E0AC17BD0749
+S11320E008F1BB83AA83FE0121913191E20FF31F12
+S11320F0AE17BF0779F48D919C911197280F391F62
+S11321002E5F3F4F3983288312968D919C911397AC
+S11321109B838A834115510571F4D093F604C093CF
+S1132120F50420C012968D919C911397AD010097F0
+S113213011F0DC01D3CFFA01D383C2832191319111
+S1132140E20FF31FCE17DF0769F488819981280F06
+S1132150391F2E5F3F4FFA01318320838A819B818F
+S113216093838283DF91CF910895991B79E004C012
+S1132170991F961708F0961B881F7A95C9F78095C2
+S11321800895A1E21A2EAA1BBB1BFD010DC0AA1FB4
+S1132190BB1FEE1FFF1FA217B307E407F50720F0CC
+S11321A0A21BB30BE40BF50B661F771F881F991F47
+S11321B01A9469F760957095809590959B01AC0190
+S11321C0BD01CF010895EE0FFF1F0590F491E02D9E
+S10921D00994F894FFCF0E
+S11321D6FFFFFFFF00000000FD0600000000CB0724
+S11321E646076572726F723A20000D0A00547970C0
+S11321F66520616E7920636861726163746572201B
+S1132206746F20737461727400636172642E696EF4
+S113221669740046617431363A3A696E69740066C7
+S1132226696C652E637265617465005772697469B9
+S11322366E6720746F3A20006C696E652000206D0D
+S1132246696C6C6973203D2000446F6E65005752BB
+S113225649544530302E545854002000F7040000E9
+S9030000FC
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/fat16write.pde b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/fat16write.pde
new file mode 100644
index 00000000..397e9692
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/examples/fat16write/fat16write.pde
@@ -0,0 +1,90 @@
+/*
+ * Write Example
+ *
+ * This sketch creates a new file and writes 100 lines to the file.
+ */
+
+#include "Fat16.h"
+#include "SdCard.h"
+
+SdCard card;
+Fat16 file;
+
+void error(char *str)
+{
+ Serial.print("error: ");
+ Serial.println(str);
+ while(1);
+}
+/*
+ * Write CR LF to a file
+ */
+void writeCRLF(Fat16 &f)
+{
+ f.write((uint8_t *)"\r\n", 2);
+}
+/*
+ * Write an unsigned number to a file
+ */
+void writeNumber(Fat16 &f, uint32_t n)
+{
+ uint8_t buf[10];
+ uint8_t i = 0;
+ do {
+ i++;
+ buf[sizeof(buf) - i] = n%10 + '0';
+ n /= 10;
+ } while (n);
+ f.write(&buf[sizeof(buf) - i], i);
+}
+/*
+ * Write a string to a file
+ */
+void writeString(Fat16 &f, char *str)
+{
+ uint8_t n;
+ for (n = 0; str[n]; n++);
+ f.write((uint8_t *)str, n);
+}
+
+void setup(void)
+{
+ Serial.begin(9600);
+ Serial.println();
+ Serial.println("Type any character to start");
+ while (!Serial.available());
+
+ // initialize the SD card
+ if (!card.init()) error("card.init");
+
+ // initialize a FAT16 volume
+ // Assume MBR volume and try partition one
+ if (!Fat16::init(card, 1)) {
+ // try super floppy
+ if (!Fat16::init(card, 0)) error("Fat16::init");
+ }
+ // create a new file
+ char name[] = "WRITE00.TXT";
+ for (uint8_t i = 0; i < 100; i++) {
+ name[5] = i/10 + '0';
+ name[6] = i%10 + '0';
+ if (file.create(name)) break;
+ }
+ if (!file.isOpen()) error ("file.create");
+ Serial.print("Writing to: ");
+ Serial.println(name);
+
+ // write 100 line to file
+ for (uint8_t i = 0; i < 100; i++) {
+ writeString(file, "line ");
+ writeNumber(file, i);
+ writeString(file, " millis = ");
+ writeNumber(file, millis());
+ writeCRLF(file);
+ }
+ // close file and force write of all data to the SD card
+ file.close();
+ Serial.println("Done");
+}
+
+void loop(void) {}
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/spiBus.cpp b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/spiBus.cpp
new file mode 100644
index 00000000..5406df84
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/spiBus.cpp
@@ -0,0 +1,60 @@
+/* Arduino FAT16 Library
+ * Copyright (C) 2008 by William Greiman
+ *
+ * This file is part of the Arduino FAT16 Library
+ *
+ * This Library is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This Library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with the Arduino Fat16 Library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+#include "spiBus.h"
+#include "WConstants.h"
+
+void spiInit(void)
+{
+ pinMode(SS, OUTPUT);
+ spiSSHigh();
+ pinMode(MOSI, OUTPUT);
+ pinMode(SCK, OUTPUT);
+ //Enable SPI, Master, clock rate f_osc/128
+ SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR1) | (1 << SPR0);
+}
+//set speed to f_OSC/2
+void spiMaxSpeed(void)
+{
+ SPCR &= ~((1 << SPR1) | (1 << SPR0)); // f_OSC/4
+ SPSR |= (1 << SPI2X); // Doubled Clock Frequency: f_OSC/2
+}
+//clock byte in
+uint8_t spiRec(void)
+{
+ SPDR = 0xff;
+ while(!(SPSR & (1 << SPIF)));
+ return SPDR;
+}
+//clock byte out
+void spiSend(uint8_t b)
+{
+ SPDR = b;
+ while(!(SPSR & (1 << SPIF)));
+}
+//set Slave Select HIGH
+void spiSSHigh(void)
+{
+ digitalWrite(SS, HIGH);
+}
+//set Slave Select LOW
+void spiSSLow(void)
+{
+ digitalWrite(SS, LOW);
+} \ No newline at end of file
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/Fat16/spiBus.h b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/spiBus.h
new file mode 100644
index 00000000..e688721f
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/Fat16/spiBus.h
@@ -0,0 +1,33 @@
+/* Arduino FAT16 Library
+ * Copyright (C) 2008 by William Greiman
+ *
+ * This file is part of the Arduino FAT16 Library
+ *
+ * This Library is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This Library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with the Arduino Fat16 Library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+#ifndef spiBus_h
+#define spiBus_h
+#include <stdint.h>
+#define SS 4
+#define MOSI 5
+#define MISO 6
+#define SCK 7
+void spiInit(void);
+uint8_t spiRec(void);
+void spiSend(uint8_t b);
+void spiMaxSpeed(void);
+void spiSSHigh(void);
+void spiSSLow(void);
+#endif //spiBus_h
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/_fat16_config_8h.html b/trunk/users/bruce/SD card test/Fat16Lib/html/_fat16_config_8h.html
new file mode 100644
index 00000000..93fa6ab9
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/_fat16_config_8h.html
@@ -0,0 +1,182 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Fat16/Fat16Config.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Fat16/Fat16Config.h File Reference</h1><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16_config_8h.html#9b8f1dc22b1010eb0d16cc59bebdd792">FAT16_PRINT_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16_config_8h.html#d491a376db448bccdda45d46c08b2824">SD_PROTECT_BLOCK_ZERO</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16_config_8h.html#453e697f29eb02143d294fc1c363b05a">FAT16_READ_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16_config_8h.html#343e8c5d4c4d5e8abbbfad802af59c08">FAT16_SEEK_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16_config_8h.html#2115fb17b7fabf2e24432f05c6763be0">FAT16_WRITE_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16_config_8h.html#6547eeea0ce8b48abe149f79e90b0a9e">SD_CARD_SIZE_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16_config_8h.html#489774e66b14fc885d520ae787fb3f53">FAT16_SAVE_RAM</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16_config_8h.html#618f37288bd16c11fcc5d677d1d83c6f">FAT16_DEBUG_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16_config_8h.html#de961b0bd6714a7db5cab341bc65e50d">SD_CARD_READ_REG_SUPPORT</a>&nbsp;&nbsp;&nbsp;0</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Configuration file <hr><h2>Define Documentation</h2>
+<a class="anchor" name="618f37288bd16c11fcc5d677d1d83c6f"></a><!-- doxytag: member="Fat16Config.h::FAT16_DEBUG_SUPPORT" ref="618f37288bd16c11fcc5d677d1d83c6f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FAT16_DEBUG_SUPPORT&nbsp;&nbsp;&nbsp;1 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Set non-zero to allow access to <a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a> internals by cardInfo debug sketch
+</div>
+</div><p>
+<a class="anchor" name="9b8f1dc22b1010eb0d16cc59bebdd792"></a><!-- doxytag: member="Fat16Config.h::FAT16_PRINT_SUPPORT" ref="9b8f1dc22b1010eb0d16cc59bebdd792" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FAT16_PRINT_SUPPORT&nbsp;&nbsp;&nbsp;1 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Set non-zero to enable Arduino V12 <a class="el" href="class_print.html" title="The Arduino core Print class.">Print</a> support
+</div>
+</div><p>
+<a class="anchor" name="453e697f29eb02143d294fc1c363b05a"></a><!-- doxytag: member="Fat16Config.h::FAT16_READ_SUPPORT" ref="453e697f29eb02143d294fc1c363b05a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FAT16_READ_SUPPORT&nbsp;&nbsp;&nbsp;1 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Set non-zero to enable read() support
+</div>
+</div><p>
+<a class="anchor" name="489774e66b14fc885d520ae787fb3f53"></a><!-- doxytag: member="Fat16Config.h::FAT16_SAVE_RAM" ref="489774e66b14fc885d520ae787fb3f53" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FAT16_SAVE_RAM&nbsp;&nbsp;&nbsp;1 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Set non-zero to store strings in PROGMEM. Will cause bogus warnings from gcc.
+</div>
+</div><p>
+<a class="anchor" name="343e8c5d4c4d5e8abbbfad802af59c08"></a><!-- doxytag: member="Fat16Config.h::FAT16_SEEK_SUPPORT" ref="343e8c5d4c4d5e8abbbfad802af59c08" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FAT16_SEEK_SUPPORT&nbsp;&nbsp;&nbsp;1 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Set non-zero to enable seek() support
+</div>
+</div><p>
+<a class="anchor" name="2115fb17b7fabf2e24432f05c6763be0"></a><!-- doxytag: member="Fat16Config.h::FAT16_WRITE_SUPPORT" ref="2115fb17b7fabf2e24432f05c6763be0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FAT16_WRITE_SUPPORT&nbsp;&nbsp;&nbsp;1 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Set non-zero to enable write() and create() support
+</div>
+</div><p>
+<a class="anchor" name="de961b0bd6714a7db5cab341bc65e50d"></a><!-- doxytag: member="Fat16Config.h::SD_CARD_READ_REG_SUPPORT" ref="de961b0bd6714a7db5cab341bc65e50d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define SD_CARD_READ_REG_SUPPORT&nbsp;&nbsp;&nbsp;0 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Should be zero - only useful for debug
+</div>
+</div><p>
+<a class="anchor" name="6547eeea0ce8b48abe149f79e90b0a9e"></a><!-- doxytag: member="Fat16Config.h::SD_CARD_SIZE_SUPPORT" ref="6547eeea0ce8b48abe149f79e90b0a9e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define SD_CARD_SIZE_SUPPORT&nbsp;&nbsp;&nbsp;1 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Set non-zero to enable <a class="el" href="class_sd_card.html#46d70fca217450fe0920eb6bceeabbc7">SdCard::cardSize()</a>
+</div>
+</div><p>
+<a class="anchor" name="d491a376db448bccdda45d46c08b2824"></a><!-- doxytag: member="Fat16Config.h::SD_PROTECT_BLOCK_ZERO" ref="d491a376db448bccdda45d46c08b2824" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define SD_PROTECT_BLOCK_ZERO&nbsp;&nbsp;&nbsp;1 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<a class="el" href="class_sd_card.html#7733bf2b059eb938d556fe3b13a40b2a">SdCard::writeBlock</a> will protect block zero if set non-zero
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/_fat16structs_8h.html b/trunk/users/bruce/SD card test/Fat16Lib/html/_fat16structs_8h.html
new file mode 100644
index 00000000..6be8651d
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/_fat16structs_8h.html
@@ -0,0 +1,574 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Fat16/Fat16structs.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Fat16/Fat16structs.h File Reference</h1><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpartition_table.html">partitionTable</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">MBR partition table entry. <a href="structpartition_table.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmaster_boot_record.html">masterBootRecord</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Master Boot Record. <a href="structmaster_boot_record.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structbios_pram_block.html">biosPramBlock</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Structure that defines a FAT16 volume. <a href="structbios_pram_block.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfat16_boot_sector.html">fat16BootSector</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Boot Sector of a FAT16 volume. <a href="structfat16_boot_sector.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdirectory_entry.html">directoryEntry</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">FAT short directory entry. <a href="structdirectory_entry.html#_details">More...</a><br></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#84f4a7f0235acd0e08d1efd30671dc5c">PART_BOOT_ACTIVE</a>&nbsp;&nbsp;&nbsp;0X80</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#a5c0d48522debe219f27dd02267973cd">PART_BOOT_NON_BOOTABLE</a>&nbsp;&nbsp;&nbsp;0X00</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#f00f92912ea4313584607803a84d4569">PART_TYPE_FAT12</a>&nbsp;&nbsp;&nbsp;0x01</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#fdde21ad3dd736c073ec7e1d74346f16">PART_TYPE_DOSFAT16</a>&nbsp;&nbsp;&nbsp;0x04</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#170373ba21a09003408101f4007b8731">PART_TYPE_EXTENDED</a>&nbsp;&nbsp;&nbsp;0x05</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#2df90d0387a3fc5a7bea16dad24e65aa">PART_TYPE_FAT16</a>&nbsp;&nbsp;&nbsp;0x06</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#8f2d3351af3f1e32145d247cc96e123d">PART_TYPE_NTFS</a>&nbsp;&nbsp;&nbsp;0x07</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#914508e25d96c2b25fe36bc23e8d1559">PART_TYPE_FAT32</a>&nbsp;&nbsp;&nbsp;0x0B</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#cb346273c1cb5598e33e939f99ca7a71">PART_TYPE_FAT32LBA</a>&nbsp;&nbsp;&nbsp;0x0C</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#ea996586283ae556794def5168a0a5cf">PART_TYPE_FAT16LBA</a>&nbsp;&nbsp;&nbsp;0x0E</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#6bdc1ff84ef254d5a4c430990b5e552f">PART_TYPE_EXTDOSLBA</a>&nbsp;&nbsp;&nbsp;0x0F</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#f486ac496fe6acb0eec481e11832c827">BOOTSIG0</a>&nbsp;&nbsp;&nbsp;0X55</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#0ad4c211cc7ec503df6ff87dd51098f6">BOOTSIG1</a>&nbsp;&nbsp;&nbsp;0XAA</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#ea1ec80e0a55df6c0fe7a53d9c5f221b">DIR_NAME_0XE5</a>&nbsp;&nbsp;&nbsp;0X05</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#ee3b364607f1cedf1426fef50db53a5a">DIR_NAME_DELETED</a>&nbsp;&nbsp;&nbsp;0XE5</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#a28cb328cccf618d3b9082ce27d893a2">DIR_NAME_FREE</a>&nbsp;&nbsp;&nbsp;0X00</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#a570aa39738d2e3af5f9d20ba8cee8a3">DIR_ATT_READ_ONLY</a>&nbsp;&nbsp;&nbsp;0X01</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#455d4c0f35acc679bd729133c888183f">DIR_ATT_HIDDEN</a>&nbsp;&nbsp;&nbsp;0X02</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#045a61c0460454f25c695822fc21fcc3">DIR_ATT_SYSTEM</a>&nbsp;&nbsp;&nbsp;0X04</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#795207af74b95f84efb649298fea6eed">DIR_ATT_VOLUME_ID</a>&nbsp;&nbsp;&nbsp;0X08</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#37b16434700a60b4ee9cf38e2a9d8e5b">DIR_ATT_DIRECTORY</a>&nbsp;&nbsp;&nbsp;0X10</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#7a8484796aa3fd5c16efe0a836528f63">DIR_ATT_ARCHIVE</a>&nbsp;&nbsp;&nbsp;0X20</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#dde4e4e151d8c966625c69d15f1b76d6">DIR_ATT_LONG_NAME</a>&nbsp;&nbsp;&nbsp;0X0F</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#e78655ccef6819ec96056181a7ad4340">DIR_ATT_LONG_NAME_MASK</a>&nbsp;&nbsp;&nbsp;0X3F</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#c5757e7f5bc1685c5b86bd849cfe978a">FAT_LAST_USED</a>&nbsp;&nbsp;&nbsp;0XFFEF</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#bfce2754c794d4c71e1a38786a0b0fad">FAT_EOC</a>&nbsp;&nbsp;&nbsp;0XFFFF</td></tr>
+
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="structpartition_table.html">partitionTable</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#37251e7d5c69a159be727a3fc8c9d0e6">part_t</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="structmaster_boot_record.html">masterBootRecord</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#7c429e5097f101c8c97663d6c4155bd9">mbr_t</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="structbios_pram_block.html">biosPramBlock</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#1f7f8992622e5a7f123e7cbef41913e8">bpb_t</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="structfat16_boot_sector.html">fat16BootSector</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#e669a1330dcbe49c59eeaf2e3def3554">fbs_t</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="structdirectory_entry.html">directoryEntry</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fat16structs_8h.html#803db59d4e16a0c54a647afc6a7954e3">dir_t</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+FAT data structures <hr><h2>Define Documentation</h2>
+<a class="anchor" name="f486ac496fe6acb0eec481e11832c827"></a><!-- doxytag: member="Fat16structs.h::BOOTSIG0" ref="f486ac496fe6acb0eec481e11832c827" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define BOOTSIG0&nbsp;&nbsp;&nbsp;0X55 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Value for byte 254 of boot block
+</div>
+</div><p>
+<a class="anchor" name="0ad4c211cc7ec503df6ff87dd51098f6"></a><!-- doxytag: member="Fat16structs.h::BOOTSIG1" ref="0ad4c211cc7ec503df6ff87dd51098f6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define BOOTSIG1&nbsp;&nbsp;&nbsp;0XAA </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+value for byte 255 of boot block
+</div>
+</div><p>
+<a class="anchor" name="7a8484796aa3fd5c16efe0a836528f63"></a><!-- doxytag: member="Fat16structs.h::DIR_ATT_ARCHIVE" ref="7a8484796aa3fd5c16efe0a836528f63" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DIR_ATT_ARCHIVE&nbsp;&nbsp;&nbsp;0X20 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Old DOS archive bit for backup support
+</div>
+</div><p>
+<a class="anchor" name="37b16434700a60b4ee9cf38e2a9d8e5b"></a><!-- doxytag: member="Fat16structs.h::DIR_ATT_DIRECTORY" ref="37b16434700a60b4ee9cf38e2a9d8e5b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DIR_ATT_DIRECTORY&nbsp;&nbsp;&nbsp;0X10 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Entry is for a directory
+</div>
+</div><p>
+<a class="anchor" name="455d4c0f35acc679bd729133c888183f"></a><!-- doxytag: member="Fat16structs.h::DIR_ATT_HIDDEN" ref="455d4c0f35acc679bd729133c888183f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DIR_ATT_HIDDEN&nbsp;&nbsp;&nbsp;0X02 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+File should hidden in directory listings
+</div>
+</div><p>
+<a class="anchor" name="dde4e4e151d8c966625c69d15f1b76d6"></a><!-- doxytag: member="Fat16structs.h::DIR_ATT_LONG_NAME" ref="dde4e4e151d8c966625c69d15f1b76d6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DIR_ATT_LONG_NAME&nbsp;&nbsp;&nbsp;0X0F </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Test value for long name entry. Test is d-&gt;attributes &amp; DIR_ATT_LONG_NAME_MASK) == DIR_ATT_LONG_NAME.
+</div>
+</div><p>
+<a class="anchor" name="e78655ccef6819ec96056181a7ad4340"></a><!-- doxytag: member="Fat16structs.h::DIR_ATT_LONG_NAME_MASK" ref="e78655ccef6819ec96056181a7ad4340" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DIR_ATT_LONG_NAME_MASK&nbsp;&nbsp;&nbsp;0X3F </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Test mask for long name entry
+</div>
+</div><p>
+<a class="anchor" name="a570aa39738d2e3af5f9d20ba8cee8a3"></a><!-- doxytag: member="Fat16structs.h::DIR_ATT_READ_ONLY" ref="a570aa39738d2e3af5f9d20ba8cee8a3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DIR_ATT_READ_ONLY&nbsp;&nbsp;&nbsp;0X01 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+file is read-only
+</div>
+</div><p>
+<a class="anchor" name="045a61c0460454f25c695822fc21fcc3"></a><!-- doxytag: member="Fat16structs.h::DIR_ATT_SYSTEM" ref="045a61c0460454f25c695822fc21fcc3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DIR_ATT_SYSTEM&nbsp;&nbsp;&nbsp;0X04 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Entry is for a system file
+</div>
+</div><p>
+<a class="anchor" name="795207af74b95f84efb649298fea6eed"></a><!-- doxytag: member="Fat16structs.h::DIR_ATT_VOLUME_ID" ref="795207af74b95f84efb649298fea6eed" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DIR_ATT_VOLUME_ID&nbsp;&nbsp;&nbsp;0X08 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Directory entry contains the volume label
+</div>
+</div><p>
+<a class="anchor" name="ea1ec80e0a55df6c0fe7a53d9c5f221b"></a><!-- doxytag: member="Fat16structs.h::DIR_NAME_0XE5" ref="ea1ec80e0a55df6c0fe7a53d9c5f221b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DIR_NAME_0XE5&nbsp;&nbsp;&nbsp;0X05 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+escape for name[0] = 0XE5
+</div>
+</div><p>
+<a class="anchor" name="ee3b364607f1cedf1426fef50db53a5a"></a><!-- doxytag: member="Fat16structs.h::DIR_NAME_DELETED" ref="ee3b364607f1cedf1426fef50db53a5a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DIR_NAME_DELETED&nbsp;&nbsp;&nbsp;0XE5 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+name[0] value for entry that is free after being "deleted"
+</div>
+</div><p>
+<a class="anchor" name="a28cb328cccf618d3b9082ce27d893a2"></a><!-- doxytag: member="Fat16structs.h::DIR_NAME_FREE" ref="a28cb328cccf618d3b9082ce27d893a2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DIR_NAME_FREE&nbsp;&nbsp;&nbsp;0X00 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+name[0] value for entry that is free and no allocated entries follow
+</div>
+</div><p>
+<a class="anchor" name="bfce2754c794d4c71e1a38786a0b0fad"></a><!-- doxytag: member="Fat16structs.h::FAT_EOC" ref="bfce2754c794d4c71e1a38786a0b0fad" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FAT_EOC&nbsp;&nbsp;&nbsp;0XFFFF </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+cluster value used to mark end of chain in FAT
+</div>
+</div><p>
+<a class="anchor" name="c5757e7f5bc1685c5b86bd849cfe978a"></a><!-- doxytag: member="Fat16structs.h::FAT_LAST_USED" ref="c5757e7f5bc1685c5b86bd849cfe978a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FAT_LAST_USED&nbsp;&nbsp;&nbsp;0XFFEF </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+cluster alue to test for end of chain
+</div>
+</div><p>
+<a class="anchor" name="84f4a7f0235acd0e08d1efd30671dc5c"></a><!-- doxytag: member="Fat16structs.h::PART_BOOT_ACTIVE" ref="84f4a7f0235acd0e08d1efd30671dc5c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define PART_BOOT_ACTIVE&nbsp;&nbsp;&nbsp;0X80 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Boot indicator for active bootable partition.
+</div>
+</div><p>
+<a class="anchor" name="a5c0d48522debe219f27dd02267973cd"></a><!-- doxytag: member="Fat16structs.h::PART_BOOT_NON_BOOTABLE" ref="a5c0d48522debe219f27dd02267973cd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define PART_BOOT_NON_BOOTABLE&nbsp;&nbsp;&nbsp;0X00 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Boot indicator for non-bootable partition
+</div>
+</div><p>
+<a class="anchor" name="fdde21ad3dd736c073ec7e1d74346f16"></a><!-- doxytag: member="Fat16structs.h::PART_TYPE_DOSFAT16" ref="fdde21ad3dd736c073ec7e1d74346f16" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define PART_TYPE_DOSFAT16&nbsp;&nbsp;&nbsp;0x04 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+FAT16 partition or logical drive (32,680�65,535 sectors or 16 MB�33 MB)
+</div>
+</div><p>
+<a class="anchor" name="6bdc1ff84ef254d5a4c430990b5e552f"></a><!-- doxytag: member="Fat16structs.h::PART_TYPE_EXTDOSLBA" ref="6bdc1ff84ef254d5a4c430990b5e552f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define PART_TYPE_EXTDOSLBA&nbsp;&nbsp;&nbsp;0x0F </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Extended partition using BIOS INT 13h extensions
+</div>
+</div><p>
+<a class="anchor" name="170373ba21a09003408101f4007b8731"></a><!-- doxytag: member="Fat16structs.h::PART_TYPE_EXTENDED" ref="170373ba21a09003408101f4007b8731" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define PART_TYPE_EXTENDED&nbsp;&nbsp;&nbsp;0x05 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Extended partition
+</div>
+</div><p>
+<a class="anchor" name="f00f92912ea4313584607803a84d4569"></a><!-- doxytag: member="Fat16structs.h::PART_TYPE_FAT12" ref="f00f92912ea4313584607803a84d4569" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define PART_TYPE_FAT12&nbsp;&nbsp;&nbsp;0x01 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+FAT12 primary partition or logical drive (fewer than 32,680 sectors in the volume)
+</div>
+</div><p>
+<a class="anchor" name="2df90d0387a3fc5a7bea16dad24e65aa"></a><!-- doxytag: member="Fat16structs.h::PART_TYPE_FAT16" ref="2df90d0387a3fc5a7bea16dad24e65aa" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define PART_TYPE_FAT16&nbsp;&nbsp;&nbsp;0x06 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+BIGDOS FAT16 partition or logical drive (33 MB�4 GB)
+</div>
+</div><p>
+<a class="anchor" name="ea996586283ae556794def5168a0a5cf"></a><!-- doxytag: member="Fat16structs.h::PART_TYPE_FAT16LBA" ref="ea996586283ae556794def5168a0a5cf" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define PART_TYPE_FAT16LBA&nbsp;&nbsp;&nbsp;0x0E </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+BIGDOS FAT16 partition or logical drive using BIOS INT 13h extensions
+</div>
+</div><p>
+<a class="anchor" name="914508e25d96c2b25fe36bc23e8d1559"></a><!-- doxytag: member="Fat16structs.h::PART_TYPE_FAT32" ref="914508e25d96c2b25fe36bc23e8d1559" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define PART_TYPE_FAT32&nbsp;&nbsp;&nbsp;0x0B </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+FAT32 partition or logical drive
+</div>
+</div><p>
+<a class="anchor" name="cb346273c1cb5598e33e939f99ca7a71"></a><!-- doxytag: member="Fat16structs.h::PART_TYPE_FAT32LBA" ref="cb346273c1cb5598e33e939f99ca7a71" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define PART_TYPE_FAT32LBA&nbsp;&nbsp;&nbsp;0x0C </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+FAT32 partition or logical drive using BIOS INT 13h extensions
+</div>
+</div><p>
+<a class="anchor" name="8f2d3351af3f1e32145d247cc96e123d"></a><!-- doxytag: member="Fat16structs.h::PART_TYPE_NTFS" ref="8f2d3351af3f1e32145d247cc96e123d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define PART_TYPE_NTFS&nbsp;&nbsp;&nbsp;0x07 </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Installable File System (NTFS partition or logical drive)
+</div>
+</div><p>
+<hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="1f7f8992622e5a7f123e7cbef41913e8"></a><!-- doxytag: member="Fat16structs.h::bpb_t" ref="1f7f8992622e5a7f123e7cbef41913e8" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="structbios_pram_block.html">biosPramBlock</a> <a class="el" href="structbios_pram_block.html">bpb_t</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Type name for biosParmBlock
+</div>
+</div><p>
+<a class="anchor" name="803db59d4e16a0c54a647afc6a7954e3"></a><!-- doxytag: member="Fat16structs.h::dir_t" ref="803db59d4e16a0c54a647afc6a7954e3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="structdirectory_entry.html">directoryEntry</a> <a class="el" href="structdirectory_entry.html">dir_t</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Type name for <a class="el" href="structdirectory_entry.html" title="FAT short directory entry.">directoryEntry</a>
+</div>
+</div><p>
+<a class="anchor" name="e669a1330dcbe49c59eeaf2e3def3554"></a><!-- doxytag: member="Fat16structs.h::fbs_t" ref="e669a1330dcbe49c59eeaf2e3def3554" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="structfat16_boot_sector.html">fat16BootSector</a> <a class="el" href="structfat16_boot_sector.html">fbs_t</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Type name for <a class="el" href="structfat16_boot_sector.html" title="Boot Sector of a FAT16 volume.">fat16BootSector</a>
+</div>
+</div><p>
+<a class="anchor" name="7c429e5097f101c8c97663d6c4155bd9"></a><!-- doxytag: member="Fat16structs.h::mbr_t" ref="7c429e5097f101c8c97663d6c4155bd9" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="structmaster_boot_record.html">masterBootRecord</a> <a class="el" href="structmaster_boot_record.html">mbr_t</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Type name for <a class="el" href="structmaster_boot_record.html" title="Master Boot Record.">masterBootRecord</a>
+</div>
+</div><p>
+<a class="anchor" name="37251e7d5c69a159be727a3fc8c9d0e6"></a><!-- doxytag: member="Fat16structs.h::part_t" ref="37251e7d5c69a159be727a3fc8c9d0e6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="structpartition_table.html">partitionTable</a> <a class="el" href="structpartition_table.html">part_t</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Type name for <a class="el" href="structpartition_table.html" title="MBR partition table entry.">partitionTable</a>
+</div>
+</div><p>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/annotated.html b/trunk/users/bruce/SD card test/Fat16Lib/html/annotated.html
new file mode 100644
index 00000000..15b6a99c
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/annotated.html
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Class List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Class List</h1>Here are the classes, structs, unions and interfaces with brief descriptions:<table>
+ <tr><td class="indexkey"><a class="el" href="structbios_pram_block.html">biosPramBlock</a></td><td class="indexvalue">Structure that defines a FAT16 volume </td></tr>
+ <tr><td class="indexkey"><a class="el" href="class_block_device.html">BlockDevice</a></td><td class="indexvalue"><a class="el" href="class_block_device.html" title="BlockDevice is the base class for devices supported by Fat16.">BlockDevice</a> is the base class for devices supported by <a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a> </td></tr>
+ <tr><td class="indexkey"><a class="el" href="unioncache__t.html">cache_t</a></td><td class="indexvalue">Cache buffer data type </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structdirectory_entry.html">directoryEntry</a></td><td class="indexvalue">FAT short directory entry </td></tr>
+ <tr><td class="indexkey"><a class="el" href="class_fat16.html">Fat16</a></td><td class="indexvalue"><a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a> implements a minimal Arduino FAT16 Library </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structfat16_boot_sector.html">fat16BootSector</a></td><td class="indexvalue">Boot Sector of a FAT16 volume </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structmaster_boot_record.html">masterBootRecord</a></td><td class="indexvalue">Master Boot Record </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structpartition_table.html">partitionTable</a></td><td class="indexvalue">MBR partition table entry </td></tr>
+ <tr><td class="indexkey"><a class="el" href="class_print.html">Print</a></td><td class="indexvalue">The Arduino core <a class="el" href="class_print.html" title="The Arduino core Print class.">Print</a> class </td></tr>
+ <tr><td class="indexkey"><a class="el" href="class_sd_card.html">SdCard</a></td><td class="indexvalue">Hardware access class for SD flash cards </td></tr>
+</table>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/class_block_device-members.html b/trunk/users/bruce/SD card test/Fat16Lib/html/class_block_device-members.html
new file mode 100644
index 00000000..761f800e
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/class_block_device-members.html
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>BlockDevice Member List</h1>This is the complete list of members for <a class="el" href="class_block_device.html">BlockDevice</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="class_block_device.html#63051cb737ac67cf8749d144fadf4cf8">readBlock</a>(uint32_t blockNumber, uint8_t *dst)</td><td><a class="el" href="class_block_device.html">BlockDevice</a></td><td><code> [virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_block_device.html#d3732321b3480f2645bafa8d2f020feb">writeBlock</a>(uint32_t blockNumber, uint8_t *src)</td><td><a class="el" href="class_block_device.html">BlockDevice</a></td><td><code> [virtual]</code></td></tr>
+</table></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/class_block_device.html b/trunk/users/bruce/SD card test/Fat16Lib/html/class_block_device.html
new file mode 100644
index 00000000..1da3e903
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/class_block_device.html
@@ -0,0 +1,134 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: BlockDevice Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>BlockDevice Class Reference</h1><!-- doxytag: class="BlockDevice" --><a class="el" href="class_block_device.html" title="BlockDevice is the base class for devices supported by Fat16.">BlockDevice</a> is the base class for devices supported by <a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a>.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;BlockDevice.h&gt;</code>
+<p>
+<div class="dynheader">
+Inheritance diagram for BlockDevice:</div>
+<div class="dynsection">
+<p><center><img src="class_block_device__inherit__graph.png" border="0" usemap="#_block_device__inherit__map" alt="Inheritance graph"></center>
+<map name="_block_device__inherit__map">
+<area shape="rect" href="class_sd_card.html" title="Hardware access class for SD flash cards." alt="" coords="19,80,83,107"> </map>
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>
+
+<p>
+<a href="class_block_device-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_block_device.html#63051cb737ac67cf8749d144fadf4cf8">readBlock</a> (uint32_t blockNumber, uint8_t *dst)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_block_device.html#d3732321b3480f2645bafa8d2f020feb">writeBlock</a> (uint32_t blockNumber, uint8_t *src)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<a class="el" href="class_block_device.html" title="BlockDevice is the base class for devices supported by Fat16.">BlockDevice</a> is the base class for devices supported by <a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a>. <hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="63051cb737ac67cf8749d144fadf4cf8"></a><!-- doxytag: member="BlockDevice::readBlock" ref="63051cb737ac67cf8749d144fadf4cf8" args="(uint32_t blockNumber, uint8_t *dst)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual uint8_t BlockDevice::readBlock </td>
+ <td>(</td>
+ <td class="paramtype">uint32_t&nbsp;</td>
+ <td class="paramname"> <em>blockNumber</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint8_t *&nbsp;</td>
+ <td class="paramname"> <em>dst</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [virtual]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Read a 512 byte block from a storage device.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>blockNumber</em>&nbsp;</td><td>Logical block to be read. </td></tr>
+ <tr><td valign="top"><tt>[out]</tt>&nbsp;</td><td valign="top"><em>dst</em>&nbsp;</td><td>Pointer to the location that will receive the data. </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The value one, true, is returned for success and the value zero, false, is returned for failure. </dd></dl>
+
+<p>Reimplemented in <a class="el" href="class_sd_card.html#0174530d1ab9e54d2b9a9f5942868c64">SdCard</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="d3732321b3480f2645bafa8d2f020feb"></a><!-- doxytag: member="BlockDevice::writeBlock" ref="d3732321b3480f2645bafa8d2f020feb" args="(uint32_t blockNumber, uint8_t *src)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual uint8_t BlockDevice::writeBlock </td>
+ <td>(</td>
+ <td class="paramtype">uint32_t&nbsp;</td>
+ <td class="paramname"> <em>blockNumber</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint8_t *&nbsp;</td>
+ <td class="paramname"> <em>src</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [virtual]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Write a 512 byte block to a storage device.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>blockNumber</em>&nbsp;</td><td>Logical block to be written. </td></tr>
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>src</em>&nbsp;</td><td>Pointer to the location of the data to be written. </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The value one, true, is returned for success and the value zero, false, is returned for failure. </dd></dl>
+
+<p>Reimplemented in <a class="el" href="class_sd_card.html#7733bf2b059eb938d556fe3b13a40b2a">SdCard</a>.</p>
+
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li>Fat16/BlockDevice.h</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/class_block_device__inherit__graph.png b/trunk/users/bruce/SD card test/Fat16Lib/html/class_block_device__inherit__graph.png
new file mode 100644
index 00000000..65d8f3b2
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/class_block_device__inherit__graph.png
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/class_fat16-members.html b/trunk/users/bruce/SD card test/Fat16Lib/html/class_fat16-members.html
new file mode 100644
index 00000000..f014c9e2
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/class_fat16-members.html
@@ -0,0 +1,69 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Fat16 Member List</h1>This is the complete list of members for <a class="el" href="class_fat16.html">Fat16</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="class_fat16.html#ae3355bf1e93e732a64149663133161a">close</a>(void)</td><td><a class="el" href="class_fat16.html">Fat16</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_fat16.html#1afef833da3eb1dfbb6d8cfe24fa49a7">create</a>(char *fileName)</td><td><a class="el" href="class_fat16.html">Fat16</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_fat16.html#3bdbee900501a87234a03640b35e5b19">dbgCacheBlock</a>(uint32_t blockNumber)</td><td><a class="el" href="class_fat16.html">Fat16</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_fat16.html#bcbb3e5deda647d45b1e863c8a9a3d84">dbgCacheDir</a>(uint16_t index)</td><td><a class="el" href="class_fat16.html">Fat16</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_fat16.html#3a9f189cbd66d7006a88810ef300f7d8">dbgCacheFat</a>(uint16_t cluster)</td><td><a class="el" href="class_fat16.html">Fat16</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_fat16.html#888dcce1a2bb0f4ab196cf28dc03b84d">dbgSetDev</a>(BlockDevice &amp;dev)</td><td><a class="el" href="class_fat16.html">Fat16</a></td><td><code> [inline, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>Fat16</b>(void) (defined in <a class="el" href="class_fat16.html">Fat16</a>)</td><td><a class="el" href="class_fat16.html">Fat16</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_fat16.html#984d8986688ffaa13a628398ab0a98f2">fileSize</a>(void)</td><td><a class="el" href="class_fat16.html">Fat16</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_fat16.html#610191a704142918c2f14174706c3345">init</a>(BlockDevice &amp;dev, uint8_t part)</td><td><a class="el" href="class_fat16.html">Fat16</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_fat16.html#ecb8259458d2ba49b348de5e30fc8538">isOpen</a>(void)</td><td><a class="el" href="class_fat16.html">Fat16</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_fat16.html#2420ccbc71b857544016e3a45b47fbeb">open</a>(char *fileName)</td><td><a class="el" href="class_fat16.html">Fat16</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_fat16.html#5360d27d4a5b9f4a17ea0d63f3d17a47">open</a>(uint16_t entry)</td><td><a class="el" href="class_fat16.html">Fat16</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#6309cc0fb10c5f50517069ae86bf60d7">print</a>(char)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#a7b0a6dc63e3d27effd8459e3d443b83">print</a>(const char[])</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#a89b9fdb130d4075186d3c4f3f88893d">print</a>(uint8_t)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#cbf777040255555f1d7023ee0ae3ad3f">print</a>(int)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#b05b847859521120d8c1aedec3e0bc7a">print</a>(unsigned int)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#ba5286fbcbd2bd332df94aa2027afe7a">print</a>(long)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#3da85b094270ae55a2f68e7b6d642f78">print</a>(unsigned long)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#56588b5268615ba3184178783334c984">print</a>(long, int)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#525b37c566658ff8113a067f6e8d5bf1">println</a>(void)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#fde6ae226acae7c07f07b2ac674418b9">println</a>(char)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#09db74a8d51c6b2420c478267f958a51">println</a>(const char[])</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#ecfb38019d91fb4cc8f4f360cb01d556">println</a>(uint8_t)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#375cecbe842d589e49e3f5affc9ee965">println</a>(int)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#c1cf3ffa88c0e36154b0a3ccb9844155">println</a>(unsigned int)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#53ce0aed6aecd283b714f4e107386b39">println</a>(long)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#35d444dd4208b21bd485950152839b7b">println</a>(unsigned long)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#e09d3164784e75463d3f3616eb5e0a98">println</a>(long, int)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_fat16.html#d0b43c1c92d6c3588cd62504066c8739">read</a>(void)</td><td><a class="el" href="class_fat16.html">Fat16</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_fat16.html#909c9a55b7303603784a77e29f282f08">read</a>(uint8_t *dst, uint16_t count)</td><td><a class="el" href="class_fat16.html">Fat16</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_fat16.html#d43edc0de66fd646b42d07bbe495d965">readDir</a>(uint16_t &amp;entry, uint8_t skip=(DIR_ATT_VOLUME_ID|DIR_ATT_DIRECTORY))</td><td><a class="el" href="class_fat16.html">Fat16</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_fat16.html#a17641d5de9976955e47d5bcd315915a">readPos</a>(void)</td><td><a class="el" href="class_fat16.html">Fat16</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_fat16.html#ab4922c434b1642cac213705d814de4c">rootDirEntryCount</a>(void)</td><td><a class="el" href="class_fat16.html">Fat16</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_fat16.html#c0c08e00b317745d7a305bb7d326f9f2">seek</a>(uint32_t pos)</td><td><a class="el" href="class_fat16.html">Fat16</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_fat16.html#a8919ff5c1b3e5470dbd38a6f7710d20">sync</a>(void)</td><td><a class="el" href="class_fat16.html">Fat16</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_fat16.html#d1cfc594294d7dafd2e77377252d82c9">write</a>(uint8_t b)</td><td><a class="el" href="class_fat16.html">Fat16</a></td><td><code> [virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_fat16.html#e74f19bbc3fb1fa61522848a6acfd0f7">write</a>(uint8_t *src, uint16_t count)</td><td><a class="el" href="class_fat16.html">Fat16</a></td><td></td></tr>
+</table></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/class_fat16.html b/trunk/users/bruce/SD card test/Fat16Lib/html/class_fat16.html
new file mode 100644
index 00000000..c27666c0
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/class_fat16.html
@@ -0,0 +1,622 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Fat16 Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Fat16 Class Reference</h1><!-- doxytag: class="Fat16" --><!-- doxytag: inherits="Print" --><a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a> implements a minimal Arduino FAT16 Library.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;Fat16.h&gt;</code>
+<p>
+<div class="dynheader">
+Inheritance diagram for Fat16:</div>
+<div class="dynsection">
+<p><center><img src="class_fat16__inherit__graph.png" border="0" usemap="#_fat16__inherit__map" alt="Inheritance graph"></center>
+<map name="_fat16__inherit__map">
+<area shape="rect" href="class_print.html" title="The Arduino core Print class." alt="" coords="8,5,56,32"> </map>
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>
+<div class="dynheader">
+Collaboration diagram for Fat16:</div>
+<div class="dynsection">
+<p><center><img src="class_fat16__coll__graph.png" border="0" usemap="#_fat16__coll__map" alt="Collaboration graph"></center>
+<map name="_fat16__coll__map">
+<area shape="rect" href="class_print.html" title="The Arduino core Print class." alt="" coords="5,187,53,213"> <area shape="rect" href="class_block_device.html" title="BlockDevice is the base class for devices supported by Fat16." alt="" coords="77,187,168,213"> <area shape="rect" href="unioncache__t.html" title="Cache buffer data type." alt="" coords="192,187,259,213"> <area shape="rect" href="structdirectory_entry.html" title="FAT short directory entry." alt="" coords="43,96,144,123"> <area shape="rect" href="structfat16_boot_sector.html" title="Boot Sector of a FAT16 volume." alt="" coords="168,96,283,123"> <area shape="rect" href="structbios_pram_block.html" title="Structure that defines a FAT16 volume." alt="" coords="171,5,280,32"> <area shape="rect" href="structmaster_boot_record.html" title="Master Boot Record." alt="" coords="307,96,435,123"> <area shape="rect" href="structpartition_table.html" title="MBR partition table entry." alt="" coords="321,5,420,32"> </map>
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>
+
+<p>
+<a href="class_fat16-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat16.html#ae3355bf1e93e732a64149663133161a">close</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat16.html#1afef833da3eb1dfbb6d8cfe24fa49a7">create</a> (char *fileName)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat16.html#984d8986688ffaa13a628398ab0a98f2">fileSize</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat16.html#ecb8259458d2ba49b348de5e30fc8538">isOpen</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat16.html#2420ccbc71b857544016e3a45b47fbeb">open</a> (char *fileName)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat16.html#5360d27d4a5b9f4a17ea0d63f3d17a47">open</a> (uint16_t entry)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat16.html#d0b43c1c92d6c3588cd62504066c8739">read</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat16.html#909c9a55b7303603784a77e29f282f08">read</a> (uint8_t *dst, uint16_t count)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat16.html#a17641d5de9976955e47d5bcd315915a">readPos</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat16.html#c0c08e00b317745d7a305bb7d326f9f2">seek</a> (uint32_t pos)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat16.html#a8919ff5c1b3e5470dbd38a6f7710d20">sync</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat16.html#d1cfc594294d7dafd2e77377252d82c9">write</a> (uint8_t b)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat16.html#e74f19bbc3fb1fa61522848a6acfd0f7">write</a> (uint8_t *src, uint16_t count)</td></tr>
+
+<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat16.html#610191a704142918c2f14174706c3345">init</a> (<a class="el" href="class_block_device.html">BlockDevice</a> &amp;dev, uint8_t part)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static <a class="el" href="structdirectory_entry.html">dir_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat16.html#d43edc0de66fd646b42d07bbe495d965">readDir</a> (uint16_t &amp;entry, uint8_t skip=(DIR_ATT_VOLUME_ID|DIR_ATT_DIRECTORY))</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static uint16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat16.html#ab4922c434b1642cac213705d814de4c">rootDirEntryCount</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat16.html#888dcce1a2bb0f4ab196cf28dc03b84d">dbgSetDev</a> (<a class="el" href="class_block_device.html">BlockDevice</a> &amp;dev)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static uint8_t *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat16.html#3bdbee900501a87234a03640b35e5b19">dbgCacheBlock</a> (uint32_t blockNumber)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static <a class="el" href="structdirectory_entry.html">dir_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat16.html#bcbb3e5deda647d45b1e863c8a9a3d84">dbgCacheDir</a> (uint16_t index)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static uint16_t *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat16.html#3a9f189cbd66d7006a88810ef300f7d8">dbgCacheFat</a> (uint16_t cluster)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a> implements a minimal Arduino FAT16 Library.
+<p>
+<a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a> does not support subdirectories or long file names. <hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="610191a704142918c2f14174706c3345"></a><!-- doxytag: member="Fat16::init" ref="610191a704142918c2f14174706c3345" args="(BlockDevice &amp;dev, uint8_t part)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t Fat16::init </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="class_block_device.html">BlockDevice</a> &amp;&nbsp;</td>
+ <td class="paramname"> <em>dev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint8_t&nbsp;</td>
+ <td class="paramname"> <em>part</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Initialize a FAT16 volume.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>dev</em>&nbsp;</td><td>The <a class="el" href="class_block_device.html" title="BlockDevice is the base class for devices supported by Fat16.">BlockDevice</a> where the volume is located.</td></tr>
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>part</em>&nbsp;</td><td>The partition to be used. Legal values for <em>part</em> are 1-4 to use the corresponding partition on a device formatted with a MBR, Master Boot Record, or zero if the device is formatted as a super floppy with the FAT boot sector in block zero.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The value one, true, is returned for success and the value zero, false, is returned for failure. reasons for failure include not finding a valid FAT16 file system in the specified partition, a call to <a class="el" href="class_fat16.html#610191a704142918c2f14174706c3345">init()</a> after a volume has been successful initialized or an I/O error. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="d43edc0de66fd646b42d07bbe495d965"></a><!-- doxytag: member="Fat16::readDir" ref="d43edc0de66fd646b42d07bbe495d965" args="(uint16_t &amp;entry, uint8_t skip=(DIR_ATT_VOLUME_ID|DIR_ATT_DIRECTORY))" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="structdirectory_entry.html">dir_t</a>* Fat16::readDir </td>
+ <td>(</td>
+ <td class="paramtype">uint16_t &amp;&nbsp;</td>
+ <td class="paramname"> <em>entry</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint8_t&nbsp;</td>
+ <td class="paramname"> <em>skip</em> = <code>(DIR_ATT_VOLUME_ID&nbsp;|&nbsp;DIR_ATT_DIRECTORY)</code></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [inline, static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Read the next short, 8.3, directory entry into the cache buffer.<p>
+Unused entries and entries for long names are skipped.<p>
+The directory entry must not be modified since the cached block containing the entry may be written back to the storage device.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in,out]</tt>&nbsp;</td><td valign="top"><em>entry</em>&nbsp;</td><td>The search starts at <em>entry</em> and <em>entry</em> is updated with the root directory index of the found directory entry. If the entry is a file, it may be opened by calling <a class="el" href="class_fat16.html#5360d27d4a5b9f4a17ea0d63f3d17a47">open(entry)</a>.</td></tr>
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>skip</em>&nbsp;</td><td>Skip entries that have these attributes. If <em>skip</em> is not specified, the default is to skip the volume label and directories.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>A pointer to a dir_t structure for the found directory entry, or NULL if an error occurs or the end of the root directory is reached. On success, <em>entry</em> is set to the index of the found directory entry. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="ab4922c434b1642cac213705d814de4c"></a><!-- doxytag: member="Fat16::rootDirEntryCount" ref="ab4922c434b1642cac213705d814de4c" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static uint16_t Fat16::rootDirEntryCount </td>
+ <td>(</td>
+ <td class="paramtype">void&nbsp;</td>
+ <td class="paramname"> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [inline, static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The number of entries in the root directory. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="ae3355bf1e93e732a64149663133161a"></a><!-- doxytag: member="Fat16::close" ref="ae3355bf1e93e732a64149663133161a" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t Fat16::close </td>
+ <td>(</td>
+ <td class="paramtype">void&nbsp;</td>
+ <td class="paramname"> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Closes a file and forces cached data and directory information to be written to the storage device.<p>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include no file is open or an I/O error. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="1afef833da3eb1dfbb6d8cfe24fa49a7"></a><!-- doxytag: member="Fat16::create" ref="1afef833da3eb1dfbb6d8cfe24fa49a7" args="(char *fileName)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t Fat16::create </td>
+ <td>(</td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>fileName</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Create and open a new file.<p>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>This function only creates files in the root directory and only supports short DOS 8.3 names. See <a class="el" href="class_fat16.html#2420ccbc71b857544016e3a45b47fbeb">open()</a> for more information.</dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>fileName</em>&nbsp;</td><td>a valid DOS 8.3 file name.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include <em>fileName</em> contains an invalid DOS 8.3 file name, the FAT volume has not been initialized, a file is already open, the file already exists, the root directory is full or an I/O error. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="984d8986688ffaa13a628398ab0a98f2"></a><!-- doxytag: member="Fat16::fileSize" ref="984d8986688ffaa13a628398ab0a98f2" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint32_t Fat16::fileSize </td>
+ <td>(</td>
+ <td class="paramtype">void&nbsp;</td>
+ <td class="paramname"> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [inline]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The file's size in bytes. This is also the write position for the file. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="ecb8259458d2ba49b348de5e30fc8538"></a><!-- doxytag: member="Fat16::isOpen" ref="ecb8259458d2ba49b348de5e30fc8538" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t Fat16::isOpen </td>
+ <td>(</td>
+ <td class="paramtype">void&nbsp;</td>
+ <td class="paramname"> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [inline]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Checks the file's open/closed status for this instance of <a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a>. <dl class="return" compact><dt><b>Returns:</b></dt><dd>The value true if a file is open otherwise false; </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="2420ccbc71b857544016e3a45b47fbeb"></a><!-- doxytag: member="Fat16::open" ref="2420ccbc71b857544016e3a45b47fbeb" args="(char *fileName)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t Fat16::open </td>
+ <td>(</td>
+ <td class="paramtype">char *&nbsp;</td>
+ <td class="paramname"> <em>fileName</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Open a file for read and write by file name. Two file positions are maintained. The write position is at the end of the file. Data is appended to the file. The read position starts at the beginning of the file.<p>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>The file must be in the root directory and must have a DOS 8.3 name.</dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>fileName</em>&nbsp;</td><td>A valid 8.3 DOS name for a file in the root directory.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the FAT volume has not been initialized, a file is already open, <em>fileName</em> is invalid, the file does not exist or it is a directory. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="5360d27d4a5b9f4a17ea0d63f3d17a47"></a><!-- doxytag: member="Fat16::open" ref="5360d27d4a5b9f4a17ea0d63f3d17a47" args="(uint16_t entry)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t Fat16::open </td>
+ <td>(</td>
+ <td class="paramtype">uint16_t&nbsp;</td>
+ <td class="paramname"> <em>index</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Open a file for read and write by file index. Two file positions are maintained. The write position is at the end of the file. Data is appended to the file. The read position starts at the beginning of the file.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>index</em>&nbsp;</td><td>The root directory index of the file to be opened. See <a class="el" href="class_fat16.html#d43edc0de66fd646b42d07bbe495d965">readDir()</a>.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include the FAT volume has not been initialized, a file is already open, <em>index</em> is invalid or is not the index of a file. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="d0b43c1c92d6c3588cd62504066c8739"></a><!-- doxytag: member="Fat16::read" ref="d0b43c1c92d6c3588cd62504066c8739" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int16_t Fat16::read </td>
+ <td>(</td>
+ <td class="paramtype">void&nbsp;</td>
+ <td class="paramname"> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Read the next byte from a file.<p>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>For success read returns the next byte in the file as an int. If an error occurs or end of file is reached -1 is returned. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="909c9a55b7303603784a77e29f282f08"></a><!-- doxytag: member="Fat16::read" ref="909c9a55b7303603784a77e29f282f08" args="(uint8_t *dst, uint16_t count)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int16_t Fat16::read </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t *&nbsp;</td>
+ <td class="paramname"> <em>dst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint16_t&nbsp;</td>
+ <td class="paramname"> <em>count</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Read data from a file at starting at the current read position.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[out]</tt>&nbsp;</td><td valign="top"><em>dst</em>&nbsp;</td><td>Pointer to the location that will receive the data.</td></tr>
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>count</em>&nbsp;</td><td>Maximum number of bytes to read.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>For success read returns the number of bytes read. A value less than <em>count</em>, including zero, may be returned if end of file is reached. If an error occurs, read returns -1. Possible errors include read called before a file has been opened, corrupt file system or I/O error. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="a17641d5de9976955e47d5bcd315915a"></a><!-- doxytag: member="Fat16::readPos" ref="a17641d5de9976955e47d5bcd315915a" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint32_t Fat16::readPos </td>
+ <td>(</td>
+ <td class="paramtype">void&nbsp;</td>
+ <td class="paramname"> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [inline]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The read position in bytes. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="c0c08e00b317745d7a305bb7d326f9f2"></a><!-- doxytag: member="Fat16::seek" ref="c0c08e00b317745d7a305bb7d326f9f2" args="(uint32_t pos)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t Fat16::seek </td>
+ <td>(</td>
+ <td class="paramtype">uint32_t&nbsp;</td>
+ <td class="paramname"> <em>pos</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Sets the file's read position.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>pos</em>&nbsp;</td><td>The new read position in bytes from the beginning of the file.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The value one, true, is returned for success and the value zero, false, is returned for failure. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="a8919ff5c1b3e5470dbd38a6f7710d20"></a><!-- doxytag: member="Fat16::sync" ref="a8919ff5c1b3e5470dbd38a6f7710d20" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t Fat16::sync </td>
+ <td>(</td>
+ <td class="paramtype">void&nbsp;</td>
+ <td class="paramname"> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+The <a class="el" href="class_fat16.html#a8919ff5c1b3e5470dbd38a6f7710d20">sync()</a> call causes all modified data and directory fields to be written to the storage device.<p>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The value one, true, is returned for success and the value zero, false, is returned for failure. Reasons for failure include a call to <a class="el" href="class_fat16.html#a8919ff5c1b3e5470dbd38a6f7710d20">sync()</a> before a file has been opened or an I/O error. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="d1cfc594294d7dafd2e77377252d82c9"></a><!-- doxytag: member="Fat16::write" ref="d1cfc594294d7dafd2e77377252d82c9" args="(uint8_t b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Fat16::write </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t&nbsp;</td>
+ <td class="paramname"> <em>b</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [virtual]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Append one byte to a file. This function is called by Arduino's <a class="el" href="class_print.html" title="The Arduino core Print class.">Print</a> class.<p>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>The byte is moved to the cache but may not be written to the storage device until <a class="el" href="class_fat16.html#a8919ff5c1b3e5470dbd38a6f7710d20">sync()</a> is called.</dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>b</em>&nbsp;</td><td>The byte to be written. </td></tr>
+ </table>
+</dl>
+
+<p>Reimplemented from <a class="el" href="class_print.html#0a96ee1130d5b74174d3a26e56d1d1f0">Print</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="e74f19bbc3fb1fa61522848a6acfd0f7"></a><!-- doxytag: member="Fat16::write" ref="e74f19bbc3fb1fa61522848a6acfd0f7" args="(uint8_t *src, uint16_t count)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int16_t Fat16::write </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t *&nbsp;</td>
+ <td class="paramname"> <em>src</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint16_t&nbsp;</td>
+ <td class="paramname"> <em>count</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Write data at the end of an open file.<p>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>Data is moved to the cache but may not be written to the storage device until <a class="el" href="class_fat16.html#a8919ff5c1b3e5470dbd38a6f7710d20">sync()</a> is called.</dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>src</em>&nbsp;</td><td>Pointer to the location of the data to be written.</td></tr>
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>count</em>&nbsp;</td><td>Number of bytes to write.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>For success <a class="el" href="class_fat16.html#d1cfc594294d7dafd2e77377252d82c9">write()</a> returns the number of bytes written, always <em>count</em>. If an error occurs, <a class="el" href="class_fat16.html#d1cfc594294d7dafd2e77377252d82c9">write()</a> returns -1. Possible errors include <a class="el" href="class_fat16.html#d1cfc594294d7dafd2e77377252d82c9">write()</a> is called before a file has been opened, write is called for a read-only file, device is full, a corrupt file system or an I/O error. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="888dcce1a2bb0f4ab196cf28dc03b84d"></a><!-- doxytag: member="Fat16::dbgSetDev" ref="888dcce1a2bb0f4ab196cf28dc03b84d" args="(BlockDevice &amp;dev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void Fat16::dbgSetDev </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="class_block_device.html">BlockDevice</a> &amp;&nbsp;</td>
+ <td class="paramname"> <em>dev</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [inline, static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+For debug only. Do not use in applications.
+</div>
+</div><p>
+<a class="anchor" name="3bdbee900501a87234a03640b35e5b19"></a><!-- doxytag: member="Fat16::dbgCacheBlock" ref="3bdbee900501a87234a03640b35e5b19" args="(uint32_t blockNumber)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static uint8_t* Fat16::dbgCacheBlock </td>
+ <td>(</td>
+ <td class="paramtype">uint32_t&nbsp;</td>
+ <td class="paramname"> <em>blockNumber</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [inline, static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+For debug only. Do not use in applications.
+</div>
+</div><p>
+<a class="anchor" name="bcbb3e5deda647d45b1e863c8a9a3d84"></a><!-- doxytag: member="Fat16::dbgCacheDir" ref="bcbb3e5deda647d45b1e863c8a9a3d84" args="(uint16_t index)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="structdirectory_entry.html">dir_t</a>* Fat16::dbgCacheDir </td>
+ <td>(</td>
+ <td class="paramtype">uint16_t&nbsp;</td>
+ <td class="paramname"> <em>index</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [inline, static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+For debug only. Do not use in applications.
+</div>
+</div><p>
+<a class="anchor" name="3a9f189cbd66d7006a88810ef300f7d8"></a><!-- doxytag: member="Fat16::dbgCacheFat" ref="3a9f189cbd66d7006a88810ef300f7d8" args="(uint16_t cluster)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static uint16_t* Fat16::dbgCacheFat </td>
+ <td>(</td>
+ <td class="paramtype">uint16_t&nbsp;</td>
+ <td class="paramname"> <em>cluster</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [inline, static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+For debug only. Do not use in applications.
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following files:<ul>
+<li>Fat16/Fat16.h<li>Fat16/Fat16.cpp</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/class_fat16__coll__graph.png b/trunk/users/bruce/SD card test/Fat16Lib/html/class_fat16__coll__graph.png
new file mode 100644
index 00000000..1312c13d
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/class_fat16__coll__graph.png
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/class_fat16__inherit__graph.png b/trunk/users/bruce/SD card test/Fat16Lib/html/class_fat16__inherit__graph.png
new file mode 100644
index 00000000..b690c262
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/class_fat16__inherit__graph.png
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/class_print-members.html b/trunk/users/bruce/SD card test/Fat16Lib/html/class_print-members.html
new file mode 100644
index 00000000..6c05e7b1
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/class_print-members.html
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Print Member List</h1>This is the complete list of members for <a class="el" href="class_print.html">Print</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="class_print.html#6309cc0fb10c5f50517069ae86bf60d7">print</a>(char)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#a7b0a6dc63e3d27effd8459e3d443b83">print</a>(const char[])</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#a89b9fdb130d4075186d3c4f3f88893d">print</a>(uint8_t)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#cbf777040255555f1d7023ee0ae3ad3f">print</a>(int)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#b05b847859521120d8c1aedec3e0bc7a">print</a>(unsigned int)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#ba5286fbcbd2bd332df94aa2027afe7a">print</a>(long)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#3da85b094270ae55a2f68e7b6d642f78">print</a>(unsigned long)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#56588b5268615ba3184178783334c984">print</a>(long, int)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#525b37c566658ff8113a067f6e8d5bf1">println</a>(void)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#fde6ae226acae7c07f07b2ac674418b9">println</a>(char)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#09db74a8d51c6b2420c478267f958a51">println</a>(const char[])</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#ecfb38019d91fb4cc8f4f360cb01d556">println</a>(uint8_t)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#375cecbe842d589e49e3f5affc9ee965">println</a>(int)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#c1cf3ffa88c0e36154b0a3ccb9844155">println</a>(unsigned int)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#53ce0aed6aecd283b714f4e107386b39">println</a>(long)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#35d444dd4208b21bd485950152839b7b">println</a>(unsigned long)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#e09d3164784e75463d3f3616eb5e0a98">println</a>(long, int)</td><td><a class="el" href="class_print.html">Print</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_print.html#0a96ee1130d5b74174d3a26e56d1d1f0">write</a>(uint8_t b)</td><td><a class="el" href="class_print.html">Print</a></td><td><code> [virtual]</code></td></tr>
+</table></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/class_print.html b/trunk/users/bruce/SD card test/Fat16Lib/html/class_print.html
new file mode 100644
index 00000000..878df079
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/class_print.html
@@ -0,0 +1,573 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Print Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Print Class Reference</h1><!-- doxytag: class="Print" -->The Arduino core <a class="el" href="class_print.html" title="The Arduino core Print class.">Print</a> class.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;Print.h&gt;</code>
+<p>
+<div class="dynheader">
+Inheritance diagram for Print:</div>
+<div class="dynsection">
+<p><center><img src="class_print__inherit__graph.png" border="0" usemap="#_print__inherit__map" alt="Inheritance graph"></center>
+<map name="_print__inherit__map">
+<area shape="rect" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library." alt="" coords="5,80,59,107"> </map>
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>
+
+<p>
+<a href="class_print-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_print.html#0a96ee1130d5b74174d3a26e56d1d1f0">write</a> (uint8_t b)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_print.html#6309cc0fb10c5f50517069ae86bf60d7">print</a> (char)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_print.html#a7b0a6dc63e3d27effd8459e3d443b83">print</a> (const char[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_print.html#a89b9fdb130d4075186d3c4f3f88893d">print</a> (uint8_t)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_print.html#cbf777040255555f1d7023ee0ae3ad3f">print</a> (int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_print.html#b05b847859521120d8c1aedec3e0bc7a">print</a> (unsigned int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_print.html#ba5286fbcbd2bd332df94aa2027afe7a">print</a> (long)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_print.html#3da85b094270ae55a2f68e7b6d642f78">print</a> (unsigned long)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_print.html#56588b5268615ba3184178783334c984">print</a> (long, int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_print.html#525b37c566658ff8113a067f6e8d5bf1">println</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_print.html#fde6ae226acae7c07f07b2ac674418b9">println</a> (char)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_print.html#09db74a8d51c6b2420c478267f958a51">println</a> (const char[])</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_print.html#ecfb38019d91fb4cc8f4f360cb01d556">println</a> (uint8_t)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_print.html#375cecbe842d589e49e3f5affc9ee965">println</a> (int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_print.html#c1cf3ffa88c0e36154b0a3ccb9844155">println</a> (unsigned int)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_print.html#53ce0aed6aecd283b714f4e107386b39">println</a> (long)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_print.html#35d444dd4208b21bd485950152839b7b">println</a> (unsigned long)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_print.html#e09d3164784e75463d3f3616eb5e0a98">println</a> (long, int)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+The Arduino core <a class="el" href="class_print.html" title="The Arduino core Print class.">Print</a> class. <hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="0a96ee1130d5b74174d3a26e56d1d1f0"></a><!-- doxytag: member="Print::write" ref="0a96ee1130d5b74174d3a26e56d1d1f0" args="(uint8_t b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void Print::write </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t&nbsp;</td>
+ <td class="paramname"> <em>b</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [virtual]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Virtual function to be implemented by the derived class for the hardware device. <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>b</em>&nbsp;</td><td>The byte to be sent to the device. </td></tr>
+ </table>
+</dl>
+
+<p>Reimplemented in <a class="el" href="class_fat16.html#d1cfc594294d7dafd2e77377252d82c9">Fat16</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="6309cc0fb10c5f50517069ae86bf60d7"></a><!-- doxytag: member="Print::print" ref="6309cc0fb10c5f50517069ae86bf60d7" args="(char)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Print::print </td>
+ <td>(</td>
+ <td class="paramtype">char&nbsp;</td>
+ <td class="paramname"> <em>c</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Write a byte to the associated device.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>c</em>&nbsp;</td><td>the byte to be written </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="a7b0a6dc63e3d27effd8459e3d443b83"></a><!-- doxytag: member="Print::print" ref="a7b0a6dc63e3d27effd8459e3d443b83" args="(const char[])" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Print::print </td>
+ <td>(</td>
+ <td class="paramtype">const char&nbsp;</td>
+ <td class="paramname"> <em>c</em>[] </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Write a string to the associated device.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>c</em>&nbsp;</td><td>the string to be printed </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="a89b9fdb130d4075186d3c4f3f88893d"></a><!-- doxytag: member="Print::print" ref="a89b9fdb130d4075186d3c4f3f88893d" args="(uint8_t)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Print::print </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t&nbsp;</td>
+ <td class="paramname"> <em>b</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Write a byte to the associated device.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>b</em>&nbsp;</td><td>the byte to be written </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="cbf777040255555f1d7023ee0ae3ad3f"></a><!-- doxytag: member="Print::print" ref="cbf777040255555f1d7023ee0ae3ad3f" args="(int)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Print::print </td>
+ <td>(</td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>n</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Write the decimal representation of a signed number to the associated device in ASCII.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>n</em>&nbsp;</td><td>the number to be printed </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="b05b847859521120d8c1aedec3e0bc7a"></a><!-- doxytag: member="Print::print" ref="b05b847859521120d8c1aedec3e0bc7a" args="(unsigned int)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Print::print </td>
+ <td>(</td>
+ <td class="paramtype">unsigned int&nbsp;</td>
+ <td class="paramname"> <em>n</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Write the decimal representation of an unsigned number to the associated device in ASCII.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>n</em>&nbsp;</td><td>the number to be printed </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="ba5286fbcbd2bd332df94aa2027afe7a"></a><!-- doxytag: member="Print::print" ref="ba5286fbcbd2bd332df94aa2027afe7a" args="(long)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Print::print </td>
+ <td>(</td>
+ <td class="paramtype">long&nbsp;</td>
+ <td class="paramname"> <em>n</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Write the decimal representation of a signed number to the associated device in ASCII.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>n</em>&nbsp;</td><td>the number to be printed </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="3da85b094270ae55a2f68e7b6d642f78"></a><!-- doxytag: member="Print::print" ref="3da85b094270ae55a2f68e7b6d642f78" args="(unsigned long)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Print::print </td>
+ <td>(</td>
+ <td class="paramtype">unsigned long&nbsp;</td>
+ <td class="paramname"> <em>n</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Write the decimal representation of a unsigned number to the associated device in ASCII.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>n</em>&nbsp;</td><td>the number to be printed </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="56588b5268615ba3184178783334c984"></a><!-- doxytag: member="Print::print" ref="56588b5268615ba3184178783334c984" args="(long, int)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Print::print </td>
+ <td>(</td>
+ <td class="paramtype">long&nbsp;</td>
+ <td class="paramname"> <em>n</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>base</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Write the representation of a number, in the specified base, to the associated device in ASCII.<p>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>If the base is specified as zero, the number is written as a single byte by calling <a class="el" href="class_print.html#6309cc0fb10c5f50517069ae86bf60d7">print((char)n)</a>.</dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>n</em>&nbsp;</td><td>the number to be printed </td></tr>
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>base</em>&nbsp;</td><td>the base for the ASCII representation </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="525b37c566658ff8113a067f6e8d5bf1"></a><!-- doxytag: member="Print::println" ref="525b37c566658ff8113a067f6e8d5bf1" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Print::println </td>
+ <td>(</td>
+ <td class="paramtype">void&nbsp;</td>
+ <td class="paramname"> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Print CR LF
+</div>
+</div><p>
+<a class="anchor" name="fde6ae226acae7c07f07b2ac674418b9"></a><!-- doxytag: member="Print::println" ref="fde6ae226acae7c07f07b2ac674418b9" args="(char)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Print::println </td>
+ <td>(</td>
+ <td class="paramtype">char&nbsp;</td>
+ <td class="paramname"> <em>c</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Write a byte to the associated device followed by CR LF.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>c</em>&nbsp;</td><td>the byte to be written </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="09db74a8d51c6b2420c478267f958a51"></a><!-- doxytag: member="Print::println" ref="09db74a8d51c6b2420c478267f958a51" args="(const char[])" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Print::println </td>
+ <td>(</td>
+ <td class="paramtype">const char&nbsp;</td>
+ <td class="paramname"> <em>c</em>[] </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Write a string to the associated device followed by CR LF.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>c</em>&nbsp;</td><td>the string to be printed </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="ecfb38019d91fb4cc8f4f360cb01d556"></a><!-- doxytag: member="Print::println" ref="ecfb38019d91fb4cc8f4f360cb01d556" args="(uint8_t)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Print::println </td>
+ <td>(</td>
+ <td class="paramtype">uint8_t&nbsp;</td>
+ <td class="paramname"> <em>b</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Write a byte to the associated device followed by CR LF.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>b</em>&nbsp;</td><td>the byte to be written </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="375cecbe842d589e49e3f5affc9ee965"></a><!-- doxytag: member="Print::println" ref="375cecbe842d589e49e3f5affc9ee965" args="(int)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Print::println </td>
+ <td>(</td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>n</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Write the decimal representation of a signed number to the associated device in ASCII followed by CR LF.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>n</em>&nbsp;</td><td>the number to be printed </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="c1cf3ffa88c0e36154b0a3ccb9844155"></a><!-- doxytag: member="Print::println" ref="c1cf3ffa88c0e36154b0a3ccb9844155" args="(unsigned int)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Print::println </td>
+ <td>(</td>
+ <td class="paramtype">unsigned int&nbsp;</td>
+ <td class="paramname"> <em>n</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Write the decimal representation of an unsigned number to the associated device in ASCII followed by CR LF.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>n</em>&nbsp;</td><td>the number to be printed </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="53ce0aed6aecd283b714f4e107386b39"></a><!-- doxytag: member="Print::println" ref="53ce0aed6aecd283b714f4e107386b39" args="(long)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Print::println </td>
+ <td>(</td>
+ <td class="paramtype">long&nbsp;</td>
+ <td class="paramname"> <em>n</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Write the decimal representation of a signed number to the associated device in ASCII followed by CR LF.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>n</em>&nbsp;</td><td>the number to be printed </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="35d444dd4208b21bd485950152839b7b"></a><!-- doxytag: member="Print::println" ref="35d444dd4208b21bd485950152839b7b" args="(unsigned long)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Print::println </td>
+ <td>(</td>
+ <td class="paramtype">unsigned long&nbsp;</td>
+ <td class="paramname"> <em>n</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Write the decimal representation of an unsigned number to the associated device in ASCII followed by CR LF.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>n</em>&nbsp;</td><td>the number to be printed </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="e09d3164784e75463d3f3616eb5e0a98"></a><!-- doxytag: member="Print::println" ref="e09d3164784e75463d3f3616eb5e0a98" args="(long, int)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Print::println </td>
+ <td>(</td>
+ <td class="paramtype">long&nbsp;</td>
+ <td class="paramname"> <em>n</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&nbsp;</td>
+ <td class="paramname"> <em>base</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Write the representation of a number, in the specified base, to the associated device in ASCII followed by CR LF.<p>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>If base is specified as zero, the number is written as a single byte by calling <a class="el" href="class_print.html#6309cc0fb10c5f50517069ae86bf60d7">print((char)n)</a>.</dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>n</em>&nbsp;</td><td>the number to be printed </td></tr>
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>base</em>&nbsp;</td><td>the base for the ASCII representation </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following files:<ul>
+<li>Fat16/Print/Print.h<li>Fat16/Print/Print.cpp</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/class_print__inherit__graph.png b/trunk/users/bruce/SD card test/Fat16Lib/html/class_print__inherit__graph.png
new file mode 100644
index 00000000..8c507203
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/class_print__inherit__graph.png
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/class_sd_card-members.html b/trunk/users/bruce/SD card test/Fat16Lib/html/class_sd_card-members.html
new file mode 100644
index 00000000..e6e32138
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/class_sd_card-members.html
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>SdCard Member List</h1>This is the complete list of members for <a class="el" href="class_sd_card.html">SdCard</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="class_sd_card.html#46d70fca217450fe0920eb6bceeabbc7">cardSize</a>(void)</td><td><a class="el" href="class_sd_card.html">SdCard</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_sd_card.html#3a4d46f80743556f66e3572ce0b24bd7">init</a>(void)</td><td><a class="el" href="class_sd_card.html">SdCard</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_sd_card.html#0174530d1ab9e54d2b9a9f5942868c64">readBlock</a>(uint32_t block, uint8_t *dst)</td><td><a class="el" href="class_sd_card.html">SdCard</a></td><td><code> [virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="class_sd_card.html#7733bf2b059eb938d556fe3b13a40b2a">writeBlock</a>(uint32_t block, uint8_t *src)</td><td><a class="el" href="class_sd_card.html">SdCard</a></td><td><code> [virtual]</code></td></tr>
+</table></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/class_sd_card.html b/trunk/users/bruce/SD card test/Fat16Lib/html/class_sd_card.html
new file mode 100644
index 00000000..9379b8bc
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/class_sd_card.html
@@ -0,0 +1,190 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: SdCard Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>SdCard Class Reference</h1><!-- doxytag: class="SdCard" --><!-- doxytag: inherits="BlockDevice" -->Hardware access class for SD flash cards.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;SdCard.h&gt;</code>
+<p>
+<div class="dynheader">
+Inheritance diagram for SdCard:</div>
+<div class="dynsection">
+<p><center><img src="class_sd_card__inherit__graph.png" border="0" usemap="#_sd_card__inherit__map" alt="Inheritance graph"></center>
+<map name="_sd_card__inherit__map">
+<area shape="rect" href="class_block_device.html" title="BlockDevice is the base class for devices supported by Fat16." alt="" coords="5,5,96,32"> </map>
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>
+<div class="dynheader">
+Collaboration diagram for SdCard:</div>
+<div class="dynsection">
+<p><center><img src="class_sd_card__coll__graph.png" border="0" usemap="#_sd_card__coll__map" alt="Collaboration graph"></center>
+<map name="_sd_card__coll__map">
+<area shape="rect" href="class_block_device.html" title="BlockDevice is the base class for devices supported by Fat16." alt="" coords="5,5,96,32"> </map>
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>
+
+<p>
+<a href="class_sd_card-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_card.html#46d70fca217450fe0920eb6bceeabbc7">cardSize</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_card.html#3a4d46f80743556f66e3572ce0b24bd7">init</a> (void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_card.html#0174530d1ab9e54d2b9a9f5942868c64">readBlock</a> (uint32_t block, uint8_t *dst)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_card.html#7733bf2b059eb938d556fe3b13a40b2a">writeBlock</a> (uint32_t block, uint8_t *src)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Hardware access class for SD flash cards.
+<p>
+Supports raw access to a standard SD flash memory card. <hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="46d70fca217450fe0920eb6bceeabbc7"></a><!-- doxytag: member="SdCard::cardSize" ref="46d70fca217450fe0920eb6bceeabbc7" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint32_t SdCard::cardSize </td>
+ <td>(</td>
+ <td class="paramtype">void&nbsp;</td>
+ <td class="paramname"> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Determine the size of a standard SD flash memory card <dl class="return" compact><dt><b>Returns:</b></dt><dd>The number of 512 byte data blocks in the card </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="3a4d46f80743556f66e3572ce0b24bd7"></a><!-- doxytag: member="SdCard::init" ref="3a4d46f80743556f66e3572ce0b24bd7" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t SdCard::init </td>
+ <td>(</td>
+ <td class="paramtype">void&nbsp;</td>
+ <td class="paramname"> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Initialize a SD flash memory card.<p>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The value one, true, is returned for success and the value zero, false, is returned for failure. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="0174530d1ab9e54d2b9a9f5942868c64"></a><!-- doxytag: member="SdCard::readBlock" ref="0174530d1ab9e54d2b9a9f5942868c64" args="(uint32_t block, uint8_t *dst)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t SdCard::readBlock </td>
+ <td>(</td>
+ <td class="paramtype">uint32_t&nbsp;</td>
+ <td class="paramname"> <em>blockNumber</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint8_t *&nbsp;</td>
+ <td class="paramname"> <em>dst</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [virtual]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Reads a 512 byte block from a storage device.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>blockNumber</em>&nbsp;</td><td>Logical block to be read. </td></tr>
+ <tr><td valign="top"><tt>[out]</tt>&nbsp;</td><td valign="top"><em>dst</em>&nbsp;</td><td>Pointer to the location that will receive the data. </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The value one, true, is returned for success and the value zero, false, is returned for failure. </dd></dl>
+
+<p>Reimplemented from <a class="el" href="class_block_device.html#63051cb737ac67cf8749d144fadf4cf8">BlockDevice</a>.</p>
+
+</div>
+</div><p>
+<a class="anchor" name="7733bf2b059eb938d556fe3b13a40b2a"></a><!-- doxytag: member="SdCard::writeBlock" ref="7733bf2b059eb938d556fe3b13a40b2a" args="(uint32_t block, uint8_t *src)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t SdCard::writeBlock </td>
+ <td>(</td>
+ <td class="paramtype">uint32_t&nbsp;</td>
+ <td class="paramname"> <em>blockNumber</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint8_t *&nbsp;</td>
+ <td class="paramname"> <em>src</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [virtual]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Writes a 512 byte block to a storage device.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>blockNumber</em>&nbsp;</td><td>Logical block to be written. </td></tr>
+ <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>src</em>&nbsp;</td><td>Pointer to the location of the data to be written. </td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The value one, true, is returned for success and the value zero, false, is returned for failure. </dd></dl>
+
+<p>Reimplemented from <a class="el" href="class_block_device.html#d3732321b3480f2645bafa8d2f020feb">BlockDevice</a>.</p>
+
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following files:<ul>
+<li>Fat16/SdCard.h<li>Fat16/SdCard.cpp</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/class_sd_card__coll__graph.png b/trunk/users/bruce/SD card test/Fat16Lib/html/class_sd_card__coll__graph.png
new file mode 100644
index 00000000..2792e75c
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/class_sd_card__coll__graph.png
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/class_sd_card__inherit__graph.png b/trunk/users/bruce/SD card test/Fat16Lib/html/class_sd_card__inherit__graph.png
new file mode 100644
index 00000000..2792e75c
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/class_sd_card__inherit__graph.png
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/doxygen.css b/trunk/users/bruce/SD card test/Fat16Lib/html/doxygen.css
new file mode 100644
index 00000000..22c48430
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/doxygen.css
@@ -0,0 +1,473 @@
+BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
+ font-family: Geneva, Arial, Helvetica, sans-serif;
+}
+BODY,TD {
+ font-size: 90%;
+}
+H1 {
+ text-align: center;
+ font-size: 160%;
+}
+H2 {
+ font-size: 120%;
+}
+H3 {
+ font-size: 100%;
+}
+CAPTION {
+ font-weight: bold
+}
+DIV.qindex {
+ width: 100%;
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ padding: 2px;
+ line-height: 140%;
+}
+DIV.navpath {
+ width: 100%;
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ padding: 2px;
+ line-height: 140%;
+}
+DIV.navtab {
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+TD.navtab {
+ font-size: 70%;
+}
+A.qindex {
+ text-decoration: none;
+ font-weight: bold;
+ color: #1A419D;
+}
+A.qindex:visited {
+ text-decoration: none;
+ font-weight: bold;
+ color: #1A419D
+}
+A.qindex:hover {
+ text-decoration: none;
+ background-color: #ddddff;
+}
+A.qindexHL {
+ text-decoration: none;
+ font-weight: bold;
+ background-color: #6666cc;
+ color: #ffffff;
+ border: 1px double #9295C2;
+}
+A.qindexHL:hover {
+ text-decoration: none;
+ background-color: #6666cc;
+ color: #ffffff;
+}
+A.qindexHL:visited {
+ text-decoration: none;
+ background-color: #6666cc;
+ color: #ffffff
+}
+A.el {
+ text-decoration: none;
+ font-weight: bold
+}
+A.elRef {
+ font-weight: bold
+}
+A.code:link {
+ text-decoration: none;
+ font-weight: normal;
+ color: #0000FF
+}
+A.code:visited {
+ text-decoration: none;
+ font-weight: normal;
+ color: #0000FF
+}
+A.codeRef:link {
+ font-weight: normal;
+ color: #0000FF
+}
+A.codeRef:visited {
+ font-weight: normal;
+ color: #0000FF
+}
+A:hover {
+ text-decoration: none;
+ background-color: #f2f2ff
+}
+DL.el {
+ margin-left: -1cm
+}
+.fragment {
+ font-family: monospace, fixed;
+ font-size: 95%;
+}
+PRE.fragment {
+ border: 1px solid #CCCCCC;
+ background-color: #f5f5f5;
+ margin-top: 4px;
+ margin-bottom: 4px;
+ margin-left: 2px;
+ margin-right: 8px;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+DIV.ah {
+ background-color: black;
+ font-weight: bold;
+ color: #ffffff;
+ margin-bottom: 3px;
+ margin-top: 3px
+}
+
+DIV.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ margin-bottom: 6px;
+ font-weight: bold;
+}
+DIV.groupText {
+ margin-left: 16px;
+ font-style: italic;
+ font-size: 90%
+}
+BODY {
+ background: white;
+ color: black;
+ margin-right: 20px;
+ margin-left: 20px;
+}
+TD.indexkey {
+ background-color: #e8eef2;
+ font-weight: bold;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px;
+ border: 1px solid #CCCCCC;
+}
+TD.indexvalue {
+ background-color: #e8eef2;
+ font-style: italic;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px;
+ border: 1px solid #CCCCCC;
+}
+TR.memlist {
+ background-color: #f0f0f0;
+}
+P.formulaDsp {
+ text-align: center;
+}
+IMG.formulaDsp {
+}
+IMG.formulaInl {
+ vertical-align: middle;
+}
+SPAN.keyword { color: #008000 }
+SPAN.keywordtype { color: #604020 }
+SPAN.keywordflow { color: #e08000 }
+SPAN.comment { color: #800000 }
+SPAN.preprocessor { color: #806020 }
+SPAN.stringliteral { color: #002080 }
+SPAN.charliteral { color: #008080 }
+SPAN.vhdldigit { color: #ff00ff }
+SPAN.vhdlchar { color: #000000 }
+SPAN.vhdlkeyword { color: #700070 }
+SPAN.vhdllogic { color: #ff0000 }
+
+.mdescLeft {
+ padding: 0px 8px 4px 8px;
+ font-size: 80%;
+ font-style: italic;
+ background-color: #FAFAFA;
+ border-top: 1px none #E0E0E0;
+ border-right: 1px none #E0E0E0;
+ border-bottom: 1px none #E0E0E0;
+ border-left: 1px none #E0E0E0;
+ margin: 0px;
+}
+.mdescRight {
+ padding: 0px 8px 4px 8px;
+ font-size: 80%;
+ font-style: italic;
+ background-color: #FAFAFA;
+ border-top: 1px none #E0E0E0;
+ border-right: 1px none #E0E0E0;
+ border-bottom: 1px none #E0E0E0;
+ border-left: 1px none #E0E0E0;
+ margin: 0px;
+}
+.memItemLeft {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memItemRight {
+ padding: 1px 8px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplItemLeft {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: none;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplItemRight {
+ padding: 1px 8px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: none;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplParams {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ color: #606060;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.search {
+ color: #003399;
+ font-weight: bold;
+}
+FORM.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+INPUT.search {
+ font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #e8eef2;
+}
+TD.tiny {
+ font-size: 75%;
+}
+a {
+ color: #1A41A8;
+}
+a:visited {
+ color: #2A3798;
+}
+.dirtab {
+ padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #84b0c7;
+}
+TH.dirtab {
+ background: #e8eef2;
+ font-weight: bold;
+}
+HR {
+ height: 1px;
+ border: none;
+ border-top: 1px solid black;
+}
+
+/* Style for detailed member documentation */
+.memtemplate {
+ font-size: 80%;
+ color: #606060;
+ font-weight: normal;
+ margin-left: 3px;
+}
+.memnav {
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+.memitem {
+ padding: 4px;
+ background-color: #eef3f5;
+ border-width: 1px;
+ border-style: solid;
+ border-color: #dedeee;
+ -moz-border-radius: 8px 8px 8px 8px;
+}
+.memname {
+ white-space: nowrap;
+ font-weight: bold;
+}
+.memdoc{
+ padding-left: 10px;
+}
+.memproto {
+ background-color: #d5e1e8;
+ width: 100%;
+ border-width: 1px;
+ border-style: solid;
+ border-color: #84b0c7;
+ font-weight: bold;
+ -moz-border-radius: 8px 8px 8px 8px;
+}
+.paramkey {
+ text-align: right;
+}
+.paramtype {
+ white-space: nowrap;
+}
+.paramname {
+ color: #602020;
+ font-style: italic;
+ white-space: nowrap;
+}
+/* End Styling for detailed member documentation */
+
+/* for the tree view */
+.ftvtree {
+ font-family: sans-serif;
+ margin:0.5em;
+}
+/* these are for tree view when used as main index */
+.directory {
+ font-size: 9pt;
+ font-weight: bold;
+}
+.directory h3 {
+ margin: 0px;
+ margin-top: 1em;
+ font-size: 11pt;
+}
+
+/* The following two styles can be used to replace the root node title */
+/* with an image of your choice. Simply uncomment the next two styles, */
+/* specify the name of your image and be sure to set 'height' to the */
+/* proper pixel height of your image. */
+
+/* .directory h3.swap { */
+/* height: 61px; */
+/* background-repeat: no-repeat; */
+/* background-image: url("yourimage.gif"); */
+/* } */
+/* .directory h3.swap span { */
+/* display: none; */
+/* } */
+
+.directory > h3 {
+ margin-top: 0;
+}
+.directory p {
+ margin: 0px;
+ white-space: nowrap;
+}
+.directory div {
+ display: none;
+ margin: 0px;
+}
+.directory img {
+ vertical-align: -30%;
+}
+/* these are for tree view when not used as main index */
+.directory-alt {
+ font-size: 100%;
+ font-weight: bold;
+}
+.directory-alt h3 {
+ margin: 0px;
+ margin-top: 1em;
+ font-size: 11pt;
+}
+.directory-alt > h3 {
+ margin-top: 0;
+}
+.directory-alt p {
+ margin: 0px;
+ white-space: nowrap;
+}
+.directory-alt div {
+ display: none;
+ margin: 0px;
+}
+.directory-alt img {
+ vertical-align: -30%;
+}
+
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/doxygen.png b/trunk/users/bruce/SD card test/Fat16Lib/html/doxygen.png
new file mode 100644
index 00000000..f0a274bb
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/doxygen.png
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/files.html b/trunk/users/bruce/SD card test/Fat16Lib/html/files.html
new file mode 100644
index 00000000..dae32598
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/files.html
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: File Index</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="files.html"><span>File&nbsp;List</span></a></li>
+ <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>File List</h1>Here is a list of all documented files with brief descriptions:<table>
+ <tr><td class="indexkey">Fat16/<a class="el" href="_fat16_config_8h.html">Fat16Config.h</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">Fat16/<a class="el" href="_fat16structs_8h.html">Fat16structs.h</a></td><td class="indexvalue"></td></tr>
+</table>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/functions.html b/trunk/users/bruce/SD card test/Fat16Lib/html/functions.html
new file mode 100644
index 00000000..de208038
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/functions.html
@@ -0,0 +1,267 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Class Members</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li class="current"><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="#index_a"><span>a</span></a></li>
+ <li><a href="#index_b"><span>b</span></a></li>
+ <li><a href="#index_c"><span>c</span></a></li>
+ <li><a href="#index_d"><span>d</span></a></li>
+ <li><a href="#index_e"><span>e</span></a></li>
+ <li><a href="#index_f"><span>f</span></a></li>
+ <li><a href="#index_h"><span>h</span></a></li>
+ <li><a href="#index_i"><span>i</span></a></li>
+ <li><a href="#index_j"><span>j</span></a></li>
+ <li><a href="#index_l"><span>l</span></a></li>
+ <li><a href="#index_m"><span>m</span></a></li>
+ <li><a href="#index_n"><span>n</span></a></li>
+ <li><a href="#index_o"><span>o</span></a></li>
+ <li><a href="#index_p"><span>p</span></a></li>
+ <li><a href="#index_r"><span>r</span></a></li>
+ <li><a href="#index_s"><span>s</span></a></li>
+ <li><a href="#index_t"><span>t</span></a></li>
+ <li><a href="#index_u"><span>u</span></a></li>
+ <li><a href="#index_v"><span>v</span></a></li>
+ <li><a href="#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+Here is a list of all documented class members with links to the class documentation for each member:
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>attributes
+: <a class="el" href="structdirectory_entry.html#16c6cde55c8175c90935c386f1cfb21a">directoryEntry</a>
+</ul>
+<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
+<li>beginCylinderHigh
+: <a class="el" href="structpartition_table.html#744f0c7f9ad4c426b10de085b4f52392">partitionTable</a>
+<li>beginCylinderLow
+: <a class="el" href="structpartition_table.html#941fcb4df298f5f73ccca011bf40787a">partitionTable</a>
+<li>beginHead
+: <a class="el" href="structpartition_table.html#7d426694b8cf2151ae38568670a8c845">partitionTable</a>
+<li>beginSector
+: <a class="el" href="structpartition_table.html#e201c11d9671c9efc307c654a2b6c026">partitionTable</a>
+<li>boot
+: <a class="el" href="structpartition_table.html#df386afb1f33046d8b6a1a0afa780ec9">partitionTable</a>
+<li>bootCode
+: <a class="el" href="structfat16_boot_sector.html#07e9a439190269e722d082e0bee20d87">fat16BootSector</a>
+<li>bootSectorSig0
+: <a class="el" href="structfat16_boot_sector.html#c4f3001933678e731123014c541a40cd">fat16BootSector</a>
+<li>bootSectorSig1
+: <a class="el" href="structfat16_boot_sector.html#0a95c781a681feef4b4ab5341a38addd">fat16BootSector</a>
+<li>bootSignature
+: <a class="el" href="structfat16_boot_sector.html#a37cbfa36c3017f612dee3bcd378a229">fat16BootSector</a>
+<li>bpb
+: <a class="el" href="structfat16_boot_sector.html#2db37b8c273a1ce0828a208d41cfc032">fat16BootSector</a>
+<li>bytesPerSector
+: <a class="el" href="structbios_pram_block.html#ca83605eeb8377731a24fd0e798601ba">biosPramBlock</a>
+</ul>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>cardSize()
+: <a class="el" href="class_sd_card.html#46d70fca217450fe0920eb6bceeabbc7">SdCard</a>
+<li>close()
+: <a class="el" href="class_fat16.html#ae3355bf1e93e732a64149663133161a">Fat16</a>
+<li>codeArea
+: <a class="el" href="structmaster_boot_record.html#26ca1fb4ebbff2cc1a54153b1dfcd688">masterBootRecord</a>
+<li>create()
+: <a class="el" href="class_fat16.html#1afef833da3eb1dfbb6d8cfe24fa49a7">Fat16</a>
+<li>creationDate
+: <a class="el" href="structdirectory_entry.html#7b43372794655fe6604d3c17c02302fe">directoryEntry</a>
+<li>creationTime
+: <a class="el" href="structdirectory_entry.html#622bfa70c2cd9006108d7473d737a953">directoryEntry</a>
+<li>creationTimeTenths
+: <a class="el" href="structdirectory_entry.html#a5e1ce5b411b88f005b28a3e7c7c5af6">directoryEntry</a>
+</ul>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>data
+: <a class="el" href="unioncache__t.html#e675b7a3a87d809070de111d1d1f1d81">cache_t</a>
+<li>dbgCacheBlock()
+: <a class="el" href="class_fat16.html#3bdbee900501a87234a03640b35e5b19">Fat16</a>
+<li>dbgCacheDir()
+: <a class="el" href="class_fat16.html#bcbb3e5deda647d45b1e863c8a9a3d84">Fat16</a>
+<li>dbgCacheFat()
+: <a class="el" href="class_fat16.html#3a9f189cbd66d7006a88810ef300f7d8">Fat16</a>
+<li>dbgSetDev()
+: <a class="el" href="class_fat16.html#888dcce1a2bb0f4ab196cf28dc03b84d">Fat16</a>
+<li>dir
+: <a class="el" href="unioncache__t.html#7396fdbdb7c52bd1d72c5329ff32acd1">cache_t</a>
+<li>diskSignature
+: <a class="el" href="structmaster_boot_record.html#77151c641444c0653ff71a253f0423ef">masterBootRecord</a>
+<li>driveNumber
+: <a class="el" href="structfat16_boot_sector.html#38168b31c3cde1273821e95899f19b54">fat16BootSector</a>
+</ul>
+<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
+<li>endCylinderHigh
+: <a class="el" href="structpartition_table.html#32fea225b8ffd925ad919ffc56e9abda">partitionTable</a>
+<li>endCylinderLow
+: <a class="el" href="structpartition_table.html#d7829e34be70084abe145227b0d18274">partitionTable</a>
+<li>endHead
+: <a class="el" href="structpartition_table.html#4a3945bfd3a29f474984cb9f180dbd51">partitionTable</a>
+<li>endSector
+: <a class="el" href="structpartition_table.html#27cdc4320c418ed0d833ab163ed77ad7">partitionTable</a>
+</ul>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>fat
+: <a class="el" href="unioncache__t.html#51ba1b94870820dd9556a8b3108886e9">cache_t</a>
+<li>fatCount
+: <a class="el" href="structbios_pram_block.html#64efce62b1ccb23387ca91cdc2c047eb">biosPramBlock</a>
+<li>fbs
+: <a class="el" href="unioncache__t.html#0691515e5d969f98c4285bfe0c16a309">cache_t</a>
+<li>fileSize
+: <a class="el" href="structdirectory_entry.html#c2445d99b50f925f662952e0ccd26a02">directoryEntry</a>
+, <a class="el" href="class_fat16.html#984d8986688ffaa13a628398ab0a98f2">Fat16</a>
+<li>fileSystemType
+: <a class="el" href="structfat16_boot_sector.html#2560e224655487af388c10164bdc7460">fat16BootSector</a>
+<li>firstClusterHigh
+: <a class="el" href="structdirectory_entry.html#3b492598b2b05e8425d2a500443613bd">directoryEntry</a>
+<li>firstClusterLow
+: <a class="el" href="structdirectory_entry.html#74bd660417a9c3501eae353326c14bb9">directoryEntry</a>
+<li>firstSector
+: <a class="el" href="structpartition_table.html#02bbdff840c854dc96fa0b6da8589d86">partitionTable</a>
+</ul>
+<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
+<li>headCount
+: <a class="el" href="structbios_pram_block.html#1e98ae0c6468c60aedcb22fa5f9d05da">biosPramBlock</a>
+<li>hidddenSectors
+: <a class="el" href="structbios_pram_block.html#9d7ee0eec291b462a60d4c45496b770a">biosPramBlock</a>
+</ul>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>init()
+: <a class="el" href="class_fat16.html#610191a704142918c2f14174706c3345">Fat16</a>
+, <a class="el" href="class_sd_card.html#3a4d46f80743556f66e3572ce0b24bd7">SdCard</a>
+<li>isOpen()
+: <a class="el" href="class_fat16.html#ecb8259458d2ba49b348de5e30fc8538">Fat16</a>
+</ul>
+<h3><a class="anchor" name="index_j">- j -</a></h3><ul>
+<li>jmpToBootCode
+: <a class="el" href="structfat16_boot_sector.html#7d45ff0fb3255aa082e1ae9423f38e3e">fat16BootSector</a>
+</ul>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>lastAccessDate
+: <a class="el" href="structdirectory_entry.html#bca70dc5c5fcbe199fd78df010111331">directoryEntry</a>
+<li>lastWriteDate
+: <a class="el" href="structdirectory_entry.html#12b2e7cf87482a942a0b5d3df6c51468">directoryEntry</a>
+<li>lastWriteTime
+: <a class="el" href="structdirectory_entry.html#7bab435322d1928f66fbce53ee1f402d">directoryEntry</a>
+</ul>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>mbr
+: <a class="el" href="unioncache__t.html#6ac10bfb1ebb1139c448456679663bb6">cache_t</a>
+<li>mbrSig0
+: <a class="el" href="structmaster_boot_record.html#42b0b413ecb21ac5314d4f6bca05308f">masterBootRecord</a>
+<li>mbrSig1
+: <a class="el" href="structmaster_boot_record.html#afbbcb4f6a2d1181c6458d4c9603df4f">masterBootRecord</a>
+<li>mediaType
+: <a class="el" href="structbios_pram_block.html#aa3e283196dec4026b1c47dae6973452">biosPramBlock</a>
+</ul>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>name
+: <a class="el" href="structdirectory_entry.html#05dc993ea55a1a742de5970541a31ecb">directoryEntry</a>
+</ul>
+<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
+<li>oemName
+: <a class="el" href="structfat16_boot_sector.html#f9f6a82cdfc67bab94faf6b633ee98ed">fat16BootSector</a>
+<li>open()
+: <a class="el" href="class_fat16.html#5360d27d4a5b9f4a17ea0d63f3d17a47">Fat16</a>
+</ul>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>part
+: <a class="el" href="structmaster_boot_record.html#a4e294e50f311635c10c92f4c99227c5">masterBootRecord</a>
+<li>print()
+: <a class="el" href="class_print.html#6309cc0fb10c5f50517069ae86bf60d7">Print</a>
+<li>println()
+: <a class="el" href="class_print.html#525b37c566658ff8113a067f6e8d5bf1">Print</a>
+</ul>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>read()
+: <a class="el" href="class_fat16.html#d0b43c1c92d6c3588cd62504066c8739">Fat16</a>
+<li>readBlock()
+: <a class="el" href="class_sd_card.html#0174530d1ab9e54d2b9a9f5942868c64">SdCard</a>
+, <a class="el" href="class_block_device.html#63051cb737ac67cf8749d144fadf4cf8">BlockDevice</a>
+<li>readDir()
+: <a class="el" href="class_fat16.html#d43edc0de66fd646b42d07bbe495d965">Fat16</a>
+<li>readPos()
+: <a class="el" href="class_fat16.html#a17641d5de9976955e47d5bcd315915a">Fat16</a>
+<li>reserved1
+: <a class="el" href="structfat16_boot_sector.html#93c6c608f2df48d5732a7f4b0b5e94ed">fat16BootSector</a>
+<li>reservedNT
+: <a class="el" href="structdirectory_entry.html#fe7d00be85f3b78549b21610050da52b">directoryEntry</a>
+<li>reservedSectorCount
+: <a class="el" href="structbios_pram_block.html#adebc5ad2730a2a1c41bc8d0a4908faf">biosPramBlock</a>
+<li>rootDirEntryCount()
+: <a class="el" href="class_fat16.html#ab4922c434b1642cac213705d814de4c">Fat16</a>
+, <a class="el" href="structbios_pram_block.html#e362130b8f006e1c14c8d875e5970a00">biosPramBlock</a>
+</ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>sectorsPerCluster
+: <a class="el" href="structbios_pram_block.html#900eb3d3f3e629eceea296b141893654">biosPramBlock</a>
+<li>sectorsPerFat16
+: <a class="el" href="structbios_pram_block.html#8036d689f2406f8643fa02203be147bf">biosPramBlock</a>
+<li>sectorsPerTrtack
+: <a class="el" href="structbios_pram_block.html#2119c6d49546dde091fb71921275a48c">biosPramBlock</a>
+<li>seek()
+: <a class="el" href="class_fat16.html#c0c08e00b317745d7a305bb7d326f9f2">Fat16</a>
+<li>sync()
+: <a class="el" href="class_fat16.html#a8919ff5c1b3e5470dbd38a6f7710d20">Fat16</a>
+</ul>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>totalSectors
+: <a class="el" href="structpartition_table.html#cf96e59ce648a9a0cf35751c3b6d7730">partitionTable</a>
+<li>totalSectors16
+: <a class="el" href="structbios_pram_block.html#ccefcdb9af4940c88a72c30667b1eb40">biosPramBlock</a>
+<li>totalSectors32
+: <a class="el" href="structbios_pram_block.html#2d9e2a80ad302177afa8b351b2f547ae">biosPramBlock</a>
+<li>type
+: <a class="el" href="structpartition_table.html#3861cf276c728c4dd30ca04e74197ee8">partitionTable</a>
+</ul>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>usuallyZero
+: <a class="el" href="structmaster_boot_record.html#facfc863e98f64053cd9459c6dec948f">masterBootRecord</a>
+</ul>
+<h3><a class="anchor" name="index_v">- v -</a></h3><ul>
+<li>volumeLabel
+: <a class="el" href="structfat16_boot_sector.html#a27346f56be9275ff27a5615c6a0a7c0">fat16BootSector</a>
+<li>volumeSerialNumber
+: <a class="el" href="structfat16_boot_sector.html#811881b7a2809d4981f74baf7f9c1d3c">fat16BootSector</a>
+</ul>
+<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
+<li>write()
+: <a class="el" href="class_fat16.html#d1cfc594294d7dafd2e77377252d82c9">Fat16</a>
+, <a class="el" href="class_print.html#0a96ee1130d5b74174d3a26e56d1d1f0">Print</a>
+<li>writeBlock()
+: <a class="el" href="class_block_device.html#d3732321b3480f2645bafa8d2f020feb">BlockDevice</a>
+, <a class="el" href="class_sd_card.html#7733bf2b059eb938d556fe3b13a40b2a">SdCard</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/functions_func.html b/trunk/users/bruce/SD card test/Fat16Lib/html/functions_func.html
new file mode 100644
index 00000000..a3fdd400
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/functions_func.html
@@ -0,0 +1,118 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Class Members - Functions</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li class="current"><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="#index_c"><span>c</span></a></li>
+ <li><a href="#index_d"><span>d</span></a></li>
+ <li><a href="#index_f"><span>f</span></a></li>
+ <li><a href="#index_i"><span>i</span></a></li>
+ <li><a href="#index_o"><span>o</span></a></li>
+ <li><a href="#index_p"><span>p</span></a></li>
+ <li><a href="#index_r"><span>r</span></a></li>
+ <li><a href="#index_s"><span>s</span></a></li>
+ <li><a href="#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>cardSize()
+: <a class="el" href="class_sd_card.html#46d70fca217450fe0920eb6bceeabbc7">SdCard</a>
+<li>close()
+: <a class="el" href="class_fat16.html#ae3355bf1e93e732a64149663133161a">Fat16</a>
+<li>create()
+: <a class="el" href="class_fat16.html#1afef833da3eb1dfbb6d8cfe24fa49a7">Fat16</a>
+</ul>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>dbgCacheBlock()
+: <a class="el" href="class_fat16.html#3bdbee900501a87234a03640b35e5b19">Fat16</a>
+<li>dbgCacheDir()
+: <a class="el" href="class_fat16.html#bcbb3e5deda647d45b1e863c8a9a3d84">Fat16</a>
+<li>dbgCacheFat()
+: <a class="el" href="class_fat16.html#3a9f189cbd66d7006a88810ef300f7d8">Fat16</a>
+<li>dbgSetDev()
+: <a class="el" href="class_fat16.html#888dcce1a2bb0f4ab196cf28dc03b84d">Fat16</a>
+</ul>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>fileSize()
+: <a class="el" href="class_fat16.html#984d8986688ffaa13a628398ab0a98f2">Fat16</a>
+</ul>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>init()
+: <a class="el" href="class_fat16.html#610191a704142918c2f14174706c3345">Fat16</a>
+, <a class="el" href="class_sd_card.html#3a4d46f80743556f66e3572ce0b24bd7">SdCard</a>
+<li>isOpen()
+: <a class="el" href="class_fat16.html#ecb8259458d2ba49b348de5e30fc8538">Fat16</a>
+</ul>
+<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
+<li>open()
+: <a class="el" href="class_fat16.html#2420ccbc71b857544016e3a45b47fbeb">Fat16</a>
+</ul>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>print()
+: <a class="el" href="class_print.html#6309cc0fb10c5f50517069ae86bf60d7">Print</a>
+<li>println()
+: <a class="el" href="class_print.html#fde6ae226acae7c07f07b2ac674418b9">Print</a>
+</ul>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>read()
+: <a class="el" href="class_fat16.html#d0b43c1c92d6c3588cd62504066c8739">Fat16</a>
+<li>readBlock()
+: <a class="el" href="class_sd_card.html#0174530d1ab9e54d2b9a9f5942868c64">SdCard</a>
+, <a class="el" href="class_block_device.html#63051cb737ac67cf8749d144fadf4cf8">BlockDevice</a>
+<li>readDir()
+: <a class="el" href="class_fat16.html#d43edc0de66fd646b42d07bbe495d965">Fat16</a>
+<li>readPos()
+: <a class="el" href="class_fat16.html#a17641d5de9976955e47d5bcd315915a">Fat16</a>
+<li>rootDirEntryCount()
+: <a class="el" href="class_fat16.html#ab4922c434b1642cac213705d814de4c">Fat16</a>
+</ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>seek()
+: <a class="el" href="class_fat16.html#c0c08e00b317745d7a305bb7d326f9f2">Fat16</a>
+<li>sync()
+: <a class="el" href="class_fat16.html#a8919ff5c1b3e5470dbd38a6f7710d20">Fat16</a>
+</ul>
+<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
+<li>write()
+: <a class="el" href="class_fat16.html#d1cfc594294d7dafd2e77377252d82c9">Fat16</a>
+, <a class="el" href="class_print.html#0a96ee1130d5b74174d3a26e56d1d1f0">Print</a>
+<li>writeBlock()
+: <a class="el" href="class_block_device.html#d3732321b3480f2645bafa8d2f020feb">BlockDevice</a>
+, <a class="el" href="class_sd_card.html#7733bf2b059eb938d556fe3b13a40b2a">SdCard</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/functions_type.html b/trunk/users/bruce/SD card test/Fat16Lib/html/functions_type.html
new file mode 100644
index 00000000..daf9fdb5
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/functions_type.html
@@ -0,0 +1,44 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Class Members - Typedefs</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li class="current"><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li class="current"><a href="functions_type.html"><span>Typedefs</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+&nbsp;
+<p>
+<ul>
+<li>fat_t
+: <a class="el" href="unioncache__t.html#06bd3b071c75684907858b6ce4db1a63">cache_t</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Mon Oct 6 06:31:14 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/functions_vars.html b/trunk/users/bruce/SD card test/Fat16Lib/html/functions_vars.html
new file mode 100644
index 00000000..33a64b5c
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/functions_vars.html
@@ -0,0 +1,215 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Class Members - Variables</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li class="current"><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="#index_a"><span>a</span></a></li>
+ <li><a href="#index_b"><span>b</span></a></li>
+ <li><a href="#index_c"><span>c</span></a></li>
+ <li><a href="#index_d"><span>d</span></a></li>
+ <li><a href="#index_e"><span>e</span></a></li>
+ <li><a href="#index_f"><span>f</span></a></li>
+ <li><a href="#index_h"><span>h</span></a></li>
+ <li><a href="#index_j"><span>j</span></a></li>
+ <li><a href="#index_l"><span>l</span></a></li>
+ <li><a href="#index_m"><span>m</span></a></li>
+ <li><a href="#index_n"><span>n</span></a></li>
+ <li><a href="#index_o"><span>o</span></a></li>
+ <li><a href="#index_p"><span>p</span></a></li>
+ <li><a href="#index_r"><span>r</span></a></li>
+ <li><a href="#index_s"><span>s</span></a></li>
+ <li><a href="#index_t"><span>t</span></a></li>
+ <li><a href="#index_u"><span>u</span></a></li>
+ <li><a href="#index_v"><span>v</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>attributes
+: <a class="el" href="structdirectory_entry.html#16c6cde55c8175c90935c386f1cfb21a">directoryEntry</a>
+</ul>
+<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
+<li>beginCylinderHigh
+: <a class="el" href="structpartition_table.html#744f0c7f9ad4c426b10de085b4f52392">partitionTable</a>
+<li>beginCylinderLow
+: <a class="el" href="structpartition_table.html#941fcb4df298f5f73ccca011bf40787a">partitionTable</a>
+<li>beginHead
+: <a class="el" href="structpartition_table.html#7d426694b8cf2151ae38568670a8c845">partitionTable</a>
+<li>beginSector
+: <a class="el" href="structpartition_table.html#e201c11d9671c9efc307c654a2b6c026">partitionTable</a>
+<li>boot
+: <a class="el" href="structpartition_table.html#df386afb1f33046d8b6a1a0afa780ec9">partitionTable</a>
+<li>bootCode
+: <a class="el" href="structfat16_boot_sector.html#07e9a439190269e722d082e0bee20d87">fat16BootSector</a>
+<li>bootSectorSig0
+: <a class="el" href="structfat16_boot_sector.html#c4f3001933678e731123014c541a40cd">fat16BootSector</a>
+<li>bootSectorSig1
+: <a class="el" href="structfat16_boot_sector.html#0a95c781a681feef4b4ab5341a38addd">fat16BootSector</a>
+<li>bootSignature
+: <a class="el" href="structfat16_boot_sector.html#a37cbfa36c3017f612dee3bcd378a229">fat16BootSector</a>
+<li>bpb
+: <a class="el" href="structfat16_boot_sector.html#2db37b8c273a1ce0828a208d41cfc032">fat16BootSector</a>
+<li>bytesPerSector
+: <a class="el" href="structbios_pram_block.html#ca83605eeb8377731a24fd0e798601ba">biosPramBlock</a>
+</ul>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>codeArea
+: <a class="el" href="structmaster_boot_record.html#26ca1fb4ebbff2cc1a54153b1dfcd688">masterBootRecord</a>
+<li>creationDate
+: <a class="el" href="structdirectory_entry.html#7b43372794655fe6604d3c17c02302fe">directoryEntry</a>
+<li>creationTime
+: <a class="el" href="structdirectory_entry.html#622bfa70c2cd9006108d7473d737a953">directoryEntry</a>
+<li>creationTimeTenths
+: <a class="el" href="structdirectory_entry.html#a5e1ce5b411b88f005b28a3e7c7c5af6">directoryEntry</a>
+</ul>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>data
+: <a class="el" href="unioncache__t.html#e675b7a3a87d809070de111d1d1f1d81">cache_t</a>
+<li>dir
+: <a class="el" href="unioncache__t.html#7396fdbdb7c52bd1d72c5329ff32acd1">cache_t</a>
+<li>diskSignature
+: <a class="el" href="structmaster_boot_record.html#77151c641444c0653ff71a253f0423ef">masterBootRecord</a>
+<li>driveNumber
+: <a class="el" href="structfat16_boot_sector.html#38168b31c3cde1273821e95899f19b54">fat16BootSector</a>
+</ul>
+<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
+<li>endCylinderHigh
+: <a class="el" href="structpartition_table.html#32fea225b8ffd925ad919ffc56e9abda">partitionTable</a>
+<li>endCylinderLow
+: <a class="el" href="structpartition_table.html#d7829e34be70084abe145227b0d18274">partitionTable</a>
+<li>endHead
+: <a class="el" href="structpartition_table.html#4a3945bfd3a29f474984cb9f180dbd51">partitionTable</a>
+<li>endSector
+: <a class="el" href="structpartition_table.html#27cdc4320c418ed0d833ab163ed77ad7">partitionTable</a>
+</ul>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>fat
+: <a class="el" href="unioncache__t.html#51ba1b94870820dd9556a8b3108886e9">cache_t</a>
+<li>fatCount
+: <a class="el" href="structbios_pram_block.html#64efce62b1ccb23387ca91cdc2c047eb">biosPramBlock</a>
+<li>fbs
+: <a class="el" href="unioncache__t.html#0691515e5d969f98c4285bfe0c16a309">cache_t</a>
+<li>fileSize
+: <a class="el" href="structdirectory_entry.html#c2445d99b50f925f662952e0ccd26a02">directoryEntry</a>
+<li>fileSystemType
+: <a class="el" href="structfat16_boot_sector.html#2560e224655487af388c10164bdc7460">fat16BootSector</a>
+<li>firstClusterHigh
+: <a class="el" href="structdirectory_entry.html#3b492598b2b05e8425d2a500443613bd">directoryEntry</a>
+<li>firstClusterLow
+: <a class="el" href="structdirectory_entry.html#74bd660417a9c3501eae353326c14bb9">directoryEntry</a>
+<li>firstSector
+: <a class="el" href="structpartition_table.html#02bbdff840c854dc96fa0b6da8589d86">partitionTable</a>
+</ul>
+<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
+<li>headCount
+: <a class="el" href="structbios_pram_block.html#1e98ae0c6468c60aedcb22fa5f9d05da">biosPramBlock</a>
+<li>hidddenSectors
+: <a class="el" href="structbios_pram_block.html#9d7ee0eec291b462a60d4c45496b770a">biosPramBlock</a>
+</ul>
+<h3><a class="anchor" name="index_j">- j -</a></h3><ul>
+<li>jmpToBootCode
+: <a class="el" href="structfat16_boot_sector.html#7d45ff0fb3255aa082e1ae9423f38e3e">fat16BootSector</a>
+</ul>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>lastAccessDate
+: <a class="el" href="structdirectory_entry.html#bca70dc5c5fcbe199fd78df010111331">directoryEntry</a>
+<li>lastWriteDate
+: <a class="el" href="structdirectory_entry.html#12b2e7cf87482a942a0b5d3df6c51468">directoryEntry</a>
+<li>lastWriteTime
+: <a class="el" href="structdirectory_entry.html#7bab435322d1928f66fbce53ee1f402d">directoryEntry</a>
+</ul>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>mbr
+: <a class="el" href="unioncache__t.html#6ac10bfb1ebb1139c448456679663bb6">cache_t</a>
+<li>mbrSig0
+: <a class="el" href="structmaster_boot_record.html#42b0b413ecb21ac5314d4f6bca05308f">masterBootRecord</a>
+<li>mbrSig1
+: <a class="el" href="structmaster_boot_record.html#afbbcb4f6a2d1181c6458d4c9603df4f">masterBootRecord</a>
+<li>mediaType
+: <a class="el" href="structbios_pram_block.html#aa3e283196dec4026b1c47dae6973452">biosPramBlock</a>
+</ul>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>name
+: <a class="el" href="structdirectory_entry.html#05dc993ea55a1a742de5970541a31ecb">directoryEntry</a>
+</ul>
+<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
+<li>oemName
+: <a class="el" href="structfat16_boot_sector.html#f9f6a82cdfc67bab94faf6b633ee98ed">fat16BootSector</a>
+</ul>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>part
+: <a class="el" href="structmaster_boot_record.html#a4e294e50f311635c10c92f4c99227c5">masterBootRecord</a>
+</ul>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>reserved1
+: <a class="el" href="structfat16_boot_sector.html#93c6c608f2df48d5732a7f4b0b5e94ed">fat16BootSector</a>
+<li>reservedNT
+: <a class="el" href="structdirectory_entry.html#fe7d00be85f3b78549b21610050da52b">directoryEntry</a>
+<li>reservedSectorCount
+: <a class="el" href="structbios_pram_block.html#adebc5ad2730a2a1c41bc8d0a4908faf">biosPramBlock</a>
+<li>rootDirEntryCount
+: <a class="el" href="structbios_pram_block.html#e362130b8f006e1c14c8d875e5970a00">biosPramBlock</a>
+</ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>sectorsPerCluster
+: <a class="el" href="structbios_pram_block.html#900eb3d3f3e629eceea296b141893654">biosPramBlock</a>
+<li>sectorsPerFat16
+: <a class="el" href="structbios_pram_block.html#8036d689f2406f8643fa02203be147bf">biosPramBlock</a>
+<li>sectorsPerTrtack
+: <a class="el" href="structbios_pram_block.html#2119c6d49546dde091fb71921275a48c">biosPramBlock</a>
+</ul>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>totalSectors
+: <a class="el" href="structpartition_table.html#cf96e59ce648a9a0cf35751c3b6d7730">partitionTable</a>
+<li>totalSectors16
+: <a class="el" href="structbios_pram_block.html#ccefcdb9af4940c88a72c30667b1eb40">biosPramBlock</a>
+<li>totalSectors32
+: <a class="el" href="structbios_pram_block.html#2d9e2a80ad302177afa8b351b2f547ae">biosPramBlock</a>
+<li>type
+: <a class="el" href="structpartition_table.html#3861cf276c728c4dd30ca04e74197ee8">partitionTable</a>
+</ul>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>usuallyZero
+: <a class="el" href="structmaster_boot_record.html#facfc863e98f64053cd9459c6dec948f">masterBootRecord</a>
+</ul>
+<h3><a class="anchor" name="index_v">- v -</a></h3><ul>
+<li>volumeLabel
+: <a class="el" href="structfat16_boot_sector.html#a27346f56be9275ff27a5615c6a0a7c0">fat16BootSector</a>
+<li>volumeSerialNumber
+: <a class="el" href="structfat16_boot_sector.html#811881b7a2809d4981f74baf7f9c1d3c">fat16BootSector</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/globals.html b/trunk/users/bruce/SD card test/Fat16Lib/html/globals.html
new file mode 100644
index 00000000..2d8b587f
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/globals.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Class Members</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="#index_b"><span>b</span></a></li>
+ <li><a href="#index_d"><span>d</span></a></li>
+ <li><a href="#index_f"><span>f</span></a></li>
+ <li><a href="#index_m"><span>m</span></a></li>
+ <li><a href="#index_p"><span>p</span></a></li>
+ <li><a href="#index_s"><span>s</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+Here is a list of all documented file members with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
+<li>BOOTSIG0
+: <a class="el" href="_fat16structs_8h.html#f486ac496fe6acb0eec481e11832c827">Fat16structs.h</a>
+<li>BOOTSIG1
+: <a class="el" href="_fat16structs_8h.html#0ad4c211cc7ec503df6ff87dd51098f6">Fat16structs.h</a>
+<li>bpb_t
+: <a class="el" href="_fat16structs_8h.html#1f7f8992622e5a7f123e7cbef41913e8">Fat16structs.h</a>
+</ul>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>DIR_ATT_ARCHIVE
+: <a class="el" href="_fat16structs_8h.html#7a8484796aa3fd5c16efe0a836528f63">Fat16structs.h</a>
+<li>DIR_ATT_DIRECTORY
+: <a class="el" href="_fat16structs_8h.html#37b16434700a60b4ee9cf38e2a9d8e5b">Fat16structs.h</a>
+<li>DIR_ATT_HIDDEN
+: <a class="el" href="_fat16structs_8h.html#455d4c0f35acc679bd729133c888183f">Fat16structs.h</a>
+<li>DIR_ATT_LONG_NAME
+: <a class="el" href="_fat16structs_8h.html#dde4e4e151d8c966625c69d15f1b76d6">Fat16structs.h</a>
+<li>DIR_ATT_LONG_NAME_MASK
+: <a class="el" href="_fat16structs_8h.html#e78655ccef6819ec96056181a7ad4340">Fat16structs.h</a>
+<li>DIR_ATT_READ_ONLY
+: <a class="el" href="_fat16structs_8h.html#a570aa39738d2e3af5f9d20ba8cee8a3">Fat16structs.h</a>
+<li>DIR_ATT_SYSTEM
+: <a class="el" href="_fat16structs_8h.html#045a61c0460454f25c695822fc21fcc3">Fat16structs.h</a>
+<li>DIR_ATT_VOLUME_ID
+: <a class="el" href="_fat16structs_8h.html#795207af74b95f84efb649298fea6eed">Fat16structs.h</a>
+<li>DIR_NAME_0XE5
+: <a class="el" href="_fat16structs_8h.html#ea1ec80e0a55df6c0fe7a53d9c5f221b">Fat16structs.h</a>
+<li>DIR_NAME_DELETED
+: <a class="el" href="_fat16structs_8h.html#ee3b364607f1cedf1426fef50db53a5a">Fat16structs.h</a>
+<li>DIR_NAME_FREE
+: <a class="el" href="_fat16structs_8h.html#a28cb328cccf618d3b9082ce27d893a2">Fat16structs.h</a>
+<li>dir_t
+: <a class="el" href="_fat16structs_8h.html#803db59d4e16a0c54a647afc6a7954e3">Fat16structs.h</a>
+</ul>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>FAT16_DEBUG_SUPPORT
+: <a class="el" href="_fat16_config_8h.html#618f37288bd16c11fcc5d677d1d83c6f">Fat16Config.h</a>
+<li>FAT16_PRINT_SUPPORT
+: <a class="el" href="_fat16_config_8h.html#9b8f1dc22b1010eb0d16cc59bebdd792">Fat16Config.h</a>
+<li>FAT16_READ_SUPPORT
+: <a class="el" href="_fat16_config_8h.html#453e697f29eb02143d294fc1c363b05a">Fat16Config.h</a>
+<li>FAT16_SAVE_RAM
+: <a class="el" href="_fat16_config_8h.html#489774e66b14fc885d520ae787fb3f53">Fat16Config.h</a>
+<li>FAT16_SEEK_SUPPORT
+: <a class="el" href="_fat16_config_8h.html#343e8c5d4c4d5e8abbbfad802af59c08">Fat16Config.h</a>
+<li>FAT16_WRITE_SUPPORT
+: <a class="el" href="_fat16_config_8h.html#2115fb17b7fabf2e24432f05c6763be0">Fat16Config.h</a>
+<li>FAT_EOC
+: <a class="el" href="_fat16structs_8h.html#bfce2754c794d4c71e1a38786a0b0fad">Fat16structs.h</a>
+<li>FAT_LAST_USED
+: <a class="el" href="_fat16structs_8h.html#c5757e7f5bc1685c5b86bd849cfe978a">Fat16structs.h</a>
+<li>fbs_t
+: <a class="el" href="_fat16structs_8h.html#e669a1330dcbe49c59eeaf2e3def3554">Fat16structs.h</a>
+</ul>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>mbr_t
+: <a class="el" href="_fat16structs_8h.html#7c429e5097f101c8c97663d6c4155bd9">Fat16structs.h</a>
+</ul>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>PART_BOOT_ACTIVE
+: <a class="el" href="_fat16structs_8h.html#84f4a7f0235acd0e08d1efd30671dc5c">Fat16structs.h</a>
+<li>PART_BOOT_NON_BOOTABLE
+: <a class="el" href="_fat16structs_8h.html#a5c0d48522debe219f27dd02267973cd">Fat16structs.h</a>
+<li>part_t
+: <a class="el" href="_fat16structs_8h.html#37251e7d5c69a159be727a3fc8c9d0e6">Fat16structs.h</a>
+<li>PART_TYPE_DOSFAT16
+: <a class="el" href="_fat16structs_8h.html#fdde21ad3dd736c073ec7e1d74346f16">Fat16structs.h</a>
+<li>PART_TYPE_EXTDOSLBA
+: <a class="el" href="_fat16structs_8h.html#6bdc1ff84ef254d5a4c430990b5e552f">Fat16structs.h</a>
+<li>PART_TYPE_EXTENDED
+: <a class="el" href="_fat16structs_8h.html#170373ba21a09003408101f4007b8731">Fat16structs.h</a>
+<li>PART_TYPE_FAT12
+: <a class="el" href="_fat16structs_8h.html#f00f92912ea4313584607803a84d4569">Fat16structs.h</a>
+<li>PART_TYPE_FAT16
+: <a class="el" href="_fat16structs_8h.html#2df90d0387a3fc5a7bea16dad24e65aa">Fat16structs.h</a>
+<li>PART_TYPE_FAT16LBA
+: <a class="el" href="_fat16structs_8h.html#ea996586283ae556794def5168a0a5cf">Fat16structs.h</a>
+<li>PART_TYPE_FAT32
+: <a class="el" href="_fat16structs_8h.html#914508e25d96c2b25fe36bc23e8d1559">Fat16structs.h</a>
+<li>PART_TYPE_FAT32LBA
+: <a class="el" href="_fat16structs_8h.html#cb346273c1cb5598e33e939f99ca7a71">Fat16structs.h</a>
+<li>PART_TYPE_NTFS
+: <a class="el" href="_fat16structs_8h.html#8f2d3351af3f1e32145d247cc96e123d">Fat16structs.h</a>
+</ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>SD_CARD_READ_REG_SUPPORT
+: <a class="el" href="_fat16_config_8h.html#de961b0bd6714a7db5cab341bc65e50d">Fat16Config.h</a>
+<li>SD_CARD_SIZE_SUPPORT
+: <a class="el" href="_fat16_config_8h.html#6547eeea0ce8b48abe149f79e90b0a9e">Fat16Config.h</a>
+<li>SD_PROTECT_BLOCK_ZERO
+: <a class="el" href="_fat16_config_8h.html#d491a376db448bccdda45d46c08b2824">Fat16Config.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/globals_defs.html b/trunk/users/bruce/SD card test/Fat16Lib/html/globals_defs.html
new file mode 100644
index 00000000..a3dcec20
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/globals_defs.html
@@ -0,0 +1,127 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Class Members</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="#index_b"><span>b</span></a></li>
+ <li><a href="#index_d"><span>d</span></a></li>
+ <li><a href="#index_f"><span>f</span></a></li>
+ <li><a href="#index_p"><span>p</span></a></li>
+ <li><a href="#index_s"><span>s</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
+<li>BOOTSIG0
+: <a class="el" href="_fat16structs_8h.html#f486ac496fe6acb0eec481e11832c827">Fat16structs.h</a>
+<li>BOOTSIG1
+: <a class="el" href="_fat16structs_8h.html#0ad4c211cc7ec503df6ff87dd51098f6">Fat16structs.h</a>
+</ul>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>DIR_ATT_ARCHIVE
+: <a class="el" href="_fat16structs_8h.html#7a8484796aa3fd5c16efe0a836528f63">Fat16structs.h</a>
+<li>DIR_ATT_DIRECTORY
+: <a class="el" href="_fat16structs_8h.html#37b16434700a60b4ee9cf38e2a9d8e5b">Fat16structs.h</a>
+<li>DIR_ATT_HIDDEN
+: <a class="el" href="_fat16structs_8h.html#455d4c0f35acc679bd729133c888183f">Fat16structs.h</a>
+<li>DIR_ATT_LONG_NAME
+: <a class="el" href="_fat16structs_8h.html#dde4e4e151d8c966625c69d15f1b76d6">Fat16structs.h</a>
+<li>DIR_ATT_LONG_NAME_MASK
+: <a class="el" href="_fat16structs_8h.html#e78655ccef6819ec96056181a7ad4340">Fat16structs.h</a>
+<li>DIR_ATT_READ_ONLY
+: <a class="el" href="_fat16structs_8h.html#a570aa39738d2e3af5f9d20ba8cee8a3">Fat16structs.h</a>
+<li>DIR_ATT_SYSTEM
+: <a class="el" href="_fat16structs_8h.html#045a61c0460454f25c695822fc21fcc3">Fat16structs.h</a>
+<li>DIR_ATT_VOLUME_ID
+: <a class="el" href="_fat16structs_8h.html#795207af74b95f84efb649298fea6eed">Fat16structs.h</a>
+<li>DIR_NAME_0XE5
+: <a class="el" href="_fat16structs_8h.html#ea1ec80e0a55df6c0fe7a53d9c5f221b">Fat16structs.h</a>
+<li>DIR_NAME_DELETED
+: <a class="el" href="_fat16structs_8h.html#ee3b364607f1cedf1426fef50db53a5a">Fat16structs.h</a>
+<li>DIR_NAME_FREE
+: <a class="el" href="_fat16structs_8h.html#a28cb328cccf618d3b9082ce27d893a2">Fat16structs.h</a>
+</ul>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>FAT16_DEBUG_SUPPORT
+: <a class="el" href="_fat16_config_8h.html#618f37288bd16c11fcc5d677d1d83c6f">Fat16Config.h</a>
+<li>FAT16_PRINT_SUPPORT
+: <a class="el" href="_fat16_config_8h.html#9b8f1dc22b1010eb0d16cc59bebdd792">Fat16Config.h</a>
+<li>FAT16_READ_SUPPORT
+: <a class="el" href="_fat16_config_8h.html#453e697f29eb02143d294fc1c363b05a">Fat16Config.h</a>
+<li>FAT16_SAVE_RAM
+: <a class="el" href="_fat16_config_8h.html#489774e66b14fc885d520ae787fb3f53">Fat16Config.h</a>
+<li>FAT16_SEEK_SUPPORT
+: <a class="el" href="_fat16_config_8h.html#343e8c5d4c4d5e8abbbfad802af59c08">Fat16Config.h</a>
+<li>FAT16_WRITE_SUPPORT
+: <a class="el" href="_fat16_config_8h.html#2115fb17b7fabf2e24432f05c6763be0">Fat16Config.h</a>
+<li>FAT_EOC
+: <a class="el" href="_fat16structs_8h.html#bfce2754c794d4c71e1a38786a0b0fad">Fat16structs.h</a>
+<li>FAT_LAST_USED
+: <a class="el" href="_fat16structs_8h.html#c5757e7f5bc1685c5b86bd849cfe978a">Fat16structs.h</a>
+</ul>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>PART_BOOT_ACTIVE
+: <a class="el" href="_fat16structs_8h.html#84f4a7f0235acd0e08d1efd30671dc5c">Fat16structs.h</a>
+<li>PART_BOOT_NON_BOOTABLE
+: <a class="el" href="_fat16structs_8h.html#a5c0d48522debe219f27dd02267973cd">Fat16structs.h</a>
+<li>PART_TYPE_DOSFAT16
+: <a class="el" href="_fat16structs_8h.html#fdde21ad3dd736c073ec7e1d74346f16">Fat16structs.h</a>
+<li>PART_TYPE_EXTDOSLBA
+: <a class="el" href="_fat16structs_8h.html#6bdc1ff84ef254d5a4c430990b5e552f">Fat16structs.h</a>
+<li>PART_TYPE_EXTENDED
+: <a class="el" href="_fat16structs_8h.html#170373ba21a09003408101f4007b8731">Fat16structs.h</a>
+<li>PART_TYPE_FAT12
+: <a class="el" href="_fat16structs_8h.html#f00f92912ea4313584607803a84d4569">Fat16structs.h</a>
+<li>PART_TYPE_FAT16
+: <a class="el" href="_fat16structs_8h.html#2df90d0387a3fc5a7bea16dad24e65aa">Fat16structs.h</a>
+<li>PART_TYPE_FAT16LBA
+: <a class="el" href="_fat16structs_8h.html#ea996586283ae556794def5168a0a5cf">Fat16structs.h</a>
+<li>PART_TYPE_FAT32
+: <a class="el" href="_fat16structs_8h.html#914508e25d96c2b25fe36bc23e8d1559">Fat16structs.h</a>
+<li>PART_TYPE_FAT32LBA
+: <a class="el" href="_fat16structs_8h.html#cb346273c1cb5598e33e939f99ca7a71">Fat16structs.h</a>
+<li>PART_TYPE_NTFS
+: <a class="el" href="_fat16structs_8h.html#8f2d3351af3f1e32145d247cc96e123d">Fat16structs.h</a>
+</ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>SD_CARD_READ_REG_SUPPORT
+: <a class="el" href="_fat16_config_8h.html#de961b0bd6714a7db5cab341bc65e50d">Fat16Config.h</a>
+<li>SD_CARD_SIZE_SUPPORT
+: <a class="el" href="_fat16_config_8h.html#6547eeea0ce8b48abe149f79e90b0a9e">Fat16Config.h</a>
+<li>SD_PROTECT_BLOCK_ZERO
+: <a class="el" href="_fat16_config_8h.html#d491a376db448bccdda45d46c08b2824">Fat16Config.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/globals_type.html b/trunk/users/bruce/SD card test/Fat16Lib/html/globals_type.html
new file mode 100644
index 00000000..1bff199e
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/globals_type.html
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Class Members</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>File&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+&nbsp;
+<p>
+<ul>
+<li>bpb_t
+: <a class="el" href="_fat16structs_8h.html#1f7f8992622e5a7f123e7cbef41913e8">Fat16structs.h</a>
+<li>dir_t
+: <a class="el" href="_fat16structs_8h.html#803db59d4e16a0c54a647afc6a7954e3">Fat16structs.h</a>
+<li>fbs_t
+: <a class="el" href="_fat16structs_8h.html#e669a1330dcbe49c59eeaf2e3def3554">Fat16structs.h</a>
+<li>mbr_t
+: <a class="el" href="_fat16structs_8h.html#7c429e5097f101c8c97663d6c4155bd9">Fat16structs.h</a>
+<li>part_t
+: <a class="el" href="_fat16structs_8h.html#37251e7d5c69a159be727a3fc8c9d0e6">Fat16structs.h</a>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/graph_legend.html b/trunk/users/bruce/SD card test/Fat16Lib/html/graph_legend.html
new file mode 100644
index 00000000..c6562b27
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/graph_legend.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Graph Legend</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Graph Legend</h1>This page explains how to interpret the graphs that are generated by doxygen.<p>
+Consider the following example: <div class="fragment"><pre class="fragment"><span class="comment">/*! Invisible class because of truncation */</span>
+<span class="keyword">class </span>Invisible { };
+<span class="comment"></span>
+<span class="comment">/*! Truncated class, inheritance relation is hidden */</span>
+<span class="keyword">class </span>Truncated : <span class="keyword">public</span> Invisible { };
+
+<span class="comment">/* Class not documented with doxygen comments */</span>
+<span class="keyword">class </span>Undocumented { };
+<span class="comment"></span>
+<span class="comment">/*! Class that is inherited using public inheritance */</span>
+<span class="keyword">class </span>PublicBase : <span class="keyword">public</span> Truncated { };
+<span class="comment"></span>
+<span class="comment">/*! A template class */</span>
+<span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt; <span class="keyword">class </span>Templ { };
+<span class="comment"></span>
+<span class="comment">/*! Class that is inherited using protected inheritance */</span>
+<span class="keyword">class </span>ProtectedBase { };
+<span class="comment"></span>
+<span class="comment">/*! Class that is inherited using private inheritance */</span>
+<span class="keyword">class </span>PrivateBase { };
+<span class="comment"></span>
+<span class="comment">/*! Class that is used by the Inherited class */</span>
+<span class="keyword">class </span>Used { };
+<span class="comment"></span>
+<span class="comment">/*! Super class that inherits a number of other classes */</span>
+<span class="keyword">class </span>Inherited : <span class="keyword">public</span> PublicBase,
+ <span class="keyword">protected</span> ProtectedBase,
+ <span class="keyword">private</span> PrivateBase,
+ <span class="keyword">public</span> Undocumented,
+ <span class="keyword">public</span> Templ&lt;int&gt;
+{
+ <span class="keyword">private</span>:
+ Used *m_usedClass;
+};
+</pre></div> If the <code>MAX_DOT_GRAPH_HEIGHT</code> tag in the configuration file is set to 240 this will result in the following graph:<p>
+<center><div align="center">
+<img src="graph_legend.png" alt="graph_legend.png">
+</div>
+</center> <p>
+The boxes in the above graph have the following meaning: <ul>
+<li>
+A filled gray box represents the struct or class for which the graph is generated. </li>
+<li>
+A box with a black border denotes a documented struct or class. </li>
+<li>
+A box with a grey border denotes an undocumented struct or class. </li>
+<li>
+A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries. </li>
+</ul>
+The arrows have the following meaning: <ul>
+<li>
+A dark blue arrow is used to visualize a public inheritance relation between two classes. </li>
+<li>
+A dark green arrow is used for protected inheritance. </li>
+<li>
+A dark red arrow is used for private inheritance. </li>
+<li>
+A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible. </li>
+<li>
+A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance. </li>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/graph_legend.png b/trunk/users/bruce/SD card test/Fat16Lib/html/graph_legend.png
new file mode 100644
index 00000000..252b536a
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/graph_legend.png
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/hierarchy.html b/trunk/users/bruce/SD card test/Fat16Lib/html/hierarchy.html
new file mode 100644
index 00000000..b40c5ef9
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/hierarchy.html
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Hierarchical Index</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li class="current"><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Class Hierarchy</h1><a href="inherits.html">Go to the graphical class hierarchy</a>
+<p>
+This inheritance list is sorted roughly, but not completely, alphabetically:<ul>
+<li><a class="el" href="structbios_pram_block.html">biosPramBlock</a>
+<li><a class="el" href="class_block_device.html">BlockDevice</a>
+<ul>
+<li><a class="el" href="class_sd_card.html">SdCard</a>
+</ul>
+<li><a class="el" href="unioncache__t.html">cache_t</a>
+<li><a class="el" href="structdirectory_entry.html">directoryEntry</a>
+<li><a class="el" href="structfat16_boot_sector.html">fat16BootSector</a>
+<li><a class="el" href="structmaster_boot_record.html">masterBootRecord</a>
+<li><a class="el" href="structpartition_table.html">partitionTable</a>
+<li><a class="el" href="class_print.html">Print</a>
+<ul>
+<li><a class="el" href="class_fat16.html">Fat16</a>
+</ul>
+</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/index.html b/trunk/users/bruce/SD card test/Fat16Lib/html/index.html
new file mode 100644
index 00000000..7cf77019
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/index.html
@@ -0,0 +1,80 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Arduino Fat16 Library</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li class="current"><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Arduino Fat16 Library</h1>
+<p>
+<center>Copyright &copy; 2008 by William Greiman </center><h2><a class="anchor" name="Intro">
+Introduction</a></h2>
+The Arduino <a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a> Library is a minimal implementation of the FAT16 file system on standard SD flash memory cards. <a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a> supports read, write and file creation.<p>
+The <a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a> class only supports access to files in the root directory and only supports short 8.3 names. Directory time and date fields for creation, access and write are not maintained.<p>
+<a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a> was designed to use the Arduino Version 12 <a class="el" href="class_print.html" title="The Arduino core Print class.">Print</a> class which allows files to be written with <a class="el" href="class_print.html#6309cc0fb10c5f50517069ae86bf60d7">print() </a> and <a class="el" href="class_print.html#525b37c566658ff8113a067f6e8d5bf1">println()</a>.<p>
+It should be possible to use <a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a> with storage devices other than SD flash cards. Hardware access can be through any class derived from the <a class="el" href="class_block_device.html" title="BlockDevice is the base class for devices supported by Fat16.">BlockDevice</a> class.<h2><a class="anchor" name="Hardware">
+Hardware Configuration</a></h2>
+<a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a> was developed using an <a href="http://www.adafruit.com/">Adafruit Industries</a> <a href="http://ladyada.net/make/gpsshield/modules.html">GPS Shield</a>. See the <a href="http://ladyada.net/make/gpsshield/download.html">Schematic </a> for details.<h2><a class="anchor" name="Warning">
+Warning</a></h2>
+<a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a> has been tested with several SD Cards but is bound to contain many bugs. In most companies this would be called pre-alpha software. I hope people will try it and send me comments.<h2><a class="anchor" name="comment">
+Bugs and Comments</a></h2>
+If you wish to report bugs or have comments, send email to <a href="mailto:fat16lib@sbcglobal.net">fat16lib@sbcglobal.net</a>.<h2><a class="anchor" name="Fat16Class">
+Fat16 Usage</a></h2>
+The class <a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a> is a minimal implementation of FAT16 on standard SD cards. High Capacity SD cards, SDHC, are not supported. It should work on all standard cards from 8MB to 2GB formatted with a FAT16 file system.<p>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>The Arduino <a class="el" href="class_print.html" title="The Arduino core Print class.">Print</a> class uses character at a time writes so it was necessary to use a <a class="el" href="class_fat16.html#a8919ff5c1b3e5470dbd38a6f7710d20">sync() </a> function to control when data is written to the SD card.</dd></dl>
+<dl class="user" compact><dt><b></b></dt><dd>An application which writes to a file using <a class="el" href="class_print.html#6309cc0fb10c5f50517069ae86bf60d7">print()</a>, <a class="el" href="class_print.html#525b37c566658ff8113a067f6e8d5bf1">println() </a> or <a class="el" href="class_fat16.html#d1cfc594294d7dafd2e77377252d82c9">write() </a> must call <a class="el" href="class_fat16.html#a8919ff5c1b3e5470dbd38a6f7710d20">sync() </a> at the appropriate time to force data and directory information to be written to the SD Card. Data and directory information are also written to the SD card when <a class="el" href="class_fat16.html#ae3355bf1e93e732a64149663133161a">close() </a> is called.</dd></dl>
+<dl class="user" compact><dt><b></b></dt><dd>Applications must use care calling <a class="el" href="class_fat16.html#a8919ff5c1b3e5470dbd38a6f7710d20">sync() </a> since 2048 bytes of I/O is required to update file and directory information. This includes writing the current data block, reading the block that contains the directory entry for update, writing the directory block back and reading back the current data block.</dd></dl>
+<a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a> only supports access to files in the root directory and only supports short 8.3 names.<p>
+It is possible to open a file with two or more instances of <a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a>. A file may be corrupted if data is written to the file by more than one instance of <a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a>.<p>
+Short names are limited to 8 characters followed by an optional period (.) and extension of up to 3 characters. The characters may be any combination of letters and digits. The following special characters are also allowed:<p>
+$ % ' - _ @ ~ ` ! ( ) { } ^ # &amp;<p>
+Short names are always converted to upper case and their original case value is lost.<p>
+<a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a> uses a slightly restricted form of short names. Only printable ASCII characters are supported. No characters with code point values greater than 127 are allowed. Space is not allowed even though space was allowed in the API of early versions of DOS.<p>
+<a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a> has been optimized for The Arduino ATmega168. Minimizing RAM use is the highest priority goal followed by flash use and finally performance. Most SD cards only support 512 byte block write operations so a 512 byte cache buffer is used by <a class="el" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library.">Fat16</a>. This is the main use of RAM. A small amount of RAM is used to store key volume and file information. Flash memory usage can be controlled by selecting options in <a class="el" href="_fat16_config_8h.html">Fat16Config.h</a>.<h2><a class="anchor" name="HowTo">
+How to format SD Cards as FAT16 Volumes</a></h2>
+Microsoft operating systems support removable media formatted with a Master Boot Record, MBR, or formatted as a super floppy with a FAT Boot Sector in block zero.<p>
+Microsoft operating systems expect MBR formatted removable media to have only one partition. The first partition should be used.<p>
+Microsoft operating systems do not support partitioning SD flash cards. If you erase an SD card with a program like KillDisk, Most versions of Windows will format the card as a super floppy.<p>
+The best way to restore an SD card's MBR is to use SDFormatter which can be downloaded from:<p>
+<a href="http://www.sdcard.org/consumers/formatter/">http://www.sdcard.org/consumers/formatter/</a><p>
+SDFormatter does not have an option for FAT type so it may format small cards as FAT12 and larger cards as FAT32.<p>
+After the MBR is restored by SDFormatter you can reformat it and force the volume type to be FAT16 by selecting the FAT option on XP or specifying the "Allocation unit size" on Vista.<p>
+The FAT type, FAT12, FAT16, or FAT32, is determined by the count of clusters on the volume and nothing else.<p>
+Microsoft published the following code for determining FAT type:<p>
+<div class="fragment"><pre class="fragment"><span class="keywordflow">if</span> (CountOfClusters &lt; 4085) {
+ <span class="comment">// Volume is FAT12</span>
+}
+<span class="keywordflow">else</span> <span class="keywordflow">if</span> (CountOfClusters &lt; 65525) {
+ <span class="comment">// Volume is FAT16</span>
+}
+<span class="keywordflow">else</span> {
+ <span class="comment">// Volume is FAT32</span>
+}
+</pre></div> When you format a FAT volume, choose a cluster size that will result in:<p>
+4084 &lt; CountOfClusters &amp;&amp; CountOfClusters &lt; 65525<p>
+The volume will then be FAT16.<p>
+If you are formatting an SD card on OS X or Linux, be sure to use the first partition. Format this partition with a cluster count in above range.<h2><a class="anchor" name="References">
+References</a></h2>
+The Arduino site:<p>
+<a href="http://www.arduino.cc/">http://www.arduino.cc/</a><p>
+For more information about FAT file systems see:<p>
+<a href="http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx">http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx</a><p>
+For information about using SD cards as SPI devices see:<p>
+<a href="http://www.sdcard.org/developers/tech/sdcard/pls/Simplified_Physical_Layer_Spec.pdf">http://www.sdcard.org/developers/tech/sdcard/pls/Simplified_Physical_Layer_Spec.pdf</a><p>
+The ATmega168 datasheet:<p>
+<a href="http://www.atmel.com/dyn/resources/prod_documents/doc8025.pdf">http://www.atmel.com/dyn/resources/prod_documents/doc8025.pdf</a> </div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__0.png b/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__0.png
new file mode 100644
index 00000000..ff69afd1
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__0.png
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__1.png b/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__1.png
new file mode 100644
index 00000000..c102f3b2
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__1.png
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__2.png b/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__2.png
new file mode 100644
index 00000000..74421f54
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__2.png
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__3.png b/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__3.png
new file mode 100644
index 00000000..1e6c58b5
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__3.png
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__4.png b/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__4.png
new file mode 100644
index 00000000..2bf04889
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__4.png
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__5.png b/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__5.png
new file mode 100644
index 00000000..f7a08567
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__5.png
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__6.png b/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__6.png
new file mode 100644
index 00000000..f9940915
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__6.png
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__7.png b/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__7.png
new file mode 100644
index 00000000..09fbfc76
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/inherit__graph__7.png
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/inherits.html b/trunk/users/bruce/SD card test/Fat16Lib/html/inherits.html
new file mode 100644
index 00000000..c1e9c7d7
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/inherits.html
@@ -0,0 +1,58 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Graphical Class Hierarchy</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li class="current"><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>Graphical Class Hierarchy</h1><a href="hierarchy.html">Go to the textual class hierarchy</a>
+<p>
+<table border="0" cellspacing="10" cellpadding="0">
+<tr><td><img src="inherit__graph__0.png" border="0" alt="" usemap="#bios_pram_block_map">
+<map name="bios_pram_block_map">
+<area shape="rect" href="structbios_pram_block.html" title="Structure that defines a FAT16 volume." alt="" coords="5,5,115,32"> </map></td></tr>
+<tr><td><img src="inherit__graph__1.png" border="0" alt="" usemap="#_block_device_map">
+<map name="_block_device_map">
+<area shape="rect" href="class_block_device.html" title="BlockDevice is the base class for devices supported by Fat16." alt="" coords="7,5,97,32"> <area shape="rect" href="class_sd_card.html" title="Hardware access class for SD flash cards." alt="" coords="147,5,211,32"> </map></td></tr>
+<tr><td><img src="inherit__graph__2.png" border="0" alt="" usemap="#cache__t_map">
+<map name="cache__t_map">
+<area shape="rect" href="unioncache__t.html" title="Cache buffer data type." alt="" coords="7,5,73,32"> </map></td></tr>
+<tr><td><img src="inherit__graph__3.png" border="0" alt="" usemap="#directory_entry_map">
+<map name="directory_entry_map">
+<area shape="rect" href="structdirectory_entry.html" title="FAT short directory entry." alt="" coords="7,5,108,32"> </map></td></tr>
+<tr><td><img src="inherit__graph__4.png" border="0" alt="" usemap="#fat16_boot_sector_map">
+<map name="fat16_boot_sector_map">
+<area shape="rect" href="structfat16_boot_sector.html" title="Boot Sector of a FAT16 volume." alt="" coords="5,5,120,32"> </map></td></tr>
+<tr><td><img src="inherit__graph__5.png" border="0" alt="" usemap="#master_boot_record_map">
+<map name="master_boot_record_map">
+<area shape="rect" href="structmaster_boot_record.html" title="Master Boot Record." alt="" coords="7,5,135,32"> </map></td></tr>
+<tr><td><img src="inherit__graph__6.png" border="0" alt="" usemap="#partition_table_map">
+<map name="partition_table_map">
+<area shape="rect" href="structpartition_table.html" title="MBR partition table entry." alt="" coords="5,5,104,32"> </map></td></tr>
+<tr><td><img src="inherit__graph__7.png" border="0" alt="" usemap="#_print_map">
+<map name="_print_map">
+<area shape="rect" href="class_print.html" title="The Arduino core Print class." alt="" coords="5,5,53,32"> <area shape="rect" href="class_fat16.html" title="Fat16 implements a minimal Arduino FAT16 Library." alt="" coords="103,5,156,32"> </map></td></tr>
+</table>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/structbios_pram_block-members.html b/trunk/users/bruce/SD card test/Fat16Lib/html/structbios_pram_block-members.html
new file mode 100644
index 00000000..cca65663
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/structbios_pram_block-members.html
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>biosPramBlock Member List</h1>This is the complete list of members for <a class="el" href="structbios_pram_block.html">biosPramBlock</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="structbios_pram_block.html#ca83605eeb8377731a24fd0e798601ba">bytesPerSector</a></td><td><a class="el" href="structbios_pram_block.html">biosPramBlock</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structbios_pram_block.html#64efce62b1ccb23387ca91cdc2c047eb">fatCount</a></td><td><a class="el" href="structbios_pram_block.html">biosPramBlock</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structbios_pram_block.html#1e98ae0c6468c60aedcb22fa5f9d05da">headCount</a></td><td><a class="el" href="structbios_pram_block.html">biosPramBlock</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structbios_pram_block.html#9d7ee0eec291b462a60d4c45496b770a">hidddenSectors</a></td><td><a class="el" href="structbios_pram_block.html">biosPramBlock</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structbios_pram_block.html#aa3e283196dec4026b1c47dae6973452">mediaType</a></td><td><a class="el" href="structbios_pram_block.html">biosPramBlock</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structbios_pram_block.html#adebc5ad2730a2a1c41bc8d0a4908faf">reservedSectorCount</a></td><td><a class="el" href="structbios_pram_block.html">biosPramBlock</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structbios_pram_block.html#e362130b8f006e1c14c8d875e5970a00">rootDirEntryCount</a></td><td><a class="el" href="structbios_pram_block.html">biosPramBlock</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structbios_pram_block.html#900eb3d3f3e629eceea296b141893654">sectorsPerCluster</a></td><td><a class="el" href="structbios_pram_block.html">biosPramBlock</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structbios_pram_block.html#8036d689f2406f8643fa02203be147bf">sectorsPerFat16</a></td><td><a class="el" href="structbios_pram_block.html">biosPramBlock</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structbios_pram_block.html#2119c6d49546dde091fb71921275a48c">sectorsPerTrtack</a></td><td><a class="el" href="structbios_pram_block.html">biosPramBlock</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structbios_pram_block.html#ccefcdb9af4940c88a72c30667b1eb40">totalSectors16</a></td><td><a class="el" href="structbios_pram_block.html">biosPramBlock</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structbios_pram_block.html#2d9e2a80ad302177afa8b351b2f547ae">totalSectors32</a></td><td><a class="el" href="structbios_pram_block.html">biosPramBlock</a></td><td></td></tr>
+</table></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/structbios_pram_block.html b/trunk/users/bruce/SD card test/Fat16Lib/html/structbios_pram_block.html
new file mode 100644
index 00000000..1646887a
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/structbios_pram_block.html
@@ -0,0 +1,251 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: biosPramBlock Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>biosPramBlock Struct Reference</h1><!-- doxytag: class="biosPramBlock" -->Structure that defines a FAT16 volume.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;Fat16structs.h&gt;</code>
+<p>
+
+<p>
+<a href="structbios_pram_block-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structbios_pram_block.html#ca83605eeb8377731a24fd0e798601ba">bytesPerSector</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structbios_pram_block.html#900eb3d3f3e629eceea296b141893654">sectorsPerCluster</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structbios_pram_block.html#adebc5ad2730a2a1c41bc8d0a4908faf">reservedSectorCount</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structbios_pram_block.html#64efce62b1ccb23387ca91cdc2c047eb">fatCount</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structbios_pram_block.html#e362130b8f006e1c14c8d875e5970a00">rootDirEntryCount</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structbios_pram_block.html#ccefcdb9af4940c88a72c30667b1eb40">totalSectors16</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structbios_pram_block.html#aa3e283196dec4026b1c47dae6973452">mediaType</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structbios_pram_block.html#8036d689f2406f8643fa02203be147bf">sectorsPerFat16</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structbios_pram_block.html#2119c6d49546dde091fb71921275a48c">sectorsPerTrtack</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structbios_pram_block.html#1e98ae0c6468c60aedcb22fa5f9d05da">headCount</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structbios_pram_block.html#9d7ee0eec291b462a60d4c45496b770a">hidddenSectors</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structbios_pram_block.html#2d9e2a80ad302177afa8b351b2f547ae">totalSectors32</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Structure that defines a FAT16 volume.
+<p>
+See FAT boot sector for entire block. <hr><h2>Member Data Documentation</h2>
+<a class="anchor" name="ca83605eeb8377731a24fd0e798601ba"></a><!-- doxytag: member="biosPramBlock::bytesPerSector" ref="ca83605eeb8377731a24fd0e798601ba" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint16_t <a class="el" href="structbios_pram_block.html#ca83605eeb8377731a24fd0e798601ba">biosPramBlock::bytesPerSector</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Count of bytes per sector. This value may take on only the following values: 512, 1024, 2048 or 4096
+</div>
+</div><p>
+<a class="anchor" name="900eb3d3f3e629eceea296b141893654"></a><!-- doxytag: member="biosPramBlock::sectorsPerCluster" ref="900eb3d3f3e629eceea296b141893654" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structbios_pram_block.html#900eb3d3f3e629eceea296b141893654">biosPramBlock::sectorsPerCluster</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Number of sectors per allocation unit. This value must be a power of 2 that is greater than 0. The legal values are 1, 2, 4, 8, 16, 32, 64, and 128.
+</div>
+</div><p>
+<a class="anchor" name="adebc5ad2730a2a1c41bc8d0a4908faf"></a><!-- doxytag: member="biosPramBlock::reservedSectorCount" ref="adebc5ad2730a2a1c41bc8d0a4908faf" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint16_t <a class="el" href="structbios_pram_block.html#adebc5ad2730a2a1c41bc8d0a4908faf">biosPramBlock::reservedSectorCount</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Number of sectors before the first FAT. This value must not be zero.
+</div>
+</div><p>
+<a class="anchor" name="64efce62b1ccb23387ca91cdc2c047eb"></a><!-- doxytag: member="biosPramBlock::fatCount" ref="64efce62b1ccb23387ca91cdc2c047eb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structbios_pram_block.html#64efce62b1ccb23387ca91cdc2c047eb">biosPramBlock::fatCount</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+The count of FAT data structures on the volume. This field should always contain the value 2 for any FAT volume of any type.
+</div>
+</div><p>
+<a class="anchor" name="e362130b8f006e1c14c8d875e5970a00"></a><!-- doxytag: member="biosPramBlock::rootDirEntryCount" ref="e362130b8f006e1c14c8d875e5970a00" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint16_t <a class="el" href="structbios_pram_block.html#e362130b8f006e1c14c8d875e5970a00">biosPramBlock::rootDirEntryCount</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+For FAT12 and FAT16 volumes, this field contains the count of 32-byte directory entries in the root directory. For FAT32 volumes, this field must be set to 0. For FAT12 and FAT16 volumes, this value should always specify a count that when multiplied by 32 results in a multiple of bytesPerSector. FAT16 volumes should use the value 512.
+</div>
+</div><p>
+<a class="anchor" name="ccefcdb9af4940c88a72c30667b1eb40"></a><!-- doxytag: member="biosPramBlock::totalSectors16" ref="ccefcdb9af4940c88a72c30667b1eb40" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint16_t <a class="el" href="structbios_pram_block.html#ccefcdb9af4940c88a72c30667b1eb40">biosPramBlock::totalSectors16</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+This field is the old 16-bit total count of sectors on the volume. This count includes the count of all sectors in all four regions of the volume. This field can be 0; if it is 0, then totalSectors32 must be non-zero. For FAT32 volumes, this field must be 0. For FAT12 and FAT16 volumes, this field contains the sector count, and totalSectors32 is 0 if the total sector count fits (is less than 0x10000).
+</div>
+</div><p>
+<a class="anchor" name="aa3e283196dec4026b1c47dae6973452"></a><!-- doxytag: member="biosPramBlock::mediaType" ref="aa3e283196dec4026b1c47dae6973452" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structbios_pram_block.html#aa3e283196dec4026b1c47dae6973452">biosPramBlock::mediaType</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+This dates back to the old MS-DOS 1.x media determination and is no longer usually used for anything. 0xF8 is the standard value for fixed (non-removable) media. For removable media, 0xF0 is frequently used. Legal values are 0xF0 or 0xF8-0xFF.
+</div>
+</div><p>
+<a class="anchor" name="8036d689f2406f8643fa02203be147bf"></a><!-- doxytag: member="biosPramBlock::sectorsPerFat16" ref="8036d689f2406f8643fa02203be147bf" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint16_t <a class="el" href="structbios_pram_block.html#8036d689f2406f8643fa02203be147bf">biosPramBlock::sectorsPerFat16</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+This field is the FAT12/FAT16 16-bit count of sectors occupied by ONE FAT. On FAT32 volumes this field must be 0, and sectorsPerFat32 contains the FAT size count.
+</div>
+</div><p>
+<a class="anchor" name="2119c6d49546dde091fb71921275a48c"></a><!-- doxytag: member="biosPramBlock::sectorsPerTrtack" ref="2119c6d49546dde091fb71921275a48c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint16_t <a class="el" href="structbios_pram_block.html#2119c6d49546dde091fb71921275a48c">biosPramBlock::sectorsPerTrtack</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Sectors per track for interrupt 0x13. Not used otherwise.
+</div>
+</div><p>
+<a class="anchor" name="1e98ae0c6468c60aedcb22fa5f9d05da"></a><!-- doxytag: member="biosPramBlock::headCount" ref="1e98ae0c6468c60aedcb22fa5f9d05da" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint16_t <a class="el" href="structbios_pram_block.html#1e98ae0c6468c60aedcb22fa5f9d05da">biosPramBlock::headCount</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Number of heads for interrupt 0x13. Not used otherwise.
+</div>
+</div><p>
+<a class="anchor" name="9d7ee0eec291b462a60d4c45496b770a"></a><!-- doxytag: member="biosPramBlock::hidddenSectors" ref="9d7ee0eec291b462a60d4c45496b770a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint32_t <a class="el" href="structbios_pram_block.html#9d7ee0eec291b462a60d4c45496b770a">biosPramBlock::hidddenSectors</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Count of hidden sectors preceding the partition that contains this FAT volume. This field is generally only relevant for media visible on interrupt 0x13.
+</div>
+</div><p>
+<a class="anchor" name="2d9e2a80ad302177afa8b351b2f547ae"></a><!-- doxytag: member="biosPramBlock::totalSectors32" ref="2d9e2a80ad302177afa8b351b2f547ae" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint32_t <a class="el" href="structbios_pram_block.html#2d9e2a80ad302177afa8b351b2f547ae">biosPramBlock::totalSectors32</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+This field is the new 32-bit total count of sectors on the volume. This count includes the count of all sectors in all four regions of the volume. This field can be 0; if it is 0, then totalSectors16 must be non-zero.
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>Fat16/<a class="el" href="_fat16structs_8h.html">Fat16structs.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/structdirectory_entry-members.html b/trunk/users/bruce/SD card test/Fat16Lib/html/structdirectory_entry-members.html
new file mode 100644
index 00000000..63f8a1cc
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/structdirectory_entry-members.html
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>directoryEntry Member List</h1>This is the complete list of members for <a class="el" href="structdirectory_entry.html">directoryEntry</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="structdirectory_entry.html#16c6cde55c8175c90935c386f1cfb21a">attributes</a></td><td><a class="el" href="structdirectory_entry.html">directoryEntry</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structdirectory_entry.html#7b43372794655fe6604d3c17c02302fe">creationDate</a></td><td><a class="el" href="structdirectory_entry.html">directoryEntry</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structdirectory_entry.html#622bfa70c2cd9006108d7473d737a953">creationTime</a></td><td><a class="el" href="structdirectory_entry.html">directoryEntry</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structdirectory_entry.html#a5e1ce5b411b88f005b28a3e7c7c5af6">creationTimeTenths</a></td><td><a class="el" href="structdirectory_entry.html">directoryEntry</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structdirectory_entry.html#c2445d99b50f925f662952e0ccd26a02">fileSize</a></td><td><a class="el" href="structdirectory_entry.html">directoryEntry</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structdirectory_entry.html#3b492598b2b05e8425d2a500443613bd">firstClusterHigh</a></td><td><a class="el" href="structdirectory_entry.html">directoryEntry</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structdirectory_entry.html#74bd660417a9c3501eae353326c14bb9">firstClusterLow</a></td><td><a class="el" href="structdirectory_entry.html">directoryEntry</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structdirectory_entry.html#bca70dc5c5fcbe199fd78df010111331">lastAccessDate</a></td><td><a class="el" href="structdirectory_entry.html">directoryEntry</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structdirectory_entry.html#12b2e7cf87482a942a0b5d3df6c51468">lastWriteDate</a></td><td><a class="el" href="structdirectory_entry.html">directoryEntry</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structdirectory_entry.html#7bab435322d1928f66fbce53ee1f402d">lastWriteTime</a></td><td><a class="el" href="structdirectory_entry.html">directoryEntry</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structdirectory_entry.html#05dc993ea55a1a742de5970541a31ecb">name</a></td><td><a class="el" href="structdirectory_entry.html">directoryEntry</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structdirectory_entry.html#fe7d00be85f3b78549b21610050da52b">reservedNT</a></td><td><a class="el" href="structdirectory_entry.html">directoryEntry</a></td><td></td></tr>
+</table></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/structdirectory_entry.html b/trunk/users/bruce/SD card test/Fat16Lib/html/structdirectory_entry.html
new file mode 100644
index 00000000..2c45b820
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/structdirectory_entry.html
@@ -0,0 +1,252 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: directoryEntry Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>directoryEntry Struct Reference</h1><!-- doxytag: class="directoryEntry" -->FAT short directory entry.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;Fat16structs.h&gt;</code>
+<p>
+
+<p>
+<a href="structdirectory_entry-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdirectory_entry.html#05dc993ea55a1a742de5970541a31ecb">name</a> [11]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdirectory_entry.html#16c6cde55c8175c90935c386f1cfb21a">attributes</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdirectory_entry.html#fe7d00be85f3b78549b21610050da52b">reservedNT</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdirectory_entry.html#a5e1ce5b411b88f005b28a3e7c7c5af6">creationTimeTenths</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdirectory_entry.html#622bfa70c2cd9006108d7473d737a953">creationTime</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdirectory_entry.html#7b43372794655fe6604d3c17c02302fe">creationDate</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdirectory_entry.html#bca70dc5c5fcbe199fd78df010111331">lastAccessDate</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdirectory_entry.html#3b492598b2b05e8425d2a500443613bd">firstClusterHigh</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdirectory_entry.html#7bab435322d1928f66fbce53ee1f402d">lastWriteTime</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdirectory_entry.html#12b2e7cf87482a942a0b5d3df6c51468">lastWriteDate</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdirectory_entry.html#74bd660417a9c3501eae353326c14bb9">firstClusterLow</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdirectory_entry.html#c2445d99b50f925f662952e0ccd26a02">fileSize</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+FAT short directory entry.
+<p>
+Short means short 8.3 name, not the entry size. <hr><h2>Member Data Documentation</h2>
+<a class="anchor" name="05dc993ea55a1a742de5970541a31ecb"></a><!-- doxytag: member="directoryEntry::name" ref="05dc993ea55a1a742de5970541a31ecb" args="[11]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structdirectory_entry.html#05dc993ea55a1a742de5970541a31ecb">directoryEntry::name</a>[11] </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Short 8.3 name. The first eight bytes contain the file name with blank fill. The last three bytes contain the file extension with blank fill.
+</div>
+</div><p>
+<a class="anchor" name="16c6cde55c8175c90935c386f1cfb21a"></a><!-- doxytag: member="directoryEntry::attributes" ref="16c6cde55c8175c90935c386f1cfb21a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structdirectory_entry.html#16c6cde55c8175c90935c386f1cfb21a">directoryEntry::attributes</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Entry attributes.<p>
+The upper two bits of the attribute byte are reserved and should always be set to 0 when a file is created and never modified or looked at after that. See defines that begin with DIR_ATT_.
+</div>
+</div><p>
+<a class="anchor" name="fe7d00be85f3b78549b21610050da52b"></a><!-- doxytag: member="directoryEntry::reservedNT" ref="fe7d00be85f3b78549b21610050da52b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structdirectory_entry.html#fe7d00be85f3b78549b21610050da52b">directoryEntry::reservedNT</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Reserved for use by Windows NT. Set value to 0 when a file is created and never modify or look at it after that.
+</div>
+</div><p>
+<a class="anchor" name="a5e1ce5b411b88f005b28a3e7c7c5af6"></a><!-- doxytag: member="directoryEntry::creationTimeTenths" ref="a5e1ce5b411b88f005b28a3e7c7c5af6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structdirectory_entry.html#a5e1ce5b411b88f005b28a3e7c7c5af6">directoryEntry::creationTimeTenths</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+The granularity of the seconds part of creationTime is 2 seconds so this field is a count of tenths of a second and its valid value range is 0-199 inclusive.
+</div>
+</div><p>
+<a class="anchor" name="622bfa70c2cd9006108d7473d737a953"></a><!-- doxytag: member="directoryEntry::creationTime" ref="622bfa70c2cd9006108d7473d737a953" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint16_t <a class="el" href="structdirectory_entry.html#622bfa70c2cd9006108d7473d737a953">directoryEntry::creationTime</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Time file was created.
+</div>
+</div><p>
+<a class="anchor" name="7b43372794655fe6604d3c17c02302fe"></a><!-- doxytag: member="directoryEntry::creationDate" ref="7b43372794655fe6604d3c17c02302fe" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint16_t <a class="el" href="structdirectory_entry.html#7b43372794655fe6604d3c17c02302fe">directoryEntry::creationDate</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Date file was created.
+</div>
+</div><p>
+<a class="anchor" name="bca70dc5c5fcbe199fd78df010111331"></a><!-- doxytag: member="directoryEntry::lastAccessDate" ref="bca70dc5c5fcbe199fd78df010111331" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint16_t <a class="el" href="structdirectory_entry.html#bca70dc5c5fcbe199fd78df010111331">directoryEntry::lastAccessDate</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Last access date. Note that there is no last access time, only a date. This is the date of last read or write. In the case of a write, this should be set to the same date as lastWriteDate.
+</div>
+</div><p>
+<a class="anchor" name="3b492598b2b05e8425d2a500443613bd"></a><!-- doxytag: member="directoryEntry::firstClusterHigh" ref="3b492598b2b05e8425d2a500443613bd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint16_t <a class="el" href="structdirectory_entry.html#3b492598b2b05e8425d2a500443613bd">directoryEntry::firstClusterHigh</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+High word of this entry�s first cluster number (always 0 for a FAT12 or FAT16 volume).
+</div>
+</div><p>
+<a class="anchor" name="7bab435322d1928f66fbce53ee1f402d"></a><!-- doxytag: member="directoryEntry::lastWriteTime" ref="7bab435322d1928f66fbce53ee1f402d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint16_t <a class="el" href="structdirectory_entry.html#7bab435322d1928f66fbce53ee1f402d">directoryEntry::lastWriteTime</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Time of last write. File creation is considered a write.
+</div>
+</div><p>
+<a class="anchor" name="12b2e7cf87482a942a0b5d3df6c51468"></a><!-- doxytag: member="directoryEntry::lastWriteDate" ref="12b2e7cf87482a942a0b5d3df6c51468" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint16_t <a class="el" href="structdirectory_entry.html#12b2e7cf87482a942a0b5d3df6c51468">directoryEntry::lastWriteDate</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Date of last write. File creation is considered a write.
+</div>
+</div><p>
+<a class="anchor" name="74bd660417a9c3501eae353326c14bb9"></a><!-- doxytag: member="directoryEntry::firstClusterLow" ref="74bd660417a9c3501eae353326c14bb9" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint16_t <a class="el" href="structdirectory_entry.html#74bd660417a9c3501eae353326c14bb9">directoryEntry::firstClusterLow</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Low word of this entry�s first cluster number.
+</div>
+</div><p>
+<a class="anchor" name="c2445d99b50f925f662952e0ccd26a02"></a><!-- doxytag: member="directoryEntry::fileSize" ref="c2445d99b50f925f662952e0ccd26a02" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint32_t <a class="el" href="structdirectory_entry.html#c2445d99b50f925f662952e0ccd26a02">directoryEntry::fileSize</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+32-bit unsigned holding this file�s size in bytes.
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>Fat16/<a class="el" href="_fat16structs_8h.html">Fat16structs.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/structfat16_boot_sector-members.html b/trunk/users/bruce/SD card test/Fat16Lib/html/structfat16_boot_sector-members.html
new file mode 100644
index 00000000..58f52d48
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/structfat16_boot_sector-members.html
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>fat16BootSector Member List</h1>This is the complete list of members for <a class="el" href="structfat16_boot_sector.html">fat16BootSector</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="structfat16_boot_sector.html#07e9a439190269e722d082e0bee20d87">bootCode</a></td><td><a class="el" href="structfat16_boot_sector.html">fat16BootSector</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structfat16_boot_sector.html#c4f3001933678e731123014c541a40cd">bootSectorSig0</a></td><td><a class="el" href="structfat16_boot_sector.html">fat16BootSector</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structfat16_boot_sector.html#0a95c781a681feef4b4ab5341a38addd">bootSectorSig1</a></td><td><a class="el" href="structfat16_boot_sector.html">fat16BootSector</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structfat16_boot_sector.html#a37cbfa36c3017f612dee3bcd378a229">bootSignature</a></td><td><a class="el" href="structfat16_boot_sector.html">fat16BootSector</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structfat16_boot_sector.html#2db37b8c273a1ce0828a208d41cfc032">bpb</a></td><td><a class="el" href="structfat16_boot_sector.html">fat16BootSector</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structfat16_boot_sector.html#38168b31c3cde1273821e95899f19b54">driveNumber</a></td><td><a class="el" href="structfat16_boot_sector.html">fat16BootSector</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structfat16_boot_sector.html#2560e224655487af388c10164bdc7460">fileSystemType</a></td><td><a class="el" href="structfat16_boot_sector.html">fat16BootSector</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structfat16_boot_sector.html#7d45ff0fb3255aa082e1ae9423f38e3e">jmpToBootCode</a></td><td><a class="el" href="structfat16_boot_sector.html">fat16BootSector</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structfat16_boot_sector.html#f9f6a82cdfc67bab94faf6b633ee98ed">oemName</a></td><td><a class="el" href="structfat16_boot_sector.html">fat16BootSector</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structfat16_boot_sector.html#93c6c608f2df48d5732a7f4b0b5e94ed">reserved1</a></td><td><a class="el" href="structfat16_boot_sector.html">fat16BootSector</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structfat16_boot_sector.html#a27346f56be9275ff27a5615c6a0a7c0">volumeLabel</a></td><td><a class="el" href="structfat16_boot_sector.html">fat16BootSector</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structfat16_boot_sector.html#811881b7a2809d4981f74baf7f9c1d3c">volumeSerialNumber</a></td><td><a class="el" href="structfat16_boot_sector.html">fat16BootSector</a></td><td></td></tr>
+</table></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/structfat16_boot_sector.html b/trunk/users/bruce/SD card test/Fat16Lib/html/structfat16_boot_sector.html
new file mode 100644
index 00000000..20a06d39
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/structfat16_boot_sector.html
@@ -0,0 +1,256 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: fat16BootSector Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>fat16BootSector Struct Reference</h1><!-- doxytag: class="fat16BootSector" -->Boot Sector of a FAT16 volume.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;Fat16structs.h&gt;</code>
+<p>
+<div class="dynheader">
+Collaboration diagram for fat16BootSector:</div>
+<div class="dynsection">
+<p><center><img src="structfat16_boot_sector__coll__graph.png" border="0" usemap="#fat16_boot_sector__coll__map" alt="Collaboration graph"></center>
+<map name="fat16_boot_sector__coll__map">
+<area shape="rect" href="structbios_pram_block.html" title="Structure that defines a FAT16 volume." alt="" coords="8,5,117,32"> </map>
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>
+
+<p>
+<a href="structfat16_boot_sector-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfat16_boot_sector.html#7d45ff0fb3255aa082e1ae9423f38e3e">jmpToBootCode</a> [3]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfat16_boot_sector.html#f9f6a82cdfc67bab94faf6b633ee98ed">oemName</a> [8]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structbios_pram_block.html">bpb_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfat16_boot_sector.html#2db37b8c273a1ce0828a208d41cfc032">bpb</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfat16_boot_sector.html#38168b31c3cde1273821e95899f19b54">driveNumber</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfat16_boot_sector.html#93c6c608f2df48d5732a7f4b0b5e94ed">reserved1</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfat16_boot_sector.html#a37cbfa36c3017f612dee3bcd378a229">bootSignature</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfat16_boot_sector.html#811881b7a2809d4981f74baf7f9c1d3c">volumeSerialNumber</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfat16_boot_sector.html#a27346f56be9275ff27a5615c6a0a7c0">volumeLabel</a> [11]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfat16_boot_sector.html#2560e224655487af388c10164bdc7460">fileSystemType</a> [8]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfat16_boot_sector.html#07e9a439190269e722d082e0bee20d87">bootCode</a> [448]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfat16_boot_sector.html#c4f3001933678e731123014c541a40cd">bootSectorSig0</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfat16_boot_sector.html#0a95c781a681feef4b4ab5341a38addd">bootSectorSig1</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Boot Sector of a FAT16 volume. <hr><h2>Member Data Documentation</h2>
+<a class="anchor" name="7d45ff0fb3255aa082e1ae9423f38e3e"></a><!-- doxytag: member="fat16BootSector::jmpToBootCode" ref="7d45ff0fb3255aa082e1ae9423f38e3e" args="[3]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structfat16_boot_sector.html#7d45ff0fb3255aa082e1ae9423f38e3e">fat16BootSector::jmpToBootCode</a>[3] </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+X86 jmp to boot program
+</div>
+</div><p>
+<a class="anchor" name="f9f6a82cdfc67bab94faf6b633ee98ed"></a><!-- doxytag: member="fat16BootSector::oemName" ref="f9f6a82cdfc67bab94faf6b633ee98ed" args="[8]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char <a class="el" href="structfat16_boot_sector.html#f9f6a82cdfc67bab94faf6b633ee98ed">fat16BootSector::oemName</a>[8] </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+informational only - don't depend on it
+</div>
+</div><p>
+<a class="anchor" name="2db37b8c273a1ce0828a208d41cfc032"></a><!-- doxytag: member="fat16BootSector::bpb" ref="2db37b8c273a1ce0828a208d41cfc032" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structbios_pram_block.html">bpb_t</a> <a class="el" href="structfat16_boot_sector.html#2db37b8c273a1ce0828a208d41cfc032">fat16BootSector::bpb</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+BIOS Pramameter Block
+</div>
+</div><p>
+<a class="anchor" name="38168b31c3cde1273821e95899f19b54"></a><!-- doxytag: member="fat16BootSector::driveNumber" ref="38168b31c3cde1273821e95899f19b54" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structfat16_boot_sector.html#38168b31c3cde1273821e95899f19b54">fat16BootSector::driveNumber</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+for int0x13 use value 0X80 for hard drive
+</div>
+</div><p>
+<a class="anchor" name="93c6c608f2df48d5732a7f4b0b5e94ed"></a><!-- doxytag: member="fat16BootSector::reserved1" ref="93c6c608f2df48d5732a7f4b0b5e94ed" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structfat16_boot_sector.html#93c6c608f2df48d5732a7f4b0b5e94ed">fat16BootSector::reserved1</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+used by Windows NT - should be zero for FAT16
+</div>
+</div><p>
+<a class="anchor" name="a37cbfa36c3017f612dee3bcd378a229"></a><!-- doxytag: member="fat16BootSector::bootSignature" ref="a37cbfa36c3017f612dee3bcd378a229" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structfat16_boot_sector.html#a37cbfa36c3017f612dee3bcd378a229">fat16BootSector::bootSignature</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+0X29 if next three fields are vaild
+</div>
+</div><p>
+<a class="anchor" name="811881b7a2809d4981f74baf7f9c1d3c"></a><!-- doxytag: member="fat16BootSector::volumeSerialNumber" ref="811881b7a2809d4981f74baf7f9c1d3c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint32_t <a class="el" href="structfat16_boot_sector.html#811881b7a2809d4981f74baf7f9c1d3c">fat16BootSector::volumeSerialNumber</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+usually generated by combining date and time
+</div>
+</div><p>
+<a class="anchor" name="a27346f56be9275ff27a5615c6a0a7c0"></a><!-- doxytag: member="fat16BootSector::volumeLabel" ref="a27346f56be9275ff27a5615c6a0a7c0" args="[11]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char <a class="el" href="structfat16_boot_sector.html#a27346f56be9275ff27a5615c6a0a7c0">fat16BootSector::volumeLabel</a>[11] </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+should match volume label in root dir
+</div>
+</div><p>
+<a class="anchor" name="2560e224655487af388c10164bdc7460"></a><!-- doxytag: member="fat16BootSector::fileSystemType" ref="2560e224655487af388c10164bdc7460" args="[8]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char <a class="el" href="structfat16_boot_sector.html#2560e224655487af388c10164bdc7460">fat16BootSector::fileSystemType</a>[8] </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+informational only - don't depend on it
+</div>
+</div><p>
+<a class="anchor" name="07e9a439190269e722d082e0bee20d87"></a><!-- doxytag: member="fat16BootSector::bootCode" ref="07e9a439190269e722d082e0bee20d87" args="[448]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structfat16_boot_sector.html#07e9a439190269e722d082e0bee20d87">fat16BootSector::bootCode</a>[448] </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+X86 boot code
+</div>
+</div><p>
+<a class="anchor" name="c4f3001933678e731123014c541a40cd"></a><!-- doxytag: member="fat16BootSector::bootSectorSig0" ref="c4f3001933678e731123014c541a40cd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structfat16_boot_sector.html#c4f3001933678e731123014c541a40cd">fat16BootSector::bootSectorSig0</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+must be 0X55
+</div>
+</div><p>
+<a class="anchor" name="0a95c781a681feef4b4ab5341a38addd"></a><!-- doxytag: member="fat16BootSector::bootSectorSig1" ref="0a95c781a681feef4b4ab5341a38addd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structfat16_boot_sector.html#0a95c781a681feef4b4ab5341a38addd">fat16BootSector::bootSectorSig1</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+must be 0XAA
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>Fat16/<a class="el" href="_fat16structs_8h.html">Fat16structs.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/structfat16_boot_sector__coll__graph.png b/trunk/users/bruce/SD card test/Fat16Lib/html/structfat16_boot_sector__coll__graph.png
new file mode 100644
index 00000000..b4a7a4fa
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/structfat16_boot_sector__coll__graph.png
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/structmaster_boot_record-members.html b/trunk/users/bruce/SD card test/Fat16Lib/html/structmaster_boot_record-members.html
new file mode 100644
index 00000000..8df89228
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/structmaster_boot_record-members.html
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>masterBootRecord Member List</h1>This is the complete list of members for <a class="el" href="structmaster_boot_record.html">masterBootRecord</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="structmaster_boot_record.html#26ca1fb4ebbff2cc1a54153b1dfcd688">codeArea</a></td><td><a class="el" href="structmaster_boot_record.html">masterBootRecord</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structmaster_boot_record.html#77151c641444c0653ff71a253f0423ef">diskSignature</a></td><td><a class="el" href="structmaster_boot_record.html">masterBootRecord</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structmaster_boot_record.html#42b0b413ecb21ac5314d4f6bca05308f">mbrSig0</a></td><td><a class="el" href="structmaster_boot_record.html">masterBootRecord</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structmaster_boot_record.html#afbbcb4f6a2d1181c6458d4c9603df4f">mbrSig1</a></td><td><a class="el" href="structmaster_boot_record.html">masterBootRecord</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structmaster_boot_record.html#a4e294e50f311635c10c92f4c99227c5">part</a></td><td><a class="el" href="structmaster_boot_record.html">masterBootRecord</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structmaster_boot_record.html#facfc863e98f64053cd9459c6dec948f">usuallyZero</a></td><td><a class="el" href="structmaster_boot_record.html">masterBootRecord</a></td><td></td></tr>
+</table></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/structmaster_boot_record.html b/trunk/users/bruce/SD card test/Fat16Lib/html/structmaster_boot_record.html
new file mode 100644
index 00000000..97731001
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/structmaster_boot_record.html
@@ -0,0 +1,156 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: masterBootRecord Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>masterBootRecord Struct Reference</h1><!-- doxytag: class="masterBootRecord" -->Master Boot Record.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;Fat16structs.h&gt;</code>
+<p>
+<div class="dynheader">
+Collaboration diagram for masterBootRecord:</div>
+<div class="dynsection">
+<p><center><img src="structmaster_boot_record__coll__graph.png" border="0" usemap="#master_boot_record__coll__map" alt="Collaboration graph"></center>
+<map name="master_boot_record__coll__map">
+<area shape="rect" href="structpartition_table.html" title="MBR partition table entry." alt="" coords="20,5,119,32"> </map>
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>
+
+<p>
+<a href="structmaster_boot_record-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmaster_boot_record.html#26ca1fb4ebbff2cc1a54153b1dfcd688">codeArea</a> [440]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmaster_boot_record.html#77151c641444c0653ff71a253f0423ef">diskSignature</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmaster_boot_record.html#facfc863e98f64053cd9459c6dec948f">usuallyZero</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structpartition_table.html">part_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmaster_boot_record.html#a4e294e50f311635c10c92f4c99227c5">part</a> [4]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmaster_boot_record.html#42b0b413ecb21ac5314d4f6bca05308f">mbrSig0</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmaster_boot_record.html#afbbcb4f6a2d1181c6458d4c9603df4f">mbrSig1</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Master Boot Record.
+<p>
+The first block of a storage device that is formatted with a MBR. <hr><h2>Member Data Documentation</h2>
+<a class="anchor" name="26ca1fb4ebbff2cc1a54153b1dfcd688"></a><!-- doxytag: member="masterBootRecord::codeArea" ref="26ca1fb4ebbff2cc1a54153b1dfcd688" args="[440]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structmaster_boot_record.html#26ca1fb4ebbff2cc1a54153b1dfcd688">masterBootRecord::codeArea</a>[440] </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Code Area for master boot program.
+</div>
+</div><p>
+<a class="anchor" name="77151c641444c0653ff71a253f0423ef"></a><!-- doxytag: member="masterBootRecord::diskSignature" ref="77151c641444c0653ff71a253f0423ef" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint32_t <a class="el" href="structmaster_boot_record.html#77151c641444c0653ff71a253f0423ef">masterBootRecord::diskSignature</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Optional WindowsNT disk signature. May contain more boot code.
+</div>
+</div><p>
+<a class="anchor" name="facfc863e98f64053cd9459c6dec948f"></a><!-- doxytag: member="masterBootRecord::usuallyZero" ref="facfc863e98f64053cd9459c6dec948f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint16_t <a class="el" href="structmaster_boot_record.html#facfc863e98f64053cd9459c6dec948f">masterBootRecord::usuallyZero</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Usually zero but may be more boot code.
+</div>
+</div><p>
+<a class="anchor" name="a4e294e50f311635c10c92f4c99227c5"></a><!-- doxytag: member="masterBootRecord::part" ref="a4e294e50f311635c10c92f4c99227c5" args="[4]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structpartition_table.html">part_t</a> <a class="el" href="structmaster_boot_record.html#a4e294e50f311635c10c92f4c99227c5">masterBootRecord::part</a>[4] </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Partition tables.
+</div>
+</div><p>
+<a class="anchor" name="42b0b413ecb21ac5314d4f6bca05308f"></a><!-- doxytag: member="masterBootRecord::mbrSig0" ref="42b0b413ecb21ac5314d4f6bca05308f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structmaster_boot_record.html#42b0b413ecb21ac5314d4f6bca05308f">masterBootRecord::mbrSig0</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+First MBR signature byte. Must be 0X55
+</div>
+</div><p>
+<a class="anchor" name="afbbcb4f6a2d1181c6458d4c9603df4f"></a><!-- doxytag: member="masterBootRecord::mbrSig1" ref="afbbcb4f6a2d1181c6458d4c9603df4f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structmaster_boot_record.html#afbbcb4f6a2d1181c6458d4c9603df4f">masterBootRecord::mbrSig1</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Second MBR signature byte. Must be 0XAA
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>Fat16/<a class="el" href="_fat16structs_8h.html">Fat16structs.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/structmaster_boot_record__coll__graph.png b/trunk/users/bruce/SD card test/Fat16Lib/html/structmaster_boot_record__coll__graph.png
new file mode 100644
index 00000000..a17af2ea
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/structmaster_boot_record__coll__graph.png
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/structpartition_table-members.html b/trunk/users/bruce/SD card test/Fat16Lib/html/structpartition_table-members.html
new file mode 100644
index 00000000..a485dfd4
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/structpartition_table-members.html
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>partitionTable Member List</h1>This is the complete list of members for <a class="el" href="structpartition_table.html">partitionTable</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="structpartition_table.html#744f0c7f9ad4c426b10de085b4f52392">beginCylinderHigh</a></td><td><a class="el" href="structpartition_table.html">partitionTable</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structpartition_table.html#941fcb4df298f5f73ccca011bf40787a">beginCylinderLow</a></td><td><a class="el" href="structpartition_table.html">partitionTable</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structpartition_table.html#7d426694b8cf2151ae38568670a8c845">beginHead</a></td><td><a class="el" href="structpartition_table.html">partitionTable</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structpartition_table.html#e201c11d9671c9efc307c654a2b6c026">beginSector</a></td><td><a class="el" href="structpartition_table.html">partitionTable</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structpartition_table.html#df386afb1f33046d8b6a1a0afa780ec9">boot</a></td><td><a class="el" href="structpartition_table.html">partitionTable</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structpartition_table.html#32fea225b8ffd925ad919ffc56e9abda">endCylinderHigh</a></td><td><a class="el" href="structpartition_table.html">partitionTable</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structpartition_table.html#d7829e34be70084abe145227b0d18274">endCylinderLow</a></td><td><a class="el" href="structpartition_table.html">partitionTable</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structpartition_table.html#4a3945bfd3a29f474984cb9f180dbd51">endHead</a></td><td><a class="el" href="structpartition_table.html">partitionTable</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structpartition_table.html#27cdc4320c418ed0d833ab163ed77ad7">endSector</a></td><td><a class="el" href="structpartition_table.html">partitionTable</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structpartition_table.html#02bbdff840c854dc96fa0b6da8589d86">firstSector</a></td><td><a class="el" href="structpartition_table.html">partitionTable</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structpartition_table.html#cf96e59ce648a9a0cf35751c3b6d7730">totalSectors</a></td><td><a class="el" href="structpartition_table.html">partitionTable</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="structpartition_table.html#3861cf276c728c4dd30ca04e74197ee8">type</a></td><td><a class="el" href="structpartition_table.html">partitionTable</a></td><td></td></tr>
+</table></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/structpartition_table.html b/trunk/users/bruce/SD card test/Fat16Lib/html/structpartition_table.html
new file mode 100644
index 00000000..eee2c3d9
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/structpartition_table.html
@@ -0,0 +1,251 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: partitionTable Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>partitionTable Struct Reference</h1><!-- doxytag: class="partitionTable" -->MBR partition table entry.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;Fat16structs.h&gt;</code>
+<p>
+
+<p>
+<a href="structpartition_table-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpartition_table.html#df386afb1f33046d8b6a1a0afa780ec9">boot</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpartition_table.html#7d426694b8cf2151ae38568670a8c845">beginHead</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpartition_table.html#e201c11d9671c9efc307c654a2b6c026">beginSector</a>: 6</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpartition_table.html#744f0c7f9ad4c426b10de085b4f52392">beginCylinderHigh</a>: 2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpartition_table.html#941fcb4df298f5f73ccca011bf40787a">beginCylinderLow</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpartition_table.html#3861cf276c728c4dd30ca04e74197ee8">type</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpartition_table.html#4a3945bfd3a29f474984cb9f180dbd51">endHead</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpartition_table.html#27cdc4320c418ed0d833ab163ed77ad7">endSector</a>: 6</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpartition_table.html#32fea225b8ffd925ad919ffc56e9abda">endCylinderHigh</a>: 2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpartition_table.html#d7829e34be70084abe145227b0d18274">endCylinderLow</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpartition_table.html#02bbdff840c854dc96fa0b6da8589d86">firstSector</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpartition_table.html#cf96e59ce648a9a0cf35751c3b6d7730">totalSectors</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+MBR partition table entry.
+<p>
+A partiton table entry for a MBR formatted storage device. The MBR partiton table has four entries. <hr><h2>Member Data Documentation</h2>
+<a class="anchor" name="df386afb1f33046d8b6a1a0afa780ec9"></a><!-- doxytag: member="partitionTable::boot" ref="df386afb1f33046d8b6a1a0afa780ec9" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structpartition_table.html#df386afb1f33046d8b6a1a0afa780ec9">partitionTable::boot</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Boot Indicator . Indicates whether the volume is the active partition. Legal values include: 0X00. Do not use for booting. 0X80 Active partition.
+</div>
+</div><p>
+<a class="anchor" name="7d426694b8cf2151ae38568670a8c845"></a><!-- doxytag: member="partitionTable::beginHead" ref="7d426694b8cf2151ae38568670a8c845" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structpartition_table.html#7d426694b8cf2151ae38568670a8c845">partitionTable::beginHead</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Head part of Cylinder-head-sector address of the first block in the partition. Legal values are 0-255. Only used in old PC BIOS.
+</div>
+</div><p>
+<a class="anchor" name="e201c11d9671c9efc307c654a2b6c026"></a><!-- doxytag: member="partitionTable::beginSector" ref="e201c11d9671c9efc307c654a2b6c026" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned <a class="el" href="structpartition_table.html#e201c11d9671c9efc307c654a2b6c026">partitionTable::beginSector</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Sector part of Cylinder-head-sector address of the first block in the partition. Legal values are 1-63. Only used in old PC BIOS.
+</div>
+</div><p>
+<a class="anchor" name="744f0c7f9ad4c426b10de085b4f52392"></a><!-- doxytag: member="partitionTable::beginCylinderHigh" ref="744f0c7f9ad4c426b10de085b4f52392" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned <a class="el" href="structpartition_table.html#744f0c7f9ad4c426b10de085b4f52392">partitionTable::beginCylinderHigh</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+High bits cylinder for first block in partition.
+</div>
+</div><p>
+<a class="anchor" name="941fcb4df298f5f73ccca011bf40787a"></a><!-- doxytag: member="partitionTable::beginCylinderLow" ref="941fcb4df298f5f73ccca011bf40787a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structpartition_table.html#941fcb4df298f5f73ccca011bf40787a">partitionTable::beginCylinderLow</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Combine beginCylinderLow with beginCylinderHigh. Legal values are 0-1023. Only used in old PC BIOS.
+</div>
+</div><p>
+<a class="anchor" name="3861cf276c728c4dd30ca04e74197ee8"></a><!-- doxytag: member="partitionTable::type" ref="3861cf276c728c4dd30ca04e74197ee8" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structpartition_table.html#3861cf276c728c4dd30ca04e74197ee8">partitionTable::type</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Partition type. See defines that begin with PART_TYPE_ for some Microsoft partition types.
+</div>
+</div><p>
+<a class="anchor" name="4a3945bfd3a29f474984cb9f180dbd51"></a><!-- doxytag: member="partitionTable::endHead" ref="4a3945bfd3a29f474984cb9f180dbd51" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structpartition_table.html#4a3945bfd3a29f474984cb9f180dbd51">partitionTable::endHead</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+head part of cylinder-head-sector address of the last sector in the partition. Legal values are 0-255. Only used in old PC BIOS.
+</div>
+</div><p>
+<a class="anchor" name="27cdc4320c418ed0d833ab163ed77ad7"></a><!-- doxytag: member="partitionTable::endSector" ref="27cdc4320c418ed0d833ab163ed77ad7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned <a class="el" href="structpartition_table.html#27cdc4320c418ed0d833ab163ed77ad7">partitionTable::endSector</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Sector part of cylinder-head-sector address of the last sector in the partition. Legal values are 1-63. Only used in old PC BIOS.
+</div>
+</div><p>
+<a class="anchor" name="32fea225b8ffd925ad919ffc56e9abda"></a><!-- doxytag: member="partitionTable::endCylinderHigh" ref="32fea225b8ffd925ad919ffc56e9abda" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned <a class="el" href="structpartition_table.html#32fea225b8ffd925ad919ffc56e9abda">partitionTable::endCylinderHigh</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+High bits of end cylinder
+</div>
+</div><p>
+<a class="anchor" name="d7829e34be70084abe145227b0d18274"></a><!-- doxytag: member="partitionTable::endCylinderLow" ref="d7829e34be70084abe145227b0d18274" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="structpartition_table.html#d7829e34be70084abe145227b0d18274">partitionTable::endCylinderLow</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Combine endCylinderLow with endCylinderHigh. Legal values are 0-1023. Only used in old PC BIOS.
+</div>
+</div><p>
+<a class="anchor" name="02bbdff840c854dc96fa0b6da8589d86"></a><!-- doxytag: member="partitionTable::firstSector" ref="02bbdff840c854dc96fa0b6da8589d86" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint32_t <a class="el" href="structpartition_table.html#02bbdff840c854dc96fa0b6da8589d86">partitionTable::firstSector</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Logical block address of the first block in the partition.
+</div>
+</div><p>
+<a class="anchor" name="cf96e59ce648a9a0cf35751c3b6d7730"></a><!-- doxytag: member="partitionTable::totalSectors" ref="cf96e59ce648a9a0cf35751c3b6d7730" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint32_t <a class="el" href="structpartition_table.html#cf96e59ce648a9a0cf35751c3b6d7730">partitionTable::totalSectors</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Length of the partition, in blocks.
+</div>
+</div><p>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>Fat16/<a class="el" href="_fat16structs_8h.html">Fat16structs.h</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/tab_b.gif b/trunk/users/bruce/SD card test/Fat16Lib/html/tab_b.gif
new file mode 100644
index 00000000..0d623483
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/tab_b.gif
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/tab_l.gif b/trunk/users/bruce/SD card test/Fat16Lib/html/tab_l.gif
new file mode 100644
index 00000000..9b1e6337
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/tab_l.gif
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/tab_r.gif b/trunk/users/bruce/SD card test/Fat16Lib/html/tab_r.gif
new file mode 100644
index 00000000..ce9dd9f5
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/tab_r.gif
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/tabs.css b/trunk/users/bruce/SD card test/Fat16Lib/html/tabs.css
new file mode 100644
index 00000000..95f00a91
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/tabs.css
@@ -0,0 +1,102 @@
+/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */
+
+DIV.tabs
+{
+ float : left;
+ width : 100%;
+ background : url("tab_b.gif") repeat-x bottom;
+ margin-bottom : 4px;
+}
+
+DIV.tabs UL
+{
+ margin : 0px;
+ padding-left : 10px;
+ list-style : none;
+}
+
+DIV.tabs LI, DIV.tabs FORM
+{
+ display : inline;
+ margin : 0px;
+ padding : 0px;
+}
+
+DIV.tabs FORM
+{
+ float : right;
+}
+
+DIV.tabs A
+{
+ float : left;
+ background : url("tab_r.gif") no-repeat right top;
+ border-bottom : 1px solid #84B0C7;
+ font-size : x-small;
+ font-weight : bold;
+ text-decoration : none;
+}
+
+DIV.tabs A:hover
+{
+ background-position: 100% -150px;
+}
+
+DIV.tabs A:link, DIV.tabs A:visited,
+DIV.tabs A:active, DIV.tabs A:hover
+{
+ color: #1A419D;
+}
+
+DIV.tabs SPAN
+{
+ float : left;
+ display : block;
+ background : url("tab_l.gif") no-repeat left top;
+ padding : 5px 9px;
+ white-space : nowrap;
+}
+
+DIV.tabs INPUT
+{
+ float : right;
+ display : inline;
+ font-size : 1em;
+}
+
+DIV.tabs TD
+{
+ font-size : x-small;
+ font-weight : bold;
+ text-decoration : none;
+}
+
+
+
+/* Commented Backslash Hack hides rule from IE5-Mac \*/
+DIV.tabs SPAN {float : none;}
+/* End IE5-Mac hack */
+
+DIV.tabs A:hover SPAN
+{
+ background-position: 0% -150px;
+}
+
+DIV.tabs LI.current A
+{
+ background-position: 100% -150px;
+ border-width : 0px;
+}
+
+DIV.tabs LI.current SPAN
+{
+ background-position: 0% -150px;
+ padding-bottom : 6px;
+}
+
+DIV.navpath
+{
+ background : none;
+ border : none;
+ border-bottom : 1px solid #84B0C7;
+}
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/unioncache__t-members.html b/trunk/users/bruce/SD card test/Fat16Lib/html/unioncache__t-members.html
new file mode 100644
index 00000000..a12f8f3d
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/unioncache__t-members.html
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>cache_t Member List</h1>This is the complete list of members for <a class="el" href="unioncache__t.html">cache_t</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="unioncache__t.html#e675b7a3a87d809070de111d1d1f1d81">data</a></td><td><a class="el" href="unioncache__t.html">cache_t</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="unioncache__t.html#7396fdbdb7c52bd1d72c5329ff32acd1">dir</a></td><td><a class="el" href="unioncache__t.html">cache_t</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="unioncache__t.html#51ba1b94870820dd9556a8b3108886e9">fat</a></td><td><a class="el" href="unioncache__t.html">cache_t</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="unioncache__t.html#0691515e5d969f98c4285bfe0c16a309">fbs</a></td><td><a class="el" href="unioncache__t.html">cache_t</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="unioncache__t.html#6ac10bfb1ebb1139c448456679663bb6">mbr</a></td><td><a class="el" href="unioncache__t.html">cache_t</a></td><td></td></tr>
+</table></div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/unioncache__t.html b/trunk/users/bruce/SD card test/Fat16Lib/html/unioncache__t.html
new file mode 100644
index 00000000..0b98ef6e
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/unioncache__t.html
@@ -0,0 +1,137 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Fat16: cache_t Union Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.6 -->
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>cache_t Union Reference</h1><!-- doxytag: class="cache_t" -->Cache buffer data type.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;Fat16.h&gt;</code>
+<p>
+<div class="dynheader">
+Collaboration diagram for cache_t:</div>
+<div class="dynsection">
+<p><center><img src="unioncache__t__coll__graph.png" border="0" usemap="#cache__t__coll__map" alt="Collaboration graph"></center>
+<map name="cache__t__coll__map">
+<area shape="rect" href="structdirectory_entry.html" title="FAT short directory entry." alt="" coords="5,96,107,123"> <area shape="rect" href="structfat16_boot_sector.html" title="Boot Sector of a FAT16 volume." alt="" coords="131,96,245,123"> <area shape="rect" href="structbios_pram_block.html" title="Structure that defines a FAT16 volume." alt="" coords="133,5,243,32"> <area shape="rect" href="structmaster_boot_record.html" title="Master Boot Record." alt="" coords="269,96,397,123"> <area shape="rect" href="structpartition_table.html" title="MBR partition table entry." alt="" coords="284,5,383,32"> </map>
+<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div>
+
+<p>
+<a href="unioncache__t-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="unioncache__t.html#e675b7a3a87d809070de111d1d1f1d81">data</a> [512]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">fat_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="unioncache__t.html#51ba1b94870820dd9556a8b3108886e9">fat</a> [256]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structdirectory_entry.html">dir_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="unioncache__t.html#7396fdbdb7c52bd1d72c5329ff32acd1">dir</a> [16]</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structmaster_boot_record.html">mbr_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="unioncache__t.html#6ac10bfb1ebb1139c448456679663bb6">mbr</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structfat16_boot_sector.html">fbs_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="unioncache__t.html#0691515e5d969f98c4285bfe0c16a309">fbs</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Cache buffer data type. <hr><h2>Member Data Documentation</h2>
+<a class="anchor" name="e675b7a3a87d809070de111d1d1f1d81"></a><!-- doxytag: member="cache_t::data" ref="e675b7a3a87d809070de111d1d1f1d81" args="[512]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">uint8_t <a class="el" href="unioncache__t.html#e675b7a3a87d809070de111d1d1f1d81">cache_t::data</a>[512] </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Used to access cached file data blocks.
+</div>
+</div><p>
+<a class="anchor" name="51ba1b94870820dd9556a8b3108886e9"></a><!-- doxytag: member="cache_t::fat" ref="51ba1b94870820dd9556a8b3108886e9" args="[256]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">fat_t <a class="el" href="unioncache__t.html#51ba1b94870820dd9556a8b3108886e9">cache_t::fat</a>[256] </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Used to access cached FAT entries.
+</div>
+</div><p>
+<a class="anchor" name="7396fdbdb7c52bd1d72c5329ff32acd1"></a><!-- doxytag: member="cache_t::dir" ref="7396fdbdb7c52bd1d72c5329ff32acd1" args="[16]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structdirectory_entry.html">dir_t</a> <a class="el" href="unioncache__t.html#7396fdbdb7c52bd1d72c5329ff32acd1">cache_t::dir</a>[16] </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Used to access cached directory entries.
+</div>
+</div><p>
+<a class="anchor" name="6ac10bfb1ebb1139c448456679663bb6"></a><!-- doxytag: member="cache_t::mbr" ref="6ac10bfb1ebb1139c448456679663bb6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structmaster_boot_record.html">mbr_t</a> <a class="el" href="unioncache__t.html#6ac10bfb1ebb1139c448456679663bb6">cache_t::mbr</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Used to access a cached MasterBoot Record.
+</div>
+</div><p>
+<a class="anchor" name="0691515e5d969f98c4285bfe0c16a309"></a><!-- doxytag: member="cache_t::fbs" ref="0691515e5d969f98c4285bfe0c16a309" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structfat16_boot_sector.html">fbs_t</a> <a class="el" href="unioncache__t.html#0691515e5d969f98c4285bfe0c16a309">cache_t::fbs</a> </td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+Used to access to a cached FAT16 boot sector.
+</div>
+</div><p>
+<hr>The documentation for this union was generated from the following file:<ul>
+<li>Fat16/Fat16.h</ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Oct 9 08:22:19 2008 for Fat16 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
+</body>
+</html>
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/html/unioncache__t__coll__graph.png b/trunk/users/bruce/SD card test/Fat16Lib/html/unioncache__t__coll__graph.png
new file mode 100644
index 00000000..eb1798de
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/html/unioncache__t__coll__graph.png
Binary files differ
diff --git a/trunk/users/bruce/SD card test/Fat16Lib/readme.txt b/trunk/users/bruce/SD card test/Fat16Lib/readme.txt
new file mode 100644
index 00000000..ed5a6817
--- /dev/null
+++ b/trunk/users/bruce/SD card test/Fat16Lib/readme.txt
@@ -0,0 +1,42 @@
+Warning this is the first release of this library.
+
+Please read the html documentation for this library. Start with index.html and read
+the Main Page. Next go to the Files tab and read the documentation for Fat16Config.h.
+Finally go to the Classes tab and read the Fat16 class documentation.
+
+If you wish to report bugs or have comments, send email to fat16lib@sbcglobal.net
+
+Copy the Fat16 directory to the hardware/libraries sub-directory of the Arduino
+application directory. It is necessary to set FAT16_PRINT_SUPPORT to zero if
+you are using Arduino version 11.
+
+The Fat16/examples directory has the following sketches.
+
+fat16print.pde - This sketch shows how to use the Arduino V12 Print class with Fat16.
+
+fat16read.pde - This sketch reads and prints the file PRINT00.TXT created by
+ fat16print.pde or WRITE00.TXT created by fat16write.pde.
+
+fat16tail.pde - This sketch to reads and prints the tail of all files created
+ by fat16print.pde and fat16write.pde.
+
+fat16write.pde - This sketch creates a new file and writes 100 lines to the file.
+
+GPSLogger_mem.pde - The original version of Ladyada's GPS logger with the addition
+ of a function to print the amount of free RAM. Also with a
+ mod to print both CR and LF at the end of lines. You must
+ have AF_SDlog installed (may require recompile of library).
+
+GPStest.pde - A version Ladyada's GPS logger that has been modified to
+ use the Fat16 library.
+
+fat16info.pde - This Sketch attempts to initialize an SD card and analyze its format.
+ Used for debug problems with SD cards.
+
+
+To access these examples from the Arduino development environment go to:
+File -> Sketchbook -> Examples -> Library-Fat16 -> <Sketch Name>
+
+Compile, download and click on Serial Monitor to run the example.
+
+You must use a standard SD card that has been formatted with a FAT16 file system.