\appendix
\chapter{Schnittstelle des Moduls {\itshape make}}

\begin{alltt}
\textbf{interface} Make
(*
  {\slshape  System:  Tycoon Compiler
    Author:  Christian Koch
    Date:    05-OCT-1995
    Purpose: generic make tool }
*)

\textbf{import}
  errorLog :ErrorLog

\textbf{export}
  error :\textbf{Exception end}
  cycle :\textbf{Exception end}
  (*{\slshape Raised if the dependency graph has a cycle and cycles are 
     not allowed} *)

  Descriptor(T <:\textbf{Ok}) <:\textbf{Ok}
  (*{\slshape Describes a node in the "dependency graph".} *)

  Object(T <:\textbf{Ok}) <:\textbf{Ok}
  (*{\slshape object of the "dependency graph"} *)

  \textbf{Let} DependencyFun = \textbf{Fun} (T <:\textbf{Ok} :Object(T)) :Bool
  (*{\slshape 'makes' the object and returns true if it is necessary 
     otherwise returns false.  This function is built 
     internal.} *)

  newDescriptor (T <:\textbf{Ok}
    built(:T  :errorLog.T) :\textbf{Ok }
    hasChanged(:T  :errorLog.T) :Bool
    dependsOn(:T  dependencyFun :DependencyFun) :Bool
  ) :Descriptor(T)
  (*{\slshape Create a description for a node of the "dependency graph" 
     from the following arguments:
     built      - Function for building a single object.
     hasChanged - Determines if the object has changed since the 
                  last build.
     dependsOn  - Apply dependencyFun to all objects the object 
                  depends on, raise the cycle exception if there 
                  is a cycle.}
  *)

  newObject (T <:\textbf{Ok}  obj :T  descriptor :Descriptor(T)) :Object (T)
  (*{\slshape Create a new node of the "dependency graph" with the 
     object obj.} *)

  getObject (T <:\textbf{Ok}  object :Object (T)) :T
  (*{\slshape Returns the 'contents' of the object.} *)

  buildObject (T <:\textbf{Ok}  object :Object (T)) :errorLog.T
  (*{\slshape Build a single object.} *)

  makeObject (T <:\textbf{Ok}  object :Object (T)) :errorLog.T 
  (*{\slshape Build object and all objects it depends on.} *)

  allowCycle (arg :Bool) :\textbf{Ok}
  (*{\slshape wether the argument is false or true the build process raises
     an exeption if the "dependency graph" has a cycle or builds
     all elements of the cycle.}
  *)
\textbf{end};
\end{alltt}