Programming in modula - 2 the art and the craft