diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.lock b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.lock
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.core/.log b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.core/.log
new file mode 100644
index 0000000000..128e868b54
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.core/.log
@@ -0,0 +1,17 @@
+*** SESSION Sep 07, 2007 11:40:29.515 ------------------------------------------
+*** SESSION Sep 26, 2007 20:59:04.640 ------------------------------------------
+*** SESSION Sep 27, 2007 17:22:58.687 ------------------------------------------
+*** SESSION Oct 04, 2007 20:29:08.859 ------------------------------------------
+*** SESSION Oct 23, 2007 19:47:01.875 ------------------------------------------
+*** SESSION Oct 23, 2007 21:13:26.296 ------------------------------------------
+*** SESSION Oct 23, 2007 21:22:16.187 ------------------------------------------
+*** SESSION Oct 28, 2007 12:37:13.93 -------------------------------------------
+*** SESSION Nov 06, 2007 16:04:46.31 -------------------------------------------
+*** SESSION Nov 06, 2007 20:19:12.359 ------------------------------------------
+*** SESSION Nov 07, 2007 18:40:55.281 ------------------------------------------
+*** SESSION Nov 13, 2007 20:49:09.875 ------------------------------------------
+*** SESSION Nov 17, 2007 17:59:26.734 ------------------------------------------
+*** SESSION Nov 17, 2007 19:36:59.656 ------------------------------------------
+*** SESSION Nov 21, 2007 08:36:47.312 ------------------------------------------
+*** SESSION Nov 21, 2007 15:42:29.171 ------------------------------------------
+*** SESSION Nov 21, 2007 17:07:49.515 ------------------------------------------
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.core/shareddefaults.xml b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.core/shareddefaults.xml
new file mode 100644
index 0000000000..c4b91cfab3
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.core/shareddefaults.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><SharedRoot><SharedProperty id="" value=""/></SharedRoot>
\ No newline at end of file
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/.log b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/.log
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/RTOSDemo.sc b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/RTOSDemo.sc
new file mode 100644
index 0000000000..2a3f9d1a86
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/RTOSDemo.sc
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?scdStore version="2"?>
+
+<scannerInfo id="org.eclipse.cdt.make.core.discoveredScannerInfo">
+<instance id="0.1109417601">
+<collector id="org.eclipse.cdt.make.core.PerProjectSICollector">
+<includePath path="c:/devtools/codesourcery/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.2.0/include"/>
+<includePath path="c:/devtools/codesourcery/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.2.0/include-fixed"/>
+<includePath path="c:/devtools/codesourcery/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.2.0/../../../../arm-none-eabi/include"/>
+<includePath path="c:/devtools/codesourcery/sourcery g++ lite/lib/gcc/../../lib/gcc/arm-none-eabi/4.2.0/include"/>
+<includePath path="c:/devtools/codesourcery/sourcery g++ lite/lib/gcc/../../lib/gcc/arm-none-eabi/4.2.0/include-fixed"/>
+<includePath path="c:/devtools/codesourcery/sourcery g++ lite/lib/gcc/../../lib/gcc/arm-none-eabi/4.2.0/../../../../arm-none-eabi/include"/>
+<includePath path="C:/E/Dev/FreeRTOS/Demo/ARM7_LPC2368_Eclipse/RTOSDemo"/>
+<includePath path="C:/E/Dev/FreeRTOS/Source/include"/>
+<includePath path="C:/E/Dev/FreeRTOS/Source/portable/GCC/ARM7_AT91SAM7S"/>
+<includePath path="C:/E/Dev/FreeRTOS/Source/portable/GCC/ARM7_LPC23xx"/>
+<includePath path="C:/E/Dev/FreeRTOS/Source/portable/GCC/ARM_CM3"/>
+<includePath path="C:/E/Dev/FreeRTOS/Demo/Common/include"/>
+<includePath path="C:/E/Dev/FreeRTOS/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver"/>
+<includePath path="C:/E/Dev/FreeRTOS/Demo/Common/ethernet/uIP/uip-1.0/uip"/>
+<includePath path="C:/E/Dev/FreeRTOS/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/SrcAtmel"/>
+<includePath path="C:/E/Dev/FreeRTOS/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/USB"/>
+<includePath path="c:\devtools\yagarto\bin\../lib/gcc/arm-elf/4.2.1/include"/>
+<includePath path="C:/devtools/yagarto/lib/gcc/arm-elf/4.2.1/include"/>
+<includePath path="C:/E/Dev/FreeRTOS/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver"/>
+<includePath path="c:\devtools\yagarto\bin\../lib/gcc/arm-elf/4.1.1/include"/>
+<includePath path="C:/devtools/yagarto/lib/gcc/arm-elf/4.1.1/include"/>
+<includePath path="C:/devtools/yagarto/arm-elf/include"/>
+<includePath path="C:/E/Dev/FreeRTOS/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo"/>
+<definedSymbol symbol="__STDC__=1"/>
+<definedSymbol symbol="__STDC_HOSTED__=1"/>
+<definedSymbol symbol="__GNUC__=4"/>
+<definedSymbol symbol="__GNUC_MINOR__=2"/>
+<definedSymbol symbol="__GNUC_MINOR__=1"/>
+<definedSymbol symbol="__GNUC_PATCHLEVEL__=0"/>
+<definedSymbol symbol="__GNUC_PATCHLEVEL__=1"/>
+<definedSymbol symbol="__SIZE_TYPE__=unsigned int"/>
+<definedSymbol symbol="__SIZE_TYPE__=long unsigned int"/>
+<definedSymbol symbol="__PTRDIFF_TYPE__=int"/>
+<definedSymbol symbol="__PTRDIFF_TYPE__=long int"/>
+<definedSymbol symbol="__WCHAR_TYPE__=unsigned int"/>
+<definedSymbol symbol="__WCHAR_TYPE__=int"/>
+<definedSymbol symbol="__WINT_TYPE__=unsigned int"/>
+<definedSymbol symbol="__INTMAX_TYPE__=long long int"/>
+<definedSymbol symbol="__UINTMAX_TYPE__=long long unsigned int"/>
+<definedSymbol symbol="__GXX_ABI_VERSION=1002"/>
+<definedSymbol symbol="__SCHAR_MAX__=127"/>
+<definedSymbol symbol="__SHRT_MAX__=32767"/>
+<definedSymbol symbol="__INT_MAX__=2147483647"/>
+<definedSymbol symbol="__LONG_MAX__=2147483647L"/>
+<definedSymbol symbol="__LONG_LONG_MAX__=9223372036854775807LL"/>
+<definedSymbol symbol="__WCHAR_MAX__=4294967295U"/>
+<definedSymbol symbol="__WCHAR_MAX__=2147483647"/>
+<definedSymbol symbol="__CHAR_BIT__=8"/>
+<definedSymbol symbol="__INTMAX_MAX__=9223372036854775807LL"/>
+<definedSymbol symbol="__FLT_EVAL_METHOD__=0"/>
+<definedSymbol symbol="__DEC_EVAL_METHOD__=2"/>
+<definedSymbol symbol="__FLT_RADIX__=2"/>
+<definedSymbol symbol="__FLT_MANT_DIG__=24"/>
+<definedSymbol symbol="__FLT_DIG__=6"/>
+<definedSymbol symbol="__FLT_MIN_EXP__=(-125)"/>
+<definedSymbol symbol="__FLT_MIN_10_EXP__=(-37)"/>
+<definedSymbol symbol="__FLT_MAX_EXP__=128"/>
+<definedSymbol symbol="__FLT_MAX_10_EXP__=38"/>
+<definedSymbol symbol="__FLT_MAX__=3.40282347e+38F"/>
+<definedSymbol symbol="__FLT_MIN__=1.17549435e-38F"/>
+<definedSymbol symbol="__FLT_EPSILON__=1.19209290e-7F"/>
+<definedSymbol symbol="__FLT_DENORM_MIN__=1.40129846e-45F"/>
+<definedSymbol symbol="__FLT_HAS_DENORM__=1"/>
+<definedSymbol symbol="__FLT_HAS_INFINITY__=1"/>
+<definedSymbol symbol="__FLT_HAS_QUIET_NAN__=1"/>
+<definedSymbol symbol="__DBL_MANT_DIG__=53"/>
+<definedSymbol symbol="__DBL_DIG__=15"/>
+<definedSymbol symbol="__DBL_MIN_EXP__=(-1021)"/>
+<definedSymbol symbol="__DBL_MIN_10_EXP__=(-307)"/>
+<definedSymbol symbol="__DBL_MAX_EXP__=1024"/>
+<definedSymbol symbol="__DBL_MAX_10_EXP__=308"/>
+<definedSymbol symbol="__DBL_MAX__=1.7976931348623157e+308"/>
+<definedSymbol symbol="__DBL_MIN__=2.2250738585072014e-308"/>
+<definedSymbol symbol="__DBL_EPSILON__=2.2204460492503131e-16"/>
+<definedSymbol symbol="__DBL_DENORM_MIN__=4.9406564584124654e-324"/>
+<definedSymbol symbol="__DBL_HAS_DENORM__=1"/>
+<definedSymbol symbol="__DBL_HAS_INFINITY__=1"/>
+<definedSymbol symbol="__DBL_HAS_QUIET_NAN__=1"/>
+<definedSymbol symbol="__LDBL_MANT_DIG__=53"/>
+<definedSymbol symbol="__LDBL_DIG__=15"/>
+<definedSymbol symbol="__LDBL_MIN_EXP__=(-1021)"/>
+<definedSymbol symbol="__LDBL_MIN_10_EXP__=(-307)"/>
+<definedSymbol symbol="__LDBL_MAX_EXP__=1024"/>
+<definedSymbol symbol="__LDBL_MAX_10_EXP__=308"/>
+<definedSymbol symbol="__DECIMAL_DIG__=17"/>
+<definedSymbol symbol="__LDBL_MAX__=1.7976931348623157e+308L"/>
+<definedSymbol symbol="__LDBL_MIN__=2.2250738585072014e-308L"/>
+<definedSymbol symbol="__LDBL_EPSILON__=2.2204460492503131e-16L"/>
+<definedSymbol symbol="__LDBL_DENORM_MIN__=4.9406564584124654e-324L"/>
+<definedSymbol symbol="__LDBL_HAS_DENORM__=1"/>
+<definedSymbol symbol="__LDBL_HAS_INFINITY__=1"/>
+<definedSymbol symbol="__LDBL_HAS_QUIET_NAN__=1"/>
+<definedSymbol symbol="__DEC32_MANT_DIG__=7"/>
+<definedSymbol symbol="__DEC32_MIN_EXP__=(-95)"/>
+<definedSymbol symbol="__DEC32_MAX_EXP__=96"/>
+<definedSymbol symbol="__DEC32_MIN__=1E-95DF"/>
+<definedSymbol symbol="__DEC32_MAX__=9.999999E96DF"/>
+<definedSymbol symbol="__DEC32_EPSILON__=1E-6DF"/>
+<definedSymbol symbol="__DEC32_DEN__=0.000001E-95DF"/>
+<definedSymbol symbol="__DEC64_MANT_DIG__=16"/>
+<definedSymbol symbol="__DEC64_MIN_EXP__=(-383)"/>
+<definedSymbol symbol="__DEC64_MAX_EXP__=384"/>
+<definedSymbol symbol="__DEC64_MIN__=1E-383DD"/>
+<definedSymbol symbol="__DEC64_MAX__=9.999999999999999E384DD"/>
+<definedSymbol symbol="__DEC64_EPSILON__=1E-15DD"/>
+<definedSymbol symbol="__DEC64_DEN__=0.000000000000001E-383DD"/>
+<definedSymbol symbol="__DEC128_MANT_DIG__=34"/>
+<definedSymbol symbol="__DEC128_MIN_EXP__=(-6143)"/>
+<definedSymbol symbol="__DEC128_MAX_EXP__=6144"/>
+<definedSymbol symbol="__DEC128_MIN__=1E-6143DL"/>
+<definedSymbol symbol="__DEC128_MAX__=9.999999999999999999999999999999999E6144DL"/>
+<definedSymbol symbol="__DEC128_EPSILON__=1E-33DL"/>
+<definedSymbol symbol="__DEC128_DEN__=0.000000000000000000000000000000001E-6143DL"/>
+<definedSymbol symbol="__REGISTER_PREFIX__"/>
+<definedSymbol symbol="__USER_LABEL_PREFIX__"/>
+<definedSymbol symbol="__VERSION__=&quot;4.2.0 20070413 (prerelease)&quot;"/>
+<definedSymbol symbol="__VERSION__=&quot;4.1.1&quot;"/>
+<definedSymbol removed="true" symbol="__VERSION__=&quot;4.2.1&quot;"/>
+<definedSymbol symbol="__GNUC_GNU_INLINE__=1"/>
+<definedSymbol symbol="__NO_INLINE__=1"/>
+<definedSymbol symbol="__FINITE_MATH_ONLY__=0"/>
+<definedSymbol symbol="__CHAR_UNSIGNED__=1"/>
+<definedSymbol symbol="__arm__=1"/>
+<definedSymbol symbol="__APCS_32__=1"/>
+<definedSymbol symbol="__ARMEL__=1"/>
+<definedSymbol symbol="__SOFTFP__=1"/>
+<definedSymbol symbol="__VFP_FP__=1"/>
+<definedSymbol symbol="__THUMB_INTERWORK__=1"/>
+<definedSymbol symbol="__ARM_ARCH_4T__=1"/>
+<definedSymbol symbol="__ARM_EABI__=1"/>
+<definedSymbol symbol="__GXX_TYPEINFO_EQUALITY_INLINE=0"/>
+<definedSymbol symbol="__ELF__=1"/>
+<definedSymbol symbol="__USES_INITFINI__=1"/>
+<definedSymbol symbol="GCC_ARMCM3_LM3S102"/>
+<definedSymbol symbol="inline="/>
+<definedSymbol symbol="PACK_STRUCT_END=__attribute\(\(packed\)\)"/>
+<definedSymbol symbol="ALIGN_STRUCT_END=__attribute\(\(aligned\(4\)\)\)"/>
+<definedSymbol symbol="sprintf=usprintf"/>
+<definedSymbol removed="true" symbol="sprintf=xprintf"/>
+<definedSymbol removed="true" symbol="sprintf=xxprintf"/>
+<definedSymbol symbol="snprintf=usnprintf"/>
+<definedSymbol symbol="printf=uipprintf"/>
+<definedSymbol removed="true" symbol="printf=xprintf"/>
+<definedSymbol removed="true" symbol="printf=xxprintf"/>
+<definedSymbol symbol="__USING_SJLJ_EXCEPTIONS__=1"/>
+<definedSymbol symbol="__thumb__=1"/>
+<definedSymbol symbol="__THUMBEL__=1"/>
+<definedSymbol symbol="ROWLEY_LPC23xx"/>
+<definedSymbol symbol="THUMB_INTERWORK"/>
+<definedSymbol symbol="__OPTIMIZE__=1"/>
+<definedSymbol symbol="__OPTIMIZE_SIZE__=1"/>
+<definedSymbol symbol="SAM7_GCC"/>
+</collector>
+</instance>
+</scannerInfo>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c
@@ -0,0 +1 @@
+
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp
@@ -0,0 +1 @@
+
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.ui/dialog_settings.xml b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.ui/dialog_settings.xml
new file mode 100644
index 0000000000..9e62c4bb56
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.make.ui/dialog_settings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+	<section name="org.eclipse.cdt.internal.ui.MakeView">
+	</section>
+</section>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.ui/cHelpSettings.xml b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.ui/cHelpSettings.xml
new file mode 100644
index 0000000000..5240b1825b
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.ui/cHelpSettings.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<cHelpSettings>
+<project name="RTOSDemo"/>
+</cHelpSettings>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.ui/dialog_settings.xml b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.ui/dialog_settings.xml
new file mode 100644
index 0000000000..ab95b05646
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.cdt.ui/dialog_settings.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+	<item value="1" key="org.eclipse.cdt.uiformatter_page.line_wrapping_tab_page.last_category_index"/>
+	<item value="549" key="org.eclipse.cdt.uiformatter_pagemodify_dialog.preferred_height"/>
+	<item value="138" key="org.eclipse.cdt.uiformatter_pagemodify_dialog.preferred_x"/>
+	<item value="0" key="org.eclipse.cdt.uiformatter_pagemodify_dialog.preferred_y"/>
+	<item value="645" key="org.eclipse.cdt.uiformatter_pagemodify_dialog.preferred_width"/>
+	<section name="completion_proposal_size">
+	</section>
+	<section name="PDOMSearchPage">
+	</section>
+</section>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/64/history.index b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/64/history.index
new file mode 100644
index 0000000000..f57b88c626
Binary files /dev/null and b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/64/history.index differ
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/69/history.index b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/69/history.index
new file mode 100644
index 0000000000..fd79ef2da3
Binary files /dev/null and b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/69/history.index differ
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/b3/history.index b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/b3/history.index
new file mode 100644
index 0000000000..b648a4a60d
Binary files /dev/null and b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/b3/history.index differ
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/history.index b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/history.index
new file mode 100644
index 0000000000..67cbcdf96d
Binary files /dev/null and b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/history.index differ
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/properties.index b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/properties.index
new file mode 100644
index 0000000000..401e243bb7
Binary files /dev/null and b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.indexes/properties.index differ
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.markers b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.markers
new file mode 100644
index 0000000000..c4a7f2f91e
Binary files /dev/null and b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.projects/RTOSDemo/.markers differ
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version
new file mode 100644
index 0000000000..25cb955ba2
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index
new file mode 100644
index 0000000000..14ccfeddd9
Binary files /dev/null and b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index differ
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version
new file mode 100644
index 0000000000..6b2aaa7640
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/47.tree b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/47.tree
new file mode 100644
index 0000000000..68bdc1b427
Binary files /dev/null and b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.root/47.tree differ
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources
new file mode 100644
index 0000000000..44f79aa39e
Binary files /dev/null and b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources differ
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-RTOSDemo.prefs b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-RTOSDemo.prefs
new file mode 100644
index 0000000000..bb305ff00b
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-RTOSDemo.prefs
@@ -0,0 +1,3 @@
+#Sun Aug 19 15:20:24 BST 2007
+eclipse.preferences.version=1
+indexer/preferenceScope=0
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs
new file mode 100644
index 0000000000..1c0fdf149d
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs
@@ -0,0 +1,3 @@
+#Sun Aug 19 15:19:23 BST 2007
+org.eclipse.cdt.debug.core.cDebug.common_source_containers=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\r\n<sourceLookupDirector>\r\n<sourceContainers duplicates\="false"/>\r\n</sourceLookupDirector>\r\n
+eclipse.preferences.version=1
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.ui.prefs b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.ui.prefs
new file mode 100644
index 0000000000..d7fcb8db3b
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.ui.prefs
@@ -0,0 +1,5 @@
+#Tue Oct 23 21:13:09 BST 2007
+pref_state_memento.org.eclipse.cdt.debug.ui.ModulesView=<?xml version\="1.0" encoding\="UTF-8"?>\r\n<ModulesViewMemento org.eclipse.cdt.debug.ui.SASH_DETAILS_PART\="570" org.eclipse.cdt.debug.ui.SASH_VIEW_PART\="429"/>
+eclipse.preferences.version=1
+org.eclipse.debug.ui.DebugView.org.eclipse.cdt.debug.ui.cDebug.show_full_paths=true
+org.eclipse.debug.ui.BreakpointView.org.eclipse.cdt.debug.ui.cDebug.show_full_paths=true
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.managedbuilder.core.prefs b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.managedbuilder.core.prefs
new file mode 100644
index 0000000000..ab5a1605c7
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.managedbuilder.core.prefs
@@ -0,0 +1,3 @@
+#Wed Nov 21 16:20:43 GMT 2007
+eclipse.preferences.version=1
+properties/RTOSDemo.null.976634949/0.1109417601=\#\r\n\#Wed Nov 21 16\:20\:43 GMT 2007\r\n0.1109417601\=\\\#\\r\\n\\\#Wed Nov 21 16\\\:20\\\:43 GMT 2007\\r\\nrcState\\\=0\\r\\nrebuildState\\\=false\\r\\n\r\norg.eclipse.cdt.build.core.settings.holder.1502006385\=\\\#\\r\\n\\\#Wed Nov 21 16\\\:20\\\:43 GMT 2007\\r\\nrebuildState\\\=false\\r\\n\r\norg.eclipse.cdt.build.core.settings.holder.1021181093\=\\\#\\r\\n\\\#Wed Nov 21 16\\\:20\\\:43 GMT 2007\\r\\nrebuildState\\\=false\\r\\n\r\norg.eclipse.cdt.build.core.settings.holder.164584712\=\\\#\\r\\n\\\#Wed Nov 21 16\\\:20\\\:43 GMT 2007\\r\\nrebuildState\\\=false\\r\\n\r\norg.eclipse.cdt.build.core.settings.holder.libs.260784574\=\\\#\\r\\n\\\#Wed Nov 21 16\\\:20\\\:43 GMT 2007\\r\\nrebuildState\\\=false\\r\\n\r\norg.eclipse.cdt.build.core.prefbase.toolchain.1816209921\=\\\#\\r\\n\\\#Wed Nov 21 16\\\:20\\\:43 GMT 2007\\r\\nrebuildState\\\=false\\r\\n\r\n
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs
new file mode 100644
index 0000000000..8a970dac4a
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs
@@ -0,0 +1,12 @@
+#Thu Aug 23 20:22:58 BST 2007
+useQuickDiffPrefPage=true
+closeBrackets=false
+ensureNewlineAtEOF=true
+useAnnotationsPrefPage=true
+closeAngularBrackets=false
+eclipse.preferences.version=1
+org.eclipse.cdt.ui.text.templates.custom=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates/>
+hoverModifierMasks=org.eclipse.cdt.ui.BestMatchHover;0;org.eclipse.cdt.ui.CSourceHover;131072;org.eclipse.cdt.debug.internal.ui.editors.DebugTextHover;0;org.eclipse.cdt.ui.CDocHover;0;org.eclipse.cdt.ui.AnnotationHover;0;
+hoverModifiers=org.eclipse.cdt.ui.BestMatchHover;0;org.eclipse.cdt.ui.CSourceHover;Shift;org.eclipse.cdt.debug.internal.ui.editors.DebugTextHover;\!0;org.eclipse.cdt.ui.CDocHover;\!0;org.eclipse.cdt.ui.AnnotationHover;\!0;
+closeBraces=false
+closeStrings=false
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..242e94194a
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,5 @@
+#Fri Aug 31 14:25:00 BST 2007
+version=1
+eclipse.preferences.version=1
+pathvariable.FreeRTOS_ROOT=C\:/E/Dev/FreeRTOS
+description.autobuilding=false
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.core.prefs b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.core.prefs
new file mode 100644
index 0000000000..4e5b3d8cb1
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.core.prefs
@@ -0,0 +1,3 @@
+#Sat Nov 17 13:34:58 GMT 2007
+prefWatchExpressions=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\r\n<watchExpressions/>\r\n
+eclipse.preferences.version=1
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs
new file mode 100644
index 0000000000..c88e843134
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs
@@ -0,0 +1,14 @@
+#Wed Nov 07 18:56:22 GMT 2007
+org.eclipse.debug.ui.PREF_FILTER_WORKING_SETS=false
+org.eclipse.debug.ui.PREF_LAUNCH_PERSPECTIVES=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\r\n<launchPerspectives/>\r\n
+org.eclipse.debug.ui.BreakpointView+org.eclipse.debug.ui.ShowSupportedBreakpointsAction=true
+pref_state_memento.org.eclipse.debug.ui.VariableView=<?xml version\="1.0" encoding\="UTF-8"?>\r\n<VariablesViewMemento org.eclipse.debug.ui.SASH_DETAILS_PART\="315" org.eclipse.debug.ui.SASH_VIEW_PART\="684"/>
+pref_state_memento.org.eclipse.debug.ui.RegisterView=<?xml version\="1.0" encoding\="UTF-8"?>\r\n<VariablesViewMemento org.eclipse.debug.ui.SASH_DETAILS_PART\="198" org.eclipse.debug.ui.SASH_VIEW_PART\="801"/>
+org.eclipse.debug.ui.memory.columnSize\:org.eclipse.cdt.debug.core=4
+pref_state_memento.org.eclipse.debug.ui.ExpressionView=<?xml version\="1.0" encoding\="UTF-8"?>\r\n<VariablesViewMemento org.eclipse.debug.ui.SASH_DETAILS_PART\="315" org.eclipse.debug.ui.SASH_VIEW_PART\="684"/>
+org.eclipse.debug.ui.PREF_FILTER_LAUNCH_CLOSED=false
+preferredDetailPanes=DefaultDetailPane\:DefaultDetailPane|
+org.eclipse.debug.ui.PREF_FILTER_LAUNCH_DELETED=false
+eclipse.preferences.version=1
+org.eclipse.debug.ui.memory.rowSize\:org.eclipse.cdt.debug.core=16
+org.eclipse.debug.ui.user_view_bindings=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\r\n<viewBindings>\r\n<view id\="org.eclipse.debug.ui.ExpressionView">\r\n<perspective id\="org.eclipse.debug.ui.DebugPerspective" userAction\="opened"/>\r\n</view>\r\n</viewBindings>\r\n
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.help.ui.prefs b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.help.ui.prefs
new file mode 100644
index 0000000000..8d1b311642
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.help.ui.prefs
@@ -0,0 +1,7 @@
+#Sun Aug 26 17:32:13 BST 2007
+browser.x=177
+browser.w=1024
+eclipse.preferences.version=1
+browser.h=768
+browser.maximized=false
+browser.y=128
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs
new file mode 100644
index 0000000000..2426c2b797
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs
@@ -0,0 +1,3 @@
+#Sun Aug 19 19:39:29 BST 2007
+org.eclipse.search.defaultPerspective=org.eclipse.search.defaultPerspective.none
+eclipse.preferences.version=1
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs
new file mode 100644
index 0000000000..06f8f10437
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs
@@ -0,0 +1,3 @@
+#Fri Aug 31 18:19:04 BST 2007
+eclipse.preferences.version=1
+org.eclipse.team.ui.first_time=false
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs
new file mode 100644
index 0000000000..1affd268e2
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs
@@ -0,0 +1,3 @@
+#Sun Aug 19 20:45:57 BST 2007
+eclipse.preferences.version=1
+overviewRuler_migration=migrated_3.1
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs
new file mode 100644
index 0000000000..b96f5d0dd1
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs
@@ -0,0 +1,4 @@
+#Tue Nov 06 22:57:01 GMT 2007
+eclipse.preferences.version=1
+tipsAndTricks=true
+platformState=1187207632259
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs
new file mode 100644
index 0000000000..3e5b2b17d2
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs
@@ -0,0 +1,3 @@
+#Sun Aug 19 20:45:58 BST 2007
+eclipse.preferences.version=1
+showIntro=false
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs
new file mode 100644
index 0000000000..06cd1e9cd0
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs
@@ -0,0 +1,3 @@
+#Mon Aug 20 21:59:49 BST 2007
+eclipse.preferences.version=1
+org.eclipse.ui.commands=<?xml version\="1.0" encoding\="UTF-8"?>\r\n<org.eclipse.ui.commands>\r\n<keyBinding contextId\="org.eclipse.ui.contexts.window" keyConfigurationId\="org.eclipse.ui.defaultAcceleratorConfiguration" keySequence\="CTRL+B"/>\r\n<keyBinding commandId\="org.eclipse.ui.project.buildAll" contextId\="org.eclipse.ui.contexts.window" keyConfigurationId\="org.eclipse.ui.defaultAcceleratorConfiguration" keySequence\="F7"/>\r\n<keyBinding contextId\="org.eclipse.ui.contexts.window" keyConfigurationId\="org.eclipse.ui.defaultAcceleratorConfiguration" keySequence\="F11"/>\r\n<keyBinding contextId\="org.eclipse.debug.ui.debugging" keyConfigurationId\="org.eclipse.ui.defaultAcceleratorConfiguration" keySequence\="F5"/>\r\n<keyBinding commandId\="org.eclipse.debug.ui.commands.StepInto" contextId\="org.eclipse.ui.contexts.window" keyConfigurationId\="org.eclipse.ui.defaultAcceleratorConfiguration" keySequence\="F11"/>\r\n<keyBinding contextId\="org.eclipse.debug.ui.debugging" keyConfigurationId\="org.eclipse.ui.defaultAcceleratorConfiguration" keySequence\="F6"/>\r\n<keyBinding commandId\="org.eclipse.debug.ui.commands.StepOver" contextId\="org.eclipse.ui.contexts.window" keyConfigurationId\="org.eclipse.ui.defaultAcceleratorConfiguration" keySequence\="F10"/>\r\n<keyBinding commandId\="org.eclipse.debug.ui.commands.DebugLast" contextId\="org.eclipse.ui.contexts.window" keyConfigurationId\="org.eclipse.ui.defaultAcceleratorConfiguration" keySequence\="CTRL+D"/>\r\n<keyBinding contextId\="org.eclipse.ui.textEditorScope" keyConfigurationId\="org.eclipse.ui.defaultAcceleratorConfiguration" keySequence\="CTRL+D"/>\r\n<keyBinding contextId\="org.eclipse.ui.contexts.window" keyConfigurationId\="org.eclipse.ui.defaultAcceleratorConfiguration" keySequence\="CTRL+F11"/>\r\n<keyBinding commandId\="org.eclipse.debug.ui.commands.RunLast" contextId\="org.eclipse.ui.contexts.window" keyConfigurationId\="org.eclipse.ui.defaultAcceleratorConfiguration" keySequence\="F5"/>\r\n<keyBinding contextId\="org.eclipse.ui.contexts.window" keyConfigurationId\="org.eclipse.ui.defaultAcceleratorConfiguration" keySequence\="F5"/>\r\n<keyBinding contextId\="org.eclipse.ui.textEditorScope" keyConfigurationId\="org.eclipse.ui.defaultAcceleratorConfiguration" keySequence\="CTRL+K"/>\r\n<keyBinding commandId\="org.eclipse.ui.edit.findNext" contextId\="org.eclipse.ui.contexts.window" keyConfigurationId\="org.eclipse.ui.defaultAcceleratorConfiguration" keySequence\="F3"/>\r\n<keyBinding contextId\="org.eclipse.cdt.make.ui.makefileEditorScope" keyConfigurationId\="org.eclipse.ui.defaultAcceleratorConfiguration" keySequence\="F3"/>\r\n<keyBinding contextId\="org.eclipse.cdt.ui.cEditorScope" keyConfigurationId\="org.eclipse.ui.defaultAcceleratorConfiguration" keySequence\="F3"/>\r\n<keyBinding contextId\="org.eclipse.cdt.ui.cViewScope" keyConfigurationId\="org.eclipse.ui.defaultAcceleratorConfiguration" keySequence\="F3"/>\r\n</org.eclipse.ui.commands>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/OpenOCD Programmer.launch b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/OpenOCD Programmer.launch
new file mode 100644
index 0000000000..822c04f0c5
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/OpenOCD Programmer.launch	
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.ui.externaltools.ProgramLaunchConfigurationType">
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc}/../Common/drivers/OpenOCD/openocd-pp.exe"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="--file SAM7_flash.cfg"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc}"/>
+</launchConfiguration>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/OpenOCD Server.launch b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/OpenOCD Server.launch
new file mode 100644
index 0000000000..6a59edf70b
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/OpenOCD Server.launch	
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.ui.externaltools.ProgramLaunchConfigurationType">
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc}/../Common/drivers/OpenOCD/openocd-pp.exe"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="--file SAM7_pp.cfg"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc}"/>
+</launchConfiguration>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/RTOSDemo.elf.launch b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/RTOSDemo.elf.launch
new file mode 100644
index 0000000000..1c911f23d9
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/RTOSDemo.elf.launch
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.cdt.launch.localCLaunch">
+<booleanAttribute key="org.eclipse.cdt.debug.mi.core.AUTO_SOLIB" value="true"/>
+<listAttribute key="org.eclipse.cdt.debug.mi.core.AUTO_SOLIB_LIST"/>
+<stringAttribute key="org.eclipse.cdt.debug.mi.core.DEBUG_NAME" value="gdb"/>
+<stringAttribute key="org.eclipse.cdt.debug.mi.core.DEV" value="/dev/ttyS0"/>
+<stringAttribute key="org.eclipse.cdt.debug.mi.core.DEV_SPEED" value="115200"/>
+<stringAttribute key="org.eclipse.cdt.debug.mi.core.GDB_INIT" value=".gdbinit"/>
+<stringAttribute key="org.eclipse.cdt.debug.mi.core.HOST" value="localhost"/>
+<stringAttribute key="org.eclipse.cdt.debug.mi.core.PORT" value="10000"/>
+<booleanAttribute key="org.eclipse.cdt.debug.mi.core.REMOTE_TCP" value="false"/>
+<listAttribute key="org.eclipse.cdt.debug.mi.core.SOLIB_PATH"/>
+<booleanAttribute key="org.eclipse.cdt.debug.mi.core.STOP_ON_SOLIB_EVENTS" value="false"/>
+<stringAttribute key="org.eclipse.cdt.debug.mi.core.commandFactory" value="org.eclipse.cdt.debug.mi.core.standardCommandFactory"/>
+<stringAttribute key="org.eclipse.cdt.debug.mi.core.protocol" value="mi"/>
+<booleanAttribute key="org.eclipse.cdt.debug.mi.core.verboseMode" value="false"/>
+<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_ID" value="org.eclipse.cdt.debug.mi.core.GDBServerCDebugger"/>
+<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_START_MODE" value="run"/>
+<booleanAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN" value="true"/>
+<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN_SYMBOL" value="main"/>
+<booleanAttribute key="org.eclipse.cdt.launch.ENABLE_REGISTER_BOOKKEEPING" value="false"/>
+<booleanAttribute key="org.eclipse.cdt.launch.ENABLE_VARIABLE_BOOKKEEPING" value="false"/>
+<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="RTOSDemo.elf"/>
+<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="RTOSDemo"/>
+<booleanAttribute key="org.eclipse.cdt.launch.use_terminal" value="true"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/RTOSDemo"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="4"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+</launchConfiguration>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/RTOSDemo.launch b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/RTOSDemo.launch
new file mode 100644
index 0000000000..fca7b0ac41
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.debug.core/.launches/RTOSDemo.launch
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.cdt.debug.gdbjtag.launchConfigurationType">
+<stringAttribute key="org.eclipse.cdt.debug.gdbremote.core.imageFileName" value="C:\E\Dev\FreeRTOS\Demo\CORTEX_LM3S8962_Eclipse\RTOSDemo\RTOSDemo.elf"/>
+<stringAttribute key="org.eclipse.cdt.debug.gdbremote.core.initCommands" value="target remote:3333&#13;&#10;monitor sleep 500&#13;&#10;monitor arm7_9 force_hw_bkpts enable&#13;&#10;monitor sleep 500&#13;&#10;monitor soft_reset_halt&#13;&#10;delete&#13;&#10;monitor sleep 500&#13;&#10;b main&#13;&#10;monitor sleep 500&#13;&#10;c&#13;&#10;monitor sleep 500&#13;&#10;delete&#13;&#10;&#13;&#10;&#13;&#10;"/>
+<stringAttribute key="org.eclipse.cdt.debug.gdbremote.core.ipAddress" value="localhost"/>
+<booleanAttribute key="org.eclipse.cdt.debug.gdbremote.core.loadImage" value="false"/>
+<intAttribute key="org.eclipse.cdt.debug.gdbremote.core.portNumber" value="3333"/>
+<stringAttribute key="org.eclipse.cdt.debug.gdbremote.core.runCommands" value=""/>
+<booleanAttribute key="org.eclipse.cdt.debug.gdbremote.core.useRemoteTarget" value="false"/>
+<stringAttribute key="org.eclipse.cdt.debug.mi.core.DEBUG_NAME" value="arm-elf-gdb.exe"/>
+<stringAttribute key="org.eclipse.cdt.debug.mi.core.GDB_INIT" value=""/>
+<stringAttribute key="org.eclipse.cdt.debug.mi.core.commandFactory" value="Standard"/>
+<stringAttribute key="org.eclipse.cdt.debug.mi.core.protocol" value="mi"/>
+<booleanAttribute key="org.eclipse.cdt.debug.mi.core.verboseMode" value="false"/>
+<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_REGISTER_GROUPS" value=""/>
+<stringAttribute key="org.eclipse.cdt.launch.GLOBAL_VARIABLES" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;globalVariableList/&gt;&#13;&#10;"/>
+<stringAttribute key="org.eclipse.cdt.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;memoryBlockExpressionList&gt;&#13;&#10;&lt;memoryBlockExpressionItem&gt;&#13;&#10;&lt;expression text=&quot;2107200&quot;/&gt;&#13;&#10;&lt;/memoryBlockExpressionItem&gt;&#13;&#10;&lt;/memoryBlockExpressionList&gt;&#13;&#10;"/>
+<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="RTOSDemo.elf"/>
+<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="RTOSDemo"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/RTOSDemo"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="4"/>
+</listAttribute>
+</launchConfiguration>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.debug.ui/dialog_settings.xml b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.debug.ui/dialog_settings.xml
new file mode 100644
index 0000000000..4e6586f566
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.debug.ui/dialog_settings.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+	<section name="org.eclipse.debug.ui.STRING_VARIABLE_SELECTION_DIALOG_SECTION">
+		<item value="326" key="DIALOG_WIDTH"/>
+		<item value="-33" key="DIALOG_Y_ORIGIN"/>
+		<item value="309" key="DIALOG_X_ORIGIN"/>
+		<item value="530" key="DIALOG_HEIGHT"/>
+		<item value="1|Tahoma|8.25|0|WINDOWS|1|-11|0|0|0|400|0|0|0|1|0|0|0|0|Tahoma" key="DIALOG_FONT_NAME"/>
+	</section>
+	<section name="org.eclipse.debug.ui.LAUNCH_CONFIGURATIONS_DIALOG_SECTION">
+		<item value="966" key="DIALOG_WIDTH"/>
+		<item value="154" key="DIALOG_Y_ORIGIN"/>
+		<item value=", org.eclipse.ui.externaltools.ProgramLaunchConfigurationType, org.eclipse.cdt.debug.gdbjtag.launchConfigurationType, " key="org.eclipse.debug.ui.EXPANDED_NODES"/>
+		<item value="274" key="DIALOG_X_ORIGIN"/>
+		<item value="640" key="DIALOG_HEIGHT"/>
+		<item value="237" key="org.eclipse.debug.ui.DIALOG_SASH_WEIGHTS_1"/>
+		<item value="762" key="org.eclipse.debug.ui.DIALOG_SASH_WEIGHTS_2"/>
+		<item value="1|Tahoma|8.25|0|WINDOWS|1|-11|0|0|0|400|0|0|0|1|0|0|0|0|Tahoma" key="DIALOG_FONT_NAME"/>
+	</section>
+	<section name="org.eclipse.debug.ui.SELECT_LAUNCH_SHORTCUT_DIALOG">
+		<item value="450" key="DIALOG_WIDTH"/>
+		<item value="215" key="DIALOG_Y_ORIGIN"/>
+		<item value="479" key="DIALOG_X_ORIGIN"/>
+		<item value="450" key="DIALOG_HEIGHT"/>
+		<item value="1|Tahoma|8.25|0|WINDOWS|1|-11|0|0|0|400|0|0|0|1|0|0|0|0|Tahoma" key="DIALOG_FONT_NAME"/>
+	</section>
+	<section name="org.eclipse.debug.ui.SELECT_CONFIGURATION_TYPE_DIALOG">
+		<item value="300" key="DIALOG_WIDTH"/>
+		<item value="46" key="DIALOG_Y_ORIGIN"/>
+		<item value="301" key="DIALOG_X_ORIGIN"/>
+		<item value="350" key="DIALOG_HEIGHT"/>
+		<item value="1|Tahoma|8.25|0|WINDOWS|1|-11|0|0|0|400|0|0|0|1|0|0|0|0|Tahoma" key="DIALOG_FONT_NAME"/>
+	</section>
+	<section name="FAVORITES_DIALOG_SECTION">
+		<item value="227" key="DIALOG_WIDTH"/>
+		<item value="360" key="DIALOG_Y_ORIGIN"/>
+		<item value="731" key="DIALOG_X_ORIGIN"/>
+		<item value="233" key="DIALOG_HEIGHT"/>
+		<item value="1|Tahoma|8.25|0|WINDOWS|1|-11|0|0|0|400|0|0|0|1|0|0|0|0|Tahoma" key="DIALOG_FONT_NAME"/>
+	</section>
+</section>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.debug.ui/launchConfigurationHistory.xml b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.debug.ui/launchConfigurationHistory.xml
new file mode 100644
index 0000000000..aa1b7aaee7
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.debug.ui/launchConfigurationHistory.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchHistory>
+<launchGroup id="org.eclipse.ui.externaltools.launchGroup">
+<mruHistory>
+<launch memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;launchConfiguration local=&quot;true&quot; path=&quot;OpenOCD Server.launch&quot;/&gt;&#13;&#10;"/>
+<launch memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;launchConfiguration local=&quot;true&quot; path=&quot;OpenOCD Programmer.launch&quot;/&gt;&#13;&#10;"/>
+</mruHistory>
+<favorites/>
+</launchGroup>
+<launchGroup id="org.eclipse.debug.ui.launchGroup.profile">
+<mruHistory/>
+<favorites/>
+</launchGroup>
+<launchGroup id="org.eclipse.debug.ui.launchGroup.debug">
+<mruHistory>
+<launch memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;launchConfiguration local=&quot;true&quot; path=&quot;RTOSDemo.launch&quot;/&gt;&#13;&#10;"/>
+<launch memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;launchConfiguration local=&quot;true&quot; path=&quot;RTOSDemo.elf.launch&quot;/&gt;&#13;&#10;"/>
+</mruHistory>
+<favorites/>
+</launchGroup>
+<launchGroup id="org.eclipse.debug.ui.launchGroup.run">
+<mruHistory>
+<launch memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;launchConfiguration local=&quot;true&quot; path=&quot;RTOSDemo.elf.launch&quot;/&gt;&#13;&#10;"/>
+</mruHistory>
+<favorites/>
+</launchGroup>
+</launchHistory>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.help.ui/dialog_settings.xml b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.help.ui/dialog_settings.xml
new file mode 100644
index 0000000000..1ef2b05b5f
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.help.ui/dialog_settings.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+</section>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/Default.pref b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/Default.pref
new file mode 100644
index 0000000000..fc158177d6
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/Default.pref
@@ -0,0 +1,2 @@
+#Sun Aug 26 17:54:18 BST 2007
+__DEFAULT__=true
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/relative_path.hist b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/relative_path.hist
new file mode 100644
index 0000000000..713e721683
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/relative_path.hist
@@ -0,0 +1,4 @@
+#Sun Aug 26 17:36:29 BST 2007
+__DEFAULT__=false
+org.eclipse.help.ui.localSearch.master=true
+expression=relative path
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/working_set.hist b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/working_set.hist
new file mode 100644
index 0000000000..197837b950
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/working_set.hist
@@ -0,0 +1,4 @@
+#Sun Aug 26 17:29:25 BST 2007
+__DEFAULT__=false
+org.eclipse.help.ui.localSearch.master=true
+expression=working set
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/working_sets.hist b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/working_sets.hist
new file mode 100644
index 0000000000..a88e15eb86
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.help.ui/scope_sets/working_sets.hist
@@ -0,0 +1,4 @@
+#Sun Aug 26 17:54:21 BST 2007
+__DEFAULT__=false
+org.eclipse.help.ui.localSearch.master=true
+expression=working sets
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml
new file mode 100644
index 0000000000..ac671478c5
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+	<section name="RefactoringPropertyPage">
+		<item value="true" key="org.eclipse.ltk.ui.refactoring.sortRefactorings"/>
+	</section>
+</section>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.search/dialog_settings.xml b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.search/dialog_settings.xml
new file mode 100644
index 0000000000..839aca5ed9
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.search/dialog_settings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+	<section name="">
+		<item value="1000" key="org.eclipse.search.resultpage.limit"/>
+	</section>
+	<section name="DialogBounds_SearchDialog">
+		<item value="519" key="DIALOG_WIDTH"/>
+		<item value="259" key="DIALOG_Y_ORIGIN"/>
+		<item value="385" key="DIALOG_HEIGHT"/>
+		<item value="445" key="DIALOG_X_ORIGIN"/>
+		<item value="1|Tahoma|8.25|0|WINDOWS|1|-11|0|0|0|400|0|0|0|1|0|0|0|0|Tahoma" key="DIALOG_FONT_NAME"/>
+	</section>
+	<section name="Search">
+		<list key="Search.processedPageIds">
+			<item value="org.eclipse.search.internal.ui.text.TextSearchPage"/>
+			<item value="org.eclipse.cdt.ui.pdomSearchPage"/>
+		</list>
+		<list key="Search.enabledPageIds">
+			<item value="org.eclipse.search.internal.ui.text.TextSearchPage"/>
+			<item value="org.eclipse.cdt.ui.pdomSearchPage"/>
+		</list>
+	</section>
+	<section name="org.eclipse.search.text.FileSearchResultPage">
+		<item value="1000" key="org.eclipse.search.resultpage.limit"/>
+	</section>
+	<section name="TextSearchPage">
+		<item value="false" key="CASE_SENSITIVE"/>
+		<item value="false" key="REG_EX_SEARCH"/>
+		<item value="false" key="SEARCH_DERIVED"/>
+		<item value="1" key="HISTORY_SIZE"/>
+		<section name="HISTORY0">
+			<item value="false" key="isRegExSearch"/>
+			<item value="struct timer" key="textPattern"/>
+			<item value="0" key="scope"/>
+			<item value="true" key="ignoreCase"/>
+			<list key="fileNamePatterns">
+				<item value="*.c *.h"/>
+			</list>
+			<list key="workingSets">
+			</list>
+		</section>
+	</section>
+	<section name="SearchDialog.ScopePart">
+		<item value="0" key="scope"/>
+	</section>
+</section>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui.cheatsheets/dialog_settings.xml b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui.cheatsheets/dialog_settings.xml
new file mode 100644
index 0000000000..1df8b48c35
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui.cheatsheets/dialog_settings.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+	<section name="CheatSheetCategoryBasedSelectionDialog">
+		<item value="326" key="DIALOG_WIDTH"/>
+		<item value="154" key="DIALOG_Y_ORIGIN"/>
+		<item value="542" key="DIALOG_HEIGHT"/>
+		<item value="541" key="DIALOG_X_ORIGIN"/>
+		<item value="1|Tahoma|8.25|0|WINDOWS|1|-11|0|0|0|400|0|0|0|1|0|0|0|0|Tahoma" key="DIALOG_FONT_NAME"/>
+	</section>
+</section>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml
new file mode 100644
index 0000000000..070a4abfc3
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+	<section name="ResourceNavigator">
+		<item value="FreeRTOS_LM3S8962_Demo" key="ResourceWorkingSetFilter.STORE_WORKING_SET"/>
+		<item value="1" key="ResourceViewer.STORE_SORT_TYPE"/>
+	</section>
+	<section name="org.eclipse.ui.views.task">
+	</section>
+	<section name="org.eclipse.ui.views.problem">
+	</section>
+	<section name="SaveAsDialogSettings">
+		<item value="438" key="DIALOG_WIDTH"/>
+		<item value="147" key="DIALOG_Y_ORIGIN"/>
+		<item value="625" key="DIALOG_X_ORIGIN"/>
+		<item value="553" key="DIALOG_HEIGHT"/>
+		<item value="1|Tahoma|8.25|0|WINDOWS|1|-11|0|0|0|400|0|0|0|1|0|0|0|0|Tahoma" key="DIALOG_FONT_NAME"/>
+	</section>
+	<section name="CleanDialogSettings">
+		<item value="443" key="DIALOG_WIDTH"/>
+		<item value="true" key="BUILD_NOW"/>
+		<item value="251" key="DIALOG_Y_ORIGIN"/>
+		<item value="391" key="DIALOG_HEIGHT"/>
+		<item value="479" key="DIALOG_X_ORIGIN"/>
+		<item value="false" key="TOGGLE_SELECTED"/>
+	</section>
+</section>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui.intro/dialog_settings.xml b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui.intro/dialog_settings.xml
new file mode 100644
index 0000000000..d3014f5c14
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui.intro/dialog_settings.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+	<item value="1024" key="introLaunchBar.location"/>
+</section>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml
new file mode 100644
index 0000000000..e891f28795
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+	<section name="org.eclipse.ui.texteditor.FindReplaceDialog_dialogBounds">
+		<item value="243" key="DIALOG_WIDTH"/>
+		<item value="209" key="DIALOG_Y_ORIGIN"/>
+		<item value="1044" key="DIALOG_X_ORIGIN"/>
+		<item value="356" key="DIALOG_HEIGHT"/>
+		<item value="1|Tahoma|8.25|0|WINDOWS|1|-11|0|0|0|400|0|0|0|1|0|0|0|0|Tahoma" key="DIALOG_FONT_NAME"/>
+	</section>
+	<section name="org.eclipse.ui.texteditor.FindReplaceDialog">
+		<item value="false" key="wrap"/>
+		<item value="false" key="casesensitive"/>
+		<item value="false" key="isRegEx"/>
+		<item value="false" key="incremental"/>
+		<item value="false" key="wholeword"/>
+		<item value="xTaskCreate" key="selection"/>
+		<list key="findhistory">
+			<item value="xTaskCreate"/>
+			<item value="stallsent"/>
+			<item value="COUNT_MASK"/>
+			<item value="QUEUE_LENGTH"/>
+			<item value="uxQueueMessage"/>
+			<item value="bktALLOWABLE_MARGIN"/>
+			<item value="xAreBlockTimeTestTasksStillRunning"/>
+			<item value="vProcessInput"/>
+		</list>
+		<list key="replacehistory">
+			<item value="lEMACSend"/>
+			<item value="partstNUM_LEDS"/>
+			<item value="DESCRIPTORNUM"/>
+			<item value="MAC_TXPRODUCEINDEX"/>
+			<item value="MAC_TXDESCRIPTORNUMBER"/>
+			<item value="MAC_TXSTATUS"/>
+			<item value="MAC_TXDESCRIPTOR"/>
+			<item value="MAC_RXDESCRIPTORNUMBER"/>
+		</list>
+	</section>
+</section>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml
new file mode 100644
index 0000000000..77beade3eb
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+	<section name="WorkbenchPreferenceDialogSettings">
+		<item value="146" key="DIALOG_Y_ORIGIN"/>
+		<item value="269" key="DIALOG_X_ORIGIN"/>
+	</section>
+	<section name="org.eclipse.ui.preferences.keysPreferencePage">
+		<item value="true" key="uncategorizedFilter"/>
+		<item value="false" key="showAllField"/>
+		<item value="true" key="internalFilter"/>
+		<item value="true" key="actionSetFilter"/>
+	</section>
+	<section name="ImportExportAction">
+		<item value="org.eclipse.ui.wizards.import.FileSystem" key="ImportExportPage.STORE_SELECTED_IMPORT_WIZARD_ID"/>
+		<list key="ImportExportPage.STORE_EXPANDED_IMPORT_CATEGORIES">
+			<item value="org.eclipse.ui.Basic"/>
+		</list>
+	</section>
+</section>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml
new file mode 100644
index 0000000000..97c7cfce96
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml
@@ -0,0 +1,358 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<workbench progressCount="21" version="2.0">
+<workbenchAdvisor/>
+<window height="768" maximized="true" width="1024" x="66" y="69">
+<fastViewData fastViewLocation="1024"/>
+<perspectiveBar>
+<itemSize x="160"/>
+</perspectiveBar>
+<coolbarLayout locked="0">
+<coolItem id="group.file" itemType="typeGroupMarker"/>
+<coolItem id="org.eclipse.ui.workbench.file" itemType="typeToolBarContribution" x="130" y="22"/>
+<coolItem id="additions" itemType="typeGroupMarker"/>
+<coolItem id="org.eclipse.cdt.ui.CElementCreationActionSet" itemType="typeToolBarContribution" x="161" y="22"/>
+<coolItem id="org.eclipse.cdt.ui.buildConfigActionSet" itemType="typeToolBarContribution" x="85" y="22"/>
+<coolItem id="org.eclipse.debug.ui.launchActionSet" itemType="typeToolBarContribution" x="124" y="22"/>
+<coolItem id="org.eclipse.search.searchActionSet" itemType="typeToolBarContribution" x="61" y="22"/>
+<coolItem id="org.eclipse.ui.edit.text.actionSet.presentation" itemType="typeToolBarContribution" x="61" y="22"/>
+<coolItem id="group.nav" itemType="typeGroupMarker"/>
+<coolItem id="org.eclipse.ui.workbench.navigate" itemType="typeToolBarContribution" x="185" y="22"/>
+<coolItem id="group.editor" itemType="typeGroupMarker"/>
+<coolItem id="org.eclipse.cdt.ui.editor.asm.AsmEditor" itemType="typeToolBarContribution" x="-1" y="-1"/>
+<coolItem id="org.eclipse.ui.DefaultTextEditor" itemType="typePlaceholder" x="-1" y="-1"/>
+<coolItem id="org.eclipse.cdt.ui.editor.CEditor" itemType="typePlaceholder" x="-1" y="-1"/>
+<coolItem id="org.eclipse.cdt.make.editor" itemType="typeToolBarContribution" x="-1" y="-1"/>
+<coolItem id="group.help" itemType="typeGroupMarker"/>
+<coolItem id="org.eclipse.ui.workbench.help" itemType="typeToolBarContribution" x="-1" y="-1"/>
+</coolbarLayout>
+<page aggregateWorkingSetId="Aggregate for window 1188147282312" focus="true" label="Workspace - C/C++">
+<editors>
+<editorArea activeWorkbook="DefaultEditorWorkbook">
+<info part="DefaultEditorWorkbook">
+<folder appearance="1" expanded="2">
+<presentation id="org.eclipse.ui.internal.presentations.r33.WorkbenchPresentationFactory_33"/>
+</folder>
+</info>
+</editorArea>
+</editors>
+<views>
+<view id="org.eclipse.debug.ui.ExpressionView" partName="Expressions">
+<viewState/>
+</view>
+<view id="org.eclipse.ui.navigator.ProjectExplorer" partName="Project Explorer">
+<viewState CommonNavigator.LINKING_ENABLED="0" CommonNavigator.LINKING_ENABLED.delayed="0" org.eclipse.cdt.ui.cview.groupincludes="false" org.eclipse.cdt.ui.editor.CUChildren="true" org.eclipse.ui.navigator.resources.workingSets.showTopLevelWorkingSets="0"/>
+</view>
+<view id="org.eclipse.ui.views.PropertySheet" partName="Properties">
+<viewState/>
+</view>
+<view id="org.eclipse.search.ui.views.SearchView" partName="Search">
+<viewState isPinned="false">
+<view IMemento.internal.id="" org.eclipse.search.lastActivation="0"/>
+</viewState>
+</view>
+<view id="org.eclipse.ui.views.ResourceNavigator" partName="Navigator">
+<viewState LINK_NAVIGATOR_TO_EDITOR="0" sorter="1">
+<filters>
+<filter element=".*" isEnabled="false"/>
+<filter element="*.class" isEnabled="false"/>
+</filters>
+<expanded>
+<element path="/RTOSDemo"/>
+</expanded>
+<selection>
+<element path="/RTOSDemo/main.c"/>
+</selection>
+</viewState>
+</view>
+<view id="org.eclipse.debug.ui.DebugView" partName="Debug">
+<viewState/>
+</view>
+<view id="org.eclipse.ui.views.ProblemView" partName="Problems">
+<viewState columnWidth0="781" columnWidth1="78" columnWidth2="153" columnWidth3="63" columnWidth4="0" horizontalPosition="0" verticalPosition="0">
+<columnOrder columnOrderIndex="0"/>
+<columnOrder columnOrderIndex="1"/>
+<columnOrder columnOrderIndex="2"/>
+<columnOrder columnOrderIndex="3"/>
+<columnOrder columnOrderIndex="4"/>
+</viewState>
+</view>
+<view id="org.eclipse.ui.console.ConsoleView" partName="Console">
+<viewState/>
+</view>
+<view id="org.eclipse.debug.ui.BreakpointView" partName="Breakpoints">
+<viewState>
+<isTrackingSelection value="false"/>
+</viewState>
+</view>
+<view id="org.eclipse.debug.ui.VariableView" partName="Variables">
+<viewState/>
+</view>
+<view id="org.eclipse.ui.views.TaskList" partName="Tasks">
+<viewState columnWidth0="43" columnWidth1="19" columnWidth2="253" columnWidth3="78" columnWidth4="283" columnWidth5="63" columnWidth6="0" horizontalPosition="0" verticalPosition="0">
+<columnOrder columnOrderIndex="0"/>
+<columnOrder columnOrderIndex="1"/>
+<columnOrder columnOrderIndex="2"/>
+<columnOrder columnOrderIndex="3"/>
+<columnOrder columnOrderIndex="4"/>
+<columnOrder columnOrderIndex="5"/>
+<columnOrder columnOrderIndex="6"/>
+</viewState>
+</view>
+</views>
+<perspectives activePart="org.eclipse.ui.views.ResourceNavigator" activePerspective="org.eclipse.cdt.ui.CPerspective">
+<perspective editorAreaTrimState="2" editorAreaVisible="1" fixed="0" version="0.016">
+<descriptor class="org.eclipse.cdt.internal.ui.CPerspectiveFactory" id="org.eclipse.cdt.ui.CPerspective" label="C/C++"/>
+<alwaysOnActionSet id="org.eclipse.ui.cheatsheets.actionSet"/>
+<alwaysOnActionSet id="org.eclipse.search.searchActionSet"/>
+<alwaysOnActionSet id="org.eclipse.ui.edit.text.actionSet.annotationNavigation"/>
+<alwaysOnActionSet id="org.eclipse.ui.edit.text.actionSet.navigation"/>
+<alwaysOnActionSet id="org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo"/>
+<alwaysOnActionSet id="org.eclipse.ui.externaltools.ExternalToolsSet"/>
+<alwaysOnActionSet id="org.eclipse.ui.actionSet.keyBindings"/>
+<alwaysOnActionSet id="org.eclipse.ui.WorkingSetActionSet"/>
+<alwaysOnActionSet id="org.eclipse.ui.actionSet.openFiles"/>
+<alwaysOnActionSet id="org.eclipse.update.ui.softwareUpdates"/>
+<alwaysOnActionSet id="org.eclipse.cdt.ui.SearchActionSet"/>
+<alwaysOnActionSet id="org.eclipse.cdt.ui.CElementCreationActionSet"/>
+<alwaysOnActionSet id="org.eclipse.ui.NavigateActionSet"/>
+<alwaysOnActionSet id="org.eclipse.debug.ui.breakpointActionSet"/>
+<alwaysOnActionSet id="org.eclipse.cdt.make.ui.makeTargetActionSet"/>
+<alwaysOnActionSet id="org.eclipse.cdt.ui.CodingActionSet"/>
+<alwaysOnActionSet id="org.eclipse.debug.ui.launchActionSet"/>
+<alwaysOnActionSet id="org.eclipse.cdt.ui.buildConfigActionSet"/>
+<alwaysOnActionSet id="org.eclipse.cdt.ui.NavigationActionSet"/>
+<alwaysOnActionSet id="org.eclipse.cdt.ui.OpenActionSet"/>
+<alwaysOnActionSet id="org.eclipse.ui.edit.text.actionSet.presentation"/>
+<show_view_action id="org.eclipse.ui.console.ConsoleView"/>
+<show_view_action id="org.eclipse.search.ui.views.SearchView"/>
+<show_view_action id="org.eclipse.ui.views.ContentOutline"/>
+<show_view_action id="org.eclipse.ui.views.ProblemView"/>
+<show_view_action id="org.eclipse.cdt.ui.CView"/>
+<show_view_action id="org.eclipse.ui.views.ResourceNavigator"/>
+<show_view_action id="org.eclipse.ui.views.PropertySheet"/>
+<show_view_action id="org.eclipse.ui.views.TaskList"/>
+<show_view_action id="org.eclipse.cdt.make.ui.views.MakeView"/>
+<show_view_action id="org.eclipse.ui.navigator.ProjectExplorer"/>
+<show_view_action id="org.eclipse.cdt.ui.includeBrowser"/>
+<show_in_time id="org.eclipse.ui.views.ResourceNavigator" time="1187629972828"/>
+<new_wizard_action id="org.eclipse.cdt.ui.wizards.ConvertToMakeWizard"/>
+<new_wizard_action id="org.eclipse.cdt.ui.wizards.NewCWizard2"/>
+<new_wizard_action id="org.eclipse.cdt.ui.wizards.NewCWizard1"/>
+<new_wizard_action id="org.eclipse.cdt.ui.wizards.NewSourceFolderCreationWizard"/>
+<new_wizard_action id="org.eclipse.cdt.ui.wizards.NewFolderCreationWizard"/>
+<new_wizard_action id="org.eclipse.cdt.ui.wizards.NewSourceFileCreationWizard"/>
+<new_wizard_action id="org.eclipse.cdt.ui.wizards.NewHeaderFileCreationWizard"/>
+<new_wizard_action id="org.eclipse.cdt.ui.wizards.NewFileCreationWizard"/>
+<new_wizard_action id="org.eclipse.cdt.ui.wizards.NewClassCreationWizard"/>
+<perspective_action id="org.eclipse.debug.ui.DebugPerspective"/>
+<perspective_action id="org.eclipse.team.ui.TeamSynchronizingPerspective"/>
+<view id="org.eclipse.ui.navigator.ProjectExplorer"/>
+<view id="org.eclipse.ui.views.ResourceNavigator"/>
+<view id="org.eclipse.ui.views.ProblemView"/>
+<view id="org.eclipse.ui.views.TaskList"/>
+<view id="org.eclipse.ui.console.ConsoleView"/>
+<view id="org.eclipse.ui.views.PropertySheet"/>
+<view id="org.eclipse.search.ui.views.SearchView"/>
+<fastViewBars/>
+<layout>
+<mainWindow>
+<info folder="true" part="topLeft">
+<folder activePageID="org.eclipse.ui.views.ResourceNavigator" appearance="2" expanded="2">
+<page content="org.eclipse.ui.navigator.ProjectExplorer" label="Project Explorer"/>
+<page content="org.eclipse.ui.views.ResourceNavigator" label="Navigator"/>
+<page content="org.eclipse.cdt.ui.CView" label="LabelNotFound"/>
+<page content="org.eclipse.ui.views.BookmarkView" label="LabelNotFound"/>
+<presentation id="org.eclipse.ui.internal.presentations.r33.WorkbenchPresentationFactory_33">
+<part id="0"/>
+<part id="1"/>
+</presentation>
+</folder>
+</info>
+<info folder="true" part="org.eclipse.ui.internal.ViewStack@b4d39c" ratio="0.75" ratioLeft="756" ratioRight="252" relationship="2" relative="topLeft">
+<folder appearance="2" expanded="2">
+<page content="org.eclipse.help.ui.HelpView" label="LabelNotFound"/>
+<page content="org.eclipse.ui.internal.introview" label="LabelNotFound"/>
+<page content="org.eclipse.ui.cheatsheets.views.CheatSheetView" label="LabelNotFound"/>
+<presentation id="org.eclipse.ui.internal.presentations.r33.WorkbenchPresentationFactory_33"/>
+</folder>
+</info>
+<info part="org.eclipse.ui.editorss" ratio="0.19510439" ratioLeft="271" ratioRight="1118" relationship="2" relative="topLeft"/>
+<info folder="true" part="bottom" ratio="0.5195652" ratioLeft="478" ratioRight="442" relationship="4" relative="org.eclipse.ui.editorss">
+<folder activePageID="org.eclipse.ui.console.ConsoleView" appearance="2" expanded="2">
+<page content="org.eclipse.ui.views.ProblemView" label="Problems"/>
+<page content="org.eclipse.ui.views.TaskList" label="Tasks"/>
+<page content="org.eclipse.ui.console.ConsoleView" label="Console"/>
+<page content="org.eclipse.ui.views.PropertySheet" label="Properties"/>
+<page content="org.eclipse.search.ui.views.SearchView" label="Search"/>
+<presentation id="org.eclipse.ui.internal.presentations.r33.WorkbenchPresentationFactory_33">
+<part id="0"/>
+<part id="1"/>
+<part id="2"/>
+<part id="3"/>
+<part id="4"/>
+</presentation>
+</folder>
+</info>
+<info folder="true" part="topRight" ratio="0.75" ratioLeft="567" ratioRight="189" relationship="2" relative="org.eclipse.ui.editorss">
+<folder appearance="2" expanded="2">
+<page content="org.eclipse.ui.views.ContentOutline" label="LabelNotFound"/>
+<page content="org.eclipse.cdt.make.ui.views.MakeView" label="LabelNotFound"/>
+<presentation id="org.eclipse.ui.internal.presentations.r33.WorkbenchPresentationFactory_33"/>
+</folder>
+</info>
+</mainWindow>
+</layout>
+</perspective>
+<perspective editorAreaTrimState="2" editorAreaVisible="1" fixed="0" version="0.016">
+<descriptor class="org.eclipse.debug.internal.ui.DebugPerspectiveFactory" id="org.eclipse.debug.ui.DebugPerspective" label="Debug"/>
+<alwaysOnActionSet id="org.eclipse.ui.cheatsheets.actionSet"/>
+<alwaysOnActionSet id="org.eclipse.search.searchActionSet"/>
+<alwaysOnActionSet id="org.eclipse.ui.edit.text.actionSet.annotationNavigation"/>
+<alwaysOnActionSet id="org.eclipse.ui.edit.text.actionSet.navigation"/>
+<alwaysOnActionSet id="org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo"/>
+<alwaysOnActionSet id="org.eclipse.ui.externaltools.ExternalToolsSet"/>
+<alwaysOnActionSet id="org.eclipse.ui.actionSet.keyBindings"/>
+<alwaysOnActionSet id="org.eclipse.ui.WorkingSetActionSet"/>
+<alwaysOnActionSet id="org.eclipse.ui.actionSet.openFiles"/>
+<alwaysOnActionSet id="org.eclipse.update.ui.softwareUpdates"/>
+<alwaysOnActionSet id="org.eclipse.debug.ui.launchActionSet"/>
+<alwaysOnActionSet id="org.eclipse.cdt.debug.ui.debugActionSet"/>
+<alwaysOnActionSet id="org.eclipse.ui.NavigateActionSet"/>
+<alwaysOnActionSet id="org.eclipse.debug.ui.breakpointActionSet"/>
+<alwaysOnActionSet id="org.eclipse.jdt.debug.ui.JDTDebugActionSet"/>
+<alwaysOnActionSet id="org.eclipse.jdt.ui.JavaActionSet"/>
+<alwaysOnActionSet id="org.eclipse.debug.ui.debugActionSet"/>
+<show_view_action id="org.eclipse.debug.ui.DebugView"/>
+<show_view_action id="org.eclipse.debug.ui.VariableView"/>
+<show_view_action id="org.eclipse.debug.ui.BreakpointView"/>
+<show_view_action id="org.eclipse.debug.ui.ExpressionView"/>
+<show_view_action id="org.eclipse.ui.views.ContentOutline"/>
+<show_view_action id="org.eclipse.ui.console.ConsoleView"/>
+<show_view_action id="org.eclipse.ui.views.TaskList"/>
+<show_view_action id="org.eclipse.cdt.debug.ui.SignalsView"/>
+<show_view_action id="org.eclipse.debug.ui.RegisterView"/>
+<show_view_action id="org.eclipse.debug.ui.MemoryView"/>
+<show_view_action id="org.eclipse.cdt.debug.ui.DisassemblyView"/>
+<show_view_action id="org.eclipse.cdt.debug.ui.ModulesView"/>
+<show_view_action id="org.eclipse.ui.views.ProblemView"/>
+<perspective_action id="org.eclipse.cdt.ui.CPerspective"/>
+<view id="org.eclipse.ui.console.ConsoleView"/>
+<view id="org.eclipse.ui.views.TaskList"/>
+<view id="org.eclipse.ui.views.ProblemView"/>
+<view id="org.eclipse.debug.ui.DebugView"/>
+<view id="org.eclipse.debug.ui.VariableView"/>
+<view id="org.eclipse.debug.ui.BreakpointView"/>
+<view id="org.eclipse.debug.ui.ExpressionView"/>
+<fastViewBars/>
+<layout>&#x0A;<mainWindow>&#x0A;<info folder="true" part="org.eclipse.debug.internal.ui.NavigatorFolderView">&#x0A;<folder activePageID="org.eclipse.debug.ui.DebugView" appearance="2" expanded="2">&#x0A;<page content="org.eclipse.debug.ui.DebugView" label="Debug"/>
+<page content="org.eclipse.ui.views.ResourceNavigator" label="LabelNotFound"/>
+<presentation id="org.eclipse.ui.internal.presentations.r33.WorkbenchPresentationFactory_33">&#x0A;<part id="0"/>
+</presentation>
+</folder>
+</info>
+<info folder="true" part="stickyFolderRight" ratio="0.75" ratioLeft="1044" ratioRight="348" relationship="2" relative="org.eclipse.debug.internal.ui.NavigatorFolderView">&#x0A;<folder appearance="2" expanded="2">&#x0A;<page content="org.eclipse.help.ui.HelpView" label="LabelNotFound"/>
+<page content="org.eclipse.ui.internal.introview" label="LabelNotFound"/>
+<page content="org.eclipse.ui.cheatsheets.views.CheatSheetView" label="LabelNotFound"/>
+</folder>
+</info>
+<info folder="true" part="org.eclipse.debug.internal.ui.ConsoleFolderView" ratio="0.773913" ratioLeft="712" ratioRight="208" relationship="4" relative="org.eclipse.debug.internal.ui.NavigatorFolderView">&#x0A;<folder activePageID="org.eclipse.ui.console.ConsoleView" appearance="2" expanded="2">&#x0A;<page content="org.eclipse.ui.console.ConsoleView" label="Console"/>
+<page content="org.eclipse.ui.views.TaskList" label="Tasks"/>
+<page content="org.eclipse.ui.views.ProblemView" label="Problems"/>
+<page content="org.eclipse.debug.ui.MemoryView" label="LabelNotFound"/>
+<page content="org.eclipse.ui.views.BookmarkView" label="LabelNotFound"/>
+<page content="org.eclipse.ui.views.PropertySheet" label="LabelNotFound"/>
+<presentation id="org.eclipse.ui.internal.presentations.r33.WorkbenchPresentationFactory_33">&#x0A;<part id="0"/>
+<part id="1"/>
+<part id="2"/>
+</presentation>
+</folder>
+</info>
+<info part="org.eclipse.ui.editorss" ratio="0.370945" ratioLeft="263" ratioRight="446" relationship="4" relative="org.eclipse.debug.internal.ui.NavigatorFolderView"/>
+<info folder="true" part="org.eclipse.debug.internal.ui.OutlineFolderView" ratio="0.475162" ratioLeft="660" ratioRight="729" relationship="2" relative="org.eclipse.ui.editorss">&#x0A;<folder appearance="2" expanded="2">&#x0A;<page content="org.eclipse.cdt.debug.ui.DisassemblyView" label="LabelNotFound"/>
+<page content="org.eclipse.ui.views.ContentOutline" label="LabelNotFound"/>
+<presentation id="org.eclipse.ui.internal.presentations.r33.WorkbenchPresentationFactory_33"/>
+</folder>
+</info>
+<info folder="true" part="org.eclipse.debug.internal.ui.ToolsFolderView" ratio="0.49964002" ratioLeft="694" ratioRight="695" relationship="2" relative="org.eclipse.debug.internal.ui.NavigatorFolderView">&#x0A;<folder activePageID="org.eclipse.debug.ui.BreakpointView" appearance="2" expanded="2">&#x0A;<page content="org.eclipse.debug.ui.VariableView" label="Variables"/>
+<page content="org.eclipse.debug.ui.BreakpointView" label="Breakpoints"/>
+<page content="org.eclipse.debug.ui.ExpressionView" label="Expressions"/>
+<page content="org.eclipse.debug.ui.RegisterView" label="LabelNotFound"/>
+<page content="org.eclipse.cdt.debug.ui.ModulesView" label="LabelNotFound"/>
+<page content="org.eclipse.cdt.debug.ui.SignalsView" label="LabelNotFound"/>
+<presentation id="org.eclipse.ui.internal.presentations.r33.WorkbenchPresentationFactory_33">&#x0A;<part id="0"/>
+<part id="1"/>
+<part id="2"/>
+</presentation>
+</folder>
+</info>
+</mainWindow>
+</layout>
+</perspective>
+</perspectives>
+<workingSets>
+<workingSet IMemento.internal.id="FreeRTOS_LM3S8962_Demo"/>
+</workingSets>
+<navigationHistory/>
+<input factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/" type="8"/>
+</page>
+<workbenchWindowAdvisor/>
+<actionBarAdvisor/>
+<trimLayout>
+<trimArea IMemento.internal.id="128">
+<trimItem IMemento.internal.id="org.eclipse.ui.internal.WorkbenchWindow.topBar"/>
+</trimArea>
+<trimArea IMemento.internal.id="1024">
+<trimItem IMemento.internal.id="org.eclise.ui.internal.FastViewBar"/>
+<trimItem IMemento.internal.id="org.eclipse.jface.action.StatusLineManager"/>
+<trimItem IMemento.internal.id="org.eclipse.ui.internal.progress.ProgressRegion"/>
+</trimArea>
+</trimLayout>
+</window>
+<mruList>
+<file factoryID="org.eclipse.ui.part.FileEditorInputFactory" id="org.eclipse.cdt.ui.editor.CEditor" name="tasks.c" tooltip="RTOSDemo/FreeRTOS.org Source/tasks.c">
+<persistable path="/RTOSDemo/FreeRTOS.org Source/tasks.c"/>
+</file>
+<file factoryID="org.eclipse.ui.part.FileEditorInputFactory" id="org.eclipse.cdt.ui.editor.CEditor" name="main.c" tooltip="RTOSDemo/main.c">
+<persistable path="/RTOSDemo/main.c"/>
+</file>
+<file factoryID="org.eclipse.ui.part.FileEditorInputFactory" id="org.eclipse.cdt.ui.editor.CEditor" name="USB_ISR.c" tooltip="RTOSDemo/USB/USB_ISR.c">
+<persistable path="/RTOSDemo/USB/USB_ISR.c"/>
+</file>
+<file factoryID="org.eclipse.ui.part.FileEditorInputFactory" id="org.eclipse.cdt.ui.editor.CEditor" name="USBSample.c" tooltip="RTOSDemo/USB/USBSample.c">
+<persistable path="/RTOSDemo/USB/USBSample.c"/>
+</file>
+<file factoryID="org.eclipse.ui.part.FileEditorInputFactory" id="org.eclipse.cdt.ui.editor.CEditor" name="queue.c" tooltip="RTOSDemo/FreeRTOS.org Source/queue.c">
+<persistable path="/RTOSDemo/FreeRTOS.org Source/queue.c"/>
+</file>
+<file factoryID="org.eclipse.ui.part.FileEditorInputFactory" id="org.eclipse.cdt.make.editor" name="Makefile" tooltip="RTOSDemo/Makefile">
+<persistable path="/RTOSDemo/Makefile"/>
+</file>
+<file factoryID="org.eclipse.ui.part.FileEditorInputFactory" id="org.eclipse.cdt.ui.editor.CEditor" name="blocktim.c" tooltip="RTOSDemo/Common Demo Files/Minimal/blocktim.c">
+<persistable path="/RTOSDemo/Common Demo Files/Minimal/blocktim.c"/>
+</file>
+<file factoryID="org.eclipse.ui.part.FileEditorInputFactory" id="org.eclipse.cdt.ui.editor.CEditor" name="QPeek.c" tooltip="RTOSDemo/Common Demo Files/Minimal/QPeek.c">
+<persistable path="/RTOSDemo/Common Demo Files/Minimal/QPeek.c"/>
+</file>
+<file factoryID="org.eclipse.ui.part.FileEditorInputFactory" id="org.eclipse.cdt.ui.editor.CEditor" name="GenQTest.c" tooltip="RTOSDemo/Common Demo Files/Minimal/GenQTest.c">
+<persistable path="/RTOSDemo/Common Demo Files/Minimal/GenQTest.c"/>
+</file>
+<file factoryID="org.eclipse.ui.part.FileEditorInputFactory" id="org.eclipse.cdt.ui.editor.CEditor" name="dynamic.c" tooltip="RTOSDemo/Common Demo Files/Minimal/dynamic.c">
+<persistable path="/RTOSDemo/Common Demo Files/Minimal/dynamic.c"/>
+</file>
+<file factoryID="org.eclipse.ui.part.FileEditorInputFactory" id="org.eclipse.cdt.ui.editor.CEditor" name="BlockQ.c" tooltip="RTOSDemo/Common Demo Files/Minimal/BlockQ.c">
+<persistable path="/RTOSDemo/Common Demo Files/Minimal/BlockQ.c"/>
+</file>
+<file factoryID="org.eclipse.ui.part.FileEditorInputFactory" id="org.eclipse.cdt.ui.editor.CEditor" name="ParTest.c" tooltip="RTOSDemo/ParTest/ParTest.c">
+<persistable path="/RTOSDemo/ParTest/ParTest.c"/>
+</file>
+<file factoryID="org.eclipse.ui.part.FileEditorInputFactory" id="org.eclipse.cdt.ui.editor.CEditor" name="FreeRTOSConfig.h" tooltip="RTOSDemo/FreeRTOSConfig.h">
+<persistable path="/RTOSDemo/FreeRTOSConfig.h"/>
+</file>
+<file factoryID="org.eclipse.ui.part.FileEditorInputFactory" id="org.eclipse.cdt.ui.editor.CEditor" name="httpd.c" tooltip="RTOSDemo/webserver/httpd.c">
+<persistable path="/RTOSDemo/webserver/httpd.c"/>
+</file>
+<file factoryID="org.eclipse.ui.part.FileEditorInputFactory" id="org.eclipse.cdt.ui.editor.CEditor" name="portmacro.h" tooltip="RTOSDemo/FreeRTOS.org Source/portable/GCC/ARM7_AT91SAM7S/portmacro.h">
+<persistable path="/RTOSDemo/FreeRTOS.org Source/portable/GCC/ARM7_AT91SAM7S/portmacro.h"/>
+</file>
+</mruList>
+</workbench>
\ No newline at end of file
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml
new file mode 100644
index 0000000000..a34189f07b
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<workingSetManager>
+<workingSet editPageId="org.eclipse.cdt.ui.CElementWorkingSetPage" factoryID="org.eclipse.ui.internal.WorkingSetFactory" label="FreeRTOS_LM3S8962_Demo" name="FreeRTOS_LM3S8962_Demo">
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/webserver/httpd-fs.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/timer.h" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/uip.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/uip_arp.h" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/uiplib.h" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/FreeRTOS.org Source/queue.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/uipopt.h" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/uip.h" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/uip-split.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/Minimal/dynamic.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/psock.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/uip-fw.h" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/webserver/httpd-fsdata.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/uip-neighbor.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/FreeRTOS.org Source/include" type="2"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/webserver/httpd-fs" type="2"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/timer.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/ParTest/ParTest.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/Minimal/QPeek.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/FreeRTOS.org Source/portable/MemMang/heap_2.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/main.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/Minimal/flash.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/FreeRTOS.org Source/portable/GCC/ARM7_AT91SAM7S/lib_AT91SAM7X256.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/webserver/EMAC_ISR.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/FreeRTOS.org Source/list.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/clock.h" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/lc.h" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/FreeRTOS.org Source/portable/GCC/ARM7_AT91SAM7S/portmacro.h" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/USB/USB_ISR.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/webserver/httpd-cgi.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/webserver/uIP_Task.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/FreeRTOS.org Source/portable/GCC/ARM7_AT91SAM7S/portISR.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/webserver/SAM7_EMAC.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/Minimal/BlockQ.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/FreeRTOS.org Source/portable/GCC/ARM7_AT91SAM7S/port.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/psock.h" type="1"/>
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/RTOSDemo/Makefile" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/uip-neighbor.h" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/FreeRTOSConfig.h" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/lc-switch.h" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/Minimal/GenQTest.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/FreeRTOS.org Source/tasks.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/uip-fw.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/uiplib.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/lc-addrlabels.h" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/uip-split.h" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/webserver/httpd.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/USB/USBSample.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/boot.s" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/Minimal/blocktim.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/webserver/http-strings.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/uip_arch.h" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/uip_arp.c" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/ethernet/uIP/uip-1.0/uip/pt.h" type="1"/>
+<item factoryID="org.eclipse.cdt.ui.PersistableCElementFactory" path="/RTOSDemo/Common Demo Files/include" type="2"/>
+</workingSet>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" label="Window Working Set" name="Aggregate for window 1188147282312">
+<workingSet IMemento.internal.id="FreeRTOS_LM3S8962_Demo"/>
+</workingSet>
+<mruList name="FreeRTOS_LM3S8962_Demo"/>
+</workingSetManager>
\ No newline at end of file
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui/dialog_settings.xml b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui/dialog_settings.xml
new file mode 100644
index 0000000000..64561b65c0
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.ui/dialog_settings.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+	<section name="FileSystemImportWizard">
+		<item value="false" key="WizardFileSystemResourceImportPage1.STORE_OVERWRITE_EXISTING_RESOURCES_ID"/>
+		<item value="false" key="WizardFileSystemResourceImportPage1.STORE_CREATE_CONTAINER_STRUCTURE_ID"/>
+		<list key="WizardFileSystemResourceImportPage1.STORE_SOURCE_NAMES_ID">
+			<item value="C:\E\Dev\FreeRTOS\Demo\CORTEX_LM3S8962_Eclipse"/>
+		</list>
+	</section>
+</section>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.update.ui/dialog_settings.xml b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.update.ui/dialog_settings.xml
new file mode 100644
index 0000000000..86928e08cf
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.plugins/org.eclipse.update.ui/dialog_settings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+	<section name="ModeSelectionPage">
+	</section>
+</section>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/version.ini b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/version.ini
new file mode 100644
index 0000000000..c51ff745b6
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/version.ini
@@ -0,0 +1 @@
+org.eclipse.core.runtime=1
\ No newline at end of file
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/.cproject b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/.cproject
new file mode 100644
index 0000000000..bbcae405f6
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/.cproject
@@ -0,0 +1,230 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?>
+
+<cproject>
+<storageModule moduleId="org.eclipse.cdt.core.settings">
+<cconfiguration id="0.1109417601">
+<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.1109417601" moduleId="org.eclipse.cdt.core.settings" name="Default">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+<configuration artifactExtension="" artifactName="RTOSDemo" buildProperties="" description="" id="0.1109417601" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
+<folderInfo id="0.1109417601." name="/" resourcePath="">
+<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.1816209921" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
+<targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.eclipse.cdt.build.core.prefbase.toolchain.1816209921.1299943801" name=""/>
+<builder autoBuildTarget="all" buildPath="${workspace_loc:/RTOSDemo}" cleanBuildTarget="clean" command="make" enableAutoBuild="false" enableCleanBuild="true" enabledIncrementalBuild="true" id="org.eclipse.cdt.build.core.settings.default.builder.116472864" incrementalBuildTarget="all" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="org.eclipse.cdt.build.core.settings.default.builder">
+<outputEntries>
+<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="outputPath" name=""/>
+</outputEntries>
+</builder>
+<tool id="org.eclipse.cdt.build.core.settings.holder.libs.260784574" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
+<tool id="org.eclipse.cdt.build.core.settings.holder.1502006385" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
+<option id="org.eclipse.cdt.build.core.settings.holder.undef.incpaths.578007234" name="Undefined Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.undef.incpaths"/>
+<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.685511860" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
+</tool>
+<tool id="org.eclipse.cdt.build.core.settings.holder.1021181093" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
+<option id="org.eclipse.cdt.build.core.settings.holder.undef.incpaths.1567637665" name="Undefined Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.undef.incpaths"/>
+<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1828415025" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
+</tool>
+<tool id="org.eclipse.cdt.build.core.settings.holder.164584712" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
+<option id="org.eclipse.cdt.build.core.settings.holder.undef.incpaths.1309366258" name="Undefined Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.undef.incpaths"/>
+<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1667472855" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
+</tool>
+</toolChain>
+</folderInfo>
+<sourceEntries>
+<entry excluding="Common Demo Files|FreeRTOS.org Source|Source|Minimal" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
+<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="FreeRTOS.org Source"/>
+<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Common Demo Files"/>
+</sourceEntries>
+</configuration>
+</storageModule>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
+
+
+
+
+<storageModule moduleId="scannerConfiguration">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="false" filePath=""/>
+<parser enabled="false"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="false" filePath=""/>
+<parser enabled="false"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="false" filePath=""/>
+<parser enabled="false"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="false" filePath=""/>
+<parser enabled="false"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="false" filePath=""/>
+<parser enabled="false"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="false" filePath=""/>
+<parser enabled="false"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<scannerConfigBuildInfo instanceId="0.1109417601">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="arm-elf-gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="false"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="false"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="false"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="false"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="false"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="false"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+</scannerConfigBuildInfo>
+</storageModule>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping">
+<project-mappings/>
+</storageModule>
+</cconfiguration>
+</storageModule>
+<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+<project id="RTOSDemo.null.976634949" name="RTOSDemo"/>
+</storageModule>
+</cproject>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/.project b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/.project
new file mode 100644
index 0000000000..b3776decb0
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/.project
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>RTOSDemo</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+			<triggers>clean,full,incremental,</triggers>
+			<arguments>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
+					<value>clean</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>?name?</key>
+					<value></value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.append_environment</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.stopOnError</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.buildCommand</key>
+					<value>make</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.contents</key>
+					<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.buildLocation</key>
+					<value>${workspace_loc:/RTOSDemo}</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
+					<value>false</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
+					<value>false</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.enableFullBuild</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.buildArguments</key>
+					<value></value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.fullBuildTarget</key>
+					<value>all</value>
+				</dictionary>
+				<dictionary>
+					<key>?children?</key>
+					<value>?name?=outputEntries\|?children?=?name?=entry\\\\\\\\\\\\\\\|\\\\\\\|\||</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.autoBuildTarget</key>
+					<value>all</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+		<nature>org.eclipse.cdt.core.cnature</nature>
+	</natures>
+	<linkedResources>
+		<link>
+			<name>Common Demo Files</name>
+			<type>2</type>
+			<locationURI>FreeRTOS_ROOT/Demo/Common</locationURI>
+		</link>
+		<link>
+			<name>FreeRTOS.org Source</name>
+			<type>2</type>
+			<locationURI>FreeRTOS_ROOT/Source</locationURI>
+		</link>
+	</linkedResources>
+</projectDescription>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/.settings/org.eclipse.ltk.core.refactoring.prefs b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000000..a9f7e81cf6
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Sun Aug 19 20:36:58 BST 2007
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/FreeRTOSConfig.h b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/FreeRTOSConfig.h
new file mode 100644
index 0000000000..1f4221194d
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/FreeRTOSConfig.h
@@ -0,0 +1,99 @@
+/*
+	FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 Richard Barry.
+
+	This file is part of the FreeRTOS.org distribution.
+
+	FreeRTOS.org 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 2 of the License, or
+	(at your option) any later version.
+
+	FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+	A special exception to the GPL can be applied should you wish to distribute
+	a combined work that includes FreeRTOS.org, without being obliged to provide
+	the source code for any proprietary components.  See the licensing section 
+	of http://www.FreeRTOS.org for full details of how and when the exception
+	can be applied.
+
+	***************************************************************************
+	See http://www.FreeRTOS.org for documentation, latest information, license 
+	and contact details.  Please ensure to read the configuration and relevant 
+	port sections of the online documentation.
+
+	Also see http://www.SafeRTOS.com a version that has been certified for use
+	in safety critical systems, plus commercial licensing, development and
+	support options.
+	***************************************************************************
+*/
+
+#ifndef FREERTOS_CONFIG_H
+#define FREERTOS_CONFIG_H
+
+#include <stdio.h>
+#include "AT91SAM7X256.h"
+/*-----------------------------------------------------------
+ * Application specific definitions.
+ *
+ * These definitions should be adjusted for your particular hardware and
+ * application requirements.
+ *
+ * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. 
+ *----------------------------------------------------------*/
+
+#define configUSE_PREEMPTION		1
+#define configUSE_IDLE_HOOK         0
+#define configUSE_TICK_HOOK         1
+#define configCPU_CLOCK_HZ          ( ( unsigned portLONG ) 47923200 )
+#define configTICK_RATE_HZ          ( ( portTickType ) 1000 )
+#define configMAX_PRIORITIES		( ( unsigned portBASE_TYPE ) 4 )
+#define configMINIMAL_STACK_SIZE	( ( unsigned portSHORT ) 130 )
+#define configTOTAL_HEAP_SIZE		( ( size_t ) ( 24 * 1024 ) )
+#define configMAX_TASK_NAME_LEN		( 10 )
+#define configUSE_TRACE_FACILITY	1
+#define configUSE_16_BIT_TICKS		0
+#define configIDLE_SHOULD_YIELD		1
+#define configUSE_MUTEXES			1
+
+/* Co-routine definitions. */
+#define configUSE_CO_ROUTINES 		0
+#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
+
+
+/* Set the following definitions to 1 to include the API function, or zero
+to exclude the API function. */
+
+#define INCLUDE_vTaskPrioritySet            1
+#define INCLUDE_uxTaskPriorityGet           1
+#define INCLUDE_vTaskDelete                 1
+#define INCLUDE_vTaskCleanUpResources       0
+#define INCLUDE_vTaskSuspend                1
+#define INCLUDE_vTaskDelayUntil             1
+#define INCLUDE_vTaskDelay                  1
+#define INCLUDE_xTaskGetCurrentTaskHandle	1
+
+
+
+/* MAC address configuration. */
+#define uipMAC_ADDR0	0x00
+#define uipMAC_ADDR1	0x12
+#define uipMAC_ADDR2	0x13
+#define uipMAC_ADDR3	0x10
+#define uipMAC_ADDR4	0x15
+#define uipMAC_ADDR5	0x11
+
+/* IP address configuration. */
+#define uipIP_ADDR0		172
+#define uipIP_ADDR1		25
+#define uipIP_ADDR2		218
+#define uipIP_ADDR3		10	
+
+#endif /* FREERTOS_CONFIG_H */
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/Makefile b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/Makefile
new file mode 100644
index 0000000000..8b486a147f
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/Makefile
@@ -0,0 +1,132 @@
+#	FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 Richard Barry.
+#
+#	This file is part of the FreeRTOS.org distribution.
+#
+#	FreeRTOS.org 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 2 of the License, or
+#	(at your option) any later version.
+#
+#	FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software
+#	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+#	A special exception to the GPL can be applied should you wish to distribute
+#	a combined work that includes FreeRTOS.org, without being obliged to provide
+#	the source code for any proprietary components.  See the licensing section 
+#	of http://www.FreeRTOS.org for full details of how and when the exception
+#	can be applied.
+#
+#	***************************************************************************
+#	See http://www.FreeRTOS.org for documentation, latest information, license 
+#	and contact details.  Please ensure to read the configuration and relevant 
+#	port sections of the online documentation.
+#	***************************************************************************
+
+
+RTOS_SOURCE_DIR=../../../Source
+DEMO_COMMON_DIR=../../Common/Minimal
+DEMO_INCLUDE_DIR=../../Common/include
+UIP_COMMON_DIR=../../Common/ethernet/uIP/uip-1.0/uip
+
+CC=arm-elf-gcc
+OBJCOPY=arm-elf-objcopy
+LDSCRIPT=atmel-rom.ld
+
+LINKER_FLAGS=-mthumb -nostartfiles -Xlinker -oRTOSDemo.elf -Xlinker -M -Xlinker -Map=rtosdemo.map
+
+DEBUG=-g
+OPTIM=-O3
+
+
+CFLAGS= $(DEBUG) \
+		$(OPTIM) \
+		-T$(LDSCRIPT) \
+		-I . \
+		-I $(RTOS_SOURCE_DIR)/include \
+		-I $(RTOS_SOURCE_DIR)/portable/GCC/ARM7_AT91SAM7S \
+		-I $(DEMO_INCLUDE_DIR) \
+		-I ./webserver \
+		-I $(UIP_COMMON_DIR) \
+		-I ./SrcAtmel \
+		-I ./USB \
+		-D SAM7_GCC \
+		-D THUMB_INTERWORK \
+		-mcpu=arm7tdmi \
+		-D PACK_STRUCT_END=__attribute\(\(packed\)\) \
+		-D ALIGN_STRUCT_END=__attribute\(\(aligned\(4\)\)\) \
+		-fomit-frame-pointer \
+		-mthumb-interwork
+										
+THUMB_SOURCE= \
+		main.c \
+		./ParTest/ParTest.c \
+		$(DEMO_COMMON_DIR)/BlockQ.c \
+		$(DEMO_COMMON_DIR)/blocktim.c \
+		$(DEMO_COMMON_DIR)/flash.c \
+		$(DEMO_COMMON_DIR)/integer.c \
+		$(DEMO_COMMON_DIR)/GenQTest.c \
+		$(DEMO_COMMON_DIR)/QPeek.c \
+		$(DEMO_COMMON_DIR)/dynamic.c \
+		./webserver/uIP_Task.c \
+		./webserver/httpd.c \
+		./webserver/httpd-cgi.c \
+		./webserver/httpd-fs.c \
+		./webserver/http-strings.c \
+		./webserver/SAM7_EMAC.c \
+		$(UIP_COMMON_DIR)/uip_arp.c \
+		$(UIP_COMMON_DIR)/psock.c \
+		$(UIP_COMMON_DIR)/timer.c \
+		$(UIP_COMMON_DIR)/uip.c \
+		$(RTOS_SOURCE_DIR)/list.c \
+		$(RTOS_SOURCE_DIR)/queue.c \
+		$(RTOS_SOURCE_DIR)/tasks.c \
+		$(RTOS_SOURCE_DIR)/portable/GCC/ARM7_AT91SAM7S/port.c \
+		$(RTOS_SOURCE_DIR)/portable/MemMang/heap_2.c \
+		./USB/USBSample.c
+
+ARM_SOURCE= \
+		$(RTOS_SOURCE_DIR)/portable/GCC/ARM7_AT91SAM7S/portISR.c \
+		./webserver/emac_isr.c \
+		./SrcAtmel/Cstartup_SAM7.c \
+		./USB/USB_ISR.c
+
+THUMB_OBJS = $(THUMB_SOURCE:.c=.o)
+ARM_OBJS = $(ARM_SOURCE:.c=.o)
+
+
+all: RTOSDemo.bin
+
+RTOSDemo.bin : RTOSDemo.hex
+	$(OBJCOPY) RTOSDemo.elf -O binary RTOSDemo.bin
+	 
+RTOSDemo.hex : RTOSDemo.elf
+	$(OBJCOPY) RTOSDemo.elf -O ihex RTOSDemo.hex
+
+RTOSDemo.elf : $(THUMB_OBJS) $(ARM_OBJS) boot.s Makefile
+	$(CC) $(CFLAGS) $(ARM_OBJS) $(THUMB_OBJS) $(LIBS) boot.s $(LINKER_FLAGS) 
+
+$(THUMB_OBJS) : %.o : %.c Makefile FreeRTOSConfig.h
+	$(CC) -c $(CFLAGS) -mthumb $< -o $@
+
+$(ARM_OBJS) : %.o : %.c Makefile FreeRTOSConfig.h
+	$(CC) -c $(CFLAGS) $< -o $@
+
+clean :
+	rm $(THUMB_OBJS)
+	rm $(ARM_OBJS)
+	touch Makefile
+	rm RTOSDemo.elf
+	rm RTOSDemo.hex
+	
+	
+	
+
+
+
+
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/ParTest/ParTest.c b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/ParTest/ParTest.c
new file mode 100644
index 0000000000..3ef97ab39b
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/ParTest/ParTest.c
@@ -0,0 +1,101 @@
+/*
+	FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 Richard Barry.
+
+	This file is part of the FreeRTOS.org distribution.
+
+	FreeRTOS.org 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 2 of the License, or
+	(at your option) any later version.
+
+	FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+	A special exception to the GPL can be applied should you wish to distribute
+	a combined work that includes FreeRTOS.org, without being obliged to provide
+	the source code for any proprietary components.  See the licensing section 
+	of http://www.FreeRTOS.org for full details of how and when the exception
+	can be applied.
+
+	***************************************************************************
+	See http://www.FreeRTOS.org for documentation, latest information, license 
+	and contact details.  Please ensure to read the configuration and relevant 
+	port sections of the online documentation.
+
+	Also see http://www.SafeRTOS.com a version that has been certified for use
+	in safety critical systems, plus commercial licensing, development and
+	support options.
+	***************************************************************************
+*/
+
+/* Scheduler includes. */
+#include "FreeRTOS.h"
+
+/* Demo application includes. */
+#include "partest.h"
+
+/*-----------------------------------------------------------
+ * Simple parallel port IO routines for the LED's.  LED's can be set, cleared
+ * or toggled.
+ *-----------------------------------------------------------*/
+
+#define partstNUM_LEDS		( 4 )
+#define partstALL_LEDS		( ulLED_Mask[ 0 ] | ulLED_Mask[ 1 ] | ulLED_Mask[ 2 ] | ulLED_Mask[ 3 ] )
+const unsigned portLONG 	ulLED_Mask[ partstNUM_LEDS ]= { (1<<19), (1<<20), (1<<21), (1<<22) };
+
+
+void vParTestInitialise( void )
+{	
+	/* Configure the PIO Lines corresponding to LED1 to LED4 to be outputs. */
+	AT91C_BASE_PIOB->PIO_PER = partstALL_LEDS; 
+	AT91C_BASE_PIOB->PIO_OER = partstALL_LEDS; 
+
+	/* Start with all LED's off. */
+    AT91C_BASE_PIOB->PIO_SODR = partstALL_LEDS;
+}
+/*-----------------------------------------------------------*/
+
+void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )
+{
+	if( uxLED < ( portBASE_TYPE ) partstNUM_LEDS )
+	{
+		if( xValue )
+		{
+			AT91C_BASE_PIOB->PIO_SODR = ulLED_Mask[ uxLED ];
+		}
+		else
+		{
+			AT91C_BASE_PIOB->PIO_CODR = ulLED_Mask[ uxLED ];
+		}
+	}
+}
+/*-----------------------------------------------------------*/
+
+void vParTestToggleLED( unsigned portBASE_TYPE uxLED )
+{
+	if( uxLED < ( portBASE_TYPE ) partstNUM_LEDS )
+	{
+		if( AT91C_BASE_PIOB->PIO_PDSR & ulLED_Mask[ uxLED ] )
+		{
+			AT91C_BASE_PIOB->PIO_CODR = ulLED_Mask[ uxLED ];
+		}
+		else
+		{
+			AT91C_BASE_PIOB->PIO_SODR = ulLED_Mask[ uxLED ];
+		}
+	}
+}
+/*-----------------------------------------------------------*/
+
+unsigned portBASE_TYPE uxParTestGetLED( void )
+{
+	/* Return the value of LED DS4 for use by the WEB server. */
+	return !( AT91C_BASE_PIOB->PIO_PDSR & ulLED_Mask[ partstNUM_LEDS - 1 ] );
+}
+
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/SrcAtmel/Board.h b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/SrcAtmel/Board.h
new file mode 100644
index 0000000000..8b34427a00
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/SrcAtmel/Board.h
@@ -0,0 +1,68 @@
+/*----------------------------------------------------------------------------
+*         ATMEL Microcontroller Software Support  -  ROUSSET  -
+*----------------------------------------------------------------------------
+* The software is delivered "AS IS" without warranty or condition of any
+* kind, either express, implied or statutory. This includes without
+* limitation any warranty or condition with respect to merchantability or
+* fitness for any particular purpose, or against the infringements of
+* intellectual property rights of others.
+*----------------------------------------------------------------------------
+* File Name           : Board.h
+* Object              : AT91SAM7X Evaluation Board Features Definition File.
+*
+* Creation            : JG   20/Jun/2005
+*----------------------------------------------------------------------------
+*/
+#ifndef Board_h
+#define Board_h
+
+#include "AT91SAM7X256.h"
+#include "ioat91sam7x256.h"
+
+#define true	-1
+#define false	0
+
+/*-------------------------------*/
+/* SAM7Board Memories Definition */
+/*-------------------------------*/
+// The AT91SAM7X128 embeds a 32-Kbyte SRAM bank, and 128K-Byte Flash
+
+#define  FLASH_PAGE_NB		256
+#define  FLASH_PAGE_SIZE	128
+
+/*-----------------*/
+/* Leds Definition */
+/*-----------------*/
+#define LED1            (1<<19)	// PB19
+#define LED2            (1<<20)	// PB20
+#define LED3            (1<<21)	// PB21
+#define LED4            (1<<22)	// PB22
+#define NB_LED			4
+
+#define LED_MASK        (LED1|LED2|LED3|LED4)
+
+/*-------------------------*/
+/* Push Buttons Definition */
+/*-------------------------*/
+
+#define SW1_MASK        (1<<21)	// PA21
+#define SW2_MASK        (1<<22)	// PA22
+#define SW3_MASK        (1<<23)	// PA23
+#define SW4_MASK        (1<<24)	// PA24
+#define SW_MASK         (SW1_MASK|SW2_MASK|SW3_MASK|SW4_MASK)
+
+
+#define SW1 	(1<<21)	// PA21
+#define SW2 	(1<<22)	// PA22
+#define SW3 	(1<<23)	// PA23
+#define SW4 	(1<<24)	// PA24
+#define SWPUSH	(1<<25) // PA25
+/*--------------*/
+/* Master Clock */
+/*--------------*/
+
+#define EXT_OC          18432000   // Exetrnal ocilator MAINCK
+#define MCK             47923200   // MCK (PLLRC div by 2)
+#define MCKKHz          (MCK/1000) //
+
+#endif /* Board_h */
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/SrcAtmel/Cstartup.s79 b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/SrcAtmel/Cstartup.s79
new file mode 100644
index 0000000000..b875618fcb
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/SrcAtmel/Cstartup.s79
@@ -0,0 +1,223 @@
+;------------------------------------------------------------------------------
+;-         ATMEL Microcontroller Software Support  -  ROUSSET  -
+;------------------------------------------------------------------------------
+; The software is delivered "AS IS" without warranty or condition of any
+; kind, either express, implied or statutory. This includes without
+; limitation any warranty or condition with respect to merchantability or
+; fitness for any particular purpose, or against the infringements of
+; intellectual property rights of others.
+;-----------------------------------------------------------------------------
+;- File source          : Cstartup.s79
+;- Object               : Generic CStartup for IAR No Use REMAP
+;- Compilation flag     : None
+;-
+;- 1.0 15/Jun/04 JPP    : Creation
+;------------------------------------------------------------------------------
+
+#include "AT91SAM7X256_inc.h"
+
+;------------------------------------------------------------------------------
+;- Area Definition
+;------------------------------------------------------------------------------
+
+;---------------------------------------------------------------
+; ?RESET
+; Reset Vector.
+; Normally, segment INTVEC is linked at address 0.
+; For debugging purposes, INTVEC may be placed at other
+; addresses.
+; A debugger that honors the entry point will start the
+; program in a normal way even if INTVEC is not at address 0.
+;-------------------------------------------------------------
+
+		PROGRAM	?RESET
+		RSEG	INTRAMSTART_REMAP
+		RSEG	INTRAMEND_REMAP
+
+		EXTERN	vPortYieldProcessor
+
+		RSEG	ICODE:CODE:ROOT(2)
+		CODE32	; Always ARM mode after reset	
+		org	0	
+reset		
+;------------------------------------------------------------------------------
+;- Exception vectors
+;--------------------
+;- These vectors can be read at address 0 or at RAM address
+;- They ABSOLUTELY requires to be in relative addresssing mode in order to
+;- guarantee a valid jump. For the moment, all are just looping.
+;- If an exception occurs before remap, this would result in an infinite loop.
+;- To ensure if a exeption occurs before start application to infinite loop.
+;------------------------------------------------------------------------------
+
+                B           InitReset           ; 0x00 Reset handler
+undefvec:
+                B           undefvec            ; 0x04 Undefined Instruction
+swivec:
+                B           vPortYieldProcessor ; 0x08 Software Interrupt
+pabtvec:
+                B           pabtvec             ; 0x0C Prefetch Abort
+dabtvec:
+                B           dabtvec             ; 0x10 Data Abort
+rsvdvec:
+                B           rsvdvec             ; 0x14 reserved
+irqvec:
+				LDR			PC, [PC, #-0xF20]	; Jump directly to the address given by the AIC
+
+fiqvec:               							; 0x1c FIQ
+
+;------------------------------------------------------------------------------
+;- Function             : FIQ_Handler_Entry
+;- Treatments           : FIQ Controller Interrupt Handler.
+;- Called Functions     : AIC_FVR[interrupt]
+;------------------------------------------------------------------------------
+
+FIQ_Handler_Entry:
+
+;- Switch in SVC/User Mode to allow User Stack access for C code
+; because the FIQ is not yet acknowledged
+
+;- Save and r0 in FIQ_Register
+            mov         r9,r0
+		    ldr         r0 , [r8, #AIC_FVR]
+            msr         CPSR_c,#I_BIT | F_BIT | ARM_MODE_SVC
+
+;- Save scratch/used registers and LR in User Stack
+            stmfd       sp!, { r1-r3, r12, lr}
+
+;- Branch to the routine pointed by the AIC_FVR
+            mov         r14, pc
+            bx          r0
+
+;- Restore scratch/used registers and LR from User Stack
+            ldmia       sp!, { r1-r3, r12, lr}
+
+;- Leave Interrupts disabled and switch back in FIQ mode
+            msr         CPSR_c, #I_BIT | F_BIT | ARM_MODE_FIQ
+
+;- Restore the R0 ARM_MODE_SVC register
+            mov         r0,r9
+
+;- Restore the Program Counter using the LR_fiq directly in the PC
+            subs        pc,lr,#4
+
+InitReset:
+;------------------------------------------------------------------------------
+;- Low level Init (PMC, AIC, ? ....) by C function AT91F_LowLevelInit
+;------------------------------------------------------------------------------
+            	EXTERN   AT91F_LowLevelInit
+
+#define  __iramend 	SFB(INTRAMEND_REMAP)
+
+;- minumum C initialization
+;- call  AT91F_LowLevelInit( void)
+
+            ldr     r13,=__iramend            ; temporary stack in internal RAM
+;--Call Low level init function in ABSOLUTE through the Interworking
+		    ldr	    r0,=AT91F_LowLevelInit
+       	    mov     lr, pc
+		    bx	    r0
+;------------------------------------------------------------------------------
+;- Stack Sizes Definition
+;------------------------
+;- Interrupt Stack requires 2 words x 8 priority level x 4 bytes when using
+;- the vectoring. This assume that the IRQ management.
+;- The Interrupt Stack must be adjusted depending on the interrupt handlers.
+;- Fast Interrupt not requires stack If in your application it required you must
+;- be definehere.
+;- The System stack size is not defined and is limited by the free internal
+;- SRAM.
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+;- Top of Stack Definition
+;-------------------------
+;- Interrupt and Supervisor Stack are located at the top of internal memory in
+;- order to speed the exception handling context saving and restoring.
+;- ARM_MODE_SVC (Application, C) Stack is located at the top of the external memory.
+;------------------------------------------------------------------------------
+
+IRQ_STACK_SIZE          EQU     300
+
+ARM_MODE_FIQ            EQU     0x11
+ARM_MODE_IRQ            EQU     0x12
+ARM_MODE_SVC            EQU     0x13
+
+I_BIT                   EQU     0x80
+F_BIT                   EQU     0x40
+
+;------------------------------------------------------------------------------
+;- Setup the stack for each mode
+;-------------------------------
+                ldr     r0, =__iramend
+
+;- Set up Fast Interrupt Mode and set FIQ Mode Stack
+                msr     CPSR_c, #ARM_MODE_FIQ | I_BIT | F_BIT
+;- Init the FIQ register
+            	ldr     r8, =AT91C_BASE_AIC
+
+;- Set up Interrupt Mode and set IRQ Mode Stack
+                msr     CPSR_c, #ARM_MODE_IRQ | I_BIT | F_BIT
+                mov     r13, r0                     ; Init stack IRQ
+                sub     r0, r0, #IRQ_STACK_SIZE
+
+;- Enable interrupt & Set up Supervisor Mode and set Supervisor Mode Stack
+                msr     CPSR_c, #ARM_MODE_SVC
+                mov     r13, r0
+
+
+;---------------------------------------------------------------
+; ?CSTARTUP
+;---------------------------------------------------------------
+		EXTERN	__segment_init
+		EXTERN	main
+; Initialize segments.
+; __segment_init is assumed to use
+; instruction set and to be reachable by BL from the ICODE segment
+; (it is safest to link them in segment ICODE).
+		ldr	r0,=__segment_init
+                mov     lr, pc
+		bx	r0
+
+		PUBLIC	__main
+?jump_to_main:
+		ldr	lr,=?call_exit
+		ldr	r0,=main
+__main:
+		bx	r0
+
+;------------------------------------------------------------------------------
+;- Loop for ever
+;---------------
+;- End of application. Normally, never occur.
+;- Could jump on Software Reset ( B 0x0 ).
+;------------------------------------------------------------------------------
+?call_exit:
+End
+            b       End
+
+
+
+;---------------------------------------------------------------
+; ?EXEPTION_VECTOR
+; This module is only linked if needed for closing files.
+;---------------------------------------------------------------
+		PUBLIC	AT91F_Default_FIQ_handler
+		PUBLIC	AT91F_Default_IRQ_handler
+		PUBLIC	AT91F_Spurious_handler
+
+		CODE32	; Always ARM mode after exeption	
+
+AT91F_Default_FIQ_handler
+            b     AT91F_Default_FIQ_handler
+
+AT91F_Default_IRQ_handler
+            b     AT91F_Default_IRQ_handler
+
+AT91F_Spurious_handler
+            b     AT91F_Spurious_handler
+
+	ENDMOD
+
+	END
+
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/SrcAtmel/Cstartup_SAM7.c b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/SrcAtmel/Cstartup_SAM7.c
new file mode 100644
index 0000000000..d9716c0ef5
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/SrcAtmel/Cstartup_SAM7.c
@@ -0,0 +1,69 @@
+//*----------------------------------------------------------------------------
+//*         ATMEL Microcontroller Software Support  -  ROUSSET  -
+//*----------------------------------------------------------------------------
+//* The software is delivered "AS IS" without warranty or condition of any
+//* kind, either express, implied or statutory. This includes without
+//* limitation any warranty or condition with respect to merchantability or
+//* fitness for any particular purpose, or against the infringements of
+//* intellectual property rights of others.
+//*----------------------------------------------------------------------------
+//* File Name           : Cstartup_SAM7.c
+//* Object              : Low level initializations written in C for IAR
+//*                       tools
+//* 1.0   08/Sep/04 JPP	: Creation
+//* 1.10  10/Sep/04 JPP : Update AT91C_CKGR_PLLCOUNT filed
+//*----------------------------------------------------------------------------
+
+
+// Include the board file description
+#include "Board.h"
+
+//*----------------------------------------------------------------------------
+//* \fn    AT91F_LowLevelInit
+//* \brief This function performs very low level HW initialization
+//*        this function can be use a Stack, depending the compilation
+//*        optimization mode
+//*----------------------------------------------------------------------------
+void AT91F_LowLevelInit( void);
+void AT91F_LowLevelInit( void )
+{
+ AT91PS_PMC     pPMC = AT91C_BASE_PMC;
+
+    //* Set Flash Waite sate
+	//  Single Cycle Access at Up to 30 MHz, or 40
+	//  if MCK = 47923200 I have 50 Cycle for 1 useconde ( flied MC_FMR->FMCN
+	    AT91C_BASE_MC->MC_FMR = ((AT91C_MC_FMCN)&(75 <<16)) | AT91C_MC_FWS_1FWS ;
+
+    //* Watchdog Disable
+        AT91C_BASE_WDTC->WDTC_WDMR= AT91C_WDTC_WDDIS;
+
+	//* Set MCK at 47 923 200
+    // 1 Enabling the Main Oscillator:
+        // SCK = 1/32768 = 30.51 uSeconde
+    	// Start up time = 8 * 6 / SCK = 56 * 30.51 = 1,46484375 ms
+       pPMC->PMC_MOR = ((( AT91C_CKGR_OSCOUNT & (0x06 <<8)) | AT91C_CKGR_MOSCEN ));
+        // Wait the startup time
+        while(!(pPMC->PMC_SR & AT91C_PMC_MOSCS));
+	// 2 Checking the Main Oscillator Frequency (Optional)
+	// 3 Setting PLL and divider:
+		// - div by 5 Fin = 3,6864 =(18,432 / 5)
+		// - Mul 25+1: Fout =	95,8464 =(3,6864 *26)
+		// for 96 MHz the erroe is 0.16%
+		//eld out NOT USED = 0 Fi
+       pPMC->PMC_PLLR = ((AT91C_CKGR_DIV & 5) |
+                         (AT91C_CKGR_PLLCOUNT & (28<<8)) |
+                         (AT91C_CKGR_MUL & (25<<16)));
+
+        // Wait the startup time
+        while(!(pPMC->PMC_SR & AT91C_PMC_LOCK));
+	// 4. Selection of Master Clock and Processor Clock
+        // select the PLL clock divided by 2
+       pPMC->PMC_MCKR = AT91C_PMC_PRES_CLK_2 ;
+        while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
+
+        pPMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK ;
+        while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
+}
+
+
+
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/SrcAtmel/Emac.h b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/SrcAtmel/Emac.h
new file mode 100644
index 0000000000..7551a36485
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/SrcAtmel/Emac.h
@@ -0,0 +1,195 @@
+//*----------------------------------------------------------------------------
+//*         ATMEL Microcontroller Software Support  -  ROUSSET  -
+//*----------------------------------------------------------------------------
+//* The software is delivered "AS IS" without warranty or condition of any
+//* kind, either express, implied or statutory. This includes without
+//* limitation any warranty or condition with respect to merchantability or
+//* fitness for any particular purpose, or against the infringements of
+//* intellectual property rights of others.
+//*----------------------------------------------------------------------------
+//* File Name           : Emac.h
+//* Object              : Emac header file
+//* Creation            : Hi   11/18/2002
+//*
+//*----------------------------------------------------------------------------
+#ifndef AT91C_EMAC_H
+#define AT91C_EMAC_H
+
+
+//* Allows to display all IP header in the main.c
+//* If not defined, only ICMP packets are displayed
+#define AT91C_DISPLAY_ALL_IPHEADER		0
+
+#define NB_RX_BUFFERS			25			//* Number of receive buffers
+#define ETH_RX_BUFFER_SIZE		128         //*
+
+#define NB_TX_BUFFERS			2		//* Number of Transmit buffers
+#define ETH_TX_BUFFER_SIZE		UIP_BUFSIZE       //*
+
+#define AT91C_NO_IPPACKET		0
+#define AT91C_IPPACKET	        1
+
+#define ARP_REQUEST				0x0001
+#define ARP_REPLY				0x0002
+#define PROT_ARP				0x0806
+#define PROT_IP					0x0800
+#define PROT_ICMP				0x01
+#define ICMP_ECHO_REQUEST		0x08
+#define ICMP_ECHO_REPLY			0x00
+
+#define AT91C_EMAC_CLKEN 0x2
+#define SWAP16(x)	(((x & 0xff) << 8) | (x >> 8))
+
+#if 0
+//* Transfer descriptor structure
+typedef struct _AT91S_TdDescriptor {
+	unsigned int addr;
+	unsigned int status;
+}AT91S_TdDescriptor, *AT91PS_TdDescriptor;
+#endif
+
+//* Receive Transfer descriptor structure
+typedef struct  _AT91S_RxTdDescriptor {
+	unsigned int addr;
+	union
+	{
+		unsigned int status;
+		struct {
+			unsigned int Length:11;
+			unsigned int Res0:1;
+			unsigned int Rxbuf_off:2;
+			unsigned int StartOfFrame:1;
+			unsigned int EndOfFrame:1;
+			unsigned int Cfi:1;
+			unsigned int VlanPriority:3;
+			unsigned int PriorityTag:1;
+			unsigned int VlanTag:1;
+			unsigned int TypeID:1;
+			unsigned int Sa4Match:1;
+			unsigned int Sa3Match:1;
+			unsigned int Sa2Match:1;
+			unsigned int Sa1Match:1;
+			unsigned int Res1:1;
+			unsigned int ExternalAdd:1;
+			unsigned int UniCast:1;
+			unsigned int MultiCast:1;
+			unsigned int BroadCast:1;
+		}S_Status;		
+	}U_Status;
+}AT91S_RxTdDescriptor, *AT91PS_RxTdDescriptor;
+
+
+//* Transmit Transfer descriptor structure
+typedef struct _AT91S_TxTdDescriptor {
+	unsigned int addr;
+	union
+	{
+		unsigned int status;
+		struct {
+			unsigned int Length:11;
+			unsigned int Res0:4;
+			unsigned int LastBuff:1;
+			unsigned int NoCrc:1;
+			unsigned int Res1:10;
+			unsigned int BufExhausted:1;
+			unsigned int TransmitUnderrun:1;
+			unsigned int TransmitError:1;
+			unsigned int Wrap:1;
+			unsigned int BuffUsed:1;
+		}S_Status;		
+	}U_Status;
+}AT91S_TxTdDescriptor, *AT91PS_TxTdDescriptor;
+
+#define AT91C_OWNERSHIP_BIT		0x00000001
+
+/* Receive status defintion */
+#define AT91C_BROADCAST_ADDR	((unsigned int) (1 << 31))	//* Broadcat address detected
+#define AT91C_MULTICAST_HASH 	((unsigned int) (1 << 30))	//* MultiCast hash match
+#define AT91C_UNICAST_HASH 	    ((unsigned int) (1 << 29))	//* UniCast hash match
+#define AT91C_EXTERNAL_ADDR	    ((unsigned int) (1 << 28))	//* External Address match
+#define AT91C_SA1_ADDR	    	((unsigned int) (1 << 26))	//* Specific address 1 match
+#define AT91C_SA2_ADDR	    	((unsigned int) (1 << 25))	//* Specific address 2 match
+#define AT91C_SA3_ADDR	    	((unsigned int) (1 << 24))	//* Specific address 3 match
+#define AT91C_SA4_ADDR	    	((unsigned int) (1 << 23))	//* Specific address 4 match
+#define AT91C_TYPE_ID	    	((unsigned int) (1 << 22))	//* Type ID match
+#define AT91C_VLAN_TAG	    	((unsigned int) (1 << 21))	//* VLAN tag detected
+#define AT91C_PRIORITY_TAG    	((unsigned int) (1 << 20))	//* PRIORITY tag detected
+#define AT91C_VLAN_PRIORITY    	((unsigned int) (7 << 17))  //* PRIORITY Mask
+#define AT91C_CFI_IND        	((unsigned int) (1 << 16))  //* CFI indicator
+#define AT91C_EOF           	((unsigned int) (1 << 15))  //* EOF
+#define AT91C_SOF           	((unsigned int) (1 << 14))  //* SOF
+#define AT91C_RBF_OFFSET     	((unsigned int) (3 << 12))  //* Receive Buffer Offset Mask
+#define AT91C_LENGTH_FRAME     	((unsigned int) 0x07FF)     //* Length of frame
+
+/* Transmit Status definition */
+#define AT91C_TRANSMIT_OK		((unsigned int) (1 << 31))	//*
+#define AT91C_TRANSMIT_WRAP		((unsigned int) (1 << 30))	//* Wrap bit: mark the last descriptor
+#define AT91C_TRANSMIT_ERR		((unsigned int) (1 << 29))	//* RLE:transmit error
+#define AT91C_TRANSMIT_UND		((unsigned int) (1 << 28))	//* Transmit Underrun
+#define AT91C_BUF_EX     		((unsigned int) (1 << 27))	//* Buffers exhausted in mid frame
+#define AT91C_TRANSMIT_NO_CRC	((unsigned int) (1 << 16))	//* No CRC will be appended to the current frame
+#define AT91C_LAST_BUFFER    	((unsigned int) (1 << 15))	//*
+
+#define ARP_ETHER	 		1		/* Ethernet  hardware address	*/
+#define ARPOP_REQUEST    	1		/* Request  to resolve  address	*/
+#define ARPOP_REPLY	    	2		/* Response to previous request	*/
+#define RARPOP_REQUEST   	3		/* Request  to resolve  address	*/
+#define RARPOP_REPLY	    4		/* Response to previous request */
+
+
+typedef struct _AT91S_EthHdr
+{
+	unsigned char		et_dest[6];	/* Destination node		*/
+	unsigned char		et_src[6];	/* Source node			*/
+	unsigned short		et_protlen;	/* Protocol or length		*/
+} AT91S_EthHdr, *AT91PS_EthHdr;
+
+typedef struct _AT91S_ArpHdr
+{
+	unsigned short		ar_hrd;		/* Format of hardware address	*/
+	unsigned short		ar_pro;		/* Format of protocol address	*/
+	unsigned char		ar_hln;		/* Length of hardware address	*/
+	unsigned char		ar_pln;		/* Length of protocol address	*/
+	unsigned short		ar_op;		/* Operation			*/
+	unsigned char		ar_sha[6];	/* Sender hardware address	*/
+	unsigned char		ar_spa[4];	/* Sender protocol address	*/
+	unsigned char		ar_tha[6];	/* Target hardware address	*/
+	unsigned char		ar_tpa[4];	/* Target protocol address	*/
+} AT91S_ArpHdr, *AT91PS_ArpHdr;
+
+//* IP Header structure
+typedef struct _AT91S_IPheader {
+	unsigned char	ip_hl_v;	/* header length and version	*/
+	unsigned char	ip_tos;		/* type of service		*/
+	unsigned short	ip_len;		/* total length			*/
+	unsigned short	ip_id;		/* identification		*/
+	unsigned short	ip_off;		/* fragment offset field	*/
+	unsigned char	ip_ttl;		/* time to live			*/
+	unsigned char	ip_p;		/* protocol			*/
+	unsigned short	ip_sum;		/* checksum			*/
+	unsigned char	ip_src[4];	/* Source IP address		*/
+	unsigned char	ip_dst[4];	/* Destination IP address	*/
+	unsigned short	udp_src;	/* UDP source port		*/
+	unsigned short	udp_dst;	/* UDP destination port		*/
+	unsigned short	udp_len;	/* Length of UDP packet		*/
+	unsigned short	udp_xsum;	/* Checksum			*/
+} AT91S_IPheader, *AT91PS_IPheader;
+
+//* ICMP echo header structure
+typedef struct _AT91S_IcmpEchoHdr {
+    unsigned char   type;       /* type of message */
+    unsigned char   code;       /* type subcode */
+    unsigned short  cksum;      /* ones complement cksum of struct */
+    unsigned short  id;         /* identifier */
+    unsigned short  seq;        /* sequence number */
+}AT91S_IcmpEchoHdr, *AT91PS_IcmpEchoHdr;
+
+
+typedef struct _AT91S_EthPack
+{
+	AT91S_EthHdr	EthHdr;
+	AT91S_ArpHdr	ArpHdr;
+} AT91S_EthPack, *AT91PS_EthPack;
+
+
+#endif //* AT91C_EMAC_H
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/SrcAtmel/mii.h b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/SrcAtmel/mii.h
new file mode 100644
index 0000000000..29b2f53d5f
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/SrcAtmel/mii.h
@@ -0,0 +1,105 @@
+/* Generic MII registers. */
+
+#define MII_BMCR            0x00        /* Basic mode control register */
+#define MII_BMSR            0x01        /* Basic mode status register  */
+#define MII_PHYSID1         0x02        /* PHYS ID 1                   */
+#define MII_PHYSID2         0x03        /* PHYS ID 2                   */
+#define MII_ADVERTISE       0x04        /* Advertisement control reg   */
+#define MII_LPA             0x05        /* Link partner ability reg    */
+#define MII_EXPANSION       0x06        /* Expansion register          */
+#define MII_DCOUNTER        0x12        /* Disconnect counter          */
+#define MII_FCSCOUNTER      0x13        /* False carrier counter       */
+#define MII_NWAYTEST        0x14        /* N-way auto-neg test reg     */
+#define MII_RERRCOUNTER     0x15        /* Receive error counter       */
+#define MII_SREVISION       0x16        /* Silicon revision            */
+#define MII_RESV1           0x17        /* Reserved...                 */
+#define MII_LBRERROR        0x18        /* Lpback, rx, bypass error    */
+#define MII_PHYADDR         0x19        /* PHY address                 */
+#define MII_RESV2           0x1a        /* Reserved...                 */
+#define MII_TPISTATUS       0x1b        /* TPI status for 10mbps       */
+#define MII_NCONFIG         0x1c        /* Network interface config    */
+
+/* Basic mode control register. */
+#define BMCR_RESV               0x007f  /* Unused...                   */
+#define BMCR_CTST               0x0080  /* Collision test              */
+#define BMCR_FULLDPLX           0x0100  /* Full duplex                 */
+#define BMCR_ANRESTART          0x0200  /* Auto negotiation restart    */
+#define BMCR_ISOLATE            0x0400  /* Disconnect DP83840 from MII */
+#define BMCR_PDOWN              0x0800  /* Powerdown the DP83840       */
+#define BMCR_ANENABLE           0x1000  /* Enable auto negotiation     */
+#define BMCR_SPEED100           0x2000  /* Select 100Mbps              */
+#define BMCR_LOOPBACK           0x4000  /* TXD loopback bits           */
+#define BMCR_RESET              0x8000  /* Reset the DP83840           */
+
+/* Basic mode status register. */
+#define BMSR_ERCAP              0x0001  /* Ext-reg capability          */
+#define BMSR_JCD                0x0002  /* Jabber detected             */
+#define BMSR_LSTATUS            0x0004  /* Link status                 */
+#define BMSR_ANEGCAPABLE        0x0008  /* Able to do auto-negotiation */
+#define BMSR_RFAULT             0x0010  /* Remote fault detected       */
+#define BMSR_ANEGCOMPLETE       0x0020  /* Auto-negotiation complete   */
+#define BMSR_RESV               0x07c0  /* Unused...                   */
+#define BMSR_10HALF             0x0800  /* Can do 10mbps, half-duplex  */
+#define BMSR_10FULL             0x1000  /* Can do 10mbps, full-duplex  */
+#define BMSR_100HALF            0x2000  /* Can do 100mbps, half-duplex */
+#define BMSR_100FULL            0x4000  /* Can do 100mbps, full-duplex */
+#define BMSR_100BASE4           0x8000  /* Can do 100mbps, 4k packets  */
+
+/* Advertisement control register. */
+#define ADVERTISE_SLCT          0x001f  /* Selector bits               */
+#define ADVERTISE_CSMA          0x0001  /* Only selector supported     */
+#define ADVERTISE_10HALF        0x0020  /* Try for 10mbps half-duplex  */
+#define ADVERTISE_10FULL        0x0040  /* Try for 10mbps full-duplex  */
+#define ADVERTISE_100HALF       0x0080  /* Try for 100mbps half-duplex */
+#define ADVERTISE_100FULL       0x0100  /* Try for 100mbps full-duplex */
+#define ADVERTISE_100BASE4      0x0200  /* Try for 100mbps 4k packets  */
+#define ADVERTISE_RESV          0x1c00  /* Unused...                   */
+#define ADVERTISE_RFAULT        0x2000  /* Say we can detect faults    */
+#define ADVERTISE_LPACK         0x4000  /* Ack link partners response  */
+#define ADVERTISE_NPAGE         0x8000  /* Next page bit               */
+
+#define ADVERTISE_FULL (ADVERTISE_100FULL | ADVERTISE_10FULL | \
+			ADVERTISE_CSMA)
+#define ADVERTISE_ALL (ADVERTISE_10HALF | ADVERTISE_10FULL | \
+                       ADVERTISE_100HALF | ADVERTISE_100FULL)
+
+/* Link partner ability register. */
+#define LPA_SLCT                0x001f  /* Same as advertise selector  */
+#define LPA_10HALF              0x0020  /* Can do 10mbps half-duplex   */
+#define LPA_10FULL              0x0040  /* Can do 10mbps full-duplex   */
+#define LPA_100HALF             0x0080  /* Can do 100mbps half-duplex  */
+#define LPA_100FULL             0x0100  /* Can do 100mbps full-duplex  */
+#define LPA_100BASE4            0x0200  /* Can do 100mbps 4k packets   */
+#define LPA_RESV                0x1c00  /* Unused...                   */
+#define LPA_RFAULT              0x2000  /* Link partner faulted        */
+#define LPA_LPACK               0x4000  /* Link partner acked us       */
+#define LPA_NPAGE               0x8000  /* Next page bit               */
+
+#define LPA_DUPLEX		(LPA_10FULL | LPA_100FULL)
+#define LPA_100			(LPA_100FULL | LPA_100HALF | LPA_100BASE4)
+
+/* Expansion register for auto-negotiation. */
+#define EXPANSION_NWAY          0x0001  /* Can do N-way auto-nego      */
+#define EXPANSION_LCWP          0x0002  /* Got new RX page code word   */
+#define EXPANSION_ENABLENPAGE   0x0004  /* This enables npage words    */
+#define EXPANSION_NPCAPABLE     0x0008  /* Link partner supports npage */
+#define EXPANSION_MFAULTS       0x0010  /* Multiple faults detected    */
+#define EXPANSION_RESV          0xffe0  /* Unused...                   */
+
+/* N-way test register. */
+#define NWAYTEST_RESV1          0x00ff  /* Unused...                   */
+#define NWAYTEST_LOOPBACK       0x0100  /* Enable loopback for N-way   */
+#define NWAYTEST_RESV2          0xfe00  /* Unused...                   */
+
+#define SPEED_10				10
+#define SPEED_100				100
+
+/* Duplex, half or full. */
+#define DUPLEX_HALF				0x00
+#define DUPLEX_FULL				0x01
+
+/* PHY ID */
+#define MII_DM9161_ID     0x0181b8a0
+#define MII_AM79C875_ID   0x00225540	/* 0x00225541 */
+
+#define AT91C_PHY_ADDR	31
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/USB/USBSample.c b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/USB/USBSample.c
new file mode 100644
index 0000000000..21a80cc84e
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/USB/USBSample.c
@@ -0,0 +1,1164 @@
+/*
+	FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 Richard Barry.
+
+	This file is part of the FreeRTOS.org distribution.
+
+	FreeRTOS.org 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 2 of the License, or
+	(at your option) any later version.
+
+	FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+	A special exception to the GPL can be applied should you wish to distribute
+	a combined work that includes FreeRTOS.org, without being obliged to provide
+	the source code for any proprietary components.  See the licensing section 
+	of http://www.FreeRTOS.org for full details of how and when the exception
+	can be applied.
+
+	***************************************************************************
+	See http://www.FreeRTOS.org for documentation, latest information, license 
+	and contact details.  Please ensure to read the configuration and relevant 
+	port sections of the online documentation.
+
+	Also see http://www.SafeRTOS.com a version that has been certified for use
+	in safety critical systems, plus commercial licensing, development and
+	support options.
+	***************************************************************************
+*/
+
+/*
+	Sample interrupt driven mouse device driver.  This is a minimal implementation 
+	for demonstration only.  Although functional, it may not be a fully and 
+	compliant implementation.  The small joystick on the SAM7X EK can be used to
+	move the mouse cursor, pressing the joystick transmits mouse clicks.  Note
+	that it might be necessary to run the demo stand along (without the 
+	debugger) in order for the USB device to be recognised by the host computer.
+
+	The interrupt handler itself is contained within USB_ISR.c.
+	
+	See the FreeRTOS.org online documentation for more information.
+*/
+
+/* Standard includes. */
+#include <string.h>
+
+/* Scheduler includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+
+/* Demo application includes. */
+#include "USBSample.h"
+
+/* Joystick inputs used to move the 'mouse' cursor. */
+#define usbSW1 	( 1 << 21 )	/* PA21 */
+#define usbSW2 	( 1 << 22 )	/* PA22 */
+#define usbSW3 	( 1 << 23 )	/* PA23 */
+#define usbSW4 	( 1 << 24 )	/* PA24 */
+#define usbSW_CLICK	( 1 << 25 ) /* PA25 */
+
+/* Descriptor type definitions. */
+#define usbDESCRIPTOR_TYPE_DEVICE			( 0x01 )
+#define usbDESCRIPTOR_TYPE_CONFIGURATION	( 0x02 )
+#define usbDESCRIPTOR_TYPE_STRING			( 0x03 )
+
+/* USB request type definitions. */
+#define usbGET_REPORT_REQUEST				( 0x01 )
+#define usbGET_IDLE_REQUEST					( 0x02 )
+#define usbGET_PROTOCOL_REQUEST				( 0x03 )
+#define usbSET_REPORT_REQUEST				( 0x09 )
+#define usbSET_IDLE_REQUEST					( 0x0A )
+#define usbSET_PROTOCOL_REQUEST				( 0x0B )
+#define usbGET_CONFIGURATION_REQUEST		( 0x08 )
+#define usbGET_STATUS_REQUEST				( 0x00 )
+#define usbCLEAR_FEATURE_REQUEST			( 0x01 )
+#define usbSET_FEATURE_REQUEST				( 0x03 )
+#define usbSET_ADDRESS_REQUEST				( 0x05 )
+#define usbGET_DESCRIPTOR_REQUEST			( 0x06 )
+#define usbSET_CONFIGURATION_REQUEST		( 0x09 )
+#define usbGET_INTERFACE_REQUEST			( 0x0A )
+#define usbSET_INTERFACE_REQUEST			( 0x0B )
+
+
+/* Misc USB definitions. */
+#define usbDEVICE_CLASS_VENDOR_SPECIFIC		( 0xFF )
+#define usbBUS_POWERED						( 0x80 )
+#define usbHID_REPORT_DESCRIPTOR			( 0x22 )
+#define AT91C_UDP_TRANSCEIVER_ENABLE			( *( ( unsigned long * ) 0xfffb0074 ) )
+
+/* Index to the various string. */
+#define usbLANGUAGE_STRING					( 0 )
+#define usbMANUFACTURER_STRING				( 1 )
+#define usbPRODUCT_STRING					( 2 )
+#define usbCONFIGURATION_STRING				( 3 )
+#define usbINTERFACE_STRING					( 4 )
+
+/* Data indexes for reading the request from the xISRStatus.ucFifoData[]
+into xUSB_REQUEST.  The data order is designed for speed - so looks a 
+little odd. */
+#define usbREQUEST_TYPE_INDEX				( 7 )
+#define usbREQUEST_INDEX					( 6 )
+#define usbVALUE_HIGH_BYTE					( 4 )
+#define usbVALUE_LOW_BYTE					( 5 )
+#define usbINDEX_HIGH_BYTE					( 2 )
+#define usbINDEX_LOW_BYTE					( 3 )
+#define usbLENGTH_HIGH_BYTE					( 0 )
+#define usbLENGTH_LOW_BYTE					( 1 )
+
+/* Misc application definitions. */
+#define usbINTERRUPT_PRIORITY				( 3 )
+#define usbFIFO_LENGTH						( ( unsigned portLONG ) 8 )
+#define usbXUP								( 1 )
+#define usbXDOWN							( 2 )
+#define usbYUP								( 3 )
+#define usbYDOWN							( 4 )
+#define usbMAX_COORD						( 120 )
+#define usbMAX_TX_MESSAGE_SIZE				( 128 )
+#define usbSHORTEST_DELAY					( ( portTickType ) 1 )
+#define usbINIT_DELAY						( ( portTickType ) 1000 / portTICK_RATE_MS )
+#define usbSHORT_DELAY						( ( portTickType ) 50 / portTICK_RATE_MS )
+#define usbEND_POINT_RESET_MASK				( ( unsigned portLONG ) 0x0f )
+#define usbDATA_INC							( ( portCHAR ) 5 )
+#define usbEXPECTED_NUMBER_OF_BYTES			( ( unsigned portLONG ) 8 )
+
+/* Control request types. */
+#define usbSTANDARD_DEVICE_REQUEST			( 0 )
+#define usbSTANDARD_INTERFACE_REQUEST		( 1 )
+#define usbSTANDARD_END_POINT_REQUEST		( 2 )
+#define usbCLASS_INTERFACE_REQUEST			( 5 )
+
+/* Structure used to hold the received requests. */
+typedef struct 
+{
+	unsigned portCHAR ucReqType;
+	unsigned portCHAR ucRequest;
+	unsigned portSHORT usValue;
+	unsigned portSHORT usIndex;
+	unsigned portSHORT usLength;
+} xUSB_REQUEST;
+
+typedef enum
+{
+	eNOTHING,
+	eJUST_RESET,
+	eJUST_GOT_CONFIG,
+	eJUST_GOT_ADDRESS,
+	eSENDING_EVEN_DESCRIPTOR,
+	eREADY_TO_SEND
+} eDRIVER_STATE;
+
+/* Structure used to control the data being sent to the host. */
+typedef struct
+{
+	unsigned portCHAR ucTxBuffer[ usbMAX_TX_MESSAGE_SIZE ];
+	unsigned portLONG ulNextCharIndex;
+	unsigned portLONG ulTotalDataLength;
+} xTX_MESSAGE;
+
+/*-----------------------------------------------------------*/
+
+/* 
+ * The USB interrupt service routine.  This takes a snapshot of the USB
+ * device at the time of the interrupt, clears the interrupts, and posts
+ * the data to the USB processing task.  This is implemented in USB_ISR.c.
+ */
+extern void vUSB_ISR_Wrapper( void );
+
+/*
+ * Called after the bus reset interrupt - this function readies all the
+ * end points for communication.
+ */
+static void prvResetEndPoints( void );
+
+/*
+ * Setup the USB hardware, install the interrupt service routine and 
+ * initialise all the state variables.
+ */
+static void vInitUSBInterface( void );
+
+/*
+ * Decode and act upon an interrupt generated by the control end point.
+ */
+static void prvProcessEndPoint0Interrupt( xISRStatus *pxMessage );
+
+/* 
+ * For simplicity requests are separated into device, interface, class 
+ * interface and end point requests.
+ *
+ * Decode and handle standard device requests originating on the control
+ * end point. 
+ */
+static void prvHandleStandardDeviceRequest( xUSB_REQUEST *pxRequest );
+
+/*
+ * For simplicity requests are separated into device, interface, class 
+ * interface and end point requests.
+ *
+ * Decode and handle standard interface requests originating on the control
+ * end point.
+ */
+static void prvHandleStandardInterfaceRequest( xUSB_REQUEST *pxRequest );
+
+/*
+ * For simplicity requests are separated into device, interface, class 
+ * interface and end point requests.
+ *
+ * Decode and handle standard end point requests originating on the control
+ * end point.
+ */
+static void prvHandleStandardEndPointRequest( xUSB_REQUEST *pxRequest );
+
+/*
+ * For simplicity requests are separated into device, interface, class 
+ * interface and end point requests.
+ *
+ * Decode and handle the class interface requests.
+ */
+static void prvHandleClassInterfaceRequest( xUSB_REQUEST *pxRequest );
+
+/*
+ * Setup the Tx buffer to send data in response to a control request.
+ *
+ * The data to be transmitted is buffered, the state variables are updated,
+ * then prvSendNextSegment() is called to start the transmission off.  Once
+ * the first segment has been sent the remaining segments are transmitted
+ * in response to TXCOMP interrupts until the entire buffer has been
+ * sent.
+ */
+static void prvSendControlData( unsigned portCHAR *pucData, unsigned portSHORT usRequestedLength, unsigned portLONG ulLengthLeftToSend, portLONG lSendingDescriptor );
+
+/*
+ * Examine the Tx buffer to see if there is any more data to be transmitted.
+ * 
+ * If there is data to be transmitted then send the next segment.  A segment
+ * can have a maximum of 8 bytes (this is defined as the maximum for the end
+ * point by the descriptor).  The final segment may be less than 8 bytes if
+ * the total data length was not an exact multiple of 8.
+ */
+static void prvSendNextSegment( void );
+
+/*
+ * A stall condition is forced each time the host makes a request that is not
+ * supported by this minimal implementation.
+ * 
+ * A stall is forced by setting the appropriate bit in the end points control
+ * and status register. 
+ */
+static void prvSendStall( void );
+
+/*
+ * A NULL (or zero length packet) is transmitted in acknowledge the reception 
+ * of certain events from the host.
+ */
+static void prvUSBTransmitNull( void );
+
+/* 
+ * When the host requests a descriptor this function is called to determine 
+ * which descriptor is being requested and start its transmission.
+ */
+static void prvGetStandardInterfaceDescriptor( xUSB_REQUEST *pxRequest );
+
+/*
+ * Transmit movement and clicks on the EK joystick as mouse inputs.
+ */
+static void prvTransmitSampleValues( void );
+
+/*
+ * The created task to handle the USB demo functionality. 
+ */
+static void vUSBDemoTask( void *pvParameters );
+
+/*
+ * Simple algorithm to ramp up the mouse cursor speed to make it easier to
+ * use.
+ */
+static void prvControlCursorSpeed( signed portCHAR *cVal, unsigned portLONG ulInput, unsigned portLONG ulSwitch1, unsigned portLONG ulSwitch2 );
+/*-----------------------------------------------------------*/
+
+/*
+	- DESCRIPTOR DEFINITIONS -
+*/
+
+/* String descriptors used during the enumeration process.
+These take the form:
+
+{
+	Length of descriptor,
+	Descriptor type,
+	Data
+}
+*/
+const portCHAR pxLanguageStringDescriptor[] =
+{
+	4,
+	usbDESCRIPTOR_TYPE_STRING,
+	0x09, 0x04
+};
+
+const portCHAR pxManufacturerStringDescriptor[] = 
+{
+	18,
+	usbDESCRIPTOR_TYPE_STRING,
+
+	'F', 0x00,
+	'r', 0x00,
+	'e', 0x00,
+	'e', 0x00,
+	'R', 0x00,
+	'T', 0x00,
+	'O', 0x00,
+	'S', 0x00	
+};
+
+const portCHAR pxProductStringDescriptor[] = 
+{
+	38,
+	usbDESCRIPTOR_TYPE_STRING,
+
+	'F', 0x00,
+	'r', 0x00,
+	'e', 0x00,
+	'e', 0x00,
+	'R', 0x00,
+	'T', 0x00,
+	'O', 0x00,
+	'S', 0x00,
+	'.', 0x00,
+	'o', 0x00,
+	'r', 0x00,
+	'g', 0x00,
+	' ', 0x00,
+	'M', 0x00,
+	'o', 0x00,
+	'u', 0x00,
+	's', 0x00,
+	'e', 0x00
+};
+
+const portCHAR pxConfigurationStringDescriptor[] = 
+{
+	38,
+	usbDESCRIPTOR_TYPE_STRING,
+
+	'C', 0x00,
+	'o', 0x00,
+	'n', 0x00,
+	'f', 0x00,
+	'i', 0x00,
+	'g', 0x00,
+	'u', 0x00,
+	'r', 0x00,
+	'a', 0x00,
+	't', 0x00,
+	'i', 0x00,
+	'o', 0x00,
+	'n', 0x00,
+	' ', 0x00,
+	'N', 0x00,
+	'a', 0x00,
+	'm', 0x00,
+	'e', 0x00
+};
+
+const portCHAR pxInterfaceStringDescriptor[] = 
+{
+	30,
+	usbDESCRIPTOR_TYPE_STRING,
+
+	'I', 0x00,
+	'n', 0x00,
+	't', 0x00,
+	'e', 0x00,
+	'r', 0x00,
+	'f', 0x00,
+	'a', 0x00,
+	'c', 0x00,
+	'e', 0x00,
+	' ', 0x00,
+	'N', 0x00,
+	'a', 0x00,
+	'm', 0x00,
+	'e', 0x00
+};
+
+/* Enumeration descriptors. */
+const portCHAR pxReportDescriptor[] =
+{
+	0x05, 0x01,						/* USAGE_PAGE (Generic Desktop)			*/
+	0x09, 0x02,						/* USAGE (Mouse)						*/
+	0xa1, 0x01,						/* COLLECTION (Application)				*/
+	0x09, 0x01,						/*   USAGE (Pointer)					*/
+	0xa1, 0x00,						/*   COLLECTION (Physical)				*/
+	0x95, 0x03,						/*     REPORT_COUNT (3)					*/
+	0x75, 0x01,						/*     REPORT_SIZE (1)					*/
+	0x05, 0x09,						/*     USAGE_PAGE (Button)				*/
+	0x19, 0x01,						/*     USAGE_MINIMUM (Button 1)			*/
+	0x29, 0x03,						/*     USAGE_MAXIMUM (Button 3)			*/
+	0x15, 0x00,						/*     LOGICAL_MINIMUM (0)				*/
+	0x25, 0x01,						/*     LOGICAL_MAXIMUM (1)				*/
+	0x81, 0x02,						/*     INPUT (Data,Var,Abs)				*/
+	0x95, 0x01,						/*     REPORT_COUNT (1)					*/
+	0x75, 0x05,						/*     REPORT_SIZE (5)					*/
+	0x81, 0x01,						/*     INPUT (Cnst,Ary,Abs)				*/
+	0x75, 0x08,						/*     REPORT_SIZE (8)					*/
+	0x95, 0x02,						/*     REPORT_COUNT (2)					*/
+	0x05, 0x01,						/*     USAGE_PAGE (Generic Desktop)		*/
+	0x09, 0x30,						/*     USAGE (X)						*/
+	0x09, 0x31,						/*     USAGE (Y)						*/
+	0x15, 0x81,						/*     LOGICAL_MINIMUM (-127)			*/
+	0x25, 0x7f,						/*     LOGICAL_MAXIMUM (127)			*/
+	0x81, 0x06,						/*     INPUT (Data,Var,Rel)				*/
+	0xc0,							/*   END_COLLECTION						*/
+	0xc0							/* END_COLLECTION						*/
+};
+
+
+
+const char pxDeviceDescriptor[] = 
+{
+	/* Device descriptor */
+	0x12,								/* bLength				*/
+	0x01,								/* bDescriptorType		*/
+	0x10, 0x01,							/* bcdUSBL				*/
+	usbDEVICE_CLASS_VENDOR_SPECIFIC,	/* bDeviceClass:		*/
+	0x00,								/* bDeviceSubclass:		*/
+	0x00,								/* bDeviceProtocol:		*/
+	0x08,								/* bMaxPacketSize0		*/
+	0xFF, 0xFF,							/* idVendorL			*/
+	0x02, 0x00,							/* idProductL			*/
+	0x00, 0x01,							/* bcdDeviceL			*/
+	usbMANUFACTURER_STRING,				/* iManufacturer		*/
+	usbPRODUCT_STRING,					/* iProduct				*/
+	0x00,								/* SerialNumber			*/
+	0x01								/* bNumConfigs			*/
+};
+
+
+const char pxConfigDescriptor[] = {
+	/* Configuration 1 descriptor */
+	0x09,			/* CbLength									*/
+	0x02,			/* CbDescriptorType							*/
+	0x22, 0x00,		/* CwTotalLength 2 EP + Control				*/
+	0x01,			/* CbNumInterfaces							*/
+	0x01,			/* CbConfigurationValue						*/
+	usbCONFIGURATION_STRING,/* CiConfiguration					*/
+	usbBUS_POWERED,	/* CbmAttributes Bus powered + Remote Wakeup*/
+	0x32,			/* CMaxPower: 100mA							*/
+
+	/* Mouse Interface Descriptor Requirement */
+	0x09,			/* bLength									*/
+	0x04,			/* bDescriptorType							*/
+	0x00,			/* bInterfaceNumber							*/
+	0x00,			/* bAlternateSetting						*/
+	0x01,			/* bNumEndpoints							*/
+	0x03,			/* bInterfaceClass: HID code				*/
+	0x01,			/* bInterfaceSubclass boot					*/
+	0x02,			/* bInterfaceProtocol mouse boot			*/
+	usbINTERFACE_STRING,/* iInterface							*/
+
+	/* HID Descriptor */
+	0x09,			/* bLength									*/
+	0x21,			/* bDescriptor type: HID Descriptor Type	*/
+	0x00, 0x01,		/* bcdHID									*/
+	0x00,			/* bCountryCode								*/
+	0x01,			/* bNumDescriptors							*/
+	usbHID_REPORT_DESCRIPTOR,	  /* bDescriptorType			*/
+	sizeof( pxReportDescriptor ), 0x00, /* wItemLength			*/
+
+	/* Endpoint 1 descriptor */
+	0x07,			/* bLength									*/
+	0x05,			/* bDescriptorType							*/
+	0x81,			/* bEndpointAddress, Endpoint 01 - IN		*/
+	0x03,			/* bmAttributes      INT					*/
+	0x08, 0x00,		/* wMaxPacketSize: 8?						*/
+	0x0A			/* bInterval								*/
+};
+
+/*-----------------------------------------------------------*/
+
+/* File scope state variables. */
+static unsigned portCHAR ucUSBConfig = ( unsigned portCHAR ) 0;
+static unsigned portLONG ulReceivedAddress = ( unsigned portLONG ) 0;
+static eDRIVER_STATE eDriverState = eNOTHING;
+
+/* Structure used to control the characters being sent to the host. */
+static xTX_MESSAGE pxCharsForTx;
+
+/* Queue used to pass messages between the ISR and the task. */
+xQueueHandle xUSBInterruptQueue; 
+
+/*-----------------------------------------------------------*/
+
+void vStartUSBTask( unsigned portBASE_TYPE uxPriority )
+{
+	/* Create the queue used to communicate between the USB ISR and task. */
+	xUSBInterruptQueue = xQueueCreate( usbQUEUE_LENGTH + 1, sizeof( xISRStatus * ) );
+
+	/* Create the task itself. */
+	xTaskCreate( vUSBDemoTask, "USB", configMINIMAL_STACK_SIZE, NULL, uxPriority, NULL );
+}
+/*-----------------------------------------------------------*/
+
+static void vUSBDemoTask( void *pvParameters )
+{
+xISRStatus *pxMessage;
+
+	/* The parameters are not used in this task. */
+	( void ) pvParameters;
+
+    /* Init USB device */
+    portENTER_CRITICAL();
+	    vInitUSBInterface();
+    portEXIT_CRITICAL();
+
+	/* Process interrupts as they arrive.   The ISR takes a snapshot of the 
+	interrupt status then posts the information on this queue for processing
+	at the task level.  This simple demo implementation only processes
+	a few interrupt sources. */
+	for( ;; )
+	{
+		if( xQueueReceive( xUSBInterruptQueue, &pxMessage, usbSHORT_DELAY ) )
+		{
+			if( pxMessage->ulISR & AT91C_UDP_EPINT0 )
+			{
+				/* Process end point 0 interrupt. */
+				prvProcessEndPoint0Interrupt( pxMessage );
+			}
+
+			if( pxMessage->ulISR & AT91C_UDP_ENDBUSRES )
+			{
+				/* Process an end of bus reset interrupt. */
+				prvResetEndPoints();		
+			}
+		}
+		else
+		{
+			/* The ISR did not post any data for us to process on the queue, so
+			just generate and send some sample data. */
+			if( eDriverState == eREADY_TO_SEND )
+			{
+				prvTransmitSampleValues();
+			}
+		}
+	}
+}
+/*-----------------------------------------------------------*/
+
+static void prvControlCursorSpeed( signed portCHAR *cVal, unsigned portLONG ulInput, unsigned portLONG ulSwitch1, unsigned portLONG ulSwitch2 )
+{
+const portCHAR cSpeed = 20;
+
+	if( !( ulInput & ulSwitch1 ) )
+	{
+		/* We are going in the decreasing y direction. */
+		if( *cVal > 0 )
+		{
+			/* We have changed direction since last time so start from
+			0 again. */
+			*cVal = 0;
+		}
+		
+		if( *cVal > -cSpeed )
+		{
+			/* Ramp y down to the max speed. */
+			(*cVal)--;
+		}
+	}
+	else if( !( ulInput & ulSwitch2 ) )
+	{
+		/* We are going in the increasing y direction. */
+		if( *cVal < 0 )
+		{
+			/* We have changed direction since last time, so start from
+			0 again. */
+			*cVal = 0;
+		}
+		
+		if( *cVal < cSpeed )
+		{
+			/* Ramp y up to the max speed again. */
+			(*cVal)++;
+		}
+	}
+	else
+	{
+		*cVal = 0;
+	}
+}
+/*-----------------------------------------------------------*/
+
+static void prvTransmitSampleValues( void )
+{
+/* Variables to hold dummy x, y and z joystick axis data. */
+static signed portCHAR x = 0, y = 0, z = 0;
+unsigned portLONG ulStatus;
+
+	ulStatus = 	AT91C_BASE_PIOA->PIO_PDSR;
+
+	prvControlCursorSpeed( &y, ulStatus, ( unsigned long ) usbSW1, ( unsigned long ) usbSW2 );
+	prvControlCursorSpeed( &x, ulStatus, ( unsigned long ) usbSW3, ( unsigned long ) usbSW4 );
+	
+	/* Just make the z axis go up and down. */
+	z = ( ( ulStatus & usbSW_CLICK ) == 0 );
+
+	/* Can we place data in the fifo? */
+	if( !( AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_1 ] & AT91C_UDP_TXPKTRDY ) )
+	{
+		/* Write our sample data to the fifo. */
+		AT91C_BASE_UDP->UDP_FDR[ usbEND_POINT_1 ] = z;
+		AT91C_BASE_UDP->UDP_FDR[ usbEND_POINT_1 ] = x;
+		AT91C_BASE_UDP->UDP_FDR[ usbEND_POINT_1 ] = y;
+		
+		/* Send the data. */
+		portENTER_CRITICAL();
+		{
+			ulStatus = AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_1 ];
+			usbCSR_SET_BIT( &ulStatus, ( AT91C_UDP_TXPKTRDY ) );
+			AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_1 ] = ulStatus;
+		}
+		portEXIT_CRITICAL();
+	}
+}
+/*-----------------------------------------------------------*/
+
+static void prvUSBTransmitNull( void )
+{
+unsigned portLONG ulStatus;
+
+	/* Wait until the FIFO is free - even though we are not going to use it.
+	THERE IS NO TIMEOUT HERE! */
+	while( AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_0 ] & AT91C_UDP_TXPKTRDY )
+	{
+		vTaskDelay( usbSHORTEST_DELAY );
+	}
+
+	portENTER_CRITICAL();
+	{
+		/* Set the length of data to send to equal the index of the next byte
+		to send.  This will prevent the ACK to this NULL packet causing any
+		further data transmissions. */
+		pxCharsForTx.ulTotalDataLength = pxCharsForTx.ulNextCharIndex;
+
+		/* Set the TXPKTRDY bit to cause a transmission with no data. */
+		ulStatus = AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_0 ];
+		usbCSR_SET_BIT( &ulStatus, ( AT91C_UDP_TXPKTRDY ) );
+		AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_0 ] = ulStatus;
+	}
+	portEXIT_CRITICAL();
+}
+/*-----------------------------------------------------------*/
+
+static void prvSendStall( void )
+{
+unsigned portLONG ulStatus;
+
+	portENTER_CRITICAL();
+	{
+		/* Force a stall by simply setting the FORCESTALL bit in the CSR. */
+		ulStatus = AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_0 ];
+		usbCSR_SET_BIT( &ulStatus, AT91C_UDP_FORCESTALL );
+		AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_0 ] = ulStatus;
+	}
+	portEXIT_CRITICAL();
+}
+/*-----------------------------------------------------------*/
+
+static void prvResetEndPoints( void )
+{
+unsigned portLONG ulTemp;
+
+	eDriverState = eJUST_RESET;
+
+	/* Reset all the end points. */
+	AT91C_BASE_UDP->UDP_RSTEP  = usbEND_POINT_RESET_MASK;
+	AT91C_BASE_UDP->UDP_RSTEP  = ( unsigned portLONG ) 0x00;
+
+	/* Enable data to be sent and received. */
+	AT91C_BASE_UDP->UDP_FADDR = AT91C_UDP_FEN;
+
+	/* Repair the configuration end point. */
+	portENTER_CRITICAL();
+	{
+		ulTemp = AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_0 ];
+		usbCSR_SET_BIT( &ulTemp, ( ( unsigned portLONG ) ( AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_CTRL ) ) );
+		AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_0 ] = ulTemp;
+		AT91C_BASE_UDP->UDP_IER = AT91C_UDP_EPINT0;
+	}
+	portEXIT_CRITICAL();
+}
+/*-----------------------------------------------------------*/
+
+static void prvProcessEndPoint0Interrupt( xISRStatus *pxMessage )
+{
+	if( pxMessage->ulCSR0 & AT91C_UDP_RX_DATA_BK0 )
+	{		
+		/* We only expect to receive zero length data here as ACK's. 
+		Set the data pointer to the end of the current Tx packet to
+		ensure we don't send out any more data. */	
+		pxCharsForTx.ulNextCharIndex = pxCharsForTx.ulTotalDataLength;
+	}
+
+	if( pxMessage->ulCSR0 & AT91C_UDP_TXCOMP )
+	{
+		/* We received a TX complete interrupt.  What we do depends on
+		what we sent to get this interrupt. */
+
+		if( eDriverState == eJUST_GOT_CONFIG )
+		{
+			/* We sent an acknowledgement of a SET_CONFIG request.  We
+			are now at the end of the enumeration. */
+			AT91C_BASE_UDP->UDP_GLBSTATE = AT91C_UDP_CONFG;
+
+			/* Read the end point for data transfer. */
+			portENTER_CRITICAL();
+			{
+				unsigned portLONG ulTemp;
+
+				ulTemp = AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_1 ];					
+				usbCSR_SET_BIT( &ulTemp, AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_INT_IN );
+				AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_1 ] = ulTemp;		
+				AT91C_BASE_UDP->UDP_IER = AT91C_UDP_EPINT1;
+			}
+			portEXIT_CRITICAL();
+
+			eDriverState = eREADY_TO_SEND;
+		}		
+		else if( eDriverState == eJUST_GOT_ADDRESS )
+		{
+			/* We sent an acknowledgement of a SET_ADDRESS request.  Move
+			to the addressed state. */
+			if( ulReceivedAddress != ( unsigned portLONG ) 0 )
+			{			
+				AT91C_BASE_UDP->UDP_GLBSTATE = AT91C_UDP_FADDEN;
+			}
+			else
+			{
+				AT91C_BASE_UDP->UDP_GLBSTATE = 0;
+			}			
+
+			AT91C_BASE_UDP->UDP_FADDR = ( AT91C_UDP_FEN | ulReceivedAddress );		
+			eDriverState = eNOTHING;
+		}
+		else
+		{		
+			/* The TXCOMP was not for any special type of transmission.  See
+			if there is any more data to send. */
+			prvSendNextSegment();
+		}
+	}
+
+	if( pxMessage->ulCSR0 & AT91C_UDP_RXSETUP )
+	{
+		xUSB_REQUEST xRequest;
+		unsigned portCHAR ucRequest;
+		unsigned portLONG ulRxBytes;
+
+		/* A data packet is available. */	
+		ulRxBytes = pxMessage->ulCSR0 >> 16;
+		ulRxBytes &= usbRX_COUNT_MASK;
+
+		if( ulRxBytes >= usbEXPECTED_NUMBER_OF_BYTES )
+		{
+			/* Create an xUSB_REQUEST variable from the raw bytes array. */
+
+			xRequest.ucReqType = pxMessage->ucFifoData[ usbREQUEST_TYPE_INDEX ];
+			xRequest.ucRequest = pxMessage->ucFifoData[ usbREQUEST_INDEX ];
+
+			/* NOT PORTABLE CODE! */
+			xRequest.usValue = pxMessage->ucFifoData[ usbVALUE_HIGH_BYTE ];
+			xRequest.usValue <<= 8;
+			xRequest.usValue |= pxMessage->ucFifoData[ usbVALUE_LOW_BYTE ];
+						
+			xRequest.usIndex = pxMessage->ucFifoData[ usbINDEX_HIGH_BYTE ];
+			xRequest.usIndex <<= 8;
+			xRequest.usIndex |= pxMessage->ucFifoData[ usbINDEX_LOW_BYTE ];
+			
+			xRequest.usLength = pxMessage->ucFifoData[ usbLENGTH_HIGH_BYTE ];
+			xRequest.usLength <<= 8;
+			xRequest.usLength |= pxMessage->ucFifoData[ usbLENGTH_LOW_BYTE ];
+	
+			/* Manipulate the ucRequestType and the ucRequest parameters to 
+			generate a zero based request selection.  This is just done to 
+			break up the requests into subsections for clarity.  The 
+			alternative would be to have more huge switch statement that would
+			be difficult to optimise. */
+			ucRequest = ( ( xRequest.ucReqType & 0x60 ) >> 3 );
+			ucRequest |= ( xRequest.ucReqType & 0x03 );
+
+			switch( ucRequest )
+			{
+				case usbSTANDARD_DEVICE_REQUEST:	
+							/* Standard Device request */
+							prvHandleStandardDeviceRequest( &xRequest );
+							break;
+	
+				case usbSTANDARD_INTERFACE_REQUEST:	
+							/* Standard Interface request */
+							prvHandleStandardInterfaceRequest( &xRequest );
+							break;
+	
+				case usbSTANDARD_END_POINT_REQUEST:	
+							/* Standard Endpoint request */
+							prvHandleStandardEndPointRequest( &xRequest );
+							break;
+	
+				case usbCLASS_INTERFACE_REQUEST:	
+							/* Class Interface request */
+							prvHandleClassInterfaceRequest( &xRequest );
+							break;
+	
+				default:	/* This is not something we want to respond to. */
+							prvSendStall();	
+			}
+		}
+	}
+}
+/*-----------------------------------------------------------*/
+
+static void prvGetStandardDeviceDescriptor( xUSB_REQUEST *pxRequest )
+{
+	/* The type is in the high byte.  Return whatever has been requested. */
+	switch( ( pxRequest->usValue & 0xff00 ) >> 8 )
+	{
+	    case usbDESCRIPTOR_TYPE_DEVICE:
+			prvSendControlData( ( unsigned portCHAR * ) &pxDeviceDescriptor, pxRequest->usLength, sizeof( pxDeviceDescriptor ), pdTRUE );
+		    break;
+	
+	    case usbDESCRIPTOR_TYPE_CONFIGURATION:
+			prvSendControlData( ( unsigned portCHAR * ) &( pxConfigDescriptor ), pxRequest->usLength, sizeof( pxConfigDescriptor ), pdTRUE );
+		    break;
+
+	    case usbDESCRIPTOR_TYPE_STRING:
+
+			/* The index to the string descriptor is the lower byte. */
+		    switch( pxRequest->usValue & 0xff )
+			{			
+		        case usbLANGUAGE_STRING:
+					prvSendControlData( ( unsigned portCHAR * ) &pxLanguageStringDescriptor, pxRequest->usLength, sizeof(pxLanguageStringDescriptor), pdTRUE );
+			        break;
+
+		        case usbMANUFACTURER_STRING:
+					prvSendControlData( ( unsigned portCHAR * ) &pxManufacturerStringDescriptor, pxRequest->usLength, sizeof( pxManufacturerStringDescriptor ), pdTRUE );
+			        break;
+
+		        case usbPRODUCT_STRING:
+					prvSendControlData( ( unsigned portCHAR * ) &pxProductStringDescriptor, pxRequest->usLength, sizeof( pxProductStringDescriptor ), pdTRUE );
+			        break;
+
+		        case usbCONFIGURATION_STRING:
+					prvSendControlData( ( unsigned portCHAR * ) &pxConfigurationStringDescriptor, pxRequest->usLength, sizeof( pxConfigurationStringDescriptor ), pdTRUE );
+			        break;
+
+		        case usbINTERFACE_STRING:
+					prvSendControlData( ( unsigned portCHAR * ) &pxInterfaceStringDescriptor, pxRequest->usLength, sizeof( pxInterfaceStringDescriptor ), pdTRUE );
+			        break;
+
+		        default:
+			        /* Don't know what this string is. */
+					prvSendStall();
+					break;
+			}
+
+			break;
+
+	    default:
+			/* We are not responding to anything else. */
+			prvSendStall();
+		    break;
+	}
+}
+/*-----------------------------------------------------------*/
+
+static void prvHandleStandardDeviceRequest( xUSB_REQUEST *pxRequest )
+{
+unsigned portSHORT usStatus = 0;
+
+	switch( pxRequest->ucRequest )
+	{
+	    case usbGET_STATUS_REQUEST:
+			/* Just send two byte dummy status. */
+			prvSendControlData( ( unsigned portCHAR * ) &usStatus, sizeof( usStatus ), sizeof( usStatus ), pdFALSE );
+		    break;
+
+	    case usbGET_DESCRIPTOR_REQUEST:
+			/* Send device descriptor */
+		    prvGetStandardDeviceDescriptor( pxRequest );
+		    break;
+
+	    case usbGET_CONFIGURATION_REQUEST:
+			/* Send selected device configuration */
+			prvSendControlData( ( unsigned portCHAR * ) &ucUSBConfig, sizeof( ucUSBConfig ), sizeof( ucUSBConfig ), pdFALSE );
+		    break;
+
+		case usbSET_FEATURE_REQUEST:
+		    prvUSBTransmitNull();
+		    break;
+
+	    case usbSET_ADDRESS_REQUEST:
+	    	
+			/* Acknowledge the SET_ADDRESS, but (according to the manual) we
+			cannot actually move to the addressed state until we get a TXCOMP
+			interrupt from this NULL packet.  Therefore we just remember the
+			address and set our state so we know we have received the address. */
+	    	prvUSBTransmitNull();			
+			eDriverState = eJUST_GOT_ADDRESS;	    	
+			ulReceivedAddress = ( unsigned portLONG ) pxRequest->usValue;
+		    break;
+
+	    case usbSET_CONFIGURATION_REQUEST:
+
+			/* Acknowledge the SET_CONFIGURATION, but (according to the manual) 
+			we cannot actually move to the configured state until we get a 
+			TXCOMP interrupt from this NULL packet.  Therefore we just remember the
+			config and set our state so we know we have received the go ahead. */			
+			ucUSBConfig = ( unsigned portCHAR ) ( pxRequest->usValue & 0xff );
+			eDriverState = eJUST_GOT_CONFIG;
+			prvUSBTransmitNull();
+		    break;
+
+	    default:
+
+		    /* We don't answer to anything else. */
+			prvSendStall();
+		    break;
+	}
+}
+/*-----------------------------------------------------------*/
+
+static void prvHandleClassInterfaceRequest( xUSB_REQUEST *pxRequest )
+{
+	switch( pxRequest->ucRequest )
+	{
+	    case usbSET_IDLE_REQUEST:
+	    	prvUSBTransmitNull();
+			break;
+
+		/* This minimal implementation ignores these. */
+	    case usbGET_REPORT_REQUEST:
+	    case usbGET_IDLE_REQUEST:
+	    case usbGET_PROTOCOL_REQUEST:
+	    case usbSET_REPORT_REQUEST:
+	    case usbSET_PROTOCOL_REQUEST:	
+	    default:
+
+			prvSendStall();
+			break;
+	}
+}
+/*-----------------------------------------------------------*/
+
+static void prvGetStandardInterfaceDescriptor( xUSB_REQUEST *pxRequest )
+{
+	switch( ( pxRequest->usValue & ( unsigned portSHORT ) 0xff00 ) >> 8 )
+	{
+	    case usbHID_REPORT_DESCRIPTOR:
+			prvSendControlData( ( unsigned portCHAR * ) pxReportDescriptor, pxRequest->usLength, sizeof( pxReportDescriptor ), pdTRUE );
+		    break;
+
+	    default:
+
+			/* Don't expect to send any others. */
+			prvSendStall();
+		    break;
+	}
+}
+/*-----------------------------------------------------------*/
+
+static void prvHandleStandardInterfaceRequest( xUSB_REQUEST *pxRequest )
+{
+unsigned portSHORT usStatus = 0;
+
+	switch( pxRequest->ucRequest )
+	{
+	    case usbGET_STATUS_REQUEST:
+			/* Send dummy 2 bytes. */
+			prvSendControlData( ( unsigned portCHAR * ) &usStatus, sizeof( usStatus ), sizeof( usStatus ), pdFALSE );
+			break;
+
+	    case usbGET_DESCRIPTOR_REQUEST:
+			prvGetStandardInterfaceDescriptor( pxRequest ); 
+			break;
+
+		/* This minimal implementation does not respond to these. */
+	    case usbGET_INTERFACE_REQUEST:
+	    case usbSET_FEATURE_REQUEST:
+	    case usbSET_INTERFACE_REQUEST:	
+
+	    default:
+			prvSendStall();
+			break;
+	}
+}
+/*-----------------------------------------------------------*/
+
+static void prvHandleStandardEndPointRequest( xUSB_REQUEST *pxRequest )
+{
+	switch( pxRequest->ucRequest )
+	{
+		/* This minimal implementation does not expect to respond to these. */
+	    case usbGET_STATUS_REQUEST:
+	    case usbCLEAR_FEATURE_REQUEST: 
+	    case usbSET_FEATURE_REQUEST:
+
+	    default:			
+			prvSendStall();
+			break;
+	}
+}
+/*-----------------------------------------------------------*/
+
+static void vInitUSBInterface( void )
+{
+volatile unsigned portLONG ulTemp;
+
+	/* Initialise a few state variables. */
+	pxCharsForTx.ulNextCharIndex = ( unsigned portLONG ) 0;
+	ucUSBConfig = ( unsigned portCHAR ) 0;
+	eDriverState = eNOTHING;
+
+	/* HARDWARE SETUP */
+
+    /* Set the PLL USB Divider */
+    AT91C_BASE_CKGR->CKGR_PLLR |= AT91C_CKGR_USBDIV_1;
+
+    /* Enables the 48MHz USB clock UDPCK and System Peripheral USB Clock. */
+    AT91C_BASE_PMC->PMC_SCER = AT91C_PMC_UDP;
+    AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_UDP);
+
+    /* Setup the PIO for the USB pull up resistor. */
+    AT91C_BASE_PIOA->PIO_PER = AT91C_PIO_PA16;
+    AT91C_BASE_PIOA->PIO_OER = AT91C_PIO_PA16;
+    
+
+    /* Start without the pullup - this will get set at the end of this 
+	function. */
+    AT91C_BASE_PIOA->PIO_SODR = AT91C_PIO_PA16;
+
+	/* When using the USB debugger the peripheral registers do not always get
+	set to the correct default values.  To make sure set the relevant registers
+	manually here. */
+	AT91C_BASE_UDP->UDP_IDR = ( unsigned portLONG ) 0xffffffff;
+	AT91C_BASE_UDP->UDP_ICR = ( unsigned portLONG ) 0xffffffff;
+	AT91C_BASE_UDP->UDP_CSR[ 0 ] = ( unsigned portLONG ) 0x00;
+	AT91C_BASE_UDP->UDP_CSR[ 1 ] = ( unsigned portLONG ) 0x00;
+	AT91C_BASE_UDP->UDP_GLBSTATE = 0;
+	AT91C_BASE_UDP->UDP_FADDR = 0;
+
+	/* Enable the transceiver. */
+	AT91C_UDP_TRANSCEIVER_ENABLE = 0;
+
+	/* Enable the USB interrupts - other interrupts get enabled as the 
+	enumeration process progresses. */
+	AT91F_AIC_ConfigureIt( AT91C_ID_UDP, usbINTERRUPT_PRIORITY, AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, ( void (*)( void ) ) vUSB_ISR_Wrapper );
+	AT91C_BASE_AIC->AIC_IECR = 0x1 << AT91C_ID_UDP;
+
+	/* Wait a short while before making our presence known. */
+	vTaskDelay( usbINIT_DELAY );
+	AT91C_BASE_PIOA->PIO_CODR = AT91C_PIO_PA16;
+}
+/*-----------------------------------------------------------*/
+
+static void prvSendControlData( unsigned portCHAR *pucData, unsigned portSHORT usRequestedLength, unsigned portLONG ulLengthToSend, portLONG lSendingDescriptor )
+{
+	if( ( ( unsigned portLONG ) usRequestedLength < ulLengthToSend ) )
+	{
+		/* Cap the data length to that requested. */
+		ulLengthToSend = ( unsigned portSHORT ) usRequestedLength;
+	}
+	else if( ( ulLengthToSend < ( unsigned portLONG ) usRequestedLength ) && lSendingDescriptor )
+	{
+		/* We are sending a descriptor.  If the descriptor is an exact 
+		multiple of the FIFO length then it will have to be terminated
+		with a NULL packet.  Set the state to indicate this if
+		necessary. */
+		if( ( ulLengthToSend % usbFIFO_LENGTH ) == 0 )
+		{
+			eDriverState = eSENDING_EVEN_DESCRIPTOR;
+		}
+	}
+
+	/* Here we assume that the previous message has been sent.  THERE IS NO
+	BUFFER OVERFLOW PROTECTION HERE.
+
+	Copy the data to send into the buffer as we cannot send it all at once
+	(if it is greater than 8 bytes in length). */
+	memcpy( pxCharsForTx.ucTxBuffer, pucData, ulLengthToSend );
+
+	/* Reinitialise the buffer index so we start sending from the start of 
+	the data. */
+	pxCharsForTx.ulTotalDataLength = ulLengthToSend;
+	pxCharsForTx.ulNextCharIndex = ( unsigned portLONG ) 0;
+
+	/* Send the first 8 bytes now.  The rest will get sent in response to 
+	TXCOMP interrupts. */
+	prvSendNextSegment();
+}
+/*-----------------------------------------------------------*/
+
+static void prvSendNextSegment( void )
+{
+volatile unsigned portLONG ulNextLength, ulStatus, ulLengthLeftToSend;
+
+	/* Is there any data to send? */
+	if( pxCharsForTx.ulTotalDataLength > pxCharsForTx.ulNextCharIndex )
+	{
+		ulLengthLeftToSend = pxCharsForTx.ulTotalDataLength - pxCharsForTx.ulNextCharIndex;
+	
+		/* We can only send 8 bytes to the fifo at a time. */
+		if( ulLengthLeftToSend > usbFIFO_LENGTH )
+		{
+			ulNextLength = usbFIFO_LENGTH;
+		}
+		else
+		{
+			ulNextLength = ulLengthLeftToSend;
+		}
+
+		/* Wait until we can place data in the fifo.  THERE IS NO TIMEOUT
+		HERE! */
+		while( AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_0 ] & AT91C_UDP_TXPKTRDY )
+		{
+			vTaskDelay( usbSHORTEST_DELAY );
+		}
+
+		/* Write the data to the FIFO. */
+		while( ulNextLength > ( unsigned portLONG ) 0 )
+		{
+			AT91C_BASE_UDP->UDP_FDR[ usbEND_POINT_0 ] = pxCharsForTx.ucTxBuffer[ pxCharsForTx.ulNextCharIndex ];
+	
+			ulNextLength--;
+			pxCharsForTx.ulNextCharIndex++;
+		}
+	
+		/* Start the transmission. */
+		portENTER_CRITICAL();
+		{
+			ulStatus = AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_0 ];
+			usbCSR_SET_BIT( &ulStatus, ( ( unsigned portLONG ) 0x10 ) );
+			AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_0 ] = ulStatus;
+		}
+		portEXIT_CRITICAL();
+	}
+	else
+	{
+		/* There is no data to send.  If we were sending a descriptor and the 
+		descriptor was an exact multiple of the max packet size then we need
+		to send a null to terminate the transmission. */
+		if( eDriverState == eSENDING_EVEN_DESCRIPTOR )
+		{
+			prvUSBTransmitNull();
+			eDriverState = eNOTHING;
+		}
+	}
+}
+
+
+
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/USB/USBSample.h b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/USB/USBSample.h
new file mode 100644
index 0000000000..4e33db00f2
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/USB/USBSample.h
@@ -0,0 +1,84 @@
+/*
+	FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 Richard Barry.
+
+	This file is part of the FreeRTOS.org distribution.
+
+	FreeRTOS.org 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 2 of the License, or
+	(at your option) any later version.
+
+	FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+	A special exception to the GPL can be applied should you wish to distribute
+	a combined work that includes FreeRTOS.org, without being obliged to provide
+	the source code for any proprietary components.  See the licensing section 
+	of http://www.FreeRTOS.org for full details of how and when the exception
+	can be applied.
+
+	***************************************************************************
+	See http://www.FreeRTOS.org for documentation, latest information, license 
+	and contact details.  Please ensure to read the configuration and relevant 
+	port sections of the online documentation.
+
+	Also see http://www.SafeRTOS.com a version that has been certified for use
+	in safety critical systems, plus commercial licensing, development and
+	support options.
+	***************************************************************************
+*/
+
+#ifndef USB_DEMO_H
+#define USB_DEMO_H
+
+
+/*-----------------------------------------------------------*/
+
+#define usbQUEUE_LENGTH						( 0x3 )	/* Must have all bits set! */
+#define usbEND_POINT_0						( 0 )
+#define usbEND_POINT_1						( 1 )
+#define usbRX_COUNT_MASK					( ( unsigned portLONG ) 0x7ff )
+#define AT91C_UDP_STALLSENT					AT91C_UDP_ISOERROR
+
+/* Structure used to take a snapshot of the USB status from within the ISR. */
+typedef struct X_ISR_STATUS
+{
+	unsigned portLONG ulISR;
+	unsigned portLONG ulCSR0;
+	unsigned portCHAR ucFifoData[ 8 ];
+} xISRStatus;
+
+/* Macros to manipulate the control and status registers.  These registers 
+cannot be accessed using a direct read modify write operation outside of the 
+ISR as some bits are left unchanged by writing with a 0, and some are left 
+unchanged by writing with a 1. */
+
+#define usbCSR_SET_BIT( pulValueNow, ulBit )											\
+{																						\
+	/* Set TXCOMP, RX_DATA_BK0, RXSETUP, */												\
+	/* STALLSENT and RX_DATA_BK1 to 1 so the */											\
+	/* write has no effect. */															\
+	( * ( ( unsigned portLONG * ) pulValueNow ) ) |= ( unsigned portLONG ) 0x4f;		\
+																						\
+	/* Clear the FORCE_STALL and TXPKTRDY bits */										\
+	/* so the write has no effect. */													\
+	( * ( ( unsigned portLONG * ) pulValueNow ) ) &= ( unsigned portLONG ) 0xffffffcf;	\
+																						\
+	/* Set whichever bit we want set. */												\
+	( * ( ( unsigned portLONG * ) pulValueNow ) ) |= ( ulBit );							\
+}
+
+/*
+ * Creates the queue used to communicate between the USB task and the USB ISR, then
+ * createst the task that manages the USB peripheral.
+ */
+void vStartUSBTask( unsigned portBASE_TYPE uxPriority );
+
+#endif
+
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/USB/USB_ISR.c b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/USB/USB_ISR.c
new file mode 100644
index 0000000000..d37c5a9399
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/USB/USB_ISR.c
@@ -0,0 +1,180 @@
+/*
+	FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 Richard Barry.
+
+	This file is part of the FreeRTOS.org distribution.
+
+	FreeRTOS.org 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 2 of the License, or
+	(at your option) any later version.
+
+	FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+	A special exception to the GPL can be applied should you wish to distribute
+	a combined work that includes FreeRTOS.org, without being obliged to provide
+	the source code for any proprietary components.  See the licensing section 
+	of http://www.FreeRTOS.org for full details of how and when the exception
+	can be applied.
+
+	***************************************************************************
+	See http://www.FreeRTOS.org for documentation, latest information, license 
+	and contact details.  Please ensure to read the configuration and relevant 
+	port sections of the online documentation.
+
+	Also see http://www.SafeRTOS.com a version that has been certified for use
+	in safety critical systems, plus commercial licensing, development and
+	support options.
+	***************************************************************************
+*/
+
+/* Scheduler includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+
+/* Demo app includes. */
+#include "USBSample.h"
+
+#define usbINT_CLEAR_MASK	(AT91C_UDP_TXCOMP | AT91C_UDP_STALLSENT | AT91C_UDP_RXSETUP | AT91C_UDP_RX_DATA_BK0 | AT91C_UDP_RX_DATA_BK1 )
+
+#define usbCSR_CLEAR_BIT( pulValueNow, ulBit )											\
+{																						\
+	/* Set TXCOMP, RX_DATA_BK0, RXSETUP, */												\
+	/* STALLSENT and RX_DATA_BK1 to 1 so the */											\
+	/* write has no effect. */															\
+	( * ( ( unsigned portLONG * ) pulValueNow ) ) |= ( unsigned portLONG ) 0x4f;		\
+																						\
+	/* Clear the FORCE_STALL and TXPKTRDY bits */										\
+	/* so the write has no effect. */													\
+	( * ( ( unsigned portLONG * ) pulValueNow ) ) &= ( unsigned portLONG ) 0xffffffcf;	\
+																						\
+	/* Clear whichever bit we want clear. */											\
+	( * ( ( unsigned portLONG * ) pulValueNow ) ) &= ( ~ulBit );						\
+}
+
+
+/*-----------------------------------------------------------*/
+
+/*
+ * ISR entry point.
+ */
+
+void vUSB_ISR_Wrapper( void ) __attribute__((naked));
+
+/*
+ * Actual ISR handler.  This must be separate from the entry point as the stack
+ * is used.
+ */
+void vUSB_ISR_Handler( void );
+
+/*-----------------------------------------------------------*/
+
+/* Array in which the USB interrupt status is passed between the ISR and task. */
+static xISRStatus xISRMessages[ usbQUEUE_LENGTH + 1 ];
+
+/* Queue used to pass messages between the ISR and the task. */
+extern xQueueHandle xUSBInterruptQueue; 
+
+/*-----------------------------------------------------------*/
+
+void vUSB_ISR_Handler( void )
+{
+portBASE_TYPE xTaskWokenByPost = pdFALSE; 
+static volatile unsigned portLONG ulNextMessage = 0;
+xISRStatus *pxMessage;
+unsigned portLONG ulTemp, ulRxBytes;
+
+	/* To reduce the amount of time spent in this interrupt it would be 
+	possible to defer the majority of this processing to an 'interrupt task',
+	that is a task that runs at a higher priority than any of the application
+	tasks. */
+
+	/* Take the next message from the queue.  Note that usbQUEUE_LENGTH *must*
+	be all 1's, as in 0x01, 0x03, 0x07, etc. */
+	pxMessage = &( xISRMessages[ ( ulNextMessage & usbQUEUE_LENGTH ) ] );
+	ulNextMessage++;
+
+	/* Take a snapshot of the current USB state for processing at the task
+	level. */
+	pxMessage->ulISR = AT91C_BASE_UDP->UDP_ISR;
+	pxMessage->ulCSR0 = AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_0 ];
+
+	/* Clear the interrupts from the ICR register.  The bus end interrupt is
+	cleared separately as it does not appear in the mask register. */
+	AT91C_BASE_UDP->UDP_ICR = AT91C_BASE_UDP->UDP_IMR | AT91C_UDP_ENDBUSRES;
+	
+	/* If there are bytes in the FIFO then we have to retrieve them here.  
+	Ideally this would be done at the task level.  However we need to clear the
+	RXSETUP interrupt before leaving the ISR, and this may cause the data in
+	the FIFO to be overwritten.  Also the DIR bit has to be changed before the
+	RXSETUP bit is cleared (as per the SAM7 manual). */
+	ulTemp = pxMessage->ulCSR0;
+	
+	/* Are there any bytes in the FIFO? */
+	ulRxBytes = ulTemp >> 16;
+	ulRxBytes &= usbRX_COUNT_MASK;
+	
+	/* With this minimal implementation we are only interested in receiving 
+	setup bytes on the control end point. */
+	if( ( ulRxBytes > 0 ) && ( ulTemp & AT91C_UDP_RXSETUP ) )
+	{
+		/* Take off 1 for a zero based index. */
+		while( ulRxBytes > 0 )
+		{
+			ulRxBytes--;
+			pxMessage->ucFifoData[ ulRxBytes ] = AT91C_BASE_UDP->UDP_FDR[ usbEND_POINT_0 ];			
+		}
+		
+		/* The direction must be changed first. */
+		usbCSR_SET_BIT( &ulTemp, ( AT91C_UDP_DIR ) );
+		AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_0 ] = ulTemp;
+	}
+	
+	/* Must write zero's to TXCOMP, STALLSENT, RXSETUP, and the RX DATA
+	registers to clear the interrupts in the CSR register. */
+	usbCSR_CLEAR_BIT( &ulTemp, usbINT_CLEAR_MASK );
+	AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_0 ] = ulTemp;
+
+	/* Also clear the interrupts in the CSR1 register. */
+	ulTemp = AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_1 ];
+	usbCSR_CLEAR_BIT( &ulTemp, usbINT_CLEAR_MASK );	
+	AT91C_BASE_UDP->UDP_CSR[ usbEND_POINT_1 ] = ulTemp;
+
+	/* The message now contains the entire state and optional data from
+	the USB interrupt.  This can now be posted on the Rx queue ready for
+	processing at the task level. */
+	xTaskWokenByPost = xQueueSendFromISR( xUSBInterruptQueue, &pxMessage, xTaskWokenByPost );
+
+	/* We may want to switch to the USB task, if this message has made
+	it the highest priority task that is ready to execute. */
+	if( xTaskWokenByPost )
+	{
+		portYIELD_FROM_ISR();
+	}
+
+	/* Clear the AIC ready for the next interrupt. */		
+	AT91C_BASE_AIC->AIC_EOICR = 0;
+}
+/*-----------------------------------------------------------*/
+
+void vUSB_ISR_Wrapper( void )
+{
+	/* Save the context of the interrupted task. */
+	portSAVE_CONTEXT();
+
+	/* Call the handler itself.  This must be a separate function as it uses
+	the stack. */
+	vUSB_ISR_Handler();
+
+	/* Restore the context of the task that is going to 
+	execute next. This might not be the same as the originally 
+	interrupted task.*/
+	portRESTORE_CONTEXT();
+}
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/atmel-rom.ld b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/atmel-rom.ld
new file mode 100644
index 0000000000..db22b4acd9
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/atmel-rom.ld
@@ -0,0 +1,49 @@
+MEMORY 
+{
+	flash	: ORIGIN = 0x00100000, LENGTH = 256K
+	ram		: ORIGIN = 0x00200000, LENGTH = 64K
+}
+
+__stack_end__ = 0x00200000 + 64K - 4;
+
+SECTIONS 
+{
+	. = 0;
+	startup : { *(.startup)} >flash
+
+	prog : 
+	{
+		*(.text)
+		*(.rodata)
+		*(.rodata*)
+		*(.glue_7)
+		*(.glue_7t)
+	} >flash
+
+	__end_of_text__ = .;
+
+	.data : 
+	{
+		__data_beg__ = .;
+		__data_beg_src__ = __end_of_text__;
+		*(.data)
+		__data_end__ = .;
+	} >ram AT>flash
+
+	.bss : 
+	{
+		__bss_beg__ = .;
+		*(.bss)
+	} >ram
+
+	/* Align here to ensure that the .bss section occupies space up to
+	_end.  Align after .bss to ensure correct alignment even if the
+	.bss section disappears because there are no input sections.  */
+	. = ALIGN(32 / 8);
+}
+	. = ALIGN(32 / 8);
+	_end = .;
+	_bss_end__ = . ; __bss_end__ = . ; __end__ = . ;
+	PROVIDE (end = .);
+
+
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/boot.s b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/boot.s
new file mode 100644
index 0000000000..1d4dfdf0ec
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/boot.s
@@ -0,0 +1,162 @@
+	/* Sample initialization file */
+
+	.extern main
+	.extern exit
+	.extern AT91F_LowLevelInit
+	.extern vPortYieldProcessor
+
+	.text
+	.code 32
+
+
+	.align  0
+
+	.extern __stack_end__
+	.extern __bss_beg__
+	.extern __bss_end__
+	.extern __data_beg__
+	.extern __data_end__
+	.extern __data+beg_src__
+
+	.global start
+	.global endless_loop
+
+	/* Stack Sizes */
+    .set  UND_STACK_SIZE, 0x00000004
+    .set  ABT_STACK_SIZE, 0x00000004
+    .set  FIQ_STACK_SIZE, 0x00000004
+    .set  IRQ_STACK_SIZE, 0X00000400
+    .set  SVC_STACK_SIZE, 0x00000400
+
+	/* Standard definitions of Mode bits and Interrupt (I & F) flags in PSRs */
+    .set  MODE_USR, 0x10            /* User Mode */
+    .set  MODE_FIQ, 0x11            /* FIQ Mode */
+    .set  MODE_IRQ, 0x12            /* IRQ Mode */
+    .set  MODE_SVC, 0x13            /* Supervisor Mode */
+    .set  MODE_ABT, 0x17            /* Abort Mode */
+    .set  MODE_UND, 0x1B            /* Undefined Mode */
+    .set  MODE_SYS, 0x1F            /* System Mode */
+
+    .equ  I_BIT, 0x80               /* when I bit is set, IRQ is disabled */
+    .equ  F_BIT, 0x40               /* when F bit is set, FIQ is disabled */
+
+
+start:
+_start:
+_mainCRTStartup:
+
+	/* Setup a stack for each mode - note that this only sets up a usable stack
+	for system/user, SWI and IRQ modes.   Also each mode is setup with
+	interrupts initially disabled. */
+    ldr   r0, .LC6
+    msr   CPSR_c, #MODE_UND|I_BIT|F_BIT /* Undefined Instruction Mode */
+    mov   sp, r0
+    sub   r0, r0, #UND_STACK_SIZE
+    msr   CPSR_c, #MODE_ABT|I_BIT|F_BIT /* Abort Mode */
+    mov   sp, r0
+    sub   r0, r0, #ABT_STACK_SIZE
+    msr   CPSR_c, #MODE_FIQ|I_BIT|F_BIT /* FIQ Mode */
+    mov   sp, r0
+    sub   r0, r0, #FIQ_STACK_SIZE
+    msr   CPSR_c, #MODE_IRQ|I_BIT|F_BIT /* IRQ Mode */
+    mov   sp, r0
+    sub   r0, r0, #IRQ_STACK_SIZE
+    msr   CPSR_c, #MODE_SVC|I_BIT|F_BIT /* Supervisor Mode */
+    mov   sp, r0
+    sub   r0, r0, #SVC_STACK_SIZE
+    msr   CPSR_c, #MODE_SYS|I_BIT|F_BIT /* System Mode */
+    mov   sp, r0
+
+	/* We want to start in supervisor mode.  Operation will switch to system
+	mode when the first task starts. */
+	msr   CPSR_c, #MODE_SVC|I_BIT|F_BIT
+
+    bl		AT91F_LowLevelInit
+
+	/* Clear BSS. */
+
+	mov     a2, #0			/* Fill value */
+	mov		fp, a2			/* Null frame pointer */
+	mov		r7, a2			/* Null frame pointer for Thumb */
+
+	ldr		r1, .LC1		/* Start of memory block */
+	ldr		r3, .LC2		/* End of memory block */
+	subs	r3, r3, r1      /* Length of block */
+	beq		.end_clear_loop
+	mov		r2, #0
+
+.clear_loop:
+	strb	r2, [r1], #1
+	subs	r3, r3, #1
+	bgt		.clear_loop
+
+.end_clear_loop:
+
+	/* Initialise data. */
+
+	ldr		r1, .LC3		/* Start of memory block */
+	ldr		r2, .LC4		/* End of memory block */
+	ldr		r3, .LC5
+	subs	r3, r3, r1		/* Length of block */
+	beq		.end_set_loop
+
+.set_loop:
+	ldrb	r4, [r2], #1
+	strb	r4, [r1], #1
+	subs	r3, r3, #1
+	bgt		.set_loop
+
+.end_set_loop:
+
+	mov		r0, #0          /* no arguments  */
+	mov		r1, #0          /* no argv either */
+
+    ldr lr, =main	
+	bx	lr
+
+endless_loop:
+	b               endless_loop
+
+
+	.align 0
+
+	.LC1:
+	.word   __bss_beg__
+	.LC2:
+	.word   __bss_end__
+	.LC3:
+	.word   __data_beg__
+	.LC4:
+	.word   __data_beg_src__
+	.LC5:
+	.word   __data_end__
+	.LC6:
+	.word   __stack_end__
+
+
+	/* Setup vector table.  Note that undf, pabt, dabt, fiq just execute
+	a null loop. */
+
+.section .startup,"ax"
+         .code 32
+         .align 0
+
+	b     _start						/* reset - _start			*/
+	ldr   pc, _undf						/* undefined - _undf		*/
+	ldr   pc, _swi						/* SWI - _swi				*/
+	ldr   pc, _pabt						/* program abort - _pabt	*/
+	ldr   pc, _dabt						/* data abort - _dabt		*/
+	nop									/* reserved					*/
+	ldr   pc, [pc,#-0xF20]				/* IRQ - read the AIC		*/
+	ldr   pc, _fiq						/* FIQ - _fiq				*/
+
+_undf:  .word __undf                    /* undefined				*/
+_swi:   .word vPortYieldProcessor       /* SWI						*/
+_pabt:  .word __pabt                    /* program abort			*/
+_dabt:  .word __dabt                    /* data abort				*/
+_fiq:   .word __fiq                     /* FIQ						*/
+
+__undf: b     .                         /* undefined				*/
+__pabt: b     .                         /* program abort			*/
+__dabt: b     .                         /* data abort				*/
+__fiq:  b     .                         /* FIQ						*/
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/main.c b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/main.c
new file mode 100644
index 0000000000..618e2d60c1
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/main.c
@@ -0,0 +1,236 @@
+/*
+	FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 Richard Barry.
+
+	This file is part of the FreeRTOS.org distribution.
+
+	FreeRTOS.org 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 2 of the License, or
+	(at your option) any later version.
+
+	FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+	A special exception to the GPL can be applied should you wish to distribute
+	a combined work that includes FreeRTOS.org, without being obliged to provide
+	the source code for any proprietary components.  See the licensing section 
+	of http://www.FreeRTOS.org for full details of how and when the exception
+	can be applied.
+
+	***************************************************************************
+	See http://www.FreeRTOS.org for documentation, latest information, license 
+	and contact details.  Please ensure to read the configuration and relevant 
+	port sections of the online documentation.
+
+	Also see http://www.SafeRTOS.com a version that has been certified for use
+	in safety critical systems, plus commercial licensing, development and
+	support options.
+	***************************************************************************
+*/
+
+/*
+	NOTE : Tasks run in System mode and the scheduler runs in Supervisor mode.
+	The processor MUST be in supervisor mode when vTaskStartScheduler is
+	called.  The demo applications included in the FreeRTOS.org download switch
+	to supervisor mode prior to main being called.  If you are not using one of
+	these demo application projects then ensure Supervisor mode is used.
+*/
+
+/*
+ * This demo includes a (basic) USB mouse driver and a WEB server.  It is
+ * targeted for the AT91SAM7X EK prototyping board which includes a small
+ * joystick to provide the mouse inputs.  The WEB interface provides some basic
+ * interactivity through the use of a check box to turn on and off an LED.
+ *
+ * main() creates the WEB server, USB, and a set of the standard demo tasks
+ * before starting the scheduler.  See the online FreeRTOS.org documentation 
+ * for more information on the standard demo tasks.  
+ *
+ * LEDs D1 to D3 are controlled by the standard 'flash' tasks - each will 
+ * toggle at a different fixed frequency.
+ *
+ * A tick hook function is used to monitor the standard demo tasks - with LED
+ * D4 being used to indicate the system status.  D4 toggling every 5 seconds
+ * indicates that all the standard demo tasks are executing without error.  The
+ * toggle rate increasing to 500ms is indicative of an error having been found
+ * in at least one demo task.
+ *
+ * See the online documentation page that accompanies this demo for full setup
+ * and usage information.
+ */
+
+/* Standard includes. */
+#include <stdlib.h>
+
+/* Scheduler includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+
+/* Demo application includes. */
+#include "partest.h"
+#include "USBSample.h"
+#include "uip_task.h"
+#include "BlockQ.h"
+#include "blocktim.h"
+#include "flash.h"
+#include "QPeek.h"
+#include "dynamic.h"
+
+/* Priorities for the demo application tasks. */
+#define mainUIP_PRIORITY					( tskIDLE_PRIORITY + 2 )
+#define mainUSB_PRIORITY					( tskIDLE_PRIORITY + 2 )
+#define mainBLOCK_Q_PRIORITY				( tskIDLE_PRIORITY + 1 )
+#define mainFLASH_PRIORITY                  ( tskIDLE_PRIORITY + 2 )
+#define mainGEN_QUEUE_TASK_PRIORITY			( tskIDLE_PRIORITY ) 
+
+/* The task allocated to the uIP task is large to account for its use of the
+sprintf() library function.  Use of a cut down printf() library would allow
+the stack usage to be greatly reduced. */
+#define mainUIP_TASK_STACK_SIZE		( configMINIMAL_STACK_SIZE * 6 )
+
+/* The LED toggle by the tick hook should an error have been found in a task. */
+#define mainERROR_LED						( 3 )
+
+/*-----------------------------------------------------------*/
+
+/*
+ * Configure the processor for use with the Atmel demo board.  Setup is minimal
+ * as the low level init function (called from the startup asm file) takes care
+ * of most things.
+ */
+static void prvSetupHardware( void );
+
+/*-----------------------------------------------------------*/
+
+/*
+ * Starts all the other tasks, then starts the scheduler.
+ */
+int main( void )
+{
+	/* Setup any hardware that has not already been configured by the low
+	level init routines. */
+	prvSetupHardware();
+
+	/* Start the task that handles the TCP/IP and WEB server functionality. */
+    xTaskCreate( vuIP_Task, "uIP", mainUIP_TASK_STACK_SIZE, NULL, mainUIP_PRIORITY, NULL );
+	
+	/* Also start the USB demo which is just for the SAM7. */
+    vStartUSBTask( mainUSB_PRIORITY );
+	
+	/* Start the standard demo tasks. */
+	vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );
+    vCreateBlockTimeTasks();
+    vStartLEDFlashTasks( mainFLASH_PRIORITY );
+    vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );
+    vStartQueuePeekTasks();   
+    vStartDynamicPriorityTasks();
+
+	/* Start the scheduler.
+
+	NOTE : Tasks run in system mode and the scheduler runs in Supervisor mode.
+	The processor MUST be in supervisor mode when vTaskStartScheduler is
+	called.  The demo applications included in the FreeRTOS.org download switch
+	to supervisor mode prior to main being called.  If you are not using one of
+	these demo application projects then ensure Supervisor mode is used here. */
+
+	vTaskStartScheduler();
+
+	/* We should never get here as control is now taken by the scheduler. */
+  	return 0;
+}
+/*-----------------------------------------------------------*/
+
+static void prvSetupHardware( void )
+{
+	portDISABLE_INTERRUPTS();
+	
+	/* When using the JTAG debugger the hardware is not always initialised to
+	the correct default state.  This line just ensures that this does not
+	cause all interrupts to be masked at the start. */
+	AT91C_BASE_AIC->AIC_EOICR = 0;
+	
+	/* Most setup is performed by the low level init function called from the
+	startup asm file. */
+
+	/* Enable the peripheral clock. */
+    AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOA;
+    AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOB;
+	AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_EMAC;
+
+	/* Initialise the LED outputs for use by the demo application tasks. */
+	vParTestInitialise();
+}
+/*-----------------------------------------------------------*/
+
+void vApplicationTickHook( void )
+{
+static unsigned portLONG ulCallCount = 0, ulErrorFound = pdFALSE;
+
+/* The rate at which LED D4 will toggle if an error has been found in one or 
+more of the standard demo tasks. */
+const unsigned portLONG ulErrorFlashRate = 500 / portTICK_RATE_MS;
+
+/* The rate at which LED D4 will toggle if no errors have been found in any
+of the standard demo tasks. */
+const unsigned portLONG ulNoErrorCheckRate = 5000 / portTICK_RATE_MS;
+
+	ulCallCount++;
+
+	if( ulErrorFound != pdFALSE )
+	{
+		/* We have already found an error, so flash the LED with the appropriate
+		frequency. */
+		if( ulCallCount > ulErrorFlashRate )
+		{
+			ulCallCount = 0;
+			vParTestToggleLED( mainERROR_LED );
+		}
+	}
+	else
+	{
+		if( ulCallCount > ulNoErrorCheckRate )
+		{
+			ulCallCount = 0;
+			
+			/* We have not yet found an error.  Check all the demo tasks to ensure
+			this is still the case. */
+			
+			if( xAreBlockingQueuesStillRunning() != pdTRUE )
+			{
+				ulErrorFound |= 0x01;
+			}
+			
+			if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )
+			{
+				ulErrorFound |= 0x02;
+			}
+	
+			if( xAreDynamicPriorityTasksStillRunning() != pdTRUE )
+			{
+				ulErrorFound |= 0x04;
+			}
+			
+			if( xAreGenericQueueTasksStillRunning() != pdTRUE )
+			{
+				ulErrorFound |= 0x08;
+			}
+			
+			if( xAreQueuePeekTasksStillRunning() != pdTRUE )
+			{
+				ulErrorFound |= 0x10;
+			}
+			
+			vParTestToggleLED( mainERROR_LED );
+		}
+	}
+}
+
+
+
+
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/EMAC_ISR.c b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/EMAC_ISR.c
new file mode 100644
index 0000000000..dc04238924
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/EMAC_ISR.c
@@ -0,0 +1,101 @@
+/*
+	FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 Richard Barry.
+
+	This file is part of the FreeRTOS.org distribution.
+
+	FreeRTOS.org 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 2 of the License, or
+	(at your option) any later version.
+
+	FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+	A special exception to the GPL can be applied should you wish to distribute
+	a combined work that includes FreeRTOS.org, without being obliged to provide
+	the source code for any proprietary components.  See the licensing section 
+	of http://www.FreeRTOS.org for full details of how and when the exception
+	can be applied.
+
+	***************************************************************************
+	See http://www.FreeRTOS.org for documentation, latest information, license 
+	and contact details.  Please ensure to read the configuration and relevant 
+	port sections of the online documentation.
+
+	Also see http://www.SafeRTOS.com a version that has been certified for use
+	in safety critical systems, plus commercial licensing, development and
+	support options.
+	***************************************************************************
+*/
+
+#include "FreeRTOS.h"
+#include "Semphr.h"
+#include "Task.h"
+
+/* Wrapper for the EMAC interrupt. */
+void vEMACISR_Wrapper( void ) __attribute__((naked));
+
+/* Handler called by the ISR wrapper.  This must be kept a separate
+function to ensure the stack frame is correctly set up. */
+void vEMACISR_Handler( void );
+
+static xSemaphoreHandle xEMACSemaphore;
+
+/*-----------------------------------------------------------*/
+
+void vPassEMACSemaphore( xSemaphoreHandle xSemaphore )
+{
+	xEMACSemaphore = xSemaphore;
+}
+/*-----------------------------------------------------------*/
+
+void vEMACISR_Handler( void )
+{
+volatile unsigned portLONG ulIntStatus, ulRxStatus;
+portBASE_TYPE xSwitchRequired = pdFALSE;
+
+	ulIntStatus = AT91C_BASE_EMAC->EMAC_ISR;
+	ulRxStatus = AT91C_BASE_EMAC->EMAC_RSR;
+
+	if( ( ulIntStatus & AT91C_EMAC_RCOMP ) || ( ulRxStatus & AT91C_EMAC_REC ) )
+	{
+		/* A frame has been received, signal the uIP task so it can process
+		the Rx descriptors. */
+		xSwitchRequired = xSemaphoreGiveFromISR( xEMACSemaphore, pdFALSE );
+		AT91C_BASE_EMAC->EMAC_RSR = AT91C_EMAC_REC;
+	}
+
+	/* Clear the interrupt. */
+	AT91C_BASE_AIC->AIC_EOICR = 0;
+	
+    /* Switch to the uIP task. */
+    if( xSwitchRequired )
+    {
+    	/* If a task of higher priority than the interrupted task was
+    	unblocked by the ISR then this call will ensure that the 
+    	unblocked task is the task the ISR returns to. */
+    	portYIELD_FROM_ISR();
+    }
+}
+/*-----------------------------------------------------------*/
+
+void vEMACISR_Wrapper( void )
+{
+	/* Save the context of the interrupted task. */
+	portSAVE_CONTEXT();
+	
+	/* Call the handler task to do the actual work.  This must be a separate
+	function to ensure the stack frame is correctly set up. */
+	vEMACISR_Handler();
+	
+	/* Restore the context of whichever task is the next to run. */
+	portRESTORE_CONTEXT();
+}
+
+
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/Makefile.webserver b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/Makefile.webserver
new file mode 100644
index 0000000000..f38c47a72d
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/Makefile.webserver
@@ -0,0 +1 @@
+APP_SOURCES += httpd.c http-strings.c httpd-fs.c httpd-cgi.c
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/SAM7_EMAC.c b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/SAM7_EMAC.c
new file mode 100644
index 0000000000..1b304fae68
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/SAM7_EMAC.c
@@ -0,0 +1,674 @@
+/*
+	FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 Richard Barry.
+
+	This file is part of the FreeRTOS.org distribution.
+
+	FreeRTOS.org 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 2 of the License, or
+	(at your option) any later version.
+
+	FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+	A special exception to the GPL can be applied should you wish to distribute
+	a combined work that includes FreeRTOS.org, without being obliged to provide
+	the source code for any proprietary components.  See the licensing section 
+	of http://www.FreeRTOS.org for full details of how and when the exception
+	can be applied.
+
+	***************************************************************************
+	See http://www.FreeRTOS.org for documentation, latest information, license 
+	and contact details.  Please ensure to read the configuration and relevant 
+	port sections of the online documentation.
+
+	Also see http://www.SafeRTOS.com a version that has been certified for use
+	in safety critical systems, plus commercial licensing, development and
+	support options.
+	***************************************************************************
+*/
+
+/* Standard includes. */
+#include <string.h>
+
+/* Scheduler includes. */
+#include "FreeRTOS.h"
+#include "semphr.h"
+#include "task.h"
+
+/* Demo application includes. */
+#include "SAM7_EMAC.h"
+
+/* uIP includes. */
+#include "uip.h"
+
+/* Hardware specific includes. */
+#include "Emac.h"
+#include "mii.h"
+#include "AT91SAM7X256.h"
+
+
+/* USE_RMII_INTERFACE must be defined as 1 to use an RMII interface, or 0
+to use an MII interface. */
+#define USE_RMII_INTERFACE 0
+
+/* The buffer addresses written into the descriptors must be aligned so the
+last few bits are zero.  These bits have special meaning for the EMAC
+peripheral and cannot be used as part of the address. */
+#define emacADDRESS_MASK			( ( unsigned portLONG ) 0xFFFFFFFC )
+
+/* Bit used within the address stored in the descriptor to mark the last
+descriptor in the array. */
+#define emacRX_WRAP_BIT				( ( unsigned portLONG ) 0x02 )
+
+/* Bit used within the Tx descriptor status to indicate whether the
+descriptor is under the control of the EMAC or the software. */
+#define emacTX_BUF_USED				( ( unsigned portLONG ) 0x80000000 )
+
+/* A short delay is used to wait for a buffer to become available, should
+one not be immediately available when trying to transmit a frame. */
+#define emacBUFFER_WAIT_DELAY		( 2 )
+#define emacMAX_WAIT_CYCLES			( configTICK_RATE_HZ / 40 )
+
+/* Misc defines. */
+#define emacINTERRUPT_LEVEL			( 5 )
+#define emacNO_DELAY				( 0 )
+#define emacTOTAL_FRAME_HEADER_SIZE	( 54 )
+#define emacPHY_INIT_DELAY			( 5000 / portTICK_RATE_MS )
+#define emacRESET_KEY				( ( unsigned portLONG ) 0xA5000000 )
+#define emacRESET_LENGTH			( ( unsigned portLONG ) ( 0x01 << 8 ) )
+
+/* The Atmel header file only defines the TX frame length mask. */
+#define emacRX_LENGTH_FRAME			( 0xfff )
+
+/* Peripheral setup for the EMAC. */
+#define emacPERIPHERAL_A_SETUP 		( ( unsigned portLONG ) AT91C_PB2_ETX0			) | \
+									( ( unsigned portLONG ) AT91C_PB12_ETXER		) | \
+									( ( unsigned portLONG ) AT91C_PB16_ECOL			) | \
+									( ( unsigned portLONG ) AT91C_PB11_ETX3			) | \
+									( ( unsigned portLONG ) AT91C_PB6_ERX1			) | \
+									( ( unsigned portLONG ) AT91C_PB15_ERXDV		) | \
+									( ( unsigned portLONG ) AT91C_PB13_ERX2			) | \
+									( ( unsigned portLONG ) AT91C_PB3_ETX1			) | \
+									( ( unsigned portLONG ) AT91C_PB8_EMDC			) | \
+									( ( unsigned portLONG ) AT91C_PB5_ERX0			) | \
+									( ( unsigned portLONG ) AT91C_PB14_ERX3			) | \
+									( ( unsigned portLONG ) AT91C_PB4_ECRS_ECRSDV	) | \
+									( ( unsigned portLONG ) AT91C_PB1_ETXEN			) | \
+									( ( unsigned portLONG ) AT91C_PB10_ETX2			) | \
+									( ( unsigned portLONG ) AT91C_PB0_ETXCK_EREFCK	) | \
+									( ( unsigned portLONG ) AT91C_PB9_EMDIO			) | \
+									( ( unsigned portLONG ) AT91C_PB7_ERXER			) | \
+									( ( unsigned portLONG ) AT91C_PB17_ERXCK		);
+
+/*-----------------------------------------------------------*/
+
+/*
+ * Prototype for the EMAC interrupt function - called by the asm wrapper.
+ */
+extern void vEMACISR_Wrapper( void ) __attribute__((naked));
+
+/*
+ * Initialise both the Tx and Rx descriptors used by the EMAC.
+ */
+static void prvSetupDescriptors(void);
+
+/*
+ * Write our MAC address into the EMAC.  The MAC address is set as one of the
+ * uip options.
+ */
+static void prvSetupMACAddress( void );
+
+/*
+ * Configure the EMAC and AIC for EMAC interrupts.
+ */
+static void prvSetupEMACInterrupt( void );
+
+/*
+ * Some initialisation functions taken from the Atmel EMAC sample code.
+ */
+static void vReadPHY( unsigned portCHAR ucPHYAddress, unsigned portCHAR ucAddress, unsigned portLONG *pulValue );
+#if USE_RMII_INTERFACE != 1
+	static void vWritePHY( unsigned portCHAR ucPHYAddress, unsigned portCHAR ucAddress, unsigned portLONG ulValue);
+#endif
+static portBASE_TYPE xGetLinkSpeed( void );
+static portBASE_TYPE prvProbePHY( void );
+
+/*-----------------------------------------------------------*/
+
+/* Buffer written to by the EMAC DMA.  Must be aligned as described by the
+comment above the emacADDRESS_MASK definition. */
+#pragma data_alignment=8
+static volatile portCHAR pcRxBuffer[ NB_RX_BUFFERS * ETH_RX_BUFFER_SIZE ];
+
+/* Buffer read by the EMAC DMA.  Must be aligned as described by he comment
+above the emacADDRESS_MASK definition. */
+#pragma data_alignment=8
+static portCHAR pcTxBuffer[ NB_TX_BUFFERS * ETH_TX_BUFFER_SIZE ];
+
+/* Descriptors used to communicate between the program and the EMAC peripheral.
+These descriptors hold the locations and state of the Rx and Tx buffers. */
+static volatile AT91S_TxTdDescriptor xTxDescriptors[ NB_TX_BUFFERS ];
+static volatile AT91S_RxTdDescriptor xRxDescriptors[ NB_RX_BUFFERS ];
+
+/* The IP and Ethernet addresses are read from the uIP setup. */
+const portCHAR cMACAddress[ 6 ] = { uipMAC_ADDR0, uipMAC_ADDR1, uipMAC_ADDR2, uipMAC_ADDR3, uipMAC_ADDR4, uipMAC_ADDR5 };
+const unsigned char ucIPAddress[ 4 ]  = { uipIP_ADDR0, uipIP_ADDR1, uipIP_ADDR2, uipIP_ADDR3 };
+
+/* The semaphore used by the EMAC ISR to wake the EMAC task. */
+static xSemaphoreHandle xSemaphore = NULL;
+
+/*-----------------------------------------------------------*/
+
+xSemaphoreHandle xEMACInit( void )
+{
+	/* Code supplied by Atmel -------------------------------*/
+
+	/* Disable pull up on RXDV => PHY normal mode (not in test mode),
+	PHY has internal pull down. */
+	AT91C_BASE_PIOB->PIO_PPUDR = 1 << 15;
+
+	#if USE_RMII_INTERFACE != 1
+	  	/* PHY has internal pull down : set MII mode. */
+	  	AT91C_BASE_PIOB->PIO_PPUDR = 1 << 16;
+	#endif
+
+	/* Clear PB18 <=> PHY powerdown. */
+   	AT91C_BASE_PIOB->PIO_PER = 1 << 18;
+	AT91C_BASE_PIOB->PIO_OER = 1 << 18;
+	AT91C_BASE_PIOB->PIO_CODR = 1 << 18;
+
+	/* After PHY power up, hardware reset. */
+	AT91C_BASE_RSTC->RSTC_RMR = emacRESET_KEY | emacRESET_LENGTH;
+	AT91C_BASE_RSTC->RSTC_RCR = emacRESET_KEY | AT91C_RSTC_EXTRST;
+
+	/* Wait for hardware reset end. */
+	while( !( AT91C_BASE_RSTC->RSTC_RSR & AT91C_RSTC_NRSTL ) )
+	{
+		__asm volatile ( "NOP" );
+	}
+    __asm volatile ( "NOP" );
+
+	/* Setup the pins. */
+	AT91C_BASE_PIOB->PIO_ASR = emacPERIPHERAL_A_SETUP;
+	AT91C_BASE_PIOB->PIO_PDR = emacPERIPHERAL_A_SETUP;
+
+	/* Enable com between EMAC PHY.
+
+	Enable management port. */
+	AT91C_BASE_EMAC->EMAC_NCR |= AT91C_EMAC_MPE;	
+
+	/* MDC = MCK/32. */
+	AT91C_BASE_EMAC->EMAC_NCFGR |= ( 2 ) << 10;	
+
+	/* Wait for PHY auto init end (rather crude delay!). */
+	vTaskDelay( emacPHY_INIT_DELAY );
+
+	/* PHY configuration. */
+	#if USE_RMII_INTERFACE != 1
+	{
+		unsigned portLONG ulControl;
+
+		/* PHY has internal pull down : disable MII isolate. */
+		vReadPHY( AT91C_PHY_ADDR, MII_BMCR, &ulControl );
+		vReadPHY( AT91C_PHY_ADDR, MII_BMCR, &ulControl );
+		ulControl &= ~BMCR_ISOLATE;
+		vWritePHY( AT91C_PHY_ADDR, MII_BMCR, ulControl );
+	}
+	#endif
+
+	/* Disable management port again. */
+	AT91C_BASE_EMAC->EMAC_NCR &= ~AT91C_EMAC_MPE;
+
+	#if USE_RMII_INTERFACE != 1
+		/* Enable EMAC in MII mode, enable clock ERXCK and ETXCK. */
+		AT91C_BASE_EMAC->EMAC_USRIO = AT91C_EMAC_CLKEN ;
+	#else
+		/* Enable EMAC in RMII mode, enable RMII clock (50MHz from oscillator
+		on ERFCK). */
+		AT91C_BASE_EMAC->EMAC_USRIO = AT91C_EMAC_RMII | AT91C_EMAC_CLKEN ;
+	#endif
+
+	/* End of code supplied by Atmel ------------------------*/
+
+	/* Setup the buffers and descriptors. */
+	prvSetupDescriptors();
+	
+	/* Load our MAC address into the EMAC. */
+	prvSetupMACAddress();
+
+	/* Are we connected? */
+	if( prvProbePHY() )
+	{
+		/* Enable the interrupt! */
+		portENTER_CRITICAL();
+		{
+			prvSetupEMACInterrupt();
+			vPassEMACSemaphore( xSemaphore );
+		}
+		portEXIT_CRITICAL();
+	}
+
+	return xSemaphore;
+}
+/*-----------------------------------------------------------*/
+
+portLONG lEMACSend( void )
+{
+static unsigned portBASE_TYPE uxTxBufferIndex = 0;
+portBASE_TYPE xWaitCycles = 0;
+portLONG lReturn = pdPASS;
+portCHAR *pcBuffer;
+
+	/* Is a buffer available? */
+	while( !( xTxDescriptors[ uxTxBufferIndex ].U_Status.status & AT91C_TRANSMIT_OK ) )
+	{
+		/* There is no room to write the Tx data to the Tx buffer.  Wait a
+		short while, then try again. */
+		xWaitCycles++;
+		if( xWaitCycles > emacMAX_WAIT_CYCLES )
+		{
+			/* Give up. */
+			lReturn = pdFAIL;
+			break;
+		}
+		else
+		{
+			vTaskDelay( emacBUFFER_WAIT_DELAY );
+		}
+	}
+
+	/* lReturn will only be pdPASS if a buffer is available. */
+	if( lReturn == pdPASS )
+	{
+		/* Copy the headers into the Tx buffer.  These will be in the uIP buffer. */
+		pcBuffer = ( portCHAR * ) xTxDescriptors[ uxTxBufferIndex ].addr;
+		memcpy( ( void * ) pcBuffer, ( void * ) uip_buf, emacTOTAL_FRAME_HEADER_SIZE );
+
+		/* If there is room, also copy in the application data if any. */
+		if( ( uip_len > emacTOTAL_FRAME_HEADER_SIZE ) && ( uip_len <= ( ETH_TX_BUFFER_SIZE - emacTOTAL_FRAME_HEADER_SIZE ) ) )
+		{
+			memcpy( ( void * ) &( pcBuffer[ emacTOTAL_FRAME_HEADER_SIZE ] ), ( void * ) uip_appdata, ( uip_len - emacTOTAL_FRAME_HEADER_SIZE ) );
+		}
+
+		/* Send. */	
+		portENTER_CRITICAL();
+		{
+			if( uxTxBufferIndex >= ( NB_TX_BUFFERS - 1 ) )
+			{
+				/* Fill out the necessary in the descriptor to get the data sent. */
+				xTxDescriptors[ uxTxBufferIndex ].U_Status.status = 	( uip_len & ( unsigned portLONG ) AT91C_LENGTH_FRAME )
+																		| AT91C_LAST_BUFFER
+																		| AT91C_TRANSMIT_WRAP;
+				uxTxBufferIndex = 0;
+			}
+			else
+			{
+				/* Fill out the necessary in the descriptor to get the data sent. */
+				xTxDescriptors[ uxTxBufferIndex ].U_Status.status = 	( uip_len & ( unsigned portLONG ) AT91C_LENGTH_FRAME )
+																		| AT91C_LAST_BUFFER;
+				uxTxBufferIndex++;
+			}
+	
+			AT91C_BASE_EMAC->EMAC_NCR |= AT91C_EMAC_TSTART;
+		}
+		portEXIT_CRITICAL();
+	}
+
+	return lReturn;
+}
+/*-----------------------------------------------------------*/
+
+unsigned portLONG ulEMACPoll( void )
+{
+static unsigned portBASE_TYPE ulNextRxBuffer = 0;
+unsigned portLONG ulSectionLength = 0, ulLengthSoFar = 0, ulEOF = pdFALSE;
+portCHAR *pcSource;
+
+	/* Skip any fragments. */
+	while( ( xRxDescriptors[ ulNextRxBuffer ].addr & AT91C_OWNERSHIP_BIT ) && !( xRxDescriptors[ ulNextRxBuffer ].U_Status.status & AT91C_SOF ) )
+	{
+		/* Mark the buffer as free again. */
+		xRxDescriptors[ ulNextRxBuffer ].addr &= ~( AT91C_OWNERSHIP_BIT );		
+		ulNextRxBuffer++;
+		if( ulNextRxBuffer >= NB_RX_BUFFERS )
+		{
+			ulNextRxBuffer = 0;
+		}
+	}
+
+	/* Is there a packet ready? */
+
+	while( ( xRxDescriptors[ ulNextRxBuffer ].addr & AT91C_OWNERSHIP_BIT ) && !ulSectionLength )
+	{
+		pcSource = ( portCHAR * )( xRxDescriptors[ ulNextRxBuffer ].addr & emacADDRESS_MASK );
+		ulSectionLength = xRxDescriptors[ ulNextRxBuffer ].U_Status.status & emacRX_LENGTH_FRAME;
+
+		if( ulSectionLength == 0 )
+		{
+			/* The frame is longer than the buffer pointed to by this
+			descriptor so copy the entire buffer to uIP - then move onto
+			the next descriptor to get the rest of the frame. */
+			if( ( ulLengthSoFar + ETH_RX_BUFFER_SIZE ) <= UIP_BUFSIZE )
+			{
+				memcpy( &( uip_buf[ ulLengthSoFar ] ), pcSource, ETH_RX_BUFFER_SIZE );
+				ulLengthSoFar += ETH_RX_BUFFER_SIZE;
+			}			
+		}
+		else
+		{
+			/* This is the last section of the frame.  Copy the section to
+			uIP. */
+			if( ulSectionLength < UIP_BUFSIZE )
+			{
+				/* The section length holds the length of the entire frame.
+				ulLengthSoFar holds the length of the frame sections already
+				copied to uIP, so the length of the final section is
+				ulSectionLength - ulLengthSoFar; */
+				if( ulSectionLength > ulLengthSoFar )
+				{
+					memcpy( &( uip_buf[ ulLengthSoFar ] ), pcSource, ( ulSectionLength - ulLengthSoFar ) );
+				}
+			}			
+
+			/* Is this the last buffer for the frame?  If not why? */
+			ulEOF = xRxDescriptors[ ulNextRxBuffer ].U_Status.status & AT91C_EOF;
+		}
+
+		/* Mark the buffer as free again. */
+		xRxDescriptors[ ulNextRxBuffer ].addr &= ~( AT91C_OWNERSHIP_BIT );
+
+		/* Increment to the next buffer, wrapping if necessary. */
+		ulNextRxBuffer++;
+		if( ulNextRxBuffer >= NB_RX_BUFFERS )
+		{
+			ulNextRxBuffer = 0;
+		}
+	}
+
+	/* If we obtained data but for some reason did not find the end of the
+	frame then discard the data as it must contain an error. */
+	if( !ulEOF )
+	{
+		ulSectionLength = 0;
+	}
+
+	return ulSectionLength;
+}
+/*-----------------------------------------------------------*/
+
+static void prvSetupDescriptors(void)
+{
+unsigned portBASE_TYPE xIndex;
+unsigned portLONG ulAddress;
+
+	/* Initialise xRxDescriptors descriptor. */
+	for( xIndex = 0; xIndex < NB_RX_BUFFERS; ++xIndex )
+	{
+		/* Calculate the address of the nth buffer within the array. */
+		ulAddress = ( unsigned portLONG )( pcRxBuffer + ( xIndex * ETH_RX_BUFFER_SIZE ) );
+
+		/* Write the buffer address into the descriptor.  The DMA will place
+		the data at this address when this descriptor is being used.  Mask off
+		the bottom bits of the address as these have special meaning. */
+		xRxDescriptors[ xIndex ].addr = ulAddress & emacADDRESS_MASK;
+	}	
+
+	/* The last buffer has the wrap bit set so the EMAC knows to wrap back
+	to the first buffer. */
+	xRxDescriptors[ NB_RX_BUFFERS - 1 ].addr |= emacRX_WRAP_BIT;
+
+	/* Initialise xTxDescriptors. */
+	for( xIndex = 0; xIndex < NB_TX_BUFFERS; ++xIndex )
+	{
+		/* Calculate the address of the nth buffer within the array. */
+		ulAddress = ( unsigned portLONG )( pcTxBuffer + ( xIndex * ETH_TX_BUFFER_SIZE ) );
+
+		/* Write the buffer address into the descriptor.  The DMA will read
+		data from here when the descriptor is being used. */
+		xTxDescriptors[ xIndex ].addr = ulAddress & emacADDRESS_MASK;
+		xTxDescriptors[ xIndex ].U_Status.status = AT91C_TRANSMIT_OK;
+	}	
+
+	/* The last buffer has the wrap bit set so the EMAC knows to wrap back
+	to the first buffer. */
+	xTxDescriptors[ NB_TX_BUFFERS - 1 ].U_Status.status = AT91C_TRANSMIT_WRAP | AT91C_TRANSMIT_OK;
+
+	/* Tell the EMAC where to find the descriptors. */
+	AT91C_BASE_EMAC->EMAC_RBQP = ( unsigned portLONG ) xRxDescriptors;
+	AT91C_BASE_EMAC->EMAC_TBQP = ( unsigned portLONG ) xTxDescriptors;
+	
+	/* Clear all the bits in the receive status register. */
+	AT91C_BASE_EMAC->EMAC_RSR = ( AT91C_EMAC_OVR | AT91C_EMAC_REC | AT91C_EMAC_BNA );
+
+	/* Enable the copy of data into the buffers, ignore broadcasts,
+	and don't copy FCS. */
+	AT91C_BASE_EMAC->EMAC_NCFGR |= ( AT91C_EMAC_CAF | AT91C_EMAC_NBC | AT91C_EMAC_DRFCS);
+
+	/* Enable Rx and Tx, plus the stats register. */
+	AT91C_BASE_EMAC->EMAC_NCR |= ( AT91C_EMAC_TE | AT91C_EMAC_RE | AT91C_EMAC_WESTAT );
+}	
+/*-----------------------------------------------------------*/
+
+static void prvSetupMACAddress( void )
+{
+	/* Must be written SA1L then SA1H. */
+	AT91C_BASE_EMAC->EMAC_SA1L =	( ( unsigned portLONG ) cMACAddress[ 3 ] << 24 ) |
+									( ( unsigned portLONG ) cMACAddress[ 2 ] << 16 ) |
+									( ( unsigned portLONG ) cMACAddress[ 1 ] << 8  ) |
+									cMACAddress[ 0 ];
+
+	AT91C_BASE_EMAC->EMAC_SA1H =	( ( unsigned portLONG ) cMACAddress[ 5 ] << 8 ) |
+									cMACAddress[ 4 ];
+}
+/*-----------------------------------------------------------*/
+
+static void prvSetupEMACInterrupt( void )
+{
+	/* Create the semaphore used to trigger the EMAC task. */
+	vSemaphoreCreateBinary( xSemaphore );
+	if( xSemaphore )
+	{
+		/* We start by 'taking' the semaphore so the ISR can 'give' it when the
+		first interrupt occurs. */
+		xSemaphoreTake( xSemaphore, emacNO_DELAY );
+		portENTER_CRITICAL();
+		{
+			/* We want to interrupt on Rx events. */
+			AT91C_BASE_EMAC->EMAC_IER = AT91C_EMAC_RCOMP;
+
+			/* Enable the interrupts in the AIC. */
+			AT91F_AIC_ConfigureIt( AT91C_ID_EMAC, emacINTERRUPT_LEVEL, AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, ( void (*)( void ) ) vEMACISR_Wrapper );
+			AT91C_BASE_AIC->AIC_IECR = 0x1 << AT91C_ID_EMAC;
+		}
+		portEXIT_CRITICAL();
+	}
+}
+/*-----------------------------------------------------------*/
+
+
+
+
+/*
+ * The following functions are initialisation functions taken from the Atmel
+ * EMAC sample code.
+ */
+
+static portBASE_TYPE prvProbePHY( void )
+{
+unsigned portLONG ulPHYId1, ulPHYId2, ulStatus;
+portBASE_TYPE xReturn = pdPASS;
+	
+	/* Code supplied by Atmel (reformatted) -----------------*/
+
+	/* Enable management port */
+	AT91C_BASE_EMAC->EMAC_NCR |= AT91C_EMAC_MPE;	
+	AT91C_BASE_EMAC->EMAC_NCFGR |= ( 2 ) << 10;
+
+	/* Read the PHY ID. */
+	vReadPHY( AT91C_PHY_ADDR, MII_PHYSID1, &ulPHYId1 );
+	vReadPHY( AT91C_PHY_ADDR, MII_PHYSID2, &ulPHYId2 );
+
+	/* AMD AM79C875:
+			PHY_ID1 = 0x0022
+			PHY_ID2 = 0x5541
+			Bits 3:0 Revision Number Four bit manufacturer�s revision number.
+				0001 stands for Rev. A, etc.
+	*/
+	if( ( ( ulPHYId1 << 16 ) | ( ulPHYId2 & 0xfff0 ) ) != MII_DM9161_ID )
+	{
+		/* Did not expect this ID. */
+		xReturn = pdFAIL;
+	}
+	else
+	{
+		ulStatus = xGetLinkSpeed();
+
+		if( ulStatus != pdPASS )
+		{
+			xReturn = pdFAIL;
+		}
+	}
+
+	/* Disable management port */
+	AT91C_BASE_EMAC->EMAC_NCR &= ~AT91C_EMAC_MPE;	
+
+	/* End of code supplied by Atmel ------------------------*/
+
+	return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+static void vReadPHY( unsigned portCHAR ucPHYAddress, unsigned portCHAR ucAddress, unsigned portLONG *pulValue )
+{
+	/* Code supplied by Atmel (reformatted) ----------------------*/
+
+	AT91C_BASE_EMAC->EMAC_MAN = 	(AT91C_EMAC_SOF & (0x01<<30))
+									| (2 << 16) | (2 << 28)
+									| ((ucPHYAddress & 0x1f) << 23)
+									| (ucAddress << 18);
+
+	/* Wait until IDLE bit in Network Status register is cleared. */
+	while( !( AT91C_BASE_EMAC->EMAC_NSR & AT91C_EMAC_IDLE ) )
+	{
+		__asm( "NOP" );
+	}
+
+	*pulValue = ( AT91C_BASE_EMAC->EMAC_MAN & 0x0000ffff );	
+
+	/* End of code supplied by Atmel ------------------------*/
+}
+/*-----------------------------------------------------------*/
+
+#if USE_RMII_INTERFACE != 1
+static void vWritePHY( unsigned portCHAR ucPHYAddress, unsigned portCHAR ucAddress, unsigned portLONG ulValue )
+{
+	/* Code supplied by Atmel (reformatted) ----------------------*/
+
+	AT91C_BASE_EMAC->EMAC_MAN = (( AT91C_EMAC_SOF & (0x01<<30))
+								| (2 << 16) | (1 << 28)
+								| ((ucPHYAddress & 0x1f) << 23)
+								| (ucAddress << 18))
+								| (ulValue & 0xffff);
+
+	/* Wait until IDLE bit in Network Status register is cleared */
+	while( !( AT91C_BASE_EMAC->EMAC_NSR & AT91C_EMAC_IDLE ) )
+	{
+		__asm( "NOP" );
+	};
+
+	/* End of code supplied by Atmel ------------------------*/
+}
+#endif
+/*-----------------------------------------------------------*/
+
+static portBASE_TYPE xGetLinkSpeed( void )
+{
+	unsigned portLONG ulBMSR, ulBMCR, ulLPA, ulMACCfg, ulSpeed, ulDuplex;
+
+	/* Code supplied by Atmel (reformatted) -----------------*/
+
+	/* Link status is latched, so read twice to get current value */
+	vReadPHY(AT91C_PHY_ADDR, MII_BMSR, &ulBMSR);
+	vReadPHY(AT91C_PHY_ADDR, MII_BMSR, &ulBMSR);
+
+	if( !( ulBMSR & BMSR_LSTATUS ) )
+	{	
+		/* No Link. */
+		return pdFAIL;
+	}
+
+	vReadPHY(AT91C_PHY_ADDR, MII_BMCR, &ulBMCR);
+	if (ulBMCR & BMCR_ANENABLE)
+	{				
+		/* AutoNegotiation is enabled. */
+		if (!(ulBMSR & BMSR_ANEGCOMPLETE))
+		{
+			/* Auto-negotiation in progress. */
+			return pdFAIL;				
+		}		
+
+		vReadPHY(AT91C_PHY_ADDR, MII_LPA, &ulLPA);
+		if( ( ulLPA & LPA_100FULL ) || ( ulLPA & LPA_100HALF ) )
+		{
+			ulSpeed = SPEED_100;
+		}
+		else
+		{
+			ulSpeed = SPEED_10;
+		}
+
+		if( ( ulLPA & LPA_100FULL ) || ( ulLPA & LPA_10FULL ) )
+		{
+			ulDuplex = DUPLEX_FULL;
+		}
+		else
+		{
+			ulDuplex = DUPLEX_HALF;
+		}
+	}
+	else
+	{
+		ulSpeed = ( ulBMCR & BMCR_SPEED100 ) ? SPEED_100 : SPEED_10;
+		ulDuplex = ( ulBMCR & BMCR_FULLDPLX ) ? DUPLEX_FULL : DUPLEX_HALF;
+	}
+
+	/* Update the MAC */
+	ulMACCfg = AT91C_BASE_EMAC->EMAC_NCFGR & ~( AT91C_EMAC_SPD | AT91C_EMAC_FD );
+	if( ulSpeed == SPEED_100 )
+	{
+		if( ulDuplex == DUPLEX_FULL )
+		{
+			/* 100 Full Duplex */
+			AT91C_BASE_EMAC->EMAC_NCFGR = ulMACCfg | AT91C_EMAC_SPD | AT91C_EMAC_FD;
+		}
+		else
+		{					
+			/* 100 Half Duplex */
+			AT91C_BASE_EMAC->EMAC_NCFGR = ulMACCfg | AT91C_EMAC_SPD;
+		}
+	}
+	else
+	{
+		if (ulDuplex == DUPLEX_FULL)
+		{
+			/* 10 Full Duplex */
+			AT91C_BASE_EMAC->EMAC_NCFGR = ulMACCfg | AT91C_EMAC_FD;
+		}
+		else
+		{
+			/* 10 Half Duplex */
+			AT91C_BASE_EMAC->EMAC_NCFGR = ulMACCfg;
+		}
+	}
+
+	/* End of code supplied by Atmel ------------------------*/
+
+	return pdPASS;
+}
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/SAM7_EMAC.h b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/SAM7_EMAC.h
new file mode 100644
index 0000000000..3231488a45
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/SAM7_EMAC.h
@@ -0,0 +1,60 @@
+/*
+	FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 Richard Barry.
+
+	This file is part of the FreeRTOS.org distribution.
+
+	FreeRTOS.org 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 2 of the License, or
+	(at your option) any later version.
+
+	FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+	A special exception to the GPL can be applied should you wish to distribute
+	a combined work that includes FreeRTOS.org, without being obliged to provide
+	the source code for any proprietary components.  See the licensing section 
+	of http://www.FreeRTOS.org for full details of how and when the exception
+	can be applied.
+
+	***************************************************************************
+	See http://www.FreeRTOS.org for documentation, latest information, license 
+	and contact details.  Please ensure to read the configuration and relevant 
+	port sections of the online documentation.
+
+	Also see http://www.SafeRTOS.com a version that has been certified for use
+	in safety critical systems, plus commercial licensing, development and
+	support options.
+	***************************************************************************
+*/
+
+#ifndef SAM_7_EMAC_H
+#define SAM_7_EMAC_H
+
+
+/*
+ * Initialise the EMAC driver.  If successful a semaphore is returned that
+ * is used by the EMAC ISR to indicate that Rx packets have been received.
+ * If the initialisation fails then NULL is returned.
+ */
+xSemaphoreHandle xEMACInit( void );
+
+/*
+ * Send the current uIP buffer.  This copies the uIP buffer to one of the
+ * EMAC Tx buffers, then indicates to the EMAC that the buffer is ready.
+ */
+portLONG lEMACSend( void );
+
+/*
+ * Called in response to an EMAC Rx interrupt.  Copies the received frame
+ * into the uIP buffer.
+ */
+unsigned portLONG ulEMACPoll( void );
+
+#endif
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/clock-arch.h b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/clock-arch.h
new file mode 100644
index 0000000000..cde657b623
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/clock-arch.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2006, Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Institute nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * This file is part of the uIP TCP/IP stack
+ *
+ * $Id: clock-arch.h,v 1.2 2006/06/12 08:00:31 adam Exp $
+ */
+
+#ifndef __CLOCK_ARCH_H__
+#define __CLOCK_ARCH_H__
+
+#include "FreeRTOS.h"
+
+typedef unsigned long clock_time_t;
+#define CLOCK_CONF_SECOND configTICK_RATE_HZ
+
+#endif /* __CLOCK_ARCH_H__ */
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/emac_atmel.h b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/emac_atmel.h
new file mode 100644
index 0000000000..7551a36485
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/emac_atmel.h
@@ -0,0 +1,195 @@
+//*----------------------------------------------------------------------------
+//*         ATMEL Microcontroller Software Support  -  ROUSSET  -
+//*----------------------------------------------------------------------------
+//* The software is delivered "AS IS" without warranty or condition of any
+//* kind, either express, implied or statutory. This includes without
+//* limitation any warranty or condition with respect to merchantability or
+//* fitness for any particular purpose, or against the infringements of
+//* intellectual property rights of others.
+//*----------------------------------------------------------------------------
+//* File Name           : Emac.h
+//* Object              : Emac header file
+//* Creation            : Hi   11/18/2002
+//*
+//*----------------------------------------------------------------------------
+#ifndef AT91C_EMAC_H
+#define AT91C_EMAC_H
+
+
+//* Allows to display all IP header in the main.c
+//* If not defined, only ICMP packets are displayed
+#define AT91C_DISPLAY_ALL_IPHEADER		0
+
+#define NB_RX_BUFFERS			25			//* Number of receive buffers
+#define ETH_RX_BUFFER_SIZE		128         //*
+
+#define NB_TX_BUFFERS			2		//* Number of Transmit buffers
+#define ETH_TX_BUFFER_SIZE		UIP_BUFSIZE       //*
+
+#define AT91C_NO_IPPACKET		0
+#define AT91C_IPPACKET	        1
+
+#define ARP_REQUEST				0x0001
+#define ARP_REPLY				0x0002
+#define PROT_ARP				0x0806
+#define PROT_IP					0x0800
+#define PROT_ICMP				0x01
+#define ICMP_ECHO_REQUEST		0x08
+#define ICMP_ECHO_REPLY			0x00
+
+#define AT91C_EMAC_CLKEN 0x2
+#define SWAP16(x)	(((x & 0xff) << 8) | (x >> 8))
+
+#if 0
+//* Transfer descriptor structure
+typedef struct _AT91S_TdDescriptor {
+	unsigned int addr;
+	unsigned int status;
+}AT91S_TdDescriptor, *AT91PS_TdDescriptor;
+#endif
+
+//* Receive Transfer descriptor structure
+typedef struct  _AT91S_RxTdDescriptor {
+	unsigned int addr;
+	union
+	{
+		unsigned int status;
+		struct {
+			unsigned int Length:11;
+			unsigned int Res0:1;
+			unsigned int Rxbuf_off:2;
+			unsigned int StartOfFrame:1;
+			unsigned int EndOfFrame:1;
+			unsigned int Cfi:1;
+			unsigned int VlanPriority:3;
+			unsigned int PriorityTag:1;
+			unsigned int VlanTag:1;
+			unsigned int TypeID:1;
+			unsigned int Sa4Match:1;
+			unsigned int Sa3Match:1;
+			unsigned int Sa2Match:1;
+			unsigned int Sa1Match:1;
+			unsigned int Res1:1;
+			unsigned int ExternalAdd:1;
+			unsigned int UniCast:1;
+			unsigned int MultiCast:1;
+			unsigned int BroadCast:1;
+		}S_Status;		
+	}U_Status;
+}AT91S_RxTdDescriptor, *AT91PS_RxTdDescriptor;
+
+
+//* Transmit Transfer descriptor structure
+typedef struct _AT91S_TxTdDescriptor {
+	unsigned int addr;
+	union
+	{
+		unsigned int status;
+		struct {
+			unsigned int Length:11;
+			unsigned int Res0:4;
+			unsigned int LastBuff:1;
+			unsigned int NoCrc:1;
+			unsigned int Res1:10;
+			unsigned int BufExhausted:1;
+			unsigned int TransmitUnderrun:1;
+			unsigned int TransmitError:1;
+			unsigned int Wrap:1;
+			unsigned int BuffUsed:1;
+		}S_Status;		
+	}U_Status;
+}AT91S_TxTdDescriptor, *AT91PS_TxTdDescriptor;
+
+#define AT91C_OWNERSHIP_BIT		0x00000001
+
+/* Receive status defintion */
+#define AT91C_BROADCAST_ADDR	((unsigned int) (1 << 31))	//* Broadcat address detected
+#define AT91C_MULTICAST_HASH 	((unsigned int) (1 << 30))	//* MultiCast hash match
+#define AT91C_UNICAST_HASH 	    ((unsigned int) (1 << 29))	//* UniCast hash match
+#define AT91C_EXTERNAL_ADDR	    ((unsigned int) (1 << 28))	//* External Address match
+#define AT91C_SA1_ADDR	    	((unsigned int) (1 << 26))	//* Specific address 1 match
+#define AT91C_SA2_ADDR	    	((unsigned int) (1 << 25))	//* Specific address 2 match
+#define AT91C_SA3_ADDR	    	((unsigned int) (1 << 24))	//* Specific address 3 match
+#define AT91C_SA4_ADDR	    	((unsigned int) (1 << 23))	//* Specific address 4 match
+#define AT91C_TYPE_ID	    	((unsigned int) (1 << 22))	//* Type ID match
+#define AT91C_VLAN_TAG	    	((unsigned int) (1 << 21))	//* VLAN tag detected
+#define AT91C_PRIORITY_TAG    	((unsigned int) (1 << 20))	//* PRIORITY tag detected
+#define AT91C_VLAN_PRIORITY    	((unsigned int) (7 << 17))  //* PRIORITY Mask
+#define AT91C_CFI_IND        	((unsigned int) (1 << 16))  //* CFI indicator
+#define AT91C_EOF           	((unsigned int) (1 << 15))  //* EOF
+#define AT91C_SOF           	((unsigned int) (1 << 14))  //* SOF
+#define AT91C_RBF_OFFSET     	((unsigned int) (3 << 12))  //* Receive Buffer Offset Mask
+#define AT91C_LENGTH_FRAME     	((unsigned int) 0x07FF)     //* Length of frame
+
+/* Transmit Status definition */
+#define AT91C_TRANSMIT_OK		((unsigned int) (1 << 31))	//*
+#define AT91C_TRANSMIT_WRAP		((unsigned int) (1 << 30))	//* Wrap bit: mark the last descriptor
+#define AT91C_TRANSMIT_ERR		((unsigned int) (1 << 29))	//* RLE:transmit error
+#define AT91C_TRANSMIT_UND		((unsigned int) (1 << 28))	//* Transmit Underrun
+#define AT91C_BUF_EX     		((unsigned int) (1 << 27))	//* Buffers exhausted in mid frame
+#define AT91C_TRANSMIT_NO_CRC	((unsigned int) (1 << 16))	//* No CRC will be appended to the current frame
+#define AT91C_LAST_BUFFER    	((unsigned int) (1 << 15))	//*
+
+#define ARP_ETHER	 		1		/* Ethernet  hardware address	*/
+#define ARPOP_REQUEST    	1		/* Request  to resolve  address	*/
+#define ARPOP_REPLY	    	2		/* Response to previous request	*/
+#define RARPOP_REQUEST   	3		/* Request  to resolve  address	*/
+#define RARPOP_REPLY	    4		/* Response to previous request */
+
+
+typedef struct _AT91S_EthHdr
+{
+	unsigned char		et_dest[6];	/* Destination node		*/
+	unsigned char		et_src[6];	/* Source node			*/
+	unsigned short		et_protlen;	/* Protocol or length		*/
+} AT91S_EthHdr, *AT91PS_EthHdr;
+
+typedef struct _AT91S_ArpHdr
+{
+	unsigned short		ar_hrd;		/* Format of hardware address	*/
+	unsigned short		ar_pro;		/* Format of protocol address	*/
+	unsigned char		ar_hln;		/* Length of hardware address	*/
+	unsigned char		ar_pln;		/* Length of protocol address	*/
+	unsigned short		ar_op;		/* Operation			*/
+	unsigned char		ar_sha[6];	/* Sender hardware address	*/
+	unsigned char		ar_spa[4];	/* Sender protocol address	*/
+	unsigned char		ar_tha[6];	/* Target hardware address	*/
+	unsigned char		ar_tpa[4];	/* Target protocol address	*/
+} AT91S_ArpHdr, *AT91PS_ArpHdr;
+
+//* IP Header structure
+typedef struct _AT91S_IPheader {
+	unsigned char	ip_hl_v;	/* header length and version	*/
+	unsigned char	ip_tos;		/* type of service		*/
+	unsigned short	ip_len;		/* total length			*/
+	unsigned short	ip_id;		/* identification		*/
+	unsigned short	ip_off;		/* fragment offset field	*/
+	unsigned char	ip_ttl;		/* time to live			*/
+	unsigned char	ip_p;		/* protocol			*/
+	unsigned short	ip_sum;		/* checksum			*/
+	unsigned char	ip_src[4];	/* Source IP address		*/
+	unsigned char	ip_dst[4];	/* Destination IP address	*/
+	unsigned short	udp_src;	/* UDP source port		*/
+	unsigned short	udp_dst;	/* UDP destination port		*/
+	unsigned short	udp_len;	/* Length of UDP packet		*/
+	unsigned short	udp_xsum;	/* Checksum			*/
+} AT91S_IPheader, *AT91PS_IPheader;
+
+//* ICMP echo header structure
+typedef struct _AT91S_IcmpEchoHdr {
+    unsigned char   type;       /* type of message */
+    unsigned char   code;       /* type subcode */
+    unsigned short  cksum;      /* ones complement cksum of struct */
+    unsigned short  id;         /* identifier */
+    unsigned short  seq;        /* sequence number */
+}AT91S_IcmpEchoHdr, *AT91PS_IcmpEchoHdr;
+
+
+typedef struct _AT91S_EthPack
+{
+	AT91S_EthHdr	EthHdr;
+	AT91S_ArpHdr	ArpHdr;
+} AT91S_EthPack, *AT91PS_EthPack;
+
+
+#endif //* AT91C_EMAC_H
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/http-strings b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/http-strings
new file mode 100644
index 0000000000..0d3c30cdd9
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/http-strings
@@ -0,0 +1,35 @@
+http_http "http://"
+http_200 "200 "
+http_301 "301 "
+http_302 "302 "
+http_get "GET "
+http_10 "HTTP/1.0"
+http_11 "HTTP/1.1"
+http_content_type "content-type: "
+http_texthtml "text/html"
+http_location "location: "
+http_host "host: "
+http_crnl "\r\n"
+http_index_html "/index.html"
+http_404_html "/404.html"
+http_referer "Referer:"
+http_header_200 "HTTP/1.0 200 OK\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n"
+http_header_404 "HTTP/1.0 404 Not found\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n"
+http_content_type_plain "Content-type: text/plain\r\n\r\n"
+http_content_type_html "Content-type: text/html\r\n\r\n"
+http_content_type_css  "Content-type: text/css\r\n\r\n"
+http_content_type_text "Content-type: text/text\r\n\r\n"
+http_content_type_png  "Content-type: image/png\r\n\r\n"
+http_content_type_gif  "Content-type: image/gif\r\n\r\n"
+http_content_type_jpg  "Content-type: image/jpeg\r\n\r\n"
+http_content_type_binary "Content-type: application/octet-stream\r\n\r\n"
+http_html ".html"
+http_shtml ".shtml"
+http_htm ".htm"
+http_css ".css"
+http_png ".png"
+http_gif ".gif"
+http_jpg ".jpg"
+http_text ".txt"
+http_txt ".txt"
+
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/http-strings.c b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/http-strings.c
new file mode 100644
index 0000000000..ef7a41c7dc
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/http-strings.c
@@ -0,0 +1,102 @@
+const char http_http[8] = 
+/* "http://" */
+{0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, };
+const char http_200[5] = 
+/* "200 " */
+{0x32, 0x30, 0x30, 0x20, };
+const char http_301[5] = 
+/* "301 " */
+{0x33, 0x30, 0x31, 0x20, };
+const char http_302[5] = 
+/* "302 " */
+{0x33, 0x30, 0x32, 0x20, };
+const char http_get[5] = 
+/* "GET " */
+{0x47, 0x45, 0x54, 0x20, };
+const char http_10[9] = 
+/* "HTTP/1.0" */
+{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, };
+const char http_11[9] = 
+/* "HTTP/1.1" */
+{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, };
+const char http_content_type[15] = 
+/* "content-type: " */
+{0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, };
+const char http_texthtml[10] = 
+/* "text/html" */
+{0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, };
+const char http_location[11] = 
+/* "location: " */
+{0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, };
+const char http_host[7] = 
+/* "host: " */
+{0x68, 0x6f, 0x73, 0x74, 0x3a, 0x20, };
+const char http_crnl[3] = 
+/* "\r\n" */
+{0xd, 0xa, };
+const char http_index_html[12] = 
+/* "/index.html" */
+{0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, };
+const char http_404_html[10] = 
+/* "/404.html" */
+{0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, };
+const char http_referer[9] = 
+/* "Referer:" */
+{0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x72, 0x3a, };
+const char http_header_200[84] = 
+/* "HTTP/1.0 200 OK\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" */
+{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x32, 0x30, 0x30, 0x20, 0x4f, 0x4b, 0xd, 0xa, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x20, 0x75, 0x49, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x2f, 0x7e, 0x61, 0x64, 0x61, 0x6d, 0x2f, 0x75, 0x69, 0x70, 0x2f, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0xd, 0xa, };
+const char http_header_404[91] = 
+/* "HTTP/1.0 404 Not found\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" */
+{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x34, 0x30, 0x34, 0x20, 0x4e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0xd, 0xa, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x20, 0x75, 0x49, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x2f, 0x7e, 0x61, 0x64, 0x61, 0x6d, 0x2f, 0x75, 0x69, 0x70, 0x2f, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0xd, 0xa, };
+const char http_content_type_plain[29] = 
+/* "Content-type: text/plain\r\n\r\n" */
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0xd, 0xa, 0xd, 0xa, };
+const char http_content_type_html[28] = 
+/* "Content-type: text/html\r\n\r\n" */
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0xd, 0xa, 0xd, 0xa, };
+const char http_content_type_css [27] = 
+/* "Content-type: text/css\r\n\r\n" */
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0xd, 0xa, 0xd, 0xa, };
+const char http_content_type_text[28] = 
+/* "Content-type: text/text\r\n\r\n" */
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x74, 0x65, 0x78, 0x74, 0xd, 0xa, 0xd, 0xa, };
+const char http_content_type_png [28] = 
+/* "Content-type: image/png\r\n\r\n" */
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x70, 0x6e, 0x67, 0xd, 0xa, 0xd, 0xa, };
+const char http_content_type_gif [28] = 
+/* "Content-type: image/gif\r\n\r\n" */
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x67, 0x69, 0x66, 0xd, 0xa, 0xd, 0xa, };
+const char http_content_type_jpg [29] = 
+/* "Content-type: image/jpeg\r\n\r\n" */
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x6a, 0x70, 0x65, 0x67, 0xd, 0xa, 0xd, 0xa, };
+const char http_content_type_binary[43] = 
+/* "Content-type: application/octet-stream\r\n\r\n" */
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x2d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xd, 0xa, 0xd, 0xa, };
+const char http_html[6] = 
+/* ".html" */
+{0x2e, 0x68, 0x74, 0x6d, 0x6c, };
+const char http_shtml[7] = 
+/* ".shtml" */
+{0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, };
+const char http_htm[5] = 
+/* ".htm" */
+{0x2e, 0x68, 0x74, 0x6d, };
+const char http_css[5] = 
+/* ".css" */
+{0x2e, 0x63, 0x73, 0x73, };
+const char http_png[5] = 
+/* ".png" */
+{0x2e, 0x70, 0x6e, 0x67, };
+const char http_gif[5] = 
+/* ".gif" */
+{0x2e, 0x67, 0x69, 0x66, };
+const char http_jpg[5] = 
+/* ".jpg" */
+{0x2e, 0x6a, 0x70, 0x67, };
+const char http_text[5] = 
+/* ".txt" */
+{0x2e, 0x74, 0x78, 0x74, };
+const char http_txt[5] = 
+/* ".txt" */
+{0x2e, 0x74, 0x78, 0x74, };
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/http-strings.h b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/http-strings.h
new file mode 100644
index 0000000000..acbe7e17f7
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/http-strings.h
@@ -0,0 +1,34 @@
+extern const char http_http[8];
+extern const char http_200[5];
+extern const char http_301[5];
+extern const char http_302[5];
+extern const char http_get[5];
+extern const char http_10[9];
+extern const char http_11[9];
+extern const char http_content_type[15];
+extern const char http_texthtml[10];
+extern const char http_location[11];
+extern const char http_host[7];
+extern const char http_crnl[3];
+extern const char http_index_html[12];
+extern const char http_404_html[10];
+extern const char http_referer[9];
+extern const char http_header_200[84];
+extern const char http_header_404[91];
+extern const char http_content_type_plain[29];
+extern const char http_content_type_html[28];
+extern const char http_content_type_css [27];
+extern const char http_content_type_text[28];
+extern const char http_content_type_png [28];
+extern const char http_content_type_gif [28];
+extern const char http_content_type_jpg [29];
+extern const char http_content_type_binary[43];
+extern const char http_html[6];
+extern const char http_shtml[7];
+extern const char http_htm[5];
+extern const char http_css[5];
+extern const char http_png[5];
+extern const char http_gif[5];
+extern const char http_jpg[5];
+extern const char http_text[5];
+extern const char http_txt[5];
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-cgi.c b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-cgi.c
new file mode 100644
index 0000000000..43b7afba25
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-cgi.c
@@ -0,0 +1,268 @@
+/**
+ * \addtogroup httpd
+ * @{
+ */
+
+/**
+ * \file
+ *         Web server script interface
+ * \author
+ *         Adam Dunkels <adam@sics.se>
+ *
+ */
+
+/*
+ * Copyright (c) 2001-2006, Adam Dunkels.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ *    products derived from this software without specific prior
+ *    written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This file is part of the uIP TCP/IP stack.
+ *
+ * $Id: httpd-cgi.c,v 1.2 2006/06/11 21:46:37 adam Exp $
+ *
+ */
+
+#include "uip.h"
+#include "psock.h"
+#include "httpd.h"
+#include "httpd-cgi.h"
+#include "httpd-fs.h"
+
+#include <stdio.h>
+#include <string.h>
+
+HTTPD_CGI_CALL(file, "file-stats", file_stats);
+HTTPD_CGI_CALL(tcp, "tcp-connections", tcp_stats);
+HTTPD_CGI_CALL(net, "net-stats", net_stats);
+HTTPD_CGI_CALL(rtos, "rtos-stats", rtos_stats );
+HTTPD_CGI_CALL(io, "led-io", led_io );
+
+
+static const struct httpd_cgi_call *calls[] = { &file, &tcp, &net, &rtos, &io, NULL };
+
+/*---------------------------------------------------------------------------*/
+static
+PT_THREAD(nullfunction(struct httpd_state *s, char *ptr))
+{
+  PSOCK_BEGIN(&s->sout);
+  PSOCK_END(&s->sout);
+}
+/*---------------------------------------------------------------------------*/
+httpd_cgifunction
+httpd_cgi(char *name)
+{
+  const struct httpd_cgi_call **f;
+
+  /* Find the matching name in the table, return the function. */
+  for(f = calls; *f != NULL; ++f) {
+    if(strncmp((*f)->name, name, strlen((*f)->name)) == 0) {
+      return (*f)->function;
+    }
+  }
+  return nullfunction;
+}
+/*---------------------------------------------------------------------------*/
+static unsigned short
+generate_file_stats(void *arg)
+{
+  char *f = (char *)arg;
+  return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE, "%5u", httpd_fs_count(f));
+}
+/*---------------------------------------------------------------------------*/
+static
+PT_THREAD(file_stats(struct httpd_state *s, char *ptr))
+{
+  PSOCK_BEGIN(&s->sout);
+
+  PSOCK_GENERATOR_SEND(&s->sout, generate_file_stats, strchr(ptr, ' ') + 1);
+  
+  PSOCK_END(&s->sout);
+}
+/*---------------------------------------------------------------------------*/
+static const char closed[] =   /*  "CLOSED",*/
+{0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0};
+static const char syn_rcvd[] = /*  "SYN-RCVD",*/
+{0x53, 0x59, 0x4e, 0x2d, 0x52, 0x43, 0x56,
+ 0x44,  0};
+static const char syn_sent[] = /*  "SYN-SENT",*/
+{0x53, 0x59, 0x4e, 0x2d, 0x53, 0x45, 0x4e,
+ 0x54,  0};
+static const char established[] = /*  "ESTABLISHED",*/
+{0x45, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x49, 0x53, 0x48,
+ 0x45, 0x44, 0};
+static const char fin_wait_1[] = /*  "FIN-WAIT-1",*/
+{0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49,
+ 0x54, 0x2d, 0x31, 0};
+static const char fin_wait_2[] = /*  "FIN-WAIT-2",*/
+{0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49,
+ 0x54, 0x2d, 0x32, 0};
+static const char closing[] = /*  "CLOSING",*/
+{0x43, 0x4c, 0x4f, 0x53, 0x49,
+ 0x4e, 0x47, 0};
+static const char time_wait[] = /*  "TIME-WAIT,"*/
+{0x54, 0x49, 0x4d, 0x45, 0x2d, 0x57, 0x41,
+ 0x49, 0x54, 0};
+static const char last_ack[] = /*  "LAST-ACK"*/
+{0x4c, 0x41, 0x53, 0x54, 0x2d, 0x41, 0x43,
+ 0x4b, 0};
+
+static const char *states[] = {
+  closed,
+  syn_rcvd,
+  syn_sent,
+  established,
+  fin_wait_1,
+  fin_wait_2,
+  closing,
+  time_wait,
+  last_ack};
+  
+
+static unsigned short
+generate_tcp_stats(void *arg)
+{
+  struct uip_conn *conn;
+  struct httpd_state *s = (struct httpd_state *)arg;
+    
+  conn = &uip_conns[s->count];
+  return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE,
+		 "<tr><td>%d</td><td>%u.%u.%u.%u:%u</td><td>%s</td><td>%u</td><td>%u</td><td>%c %c</td></tr>\r\n",
+		 htons(conn->lport),
+		 htons(conn->ripaddr[0]) >> 8,
+		 htons(conn->ripaddr[0]) & 0xff,
+		 htons(conn->ripaddr[1]) >> 8,
+		 htons(conn->ripaddr[1]) & 0xff,
+		 htons(conn->rport),
+		 states[conn->tcpstateflags & UIP_TS_MASK],
+		 conn->nrtx,
+		 conn->timer,
+		 (uip_outstanding(conn))? '*':' ',
+		 (uip_stopped(conn))? '!':' ');
+}
+/*---------------------------------------------------------------------------*/
+static
+PT_THREAD(tcp_stats(struct httpd_state *s, char *ptr))
+{
+  
+  PSOCK_BEGIN(&s->sout);
+
+  for(s->count = 0; s->count < UIP_CONNS; ++s->count) {
+    if((uip_conns[s->count].tcpstateflags & UIP_TS_MASK) != UIP_CLOSED) {
+      PSOCK_GENERATOR_SEND(&s->sout, generate_tcp_stats, s);
+    }
+  }
+
+  PSOCK_END(&s->sout);
+}
+/*---------------------------------------------------------------------------*/
+static unsigned short
+generate_net_stats(void *arg)
+{
+  struct httpd_state *s = (struct httpd_state *)arg;
+  return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE,
+		  "%5u\n", ((uip_stats_t *)&uip_stat)[s->count]);
+}
+
+static
+PT_THREAD(net_stats(struct httpd_state *s, char *ptr))
+{
+  PSOCK_BEGIN(&s->sout);
+
+#if UIP_STATISTICS
+
+  for(s->count = 0; s->count < sizeof(uip_stat) / sizeof(uip_stats_t);
+      ++s->count) {
+    PSOCK_GENERATOR_SEND(&s->sout, generate_net_stats, s);
+  }
+  
+#endif /* UIP_STATISTICS */
+  
+  PSOCK_END(&s->sout);
+}
+/*---------------------------------------------------------------------------*/
+
+extern void vTaskList( signed char *pcWriteBuffer );
+static char cCountBuf[ 32 ];
+long lRefreshCount = 0;
+static unsigned short
+generate_rtos_stats(void *arg)
+{
+	lRefreshCount++;
+	sprintf( cCountBuf, "<p><br>Refresh count = %ld", lRefreshCount );
+    vTaskList( uip_appdata );
+	strcat( uip_appdata, cCountBuf );
+  
+	return strlen( uip_appdata );
+}
+/*---------------------------------------------------------------------------*/
+
+
+static
+PT_THREAD(rtos_stats(struct httpd_state *s, char *ptr))
+{
+  PSOCK_BEGIN(&s->sout);
+  PSOCK_GENERATOR_SEND(&s->sout, generate_rtos_stats, NULL);  
+  PSOCK_END(&s->sout);
+}
+/*---------------------------------------------------------------------------*/
+
+char *pcStatus;
+unsigned long ulString;
+extern unsigned long uxParTextGetLED( unsigned long uxLED );
+
+static unsigned short generate_io_state( void *arg )
+{
+	if( uxParTestGetLED() )
+	{
+		pcStatus = "checked";
+	}
+	else
+	{
+		pcStatus = "";
+	}
+
+	sprintf( uip_appdata,
+		"<input type=\"checkbox\" name=\"LED0\" value=\"1\" %s>LED DS4,"\
+		"<p>",
+		pcStatus ); 
+
+	return strlen( uip_appdata );
+}
+
+static PT_THREAD(led_io(struct httpd_state *s, char *ptr))
+{
+  PSOCK_BEGIN(&s->sout);
+  PSOCK_GENERATOR_SEND(&s->sout, generate_io_state, NULL);
+  PSOCK_END(&s->sout);
+}
+
+/** @} */
+
+
+
+
+
+
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-cgi.h b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-cgi.h
new file mode 100644
index 0000000000..7ae9283213
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-cgi.h
@@ -0,0 +1,84 @@
+/**
+ * \addtogroup httpd
+ * @{
+ */
+
+/**
+ * \file
+ *         Web server script interface header file
+ * \author
+ *         Adam Dunkels <adam@sics.se>
+ *
+ */
+
+
+
+/*
+ * Copyright (c) 2001, Adam Dunkels.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ *    products derived from this software without specific prior
+ *    written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This file is part of the uIP TCP/IP stack.
+ *
+ * $Id: httpd-cgi.h,v 1.2 2006/06/11 21:46:38 adam Exp $
+ *
+ */
+
+#ifndef __HTTPD_CGI_H__
+#define __HTTPD_CGI_H__
+
+#include "psock.h"
+#include "httpd.h"
+
+typedef PT_THREAD((* httpd_cgifunction)(struct httpd_state *, char *));
+
+httpd_cgifunction httpd_cgi(char *name);
+
+struct httpd_cgi_call {
+  const char *name;
+  const httpd_cgifunction function;
+};
+
+/**
+ * \brief      HTTPD CGI function declaration
+ * \param name The C variable name of the function
+ * \param str  The string name of the function, used in the script file
+ * \param function A pointer to the function that implements it
+ *
+ *             This macro is used for declaring a HTTPD CGI
+ *             function. This function is then added to the list of
+ *             HTTPD CGI functions with the httpd_cgi_add() function.
+ *
+ * \hideinitializer
+ */
+#define HTTPD_CGI_CALL(name, str, function) \
+static PT_THREAD(function(struct httpd_state *, char *)); \
+static const struct httpd_cgi_call name = {str, function}
+
+void httpd_cgi_init(void);
+#endif /* __HTTPD_CGI_H__ */
+
+/** @} */
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs.c b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs.c
new file mode 100644
index 0000000000..dc4aef0119
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs.c
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2001, Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Institute nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Adam Dunkels <adam@sics.se>
+ *
+ * $Id: httpd-fs.c,v 1.1 2006/06/07 09:13:08 adam Exp $
+ */
+
+#include "httpd.h"
+#include "httpd-fs.h"
+#include "httpd-fsdata.h"
+
+#ifndef NULL
+#define NULL 0
+#endif /* NULL */
+
+#include "httpd-fsdata.c"
+
+#if HTTPD_FS_STATISTICS
+static u16_t count[HTTPD_FS_NUMFILES];
+#endif /* HTTPD_FS_STATISTICS */
+
+/*-----------------------------------------------------------------------------------*/
+static u8_t
+httpd_fs_strcmp(const char *str1, const char *str2)
+{
+  u8_t i;
+  i = 0;
+ loop:
+
+  if(str2[i] == 0 ||
+     str1[i] == '\r' ||
+     str1[i] == '\n') {
+    return 0;
+  }
+
+  if(str1[i] != str2[i]) {
+    return 1;
+  }
+
+
+  ++i;
+  goto loop;
+}
+/*-----------------------------------------------------------------------------------*/
+int
+httpd_fs_open(const char *name, struct httpd_fs_file *file)
+{
+#if HTTPD_FS_STATISTICS
+  u16_t i = 0;
+#endif /* HTTPD_FS_STATISTICS */
+  struct httpd_fsdata_file_noconst *f;
+
+  for(f = (struct httpd_fsdata_file_noconst *)HTTPD_FS_ROOT;
+      f != NULL;
+      f = (struct httpd_fsdata_file_noconst *)f->next) {
+
+    if(httpd_fs_strcmp(name, f->name) == 0) {
+      file->data = f->data;
+      file->len = f->len;
+#if HTTPD_FS_STATISTICS
+      ++count[i];
+#endif /* HTTPD_FS_STATISTICS */
+      return 1;
+    }
+#if HTTPD_FS_STATISTICS
+    ++i;
+#endif /* HTTPD_FS_STATISTICS */
+
+  }
+  return 0;
+}
+/*-----------------------------------------------------------------------------------*/
+void
+httpd_fs_init(void)
+{
+#if HTTPD_FS_STATISTICS
+  u16_t i;
+  for(i = 0; i < HTTPD_FS_NUMFILES; i++) {
+    count[i] = 0;
+  }
+#endif /* HTTPD_FS_STATISTICS */
+}
+/*-----------------------------------------------------------------------------------*/
+#if HTTPD_FS_STATISTICS
+u16_t httpd_fs_count
+(char *name)
+{
+  struct httpd_fsdata_file_noconst *f;
+  u16_t i;
+
+  i = 0;
+  for(f = (struct httpd_fsdata_file_noconst *)HTTPD_FS_ROOT;
+      f != NULL;
+      f = (struct httpd_fsdata_file_noconst *)f->next) {
+
+    if(httpd_fs_strcmp(name, f->name) == 0) {
+      return count[i];
+    }
+    ++i;
+  }
+  return 0;
+}
+#endif /* HTTPD_FS_STATISTICS */
+/*-----------------------------------------------------------------------------------*/
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs.h b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs.h
new file mode 100644
index 0000000000..b594eea568
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2001, Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Institute nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Adam Dunkels <adam@sics.se>
+ *
+ * $Id: httpd-fs.h,v 1.1 2006/06/07 09:13:08 adam Exp $
+ */
+#ifndef __HTTPD_FS_H__
+#define __HTTPD_FS_H__
+
+#define HTTPD_FS_STATISTICS 1
+
+struct httpd_fs_file {
+  char *data;
+  int len;
+};
+
+/* file must be allocated by caller and will be filled in
+   by the function. */
+int httpd_fs_open(const char *name, struct httpd_fs_file *file);
+
+#ifdef HTTPD_FS_STATISTICS
+#if HTTPD_FS_STATISTICS == 1
+u16_t httpd_fs_count(char *name);
+#endif /* HTTPD_FS_STATISTICS */
+#endif /* HTTPD_FS_STATISTICS */
+
+void httpd_fs_init(void);
+
+#endif /* __HTTPD_FS_H__ */
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs/404.html b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs/404.html
new file mode 100644
index 0000000000..43e7f4cadc
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs/404.html
@@ -0,0 +1,8 @@
+<html>
+  <body bgcolor="white">
+    <center>
+      <h1>404 - file not found</h1>
+      <h3>Go <a href="/">here</a> instead.</h3>
+    </center>
+  </body>
+</html>
\ No newline at end of file
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs/index.html b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs/index.html
new file mode 100644
index 0000000000..1d3bbeee10
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs/index.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+    <title>FreeRTOS.org uIP WEB server demo</title>
+  </head>
+  <BODY onLoad="window.setTimeout(&quot;location.href='index.shtml'&quot;,100)"bgcolor="#CCCCff">
+<font face="arial">
+Loading index.shtml.  Click <a href="index.shtml">here</a> if not automatically redirected.
+</font>
+</font>
+</body>
+</html>
+
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs/index.shtml b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs/index.shtml
new file mode 100644
index 0000000000..0ce405ba04
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs/index.shtml
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+    <title>FreeRTOS.org uIP WEB server demo</title>
+  </head>
+  <BODY onLoad="window.setTimeout(&quot;location.href='index.shtml'&quot;,2000)"bgcolor="#CCCCff">
+<font face="arial">
+<a href="index.shtml">RTOS Stats</a> <b>|</b> <a href="stats.shtml">TCP Stats</a> <b>|</b> <a href="tcp.shtml">Connections</a> <b>|</b> <a href="http://www.freertos.org/">FreeRTOS.org Homepage</a> <b>|</b> <a href="io.shtml">IO</a>
+<br><p>
+<hr>
+<br><p>
+<h2>Task statistics</h2>
+Page will refresh evey 2 seconds.<p>
+<font face="courier"><pre>Task          State  Priority  Stack	#<br>************************************************<br>
+%! rtos-stats
+</pre></font>
+</font>
+</body>
+</html>
+
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs/io.shtml b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs/io.shtml
new file mode 100644
index 0000000000..bacef5f7d4
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs/io.shtml
@@ -0,0 +1,28 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+    <title>FreeRTOS.org uIP WEB server demo</title>
+  </head>
+  <BODY bgcolor="#CCCCff">
+<font face="arial">
+<a href="index.shtml">RTOS Stats</a> <b>|</b> <a href="stats.shtml">TCP Stats</a> <b>|</b> <a href="tcp.shtml">Connections</a> <b>|</b> <a href="http://www.freertos.org/">FreeRTOS.org Homepage</a> <b>|</b> <a href="io.shtml">IO</a>
+<br><p>
+<hr>
+<b>LED IO</b><br>
+
+<p>
+
+Use the check box to set the LED state, then click "Update IO" to send the new state to the microcontroller.
+
+
+<p>
+<form name="aForm" action="/io.shtml" method="get">
+%! led-io
+<p>
+<input type="submit" value="Update IO">
+</form>
+<br><p>
+</font>
+</body>
+</html>
+
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs/stats.shtml b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs/stats.shtml
new file mode 100644
index 0000000000..d762f40d8d
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs/stats.shtml
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+    <title>FreeRTOS.org uIP WEB server demo</title>
+  </head>
+  <BODY bgcolor="#CCCCff">
+<font face="arial">
+<a href="index.shtml">RTOS Stats</a> <b>|</b> <a href="stats.shtml">TCP Stats</a> <b>|</b> <a href="tcp.shtml">Connections</a> <b>|</b> <a href="http://www.freertos.org/">FreeRTOS.org Homepage</a> <b>|</b> <a href="io.shtml">IO</a>
+<br><p>
+<hr>
+<br><p>
+<h2>Network statistics</h2>
+<table width="300" border="0">
+<tr><td align="left"><font face="courier"><pre>
+IP           Packets dropped
+             Packets received
+             Packets sent
+IP errors    IP version/header length
+             IP length, high byte
+             IP length, low byte
+             IP fragments
+             Header checksum
+             Wrong protocol
+ICMP	     Packets dropped
+             Packets received
+             Packets sent
+             Type errors
+TCP          Packets dropped
+             Packets received
+             Packets sent
+             Checksum errors
+             Data packets without ACKs
+             Resets
+             Retransmissions
+	     No connection avaliable
+	     Connection attempts to closed ports
+</pre></font></td><td><pre>%! net-stats
+</pre></table>
+</font>
+</body>
+</html>
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs/tcp.shtml b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs/tcp.shtml
new file mode 100644
index 0000000000..654d61f21e
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fs/tcp.shtml
@@ -0,0 +1,21 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+    <title>FreeRTOS.org uIP WEB server demo</title>
+  </head>
+  <BODY bgcolor="#CCCCff">
+<font face="arial">
+<a href="index.shtml">RTOS Stats</a> <b>|</b> <a href="stats.shtml">TCP Stats</a> <b>|</b> <a href="tcp.shtml">Connections</a> <b>|</b> <a href="http://www.freertos.org/">FreeRTOS.org Homepage</a> <b>|</b> <a href="io.shtml">IO</a>
+<br><p>
+<hr>
+<br>
+<h2>Network connections</h2>
+<p>
+<table>
+<tr><th>Local</th><th>Remote</th><th>State</th><th>Retransmissions</th><th>Timer</th><th>Flags</th></tr>
+%! tcp-connections
+</pre></font>
+</font>
+</body>
+</html>
+
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fsdata.c b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fsdata.c
new file mode 100644
index 0000000000..481f3af158
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fsdata.c
@@ -0,0 +1,468 @@
+static const unsigned char data_404_html[] = {
+	/* /404.html */
+	0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0,
+	0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, 0xa, 0x20, 0x20, 
+	0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x62, 0x67, 0x63, 0x6f, 
+	0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x77, 0x68, 0x69, 0x74, 0x65, 
+	0x22, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x63, 
+	0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0xd, 0xa, 0x20, 0x20, 
+	0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x31, 0x3e, 0x34, 0x30, 
+	0x34, 0x20, 0x2d, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x6e, 
+	0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x3c, 0x2f, 
+	0x68, 0x31, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 
+	0x20, 0x3c, 0x68, 0x33, 0x3e, 0x47, 0x6f, 0x20, 0x3c, 0x61, 
+	0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x22, 0x3e, 
+	0x68, 0x65, 0x72, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x69, 
+	0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x2e, 0x3c, 0x2f, 0x68, 
+	0x33, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 
+	0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0xd, 0xa, 0x20, 
+	0x20, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, 
+	0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0};
+
+static const unsigned char data_index_html[] = {
+	/* /index.html */
+	0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0,
+	0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 
+	0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 
+	0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, 
+	0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, 
+	0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 
+	0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, 
+	0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 
+	0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 
+	0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, 
+	0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, 
+	0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 
+	0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 
+	0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 
+	0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, 
+	0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, 
+	0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 
+	0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, 
+	0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 
+	0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, 
+	0x4f, 0x44, 0x59, 0x20, 0x6f, 0x6e, 0x4c, 0x6f, 0x61, 0x64, 
+	0x3d, 0x22, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x73, 
+	0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, 
+	0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x6c, 0x6f, 0x63, 0x61, 
+	0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x68, 0x72, 0x65, 0x66, 0x3d, 
+	0x27, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, 
+	0x6d, 0x6c, 0x27, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x2c, 
+	0x31, 0x30, 0x30, 0x29, 0x22, 0x62, 0x67, 0x63, 0x6f, 0x6c, 
+	0x6f, 0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 0x66, 
+	0x66, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 
+	0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, 
+	0x61, 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x4c, 0x6f, 0x61, 0x64, 
+	0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 
+	0x73, 0x68, 0x74, 0x6d, 0x6c, 0x2e, 0x20, 0x20, 0x43, 0x6c, 
+	0x69, 0x63, 0x6b, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 
+	0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 
+	0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x68, 0x65, 0x72, 0x65, 
+	0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 
+	0x74, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 
+	0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x64, 0x69, 
+	0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x2e, 0xd, 0xa, 0x3c, 
+	0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 
+	0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x62, 
+	0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, 
+	0x6d, 0x6c, 0x3e, 0xd, 0xa, 0xd, 0xa, 0};
+
+static const unsigned char data_index_shtml[] = {
+	/* /index.shtml */
+	0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0,
+	0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 
+	0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 
+	0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, 
+	0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, 
+	0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 
+	0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, 
+	0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 
+	0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 
+	0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, 
+	0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, 
+	0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 
+	0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 
+	0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 
+	0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, 
+	0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, 
+	0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 
+	0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, 
+	0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 
+	0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, 
+	0x4f, 0x44, 0x59, 0x20, 0x6f, 0x6e, 0x4c, 0x6f, 0x61, 0x64, 
+	0x3d, 0x22, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x73, 
+	0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, 
+	0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x6c, 0x6f, 0x63, 0x61, 
+	0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x68, 0x72, 0x65, 0x66, 0x3d, 
+	0x27, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, 
+	0x6d, 0x6c, 0x27, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x2c, 
+	0x32, 0x30, 0x30, 0x30, 0x29, 0x22, 0x62, 0x67, 0x63, 0x6f, 
+	0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 
+	0x66, 0x66, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 
+	0x74, 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 
+	0x69, 0x61, 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, 
+	0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 
+	0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 
+	0x54, 0x4f, 0x53, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 
+	0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 
+	0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 
+	0x3d, 0x22, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 
+	0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, 0x20, 0x53, 
+	0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 
+	0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 
+	0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, 
+	0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43, 0x6f, 
+	0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 
+	0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 
+	0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 
+	0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 
+	0x77, 0x77, 0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, 
+	0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, 0x46, 0x72, 
+	0x65, 0x65, 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, 0x72, 0x67, 
+	0x20, 0x48, 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x3c, 
+	0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 
+	0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 
+	0x3d, 0x22, 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 
+	0x22, 0x3e, 0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0xd, 0xa, 
+	0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 
+	0x68, 0x72, 0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 
+	0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x32, 0x3e, 0x54, 0x61, 
+	0x73, 0x6b, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 
+	0x69, 0x63, 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0xd, 0xa, 
+	0x50, 0x61, 0x67, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 
+	0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x20, 0x65, 0x76, 
+	0x65, 0x79, 0x20, 0x32, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 
+	0x64, 0x73, 0x2e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x66, 
+	0x6f, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 
+	0x63, 0x6f, 0x75, 0x72, 0x69, 0x65, 0x72, 0x22, 0x3e, 0x3c, 
+	0x70, 0x72, 0x65, 0x3e, 0x54, 0x61, 0x73, 0x6b, 0x20, 0x20, 
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x74, 
+	0x61, 0x74, 0x65, 0x20, 0x20, 0x50, 0x72, 0x69, 0x6f, 0x72, 
+	0x69, 0x74, 0x79, 0x20, 0x20, 0x53, 0x74, 0x61, 0x63, 0x6b, 
+	0x9, 0x23, 0x3c, 0x62, 0x72, 0x3e, 0x2a, 0x2a, 0x2a, 0x2a, 
+	0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 
+	0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 
+	0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 
+	0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 
+	0x2a, 0x2a, 0x2a, 0x2a, 0x3c, 0x62, 0x72, 0x3e, 0xd, 0xa, 
+	0x25, 0x21, 0x20, 0x72, 0x74, 0x6f, 0x73, 0x2d, 0x73, 0x74, 
+	0x61, 0x74, 0x73, 0xd, 0xa, 0x3c, 0x2f, 0x70, 0x72, 0x65, 
+	0x3e, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, 
+	0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, 0x3c, 
+	0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 
+	0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, 0xa, 0xd, 0xa, 0};
+
+static const unsigned char data_io_shtml[] = {
+	/* /io.shtml */
+	0x2f, 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0,
+	0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 
+	0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 
+	0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, 
+	0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, 
+	0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 
+	0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, 
+	0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 
+	0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 
+	0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, 
+	0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, 
+	0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 
+	0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 
+	0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 
+	0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, 
+	0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, 
+	0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 
+	0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, 
+	0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 
+	0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, 
+	0x4f, 0x44, 0x59, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, 
+	0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 0x66, 0x66, 
+	0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, 
+	0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, 
+	0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, 0x68, 0x72, 
+	0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 
+	0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 0x54, 0x4f, 
+	0x53, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, 
+	0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 
+	0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 
+	0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 
+	0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, 0x20, 0x53, 0x74, 0x61, 
+	0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 
+	0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 
+	0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, 0x2e, 0x73, 
+	0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x6e, 
+	0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x61, 
+	0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 
+	0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 
+	0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 
+	0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, 0x73, 0x2e, 
+	0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, 0x46, 0x72, 0x65, 0x65, 
+	0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x48, 
+	0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, 
+	0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 
+	0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 
+	0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 
+	0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0xd, 0xa, 0x3c, 0x62, 
+	0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x72, 
+	0x3e, 0xd, 0xa, 0x3c, 0x62, 0x3e, 0x4c, 0x45, 0x44, 0x20, 
+	0x49, 0x4f, 0x3c, 0x2f, 0x62, 0x3e, 0x3c, 0x62, 0x72, 0x3e, 
+	0xd, 0xa, 0xd, 0xa, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0xd, 
+	0xa, 0x55, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 
+	0x68, 0x65, 0x63, 0x6b, 0x20, 0x62, 0x6f, 0x78, 0x20, 0x74, 
+	0x6f, 0x20, 0x73, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 
+	0x4c, 0x45, 0x44, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2c, 
+	0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x63, 0x6c, 0x69, 0x63, 
+	0x6b, 0x20, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 
+	0x49, 0x4f, 0x22, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x6e, 
+	0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x77, 0x20, 
+	0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 
+	0x68, 0x65, 0x20, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x63, 0x6f, 
+	0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0xd, 
+	0xa, 0xd, 0xa, 0xd, 0xa, 0x3c, 0x70, 0x3e, 0xd, 0xa, 
+	0x3c, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 
+	0x3d, 0x22, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x22, 0x20, 0x61, 
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x2f, 0x69, 0x6f, 
+	0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x20, 0x6d, 0x65, 
+	0x74, 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x67, 0x65, 0x74, 0x22, 
+	0x3e, 0xd, 0xa, 0x25, 0x21, 0x20, 0x6c, 0x65, 0x64, 0x2d, 
+	0x69, 0x6f, 0xd, 0xa, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 
+	0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 
+	0x3d, 0x22, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, 
+	0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x55, 0x70, 0x64, 
+	0x61, 0x74, 0x65, 0x20, 0x49, 0x4f, 0x22, 0x3e, 0xd, 0xa, 
+	0x3c, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x3e, 0xd, 0xa, 0x3c, 
+	0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 
+	0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x62, 
+	0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, 
+	0x6d, 0x6c, 0x3e, 0xd, 0xa, 0xd, 0xa, 0};
+
+static const unsigned char data_stats_shtml[] = {
+	/* /stats.shtml */
+	0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0,
+	0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 
+	0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 
+	0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, 
+	0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, 
+	0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 
+	0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, 
+	0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 
+	0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 
+	0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, 
+	0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, 
+	0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 
+	0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 
+	0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 
+	0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, 
+	0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, 
+	0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 
+	0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, 
+	0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 
+	0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, 
+	0x4f, 0x44, 0x59, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, 
+	0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 0x66, 0x66, 
+	0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, 
+	0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, 
+	0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, 0x68, 0x72, 
+	0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 
+	0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 0x54, 0x4f, 
+	0x53, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, 
+	0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 
+	0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 
+	0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 
+	0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, 0x20, 0x53, 0x74, 0x61, 
+	0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 
+	0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 
+	0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, 0x2e, 0x73, 
+	0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x6e, 
+	0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x61, 
+	0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 
+	0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 
+	0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 
+	0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, 0x73, 0x2e, 
+	0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, 0x46, 0x72, 0x65, 0x65, 
+	0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x48, 
+	0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, 
+	0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 
+	0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 
+	0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 
+	0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0xd, 0xa, 0x3c, 0x62, 
+	0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x72, 
+	0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, 
+	0xd, 0xa, 0x3c, 0x68, 0x32, 0x3e, 0x4e, 0x65, 0x74, 0x77, 
+	0x6f, 0x72, 0x6b, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 
+	0x74, 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0xd, 
+	0xa, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, 
+	0x64, 0x74, 0x68, 0x3d, 0x22, 0x33, 0x30, 0x30, 0x22, 0x20, 
+	0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 
+	0x3e, 0xd, 0xa, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 
+	0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, 0x65, 
+	0x66, 0x74, 0x22, 0x3e, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, 
+	0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x75, 0x72, 
+	0x69, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x65, 0x3e, 
+	0xd, 0xa, 0x49, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 
+	0x74, 0x73, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 
+	0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 
+	0x74, 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 
+	0x64, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 
+	0x65, 0x74, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0xd, 0xa, 
+	0x49, 0x50, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x20, 
+	0x20, 0x20, 0x20, 0x49, 0x50, 0x20, 0x76, 0x65, 0x72, 0x73, 
+	0x69, 0x6f, 0x6e, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 
+	0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0xd, 0xa, 0x20, 
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
+	0x20, 0x20, 0x49, 0x50, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 
+	0x68, 0x2c, 0x20, 0x68, 0x69, 0x67, 0x68, 0x20, 0x62, 0x79, 
+	0x74, 0x65, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x50, 0x20, 
+	0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x6c, 0x6f, 
+	0x77, 0x20, 0x62, 0x79, 0x74, 0x65, 0xd, 0xa, 0x20, 0x20, 
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
+	0x20, 0x49, 0x50, 0x20, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 
+	0x6e, 0x74, 0x73, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x65, 
+	0x61, 0x64, 0x65, 0x72, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 
+	0x73, 0x75, 0x6d, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x57, 0x72, 
+	0x6f, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 
+	0x6f, 0x6c, 0xd, 0xa, 0x49, 0x43, 0x4d, 0x50, 0x9, 0x20, 
+	0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 
+	0x73, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0xd, 
+	0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
+	0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 
+	0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 
+	0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 
+	0x74, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0xd, 0xa, 0x20, 
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
+	0x20, 0x20, 0x54, 0x79, 0x70, 0x65, 0x20, 0x65, 0x72, 0x72, 
+	0x6f, 0x72, 0x73, 0xd, 0xa, 0x54, 0x43, 0x50, 0x20, 0x20, 
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 
+	0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x64, 0x72, 0x6f, 0x70, 
+	0x70, 0x65, 0x64, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 
+	0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 
+	0x69, 0x76, 0x65, 0x64, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 
+	0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x73, 0x65, 0x6e, 
+	0x74, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x68, 0x65, 0x63, 
+	0x6b, 0x73, 0x75, 0x6d, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 
+	0x73, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, 0x61, 0x74, 0x61, 
+	0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x77, 
+	0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x43, 0x4b, 
+	0x73, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x65, 0x73, 0x65, 
+	0x74, 0x73, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x65, 0x74, 
+	0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 
+	0x6e, 0x73, 0xd, 0xa, 0x9, 0x20, 0x20, 0x20, 0x20, 0x20, 
+	0x4e, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 
+	0x69, 0x6f, 0x6e, 0x20, 0x61, 0x76, 0x61, 0x6c, 0x69, 0x61, 
+	0x62, 0x6c, 0x65, 0xd, 0xa, 0x9, 0x20, 0x20, 0x20, 0x20, 
+	0x20, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 
+	0x6e, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 
+	0x20, 0x74, 0x6f, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 
+	0x20, 0x70, 0x6f, 0x72, 0x74, 0x73, 0xd, 0xa, 0x3c, 0x2f, 
+	0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 
+	0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 
+	0x3c, 0x70, 0x72, 0x65, 0x3e, 0x25, 0x21, 0x20, 0x6e, 0x65, 
+	0x74, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x73, 0xd, 0xa, 0x3c, 
+	0x2f, 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x74, 0x61, 0x62, 
+	0x6c, 0x65, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 
+	0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 
+	0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 
+	0xd, 0xa, 0};
+
+static const unsigned char data_tcp_shtml[] = {
+	/* /tcp.shtml */
+	0x2f, 0x74, 0x63, 0x70, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0,
+	0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 
+	0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 
+	0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, 
+	0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, 
+	0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 
+	0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, 
+	0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 
+	0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 
+	0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, 
+	0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, 
+	0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 
+	0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 
+	0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 
+	0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, 
+	0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, 
+	0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 
+	0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, 
+	0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 
+	0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, 
+	0x4f, 0x44, 0x59, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, 
+	0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 0x66, 0x66, 
+	0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, 
+	0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, 
+	0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, 0x68, 0x72, 
+	0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 
+	0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 0x54, 0x4f, 
+	0x53, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, 
+	0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 
+	0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 
+	0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 
+	0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, 0x20, 0x53, 0x74, 0x61, 
+	0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 
+	0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 
+	0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, 0x2e, 0x73, 
+	0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x6e, 
+	0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x61, 
+	0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 
+	0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 
+	0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 
+	0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, 0x73, 0x2e, 
+	0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, 0x46, 0x72, 0x65, 0x65, 
+	0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x48, 
+	0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, 
+	0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 
+	0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 
+	0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 
+	0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0xd, 0xa, 0x3c, 0x62, 
+	0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x72, 
+	0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0xd, 0xa, 0x3c, 
+	0x68, 0x32, 0x3e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 
+	0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 
+	0x6e, 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0xd, 0xa, 0x3c, 
+	0x70, 0x3e, 0xd, 0xa, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 
+	0x3e, 0xd, 0xa, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x68, 
+	0x3e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x2f, 0x74, 0x68, 
+	0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 
+	0x65, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 
+	0x53, 0x74, 0x61, 0x74, 0x65, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 
+	0x3c, 0x74, 0x68, 0x3e, 0x52, 0x65, 0x74, 0x72, 0x61, 0x6e, 
+	0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 
+	0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x54, 0x69, 
+	0x6d, 0x65, 0x72, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 
+	0x68, 0x3e, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3c, 0x2f, 0x74, 
+	0x68, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0xd, 0xa, 0x25, 
+	0x21, 0x20, 0x74, 0x63, 0x70, 0x2d, 0x63, 0x6f, 0x6e, 0x6e, 
+	0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xd, 0xa, 0x3c, 
+	0x2f, 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 
+	0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 
+	0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 
+	0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, 
+	0xa, 0xd, 0xa, 0};
+
+const struct httpd_fsdata_file file_404_html[] = {{NULL, data_404_html, data_404_html + 10, sizeof(data_404_html) - 10}};
+
+const struct httpd_fsdata_file file_index_html[] = {{file_404_html, data_index_html, data_index_html + 12, sizeof(data_index_html) - 12}};
+
+const struct httpd_fsdata_file file_index_shtml[] = {{file_index_html, data_index_shtml, data_index_shtml + 13, sizeof(data_index_shtml) - 13}};
+
+const struct httpd_fsdata_file file_io_shtml[] = {{file_index_shtml, data_io_shtml, data_io_shtml + 10, sizeof(data_io_shtml) - 10}};
+
+const struct httpd_fsdata_file file_stats_shtml[] = {{file_io_shtml, data_stats_shtml, data_stats_shtml + 13, sizeof(data_stats_shtml) - 13}};
+
+const struct httpd_fsdata_file file_tcp_shtml[] = {{file_stats_shtml, data_tcp_shtml, data_tcp_shtml + 11, sizeof(data_tcp_shtml) - 11}};
+
+#define HTTPD_FS_ROOT file_tcp_shtml
+
+#define HTTPD_FS_NUMFILES 6
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fsdata.h b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fsdata.h
new file mode 100644
index 0000000000..52d35c2650
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd-fsdata.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2001, Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Institute nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Adam Dunkels <adam@sics.se>
+ *
+ * $Id: httpd-fsdata.h,v 1.1 2006/06/07 09:13:08 adam Exp $
+ */
+#ifndef __HTTPD_FSDATA_H__
+#define __HTTPD_FSDATA_H__
+
+#include "uip.h"
+
+struct httpd_fsdata_file {
+  const struct httpd_fsdata_file *next;
+  const char *name;
+  const char *data;
+  const int len;
+#ifdef HTTPD_FS_STATISTICS
+#if HTTPD_FS_STATISTICS == 1
+  u16_t count;
+#endif /* HTTPD_FS_STATISTICS */
+#endif /* HTTPD_FS_STATISTICS */
+};
+
+struct httpd_fsdata_file_noconst {
+  struct httpd_fsdata_file *next;
+  char *name;
+  char *data;
+  int len;
+#ifdef HTTPD_FS_STATISTICS
+#if HTTPD_FS_STATISTICS == 1
+  u16_t count;
+#endif /* HTTPD_FS_STATISTICS */
+#endif /* HTTPD_FS_STATISTICS */
+};
+
+#endif /* __HTTPD_FSDATA_H__ */
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd.c b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd.c
new file mode 100644
index 0000000000..5c0b409337
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd.c
@@ -0,0 +1,413 @@
+/*$T httpd.c GC 1.138 11/17/07 13:10:22 */
+
+/*
+ * \addtogroup apps @{ �
+ * \defgroup httpd Web server @{ The uIP web server is a very simplistic
+ * implementation of an HTTP server. It can serve web pages and files from a
+ * read-only ROM filesystem, and provides a very small scripting language. �
+ * \file Web server \author Adam Dunkels <adam@sics.se> �
+ * Copyright (c) 2004, Adam Dunkels. All rights reserved. Redistribution and use
+ * in source and binary forms, with or without modification, are permitted
+ * provided that the following conditions are met: 1. Redistributions of source
+ * code must retain the above copyright notice, this list of conditions and the
+ * following disclaimer. 2. Redistributions in binary form must reproduce the
+ * above copyright notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the distribution. 3.
+ * Neither the name of the Institute nor the names of its contributors may be used
+ * to endorse or promote products derived from this software without specific
+ * prior written permission. THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND
+ * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
+ * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE. This file is part of the uIP TCP/IP stack. Author: Adam Dunkels
+ * <adam@sics.se> $Id: httpd.c,v 1.2 2006/06/11 21:46:38 adam Exp $
+ */
+#include "uip.h"
+#include "httpd.h"
+#include "httpd-fs.h"
+#include "httpd-cgi.h"
+#include "http-strings.h"
+
+#include <string.h>
+
+#define STATE_WAITING	0
+#define STATE_OUTPUT	1
+
+#define ISO_nl			0x0a
+#define ISO_space		0x20
+#define ISO_bang		0x21
+#define ISO_percent		0x25
+#define ISO_period		0x2e
+#define ISO_slash		0x2f
+#define ISO_colon		0x3a
+
+/*
+ =======================================================================================================================
+ =======================================================================================================================
+ */
+static unsigned short generate_part_of_file(void *state)
+{
+	/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	struct httpd_state	*s = (struct httpd_state *) state;
+	/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+	if(s->file.len > uip_mss())
+	{
+		s->len = uip_mss();
+	}
+	else
+	{
+		s->len = s->file.len;
+	}
+
+	memcpy(uip_appdata, s->file.data, s->len);
+
+	return s->len;
+}
+
+/*
+ =======================================================================================================================
+ =======================================================================================================================
+ */
+static PT_THREAD(send_file (struct httpd_state *s))
+{
+	PSOCK_BEGIN(&s->sout);
+
+	do
+	{
+		PSOCK_GENERATOR_SEND(&s->sout, generate_part_of_file, s);
+		s->file.len -= s->len;
+		s->file.data += s->len;
+	} while(s->file.len > 0);
+
+	PSOCK_END(&s->sout);
+}
+
+/*
+ =======================================================================================================================
+ =======================================================================================================================
+ */
+static PT_THREAD(send_part_of_file (struct httpd_state *s))
+{
+	PSOCK_BEGIN(&s->sout);
+
+	PSOCK_SEND(&s->sout, s->file.data, s->len);
+
+	PSOCK_END(&s->sout);
+}
+
+/*
+ =======================================================================================================================
+ =======================================================================================================================
+ */
+static void next_scriptstate(struct httpd_state *s)
+{
+	/*~~~~~~~*/
+	char	*p;
+	/*~~~~~~~*/
+
+	p = strchr(s->scriptptr, ISO_nl) + 1;
+	s->scriptlen -= (unsigned short) (p - s->scriptptr);
+	s->scriptptr = p;
+}
+
+/*
+ =======================================================================================================================
+ =======================================================================================================================
+ */
+static PT_THREAD(handle_script (struct httpd_state *s))
+{
+	/*~~~~~~~~~*/
+	char	*ptr;
+	/*~~~~~~~~~*/
+
+	PT_BEGIN(&s->scriptpt);
+
+	while(s->file.len > 0)
+	{
+		/* Check if we should start executing a script. */
+		if(*s->file.data == ISO_percent && *(s->file.data + 1) == ISO_bang)
+		{
+			s->scriptptr = s->file.data + 3;
+			s->scriptlen = s->file.len - 3;
+			if(*(s->scriptptr - 1) == ISO_colon)
+			{
+				httpd_fs_open(s->scriptptr + 1, &s->file);
+				PT_WAIT_THREAD(&s->scriptpt, send_file(s));
+			}
+			else
+			{
+				PT_WAIT_THREAD(&s->scriptpt, httpd_cgi(s->scriptptr) (s, s->scriptptr));
+			}
+
+			next_scriptstate(s);
+
+			/*
+			 * The script is over, so we reset the pointers and continue sending the rest of
+			 * the file.
+			 */
+			s->file.data = s->scriptptr;
+			s->file.len = s->scriptlen;
+		}
+		else
+		{
+			/* See if we find the start of script marker in the block of HTML to be sent. */
+			if(s->file.len > uip_mss())
+			{
+				s->len = uip_mss();
+			}
+			else
+			{
+				s->len = s->file.len;
+			}
+
+			if(*s->file.data == ISO_percent)
+			{
+				ptr = strchr(s->file.data + 1, ISO_percent);
+			}
+			else
+			{
+				ptr = strchr(s->file.data, ISO_percent);
+			}
+
+			if(ptr != NULL && ptr != s->file.data)
+			{
+				s->len = (int) (ptr - s->file.data);
+				if(s->len >= uip_mss())
+				{
+					s->len = uip_mss();
+				}
+			}
+
+			PT_WAIT_THREAD(&s->scriptpt, send_part_of_file(s));
+			s->file.data += s->len;
+			s->file.len -= s->len;
+		}
+	}
+
+	PT_END(&s->scriptpt);
+}
+
+/*
+ =======================================================================================================================
+ =======================================================================================================================
+ */
+static PT_THREAD(send_headers (struct httpd_state *s, const char *statushdr))
+{
+	/*~~~~~~~~~*/
+	char	*ptr;
+	/*~~~~~~~~~*/
+
+	PSOCK_BEGIN(&s->sout);
+
+	PSOCK_SEND_STR(&s->sout, statushdr);
+
+	ptr = strrchr(s->filename, ISO_period);
+	if(ptr == NULL)
+	{
+		PSOCK_SEND_STR(&s->sout, http_content_type_binary);
+	}
+	else if(strncmp(http_html, ptr, 5) == 0 || strncmp(http_shtml, ptr, 6) == 0)
+	{
+		PSOCK_SEND_STR(&s->sout, http_content_type_html);
+	}
+	else if(strncmp(http_css, ptr, 4) == 0)
+	{
+		PSOCK_SEND_STR(&s->sout, http_content_type_css);
+	}
+	else if(strncmp(http_png, ptr, 4) == 0)
+	{
+		PSOCK_SEND_STR(&s->sout, http_content_type_png);
+	}
+	else if(strncmp(http_gif, ptr, 4) == 0)
+	{
+		PSOCK_SEND_STR(&s->sout, http_content_type_gif);
+	}
+	else if(strncmp(http_jpg, ptr, 4) == 0)
+	{
+		PSOCK_SEND_STR(&s->sout, http_content_type_jpg);
+	}
+	else
+	{
+		PSOCK_SEND_STR(&s->sout, http_content_type_plain);
+	}
+
+	PSOCK_END(&s->sout);
+}
+
+/*
+ =======================================================================================================================
+ =======================================================================================================================
+ */
+static PT_THREAD(handle_output (struct httpd_state *s))
+{
+	/*~~~~~~~~~*/
+	char	*ptr;
+	/*~~~~~~~~~*/
+
+	PT_BEGIN(&s->outputpt);
+
+	if(!httpd_fs_open(s->filename, &s->file))
+	{
+		httpd_fs_open(http_404_html, &s->file);
+		strcpy(s->filename, http_404_html);
+		PT_WAIT_THREAD(&s->outputpt, send_headers(s, http_header_404));
+		PT_WAIT_THREAD(&s->outputpt, send_file(s));
+	}
+	else
+	{
+		PT_WAIT_THREAD(&s->outputpt, send_headers(s, http_header_200));
+		ptr = strchr(s->filename, ISO_period);
+		if(ptr != NULL && strncmp(ptr, http_shtml, 6) == 0)
+		{
+			vProcessInput( s->filename );
+			PT_INIT(&s->scriptpt);
+			PT_WAIT_THREAD(&s->outputpt, handle_script(s));
+		}
+		else
+		{
+			PT_WAIT_THREAD(&s->outputpt, send_file(s));
+		}
+	}
+
+	PSOCK_CLOSE(&s->sout);
+	PT_END(&s->outputpt);
+}
+
+/*
+ =======================================================================================================================
+ =======================================================================================================================
+ */
+static PT_THREAD(handle_input (struct httpd_state *s))
+{
+	PSOCK_BEGIN(&s->sin);
+
+	PSOCK_READTO(&s->sin, ISO_space);
+
+	if(strncmp(s->inputbuf, http_get, 4) != 0)
+	{
+		PSOCK_CLOSE_EXIT(&s->sin);
+	}
+
+	PSOCK_READTO(&s->sin, ISO_space);
+
+	if(s->inputbuf[0] != ISO_slash)
+	{
+		PSOCK_CLOSE_EXIT(&s->sin);
+	}
+
+	if(s->inputbuf[1] == ISO_space)
+	{
+		strncpy(s->filename, http_index_html, sizeof(s->filename));
+	}
+	else
+	{
+		s->inputbuf[PSOCK_DATALEN(&s->sin) - 1] = 0;
+
+		/* Process any form input being sent to the server. */
+		{
+			/*
+			 * extern void vApplicationProcessFormInput( char *pcInputString, long
+			 * xInputLength ); �
+			 * vApplicationProcessFormInput( s->inputbuf, PSOCK_DATALEN(&s->sin) );
+			 */
+		}
+
+		strncpy(s->filename, &s->inputbuf[0], sizeof(s->filename));
+	}
+
+	/* httpd_log_file(uip_conn->ripaddr, s->filename); */
+	s->state = STATE_OUTPUT;
+
+	while(1)
+	{
+		PSOCK_READTO(&s->sin, ISO_nl);
+
+		if(strncmp(s->inputbuf, http_referer, 8) == 0)
+		{
+			s->inputbuf[PSOCK_DATALEN(&s->sin) - 2] = 0;
+
+			/* httpd_log(&s->inputbuf[9]); */
+		}
+	}
+
+	PSOCK_END(&s->sin);
+}
+
+/*
+ =======================================================================================================================
+ =======================================================================================================================
+ */
+static void handle_connection(struct httpd_state *s)
+{
+	handle_input(s);
+	if(s->state == STATE_OUTPUT)
+	{
+		handle_output(s);
+	}
+}
+
+/*
+ =======================================================================================================================
+ =======================================================================================================================
+ */
+void httpd_appcall(void)
+{
+	/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	struct httpd_state	*s = (struct httpd_state *) &(uip_conn->appstate);
+	/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+	if(uip_closed() || uip_aborted() || uip_timedout())
+	{
+	}
+	else if(uip_connected())
+	{
+		PSOCK_INIT(&s->sin, s->inputbuf, sizeof(s->inputbuf) - 1);
+		PSOCK_INIT(&s->sout, s->inputbuf, sizeof(s->inputbuf) - 1);
+		PT_INIT(&s->outputpt);
+		s->state = STATE_WAITING;
+
+		/* timer_set(&s->timer, CLOCK_SECOND * 100); */
+		s->timer = 0;
+		handle_connection(s);
+	}
+	else if(s != NULL)
+	{
+		if(uip_poll())
+		{
+			++s->timer;
+			if(s->timer >= 20)
+			{
+				uip_abort();
+			}
+		}
+		else
+		{
+			s->timer = 0;
+		}
+
+		handle_connection(s);
+	}
+	else
+	{
+		uip_abort();
+	}
+}
+
+/*
+ =======================================================================================================================
+    \brief Initialize the web server This function initializes the web server and should be called at system boot-up.
+ =======================================================================================================================
+ */
+void httpd_init(void)
+{
+	uip_listen(HTONS(80));
+}
+
+/* @} */
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd.h b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd.h
new file mode 100644
index 0000000000..7f7a6666e6
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/httpd.h
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2001-2005, Adam Dunkels.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ *    products derived from this software without specific prior
+ *    written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This file is part of the uIP TCP/IP stack.
+ *
+ * $Id: httpd.h,v 1.2 2006/06/11 21:46:38 adam Exp $
+ *
+ */
+
+#ifndef __HTTPD_H__
+#define __HTTPD_H__
+
+#include "psock.h"
+#include "httpd-fs.h"
+
+struct httpd_state {
+  unsigned char timer;
+  struct psock sin, sout;
+  struct pt outputpt, scriptpt;
+  char inputbuf[50];
+  char filename[20];
+  char state;
+  struct httpd_fs_file file;
+  int len;
+  char *scriptptr;
+  int scriptlen;
+  
+  unsigned short count;
+};
+
+void httpd_init(void);
+void httpd_appcall(void);
+
+void httpd_log(char *msg);
+void httpd_log_file(u16_t *requester, char *file);
+
+#endif /* __HTTPD_H__ */
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/makefsdata b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/makefsdata
new file mode 100644
index 0000000000..8d2715a8a1
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/makefsdata
@@ -0,0 +1,78 @@
+#!/usr/bin/perl
+
+open(OUTPUT, "> httpd-fsdata.c");
+
+chdir("httpd-fs");
+
+opendir(DIR, ".");
+@files =  grep { !/^\./ && !/(CVS|~)/ } readdir(DIR);
+closedir(DIR);
+
+foreach $file (@files) {  
+   
+    if(-d $file && $file !~ /^\./) {
+	print "Processing directory $file\n";
+	opendir(DIR, $file);
+	@newfiles =  grep { !/^\./ && !/(CVS|~)/ } readdir(DIR);
+	closedir(DIR);
+	printf "Adding files @newfiles\n";
+	@files = (@files, map { $_ = "$file/$_" } @newfiles);
+	next;
+    }
+}
+
+foreach $file (@files) {
+    if(-f $file) {
+	
+	print "Adding file $file\n";
+	
+	open(FILE, $file) || die "Could not open file $file\n";
+
+	$file =~ s-^-/-;
+	$fvar = $file;
+	$fvar =~ s-/-_-g;
+	$fvar =~ s-\.-_-g;
+	# for AVR, add PROGMEM here
+	print(OUTPUT "static const unsigned char data".$fvar."[] = {\n");
+	print(OUTPUT "\t/* $file */\n\t");
+	for($j = 0; $j < length($file); $j++) {
+	    printf(OUTPUT "%#02x, ", unpack("C", substr($file, $j, 1)));
+	}
+	printf(OUTPUT "0,\n");
+	
+	
+	$i = 0;        
+	while(read(FILE, $data, 1)) {
+	    if($i == 0) {
+		print(OUTPUT "\t");
+	    }
+	    printf(OUTPUT "%#02x, ", unpack("C", $data));
+	    $i++;
+	    if($i == 10) {
+		print(OUTPUT "\n");
+		$i = 0;
+	    }
+	}
+	print(OUTPUT "0};\n\n");
+	close(FILE);
+	push(@fvars, $fvar);
+	push(@pfiles, $file);
+    }
+}
+
+for($i = 0; $i < @fvars; $i++) {
+    $file = $pfiles[$i];
+    $fvar = $fvars[$i];
+
+    if($i == 0) {
+        $prevfile = "NULL";
+    } else {
+        $prevfile = "file" . $fvars[$i - 1];
+    }
+    print(OUTPUT "const struct httpd_fsdata_file file".$fvar."[] = {{$prevfile, data$fvar, ");
+    print(OUTPUT "data$fvar + ". (length($file) + 1) .", ");
+    print(OUTPUT "sizeof(data$fvar) - ". (length($file) + 1) ."}};\n\n");
+}
+
+print(OUTPUT "#define HTTPD_FS_ROOT file$fvars[$i - 1]\n\n");
+print(OUTPUT "#define HTTPD_FS_NUMFILES $i\n");
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/makestrings b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/makestrings
new file mode 100644
index 0000000000..8a13c6d298
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/makestrings
@@ -0,0 +1,40 @@
+#!/usr/bin/perl
+
+
+sub stringify {
+  my $name = shift(@_);
+  open(OUTPUTC, "> $name.c");
+  open(OUTPUTH, "> $name.h");
+  
+  open(FILE, "$name");
+  
+  while(<FILE>) {
+    if(/(.+) "(.+)"/) {
+      $var = $1;
+      $data = $2;
+      
+      $datan = $data;
+      $datan =~ s/\\r/\r/g;
+      $datan =~ s/\\n/\n/g;
+      $datan =~ s/\\01/\01/g;      
+      $datan =~ s/\\0/\0/g;
+      
+      printf(OUTPUTC "const char $var\[%d] = \n", length($datan) + 1);
+      printf(OUTPUTC "/* \"$data\" */\n");
+      printf(OUTPUTC "{");
+      for($j = 0; $j < length($datan); $j++) {
+	printf(OUTPUTC "%#02x, ", unpack("C", substr($datan, $j, 1)));
+      }
+      printf(OUTPUTC "};\n");
+      
+      printf(OUTPUTH "extern const char $var\[%d];\n", length($datan) + 1);
+      
+    }
+  }
+  close(OUTPUTC);
+  close(OUTPUTH);
+}
+stringify("http-strings");
+
+exit 0;
+
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/uIP_Task.c b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/uIP_Task.c
new file mode 100644
index 0000000000..4f2d2a8bbb
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/uIP_Task.c
@@ -0,0 +1,197 @@
+/*
+ * Modified from an original work that is Copyright (c) 2001-2003, Adam Dunkels.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ *    products derived from this software without specific prior
+ *    written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This file is part of the uIP TCP/IP stack.
+ *
+ * $Id: main.c,v 1.10.2.4 2003/10/21 21:27:51 adam Exp $
+ *
+ */
+
+/* Standard includes. */
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+/* Scheduler includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "semphr.h"
+
+/* uip includes. */
+#include "uip.h"
+#include "uip_arp.h"
+#include "httpd.h"
+#include "timer.h"
+#include "clock-arch.h"
+
+/* Demo includes. */
+#include "SAM7_EMAC.h"
+#include "partest.h"
+
+/* How long to wait before attempting to connect the MAC again. */
+#define uipINIT_WAIT    ( 100 / portTICK_RATE_MS )
+
+/* Shortcut to the header within the Rx buffer. */
+#define xHeader ((struct uip_eth_hdr *) &uip_buf[ 0 ])
+
+/* The semaphore used by the ISR to wake the uIP task. */
+static xSemaphoreHandle xEMACSemaphore;
+
+/*-----------------------------------------------------------*/
+
+void vuIP_Task( void *pvParameters )
+{
+portBASE_TYPE i;
+uip_ipaddr_t xIPAddr;
+struct timer periodic_timer, arp_timer;
+
+	/* Initialise the uIP stack. */
+	timer_set( &periodic_timer, configTICK_RATE_HZ / 2 );
+	timer_set( &arp_timer, configTICK_RATE_HZ * 10 );
+	uip_init();
+	uip_ipaddr( xIPAddr, uipIP_ADDR0, uipIP_ADDR1, uipIP_ADDR2, uipIP_ADDR3 );
+	uip_sethostaddr( xIPAddr );
+	httpd_init();
+
+	/* Initialise the MAC. */
+	do
+    {
+		vTaskDelay( uipINIT_WAIT );
+		xEMACSemaphore = xEMACInit();        
+    } while( xEMACSemaphore == NULL );
+
+	for( ;; )
+	{
+		/* Is there received data ready to be processed? */
+		uip_len = ulEMACPoll();
+		
+		if( uip_len > 0 )
+		{
+			/* Standard uIP loop taken from the uIP manual. */
+			if( xHeader->type == htons( UIP_ETHTYPE_IP ) )
+			{
+				uip_arp_ipin();
+				uip_input();
+
+				/* If the above function invocation resulted in data that 
+				should be sent out on the network, the global variable 
+				uip_len is set to a value > 0. */
+				if( uip_len > 0 )
+				{
+					uip_arp_out();
+					lEMACSend();
+				}
+			}
+			else if( xHeader->type == htons( UIP_ETHTYPE_ARP ) )
+			{
+				uip_arp_arpin();
+
+				/* If the above function invocation resulted in data that 
+				should be sent out on the network, the global variable 
+				uip_len is set to a value > 0. */
+				if( uip_len > 0 )
+				{
+					lEMACSend();
+				}
+			}
+		}
+		else
+		{
+			if( timer_expired( &periodic_timer ) )
+			{
+				timer_reset( &periodic_timer );
+				for( i = 0; i < UIP_CONNS; i++ )
+				{
+					uip_periodic( i );
+	
+					/* If the above function invocation resulted in data that 
+					should be sent out on the network, the global variable 
+					uip_len is set to a value > 0. */
+					if( uip_len > 0 )
+					{
+						uip_arp_out();
+						lEMACSend();
+					}
+				}	
+	
+				/* Call the ARP timer function every 10 seconds. */
+				if( timer_expired( &arp_timer ) )
+				{
+					timer_reset( &arp_timer );
+					uip_arp_timer();
+				}
+			}
+			else
+			{			
+				/* We did not receive a packet, and there was no periodic
+				processing to perform.  Block for a fixed period.  If a packet
+				is received during this period we will be woken by the ISR
+				giving us the Semaphore. */
+				xSemaphoreTake( xEMACSemaphore, configTICK_RATE_HZ / 2 );			
+			}
+		}
+	}
+}
+/*-----------------------------------------------------------------------------------*/
+
+void clock_init(void)
+{
+	/* This is done when the scheduler starts. */
+}
+/*-----------------------------------------------------------*/
+
+clock_time_t clock_time( void )
+{
+	return xTaskGetTickCount();
+}
+/*-----------------------------------------------------------*/
+
+void vProcessInput( char *pcInput )
+{
+char *c;
+
+	/* Turn the LED on or off depending on the checkbox status. */
+
+	c = strstr( pcInput, "?" );
+	if( c )
+	{
+		if( strstr( c, "LED0=1" ) != NULL )
+		{
+			vParTestSetLED( 3, 0 );
+		}
+		else
+		{
+			vParTestSetLED( 3, 1 );
+		}		
+	}
+}
+
+
+
+
+
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/uIP_Task.h b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/uIP_Task.h
new file mode 100644
index 0000000000..3b9e73a8c1
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/uIP_Task.h
@@ -0,0 +1,44 @@
+/*
+	FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 Richard Barry.
+
+	This file is part of the FreeRTOS.org distribution.
+
+	FreeRTOS.org 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 2 of the License, or
+	(at your option) any later version.
+
+	FreeRTOS.org 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 FreeRTOS.org; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+	A special exception to the GPL can be applied should you wish to distribute
+	a combined work that includes FreeRTOS.org, without being obliged to provide
+	the source code for any proprietary components.  See the licensing section 
+	of http://www.FreeRTOS.org for full details of how and when the exception
+	can be applied.
+
+	***************************************************************************
+	See http://www.FreeRTOS.org for documentation, latest information, license 
+	and contact details.  Please ensure to read the configuration and relevant 
+	port sections of the online documentation.
+
+	Also see http://www.SafeRTOS.com a version that has been certified for use
+	in safety critical systems, plus commercial licensing, development and
+	support options.
+	***************************************************************************
+*/
+
+#ifndef UIP_TASK_H
+#define UIP_TASK_H
+
+/* The task that handles all uIP data. */
+void vuIP_Task( void *pvParameters );
+
+#endif
+
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/uip-conf.h b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/uip-conf.h
new file mode 100644
index 0000000000..3e6f7f3818
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/uip-conf.h
@@ -0,0 +1,157 @@
+/**
+ * \addtogroup uipopt
+ * @{
+ */
+
+/**
+ * \name Project-specific configuration options
+ * @{
+ *
+ * uIP has a number of configuration options that can be overridden
+ * for each project. These are kept in a project-specific uip-conf.h
+ * file and all configuration names have the prefix UIP_CONF.
+ */
+
+/*
+ * Copyright (c) 2006, Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Institute nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * This file is part of the uIP TCP/IP stack
+ *
+ * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $
+ */
+
+/**
+ * \file
+ *         An example uIP configuration file
+ * \author
+ *         Adam Dunkels <adam@sics.se>
+ */
+
+#ifndef __UIP_CONF_H__
+#define __UIP_CONF_H__
+
+#include <stdint.h>
+
+/**
+ * 8 bit datatype
+ *
+ * This typedef defines the 8-bit type used throughout uIP.
+ *
+ * \hideinitializer
+ */
+typedef uint8_t u8_t;
+
+/**
+ * 16 bit datatype
+ *
+ * This typedef defines the 16-bit type used throughout uIP.
+ *
+ * \hideinitializer
+ */
+typedef uint16_t u16_t;
+
+/**
+ * Statistics datatype
+ *
+ * This typedef defines the dataype used for keeping statistics in
+ * uIP.
+ *
+ * \hideinitializer
+ */
+typedef unsigned short uip_stats_t;
+
+/**
+ * Maximum number of TCP connections.
+ *
+ * \hideinitializer
+ */
+#define UIP_CONF_MAX_CONNECTIONS 40
+
+/**
+ * Maximum number of listening TCP ports.
+ *
+ * \hideinitializer
+ */
+#define UIP_CONF_MAX_LISTENPORTS 40
+
+/**
+ * uIP buffer size.
+ *
+ * \hideinitializer
+ */
+#define UIP_CONF_BUFFER_SIZE     1480
+
+/**
+ * CPU byte order.
+ *
+ * \hideinitializer
+ */
+#define UIP_CONF_BYTE_ORDER      LITTLE_ENDIAN
+
+/**
+ * Logging on or off
+ *
+ * \hideinitializer
+ */
+#define UIP_CONF_LOGGING         0
+
+/**
+ * UDP support on or off
+ *
+ * \hideinitializer
+ */
+#define UIP_CONF_UDP             0
+
+/**
+ * UDP checksums on or off
+ *
+ * \hideinitializer
+ */
+#define UIP_CONF_UDP_CHECKSUMS   1
+
+/**
+ * uIP statistics on or off
+ *
+ * \hideinitializer
+ */
+#define UIP_CONF_STATISTICS      1
+
+/* Here we include the header file for the application(s) we use in
+   our project. */
+/*#include "smtp.h"*/
+/*#include "hello-world.h"*/
+/*#include "telnetd.h"*/
+#include "webserver.h"
+/*#include "dhcpc.h"*/
+/*#include "resolv.h"*/
+/*#include "webclient.h"*/
+
+#endif /* __UIP_CONF_H__ */
+
+/** @} */
+/** @} */
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/webserver.h b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/webserver.h
new file mode 100644
index 0000000000..1acb290b8e
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/webserver.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2002, Adam Dunkels.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above
+ *    copyright notice, this list of conditions and the following
+ *    disclaimer in the documentation and/or other materials provided
+ *    with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ *    products derived from this software without specific prior
+ *    written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This file is part of the uIP TCP/IP stack
+ *
+ * $Id: webserver.h,v 1.2 2006/06/11 21:46:38 adam Exp $
+ *
+ */
+#ifndef __WEBSERVER_H__
+#define __WEBSERVER_H__
+
+#include "httpd.h"
+
+typedef struct httpd_state uip_tcp_appstate_t;
+/* UIP_APPCALL: the name of the application function. This function
+   must return void and take no arguments (i.e., C type "void
+   appfunc(void)"). */
+#ifndef UIP_APPCALL
+#define UIP_APPCALL     httpd_appcall
+#endif
+
+
+#endif /* __WEBSERVER_H__ */
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/SAM7_flash.cfg b/Demo/ARM7_AT91SAM7X256_Eclipse/SAM7_flash.cfg
new file mode 100644
index 0000000000..2fb93b3dd4
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/SAM7_flash.cfg
@@ -0,0 +1,30 @@
+#daemon configuration
+telnet_port 4444
+gdb_port 3333
+
+#interface
+interface parport
+parport_port 0x378
+parport_cable wiggler
+jtag_speed 2
+
+#use combined on interfaces or targets that can't set TRST/SRST separately
+reset_config trst_and_srst srst_pulls_trst
+
+#jtag scan chain
+#format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE)
+jtag_device 4 0x1 0xf 0xe
+
+#target configuration
+daemon_startup reset
+
+#target <type> <startup mode>
+#target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
+target arm7tdmi little run_and_init 0 arm7tdmi
+run_and_halt_time 0 30
+working_area 0 0x40000000 0x40000 nobackup
+
+#flash configuration
+flash bank at91sam7 0 0 0 0 0
+
+target_script 0 reset program.script
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/SAM7_pp.cfg b/Demo/ARM7_AT91SAM7X256_Eclipse/SAM7_pp.cfg
new file mode 100644
index 0000000000..3cb965fecb
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/SAM7_pp.cfg
@@ -0,0 +1,26 @@
+#daemon configuration
+telnet_port 4444
+gdb_port 3333
+
+#interface
+interface parport
+parport_port 0x378
+parport_cable wiggler
+jtag_speed 2
+reset_config srst_only
+
+#jtag scan chain
+#format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE)
+jtag_device 4 0x1 0xf 0xe
+
+#target configuration
+daemon_startup reset
+
+#target <type> <startup mode>
+#target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
+target arm7tdmi little reset_halt 0 arm7tdmi
+target_script 0 reset at91sam7_ecr.script
+working_area 0 0x40000000 0x40000 nobackup
+
+#flash configuration
+flash bank at91sam7 0 0 0 0 0
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/at91sam7_ecr.cfg b/Demo/ARM7_AT91SAM7X256_Eclipse/at91sam7_ecr.cfg
new file mode 100644
index 0000000000..69a2d4d744
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/at91sam7_ecr.cfg
@@ -0,0 +1,25 @@
+#daemon configuration
+telnet_port 4444
+gdb_port 3333
+
+#interface
+interface at91rm9200
+at91rm9200_device rea_ecr
+jtag_speed 0
+reset_config srst_only
+
+#jtag scan chain
+#format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE)
+jtag_device 4 0x1 0xf 0xe
+
+#target configuration
+daemon_startup reset
+
+#target <type> <startup mode>
+#target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
+target arm7tdmi little reset_halt 0 arm7tdmi
+target_script 0 reset at91sam7_ecr.script
+working_area 0 0x40000000 0x40000 nobackup
+
+#flash configuration
+flash bank at91sam7 0 0 0 0 0
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/at91sam7_ecr.script b/Demo/ARM7_AT91SAM7X256_Eclipse/at91sam7_ecr.script
new file mode 100644
index 0000000000..2d4738093d
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/at91sam7_ecr.script
@@ -0,0 +1,13 @@
+halt
+wait_halt
+sleep 10
+mww 0xfffffd44 0x00008000	# disable watchdog
+mww 0xfffffd08 0xa5000001	# enable user reset
+mww 0xfffffc20 0x00000601	# CKGR_MOR : enable the main oscillator
+sleep 10
+mww 0xfffffc2c 0x12560a64	# CKGR_PLLR: 119.8MHz (DIV=100,MUL=598+1)
+sleep 10
+mww 0xfffffc30 0x00000007	# PMC_MCKR : MCK = PLL / 2 = 59.9MHz
+sleep 10
+mww 0xffffff60 0x003c0100	# MC_FMR: flash mode (FWS=1,FMCN=60)
+arm7_9 force_hw_bkpts enable	# program resides in flash
diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/program.script b/Demo/ARM7_AT91SAM7X256_Eclipse/program.script
new file mode 100644
index 0000000000..a60e135714
--- /dev/null
+++ b/Demo/ARM7_AT91SAM7X256_Eclipse/program.script
@@ -0,0 +1,11 @@
+arm7_9 dcc_downloads enable
+halt
+wait_halt
+sleep 10
+poll
+flash probe 0
+#flash protect 0 0 26 'off'
+flash erase 0 0 15
+flash write 0 ./RTOSDemo/RTOSDemo.bin 0x0
+sleep 10
+shutdown