diff --git a/ChangeLog b/ChangeLog
index fb6e060f8ee0ace815c6f61020bdf8e49b5fb066..6b939b6ef345d6227ab3e87b032382f30b71ec99 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2003-04-22  Niels Möller  <nisse@cuckoo.hack.org>
+
+	* nettle.texinfo (Example): Use @verbatiminclude to include the
+	example program.
+
+	* sha-example.c: Example program, for inclusion in the manual.
+
 2003-04-14  Niels Möller  <niels@s3.kth.se>
 
 	* x86/aes-encrypt.asm (nettle_aes_encrypt): Fixed references to
diff --git a/nettle.texinfo b/nettle.texinfo
index eaca385a9c82dde700eb8f3f3df883bc8c67f974..7bb244d190d53fdeadec106b1ee29977ed249c97 100644
--- a/nettle.texinfo
+++ b/nettle.texinfo
@@ -251,50 +251,7 @@ A simple example program that reads a file from standard in and writes
 its SHA1 checksum on standard output should give the flavor of Nettle.
 
 @example
-/* FIXME: This code is untested. */
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <nettle/sha.h>
-
-#define BUF_SIZE 1000
-
-static void
-display_hex(unsigned length, uint8_t *data)
-@{
-  static const char digits[16] = "0123456789abcdef";
-  unsigned i;
-
-  for (i = 0; i<length; i++)
-  @{
-    uint8_t byte = data[i];
-    printf("%c%c ", digits[(byte / 16) & 0xf], digits[byte & 0xf]);
-  @}
-@}
-
-int
-main(int argc, char **argv)
-@{
-  struct sha1_ctx ctx;
-  uint8_t buffer[BUF_SIZE];
-  uint8_t digest[SHA1_DIGEST_SIZE];
-  
-  sha1_init(&ctx);
-  for (;;)
-  @{
-    int done = fread(buffer, 1, sizeof(buffer), stdin);
-    if (done <= 0)
-      break;
-    sha1_update(&ctx, done, buf);
-  @}
-  if (ferror(stdin))
-    return EXIT_FAILURE;
-
-  sha1_digest(&ctx, SHA1_DIGEST_SIZE, digest);
-
-  display_hex(SHA1_DIGEST_SIZE, digest);
-  return EXIT_SUCCESS;  
-@}
+@verbatiminclude example.c
 @end example
 
 @node Reference, Nettle soup, Example, Top
diff --git a/sha-example.c b/sha-example.c
new file mode 100644
index 0000000000000000000000000000000000000000..a4818460f01d4a7901cbb5519daee5c1f885def2
--- /dev/null
+++ b/sha-example.c
@@ -0,0 +1,44 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <nettle/sha.h>
+
+#define BUF_SIZE 1000
+
+static void
+display_hex(unsigned length, uint8_t *data)
+{
+  static const char digits[16] = "0123456789abcdef";
+  unsigned i;
+
+  for (i = 0; i<length; i++)
+  {
+    uint8_t byte = data[i];
+    printf("%c%c ", digits[(byte / 16) & 0xf], digits[byte & 0xf]);
+  }
+  printf("\n");
+}
+
+int
+main(int argc, char **argv)
+{
+  struct sha1_ctx ctx;
+  uint8_t buffer[BUF_SIZE];
+  uint8_t digest[SHA1_DIGEST_SIZE];
+  
+  sha1_init(&ctx);
+  for (;;)
+  {
+    int done = fread(buffer, 1, sizeof(buffer), stdin);
+    sha1_update(&ctx, done, buffer);
+    if (done < sizeof(buffer))
+      break;
+  }
+  if (ferror(stdin))
+    return EXIT_FAILURE;
+
+  sha1_digest(&ctx, SHA1_DIGEST_SIZE, digest);
+
+  display_hex(SHA1_DIGEST_SIZE, digest);
+  return EXIT_SUCCESS;  
+}