diff --git a/src/tutorial/C-code/complex.c b/src/tutorial/C-code/complex.c
index e554b7fcfb7e047c6224f09f56bc89756aae3661..8c83665c8033dc7c221bbc0d89b7c03981df87c6 100644
--- a/src/tutorial/C-code/complex.c
+++ b/src/tutorial/C-code/complex.c
@@ -1,3 +1,9 @@
+/******************************************************************************
+  This file contains routines that can be bound to a Postgres backend and
+  called by the backend in the process of processing queries.  The calling
+  format for these routines is dictated by Postgres architecture.
+******************************************************************************/
+
 #include <stdio.h>
 /* do not include libpq-fe.h for backend-loaded functions*/
 /* #include "libpq-fe.h"  */
@@ -11,6 +17,20 @@ typedef struct Complex {
     double	y;
 } Complex;
 
+/* These prototypes declare the requirements that Postgres places on these
+   user written functions.
+*/
+Complex * complex_in(char *str);
+char * complex_out(Complex *complex);
+Complex * complex_add(Complex *a, Complex *b);
+bool complex_abs_lt(Complex *a, Complex *b);
+bool complex_abs_le(Complex *a, Complex *b);
+bool complex_abs_eq(Complex *a, Complex *b);
+bool complex_abs_ge(Complex *a, Complex *b);
+bool complex_abs_gt(Complex *a, Complex *b);
+int4 complex_abs_cmp(Complex *a, Complex *b);
+
+
 /*****************************************************************************
  * Input/Output functions
  *****************************************************************************/
@@ -48,7 +68,7 @@ complex_out(Complex *complex)
 	return(NULL);
 
     result = (char *) palloc(60);
-    sprintf(result, "(%lg,%lg)", complex->x, complex->y);
+    sprintf(result, "(%g,%g)", complex->x, complex->y);
     return(result);
 }
 
@@ -131,6 +151,7 @@ complex_abs_cmp(Complex *a, Complex *b)
  * POSTGRES crashing, it is impossible to tell whether the bug is in your
  * code or POSTGRES's.
  */
+void test_main(void);
 void
 test_main()
 {
diff --git a/src/tutorial/C-code/funcs.c b/src/tutorial/C-code/funcs.c
index f91b4d620589041e750089825de6a4435d9f2228..a721b2bbfdf5e873a2537ab8e7e25ed553312df0 100644
--- a/src/tutorial/C-code/funcs.c
+++ b/src/tutorial/C-code/funcs.c
@@ -1,8 +1,29 @@
+/******************************************************************************
+  These are user-defined functions that can be bound to a Postgres backend
+  and called by Postgres to execute SQL functions of the same name.
+
+  The calling format for these functions is defined by the CREATE FUNCTION
+  SQL statement that binds them to the backend.
+*****************************************************************************/
+
 #include <string.h>
 #include <stdio.h>
 #include "postgres.h"	  /* for char16, etc. */
 #include "utils/palloc.h" /* for palloc */
 #include "libpq-fe.h" /* for TUPLE */
+#include "executor/executor.h"  /* for GetAttributeByName() */
+
+/* The following prototypes declare what we assume the user declares to 
+   Postgres in his CREATE FUNCTION statement.
+*/
+
+int add_one(int arg);
+char16 * concat16(char16 *arg1, char16 *arg2);
+text * copytext(text *t);
+bool c_overpaid(TUPLE t,	/* the current instance of EMP */
+                int4 limit);
+
+
 
 int
 add_one(int arg)