--- /dev/null
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+ @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
--- /dev/null
+bin_PROGRAMS = fibo2
+fibo2_SOURCES = fibo2.c
+fibo2_LIBS = fibo
+
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include "fibolib.h"
+
+int
+main (int argc, char *argv[])
+{
+ int n;
+ int res;
+ char *p;
+ int *series;
+
+ if (argc >= 2) {
+ n = strtol (argv[1], &p, 0);
+ if ((p == argv[1]) || *p) {
+ fprintf (stderr, "The \"%s\" string is not a number\n", argv[1]);
+ return 1;
+ }
+ } else {
+ printf ("Input number: ");
+ scanf ("%d", &n);
+ }
+
+ res = fiboseries (&series, n);
+ if (res <= 0) {
+ fprintf (stderr, "fiboseries() failed for %d with code %d\n", n, res);
+ return 1;
+ }
+
+ /* Incorrect use of the function without prototype!!! */
+ fiboprint (series, n);
+
+ printf ("fibocalls=%d\n", fibocalls);
+
+ return 0;
+}
--- /dev/null
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+ @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
--- /dev/null
+lib_LIBRARIES = fibo
+fibo_SOURCES = fibofnc.c fiboseries.c
+include_HEADERS = fibolib.h
+
+
--- /dev/null
+#include "fibolib.h"
+
+int fibocalls;
+
+int
+fibofnc (int n)
+{
+ fibocalls++;
+
+ if (n <= 0)
+ return 0;
+ if (n == 1)
+ return 1;
+ return fibofnc (n - 1) + fibofnc (n - 2);
+}
--- /dev/null
+#ifndef FIBOLIB_H
+#define FIBOLIB_H
+
+extern int fibocalls;
+
+int fibofnc (int n);
+
+int fiboseries (int **series, int n);
+
+#endif /*FIBOLIB_H */
--- /dev/null
+#include <stdlib.h>
+#include "fibolib.h"
+
+int
+fiboseries (int **series, int n)
+{
+ int *p;
+ int i;
+
+ if (n < 0)
+ return 0;
+
+ p = malloc (sizeof (int) * (n + 1));
+ *series = p;
+
+ if (!p)
+ return 0;
+
+ for (i = 0; i <= n; i++) {
+ p[i] = fibofnc (i);
+ }
+
+ return 1;
+}