From ca0c62265eb8cdd5fb0d8a8b34ee77baf3de987e Mon Sep 17 00:00:00 2001
From: blazy <blazy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>
Date: Fri, 20 Oct 2006 12:37:13 +0000
Subject: [PATCH] Ajout du banc de tests de CCured (Olden benchmark suite, cf.
 CCured: type-safe retrofitting of legacy code, G.Necula et al.)

rapportCompcert_all.txt liste les erreurs produites par ccomp.



git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@121 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
---
 test/ccured_olden/COPYRIGHT                   |  23 +
 test/ccured_olden/CVS/Entries                 |  13 +
 test/ccured_olden/CVS/Repository              |   1 +
 test/ccured_olden/CVS/Root                    |   1 +
 test/ccured_olden/README                      |  19 +
 test/ccured_olden/bh/.cvsignore               |  39 +
 test/ccured_olden/bh/.gdbinit                 |   3 +
 test/ccured_olden/bh/CVS/Entries              |  23 +
 test/ccured_olden/bh/CVS/Repository           |   1 +
 test/ccured_olden/bh/CVS/Root                 |   1 +
 test/ccured_olden/bh/Makefile                 |  84 +++
 test/ccured_olden/bh/Readme                   |  62 ++
 test/ccured_olden/bh/allcfiles                |   7 +
 test/ccured_olden/bh/code.c                   | 200 +++++
 test/ccured_olden/bh/code.h                   |  60 ++
 test/ccured_olden/bh/data.in                  |  12 +
 test/ccured_olden/bh/data.orig.out            | 462 ++++++++++++
 test/ccured_olden/bh/data.out                 | 462 ++++++++++++
 test/ccured_olden/bh/defs.h                   | 196 +++++
 test/ccured_olden/bh/getparam.c               | 142 ++++
 test/ccured_olden/bh/grav.c                   | 123 +++
 test/ccured_olden/bh/input                    |  12 +
 test/ccured_olden/bh/io.c                     | 252 +++++++
 test/ccured_olden/bh/load.c                   | 287 +++++++
 test/ccured_olden/bh/normalize.pl             |  19 +
 test/ccured_olden/bh/real.h                   | 106 +++
 test/ccured_olden/bh/stdinc.h                 |  97 +++
 test/ccured_olden/bh/t.out                    | 462 ++++++++++++
 test/ccured_olden/bh/testit                   |  21 +
 test/ccured_olden/bh/trusted_bh.c             |  92 +++
 test/ccured_olden/bh/util.c                   | 152 ++++
 test/ccured_olden/bh/vectmath.h               | 371 +++++++++
 test/ccured_olden/bisort/.cvsignore           |  25 +
 test/ccured_olden/bisort/CVS/Entries          |  12 +
 test/ccured_olden/bisort/CVS/Repository       |   1 +
 test/ccured_olden/bisort/CVS/Root             |   1 +
 test/ccured_olden/bisort/HOWTO                |   1 +
 test/ccured_olden/bisort/Makefile             |  67 ++
 test/ccured_olden/bisort/README               |  22 +
 test/ccured_olden/bisort/args.c               |  32 +
 test/ccured_olden/bisort/bitonic.c            | 267 +++++++
 test/ccured_olden/bisort/node.h               |  18 +
 test/ccured_olden/bisort/proc.h               |  25 +
 test/ccured_olden/bisort/ssplain.c            |  69 ++
 test/ccured_olden/bisort/ssplain.h            | 128 ++++
 test/ccured_olden/bisort/swap.c               | 145 ++++
 test/ccured_olden/em3d/.cvsignore             |  29 +
 test/ccured_olden/em3d/CVS/Entries            |  17 +
 test/ccured_olden/em3d/CVS/Repository         |   1 +
 test/ccured_olden/em3d/CVS/Root               |   1 +
 test/ccured_olden/em3d/HOWTO                  |   1 +
 test/ccured_olden/em3d/MY_HOWTO               |   2 +
 test/ccured_olden/em3d/Makefile               |  64 ++
 test/ccured_olden/em3d/Makefile.plain         |   7 +
 test/ccured_olden/em3d/Makefile.ss            |   8 +
 test/ccured_olden/em3d/args.c                 |  21 +
 test/ccured_olden/em3d/em3d.c                 |  16 +
 test/ccured_olden/em3d/em3d.h                 |  38 +
 test/ccured_olden/em3d/main.c                 |  45 ++
 test/ccured_olden/em3d/make_graph.c           | 173 +++++
 test/ccured_olden/em3d/make_graph.h           |  13 +
 test/ccured_olden/em3d/ssplain.c              |  70 ++
 test/ccured_olden/em3d/ssplain.h              | 128 ++++
 test/ccured_olden/em3d/util.c                 |  34 +
 test/ccured_olden/em3d/util.h                 |  23 +
 test/ccured_olden/health/.cvsignore           |  30 +
 test/ccured_olden/health/.gdbinit             |   6 +
 test/ccured_olden/health/CVS/Entries          |  16 +
 test/ccured_olden/health/CVS/Repository       |   1 +
 test/ccured_olden/health/CVS/Root             |   1 +
 test/ccured_olden/health/HOWTO                |   1 +
 test/ccured_olden/health/Makefile             |  72 ++
 test/ccured_olden/health/README               |  20 +
 test/ccured_olden/health/args.c               |  34 +
 test/ccured_olden/health/health.c             | 309 ++++++++
 test/ccured_olden/health/health.h             |  76 ++
 test/ccured_olden/health/list.c               |  55 ++
 test/ccured_olden/health/out.orig             |  64 ++
 test/ccured_olden/health/out.orig.msvc        |  64 ++
 test/ccured_olden/health/output               |  64 ++
 test/ccured_olden/health/poisson.c            |  35 +
 test/ccured_olden/health/ssplain.c            |  70 ++
 test/ccured_olden/health/ssplain.h            | 130 ++++
 test/ccured_olden/health/testit               |  25 +
 test/ccured_olden/mst/.cvsignore              |  26 +
 test/ccured_olden/mst/CVS/Entries             |  16 +
 test/ccured_olden/mst/CVS/Repository          |   1 +
 test/ccured_olden/mst/CVS/Root                |   1 +
 test/ccured_olden/mst/HOWTO                   |   1 +
 test/ccured_olden/mst/Makefile                |  62 ++
 test/ccured_olden/mst/Makefile.plain          |   7 +
 test/ccured_olden/mst/Makefile.ss             |   7 +
 test/ccured_olden/mst/args.c                  |  20 +
 test/ccured_olden/mst/args.s                  |  37 +
 test/ccured_olden/mst/hash.c                  | 105 +++
 test/ccured_olden/mst/hash.h                  |  23 +
 test/ccured_olden/mst/hash.s                  | 354 +++++++++
 test/ccured_olden/mst/main.c                  | 142 ++++
 test/ccured_olden/mst/makegraph.c             |  93 +++
 test/ccured_olden/mst/mst.h                   |  33 +
 test/ccured_olden/mst/out.orig                |  13 +
 test/ccured_olden/mst/output                  |  13 +
 test/ccured_olden/mst/ssplain.c               |  38 +
 test/ccured_olden/mst/ssplain.h               | 128 ++++
 test/ccured_olden/mst/testit                  |  25 +
 test/ccured_olden/newbisort/.cvsignore        |   1 +
 test/ccured_olden/newbisort/CVS/Entries       |  13 +
 test/ccured_olden/newbisort/CVS/Repository    |   1 +
 test/ccured_olden/newbisort/CVS/Root          |   1 +
 test/ccured_olden/newbisort/HOWTO             |   1 +
 test/ccured_olden/newbisort/Makefile          |  49 ++
 test/ccured_olden/newbisort/Makefile.orig     |  33 +
 test/ccured_olden/newbisort/Makefile.plain    |   7 +
 test/ccured_olden/newbisort/Makefile.ss       |   7 +
 test/ccured_olden/newbisort/args.c            |  32 +
 test/ccured_olden/newbisort/bitonic.c         | 267 +++++++
 test/ccured_olden/newbisort/node.h            |  18 +
 test/ccured_olden/newbisort/proc.h            |  25 +
 test/ccured_olden/newbisort/ssplain.c         |  75 ++
 test/ccured_olden/newbisort/ssplain.h         | 128 ++++
 test/ccured_olden/newbisort/swap.c            | 145 ++++
 test/ccured_olden/perimeter/.cvsignore        |  32 +
 test/ccured_olden/perimeter/CVS/Entries       |   9 +
 test/ccured_olden/perimeter/CVS/Repository    |   1 +
 test/ccured_olden/perimeter/CVS/Root          |   1 +
 test/ccured_olden/perimeter/Makefile          |  99 +++
 test/ccured_olden/perimeter/README            |  20 +
 test/ccured_olden/perimeter/main.c            | 221 ++++++
 test/ccured_olden/perimeter/maketree.c        | 120 +++
 test/ccured_olden/perimeter/out.orig          |   3 +
 test/ccured_olden/perimeter/output            |   4 +
 test/ccured_olden/perimeter/perimeter.h       |  54 ++
 test/ccured_olden/perimeter/testit            |  25 +
 test/ccured_olden/power/.cvsignore            |  21 +
 test/ccured_olden/power/.gdbinit              |   5 +
 test/ccured_olden/power/CVS/Entries           |  11 +
 test/ccured_olden/power/CVS/Repository        |   1 +
 test/ccured_olden/power/CVS/Root              |   1 +
 test/ccured_olden/power/Makefile              |  41 +
 test/ccured_olden/power/README                |  21 +
 test/ccured_olden/power/build.c               | 154 ++++
 test/ccured_olden/power/compute.c             | 379 ++++++++++
 test/ccured_olden/power/main.c                | 116 +++
 test/ccured_olden/power/out.orig              |  37 +
 test/ccured_olden/power/output                |  38 +
 test/ccured_olden/power/power.h               | 114 +++
 test/ccured_olden/power/testit                |  26 +
 test/ccured_olden/rapportCompcert_all.txt     |  90 +++
 test/ccured_olden/treeadd/.cvsignore          |  27 +
 test/ccured_olden/treeadd/CVS/Entries         |  27 +
 test/ccured_olden/treeadd/CVS/Repository      |   1 +
 test/ccured_olden/treeadd/CVS/Root            |   1 +
 test/ccured_olden/treeadd/HOWTO               |   1 +
 test/ccured_olden/treeadd/HOWTO.bak           |   1 +
 test/ccured_olden/treeadd/Makefile            |  38 +
 test/ccured_olden/treeadd/Makefile.plain      |   8 +
 test/ccured_olden/treeadd/Makefile.ss         |  10 +
 test/ccured_olden/treeadd/args.c              |  47 ++
 test/ccured_olden/treeadd/node.c              |  74 ++
 test/ccured_olden/treeadd/old-exe/CVS/Entries |   1 +
 .../treeadd/old-exe/CVS/Repository            |   1 +
 test/ccured_olden/treeadd/old-exe/CVS/Root    |   1 +
 test/ccured_olden/treeadd/out.diff            |   0
 test/ccured_olden/treeadd/out.orig            |   5 +
 test/ccured_olden/treeadd/out_20_1            |  10 +
 test/ccured_olden/treeadd/out_20_1.mac_cnt    |  28 +
 .../ccured_olden/treeadd/out_20_1.mac_cnt_sil |  22 +
 .../treeadd/out_20_1.mac_nocnt_sil            |  15 +
 test/ccured_olden/treeadd/out_20_1.nm_nocnt   |  17 +
 test/ccured_olden/treeadd/out_20_1.nwm_nocnt  |   6 +
 test/ccured_olden/treeadd/out_22_1            |  10 +
 .../treeadd/out_22_1.mac_nocnt_sil            |  15 +
 test/ccured_olden/treeadd/out_23_1            |  10 +
 .../treeadd/out_23_1.mac_nocnt_sil            |  15 +
 test/ccured_olden/treeadd/out_25_1            |   8 +
 .../treeadd/out_25_1.mac_nocnt_sil            |   7 +
 test/ccured_olden/treeadd/output              |   5 +
 test/ccured_olden/treeadd/par-alloc.c         |  33 +
 test/ccured_olden/treeadd/ssplain.c           |  70 ++
 test/ccured_olden/treeadd/ssplain.h           | 128 ++++
 test/ccured_olden/treeadd/testit              |  22 +
 test/ccured_olden/treeadd/tree.h              |  18 +
 test/ccured_olden/tsp/.cvsignore              |  28 +
 test/ccured_olden/tsp/CVS/Entries             |   8 +
 test/ccured_olden/tsp/CVS/Repository          |   1 +
 test/ccured_olden/tsp/CVS/Root                |   1 +
 test/ccured_olden/tsp/Makefile                |  44 ++
 test/ccured_olden/tsp/README                  |  22 +
 test/ccured_olden/tsp/build.c                 | 124 +++
 test/ccured_olden/tsp/main.c                  | 101 +++
 test/ccured_olden/tsp/tsp.c                   | 308 ++++++++
 test/ccured_olden/tsp/tsp.h                   |  32 +
 test/ccured_olden/voronoi/.cvsignore          |  14 +
 test/ccured_olden/voronoi/CVS/Entries         |   8 +
 test/ccured_olden/voronoi/CVS/Repository      |   1 +
 test/ccured_olden/voronoi/CVS/Root            |   1 +
 test/ccured_olden/voronoi/Makefile            |  72 ++
 test/ccured_olden/voronoi/README              |  22 +
 test/ccured_olden/voronoi/defines.h           | 186 +++++
 test/ccured_olden/voronoi/newvor.c            | 711 ++++++++++++++++++
 test/ccured_olden/voronoi/output.c            | 173 +++++
 test/ccured_olden/voronoi/vector.c            |  80 ++
 202 files changed, 12593 insertions(+)
 create mode 100644 test/ccured_olden/COPYRIGHT
 create mode 100644 test/ccured_olden/CVS/Entries
 create mode 100644 test/ccured_olden/CVS/Repository
 create mode 100644 test/ccured_olden/CVS/Root
 create mode 100644 test/ccured_olden/README
 create mode 100644 test/ccured_olden/bh/.cvsignore
 create mode 100644 test/ccured_olden/bh/.gdbinit
 create mode 100644 test/ccured_olden/bh/CVS/Entries
 create mode 100644 test/ccured_olden/bh/CVS/Repository
 create mode 100644 test/ccured_olden/bh/CVS/Root
 create mode 100644 test/ccured_olden/bh/Makefile
 create mode 100644 test/ccured_olden/bh/Readme
 create mode 100644 test/ccured_olden/bh/allcfiles
 create mode 100644 test/ccured_olden/bh/code.c
 create mode 100644 test/ccured_olden/bh/code.h
 create mode 100644 test/ccured_olden/bh/data.in
 create mode 100644 test/ccured_olden/bh/data.orig.out
 create mode 100644 test/ccured_olden/bh/data.out
 create mode 100644 test/ccured_olden/bh/defs.h
 create mode 100644 test/ccured_olden/bh/getparam.c
 create mode 100644 test/ccured_olden/bh/grav.c
 create mode 100644 test/ccured_olden/bh/input
 create mode 100644 test/ccured_olden/bh/io.c
 create mode 100644 test/ccured_olden/bh/load.c
 create mode 100755 test/ccured_olden/bh/normalize.pl
 create mode 100644 test/ccured_olden/bh/real.h
 create mode 100644 test/ccured_olden/bh/stdinc.h
 create mode 100644 test/ccured_olden/bh/t.out
 create mode 100755 test/ccured_olden/bh/testit
 create mode 100644 test/ccured_olden/bh/trusted_bh.c
 create mode 100644 test/ccured_olden/bh/util.c
 create mode 100644 test/ccured_olden/bh/vectmath.h
 create mode 100644 test/ccured_olden/bisort/.cvsignore
 create mode 100644 test/ccured_olden/bisort/CVS/Entries
 create mode 100644 test/ccured_olden/bisort/CVS/Repository
 create mode 100644 test/ccured_olden/bisort/CVS/Root
 create mode 100644 test/ccured_olden/bisort/HOWTO
 create mode 100644 test/ccured_olden/bisort/Makefile
 create mode 100644 test/ccured_olden/bisort/README
 create mode 100644 test/ccured_olden/bisort/args.c
 create mode 100644 test/ccured_olden/bisort/bitonic.c
 create mode 100644 test/ccured_olden/bisort/node.h
 create mode 100644 test/ccured_olden/bisort/proc.h
 create mode 100644 test/ccured_olden/bisort/ssplain.c
 create mode 100644 test/ccured_olden/bisort/ssplain.h
 create mode 100644 test/ccured_olden/bisort/swap.c
 create mode 100644 test/ccured_olden/em3d/.cvsignore
 create mode 100644 test/ccured_olden/em3d/CVS/Entries
 create mode 100644 test/ccured_olden/em3d/CVS/Repository
 create mode 100644 test/ccured_olden/em3d/CVS/Root
 create mode 100644 test/ccured_olden/em3d/HOWTO
 create mode 100644 test/ccured_olden/em3d/MY_HOWTO
 create mode 100644 test/ccured_olden/em3d/Makefile
 create mode 100644 test/ccured_olden/em3d/Makefile.plain
 create mode 100644 test/ccured_olden/em3d/Makefile.ss
 create mode 100644 test/ccured_olden/em3d/args.c
 create mode 100644 test/ccured_olden/em3d/em3d.c
 create mode 100644 test/ccured_olden/em3d/em3d.h
 create mode 100644 test/ccured_olden/em3d/main.c
 create mode 100644 test/ccured_olden/em3d/make_graph.c
 create mode 100644 test/ccured_olden/em3d/make_graph.h
 create mode 100644 test/ccured_olden/em3d/ssplain.c
 create mode 100644 test/ccured_olden/em3d/ssplain.h
 create mode 100644 test/ccured_olden/em3d/util.c
 create mode 100644 test/ccured_olden/em3d/util.h
 create mode 100644 test/ccured_olden/health/.cvsignore
 create mode 100644 test/ccured_olden/health/.gdbinit
 create mode 100644 test/ccured_olden/health/CVS/Entries
 create mode 100644 test/ccured_olden/health/CVS/Repository
 create mode 100644 test/ccured_olden/health/CVS/Root
 create mode 100644 test/ccured_olden/health/HOWTO
 create mode 100644 test/ccured_olden/health/Makefile
 create mode 100644 test/ccured_olden/health/README
 create mode 100644 test/ccured_olden/health/args.c
 create mode 100644 test/ccured_olden/health/health.c
 create mode 100644 test/ccured_olden/health/health.h
 create mode 100644 test/ccured_olden/health/list.c
 create mode 100644 test/ccured_olden/health/out.orig
 create mode 100644 test/ccured_olden/health/out.orig.msvc
 create mode 100644 test/ccured_olden/health/output
 create mode 100644 test/ccured_olden/health/poisson.c
 create mode 100644 test/ccured_olden/health/ssplain.c
 create mode 100644 test/ccured_olden/health/ssplain.h
 create mode 100755 test/ccured_olden/health/testit
 create mode 100644 test/ccured_olden/mst/.cvsignore
 create mode 100644 test/ccured_olden/mst/CVS/Entries
 create mode 100644 test/ccured_olden/mst/CVS/Repository
 create mode 100644 test/ccured_olden/mst/CVS/Root
 create mode 100644 test/ccured_olden/mst/HOWTO
 create mode 100644 test/ccured_olden/mst/Makefile
 create mode 100644 test/ccured_olden/mst/Makefile.plain
 create mode 100644 test/ccured_olden/mst/Makefile.ss
 create mode 100644 test/ccured_olden/mst/args.c
 create mode 100644 test/ccured_olden/mst/args.s
 create mode 100644 test/ccured_olden/mst/hash.c
 create mode 100644 test/ccured_olden/mst/hash.h
 create mode 100644 test/ccured_olden/mst/hash.s
 create mode 100644 test/ccured_olden/mst/main.c
 create mode 100644 test/ccured_olden/mst/makegraph.c
 create mode 100644 test/ccured_olden/mst/mst.h
 create mode 100644 test/ccured_olden/mst/out.orig
 create mode 100644 test/ccured_olden/mst/output
 create mode 100644 test/ccured_olden/mst/ssplain.c
 create mode 100644 test/ccured_olden/mst/ssplain.h
 create mode 100755 test/ccured_olden/mst/testit
 create mode 100644 test/ccured_olden/newbisort/.cvsignore
 create mode 100644 test/ccured_olden/newbisort/CVS/Entries
 create mode 100644 test/ccured_olden/newbisort/CVS/Repository
 create mode 100644 test/ccured_olden/newbisort/CVS/Root
 create mode 100644 test/ccured_olden/newbisort/HOWTO
 create mode 100644 test/ccured_olden/newbisort/Makefile
 create mode 100644 test/ccured_olden/newbisort/Makefile.orig
 create mode 100644 test/ccured_olden/newbisort/Makefile.plain
 create mode 100644 test/ccured_olden/newbisort/Makefile.ss
 create mode 100644 test/ccured_olden/newbisort/args.c
 create mode 100644 test/ccured_olden/newbisort/bitonic.c
 create mode 100644 test/ccured_olden/newbisort/node.h
 create mode 100644 test/ccured_olden/newbisort/proc.h
 create mode 100644 test/ccured_olden/newbisort/ssplain.c
 create mode 100644 test/ccured_olden/newbisort/ssplain.h
 create mode 100644 test/ccured_olden/newbisort/swap.c
 create mode 100644 test/ccured_olden/perimeter/.cvsignore
 create mode 100644 test/ccured_olden/perimeter/CVS/Entries
 create mode 100644 test/ccured_olden/perimeter/CVS/Repository
 create mode 100644 test/ccured_olden/perimeter/CVS/Root
 create mode 100644 test/ccured_olden/perimeter/Makefile
 create mode 100644 test/ccured_olden/perimeter/README
 create mode 100644 test/ccured_olden/perimeter/main.c
 create mode 100644 test/ccured_olden/perimeter/maketree.c
 create mode 100644 test/ccured_olden/perimeter/out.orig
 create mode 100644 test/ccured_olden/perimeter/output
 create mode 100644 test/ccured_olden/perimeter/perimeter.h
 create mode 100755 test/ccured_olden/perimeter/testit
 create mode 100644 test/ccured_olden/power/.cvsignore
 create mode 100644 test/ccured_olden/power/.gdbinit
 create mode 100644 test/ccured_olden/power/CVS/Entries
 create mode 100644 test/ccured_olden/power/CVS/Repository
 create mode 100644 test/ccured_olden/power/CVS/Root
 create mode 100644 test/ccured_olden/power/Makefile
 create mode 100644 test/ccured_olden/power/README
 create mode 100644 test/ccured_olden/power/build.c
 create mode 100644 test/ccured_olden/power/compute.c
 create mode 100644 test/ccured_olden/power/main.c
 create mode 100644 test/ccured_olden/power/out.orig
 create mode 100644 test/ccured_olden/power/output
 create mode 100644 test/ccured_olden/power/power.h
 create mode 100755 test/ccured_olden/power/testit
 create mode 100644 test/ccured_olden/rapportCompcert_all.txt
 create mode 100644 test/ccured_olden/treeadd/.cvsignore
 create mode 100644 test/ccured_olden/treeadd/CVS/Entries
 create mode 100644 test/ccured_olden/treeadd/CVS/Repository
 create mode 100644 test/ccured_olden/treeadd/CVS/Root
 create mode 100644 test/ccured_olden/treeadd/HOWTO
 create mode 100644 test/ccured_olden/treeadd/HOWTO.bak
 create mode 100644 test/ccured_olden/treeadd/Makefile
 create mode 100644 test/ccured_olden/treeadd/Makefile.plain
 create mode 100644 test/ccured_olden/treeadd/Makefile.ss
 create mode 100644 test/ccured_olden/treeadd/args.c
 create mode 100644 test/ccured_olden/treeadd/node.c
 create mode 100644 test/ccured_olden/treeadd/old-exe/CVS/Entries
 create mode 100644 test/ccured_olden/treeadd/old-exe/CVS/Repository
 create mode 100644 test/ccured_olden/treeadd/old-exe/CVS/Root
 create mode 100644 test/ccured_olden/treeadd/out.diff
 create mode 100644 test/ccured_olden/treeadd/out.orig
 create mode 100644 test/ccured_olden/treeadd/out_20_1
 create mode 100644 test/ccured_olden/treeadd/out_20_1.mac_cnt
 create mode 100644 test/ccured_olden/treeadd/out_20_1.mac_cnt_sil
 create mode 100644 test/ccured_olden/treeadd/out_20_1.mac_nocnt_sil
 create mode 100644 test/ccured_olden/treeadd/out_20_1.nm_nocnt
 create mode 100644 test/ccured_olden/treeadd/out_20_1.nwm_nocnt
 create mode 100644 test/ccured_olden/treeadd/out_22_1
 create mode 100644 test/ccured_olden/treeadd/out_22_1.mac_nocnt_sil
 create mode 100644 test/ccured_olden/treeadd/out_23_1
 create mode 100644 test/ccured_olden/treeadd/out_23_1.mac_nocnt_sil
 create mode 100644 test/ccured_olden/treeadd/out_25_1
 create mode 100644 test/ccured_olden/treeadd/out_25_1.mac_nocnt_sil
 create mode 100644 test/ccured_olden/treeadd/output
 create mode 100644 test/ccured_olden/treeadd/par-alloc.c
 create mode 100644 test/ccured_olden/treeadd/ssplain.c
 create mode 100644 test/ccured_olden/treeadd/ssplain.h
 create mode 100755 test/ccured_olden/treeadd/testit
 create mode 100644 test/ccured_olden/treeadd/tree.h
 create mode 100644 test/ccured_olden/tsp/.cvsignore
 create mode 100644 test/ccured_olden/tsp/CVS/Entries
 create mode 100644 test/ccured_olden/tsp/CVS/Repository
 create mode 100644 test/ccured_olden/tsp/CVS/Root
 create mode 100644 test/ccured_olden/tsp/Makefile
 create mode 100644 test/ccured_olden/tsp/README
 create mode 100644 test/ccured_olden/tsp/build.c
 create mode 100644 test/ccured_olden/tsp/main.c
 create mode 100644 test/ccured_olden/tsp/tsp.c
 create mode 100644 test/ccured_olden/tsp/tsp.h
 create mode 100644 test/ccured_olden/voronoi/.cvsignore
 create mode 100644 test/ccured_olden/voronoi/CVS/Entries
 create mode 100644 test/ccured_olden/voronoi/CVS/Repository
 create mode 100644 test/ccured_olden/voronoi/CVS/Root
 create mode 100644 test/ccured_olden/voronoi/Makefile
 create mode 100644 test/ccured_olden/voronoi/README
 create mode 100644 test/ccured_olden/voronoi/defines.h
 create mode 100644 test/ccured_olden/voronoi/newvor.c
 create mode 100644 test/ccured_olden/voronoi/output.c
 create mode 100644 test/ccured_olden/voronoi/vector.c

diff --git a/test/ccured_olden/COPYRIGHT b/test/ccured_olden/COPYRIGHT
new file mode 100644
index 000000000..3a53304a5
--- /dev/null
+++ b/test/ccured_olden/COPYRIGHT
@@ -0,0 +1,23 @@
+/* OLDEN parallel C for dynamic structures: compiler, runtime system
+   and benchmarks
+   
+   Copyright (C) 1994-1996 by Anne Rogers (amr@cs.princeton.edu) and
+   Martin Carlisle (mcc@cs.princeton.edu)
+   ALL RIGHTS RESERVED.
+
+   OLDEN is distributed under the following conditions:
+
+     You may make copies of OLDEN for your own use and modify those copies.
+
+     All copies of OLDEN must retain our names and copyright notice.
+
+     You may not sell OLDEN or distribute OLDEN in conjunction with a
+     commercial product or service without the expressed written consent of
+     Anne Rogers and Martin Carlisle.
+
+   THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+   PURPOSE.
+*/
+
diff --git a/test/ccured_olden/CVS/Entries b/test/ccured_olden/CVS/Entries
new file mode 100644
index 000000000..a8e10c791
--- /dev/null
+++ b/test/ccured_olden/CVS/Entries
@@ -0,0 +1,13 @@
+/COPYRIGHT/1.1/Mon Jun 11 21:20:00 2001//
+/README/1.1/Mon Jun 11 21:20:00 2001//
+D/bh////
+D/bisort////
+D/em3d////
+D/health////
+D/mst////
+D/perimeter////
+D/power////
+D/treeadd////
+D/tsp////
+D/voronoi////
+D/newbisort////
diff --git a/test/ccured_olden/CVS/Repository b/test/ccured_olden/CVS/Repository
new file mode 100644
index 000000000..d65135b75
--- /dev/null
+++ b/test/ccured_olden/CVS/Repository
@@ -0,0 +1 @@
+cil/test/olden
diff --git a/test/ccured_olden/CVS/Root b/test/ccured_olden/CVS/Root
new file mode 100644
index 000000000..35f411e97
--- /dev/null
+++ b/test/ccured_olden/CVS/Root
@@ -0,0 +1 @@
+/home/cvs-repository
diff --git a/test/ccured_olden/README b/test/ccured_olden/README
new file mode 100644
index 000000000..48157ffa1
--- /dev/null
+++ b/test/ccured_olden/README
@@ -0,0 +1,19 @@
+Olden v1.0 benchmark suite
+January 3, 1995
+
+Martin C. Carlisle
+
+see COPYRIGHT for copyright information
+
+Contains plain versions of the 10 benchmarks used in the PPoPP paper.
+
+KNOWN BUGS: (updated June 10, 1996)
+
+line 66 of health/health.c should read:
+    new->hosp.personnel = (int)pow(2.0, (double) (level - 1));
+instead of:
+    new->hosp.personnel = (int)pow(2, level - 1);
+
+This patch has not been applied and is not reflected in the data in the
+PPoPP submission.
+
diff --git a/test/ccured_olden/bh/.cvsignore b/test/ccured_olden/bh/.cvsignore
new file mode 100644
index 000000000..94c933eb4
--- /dev/null
+++ b/test/ccured_olden/bh/.cvsignore
@@ -0,0 +1,39 @@
+*.i
+*_all.c
+*cil.c
+*box.c
+code
+data.in
+data.out
+*.origi
+*_allinfer.c
+*_ppp.c
+code.cil
+code.box
+code.wildbox
+
+*.o
+*.obj
+*.exe
+*.pdb
+*.ilk
+*.cpp
+*.i
+*.s
+*.asm
+*cil.c
+*.rtl
+*box.c
+*infer.c
+*_ppp.c
+*.origi
+*.stackdump
+changes.out
+*_comb.c
+*cured.c
+*.optim.c
+ope.m
+dat.out
+changes
+*.browser
+*optimcured*
\ No newline at end of file
diff --git a/test/ccured_olden/bh/.gdbinit b/test/ccured_olden/bh/.gdbinit
new file mode 100644
index 000000000..123e0ab74
--- /dev/null
+++ b/test/ccured_olden/bh/.gdbinit
@@ -0,0 +1,3 @@
+file code.exe
+b main
+r
diff --git a/test/ccured_olden/bh/CVS/Entries b/test/ccured_olden/bh/CVS/Entries
new file mode 100644
index 000000000..acce0666b
--- /dev/null
+++ b/test/ccured_olden/bh/CVS/Entries
@@ -0,0 +1,23 @@
+/Readme/1.1/Thu Apr 26 07:13:27 2001//
+/allcfiles/1.1/Thu Oct 18 05:30:18 2001//
+/code.h/1.1/Thu Apr 26 07:13:27 2001//
+/data.cil.out/1.1/Wed Jun 13 16:19:10 2001//
+/grav.c/1.2/Sun Apr 29 05:21:42 2001//
+/input/1.1/Thu Apr 26 07:13:27 2001//
+/io.c/1.4/Tue Oct  9 00:17:00 2001//
+/load.c/1.3/Thu Jul 12 19:57:18 2001//
+/real.h/1.1/Thu Apr 26 07:13:27 2001//
+/stdinc.h/1.6/Tue Oct  9 00:17:00 2001//
+/vectmath.h/1.4/Mon Jul 23 19:46:26 2001//
+/data.in/1.1/Fri Nov  9 00:51:18 2001//
+/data.orig.out/1.1/Mon Nov 12 08:08:28 2001//
+/normalize.pl/1.2/Mon Nov 12 15:44:12 2001//
+/.cvsignore/1.14/Sat Jul 27 06:13:42 2002//
+/testit/1.1/Wed Dec 25 17:27:31 2002//
+/defs.h/1.12/Mon Jan  6 22:43:21 2003//
+/code.c/1.5/Wed Jan  8 06:10:33 2003//
+/Makefile/1.11/Sat Jan 11 05:01:09 2003//
+/getparam.c/1.5/Sat Jan 11 04:58:14 2003//
+/trusted_bh.c/1.2/Sat Jan 11 05:01:58 2003//
+/util.c/1.11/Sat Jan 11 04:59:49 2003//
+D
diff --git a/test/ccured_olden/bh/CVS/Repository b/test/ccured_olden/bh/CVS/Repository
new file mode 100644
index 000000000..ebfd8c044
--- /dev/null
+++ b/test/ccured_olden/bh/CVS/Repository
@@ -0,0 +1 @@
+cil/test/olden/bh
diff --git a/test/ccured_olden/bh/CVS/Root b/test/ccured_olden/bh/CVS/Root
new file mode 100644
index 000000000..35f411e97
--- /dev/null
+++ b/test/ccured_olden/bh/CVS/Root
@@ -0,0 +1 @@
+/home/cvs-repository
diff --git a/test/ccured_olden/bh/Makefile b/test/ccured_olden/bh/Makefile
new file mode 100644
index 000000000..bd2814297
--- /dev/null
+++ b/test/ccured_olden/bh/Makefile
@@ -0,0 +1,84 @@
+##############################################################################
+# MAKEFILE: compile tree-code program.                                       #
+#                                                                            #
+# Copyright (c) 1993, Joshua E. Barnes, Honolulu, HI.                        #
+# It's free because it's yours.                                              #
+##############################################################################
+
+# Compiler flags for development on SGI; not used on other systems.
+# single version: CFLAGS = -fullwarn -woff 269,302 -prototypes -O -float
+# double version: CFLAGS = -DDOUBLEPREC -fullwarn -woff 269,302 -prototypes -O
+
+# Standard compiler flags.  Double precision is the default because not
+# all available systems seem to have single-precision square root.
+#sm: orig: CFLAGS = -DDOUBLEPREC -O
+CFLAGS = -DDOUBLEPREC -O3
+LDFLAGS = -O3
+
+# CompCert
+CCOMP=../../../../ccomp
+CCOMPFLAGS=-dump-c
+
+CC=gcc -arch ppc                         # MacOS X
+#CC=gcc                                  # other systems
+
+CFLAGS=-O1 -Wall
+
+LIBS=                                    # MacOS X
+
+# Build a treecode.
+code.exe.compcert: code.compcert io.compcert load.compcert grav.compcert util.compcert getparam.compcert trusted_bh.compcert
+	$(CCOMP) $(LDFLAGS) -o code.exe.compcert code.compcert io.compcert load.compcert grav.compcert\
+		util.o getparam.compcert trusted_bh.compcert $(EXTRA_LIBS)
+
+code.compcert: code.c defs.h code.h stdinc.h
+	$(CCOMP) $(CCOMPFLAGS)  code.c
+
+io.compcert: io.c defs.h stdinc.h
+	$(CCOMP) $(CCOMPFLAGS)  io.c
+
+load.compcert: load.c defs.h stdinc.h
+	$(CCOMP) $(CCOMPFLAGS)  load.c
+
+grav.compcert: grav.c defs.h stdinc.h
+	$(CCOMP) $(CCOMPFLAGS) -grav.c
+
+code.exe: code.o io.o load.o grav.o util.o getparam.o trusted_bh.o
+	$(CC) $(LDFLAGS) -o code.exe code.o io.o load.o grav.o\
+		util.o getparam.o trusted_bh.o -lm $(EXTRA_LIBS)
+
+code.o: code.c defs.h code.h stdinc.h
+	$(CC) $(CFLAGS) -c code.c
+
+io.o: io.c defs.h stdinc.h
+	$(CC) $(CFLAGS) -c io.c
+
+load.o: load.c defs.h stdinc.h
+	$(CC) $(CFLAGS) -c load.c
+
+grav.o: grav.c defs.h stdinc.h
+	$(CC) $(CFLAGS) -c grav.c
+
+#  Utility routines etc.
+
+util.o: util.c stdinc.h
+	$(CC) $(CFLAGS) util.c
+
+util.compcert: util.c stdinc.h
+	$(CCOMP) $(CCOMPFLAGS) util.c
+
+# Added to help boxing
+trusted_bh.o: trusted_bh.c stdinc.h
+	$(CC) $(CFLAGS) -c trusted_bh.c
+
+getparam.o: getparam.c stdinc.h
+	$(CC) $(CFLAGS) -c getparam.c
+
+trusted_bh.compcert: trusted_bh.c stdinc.h
+	$(CCOMP) $(CCOMPFLAGS) trusted_bh.c
+
+getparam.compcert: getparam.c stdinc.h
+	$(CCOMP) $(CCOMPFLAGS) getparam.c
+
+clean: 
+	rm -f *.o *.lib *.exe *.obj *~ *cil.c *_comb.c *infer.c *cured.c *.i *cured*optim.c
\ No newline at end of file
diff --git a/test/ccured_olden/bh/Readme b/test/ccured_olden/bh/Readme
new file mode 100644
index 000000000..5034f5198
--- /dev/null
+++ b/test/ccured_olden/bh/Readme
@@ -0,0 +1,62 @@
+README  README  README  README  README  README  README  README  README  README
+
+								  22 June 1993
+
+    This is the fourth release of the hierarchical N-body program.  The
+algorithm used to compute gravitational forces has asymptotic complexity of
+O(N log N).  This is achieved by building a tree structure to represent the
+mass distribution and estimating forces by a partial recursive descent of this
+tree.  See "A Hierarchical O(N log N) Force Calculation Algorithm", by Joshua
+Barnes and Piet Hut, Nature, 324, 446, and "Error Analysis of a Tree Code", by
+Joshua Barnes and Piet Hut, Astrophysical Journal Supplement, 70, 389, for
+more information.
+
+    The code has been rewritten in ANSI C for greater portability.  Prototypes
+have been provided for all functions.  Several functions associated with tree
+construction have been simplified; the resulting code should be easier to
+mantain.  Force calculation has been made more accurate by incorporating a new
+opening-angle criterion, and faster by adding additional pointers to the tree
+structure.  Quadrupole corrections for body-cell interactions are now included
+as a run-time option; see "Performance Characteristics of Tree Codes", by Lars
+Hernquist, Astrophysical Journal Supplement, 64, 715.
+
+    The source files for the tree code have been bundled together for ease of
+distribution.  On a UNIX system, you can split this file simply by invoking
+the Bourne shell on it (use the sh command).  On other systems, you may have
+to edit this file and split it up by hand; note that file X is delimited by
+lines containing the message End of X.  Once you have split this file, you can
+compile it by running make on a UNIX system.  On other systems, you are on
+your own; take a look at the Makefile for hints.  Running the program with the
+default input parameters (type a <CR> to all prompts) will start a short
+calculation with a few particles to test things out.
+
+    These sources include a few files which you may find generally useful:
+"stdinc.h", a standard include file with common definitions, "vectmath.h", a
+set of macros for elementary vector and matrix operations, "real.h", a set of
+definitions for floating-point code, "getparam.c", a simple, standardized user
+interface, and "util.c", some miscellaneous utilities.  These are part of a
+larger collection of software for numerical experiments with gravitating
+systems.
+
+    NO WARRANTY is offered on the software supplied here -- use it at your own
+risk.  NO RESTRICTIONS are imposed on use and distribution of the code -- you
+are free to use this software for any application, modify it in any way, use
+pieces in other programs, and give it away to anyone else.  You are encouraged
+to extend these rights to others who receive this software from you, following
+the philosophy and intentions of the Free Software Foundation.
+
+    You are asked to include a brief acknowledgement in any scientific papers
+you write using this code; I would appreciate receiving preprints or reprints
+of such papers.  I would also appreciate receiving reports of bugs and/or
+problems encountered in porting this code to other machines.
+
+    Have fun and stay in touch.
+
+	Joshua E. Barnes			barnes@zeno.ifa.hawaii.edu
+
+	Institute for Astronomy			(808) 956-8138
+	University of Hawaii
+	2680 Woodlawn Drive
+	Honolulu, Hawaii  96822
+
+README  README  README  README  README  README  README  README  README  README
diff --git a/test/ccured_olden/bh/allcfiles b/test/ccured_olden/bh/allcfiles
new file mode 100644
index 000000000..6a04d2ac4
--- /dev/null
+++ b/test/ccured_olden/bh/allcfiles
@@ -0,0 +1,7 @@
+bhbox.c
+code.c
+getparam.c
+grav.c
+io.c
+load.c
+util.c
diff --git a/test/ccured_olden/bh/code.c b/test/ccured_olden/bh/code.c
new file mode 100644
index 000000000..ee3c08944
--- /dev/null
+++ b/test/ccured_olden/bh/code.c
@@ -0,0 +1,200 @@
+/****************************************************************************/
+/* CODE.C: hierarchical N-body code.                                        */
+/*                                                                          */
+/* Copyright (c) 1993 by Joshua E. Barnes, Honolulu, HI.                    */
+/* It's free because it's yours.                                            */
+/****************************************************************************/
+
+#define global /* nada */
+
+#include <stdlib.h>
+#include "code.h"
+
+/*
+ * Default values for input parameters.
+ */
+
+string defv[] = {
+
+    /* file names for input/output					    */
+    "in=",			/* Input file with initial conditions       */
+    "out=",			/* Output file of N-body frames             */
+
+    /* params to control N-body integration				    */
+    "dtime=0.03125",		/* Integration time-step		    */
+    "eps=0.025",		/* Potential softening parameter            */
+    "theta=1.0",		/* Cell subdivision tolerence               */
+    "usequad=false",		/* If true, use quad moments                */
+    "rsize=4.0",		/* Size of initial root cell                */
+    "options=",			/* Various control options                  */
+    "tstop=2.0",		/* Time to stop integration                 */
+    "dtout=0.25",		/* Data output interval			    */
+
+    /* params used if no input specified to make a Plummer model	    */
+    "nbody=1024",		/* Number of particles for test run         */
+    "seed=123",			/* Random number seed for test run          */
+
+    NULL,
+};
+
+string headline = "Hierarchical N-body Code";	/* default id for run       */
+
+local void startrun(void);			/* initialize system state  */
+local void stepsystem(void);			/* advance by one time-step */
+local void testdata(void);			/* generate test data       */
+local void pickshell(vector, real);		/* pick point on shell      */
+
+/*
+ * MAIN: toplevel routine for hierarchical N-body code.
+ */
+
+int main(int argc, string argv[])
+{
+    initparam(argv, defv);			/* setup parameter access   */
+    startrun();					/* set params, input data   */
+    initoutput();				/* begin system output      */
+    while (tnow < tstop - 1.0/(1024*freq))	/* while not past tstop     */
+	stepsystem();				/*   advance N-body system  */
+    stopoutput();				/* finish up output         */
+    return 0; // Change this to zero when the running time is 3.8s again
+}
+
+/*
+ * STARTRUN: startup hierarchical N-body code.
+ */
+
+local void startrun(void)
+{
+    infile = getparam("in");			/* set I/O file names       */
+    outfile = getparam("out");
+    freq = 1.0 / getrparam("dtime");		/* inverse timestep         */
+    eps = getrparam("eps");			/* softening length         */
+    theta = getrparam("theta");			/* force accuracy parameter */
+    usequad = getbparam("usequad");		/* flag for quad moments    */
+    rsize = getrparam("rsize");			/* initial size of root     */
+    options = getparam("options");		/* and control options      */
+    tstop = getrparam("tstop");			/* time to stop integration */
+    freqout = 1.0 / getrparam("dtout");		/* inverse output interval  */
+    if (! streq(infile, "")) {			/* was data file given?     */
+
+      inputdata();				/*   read inital data       */
+    } else {					/* make initial conds?      */
+	nbody = getiparam("nbody");		/*   get nbody parameter    */
+	if (nbody < 1)				/*     check input value    */
+	    error("startrun: nbody = %d is absurd\n", nbody);
+	srand((long) getiparam("seed"));	/*   set random generator   */
+	testdata();				/*   make test model        */
+    }
+    nstep = 0;					/* start counting steps     */
+    tout = tnow;				/* schedule first output    */
+}
+
+/*
+ * TESTDATA: generate Plummer model initial conditions for test runs,
+ * scaled to units such that M = -4E = G = 1 (Henon, Hegge, etc).
+ * See Aarseth, SJ, Henon, M, & Wielen, R (1974) Astr & Ap, 37, 183.
+ */
+
+#define MFRAC  0.999				/* cut off 1-MFRAC of mass  */
+
+local void testdata(void)
+{
+    real rsc, vsc, r, v, x, y;
+    vector cmr, cmv;
+    bodyptr p;
+
+    headline = "Hierarchical code: Plummer model";
+						/* supply default headline  */
+    tnow = 0.0;					/* reset elapsed model time */
+    bodytab = (bodyptr) allocate(nbody * sizeof(body));
+						/* alloc space for bodies   */
+    rsc = 3 * PI / 16;				/* set length scale factor  */
+    vsc = rsqrt(1.0 / rsc);			/* and recip. speed scale   */
+    CLRV(cmr);					/* init cm pos, vel         */
+    CLRV(cmv);
+    for (p = bodytab; p < bodytab+nbody; p++) {	/* loop over particles      */
+	Type(p) = BODY;				/*   tag as a body          */
+	Mass(p) = 1.0 / nbody;			/*   set masses equal       */
+	r = 1 / rsqrt(rpow(xrandom(0.0, MFRAC),	/*   pick r in struct units */
+			 -2.0/3.0) - 1);
+	pickshell(Pos(p), rsc * r);		/*   pick scaled position   */
+	ADDV(cmr, cmr, Pos(p));			/*   add to running sum     */
+	do {					/*   select from fn g(x)    */
+	    x = xrandom(0.0, 1.0);		/*     for x in range 0:1   */
+	    y = xrandom(0.0, 0.1);		/*     max of g(x) is 0.092 */
+	} while (y > x*x * rpow(1 - x*x, 3.5));	/*   using von Neumann tech */
+	v = rsqrt(2.0) * x/rpow(1 + r*r, 0.25);	/*   find v in struct units */
+	pickshell(Vel(p), vsc * v);		/*   pick scaled velocity   */
+	ADDV(cmv, cmv, Vel(p));			/*   add to running sum     */
+    }
+    DIVVS(cmr, cmr, (real) nbody);		/* normalize cm coords      */
+    DIVVS(cmv, cmv, (real) nbody);
+    for (p = bodytab; p < bodytab+nbody; p++) {	/* loop over particles      */
+	SUBV(Pos(p), Pos(p), cmr);		/*   offset by cm coords    */
+	SUBV(Vel(p), Vel(p), cmv);
+    }
+}
+
+/*
+ * PICKSHELL: pick a random point on a sphere of specified radius.
+ */
+
+local void pickshell(vector vec, real rad)
+{
+    int k;
+    real rsq, rsc;
+
+    do {					/* pick point in NDIM-space */
+        for (k = 0; k < NDIM; k++)		/*   loop over dimensions   */
+            vec[k] = xrandom(-1.0, 1.0);    	/*     pick from unit cube  */
+	DOTVP(rsq, vec, vec);			/*   compute radius squared */
+    } while (rsq > 1.0);                	/* reject if outside sphere */
+    rsc = rad / rsqrt(rsq);			/* compute scaling factor   */
+    MULVS(vec, vec, rsc);			/* rescale to radius given  */
+}
+
+/*
+ * STEPSYSTEM: advance N-body system one time-step.
+ */
+
+local void stepsystem(void)
+{
+    bodyptr p;
+    real dt;
+    vector dvel, dpos;
+
+    if (nstep == 0) {				/* about to take 1st step?  */
+	maketree(bodytab, nbody);		/*   build tree structure   */
+	nfcalc = n2bcalc = nbccalc = 0;		/*   zero counters          */
+	for (p = bodytab; p < bodytab+nbody; p++) {
+						/*   loop over all bodies   */
+	    hackgrav(p, Mass(p) > 0.0);		/*     get force on each    */
+	    nfcalc++;				/*     count force calcs    */
+	    n2bcalc += n2bterm;			/*     and 2-body terms     */
+	    nbccalc += nbcterm;			/*     and body-cell terms  */
+	}
+	output();				/*   do initial output      */
+    }
+    dt = 1.0 / freq;				/* set basic time-step      */
+    for (p = bodytab; p < bodytab+nbody; p++) { /* loop over all bodies     */
+	MULVS(dvel, Acc(p), 0.5 * dt);		/*   get velocity increment */
+	ADDV(Vel(p), Vel(p), dvel);		/*   advance v by 1/2 step  */
+	MULVS(dpos, Vel(p), dt);		/*   get positon increment  */
+	ADDV(Pos(p), Pos(p), dpos);		/*   advance r by 1 step    */
+    }
+    maketree(bodytab, nbody);			/* build tree structure     */
+    nfcalc = n2bcalc = nbccalc = 0;		/* zero counters            */
+    for (p = bodytab; p < bodytab+nbody; p++) { /* loop over bodies         */
+	hackgrav(p, Mass(p) > 0.0);		/*   get force on each      */
+	nfcalc++;				/*   count force calcs      */
+	n2bcalc += n2bterm;			/*   and 2-body terms       */
+	nbccalc += nbcterm;			/*   and body-cell terms    */
+    }
+    for (p = bodytab; p < bodytab+nbody; p++) {	/* loop over all bodies     */
+	MULVS(dvel, Acc(p), 0.5 * dt);          /*   get velocity increment */
+	ADDV(Vel(p), Vel(p), dvel);             /*   advance v by 1/2 step  */
+    }
+    nstep++;					/* count another time step  */
+    tnow = tnow + dt;				/* finally, advance time    */
+    output();					/* do major or minor output */
+}
diff --git a/test/ccured_olden/bh/code.h b/test/ccured_olden/bh/code.h
new file mode 100644
index 000000000..89b8a098e
--- /dev/null
+++ b/test/ccured_olden/bh/code.h
@@ -0,0 +1,60 @@
+/****************************************************************************/
+/* CODE.H: define various global things for code.c and io.c.                */
+/*                                                                          */
+/* Copyright (c) 1993 by Joshua E. Barnes, Honolulu, HI.                    */
+/* It's free because it's yours.                                            */
+/****************************************************************************/
+
+#include "defs.h"
+
+global string infile;			/* file name for snapshot input     */
+
+global string outfile;			/* file name for snapshot output    */
+
+global real freq;			/* inverse of integration timestep  */
+
+global real freqout;			/* output frequency                 */
+
+global real tstop;			/* time to stop calculation         */
+
+extern string headline;			/* message describing calculation   */
+
+global real tnow;			/* current value of time            */
+
+global real tout;			/* time of next output              */
+
+global int nstep;			/* number of time-steps             */
+
+global int nfcalc;			/* count force calculations         */
+
+global int n2bcalc;			/* count body-body interactions     */
+
+global int nbccalc;			/* count body-cell interactions     */
+
+global int nbody;			/* number of bodies in system       */
+
+global bodyptr bodytab;			/* points to array of bodies        */
+
+/*
+ * Global function prototypes.
+ */
+
+void initoutput(void);				/* open files for output    */
+void stopoutput(void);				/* close output files       */
+void inputdata(void);				/* read initial data file   */
+void maketree(bodyptr, int);			/* construct tree structure */
+void hackgrav(bodyptr, bool);			/* compute force on body    */
+void output(void);				/* perform output operation */
+
+/*
+ * Utility routines used in code.c and io.c.  These are defined in util.c
+ * and getparam.c, which must be compiled with same choice of precision.
+ */
+
+bool streq(string, string);			/* test string equality     */
+real xrandom(real, real);			/* generate a random number */
+void initparam(string *, string *);		/* initialize parameter pkg */
+string getparam(string);			/* get parameter as string  */
+int getiparam(string);				/* get parameter as integer */
+bool getbparam(string);				/* get parameter as bool    */
+real getrparam(string);				/* get parameter as real    */
diff --git a/test/ccured_olden/bh/data.in b/test/ccured_olden/bh/data.in
new file mode 100644
index 000000000..1901ba936
--- /dev/null
+++ b/test/ccured_olden/bh/data.in
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/ccured_olden/bh/data.orig.out b/test/ccured_olden/bh/data.orig.out
new file mode 100644
index 000000000..895eecb65
--- /dev/null
+++ b/test/ccured_olden/bh/data.orig.out
@@ -0,0 +1,462 @@
+
+Hierarchical code: Plummer model
+
+     nbody     dtime       eps     theta   usequad     dtout
+      1024   0.03125    0.0250      1.00     false    0.2500
+
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.000   -0.2605   -0.4941    208234        85       118
+
+              cm pos    0.0000    0.0000    0.0000
+              cm vel    0.0000    0.0000    0.0000
+              am vec    0.0040    0.0111    0.0039
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.031   -0.2605   -0.4945    211569        89       116
+
+              cm pos    0.0000    0.0000    0.0000
+              cm vel    0.0000    0.0000    0.0000
+              am vec    0.0040    0.0111    0.0039
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.062   -0.2606   -0.4949    213299        90       117
+
+              cm pos    0.0000    0.0000    0.0000
+              cm vel    0.0000   -0.0001    0.0000
+              am vec    0.0040    0.0111    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.094   -0.2606   -0.4954    213209        91       116
+
+              cm pos    0.0000    0.0000    0.0000
+              cm vel    0.0000   -0.0001    0.0000
+              am vec    0.0040    0.0111    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.125   -0.2606   -0.4957    214475        90       118
+
+              cm pos    0.0000    0.0000    0.0000
+              cm vel    0.0000   -0.0001    0.0000
+              am vec    0.0040    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.156   -0.2606   -0.4959    212360        87       119
+
+              cm pos    0.0000    0.0000    0.0000
+              cm vel    0.0000   -0.0001    0.0000
+              am vec    0.0040    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.188   -0.2606   -0.4961    215638        90       120
+
+              cm pos    0.0000    0.0000    0.0000
+              cm vel    0.0000   -0.0001    0.0000
+              am vec    0.0040    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.219   -0.2607   -0.4962    213907        90       118
+
+              cm pos    0.0000    0.0000    0.0000
+              cm vel    0.0000   -0.0001    0.0000
+              am vec    0.0039    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.250   -0.2606   -0.4966    211413        88       118
+
+              cm pos    0.0000    0.0000    0.0000
+              cm vel    0.0000   -0.0001    0.0000
+              am vec    0.0039    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.281   -0.2607   -0.4968    212516        90       116
+
+              cm pos    0.0000    0.0000    0.0000
+              cm vel    0.0000   -0.0001    0.0000
+              am vec    0.0039    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.312   -0.2606   -0.4971    212043        91       115
+
+              cm pos    0.0000    0.0000    0.0000
+              cm vel    0.0000   -0.0001   -0.0001
+              am vec    0.0039    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.344   -0.2606   -0.4974    210500        90       115
+
+              cm pos    0.0000    0.0000    0.0000
+              cm vel    0.0000   -0.0002   -0.0001
+              am vec    0.0039    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.375   -0.2605   -0.4976    210875        90       115
+
+              cm pos    0.0000    0.0000    0.0000
+              cm vel    0.0000   -0.0002   -0.0001
+              am vec    0.0040    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.406   -0.2605   -0.4976    211891        91       115
+
+              cm pos    0.0000    0.0000    0.0000
+              cm vel    0.0000   -0.0002   -0.0001
+              am vec    0.0040    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.438   -0.2606   -0.4975    212886        92       115
+
+              cm pos    0.0000   -0.0001    0.0000
+              cm vel    0.0000   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.469   -0.2606   -0.4975    214848        93       115
+
+              cm pos    0.0000   -0.0001    0.0000
+              cm vel    0.0000   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.500   -0.2604   -0.4976    212165        90       116
+
+              cm pos    0.0000   -0.0001    0.0000
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.531   -0.2605   -0.4974    212366        90       117
+
+              cm pos    0.0000   -0.0001    0.0000
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.562   -0.2606   -0.4971    212423        92       115
+
+              cm pos    0.0000   -0.0001    0.0000
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.594   -0.2606   -0.4969    212283        93       113
+
+              cm pos    0.0000   -0.0001    0.0000
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.625   -0.2604   -0.4969    211770        93       113
+
+              cm pos    0.0000   -0.0001    0.0000
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.656   -0.2604   -0.4966    213017        94       113
+
+              cm pos    0.0000   -0.0001    0.0000
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.688   -0.2605   -0.4964    211250        93       113
+
+              cm pos    0.0000   -0.0001    0.0000
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.719   -0.2604   -0.4964    211170        92       113
+
+              cm pos    0.0000   -0.0001    0.0000
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.750   -0.2604   -0.4962    210947        92       113
+
+              cm pos    0.0000   -0.0002   -0.0001
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.781   -0.2604   -0.4959    210270        92       112
+
+              cm pos    0.0000   -0.0002   -0.0001
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.812   -0.2604   -0.4957    210869        92       112
+
+              cm pos    0.0000   -0.0002   -0.0001
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.844   -0.2603   -0.4954    210822        93       112
+
+              cm pos    0.0000   -0.0002   -0.0001
+              cm vel   -0.0001   -0.0003   -0.0002
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.875   -0.2602   -0.4951    212697        95       112
+
+              cm pos    0.0000   -0.0002   -0.0001
+              cm vel   -0.0001   -0.0003   -0.0002
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.906   -0.2602   -0.4948    210581        93       112
+
+              cm pos   -0.0001   -0.0002   -0.0001
+              cm vel   -0.0002   -0.0003   -0.0002
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.938   -0.2603   -0.4943    209929        93       111
+
+              cm pos   -0.0001   -0.0002   -0.0001
+              cm vel   -0.0002   -0.0003   -0.0002
+              am vec    0.0039    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     0.969   -0.2603   -0.4939    212661        95       112
+
+              cm pos   -0.0001   -0.0002   -0.0001
+              cm vel   -0.0002   -0.0003   -0.0002
+              am vec    0.0039    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.000   -0.2603   -0.4935    212223        94       112
+
+              cm pos   -0.0001   -0.0002   -0.0001
+              cm vel   -0.0002   -0.0003   -0.0002
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.031   -0.2602   -0.4932    211476        92       113
+
+              cm pos   -0.0001   -0.0002   -0.0001
+              cm vel   -0.0002   -0.0003   -0.0002
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.062   -0.2601   -0.4930    212513        95       112
+
+              cm pos   -0.0001   -0.0002   -0.0001
+              cm vel   -0.0002   -0.0003   -0.0002
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.094   -0.2602   -0.4926    212473        96       111
+
+              cm pos   -0.0001   -0.0003   -0.0001
+              cm vel   -0.0002   -0.0003   -0.0001
+              am vec    0.0039    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.125   -0.2601   -0.4924    212418        94       112
+
+              cm pos   -0.0001   -0.0003   -0.0001
+              cm vel   -0.0002   -0.0003   -0.0001
+              am vec    0.0039    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.156   -0.2601   -0.4921    211307        94       111
+
+              cm pos   -0.0001   -0.0003   -0.0001
+              cm vel   -0.0003   -0.0003   -0.0001
+              am vec    0.0039    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.188   -0.2601   -0.4919    212029        96       110
+
+              cm pos   -0.0001   -0.0003   -0.0001
+              cm vel   -0.0003   -0.0003   -0.0002
+              am vec    0.0039    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.219   -0.2600   -0.4916    211871        95       111
+
+              cm pos   -0.0001   -0.0003   -0.0001
+              cm vel   -0.0003   -0.0003   -0.0002
+              am vec    0.0039    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.250   -0.2602   -0.4912    212729        93       113
+
+              cm pos   -0.0001   -0.0003   -0.0001
+              cm vel   -0.0003   -0.0002   -0.0002
+              am vec    0.0039    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.281   -0.2603   -0.4908    211198        91       115
+
+              cm pos   -0.0001   -0.0003   -0.0001
+              cm vel   -0.0003   -0.0002   -0.0002
+              am vec    0.0039    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.312   -0.2603   -0.4906    213544        93       115
+
+              cm pos   -0.0002   -0.0003   -0.0001
+              cm vel   -0.0003   -0.0002   -0.0002
+              am vec    0.0039    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.344   -0.2602   -0.4906    212351        92       114
+
+              cm pos   -0.0002   -0.0003   -0.0002
+              cm vel   -0.0003   -0.0002   -0.0002
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.375   -0.2603   -0.4903    211854        91       115
+
+              cm pos   -0.0002   -0.0003   -0.0002
+              cm vel   -0.0003   -0.0002   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.406   -0.2603   -0.4902    211998        91       115
+
+              cm pos   -0.0002   -0.0003   -0.0002
+              cm vel   -0.0003   -0.0002   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.438   -0.2604   -0.4900    210887        89       116
+
+              cm pos   -0.0002   -0.0003   -0.0002
+              cm vel   -0.0003   -0.0002   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.469   -0.2604   -0.4899    210486        88       117
+
+              cm pos   -0.0002   -0.0003   -0.0002
+              cm vel   -0.0003   -0.0001   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.500   -0.2604   -0.4897    210373        87       117
+
+              cm pos   -0.0002   -0.0003   -0.0002
+              cm vel   -0.0004   -0.0001   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.531   -0.2604   -0.4896    210691        88       117
+
+              cm pos   -0.0002   -0.0004   -0.0002
+              cm vel   -0.0004   -0.0002   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.562   -0.2603   -0.4895    211982        89       117
+
+              cm pos   -0.0002   -0.0004   -0.0002
+              cm vel   -0.0004   -0.0002    0.0000
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.594   -0.2602   -0.4894    213499        93       115
+
+              cm pos   -0.0003   -0.0004   -0.0002
+              cm vel   -0.0004   -0.0002    0.0000
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.625   -0.2602   -0.4892    214135        93       115
+
+              cm pos   -0.0003   -0.0004   -0.0002
+              cm vel   -0.0004   -0.0002    0.0000
+              am vec    0.0040    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.656   -0.2600   -0.4891    212530        93       113
+
+              cm pos   -0.0003   -0.0004   -0.0002
+              cm vel   -0.0004   -0.0002    0.0000
+              am vec    0.0040    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.688   -0.2601   -0.4889    212150        93       113
+
+              cm pos   -0.0003   -0.0004   -0.0002
+              cm vel   -0.0005   -0.0002   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.719   -0.2600   -0.4886    212527        94       113
+
+              cm pos   -0.0003   -0.0004   -0.0002
+              cm vel   -0.0005   -0.0002   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.750   -0.2599   -0.4882    214475        95       113
+
+              cm pos   -0.0003   -0.0004   -0.0002
+              cm vel   -0.0005   -0.0002   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.781   -0.2600   -0.4877    211398        91       114
+
+              cm pos   -0.0003   -0.0004   -0.0002
+              cm vel   -0.0005   -0.0001   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.812   -0.2601   -0.4874    212928        92       115
+
+              cm pos   -0.0004   -0.0004   -0.0002
+              cm vel   -0.0005   -0.0002   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.844   -0.2600   -0.4872    209464        86       117
+
+              cm pos   -0.0004   -0.0004   -0.0002
+              cm vel   -0.0005   -0.0002   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.875   -0.2600   -0.4871    207897        83       119
+
+              cm pos   -0.0004   -0.0004   -0.0002
+              cm vel   -0.0005   -0.0002   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.906   -0.2599   -0.4871    209291        84       119
+
+              cm pos   -0.0004   -0.0004   -0.0002
+              cm vel   -0.0005   -0.0001   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.938   -0.2599   -0.4870    208078        85       118
+
+              cm pos   -0.0004   -0.0004   -0.0002
+              cm vel   -0.0006   -0.0001   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     1.969   -0.2599   -0.4866    209032        86       117
+
+              cm pos   -0.0004   -0.0004   -0.0002
+              cm vel   -0.0006   -0.0001   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg
+     2.000   -0.2600   -0.4864    208927        85       118
+
+              cm pos   -0.0005   -0.0004   -0.0002
+              cm vel   -0.0006   -0.0001   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
diff --git a/test/ccured_olden/bh/data.out b/test/ccured_olden/bh/data.out
new file mode 100644
index 000000000..501f205e3
--- /dev/null
+++ b/test/ccured_olden/bh/data.out
@@ -0,0 +1,462 @@
+
+Hierarchical code: Plummer model
+
+     nbody     dtime       eps     theta   usequad     dtout     tstop
+      1024   0.03125    0.0250      1.00     false    0.2500    2.0000
+
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.000   -0.2605   -0.4941    208234        85       118      0.00
+
+              cm pos   -0.0000   -0.0000   -0.0000
+              cm vel   -0.0000   -0.0000    0.0000
+              am vec    0.0040    0.0111    0.0039
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.031   -0.2605   -0.4945    211569        89       116      0.00
+
+              cm pos    0.0000   -0.0000    0.0000
+              cm vel    0.0000   -0.0000   -0.0000
+              am vec    0.0040    0.0111    0.0039
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.062   -0.2606   -0.4949    213299        90       117      0.00
+
+              cm pos    0.0000   -0.0000   -0.0000
+              cm vel    0.0000   -0.0001    0.0000
+              am vec    0.0040    0.0111    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.094   -0.2606   -0.4954    213209        91       116      0.00
+
+              cm pos    0.0000   -0.0000    0.0000
+              cm vel   -0.0000   -0.0001   -0.0000
+              am vec    0.0040    0.0111    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.125   -0.2606   -0.4957    214475        90       118      0.00
+
+              cm pos    0.0000   -0.0000   -0.0000
+              cm vel   -0.0000   -0.0001   -0.0000
+              am vec    0.0040    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.156   -0.2606   -0.4959    212360        87       119      0.00
+
+              cm pos    0.0000   -0.0000   -0.0000
+              cm vel   -0.0000   -0.0001   -0.0000
+              am vec    0.0040    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.188   -0.2606   -0.4961    215638        90       120      0.00
+
+              cm pos    0.0000   -0.0000   -0.0000
+              cm vel   -0.0000   -0.0001   -0.0000
+              am vec    0.0040    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.219   -0.2607   -0.4962    213907        90       118      0.01
+
+              cm pos   -0.0000   -0.0000   -0.0000
+              cm vel   -0.0000   -0.0001   -0.0000
+              am vec    0.0039    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.250   -0.2606   -0.4966    211413        88       118      0.01
+
+              cm pos   -0.0000   -0.0000   -0.0000
+              cm vel   -0.0000   -0.0001   -0.0000
+              am vec    0.0039    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.281   -0.2607   -0.4968    212516        90       116      0.01
+
+              cm pos   -0.0000   -0.0000   -0.0000
+              cm vel   -0.0000   -0.0001   -0.0000
+              am vec    0.0039    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.312   -0.2606   -0.4971    212043        91       115      0.01
+
+              cm pos   -0.0000   -0.0000   -0.0000
+              cm vel   -0.0000   -0.0001   -0.0001
+              am vec    0.0039    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.344   -0.2606   -0.4974    210500        90       115      0.01
+
+              cm pos   -0.0000   -0.0000   -0.0000
+              cm vel   -0.0000   -0.0002   -0.0001
+              am vec    0.0039    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.375   -0.2605   -0.4976    210875        90       115      0.01
+
+              cm pos   -0.0000   -0.0000   -0.0000
+              cm vel   -0.0000   -0.0002   -0.0001
+              am vec    0.0040    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.406   -0.2605   -0.4976    211891        91       115      0.01
+
+              cm pos   -0.0000   -0.0000   -0.0000
+              cm vel   -0.0000   -0.0002   -0.0001
+              am vec    0.0040    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.438   -0.2606   -0.4975    212886        92       115      0.01
+
+              cm pos   -0.0000   -0.0001   -0.0000
+              cm vel   -0.0000   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.469   -0.2606   -0.4975    214848        93       115      0.01
+
+              cm pos   -0.0000   -0.0001   -0.0000
+              cm vel   -0.0000   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.500   -0.2604   -0.4976    212165        90       116      0.01
+
+              cm pos   -0.0000   -0.0001   -0.0000
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.531   -0.2605   -0.4974    212366        90       117      0.01
+
+              cm pos   -0.0000   -0.0001   -0.0000
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0040
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.562   -0.2606   -0.4971    212423        92       115      0.01
+
+              cm pos   -0.0000   -0.0001   -0.0000
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.594   -0.2606   -0.4969    212283        93       113      0.01
+
+              cm pos   -0.0000   -0.0001   -0.0000
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.625   -0.2604   -0.4969    211770        93       113      0.01
+
+              cm pos   -0.0000   -0.0001   -0.0000
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.656   -0.2604   -0.4966    213017        94       113      0.01
+
+              cm pos   -0.0000   -0.0001   -0.0000
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.688   -0.2605   -0.4964    211250        93       113      0.02
+
+              cm pos   -0.0000   -0.0001   -0.0000
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.719   -0.2604   -0.4964    211170        92       113      0.02
+
+              cm pos   -0.0000   -0.0001   -0.0000
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.750   -0.2604   -0.4962    210947        92       113      0.02
+
+              cm pos   -0.0000   -0.0002   -0.0001
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.781   -0.2604   -0.4959    210270        92       112      0.02
+
+              cm pos   -0.0000   -0.0002   -0.0001
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.812   -0.2604   -0.4957    210869        92       112      0.02
+
+              cm pos   -0.0000   -0.0002   -0.0001
+              cm vel   -0.0001   -0.0003   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.844   -0.2603   -0.4954    210822        93       112      0.02
+
+              cm pos   -0.0000   -0.0002   -0.0001
+              cm vel   -0.0001   -0.0003   -0.0002
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.875   -0.2602   -0.4951    212697        95       112      0.02
+
+              cm pos   -0.0000   -0.0002   -0.0001
+              cm vel   -0.0001   -0.0003   -0.0002
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.906   -0.2602   -0.4948    210581        93       112      0.02
+
+              cm pos   -0.0001   -0.0002   -0.0001
+              cm vel   -0.0002   -0.0003   -0.0002
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.938   -0.2603   -0.4943    209929        93       111      0.02
+
+              cm pos   -0.0001   -0.0002   -0.0001
+              cm vel   -0.0002   -0.0003   -0.0002
+              am vec    0.0039    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     0.969   -0.2603   -0.4939    212661        95       112      0.02
+
+              cm pos   -0.0001   -0.0002   -0.0001
+              cm vel   -0.0002   -0.0003   -0.0002
+              am vec    0.0039    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.000   -0.2603   -0.4935    212223        94       112      0.02
+
+              cm pos   -0.0001   -0.0002   -0.0001
+              cm vel   -0.0002   -0.0003   -0.0002
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.031   -0.2602   -0.4932    211476        92       113      0.02
+
+              cm pos   -0.0001   -0.0002   -0.0001
+              cm vel   -0.0002   -0.0003   -0.0002
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.062   -0.2601   -0.4930    212513        95       112      0.02
+
+              cm pos   -0.0001   -0.0002   -0.0001
+              cm vel   -0.0002   -0.0003   -0.0002
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.094   -0.2602   -0.4926    212473        96       111      0.02
+
+              cm pos   -0.0001   -0.0003   -0.0001
+              cm vel   -0.0002   -0.0003   -0.0001
+              am vec    0.0039    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.125   -0.2601   -0.4924    212418        94       112      0.03
+
+              cm pos   -0.0001   -0.0003   -0.0001
+              cm vel   -0.0002   -0.0003   -0.0001
+              am vec    0.0039    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.156   -0.2601   -0.4921    211307        94       111      0.03
+
+              cm pos   -0.0001   -0.0003   -0.0001
+              cm vel   -0.0003   -0.0003   -0.0001
+              am vec    0.0039    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.188   -0.2601   -0.4919    212029        96       110      0.03
+
+              cm pos   -0.0001   -0.0003   -0.0001
+              cm vel   -0.0003   -0.0003   -0.0002
+              am vec    0.0039    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.219   -0.2600   -0.4916    211871        95       111      0.03
+
+              cm pos   -0.0001   -0.0003   -0.0001
+              cm vel   -0.0003   -0.0003   -0.0002
+              am vec    0.0039    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.250   -0.2602   -0.4912    212729        93       113      0.03
+
+              cm pos   -0.0001   -0.0003   -0.0001
+              cm vel   -0.0003   -0.0002   -0.0002
+              am vec    0.0039    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.281   -0.2603   -0.4908    211198        91       115      0.03
+
+              cm pos   -0.0001   -0.0003   -0.0001
+              cm vel   -0.0003   -0.0002   -0.0002
+              am vec    0.0039    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.312   -0.2603   -0.4906    213544        93       115      0.03
+
+              cm pos   -0.0002   -0.0003   -0.0001
+              cm vel   -0.0003   -0.0002   -0.0002
+              am vec    0.0039    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.344   -0.2602   -0.4906    212351        92       114      0.03
+
+              cm pos   -0.0002   -0.0003   -0.0002
+              cm vel   -0.0003   -0.0002   -0.0002
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.375   -0.2603   -0.4903    211854        91       115      0.03
+
+              cm pos   -0.0002   -0.0003   -0.0002
+              cm vel   -0.0003   -0.0002   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.406   -0.2603   -0.4902    211998        91       115      0.03
+
+              cm pos   -0.0002   -0.0003   -0.0002
+              cm vel   -0.0003   -0.0002   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.438   -0.2604   -0.4900    210887        89       116      0.03
+
+              cm pos   -0.0002   -0.0003   -0.0002
+              cm vel   -0.0003   -0.0002   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.469   -0.2604   -0.4899    210486        88       117      0.03
+
+              cm pos   -0.0002   -0.0003   -0.0002
+              cm vel   -0.0003   -0.0001   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.500   -0.2604   -0.4897    210373        87       117      0.03
+
+              cm pos   -0.0002   -0.0003   -0.0002
+              cm vel   -0.0004   -0.0001   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.531   -0.2604   -0.4896    210691        88       117      0.03
+
+              cm pos   -0.0002   -0.0004   -0.0002
+              cm vel   -0.0004   -0.0002   -0.0001
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.562   -0.2603   -0.4895    211982        89       117      0.03
+
+              cm pos   -0.0002   -0.0004   -0.0002
+              cm vel   -0.0004   -0.0002   -0.0000
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.594   -0.2602   -0.4894    213499        93       115      0.04
+
+              cm pos   -0.0003   -0.0004   -0.0002
+              cm vel   -0.0004   -0.0002   -0.0000
+              am vec    0.0040    0.0110    0.0041
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.625   -0.2602   -0.4892    214135        93       115      0.04
+
+              cm pos   -0.0003   -0.0004   -0.0002
+              cm vel   -0.0004   -0.0002   -0.0000
+              am vec    0.0040    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.656   -0.2600   -0.4891    212530        93       113      0.04
+
+              cm pos   -0.0003   -0.0004   -0.0002
+              cm vel   -0.0004   -0.0002   -0.0000
+              am vec    0.0040    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.688   -0.2601   -0.4889    212150        93       113      0.04
+
+              cm pos   -0.0003   -0.0004   -0.0002
+              cm vel   -0.0005   -0.0002   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.719   -0.2600   -0.4886    212527        94       113      0.04
+
+              cm pos   -0.0003   -0.0004   -0.0002
+              cm vel   -0.0005   -0.0002   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.750   -0.2599   -0.4882    214475        95       113      0.04
+
+              cm pos   -0.0003   -0.0004   -0.0002
+              cm vel   -0.0005   -0.0002   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.781   -0.2600   -0.4877    211398        91       114      0.04
+
+              cm pos   -0.0003   -0.0004   -0.0002
+              cm vel   -0.0005   -0.0001   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.812   -0.2601   -0.4874    212928        92       115      0.04
+
+              cm pos   -0.0004   -0.0004   -0.0002
+              cm vel   -0.0005   -0.0002   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.844   -0.2600   -0.4872    209464        86       117      0.04
+
+              cm pos   -0.0004   -0.0004   -0.0002
+              cm vel   -0.0005   -0.0002   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.875   -0.2600   -0.4871    207897        83       119      0.04
+
+              cm pos   -0.0004   -0.0004   -0.0002
+              cm vel   -0.0005   -0.0002   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.906   -0.2599   -0.4871    209291        84       119      0.04
+
+              cm pos   -0.0004   -0.0004   -0.0002
+              cm vel   -0.0005   -0.0001   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.938   -0.2599   -0.4870    208078        85       118      0.04
+
+              cm pos   -0.0004   -0.0004   -0.0002
+              cm vel   -0.0006   -0.0001   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     1.969   -0.2599   -0.4866    209032        86       117      0.04
+
+              cm pos   -0.0004   -0.0004   -0.0002
+              cm vel   -0.0006   -0.0001   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
+      tnow       T+U       T/U     nttot     nbavg     ncavg   cputime
+     2.000   -0.2600   -0.4864    208927        85       118      0.04
+
+              cm pos   -0.0005   -0.0004   -0.0002
+              cm vel   -0.0006   -0.0001   -0.0001
+              am vec    0.0039    0.0110    0.0042
+
diff --git a/test/ccured_olden/bh/defs.h b/test/ccured_olden/bh/defs.h
new file mode 100644
index 000000000..d8b464329
--- /dev/null
+++ b/test/ccured_olden/bh/defs.h
@@ -0,0 +1,196 @@
+/****************************************************************************/
+/* DEFS.H: include file for hierarchical force calculation routines.  The   */
+/* definitions in this file are needed for load.c and grav.c; this file     */
+/* does not provide definitions for other parts of the N-body code.         */
+/*                                                                          */
+/* Copyright (c) 1993 by Joshua E. Barnes, Honolulu, HI.                    */
+/* It's free because it's yours.                                            */
+/****************************************************************************/
+ 
+#include "stdinc.h"
+#include "real.h"
+#include "vectmath.h"
+ 
+/*
+ * Body and cell data structures are used to represent the tree.  During
+ * tree construction, descendent pointers are stored in the subp arrays:
+ *
+ *          +-------------------------------------------------------------+
+ * root --> | CELL: mass, pos, next, rcrit2, more, subp:[/,o,/,/,/,/,o,/] |
+ *          +----------------------------------------------|---------|----+
+ *                                                         |         |
+ *     +---------------------------------------------------+         |
+ *     |                                                             |
+ *     |    +--------------------------------------+                 |
+ *     +--> | BODY: mass, pos, next, vel, acc, phi |                 |
+ *          +--------------------------------------+                 |
+ *                                                                   |
+ *     +-------------------------------------------------------------+
+ *     |
+ *     |    +-------------------------------------------------------------+
+ *     +--> | CELL: mass, pos, next, rcrit2, more, subp:[o,/,/,o,/,/,o,/] |
+ *          +--------------------------------------------|-----|-----|----+
+ *                                                      etc   etc   etc
+ *
+ * After the tree is complete, it is threaded to permit linear force
+ * calculation, using the next and more pointers.  The storage used for
+ * the subp arrays may be reused to store quadrupole moments.
+ *
+ *          +-----------------------------------------------+
+ * root --> | CELL: mass, pos, next:/, rcrit2, more:o, quad |
+ *          +---------------------------------------|-------+
+ *                                                  |
+ *     +--------------------------------------------+
+ *     |                             
+ *     |    +----------------------------------------+
+ *     +--> | BODY: mass, pos, next:o, vel, acc, phi |
+ *          +-----------------------|----------------+
+ *                                  |
+ *     +----------------------------+
+ *     |
+ *     |    +-----------------------------------------------+
+ *     +--> | CELL: mass, pos, next:/, rcrit2, more:o, quad |
+ *          +---------------------------------------|-------+
+ *                                                 etc
+ */
+ 
+/*
+ * NODE: data common to BODY and CELL structures.
+ */
+ 
+typedef struct _node {
+    short type;                 /* code for node type */
+    real mass;                  /* total mass of node */
+    vector pos;                 /* position of node */
+    struct _node *next;		/* link to next force-calc */   
+} node, *nodeptr;
+ 
+#define Type(x) (((nodeptr) (x))->type)
+#define Mass(x) (((nodeptr) (x))->mass)
+#define Pos(x)  (((nodeptr) (x))->pos)
+#define Next(x) (((nodeptr) (x))->next)
+
+/*
+ * BODY: data structure used to represent particles.
+ */
+ 
+#define BODY 01                 /* type code for bodies */
+ 
+typedef struct {
+    node bodynode;              /* data common to all nodes */
+    vector vel;                 /* velocity of body */
+    vector acc;                 /* acceleration of body */
+    real phi;                   /* potential at body */
+} body, *bodyptr;
+
+
+#define Body    body
+
+#if defined(CCURED) && !defined(NO_PERF_CHANGES)
+  extern  bodyptr node2body(nodeptr x);
+#else
+  // when not in box mode, or when we want to measure the original program's
+  // performance, use an ordinary cast
+  #define node2body(x)  ((bodyptr)(x))
+#endif
+
+#define Vel(x)  (((x))->vel)
+#define Acc(x)  (((x))->acc)
+#define Phi(x)  (((x))->phi)
+
+// Field accessor functions from nodeptr
+#define VelN(x)  ((node2body(x))->vel)
+#define AccN(x)  ((node2body(x))->acc)
+#define PhiN(x)  ((node2body(x))->phi)
+
+/*
+ * CELL: structure used to represent internal nodes of tree.
+ */
+
+#define CELL 02                 /* type code for cells */
+
+#define NSUB (1 << NDIM)        /* subcells per cell */
+
+#ifndef __SAFEUNION
+#define __SAFEUNION
+#endif
+
+typedef struct {
+    node cellnode;              /* data common to all nodes */
+    real rcrit2;                /* critical c-of-m radius^2 */
+    nodeptr more;		/* link to first descendent */
+    union {			/* shared storage for... */
+	nodeptr subp[NSUB];     /* descendents of cell */
+	matrix quad;            /* quad. moment of cell */
+    } __SAFEUNION stuff;
+} cell, *cellptr;
+
+#if defined(CCURED) && !defined(NO_PERF_CHANGES)
+  extern  cellptr node2cell(nodeptr x);
+#else
+  #define node2cell(x)  ((cellptr)(x))
+#endif
+
+#define Rcrit2(x) ((x)->rcrit2)
+#define More(x)   ((x)->more)
+#define Subp(x)   ((x)->stuff.subp)
+#define Quad(x)   ((x)->stuff.quad)
+
+#define Rcrit2N(x) ((node2cell(x))->rcrit2)
+#define MoreN(x)   ((node2cell(x))->more)
+#define SubpN(x)   ((node2cell(x))->stuff.subp)
+#define QuadN(x)   ((node2cell(x))->stuff.quad)
+
+/*
+ * Variables used in tree construction.
+ */
+
+global cellptr root;                    /* pointer to root cell             */
+
+global real rsize;                      /* side-length of root cell         */
+
+global int cellused;			/* count of cells in tree           */
+
+global int maxlevel;			/* count of levels in tree          */
+
+/*
+ * Parameters and results for gravitational calculation.
+ */
+
+global string options;                  /* various option keywords          */
+
+global real theta;                      /* accuracy parameter: 0.0 => exact */
+
+global bool usequad;		        /* use quadrupole corrections       */
+
+global real eps;                        /* potential softening parameter    */
+
+global int n2bterm;                     /* number 2-body of terms evaluated */
+
+global int nbcterm;                     /* num of body-cell terms evaluated */
+
+/*
+ * Utility routines used in load.c and grav.c.  These are defined in
+ * util.c, which must be compiled with the same choice of precision.
+ */
+
+bool scanopt(string, string);			/* find option in string    */
+real cputime(void);				/* return elapsed CPU time  */
+
+#ifdef CCURED
+  #pragma ccuredvararg("error", printf(1))
+  #pragma ccuredvararg("eprintf", printf(1))
+  #ifndef NO_PERF_CHANGES
+    #pragma ccuredalloc("allocate", zero, sizein(1))
+  #endif
+#endif
+void *allocate(int);				/* allocate and zero memory */
+
+real distv(vector, vector);			/* distance between vectors */
+
+void error(string, ...);			/* report error and exit    */
+
+void eprintf(string, ...);			/* printf to error stream   */
+
+
+
diff --git a/test/ccured_olden/bh/getparam.c b/test/ccured_olden/bh/getparam.c
new file mode 100644
index 000000000..9f3d1cf24
--- /dev/null
+++ b/test/ccured_olden/bh/getparam.c
@@ -0,0 +1,142 @@
+/****************************************************************************/
+/* GETPARAM.C: export version prompts user for values. Public routines:     */
+/* initparam(), getparam(), getiparam(), getbparam(), getrparam().          */
+/*                                                                          */
+/* Copyright (c) 1993 by Joshua E. Barnes, Honolulu, HI.                    */
+/* It's free because it's yours.                                            */
+/****************************************************************************/
+
+#include "stdinc.h"
+#include "real.h"
+#include <string.h>
+#include <stdlib.h>
+
+void *allocate(int);
+void error(string, ...);
+
+local string *defaults = NULL;			/* "name=value" strings     */
+
+/*
+ * INITPARAM: ignore arg vector, remember defaults.
+ */
+
+void initparam(string *argv, string *defv)
+{
+    defaults = defv;
+}
+
+/*
+ * GETPARAM: export version prompts user for value of name.
+ */
+
+local int scanbind(string *, string);
+local string extrvalue(string);
+
+string getparam(string name)
+{
+    int i, len;
+    string def;
+    char buf[128];
+
+    if (defaults == NULL)			/* check initialization     */
+	error("getparam: called before initparam\n");
+    i = scanbind(defaults, name);		/* find name in defaults    */
+    if (i < 0)
+	error("getparam: %s unknown\n", name);
+    def = extrvalue(defaults[i]);		/* extract default value    */
+    if (*def == NULLCHR)
+	fprintf(stderr, "enter %s: ", name);	/* prompt user for value    */
+    else
+	fprintf(stderr, "enter %s [%s]: ", name, def);
+    gets(buf);					/* read users response      */
+    len = strlen(buf);
+    if (len > 0)				/* if user gave a value...  */
+	return (strcpy((string) allocate(len+1), buf));
+    else					/* else return default      */
+	return (def);
+}
+
+/*
+ * GETIPARAM, ..., GETDPARAM: get int, long, bool, or double parameters.
+ */
+
+int getiparam(string name)
+{
+    string val;
+
+    for (val = ""; *val == NULLCHR; )		/* while nothing input      */
+	val = getparam(name);                   /*   obtain value from user */
+    return (atoi(val));                         /* convert to an integer    */
+}
+
+bool getbparam(string name)
+{
+    string val;
+
+    for (val = ""; *val == NULLCHR; )
+	val = getparam(name);
+    if (strchr("tTyY1", *val) != NULLCHR)		/* is value true? */
+        return (TRUE);
+    if (strchr("fFnN0", *val) != NULLCHR)		/* is value false? */
+        return (FALSE);
+    error("getbparam: %s=%s not bool\n", name, val);
+    return (FALSE);
+}
+
+real getrparam(string name)
+{
+    string val;
+
+    for (val = ""; *val == NULLCHR; )
+	val = getparam(name);
+    return ((real) atof(val));			/* convert & return real    */
+}
+
+/*
+ * SCANBIND: scan binding vector for name, return index.
+ */
+
+local bool matchname(string, string);
+
+local int scanbind(string bvec[], string name)
+{
+    int i;
+
+    for (i = 0; bvec[i] != NULL; i++)
+	if (matchname(bvec[i], name))
+	    return (i);
+    return (-1);
+}
+
+/*
+ * MATCHNAME: determine if "name=value" matches "name".
+ */
+
+local bool matchname(string bind, string name)
+{
+    char *bp, *np;
+
+    bp = bind;
+    np = name;
+    while (*bp == *np) {
+	bp++;
+	np++;
+    }
+    return (*bp == '=' && *np == NULLCHR);
+}
+
+/*
+ * EXTRVALUE: extract value from name=value string.
+ */
+
+local string extrvalue(string arg)
+{
+    char *ap;
+
+    ap = (char *) arg;
+    while (*ap != NULLCHR)
+	if (*ap++ == '=')
+	    return ((string) ap);
+    return (NULL);
+}
+
diff --git a/test/ccured_olden/bh/grav.c b/test/ccured_olden/bh/grav.c
new file mode 100644
index 000000000..06009df14
--- /dev/null
+++ b/test/ccured_olden/bh/grav.c
@@ -0,0 +1,123 @@
+/****************************************************************************/
+/* GRAV.C: routines to compute gravity. Public routines: hackgrav().        */
+/*                                                                          */
+/* Copyright (c) 1993 by Joshua E. Barnes, Honolulu, HI.                    */
+/* It's free because it's yours.                                            */
+/****************************************************************************/
+
+#include "defs.h"
+
+local void treescan(nodeptr);			/* does force calculation   */
+local bool subdivp(cellptr);			/* can cell be accepted?    */
+local void gravsub(nodeptr);			/* compute grav interaction */
+
+/*
+ * HACKGRAV: evaluate gravitational field on body p; checks to be
+ * sure self-interaction was handled correctly if intree is true.
+ */
+
+local bodyptr pskip;				/* skip in force evaluation */
+local vector pos0;				/* point to evaluate field  */
+local real phi0;				/* resulting potential      */
+local vector acc0;				/* resulting acceleration   */
+local bool skipself;				/* self-interaction skipped */
+local bool treeincest = FALSE;			/* tree-incest occured      */
+
+void hackgrav(bodyptr p, bool intree)
+{
+    pskip = p;					/* exclude p from f.c.      */
+    SETV(pos0, Pos(p));				/* set field point          */
+    phi0 = 0.0;					/* init total potential     */
+    CLRV(acc0);					/* and total acceleration   */
+    n2bterm = nbcterm = 0;			/* count body & cell terms  */
+    skipself = FALSE;				/* watch for tree-incest    */
+    treescan((nodeptr) root);			/* scan tree from root	    */
+    if (intree && ! skipself) {			/* did tree-incest occur?   */
+	if (! scanopt(options, "allow-incest"))	/*   treat as catastrophic? */
+	    error("hackgrav: tree-incest detected\n");
+	if (! treeincest)			/*   for the first time?    */
+	    eprintf("\n[hackgrav: tree-incest detected]\n");
+	treeincest = TRUE;			/*   don't repeat warning   */
+    }
+    Phi(p) = phi0;				/* store total potential    */
+    SETV(Acc(p), acc0);				/* and acceleration         */
+}
+
+/*
+ * TREESCAN: iterative routine to do force calculation, starting
+ * with node q, which is typically the root cell.
+ */
+
+local void treescan(nodeptr q)
+{
+    while (q != NULL) {				/* while not at end of scan */
+	if (Type(q) == CELL &&			/*   is node a cell and...  */
+	    subdivp(node2cell(q)))		/*   too close to accept?   */
+	    q = MoreN(q);			/*     follow to next level */
+	else {					/*   else accept this term  */
+	    if (q == (nodeptr) pskip)		/*     self-interaction?    */
+		skipself = TRUE;		/*       then just skip it  */
+	    else {				/*     not self-interaction */
+		gravsub(q);                     /*       so compute gravity */
+		if (Type(q) == BODY)
+		    n2bterm++;			/*       count body-body    */
+		else
+		    nbcterm++;			/*       count body-cell    */
+	    }
+	    q = Next(q);			/*     follow next link     */
+	}
+    }
+}
+
+/*
+ * SUBDIVP: decide if cell q is too close to accept as a single
+ * term.  Also sets qmem, dr, and drsq for use by gravsub.
+ */
+
+local cellptr qmem;                     	/* data shared with gravsub */
+local vector dr;				/* vector from q to pos0    */
+local real drsq;				/* squared distance to pos0 */
+
+local bool subdivp(cellptr q)
+{
+    SUBV(dr, Pos(q), pos0);			/* compute displacement     */
+    DOTVP(drsq, dr, dr);			/* and find dist squared    */
+    qmem = q;					/* remember we know them    */
+    return (drsq < Rcrit2(q));			/* apply standard rule      */
+}
+
+/*
+ * GRAVSUB: compute contribution of node q to gravitational field at
+ * point pos0, and add to running totals phi0 and acc0.
+ */
+
+local void gravsub(nodeptr q)
+{
+    real drab, phii, mor3;
+    vector ai, quaddr;
+    real dr5inv, phiquad, drquaddr;
+
+    if (q != (nodeptr) qmem) {                  /* cant use memorized data? */
+        SUBV(dr, Pos(q), pos0);                 /*   then compute sep.      */
+	DOTVP(drsq, dr, dr);			/*   and sep. squared       */
+    }
+    drsq += eps*eps;                            /* use standard softening   */
+    drab = rsqrt(drsq);
+    phii = Mass(q) / drab;
+    mor3 = phii / drsq;
+    MULVS(ai, dr, mor3);
+    phi0 -= phii;                               /* add to total grav. pot.  */
+    ADDV(acc0, acc0, ai);                       /* ... and to total accel.  */
+    if (usequad && Type(q) == CELL) {           /* if cell, add quad term   */
+        dr5inv = 1.0/(drsq * drsq * drab);      /*   form dr^-5             */
+        MULMV(quaddr, QuadN(q), dr);             /*   form Q * dr            */
+        DOTVP(drquaddr, dr, quaddr);            /*   form dr * Q * dr       */
+        phiquad = -0.5 * dr5inv * drquaddr;     /*   get quad. part of phi  */
+        phi0 = phi0 + phiquad;                  /*   increment potential    */
+        phiquad = 5.0 * phiquad / drsq;         /*   save for acceleration  */
+        MULVS(ai, dr, phiquad);                 /*   components of acc.     */
+        SUBV(acc0, acc0, ai);                   /*   increment              */
+        MULVS(quaddr, quaddr, dr5inv);   
+        SUBV(acc0, acc0, quaddr);               /*   acceleration           */
+    }
+}
diff --git a/test/ccured_olden/bh/input b/test/ccured_olden/bh/input
new file mode 100644
index 000000000..a72ad2d05
--- /dev/null
+++ b/test/ccured_olden/bh/input
@@ -0,0 +1,12 @@
+
+16384
+123
+
+0.025
+0.05
+1.0
+2.0
+5.0
+0.075
+0.25
+1
diff --git a/test/ccured_olden/bh/io.c b/test/ccured_olden/bh/io.c
new file mode 100644
index 000000000..cf2dbb9a7
--- /dev/null
+++ b/test/ccured_olden/bh/io.c
@@ -0,0 +1,252 @@
+/****************************************************************************/
+/* IO.C: I/O routines for export version of hierarchical N-body code.       */
+/* Public routines: inputdata(), initoutput(), stopoutput(), output().      */
+/*                                                                          */
+/* Copyright (c) 1993 by Joshua E. Barnes, Honolulu, HI.                    */
+/* It's free because it's yours.                                            */
+/****************************************************************************/
+
+#include "code.h"
+
+local void diagnostics(void);
+local void in_int(stream, int *);
+local void in_real(stream, real *);
+local void in_vector(stream, vector);
+local void out_int(stream, int);
+local void out_real(stream, real);
+local void out_vector(stream, vector);
+local void printvec(string, vector);
+
+/*
+ * INPUTDATA: read initial conditions from input file.
+ */
+
+void inputdata(void)
+{
+    stream instr;
+    permanent char headbuf[128];
+    int ndim;
+    bodyptr p;
+
+    instr = fopen(infile, "r");			/* open input stream        */
+    if (instr == NULL)
+	error("inputdata: cannot find file %s\n", infile);
+    sprintf(headbuf, "Hierarchical code: input file %s", infile);
+    headline = headbuf;
+    in_int(instr, &nbody);
+    if (nbody < 1)
+	error("inputdata: nbody = %d is absurd\n", nbody);
+    in_int(instr, &ndim);
+    if (ndim != NDIM)
+	error("inputdata: ndim = %d is absurd\n", ndim);
+    in_real(instr, &tnow);
+    bodytab = (bodyptr) allocate(nbody * sizeof(body));
+    for (p = bodytab; p < bodytab+nbody; p++)	/* loop over new bodies     */
+	Type(p) = BODY;				/*   init body type         */
+    for (p = bodytab; p < bodytab+nbody; p++)
+	in_real(instr, &Mass(p));
+    for (p = bodytab; p < bodytab+nbody; p++)
+	in_vector(instr, Pos(p));
+    for (p = bodytab; p < bodytab+nbody; p++)
+	in_vector(instr, Vel(p));
+    fclose(instr);				/* close input stream       */
+}
+
+/*
+ * INITOUTPUT: initialize output routines.
+ */
+
+local stream outstr;                  /* output stream pointer */
+
+void initoutput(void)
+{
+    printf("\n%s\n\n", headline);		/* print headline, params   */
+    printf("%10s%10s%10s%10s%10s%10s%10s\n", "nbody", "dtime", "eps",
+	   "theta", "usequad", "dtout", "tstop");
+    printf("%10d%10.5f%10.4f%10.2f%10s%10.4f%10.4f\n\n", nbody, 1/freq, eps,
+	   theta, usequad ? "true" : "false", 1/freqout, tstop);
+    if (*options != NULLCHR)                       /* print options, if any    */
+	printf("\tOptions: %s\n\n", options);
+    printf("\n");
+    if (*outfile != NULLCHR) {                     /* output file specified?   */
+        outstr = fopen(outfile, "w");           /*   setup output stream    */
+	if (outstr == NULL)
+	    error("initoutput: cannot open file %s\n", outfile);
+    } else
+        outstr = NULL;				/*   turn off data output   */
+}
+
+/*
+ * STOPOUTPUT: finish up after a run.
+ */
+
+void stopoutput(void)
+{
+    if (outstr != NULL)
+        fclose(outstr);
+}
+
+/*
+ * Counters and accumulators for output routines.
+ */
+
+local real mtot;                /* total mass of N-body system */
+local real etot[3];             /* binding, kinetic, potential energy */
+local matrix keten;		/* kinetic energy tensor */
+local matrix peten;		/* potential energy tensor */
+local vector cmphase[2];	/* center of mass coordinates */
+local vector amvec;		/* angular momentum vector */
+
+/*
+ * OUTPUT: compute diagnostics and output data.
+ */
+
+void output(void)
+{
+    int nttot, nbavg, ncavg;
+    bodyptr p;
+
+    diagnostics();				/* compute std diagnostics  */
+    nttot = n2bcalc + nbccalc;
+    nbavg = (int) ((real) n2bcalc / (real) nbody);
+    ncavg = (int) ((real) nbccalc / (real) nbody);
+    printf("%10s%10s%10s%10s%10s%10s%10s\n", "tnow", "T+U",
+	   "T/U", "nttot", "nbavg", "ncavg", "cputime");
+    printf("%10.3f%10.4f%10.4f%10d%10d%10d%10.2f\n\n", tnow, etot[0],
+	   etot[1]/etot[2], nttot, nbavg, ncavg, cputime());
+    if (scanopt(options, "tree-report")) {      /* report on tree structure */
+	printf("\t  %20s%20s%20s\n", "rsize", "cellused", "maxlevel");
+	printf("\t  %20.2f%20d%20d\n\n", rsize, cellused, maxlevel);
+    }
+    printvec("cm pos", cmphase[0]);
+    printvec("cm vel", cmphase[1]);
+    printvec("am vec", amvec);
+    printf("\n");
+    if (outstr != NULL &&			/* output stream open and   */
+	  (tout - 0.01 / freq) <= tnow) {	/* ...time for next output? */
+	out_int(outstr, nbody);			/*   write particle data    */
+	out_int(outstr, NDIM);
+	out_real(outstr, tnow);
+	for (p = bodytab; p < bodytab+nbody; p++)
+	    out_real(outstr, Mass(p));
+	for (p = bodytab; p < bodytab+nbody; p++)
+	    out_vector(outstr, Pos(p));
+	for (p = bodytab; p < bodytab+nbody; p++)
+	    out_vector(outstr, Vel(p));
+	fflush(outstr);				/*   drain output buffer    */
+	printf("\tParticle data written to file %s\n\n", outfile);
+	tout += 1 / freqout;			/*   schedule next data out */
+    }
+}
+
+/*
+ * DIAGNOSTICS: compute various dynamical diagnostics.
+ */
+
+local void diagnostics(void)
+{
+    register bodyptr p;
+    real velsq;
+    vector tmpv;
+    matrix tmpt;
+
+    mtot = 0.0;					/* zero total mass          */
+    etot[1] = etot[2] = 0.0;			/* zero total KE and PE     */
+    CLRM(keten);				/* zero ke tensor           */
+    CLRM(peten);				/* zero pe tensor           */
+    CLRV(cmphase[0]);				/* zero c. of m. position   */
+    CLRV(cmphase[1]);				/* zero c. of m. velocity   */
+    CLRV(amvec);				/* zero am vector           */
+    for (p = bodytab; p < bodytab+nbody; p++) {	/* loop over all particles  */
+	mtot += Mass(p);                        /*   sum particle masses    */
+	DOTVP(velsq, Vel(p), Vel(p));		/*   square vel vector      */
+	etot[1] += 0.5 * Mass(p) * velsq;	/*   sum current KE         */
+	etot[2] += 0.5 * Mass(p) * Phi(p);	/*   and current PE         */
+	MULVS(tmpv, Vel(p), 0.5 * Mass(p));	/*   sum 0.5 m v_i v_j      */
+	OUTVP(tmpt, tmpv, Vel(p));
+	ADDM(keten, keten, tmpt);
+	MULVS(tmpv, Pos(p), Mass(p));		/*   sum m r_i a_j          */
+	OUTVP(tmpt, tmpv, Acc(p));
+	ADDM(peten, peten, tmpt);
+	MULVS(tmpv, Pos(p), Mass(p));		/*   sum cm position        */
+	ADDV(cmphase[0], cmphase[0], tmpv);
+	MULVS(tmpv, Vel(p), Mass(p));		/*   sum cm momentum        */
+	ADDV(cmphase[1], cmphase[1], tmpv);
+	CROSSVP(tmpv, Pos(p), Vel(p));		/*   sum angular momentum   */
+	MULVS(tmpv, tmpv, Mass(p));
+	ADDV(amvec, amvec, tmpv);
+    }
+    etot[0] = etot[1] + etot[2];                /* sum KE and PE            */
+    DIVVS(cmphase[0], cmphase[0], mtot);        /* normalize cm coords      */
+    DIVVS(cmphase[1], cmphase[1], mtot);
+}
+
+/*
+ * Low-level input and output operations.
+ */
+
+local void in_int(stream str, int *iptr)
+{
+#ifdef CCURED
+  if((resetScanfCount(),
+      *iptr = ccured_fscanf_int(str, "%d"),
+      getScanfCount()) != 1) 
+    error("in_int: input conversion error\n");
+#else
+  if (fscanf(str, "%d", iptr) != 1)
+    error("in_int: input conversion error\n");
+#endif    
+}
+
+local void in_real(stream str, real *rptr)
+{
+    double tmp;
+
+#ifdef CCURED
+    if((resetScanfCount(),
+        tmp = ccured_fscanf_double(str, "%lf"),
+        getScanfCount()) != 1) 
+#else
+    if (fscanf(str, "%lf", &tmp) != 1)
+#endif      
+      error("in_real: input conversion error\n");
+    *rptr = tmp;
+}
+
+local void in_vector(stream str, vector vec)
+{
+    double tmpx, tmpy, tmpz;
+#ifdef CCURED
+    if((resetScanfCount(),
+        tmpx = ccured_fscanf_double(str, "%lf"),
+        tmpx = ccured_fscanf_double(str, "%lf"),
+        tmpx = ccured_fscanf_double(str, "%lf"),
+        getScanfCount()) != 3) 
+#else    
+      if (fscanf(str, "%lf%lf%lf", &tmpx, &tmpy, &tmpz) != 3)
+#endif      
+	error("in_vector: input conversion error\n");
+    
+    vec[0] = tmpx;    vec[1] = tmpy;    vec[2] = tmpz;
+}
+
+local void out_int(stream str, int ival)
+{
+    fprintf(str, "  %d\n", ival);
+}
+
+local void out_real(stream str, real rval)
+{
+    fprintf(str, " %21.14E\n", rval);
+}
+
+local void out_vector(stream str, vector vec)
+{
+    fprintf(str, " %21.14E %21.14E %21.14E\n", vec[0], vec[1], vec[2]);
+}
+
+local void printvec(string name, vector vec)
+{
+    printf("          %10s%10.4f%10.4f%10.4f\n",
+	   name, vec[0], vec[1], vec[2]);
+}
diff --git a/test/ccured_olden/bh/load.c b/test/ccured_olden/bh/load.c
new file mode 100644
index 000000000..ef1155fbf
--- /dev/null
+++ b/test/ccured_olden/bh/load.c
@@ -0,0 +1,287 @@
+/****************************************************************************/
+/* LOAD.C: routines to create tree.  Public routines: maketree().           */
+/*                                                                          */
+/* Copyright (c) 1993 by Joshua E. Barnes, Honolulu, HI.                    */
+/* It's free because it's yours.                                            */
+/****************************************************************************/
+ 
+#include "defs.h"
+ 
+local void newtree(void);			/* flush existing tree      */
+local cellptr makecell(void);			/* create an empty cell     */
+local void expandbox(bodyptr, int);		/* set size of root cell    */
+local void loadbody(bodyptr);			/* load body into tree      */
+local int subindex(bodyptr, cellptr);		/* compute subcell index    */
+local void hackcofm(cellptr, real);		/* find centers of mass     */
+local void setrcrit(cellptr, vector, real);	/* set cell's crit. radius  */
+local void threadtree(nodeptr, nodeptr);	/* set next and more links  */
+local void hackquad(cellptr);			/* compute quad moments     */
+
+/*
+ * MAKETREE: initialize tree structure for hierarchical force calculation
+ * from body array btab, which contains nbody bodies.
+ */
+ 
+local bool bh86, sw93;				/* use alternate criteria   */
+ 
+void maketree(bodyptr btab, int nbody)
+{
+    bodyptr p;
+ 
+    newtree();                                  /* flush existing tree, etc */
+    root = makecell();				/* allocate the root cell   */
+    CLRV(Pos(root));				/* initialize the midpoint  */
+    expandbox(btab, nbody);                     /* and expand cell to fit   */
+    maxlevel = 0;                               /* init count of levels     */
+    for (p = btab; p < btab+nbody; p++)         /* loop over bodies...      */
+        if (Mass(p) != 0.0)                     /*   exclude test particles */
+            loadbody(p);                        /*     and insert into tree */
+    bh86 = scanopt(options, "bh86");		/* set flags for alternate  */
+    sw93 = scanopt(options, "sw93");		/* ...cell opening criteria */
+    if (bh86 && sw93)				/* can't have both at once  */
+	error("maketree: options bh86 and sw93 are incompatible\n");
+    hackcofm(root, rsize);	                /* find c-of-m coordinates  */
+    threadtree((nodeptr) root, NULL);           /* add Next and More links  */
+    if (usequad)				/* including quad moments?  */
+	hackquad(root);                         /*   assign Quad moments    */
+}
+
+/*
+ * NEWTREE: reclaim cells in tree, prepare to build new one.
+ */
+ 
+local nodeptr freecell = NULL;          	/* list of free cells       */
+ 
+local void newtree(void)
+{
+    permanent bool firstcall = TRUE;
+    nodeptr p;
+ 
+    if (! firstcall) {                          /* tree data to reclaim?    */
+        p = (nodeptr) root;                     /*   start with the root    */
+        while (p != NULL)                       /*   loop scanning tree     */
+            if (Type(p) == CELL) {              /*     found cell to free?  */
+                Next(p) = freecell;             /*       link to front of   */
+                freecell = p;                   /*       ...existing list   */
+                p = MoreN(p);                    /*       scan down tree     */
+            } else                              /*     skip over bodies     */
+                p = Next(p);                    /*       go on to next      */
+    } else                                      /* first time through       */
+        firstcall = FALSE;                      /*   so just note it        */
+    root = NULL;                                /* flush existing tree      */
+    cellused = 0;                               /* reset cell count         */
+}
+ 
+/*
+ * MAKECELL: return pointer to free cell.
+ */
+ 
+local cellptr makecell(void)
+{
+    cellptr c;
+    int i;
+ 
+    if (freecell == NULL) {                     /* no free cells left?      */
+        c = (cellptr) allocate(sizeof(cell));   /*   allocate a new one     */
+        #ifndef NO_PERF_CHANGES
+          Type(c) = CELL;                         /* initialize cell type     */
+        #endif
+    } else {                                    /* use existing free cell   */
+        Type(freecell) = CELL;                  /* initialize cell type     */
+        c = node2cell (freecell);               /*   take one on front      */
+        freecell = Next(c);                     /*   go on to next one      */
+    }
+    #ifdef NO_PERF_CHANGES
+      Type(c) = CELL;                         /* initialize cell type     */
+    #endif
+    for (i = 0; i < NSUB; i++)                  /* loop over subcells       */
+        Subp(c)[i] = NULL;                      /*   and empty each one     */
+    cellused++;                                 /* count one more cell      */
+    return (c);
+}
+
+/*
+ * EXPANDBOX: find range of coordinate values (with respect to root)
+ * and expand root cell to fit.  The size is doubled at each step to
+ * take advantage of exact representation of powers of two.
+ */
+ 
+local void expandbox(bodyptr btab, int nbody)
+{
+    real xyzmax;
+    bodyptr p;
+    int k;
+ 
+    xyzmax = 0.0;
+    for (p = btab; p < btab+nbody; p++)
+	for (k = 0; k < NDIM; k++)
+	    xyzmax = MAX(xyzmax, rabs(Pos(p)[k] - Pos(root)[k]));
+    while (rsize < 2 * xyzmax)
+	rsize = 2 * rsize;
+}
+
+/*
+ * LOADBODY: descend tree and insert body p in appropriate place.
+ */
+ 
+local void loadbody(bodyptr p)
+{
+    cellptr q, c;
+    int qind, lev, k;
+    real qsize;
+ 
+    q = root;                                   /* start with tree root     */
+    qind = subindex(p, q);			/* get index of subcell     */
+    qsize = rsize;                              /* keep track of cell size  */
+    lev = 0;                                    /* count levels descended   */
+    while (Subp(q)[qind] != NULL) {             /* loop descending tree     */
+        if (Type(Subp(q)[qind]) == BODY) {      /*   reached a "leaf"?      */
+            c = makecell();                     /*     allocate new cell    */
+	    for (k = 0; k < NDIM; k++)		/*     initialize midpoint  */
+		Pos(c)[k] = Pos(q)[k] +		/*       offset from parent */
+		    (Pos(p)[k] < Pos(q)[k] ? - qsize : qsize) / 4;
+            Subp(c)[subindex(node2body(Subp(q)[qind]), c)] = Subp(q)[qind];
+                                                /*     put body in cell     */
+            Subp(q)[qind] = (nodeptr) c;        /*     link cell in tree    */
+        }
+        q = node2cell(Subp(q)[qind]);		/*   advance to next level  */
+	qind = subindex(p, q);			/*   get index to examine   */
+        qsize = qsize / 2;                      /*   shrink current cell    */
+        lev++;                                  /*   count another level    */
+    }
+    Subp(q)[qind] = (nodeptr) p;                /* found place, store p     */
+    maxlevel = MAX(maxlevel, lev);		/* remember maximum level   */
+}
+
+/*
+ * SUBINDEX: compute subcell index for body p in cell q.
+ */
+ 
+local int subindex(bodyptr p, cellptr q)
+{
+    int ind, k;
+ 
+    ind = 0;					/* accumulate subcell index */
+    for (k = 0; k < NDIM; k++)			/*   loop over dimensions   */
+        if (Pos(q)[k] <= Pos(p)[k])		/*     if beyond midpoint   */
+            ind += NSUB >> (k + 1);             /*       skip over subcells */
+    return (ind);
+}
+
+/*
+ * HACKCOFM: descend tree finding center-of-mass coordinates and
+ * setting critical cell radii.
+ */
+ 
+local void hackcofm(cellptr p, real psize)
+{
+    vector cmpos, tmpv;
+    int i, k;
+    nodeptr q;
+ 
+    Mass(p) = 0.0;                              /* init total mass...       */
+    CLRV(cmpos);                                /* and center of mass       */
+    for (i = 0; i < NSUB; i++)                  /* loop over subnodes       */
+	if ((q = Subp(p)[i]) != NULL) {         /*   does subnode exist?    */
+	    if (Type(q) == CELL)		/*     and is it a cell?    */
+		hackcofm(node2cell(q), psize/2); /*       find subcell cm    */
+	    Mass(p) += Mass(q);                 /*     sum total mass       */
+	    MULVS(tmpv, Pos(q), Mass(q));       /*     weight pos by mass   */
+	    ADDV(cmpos, cmpos, tmpv);           /*     sum c-of-m position  */
+	}
+    DIVVS(cmpos, cmpos, Mass(p));               /* rescale cms position     */
+    for (k = 0; k < NDIM; k++)			/* check tree structure...  */
+	if (cmpos[k] < Pos(p)[k] - psize/2 ||   /*   if out of bounds       */
+	      Pos(p)[k] + psize/2 <= cmpos[k])	/*   in either direction    */
+	    error("hackcofm: tree structure error\n");
+    setrcrit(p, cmpos, psize);                  /* set critical radius      */
+    SETV(Pos(p), cmpos);			/* and center-of-mass pos   */
+}
+
+/*
+ * SETRCRIT: assign critical radius for cell p, using center-of-mass
+ * position cmpos and cell size psize.
+ */
+
+local void setrcrit(cellptr p, vector cmpos, real psize)
+{
+    real rc, bmax2, dmin;
+    int k;
+
+    if (theta == 0.0)				/* exact force calculation? */
+	rc = 2 * rsize;				/*   always open cells      */
+    else if (bh86)				/* use old BH criterion?    */
+	rc = psize / theta;			/*   using size of cell     */
+    else if (sw93) {				/* use S&W's criterion?     */
+	bmax2 = 0.0;				/*   compute max distance^2 */
+	for (k = 0; k < NDIM; k++) {		/*   loop over dimensions   */
+	    dmin = cmpos[k] - (Pos(p)[k] - psize/2);
+						/*     dist from 1st corner */
+	    bmax2 += rsqr(MAX(dmin, psize - dmin));
+						/*     sum max distance^2   */
+	}
+	rc = rsqrt(bmax2) / theta;		/*   using max dist from cm */
+    } else {					/* use new criterion?       */
+	rc = psize / theta + distv(cmpos, Pos(p));
+						/*   use size plus offset   */
+    }
+    Rcrit2(p) = rsqr(rc);			/* store square of radius   */
+}
+
+/*
+ * THREADTREE: do a recursive treewalk starting from node p,
+ * with next stop n, installing Next and More links.
+ */
+ 
+local void threadtree(nodeptr p, nodeptr n)
+{
+    int ndesc, i;
+    nodeptr desc[NSUB+1];
+ 
+    Next(p) = n;                                /* link to next node        */
+    if (Type(p) == CELL) {                      /* any children to thread?  */
+        ndesc = 0;                              /*   count extant children  */
+        for (i = 0; i < NSUB; i++)              /*   loop over subnodes     */
+            if (SubpN(p)[i] != NULL)             /*     found a live one?    */
+                desc[ndesc++] = SubpN(p)[i];     /*       store in table     */
+        MoreN(p) = desc[0];                      /*   link to first child    */
+        desc[ndesc] = n;                        /*   end table with next    */
+        for (i = 0; i < ndesc; i++)             /*   loop over children     */
+            threadtree(desc[i], desc[i+1]);     /*     thread each w/ next  */
+    }
+}
+
+/*
+ * HACKQUAD: descend tree, evaluating quadrupole moments.  Note that this
+ * routine is coded so that the Subp() and Quad() components of a cell can
+ * share the same memory locations.
+ */
+ 
+local void hackquad(cellptr p)
+{
+    int i;
+    nodeptr psub[NSUB], q;
+    vector dr;
+    real drsq;
+    matrix drdr, Idrsq, tmpm;
+ 
+    for (i = 0; i < NSUB; i++)			/* loop over subnodes       */
+	psub[i] = Subp(p)[i];			/*   copy each to safety    */
+    CLRM(Quad(p));                              /* init quadrupole moment   */
+    for (i = 0; i < NSUB; i++)                  /* loop over subnodes       */
+	if ((q = psub[i]) != NULL) {		/*   does subnode exist?    */
+	    if (Type(q) == CELL)		/*     and is it a call?    */
+		hackquad(node2cell(q));		/*       process it first   */
+	    SUBV(dr, Pos(q), Pos(p));           /*     displacement vect.   */
+	    OUTVP(drdr, dr, dr);                /*     outer prod. of dr    */
+	    DOTVP(drsq, dr, dr);                /*     dot prod. dr * dr    */
+	    SETMI(Idrsq);                       /*     init unit matrix     */
+	    MULMS(Idrsq, Idrsq, drsq);          /*     scale by dr * dr     */
+	    MULMS(tmpm, drdr, 3.0);             /*     scale drdr by 3      */
+	    SUBM(tmpm, tmpm, Idrsq);            /*     form quad. moment    */
+	    MULMS(tmpm, tmpm, Mass(q));         /*     from cm of subnode   */
+	    if (Type(q) == CELL)                /*     if subnode is cell   */
+		ADDM(tmpm, tmpm, QuadN(q));      /*       add its moment     */
+	    ADDM(Quad(p), Quad(p), tmpm);       /*     add to qm of cell    */
+	}
+}
diff --git a/test/ccured_olden/bh/normalize.pl b/test/ccured_olden/bh/normalize.pl
new file mode 100755
index 000000000..102d372ff
--- /dev/null
+++ b/test/ccured_olden/bh/normalize.pl
@@ -0,0 +1,19 @@
+#!/usr/bin/perl -w
+# strip wallclock times from output so we can compare
+
+while ($line = <STDIN>) {
+  # I don't know if it's a problem, but we seem to get some difference
+  # about whether the 0's are positive or negative.. so let's change
+  # all occurrances of "-0.0000" to simply " 0.0000"
+  $line =~ s/-0\.0000/ 0.0000/g;
+
+  ($firstSix) = ($line =~ /^(\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+)\s+\S+$/);
+  if ($firstSix) {
+    # only output the first 6 columns
+    print ("$firstSix\n");
+  }
+  else {
+    # no match; print whole line
+    print ($line);
+  }
+}
diff --git a/test/ccured_olden/bh/real.h b/test/ccured_olden/bh/real.h
new file mode 100644
index 000000000..75e58d69f
--- /dev/null
+++ b/test/ccured_olden/bh/real.h
@@ -0,0 +1,106 @@
+/****************************************************************************/
+/* REAL.H: include file to support compile-time specification of precision  */
+/* in floating-point calculations.  If the DOUBLEPREC symbol is defined to  */
+/* the preprocessor, calculations are done in double precision; otherwise,  */
+/* they may be done in single precision.                                    */
+/*                                                                          */
+/* Rationale: ANSI C enables programmers to write single-precision code,    */
+/* but does not make it easy to change the precision of code at compile     */
+/* time, since different functions names are used for floating and double   */
+/* calculations.  This package introduces the keyword "real", which may be  */
+/* either float or double, and defines functions which compute with         */
+/* real-valued numbers.                                                     */
+/*                                                                          */
+/* Copyright (c) 1993 by Joshua E. Barnes, Honolulu, HI.                    */
+/* It's free because it's yours.                                            */
+/****************************************************************************/
+
+/*
+ * REAL, REALPTR: real-valued number, and pointer to same.
+ */
+
+#ifndef  DOUBLEPREC
+
+typedef float real, *realptr;
+
+#else
+
+typedef double real, *realptr;
+
+#endif
+
+/*
+ * RPROC: pointer to a real-valued function.  This prototype does
+ * not specify the types of any arguments.
+ */
+
+typedef real (*rproc)();
+
+/*
+ * Include math.h to get prototypes for standard C math functions.
+ */
+
+#include <math.h>
+
+/*
+ * Real-valued library functions.  Most of these are actually supplied
+ * by the standard C libraries.
+ */
+
+#ifndef  DOUBLEPREC
+
+#  define rsqrt  sqrtf
+#  define rsqr   fsqr
+#  define rsin   sinf
+#  define rcos   cosf
+#  define rtan   tanf
+#  define rasin  asinf
+#  define racos  acosf
+#  define ratan  atanf
+#  define ratan2 atan2f
+#  define rlog   logf
+#  define rexp   expf
+#  define rlog10 log10f
+#  define rsinh  sinhf
+#  define rcosh  coshf
+#  define rtanh  tanhf
+#  define rpow   powf
+#  define rabs   fabsf
+#  define rfloor floorf
+#  define rceil  ceilf
+
+/*
+ * These functions are not part of the standard C libraries.
+ */
+
+float fsqr(float);			/* square function		    */
+
+#else
+
+#  define rsqrt  sqrt
+#  define rsqr   sqr
+#  define rsin   sin
+#  define rcos   cos
+#  define rtan   tan
+#  define rasin  asin
+#  define racos  acos
+#  define ratan  atan
+#  define ratan2 atan2
+#  define rlog   log
+#  define rexp   exp
+#  define rlog10 log10
+#  define rsinh  sinh
+#  define rcosh  cosh
+#  define rtanh  tanh
+#  define rpow   pow
+#  define rabs   fabs
+#  define rfloor floor
+#  define rceil  ceil
+
+/*
+ * These functions are not part of the standard C libraries.
+ */
+
+double sqr(double);			/* square function		    */
+
+#endif
diff --git a/test/ccured_olden/bh/stdinc.h b/test/ccured_olden/bh/stdinc.h
new file mode 100644
index 000000000..7d0d99f47
--- /dev/null
+++ b/test/ccured_olden/bh/stdinc.h
@@ -0,0 +1,97 @@
+/****************************************************************************/
+/* STDINC.H: standard include file for C programs.                          */
+/*                                                                          */
+/* Copyright (c) 1993 by Joshua E. Barnes, Honolulu, HI.                    */
+/* It's free because it's yours.                                            */
+/****************************************************************************/
+
+/*
+ * If not already loaded, include stdio.h.
+ */
+
+#ifndef FILE
+#  include <stdio.h>
+#endif
+
+/*
+ * STREAM: a tasteful replacement for FILE *.
+ */
+
+typedef FILE *stream;
+
+/*
+ * NULL: denotes a pointer to nothing.
+ */
+
+#ifndef NULL
+#  define NULL 0
+#endif
+
+/*
+ * GLOBAL: make something global when declared at file level; a workaround
+ * for the Strict-Ref/Def-initialization model in ANSI C.  Predefine with
+ * something innocuous (like a comment) to actually allocate the data.
+ */
+
+#ifndef global
+#  define global extern
+#endif
+
+/*
+ * LOCAL: make something local when declared at file level.
+ */
+
+#define local static
+
+/*
+ * PERMANENT: make data declared within a function static.
+ */
+
+#define permanent static
+
+/*
+ * BOOL, TRUE and FALSE: standard names for logical values.
+ */
+
+#ifndef TRUE
+   typedef short int bool;
+#  define FALSE 0
+#  define TRUE  1
+#endif
+
+/*
+ * STRING: for null-terminated character strings.
+ */
+
+typedef char *string;
+// sm: this isn't a performance change, it's a boxing crankiness change
+#define NULLCHR 0
+
+/*
+ * PROC, IPROC: pointers to procedures and integer-valued functions.
+ */
+
+typedef void (*proc)();
+typedef int (*iproc)();
+
+/*
+ *  PI, etc.  --  mathematical constants
+ */
+
+#define   PI         3.14159265358979323846
+#define   TWO_PI     6.28318530717958647693
+#define   FOUR_PI   12.56637061435917295385
+#define   HALF_PI    1.57079632679489661923
+#define   FRTHRD_PI  4.18879020478639098462
+
+/*
+ *  ABS: returns the absolute value of its argument
+ *  MAX: returns the argument with the highest value
+ *  MIN: returns the argument with the lowest value
+ */
+
+#define   ABS(x)       (((x) < 0) ? -(x) : (x))
+#define   MAX(x,y)     (((x) > (y)) ? (x) : (y))
+#define   MIN(x,y)     (((x) < (y)) ? (x) : (y))
+
+
diff --git a/test/ccured_olden/bh/t.out b/test/ccured_olden/bh/t.out
new file mode 100644
index 000000000..fb9d37d0e
--- /dev/null
+++ b/test/ccured_olden/bh/t.out
@@ -0,0 +1,462 @@
+
+Hierarchical code: Plummer model
+
+     nbody     nbody     dtime     dtime       eps       eps     theta
+      1024   0.03125    0.0250      1.00     false    0.0000    0.0000
+
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.000   -0.2605   -0.4941    208234        85       118      0.00
+
+              cm pos    0.0000    0.0000    0.0000
+              cm vel    0.0000    0.0000    0.0000
+              am vec389878422291490397703532363838372957298630836310583829481040641106834769576818099195699704101879631937750115697603016463285311330468738817905192360225013760.0000-20133801167155037325873435901952.0000    0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.031   -0.2605   -0.4945    211569        89       116      0.00
+
+              cm pos48767523418596704838523946240732817085722217120112445882955090940174783491954759580198817590747865525311087993955204647833281515592585841124673085889618013847552.0000   -0.0000   -0.0000
+              cm vel    0.0000   -0.0000    0.0000
+              am vec1559236002703774781021278153871856315038382557752792736683869239689689036392574782890254419095632625220214596570955325121650716821745262456633791107947124940398935007346099179645105137569424172018554827397930584451172298405685470573741803483135862466270638747854944830385951648776192.0000-2440213101955252164764871308604279706618905144693668439643070676519663768507696241138708085832026275121811611967136537777542436519701974614016.0000   -0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.062   -0.2606   -0.4949    213299        90       117      0.01
+
+              cm pos    0.0000   -0.0000    0.0000
+              cm vel    0.0000-59895636067774350999802060694796748793832479178531276624501570931901147191978903998797094450874790314219459403379011595168279797604476932033300509092028858118249159129140068208362592551338686730024901419420884197145543791729844646848781005668704382099371294815839075222644724858880.0000-34304238178392950207535507133362209821902207889607483682089075151755707595496927664474092813783398015223065446303850270623229965194082751029829057245842250731094016.0000
+              am vec   -0.0000    0.0000   -0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.094   -0.2606   -0.4954    213209        91       116      0.01
+
+              cm pos993351373657076610062312278610554488534848731779782051627008.0000    0.0000-1118429463701675004166438727081989400588012830642169445393367040.0000
+              cm vel   -0.00001585488814076009121115235303854341157810423314372413222796102290009989368447283916006261266276278410773098926643004648243979996411223785702280162904634372242876872108434991304556939983997976894184226482289262496438803898943600119361274014595750417965118622564688757121215375186329600.000019081946387294468538983897080928707648685678081325571021978053292334133644518624518107413086208.0000
+              am vec    0.0000-1052177637002965011136512.0000    0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.125   -0.2606   -0.4957    214475        90       118      0.01
+
+              cm pos   -0.0000    0.0000-2302699907111971357846485514152419491468807814108223906017032377374227981869015717886039696953247825910868765310976.0000
+              cm vel-15507023057431145584565206457665247866817949289667375154357635978154825289910164352381842258913727693829009709173430125334544217761458477764531171623672700685829938676620090702262248564363444092928.00001229858773826100404973380226814223889095307742350714935231516126060487709192395267739090579310853010481524182411640591646460762296357852990674110125002654917720972780950718889540664250010801546101240516252270592.0000   -0.0000
+              am vec    0.0000    0.0022346444089834345117428848079358572499482380273334106571722441585638578168266752.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.156   -0.2606   -0.4959    212360        87       119      0.01
+
+              cm pos315921480765813379089838780091228970007395801379080371735261734862731027216739443148219556090994157732966814789913461059703725772528759757672071285717336064.0000-141259921440297382698655734668343831625855342291566246901055488.000082593600281560438693094027403777947973968116005409601641297845784918959006160639746528136088554574683678221271040.0000
+              cm vel-4633822142057183858197369124544939560116510065121526501724042717035591477898487686152006247597188881958265726378706767535675305089429388411932175731349037063598448888583815168.0000    0.0000    0.0000
+              am vec-3986756325765554751178454067643019324664159843216872557177762016988286941764021137382434923953830640315188084610358347806277632.0000-473363046102399837125588658668705710424574587720697404562895807652025236969343698054745390760567196189116864184986178458052959250756111857922780635472048854457811495568474457760813153893501852178505007104.0000   -0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.188   -0.2606   -0.4961    215638        90       120      0.01
+
+              cm pos    0.0000    0.0000    0.0000
+              cm vel    0.0000    0.0000-715402636198797069701822383327363708052875939146530282568918901271078556048028349820618460494773931288880317520285883627978755879496318976.0000
+              am vec-13240639590929336102736471851418567661077666965175740458314592350710026001932396745522968121539503492339335306307686658086998950117663248149989180110225302093824.0000-4794368498948739564077828211221176487838842148215254315752251028576322570107431802779970902357249241757358193089742748237257425705341825318912.000015181075527895958806204102198713781288132931207305370313588684089996542314275071087747648185925542104706401467105280.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.219   -0.2607   -0.4962    213907        90       118      0.02
+
+              cm pos358304390221261030736494761262053873660818104605297471591777894910417593068265034855970239229512879832172748484651053980740868777455823682265763784091719812371261401648209163827194656525896630860429610269318442939702758948732928.0000353895558253845751255480850176210835386783235723651047855262247300602546428580449972907194718561432416957328592586525713713543738288710263101372734729893544445334077064984994004331842447814794113414869286912.0000   -0.0000
+              cm vel    0.000051478538076260147609324661887119700695360463938271445206883256722393008705007960879990682351577196189942401520994524698703970322516498232387577598885819083662497103847677801529344.0000   -0.0000
+              am vec-2623136701653195585794141396966373988766431089320327325512851627951458911761685020848908852791993066747540922418249024231102800628933611617991255288583884211595261667627200034514219164331431632516633984209102807608072009350581701268326711698539104549017223168.0000    0.0000   -0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.250   -0.2606   -0.4966    211413        88       118      0.02
+
+              cm pos32715052170377176594144725452710740791518547863861068996544730670845835402420285664334223583903115815470293942793507050350314662384000024692879342744314576896.0000   -0.0000-1559078566300162717897624445844426298177825521814863628001995701650865276586616064838724715736735303976513235205622778647748834406008785464562399987654831628091392.0000
+              cm vel   -0.0000222211318481829860678065401797560246642410464069412484897981019091358610186742724957661876450484048016953147300859823541994042469704025130967227963711523127296.0000   -0.0000
+              am vec-7173881670514734427194339338834689155953107117676251548042953916401736462513284053275335345910655176557449450234347893935181468515192285319928422038080816945336365875200.0000    0.0000-1222427404997770496.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.281   -0.2607   -0.4968    212516        90       116      0.02
+
+              cm pos-190029402056222696118782436139960735564162265781213373117275130186929497395388587607668177533553689346918346401915950264223165522544402414138961194593170087811052328760227189147310043968527191429996144591575166383403894695118992117872760167267138791212597602584916305084723576700928.0000-763061469521186.6250   -0.0000
+              cm vel    0.0000    0.0000-29372985744500523738562497950096264916629543960484823952841942898144712689601378691847509486023812811600048904492537924588527545221120.0000
+              am vec   -0.0000   -0.0000888146957076605102712107714052858211248176709741229376596680386667010953515136398978201012036207720967899486504353792.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.312   -0.2606   -0.4971    212043        91       115      0.02
+
+              cm pos-56546462200310022635210794849254085278148558263149032795056990675297068685400113023412567467653873022679640642441778815215756300360936002823501503987858536860205783938986022755823716644370605113412881909177909248.0000   -0.00006518995959258198466527212648524087444843462826259134659770362685670292204873719409889266784459025898514815407271806118295106582441292528586198089728.0000
+              cm vel113365132101979339298439168.000040837337821099740386253318931908230731427261783763678138675485347459456111784318155839335620698390205295125871651830430986261004342955090998671682525483274951913682547834250659812343705387748174144975643495990151120314006555112110438708684777881958753970494322615580058102853310995234816.0000-8271750520762773995180801771142763397805276936763268243366875234304.0000
+              am vec2922994468943541006620166639828598784.0000    0.0000    0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.344   -0.2606   -0.4974    210500        90       115      0.02
+
+              cm pos   -0.0000 -124.6407   -0.0000
+              cm vel6001819926036494290396528636023431924287041337318797951557538297274228215829326924370269899804458218267917746898252635012800710793236406634913564339412057263219685601441695035486388235884363930423570447393211424627537416506878060179127121863581958913436680192.0000   -0.0000    0.0001
+              am vec-3616773584374425841520239327954730268919795568642617746685502830801977654140787702108258304.0000-17386008495170032302230932870364231267158793823681212144426257156810689781776193319519682095527647564732216296385580162351104.0000    0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.375   -0.2605   -0.4976    210875        90       115      0.03
+
+              cm pos2484951936182915939417650167293582724522865089712214449518269978333360855952949864882409235751676682406952510210730300793260417254407361992406406486142649929988112884851321153109027287875188929070190872093523968.000089096239.684914519619128271487631551311402708094746386123370103629738911006697714366936369692802519082946346894333470654118828400119095834784700536924158005148682390368039961302568130281231160037675013437675226927240766657046133401953992212792190784134853982776668574142958099065021364722313179432046219684074695426048.0000
+              cm vel    0.00001321925753339103592200945594347848231593167993063395553238947539443752334911885331741651426889625115526987976265724384000081879538984241927075766446857244064164042371884723962221993978458485897078667818306837091429577570210296639782912.000019214147284816494530652208901903192512506453848938485916535163999675637217361920.0000
+              am vec    0.000026832853489418133022093533133522353356202036261107217342778065459939669750884069516715770433592392699731518550215226919980327876361046418999421970629047837287469088742572910055363612365837799612605821616128.0000944627768013246909517781238529406765616539506746837900828021751330179475535898434725081997673045276300669862172626963198915512379436416658464981617980674719101713706751604134951190603514917356104919176721907463432779275866353962324941576536239408672250375602585290166423662948719263744.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.406   -0.2605   -0.4976    211891        91       115      0.03
+
+              cm pos-145575734455450364390472888281562841702172131216353354919018758144.0000   -0.0000622760459361952476629674378378173396657941815856958669448454635169078311463552565140269950167526938971978437845038045518301699163977219264421650572721628742539452357495116145285267480298592424001860163305251716124585640173420163960194680116183616414810112.0000
+              cm vel   -0.0000923700119237036720235647948747547839435585794791057287852300742220346349609020501063401987420995638060982960145300145070678322694056049460091003514912768.0000-18294819220685837696386822316717600220831646794078562039109252334423737867032859209016289840028348211245766683355146370761638079889408.0000
+              am vec84347896327438881900052766466094709687673292339452185986411625762302043149371797140992412050233672879430002654873176331135417133230456832.0000-439341592299408492625434987462656.0000    0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.438   -0.2606   -0.4975    212886        92       115      0.03
+
+              cm pos    0.0000    0.00003089595385953746065442452617603829264784115340557570073893083220019746389601923125306099819014408928728460261413130286448599337970230360374606287697704899476917078776610552358951359457963065142322839697971172830347264.0000
+              cm vel-329754580980891486875747407375417575549365006054651412541380858093092833236753232182935608982610086547059580161161764354540732778152662735873363150284541204465529022054400.0000    0.0000-103908830512218744660734417026510660636683529613176344879145339835827789821477605598862081173816880993536011703299222197177873706756423950260081212376475576962630395223674613279398128768210447066198305316554712659809736067804825356611937484447016276170358144475141767168.0000
+              am vec-31866279385416210773197142884352.0000    0.0000   -0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.469   -0.2606   -0.4975    214848        93       115      0.03
+
+              cm pos7224111724422352714706235080250833347141246886409821722436692968139213874949223839424959914086834197560825502689656832.0000   -0.0000-61004628683756041022000656218347090928915513690597207830009953393258936961112967336602035687760415488747545844167404088156866605169963816519057052476477663168951437148726187534070660568166733161264522997276683412674977858869901069662585161501785708032394022658214325125120.0000
+              cm vel    0.0000    0.00001954954516231289424576512.0000
+              am vec-273419625010818823566465413951660052879423655285233148219008706695468924252535459513871368804581393274781985851066578743489288276074747789949731114227911219402877728777528125588263110507291847793943656156506115918925662257152.0000    0.0000-1419446172356323986265259071534187198843349828649060229773435121435455683497202587656473703437101381860968430194523179331770880587120234391104573589785262145733125536681200041556668823907422175232.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.500   -0.2604   -0.4976    212165        90       116      0.03
+
+              cm pos   -0.0000164831660687959733322187964384399317580615495122205387064395991022895132439839585050034176.0000    0.0000
+              cm vel   -0.0000    0.0000    0.0000
+              am vec    0.0000   -0.0000-4326436889443077377991583136081893394707706993321142780323953279764799793203977581628386726378402151236658116644301492989625244742716065013750500503568215320334217162769253120206559104041576948072025084561757995792804087152835886106907275067291754174099832685197353455703818240.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.531   -0.2605   -0.4974    212366        90       117      0.04
+
+              cm pos-5193655565329048664186489695833408905410542795749977352019413639742264802079070467861701581047278790017197708622277812436534317797960080267601019267814992026942272468677267778799849039391345508605107568407095595352487970040793540836282005483196673171051481706401574114270759498797424261075403014144.0000   -0.00002245171591305709517270312065310942262311464955758713693770069707995536528478576423585354757863318392276576881182944084886553432461025326177341089384784301639560974165087558350940546846860459689382716782850359415304093503821844837256275357871481509573167487194595754796198682510003263540319320276992.0000
+              cm vel    0.0000-20480988340732831768688924713361652143823980336974905474272608050801331518846861208535451802632401768666690617509984848014475264.0000   -0.0000
+              am vec-13085257721087411874583299039155978240.000028218186104472249195448653391568103714894530797884471996153495462735308208602978677778134005106387951319375323996257085554688.0000    0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.562   -0.2606   -0.4971    212423        92       115      0.04
+
+              cm pos1237944920454925237806384815732575008781172737613407986615582720.0000    0.0000-3631909347976786029364103215641341758871692200141574411717313145054141828711550533320831994042892088522420936078370939982084507622032624998344170562001489677099640615779734152245660797122182643712.0000
+              cm vel-48415551309695701869275528936262100829732248746471718912.0000-45947345104457839174024441671867282844378394525894107202340067245400328964000989745081832824886382098464888706900980825121129989659817981032869841265322577918018239596078533208488496070656.0000   -0.0000
+              am vec   -0.00004129892291571269031986152478601425957049434438530552949959045368530568985117032191588330424859486246287473919309054155039478644736.00001081892199566021437263454574179525904867591578918243907745180876668332189806064484098191745459060349141250355762012871711844982852117271723067099041727818489118636904524943046060579810234971736623808512.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.594   -0.2606   -0.4969    212283        93       113      0.04
+
+              cm pos-1905025499151980034274534469510169958183059726500390841066136964584857044595008769483832775855757328868765739951565412159263311805689378283822856776293361039664752566992896.0000-18513680079660101951614321723674450322087698153924574957787525369758710122880996463101277685092974592.0000-34668040130561827018028167481500511513173163893890814855804555544421044200301242613014729079885399568859168737854867235643450768762682660956178060745389500292195388606373919512804742090441767635283717878972416.0000
+              cm vel    0.000015196951813461841521486836701756956444224784853043472160684046690647345415258299606291181347180308664850570968817091314870783992977099570040345054092861926102818687180028861911716827199242418377219961620622109576309460896548766071974088591420837080289752944580953196135514790168625152.000073554904292334743059715730810303602435661306680354774229327446824869118773461089173702460071928588404979370313608541723509082525406656287643985300302649540648731481451251740266150249905893364060668324763505203491298413935555574550679062173518529617194487345327992464715672028159465999727033844768964608.0000
+              am vec-684197197245369380398698148637883055842570268576757364617298949449267921781171801975276829201855225528320.0000-101744418212194207272053357245629914515538029536942357335986220181249137161741167925112262217088664669032302481415162247186608761084695649663825827839191677270482323076073977140992774265312718186910950787052359436270235436365878711934550292538851328.0000   -0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.625   -0.2604   -0.4969    211770        93       113      0.04
+
+              cm pos    0.0000477331350524916948053883772533839128147297411143853893076742726311758736792767174763256895458672495066463879183880747854582352839947965489037557840421389341612462045821594521556459536974348288.0000   -0.0000
+              cm vel-2858268226850200346502218383360.0000    0.0000-2907011599666720609852821602358022994135563500065076026248411292895751132492574529244655633249813397504.0000
+              am vec    0.0000-6531189342130129070000606521798601487918648691487720724594371643455948782894424711116425641185310518667203477884735480097030217328391130496538172147552148206137835283709270612273699664117397375383197648578713395658650373702578796921425494016.0000-68667070982252915723296702559193038560287981944082791399757306142237668333667034347778320748130935054072547814251025111934915682925339040550628950325566279759769915211704604078479980904811981684055542081132630501814512996647644042941678205978129496143621587001442857564241920.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.656   -0.2604   -0.4966    213017        94       113      0.04
+
+              cm pos   -0.0000   -0.0000   -0.0000
+              cm vel    0.0000   -0.0000750590408672451273437300408836574839027921292052670349195709767494793619393454218523365641587041784622753423705585876767321892764964924163371587839599634649299654248543362077075142218505781248.0000
+              am vec   -0.0000-13723471631533968294277467902175311036416.00001483758922498238013885805186613205816736559669268686995754441163775919388535175792833681310410619463417637317680574765383078543996818093787967728736890272570506895503083446918402517893756334261234953860792458609848630254067934258081421275875940666980649450958118218366976.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.688   -0.2605   -0.4964    211250        93       113      0.05
+
+              cm pos   -0.0000198174628871799517542138597507510961620835701551283799098466077037228119215914968513405186723670892610408156771537536223387415406585739079755883116708009272694747820311183360.0000-131324276297875931264929471087299892847514892244626681282688551648691616888001457114016177119227008467708400249163901084212992038296428336859749707148174328998330709756320508948310180026343874550108307712889137762960733682472664844214972149441046375946663939539494681513165526439468119799877706186752.0000
+              cm vel124034099279727094654203020633441177035091783218463709800993364625044003959514490457768757657726074391096296807294941918385930240.00003659564859968775261092082239720636556249203956012581449105408.000076241262963115679898798988812839344826385170285935382413786461902228635394912538601201241714092174577819370601331114548713789162841440256.0000
+              am vec-179674443543109063378572009866384474121168792461839681103739438547174628457367728363144452845382658219414837980312560310995123291864300818192462580437808178192575021246363489617810535917232689115815673860633034015933202432.0000   -0.0000    0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.719   -0.2604   -0.4964    211170        92       113      0.05
+
+              cm pos145181572433379571777139946417325705919906499813137239162026588627570142377672704.0000    0.0000    0.0000
+              cm vel-14699411899733106689748807015162959158928574151927680508283408582610553651996271049668200329027069014474383340647890531969702835931813294041310400068088607643420501257001311114625024.0000-9521153043431234469315064285137440158695082669030622056319028334025512244630488595266122214451398817990054436067606528.0000   -0.0000
+              am vec-12045879150450533245385545559568586746363904.0000   -0.0000282370292201227098153047249690389638229877729824366991622295073783734645635477603339207504681661661280265855802808138464704624240728435159978684445067601007176778669674535023631286380807247004502997493334363881735695800196660870713966592.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.750   -0.2604   -0.4962    210947        92       113      0.05
+
+              cm pos    0.00004016150150127866080115702772697064343311599368161510930366079707739755527702397349223712354183244031626000751060270526274828774967655549975664954845997684685101945345426985074177099767327076598845399690291969151723560978972620821288546335293145907562122021799087395967262474788208158390393595184524820480.0000   -0.0000
+              cm vel1623189956441278890339236934590139261744004405015153945450634855413269570561470320887698089531442018085140098312501085601792.000039614144650989338516600720234197699261284939531927656808969818614988261754401233520680503491425535440871903308118818892451938910743213451645617276982956705919381497071532482391941976057150696547496879359093165331853237281185630670459238489668986583272840060850842221795403059025249361970855936.000019953842142340906105848235594528849920.0000
+              am vec   -0.0000101020281520834370545282970034795196376647900805355916366570812334772584448.0000    0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.781   -0.2604   -0.4959    210270        92       112      0.05
+
+              cm pos183216982574229823237929135776530763138372743348947347847026123070316598326169552160156796080224372210078933304712113237936839361582251484913999522092189287920693811526827844777238394731292944111275086008511741418370272922046088137072969984249954304.00004542087181785447321837764608.0000   -0.0000
+              cm vel   -0.0000   -0.0000-31389825249711979418716765108862686175677335591130706700028969363859640627826770203814328510285646950663891739634364801403484790013768484673669254271581293757402632498440338281667791145469165721764370850192277306809766477227059966738999644301095448274307186749670227019777301380514726088487563159404544.0000
+              am vec   -0.000047261817541080303488270043079981915504463622506656891202599058486139865388841418916956824506728448.0000-1288919023974797694999492118209282202558885036231325367462064947274027872132933953918428957658462369874349504167565234741960793244693243531359562674296471905720890227637767943591331742727452311439175983089013751808.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.812   -0.2604   -0.4957    210869        92       112      0.05
+
+              cm pos    0.0000   -0.0000   -0.0000
+              cm vel    0.0000-125363259473055671997958481619760307697368431794277880196569756912553936311224492964687569714221449790105838943734880632212773343123762005566579673883000863683772416.0000-1993462524.7853
+              am vec-443473364127565922047863933948357433712444532126085085956266669375488.0000-11713846823645734.000040470663841389663140511168328625478295313993293916996211176312269992282671807520592456708047757531392063952577053136105135635736447146994174442347093059106198404785907061019413148924469559573450659463168.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.844   -0.2603   -0.4954    210822        93       112      0.06
+
+              cm pos-452830899921176980625258599874812581697407939791561300037248272083638882389536192638724097049870575558046905964216985306497728560281436158111544920302200243413808997976456564051352410165130960347123112420688265162793846704202738036632758225910943242566376620032.0000   -0.0000-247511551281747162911845622313133480945357510273788577407812528727874976532452267474747118830624855354826667900188835672150381755289635005635704818441915912019357393169444994670613704924042705783897473165551845591667246506817135575040.0000
+              cm vel-1614028238200568527225314018603691985082252555144765878547514977979183585991442048962735855006715178879941287426527095903896541289105883967727431925130110731116120428733928127228600955970340777000695607583019739051316355576870198624932331520.0000-2601782495214573201114218113189376022825707404027140790035993004190098787307709002135351360492659029673200698993994305539388077270377680283551657607722909371116523437933800933356646162735615921228457871774803825172407225579946901504.0000    0.0000
+              am vec    0.0000   -0.0000   -0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.875   -0.2602   -0.4951    212697        95       112      0.06
+
+              cm pos    0.0000   -0.0000   -0.0000
+              cm vel-19306661078617178572224813626024776810283247475658843957761955076648689450881868930119045198143300505031129624938927233912212011985853796459698205029703609690121029440877560352624804919152470801348425013005673612234551401268513147028321410519535382177078103244800.0000143692216243397104163039105913045535485765615616.0000-1576070982493234714555901213991383788026837513132711553659830272.0000
+              am vec    0.00001660143119630844461519604255393637825986158357748963861762983166230499084409832766705060288154216208265287014277989390098829036785072853526199379928128242321538046142824029298509043571893903239026120647268112223540710376892492388665539137529010204825095987753249813001404416.0000-35347515084456870874061659067740772364112036557987124746872056727607627972778271378707235362132772643254059070743702210677691440983551764157998676574208.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.906   -0.2602   -0.4948    210581        93       112      0.06
+
+              cm pos   -0.0000    0.0000   -0.0000
+              cm vel   -0.0000-15247983296560167778211932486244175892736743727315918995683864287940855201792.0000-2042115773287014409525195569174679107691145344266070067382924354266339546800861614316835983554118203040470648672251757898394844818929420302672771570196283392.0000
+              am vec    0.0000    0.0000-5566552186488478500528006169116694511119799672381501876947652390499892715784927199341987602890752.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.938   -0.2603   -0.4943    209929        93       111      0.06
+
+              cm pos    0.0000641205551613691206880303639445048366115608121902868990187146794379122326538620092652091641681582240467759787189987370818689717364112598421028018358598922488416452376441067598800030393883453317684973257496012437585920.0000   -0.0000
+              cm vel-24724659289366587858294886602115186074016934183324274803344506056653279780018234227723166095291868765029101687505518039060589202196688699213144962341303524523032320482483137744760319247857050439346238205550816181354496.0000-1119539020855603051504330137968398282241153721107890093671038417468094790807690867702688539579545090159083432565236956306906287139789201512641872499354908014526820893089245805637467743427359508941484622391083272323057329448997102164667698953132049547624689845189578110855430228917178430002600869888.0000-454864934728744038083034251920848382049822504127291308337963210625178898542033120895153030023650330623712798830119522040115257281012213740349486183105180447180083791228300972089694437601864071547328641953014014906106676480169762610778463039815380288008022632682935020197732193870700589185284056251629568.0000
+              am vec27573568503517059612360030070320201203712.0000   -0.000022559461730324852197697168407153972405887776561437623314537676993837897947060384071216824610286001472386192283366731464737261503413164239163750532003693737298453769688210004869946971945051357184.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     0.969   -0.2603   -0.4939    212661        95       112      0.06
+
+              cm pos   -0.0000-36072800456023979874988372895794798295976563261308928.0000    0.0000
+              cm vel-317601098528199476059069237855858684610872686976871767562721824287458184753783230640344668875149619938207619414727194450446640648804920659592264069916583590157316395904822085974127074449470660473017863617544723233239924793926828345779081600206650752276365312.0000    0.000034616983.9001
+              am vec-11873884539013573106688102081826956595495800772419848370340636494041758194447527612770538906281643421466624.0000-415573802432.6354   -0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.000   -0.2603   -0.4935    212223        94       112      0.07
+
+              cm pos-361349128.0290-180489240100535258692298298120580773637905896082720313266266035855500783144171592328663292694721485960782812352747157594259640844588824073220048866957476675814000489792350424037698361645665131063670976273972283165983525886926782464.0000-588284731426293800619387605200382877092778077833328494710470549796433579280747265196208062363899211266732521376930633482575188822102952962180133287335040742960510011909379385423155974170681301767013805600201564802308366139392.0000
+              cm vel-792348.0157   -0.000017276507867718913437973844405822559527936453572152956134533302493055014236859612269710280825892871802274901185962242732740801293707629252292784522485256435159128733404285307624612006848444873310208.0000
+              am vec   -0.0000-211652718723195536133000463032621902998210238809916675034348243402279770537493182421902819328.0000    0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.031   -0.2602   -0.4932    211476        92       113      0.07
+
+              cm pos-40087524642354090177162277031779457754073858728524598212520900057000059718284318199972113410724016694017298307045434288302823422621896183743360904404979981899552555156330832451429990863531838725366022825401782993683338193002299392.0000-298361428424471336261568991321431171435208152318134458095066986543349181497290163584519803872491924676559858733652720317985013834748824577104739959651582856921088.0000    0.0000
+              cm vel    0.000039189313548520790111915155914815724226508096196157475815406514085043663410920491698918112609902455726474793014038334471819505653528309199655731845808083045960242270810300252900663754752.000031144847919189000.0000
+              am vec26970646631640567331310833479720917986653581565660843532315901690656368322918751533647592626739302873823172484389608571700382481765787667411138352822432434090341073472177209143725904610801927558528960775936308676731739381272546712892043193020424967848464577822807705070203285992648454691582027650899640320.000046738133919390499223561289862785435166572544.000024698848102251647841885312369614341628099684826013193458362979217437566747443306213017948712523578670080531014982128383520762362587973738028200519756275691552768.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.062   -0.2601   -0.4930    212513        95       112      0.07
+
+              cm pos    0.0000   -0.0000   -0.0000
+              cm vel7829004378509742740511201308831780786082047696482112982523869303137284076259681821487178674759694106945713393750023034383258037754503896656879192442684266798038478897793585905664.0000   -0.0000    0.0000
+              am vec    0.0000-398527518772044354721235707163681011104543258433165687083334248937031321304243226085982030141146645903040964485965719703950206948379370949627035558250362717770407154426597086377936502609822850620522783909313778431737632612513195878143492096.0000   -0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.094   -0.2602   -0.4926    212473        96       111      0.07
+
+              cm pos-16241367798983889928342349697986462773700791589569878873119200334994408340840578865679601922351600412056695702512788486839737390001553408.0000    0.0000-5701981805246544340338493134313287476078307829232888376230201540209850478758766188011280230840358461462671132243001344.0000
+              cm vel66464063855427411598727294799838619468506496323432346489202933760.0000   -0.0000    0.0000
+              am vec   -0.0000-37417900726557283051207837633825548022252641850827692164603303264768592850197226404776379926381525678998338597981087024390602752.00001492017855644381087980486176414782596806339684881920655203567761620992.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.125   -0.2601   -0.4924    212418        94       112      0.07
+
+              cm pos    0.0000-711820219261389002484083103518768000301683639186447940017119095003311272366543708744939575901072447673459822910034728318489773581764224585217153590961090283595820398858105722543085108253031913037015131991785988446669896493624021704540383213682693642603381558861756401006411776.00004683213089645237545539045399467265044027898253730019963078979383578052041222051926796589570077417948896732982410855041085164437800747008.0000
+              cm vel77513150682505029279103790970169343667701805875384195717014678133760291158822242486081400335994452583038528915116699834526606667181808276937445211887255579958286037842701315111972929924685529388446078111580160.0000    0.0000   -0.0000
+              am vec9059263110707568578116497975265644723676831585418624934771103766307015726810385337112561881634723102974654718100188493043660592688376631528302962769405658369193435359931078418230365420910633418004410737455655981292535053748065309945508787666368339516652162289428819474632704986550632448.00001143192904791952881014942925806970147119788558873372533569273678384853347926697505158141548564171206388323330905973176677101053053751620972964408710306326267965921195655590013300145488289564499615338723228516352.0000    0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.156   -0.2601   -0.4921    211307        94       111      0.08
+
+              cm pos46106792064030743980379413467179399668360544256.0000281295444016688699612918967705434093373162474641330499477105393684832366013265335376148639086493538841387157610470935813907382321506611625984.00009666517315509855716454739897669650270466078043503403206862105887915163665506802394218805863268327248294464047677884185386996866564882183999449870602261960210875183887243400031117284391263831851008.0000
+              cm vel54483249131201038533930473660635342738292736.000042980177895297377877502516865771765835744492885168030125650081947981240314053086066585773277184.0000   -0.0000
+              am vec-82289380027828886803819444844586043553295727463710427849410310072734958145577816754585430580037201759165483006525865319660881941871732719114753814328137388485088556194004506627854322782799380501409703222751141785461539159909589656478182014976.0000-726871714679445778173842567769245425023633446948028327361345672396639700828573012077971834771949486080.0000   -0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.188   -0.2601   -0.4919    212029        96       110      0.08
+
+              cm pos1173952957709304029590898011596930729396102538056360773552057094915010373355989028375226875745267969723652622036914592501355018593257345504755067378001178111927966771445760.0000   -0.0000    0.0000
+              cm vel    0.000012186243317740609276404195489043283244467804926033971742984147954866408288950849306860246852118091060094444732867068830629362621831536705536.0000411625571163601.7500
+              am vec-635527994611094978402897787090918059797079752254911007374148601942359499949809925599953582266407866530488581074179512991378723937669962210969595063204437679538853175466771960964858528804582956348735488.0000141817699951243368228015948539755474907523085940521885692233263485261908509133659649720138179170237633715832664983728318757789781765486006712604213718994986339867038623787021972412282092344461471916249215905227828087810129841329573952391085060879748885051863805350324092487551170143193931148275663895107993600.0000   -0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.219   -0.2600   -0.4916    211871        95       111      0.08
+
+              cm pos-120985436684330252264306434868021595142782550358351884824405228636331343470148887056832333804437210663697102098494040878623318130623475617337602852662867510372795897081745857471976555719416736434666602496.0000    0.0000-20024624269744565835179983237339164844817835131113178253451788001425028636652594227484360553228147260268669190746931200.0000
+              cm vel2011544566099649492048188597367058649199398113220349325532967374908254249724850543535600345675771997492938397036854347756681567704953638131023113331965998136143100834771646322866913280.0000251057729491665618972134555619496650866688.0000   -0.0000
+              am vec-6139049881771361014128301191904934535254493516299161416962253368222981211547715922415924983305625289358590882112203958869616692873767504933409840832451513942016.0000-88490438247454588592935039357726767452907794081541320262041509868748906391533595544388850087500096845902034797027175828160979203499841356338370751785794895980137278470909370374896915096900553727447093343131354871845608542480234941775872.0000-11810496874220612736909567086361690581163030733939317339782125233037888389926957133607177314205702239388674638666092641481288742904241549862433552808124420051397737375108575445959059727912721917978320064181436416.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.250   -0.2602   -0.4912    212729        93       113      0.08
+
+              cm pos1273435642992046424015604690932350824385579109700695775975310098298877739965830181769851460221753187451704625877772608257264622241162737726340988928.0000   -0.0000   -0.0000
+              cm vel    0.000081060712903431677612554564458042283076944989144070513214166401360296099559887826136146844312319309727175246851421018786049945172519984821769550879003762491392.0000   -0.0000
+              am vec14360477624155394185460570705344263839262659796327399723668122673092935650850943305308906552544214351736273370717352858888893591806647914594173096663670930837901188010461542958382541370903183194518942006385751762732433204219665924682627726342639105718935327798464211269971301381632425984.0000-462084768610954317182059675648.00009050058522339333588012706522864839983418904746538012955631953361524486110611351145396009056371728309085644996721887597318306764125478357933014123320804947192929875203875154479805701002074066426240602970067642944477744966385606437803356409189482585489581738901440036864.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.281   -0.2603   -0.4908    211198        91       115      0.08
+
+              cm pos    0.0000   -0.0000   -0.0000
+              cm vel    0.0000   -0.0000    0.0000
+              am vec-48498627658717163227016770141411545767562400375846123389116808828335983427584.0000-429760820705290235732805020479556150727558251621364111716012784101957340934333844903051458787857563947440436214697995593832406166643186117505775499250687675399902202072937011139217955731806924662796439626646177117561743378144889309864364179349162231639148855296.0000   -0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.312   -0.2603   -0.4906    213544        93       115      0.09
+
+              cm pos-1310791951328902450962864801029672735925979813883184244239154751586586268557811988765934952938105334281660866812898909191842362087581056547512845303123846203703296.0000   -0.0000-1104912413265488.1250
+              cm vel-496140930645809553769392202647710502359571452556424972271517309661349855244249760533254282565100951737127472858492118761472.00002863847416899913766897408939450562123675266235497641053288621457129399587503348796473028441823971336221992098306051557742499699290286191542272.00002118819716729291538408868965489305002764552458818124819844833476608.0000
+              am vec-2767913261879495921154709700944301687352292175936086776336282226299577725522519443045240792923997597076632906622817295434327836891541743162204657341343213157276305832103154647183219837900641884698204319820653307451068809076531003392.0000   -0.0000331617118667140670569724590061211734618669056.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.344   -0.2602   -0.4906    212351        92       114      0.09
+
+              cm pos-2952230708914117461506679284584935233586489704176421136824254457562482032894084717253250524907219453272768081113858036447894916017965130316756834704354201393319917977860279044669440.0000886583622295715713705011893009567037044429263168844549318258480789887293711139580157372426878976.0000408142908406317387072609295578735954860105510377760916649676201459066078961079747545502740905439685250952971181299438498091223944689389490119836846556893249038535048151855654216509653504001666675290728370783272340330556921788320490089264977869238793791349066825728.0000
+              cm vel   -0.0000    0.0000   -0.0000
+              am vec420626916235524775431397044859305902851734784067780201503987246343239383324282393884515461236086338864821660986089887430912237893901340524433373871208905023681122533358446140785814958631695144918906258124795681887927141447077568392704583660835612655616.0000-58241194026643089040554064644562583618088695352096309147172709730047005663746428866293277359182446348089090699385101400540415430492160.0000-474782950883144755455664860666399228933423692301612056581485821323740949279046485769931509310862974602478211197745044499085156346945863031986216469946718150400812237337285203501489564277703209624298478742475494506413162496.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.375   -0.2603   -0.4903    211854        91       115      0.09
+
+              cm pos    0.0000-149387766096574070026946462232401144057041135910815116199622323556540006390831292497608813805131998121800041471523182745361870732436850857698180699346948799013055040379727743637450038732873549798497202193397166549244579168990609234134151016095446485434368.0000    0.0000
+              cm vel    0.0000    0.0000    0.0000
+              am vec6483276144632959707142260210586001314762733906222826094011793505888633997780105007486483693272519671808.00004465327215326859545300225761942351511790133828270557228519747603655800389632.0000    0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.406   -0.2603   -0.4902    211998        91       115      0.09
+
+              cm pos   -0.0000    0.0000    0.0000
+              cm vel574849778902932162667465850843028909967879540182192353443177471001849129580699303542784.0000    0.0000   -0.0000
+              am vec-1951760531337000174128688401473641675921595829988367435616348542454645433134706519096875752761721233163831873649852156701588030004267613799625785344.0000    0.00008337409578392775611401276811274841623984098736517680015191302255782196585952100398758985746807094936584991396739729576645988689518054190514041504515881296020278043708146963522663773051841051111311012064060220000931592696166788391045787587063330779749958809449321090323857774074959634965565901111296.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.438   -0.2604   -0.4900    210887        89       116      0.09
+
+              cm pos-1979304811692934348767704848639541416171171640639955935381111190324846855635818407156655871210390445913050854545311527227305866723181120287199506183659177747867024879099203225657015760992179624253304922360002184873087465611530097515466846477264169482972250109008893759071025819181967542145964310528.0000   -0.0000    0.0000
+              cm vel-152487974370892820518557674941954836184158044485993567317412029400462039617759762361699166879725435702422679528382865060057024376463957392541098047948677027044870507866197352812785408092426910431956477373579264.0000    0.0000   -0.0000
+              am vec1105168042386423777583519450879841917449956703937836276810521982286218395648.0000   -0.0000   -0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.469   -0.2604   -0.4899    210486        88       117      0.10
+
+              cm pos   -0.0000    0.0000    0.0000
+              cm vel    0.0000   -0.0000    0.0000
+              am vec1351344885406422904868937054414736050693973460643962476160972548024709426274289029948163561575347800770268946641962093751144342232204572533709340985908379296727040.0000    0.0000    0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.500   -0.2604   -0.4897    210373        87       117      0.10
+
+              cm pos-2725280.0627   -0.0000283783563129400597350243800094820644500356220799942656.0000
+              cm vel   -0.0000    0.0000    0.0000
+              am vec   -0.000043896014770123912245841280976286021021600546969027443962003061554034738913220371373160602057945146602528226743743037578978632396919083765175039383481898291923935869181081953902500495661881847820968184531703181761854488514535163566870180237225415308626834156573583554379776.0000    0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.531   -0.2604   -0.4896    210691        88       117      0.10
+
+              cm pos10355310058783655135085586629928935950190888351966426203034475932945843379786654748797949191854729206009306596939733239151349155898348349417586056494634388821160839165463505700240650500606053752768669818601847444465224852593531819568006059940917925117983767263614883498481571825797688901763072.0000-3230235918674462511519796443928569731105704905339428723014429033637796452047295231414797139242719288094305089670382289276241428664501255842909864840022020796690310863821952348314197063793991187185578674656894293187863964558587080076989473658241688708689730009878637235740831053702884878165656656150528.0000-438403697707222419332951258955776.0000
+              cm vel    0.0000    0.0000-183750650419507818712961900347392.0000
+              am vec   -0.0000   -0.0000-148833928483867088340060668267068801970966232686508882951812355679334669982170822817362399474814900416378768492691073781391461831854996996166639464529737469039470376640639799801759183503145284688619543572310772857695825827549789088626752193798953148135513844967218442409907180822211854336.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.562   -0.2603   -0.4895    211982        89       117      0.10
+
+              cm pos    0.00005684314831021164005739860443008135719517508714669595652103230062005424951694693293923421995646546827804809929186436351610867956780833042988788559346507194540747470128086515712.0000-8602197758631784112444631628921878990661862919844298846291062764552350235107600355780196738030096218648173645188094441993976459133470004771532223293526634913014278340715028648165784709167636312752128.0000
+              cm vel-1677115480490552137693753385714865930225808070229945668410008714127261971497400242890653597063751610784478459934525537610986975925204739019368923607087315061819860962497188709044410553927574144687387793050757965971128827477542190079541248.0000-1990974969502340762287064037769248518848173682664173595165164014673108223225786049030893280513146682593720440485397687824700962124138961164159203761652616867682713404509131518593762962037134640584162972946194222410893293556389809356663656803220487929856.0000-765983291793779229909275775196136993127268413204213982178997490589245531437603610227988517061730198090536381971088476226018892567643629943945264123546769150313328346983070520683195089420479794906760122688007206410122619613896022461124286368447096493927723922620416.0000
+              am vec11222722812604683071432374349855445824410622906488739583247633626923679879141840253177261685626948819724671880204215192038799619156411728118163701760.0000-20721296133684398824473624300333312854433571954856671330589620572967760582447498485487820609008216439685698591760722778329363378980510034762802483151605815439360077783602028683812697561669488438793640738686548461447307466550723283080099907641572930612118002148063995494400.0000131201676459368643345162059782646870277468970969112735584315467606306837003584256819994561216990187931171997604791994745240568634165765426198957382587825695973797573713514675708444703013446121417443127624543688560723357716931750856143774040280819691697686511787798957941877584725306335297536.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.594   -0.2602   -0.4894    213499        93       115      0.10
+
+              cm pos    0.0000    0.000060841271415260356419719197703369402391201850721933956656505535193776294698498126345382933333478341742767082206769500244630198184852783047131270462264003785624274337792.0000
+              cm vel    0.00002988289027997682802693983497751848374759464011395388493715503291889250668375404034786777329217118437365011920371230849645601103000134271894791446901050921490720855825203207522697438493901527828811325393933463185340888887921678060957375073571162831679438004985386492230975356928.0000    0.0000
+              am vec   -0.000089678487447784630535911721631433827311764825159952537231832093551065171855032510222217984633427839467904278870962666597930982256223630049361285038151203819142836564770524067628027199296714196058952346837390072556161114795929882883518256528471185424384.000025932200433322053982192952106770811199263256861309132113964652146401362788488305797914716666117351861970284087561158656.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.625   -0.2602   -0.4892    214135        93       115      0.11
+
+              cm pos    0.0000    0.00007056187426054677493924467331418854824134159380228222538254402369341376679000430350937449706059256747929550390153556622978181448508607075631748689148266679893210927487859991568232827355043513036462620672.0000
+              cm vel9455060674212031355581578771901879604125962553448307097600.0000   -0.0000905195160386234450740183558978604172199329792.0000
+              am vec-423141848135701272406023541467931437765674988468612873501954086457315580459366065951211148150216363060684673068843401216.0000125443642165140234698752.0000   -0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.656   -0.2600   -0.4891    212530        93       113      0.11
+
+              cm pos-386273933468065619173985927804919147162497699559454583073956195626200141480431296462331784685832260331541946668649339092828557868365025285470331254654019146977640448.0000    0.0000   -0.0000
+              cm vel    0.0000-4743632426372061158511341209478427049984.0000   -0.0000
+              am vec    0.0000-239671508137325590634863843622155833814981285994835032601270614092658842291431684040953083543400211671223431241893256294795585728275833182457304790693217990730311496158756774405546243960233591674835800011741111645345153024.0000-49006483581136799791641888765814459878578389959132951085056.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.688   -0.2601   -0.4889    212150        93       113      0.11
+
+              cm pos-1487877691353051346813520336017885540717350200296943508643073805990714385716229283691650362523040265199312029531821608704020321139945030962963163134541471336463841208991353543530388041219235849358604243269187075829952583083412936687997595390131332549137399808.000040431607191786761427104280235990972267707427172122822410294439962386301812790286105750215820881849925130162115777206193116849495846358291714289820468973224841672266675554448106613374976.0000  -13.2929
+              cm vel    0.0000-11643251192651135742202374015453695540762798882149109098056725959688116354151628798102358944813718655277288382536360031944704.000012214127581259127926085825924987929167959258823571338100692129269283544063459288458864672341430185836854168023394227560937501291047368584484892000666079498089560737607549155698544459847334549094863664733777468082618368.0000
+              am vec   -0.0000   -0.0000   -0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.719   -0.2600   -0.4886    212527        94       113      0.11
+
+              cm pos    0.0000    0.0000   -0.0000
+              cm vel    0.0000-3740937435991330069141514183491046417018724477946895454742107797489367777651503363566961278124056778866179715697966013576194403899237985489979803333540796727857673818941610261164804175120928880995351628255464015896807598848228836431639275231370254795600210205941245916684764056020582400.0000-1496375143483907907202549691919803677796316676246757056763836145805924583914704210627705140289198718001323725056146519199218637170162712517048569896173780970119785070021058008587680219337631265573225593616508441974463349118760084145210014072326362943633595430732406036357386404506894336.0000
+              am vec    0.0000-506299477813233561955550035855612263891948926396244145840929646082785280.0000-2684.9614
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.750   -0.2599   -0.4882    214475        95       113      0.11
+
+              cm pos    0.0000570847744204721723776232849408.0000   -0.0000
+              cm vel    0.00009303607028694346891264.000021843041568780036096522682587664510881616848279258075297722038326617290297922028252001711372388398988242004113159931608364256454785453845998318603445295919123531750863561293824.0000
+              am vec-700071569435402216638880302142017276395802762833015640618709164542800072312688106229248106059986522595859399212024995928633470497187216698955866116508470781436116811431924583306537348690067597667317555776145055312004449953924960057820272526737333775511010924855369057378236567058532416561738678272.0000-243456541315596890445264715776.0000513257732687017105626118865708907316318212506516191568959281071650953163681544723234410311036750630144125272089295090772098918921862630415546013508832518229169275813676454317317868366413577531877798248124850876435237226083329977779649022787584.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.781   -0.2600   -0.4877    211398        91       114      0.12
+
+              cm pos    0.00002538767724261615285475428033880680745792006663422018224505287822966819943819333990035342023814910659520289606932673252852631492890355067269168256419129146222607384729988471012995209998647132004151371030385506262594086904318799071623748634288324608.0000    0.0000
+              cm vel   -0.0000    0.0000268422787389278285271797801631966585676267684972192725911204560992505586897553306560563286382962671483260864624210919316562369601477625228271486094738593784420517225704744562865436386463903278971969808758943219470938662287088591831040.0000
+              am vec837892062621074121031680.0000-132651279428511567728320929138659552334884047864190970907987079738416890249908717681017771033859318913957888.0000   -0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.812   -0.2601   -0.4874    212928        92       115      0.12
+
+              cm pos-23586053241842823245135748944728488268082619255211287698013802893306567539200322049913195098064694329682755230335454508989279460782795390976.0000   -0.000070241440506970972450347016211701085578921687019780308992.0000
+              cm vel91169676794840547328.0000    0.0000-312485246178787499574531571855500319353058166133757521121229774733759219541233886788987530449641599447143484297448632828066529280.0000
+              am vec550232859802479646353259776081220260536098562860406935542491773061360505706269193462888787400969095542198385491880413046180563628988464777570521854407192482773386701088342530776506535354974876767728366277722149418465140042290765040127300423723795199567519062541409814871944288389824512000.0000   -0.0000   -0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.844   -0.2600   -0.4872    209464        86       117      0.12
+
+              cm pos   -0.0000861707301861909157906082304171714659075465173542154683532334113325731026448459584625937939655005720799303189459229959264408324640317687966456790286446917991932177093416002625497464101695147794492865941398880256.0000252666357010502975621462733565699411846362936271402100906174394592957904290370055642541212933501991580773285441505073994549836783929041879040.0000
+              cm vel   -0.0000   -0.0000   -0.0000
+              am vec-68490608628676523224720856037532446715355599902134806937953332627552826123427487958097226812935634441238287857672166554780652706213996011313215089657401764117079558838555354107722541273189961062652583734464235992056162569682944.000050456618611297886829757354662160239172340530892665167675282029350961536444081111603413846550938515835667024684958982650979252154412918582473548105930921184941240745984.0000-120410843834118465704508216705794312168686915722200368269626879150755912090314435502783930575303895989357367614664167186658206319076710106403318550304104380714027837600765589377793316349151402363932422582541971661783040.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.875   -0.2600   -0.4871    207897        83       119      0.12
+
+              cm pos   -0.0000    0.0000    0.0000
+              cm vel-66162802194851512475163350965597860351791525983944182333141413076927899249282161844394703978496.0000   -0.0000    0.0000
+              am vec11728483527803680454149351588444369675886633479622192345377930537664319668078524032122394797090467856602221462554615236757693276373803464453850095590841455151417594286053991557048074315726107994886213012948800287237491790170924852578465945723095510069441227108775747918659444262567936.00006582488281356740775580741453573930863167553481592182449429463571380844369219358044538685193793404725407286121289479508977708874840016945614322852797958836589119901047151097491372353129411510272.0000   55.5065
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.906   -0.2599   -0.4871    209291        84       119      0.12
+
+              cm pos-6385407501542423356344755806443061288270744245271733424263391144172174415569762012748184697079435521029609866400382808289470873191676170913571324939072982848473856751012074292708062394740535433385954246656.0000-644869229673901272406156825127923652332469225409703600584491151210108331287504937876181340192947630284835925570132146913280.0000-437668470614432896856264312069700291181983845628797688075868840875753777929389526518230980868592805843229623026837241918909335524940739117863686355452748922059575422451777510660296836423288852539144758507851012664840256497425686700400193743706206982105132609568768.0000
+              cm vel91738830422806813664480961997610673203605020789679260166918736755863713592580010368522647064518273177534427837963926429695193972295091693219854824951171329605908614895111815547825621544646356421422716734241892684707921920.0000   -0.0000-121243859867853206740646684895908078250471680915696676398905280833144119433693665607520902571821648315567518233518535689457025036703426743927676786809940669086813177513589928090177251229303204492507220689006984235908654867421622446393976284930574252011503484928.0000
+              am vec1730582.0314   -0.0000    0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.938   -0.2599   -0.4870    208078        85       118      0.13
+
+              cm pos   -0.0000    0.000033395408529609668545900087356741858626434687930018017154439459965780325063224136005981384682966837503201613185024.0000
+              cm vel    0.0000   -0.0000   -0.0000
+              am vec   -0.0000   -0.000027389789144495919449353820222436523639840246996854991721274763678689626460095830498736729629319683568713072640.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     1.969   -0.2599   -0.4866    209032        86       117      0.13
+
+              cm pos2111126978254212190896032110963505517223209986732864848944365090759632121978562470532728892131013766535744886868300497309522872821223266685425227527010331702576239218982835496030604650047787545596755887684191381441436712960.0000    0.0000   -0.0000
+              cm vel   -0.0000   -0.00006104709079556268540863807959478225927762031564494065094919212127507518028144940147284465673258377308288760565424364149004424205658263108939439948970025853793338794903375769680650550757274736944078163976294004356798080264175616.0000
+              am vec488557743030398575148588878336285926971136613741538351720650706714165379575801120920205589038035377801011584056505567547239551809464492359680.0000-57697119730310729279552069842804905030114276571601040109621109713774995878340556166888163327606900708361060685934377038941483270633441513572880889869444249990292808502969114770120113558694264365951053959505364172061258257620919380388284989440.0000   -0.0000
+
+      tnow      tnow       T+U       T+U       T/U       T/U     nttot
+     2.000   -0.2600   -0.4864    208927        85       118      0.13
+
+              cm pos   -0.0000-7367171723037541795094124434151519831792112034691840854356613346938449759299255409681446804939826068923097543887086184194872084937290308755997140123240935810488290471873347584000.0000   -0.0000
+              cm vel1006425721044856206000950062318392931898789353280274728983606558081433802045802861222818251758628458130325450533798649833034385272614630675871168760915286373163131622823786325277511140221770339768338481152.0000    0.0000-3144606464799229038263042987182620982102812047995738848406011579833110289130714648195731710966795169629551135090130652751542070025361201103838722768428417950975157384354212310551007046512936849306202144768.0000
+              am vec   -0.0000-310585348040367212540466107933093981683394433536104796407776575005538885413170465336561984232650364092881885733701424906648778163815612342027107172352.0000187499318643495772928899061436600658023508244482639265792.0000
+
diff --git a/test/ccured_olden/bh/testit b/test/ccured_olden/bh/testit
new file mode 100755
index 000000000..8c758c7eb
--- /dev/null
+++ b/test/ccured_olden/bh/testit
@@ -0,0 +1,21 @@
+#!/bin/sh
+# test a bh binary
+
+if [ "$1" = "" ]; then 
+  echo "usage: $0 ./code.exe"
+  exit 0
+fi
+
+echo "running: $1 <data.in >data.out 2>/dev/null"
+if ! $1 <data.in >data.out 2>/dev/null; then
+  echo "$1 failed directly"
+  exit 2
+fi
+
+if ! perl ./normalize.pl <data.out | diff - data.orig.out >/dev/null; then
+  echo "$1 got the wrong answer"
+  exit 4
+else
+  echo "$1 seems to work"
+fi
+
diff --git a/test/ccured_olden/bh/trusted_bh.c b/test/ccured_olden/bh/trusted_bh.c
new file mode 100644
index 000000000..6c76f8c27
--- /dev/null
+++ b/test/ccured_olden/bh/trusted_bh.c
@@ -0,0 +1,92 @@
+#include "defs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <sys/types.h>
+#ifndef _MSVC
+#include <sys/times.h>
+#include <sys/param.h>
+#endif
+
+
+#ifndef NO_PERF_CHANGES
+///*
+// * ALLOCATE: memory allocation with error checking.
+// */
+//void *allocate(int nb)
+//{
+//    void *mem;
+//
+//    mem = (void *) calloc(nb, 1);		/* calloc zeros memory      */
+//    if (mem == NULL) {
+//        fprintf(stderr, "allocate: not enuf memory (%d bytes)\n", nb);
+//        exit(1);
+//    }
+//    return (mem);
+//}
+#endif // NO_PERF_CHANGES
+
+
+
+// Now some wrappers
+typedef struct {
+  void *_p;
+  void *_b;
+} fatp_void;
+
+//fatp_void strcpy_fss(char *dest, char *src) {
+//  fatp_void res;
+//  strcpy(dest, src);
+//  res._p = (void*)dest;
+//  res._b = (void*)(dest + strlen(dest));
+//  return res;
+//}
+
+#ifndef NO_PERF_CHANGES
+  #ifdef node2body
+  #undef node2body
+  #endif
+  bodyptr node2body(nodeptr x) {
+    return (bodyptr)x;
+  }
+#endif
+
+// And the wild version. I'm being lazy about types
+fatp_void node2body_ww(fatp_void x) {
+  return x;
+}
+
+typedef struct {
+  nodeptr *_p;
+  void *_b;
+  void *_e;
+} seqp_node;
+bodyptr node2body_sq(seqp_node x) {
+  if((void*)x._p < x._b || (void*)((char*)x._p + sizeof(body)) > x._e) {
+    fprintf(stderr, "Bounds check failed in node2body_sq\n");
+    exit(1);
+  }
+  return (bodyptr)x._p;
+}
+
+#ifndef NO_PERF_CHANGES
+  #ifdef node2cell
+  #undef node2cell
+  #endif
+  cellptr node2cell(nodeptr x) {
+    return (cellptr)x;
+  }
+#endif
+
+// And the wild version.. I'm being lazy about types
+fatp_void node2cell_ww(fatp_void x) {
+  return x;
+}
+
+cellptr node2cell_sq(seqp_node x) {
+  //  if((void*)x._p < x._b || (void*)((char*)x._p + sizeof(cell)) > x._e) {
+  //    fprintf(stderr, "Bounds check failed in node2cell_sq\n");
+  //    exit(1);
+  //  }
+  return (cellptr)x._p;
+}
diff --git a/test/ccured_olden/bh/util.c b/test/ccured_olden/bh/util.c
new file mode 100644
index 000000000..b7e3347d5
--- /dev/null
+++ b/test/ccured_olden/bh/util.c
@@ -0,0 +1,152 @@
+/****************************************************************************/
+/* UTIL: various useful routines and functions.                             */
+/*                                                                          */
+/* Copyright (c) 1993 by Joshua E. Barnes, Honolulu, HI.                    */
+/* It's free because it's yours.                                            */
+/****************************************************************************/
+
+#include "stdinc.h"
+#include "real.h"
+#include "vectmath.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <sys/types.h>
+#ifndef _MSVC
+#include <sys/times.h>
+#include <sys/param.h>
+#endif
+
+
+#ifndef HZ
+#  include <time.h>
+#  define HZ CLK_TCK
+#endif
+
+/*
+ * ERROR: print error message and exit.
+ */
+
+void error(string msg, ...)
+{
+    va_list args;
+
+    va_start(args, msg);
+    vfprintf(stderr, msg, args);
+    va_end(args);
+    exit(-1);					/* quit with error status   */
+}
+
+/*
+ * EPRINTF: print error message, but don't exit.
+ */
+
+void eprintf(string msg, ...)
+{
+    va_list args;
+
+    va_start(args, msg);
+    vfprintf(stderr, msg, args);
+    va_end(args);
+}
+
+
+extern double drand48(void);			/* should be in math.h      */
+
+/*
+ * XRANDOM: generate floating-point random number.
+ */
+
+real xrandom(real xl, real xh)
+{
+    real r = (real)rand() / (real)RAND_MAX; 
+    return (xl + (xh - xl) * r);
+}
+
+/*
+ * RSQR: compute x*x.
+ */
+
+real rsqr(real x)
+{
+    return (x * x);
+}
+
+/*
+ * DISTV: subtract vectors and return distance between.
+ */
+
+real distv(vector v, vector u)
+{
+    real s, d;
+    int n = NDIM;
+
+    s = 0.0;
+    while (--n >= 0) {
+	d = (*v++) - (*u++);
+	s += d * d;
+    }
+    return (rsqrt(s));
+}
+
+/*
+ * STREQ: test for equality of strings.
+ */
+
+bool streq(string a, string b)
+{
+    return (strcmp(a, b) == 0);
+}
+
+/*
+ * SCANOPT: scan string of the form "word1,word2,..." for match. Warning:
+ * words must be separated by exactly one comma -- no spaces allowed!
+ */
+
+bool scanopt(string opt, string key)
+{
+    char *op, *kp;
+
+    op = (char *) opt;				/* start scan of options    */
+    while (*op != NULLCHR) {			/* loop over words in opt   */
+	kp = (char *) key;			/*   start at front of key  */
+	while ((*op != ',' ? *op : NULLCHR)	/*   loop while this word   */
+	         == *kp) {			/*   ...matches text of key */
+	    if (*kp++ == NULLCHR)			/*     at end of key word?  */
+		return (TRUE);			/*       keyword found      */
+	    op++;				/*     else advance ptrs    */
+	}
+	while (*op != NULLCHR && *op++ != ',')	/*   loop till end of word, */
+	    continue;				/*     passing "," at end   */
+    }
+    return (FALSE);				/* keyword not found        */
+}
+
+/*
+ * CPUTIME: compute CPU time in minutes.
+ */
+
+real cputime()
+{
+#ifdef _MSVC
+    return 1.0;
+#else
+    struct tms buffer;
+
+    if (times(&buffer) == -1)
+	error("times() call failed\n");
+    return (buffer.tms_utime / (60.0 * HZ));
+#endif
+}
+
+
+void *allocate(nb)
+int nb;
+{
+    void *mem;
+
+    mem = (void *) calloc(nb, 1);		/* calloc zeros memory      */
+    if (mem == NULL)
+	error("allocate: not enuf memory (%d bytes)\n", nb);
+    return (mem);
+}
diff --git a/test/ccured_olden/bh/vectmath.h b/test/ccured_olden/bh/vectmath.h
new file mode 100644
index 000000000..7d1b503a1
--- /dev/null
+++ b/test/ccured_olden/bh/vectmath.h
@@ -0,0 +1,371 @@
+/****************************************************************************/
+/* VECTMATH.H: include file for vector/matrix operations.		    */
+/*                                                                          */
+/* Copyright (c) 1993 by Joshua E. Barnes, Honolulu, HI.                    */
+/* It's free because it's yours.                                            */
+/****************************************************************************/
+
+#ifndef THREEDIM
+#  ifndef TWODIM
+#    ifndef NDIM
+#      define THREEDIM
+#    endif
+#  endif
+#endif
+
+#ifdef TWODIM
+#  define NDIM 2
+#endif
+
+#ifdef THREEDIM
+#  define NDIM 3
+#endif
+
+typedef real vector[NDIM], matrix[NDIM][NDIM];
+
+/*
+ * Vector operations.
+ */
+
+#define CLRV(v)			/* CLeaR Vector */			\
+{									\
+    int _i;								\
+    for (_i = 0; _i < NDIM; _i++)					\
+        (v)[_i] = 0.0;							\
+}
+
+#define UNITV(v,j)		/* UNIT Vector */			\
+{									\
+    int _i;								\
+    for (_i = 0; _i < NDIM; _i++)					\
+        (v)[_i] = (_i == (j) ? 1.0 : 0.0);				\
+}
+
+#define SETV(v,u)		/* SET Vector */			\
+{ 									\
+    int _i; 								\
+    for (_i = 0; _i < NDIM; _i++) 					\
+        (v)[_i] = (u)[_i]; 						\
+}
+
+#ifdef THREEDIM
+
+#ifdef NO_PERF_CHANGES
+
+#define ADDV(v,u,w)             /* ADD Vector */                        \
+{                                                                       \
+    real *_vp = (v), *_up = (u), *_wp = (w);                            \
+    *_vp++ = (*_up++) + (*_wp++);                                       \
+    *_vp++ = (*_up++) + (*_wp++);                                       \
+    *_vp   = (*_up  ) + (*_wp  );                                       \
+}
+
+#define SUBV(v,u,w)             /* SUBtract Vector */                   \
+{                                                                       \
+    real *_vp = (v), *_up = (u), *_wp = (w);                            \
+    *_vp++ = (*_up++) - (*_wp++);                                       \
+    *_vp++ = (*_up++) - (*_wp++);                                       \
+    *_vp   = (*_up  ) - (*_wp  );                                       \
+}
+
+#define MULVS(v,u,s)            /* MULtiply Vector by Scalar */         \
+{                                                                       \
+    real *_vp = (v), *_up = (u);                                        \
+    *_vp++ = (*_up++) * (s);                                            \
+    *_vp++ = (*_up++) * (s);                                            \
+    *_vp   = (*_up  ) * (s);                                            \
+}
+
+#else // NO_PERF_CHANGES
+
+#define ADDV(v,u,w)		/* ADD Vector */			\
+{									\
+    real *_vp = (v), *_up = (u), *_wp = (w);				\
+    _vp[2] = _up[2] + _wp[2];                                           \
+    _vp[1] = _up[1] + _wp[1];                                           \
+    _vp[0] = _up[0] + _wp[0];                                           \
+}
+
+#define SUBV(v,u,w)		/* SUBtract Vector */			\
+{									\
+    real *_vp = (v), *_up = (u), *_wp = (w);				\
+    _vp[2] = _up[2] - _wp[2];                                           \
+    _vp[1] = _up[1] - _wp[1];                                           \
+    _vp[0] = _up[0] - _wp[0];                                           \
+}
+
+#define MULVS(v,u,s)		/* MULtiply Vector by Scalar */		\
+{									\
+    real *_vp = (v), *_up = (u);					\
+    _vp[2] = (_up[2]) * (s);					\
+    _vp[1] = (_up[1]) * (s);					\
+    _vp[0] = (_up[0]) * (s);					\
+}
+#endif // NO_PERF_CHANGES
+
+#else
+
+#define ADDV(v,u,w)		/* ADD Vector */			\
+{									\
+    int _i;								\
+    for (_i = 0; _i < NDIM; _i++)					\
+        (v)[_i] = (u)[_i] + (w)[_i];					\
+}
+
+#define SUBV(v,u,w)		/* SUBtract Vector */			\
+{									\
+    int _i;								\
+    for (_i = 0; _i < NDIM; _i++)					\
+        (v)[_i] = (u)[_i] - (w)[_i];					\
+}
+
+#define MULVS(v,u,s)		/* MULtiply Vector by Scalar */		\
+{									\
+    int _i;								\
+    for (_i = 0; _i < NDIM; _i++)					\
+        (v)[_i] = (u)[_i] * (s);					\
+}
+
+#endif
+
+#define DIVVS(v,u,s)		/* DIVide Vector by Scalar */		\
+{									\
+    int _i;								\
+    for (_i = 0; _i < NDIM; _i++)					\
+        (v)[_i] = (u)[_i] / (s);					\
+}
+
+#ifdef THREEDIM
+
+#ifdef NO_PERF_CHANGES
+
+#define DOTVP(s,v,u)            /* DOT Vector Product */                \
+{                                                                       \
+    real *_vp = (v), *_up = (u);                                        \
+    (s)  = (*_vp++) * (*_up++);                                         \
+    (s) += (*_vp++) * (*_up++);                                         \
+    (s) += (*_vp  ) * (*_up  );                                         \
+}
+
+#else // NO_PERF_CHANGES
+
+#define DOTVP(s,v,u)		/* DOT Vector Product */		\
+{									\
+    real *_vp = (v), *_up = (u);					\
+    (s)  = (_vp[2]) * (_up[2]);						\
+    (s) += (_vp[1]) * (_up[1]);						\
+    (s) += (_vp[0]) * (_up[0]);						\
+}
+
+#endif // NO_PERF_CHANGES
+
+#else
+
+#define DOTVP(s,v,u)		/* DOT Vector Product */		\
+{									\
+    int _i;								\
+    (s) = 0.0;								\
+    for (_i = 0; _i < NDIM; _i++)					\
+        (s) += (v)[_i] * (u)[_i];					\
+}
+
+#endif
+
+#define ABSV(s,v)		/* ABSolute value of a Vector */	\
+{									\
+    real _tmp;		                                                \
+    int _i;								\
+    _tmp = 0.0;								\
+    for (_i = 0; _i < NDIM; _i++)					\
+        _tmp += (v)[_i] * (v)[_i];					\
+    (s) = rsqrt(_tmp);                                                  \
+}
+
+#define DISTV(s,u,v)		/* DISTance between Vectors */        	\
+{									\
+    real _tmp;                                                		\
+    int _i;								\
+    _tmp = 0.0;								\
+    for (_i = 0; _i < NDIM; _i++)					\
+        _tmp += ((u)[_i]-(v)[_i]) * ((u)[_i]-(v)[_i]);		        \
+    (s) = rsqrt(_tmp);                                                  \
+}
+
+#ifdef TWODIM
+
+#define CROSSVP(s,v,u)		/* CROSS Vector Product */		\
+{									\
+    (s) = (v)[0]*(u)[1] - (v)[1]*(u)[0];				\
+}
+
+#endif
+
+#ifdef THREEDIM
+
+#define CROSSVP(v,u,w)		/* CROSS Vector Product */		\
+{									\
+    (v)[0] = (u)[1]*(w)[2] - (u)[2]*(w)[1];				\
+    (v)[1] = (u)[2]*(w)[0] - (u)[0]*(w)[2];				\
+    (v)[2] = (u)[0]*(w)[1] - (u)[1]*(w)[0];				\
+}
+
+#endif
+
+#define INCADDV(v,u)             /* INCrementally ADD Vector */         \
+{									\
+    int _i;                                                   		\
+    for (_i = 0; _i < NDIM; _i++)                                       \
+        (v)[_i] += (u)[_i];                                             \
+}
+
+#define INCSUBV(v,u)             /* INCrementally SUBtract Vector */    \
+{									\
+    int _i;                                             	        \
+    for (_i = 0; _i < NDIM; _i++)                                       \
+        (v)[_i] -= (u)[_i];                                             \
+}
+
+#define INCMULVS(v,s)	/* INCrementally MULtiply Vector by Scalar */	\
+{									\
+    int _i;                                                    		\
+    for (_i = 0; _i < NDIM; _i++)                                       \
+        (v)[_i] *= (s);                                                 \
+}
+
+#define INCDIVVS(v,s)	/* INCrementally DIVide Vector by Scalar */	\
+{									\
+    int _i;                                                   		\
+    for (_i = 0; _i < NDIM; _i++)                                       \
+        (v)[_i] /= (s);                                                 \
+}
+
+/*
+ * Matrix operations.
+ */
+
+#define CLRM(p)			/* CLeaR Matrix */			\
+{									\
+    int _i, _j;								\
+    for (_i = 0; _i < NDIM; _i++)					\
+        for (_j = 0; _j < NDIM; _j++)					\
+	    (p)[_i][_j] = 0.0;						\
+}
+
+#define SETMI(p)		/* SET Matrix to Identity */		\
+{									\
+    int _i, _j;								\
+    for (_i = 0; _i < NDIM; _i++)					\
+        for (_j = 0; _j < NDIM; _j++)					\
+	    (p)[_i][_j] = (_i == _j ? 1.0 : 0.0);			\
+}
+
+#define SETM(p,q)		/* SET Matrix */			\
+{									\
+    int _i, _j;								\
+    for (_i = 0; _i < NDIM; _i++)					\
+        for (_j = 0; _j < NDIM; _j++)					\
+	    (p)[_i][_j] = (q)[_i][_j];					\
+}
+
+#define TRANM(p,q)		/* TRANspose Matrix */			\
+{									\
+    int _i, _j;								\
+    for (_i = 0; _i < NDIM; _i++)					\
+        for (_j = 0; _j < NDIM; _j++)					\
+	    (p)[_i][_j] = (q)[_j][_i];					\
+}
+
+#define ADDM(p,q,r)		/* ADD Matrix */			\
+{									\
+    int _i, _j;								\
+    for (_i = 0; _i < NDIM; _i++)					\
+        for (_j = 0; _j < NDIM; _j++)					\
+	    (p)[_i][_j] = (q)[_i][_j] + (r)[_i][_j];			\
+}
+
+#define SUBM(p,q,r)		/* SUBtract Matrix */			\
+{									\
+    int _i, _j;								\
+    for (_i = 0; _i < NDIM; _i++)					\
+        for (_j = 0; _j < NDIM; _j++)					\
+	    (p)[_i][_j] = (q)[_i][_j] - (r)[_i][_j];			\
+}
+
+#define MULM(p,q,r)		/* Multiply Matrix */			\
+{									\
+    int _i, _j, _k;							\
+    for (_i = 0; _i < NDIM; _i++)					\
+	for (_j = 0; _j < NDIM; _j++) {					\
+	    (p)[_i][_j] = 0.0;						\
+            for (_k = 0; _k < NDIM; _k++)				\
+		(p)[_i][_j] += (q)[_i][_k] * (r)[_k][_j];		\
+        }								\
+}
+
+#define MULMS(p,q,s)		/* MULtiply Matrix by Scalar */		\
+{									\
+    int _i, _j;								\
+    for (_i = 0; _i < NDIM; _i++)				        \
+        for (_j = 0; _j < NDIM; _j++)					\
+	    (p)[_i][_j] = (q)[_i][_j] * (s);				\
+}
+
+#define DIVMS(p,q,s)		/* DIVide Matrix by Scalar */		\
+{									\
+    int _i, _j;								\
+    for (_i = 0; _i < NDIM; _i++)					\
+        for (_j = 0; _j < NDIM; _j++)					\
+	    (p)[_i][_j] = (q)[_i][_j] / (s);				\
+}
+
+#define MULMV(v,p,u)		/* MULtiply Matrix by Vector */		\
+{									\
+    int _i, _j;								\
+    for (_i = 0; _i < NDIM; _i++) {					\
+	(v)[_i] = 0.0;							\
+	for (_j = 0; _j < NDIM; _j++)					\
+	    (v)[_i] += (p)[_i][_j] * (u)[_j];				\
+    }									\
+}
+
+#define OUTVP(p,v,u)		/* OUTer Vector Product */		\
+{									\
+    int _i, _j;								\
+    for (_i = 0; _i < NDIM; _i++)					\
+        for (_j = 0; _j < NDIM; _j++)					\
+	    (p)[_i][_j] = (v)[_i] * (u)[_j];				\
+}
+
+#define TRACEM(s,p)		/* TRACE of Matrix */			\
+{									\
+    int _i;								\
+    (s) = 0.0;								\
+    for (_i = 0.0; _i < NDIM; _i++)					\
+	(s) += (p)[_i][_i];						\
+}
+
+/*
+ * Misc. impure operations.
+ */
+
+#define SETVS(v,s)		/* SET Vector to Scalar */		\
+{									\
+    int _i;								\
+    for (_i = 0; _i < NDIM; _i++)					\
+        (v)[_i] = (s);							\
+}
+
+#define ADDVS(v,u,s)		/* ADD Vector and Scalar */		\
+{									\
+    int _i;								\
+    for (_i = 0; _i < NDIM; _i++)					\
+        (v)[_i] = (u)[_i] + (s);					\
+}
+
+#define SETMS(p,s)		/* SET Matrix to Scalar */		\
+{									\
+    int _i, _j;								\
+    for (_i = 0; _i < NDIM; _i++)					\
+        for (_j = 0; _j < NDIM; _j++)					\
+	    (p)[_i][_j] = (s);						\
+}
diff --git a/test/ccured_olden/bisort/.cvsignore b/test/ccured_olden/bisort/.cvsignore
new file mode 100644
index 000000000..14e4fb3b5
--- /dev/null
+++ b/test/ccured_olden/bisort/.cvsignore
@@ -0,0 +1,25 @@
+*.o
+*.obj
+*.exe
+*.pdb
+*.ilk
+*.cpp
+*.i
+*.s
+*.asm
+*cil.c
+*.rtl
+*box.c
+*infer.c
+*_ppp.c
+*.origi
+*.stackdump
+*_all.c
+allcfiles
+ope.m
+*_comb.c
+*cured.c
+*.optim.c
+changes
+*.browser
+*optimcured*
diff --git a/test/ccured_olden/bisort/CVS/Entries b/test/ccured_olden/bisort/CVS/Entries
new file mode 100644
index 000000000..6bd4f26bb
--- /dev/null
+++ b/test/ccured_olden/bisort/CVS/Entries
@@ -0,0 +1,12 @@
+/HOWTO/1.1/Thu Jul  5 20:05:08 2001//
+/Makefile/1.4/Wed Oct  3 00:09:43 2001//
+/README/1.1/Tue Jun 12 16:43:34 2001//
+/args.c/1.1/Thu Jul  5 20:05:08 2001//
+/bitonic.c/1.3/Wed Oct  3 00:09:43 2001//
+/node.h/1.2/Thu Jul  5 20:05:08 2001//
+/proc.h/1.1/Tue Jun 12 16:43:34 2001//
+/swap.c/1.2/Thu Jul  5 20:05:08 2001//
+/ssplain.c/1.4/Fri Nov  9 00:51:25 2001//
+/.cvsignore/1.7/Wed Aug  7 01:48:34 2002//
+/ssplain.h/1.6/Mon Jan  6 23:28:32 2003//
+D
diff --git a/test/ccured_olden/bisort/CVS/Repository b/test/ccured_olden/bisort/CVS/Repository
new file mode 100644
index 000000000..08d61689d
--- /dev/null
+++ b/test/ccured_olden/bisort/CVS/Repository
@@ -0,0 +1 @@
+cil/test/olden/bisort
diff --git a/test/ccured_olden/bisort/CVS/Root b/test/ccured_olden/bisort/CVS/Root
new file mode 100644
index 000000000..35f411e97
--- /dev/null
+++ b/test/ccured_olden/bisort/CVS/Root
@@ -0,0 +1 @@
+/home/cvs-repository
diff --git a/test/ccured_olden/bisort/HOWTO b/test/ccured_olden/bisort/HOWTO
new file mode 100644
index 000000000..170ad73c9
--- /dev/null
+++ b/test/ccured_olden/bisort/HOWTO
@@ -0,0 +1 @@
+250000 0
\ No newline at end of file
diff --git a/test/ccured_olden/bisort/Makefile b/test/ccured_olden/bisort/Makefile
new file mode 100644
index 000000000..b620fafb0
--- /dev/null
+++ b/test/ccured_olden/bisort/Makefile
@@ -0,0 +1,67 @@
+# /* For copyright information, see olden_v1.0/COPYRIGHT */
+
+BINARY		= bisort.exe
+PROGS		= bitonic args ssplain
+
+ifdef _MSVC
+CC		= cl
+
+SRC		= .c
+OBJ		= .obj
+ASM		= .s
+
+EXTRA_CDEFS	= /DI_TIME /DI_SYS_TIME /DULTRIX
+CDEFS		= /DPLAIN /DSS_PLAIN
+OPTFLAGS	= /Ox
+
+LIBS		= 
+LIBPATH		= 
+else
+CC		= gcc -arch ppc          # MacOS X
+#CC=gcc                                  # other systems
+CCOMP=../../../../ccomp
+CCOMPFLAGS=-dump-c
+
+SRC		= .c
+OBJ		= .o
+ASM		= .s
+
+EXTRA_CDEFS	= -DI_TIME -DI_SYS_TIME -DULTRIX
+CDEFS		= -DPLAIN -DSS_PLAIN
+OPTFLAGS	= -g -Wall -O3
+
+LIBS		=                        # MacOS X
+# LIBS		= -lm
+LIBPATH		= 
+endif
+
+SRCS		= $(addsuffix $(SRC),$(PROGS))
+OBJS		= $(addsuffix $(OBJ),$(PROGS))
+ASMS		= $(addsuffix $(ASM),$(PROGS))
+
+#defaulttarget: $(BINARY)
+
+#$(BINARY):	$(OBJS)
+#	$(CC) $(LDFALGS) $(OPTFLAGS) -o $@ $(OBJS) $(LIBPATH) $(LIBS)
+
+#$(SRC)$(OBJ):
+#	$(CC) $(CDEFS) $(EXTRA_CDEFS) $(MY_CDEFS) $(OPTFLAGS) -c $<
+
+all_s: $(PROGS:%=%.s)
+
+all: $(PROGS:%=%.compcert)
+
+all_gcc: $(PROGS:%=%.gcc)
+
+%.compcert: %.s
+	$(CC) $(CFLAGS) $(LDFALGS) $(OPTFLAGS) -o $*.compcert $*.s $(LIBS)
+
+%.s: %.c ../../../../ccomp
+	$(CCOMP) $(CCOMPFLAGS) $*.c
+
+%.gcc: %.c
+	$(CC) $(CFLAGS) $(LDFALGS) $(OPTFLAGS) -o $*.gcc $*.c $(LIBS)
+
+clean:
+	rm -f $(BINARY) $(OBJS)  $(ASMS) *~ *.light.c *.cil.*
+
diff --git a/test/ccured_olden/bisort/README b/test/ccured_olden/bisort/README
new file mode 100644
index 000000000..7b12c4bbf
--- /dev/null
+++ b/test/ccured_olden/bisort/README
@@ -0,0 +1,22 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+******************
+olden_v1.0/benchmarks/bisort/README
+January 3, 1995
+Martin C. Carlisle
+
+this directory contains the Bitonic Sort benchmark:
+G. Bilardi and A. Nicolau.  "Adaptive Bitonic Sorting:  An optimal
+parallel algorithm for shared-memory machines."  SIAM J. Comput.
+18(2):216-228, 1989.
+
+as implemented for Olden by Martin C. Carlisle
+******************
+
+Makefile - "make bisort" makes executable
+
+args.c - handle command line arguments
+bitonic.c - main routines
+swap.c - used to swap subtrees
+node.h - declarations
+code.h - prototypes
+
diff --git a/test/ccured_olden/bisort/args.c b/test/ccured_olden/bisort/args.c
new file mode 100644
index 000000000..125910267
--- /dev/null
+++ b/test/ccured_olden/bisort/args.c
@@ -0,0 +1,32 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+#ifdef SS_PLAIN
+#include "ssplain.h"
+#endif SS_PLAIN
+
+int mylog(int num)
+{
+  int j=0,k=1;
+  
+  while(k<num) { k*=2; j++; }
+  return j;
+} 
+
+extern int flag;
+int dealwithargs(int argc, char *argv[])
+{
+  int size;
+
+  if (argc > 2)
+    flag = atoi(argv[2]);
+  else
+    flag = 0;
+
+  if (argc > 1)
+    size = atoi(argv[1]);
+  else
+    size = 16;
+
+  return size;  
+}
+
diff --git a/test/ccured_olden/bisort/bitonic.c b/test/ccured_olden/bisort/bitonic.c
new file mode 100644
index 000000000..72ff86117
--- /dev/null
+++ b/test/ccured_olden/bisort/bitonic.c
@@ -0,0 +1,267 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+/* =================== PROGRAM bitonic===================== */
+/* UP - 0, DOWN - 1 */
+
+#include "node.h"   /* Node Definition */
+#include "proc.h"   /* Procedure Types/Nums */
+
+#define CONST_m1 10000
+#define CONST_b 31415821
+#define RANGE 100
+
+#ifdef SS_PLAIN
+#include "ssplain.h"
+#endif SS_PLAIN
+
+#define put(a) chatting("%d",a)
+#define puts(a) chatting(a)
+
+
+int flag=0,foo=0;
+
+#define NewNode(h,v) \
+  \
+{ \
+    h = (HANDLE *) malloc(sizeof(struct node)); \
+      h->value = v; \
+	h->left = NIL; \
+	  h->right = NIL; \
+	  };
+
+
+void InOrder(h)
+     HANDLE *h;
+{
+  HANDLE *l, *r;
+  if ((h != NIL))
+    {
+      l = h->left;
+      r = h->right;
+      InOrder(l);
+      chatting("%d @ 0x%x\n", h->value, (long)h);
+      InOrder(r);
+    }
+}
+
+int mult(int p, int q)
+{
+	int p1, p0, q1, q0;
+	
+	p1=p/CONST_m1; p0=p%CONST_m1;
+	q1=q/CONST_m1; q0=q%CONST_m1;
+	return (((p0*q1+p1*q0) % CONST_m1)*CONST_m1+p0*q0);
+}
+
+int skiprand(int seed, int n)
+{
+#ifdef SS_PLAIN
+  for (; n; n--) seed=mult(seed,CONST_b)+1;
+#else SS_PLAIN
+  for (; n; n--) seed=random(seed);
+#endif SS_PLAIN
+  return seed;
+}
+
+#ifndef SS_PLAIN
+int random(int seed)
+{
+  int tmp;
+  tmp = (mult(seed,CONST_b)+1);
+  return tmp;
+}
+#endif SS_PLAIN
+
+HANDLE* RandTree(n,seed,level)
+     int n,seed,level;
+
+{
+  int next_val,my_name;
+  HANDLE *h;
+  my_name=foo++;
+
+  if (n > 1)
+    {
+#ifdef SS_PLAIN
+      seed = mult(seed,CONST_b)+1;
+#else SS_PLAIN
+      seed = random(seed);
+#endif SS_PLAIN
+      next_val=seed % RANGE;
+      NewNode(h,next_val);
+
+      h->left = RandTree((n/2),seed,level+1);
+      h->right =  RandTree((n/2),skiprand(seed,(n)+1),level+1);
+    }
+  else 
+    h = NIL;
+  return(h);
+} 
+
+void SwapVal(l,r)
+     HANDLE *l, *r;
+{ 
+  int temp;
+  
+  temp = l->value; /* MISS PROBLEM */
+  l->value = r->value;
+  r->value = temp;
+} 
+
+void SwapLeft(l,r)
+     HANDLE *l, *r;
+{
+  HANDLE *h;
+
+  h = r->left;
+  r->left = l->left;
+  l->left = h;
+}
+
+void SwapRight(l,r)
+     HANDLE *l, *r;
+{  
+  HANDLE *h;
+
+  h = r->right;
+  r->right = l->right; /* MISS PROBLEM */
+  l->right = h;
+} 
+
+int Bimerge(root,spr_val,dir)
+     HANDLE *root;
+     int spr_val,dir;
+{ 
+  int rightexchange, elementexchange;
+  HANDLE *pl, *pr;
+
+  /*chatting("enter bimerge %x\n", root);*/
+  rightexchange = ((root->value > spr_val) ^ dir);
+  if (rightexchange)
+    {
+      int temp;
+      temp = root->value;
+      root->value = spr_val;
+      spr_val = temp;
+    }
+  
+  pl = root->left;
+  pr = root->right;
+
+  while (pl != NIL)
+    {
+      elementexchange = ((pl->value > /* MISS PROBLEM */pr->value) ^ dir); 
+      if (rightexchange)
+	{
+	  if (elementexchange)
+	    { 
+	      SwapVal(pl,pr);
+	      SwapRight(pl,pr);
+	      pl = pl->left;
+	      pr = pr->left;
+	    }
+	  else 
+	    { 
+	      pl = pl->right;
+	      pr = pr->right;
+	    }
+	}
+      else 
+	{
+	  if (elementexchange)
+	    { 
+	      SwapVal(pl,pr);
+	      SwapLeft(pl,pr);
+	      pl = pl->right;
+	      pr = pr->right;
+	    }
+	  else 
+	    { 
+	      pl = pl->left;
+	      pr = pr->left; /* MISS PROBLEM */
+	    }
+	}
+    }
+
+  if (root->left != NIL)
+    { 
+      root->value=Bimerge(root->left,root->value,dir);
+      spr_val=Bimerge(root->right,spr_val,dir);
+    }
+  /*chatting("exit bimerge %x\n", root);*/
+  return spr_val;
+} 
+
+int Bisort(root,spr_val,dir)
+     HANDLE *root;
+     int spr_val,dir;
+{ 
+  /*chatting("bisort %x\n", root);*/
+  if (root->left == NIL)
+    { 
+     if ((root->value > spr_val) ^ dir)
+        {
+	  int val;
+	  val = spr_val;
+	  spr_val = root->value;
+	  root->value =val;
+	}
+    }
+  else 
+    {
+      /* Bisort both halves of the tree and merge */
+      root->value=Bisort(root->left,root->value,dir);
+      spr_val=Bisort(root->right,spr_val,!dir);
+      spr_val=Bimerge(root,spr_val,dir);
+    }
+  /*chatting("exit bisort %x\n", root);*/
+  return spr_val;
+} 
+
+void main(argc,argv)
+  int argc;
+ char *argv[];
+
+
+{ 
+  HANDLE *h;
+  int sval;
+  int n;
+   
+  n = dealwithargs(argc,argv);
+
+  chatting("Bisort with %d size\n", n);
+  h = RandTree(n,12345768,0);
+#ifdef SS_PLAIN
+  sval = (mult(245867,CONST_b)+1) % RANGE;
+#else SS_PLAIN
+  sval = random(245867) % RANGE;
+#endif SS_PLAIN
+  if (flag) {
+    InOrder(h);
+    chatting("%d\n",sval);
+   }
+  chatting("**************************************\n");
+  chatting("BEGINNING BITONIC SORT ALGORITHM HERE\n");
+  chatting("**************************************\n");
+
+  chatting("Sorting forward...");
+  sval=Bisort(h,sval,0);
+  if (flag) {
+    chatting("Sorted Tree:\n"); 
+    InOrder(h);
+    chatting("%d\n",sval);
+   }
+  chatting("done\n");
+
+  chatting("sorting backward...");
+  sval=Bisort(h,sval,1);
+  if (flag) {
+    chatting("Sorted Tree:\n"); 
+    InOrder(h);
+    chatting("%d\n",sval);
+   }
+  chatting("done\n");
+  exit(0);
+} 
+
diff --git a/test/ccured_olden/bisort/node.h b/test/ccured_olden/bisort/node.h
new file mode 100644
index 000000000..c1b81c6da
--- /dev/null
+++ b/test/ccured_olden/bisort/node.h
@@ -0,0 +1,18 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+/* =============== NODE STRUCTURE =================== */
+
+struct node { 
+  int value;
+  struct node *left;
+  struct node *right;
+  };
+
+typedef struct node HANDLE;
+
+#define NIL ((HANDLE *) 0)
+#ifdef FUTURES
+#define makenode(procid) ALLOC(procid,sizeof(struct node))
+#else
+#define makenode(procid) mymalloc(sizeof(struct node))
+#endif
diff --git a/test/ccured_olden/bisort/proc.h b/test/ccured_olden/bisort/proc.h
new file mode 100644
index 000000000..eadb80aa4
--- /dev/null
+++ b/test/ccured_olden/bisort/proc.h
@@ -0,0 +1,25 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+/* ========== PROCEDURE TYPES/NUMS ================== */
+
+
+HANDLE *RandTree();
+
+void SwapValue();
+void SwapValLeft();
+void SwapValRight();
+int Bimerge();
+int Bisort();
+#define DD_EXIT 0
+
+
+/* ================= PROC NAMES ==============*/
+
+#ifdef EXTERN 
+  extern char *procnames[]; 
+#else 
+  static char *procnames[] = 
+  {
+    "EXIT"
+  };
+#endif
diff --git a/test/ccured_olden/bisort/ssplain.c b/test/ccured_olden/bisort/ssplain.c
new file mode 100644
index 000000000..43d3f9dbb
--- /dev/null
+++ b/test/ccured_olden/bisort/ssplain.c
@@ -0,0 +1,69 @@
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <limits.h>
+#include <stddef.h>
+#include "ssplain.h"
+
+void chatting(char *s, ...)
+{
+  va_list ap;
+  va_start(ap,s);
+  vfprintf(stderr, s, ap);
+  va_end(ap);
+}
+
+
+#ifdef SS_RAND
+double drand48()
+{
+  double d;
+  d = (double) random() / LONG_MAX;
+  return d;
+}
+
+
+long lrand48()
+{
+  long l = random();
+  return l;
+}
+
+void srand48(long seed)
+{
+  srand(seed);
+}
+#endif SS_RAND
+
+
+#ifndef BEFOREBOX
+static unsigned long bytes_allocated = 0;
+static unsigned long allocations = 0;
+
+void*
+ssplain_malloc(int size)
+{
+  allocations++;
+  bytes_allocated+=size;
+  return malloc(size);
+}
+
+void*
+ssplain_calloc(int nelems, int size)
+{
+  void *p;
+  allocations++;
+  bytes_allocated+= nelems * size;
+  p =  calloc(nelems, size);
+  if(! p) { printf("Allocation failed\n"); exit(3); }
+  return p;
+}
+
+void
+ssplain_alloc_stats()
+{
+  chatting("Allocation stats: %d bytes allocated in %d allocations\n",
+	   bytes_allocated, allocations);
+}
+#endif
diff --git a/test/ccured_olden/bisort/ssplain.h b/test/ccured_olden/bisort/ssplain.h
new file mode 100644
index 000000000..54f3a3edc
--- /dev/null
+++ b/test/ccured_olden/bisort/ssplain.h
@@ -0,0 +1,128 @@
+#ifndef SS_PLAIN_H
+#define SS_PLAIN_H
+
+void * ssplain_malloc(int size);
+void * ssplain_calloc(int nelems, int size);
+void ssplain_alloc_stats();
+ 
+/* Convert MP shutdown to exit */
+#define __ShutDown(ID)     { ssplain_alloc_stats(); exit(ID); } 
+
+/* All these CM-5 things are nops */
+#define CMMD_node_timer_clear(ID)
+#define CMMD_node_timer_start(ID)
+#define CMMD_node_timer_stop(ID)
+#define CMMD_node_timer_elapsed(ID)   ((double)0)
+
+#define CMMD_self_address()   0
+
+#define ClearAllStats()
+
+/* define away the CM-5 allocator */
+#include <stdlib.h>
+
+#ifndef ALLOC
+#define ALLOC(NUM,ESIZE)  ssplain_calloc (NUM+1,ESIZE)
+#endif ALLOC
+
+#ifndef mymalloc
+#define mymalloc malloc
+#endif mymalloc
+
+/* Get all of these multiprocessing things out of here. */
+/* My id will stay that way */
+#define IDMASK 0xffffffff
+
+/* Nothing is getting tested */
+#ifndef RETEST
+#define RETEST()
+#endif RETEST
+
+#ifndef NOTEST
+#define NOTEST()
+#endif NOTEST
+
+/* Everything is local */
+#ifndef local
+#define local            
+#endif local
+
+#ifndef LOCAL
+#define LOCAL(VAL)      (VAL)
+#endif LOCAL
+
+#ifndef ISLOCPTR
+#define ISLOCPTR(VAL)   (1)
+#endif ISLOCPTR
+
+#ifndef MLOCAL
+#define MLOCAL(VAL)
+#endif MLOCAL
+
+/* An atomic increment is a normal increment */
+#ifndef ATOMICINC
+#define ATOMICINC(PVAL) (*(PVAL) = *(PVAL) + 1)
+#endif ATOMICINC
+
+/* Nothing is migrating anywhere */
+#ifndef MIGRATE
+#define MIGRATE(ID)     
+#endif MIGRATE
+
+#ifndef MIGRPH
+#define MIGRPH()
+#endif MIGRPH
+
+#ifndef UNPHASE
+#define UNPHASE()
+#endif UNPHASE
+
+#ifndef PID
+#define PID(VAL)  (0)
+#endif PID
+
+/* All these functions */
+#pragma ccuredvararg("chatting", printf(1));
+void chatting(char *s, ...);
+
+/* just define these guys, they are not going to change */
+#define __NumNodes 1
+#define __MyNodeId 0
+#define __NDim     0
+
+typedef struct ss_future_cell_int {
+  int value;
+} future_cell_int;
+
+/* Where are these things for real? */
+#ifdef SS_RAND
+long lrand48();
+double drand48();
+void srand48(long seed);
+#endif SS_RAND
+
+#define MOD(V,M) ((V) & ((M) - 1))
+#define INC_MOD(V,M) (V) = MOD((V) + 1, (M))
+
+/* Prefetch instructions */
+
+/* Use these for 1 lookahead prefetching */
+
+#ifdef OVERHEAD_ONLY
+#define ASSEMBLE_PREFETCH(ARG)
+#define ASSEMBLE_PREFETCH_HEAD(ARG)
+#else !OVERHEAD_ONLY
+
+#define ASSEMBLE_PREFETCH(ARG) \
+     asm ("lw $0, %0" : /* no outputs */ : "g" (ARG))
+ 
+/* Use these for infinite lookahead prefetching */
+#define ASSEMBLE_PREFETCH_HEAD(ARG) \
+     asm ("lh $0, %0" : /* no outputs */ : "g" (ARG))
+
+#endif OVERHEAD_ONLY
+
+#endif SS_PLAIN_H
+
+
+
diff --git a/test/ccured_olden/bisort/swap.c b/test/ccured_olden/bisort/swap.c
new file mode 100644
index 000000000..e1e98749e
--- /dev/null
+++ b/test/ccured_olden/bisort/swap.c
@@ -0,0 +1,145 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+#define COLLECT_SIZE 256
+#define DFS_SIZE 20
+#include "node.h"
+
+#ifdef SS_PLAIN
+#include "ssplain.h"
+#endif SS_PLAIN
+
+
+typedef struct {
+  int top;
+  HANDLE *handles[DFS_SIZE];
+} stack;
+
+#define push(s,v) (s)->handles[++((s)->top)] = v
+#define pop(s) (s)->handles[((s)->top)--]
+#define stackempty(s) ((s)->top < 0)  
+void VisitCollect(HANDLE *t, local int *collect)
+{
+  register int val;
+  val = t->value;
+  *collect = val;
+}
+
+void VisitCollectReplace(HANDLE *t, local int *collect)
+{
+  register int temp = *collect;
+  register int val = t->value;
+  *collect = val;
+  t->value = temp;
+}
+
+void VisitReplace(HANDLE *t, local int *collect)
+{
+  register int val = *collect;
+  t->value = val;
+}
+
+void swapDFS(local stack *s, local int collection[], void visit())
+{
+  int num=0;
+  
+  while (!stackempty(s) && num < COLLECT_SIZE) 
+    {
+      HANDLE *v = pop(s);
+      visit(v,&collection[num]);
+      num++;
+      if (v->left != NULL) 
+	{
+     HANDLE *child;
+     child = v->right;
+	  push(s,child);
+     child = v->left;
+	  push(s,child);
+	}
+    }
+}
+
+void NewSwapSubTree(HANDLE *t1, HANDLE *t2)
+{
+  local stack c1, r1, s2;
+  int collection[COLLECT_SIZE];
+
+  /*chatting("starting swapping\n");*/
+
+  if (t1!=NULL) 
+    {
+      c1.top = -1;
+      r1.top = -1;
+      s2.top = -1;
+      push(&c1,t1);
+      push(&r1,t1);
+      push(&s2,t2);
+      while (!stackempty(&c1)) 
+	{
+     MLOCAL(t1);
+	  swapDFS(&c1,collection,VisitCollect);
+	  MLOCAL(t2);
+	  swapDFS(&s2,collection,VisitCollectReplace);
+	  MLOCAL(t1);
+	  swapDFS(&r1,collection,VisitReplace);
+	}
+    }
+  /*chatting("ending swapping\n");*/
+
+}
+  
+  
+int *Collect(HANDLE *t1, local int collection[])
+{
+  register int val;
+  if (t1==NULL) return collection;
+  MLOCAL(t1);
+  val = t1->value;
+  *collection = val;
+  collection += 1;
+  collection = Collect(t1->left,collection);
+  collection = Collect(t1->right,collection);
+  return collection;
+}
+
+int *Collect_Replace(HANDLE *t1, local int collection[])
+{
+  register int temp,val;
+  if (t1==NULL) return collection;
+  MLOCAL(t1);
+  temp = *collection;
+  val = t1->value;
+  *collection = val;
+  t1->value = temp;
+  collection += 1;
+  collection = Collect_Replace(t1->left,collection);
+  collection = Collect_Replace(t1->right,collection);
+  return collection;
+}
+
+int *Replace(HANDLE *t1, local int collection[])
+{
+  register int val;
+  if (t1==NULL) return collection;
+  MLOCAL(t1);
+  val = *collection;
+  t1->value = val;
+  collection +=1;
+  collection = Replace(t1->left,collection);
+  collection = Replace(t1->right,collection);
+  return collection;
+}
+
+
+void SwapSubTree(HANDLE *t1, HANDLE *t2)
+{
+  int collection[COLLECT_SIZE];
+  HANDLE *t1loc, *t2loc;
+
+  MLOCAL(t1);
+  Collect(t1,collection);
+  MLOCAL(t2);
+  Collect_Replace(t2,collection);
+  MLOCAL(t1);
+  Replace(t1,collection);
+}
+
diff --git a/test/ccured_olden/em3d/.cvsignore b/test/ccured_olden/em3d/.cvsignore
new file mode 100644
index 000000000..7601f0ad4
--- /dev/null
+++ b/test/ccured_olden/em3d/.cvsignore
@@ -0,0 +1,29 @@
+*.o
+*.obj
+*.exe
+*.pdb
+*.ilk
+*.cpp
+*.i
+*.s
+*.asm
+*cil.c
+*.rtl
+*box.c
+*infer.c
+*_ppp.c
+*.origi
+*.stackdump
+*_all.c
+em3d
+em3d.*box
+
+allcfiles
+ope.m
+*cured.c
+*optimcured*
+*_comb.c
+changes
+*.browser
+*optimcured*
+*.out
diff --git a/test/ccured_olden/em3d/CVS/Entries b/test/ccured_olden/em3d/CVS/Entries
new file mode 100644
index 000000000..32532e6f4
--- /dev/null
+++ b/test/ccured_olden/em3d/CVS/Entries
@@ -0,0 +1,17 @@
+/HOWTO/1.1/Fri Jun 29 11:36:12 2001//
+/MY_HOWTO/1.1/Fri Jun 29 11:36:12 2001//
+/Makefile.plain/1.1/Fri Jun 29 11:36:12 2001//
+/Makefile.ss/1.1/Fri Jun 29 11:36:12 2001//
+/em3d.c/1.1/Fri Jun 29 11:36:12 2001//
+/main.c/1.2/Mon Jul  9 19:38:57 2001//
+/make_graph.h/1.1/Fri Jun 29 11:36:12 2001//
+/util.c/1.1/Fri Jun 29 11:36:12 2001//
+/util.h/1.1/Fri Jun 29 11:36:12 2001//
+/ssplain.c/1.5/Sat Nov  3 05:27:15 2001//
+/Makefile/1.7/Fri Nov  9 01:27:01 2001//
+/args.c/1.2/Mon Mar 18 00:14:04 2002//
+/make_graph.c/1.2/Wed May 29 03:29:06 2002//
+/.cvsignore/1.9/Sat Aug 10 01:19:31 2002//
+/em3d.h/1.2/Sat Aug 10 01:19:31 2002//
+/ssplain.h/1.6/Mon Jan  6 23:28:11 2003//
+D
diff --git a/test/ccured_olden/em3d/CVS/Repository b/test/ccured_olden/em3d/CVS/Repository
new file mode 100644
index 000000000..cb6d74d1d
--- /dev/null
+++ b/test/ccured_olden/em3d/CVS/Repository
@@ -0,0 +1 @@
+cil/test/olden/em3d
diff --git a/test/ccured_olden/em3d/CVS/Root b/test/ccured_olden/em3d/CVS/Root
new file mode 100644
index 000000000..35f411e97
--- /dev/null
+++ b/test/ccured_olden/em3d/CVS/Root
@@ -0,0 +1 @@
+/home/cvs-repository
diff --git a/test/ccured_olden/em3d/HOWTO b/test/ccured_olden/em3d/HOWTO
new file mode 100644
index 000000000..061698dd7
--- /dev/null
+++ b/test/ccured_olden/em3d/HOWTO
@@ -0,0 +1 @@
+2000 100 1
diff --git a/test/ccured_olden/em3d/MY_HOWTO b/test/ccured_olden/em3d/MY_HOWTO
new file mode 100644
index 000000000..fe67f7a87
--- /dev/null
+++ b/test/ccured_olden/em3d/MY_HOWTO
@@ -0,0 +1,2 @@
+2000 100 1?
+(These should be Mowry's arguments.)
diff --git a/test/ccured_olden/em3d/Makefile b/test/ccured_olden/em3d/Makefile
new file mode 100644
index 000000000..b7e1d60c9
--- /dev/null
+++ b/test/ccured_olden/em3d/Makefile
@@ -0,0 +1,64 @@
+# /* For copyright information, see olden_v1.0/COPYRIGHT */
+
+BINARY		= em3d.exe
+BINARYCCOMP	= em3d.exe.compcert
+PROGS		= main em3d make_graph util args ssplain
+
+
+OLDENHOME	= /tmp/olden
+
+CC		= gcc -arch ppc
+CCOMP		= ../../../../ccomp
+CCOMPFLAGS=-dump-c
+
+SRC		= .c
+OBJ		= .o
+ASM		= .s
+SRCS		= $(addsuffix $(SRC),$(PROGS))
+OBJS		= $(addsuffix $(OBJ),$(PROGS))
+ASMS		= $(addsuffix $(ASM),$(PROGS))
+INCDIRS		= /usr/include 
+
+EXTRA_CDEFS	= -DI_TIME -DI_SYS_TIME -DULTRIX
+CDEFS		= -DPLAIN -DSS_PLAIN -DSS_RAND #-I$(OLDENHOME)/common
+OPTFLAGS	= -g -Wall -O3
+
+LIBS		= 
+LIBPATH		= 
+
+#$(BINARY):	$(OBJS)
+#	$(CC) $(LDFALGS) $(OPTFLAGS) -o $@ $(OBJS) $(LIBPATH) $(LIBS)
+
+all_s: $(PROGS:%=%.s)
+
+all: $(PROGS:%=%.compcert)
+
+all_gcc: $(PROGS:%=%.gcc)
+
+%.compcert: %.s
+	$(CC) $(CFLAGS) $(LDFALGS) $(OPTFLAGS) -o $*.compcert $*.s $(LIBS)
+
+%.s: %.c ../../../../ccomp
+	$(CCOMP) $(CCOMPFLAGS) $*.c
+
+%.gcc: %.c
+	$(CC) $(CFLAGS) $(LDFALGS) $(OPTFLAGS) -o $*.gcc $*.c $(LIBS)
+
+
+
+#$(BINARYCCOMP):	$(OBJSCCOMP)
+#	$(CC) $(LDFALGS) $(OPTFLAGS) -o $@ $(OBJSCCOMP) $(LIBPATH) $(LIBS)
+
+#$(OBJCCOMP):
+#	$(CCOMP) $(CDEFS) $(EXTRA_CDEFS) $(MY_CDEFS) $(OPTFLAGS) -c $<
+
+$(SRC)$(OBJ):
+	$(CC) $(CDEFS) $(EXTRA_CDEFS) $(MY_CDEFS) $(OPTFLAGS) -c $<
+
+clean:
+	rm -f $(BINARY) $(BINARYCCOMP) $(OBJS) $(ASMS) *~ *.light.c *.cil.* 
+
+links:
+	/bin/rm -f ssplain.[hc]
+	ln -s $(OLDENHOME)/common/ssplain.h
+	ln -s $(OLDENHOME)/common/ssplain.c
diff --git a/test/ccured_olden/em3d/Makefile.plain b/test/ccured_olden/em3d/Makefile.plain
new file mode 100644
index 000000000..b87f77b12
--- /dev/null
+++ b/test/ccured_olden/em3d/Makefile.plain
@@ -0,0 +1,7 @@
+# /* For copyright information, see olden_v1.0/COPYRIGHT */
+
+BINARY		= em3d
+FILES		= main em3d make_graph util args ssplain
+
+include ../Makefile.plain
+
diff --git a/test/ccured_olden/em3d/Makefile.ss b/test/ccured_olden/em3d/Makefile.ss
new file mode 100644
index 000000000..f07d9395c
--- /dev/null
+++ b/test/ccured_olden/em3d/Makefile.ss
@@ -0,0 +1,8 @@
+# /* For copyright information, see olden_v1.0/COPYRIGHT */
+
+BINARY		= em3d
+FILES		= main em3d make_graph util args ssplain
+
+MY_CDEFS	= -DAMIR
+include ../Makefile.ss
+
diff --git a/test/ccured_olden/em3d/args.c b/test/ccured_olden/em3d/args.c
new file mode 100644
index 000000000..f48638e67
--- /dev/null
+++ b/test/ccured_olden/em3d/args.c
@@ -0,0 +1,21 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "em3d.h"
+
+void dealwithargs(int argc, char *argv[])
+{
+  if (argc > 1)
+    n_nodes = atoi(argv[1]);
+  else
+    n_nodes = 10;
+
+  if (argc > 2)
+    d_nodes = atoi(argv[2]);
+  else
+    d_nodes = 3;
+
+  if (argc > 3)
+    iters = atoi(argv[3]);
+  else
+    iters = 100;
+}
diff --git a/test/ccured_olden/em3d/em3d.c b/test/ccured_olden/em3d/em3d.c
new file mode 100644
index 000000000..760dd1a07
--- /dev/null
+++ b/test/ccured_olden/em3d/em3d.c
@@ -0,0 +1,16 @@
+#include "em3d.h"
+
+void compute_nodes(node_t *nodelist)
+{
+  int i;
+  
+  for (; nodelist; nodelist = nodelist->next)
+    for (i=0; i < nodelist->from_count; i++) /* bad load */
+      {
+	node_t *other_node = nodelist->from_nodes[i]; /* bad load */ 
+	double coeff = nodelist->coeffs[i]; /* bad load */
+	double value = other_node->value; /* bad load: 50% */ 
+	
+	nodelist->value -= coeff * value;
+      }
+}
diff --git a/test/ccured_olden/em3d/em3d.h b/test/ccured_olden/em3d/em3d.h
new file mode 100644
index 000000000..ba1eac221
--- /dev/null
+++ b/test/ccured_olden/em3d/em3d.h
@@ -0,0 +1,38 @@
+/* em3d.h - Header file for the electromagnetic problem in 3 dimensions
+ *
+ * By:  Martin C. Carlisle
+ * Date: Feb. 23, 1994
+ *
+ */
+
+#ifndef EM3D
+#define EM3D
+
+extern int n_nodes; /* number of nodes (E and H) */
+extern int d_nodes; /* degree of nodes */
+extern int iters;   /* number of iterations */
+
+#define ALLOC malloc
+#define DIST_SPAN 6
+
+#define assert(a) if (!a) {printf("Assertion failure\n"); exit(-1);}
+
+
+typedef struct node_t {
+  double value;
+  struct node_t *next;
+  struct node_t ** to_nodes; /* array of nodes pointed to */
+  struct node_t ** from_nodes; /* array of nodes data comes from */
+  double         * coeffs; /* array of coeffs on edges */
+  int from_count;
+} node_t;
+
+typedef struct graph_t {
+  node_t *e_nodes;
+  node_t *h_nodes;
+} graph_t;
+
+/* Perform 1 step for a nodelist */
+void compute_nodes(node_t *nodelist);
+#endif
+
diff --git a/test/ccured_olden/em3d/main.c b/test/ccured_olden/em3d/main.c
new file mode 100644
index 000000000..61a3af4f0
--- /dev/null
+++ b/test/ccured_olden/em3d/main.c
@@ -0,0 +1,45 @@
+#include <stdio.h>
+
+#include "em3d.h"
+#include "make_graph.h"
+
+#define chatting(A)
+
+void print_graph(graph_t graph) 
+{
+#ifdef GET_OUT
+  node_t *cur_node;
+
+  for(cur_node=graph.e_nodes; cur_node; cur_node=cur_node->next)
+    {
+      chatting(("E: value %f, from_count %d\n",cur_node->value,
+	       cur_node->from_count));
+    }
+  for(cur_node=graph.h_nodes; cur_node; cur_node=cur_node->next)
+    {
+      chatting(("H: value %f, from_count %d\n",cur_node->value,
+	       cur_node->from_count));
+    }
+#endif GET_OUT 
+}
+
+int iters;
+
+int main(int argc, char *argv[])
+{
+  int i;
+  graph_t graph;
+
+  dealwithargs(argc,argv);
+  graph=initialize_graph();
+  print_graph(graph);
+
+  for (i = 0; i < iters; i++)
+    {
+      compute_nodes(graph.e_nodes);
+      compute_nodes(graph.h_nodes);
+      fprintf(stderr, "Completed a computation phase: %d\n", i);
+      print_graph(graph);
+    }
+  return 0;
+}
diff --git a/test/ccured_olden/em3d/make_graph.c b/test/ccured_olden/em3d/make_graph.c
new file mode 100644
index 000000000..6bec340db
--- /dev/null
+++ b/test/ccured_olden/em3d/make_graph.c
@@ -0,0 +1,173 @@
+/* make_graph.c - Create a graph to be solved for the electromagnetic
+ *                problem in 3 dimensions.
+ *
+ * By:  Martin C. Carlisle
+ * Date: Feb 23, 1994
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "em3d.h"
+#include "util.h"
+
+#define NUM_H_NODES  n_nodes
+#define H_NODE_DEGREE d_nodes
+
+#define NUM_E_NODES  n_nodes
+#define E_NODE_DEGREE d_nodes
+
+int n_nodes;
+int d_nodes;
+
+node_t **make_table(int size)
+{
+  node_t **retval;
+
+  retval = (node_t **) ALLOC(size*sizeof(node_t *));
+  assert(retval);
+  return retval;
+}
+
+// post:
+//   all 'next' fields valid or null
+//   to_nodes, from_nodes, coefs are dead
+void fill_table(node_t **table, int size)
+{
+  int i;
+  
+  /* Now we fill the table with allocated nodes */
+  for (i=0; i<size; i++)
+    {
+      table[i] = (node_t *) ALLOC(sizeof(node_t));
+      table[i]->value = gen_uniform_double();
+      table[i]->from_count = 0;
+
+      if (i > 0) 
+	table[i-1]->next = table[i];
+    }
+  table[size-1]->next = NULL;
+}
+
+// post:
+//   nodes in 'nodelist' have their 'to_nodes' array created, of
+//   size 'degree'; then this array is filled with pointers to
+//   randomly-chosen nodes (no duplicates); 'from_count' in the
+//   pointed-to node keeps track of its in-degree
+void make_neighbors(node_t *nodelist, node_t **table, int tablesz,
+		    int degree)
+{
+  node_t *cur_node;
+
+  for(cur_node = nodelist; cur_node; cur_node=cur_node->next)
+    {
+      node_t *other_node;
+      int j,k;
+
+      cur_node->to_nodes = (node_t **) ALLOC(degree*(sizeof(node_t *)));
+      for (j=0; j<degree; j++)
+	{
+	  /* Make sure no duplicates are generated */
+	  do
+	    {
+	      other_node = table[gen_number(tablesz)];
+	      for (k=0; k<j; k++)
+		if (other_node == cur_node->to_nodes[k]) break;
+	    }
+	  while (k<j);
+	  cur_node->to_nodes[j]=other_node;
+	  other_node->from_count++; /* bad load: 50% */
+	}
+    }
+}
+
+// post:
+//   from_nodes and coeffs get allocated, size specified by 'from_count',
+//   which is the 'degree' from above; coeff's entries are set randomly,
+//   from_nodes' entries left dead; from_count then set to 0
+void update_from_coeffs(node_t *nodelist)
+{
+  node_t *cur_node;
+
+  /* Setup coefficient and from_nodes vectors for h nodes */
+  for (cur_node = nodelist; cur_node; cur_node=cur_node->next)
+    {
+      int from_count = cur_node->from_count;
+      int k;
+
+      cur_node->from_nodes = (node_t **) ALLOC(from_count * sizeof(node_t *));
+      cur_node->coeffs = (double *) ALLOC(from_count * sizeof(double));
+      for (k=0; k<from_count; k++)
+	cur_node->coeffs[k] = gen_uniform_double();
+
+      cur_node->from_count = 0;
+    }
+}
+
+// post:
+//   nodes pointed-to by those on 'nodelist' have their from_nodes' 
+//   entries filled with back-edges; from_count is used to add
+//   information contiguously; global algorithm structure keeps the
+//   array access in bounds (we counted in-degree before, and that
+//   count was used to allocate, and now we one again enumerate the
+//   pointers to a node); perhaps a runtime check is in order here
+void fill_from_fields(node_t *nodelist, int degree)
+{
+  node_t *cur_node;
+  for(cur_node = nodelist; cur_node; cur_node = cur_node->next)
+    {
+      int j;
+
+      for (j=0; j<degree; j++)
+	{
+	  node_t *other_node = cur_node->to_nodes[j];
+	  other_node->from_nodes[other_node->from_count] = cur_node;
+	  other_node->from_count++;
+	}
+    }
+}
+
+// post:
+//   two arrays of nodes are created; all 'h' nodes are then pointed to
+//   H_NODE_DEGREE 'e' nodes, and vice-versa for 'e' nodes; backedge
+//   information is also computed; pointers to the first nodes of each 
+//   set are stashed in a graph_t and returned (sets are linked together
+//   as a linked list)
+graph_t initialize_graph()
+{
+  node_t **h_table;
+  node_t **e_table;
+  graph_t retval;
+
+  /* We start by creating a table of pointers to the h nodes */
+  h_table = make_table(NUM_H_NODES);
+  fill_table(h_table,NUM_H_NODES);
+
+  /* We repeat the same for the e nodes */
+  e_table = make_table(NUM_E_NODES);
+  fill_table(e_table,NUM_E_NODES);
+
+  /* At this point, for each h node, we give it the appropriate number
+     of neighbors as defined by the degree */
+  make_neighbors(h_table[0],e_table,NUM_E_NODES,H_NODE_DEGREE);
+  make_neighbors(e_table[0],h_table,NUM_H_NODES,E_NODE_DEGREE);
+
+  /* We now create from count and initialize coefficients */
+  update_from_coeffs(h_table[0]);
+  update_from_coeffs(e_table[0]);
+
+  /* Fill the from fields in the nodes */
+  fill_from_fields(h_table[0],H_NODE_DEGREE);
+  fill_from_fields(e_table[0],E_NODE_DEGREE);
+
+  retval.e_nodes=e_table[0];
+  retval.h_nodes=h_table[0];
+  
+  free(h_table);
+  free(e_table);
+
+  return retval;
+}
+
+  
+
diff --git a/test/ccured_olden/em3d/make_graph.h b/test/ccured_olden/em3d/make_graph.h
new file mode 100644
index 000000000..2433c018b
--- /dev/null
+++ b/test/ccured_olden/em3d/make_graph.h
@@ -0,0 +1,13 @@
+/* make_graph.h
+ *
+ * By:  Martin C. Carlisle
+ * Date: Feb 23, 1994
+ *
+ */
+
+#include "em3d.h"
+
+/* initialize graph returns a structure with pointers to lists of e and h
+ * nodes.
+ */ 
+graph_t initialize_graph();
diff --git a/test/ccured_olden/em3d/ssplain.c b/test/ccured_olden/em3d/ssplain.c
new file mode 100644
index 000000000..346c5ed24
--- /dev/null
+++ b/test/ccured_olden/em3d/ssplain.c
@@ -0,0 +1,70 @@
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <limits.h>
+#include <stddef.h>
+#include "ssplain.h"
+
+
+void chatting(char *s, ...)
+{
+  va_list ap;
+  va_start(ap,s);
+  vfprintf(stderr, s, ap);
+  va_end(ap);
+}
+
+
+#ifdef SS_RAND
+double drand48()
+{
+  double d;
+  d = (double) random() / LONG_MAX;
+  return d;
+}
+
+
+long lrand48()
+{
+  long l = random();
+  return l;
+}
+
+void srand48(long seed)
+{
+  srand(seed);
+}
+#endif SS_RAND
+
+
+#ifndef BEFOREBOX
+static unsigned long bytes_allocated = 0;
+static unsigned long allocations = 0;
+
+void*
+ssplain_malloc(int size)
+{
+  allocations++;
+  bytes_allocated+=size;
+  return malloc(size);
+}
+
+void*
+ssplain_calloc(int nelems, int size)
+{
+  void *p;
+  allocations++;
+  bytes_allocated+= nelems * size;
+  p =  calloc(nelems, size);
+  if(!p) { printf("Cannot allocate\n"); exit(3); }
+  return p;
+}
+
+void
+ssplain_alloc_stats()
+{
+  chatting("Allocation stats: %d bytes allocated in %d allocations\n",
+	   bytes_allocated, allocations);
+}
+#endif
diff --git a/test/ccured_olden/em3d/ssplain.h b/test/ccured_olden/em3d/ssplain.h
new file mode 100644
index 000000000..54f3a3edc
--- /dev/null
+++ b/test/ccured_olden/em3d/ssplain.h
@@ -0,0 +1,128 @@
+#ifndef SS_PLAIN_H
+#define SS_PLAIN_H
+
+void * ssplain_malloc(int size);
+void * ssplain_calloc(int nelems, int size);
+void ssplain_alloc_stats();
+ 
+/* Convert MP shutdown to exit */
+#define __ShutDown(ID)     { ssplain_alloc_stats(); exit(ID); } 
+
+/* All these CM-5 things are nops */
+#define CMMD_node_timer_clear(ID)
+#define CMMD_node_timer_start(ID)
+#define CMMD_node_timer_stop(ID)
+#define CMMD_node_timer_elapsed(ID)   ((double)0)
+
+#define CMMD_self_address()   0
+
+#define ClearAllStats()
+
+/* define away the CM-5 allocator */
+#include <stdlib.h>
+
+#ifndef ALLOC
+#define ALLOC(NUM,ESIZE)  ssplain_calloc (NUM+1,ESIZE)
+#endif ALLOC
+
+#ifndef mymalloc
+#define mymalloc malloc
+#endif mymalloc
+
+/* Get all of these multiprocessing things out of here. */
+/* My id will stay that way */
+#define IDMASK 0xffffffff
+
+/* Nothing is getting tested */
+#ifndef RETEST
+#define RETEST()
+#endif RETEST
+
+#ifndef NOTEST
+#define NOTEST()
+#endif NOTEST
+
+/* Everything is local */
+#ifndef local
+#define local            
+#endif local
+
+#ifndef LOCAL
+#define LOCAL(VAL)      (VAL)
+#endif LOCAL
+
+#ifndef ISLOCPTR
+#define ISLOCPTR(VAL)   (1)
+#endif ISLOCPTR
+
+#ifndef MLOCAL
+#define MLOCAL(VAL)
+#endif MLOCAL
+
+/* An atomic increment is a normal increment */
+#ifndef ATOMICINC
+#define ATOMICINC(PVAL) (*(PVAL) = *(PVAL) + 1)
+#endif ATOMICINC
+
+/* Nothing is migrating anywhere */
+#ifndef MIGRATE
+#define MIGRATE(ID)     
+#endif MIGRATE
+
+#ifndef MIGRPH
+#define MIGRPH()
+#endif MIGRPH
+
+#ifndef UNPHASE
+#define UNPHASE()
+#endif UNPHASE
+
+#ifndef PID
+#define PID(VAL)  (0)
+#endif PID
+
+/* All these functions */
+#pragma ccuredvararg("chatting", printf(1));
+void chatting(char *s, ...);
+
+/* just define these guys, they are not going to change */
+#define __NumNodes 1
+#define __MyNodeId 0
+#define __NDim     0
+
+typedef struct ss_future_cell_int {
+  int value;
+} future_cell_int;
+
+/* Where are these things for real? */
+#ifdef SS_RAND
+long lrand48();
+double drand48();
+void srand48(long seed);
+#endif SS_RAND
+
+#define MOD(V,M) ((V) & ((M) - 1))
+#define INC_MOD(V,M) (V) = MOD((V) + 1, (M))
+
+/* Prefetch instructions */
+
+/* Use these for 1 lookahead prefetching */
+
+#ifdef OVERHEAD_ONLY
+#define ASSEMBLE_PREFETCH(ARG)
+#define ASSEMBLE_PREFETCH_HEAD(ARG)
+#else !OVERHEAD_ONLY
+
+#define ASSEMBLE_PREFETCH(ARG) \
+     asm ("lw $0, %0" : /* no outputs */ : "g" (ARG))
+ 
+/* Use these for infinite lookahead prefetching */
+#define ASSEMBLE_PREFETCH_HEAD(ARG) \
+     asm ("lh $0, %0" : /* no outputs */ : "g" (ARG))
+
+#endif OVERHEAD_ONLY
+
+#endif SS_PLAIN_H
+
+
+
diff --git a/test/ccured_olden/em3d/util.c b/test/ccured_olden/em3d/util.c
new file mode 100644
index 000000000..3dc5592dd
--- /dev/null
+++ b/test/ccured_olden/em3d/util.c
@@ -0,0 +1,34 @@
+#define CONST_seed 45
+#include <stdlib.h>
+
+/* initialize the random number generator for a particular processor */
+void init_random(int myid)
+{
+  srand48(myid*CONST_seed);
+}
+
+/* return a random number from 0 to range-1 */
+int gen_number(int range)
+{
+  return lrand48() % range;
+}
+
+/* return a random number in [-range+1,range-1] */
+int gen_signed_number(int range)
+{
+  int temp;
+ 
+  temp = lrand48() % (2*range-1);  /* 0..2*range-2 */
+  return temp-(range-1);
+}
+
+/* Generate a double from 0.0 to 1.0 */
+double gen_uniform_double()
+{
+  return drand48();
+}
+
+int check_percent(int percent)
+{
+  return (drand48() < (double) (percent/100.0));
+}
diff --git a/test/ccured_olden/em3d/util.h b/test/ccured_olden/em3d/util.h
new file mode 100644
index 000000000..a6b09f284
--- /dev/null
+++ b/test/ccured_olden/em3d/util.h
@@ -0,0 +1,23 @@
+/* util.h
+ *
+ * headers for randomizing utilities 
+ *
+ * By: Martin C. Carlisle
+ * Date: Feb 23, 1994
+ *
+ */
+
+/* initialize the random number generator for a particular processor */
+void init_random(int myid);
+
+/* return a random number from 0 to range-1 */
+int gen_number(int range);
+
+/* return a random number in [-range+1,range-1] */
+int gen_signed_number(int range);
+
+/* Generate a double from 0.0 to 1.0 */
+double gen_uniform_double();
+
+/* Return 1, percent percent of the time and 0 otherwise */
+int check_percent(int percent);
diff --git a/test/ccured_olden/health/.cvsignore b/test/ccured_olden/health/.cvsignore
new file mode 100644
index 000000000..4d714a14b
--- /dev/null
+++ b/test/ccured_olden/health/.cvsignore
@@ -0,0 +1,30 @@
+*.o
+*.obj
+*.exe
+*.pdb
+*.ilk
+*.cpp
+*.i
+*.s
+*.asm
+*cil.c
+*.rtl
+*box.c
+*infer.c
+*_ppp.c
+*.origi
+*.stackdump
+*_all.c
+changes.out
+health.cil
+health.*box
+health.exe_comb.browser
+health
+allcfiles
+ope.m
+*cured.c
+*.optim.c
+*_comb.c
+changes
+output
+out.diff
diff --git a/test/ccured_olden/health/.gdbinit b/test/ccured_olden/health/.gdbinit
new file mode 100644
index 000000000..ce03cd23b
--- /dev/null
+++ b/test/ccured_olden/health/.gdbinit
@@ -0,0 +1,6 @@
+# .gdbinit
+
+file health
+set args 2 5 1
+break main
+run
diff --git a/test/ccured_olden/health/CVS/Entries b/test/ccured_olden/health/CVS/Entries
new file mode 100644
index 000000000..87bb1a829
--- /dev/null
+++ b/test/ccured_olden/health/CVS/Entries
@@ -0,0 +1,16 @@
+/.gdbinit/1.1/Sat Jul 21 16:09:41 2001//
+/HOWTO/1.1/Sat Jul 14 22:53:03 2001//
+/README/1.1/Mon Jun 11 22:47:26 2001//
+/health.h/1.3/Sat Jul 21 16:09:41 2001//
+/list.c/1.3/Sat Jul 21 16:09:41 2001//
+/poisson.c/1.2/Mon Jul  9 16:14:59 2001//
+/ssplain.c/1.5/Fri Nov  9 01:27:01 2001//
+/args.c/1.5/Mon Nov 12 15:44:12 2001//
+/health.c/1.7/Mon Nov 12 15:44:12 2001//
+/out.orig/1.2/Mon Nov 12 15:44:12 2001//
+/out.orig.msvc/1.1/Tue Dec  4 04:57:46 2001//
+/testit/1.2/Tue Dec  4 05:07:50 2001//
+/Makefile/1.11/Tue Dec 18 06:56:15 2001//
+/.cvsignore/1.14/Fri Oct  4 16:28:44 2002//
+/ssplain.h/1.5/Mon Jan  6 23:28:55 2003//
+D
diff --git a/test/ccured_olden/health/CVS/Repository b/test/ccured_olden/health/CVS/Repository
new file mode 100644
index 000000000..8167847aa
--- /dev/null
+++ b/test/ccured_olden/health/CVS/Repository
@@ -0,0 +1 @@
+cil/test/olden/health
diff --git a/test/ccured_olden/health/CVS/Root b/test/ccured_olden/health/CVS/Root
new file mode 100644
index 000000000..35f411e97
--- /dev/null
+++ b/test/ccured_olden/health/CVS/Root
@@ -0,0 +1 @@
+/home/cvs-repository
diff --git a/test/ccured_olden/health/HOWTO b/test/ccured_olden/health/HOWTO
new file mode 100644
index 000000000..8f57aa464
--- /dev/null
+++ b/test/ccured_olden/health/HOWTO
@@ -0,0 +1 @@
+5 500 1 1 
diff --git a/test/ccured_olden/health/Makefile b/test/ccured_olden/health/Makefile
new file mode 100644
index 000000000..d9c5c767c
--- /dev/null
+++ b/test/ccured_olden/health/Makefile
@@ -0,0 +1,72 @@
+# /* For copyright information, see olden_v1.0/COPYRIGHT */
+
+BINARY		= health.exe
+PROGS		= health poisson list args ssplain
+
+# ------- msvc ------
+ifdef _MSVC
+CC		= cl
+
+CFLAGS		=
+CONLY           = /c
+SRC		= .c
+OBJ		= .obj
+ASM		= .s
+EXEOUT          = /Fe
+
+EXTRA_CDEFS	= /DI_TIME /DI_SYS_TIME /DULTRIX
+CDEFS		= /DPLAIN /DSS_PLAIN
+ifdef _DEBUG
+OPTFLAGS        = /Zi /MLd
+else
+OPTFLAGS	= /Ox
+endif
+
+LIBS		= 
+LIBPATH		= 
+
+# ------- gcc ------
+else
+CC		= gcc -arch ppc
+CCOMP=../../../../ccomp
+CCOMPFLAGS=-dump-c
+
+CFLAGS		= -O3
+CONLY           = -c
+SRC		= .c
+OBJ		= .gcc
+OBJCCOMP	= .compcert
+ASM		= .s
+
+EXTRA_CDEFS	= -DI_TIME -DI_SYS_TIME -DULTRIX
+CDEFS		= -DPLAIN -DSS_PLAIN
+OPTFLAGS	= -g -Wall -O3
+EXEOUT          = -gcc
+
+LIBS		= 
+LIBPATH		= 
+endif
+
+# ------- common --------
+
+all_s: $(PROGS:%=%.s)
+
+all: $(PROGS:%=%.compcert)
+
+all_gcc: $(PROGS:%=%.gcc)
+
+%.compcert: %.s
+	$(CC) $(CFLAGS) $(LDFALGS) $(OPTFLAGS) -o $*.compcert $*.s $(LIBS)
+
+%.s: %.c ../../../../ccomp
+	$(CCOMP) $(CCOMPFLAGS) $*.c
+
+%.gcc: %.c
+	$(CC) $(CFLAGS) $(LDFALGS) $(OPTFLAGS) -o $*.gcc $*.c $(LIBS)
+
+
+clean:
+	rm -f $(BINARY) *.o *~ *.s *.light.c *.cil.* *.compcert
+
+
+
diff --git a/test/ccured_olden/health/README b/test/ccured_olden/health/README
new file mode 100644
index 000000000..aff907297
--- /dev/null
+++ b/test/ccured_olden/health/README
@@ -0,0 +1,20 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+**********************
+olden_v1.0/benchmarks/health/README
+January 3, 1995
+Martin C. Carlisle
+
+this directory contains the health benchmark:
+
+G. Lomow, J. Cleary, B. Unger and D. West.  "A Performance Study of Time Warp"
+In SCS Multiconference on Distributed Simulation, pages 50-55, Feb. 1988.
+
+as implemented for Olden by Gordon C. Mackenzie
+**********************
+
+Makefile - use "make health" to create executable
+
+args.c - process command line args
+health.[ch] - health routines
+list.c - list routines
+poisson.c - random routines
diff --git a/test/ccured_olden/health/args.c b/test/ccured_olden/health/args.c
new file mode 100644
index 000000000..f8e7a8cc8
--- /dev/null
+++ b/test/ccured_olden/health/args.c
@@ -0,0 +1,34 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+/*****************************************************************
+ * args.c:  Handles arguments to command line.                   *
+ *          To be used with health.c.                            *
+ *****************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "health.h"
+
+#ifdef SS_PLAIN
+#include "ssplain.h"
+#endif SS_PLAIN
+
+void dealwithargs(int argc, char *argv[]) { 
+
+  if (argc < 4) 
+    {
+      fprintf(stderr, "usage:  health <# levels> <time> <seed>\n");
+      exit(1); 
+    }
+  
+  max_level = atoi(argv[1]);
+  fprintf(stderr, "This is max_level : %d\n", max_level);
+  max_time = atol(argv[2]);
+  fprintf(stderr, "This is max_time : %ld\n", max_time);    // sm: "%d" -> "%ld"
+  seed = atol(argv[3]);
+}
+
+
+
+
+
diff --git a/test/ccured_olden/health/health.c b/test/ccured_olden/health/health.c
new file mode 100644
index 000000000..6de1d0d79
--- /dev/null
+++ b/test/ccured_olden/health/health.c
@@ -0,0 +1,309 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+/******************************************************************* 
+ *  Health.c : Model of the Colombian Health Care System           *
+ *******************************************************************/ 
+#ifdef SS_PLAIN
+#include "ssplain.h"
+#endif SS_PLAIN
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include "health.h"
+#include <assert.h>
+
+struct Village *alloc_tree(int level, int label, struct Village *back) 
+{  
+  if (level == 0) 
+    {
+      return NULL;
+    }
+  else 
+    {
+      int                  i;
+      struct Village       *new;
+
+      new = (struct Village *)malloc(sizeof(struct Village));
+
+      new->back = back;
+      new->label = label;
+      new->seed = label * (IQ + seed); 
+      new->hosp.personnel = (int)pow(2, level - 1);
+      new->hosp.free_personnel = new->hosp.personnel;
+      new->hosp.num_waiting_patients = 0;
+      new->hosp.assess.forward = NULL;
+      new->hosp.assess.back = NULL;
+      new->hosp.waiting.forward = NULL;
+      new->hosp.waiting.back = NULL;
+      new->hosp.inside.forward = NULL;
+      new->hosp.inside.back = NULL;
+      new->returned.back = NULL;
+      new->returned.forward = NULL;
+
+      for (i = 0; i < 4; i++)       
+	new->forward[i] = 
+	  alloc_tree(level - 1, (label * 4) + i + 1, new); 
+
+      return new;
+    }
+}
+
+
+struct Results get_results(struct Village *village)
+{
+  int                    i;
+  struct List            *list;
+  struct Patient         *p;
+  struct Village         *v;
+  struct Results         r1;
+
+  r1.total_hosps = 0.0;
+  r1.total_patients = 0.0;
+  r1.total_time = 0.0;
+
+  if (village == NULL) return r1;
+
+  for (i = 0; i < 4; i++ ) {
+    struct Results res;
+
+    v = village->forward[i];
+    res = get_results(v); 
+
+    r1.total_hosps += res.total_hosps;
+    r1.total_patients += res.total_patients;
+    r1.total_time += res.total_time; 
+  }
+
+  list = village->returned.forward;
+  while (list != NULL) {
+    p = list->patient;
+    r1.total_hosps += (float)(p->hosps_visited);
+    r1.total_time += (float)(p->time); 
+    r1.total_patients += 1.0;
+    list = list->forward; 
+  }
+  
+  return r1; 
+}
+
+
+void check_patients_inside(struct Village *village, struct List *list) 
+{
+  struct Patient         *p;
+  
+  while (list != NULL) 
+    {
+
+      p = list->patient;
+      p->time_left--;
+      
+      if (p->time_left == 0) 
+	{
+	  village->hosp.free_personnel++;
+	  removeList(&(village->hosp.inside), p); 
+	  addList(&(village->returned), p); 
+	}    
+      list = list->forward; 
+    } 
+}
+
+
+struct List *check_patients_assess(struct Village *village, struct List *list) 
+{
+  float                 rand;
+  struct Patient          *p;
+  int                      label;
+
+  while (list != NULL) 
+    {
+      p = list->patient;
+      p->time_left--;
+      label = village->label;
+
+      if (p->time_left == 0) 
+	{ 
+	  rand = my_rand(village->seed);
+	  village->seed = (long)(rand * IM);
+	  label = village->label;
+
+	  if (rand > 0.1 || label == 0) 
+	    {
+	      removeList(&(village->hosp.assess), p);
+	      addList(&(village->hosp.inside), p);
+	      p->time_left = 10;
+	      p->time += p->time_left;
+	    }
+	  else 
+	    {
+	      village->hosp.free_personnel++;
+	      removeList(&(village->hosp.assess), p);
+	      addList(&(village->hosp.up), p); 
+	    } 
+	}
+      
+      list = list->forward; 
+    } 
+  return &(village->hosp.up);
+}
+
+
+void check_patients_waiting(struct Village *village, struct List *list) 
+{
+  int                      i;
+  struct Patient           *p;
+  
+  while (list != NULL) 
+    {
+      i = village->hosp.free_personnel;
+      p = list->patient; /* This is a bad load */
+
+      if (i > 0) 
+	{
+	  village->hosp.free_personnel--;
+	  p->time_left = 3;
+	  p->time += p->time_left;
+	  removeList(&(village->hosp.waiting), p);
+	  addList(&(village->hosp.assess), p); 
+	}
+      else 
+	{
+	  p->time++; /* so is this */ 
+	}
+      list = list->forward; 
+    } 
+}
+
+
+void put_in_hosp(struct Hosp *hosp, struct Patient *patient) 
+{  
+  patient->hosps_visited++;
+
+  if (hosp->free_personnel > 0) 
+    {
+      hosp->free_personnel--;
+      addList(&(hosp->assess), patient); 
+      patient->time_left = 3;
+      patient->time += patient->time_left;
+    } 
+  else 
+    {
+      addList(&(hosp->waiting), patient); 
+    }
+}
+
+
+struct Patient *generate_patient(struct Village *village) 
+{
+  struct Patient *patient = NULL;
+  float rand;
+  
+  rand = my_rand(village->seed);
+  village->seed = (long)(rand * IM);
+
+  if (rand > 0.666) 
+    {
+      patient = (struct Patient *)mymalloc(sizeof(struct Patient));
+      patient->hosps_visited = 0;
+      patient->time = 0;
+      patient->time_left = 0;
+      patient->home_village = village; 
+    }
+
+  return patient; 
+}
+    
+int
+main(int argc, char *argv[]) 
+{ 
+  struct Results         results;
+  struct Village         *top;
+  long                   i;
+  float                  total_time,
+                         total_patients,
+                         total_hosps;  
+  
+  dealwithargs(argc, argv);
+
+  top = alloc_tree(max_level, 0, NULL);
+  
+  chatting("\n\n    Colombian Health Care Simulator\n\n");
+  chatting("Working...\n");
+  
+  // sm: changed "%d" to "%ld" to silence gcc warning
+  fprintf(stderr, "This is max_time right before the loop: %ld\n", max_time);
+  for (i = 0; i < max_time; i++) 
+    {
+      //printf("This is i with each iteration: %d\n", i);
+      if ((i % 10) == 0) 
+	chatting("iteration %d\n", i);
+      sim(top);   
+    }
+  
+  results = get_results(top);
+  total_patients = results.total_patients;
+  total_time = results.total_time;
+  total_hosps = results.total_hosps;
+
+  chatting("Done.\n\n");
+  chatting("# of people treated:              %f people\n",
+	   total_patients);
+  chatting("Average length of stay:           %f time units\n", 
+	   total_time / total_patients);
+  chatting("Average # of hospitals visited:   %f hospitals\n\n",
+	   total_hosps / total_patients);
+  return 0;
+}
+
+
+struct List *sim(struct Village *village)
+{
+  int                    i;
+  struct Patient         *patient, *p;
+  struct List            *l, *vl, *up;
+
+  if (village == NULL) 
+    return NULL;
+ 
+  for (i = 0; i < 4; i++) 
+    { 
+      l = vl = sim(village->forward[i]);
+
+      if (l != NULL) 
+	{
+	  l = l->forward;
+	  while (l != NULL) 
+	    {
+	      p = l->patient; 
+	      put_in_hosp(&(village->hosp), p);
+	      removeList(vl, p);
+	      l = l->forward; 
+	    } 
+	} 
+    }
+  
+
+  /* Uses lists inside, and return */
+  check_patients_inside(village, village->hosp.inside.forward);
+  
+  /* Uses lists assess, inside, and up */
+  up = check_patients_assess(village, village->hosp.assess.forward);
+
+  /* Uses lists waiting, and assess */
+  check_patients_waiting(village, village->hosp.waiting.forward);
+  
+  if ((patient = generate_patient(village)) != NULL) 
+    {  
+      put_in_hosp(&(village->hosp), patient); 
+    }
+
+  return up;
+}
+
+
+
+
+
+
+
+
diff --git a/test/ccured_olden/health/health.h b/test/ccured_olden/health/health.h
new file mode 100644
index 000000000..4d3c4fd84
--- /dev/null
+++ b/test/ccured_olden/health/health.h
@@ -0,0 +1,76 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+/****************************************************************
+ * health.h: header file for health.c                           *
+ *************************************************************** */
+
+
+#ifndef _HEALTH
+#define _HEALTH
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#define IA 16807
+#define IM 2147483647
+#define AM (1.0 / IM)
+#define IQ 127773
+#define IR 2836
+#define MASK 123459876
+
+int                      max_level;
+long                     max_time,
+                         seed;
+
+struct Results {
+  float                  total_patients;
+  float                  total_time;
+  float                  total_hosps; };  
+
+struct Patient {
+  int                    hosps_visited;
+  int                    time;
+  int                    time_left;
+  struct Village         *home_village; };
+
+struct List {
+  struct Patient         *patient;
+  struct List            *back;
+  struct List            *forward; };
+
+struct Hosp {
+  int                    personnel; 
+  int                    free_personnel; 
+  int                    num_waiting_patients; 
+  struct List            waiting; 
+  struct List            assess; 
+  struct List            inside;
+  struct List    up; };
+  
+struct Village {
+  struct Village         *forward[4],
+                         *back;
+  struct List            returned;
+  struct Hosp            hosp;   
+  int                    label;
+  long                   seed; };
+
+void dealwithargs(int argc, char *argv[]);
+float my_rand(long idum);
+struct Patient *generate_patient(struct Village *village);
+void put_in_hosp(struct Hosp *hosp, struct Patient *patient);
+void addList(struct List *list, struct Patient *patient);
+void removeList(struct List *list, struct Patient *patient);
+struct List *sim(struct Village *village);
+void check_patients_inside(struct Village *village, struct List *list);
+struct List *check_patients_assess(struct Village *village, struct List *list);
+void check_patients_waiting(struct Village *village, struct List *list);
+float get_num_people(struct Village *village);
+float get_total_time(struct Village *village);
+float get_total_hosps(struct Village *village);
+struct Results get_results(struct Village *village);
+
+#endif
+
+
+
diff --git a/test/ccured_olden/health/list.c b/test/ccured_olden/health/list.c
new file mode 100644
index 000000000..dcd268ccb
--- /dev/null
+++ b/test/ccured_olden/health/list.c
@@ -0,0 +1,55 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+/********************************************************************
+ *  List.c:  Handles lists.                                         *
+ *           To be used with health.c                               *
+ ******************************************************************* */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "health.h"
+
+#ifdef SS_PLAIN
+#include "ssplain.h"
+#endif SS_PLAIN
+
+void addList(struct List *list, struct Patient *patient) {
+  struct List *b;
+
+  while (list != NULL) 
+    {
+      b = list;
+      list = list->forward; 
+    }
+  
+  list = (struct List *)mymalloc(sizeof(struct List));
+  list->patient = patient;
+  list->forward = NULL;
+  list->back = b;
+  b->forward = list; 
+} 
+
+
+void removeList(struct List *list, struct Patient *patient) 
+{
+  struct List          *l1,*l2;
+  struct Patient       *p;
+  
+  p = list->patient;
+  while(p != patient) 
+    {
+      list = list->forward; 
+      p = list->patient; 
+    }
+    
+  l1 = list->back;
+  l2 = list->forward;
+  l1->forward = l2;
+  if (list->forward != NULL) 
+    {
+      l1 = list->forward;
+      l2 = list->back;
+      l1->back = l2; 
+    }
+}
+     
diff --git a/test/ccured_olden/health/out.orig b/test/ccured_olden/health/out.orig
new file mode 100644
index 000000000..42fd5748f
--- /dev/null
+++ b/test/ccured_olden/health/out.orig
@@ -0,0 +1,64 @@
+This is max_level : 5
+This is max_time : 500
+
+
+    Colombian Health Care Simulator
+
+Working...
+This is max_time right before the loop: 500
+iteration 0
+iteration 10
+iteration 20
+iteration 30
+iteration 40
+iteration 50
+iteration 60
+iteration 70
+iteration 80
+iteration 90
+iteration 100
+iteration 110
+iteration 120
+iteration 130
+iteration 140
+iteration 150
+iteration 160
+iteration 170
+iteration 180
+iteration 190
+iteration 200
+iteration 210
+iteration 220
+iteration 230
+iteration 240
+iteration 250
+iteration 260
+iteration 270
+iteration 280
+iteration 290
+iteration 300
+iteration 310
+iteration 320
+iteration 330
+iteration 340
+iteration 350
+iteration 360
+iteration 370
+iteration 380
+iteration 390
+iteration 400
+iteration 410
+iteration 420
+iteration 430
+iteration 440
+iteration 450
+iteration 460
+iteration 470
+iteration 480
+iteration 490
+Done.
+
+# of people treated:              17508.000000 people
+Average length of stay:           155.341615 time units
+Average # of hospitals visited:   1.074195 hospitals
+
diff --git a/test/ccured_olden/health/out.orig.msvc b/test/ccured_olden/health/out.orig.msvc
new file mode 100644
index 000000000..6de26a47f
--- /dev/null
+++ b/test/ccured_olden/health/out.orig.msvc
@@ -0,0 +1,64 @@
+This is max_level : 5
+This is max_time : 500
+
+
+    Colombian Health Care Simulator
+
+Working...
+This is max_time right before the loop: 500
+iteration 0
+iteration 10
+iteration 20
+iteration 30
+iteration 40
+iteration 50
+iteration 60
+iteration 70
+iteration 80
+iteration 90
+iteration 100
+iteration 110
+iteration 120
+iteration 130
+iteration 140
+iteration 150
+iteration 160
+iteration 170
+iteration 180
+iteration 190
+iteration 200
+iteration 210
+iteration 220
+iteration 230
+iteration 240
+iteration 250
+iteration 260
+iteration 270
+iteration 280
+iteration 290
+iteration 300
+iteration 310
+iteration 320
+iteration 330
+iteration 340
+iteration 350
+iteration 360
+iteration 370
+iteration 380
+iteration 390
+iteration 400
+iteration 410
+iteration 420
+iteration 430
+iteration 440
+iteration 450
+iteration 460
+iteration 470
+iteration 480
+iteration 490
+Done.
+
+# of people treated:              17510.000000 people
+Average length of stay:           153.627927 time units
+Average # of hospitals visited:   1.068646 hospitals
+
diff --git a/test/ccured_olden/health/output b/test/ccured_olden/health/output
new file mode 100644
index 000000000..42fd5748f
--- /dev/null
+++ b/test/ccured_olden/health/output
@@ -0,0 +1,64 @@
+This is max_level : 5
+This is max_time : 500
+
+
+    Colombian Health Care Simulator
+
+Working...
+This is max_time right before the loop: 500
+iteration 0
+iteration 10
+iteration 20
+iteration 30
+iteration 40
+iteration 50
+iteration 60
+iteration 70
+iteration 80
+iteration 90
+iteration 100
+iteration 110
+iteration 120
+iteration 130
+iteration 140
+iteration 150
+iteration 160
+iteration 170
+iteration 180
+iteration 190
+iteration 200
+iteration 210
+iteration 220
+iteration 230
+iteration 240
+iteration 250
+iteration 260
+iteration 270
+iteration 280
+iteration 290
+iteration 300
+iteration 310
+iteration 320
+iteration 330
+iteration 340
+iteration 350
+iteration 360
+iteration 370
+iteration 380
+iteration 390
+iteration 400
+iteration 410
+iteration 420
+iteration 430
+iteration 440
+iteration 450
+iteration 460
+iteration 470
+iteration 480
+iteration 490
+Done.
+
+# of people treated:              17508.000000 people
+Average length of stay:           155.341615 time units
+Average # of hospitals visited:   1.074195 hospitals
+
diff --git a/test/ccured_olden/health/poisson.c b/test/ccured_olden/health/poisson.c
new file mode 100644
index 000000000..c3ff696f8
--- /dev/null
+++ b/test/ccured_olden/health/poisson.c
@@ -0,0 +1,35 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+/**********************************************************
+ * poisson.c: handles math routines for health.c          *
+ **********************************************************/
+
+#include <stdio.h>
+#include <math.h>
+#include "health.h"
+
+
+float my_rand(long idum) 
+{
+  long                   k;
+  float                  answer;
+  
+  idum ^= MASK;
+  k = idum / IQ;
+  idum = IA * (idum - k * IQ) - IR * k;
+  idum ^= MASK;
+  if (idum < 0) 
+    idum  += IM;
+  answer = AM * idum;
+#ifdef GET_OUT
+  fprintf(stderr, "my_rand: idum = %d, AM = %e, answer = %4.3f\n", 
+	  idum, AM, answer);
+#endif GET_OUT
+  return answer; 
+}
+
+
+
+
+
+
diff --git a/test/ccured_olden/health/ssplain.c b/test/ccured_olden/health/ssplain.c
new file mode 100644
index 000000000..04a150fb6
--- /dev/null
+++ b/test/ccured_olden/health/ssplain.c
@@ -0,0 +1,70 @@
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <limits.h>
+#include <stddef.h>
+#include "ssplain.h"
+
+void chatting(char *s, ...)
+{
+  //printf("Here is a character: %c", *s);
+  va_list ap;
+  va_start(ap,s);
+  vfprintf(stderr, s, ap);
+  va_end(ap);
+}
+
+
+
+#ifdef SS_RAND
+double drand48()
+{
+  double d;
+  d = (double) random() / LONG_MAX;
+  return d;
+}
+
+
+long lrand48()
+{
+  long l = random();
+  return l;
+}
+
+void srand48(long seed)
+{
+  srand(seed);
+}
+#endif SS_RAND
+
+#ifndef BEFOREBOX
+static unsigned long bytes_allocated = 0;
+static unsigned long allocations = 0;
+
+void*
+ssplain_malloc(int size)
+{
+  allocations++;
+  bytes_allocated+=size;
+  return malloc(size);
+}
+
+void*
+ssplain_calloc(int nelems, int size)
+{
+  void *p;
+  allocations++;
+  bytes_allocated+= nelems * size;
+  p =  calloc(nelems, size);
+  if(!p) { printf("Cannot allocate\n"); exit(3); }
+  return p;
+}
+
+void
+ssplain_alloc_stats()
+{
+  chatting("Allocation stats: %d bytes allocated in %d allocations\n",
+	   bytes_allocated, allocations);
+}
+#endif
diff --git a/test/ccured_olden/health/ssplain.h b/test/ccured_olden/health/ssplain.h
new file mode 100644
index 000000000..157c1cbe8
--- /dev/null
+++ b/test/ccured_olden/health/ssplain.h
@@ -0,0 +1,130 @@
+#ifndef SS_PLAIN_H
+#define SS_PLAIN_H
+
+void * ssplain_malloc(int size);
+void * ssplain_calloc(int nelems, int size);
+void ssplain_alloc_stats();
+ 
+/* Convert MP shutdown to exit */
+#define __ShutDown(ID)     { ssplain_alloc_stats(); exit(ID); } 
+
+/* All these CM-5 things are nops */
+#define CMMD_node_timer_clear(ID)
+#define CMMD_node_timer_start(ID)
+#define CMMD_node_timer_stop(ID)
+#define CMMD_node_timer_elapsed(ID)   ((double)0)
+
+#define CMMD_self_address()   0
+
+#define ClearAllStats()
+
+/* define away the CM-5 allocator */
+#include <stdlib.h>
+
+#ifndef ALLOC
+#define ALLOC(NUM,ESIZE)  ssplain_calloc (NUM+1,ESIZE)
+#endif ALLOC
+
+#ifndef mymalloc
+#define mymalloc malloc
+#endif mymalloc
+
+/* Get all of these multiprocessing things out of here. */
+/* My id will stay that way */
+#define IDMASK 0xffffffff
+
+/* Nothing is getting tested */
+#ifndef RETEST
+#define RETEST()
+#endif RETEST
+
+#ifndef NOTEST
+#define NOTEST()
+#endif NOTEST
+
+/* Everything is local */
+#ifndef local
+#define local            
+#endif local
+
+#ifndef LOCAL
+#define LOCAL(VAL)      (VAL)
+#endif LOCAL
+
+#ifndef ISLOCPTR
+#define ISLOCPTR(VAL)   (1)
+#endif ISLOCPTR
+
+#ifndef MLOCAL
+#define MLOCAL(VAL)
+#endif MLOCAL
+
+/* An atomic increment is a normal increment */
+#ifndef ATOMICINC
+#define ATOMICINC(PVAL) (*(PVAL) = *(PVAL) + 1)
+#endif ATOMICINC
+
+/* Nothing is migrating anywhere */
+#ifndef MIGRATE
+#define MIGRATE(ID)     
+#endif MIGRATE
+
+#ifndef MIGRPH
+#define MIGRPH()
+#endif MIGRPH
+
+#ifndef UNPHASE
+#define UNPHASE()
+#endif UNPHASE
+
+#ifndef PID
+#define PID(VAL)  (0)
+#endif PID
+
+/* All these functions */
+#ifdef CCURED
+  #pragma ccuredvararg("chatting", printf(1))
+#endif
+void chatting(char *s, ...);
+
+/* just define these guys, they are not going to change */
+#define __NumNodes 1
+#define __MyNodeId 0
+#define __NDim     0
+
+typedef struct ss_future_cell_int {
+  int value;
+} future_cell_int;
+
+/* Where are these things for real? */
+#ifdef SS_RAND
+long lrand48();
+double drand48();
+void srand48(long seed);
+#endif SS_RAND
+
+#define MOD(V,M) ((V) & ((M) - 1))
+#define INC_MOD(V,M) (V) = MOD((V) + 1, (M))
+
+/* Prefetch instructions */
+
+/* Use these for 1 lookahead prefetching */
+
+#ifdef OVERHEAD_ONLY
+#define ASSEMBLE_PREFETCH(ARG)
+#define ASSEMBLE_PREFETCH_HEAD(ARG)
+#else !OVERHEAD_ONLY
+
+#define ASSEMBLE_PREFETCH(ARG) \
+     asm ("lw $0, %0" : /* no outputs */ : "g" (ARG))
+ 
+/* Use these for infinite lookahead prefetching */
+#define ASSEMBLE_PREFETCH_HEAD(ARG) \
+     asm ("lh $0, %0" : /* no outputs */ : "g" (ARG))
+
+#endif OVERHEAD_ONLY
+
+#endif SS_PLAIN_H
+
+
+
diff --git a/test/ccured_olden/health/testit b/test/ccured_olden/health/testit
new file mode 100755
index 000000000..6b943eace
--- /dev/null
+++ b/test/ccured_olden/health/testit
@@ -0,0 +1,25 @@
+#!/bin/sh
+# test a health binary
+
+if [ "$1" = "" ]; then
+  echo "usage: $0 ./health.exe"
+  exit
+fi
+
+# all of health's output is to stderr
+echo "running: $1 5 500 1 1 2>output"
+if ! $1 5 500 1 1 2>output; then
+  echo "$1 failed directly"
+  exit 2
+fi
+
+if ! diff out.orig output >out.diff 2>&1 ; then
+  if ! diff out.orig.msvc output >/dev/null ; then 
+    echo "$1 got the wrong answer. See out.diff"
+    exit 4
+  fi
+fi
+
+echo "$1 seems to work"
+rm -f out.diff
+ 
\ No newline at end of file
diff --git a/test/ccured_olden/mst/.cvsignore b/test/ccured_olden/mst/.cvsignore
new file mode 100644
index 000000000..0b0377b12
--- /dev/null
+++ b/test/ccured_olden/mst/.cvsignore
@@ -0,0 +1,26 @@
+*.o
+*.obj
+*.exe
+*.pdb
+*.ilk
+*.cpp
+*.i
+*.s
+*.asm
+*cil.c
+*.rtl
+*box.c
+*infer.c
+*_ppp.c
+*.origi
+*.stackdump
+*_all.c
+allcfiles
+ope.m
+*cured.c
+*.optim.c
+*_comb.c
+*.exe_comb.browser
+changes
+output
+out.diff
diff --git a/test/ccured_olden/mst/CVS/Entries b/test/ccured_olden/mst/CVS/Entries
new file mode 100644
index 000000000..862ae4471
--- /dev/null
+++ b/test/ccured_olden/mst/CVS/Entries
@@ -0,0 +1,16 @@
+/HOWTO/1.1/Fri Jun 29 11:07:28 2001//
+/Makefile/1.6/Fri Oct 12 01:25:10 2001//
+/Makefile.plain/1.1/Fri Jun 29 11:07:28 2001//
+/Makefile.ss/1.1/Fri Jun 29 11:07:28 2001//
+/args.c/1.1/Fri Jun 29 11:07:28 2001//
+/hash.h/1.1/Fri Jun 29 11:07:28 2001//
+/main.c/1.1/Fri Jun 29 11:07:28 2001//
+/makegraph.c/1.1/Fri Jun 29 11:07:28 2001//
+/mst.h/1.1/Fri Jun 29 11:07:28 2001//
+/ssplain.c/1.6/Wed Oct 31 04:00:37 2001//
+/out.orig/1.1/Mon Nov 12 08:08:28 2001//
+/testit/1.2/Tue Dec  4 05:07:50 2001//
+/.cvsignore/1.8/Fri Oct  4 16:28:44 2002//
+/hash.c/1.8/Tue Jan  7 00:17:16 2003//
+/ssplain.h/1.6/Mon Jan  6 23:29:27 2003//
+D
diff --git a/test/ccured_olden/mst/CVS/Repository b/test/ccured_olden/mst/CVS/Repository
new file mode 100644
index 000000000..8ebc6045e
--- /dev/null
+++ b/test/ccured_olden/mst/CVS/Repository
@@ -0,0 +1 @@
+cil/test/olden/mst
diff --git a/test/ccured_olden/mst/CVS/Root b/test/ccured_olden/mst/CVS/Root
new file mode 100644
index 000000000..35f411e97
--- /dev/null
+++ b/test/ccured_olden/mst/CVS/Root
@@ -0,0 +1 @@
+/home/cvs-repository
diff --git a/test/ccured_olden/mst/HOWTO b/test/ccured_olden/mst/HOWTO
new file mode 100644
index 000000000..1058d0f1b
--- /dev/null
+++ b/test/ccured_olden/mst/HOWTO
@@ -0,0 +1 @@
+1024 1 
diff --git a/test/ccured_olden/mst/Makefile b/test/ccured_olden/mst/Makefile
new file mode 100644
index 000000000..d3f950b65
--- /dev/null
+++ b/test/ccured_olden/mst/Makefile
@@ -0,0 +1,62 @@
+# /* For copyright information, see olden_v1.0/COPYRIGHT */
+
+BINARY		= mst.exe
+PROGS		= main makegraph hash args ssplain
+
+OLDENHOME	= /tmp/olden
+
+ifdef _MSVC
+CC    = cl
+DEF   = /D
+CONLY = /c
+OBJOUT = /Fo
+EXEOUT = /Fe
+OBJ   = .obj
+
+OPTFLAGS	= /Ox
+LIBS = 
+
+else
+
+CC		= gcc -arch ppc
+CCOMP=../../../../ccomp
+CCOMPFLAGS=-dump-c
+DEF   = -D
+CONLY = -c
+OBJOUT= -o
+EXEOUT= -o
+
+OBJ		= .o
+
+OPTFLAGS	= -g -Wall -O3
+
+LIBS		= 
+LIBPATH		= 
+endif
+
+SRC		= .c
+ASM		= .s
+EXTRA_CDEFS	= $(DEF)I_TIME $(DEF)I_SYS_TIME $(DEF)ULTRIX
+CDEFS		= $(DEF)PLAIN $(DEF)SS_PLAIN
+SRCS		= $(addsuffix $(SRC),$(PROGS))
+OBJS		= $(addsuffix $(OBJ),$(PROGS))
+ASMS		= $(addsuffix $(ASM),$(PROGS))
+
+all_s: $(PROGS:%=%.s)
+
+all: $(PROGS:%=%.compcert)
+
+all_gcc: $(PROGS:%=%.gcc)
+
+%.compcert: %.s
+	$(CC) $(CFLAGS) $(LDFALGS) $(OPTFLAGS) -o $*.compcert $*.s $(LIBS)
+
+%.s: %.c ../../../../ccomp
+	$(CCOMP) $(CCOMPFLAGS) $*.c
+
+%.gcc: %.c
+	$(CC) $(CFLAGS) $(LDFALGS) $(OPTFLAGS) -o $*.gcc $*.c $(LIBS)
+
+clean:
+	rm -f $(BINARY) $(OBJS) $(OBJS) *~ *infer.c *cured.c *cil.c *_comb.c *.i *.light.c
+
diff --git a/test/ccured_olden/mst/Makefile.plain b/test/ccured_olden/mst/Makefile.plain
new file mode 100644
index 000000000..7e4450ac8
--- /dev/null
+++ b/test/ccured_olden/mst/Makefile.plain
@@ -0,0 +1,7 @@
+# /* For copyright information, see olden_v1.0/COPYRIGHT */
+
+BINARY		= mst
+FILES		= main makegraph hash args ssplain
+
+include ../Makefile.plain
+
diff --git a/test/ccured_olden/mst/Makefile.ss b/test/ccured_olden/mst/Makefile.ss
new file mode 100644
index 000000000..92ac11a17
--- /dev/null
+++ b/test/ccured_olden/mst/Makefile.ss
@@ -0,0 +1,7 @@
+# /* For copyright information, see olden_v1.0/COPYRIGHT */
+
+BINARY		= mst
+FILES		= main makegraph hash args ssplain
+
+include ../Makefile.ss
+
diff --git a/test/ccured_olden/mst/args.c b/test/ccured_olden/mst/args.c
new file mode 100644
index 000000000..169d87ab3
--- /dev/null
+++ b/test/ccured_olden/mst/args.c
@@ -0,0 +1,20 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+#ifdef SS_PLAIN
+#include "ssplain.h"
+#include "mst.h"
+#endif SS_PLAIN
+
+
+int dealwithargs(int argc, char *argv[])
+{
+  int level;
+
+  if (argc > 1)
+    level = atoi(argv[1]);
+  else
+    level = 1024;
+
+  return level;
+}
+
diff --git a/test/ccured_olden/mst/args.s b/test/ccured_olden/mst/args.s
new file mode 100644
index 000000000..a397dc725
--- /dev/null
+++ b/test/ccured_olden/mst/args.s
@@ -0,0 +1,37 @@
+	.text
+	.align 2
+Latoi$i$stub:
+	mflr	r0
+	stwu	r1, -56(r1)
+	stw	r0, 60(r1)
+	addis	r11, 0, ha16(Latoi$i$ptr)
+	lwz	r11, lo16(Latoi$i$ptr)(r11)
+	mtctr	r11
+	bctrl
+	lwz	r0, 60(r1)
+	mtlr	r0
+	addi	r1, r1, 56
+	blr
+	.non_lazy_symbol_pointer
+Latoi$i$ptr:
+	.indirect_symbol _atoi
+	.long	0
+	.text
+	.align 2
+	.globl _dealwithargs
+_dealwithargs:
+	stwu	r1, -32(r1)
+	mflr	r2
+	stw	r2, 12(r1)
+	cmpwi	cr0, r3, 1
+	bt	1, L100
+	addi	r3, 0, 1024
+	b	L101
+L100:
+	lwz	r3, 4(r4)
+	bl	Latoi$i$stub
+L101:
+	lwz	r2, 12(r1)
+	mtlr	r2
+	lwz	r1, 0(r1)
+	blr
diff --git a/test/ccured_olden/mst/hash.c b/test/ccured_olden/mst/hash.c
new file mode 100644
index 000000000..67e460dd1
--- /dev/null
+++ b/test/ccured_olden/mst/hash.c
@@ -0,0 +1,105 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+#include "ssplain.h"
+#ifdef SS_PLAIN
+#include "mst.h"
+#else SS_PLAIN
+#include "hash.h"
+#endif SS_PLAIN
+#include <string.h>
+
+#define assert(num,a) if (!(a)) {chatting("Assertion failure:%d in hash\n",num); exit(-1);}
+#undef assert
+#define assert(num,a)
+
+#ifndef CCURED
+  #define __NOCUREBLOCK
+#endif
+
+#ifdef CCURED
+  #pragma ccuredalloc("localmalloc", nozero, sizein(1))
+#endif
+static char *localmalloc(int size);
+
+static int remaining = 0;
+static char *temp;
+static char *localmalloc(int size) {
+  char *blah;
+
+  if (size>remaining) 
+    {
+      temp = (char *) malloc(32768);
+      if (!temp) chatting("Error! malloc returns null\n");
+      remaining = 32768;
+    }
+  blah = temp;
+  temp += size;
+  remaining -= size;
+  return blah;
+}
+ 
+#define localfree(sz)
+
+Hash MakeHash(int size, int (*map)(unsigned int)) 
+{
+  Hash retval;
+
+  retval = (Hash) localmalloc(sizeof(*retval));
+  retval->array = (HashEntry *) localmalloc(size*sizeof(retval->array[0]));
+  { __NOCUREBLOCK
+    memset((char*)retval->array, 0, size * sizeof(retval->array[0]));
+  }
+  retval->mapfunc = map;
+  retval->size = size;
+  retval->padding = 0; 
+  return retval;
+}
+
+void *HashLookup(unsigned int key, Hash hash)
+{
+  int j;
+  HashEntry ent;
+
+  j = (hash->mapfunc)(key);
+  assert(1,j>=0);
+  assert(2,j<hash->size);
+
+  for (ent = hash->array[j]; ent && ent->key!=key; ent=ent->next) ;
+
+  if (ent) return ent->entry;
+  return NULL;
+}
+
+void HashInsert(void *entry,unsigned int key,Hash hash) 
+{
+  HashEntry ent;
+  int j;
+  
+  assert(3,!HashLookup(key,hash));
+  
+  j = (hash->mapfunc)(key);
+
+  ent = (HashEntry) localmalloc(sizeof(*ent));
+  ent->next = hash->array[j];
+  hash->array[j]=ent;
+  ent->key = key;
+  ent->entry = entry;
+}
+
+void HashDelete(unsigned int key,Hash hash)
+{
+  HashEntry *ent;
+  HashEntry tmp;
+  int j;
+
+  j = (hash->mapfunc)(key);
+  for (ent=&(hash->array[j]); (*ent) && (*ent)->key!=key; ent=&((*ent)->next));
+  assert(4,*ent);
+  tmp = *ent;
+  *ent = (*ent)->next;
+  localfree(tmp);
+}
+
+
+
+
diff --git a/test/ccured_olden/mst/hash.h b/test/ccured_olden/mst/hash.h
new file mode 100644
index 000000000..994752637
--- /dev/null
+++ b/test/ccured_olden/mst/hash.h
@@ -0,0 +1,23 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+#include "stdio.h"
+
+typedef struct hash_entry {
+  unsigned int key;
+  void *entry;
+  struct hash_entry *next;
+  unsigned int padding;
+} *HashEntry;
+
+typedef struct hash {
+  HashEntry *array;
+  int (*mapfunc)(unsigned int);
+  int size;
+  unsigned int padding;
+} *Hash;
+
+Hash MakeHash(int size, int map(unsigned int));
+void *HashLookup(unsigned int key, Hash hash);
+void HashInsert(void *entry,unsigned int key, Hash hash);
+void HashDelete(unsigned int key, Hash hash);
+
diff --git a/test/ccured_olden/mst/hash.s b/test/ccured_olden/mst/hash.s
new file mode 100644
index 000000000..f418b39dc
--- /dev/null
+++ b/test/ccured_olden/mst/hash.s
@@ -0,0 +1,354 @@
+	.data
+	.globl	__hash__stringlit_1
+__hash__stringlit_1:
+	.byte	69
+	.byte	114
+	.byte	114
+	.byte	111
+	.byte	114
+	.byte	33
+	.byte	32
+	.byte	109
+	.byte	97
+	.byte	108
+	.byte	108
+	.byte	111
+	.byte	99
+	.byte	32
+	.byte	114
+	.byte	101
+	.byte	116
+	.byte	117
+	.byte	114
+	.byte	110
+	.byte	115
+	.byte	32
+	.byte	110
+	.byte	117
+	.byte	108
+	.byte	108
+	.byte	10
+	.byte	0
+	.data
+	.globl	_remaining
+_remaining:
+	.long	0
+	.data
+	.globl	_temp
+_temp:
+	.space	4
+	.text
+	.align 2
+Lchatting$i$stub:
+	mflr	r0
+	stwu	r1, -56(r1)
+	stw	r0, 60(r1)
+	addis	r11, 0, ha16(Lchatting$i$ptr)
+	lwz	r11, lo16(Lchatting$i$ptr)(r11)
+	mtctr	r11
+	bctrl
+	lwz	r0, 60(r1)
+	mtlr	r0
+	addi	r1, r1, 56
+	blr
+	.non_lazy_symbol_pointer
+Lchatting$i$ptr:
+	.indirect_symbol _chatting
+	.long	0
+	.text
+	.align 2
+Lmalloc$stub:
+	addis	r11, 0, ha16(Lmalloc$ptr)
+	lwz	r11, lo16(Lmalloc$ptr)(r11)
+	mtctr	r11
+	bctr
+	.non_lazy_symbol_pointer
+Lmalloc$ptr:
+	.indirect_symbol _malloc
+	.long	0
+	.text
+	.align 2
+LMakeHash$stub:
+	addis	r11, 0, ha16(LMakeHash$ptr)
+	lwz	r11, lo16(LMakeHash$ptr)(r11)
+	mtctr	r11
+	bctr
+	.non_lazy_symbol_pointer
+LMakeHash$ptr:
+	.indirect_symbol _MakeHash
+	.long	0
+	.text
+	.align 2
+LHashLookup$stub:
+	addis	r11, 0, ha16(LHashLookup$ptr)
+	lwz	r11, lo16(LHashLookup$ptr)(r11)
+	mtctr	r11
+	bctr
+	.non_lazy_symbol_pointer
+LHashLookup$ptr:
+	.indirect_symbol _HashLookup
+	.long	0
+	.text
+	.align 2
+LHashInsert$stub:
+	addis	r11, 0, ha16(LHashInsert$ptr)
+	lwz	r11, lo16(LHashInsert$ptr)(r11)
+	mtctr	r11
+	bctr
+	.non_lazy_symbol_pointer
+LHashInsert$ptr:
+	.indirect_symbol _HashInsert
+	.long	0
+	.text
+	.align 2
+LHashDelete$stub:
+	addis	r11, 0, ha16(LHashDelete$ptr)
+	lwz	r11, lo16(LHashDelete$ptr)(r11)
+	mtctr	r11
+	bctr
+	.non_lazy_symbol_pointer
+LHashDelete$ptr:
+	.indirect_symbol _HashDelete
+	.long	0
+	.text
+	.align 2
+Lmemset$stub:
+	addis	r11, 0, ha16(Lmemset$ptr)
+	lwz	r11, lo16(Lmemset$ptr)(r11)
+	mtctr	r11
+	bctr
+	.non_lazy_symbol_pointer
+Lmemset$ptr:
+	.indirect_symbol _memset
+	.long	0
+	.text
+	.align 2
+Llocalmalloc$stub:
+	addis	r11, 0, ha16(Llocalmalloc$ptr)
+	lwz	r11, lo16(Llocalmalloc$ptr)(r11)
+	mtctr	r11
+	bctr
+	.non_lazy_symbol_pointer
+Llocalmalloc$ptr:
+	.indirect_symbol _localmalloc
+	.long	0
+	.text
+	.align 2
+	.globl Llocalmalloc$stub
+Llocalmalloc$stub:
+	stwu	r1, -32(r1)
+	mflr	r2
+	stw	r2, 12(r1)
+	stw	r13, 28(r1)
+	mr	r13, r3
+	addis	r2, 0, ha16(_remaining)
+	lwz	r6, lo16(_remaining)(r2)
+	cmpw	cr0, r13, r6
+	bf	1, L100
+	addis	r3, 0, 0
+	ori	r3, r3, 32768
+	bl	Lmalloc$stub
+	addis	r2, 0, ha16(_temp)
+	stw	r3, lo16(_temp)(r2)
+	addis	r2, 0, ha16(_temp)
+	lwz	r3, lo16(_temp)(r2)
+	cmplwi	cr0, r3, 0
+	bf	2, L101
+	addis	r3, 0, hi16(__hash__stringlit_1)
+	ori	r3, r3, lo16(__hash__stringlit_1)
+	bl	Lchatting$i$stub
+L101:
+	addis	r8, 0, 0
+	ori	r8, r8, 32768
+	addis	r2, 0, ha16(_remaining)
+	stw	r8, lo16(_remaining)(r2)
+L100:
+	addis	r2, 0, ha16(_temp)
+	lwz	r3, lo16(_temp)(r2)
+	add	r4, r3, r13
+	addis	r2, 0, ha16(_temp)
+	stw	r4, lo16(_temp)(r2)
+	addis	r2, 0, ha16(_remaining)
+	lwz	r5, lo16(_remaining)(r2)
+	subfc	r7, r13, r5
+	addis	r2, 0, ha16(_remaining)
+	stw	r7, lo16(_remaining)(r2)
+	lwz	r13, 28(r1)
+	lwz	r2, 12(r1)
+	mtlr	r2
+	lwz	r1, 0(r1)
+	blr
+	.text
+	.align 2
+	.globl LMakeHash$stub
+LMakeHash$stub:
+	stwu	r1, -48(r1)
+	mflr	r2
+	stw	r2, 12(r1)
+	stw	r13, 36(r1)
+	stw	r14, 40(r1)
+	stw	r15, 44(r1)
+	mr	r14, r3
+	mr	r13, r4
+	addi	r3, 0, 16
+	bl	Llocalmalloc$stub
+	mr	r15, r3
+	rlwinm	r3, r14, 2, 0xfffffffc
+	bl	Llocalmalloc$stub
+	stw	r3, 0(r15)
+	lwz	r3, 0(r15)
+	addi	r4, 0, 0
+	rlwinm	r5, r14, 2, 0xfffffffc
+	bl	Lmemset$stub
+	stw	r13, 4(r15)
+	stw	r14, 8(r15)
+	addi	r3, 0, 0
+	stw	r3, 12(r15)
+	mr	r3, r15
+	lwz	r13, 36(r1)
+	lwz	r14, 40(r1)
+	lwz	r15, 44(r1)
+	lwz	r2, 12(r1)
+	mtlr	r2
+	lwz	r1, 0(r1)
+	blr
+	.text
+	.align 2
+	.globl LHashLookup$stub
+LHashLookup$stub:
+	stwu	r1, -48(r1)
+	mflr	r2
+	stw	r2, 12(r1)
+	stw	r13, 28(r1)
+	stw	r14, 32(r1)
+	mr	r14, r3
+	mr	r13, r4
+	lwz	r8, 4(r13)
+	mr	r0, r8
+	mr	r3, r14
+	mtctr	r0
+	bctrl
+	lwz	r4, 0(r13)
+	rlwinm	r5, r3, 2, 0xfffffffc
+	lwzx	r3, r4, r5
+L102:
+	cmplwi	cr0, r3, 0
+	bt	2, L103
+	lwz	r7, 0(r3)
+	cmplw	cr0, r7, r14
+	bt	2, L104
+	addi	r6, 0, 1
+	b	L105
+L104:
+	addi	r6, 0, 0
+	b	L105
+L103:
+	addi	r6, 0, 0
+L105:
+	cmpwi	cr0, r6, 0
+	bt	2, L106
+	lwz	r3, 8(r3)
+	b	L102
+L106:
+	cmplwi	cr0, r3, 0
+	bt	2, L107
+	lwz	r3, 4(r3)
+	b	L108
+L107:
+	addi	r3, 0, 0
+L108:
+	lwz	r13, 28(r1)
+	lwz	r14, 32(r1)
+	lwz	r2, 12(r1)
+	mtlr	r2
+	lwz	r1, 0(r1)
+	blr
+	.text
+	.align 2
+	.globl LHashInsert$stub
+LHashInsert$stub:
+	stwu	r1, -48(r1)
+	mflr	r2
+	stw	r2, 12(r1)
+	stw	r13, 28(r1)
+	stw	r14, 32(r1)
+	stw	r15, 36(r1)
+	stw	r16, 40(r1)
+	mr	r14, r3
+	mr	r13, r4
+	mr	r16, r5
+	lwz	r6, 4(r16)
+	mr	r0, r6
+	mr	r3, r13
+	mtctr	r0
+	bctrl
+	mr	r15, r3
+	addi	r3, 0, 16
+	bl	Llocalmalloc$stub
+	lwz	r7, 0(r16)
+	rlwinm	r4, r15, 2, 0xfffffffc
+	lwzx	r5, r7, r4
+	stw	r5, 8(r3)
+	lwz	r5, 0(r16)
+	stwx	r3, r5, r4
+	stw	r13, 0(r3)
+	stw	r14, 4(r3)
+	# undef r3
+	lwz	r13, 28(r1)
+	lwz	r14, 32(r1)
+	lwz	r15, 36(r1)
+	lwz	r16, 40(r1)
+	lwz	r2, 12(r1)
+	mtlr	r2
+	lwz	r1, 0(r1)
+	blr
+	.text
+	.align 2
+	.globl LHashDelete$stub
+LHashDelete$stub:
+	stwu	r1, -48(r1)
+	mflr	r2
+	stw	r2, 12(r1)
+	stw	r13, 28(r1)
+	stw	r14, 32(r1)
+	mr	r14, r3
+	mr	r13, r4
+	lwz	r9, 4(r13)
+	mr	r0, r9
+	mr	r3, r14
+	mtctr	r0
+	bctrl
+	lwz	r4, 0(r13)
+	rlwinm	r8, r3, 2, 0xfffffffc
+	add	r3, r4, r8
+L109:
+	lwz	r5, 0(r3)
+	cmplwi	cr0, r5, 0
+	bt	2, L110
+	lwz	r4, 0(r5)
+	cmplw	cr0, r4, r14
+	bt	2, L111
+	addi	r7, 0, 1
+	b	L112
+L111:
+	addi	r7, 0, 0
+	b	L112
+L110:
+	addi	r7, 0, 0
+L112:
+	cmpwi	cr0, r7, 0
+	bt	2, L113
+	lwz	r10, 0(r3)
+	addi	r3, r10, 8
+	b	L109
+L113:
+	lwz	r4, 0(r3)
+	lwz	r6, 8(r4)
+	stw	r6, 0(r3)
+	# undef r3
+	lwz	r13, 28(r1)
+	lwz	r14, 32(r1)
+	lwz	r2, 12(r1)
+	mtlr	r2
+	lwz	r1, 0(r1)
+	blr
diff --git a/test/ccured_olden/mst/main.c b/test/ccured_olden/mst/main.c
new file mode 100644
index 000000000..0e464d7c0
--- /dev/null
+++ b/test/ccured_olden/mst/main.c
@@ -0,0 +1,142 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+#include <string.h>
+#include "mst.h"
+#include "ssplain.h"
+
+typedef struct blue_return {
+  Vertex vert;
+  int dist;
+} BlueReturn;
+
+static BlueReturn BlueRule(Vertex inserted, Vertex vlist) 
+{
+  BlueReturn retval;
+  Vertex tmp,prev;
+  Hash hash;
+  int dist,dist2;
+  int count;
+  
+  if (!vlist) {
+    retval.dist = 999999;
+    return retval;
+  }
+  prev = vlist;
+  retval.vert = vlist;
+  retval.dist = vlist->mindist;
+  hash = vlist->edgehash;
+  dist = (int) HashLookup((unsigned int) inserted, hash);
+  /*chatting("Found %d at 0x%x for 0x%x\n",dist,inserted,vlist);*/
+  if (dist) 
+    {
+      if (dist<retval.dist) 
+        {
+          vlist->mindist = dist;
+          retval.dist = dist;
+        }
+    }
+  else chatting("Not found\n");
+  
+  count = 0;
+
+  /* We are guaranteed that inserted is not first in list */
+  for (tmp=vlist->next; tmp; prev=tmp,tmp=tmp->next) 
+    {
+      count++;
+
+      /* Splice chosen vertex out of the list */
+      if (tmp==inserted) 
+        {
+          Vertex next;
+          next = tmp->next;
+          prev->next = next;
+        }
+      /* Find the shortest distance to any other vertex not in the list */
+      else 
+        {
+          hash = tmp->edgehash;
+          dist2 = tmp->mindist;
+          dist = (int) HashLookup((unsigned int) inserted, hash);
+          /*chatting("Found %d at 0x%x for 0x%x\n",dist,inserted,tmp);*/
+          if (dist) 
+            {
+              if (dist<dist2) 
+                {
+                  tmp->mindist = dist;
+                  dist2 = dist;
+                }
+            }
+          else chatting("Not found\n");
+          if (dist2<retval.dist) 
+            {
+              retval.vert = tmp;
+              retval.dist = dist2;
+            }
+        } /* else */
+
+    } /* for */
+  /*chatting("Count was %d\n",count);*/
+  return retval;
+}
+
+          
+
+static Vertex MyVertexList = NULL;
+
+static int ComputeMst(Graph graph,int numvert) 
+{
+  Vertex inserted,tmp;
+  int cost=0,dist;
+
+  /* make copy of graph */
+  chatting("Compute phase 1\n");
+
+  /* Insert first node */
+  inserted = graph->vlist;
+  tmp = inserted->next;
+  graph->vlist = tmp;
+  MyVertexList = tmp;
+  numvert--;
+
+  /* Announce insertion and find next one */
+  chatting("Compute phase 2\n");
+  while (numvert) 
+    {
+      BlueReturn br;
+
+      if (inserted == MyVertexList)
+	MyVertexList = MyVertexList->next;
+      br = BlueRule(inserted, MyVertexList);
+      inserted = br.vert;    
+      dist = br.dist;
+      numvert--;
+      cost = cost+dist;
+    }
+  return cost;
+}
+
+extern int dealwithargs(int argc, char *argv[]);
+
+int main(int argc, char *argv[]) 
+{
+  Graph graph;
+  int dist;
+  int size;
+ 
+  chatting("Hash entry size = %d\n", sizeof(struct hash_entry));
+  chatting("Hash size = %d\n", sizeof(struct hash));
+  chatting("Vertex size = %d\n", sizeof(struct vert_st));
+  
+  size = dealwithargs(argc,argv);
+
+  chatting("Making graph of size %d\n",size);
+  graph = MakeGraph(size);
+  chatting("Graph completed\n");
+
+  chatting("About to compute mst \n");
+  dist = ComputeMst(graph,size);
+
+  chatting("MST has cost %d\n",dist);
+  exit(0);
+}
+
diff --git a/test/ccured_olden/mst/makegraph.c b/test/ccured_olden/mst/makegraph.c
new file mode 100644
index 000000000..c99fad964
--- /dev/null
+++ b/test/ccured_olden/mst/makegraph.c
@@ -0,0 +1,93 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+#include "mst.h"
+#include "ssplain.h"
+
+#define CONST_m1 10000
+#define CONST_b 31415821
+#define RANGE 2048
+static int HashRange;
+
+static int mult(int p, int q)
+{
+   int p1, p0, q1, q0;
+
+   p1=p/CONST_m1; p0=p%CONST_m1;
+   q1=q/CONST_m1; q0=q%CONST_m1;
+   return (((p0*q1+p1*q0) % CONST_m1)*CONST_m1+p0*q0);
+}
+
+static int mst_random(int seed)
+{
+  int tmp;
+  tmp = (mult(seed,CONST_b)+1);
+  return tmp;
+}
+
+static int compute_dist(int i,int j, int numvert)
+{
+  int less, gt;
+  if (i<j) {less = i; gt = j;} else {less = j; gt = i;}
+  return (mst_random(less*numvert+gt) % RANGE)+1;
+}
+
+static int hashfunc(unsigned int key)
+{
+  return ((key>>4) % HashRange);
+}
+
+static void AddEdges(Graph retval, int numvert) 
+{
+  Vertex src, dest;
+  Hash hash;
+  int i, j, dist, num_inserted = 0;
+  
+  for (j = 0; j < numvert; j++)
+    {
+      src = &(retval->vlist[j]); 
+      hash = src->edgehash;
+
+      for (i=0; i<numvert; i++) 
+        {
+          if (i!=j) 
+            {
+              dist = compute_dist(i,j,numvert);
+              dest = &(retval->vlist[i]);
+              HashInsert((void *) dist,(unsigned int) dest,hash);
+	      num_inserted++;
+            }
+        } /* for i */
+    } /* for j */
+
+  chatting("%d edges inserted\n", num_inserted);
+}
+
+Graph MakeGraph(int numvert) 
+{
+  int i;
+  Vertex vf, vt;
+  Graph retval;
+
+  retval = (Graph) malloc (sizeof(*retval));
+
+  chatting("Make phase 1: Creating hash tables\n");
+  retval->vlist = (Vertex) malloc (numvert*(sizeof(*vf)));
+  vt = NULL;
+
+  for (i = numvert - 1; i >= 0; i--) 
+    {
+      vf = &(retval->vlist[i]);
+      HashRange = numvert/4;
+      vf->mindist = 9999999;
+      vf->edgehash = MakeHash(HashRange,hashfunc);
+      vf->next = vt;
+      vt=vf;
+    }
+
+  chatting("Make phase 3: Creating graph\n");
+  AddEdges(retval, numvert);
+  chatting("Make returning\n");
+  return retval;
+}
+
+  
diff --git a/test/ccured_olden/mst/mst.h b/test/ccured_olden/mst/mst.h
new file mode 100644
index 000000000..4af1e346a
--- /dev/null
+++ b/test/ccured_olden/mst/mst.h
@@ -0,0 +1,33 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+#ifdef SS_PLAIN
+#include <stdlib.h>
+#endif SS_PLAIN
+
+#include "hash.h"
+#define MAXPROC 1
+
+#ifndef SS_PLAIN
+/* Amir: Get these out of here for SS, piggyback on the PLAIN definition */
+#include "mem-ref.h"
+#define NULL 0
+#endif SS_PLAIN
+
+typedef struct vert_st {
+  int mindist;
+  struct vert_st *next;
+  Hash edgehash;
+  unsigned int padding;
+} *Vertex;
+
+typedef struct graph_st {
+  Vertex vlist;
+} *Graph;
+
+Graph MakeGraph(int numvert);
+
+#ifdef SS_PLAIN
+#include <stdarg.h>
+void chatting(char *s, ...);
+#endif SS_PLAIN
+
diff --git a/test/ccured_olden/mst/out.orig b/test/ccured_olden/mst/out.orig
new file mode 100644
index 000000000..a50096d79
--- /dev/null
+++ b/test/ccured_olden/mst/out.orig
@@ -0,0 +1,13 @@
+Hash entry size = xx
+Hash size = xx
+Vertex size = xx
+Making graph of size 2048
+Make phase 1: Creating hash tables
+Make phase 3: Creating graph
+4192256 edges inserted
+Make returning
+Graph completed
+About to compute mst 
+Compute phase 1
+Compute phase 2
+MST has cost 13615
diff --git a/test/ccured_olden/mst/output b/test/ccured_olden/mst/output
new file mode 100644
index 000000000..d26771573
--- /dev/null
+++ b/test/ccured_olden/mst/output
@@ -0,0 +1,13 @@
+Hash entry size = 16
+Hash size = 20
+Vertex size = 20
+Making graph of size 2048
+Make phase 1: Creating hash tables
+Make phase 3: Creating graph
+4192256 edges inserted
+Make returning
+Graph completed
+About to compute mst 
+Compute phase 1
+Compute phase 2
+MST has cost 13615
diff --git a/test/ccured_olden/mst/ssplain.c b/test/ccured_olden/mst/ssplain.c
new file mode 100644
index 000000000..645d3a1e2
--- /dev/null
+++ b/test/ccured_olden/mst/ssplain.c
@@ -0,0 +1,38 @@
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <limits.h>
+#include <stddef.h>
+#include "ssplain.h"
+
+void chatting(char *s, ...)
+{
+  va_list ap;
+  va_start(ap,s);
+  vfprintf(stderr, s, ap);
+  va_end(ap);
+}
+
+
+#ifdef SS_RAND
+double drand48()
+{
+  double d;
+  d = (double) random() / LONG_MAX;
+  return d;
+}
+
+
+long lrand48()
+{
+  long l = random();
+  return l;
+}
+
+void srand48(long seed)
+{
+  srand(seed);
+}
+#endif SS_RAND
+
diff --git a/test/ccured_olden/mst/ssplain.h b/test/ccured_olden/mst/ssplain.h
new file mode 100644
index 000000000..865fbf473
--- /dev/null
+++ b/test/ccured_olden/mst/ssplain.h
@@ -0,0 +1,128 @@
+#ifndef SS_PLAIN_H
+#define SS_PLAIN_H
+
+void * ssplain_malloc(int size);
+void * ssplain_calloc(int nelems, int size);
+void ssplain_alloc_stats();
+ 
+/* Convert MP shutdown to exit */
+#define __ShutDown(ID)     { ssplain_alloc_stats(); exit(ID); } 
+
+/* All these CM-5 things are nops */
+#define CMMD_node_timer_clear(ID)
+#define CMMD_node_timer_start(ID)
+#define CMMD_node_timer_stop(ID)
+#define CMMD_node_timer_elapsed(ID)   ((double)0)
+
+#define CMMD_self_address()   0
+
+#define ClearAllStats()
+
+/* define away the CM-5 allocator */
+#include <stdlib.h>
+
+#ifndef ALLOC
+#define ALLOC(NUM,ESIZE)  ssplain_calloc (NUM+1,ESIZE)
+#endif ALLOC
+
+#ifndef mymalloc
+#define mymalloc malloc
+#endif mymalloc
+
+/* Get all of these multiprocessing things out of here. */
+/* My id will stay that way */
+#define IDMASK 0xffffffff
+
+/* Nothing is getting tested */
+#ifndef RETEST
+#define RETEST()
+#endif RETEST
+
+#ifndef NOTEST
+#define NOTEST()
+#endif NOTEST
+
+/* Everything is local */
+#ifndef local
+#define local            
+#endif local
+
+#ifndef LOCAL
+#define LOCAL(VAL)      (VAL)
+#endif LOCAL
+
+#ifndef ISLOCPTR
+#define ISLOCPTR(VAL)   (1)
+#endif ISLOCPTR
+
+#ifndef MLOCAL
+#define MLOCAL(VAL)
+#endif MLOCAL
+
+/* An atomic increment is a normal increment */
+#ifndef ATOMICINC
+#define ATOMICINC(PVAL) (*(PVAL) = *(PVAL) + 1)
+#endif ATOMICINC
+
+/* Nothing is migrating anywhere */
+#ifndef MIGRATE
+#define MIGRATE(ID)     
+#endif MIGRATE
+
+#ifndef MIGRPH
+#define MIGRPH()
+#endif MIGRPH
+
+#ifndef UNPHASE
+#define UNPHASE()
+#endif UNPHASE
+
+#ifndef PID
+#define PID(VAL)  (0)
+#endif PID
+
+/* All these functions */
+#pragma ccuredvararg("chatting", printf(1))
+void chatting(char *s, ...);
+
+/* just define these guys, they are not going to change */
+#define __NumNodes 1
+#define __MyNodeId 0
+#define __NDim     0
+
+typedef struct ss_future_cell_int {
+  int value;
+} future_cell_int;
+
+/* Where are these things for real? */
+#ifdef SS_RAND
+long lrand48();
+double drand48();
+void srand48(long seed);
+#endif SS_RAND
+
+#define MOD(V,M) ((V) & ((M) - 1))
+#define INC_MOD(V,M) (V) = MOD((V) + 1, (M))
+
+/* Prefetch instructions */
+
+/* Use these for 1 lookahead prefetching */
+
+#ifdef OVERHEAD_ONLY
+#define ASSEMBLE_PREFETCH(ARG)
+#define ASSEMBLE_PREFETCH_HEAD(ARG)
+#else !OVERHEAD_ONLY
+
+#define ASSEMBLE_PREFETCH(ARG) \
+     asm ("lw $0, %0" : /* no outputs */ : "g" (ARG))
+ 
+/* Use these for infinite lookahead prefetching */
+#define ASSEMBLE_PREFETCH_HEAD(ARG) \
+     asm ("lh $0, %0" : /* no outputs */ : "g" (ARG))
+
+#endif OVERHEAD_ONLY
+
+#endif SS_PLAIN_H
+
+
+
diff --git a/test/ccured_olden/mst/testit b/test/ccured_olden/mst/testit
new file mode 100755
index 000000000..2ef87d18a
--- /dev/null
+++ b/test/ccured_olden/mst/testit
@@ -0,0 +1,25 @@
+#!/bin/sh
+# test an mst binary
+
+if [ "$1" = "" ]; then
+  echo "usage: $0 ./mst.exe"
+  exit
+fi
+
+# all of mst's output is to stderr
+echo "running: $1 2048 1 2>output"
+if ! $1 2048 1 2>output; then
+  echo "$1 failed directly"
+  exit 2
+fi
+
+# mst prints sizes of its structures, which increase after boxing
+if ! sed 's/size = [0-9][0-9]/size = xx/' <output | diff out.orig - >out.diff; then
+    if test -s out.diff; then 
+      echo "$1 got the wrong answer. See out.diff"
+      exit 4
+    fi
+fi
+echo "$1 seems to work"
+rm -f out.diff
+ 
\ No newline at end of file
diff --git a/test/ccured_olden/newbisort/.cvsignore b/test/ccured_olden/newbisort/.cvsignore
new file mode 100644
index 000000000..5c56af15d
--- /dev/null
+++ b/test/ccured_olden/newbisort/.cvsignore
@@ -0,0 +1 @@
+changes
diff --git a/test/ccured_olden/newbisort/CVS/Entries b/test/ccured_olden/newbisort/CVS/Entries
new file mode 100644
index 000000000..cb3bbed91
--- /dev/null
+++ b/test/ccured_olden/newbisort/CVS/Entries
@@ -0,0 +1,13 @@
+/HOWTO/1.1/Fri Jul  6 09:37:30 2001//
+/Makefile/1.2/Sat Jul 21 16:09:41 2001//
+/Makefile.plain/1.1/Fri Jul  6 09:37:30 2001//
+/Makefile.ss/1.1/Fri Jul  6 09:37:30 2001//
+/args.c/1.1/Fri Jul  6 09:37:30 2001//
+/bitonic.c/1.1/Fri Jul  6 09:37:30 2001//
+/node.h/1.1/Fri Jul  6 09:37:30 2001//
+/proc.h/1.1/Fri Jul  6 09:37:30 2001//
+/ssplain.c/1.1/Fri Jul  6 09:37:30 2001//
+/ssplain.h/1.1/Fri Jul  6 09:37:30 2001//
+/swap.c/1.1/Fri Jul  6 09:37:30 2001//
+/.cvsignore/1.1/Thu Nov  8 23:31:03 2001//
+D
diff --git a/test/ccured_olden/newbisort/CVS/Repository b/test/ccured_olden/newbisort/CVS/Repository
new file mode 100644
index 000000000..9cf3bd6ae
--- /dev/null
+++ b/test/ccured_olden/newbisort/CVS/Repository
@@ -0,0 +1 @@
+cil/test/olden/newbisort
diff --git a/test/ccured_olden/newbisort/CVS/Root b/test/ccured_olden/newbisort/CVS/Root
new file mode 100644
index 000000000..35f411e97
--- /dev/null
+++ b/test/ccured_olden/newbisort/CVS/Root
@@ -0,0 +1 @@
+/home/cvs-repository
diff --git a/test/ccured_olden/newbisort/HOWTO b/test/ccured_olden/newbisort/HOWTO
new file mode 100644
index 000000000..dd53dde09
--- /dev/null
+++ b/test/ccured_olden/newbisort/HOWTO
@@ -0,0 +1 @@
+250000 0
diff --git a/test/ccured_olden/newbisort/Makefile b/test/ccured_olden/newbisort/Makefile
new file mode 100644
index 000000000..c08a8967e
--- /dev/null
+++ b/test/ccured_olden/newbisort/Makefile
@@ -0,0 +1,49 @@
+# /* For copyright information, see olden_v1.0/COPYRIGHT */
+
+BINARY		= bisort
+PROGS		= bitonic args ssplain
+
+CC		= gcc -arch ppc
+CCOMP=../../../../ccomp
+CCOMPFLAGS=-dump-c
+
+SRC		= .c
+OBJ		= .o
+ASM		= .s
+SRCS		= $(addsuffix $(SRC),$(PROGS))
+OBJS		= $(addsuffix $(OBJ),$(PROGS))
+ASMS		= $(addsuffix $(ASM),$(PROGS))
+INCDIRS		= /usr/include 
+
+EXTRA_CDEFS	= -DI_TIME -DI_SYS_TIME -DULTRIX
+CDEFS		= -DPLAIN -DSS_PLAIN #-I$(OLDENHOME)/common
+OPTFLAGS	= -g -Wall -O3
+
+LIBS		= -lc -lgcc -lm
+LIBPATH		= 
+
+#$(BINARY):	$(OBJS)
+#	$(CC) $(LDFALGS) $(OPTFLAGS) -o $@ $(OBJS) $(LIBPATH) $(LIBS)
+
+#$(SRC)$(OBJ):
+#	$(CC) $(CDEFS) $(EXTRA_CDEFS) $(MY_CDEFS) $(OPTFLAGS) -c $<
+
+
+all_s: $(PROGS:%=%.s)
+
+all: $(PROGS:%=%.compcert)
+
+all_gcc: $(PROGS:%=%.gcc)
+
+%.compcert: %.s
+	$(CC) $(CFLAGS) $(LDFALGS) $(OPTFLAGS) -o $*.compcert $*.s $(LIBS)
+
+%.s: %.c ../../../../ccomp
+	$(CCOMP) $(CCOMPFLAGS)  $(CDEFS) $(EXTRA_CDEFS) $*.c
+
+%.gcc: %.c
+	$(CC) $(CFLAGS) $(LDFALGS) $(OPTFLAGS) -o $*.gcc $*.c $(LIBS)
+
+clean:
+	rm -f $(BINARY) $(OBJS) *~  $(ASMS) *.light.c
+
diff --git a/test/ccured_olden/newbisort/Makefile.orig b/test/ccured_olden/newbisort/Makefile.orig
new file mode 100644
index 000000000..81e775689
--- /dev/null
+++ b/test/ccured_olden/newbisort/Makefile.orig
@@ -0,0 +1,33 @@
+# /* For copyright information, see olden_v1.0/COPYRIGHT */
+
+BINARY		= bisort
+FILES		= bitonic args ssplain
+
+
+
+CC		= gcc
+
+SRC		= .c
+OBJ		= .o
+ASM		= .s
+SRCS		= $(addsuffix $(SRC),$(FILES))
+OBJS		= $(addsuffix $(OBJ),$(FILES))
+ASMS		= $(addsuffix $(ASM),$(FILES))
+INCDIRS		= /usr/include 
+
+EXTRA_CDEFS	= -DI_TIME -DI_SYS_TIME -DULTRIX
+CDEFS		= -DPLAIN -DSS_PLAIN #-I$(OLDENHOME)/common
+OPTFLAGS	= -g -Wall -O3
+
+LIBS		= -lc -lgcc -lm
+LIBPATH		= 
+
+$(BINARY):	$(OBJS)
+	$(CC) $(LDFALGS) $(OPTFLAGS) -o $@ $(OBJS) $(LIBPATH) $(LIBS)
+
+$(SRC)$(OBJ):
+	$(CC) $(CDEFS) $(EXTRA_CDEFS) $(MY_CDEFS) $(OPTFLAGS) -c $<
+
+clean:
+	rm -f $(BINARY) $(OBJS) *~ 
+
diff --git a/test/ccured_olden/newbisort/Makefile.plain b/test/ccured_olden/newbisort/Makefile.plain
new file mode 100644
index 000000000..b12402508
--- /dev/null
+++ b/test/ccured_olden/newbisort/Makefile.plain
@@ -0,0 +1,7 @@
+# /* For copyright information, see olden_v1.0/COPYRIGHT */
+
+BINARY		= bisort
+FILES		= bitonic args ssplain
+
+include ../Makefile.plain
+
diff --git a/test/ccured_olden/newbisort/Makefile.ss b/test/ccured_olden/newbisort/Makefile.ss
new file mode 100644
index 000000000..000287306
--- /dev/null
+++ b/test/ccured_olden/newbisort/Makefile.ss
@@ -0,0 +1,7 @@
+# /* For copyright information, see olden_v1.0/COPYRIGHT */
+
+BINARY		= bisort
+FILES		= bitonic args ssplain
+
+include ../Makefile.ss
+
diff --git a/test/ccured_olden/newbisort/args.c b/test/ccured_olden/newbisort/args.c
new file mode 100644
index 000000000..125910267
--- /dev/null
+++ b/test/ccured_olden/newbisort/args.c
@@ -0,0 +1,32 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+#ifdef SS_PLAIN
+#include "ssplain.h"
+#endif SS_PLAIN
+
+int mylog(int num)
+{
+  int j=0,k=1;
+  
+  while(k<num) { k*=2; j++; }
+  return j;
+} 
+
+extern int flag;
+int dealwithargs(int argc, char *argv[])
+{
+  int size;
+
+  if (argc > 2)
+    flag = atoi(argv[2]);
+  else
+    flag = 0;
+
+  if (argc > 1)
+    size = atoi(argv[1]);
+  else
+    size = 16;
+
+  return size;  
+}
+
diff --git a/test/ccured_olden/newbisort/bitonic.c b/test/ccured_olden/newbisort/bitonic.c
new file mode 100644
index 000000000..7b08a0a23
--- /dev/null
+++ b/test/ccured_olden/newbisort/bitonic.c
@@ -0,0 +1,267 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+/* =================== PROGRAM bitonic===================== */
+/* UP - 0, DOWN - 1 */
+
+#include "node.h"   /* Node Definition */
+#include "proc.h"   /* Procedure Types/Nums */
+
+#define CONST_m1 10000
+#define CONST_b 31415821
+#define RANGE 100
+
+#ifdef SS_PLAIN
+#include "ssplain.h"
+#endif SS_PLAIN
+
+#define put(a) chatting("%d",a)
+#define puts(a) chatting(a)
+
+
+int flag=0,foo=0;
+
+#define NewNode(h,v) \
+  \
+{ \
+    h = (HANDLE *) malloc(sizeof(struct node)); \
+      h->value = v; \
+	h->left = NIL; \
+	  h->right = NIL; \
+	  };
+
+
+void InOrder(h)
+     HANDLE *h;
+{
+  HANDLE *l, *r;
+  if ((h != NIL))
+    {
+      l = h->left;
+      r = h->right;
+      InOrder(l);
+      chatting("%d @ 0x%x\n",h->value,h);
+      InOrder(r);
+    }
+}
+
+int mult(int p, int q)
+{
+	int p1, p0, q1, q0;
+	
+	p1=p/CONST_m1; p0=p%CONST_m1;
+	q1=q/CONST_m1; q0=q%CONST_m1;
+	return (((p0*q1+p1*q0) % CONST_m1)*CONST_m1+p0*q0);
+}
+
+int skiprand(int seed, int n)
+{
+#ifdef SS_PLAIN
+  for (; n; n--) seed=mult(seed,CONST_b)+1;
+#else SS_PLAIN
+  for (; n; n--) seed=random(seed);
+#endif SS_PLAIN
+  return seed;
+}
+
+#ifndef SS_PLAIN
+int random(int seed)
+{
+  int tmp;
+  tmp = (mult(seed,CONST_b)+1);
+  return tmp;
+}
+#endif SS_PLAIN
+
+HANDLE* RandTree(n,seed,level)
+     int n,seed,level;
+
+{
+  int next_val,my_name;
+  HANDLE *h;
+  my_name=foo++;
+
+  if (n > 1)
+    {
+#ifdef SS_PLAIN
+      seed = mult(seed,CONST_b)+1;
+#else SS_PLAIN
+      seed = random(seed);
+#endif SS_PLAIN
+      next_val=seed % RANGE;
+      NewNode(h,next_val);
+
+      h->left = RandTree((n/2),seed,level+1);
+      h->right =  RandTree((n/2),skiprand(seed,(n)+1),level+1);
+    }
+  else 
+    h = NIL;
+  return(h);
+} 
+
+void SwapVal(l,r)
+     HANDLE *l, *r;
+{ 
+  int temp;
+  
+  temp = l->value; /* MISS PROBLEM */
+  l->value = r->value;
+  r->value = temp;
+} 
+
+void SwapLeft(l,r)
+     HANDLE *l, *r;
+{
+  HANDLE *h;
+
+  h = r->left;
+  r->left = l->left;
+  l->left = h;
+}
+
+void SwapRight(l,r)
+     HANDLE *l, *r;
+{  
+  HANDLE *h;
+
+  h = r->right;
+  r->right = l->right; /* MISS PROBLEM */
+  l->right = h;
+} 
+
+int Bimerge(root,spr_val,dir)
+     HANDLE *root;
+     int spr_val,dir;
+{ 
+  int rightexchange, elementexchange;
+  HANDLE *pl, *pr;
+
+  /*chatting("enter bimerge %x\n", root);*/
+  rightexchange = ((root->value > spr_val) ^ dir);
+  if (rightexchange)
+    {
+      int temp;
+      temp = root->value;
+      root->value = spr_val;
+      spr_val = temp;
+    }
+  
+  pl = root->left;
+  pr = root->right;
+
+  while (pl != NIL)
+    {
+      elementexchange = ((pl->value > /* MISS PROBLEM */pr->value) ^ dir); 
+      if (rightexchange)
+	{
+	  if (elementexchange)
+	    { 
+	      SwapVal(pl,pr);
+	      SwapRight(pl,pr);
+	      pl = pl->left;
+	      pr = pr->left;
+	    }
+	  else 
+	    { 
+	      pl = pl->right;
+	      pr = pr->right;
+	    }
+	}
+      else 
+	{
+	  if (elementexchange)
+	    { 
+	      SwapVal(pl,pr);
+	      SwapLeft(pl,pr);
+	      pl = pl->right;
+	      pr = pr->right;
+	    }
+	  else 
+	    { 
+	      pl = pl->left;
+	      pr = pr->left; /* MISS PROBLEM */
+	    }
+	}
+    }
+
+  if (root->left != NIL)
+    { 
+      root->value=Bimerge(root->left,root->value,dir);
+      spr_val=Bimerge(root->right,spr_val,dir);
+    }
+  /*chatting("exit bimerge %x\n", root);*/
+  return spr_val;
+} 
+
+int Bisort(root,spr_val,dir)
+     HANDLE *root;
+     int spr_val,dir;
+{ 
+  /*chatting("bisort %x\n", root);*/
+  if (root->left == NIL)
+    { 
+     if ((root->value > spr_val) ^ dir)
+        {
+	  int val;
+	  val = spr_val;
+	  spr_val = root->value;
+	  root->value =val;
+	}
+    }
+  else 
+    {
+      /* Bisort both halves of the tree and merge */
+      root->value=Bisort(root->left,root->value,dir);
+      spr_val=Bisort(root->right,spr_val,!dir);
+      spr_val=Bimerge(root,spr_val,dir);
+    }
+  /*chatting("exit bisort %x\n", root);*/
+  return spr_val;
+} 
+
+void main(argc,argv)
+  int argc;
+ char *argv[];
+
+
+{ 
+  HANDLE *h;
+  int sval;
+  int n;
+   
+  n = dealwithargs(argc,argv);
+
+  chatting("Bisort with %d size\n", n);
+  h = RandTree(n,12345768,0);
+#ifdef SS_PLAIN
+  sval = (mult(245867,CONST_b)+1) % RANGE;
+#else SS_PLAIN
+  sval = random(245867) % RANGE;
+#endif SS_PLAIN
+  if (flag) {
+    InOrder(h);
+    chatting("%d\n",sval);
+   }
+  chatting("**************************************\n");
+  chatting("BEGINNING BITONIC SORT ALGORITHM HERE\n");
+  chatting("**************************************\n");
+
+  chatting("Sorting forward...");
+  sval=Bisort(h,sval,0);
+  if (flag) {
+    chatting("Sorted Tree:\n"); 
+    InOrder(h);
+    chatting("%d\n",sval);
+   }
+  chatting("done\n");
+
+  chatting("sorting backward...");
+  sval=Bisort(h,sval,1);
+  if (flag) {
+    chatting("Sorted Tree:\n"); 
+    InOrder(h);
+    chatting("%d\n",sval);
+   }
+  chatting("done\n");
+  exit(0);
+} 
+
diff --git a/test/ccured_olden/newbisort/node.h b/test/ccured_olden/newbisort/node.h
new file mode 100644
index 000000000..c1b81c6da
--- /dev/null
+++ b/test/ccured_olden/newbisort/node.h
@@ -0,0 +1,18 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+/* =============== NODE STRUCTURE =================== */
+
+struct node { 
+  int value;
+  struct node *left;
+  struct node *right;
+  };
+
+typedef struct node HANDLE;
+
+#define NIL ((HANDLE *) 0)
+#ifdef FUTURES
+#define makenode(procid) ALLOC(procid,sizeof(struct node))
+#else
+#define makenode(procid) mymalloc(sizeof(struct node))
+#endif
diff --git a/test/ccured_olden/newbisort/proc.h b/test/ccured_olden/newbisort/proc.h
new file mode 100644
index 000000000..eadb80aa4
--- /dev/null
+++ b/test/ccured_olden/newbisort/proc.h
@@ -0,0 +1,25 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+/* ========== PROCEDURE TYPES/NUMS ================== */
+
+
+HANDLE *RandTree();
+
+void SwapValue();
+void SwapValLeft();
+void SwapValRight();
+int Bimerge();
+int Bisort();
+#define DD_EXIT 0
+
+
+/* ================= PROC NAMES ==============*/
+
+#ifdef EXTERN 
+  extern char *procnames[]; 
+#else 
+  static char *procnames[] = 
+  {
+    "EXIT"
+  };
+#endif
diff --git a/test/ccured_olden/newbisort/ssplain.c b/test/ccured_olden/newbisort/ssplain.c
new file mode 100644
index 000000000..b178e5f5a
--- /dev/null
+++ b/test/ccured_olden/newbisort/ssplain.c
@@ -0,0 +1,75 @@
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <limits.h>
+#include <stddef.h>
+#include "ssplain.h"
+
+void chatting(char *s, ...)
+{
+  va_list ap;
+  va_start(ap,s);
+  vfprintf(stderr, s, ap);
+  va_end(ap);
+}
+
+void __Olden_panic(char *s, ...)
+{
+  va_list ap;
+  va_start(ap,s);
+  vfprintf(stderr, s, ap);
+  va_end(ap);
+  exit(-1);
+}
+
+#ifdef SS_RAND
+double drand48()
+{
+  double d;
+  d = (double) random() / LONG_MAX;
+  return d;
+}
+
+
+long lrand48()
+{
+  long l = random();
+  return l;
+}
+
+void srand48(long seed)
+{
+  srand(seed);
+}
+#endif SS_RAND
+
+
+static unsigned long bytes_allocated = 0;
+static unsigned long allocations = 0;
+
+void*
+ssplain_malloc(int size)
+{
+  allocations++;
+  bytes_allocated+=size;
+  return malloc(size);
+}
+
+void*
+ssplain_calloc(int nelems, int size)
+{
+  void *p;
+  allocations++;
+  bytes_allocated+= nelems * size;
+  p =  calloc(nelems, size);
+  assert (p);
+  return p;
+}
+
+void
+ssplain_alloc_stats()
+{
+  chatting("Allocation stats: %d bytes allocated in %d allocations\n",
+	   bytes_allocated, allocations);
+}
diff --git a/test/ccured_olden/newbisort/ssplain.h b/test/ccured_olden/newbisort/ssplain.h
new file mode 100644
index 000000000..cb9b3eed9
--- /dev/null
+++ b/test/ccured_olden/newbisort/ssplain.h
@@ -0,0 +1,128 @@
+#ifndef SS_PLAIN_H
+#define SS_PLAIN_H
+
+void * ssplain_malloc(int size);
+void * ssplain_calloc(int nelems, int size);
+void ssplain_alloc_stats();
+ 
+/* Convert MP shutdown to exit */
+#define __ShutDown(ID)     { ssplain_alloc_stats(); exit(ID); } 
+
+/* All these CM-5 things are nops */
+#define CMMD_node_timer_clear(ID)
+#define CMMD_node_timer_start(ID)
+#define CMMD_node_timer_stop(ID)
+#define CMMD_node_timer_elapsed(ID)   ((double)0)
+
+#define CMMD_self_address()   0
+
+#define ClearAllStats()
+
+/* define away the CM-5 allocator */
+#include <stdlib.h>
+
+#ifndef ALLOC
+#define ALLOC(NUM,ESIZE)  ssplain_calloc (NUM+1,ESIZE)
+#endif ALLOC
+
+#ifndef mymalloc
+#define mymalloc ssplain_malloc
+#endif mymalloc
+
+/* Get all of these multiprocessing things out of here. */
+/* My id will stay that way */
+#define IDMASK 0xffffffff
+
+/* Nothing is getting tested */
+#ifndef RETEST
+#define RETEST()
+#endif RETEST
+
+#ifndef NOTEST
+#define NOTEST()
+#endif NOTEST
+
+/* Everything is local */
+#ifndef local
+#define local            
+#endif local
+
+#ifndef LOCAL
+#define LOCAL(VAL)      (VAL)
+#endif LOCAL
+
+#ifndef ISLOCPTR
+#define ISLOCPTR(VAL)   (1)
+#endif ISLOCPTR
+
+#ifndef MLOCAL
+#define MLOCAL(VAL)
+#endif MLOCAL
+
+/* An atomic increment is a normal increment */
+#ifndef ATOMICINC
+#define ATOMICINC(PVAL) (*(PVAL) = *(PVAL) + 1)
+#endif ATOMICINC
+
+/* Nothing is migrating anywhere */
+#ifndef MIGRATE
+#define MIGRATE(ID)     
+#endif MIGRATE
+
+#ifndef MIGRPH
+#define MIGRPH()
+#endif MIGRPH
+
+#ifndef UNPHASE
+#define UNPHASE()
+#endif UNPHASE
+
+#ifndef PID
+#define PID(VAL)  (0)
+#endif PID
+
+/* All these functions */
+void chatting(char *s, ...);
+void __Olden_panic(char *s, ...);
+
+/* just define these guys, they are not going to change */
+#define __NumNodes 1
+#define __MyNodeId 0
+#define __NDim     0
+
+typedef struct ss_future_cell_int {
+  int value;
+} future_cell_int;
+
+/* Where are these things for real? */
+#ifdef SS_RAND
+long lrand48();
+double drand48();
+void srand48(long seed);
+#endif SS_RAND
+
+#define MOD(V,M) ((V) & ((M) - 1))
+#define INC_MOD(V,M) (V) = MOD((V) + 1, (M))
+
+/* Prefetch instructions */
+
+/* Use these for 1 lookahead prefetching */
+
+#ifdef OVERHEAD_ONLY
+#define ASSEMBLE_PREFETCH(ARG)
+#define ASSEMBLE_PREFETCH_HEAD(ARG)
+#else !OVERHEAD_ONLY
+
+#define ASSEMBLE_PREFETCH(ARG) \
+     asm ("lw $0, %0" : /* no outputs */ : "g" (ARG))
+ 
+/* Use these for infinite lookahead prefetching */
+#define ASSEMBLE_PREFETCH_HEAD(ARG) \
+     asm ("lh $0, %0" : /* no outputs */ : "g" (ARG))
+
+#endif OVERHEAD_ONLY
+
+#endif SS_PLAIN_H
+
+
+
diff --git a/test/ccured_olden/newbisort/swap.c b/test/ccured_olden/newbisort/swap.c
new file mode 100644
index 000000000..e1e98749e
--- /dev/null
+++ b/test/ccured_olden/newbisort/swap.c
@@ -0,0 +1,145 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+#define COLLECT_SIZE 256
+#define DFS_SIZE 20
+#include "node.h"
+
+#ifdef SS_PLAIN
+#include "ssplain.h"
+#endif SS_PLAIN
+
+
+typedef struct {
+  int top;
+  HANDLE *handles[DFS_SIZE];
+} stack;
+
+#define push(s,v) (s)->handles[++((s)->top)] = v
+#define pop(s) (s)->handles[((s)->top)--]
+#define stackempty(s) ((s)->top < 0)  
+void VisitCollect(HANDLE *t, local int *collect)
+{
+  register int val;
+  val = t->value;
+  *collect = val;
+}
+
+void VisitCollectReplace(HANDLE *t, local int *collect)
+{
+  register int temp = *collect;
+  register int val = t->value;
+  *collect = val;
+  t->value = temp;
+}
+
+void VisitReplace(HANDLE *t, local int *collect)
+{
+  register int val = *collect;
+  t->value = val;
+}
+
+void swapDFS(local stack *s, local int collection[], void visit())
+{
+  int num=0;
+  
+  while (!stackempty(s) && num < COLLECT_SIZE) 
+    {
+      HANDLE *v = pop(s);
+      visit(v,&collection[num]);
+      num++;
+      if (v->left != NULL) 
+	{
+     HANDLE *child;
+     child = v->right;
+	  push(s,child);
+     child = v->left;
+	  push(s,child);
+	}
+    }
+}
+
+void NewSwapSubTree(HANDLE *t1, HANDLE *t2)
+{
+  local stack c1, r1, s2;
+  int collection[COLLECT_SIZE];
+
+  /*chatting("starting swapping\n");*/
+
+  if (t1!=NULL) 
+    {
+      c1.top = -1;
+      r1.top = -1;
+      s2.top = -1;
+      push(&c1,t1);
+      push(&r1,t1);
+      push(&s2,t2);
+      while (!stackempty(&c1)) 
+	{
+     MLOCAL(t1);
+	  swapDFS(&c1,collection,VisitCollect);
+	  MLOCAL(t2);
+	  swapDFS(&s2,collection,VisitCollectReplace);
+	  MLOCAL(t1);
+	  swapDFS(&r1,collection,VisitReplace);
+	}
+    }
+  /*chatting("ending swapping\n");*/
+
+}
+  
+  
+int *Collect(HANDLE *t1, local int collection[])
+{
+  register int val;
+  if (t1==NULL) return collection;
+  MLOCAL(t1);
+  val = t1->value;
+  *collection = val;
+  collection += 1;
+  collection = Collect(t1->left,collection);
+  collection = Collect(t1->right,collection);
+  return collection;
+}
+
+int *Collect_Replace(HANDLE *t1, local int collection[])
+{
+  register int temp,val;
+  if (t1==NULL) return collection;
+  MLOCAL(t1);
+  temp = *collection;
+  val = t1->value;
+  *collection = val;
+  t1->value = temp;
+  collection += 1;
+  collection = Collect_Replace(t1->left,collection);
+  collection = Collect_Replace(t1->right,collection);
+  return collection;
+}
+
+int *Replace(HANDLE *t1, local int collection[])
+{
+  register int val;
+  if (t1==NULL) return collection;
+  MLOCAL(t1);
+  val = *collection;
+  t1->value = val;
+  collection +=1;
+  collection = Replace(t1->left,collection);
+  collection = Replace(t1->right,collection);
+  return collection;
+}
+
+
+void SwapSubTree(HANDLE *t1, HANDLE *t2)
+{
+  int collection[COLLECT_SIZE];
+  HANDLE *t1loc, *t2loc;
+
+  MLOCAL(t1);
+  Collect(t1,collection);
+  MLOCAL(t2);
+  Collect_Replace(t2,collection);
+  MLOCAL(t1);
+  Replace(t1,collection);
+}
+
diff --git a/test/ccured_olden/perimeter/.cvsignore b/test/ccured_olden/perimeter/.cvsignore
new file mode 100644
index 000000000..9cd22bfd4
--- /dev/null
+++ b/test/ccured_olden/perimeter/.cvsignore
@@ -0,0 +1,32 @@
+*.o
+*.obj
+*.exe
+*.pdb
+*.ilk
+*.cpp
+*.i
+*.s
+*.asm
+*cil.c
+*.rtl
+*box.c
+*infer.c
+*_ppp.c
+*.origi
+*.stackdump
+*_all.c
+changes.out
+perimeter.cil
+perimeter.*box
+allcfiles
+ope.m
+ope.m
+*cured.c
+*.optim.c
+*_comb.c
+changes
+output
+out.diff
+*.browser
+*optimcured*
+
diff --git a/test/ccured_olden/perimeter/CVS/Entries b/test/ccured_olden/perimeter/CVS/Entries
new file mode 100644
index 000000000..4d821ece9
--- /dev/null
+++ b/test/ccured_olden/perimeter/CVS/Entries
@@ -0,0 +1,9 @@
+/Makefile/1.3/Sun Jul  8 14:10:47 2001//
+/README/1.1/Tue Jun 12 04:17:59 2001//
+/main.c/1.1/Tue Jun 12 04:17:59 2001//
+/maketree.c/1.1/Tue Jun 12 04:17:59 2001//
+/out.orig/1.1/Mon Nov 12 08:08:28 2001//
+/testit/1.2/Tue Dec  4 05:07:50 2001//
+/.cvsignore/1.14/Wed Aug  7 01:48:13 2002//
+/perimeter.h/1.4/Sat Jan 11 20:38:42 2003//
+D
diff --git a/test/ccured_olden/perimeter/CVS/Repository b/test/ccured_olden/perimeter/CVS/Repository
new file mode 100644
index 000000000..631384645
--- /dev/null
+++ b/test/ccured_olden/perimeter/CVS/Repository
@@ -0,0 +1 @@
+cil/test/olden/perimeter
diff --git a/test/ccured_olden/perimeter/CVS/Root b/test/ccured_olden/perimeter/CVS/Root
new file mode 100644
index 000000000..35f411e97
--- /dev/null
+++ b/test/ccured_olden/perimeter/CVS/Root
@@ -0,0 +1 @@
+/home/cvs-repository
diff --git a/test/ccured_olden/perimeter/Makefile b/test/ccured_olden/perimeter/Makefile
new file mode 100644
index 000000000..47675db04
--- /dev/null
+++ b/test/ccured_olden/perimeter/Makefile
@@ -0,0 +1,99 @@
+# /* For copyright information, see olden_v1.01/COPYRIGHT */
+.KEEP_STATE:
+SRCS     = main.c maketree.c
+
+OLDEN_DIR=/u/ac/carlisle/olden_v1.01
+RCC = $(OLDEN_DIR)/mcc/sparc/backend/mcc
+CPP = gcc -E -U__GNUC__ -D_NO_LONGLONG
+#CPPFLAGS = -DVERIFY_AFFINITIES 
+CPPFLAGS = 
+#LIBFLAGS = "CPPFLAGS=-DPROF"
+#LIBFLAGS = "CPPFLAGS=-DVISUALIZE" "VFLAG=-v"
+LIBFLAGS =
+#PFLAG = -p
+PFLAG =
+PLIBOBJS    = plain.o plain2.o
+LIBOBJS     = libolden.a
+OBJS     = $(SRCS:%.c=%.o)  args.o
+ROBJS    = $(SRCS:%.c=%.r.o) args.o
+LIBLINK     = $(LIBOBJS:%=$(OLDEN_DIR)/runtime/%)
+RLIBLINK    = $(PLIBOBJS:%=$(OLDEN_DIR)/runtime/%)
+INCDIRS     = /usr/include $(OLDEN_DIR)/runtime
+NODELIBS =
+LIBDIRS     =
+
+CC    = cc
+#sm: CFLAGS      =
+CFLAGS      = -O2
+
+
+# sm:
+PLAIN=1
+all: defaulttarget
+
+ifdef PLAIN
+ifdef _MSVC
+EXTOBJ = .obj
+OBJOUT = /Fo
+EXEOUT = /Fe
+CFLAGS = /DPLAIN
+CONLY  = /c
+CC     = cl
+else
+EXTOBJ = .o
+OBJOUT = -o
+EXEOUT = -o
+CFLAGS += -DPLAIN
+CONLY  = -c
+CC     = gcc -arch ppc
+CCOMP=../../../../ccomp
+CCOMPFLAGS=-dump-c
+
+endif
+
+OBJS = maketree$(EXTOBJ) main$(EXTOBJ)
+
+%.obj : %.c
+	$(CC) $(CONLY) $(CFLAGS) $< $(OBJOUT)$@
+
+
+defaulttarget: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(EXEOUT)perimeter.exe
+endif
+
+perm: $(OBJS) target
+	/usr/bin/cmmd-ld \
+	-comp $(CC) $(OBJS) $(LIBLINK) -v -o /scratch1/carlisle/perm   \
+	$(LIBDIRS:%=-L%) $(NODELIBS:%=-l%)
+
+plain: $(ROBJS) target
+	/usr/bin/cmmd-ld \
+	-comp $(CC) $(ROBJS) $(RLIBLINK) -v -o /scratch1/carlisle/plainperm   \
+	$(LIBDIRS:%=-L%) $(NODELIBS:%=-l%)
+
+ifndef PLAIN
+args.s: args.c
+	/lib/cpp $(CPPFLAGS) $(INCDIRS:%=-I%) args.c | $(RCC) > args.s
+endif
+
+%.s:    %.c
+	$(CPP) -DFUTURES  $(CPPFLAGS) $(INCDIRS:%=-I%) $< | $(RCC) $(PFLAG) -n -m -k > $*.s
+
+
+%.p.s:    %.c
+	/lib/cpp -DPLAIN $(CPPFLAGS) $(INCDIRS:%=-I%) $< | $(RCC) -f > $*.p.s
+
+%.o:	%.s
+	$(CC) $(CFLAGS) -c $<
+
+
+%.r.o:	%.p.s
+	$(CC) $(CFLAGS) -c $< -o $*.r.o
+
+target: 
+	cd $(OLDEN_DIR)/runtime; make $(LIBFLAGS)
+
+clean:
+	rm -f $(TARGET) $(OBJS) *.exe *.o *.obj *~ .make.state .nse_depinfo *.s *.light.c
+
+
diff --git a/test/ccured_olden/perimeter/README b/test/ccured_olden/perimeter/README
new file mode 100644
index 000000000..c8f557c9b
--- /dev/null
+++ b/test/ccured_olden/perimeter/README
@@ -0,0 +1,20 @@
+/* For copyright information, see olden_v1.01/COPYRIGHT */
+**********************
+olden_v1.01/benchmarks/perimeter/README
+June 1996
+Martin C. Carlisle
+
+this directory contains the Perimeter benchmark:
+
+H. Samet.  "Computing Perimeters of Regions in Images Represented by Quad-
+Trees".  IEEE Trans. on Pattern Analysis and Machine Intelligence 
+PAMI-3(6), Nov. 1981
+
+as implemented for Olden by Martin C. Carlisle
+**********************
+
+Makefile - use "make perm" to create executable
+
+args.c - process command line args
+main.c,perimeter.h - main routines
+maketree.c - creates random quad-tree
diff --git a/test/ccured_olden/perimeter/main.c b/test/ccured_olden/perimeter/main.c
new file mode 100644
index 000000000..ff58925aa
--- /dev/null
+++ b/test/ccured_olden/perimeter/main.c
@@ -0,0 +1,221 @@
+#include "perimeter.h"
+#ifdef MIGRONLY
+#define BLAH MIGRPH()
+#else
+#define BLAH
+#endif
+
+#ifdef VERIFY_AFFINITIES
+#include "affinity.h"
+CHECK4(QuadTree,nw,ne,sw,se,tree)
+#endif
+
+static int adj(Direction d, ChildType ct)
+{
+  BLAH;
+  switch (d) 
+    {
+    case north:
+      return ((ct==northeast) || (ct==northwest));
+    case south:
+      return ((ct==southeast) || (ct==southwest));
+    case east:
+      return ((ct==northeast) || (ct==southeast));
+    case west:
+      return ((ct==southwest) || (ct==northwest));
+    }
+}
+
+static ChildType reflect(Direction d, ChildType ct) 
+{
+  BLAH;
+  if ((d==west) || (d==east)) 
+    {
+      switch(ct) 
+	{
+	case northwest:
+	  return northeast;
+	case northeast:
+	  return northwest;
+	case southeast:
+	  return southwest;
+	case southwest:
+	  return southeast;
+	}
+    }
+  switch(ct) 
+    {
+    case northwest:
+      return southwest;
+    case northeast:
+      return southeast;
+    case southeast:
+      return northeast;
+    case southwest:
+      return northwest;
+    }
+}
+
+int CountTree(QuadTree tree) 
+{
+  QuadTree nw,ne,sw,se;
+
+  BLAH;
+  nw = tree->nw; ne = tree->ne; sw = tree->sw; se = tree->se;
+  if (nw==NULL && ne==NULL && sw==NULL && se==NULL)
+    return 1;
+  else
+    return CountTree(nw) + CountTree(ne) + CountTree(sw) +
+      CountTree(se);
+}
+
+static QuadTree child(QuadTree tree, ChildType ct)
+{
+  BLAH;
+  switch(ct) 
+    {
+    case northeast:
+      return tree->ne;
+    case northwest:
+      return tree->nw;
+    case southeast:
+      return tree->se;
+    case southwest:
+      return tree->sw;
+    }
+}
+
+static QuadTree gtequal_adj_neighbor(QuadTree tree, Direction d)
+{
+  QuadTree q,parent;
+  ChildType ct;
+  
+  BLAH;
+  parent=tree->parent;
+  ct=tree->childtype;
+  if ((parent!=NULL) && adj(d,ct))
+    q=gtequal_adj_neighbor(parent,d);
+  else q=parent;
+  if (q && q->color==grey) {
+    return child(q,reflect(d,ct));
+  }
+  else return q;
+}
+
+static int sum_adjacent(QuadTree p, ChildType q1, ChildType q2, int size)
+{
+  BLAH;
+  if (p->color==grey) 
+    {
+      return sum_adjacent(child(p,q1),q1,q2,size/2) +
+	sum_adjacent(child(p,q2),q1,q2,size/2);
+    }
+  else if (p->color==white) 
+    {
+      return size;
+    }
+  else return 0;
+}
+
+int perimeter(QuadTree tree, int size)
+{
+  int retval = 0;
+  QuadTree neighbor;
+
+  BLAH;
+  if (tree->color==grey) 
+    {
+      QuadTree child;
+#ifdef FUTURES
+      future_cell_int fc_sw,fc_se,fc_ne;
+#endif
+
+#ifndef FUTURES
+      child = tree->sw;
+      retval += perimeter(child,size/2);
+      child = tree->se;
+      retval += perimeter(child,size/2);
+      child = tree->ne;
+      retval += perimeter(child,size/2);
+      child = tree->nw;
+      retval += perimeter(child,size/2);
+#else
+      child = tree->sw;
+      FUTURE(child,size/2,perimeter,&fc_sw);
+      child = tree->se;
+      FUTURE(child,size/2,perimeter,&fc_se);
+      child = tree->ne;
+      FUTURE(child,size/2,perimeter,&fc_ne);
+      child = tree->nw;
+      retval = perimeter(child,size/2);
+      TOUCH(&fc_sw);
+      TOUCH(&fc_se);
+      TOUCH(&fc_ne);
+      retval += fc_sw.value + fc_se.value + fc_ne.value;
+#endif
+    }
+  else if (tree->color==black)
+    {
+      /* North */
+      neighbor=gtequal_adj_neighbor(tree,north);
+      if ((neighbor==NULL) || (neighbor->color==white)) retval+=size;
+      else if (neighbor->color==grey) 
+	retval+=sum_adjacent(neighbor,southeast,southwest,size);
+      /* East */
+      neighbor=gtequal_adj_neighbor(tree,east);
+      if ((neighbor==NULL) || (neighbor->color==white)) retval+=size;
+      else if (neighbor->color==grey) 
+	retval+=sum_adjacent(neighbor,southwest,northwest,size);
+      /* South */
+      neighbor=gtequal_adj_neighbor(tree,south);
+      if ((neighbor==NULL) || (neighbor->color==white)) retval+=size;
+      else if (neighbor->color==grey) 
+	retval+=sum_adjacent(neighbor,northwest,northeast,size);
+      /* West */
+      neighbor=gtequal_adj_neighbor(tree,west);
+      if ((neighbor==NULL) || (neighbor->color==white)) retval+=size;
+      else if (neighbor->color==grey) 
+	retval+=sum_adjacent(neighbor,northeast,southeast,size);
+    }
+  return retval;
+}
+
+#ifdef PLAIN
+double wallclock;
+int __NumNodes;
+#endif
+
+int main()
+{
+  QuadTree tree;
+  int count;
+  int level;
+  int i;
+
+  BLAH;
+  level = 12;
+  __NumNodes = 1;
+
+  chatting("Perimeter with %d levels on %d processors\n",level,__NumNodes);
+  tree=MakeTree(2048,0,0,0,__NumNodes-1,NULL,southeast,level);
+#ifdef VERIFY_AFFINITIES
+  Docheck_tree(tree);
+#endif
+  count=CountTree(tree);
+  chatting("# of leaves is %d\n",count);
+
+
+  timer_start(0);
+  for(i=0;i<100;i++) {
+    count=perimeter(tree,4096);
+  }
+  timer_stop(0);
+
+  chatting("perimeter is %d\n",count);
+  chatting("Time elapsed = %f milliseconds\n", timer_elapsed(0));
+#ifdef FUTURES
+  __ShutDown();
+#endif
+  exit(0);
+}
+
diff --git a/test/ccured_olden/perimeter/maketree.c b/test/ccured_olden/perimeter/maketree.c
new file mode 100644
index 000000000..294ff0280
--- /dev/null
+++ b/test/ccured_olden/perimeter/maketree.c
@@ -0,0 +1,120 @@
+#include "perimeter.h"
+
+static int CheckOutside(int x, int y) 
+{
+  int euclid = x*x+y*y;
+
+  if (euclid > 4194304) return 1;  
+  if (euclid < 1048576) return -1; 
+  return 0;
+}
+
+static int CheckIntersect(int center_x, int center_y, int size)
+{
+  int sum;
+  
+  if (!CheckOutside(center_x+size,center_y+size) &&
+      !CheckOutside(center_x+size,center_y-size) &&
+      !CheckOutside(center_x-size,center_y-size) &&
+      !CheckOutside(center_x-size,center_y+size)) return 2;
+  sum=CheckOutside(center_x+size,center_y+size) +
+    CheckOutside(center_x+size,center_y-size) +
+      CheckOutside(center_x-size,center_y-size) +
+	CheckOutside(center_x-size,center_y+size);
+  if ((sum==4) || (sum==-4)) return 0;
+  return 1;
+}  
+
+QuadTree MakeTree(int size, int center_x, int center_y, int lo_proc,
+		  int hi_proc, QuadTree parent, ChildType ct, int level) 
+{
+  int intersect=0;
+  QuadTree retval;
+
+#ifdef FUTURES
+  retval = (QuadTree) ALLOC(lo_proc,sizeof(*retval));
+#else
+  retval = (QuadTree) mymalloc(sizeof(*retval));
+#endif
+  retval->parent = parent;
+  retval->childtype = ct;
+
+  intersect = CheckIntersect(center_x,center_y,size);
+  size = size/2;
+  if ((intersect==0) && (size<512))
+      {
+      retval->color = white;
+      retval->nw = NULL;
+      retval->ne = NULL;
+      retval->sw = NULL;
+      retval->se = NULL;
+    }
+  else if (intersect==2) 
+    {
+      retval->color=black;
+      retval->nw = NULL;
+      retval->ne = NULL;
+      retval->sw = NULL;
+      retval->se = NULL;
+    }
+  else 
+    {
+      if (!level)
+	{
+	  retval->color = black;
+	  retval->nw = NULL;
+	  retval->ne = NULL;
+	  retval->sw = NULL;
+	  retval->se = NULL;
+	}
+      else 
+	{
+	  int mid1,mid2;
+#ifdef FUTURES 
+     future_cell_int fc_sw,fc_se,fc_ne;
+#endif
+
+	  mid1 = (lo_proc+hi_proc)/2;
+	  mid2 = (lo_proc+hi_proc+1)/2;
+
+#ifndef FUTURES
+	  retval->sw = MakeTree(size,center_x-size,center_y-size,
+				(mid2+hi_proc+1)/2,hi_proc,retval,
+				southwest,level-1);
+	  retval->se = MakeTree(size,center_x+size,center_y-size,
+				mid2,(mid2+hi_proc)/2,retval,
+				southeast,level-1);
+	  retval->ne = MakeTree(size,center_x+size,center_y+size,
+				(lo_proc+mid1+1)/2,mid1,retval,
+				northeast,level-1);
+	  retval->nw = MakeTree(size,center_x-size,center_y+size,
+				lo_proc,(lo_proc+mid1)/2,retval,
+				northwest,level-1);
+#else
+	  FUTURE(size,center_x-size,center_y-size,
+				(mid2+hi_proc+1)/2,hi_proc,retval,
+				southwest,level-1,MakeTree,&fc_sw);
+	  FUTURE(size,center_x+size,center_y-size,
+				mid2,(mid2+hi_proc)/2,retval,
+				southeast,level-1,MakeTree,&fc_se);
+	  FUTURE(size,center_x+size,center_y+size,
+				(lo_proc+mid1+1)/2,mid1,retval,
+				northeast,level-1,MakeTree,&fc_ne);
+	  retval->nw = MakeTree(size,center_x-size,center_y+size,
+				lo_proc,(lo_proc+mid1)/2,retval,
+				northwest,level-1);
+     TOUCH(&fc_sw);
+     retval->sw = (QuadTree) fc_sw.value;
+     TOUCH(&fc_se);
+     retval->se = (QuadTree) fc_se.value;
+     TOUCH(&fc_ne);
+     retval->ne = (QuadTree) fc_ne.value;
+#endif
+	  retval->color = grey;
+	}
+    }
+  return retval;
+}
+
+
+
diff --git a/test/ccured_olden/perimeter/out.orig b/test/ccured_olden/perimeter/out.orig
new file mode 100644
index 000000000..98edab513
--- /dev/null
+++ b/test/ccured_olden/perimeter/out.orig
@@ -0,0 +1,3 @@
+Perimeter with 12 levels on 1 processors
+# of leaves is 73432
+perimeter is 24576
diff --git a/test/ccured_olden/perimeter/output b/test/ccured_olden/perimeter/output
new file mode 100644
index 000000000..5906be436
--- /dev/null
+++ b/test/ccured_olden/perimeter/output
@@ -0,0 +1,4 @@
+Perimeter with 12 levels on 1 processors
+# of leaves is 73432
+perimeter is 24576
+Time elapsed = 2970.000000 milliseconds
diff --git a/test/ccured_olden/perimeter/perimeter.h b/test/ccured_olden/perimeter/perimeter.h
new file mode 100644
index 000000000..e5cc086b1
--- /dev/null
+++ b/test/ccured_olden/perimeter/perimeter.h
@@ -0,0 +1,54 @@
+#define NULL 0
+
+#ifndef PLAIN
+#include <cm/cmmd.h>
+
+#ifdef FUTURES
+#include "future-cell.h"
+#endif
+#include "mem-ref.h"
+#endif
+
+typedef enum {black, white, grey} Color;
+typedef enum {northwest, northeast, southwest, southeast} ChildType;
+typedef enum {north, east, south, west} Direction;
+
+typedef struct quad_struct {
+  Color color;
+  ChildType childtype;
+  struct quad_struct *nw ; // {50};
+  struct quad_struct *ne ; //{50};
+  struct quad_struct *sw ; // {50};
+  struct quad_struct *se ; //{50};
+  struct quad_struct *parent; // {50};
+} *QuadTree;
+
+QuadTree MakeTree(int size, int center_x, int center_y, int lo_proc,
+                  int hi_proc, QuadTree parent, ChildType ct, int level);
+
+
+#include <stdlib.h> //malloc
+#include <stdio.h> // printf
+
+extern void exit(int);
+
+extern int __NumNodes;
+
+#ifdef PLAIN
+#include <time.h>
+#define local
+#define mymalloc malloc
+#define CMMD_node_timer_clear(x)  (void)0
+#define TIMESTART(clk) {clk=(double)clock();}
+#define TIMESTOP(clk) {clk=1000000.0 * ((double)clock()-(clk))/CLOCKS_PER_SEC;}
+extern double wallclock;
+#define timer_start(x) TIMESTART(wallclock)
+#define timer_stop(x) TIMESTOP(wallclock)
+#define timer_elapsed(x) (wallclock / 1000.0)
+#define chatting printf
+#define NOTEST() (void)0
+#define RETEST() (void)0
+#define mymalloc malloc
+#endif
+
+
diff --git a/test/ccured_olden/perimeter/testit b/test/ccured_olden/perimeter/testit
new file mode 100755
index 000000000..35723c5fb
--- /dev/null
+++ b/test/ccured_olden/perimeter/testit
@@ -0,0 +1,25 @@
+#!/bin/sh
+# test a perimeter binary
+
+if [ "$1" = "" ]; then
+  echo "usage: $0 ./perimeter.exe"
+  exit
+fi
+
+# all of perimeter's output is to stdout
+echo "running: $1 >output"
+if ! $1 >output; then
+  echo "$1 failed directly"
+  exit 2
+fi
+
+if ! grep -v "Time elapsed" <output | diff out.orig - >out.diff 2>&1  ; then
+  # For some reason diff returns error code but an empty diff !
+  if test -s out.diff; then 
+     echo "$1 got the wrong answer. See out.diff."
+     exit 4
+  fi
+fi
+echo "$1 seems to work"
+rm -f out.diff
+ 
\ No newline at end of file
diff --git a/test/ccured_olden/power/.cvsignore b/test/ccured_olden/power/.cvsignore
new file mode 100644
index 000000000..c4eadcc3b
--- /dev/null
+++ b/test/ccured_olden/power/.cvsignore
@@ -0,0 +1,21 @@
+*.i
+*_all*.c
+*cil.c
+*box.c
+code
+data.in
+data.out
+*.origi
+*_ppp.c
+power.cil
+power.*box
+*infer.c
+changes.out
+allcfiles
+ope.m
+*cured.c
+*.optim.c
+*_comb.c
+*.exe_comb.browser
+changes
+output
diff --git a/test/ccured_olden/power/.gdbinit b/test/ccured_olden/power/.gdbinit
new file mode 100644
index 000000000..81003d62f
--- /dev/null
+++ b/test/ccured_olden/power/.gdbinit
@@ -0,0 +1,5 @@
+# .gdbinit
+
+file power.exe.orig
+break main
+run
diff --git a/test/ccured_olden/power/CVS/Entries b/test/ccured_olden/power/CVS/Entries
new file mode 100644
index 000000000..fccdd5e39
--- /dev/null
+++ b/test/ccured_olden/power/CVS/Entries
@@ -0,0 +1,11 @@
+/README/1.1/Mon Jun 11 21:20:00 2001//
+/build.c/1.1/Mon Jun 11 21:20:00 2001//
+/compute.c/1.2/Wed Jun 13 18:16:23 2001//
+/main.c/1.2/Mon Jun 11 22:47:26 2001//
+/.gdbinit/1.1/Mon Nov 12 08:08:28 2001//
+/Makefile/1.5/Mon Nov 12 15:44:12 2001//
+/out.orig/1.1/Mon Nov 12 08:08:28 2001//
+/testit/1.1/Mon Nov 12 08:08:28 2001//
+/.cvsignore/1.10/Fri Oct  4 16:28:44 2002//
+/power.h/1.6/Sat Jan 11 20:33:38 2003//
+D
diff --git a/test/ccured_olden/power/CVS/Repository b/test/ccured_olden/power/CVS/Repository
new file mode 100644
index 000000000..edf93de93
--- /dev/null
+++ b/test/ccured_olden/power/CVS/Repository
@@ -0,0 +1 @@
+cil/test/olden/power
diff --git a/test/ccured_olden/power/CVS/Root b/test/ccured_olden/power/CVS/Root
new file mode 100644
index 000000000..35f411e97
--- /dev/null
+++ b/test/ccured_olden/power/CVS/Root
@@ -0,0 +1 @@
+/home/cvs-repository
diff --git a/test/ccured_olden/power/Makefile b/test/ccured_olden/power/Makefile
new file mode 100644
index 000000000..e982f5b58
--- /dev/null
+++ b/test/ccured_olden/power/Makefile
@@ -0,0 +1,41 @@
+
+CC		= gcc -arch ppc
+CCOMP=../../../../ccomp
+CCOMPFLAGS=-dump-c
+
+CFLAGS		= $(EXTRA_CFLAGS)
+#CFLAGS		= -O2
+LDFLAGS         = $(EXTRA_LDFLAGS)
+
+CFLAGS += -DPLAIN
+
+ifdef _MSVC
+  # ...
+else
+  MATH = -lm
+  CFLAGS += -g -ffloat-store
+  LDFLAGS += -g -ffloat-store
+endif
+
+PROGS = compute build main
+
+#defaulttarget: $(OBJS)
+#	$(CC) $(LDFLAGS) $(OBJS) $(EXTRA_LIBS) -o power.exe $(MATH)
+
+all_s: $(PROGS:%=%.s)
+
+all: $(PROGS:%=%.compcert)
+
+all_gcc: $(PROGS:%=%.gcc)
+
+%.compcert: %.s
+	$(CC) $(LDFALGS)  -o $*.compcert $*.s 
+
+%.s: %.c ../../../../ccomp
+	$(CCOMP) $(CCOMPFLAGS) $*.c
+
+%.gcc: %.c
+	$(CC) $(CFLAGS) $(LDFALGS) $(OPTFLAGS) -o $*.gcc $*.c 
+
+clean:
+	rm -f $(TARGET) $(OBJS) *~ *.obj *.o *.exe .make.state .nse_depinfo *.light.c *.s *.compcert
diff --git a/test/ccured_olden/power/README b/test/ccured_olden/power/README
new file mode 100644
index 000000000..478692e80
--- /dev/null
+++ b/test/ccured_olden/power/README
@@ -0,0 +1,21 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+**********************
+olden_v1.0/benchmarks/power/README
+January 3, 1995
+Martin C. Carlisle
+
+this directory contains the Power Pricing benchmark:
+
+S. Lumetta, L. Murphy, X. Li, D. Culler, and I. Khalil.  "Decentralized
+optimal power pricing:  The development of a parallel program."
+Supercomputing '93, 243-249
+
+as implemented for Olden by Martin C. Carlisle
+**********************
+
+Makefile - use "make power" to create executable
+
+args.c - process command line args
+main.c,power.h - main routines
+build.c - build tree
+compute.c - compute prices
diff --git a/test/ccured_olden/power/build.c b/test/ccured_olden/power/build.c
new file mode 100644
index 000000000..881b8e60d
--- /dev/null
+++ b/test/ccured_olden/power/build.c
@@ -0,0 +1,154 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+/* build.c
+ *
+ * By:  Martin C. Carlisle
+ * 6/15/94
+ * builds the tree for the Power Pricing problem
+ *
+ * based on code by:  Steve Lumetta, Sherry Li, and Ismail Khalil
+ * University of California at Berkeley
+ */
+
+#include "power.h"
+
+Root build_tree() 
+{
+  register int i;
+  register Root t;
+#ifdef FUTURES
+  int j;
+  future_cell_int fc[NUM_FEEDERS];
+#else
+  register Lateral l;
+#endif
+  
+  t = (Root) ALLOC(0,sizeof(*t));
+#ifdef FUTURES
+  for (i=0,j=0; i<NUM_FEEDERS; i++,j+=LATERALS_PER_FEEDER) {
+    FUTURE(j,LATERALS_PER_FEEDER,build_lateral,&fc[i]);
+  }
+  for (i=0; i<NUM_FEEDERS; i++) {
+    TOUCH(&fc[i]);
+    t->feeders[i]=(Lateral) fc[i].value;
+  }
+#else
+  for (i=0; i<NUM_FEEDERS; i++) {
+    /* Insert future here, split into two loops */
+    l = build_lateral(i*LATERALS_PER_FEEDER,LATERALS_PER_FEEDER);
+    t->feeders[i]=l;
+  }
+#endif
+  t->theta_R = 0.8;
+  t->theta_I = 0.16;
+  return t;
+}
+
+Lateral build_lateral(int i, int num)
+{
+  register int j,k;
+  register Lateral l;
+  register Branch b;
+#ifdef FUTURES
+  future_cell_int fc;
+#else
+  register Lateral next;
+#endif
+ 
+  if (num == 0) return NULL;
+
+#ifndef PLAIN
+  { int x,m,q,proc;
+  x = (i+num-1)*BRANCHES_PER_LATERAL+BRANCHES_PER_LATERAL-1;
+  m = 1000%__NumNodes;
+  q = 1000/__NumNodes;
+  if (x<m*(q+1)) proc = x/(q+1);
+  else proc = (x-m)/q;
+  l = (Lateral) ALLOC(__NumNodes-1-proc,sizeof(*l));
+  }
+#else
+  l = (Lateral) ALLOC(0,sizeof(*l));
+#endif
+
+#ifdef FUTURES
+  FUTURE(i,num-1,build_lateral,&fc);
+  b = build_branch(i*BRANCHES_PER_LATERAL,(num-1)*BRANCHES_PER_LATERAL,
+    BRANCHES_PER_LATERAL);
+#else
+  next = build_lateral(i,num-1);
+  b = build_branch(i*BRANCHES_PER_LATERAL,(num-1)*BRANCHES_PER_LATERAL,
+    BRANCHES_PER_LATERAL);
+#endif
+
+#ifdef FUTURES
+  TOUCH(&fc); 
+  l->next_lateral = (Lateral) fc.value;
+#else
+  l->next_lateral = next;
+#endif
+  l->branch = b;
+  l->R = 1/300000.0;
+  l->X = 0.000001;
+  l->alpha = 0.0;
+  l->beta = 0.0;
+  return l;
+}
+
+Branch build_branch(int i, int j, int num)
+{
+  register Leaf l;
+  register Branch b;
+#ifdef FUTURES
+  future_cell_int fc;
+#endif
+
+  if (num == 0) return NULL;
+  /* allocate branch */
+#ifndef PLAIN
+  { int x,m,q,proc;
+  x = i+j+num-1;
+  m = 1000%__NumNodes;
+  q = 1000/__NumNodes;
+  if (x<m*(q+1)) proc = x/(q+1);
+  else proc = (x-m)/q;
+  b = (Branch) ALLOC(__NumNodes-1-proc,sizeof(*b));
+  }
+#else
+  b = (Branch) ALLOC(0,sizeof(*b));
+#endif
+  
+  /* fill in children */
+#ifndef FUTURES
+  b->next_branch= build_branch(i,j,num-1);
+#else
+  FUTURE(i,j,num-1,build_branch,&fc);
+#endif
+
+  for (i=0; i<LEAVES_PER_BRANCH; i++) {
+    l = build_leaf();
+    b->leaves[i] = l;
+  }
+  
+ 
+#ifdef FUTURES
+  TOUCH(&fc);
+  b->next_branch = (Branch) fc.value;
+#endif
+  
+  /* fill in values */
+  b->R = 0.0001;
+  b->X = 0.00002;
+  b->alpha = 0.0;
+  b->beta = 0.0;
+  return b;
+}
+
+Leaf build_leaf()
+{
+  register Leaf l;
+
+  l = (Leaf) mymalloc(sizeof(*l));
+  l->D.P = 1.0;
+  l->D.Q = 1.0;
+  return l;
+}
diff --git a/test/ccured_olden/power/compute.c b/test/ccured_olden/power/compute.c
new file mode 100644
index 000000000..83d47b599
--- /dev/null
+++ b/test/ccured_olden/power/compute.c
@@ -0,0 +1,379 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+/* compute.c
+ *
+ * By:  Martin C. Carlisle
+ * 6/15/94
+ *
+ * Implements computation phase of the Power Pricing problem
+ * based on code by: Steve Lumetta, Sherry Li, and Ismail Khalil
+ * University of California at Berkeley
+ *
+ */
+
+#include "power.h"
+#include <math.h>
+
+/*----------------------------------------------------------------------*/
+/* Leaf optimization 'global' variables               */
+
+    static double     P=1.0;
+    static double     Q=1.0;
+
+
+/*----------------------------------------------------------------------*/
+/* Leaf optimization procedures                 */
+
+void optimize_node (double pi_R, double pi_I);
+double find_g ();
+double find_h ();
+double find_gradient_f (double pi_R, double pi_I, local double* gradient);
+double find_gradient_g (local double* gradient);
+double find_gradient_h (local double* gradient);
+void find_dd_grad_f (double pi_R, double pi_I, local double* dd_grad);
+double make_orthogonal (local double* v_mod, local double* v_static);
+
+
+void Compute_Tree(Root r) {
+  register int i;
+  Lateral l;
+#ifndef FUTURES
+  Demand a;
+#else
+  future_cell_demand fc[NUM_FEEDERS];
+#endif
+  Demand tmp;
+  double theta_R,theta_I;
+
+  tmp.P = 0.0;
+  tmp.Q = 0.0;
+#ifndef FUTURES
+  for (i=0; i<NUM_FEEDERS; i++) {
+    l = r->feeders[i];
+    theta_R = r->theta_R;
+    theta_I = r->theta_I;
+    a = Compute_Lateral(l,theta_R,theta_I,theta_R,theta_I);
+    tmp.P += a.P;
+    tmp.Q += a.Q;
+
+  }
+#else
+  for (i=0; i<NUM_FEEDERS; i++) {
+    l = r->feeders[i];
+    theta_R = r->theta_R;
+    theta_I = r->theta_I;
+    FUTURE(l,theta_R,theta_I,theta_R,theta_I,Compute_Lateral,&fc[i]);
+  }
+  for (i=NUM_FEEDERS-1; i>=0; i--) {
+    TOUCH(&fc[i]);
+    tmp.P += fc[i].value.P;
+    tmp.Q += fc[i].value.Q;
+  }
+#endif
+  r->D.P = tmp.P;
+  r->D.Q = tmp.Q;
+}
+
+Demand Compute_Lateral(Lateral l, double theta_R, double theta_I, 
+                       double pi_R, double pi_I) {
+#ifndef FUTURES
+  Demand a1;
+#else
+  future_cell_demand fc;
+#endif
+  Demand a2;
+  double new_pi_R, new_pi_I;
+  double a,b,c,root;
+  Lateral next;
+  Branch br;
+  
+  new_pi_R = pi_R + l->alpha*(theta_R+(theta_I*l->X)/l->R);
+  new_pi_I = pi_I + l->beta*(theta_I+(theta_R*l->R)/l->X);
+
+  next = l->next_lateral;
+  if (next != NULL) 
+#ifndef FUTURES
+    a1 = Compute_Lateral(next,theta_R,theta_I,new_pi_R,new_pi_I);
+#else
+    FUTURE(next,theta_R,theta_I,new_pi_R,new_pi_I,Compute_Lateral,&fc);
+#endif
+
+  br = l->branch;
+  a2 = Compute_Branch(br,theta_R,theta_I,new_pi_R,new_pi_I);
+
+  if (next != NULL) {
+#ifndef FUTURES
+    l->D.P = a1.P + a2.P;
+    l->D.Q = a1.Q + a2.Q;
+#else
+    TOUCH(&fc);
+    l->D.P = a2.P + fc.value.P;
+    l->D.Q = a2.Q + fc.value.Q;
+#endif
+  } else {
+    l->D.P = a2.P;
+    l->D.Q = a2.Q;
+  }
+
+  /* compute P,Q */
+  a = l->R*l->R + l->X*l->X;  
+  b = 2*l->R*l->X*l->D.Q - 2*l->X*l->X*l->D.P - l->R;
+  c = l->R*l->D.Q - l->X*l->D.P;
+  c = c*c + l->R*l->D.P;
+  root = (-b-sqrt(b*b-4*a*c))/(2*a);
+  l->D.Q = l->D.Q + ((root-l->D.P)*l->X)/l->R;
+  l->D.P = root;
+
+  /* compute alpha, beta */
+  a = 2*l->R*l->D.P;
+  b = 2*l->X*l->D.Q;
+  l->alpha = a/(1-a-b);
+  l->beta = b/(1-a-b);
+  return l->D;
+}
+
+Demand Compute_Branch(Branch br, double theta_R, double theta_I, 
+                       double pi_R, double pi_I) {
+  Demand a2,tmp;
+  double new_pi_R, new_pi_I;
+  double a,b,c,root;
+  Leaf l;
+  Branch next;
+  int i;
+#ifdef FUTURES
+  future_cell_demand fc;
+#else
+  Demand a1;
+#endif
+  
+  new_pi_R = pi_R + br->alpha*(theta_R+(theta_I*br->X)/br->R);
+  new_pi_I = pi_I + br->beta*(theta_I+(theta_R*br->R)/br->X);
+
+  next = br->next_branch;
+  if (next != NULL)  {
+#ifndef FUTURES
+    a1 = Compute_Branch(next,theta_R,theta_I,new_pi_R,new_pi_I);
+#else
+    FUTURE(next,theta_R,theta_I,new_pi_R,new_pi_I,Compute_Branch,&fc);
+#endif
+  }
+
+  /* Initialize tmp */
+  tmp.P = 0.0; tmp.Q = 0.0;
+
+  for (i=0; i<LEAVES_PER_BRANCH; i++) {
+    l = br->leaves[i];
+    a2 = Compute_Leaf(l,new_pi_R,new_pi_I);
+    tmp.P += a2.P;
+    tmp.Q += a2.Q;
+  }
+  if (next != NULL) {
+#ifndef FUTURES
+    br->D.P = a1.P + tmp.P;
+    br->D.Q = a1.Q + tmp.Q;
+#else
+    TOUCH(&fc);
+    br->D.P = fc.value.P + tmp.P;
+    br->D.Q = fc.value.Q + tmp.Q;
+#endif
+  } else {
+    br->D.P = tmp.P;
+    br->D.Q = tmp.Q;
+  }
+
+  /* compute P,Q */
+  a = br->R*br->R + br->X*br->X;  
+  b = 2*br->R*br->X*br->D.Q - 2*br->X*br->X*br->D.P - br->R;
+  c = br->R*br->D.Q - br->X*br->D.P;
+  c = c*c + br->R*br->D.P;
+  root = (-b-sqrt(b*b-4*a*c))/(2*a);
+  br->D.Q = br->D.Q + ((root-br->D.P)*br->X)/br->R;
+  br->D.P = root;
+  /* compute alpha, beta */
+  a = 2*br->R*br->D.P;
+  b = 2*br->X*br->D.Q;
+  br->alpha = a/(1-a-b);
+  br->beta = b/(1-a-b);
+
+  return br->D;
+}
+
+Demand Compute_Leaf(Leaf l, double pi_R, double pi_I) {
+  P = l->D.P;
+  Q = l->D.Q;
+  
+  optimize_node(pi_R,pi_I);
+
+  if (P<0.0) {
+    P = 0.0;
+    Q = 0.0;
+  }
+  l->D.P = P;
+  l->D.Q = Q;
+  return l->D;
+}
+
+/*----------------------------------------------------------------------*/
+
+void optimize_node (double pi_R, double pi_I)
+{
+    double	    g;
+    double	    h;
+
+    double	    grad_f[2];
+    double	    grad_g[2];
+    double	    grad_h[2];
+    double	    dd_grad_f[2];
+    double	    magnitude;
+
+    int		    i;
+    double	    total;
+    double	    max_dist;
+
+    do {
+	/* Move onto h=0 line */
+	h=find_h ();
+	if (fabs (h)>H_EPSILON) {
+	    magnitude=find_gradient_h (grad_h);
+	    total=h/magnitude;
+	    P-=total*grad_h[0];
+	    Q-=total*grad_h[1];
+	}
+
+	/* Check that g is still valid */
+	g=find_g ();
+	if (g>G_EPSILON) {
+	    magnitude=find_gradient_g (grad_g);
+	    find_gradient_h (grad_h);
+	    magnitude*=make_orthogonal (grad_g,grad_h);
+	    total=g/magnitude;
+	    P-=total*grad_g[0];
+	    Q-=total*grad_g[1];
+	}
+
+	/* Maximize benefit */
+	magnitude=find_gradient_f (pi_R,pi_I,grad_f);
+	find_dd_grad_f (pi_R,pi_I,dd_grad_f);
+	total=0.0;
+	for (i=0; i<2; i++)
+	    total+=grad_f[i]*dd_grad_f[i];
+	magnitude/=fabs (total);
+	find_gradient_h (grad_h);
+	magnitude*=make_orthogonal (grad_f,grad_h);
+	find_gradient_g (grad_g);
+	total=0.0;
+	for (i=0; i<2; i++)
+	    total+=grad_f[i]*grad_g[i];
+	if (total>0) {
+	    max_dist=-find_g ()/total;
+	    if (magnitude>max_dist)
+		magnitude=max_dist;
+	}
+	P+=magnitude*grad_f[0];
+	Q+=magnitude*grad_f[1];
+
+	h=find_h ();
+	g=find_g ();
+	find_gradient_f (pi_R,pi_I,grad_f);
+	find_gradient_h (grad_h);
+
+    } while (fabs (h)>H_EPSILON || g>G_EPSILON ||
+	    (fabs (g)>G_EPSILON &&
+		fabs (grad_f[0]*grad_h[1]-grad_f[1]*grad_h[0])>F_EPSILON));
+}
+
+double find_g ()
+{
+    return (P*P+Q*Q-0.8);
+}
+
+double find_h ()
+{
+    return (P-5*Q);
+}
+
+double find_gradient_f (double pi_R, double pi_I, local double* gradient)
+{
+    int		    i;
+    double	    magnitude=0.0;
+
+    gradient[0]=1/(1+P)-pi_R;
+    gradient[1]=1/(1+Q)-pi_I;
+    for (i=0; i<2; i++)
+	magnitude+=gradient[i]*gradient[i];
+    magnitude=sqrt (magnitude);
+    for (i=0; i<2; i++)
+	gradient[i]/=magnitude;
+
+    return magnitude;
+}
+
+double find_gradient_g (local double* gradient)
+{
+    int		    i;
+    double	    magnitude=0.0;
+
+    gradient[0]=2*P;
+    gradient[1]=2*Q;
+    for (i=0; i<2; i++)
+	magnitude+=gradient[i]*gradient[i];
+    magnitude=sqrt (magnitude);
+    for (i=0; i<2; i++)
+	gradient[i]/=magnitude;
+
+    return magnitude;
+}
+
+double find_gradient_h (local double* gradient)
+{
+    int		    i;
+    double	    magnitude=0.0;
+
+    gradient[0]=1.0;
+    gradient[1]=-5.0;
+    for (i=0; i<2; i++)
+	magnitude+=gradient[i]*gradient[i];
+    magnitude=sqrt (magnitude);
+    for (i=0; i<2; i++)
+	gradient[i]/=magnitude;
+
+    return magnitude;
+}
+
+void find_dd_grad_f (double pi_R, double pi_I, local double* dd_grad)
+{
+    double	    P_plus_1_inv=1/(P+1);
+    double	    Q_plus_1_inv=1/(Q+1);
+    double	    P_grad_term=P_plus_1_inv-pi_R;
+    double	    Q_grad_term=Q_plus_1_inv-pi_I;
+    double	    grad_mag;
+    
+    grad_mag=sqrt (P_grad_term*P_grad_term+Q_grad_term*Q_grad_term);
+
+    dd_grad[0]=-P_plus_1_inv*P_plus_1_inv*P_grad_term/grad_mag;
+    dd_grad[1]=-Q_plus_1_inv*Q_plus_1_inv*Q_grad_term/grad_mag;
+}
+
+double make_orthogonal (local double* v_mod, local double* v_static)
+{
+    int		    i;
+    double	    total=0.0;
+    double	    length=0.0;
+
+    for (i=0; i<2; i++)
+	total+=v_mod[i]*v_static[i];
+    for (i=0; i<2; i++) {
+	v_mod[i]-=total*v_static[i];
+	length+=v_mod[i]*v_mod[i];
+    }
+    length=sqrt (length);
+    for (i=0; i<2; i++)
+	v_mod[i]/=length;
+
+    if (1-total*total<0)    /* Roundoff error--vectors are parallel */
+	return 0;
+
+    return sqrt (1-total*total);
+}
+
+/*----------------------------------------------------------------------*/
diff --git a/test/ccured_olden/power/main.c b/test/ccured_olden/power/main.c
new file mode 100644
index 000000000..0fb87c0f8
--- /dev/null
+++ b/test/ccured_olden/power/main.c
@@ -0,0 +1,116 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+/* main.c
+ *
+ * By:  Martin C. Carlisle
+ * 6/16/94
+ *
+ * main routine for the Power Pricing problem
+ * adapted from code by:  Steve Lumetta, Sherry Li, and Ismail Khalil
+ * University of California at Berkeley
+ *
+ * Cleaned up the CM stuff. George Necula
+ */
+
+#include "power.h"
+
+/* Domain of thetaR->P map is 0.65 to 1.00 [index*0.01+0.65] */
+double map_P[36] =
+{8752.218091048, 8446.106670416, 8107.990680283,
+ 7776.191574285, 7455.920518777, 7146.602181352,
+ 6847.709026813, 6558.734204024, 6279.213382291,
+ 6008.702199986, 5746.786181029, 5493.078256495,
+ 5247.206333097, 5008.828069358, 4777.615815166,
+ 4553.258735900, 4335.470002316, 4123.971545694,
+ 3918.501939675, 3718.817618538, 3524.683625800,
+ 3335.876573044, 3152.188635673, 2973.421417103,
+ 2799.382330486, 2629.892542617, 2464.782829705,
+ 2303.889031418, 2147.054385395, 1994.132771399,
+ 1844.985347313, 1699.475053321, 1557.474019598,
+ 1418.860479043, 1283.520126656, 1151.338004216};
+
+#define      MIN_THETA_R       0.65
+#define      PER_INDEX_R       0.01
+#define      MAX_THETA_R       0.995
+
+/* Domain of thetaI->Q map is 0.130 to 0.200 [index*0.002+0.130] */
+double map_Q[36] =
+{1768.846590190, 1706.229490046, 1637.253873079,
+ 1569.637451623, 1504.419525242, 1441.477913810,
+ 1380.700660446, 1321.980440476, 1265.218982201,
+ 1210.322424636, 1157.203306183, 1105.780028163,
+ 1055.974296746, 1007.714103979, 960.930643875,
+ 915.558722782, 871.538200178, 828.810882006,
+ 787.322098340, 747.020941334, 707.858376214,
+ 669.787829741, 632.765987756, 596.751545633,
+ 561.704466609, 527.587580585, 494.365739051,
+ 462.004890691, 430.472546686, 399.738429196,
+ 369.773787595, 340.550287137, 312.041496095,
+ 284.222260660, 257.068973074, 230.557938283};
+
+#define      MIN_THETA_I       0.13
+#define      PER_INDEX_I       0.002
+#define      MAX_THETA_I       0.199
+
+#ifdef PLAIN
+double wallclock;
+#endif
+
+main(int argc,char *argv[])
+{
+  Root r;
+  int i,finished=0;
+  double d_theta_R,d_theta_I;
+  
+  chatting("Past initialization\n");
+
+  timer_start(0);
+
+  /* initial pass */
+  r = build_tree();
+  chatting("Built tree\n");
+  Compute_Tree(r);
+  r->last.P = r->D.P;
+  r->last.Q = r->D.Q;
+  r->last_theta_R = r->theta_R;
+  r->last_theta_I = r->theta_I;
+  r->theta_R = 0.7;
+  r->theta_I = 0.14;
+  
+  while (!finished) {
+    Compute_Tree(r);
+    chatting("TR=%13.9f, TI=%13.9f, P0=%13.9f, Q0=%13.9f\n",
+           r->theta_R,r->theta_I,r->D.P,r->D.Q);
+    if (fabs(r->D.P/10000.0 - r->theta_R) < ROOT_EPSILON &&
+        fabs(r->D.Q/10000.0 - r->theta_I) < ROOT_EPSILON) {
+      finished = 1;
+    } else {
+      i = (int)((r->theta_R - MIN_THETA_R) / PER_INDEX_R);
+      if (i<0) i=0;
+      if (i>35) i=35;
+      d_theta_R = -(r->theta_R - r->D.P/10000.0) /
+        (1 - (map_P[i+1] - map_P[i]) / (PER_INDEX_R * 10000.0));
+
+      i = (int)((r->theta_I - MIN_THETA_I) / PER_INDEX_I);
+      if (i<0) i=0;
+      if (i>35) i=35;
+      d_theta_I = -(r->theta_I - r->D.Q/10000.0) /
+        (1 - (map_Q[i+1] - map_Q[i]) / (PER_INDEX_I * 10000.0));
+ 
+      chatting("D TR-%13.9f, TI=%13.9f\n", d_theta_R,d_theta_I);
+      r->last.P = r->D.P;
+      r->last.Q = r->D.Q;
+      r->last_theta_R = r->theta_R;
+      r->last_theta_I = r->theta_I;
+      r->theta_R = r->theta_R + d_theta_R;
+      r->theta_I = r->theta_I + d_theta_I;
+    }
+  } /* while */
+  timer_stop(0);
+  chatting("Elapsed time %f\n", timer_elapsed(0));
+
+#ifdef FUTURES
+  __ShutDown(0);
+#endif
+  return 0;
+}
diff --git a/test/ccured_olden/power/out.orig b/test/ccured_olden/power/out.orig
new file mode 100644
index 000000000..ce4ccae88
--- /dev/null
+++ b/test/ccured_olden/power/out.orig
@@ -0,0 +1,37 @@
+Past initialization
+Built tree
+TR=  0.70000, TI=  0.14000, P0=7368.11283, Q0=1486.61206
+D TR-  0.00899, TI=  0.00214
+TR=  0.70899, TI=  0.14214, P0=6825.69077, Q0=1376.20403
+D TR- -0.00662, TI= -0.00114
+TR=  0.70236, TI=  0.14099, P0=7102.87981, Q0=1432.59759
+D TR-  0.00198, TI=  0.00056
+TR=  0.70435, TI=  0.14155, P0=7000.94922, Q0=1411.85085
+D TR- -0.00106, TI= -0.00009
+TR=  0.70328, TI=  0.14146, P0=7047.52523, Q0=1421.32891
+D TR-  0.00036, TI=  0.00016
+TR=  0.70365, TI=  0.14162, P0=7029.01641, Q0=1417.56197
+D TR- -0.00018, TI=  0.00003
+TR=  0.70346, TI=  0.14166, P0=7037.01709, Q0=1419.19017
+D TR-  0.00005, TI=  0.00006
+TR=  0.70352, TI=  0.14172, P0=7033.77002, Q0=1418.52933
+D TR- -0.00003, TI=  0.00003
+TR=  0.70348, TI=  0.14175, P0=7035.10974, Q0=1418.80198
+D TR-  0.00000, TI=  0.00003
+TR=  0.70349, TI=  0.14178, P0=7034.59229, Q0=1418.69667
+D TR- -0.00000, TI=  0.00002
+TR=  0.70348, TI=  0.14180, P0=7034.76550, Q0=1418.73192
+D TR- -0.00000, TI=  0.00001
+TR=  0.70348, TI=  0.14182, P0=7034.73206, Q0=1418.72511
+D TR- -0.00000, TI=  0.00001
+TR=  0.70348, TI=  0.14183, P0=7034.72701, Q0=1418.72409
+D TR- -0.00000, TI=  0.00000
+TR=  0.70347, TI=  0.14184, P0=7034.72601, Q0=1418.72388
+D TR- -0.00000, TI=  0.00000
+TR=  0.70347, TI=  0.14185, P0=7034.72675, Q0=1418.72403
+D TR- -0.00000, TI=  0.00000
+TR=  0.70347, TI=  0.14185, P0=7034.72767, Q0=1418.72422
+D TR- -0.00000, TI=  0.00000
+TR=  0.70347, TI=  0.14186, P0=7034.72812, Q0=1418.72431
+D TR- -0.00000, TI=  0.00000
+TR=  0.70347, TI=  0.14186, P0=7034.72817, Q0=1418.72432
diff --git a/test/ccured_olden/power/output b/test/ccured_olden/power/output
new file mode 100644
index 000000000..5d8d9f148
--- /dev/null
+++ b/test/ccured_olden/power/output
@@ -0,0 +1,38 @@
+Past initialization
+Built tree
+TR=  0.700000000, TI=  0.140000000, P0=7368.112832298, Q0=1486.612062522
+D TR-  0.008993314, TI=  0.002144467
+TR=  0.708993314, TI=  0.142144467, P0=6825.690778967, Q0=1376.204035288
+D TR- -0.006624389, TI= -0.001149403
+TR=  0.702368925, TI=  0.140995064, P0=7102.879810214, Q0=1432.597592989
+D TR-  0.001985258, TI=  0.000560726
+TR=  0.704354182, TI=  0.141555790, P0=7000.949225527, Q0=1411.850856419
+D TR- -0.001067770, TI= -0.000091784
+TR=  0.703286413, TI=  0.141464005, P0=7047.525235387, Q0=1421.328911557
+D TR-  0.000367545, TI=  0.000165612
+TR=  0.703653957, TI=  0.141629618, P0=7029.016413235, Q0=1417.561973965
+D TR- -0.000188601, TI=  0.000031340
+TR=  0.703465356, TI=  0.141660958, P0=7037.017091019, Q0=1419.190170854
+D TR-  0.000059252, TI=  0.000063894
+TR=  0.703524609, TI=  0.141724852, P0=7033.770028540, Q0=1418.529337079
+D TR- -0.000037004, TI=  0.000031712
+TR=  0.703487605, TI=  0.141756564, P0=7035.109740779, Q0=1418.801987979
+D TR-  0.000005859, TI=  0.000030611
+TR=  0.703493463, TI=  0.141787176, P0=7034.592291756, Q0=1418.696672935
+D TR- -0.000008582, TI=  0.000020424
+TR=  0.703484881, TI=  0.141807600, P0=7034.765506561, Q0=1418.731929644
+D TR- -0.000002088, TI=  0.000016240
+TR=  0.703482793, TI=  0.141823841, P0=7034.732061514, Q0=1418.725114927
+D TR- -0.000002403, TI=  0.000012051
+TR=  0.703480389, TI=  0.141835891, P0=7034.727015389, Q0=1418.724090079
+D TR- -0.000001927, TI=  0.000009042
+TR=  0.703478462, TI=  0.141844933, P0=7034.726010052, Q0=1418.723886296
+D TR- -0.000001469, TI=  0.000006798
+TR=  0.703476993, TI=  0.141851731, P0=7034.726755730, Q0=1418.724038175
+D TR- -0.000001082, TI=  0.000005119
+TR=  0.703475910, TI=  0.141856849, P0=7034.727670658, Q0=1418.724224195
+D TR- -0.000000788, TI=  0.000003856
+TR=  0.703475122, TI=  0.141860705, P0=7034.728128768, Q0=1418.724317198
+D TR- -0.000000579, TI=  0.000002903
+TR=  0.703474543, TI=  0.141863609, P0=7034.728179600, Q0=1418.724327425
+Elapsed time 5130.000000
diff --git a/test/ccured_olden/power/power.h b/test/ccured_olden/power/power.h
new file mode 100644
index 000000000..b8fbd2dd1
--- /dev/null
+++ b/test/ccured_olden/power/power.h
@@ -0,0 +1,114 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+/*
+ * power.h
+ *
+ * By:  Martin C. Carlisle
+ * 6/15/94
+ *
+ * Header file for the Power Pricing problem
+ * adapted from code by Steve Lumetta, Sherry Li, and Ismail Khalil
+ * University of California at Berkeley
+ *
+ */
+
+typedef struct demand {
+  double P;
+  double Q;
+} Demand;
+
+#ifndef PLAIN
+#include "future-cell.h"
+#include "mem-ref.h"
+typedef struct fc_demand {
+    future_cell_impl impl;
+    Demand value; /* cell's value */
+  } future_cell_demand;
+#endif
+
+#ifdef PLAIN
+#include <time.h>
+#define local
+#define mymalloc malloc
+#define CMMD_node_timer_clear(x)  (void)0
+#define TIMESTART(clk) {clk=(double)clock();}
+#define TIMESTOP(clk) {clk=1000000.0 * ((double)clock()-(clk))/CLOCKS_PER_SEC;}
+extern double wallclock;
+#define timer_start(x) TIMESTART(wallclock)
+#define timer_stop(x) TIMESTOP(wallclock)
+#define timer_elapsed(x) (wallclock / 1000.0)
+#endif
+
+#include "math.h"
+#include <stdlib.h> // malloc
+#include <stdio.h> // printf
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+#define NUM_FEEDERS 10
+#define LATERALS_PER_FEEDER 20
+#define BRANCHES_PER_LATERAL 5
+#define LEAVES_PER_BRANCH 10
+
+#define F_EPSILON 0.000001
+#define G_EPSILON 0.000001
+#define H_EPSILON 0.000001
+#define ROOT_EPSILON 0.00001
+
+typedef struct root {
+  Demand D;
+  double theta_R; 
+  double theta_I; 
+  Demand last;
+  double last_theta_R; 
+  double last_theta_I;
+  struct lateral *feeders[NUM_FEEDERS];
+} *Root;
+
+typedef struct lateral {
+  Demand D;
+  double alpha;
+  double beta;
+  double R;
+  double X;
+  struct lateral *next_lateral;
+  struct branch *branch;
+} *Lateral;
+
+typedef struct branch {
+  Demand D;
+  double alpha;
+  double beta;
+  double R;
+  double X;
+  struct branch *next_branch;
+  struct leaf *leaves[LEAVES_PER_BRANCH];
+} *Branch;
+
+typedef struct leaf {
+  Demand D;
+  double pi_R;
+  double pi_I;
+} *Leaf;
+
+#ifdef PLAIN
+#define ALLOC(pn,sz) malloc(sz)
+#define chatting printf
+#define __NumNodes 1
+#define __MyNodeId 0
+#endif
+
+/* Prototypes */
+Root build_tree();
+Lateral build_lateral(int i, int num);
+Branch build_branch(int i, int j, int num);
+Leaf build_leaf();
+
+void Compute_Tree(Root r);
+Demand Compute_Lateral(Lateral l, double theta_R, double theta_I,
+                       double pi_R, double pi_I);
+Demand Compute_Branch(Branch b, double theta_R, double theta_I,
+                       double pi_R, double pi_I);
+Demand Compute_Leaf(Leaf l, double pi_R, double pi_I);
diff --git a/test/ccured_olden/power/testit b/test/ccured_olden/power/testit
new file mode 100755
index 000000000..b5132dd79
--- /dev/null
+++ b/test/ccured_olden/power/testit
@@ -0,0 +1,26 @@
+#!/bin/sh
+# test a power binary
+
+if [ "$1" = "" ]; then
+  echo "usage: $0 ./power.exe"
+  exit
+fi
+
+# all of power's output is to stdout
+echo "running: $1 >output"
+if ! $1 >output; then
+  echo "$1 failed directly"
+  exit 2
+fi
+
+# must strip elapsed time
+# must truncate precision to only 5 decimal places, because gcc's optimizer
+# (even with -ffloat-store) seems to change the answer under boxing
+if ! grep -v "Elapsed time" <output | \
+     sed 's/\(\.[0-9]\{5\}\)[0-9]*/\1/g' | diff out.orig - >/dev/null; then
+  echo "$1 got the wrong answer"
+  exit 4
+else
+  echo "$1 seems to work"
+fi
+ 
\ No newline at end of file
diff --git a/test/ccured_olden/rapportCompcert_all.txt b/test/ccured_olden/rapportCompcert_all.txt
new file mode 100644
index 000000000..18f070577
--- /dev/null
+++ b/test/ccured_olden/rapportCompcert_all.txt
@@ -0,0 +1,90 @@
+********** Répertoire bh ************************
+*************************************************
+
+../../../../ccomp -dump-c  io.c
+/usr/include/stdio.h:250: Unsupported C feature: integer type specifier
+-> int      fclose(FILE *);    ?????
+make: *** [io.compcert] Error 2
+
+../../../../ccomp -dump-c util.c
+In file included from /usr/include/machine/param.h:30,
+                 from /usr/include/sys/param.h:104,
+                 from util.c:17:
+/usr/include/ppc/param.h:111:2: error: #error code not ported to little endian targets yet
+Error during preprocessing.
+make: *** [util.compcert] Error 2
+
+../../../../ccomp -dump-c getparam.c
+/usr/include/stdio.h:171: Warning: array type of unspecified size
+/usr/include/stdio.h:171: Unsupported C feature: integer type specifier
+-> extern FILE __sF[];
+make: *** [getparam.compcert] Error 2
+
+********** Répertoire bisort ********************
+*************************************************
+../../../../ccomp -dump-c bitonic.c
+bitonic.c:42: Warning: working around a call to a variadic or non-prototyped function
+bitonic.c:91: Warning: working around a call to a variadic or non-prototyped function
+bitonic.c:231: Warning: working around a call to a variadic or non-prototyped function
+bitonic.c:233: Warning: working around a call to a variadic or non-prototyped function
+bitonic.c:242: Warning: working around a call to a variadic or non-prototyped function
+bitonic.c:244: Warning: working around a call to a variadic or non-prototyped function
+bitonic.c:245: Warning: working around a call to a variadic or non-prototyped function
+bitonic.c:246: Warning: working around a call to a variadic or non-prototyped function
+bitonic.c:248: Warning: working around a call to a variadic or non-prototyped function
+bitonic.c:251: Warning: working around a call to a variadic or non-prototyped function
+bitonic.c:253: Warning: working around a call to a variadic or non-prototyped function
+bitonic.c:255: Warning: working around a call to a variadic or non-prototyped function
+bitonic.c:257: Warning: working around a call to a variadic or non-prototyped function
+bitonic.c:260: Warning: working around a call to a variadic or non-prototyped function
+bitonic.c:262: Warning: working around a call to a variadic or non-prototyped function
+bitonic.c:264: Warning: working around a call to a variadic or non-prototyped function
+bitonic.c:265: Warning: working around a call to a variadic or non-prototyped function
+Error in translation Csyntax -> PPC
+
+********** Répertoire bisort ********************
+*************************************************
+../../../../ccomp -dump-c bitonic.c
+
+même problème que pour bitonic.c du répertoire bisort.
+
+********** Répertoire health ********************
+*************************************************
+../../../../ccomp -dump-c poisson.c
+
+../../../../ccomp -dump-c list.c
+list.c:16: Unsupported C feature: ill-formed recursive structure or union
+--> void addList(struct List *list, struct Patient *patient) {
+make: *** [list.s] Error 2
+
+********** Répertoire em3d **********************
+*************************************************
+../../../../ccomp -dump-c make_graph.c
+make_graph.c:28: Warning: working around a call to a variadic or non-prototyped function
+make_graph.c:43: Warning: working around a call to a variadic or non-prototyped function
+make_graph.c:101: Warning: working around a call to a variadic or non-prototyped function
+make_graph.c:136: Unsupported C feature: return value of struct or union type
+-> graph_t initialize_graph()
+{
+  node_t **h_table;
+  node_t **e_table;
+  graph_t retval;
+................
+make: *** [make_graph.s] Error 2
+
+********** Répertoire treeadd *********************
+*************************************************
+
+node.c:38: Error: Cannot resolve variable stderr.
+->	fprintf(stderr, "Iteration %d...", i);
+
+error in doExp (Errormsg.Error)
+
+error in doExp (Errormsg.Error)
+node.c:27: Warning: working around a call to a variadic or non-prototyped function
+node.c:30: Warning: working around a call to a variadic or non-prototyped function
+node.c:32: Warning: working around a call to a variadic or non-prototyped function
+node.c:33: Warning: working around a call to a variadic or non-prototyped function
+node.c:34: Warning: working around a call to a variadic or non-prototyped function
+node.c:38: Unsupported C feature: inline assembly
+-> 	fprintf(stderr, "Iteration %d...", i);
diff --git a/test/ccured_olden/treeadd/.cvsignore b/test/ccured_olden/treeadd/.cvsignore
new file mode 100644
index 000000000..ea04e03d3
--- /dev/null
+++ b/test/ccured_olden/treeadd/.cvsignore
@@ -0,0 +1,27 @@
+*.o
+*.obj
+*.exe
+*.pdb
+*.ilk
+*.cpp
+*.i
+*.s
+*.asm
+*cil.c
+*.rtl
+*box.c
+*infer.c
+*_ppp.c
+*.origi
+*.stackdump
+*_all.c
+treeadd
+allcfiles
+ope.m
+*_comb.c
+*.exe_comb.browser
+*cured.c
+*.optim.c
+changes
+output
+out.diff
diff --git a/test/ccured_olden/treeadd/CVS/Entries b/test/ccured_olden/treeadd/CVS/Entries
new file mode 100644
index 000000000..c689f04f5
--- /dev/null
+++ b/test/ccured_olden/treeadd/CVS/Entries
@@ -0,0 +1,27 @@
+/HOWTO/1.1/Fri Jun 29 11:24:14 2001//
+/HOWTO.bak/1.1/Fri Jun 29 11:24:14 2001//
+/Makefile.plain/1.1/Fri Jun 29 11:24:14 2001//
+/Makefile.ss/1.1/Fri Jun 29 11:24:14 2001//
+/args.c/1.1/Fri Jun 29 11:24:14 2001//
+/node.c/1.1/Fri Jun 29 11:24:14 2001//
+/out_20_1/1.1/Fri Jun 29 11:24:14 2001//
+/out_20_1.mac_cnt/1.1/Fri Jun 29 11:24:14 2001//
+/out_20_1.mac_cnt_sil/1.1/Fri Jun 29 11:24:14 2001//
+/out_20_1.mac_nocnt_sil/1.1/Fri Jun 29 11:24:14 2001//
+/out_20_1.nm_nocnt/1.1/Fri Jun 29 11:24:14 2001//
+/out_20_1.nwm_nocnt/1.1/Fri Jun 29 11:24:14 2001//
+/out_22_1/1.1/Fri Jun 29 11:24:14 2001//
+/out_22_1.mac_nocnt_sil/1.1/Fri Jun 29 11:24:14 2001//
+/out_23_1/1.1/Fri Jun 29 11:24:14 2001//
+/out_23_1.mac_nocnt_sil/1.1/Fri Jun 29 11:24:14 2001//
+/out_25_1/1.1/Fri Jun 29 11:24:14 2001//
+/out_25_1.mac_nocnt_sil/1.1/Fri Jun 29 11:24:14 2001//
+/par-alloc.c/1.1/Fri Jun 29 11:24:14 2001//
+/tree.h/1.1/Fri Jun 29 11:24:14 2001//
+/ssplain.c/1.5/Sat Nov  3 05:33:28 2001//
+/Makefile/1.6/Fri Nov  9 01:27:01 2001//
+/out.orig/1.1/Mon Nov 12 08:08:28 2001//
+/testit/1.2/Tue Dec  4 05:07:50 2001//
+/.cvsignore/1.9/Fri Oct  4 16:28:44 2002//
+/ssplain.h/1.6/Mon Jan  6 23:29:45 2003//
+D/old-exe////
diff --git a/test/ccured_olden/treeadd/CVS/Repository b/test/ccured_olden/treeadd/CVS/Repository
new file mode 100644
index 000000000..6d2ed2368
--- /dev/null
+++ b/test/ccured_olden/treeadd/CVS/Repository
@@ -0,0 +1 @@
+cil/test/olden/treeadd
diff --git a/test/ccured_olden/treeadd/CVS/Root b/test/ccured_olden/treeadd/CVS/Root
new file mode 100644
index 000000000..35f411e97
--- /dev/null
+++ b/test/ccured_olden/treeadd/CVS/Root
@@ -0,0 +1 @@
+/home/cvs-repository
diff --git a/test/ccured_olden/treeadd/HOWTO b/test/ccured_olden/treeadd/HOWTO
new file mode 100644
index 000000000..d456a9ee6
--- /dev/null
+++ b/test/ccured_olden/treeadd/HOWTO
@@ -0,0 +1 @@
+21 1
diff --git a/test/ccured_olden/treeadd/HOWTO.bak b/test/ccured_olden/treeadd/HOWTO.bak
new file mode 100644
index 000000000..bfd056e30
--- /dev/null
+++ b/test/ccured_olden/treeadd/HOWTO.bak
@@ -0,0 +1 @@
+20 1
diff --git a/test/ccured_olden/treeadd/Makefile b/test/ccured_olden/treeadd/Makefile
new file mode 100644
index 000000000..f17f11553
--- /dev/null
+++ b/test/ccured_olden/treeadd/Makefile
@@ -0,0 +1,38 @@
+# /* For copyright information, see olden_v1.0/COPYRIGHT */
+
+BINARY		= treeadd.exe
+FILES		= par-alloc node args ssplain
+
+
+OLDENHOME	= /tmp/olden
+
+CC		= gcc
+
+SRC		= .c
+OBJ		= .o
+ASM		= .s
+SRCS		= $(addsuffix $(SRC),$(FILES))
+OBJS		= $(addsuffix $(OBJ),$(FILES))
+ASMS		= $(addsuffix $(ASM),$(FILES))
+INCDIRS		= /usr/include 
+
+EXTRA_CDEFS	= -DI_TIME -DI_SYS_TIME -DULTRIX
+CDEFS		= -DPLAIN -DSS_PLAIN #-I$(OLDENHOME)/common
+OPTFLAGS	= -g -Wall -O3
+
+LIBS		= -lm
+LIBPATH		= 
+
+$(BINARY):	$(OBJS)
+	$(CC) $(LDFALGS) $(OPTFLAGS) -o $@ $(OBJS) $(LIBPATH) $(LIBS)
+
+$(SRC)$(OBJ):
+	$(CC) $(CDEFS) $(EXTRA_CDEFS) $(MY_CDEFS) $(OPTFLAGS) -c $<
+
+clean:
+	rm -f $(BINARY) $(OBJS)  $(ASMS) *~ *.light.c 
+
+links:
+	/bin/rm -f ssplain.[hc]
+	ln -s $(OLDENHOME)/common/ssplain.h
+	ln -s $(OLDENHOME)/common/ssplain.c
diff --git a/test/ccured_olden/treeadd/Makefile.plain b/test/ccured_olden/treeadd/Makefile.plain
new file mode 100644
index 000000000..5083bd761
--- /dev/null
+++ b/test/ccured_olden/treeadd/Makefile.plain
@@ -0,0 +1,8 @@
+# /* For copyright information, see olden_v1.0/COPYRIGHT */
+
+BINARY		= treeadd
+FILES		= par-alloc node args ssplain
+
+include ../Makefile.plain
+
+
diff --git a/test/ccured_olden/treeadd/Makefile.ss b/test/ccured_olden/treeadd/Makefile.ss
new file mode 100644
index 000000000..7d3b7d230
--- /dev/null
+++ b/test/ccured_olden/treeadd/Makefile.ss
@@ -0,0 +1,10 @@
+# /* For copyright information, see olden_v1.0/COPYRIGHT */
+
+BINARY		= treeadd
+FILES		= par-alloc node args ssplain
+
+MY_CDEFS	= -DOLDEN
+
+include ../Makefile.ss
+
+
diff --git a/test/ccured_olden/treeadd/args.c b/test/ccured_olden/treeadd/args.c
new file mode 100644
index 000000000..279f2d129
--- /dev/null
+++ b/test/ccured_olden/treeadd/args.c
@@ -0,0 +1,47 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+#ifdef SS_PLAIN
+#include "ssplain.h"
+#else SS_PLAIN
+#include <cm/cmmd.h>
+#include <fcntl.h>
+
+extern int __NumNodes;
+#endif SS_PLAIN
+
+#include "tree.h"
+
+void filestuff()
+{
+#ifndef SS_PLAIN
+  CMMD_fset_io_mode(stdout, CMMD_independent);
+  fcntl(fileno(stdout), F_SETFL, O_APPEND);
+  if (CMMD_self_address()) exit(0);
+  __InitRegs(0);
+#endif SS_PLAIN
+}
+
+int level; 
+int iters;
+
+int dealwithargs(int argc, char *argv[])
+{
+#ifndef SS_PLAIN
+  if (argc > 3) 
+    __NumNodes = atoi(argv[2]);
+  else 
+    __NumNodes = 4;
+#endif SS_PLAIN
+
+  if (argc > 2)
+    iters = atoi(argv[2]);
+  else
+    iters = 1;
+
+  if (argc > 1)
+    level = atoi(argv[1]);
+  else
+    level = 5;
+
+  return level;
+}
diff --git a/test/ccured_olden/treeadd/node.c b/test/ccured_olden/treeadd/node.c
new file mode 100644
index 000000000..1e6091322
--- /dev/null
+++ b/test/ccured_olden/treeadd/node.c
@@ -0,0 +1,74 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+/* node.c
+ */
+#include <stdio.h>
+#ifdef SS_PLAIN
+#include "ssplain.h"
+#endif SS_PLAIN
+
+#include "tree.h"
+
+
+int dealwithargs(int argc, char *argv[]);
+
+typedef struct {
+    long 	level;
+} startmsg_t;
+
+int TreeAdd (/* tree_t *t */);
+extern tree_t *TreeAlloc (/* int level */);
+
+main (int argc, char *argv[])
+{
+    tree_t	*root;
+    int i, result = 0;
+
+    filestuff();
+    (void)dealwithargs(argc, argv);
+
+    chatting("Treeadd with %d levels\n", level);
+
+    chatting("About to enter TreeAlloc\n"); 
+    root = TreeAlloc (level);
+    chatting("About to enter TreeAdd\n"); 
+    
+    for (i = 0; i < iters; i++) 
+      {
+	fprintf(stderr, "Iteration %d...", i);
+	result = TreeAdd (root);
+	fprintf(stderr, "done\n");
+      }
+
+    chatting("Received result of %d\n",result);
+    exit(0);
+}
+
+/* TreeAdd:
+ */
+int TreeAdd (t)
+     register tree_t	*t;
+{
+  if (t == NULL)  
+    {
+      return 0;
+    }
+  else 
+    {
+      int leftval;
+      int rightval;
+      tree_t *tleft, *tright;
+      int value;
+      
+      tleft = t->left;
+      leftval = TreeAdd(tleft);
+      tright = t->right;
+      rightval = TreeAdd(tright);
+
+      value = t->val;
+      return leftval + rightval + value;
+    }
+} /* end of TreeAdd */
+
+
+
diff --git a/test/ccured_olden/treeadd/old-exe/CVS/Entries b/test/ccured_olden/treeadd/old-exe/CVS/Entries
new file mode 100644
index 000000000..178481050
--- /dev/null
+++ b/test/ccured_olden/treeadd/old-exe/CVS/Entries
@@ -0,0 +1 @@
+D
diff --git a/test/ccured_olden/treeadd/old-exe/CVS/Repository b/test/ccured_olden/treeadd/old-exe/CVS/Repository
new file mode 100644
index 000000000..9518434ea
--- /dev/null
+++ b/test/ccured_olden/treeadd/old-exe/CVS/Repository
@@ -0,0 +1 @@
+cil/test/olden/treeadd/old-exe
diff --git a/test/ccured_olden/treeadd/old-exe/CVS/Root b/test/ccured_olden/treeadd/old-exe/CVS/Root
new file mode 100644
index 000000000..35f411e97
--- /dev/null
+++ b/test/ccured_olden/treeadd/old-exe/CVS/Root
@@ -0,0 +1 @@
+/home/cvs-repository
diff --git a/test/ccured_olden/treeadd/out.diff b/test/ccured_olden/treeadd/out.diff
new file mode 100644
index 000000000..e69de29bb
diff --git a/test/ccured_olden/treeadd/out.orig b/test/ccured_olden/treeadd/out.orig
new file mode 100644
index 000000000..fde5b8087
--- /dev/null
+++ b/test/ccured_olden/treeadd/out.orig
@@ -0,0 +1,5 @@
+Treeadd with 21 levels
+About to enter TreeAlloc
+About to enter TreeAdd
+Iteration 0...done
+Received result of 2097151
diff --git a/test/ccured_olden/treeadd/out_20_1 b/test/ccured_olden/treeadd/out_20_1
new file mode 100644
index 000000000..3ece101b1
--- /dev/null
+++ b/test/ccured_olden/treeadd/out_20_1
@@ -0,0 +1,10 @@
+1.83u 0.32s 0:02.28 94.2%
+
+Treeadd with 20 levels
+About to enter TreeAlloc
+About to enter TreeAdd
+Iteration 0...done
+Received result of 1048575
+
+1.83u 0.32s 0:02.28 94.2%
+
diff --git a/test/ccured_olden/treeadd/out_20_1.mac_cnt b/test/ccured_olden/treeadd/out_20_1.mac_cnt
new file mode 100644
index 000000000..c71bf72bc
--- /dev/null
+++ b/test/ccured_olden/treeadd/out_20_1.mac_cnt
@@ -0,0 +1,28 @@
+58.54u 1.33s 1:00.23 99.4%
+
+[/usr/include/stdio.h:201.1] WARNING: extern with incomplete type not initialized
+[/usr/include/stdio.h:230.1] WARNING: extern with incomplete type not initialized
+[/usr/include/stdlib.h:119.1] WARNING: extern with incomplete type not initialized
+[/usr/include/stdio.h:201.1] WARNING: extern with incomplete type not initialized
+Note: strictPointer mode is OFF
+Note: stack grows decreasingly!
+Treeadd with 20 levels
+About to enter TreeAlloc
+About to enter TreeAdd
+Iteration 0...done
+Received result of 1048575
+Total time: 58.540 u, 1.310 s
+Call init functions: 0.000 u, 0.000 s
+Process externs: 0.000 u, 0.010 s
+Prog_main: 58.530 u, 1.300 s
+processReturns : tot 5242883, empty 5242878, common 5
+Macro counts (function counts):
+verifyPtr : char 0(0), aggr 0(0), etc 6291452(3145725)
+verifyTag : char 0(0), aggr 0(0), etc 19922937(0)
+  copyTag : char 0(0), aggr 0(0), etc 16777218(3145725)
+      setScalarTag : char 0(0), etc 11534344(0)
+setScalarUninitTag : char 0(0), etc 8388607(0)
+processArgTag : scalar 5242883(0) (promo 0), aggr 0(0)
+
+58.54u 1.33s 1:00.23 99.4%
+
diff --git a/test/ccured_olden/treeadd/out_20_1.mac_cnt_sil b/test/ccured_olden/treeadd/out_20_1.mac_cnt_sil
new file mode 100644
index 000000000..6cc96e0dc
--- /dev/null
+++ b/test/ccured_olden/treeadd/out_20_1.mac_cnt_sil
@@ -0,0 +1,22 @@
+58.02u 1.24s 0:59.66 99.3%
+
+Treeadd with 20 levels
+About to enter TreeAlloc
+About to enter TreeAdd
+Iteration 0...done
+Received result of 1048575
+Total time: 58.010 u, 1.230 s
+Call init functions: 0.000 u, 0.000 s
+Process externs: 0.000 u, 0.000 s
+Prog_main: 58.000 u, 1.230 s
+processReturns : tot 5242883, empty 5242878, common 5
+Macro counts (function counts):
+verifyPtr : char 0(0), aggr 0(0), etc 6291452(3145725)
+verifyTag : char 0(0), aggr 0(0), etc 19922937(0)
+  copyTag : char 0(0), aggr 0(0), etc 16777218(3145725)
+      setScalarTag : char 0(0), etc 11534344(0)
+setScalarUninitTag : char 0(0), etc 8388607(0)
+processArgTag : scalar 5242883(0) (promo 0), aggr 0(0)
+
+58.02u 1.24s 0:59.66 99.3%
+
diff --git a/test/ccured_olden/treeadd/out_20_1.mac_nocnt_sil b/test/ccured_olden/treeadd/out_20_1.mac_nocnt_sil
new file mode 100644
index 000000000..66ea61341
--- /dev/null
+++ b/test/ccured_olden/treeadd/out_20_1.mac_nocnt_sil
@@ -0,0 +1,15 @@
+51.89u 1.42s 0:53.59 99.4%
+
+Treeadd with 20 levels
+About to enter TreeAlloc
+About to enter TreeAdd
+Iteration 0...done
+Received result of 1048575
+Total time: 51.890 u, 1.390 s
+Call init functions: 0.000 u, 0.000 s
+Process externs: 0.000 u, 0.000 s
+Prog_main: 51.880 u, 1.390 s
+processReturns : tot 5242883, empty 5242878, common 5
+
+51.89u 1.42s 0:53.59 99.4%
+
diff --git a/test/ccured_olden/treeadd/out_20_1.nm_nocnt b/test/ccured_olden/treeadd/out_20_1.nm_nocnt
new file mode 100644
index 000000000..6de580b0a
--- /dev/null
+++ b/test/ccured_olden/treeadd/out_20_1.nm_nocnt
@@ -0,0 +1,17 @@
+3[/usr/include/stdio.h:201.1]
+3[/usr/include/stdio.h:230.1]
+3[/usr/include/stdlib.h:119.1]
+3[/usr/include/stdio.h:201.1]
+Note: strictPointer mode is OFF
+Note: stack grows decreasingly!
+Treeadd with 20 levels
+About to enter TreeAlloc
+About to enter TreeAdd
+Iteration 0...done
+Received result of 1048575
+Total time: 47.640 u, 1.080 s
+Call init functions: 0.000 u, 0.000 s
+Process externs: 0.000 u, 0.010 s
+Prog_main: 47.640 u, 1.060 s
+processReturns : tot 5242883, empty 5242878, common 5
+47.64u 1.10s 0:52.27 93.2%
diff --git a/test/ccured_olden/treeadd/out_20_1.nwm_nocnt b/test/ccured_olden/treeadd/out_20_1.nwm_nocnt
new file mode 100644
index 000000000..c68935f69
--- /dev/null
+++ b/test/ccured_olden/treeadd/out_20_1.nwm_nocnt
@@ -0,0 +1,6 @@
+Treeadd with 20 levels
+About to enter TreeAlloc
+About to enter TreeAdd
+Iteration 0...done
+Received result of 1048575
+48.41u 1.28s 0:49.87 99.6%
diff --git a/test/ccured_olden/treeadd/out_22_1 b/test/ccured_olden/treeadd/out_22_1
new file mode 100644
index 000000000..8a7794dd7
--- /dev/null
+++ b/test/ccured_olden/treeadd/out_22_1
@@ -0,0 +1,10 @@
+7.00u 3.06s 0:10.29 97.7%
+
+Treeadd with 22 levels
+About to enter TreeAlloc
+About to enter TreeAdd
+Iteration 0...done
+Received result of 4194303
+
+7.00u 3.06s 0:10.29 97.7%
+
diff --git a/test/ccured_olden/treeadd/out_22_1.mac_nocnt_sil b/test/ccured_olden/treeadd/out_22_1.mac_nocnt_sil
new file mode 100644
index 000000000..614d3acb7
--- /dev/null
+++ b/test/ccured_olden/treeadd/out_22_1.mac_nocnt_sil
@@ -0,0 +1,15 @@
+208.87u 14.48s 13:01.91 28.5%
+
+Treeadd with 22 levels
+About to enter TreeAlloc
+About to enter TreeAdd
+Iteration 0...done
+Received result of 4194303
+Total time: 208.870 u, 14.430 s
+Call init functions: 0.000 u, 0.000 s
+Process externs: 0.000 u, 0.000 s
+Prog_main: 208.850 u, 14.430 s
+processReturns : tot 20971523, empty 20971518, common 5
+
+208.87u 14.48s 13:01.91 28.5%
+
diff --git a/test/ccured_olden/treeadd/out_23_1 b/test/ccured_olden/treeadd/out_23_1
new file mode 100644
index 000000000..bba776e0c
--- /dev/null
+++ b/test/ccured_olden/treeadd/out_23_1
@@ -0,0 +1,10 @@
+13.85u 9.47s 0:23.97 97.2%
+
+Treeadd with 23 levels
+About to enter TreeAlloc
+About to enter TreeAdd
+Iteration 0...done
+Received result of 8388607
+
+13.85u 9.47s 0:23.97 97.2%
+
diff --git a/test/ccured_olden/treeadd/out_23_1.mac_nocnt_sil b/test/ccured_olden/treeadd/out_23_1.mac_nocnt_sil
new file mode 100644
index 000000000..378b40cc0
--- /dev/null
+++ b/test/ccured_olden/treeadd/out_23_1.mac_nocnt_sil
@@ -0,0 +1,15 @@
+415.79u 41.59s 25:49.99 29.5%
+
+Treeadd with 23 levels
+About to enter TreeAlloc
+About to enter TreeAdd
+Iteration 0...done
+Received result of 8388607
+Total time: 415.790 u, 41.570 s
+Call init functions: 0.000 u, 0.000 s
+Process externs: 0.000 u, 0.000 s
+Prog_main: 415.780 u, 41.570 s
+processReturns : tot 41943043, empty 41943038, common 5
+
+415.79u 41.59s 25:49.99 29.5%
+
diff --git a/test/ccured_olden/treeadd/out_25_1 b/test/ccured_olden/treeadd/out_25_1
new file mode 100644
index 000000000..03a8d49f9
--- /dev/null
+++ b/test/ccured_olden/treeadd/out_25_1
@@ -0,0 +1,8 @@
+Treeadd with 25 levels
+About to enter TreeAlloc
+About to enter TreeAdd
+Iteration 0...done
+Received result of 33554431
+
+out_25_1: about 5-6 minutes (lost the exact timing)
+
diff --git a/test/ccured_olden/treeadd/out_25_1.mac_nocnt_sil b/test/ccured_olden/treeadd/out_25_1.mac_nocnt_sil
new file mode 100644
index 000000000..a688a081f
--- /dev/null
+++ b/test/ccured_olden/treeadd/out_25_1.mac_nocnt_sil
@@ -0,0 +1,7 @@
+Some output (through starting TreeAlloc), then:
+
+[1]    Segmentation fault            treeadd-mac_nocnt_sil.instr 25 1 >& out_25_1.mac_nocnt_sil
+656.30u 109.95s 12:55.55 98.8%
+
+out_25_1: about 5-6 minutes (lost the output)
+
diff --git a/test/ccured_olden/treeadd/output b/test/ccured_olden/treeadd/output
new file mode 100644
index 000000000..fde5b8087
--- /dev/null
+++ b/test/ccured_olden/treeadd/output
@@ -0,0 +1,5 @@
+Treeadd with 21 levels
+About to enter TreeAlloc
+About to enter TreeAdd
+Iteration 0...done
+Received result of 2097151
diff --git a/test/ccured_olden/treeadd/par-alloc.c b/test/ccured_olden/treeadd/par-alloc.c
new file mode 100644
index 000000000..4749e1959
--- /dev/null
+++ b/test/ccured_olden/treeadd/par-alloc.c
@@ -0,0 +1,33 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+/* tree-alloc.c
+ */
+
+#ifdef SS_PLAIN
+#include "ssplain.h"
+#endif SS_PLAIN
+
+#include "tree.h"
+
+
+tree_t *TreeAlloc (level)
+    int		level;
+{
+
+  if (level == 0)
+    {
+      return NULL;
+    }
+  else 
+    {
+      struct tree *new, *right, *left;
+      
+      new = (struct tree *) mymalloc(sizeof(tree_t));
+      left = TreeAlloc(level-1);
+      right=TreeAlloc(level-1);
+      new->val = 1;
+      new->left = (struct tree *) left;
+      new->right = (struct tree *) right;
+      return new;
+    }
+}
diff --git a/test/ccured_olden/treeadd/ssplain.c b/test/ccured_olden/treeadd/ssplain.c
new file mode 100644
index 000000000..18c8a7211
--- /dev/null
+++ b/test/ccured_olden/treeadd/ssplain.c
@@ -0,0 +1,70 @@
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <limits.h>
+#include <stddef.h>
+#include "ssplain.h"
+
+
+void chatting(char *s, ...)
+{
+  va_list ap;
+  va_start(ap,s);
+  vfprintf(stderr, s, ap);
+  va_end(ap);
+}
+
+
+#ifdef SS_RAND
+double drand48()
+{
+  double d;
+  d = (double) random() / LONG_MAX;
+  return d;
+}
+
+
+long lrand48()
+{
+  long l = random();
+  return l;
+}
+
+void srand48(long seed)
+{
+  srand(seed);
+}
+#endif SS_RAND
+
+
+#ifndef BEFOREBOX
+static unsigned long bytes_allocated = 0;
+static unsigned long allocations = 0;
+
+void*
+ssplain_malloc(int size)
+{
+  allocations++;
+  bytes_allocated+=size;
+  return malloc(size);
+}
+
+void*
+ssplain_calloc(int nelems, int size)
+{
+  void *p;
+  allocations++;
+  bytes_allocated+= nelems * size;
+  p =  calloc(nelems, size);
+  if(! p) { printf("Cannot allocate\n"); exit(3); }
+  return p;
+}
+
+void
+ssplain_alloc_stats()
+{
+  chatting("Allocation stats: %d bytes allocated in %d allocations\n",
+	   bytes_allocated, allocations);
+}
+#endif
diff --git a/test/ccured_olden/treeadd/ssplain.h b/test/ccured_olden/treeadd/ssplain.h
new file mode 100644
index 000000000..865fbf473
--- /dev/null
+++ b/test/ccured_olden/treeadd/ssplain.h
@@ -0,0 +1,128 @@
+#ifndef SS_PLAIN_H
+#define SS_PLAIN_H
+
+void * ssplain_malloc(int size);
+void * ssplain_calloc(int nelems, int size);
+void ssplain_alloc_stats();
+ 
+/* Convert MP shutdown to exit */
+#define __ShutDown(ID)     { ssplain_alloc_stats(); exit(ID); } 
+
+/* All these CM-5 things are nops */
+#define CMMD_node_timer_clear(ID)
+#define CMMD_node_timer_start(ID)
+#define CMMD_node_timer_stop(ID)
+#define CMMD_node_timer_elapsed(ID)   ((double)0)
+
+#define CMMD_self_address()   0
+
+#define ClearAllStats()
+
+/* define away the CM-5 allocator */
+#include <stdlib.h>
+
+#ifndef ALLOC
+#define ALLOC(NUM,ESIZE)  ssplain_calloc (NUM+1,ESIZE)
+#endif ALLOC
+
+#ifndef mymalloc
+#define mymalloc malloc
+#endif mymalloc
+
+/* Get all of these multiprocessing things out of here. */
+/* My id will stay that way */
+#define IDMASK 0xffffffff
+
+/* Nothing is getting tested */
+#ifndef RETEST
+#define RETEST()
+#endif RETEST
+
+#ifndef NOTEST
+#define NOTEST()
+#endif NOTEST
+
+/* Everything is local */
+#ifndef local
+#define local            
+#endif local
+
+#ifndef LOCAL
+#define LOCAL(VAL)      (VAL)
+#endif LOCAL
+
+#ifndef ISLOCPTR
+#define ISLOCPTR(VAL)   (1)
+#endif ISLOCPTR
+
+#ifndef MLOCAL
+#define MLOCAL(VAL)
+#endif MLOCAL
+
+/* An atomic increment is a normal increment */
+#ifndef ATOMICINC
+#define ATOMICINC(PVAL) (*(PVAL) = *(PVAL) + 1)
+#endif ATOMICINC
+
+/* Nothing is migrating anywhere */
+#ifndef MIGRATE
+#define MIGRATE(ID)     
+#endif MIGRATE
+
+#ifndef MIGRPH
+#define MIGRPH()
+#endif MIGRPH
+
+#ifndef UNPHASE
+#define UNPHASE()
+#endif UNPHASE
+
+#ifndef PID
+#define PID(VAL)  (0)
+#endif PID
+
+/* All these functions */
+#pragma ccuredvararg("chatting", printf(1))
+void chatting(char *s, ...);
+
+/* just define these guys, they are not going to change */
+#define __NumNodes 1
+#define __MyNodeId 0
+#define __NDim     0
+
+typedef struct ss_future_cell_int {
+  int value;
+} future_cell_int;
+
+/* Where are these things for real? */
+#ifdef SS_RAND
+long lrand48();
+double drand48();
+void srand48(long seed);
+#endif SS_RAND
+
+#define MOD(V,M) ((V) & ((M) - 1))
+#define INC_MOD(V,M) (V) = MOD((V) + 1, (M))
+
+/* Prefetch instructions */
+
+/* Use these for 1 lookahead prefetching */
+
+#ifdef OVERHEAD_ONLY
+#define ASSEMBLE_PREFETCH(ARG)
+#define ASSEMBLE_PREFETCH_HEAD(ARG)
+#else !OVERHEAD_ONLY
+
+#define ASSEMBLE_PREFETCH(ARG) \
+     asm ("lw $0, %0" : /* no outputs */ : "g" (ARG))
+ 
+/* Use these for infinite lookahead prefetching */
+#define ASSEMBLE_PREFETCH_HEAD(ARG) \
+     asm ("lh $0, %0" : /* no outputs */ : "g" (ARG))
+
+#endif OVERHEAD_ONLY
+
+#endif SS_PLAIN_H
+
+
+
diff --git a/test/ccured_olden/treeadd/testit b/test/ccured_olden/treeadd/testit
new file mode 100755
index 000000000..031c54bd8
--- /dev/null
+++ b/test/ccured_olden/treeadd/testit
@@ -0,0 +1,22 @@
+#!/bin/sh
+# test a treeadd binary
+
+if [ "$1" = "" ]; then
+  echo "usage: $0 ./treeadd.exe"
+  exit
+fi
+
+# all of treeadd's output is to stderr
+echo "running: $1 21 1 2>output"
+if ! $1 21 1 2>output; then
+  echo "$1 failed directly"
+  exit 2
+fi
+
+if ! diff out.orig output >out.diff; then
+  echo "$1 got the wrong answer. See out.diff"
+  exit 4
+else
+  echo "$1 seems to work"
+fi
+ 
\ No newline at end of file
diff --git a/test/ccured_olden/treeadd/tree.h b/test/ccured_olden/treeadd/tree.h
new file mode 100644
index 000000000..39b141dcc
--- /dev/null
+++ b/test/ccured_olden/treeadd/tree.h
@@ -0,0 +1,18 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+/* tree.h
+ */
+
+typedef struct tree {
+    int		val;
+    struct tree *left, *right;
+} tree_t;
+
+#ifndef SS_PLAIN
+#define NULL	0
+#endif SS_PLAIN
+
+extern tree_t *TreeAlloc (/*int level*/);
+
+extern int level;
+extern int iters;
diff --git a/test/ccured_olden/tsp/.cvsignore b/test/ccured_olden/tsp/.cvsignore
new file mode 100644
index 000000000..83a0e7b9c
--- /dev/null
+++ b/test/ccured_olden/tsp/.cvsignore
@@ -0,0 +1,28 @@
+*.o
+*.obj
+*.exe
+*.pdb
+*.ilk
+*.cpp
+*.i
+*.s
+*.asm
+*cil.c
+*.rtl
+*box.c
+*infer.c
+*_ppp.c
+*.origi
+*.stackdump
+*_all.c
+changes.out
+tsp.cil
+tsp.*box
+allcfiles
+ope.m
+ope.m
+*cured.c
+*.optim.c
+*_comb.c
+changes
+*.browser
diff --git a/test/ccured_olden/tsp/CVS/Entries b/test/ccured_olden/tsp/CVS/Entries
new file mode 100644
index 000000000..92dedef2b
--- /dev/null
+++ b/test/ccured_olden/tsp/CVS/Entries
@@ -0,0 +1,8 @@
+/Makefile/1.4/Sun Jul  8 14:10:47 2001//
+/README/1.1/Tue Jun 12 04:31:21 2001//
+/tsp.c/1.1/Tue Jun 12 04:31:21 2001//
+/tsp.h/1.1/Tue Jun 12 04:31:21 2001//
+/main.c/1.5/Mon Mar 18 23:18:46 2002//
+/build.c/1.3/Wed May 29 03:29:06 2002//
+/.cvsignore/1.11/Wed Jul 31 19:35:08 2002//
+D
diff --git a/test/ccured_olden/tsp/CVS/Repository b/test/ccured_olden/tsp/CVS/Repository
new file mode 100644
index 000000000..feb9fc462
--- /dev/null
+++ b/test/ccured_olden/tsp/CVS/Repository
@@ -0,0 +1 @@
+cil/test/olden/tsp
diff --git a/test/ccured_olden/tsp/CVS/Root b/test/ccured_olden/tsp/CVS/Root
new file mode 100644
index 000000000..35f411e97
--- /dev/null
+++ b/test/ccured_olden/tsp/CVS/Root
@@ -0,0 +1 @@
+/home/cvs-repository
diff --git a/test/ccured_olden/tsp/Makefile b/test/ccured_olden/tsp/Makefile
new file mode 100644
index 000000000..a27d6db95
--- /dev/null
+++ b/test/ccured_olden/tsp/Makefile
@@ -0,0 +1,44 @@
+CC    = gcc
+
+#CFLAGS      =
+CFLAGS      = -O2
+
+# sm
+PLAIN=1
+all: defaulttarget
+
+ifdef PLAIN
+ifdef _MSVC
+EXTOBJ = .obj
+OBJOUT = /Fo
+EXEOUT = /Fe
+CFLAGS = /DPLAIN
+CONLY  = /c
+CC     = cl
+else
+EXTOBJ = .o
+OBJOUT = -o
+EXEOUT = -o
+CFLAGS += -DPLAIN
+CONLY  = -c
+CC     = gcc
+MATH   = -lm
+endif
+
+MYOBJS = tsp$(EXTOBJ) build$(EXTOBJ) main$(EXTOBJ)
+
+%$(EXTOBJ) : %.c
+	$(CC) $(CONLY) $(CFLAGS) $< $(OBJOUT)$@
+
+
+defaulttarget: $(MYOBJS)
+	$(CC) $(CFLAGS) $(MYOBJS) $(EXTRA_LIBS) $(EXEOUT)tsp.exe $(MATH)
+endif
+
+
+
+clean:
+	rm -f $(TARGET) $(OBJS) *.o *.obj *.exe *~ .make.state .nse_depinfo
+
+
+
diff --git a/test/ccured_olden/tsp/README b/test/ccured_olden/tsp/README
new file mode 100644
index 000000000..29e34d880
--- /dev/null
+++ b/test/ccured_olden/tsp/README
@@ -0,0 +1,22 @@
+/* For copyright information, see olden_v1.01/COPYRIGHT */
+**********************
+olden_v1.01/benchmarks/tsp/README
+June 1996
+Martin C. Carlisle
+
+this directory contains the Traveling Salesman benchmark:
+
+Adapted for Olden from code by J. Muller using algorithm by:
+
+R. Karp, "Probabilistic analysis of partitioning algorithms for the traveling-
+salesman problem in the plane."  Mathematics of Operations Research 
+2(3):209-224, August 1977
+
+**********************
+
+Makefile - use "make tsp" to create executable
+
+args.c - process command line args
+build.c - build cities tree
+tsp.[ch] - compute tsp
+main.c - main routine
diff --git a/test/ccured_olden/tsp/build.c b/test/ccured_olden/tsp/build.c
new file mode 100644
index 000000000..090439bc9
--- /dev/null
+++ b/test/ccured_olden/tsp/build.c
@@ -0,0 +1,124 @@
+/* build.c
+ *
+ * By:  Martin C. Carlisle
+ *      Princeton University
+ *      6/24/94
+ * 
+ * builds a two-dimensional tree for TSP
+ * 
+ * distribution of median is given by modification of exponential to
+ * be [-1,1]
+ */ 
+
+#include <stdio.h>
+
+extern double drand48();
+extern void srand48(long seedval);
+extern double exp(double x);
+extern double log(double x);
+#define  M_E      2.7182818284590452354
+#define  M_E2     7.3890560989306502274
+#define  M_E3     20.08553692318766774179
+#define M_E6 403.42879349273512264299
+#define M_E12 162754.79141900392083592475
+#ifndef NULL
+#define NULL 0
+#endif
+
+#include "tsp.h"
+#include <stdlib.h>
+
+#ifndef PLAIN
+#include "mem-ref.h"
+#ifdef FUTURES
+#include "future-cell.h"
+#endif
+#endif
+
+static double median(double min,double max,int n);
+static double uniform(double min, double max);
+
+double drand48(void) {
+  return (double)rand() / (double)RAND_MAX;
+}
+
+/* Return an estimate of median of n values distributed in [min,max) */
+static double median(double min,double max,int n) {
+  double t;
+  double retval;
+  
+  t = drand48(); /* in [0.0,1.0) */
+  if (t>0.5) {
+    retval=log(1.0-(2.0*(M_E12-1)*(t-0.5)/M_E12))/12.0;   
+    }
+  else {
+    retval=-log(1.0-(2.0*(M_E12-1)*t/M_E12))/12.0;
+    }
+  /* We now have something distributed on (-1.0,1.0) */
+  retval = (retval+1.0) * (max-min)/2.0;
+  retval = retval + min;
+  return retval;
+}
+
+/* Get double uniformly distributed over [min,max) */
+static double uniform(double min, double max) {
+  double retval;
+  
+  retval = drand48(); /* in [0.0,1.0) */
+  retval = retval * (max-min);
+  return retval + min;
+}
+
+/* Builds a 2D tree of n nodes in specified range with dir as primary 
+   axis (0 for x, 1 for y) */
+// post:
+//   if n!=0, make a node, set its left & right to valid or null,
+//   set next/prev to null; if n==0 return null
+Tree build_tree(int n,int dir,int lo,int num_proc,double min_x,
+                double max_x,double min_y,double max_y) {
+  double med;
+  Tree t;
+#ifdef FUTURES
+  future_cell_int fc;
+#endif
+
+  if (n==0) return NULL;
+
+  t = (Tree) malloc(sizeof(*t));
+  if (dir) {
+    dir = !dir;
+    med = median(min_x,max_x,n);
+#ifndef FUTURES
+    t->left=build_tree(n/2,dir,lo+num_proc/2,num_proc/2,min_x,med,min_y,max_y);
+    t->right=build_tree(n/2,dir,lo,num_proc/2,med,max_x,min_y,max_y);
+#else
+    FUTURE(n/2,dir,lo+num_proc/2,num_proc/2,min_x,med,min_y,max_y,
+           build_tree,&fc);
+    t->right=build_tree(n/2,dir,lo,num_proc/2,med,max_x,min_y,max_y);
+#endif
+    t->x = med;
+    t->y = uniform(min_y,max_y);
+    }
+  else {
+    dir = !dir;
+    med = median(min_y,max_y,n);
+#ifndef FUTURES
+    t->left=build_tree(n/2,dir,lo+num_proc/2,num_proc/2,min_x,max_x,min_y,med);
+    t->right=build_tree(n/2,dir,lo,num_proc/2,min_x,max_x,med,max_y);
+#else
+    FUTURE(n/2,dir,lo+num_proc/2,num_proc/2,min_x,max_x,min_y,med,
+           build_tree,&fc);
+    t->right=build_tree(n/2,dir,lo,num_proc/2,min_x,max_x,med,max_y);
+#endif
+    t->y = med;
+    t->x = uniform(min_x,max_x);
+    }
+  t->sz = n;
+  t->next = NULL;
+  t->prev = NULL;
+#ifdef FUTURES
+  TOUCH(&fc);
+  t->left = (Tree) fc.value;
+#endif
+  return t;
+}
diff --git a/test/ccured_olden/tsp/main.c b/test/ccured_olden/tsp/main.c
new file mode 100644
index 000000000..3bd5679a2
--- /dev/null
+++ b/test/ccured_olden/tsp/main.c
@@ -0,0 +1,101 @@
+#include "tsp.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifndef PLAIN
+#include <cm/cmmd.h>
+#include "mem-ref.h"
+#endif
+
+#ifdef VERIFY_AFFINITIES
+#include "affinity.h"
+CHECK2(Tree,left,right,tree)
+#endif
+
+int flag;
+int __NumNodes, __NDim;
+
+int mylog(int num)
+{
+  int j=0,k=1;
+  
+  while(k<num) { k*=2; j++; }
+  return j;
+} 
+
+int dealwithargs(void)
+{
+  int num;
+
+  flag = 0;
+  __NumNodes = 4;
+
+  __NDim = mylog(__NumNodes);
+
+  num = 150000;
+
+  return num;
+}
+
+void print_tree(Tree t)
+{
+  Tree left,right;
+  double x,y;
+
+  if (!t) return;
+  x = t->x; y = t->y;
+  chatting("x=%f,y=%f\n",x,y);
+  left = t->left; right=t->right;
+  print_tree(left);
+  print_tree(right);
+}
+
+void print_list(Tree t)
+{
+  Tree tmp;
+  double x,y;
+
+  if (!t) return;
+  x = t->x; y = t->y;
+  chatting("%f %f\n",x,y);
+  for (tmp=t->next; tmp!=t; tmp=tmp->next) 
+    {
+    x = tmp->x; y = tmp->y;
+    chatting("%f %f\n",x,y);
+    }
+}
+
+double wallclock;
+
+int main()
+{
+  Tree t;
+  int num;
+
+  num = dealwithargs();
+  
+  chatting("Building tree of size %d\n",num);
+  t=build_tree(num,0,0,__NumNodes,0.0,1.0,0.0,1.0);
+#ifdef VERIFY_AFFINITIES
+  Docheck_tree(t);
+#endif
+  if (!flag) chatting("Past build\n");
+  if (flag) chatting("newgraph\n");
+  if (flag) chatting("newcurve pts\n");
+
+
+  timer_start(0);
+  tsp(t,150,__NumNodes);
+  timer_stop(0);
+  if (flag) print_list(t);
+  if (flag) chatting("linetype solid\n");
+  chatting("Time for TSP = %f\n", timer_elapsed(0));
+#ifdef VERIFY_AFFINITIES
+  Print_Accumulated_list();
+#endif
+
+#ifdef FUTURES
+  __ShutDown(0);
+#endif
+  exit(0);
+}
diff --git a/test/ccured_olden/tsp/tsp.c b/test/ccured_olden/tsp/tsp.c
new file mode 100644
index 000000000..5f371c86b
--- /dev/null
+++ b/test/ccured_olden/tsp/tsp.c
@@ -0,0 +1,308 @@
+#include "tsp.h"
+
+#ifndef PLAIN
+#include "mem-ref.h"
+#ifdef FUTURES
+#include "future-cell.h"
+#endif
+#endif
+
+#ifndef PLAIN
+#define NULL 0
+#endif
+
+#ifdef VERIFY_AFFINITIES
+#include "affinity.h"
+CHECK1_ACCUM(Tree,next,list)
+#endif
+
+static Tree conquer(Tree t);
+static Tree merge(Tree a, Tree b, Tree t, int nproc);
+static Tree makelist(Tree t);
+static void reverse(Tree t);
+static double distance(Tree a, Tree b);
+extern double sqrt(double a);
+
+/* Find Euclidean distance from a to b */
+static double distance(Tree a, Tree b) {
+  double ax,ay,bx,by;
+
+  ax = a->x; ay = a->y;
+  bx = b->x; by = b->y;
+  return (sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by)));
+}
+
+/* sling tree nodes into a list -- requires root to be tail of list */
+/* only fills in next field, not prev */
+static Tree makelist(Tree t) {
+  Tree left, right;
+  Tree tleft,tright;
+  Tree retval = t;
+
+  if (!t) return NULL;
+
+  /*chatting("makelist\n");*/
+  left = makelist(t->left); /* head of left list */
+  right = makelist(t->right); /* head of right list */
+
+  if (right) { retval = right; tright = t->right; tright->next = t; }
+  if (left) { retval=left; tleft=t->left; tleft->next = (right) ? right : t; }
+  t->next = NULL;
+  /*chatting("end makelist\n");*/
+
+  return retval;
+}
+
+/* reverse orientation of list */
+static void reverse(Tree t) {
+  Tree prev,back,next,tmp;
+
+  if (!t) return;
+  /*chatting("REVERSE\n");*/
+  /*print_list(t);*/
+  prev = t->prev;
+  prev->next = NULL;
+  t->prev = NULL;
+  back = t;
+  tmp = t;
+  for (t=t->next; t; back=t,t=next) {
+    next = t->next;
+    t->next = back;
+    back->prev = t;
+    }
+  tmp->next = prev;
+  prev->prev = tmp;
+  /*printf("REVERSE result\n");*/
+  /*print_list(tmp);*/
+  /*printf("End REVERSE\n");*/
+}
+
+/* Use closest-point heuristic from Cormen Leiserson and Rivest */
+static Tree conquer(Tree t) {
+  Tree cycle,tmp,min,prev,next,donext;
+  double mindist,test;
+  double mintonext, mintoprev, ttonext, ttoprev;
+
+  if (!t) return NULL;
+  t=makelist(t);
+ 
+  /*printf("CONQUER\n");*/
+  /* Create initial cycle */
+  cycle = t;
+  t = t->next;
+  cycle->next = cycle;
+  cycle->prev = cycle;
+
+  for (; t; t=donext) { /* loop over remaining points */
+    donext = t->next; /* value won't be around later */
+    min = cycle;
+    mindist = distance(t,cycle);
+    for (tmp=cycle->next; tmp!=cycle; tmp=tmp->next) {
+      test = distance(tmp,t);
+      if (test < mindist) {
+        mindist = test;
+        min = tmp;
+        } /* if */
+      } /* for tmp... */
+    next = min->next;
+    prev = min->prev;
+    mintonext = distance(min,next);
+    mintoprev = distance(min,prev);
+    ttonext = distance(t,next);
+    ttoprev = distance(t,prev);
+    if ((ttoprev - mintoprev) < (ttonext - mintonext)) {
+      /* insert between min and prev */
+      prev->next = t;
+      t->next = min;
+      t->prev = prev;
+      min->prev = t;
+      }
+    else {
+      next->prev = t;
+      t->next = next;
+      min->next = t;
+      t->prev = min;
+      }
+    } /* for t... */
+  /*print_list(cycle);*/
+  /*printf("End CONQUER\n");*/
+  return cycle;
+}
+
+/* Merge two cycles as per Karp */
+static Tree merge(Tree a, Tree b, Tree t, int nproc) {
+  Tree min,next,prev,tmp;
+  double mindist,test,mintonext,mintoprev,ttonext,ttoprev;
+  Tree n1,p1,n2,p2;
+  double tton1,ttop1,tton2,ttop2;
+  double n1ton2,n1top2,p1ton2,p1top2;
+  int choice;
+  int i;
+
+  /* Compute location for first cycle */
+  min = a;
+  mindist = distance(t,a);
+  tmp = a;
+#ifdef VERIFY_AFFINITIES
+  Accumulate_list(a,a);
+  Accumulate_list(b,b);
+#endif
+  for (a=a->next; a!=tmp; a=a->next) {
+    test = distance(a,t);
+    if (test < mindist) {
+      mindist = test;
+      min = a;
+      } /* if */
+    } /* for a... */
+  next = min->next;
+  prev = min->prev;
+  mintonext = distance(min,next);
+  mintoprev = distance(min,prev);
+  ttonext = distance(t,next);
+  ttoprev = distance(t,prev);
+  if ((ttoprev - mintoprev) < (ttonext - mintonext)) {
+    /* would insert between min and prev */
+    p1 = prev;
+    n1 = min;
+    tton1 = mindist;
+    ttop1 = ttoprev;
+    }
+  else { /* would insert between min and next */
+    p1 = min;
+    n1 = next;
+    ttop1 = mindist;
+    tton1 = ttonext;
+    }
+ 
+  /* Compute location for second cycle */
+  min = b;
+  mindist = distance(t,b);
+  tmp = b;
+  for (b=b->next; b!=tmp; b=b->next) {
+    test = distance(b,t);
+    if (test < mindist) {
+      mindist = test;
+      min = b;
+      } /* if */
+    } /* for tmp... */
+  next = min->next;
+  prev = min->prev;
+  mintonext = distance(min,next);
+  mintoprev = distance(min,prev);
+  ttonext = distance(t,next);
+  ttoprev = distance(t,prev);
+  if ((ttoprev - mintoprev) < (ttonext - mintonext)) {
+    /* would insert between min and prev */
+    p2 = prev;
+    n2 = min;
+    tton2 = mindist;
+    ttop2 = ttoprev;
+    }
+  else { /* would insert between min and next */
+    p2 = min;
+    n2 = next;
+    ttop2 = mindist;
+    tton2 = ttonext;
+    }
+
+  /* Now we have 4 choices to complete:
+     1:t,p1 t,p2 n1,n2
+     2:t,p1 t,n2 n1,p2
+     3:t,n1 t,p2 p1,n2
+     4:t,n1 t,n2 p1,p2 */
+  n1ton2 = distance(n1,n2);
+  n1top2 = distance(n1,p2);
+  p1ton2 = distance(p1,n2);
+  p1top2 = distance(p1,p2);
+
+  mindist = ttop1+ttop2+n1ton2; 
+  choice = 1;
+
+  test = ttop1+tton2+n1top2;
+  if (test<mindist) {
+    choice = 2;
+    mindist = test;
+    }
+
+  test = tton1+ttop2+p1ton2;
+  if (test<mindist) {
+    choice = 3;
+    mindist = test;
+    }
+  
+  test = tton1+tton2+p1top2;
+  if (test<mindist) choice = 4;
+
+/*chatting("p1,n1,t,p2,n2 0x%x,0x%x,0x%x,0x%x,0x%x\n",p1,n1,t,p2,n2);*/
+  switch (choice) {
+    case 1:
+      /* 1:p1,t t,p2 n2,n1 -- reverse 2!*/
+      /*reverse(b);*/
+      reverse(n2);
+      p1->next = t;
+      t->prev = p1;
+      t->next = p2;
+      p2->prev = t;
+      n2->next = n1;
+      n1->prev = n2;
+      break;
+    case 2:
+      /* 2:p1,t t,n2 p2,n1 -- OK*/
+      p1->next = t;
+      t->prev = p1;
+      t->next = n2;
+      n2->prev = t;
+      p2->next = n1;
+      n1->prev = p2;
+      break;
+    case 3:
+      /* 3:p2,t t,n1 p1,n2 -- OK*/
+      p2->next = t;
+      t->prev = p2;
+      t->next = n1;
+      n1->prev = t;
+      p1->next = n2;
+      n2->prev = p1;
+      break;
+    case 4:
+      /* 4:n1,t t,n2 p2,p1 -- reverse 1!*/
+      /*reverse(a);*/
+      reverse(n1);
+      n1->next = t;
+      t->prev = n1;
+      t->next = n2;
+      n2->prev = t;
+      p2->next = p1;
+      p1->prev = p2;
+      break;
+    }
+  return t;
+}
+
+/* Compute TSP for the tree t -- use conquer for problems <= sz */
+Tree tsp(Tree t,int sz,int nproc) {
+  Tree left,right;
+  Tree leftval;
+#ifdef FUTURES
+  future_cell_pointer fc;
+#endif
+  Tree rightval;
+  int nproc_2 = nproc/2;
+
+  if (t->sz <= sz) return conquer(t);
+
+  left = t->left; right = t->right;
+#ifndef FUTURES
+  leftval = tsp(left,sz,nproc_2);
+#else
+  FUTURE(left,sz,nproc_2,tsp,&fc);
+#endif
+  rightval = tsp(right,sz,nproc_2);
+#ifdef FUTURES
+  leftval = (Tree) TOUCH(&fc);
+  leftval = (Tree) fc.value;
+  return merge(leftval,rightval,t,nproc);
+#else
+  return merge(leftval,rightval,t,nproc);
+#endif
+}
diff --git a/test/ccured_olden/tsp/tsp.h b/test/ccured_olden/tsp/tsp.h
new file mode 100644
index 000000000..8d9288915
--- /dev/null
+++ b/test/ccured_olden/tsp/tsp.h
@@ -0,0 +1,32 @@
+typedef struct tree {
+  int sz;
+  double x,y;
+  struct tree *left, *right;
+  /*struct tree *next, *prev;*/
+  struct tree *next /*{95}*/, *prev /*{95}*/;
+} *Tree;
+
+/* Builds a 2D tree of n nodes in specified range with dir as primary 
+   axis (0 for x, 1 for y) */
+Tree build_tree(int n,int dir,int lo,int num_proc,double min_x,
+                double max_x,double min_y,double max_y);
+/* Compute TSP for the tree t -- use conquer for problems <= sz */
+Tree tsp(Tree t, int sz, int nproc);
+
+#ifdef PLAIN
+#include <time.h>
+#define local
+#define mymalloc malloc
+#define CMMD_node_timer_clear(x)  (void)0
+#define TIMESTART(clk) {clk=(double)clock();}
+#define TIMESTOP(clk) {clk=1000000.0 * ((double)clock()-(clk))/CLOCKS_PER_SEC;}
+extern double wallclock;
+#define timer_start(x) TIMESTART(wallclock)
+#define timer_stop(x) TIMESTOP(wallclock)
+#define timer_elapsed(x) (wallclock / 1000.0)
+#define chatting printf
+#define NOTEST() (void)0
+#define RETEST() (void)0
+#define LOCAL(x) x
+#define mymalloc malloc
+#endif
diff --git a/test/ccured_olden/voronoi/.cvsignore b/test/ccured_olden/voronoi/.cvsignore
new file mode 100644
index 000000000..3923b56f7
--- /dev/null
+++ b/test/ccured_olden/voronoi/.cvsignore
@@ -0,0 +1,14 @@
+*.i
+*_all.c
+*cil.c
+*box.c
+code
+data.in
+data.out
+allcfiles
+ope.m
+ope.m
+*_comb.c
+*cured.c
+*.optim.c
+changes
diff --git a/test/ccured_olden/voronoi/CVS/Entries b/test/ccured_olden/voronoi/CVS/Entries
new file mode 100644
index 000000000..0d7c09d85
--- /dev/null
+++ b/test/ccured_olden/voronoi/CVS/Entries
@@ -0,0 +1,8 @@
+/Makefile/1.3/Sat Jul 21 16:09:41 2001//
+/README/1.1/Tue Jun 12 04:17:59 2001//
+/defines.h/1.2/Mon Jul  9 21:12:42 2001//
+/newvor.c/1.2/Mon Jul  9 21:12:42 2001//
+/output.c/1.2/Mon Jul  9 21:12:42 2001//
+/vector.c/1.2/Mon Jul  9 21:12:42 2001//
+/.cvsignore/1.5/Thu Nov  8 23:35:28 2001//
+D
diff --git a/test/ccured_olden/voronoi/CVS/Repository b/test/ccured_olden/voronoi/CVS/Repository
new file mode 100644
index 000000000..8d79f068e
--- /dev/null
+++ b/test/ccured_olden/voronoi/CVS/Repository
@@ -0,0 +1 @@
+cil/test/olden/voronoi
diff --git a/test/ccured_olden/voronoi/CVS/Root b/test/ccured_olden/voronoi/CVS/Root
new file mode 100644
index 000000000..35f411e97
--- /dev/null
+++ b/test/ccured_olden/voronoi/CVS/Root
@@ -0,0 +1 @@
+/home/cvs-repository
diff --git a/test/ccured_olden/voronoi/Makefile b/test/ccured_olden/voronoi/Makefile
new file mode 100644
index 000000000..2822178d2
--- /dev/null
+++ b/test/ccured_olden/voronoi/Makefile
@@ -0,0 +1,72 @@
+# /* For copyright information, see olden_v1.0/COPYRIGHT */
+
+BINARY		= voronoi.exe
+PROGS		= newvor vector output args ssplain trusted_voronoi
+
+ifdef _MSVC
+CC    = cl
+DEF   = /D
+CONLY = /c
+OBJOUT = /Fo
+EXEOUT = /Fe
+OBJ   = .obj
+
+OPTFLAGS	= /Ox
+LIBS = 
+
+else
+
+CC		= gcc -arch ppc
+CCOMP=../../../../ccomp
+CCOMPFLAGS=-dump-c
+
+DEF   = -D
+CONLY = -c
+OBJOUT= -o
+EXEOUT= -o
+
+OBJ		= .o
+
+OPTFLAGS	= -g -Wall -O3
+
+LIBS		= 
+LIBPATH		= 
+endif
+
+SRC		= .c
+ASM		= .s
+EXTRA_CDEFS	= $(DEF)I_TIME $(DEF)I_SYS_TIME $(DEF)ULTRIX
+# sm: ??
+ifdef _MSVC
+CDEFS		= $(DEF)PLAIN $(DEF)SS_PLAIN $(DEF)OLDEN
+else
+CDEFS		= $(DEF)PLAIN $(DEF)OLDEN
+endif
+SRCS		= $(addsuffix $(SRC),$(FILES))
+OBJS		= $(addsuffix $(OBJ),$(FILES))
+ASMS		= $(addsuffix $(ASM),$(FILES))
+
+all_s: $(PROGS:%=%.s)
+
+all: $(PROGS:%=%.compcert)
+
+all_gcc: $(PROGS:%=%.gcc)
+
+%.compcert: %.s
+	$(CC) $(CFLAGS) $(LDFALGS) $(OPTFLAGS) -o $*.compcert $*.s $(LIBS)
+
+%.s: %.c ../../../../ccomp
+	$(CCOMP) $(CCOMPFLAGS)  $(CDEFS) $(EXTRA_CDEFS)  $(MY_CDEFS) $*.c
+
+%.gcc: %.c
+	$(CC) $(CFLAGS) $(LDFALGS) $(OPTFLAGS) -o $*.gcc $*.c $(LIBS)
+
+#$(BINARY):	$(OBJS)
+#	$(CC) $(LDFALGS) $(OPTFLAGS) $(EXEOUT)$@ $(OBJS) $(LIBPATH) $(LIBS)
+
+#%$(OBJ) : %$(SRC)
+#	$(CC) $(CDEFS) $(EXTRA_CDEFS) $(MY_CDEFS) $(OPTFLAGS) $(CONLY) $<
+
+clean:
+	rm -f $(BINARY) $(OBJS) *~ 
+
diff --git a/test/ccured_olden/voronoi/README b/test/ccured_olden/voronoi/README
new file mode 100644
index 000000000..701a01347
--- /dev/null
+++ b/test/ccured_olden/voronoi/README
@@ -0,0 +1,22 @@
+/* For copyright information, see olden_v1.01/COPYRIGHT */
+**********************
+olden_v1.01/benchmarks/voronoi/README
+June 1996
+Martin C. Carlisle
+
+this directory contains the Voronoi Diagram benchmark:
+
+L. Guibas and J. Stolfi.  "General Subdivisions and Voronoi Diagrams"
+ACM Trans. on Graphics 4(2):74-123, 1985.
+
+Adapted for Olden by Martin C. Carlisle
+
+**********************
+
+Makefile - use "make voronoi" to create executable
+
+args.c - process command line args
+vector.c - vector math stuff
+newvor.c - main routine
+defines.h - definitions
+output.c - used for outputting results.
diff --git a/test/ccured_olden/voronoi/defines.h b/test/ccured_olden/voronoi/defines.h
new file mode 100644
index 000000000..651336db0
--- /dev/null
+++ b/test/ccured_olden/voronoi/defines.h
@@ -0,0 +1,186 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+extern double sqrt();
+extern double exp();
+extern double log();
+extern double drand();
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifndef SS_PLAIN
+#include "mem-ref.h"
+#include "future-cell.h"
+
+#define NULL 0
+#endif SS_PLAIN
+
+#define NEW 1
+#define EPSILON (1.0e-6)
+
+#define BOOLEAN int
+#ifndef TRUE
+#define TRUE 1
+#endif TRUE
+#define FALSE 0
+
+struct edge_rec
+{
+  struct VERTEX *v;
+  struct edge_rec *next;
+  int wasseen;
+  int more_data; /* 16 byte align this thing */
+};
+
+struct get_point
+{
+  struct VERTEX *v;
+  double curmax;
+  int seed;
+};
+
+#ifdef NEW
+typedef struct edge_rec *EDGE_PTR;
+typedef struct VERTEX *VERTEX_PTR;
+typedef EDGE_PTR QUAD_EDGE;
+#else
+typedef int EDGE_PTR;
+typedef int VERTEX_PTR;
+#endif
+  
+struct VEC2 {
+  double x,y;
+  double norm;
+};
+
+struct VERTEX {
+  struct VEC2 v;
+  struct VERTEX *left, *right;
+};
+
+typedef struct
+{
+  QUAD_EDGE left, right;
+} EDGE_PAIR;
+
+#ifdef NEW
+#define onext(a) (a)->next
+#else
+#define onext(a) next[a]
+#endif
+#define oprev(a) rot(onext(rot(a)))
+#define lnext(a) rot(onext(rotinv(a)))
+#define lprev(a) sym(onext(a))
+#define rnext(a) rotinv(onext(rot(a)))
+#define rprev(a) onext(sym(a))
+#define dnext(a) sym(onext(sym(a)))
+#define dprev(a) rotinv(onext(rotinv(a)))
+
+#ifdef NEW
+#define X(r) r->v.x
+#define Y(r) r->v.y
+#define NORM(r) r->v.norm
+#else
+#define X(a) va[a].v.x
+#define Y(a) va[a].v.y
+#define NORM(a) va[a].norm
+#endif  
+#ifdef NEW  
+#define orig(a) (a)->v
+#define dest(a) orig(sym(a))
+#define seen(a) (a)->wasseen
+#else
+#define orig(a) org[a]
+#define dest(a) orig(sym(a))
+#define seen(a) see[a]
+#endif
+  
+#ifndef NEW
+#define origv(a) va[orig(a)].v
+#define destv(a) va[dest(a)].v
+#else
+#define origv(a) orig(a)->v
+#define destv(a) dest(a)->v
+#endif
+
+#define ALLOC_SIZE (sizeof(struct edge_rec))
+#ifndef PLAIN
+#define SIZE (sizeof(struct edge_rec) << PN_BITS)  
+#define ANDF ((4*sizeof(struct edge_rec) - 1) << PN_BITS)
+#else
+#define SIZE sizeof(struct edge_rec)
+#define ANDF (4*sizeof(struct edge_rec) - 1)
+#endif
+
+#define sym(a) ((QUAD_EDGE) (((unsigned int) (a)) ^ 2*SIZE))
+#define rot(a) ((QUAD_EDGE) ( (((unsigned int) (a) + 1*SIZE) & ANDF) | ((unsigned int) (a) & ~ANDF) ))
+#define rotinv(a) ((QUAD_EDGE) ( (((unsigned int) (a) + 3*SIZE) & ANDF) | ((unsigned int) (a) & ~ANDF) ))
+#define base(a) ((QUAD_EDGE) ((unsigned int a) & ~ANDF))
+
+struct EDGE_STACK {
+    int ptr;
+    QUAD_EDGE *elts ;
+    int stack_size;
+};
+
+extern QUAD_EDGE alloc_edge();
+extern QUAD_EDGE makeedge();
+extern void splice();
+extern void swapedge();
+extern void deleteedge();
+extern QUAD_EDGE build_delaunay_triangulation();
+extern EDGE_PAIR build_delaunay();
+extern EDGE_PAIR do_merge();
+extern QUAD_EDGE connect_left();
+extern QUAD_EDGE connect_right();
+
+extern void zero_seen();
+extern QUAD_EDGE pop_edge();
+
+#ifdef SS_PLAIN
+#define drand(seed) (((double) (seed=olden_random(seed))) / (double) 2147483647)
+#else SS_PLAIN
+#define drand(seed) (((double) (seed=random(seed))) / (double) 2147483647)
+#endif SS_PLAIN
+
+#ifdef DEFINE_GLOBALS
+#define EXTERN 
+#else
+#define EXTERN extern
+#endif
+
+EXTERN VERTEX_PTR *vp ;
+EXTERN struct VERTEX *va ;
+EXTERN EDGE_PTR *next ;
+EXTERN VERTEX_PTR *org ;
+EXTERN int num_vertices, num_edgeparts, stack_size ;
+EXTERN int to_lincoln , to_off, to_3d_out, to_color , voronoi , delaunay , interactive , ahost ;
+EXTERN char *see;
+
+#ifdef ODEFINE_GLOBALS
+#define OEXTERN
+#else
+#define OEXTERN extern
+#endif  
+
+#define my_alloc(str_name, str_type, str_cnt) \
+		if (NULL == (str_name = (str_type *) \
+		mymalloc((unsigned) (str_cnt ) * (unsigned) (sizeof(str_type)))))\
+		exit(printf(" cannot malloc (str_name) \n"))
+
+#define VERTEX_ALLOC 1000
+
+#define RED 123
+#define GREEN (RED + 1)
+
+#define CY_SOLID 1
+#define CY_DOTTED 2
+
+
+int ccw(VERTEX_PTR a , VERTEX_PTR b , VERTEX_PTR c );
+int olden_random(int seed );
+void filestuff(void);
+int dealwithargs(int argc , char *  argv[] );
+void output_voronoi_diagram(QUAD_EDGE edge , int nv , struct EDGE_STACK * 
+                            my_stack );
+
diff --git a/test/ccured_olden/voronoi/newvor.c b/test/ccured_olden/voronoi/newvor.c
new file mode 100644
index 000000000..9b5a44085
--- /dev/null
+++ b/test/ccured_olden/voronoi/newvor.c
@@ -0,0 +1,711 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+#ifdef SS_PLAIN
+#include "ssplain.h"
+#else SS_PLAIN
+#include <cm/cmmd.h>
+#include <fcntl.h>
+#endif SS_PLAIN
+
+#define DEFINE_GLOBALS
+#include "defines.h"
+/* WARNING!  Don't use LOCAL on QUAD_EDGE as cache addresses are not aligned */
+
+int flag;
+
+QUAD_EDGE connect_left(a, b)
+QUAD_EDGE a,b;
+{
+  VERTEX_PTR t1,t2;
+  QUAD_EDGE ans,lnexta;
+
+  t1=dest(a);
+  lnexta=lnext(a); 
+  t2=orig(b);
+  ans = makeedge(t1,t2/*dest(a), orig(b)*/);
+  splice(ans, lnexta);
+  splice(sym(ans), b);
+  return(ans);
+}
+
+QUAD_EDGE connect_right(a, b)
+     QUAD_EDGE a,b;
+{
+  VERTEX_PTR t1,t2;
+  QUAD_EDGE ans, oprevb;
+
+  t1=dest(a);
+  t2=orig(b);
+
+  oprevb=oprev(b); 
+  ans = makeedge(t1,t2);
+  splice(ans, sym(a));
+  splice(sym(ans), oprevb);
+  return(ans);
+}
+
+/****************************************************************/
+/*	Top-level Delaunay Triangulation Procedure              */
+/****************************************************************/
+
+QUAD_EDGE build_delaunay_triangulation(tree,extra)
+    /* builds delaunay triangulation.
+       va is an array of vertices, from 0 to size.  Each vertex consists of
+       a vector and a data pointer.   edge is a pointer to an
+       edge on the convex hull of the constructed delaunay triangulation. */
+
+     VERTEX_PTR tree,extra;
+{
+    EDGE_PAIR retval;
+
+    retval=build_delaunay(tree,extra);
+    return retval.left;
+}
+
+VERTEX_PTR get_low(tree)
+     VERTEX_PTR tree;
+{
+  VERTEX_PTR temp;
+  while((temp=tree->left)) tree=temp;
+  return tree;
+}
+
+/****************************************************************/
+/*	Recursive Delaunay Triangulation Procedure              */
+/*	Contains modifications for axis-switching division.     */
+/****************************************************************/
+
+EDGE_PAIR build_delaunay(tree,extra)
+     VERTEX_PTR tree,extra;
+{
+    QUAD_EDGE a,b,c,ldo,rdi,ldi,rdo;
+    EDGE_PAIR retval;
+    VERTEX_PTR maxx, minx;
+    VERTEX_PTR s1, s2, s3;
+
+    EDGE_PAIR delleft, delright;
+
+    if (tree && tree->right && tree->left) 
+      {
+        /* more than three elements; do recursion */
+	minx = get_low(tree); maxx = extra;
+
+	delright = build_delaunay(tree->right,extra);
+	delleft = build_delaunay(tree->left, tree);
+	ldo = delleft.left; ldi=delleft.right;
+	rdi=delright.left; rdo=delright.right;
+
+	retval=do_merge(ldo, ldi, rdi, rdo);
+	ldo = retval.left;
+	rdo = retval.right;
+	while (orig(ldo) != minx) { ldo = rprev(ldo); }
+	while (orig(rdo) != maxx) { rdo = lprev(rdo); }
+	retval.left = ldo;
+	retval.right = rdo;
+    }
+    else if (!tree)
+      {
+	printf("ERROR: Only 1 point!\n"); 
+	exit(-1);
+      }
+    else if (!tree->left) 
+      {	
+	/* two points */
+	a = makeedge(tree, extra);
+	retval.left =  a;
+	retval.right = sym(a);
+      }
+    else 
+      { /*  tree->left, !tree->right  */	/* three points */
+	/* 3 cases: triangles of 2 orientations, and 3 points on a line. */
+	s1 = tree->left;
+	s2 = tree;
+	s3 = extra;
+	a = makeedge(s1, s2);
+	b = makeedge(s2, s3);
+	splice(sym(a), b);
+	c = connect_left(b, a);
+	if (ccw(s1, s3, s2)) 
+	  {
+	    retval.left = sym(c);
+	    retval.right = c;
+	  }
+	else 
+	  {
+	    retval.left =  a;
+	    retval.right = sym(b);
+	    if (!ccw(s1, s2, s3)) deleteedge(c);    /* colinear */
+	  }
+      }
+    return retval;
+}
+
+/****************************************************************/
+/*	Quad-edge storage allocation                            */
+/****************************************************************/
+QUAD_EDGE next_edge, avail_edge;
+#ifndef NEW
+#define NYL -1
+#else
+#define NYL NULL
+#endif
+
+void
+free_edge(e)
+     QUAD_EDGE e;
+{
+  e = (QUAD_EDGE) ((int) e ^ ((int) e & ANDF));
+  onext(e) = avail_edge;
+  avail_edge = e;
+}
+
+void
+deleteedge(e)
+     /*disconnects e from the rest of the structure and destroys it. */
+     QUAD_EDGE e;
+{
+  QUAD_EDGE f;
+  f=oprev(e);
+  splice(e, f);
+  f=oprev(sym(e));
+  splice(sym(e),f);
+  free_edge(e);
+}
+
+void
+delete_all_edges() 
+{ 
+  next_edge= 0; 
+  avail_edge = NYL;
+}
+
+QUAD_EDGE alloc_edge()
+{
+  QUAD_EDGE ans;
+
+  if (avail_edge == NYL) 
+    {
+      ans = (QUAD_EDGE) malloc(4*ALLOC_SIZE);
+#ifdef OUT
+      if ((int) ans & ANDF) 
+#else !OUT
+      if (!(int) ans & 0xF)
+#endif OUT
+	{
+	  printf("Aborting in alloc_edge, ans = 0x%x\n",(unsigned)ans);
+	  exit(-1);
+	}
+    }
+  else ans = (QUAD_EDGE) avail_edge, avail_edge = onext(avail_edge);
+  return ans;
+}
+
+/****************************************************************/
+/*	Geometric primitives                                    */
+/****************************************************************/
+
+BOOLEAN incircle(a,b,c,d)
+     /* incircle, as in the Guibas-Stolfi paper. */
+     VERTEX_PTR a,b,c,d;
+{
+  double adx, ady, bdx, bdy, cdx, cdy, dx, dy, anorm, bnorm, cnorm, dnorm;
+  double dret ;
+
+  dx = X(d); dy = Y(d); dnorm = NORM(d); 
+  adx = X(a) - dx; ady = Y(a) - dy; anorm = NORM(a); 
+  bdx = X(b) - dx; bdy = Y(b) - dy; bnorm = NORM(b);
+  cdx = X(c) - dx; cdy = Y(c) - dy; cnorm = NORM(c); 
+  dret =  (anorm - dnorm) * (bdx * cdy - bdy * cdx);
+  dret += (bnorm - dnorm) * (cdx * ady - cdy * adx);
+  dret += (cnorm - dnorm) * (adx * bdy - ady * bdx);
+  return( (0.0 < dret) ? TRUE : FALSE );
+}
+
+BOOLEAN ccw(a,b,c)
+     /* TRUE iff A, B, C form a counterclockwise oriented triangle */
+     VERTEX_PTR a,b,c;
+{
+  double dret ;
+  double xa,ya,xb,yb,xc,yc;
+	
+  xa=X(a); ya=Y(a);
+  xb=X(b); yb=Y(b);
+  xc=X(c); yc=Y(c);
+
+  dret = (xa-xc)*(yb-yc) - (xb-xc)*(ya-yc);
+  return( (dret  > 0.0)? TRUE : FALSE);
+}
+
+/****************************************************************/
+/*	Quad-edge manipulation primitives                       */
+/****************************************************************/
+QUAD_EDGE makeedge(origin, destination)
+     VERTEX_PTR origin, destination;
+{
+  QUAD_EDGE temp, ans;
+  temp =  alloc_edge();
+  ans = temp;
+  
+  onext(temp) = ans;
+  orig(temp) = origin;
+  temp = (QUAD_EDGE) ((int) temp+SIZE);
+  onext(temp) = (QUAD_EDGE) ((int) ans + 3*SIZE);
+  temp = (QUAD_EDGE) ((int) temp+SIZE);
+  onext(temp) = (QUAD_EDGE) ((int) ans + 2*SIZE);
+  orig(temp) = destination;
+  temp = (QUAD_EDGE) ((int) temp+SIZE);
+  onext(temp) = (QUAD_EDGE) ((int) ans + 1*SIZE);
+  return(ans);
+}
+
+void
+splice(a,b)
+     QUAD_EDGE a, b;
+{
+  QUAD_EDGE alpha, beta, temp;
+  QUAD_EDGE t1;
+  
+  alpha = rot(onext(a));
+  beta = rot(onext(b));
+
+  t1 = onext(beta);
+  temp = onext(alpha);
+
+  onext(alpha) = t1;  
+  onext(beta) = temp;
+
+  temp = onext(a); 
+  t1 = onext(b); 
+  onext(b) = temp; 
+  onext(a) = t1;
+}
+
+void
+swapedge(e)
+     QUAD_EDGE e;
+{
+  QUAD_EDGE a,b,syme,lnexttmp;
+  VERTEX_PTR a1,b1;
+  
+  a = oprev(e);
+  syme = sym(e);
+  b = oprev(syme); 
+  splice(e, a);
+  splice(syme, b);
+  lnexttmp = lnext(a);
+  splice(e, lnexttmp);
+  lnexttmp = lnext(b);
+  splice(syme, lnexttmp);
+  a1 = dest(a);
+  b1 = dest(b);
+  orig(e) = a1;
+  dest(e) = b1; 
+}
+
+/****************************************************************/
+/*	The Merge Procedure.                                    */
+/****************************************************************/
+
+int valid(l,basel)
+     QUAD_EDGE l,basel;
+{
+  VERTEX_PTR t1,t2,t3;
+
+  t1=orig(basel);
+  t3=dest(basel);
+
+  t2=dest(l);
+  return ccw(t1,t2,t3);
+}
+
+void dump_quad(ptr)
+     QUAD_EDGE ptr;
+{
+  int i;
+  QUAD_EDGE j;
+  VERTEX_PTR v;
+
+  ptr = (QUAD_EDGE) ((int) ptr & ~ANDF);
+  chatting("Entered DUMP_QUAD: ptr=0x%x\n",ptr);
+  for (i=0; i<4; i++)
+   {
+    j=onext(((QUAD_EDGE) (ptr+i)));
+    v = orig(j);
+    chatting("DUMP_QUAD: ptr=0x%x onext=0x%x,v=0x%x\n",ptr+i,j,v);
+   }
+}
+
+
+EDGE_PAIR do_merge(ldo, ldi, rdi, rdo)
+     QUAD_EDGE ldi, rdi, ldo, rdo;
+{
+  int rvalid, lvalid;
+  QUAD_EDGE basel,lcand,rcand,t;
+  VERTEX_PTR t1,t2,t3;
+  
+  while (TRUE) 
+    {
+      t3=orig(rdi);
+
+      t1=orig(ldi);
+      t2=dest(ldi);
+
+      while (ccw(t1,t2,t3/*orig(ldi), dest(ldi), orig(rdi)*/)) 
+	{
+	  ldi = lnext(ldi);
+
+	  t1=orig(ldi);
+	  t2=dest(ldi);
+	}
+
+      t2=dest(rdi);
+
+      if (ccw(t2,t3,t1/*dest(rdi), orig(rdi), orig(ldi)*/)) 
+	{  
+	  rdi = rprev(rdi); 
+	}
+      else 
+	{ 
+	  break; 
+	}
+    }
+  
+  basel = connect_left(sym(rdi), ldi);
+
+  lcand = rprev(basel);
+  rcand = oprev(basel);
+  t1 = orig(basel);
+  t2 = dest(basel);
+
+  if (t1/*orig(basel)*/ == orig(rdo)) rdo = basel;
+  if (t2/*dest(basel)*/ == orig(ldo)) ldo = sym(basel);
+  
+  while (TRUE) 
+    {
+      VERTEX_PTR v1,v2,v3,v4;
+
+      /*chatting("valid site 1,lcand=0x%x,basel=0x%x\n",lcand,basel);*/
+      /*dump_quad(lcand);*/
+      t=onext(lcand);
+      if (valid(t,basel)) 
+	{
+	  v4=orig(basel);
+
+	  v1=dest(lcand);
+	  v3=orig(lcand);
+
+	  v2=dest(t);
+	  while (incircle(v1,v2,v3,v4
+			  /*dest(lcand), dest(t), orig(lcand), orig(basel)*/))
+	    {
+	      deleteedge(lcand);
+	      lcand = t;
+
+	      t = onext(lcand);
+	      v1=dest(lcand);
+	      v3=orig(lcand);
+
+	      v2=dest(t);
+	    }
+	}
+      
+      /*chatting("valid site 2\n");*/
+      t=oprev(rcand);
+      if (valid(t,basel)) {
+	v4=dest(basel);
+	v1=dest(t);
+	v2=dest(rcand);
+	v3=orig(rcand);
+	while (incircle(v1,v2,v3,v4
+			/*dest(t), dest(rcand), orig(rcand), dest(basel)*/))
+	  {
+	    deleteedge(rcand);
+	    rcand = t;
+	    t = oprev(rcand);
+	    v2=dest(rcand);
+	    v3=orig(rcand);
+	    v1=dest(t);
+	  }
+      }
+      /*chatting("Valid sites 3,4\n");*/
+      lvalid = valid(lcand,basel);
+      /*chatting("Valid sites 3,4\n");*/
+      rvalid = valid(rcand,basel);
+      if ((! lvalid) && (! rvalid))
+	{
+	  EDGE_PAIR retval; 
+	  retval.left = ldo; retval.right = rdo; return retval;
+	}
+      v1=dest(lcand);
+      v2=orig(lcand);
+      v3=orig(rcand);
+      v4=dest(rcand);
+      if (!lvalid ||
+	  (rvalid && incircle(v1,v2,v3,v4
+			      /*dest(lcand), orig(lcand),
+				orig(rcand), dest(rcand)*/)))
+	{
+	  basel = connect_left(rcand, sym(basel));
+	  rcand = lnext(sym(basel));
+	}
+      else
+	{
+	  basel = sym(connect_right(lcand, basel));
+	  lcand = rprev(basel);
+	}
+    }
+}
+
+
+
+#define DEFINE_GLOBALS
+#define CONST_m1 10000
+#define CONST_b 31415821
+#define RANGE 100
+
+struct EDGE_STACK *allocate_stack();
+struct get_point get_points();
+int loop = 0, randum = 1, filein = 0 , fileout = 1, statistics = 0; 
+
+void in_order(tree)
+     VERTEX_PTR tree;
+{
+  VERTEX_PTR tleft, tright;
+  double x, y;
+
+  if (!tree) {
+    return;
+  }
+
+  x = X(tree);
+  y = Y(tree);
+  chatting("X=%f, Y=%f\n",x, y);
+  tleft = tree->left;
+  in_order(tleft);
+  tright = tree->right;
+  in_order(tright);
+}
+
+int mult(int p, int q)
+{
+	int p1, p0, q1, q0;
+	
+	p1=p/CONST_m1; p0=p%CONST_m1;
+	q1=q/CONST_m1; q0=q%CONST_m1;
+	return (((p0*q1+p1*q0) % CONST_m1)*CONST_m1+p0*q0);
+}
+
+int skiprand(int seed, int n)
+/* Generate the nth random # */
+{
+  for (; n; n--) 
+#ifdef SS_PLAIN
+    seed = olden_random(seed);
+#else SS_PLAIN
+    seed=random(seed);
+#endif SS_PLAIN
+  return seed;
+}
+
+
+#ifdef SS_PLAIN
+int olden_random(int seed)
+#else SS_PLAIN
+int random(int seed)
+#endif SS_PLAIN
+{
+  seed = (mult(seed,CONST_b)+1);
+  return seed;
+}
+
+
+void
+print_extra(extra)
+     VERTEX_PTR extra;
+{
+  
+  double x, y;
+  x = X(extra);
+  y = Y(extra);
+  chatting("X=%f, Y=%f\n",x, y);
+}
+
+
+void
+main(argc,argv) 
+     int argc;
+     char *argv[];
+{
+  struct EDGE_STACK *my_stack;
+  struct get_point point, extra;
+  QUAD_EDGE edge;
+  int n, retained;
+  to_lincoln = to_off = to_3d_out = to_color = 0;
+  voronoi = delaunay = 1; interactive = ahost = 0 ;
+  retained = 0;
+  
+  filestuff();
+  chatting("argc = %d\n",argc);
+  n = dealwithargs(argc, argv);
+
+  chatting("getting %d points\n", n);
+  extra=get_points(1,1.0,n,1023);
+  point=get_points(n-1,extra.curmax,n-1,extra.seed);
+  chatting("Done getting points\n");
+  num_vertices = n + 1;
+  my_stack=allocate_stack(num_vertices);
+
+//#ifdef SS_PLAIN
+//  ssplain_alloc_stats();
+//#endif SS_PLAIN
+
+  if (flag) in_order(point.v);
+  if (flag) print_extra(extra.v);
+  chatting("Doing voronoi on %d nodes\n", n); 
+
+  edge=build_delaunay_triangulation(point.v,extra.v);
+
+  chatting("Elapsed time %f\n", CMMD_node_timer_elapsed(0));
+  if (flag) output_voronoi_diagram(edge,n,my_stack);
+
+  exit(0);
+}
+
+struct EDGE_STACK *allocate_stack(num_vertices)
+     int num_vertices;
+{
+  struct EDGE_STACK *my_stack;
+
+  num_edgeparts = 12*num_vertices;
+  my_alloc(my_stack, struct EDGE_STACK, 1);
+  my_alloc(my_stack->elts, QUAD_EDGE , num_edgeparts);
+  my_stack->stack_size = num_edgeparts/2;
+  return my_stack;
+}
+
+void
+free_all(cont,my_stack)
+     int cont;
+     struct EDGE_STACK *my_stack;
+{
+  free(my_stack->elts);
+  free(my_stack);
+}
+
+struct get_point get_points(n,curmax,i,seed)
+     int n;
+     double curmax;
+     int i,seed;
+{
+  VERTEX_PTR node;
+
+  struct get_point point;
+
+  if (n<1 || i<=n/2) {
+    point.v = NULL;
+    point.curmax=curmax;
+	 point.seed = seed;
+    return point;
+  }
+#ifdef OUT
+  chatting("Get points: %d, %f, %d\n",n,curmax,i);
+#endif OUT
+
+  point = get_points(n/2,curmax,i,seed);
+  /*chatting("rec call n=%d\n",n);*/
+  i -= n/2;
+
+  node = (VERTEX_PTR) mymalloc(sizeof(struct VERTEX));
+
+  /*chatting("Get points past alloc,n=%d\n",n);*/
+  X(node) = point.curmax * exp(log(drand(point.seed))/i);
+  Y(node) = drand(point.seed);
+  NORM(node) = X(node)*X(node) + Y(node)*Y(node);
+  node->right = point.v;
+  /*chatting("node = 0x%x\n",node);*/
+  point = get_points(n/2,X(node),i-1,point.seed);
+
+  node->left = point.v;
+  point.v = node;
+  return point;
+}
+
+
+/****************************************************************/
+/*	Voronoi Diagram Routines.                               */
+/****************************************************************/
+
+/****************************************************************/
+/*	Graph Traversal Routines                                */
+/****************************************************************/
+
+QUAD_EDGE pop_edge(x)
+     struct EDGE_STACK *x;
+{
+  int a=x->ptr--;
+  return (x)->elts[a];
+}
+
+void
+push_edge(stack,edge)
+     struct EDGE_STACK *stack;
+     QUAD_EDGE edge;
+{
+  int a;
+  /*chatting("pushing edge \n");*/
+  if (stack->ptr == stack->stack_size) {
+    printf("cannot push onto stack: stack is too large\n");
+  }
+  else {
+    a = stack->ptr;
+    a++;
+    stack->ptr = a;
+    stack->elts[a] = edge;
+  }
+}
+
+void
+push_ring(stack, edge)
+     struct EDGE_STACK *stack;
+     QUAD_EDGE edge;
+{
+  QUAD_EDGE nex;
+  nex = onext(edge);
+  while (nex != edge) {
+    if (seen(nex) == 0) {
+      seen(nex) = 1;
+      push_edge(stack, nex);
+    }
+    nex = onext(nex);
+  }
+}
+
+void
+push_nonzero_ring(stack, edge)
+     struct EDGE_STACK *stack;
+     QUAD_EDGE edge;
+{
+  QUAD_EDGE nex;
+  nex = onext(edge);
+  while (nex != edge) {
+    if (seen(nex) != 0) {
+      seen(nex) = 0;
+      push_edge(stack, nex);
+    }
+    nex = onext(nex);
+  }
+}
+
+void
+zero_seen(my_stack,edge)
+     QUAD_EDGE edge;
+     struct EDGE_STACK *my_stack;
+{
+  my_stack->ptr = 0;
+  push_nonzero_ring(my_stack, edge);
+  while (my_stack->ptr != 0) {
+    edge = pop_edge(my_stack);
+    push_nonzero_ring(my_stack, sym(edge));
+  }
+}
+
diff --git a/test/ccured_olden/voronoi/output.c b/test/ccured_olden/voronoi/output.c
new file mode 100644
index 000000000..a9331f998
--- /dev/null
+++ b/test/ccured_olden/voronoi/output.c
@@ -0,0 +1,173 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+#define ODEFINE_GLOBALS
+#include "defines.h"
+
+#ifdef SS_PLAIN
+#include "ssplain.h"
+#endif SS_PLAIN
+
+extern struct VEC2 V2_sum();
+extern struct VEC2 V2_sub();
+extern struct VEC2 V2_times();
+extern double V2_cprod();
+extern struct VEC2 V2_cross();
+extern double V2_dot();
+extern double V2_magn();
+
+/****************************************************************/
+/*	Voronoi Output Routines                                 */
+/****************************************************************/
+
+void
+plot_dedge(p1, p2)
+VERTEX_PTR p1, p2;
+{
+  double x1,x2,y1,y2;
+
+  x1=X(p1);
+  y1=Y(p1);
+  x2=X(p2);
+  y2=Y(p2);
+  /* plots a Delaunay-triangulation edge on your favorite device. */
+  chatting("Dedge %g %g %g %g \n",(float) x1, (float) y1,
+	 (float) x2, (float) y2);
+}
+
+void
+plot_vedge(p1, p2)
+     struct VEC2 p1, p2;
+{
+  /* plots a Voronoi-diagram edge on your favorite device. */
+  chatting("Vedge %g %g %g %g \n",(float) p1.x, (float) p1.y, (float) p2.x,
+	 (float) p2.y);
+}
+
+struct VEC2 circle_center(a,b,c)
+     /* returns the center of the circle passing through A, B & C. */
+     struct VEC2 a,b,c;
+{
+  struct VEC2 p;
+  double d1,d2,d3,d4;
+  struct VEC2 vv1, vv2, vv3, vv4, vv5, vv6, vv7 ;
+  vv1 = V2_sub(b,c);
+  d1 = V2_magn( vv1 );
+  vv1 = V2_sum(a,b);
+  vv2 = V2_times(0.5, vv1);
+  if (d1 < 0.0) /*there is no intersection point, the bisectors coincide. */
+    return(vv2);
+  else {
+    vv3 = V2_sub(b,a);
+    vv4 = V2_sub(c,a); 
+    d3 = V2_cprod(vv3, vv4) ;
+    d2 = -2.0 * d3 ;
+    vv5 = V2_sub(c,b);
+    d4 = V2_dot(vv5, vv4);
+    vv6 = V2_cross(vv3);
+    vv7 = V2_times(d4/ d2 , vv6);
+    p = V2_sum(vv2, vv7);
+    return(p);
+  }
+}
+
+int *earray;
+
+void
+output_voronoi_diagram(edge,nv,my_stack)
+     QUAD_EDGE edge;
+     int nv;
+     struct EDGE_STACK *my_stack;
+{
+  QUAD_EDGE nex, prev, snex, sprev;
+  struct VEC2 cvxvec, center;
+  double ln;
+  double d1;
+  struct VEC2 vv1, vv2, vv3;
+  
+  if (voronoi)	{
+    zero_seen(my_stack,edge);
+    nex = edge;
+    /*  Plot VD edges with one endpoint at infinity. */
+    do {
+      struct VEC2 v21,v22,v23;
+      QUAD_EDGE tmp;
+
+      v21=destv(nex);
+      v22=origv(nex);
+      tmp=onext(nex);
+      v23=destv(tmp);
+      cvxvec = V2_sub(v21,v22/*destv(nex), origv(nex)*/);
+      center = circle_center(v22,v21,v23
+			     /*origv(nex), destv(nex), destv(onext(nex))*/);
+      vv1 = V2_sum(v22,v21/*origv(nex), destv(nex)*/) ;
+      vv2 = V2_times(0.5, vv1);
+      vv3 = V2_sub(center, vv2) ;
+      ln = 1.0 + V2_magn(vv3);
+      d1 = ln/V2_magn(cvxvec);
+      vv1 = V2_cross(cvxvec);
+      vv2 = V2_times(d1, vv1) ;
+      vv3 = V2_sum(center, vv2);
+      plot_vedge( center, vv3 ) ;
+      nex = rnext(nex);
+    } while (nex != edge);
+  }
+  
+  /* Plot DT edges and finite VD edges. */
+  
+  my_stack->ptr = 0;
+  push_ring(my_stack, edge);
+  chatting("mystack_ptr = %d\n",my_stack->ptr);
+  while (my_stack->ptr != 0) {
+    VERTEX_PTR v1,v2,v3,v4;
+    double d1,d2;
+    
+    
+    edge = pop_edge(my_stack);
+    if (seen(edge) == 1)
+      {
+	{
+	  prev = edge;
+	  nex = onext(edge);
+	  do {
+	    v1=orig(prev);
+	    d1=X(v1);
+	    v2=dest(prev);
+	    d2=X(v2);
+	    if (d1 >= d2 /*X(orig(prev)) >= X(dest(prev))*/)
+	      {
+		/*plot_dedge(orig(prev), dest(prev));*/
+		plot_dedge(v1,v2);
+		sprev = sym(prev);
+		snex = onext(sprev);
+		v1=orig(prev);
+		v2=dest(prev);
+		v3=dest(nex);
+		v4=dest(snex);
+		if (ccw(v1,v2,v3/*orig(prev), dest(prev), dest(nex)*/)
+		    != ccw(v1,v2,v4/*orig(prev),dest(prev),dest(snex)*/))
+		  {
+		    struct VEC2 v21, v22, v23;
+		    v21 = origv(prev);
+		    v22 = destv(prev);
+		    v23 = destv(nex);
+		    vv1 = circle_center(v21,v22,v23/*origv(prev),
+						     destv(prev),destv(nex)*/);
+		    v21 = origv(sprev);
+		    v22 = destv(sprev);
+		    v23 = destv(snex);
+		    vv2 = circle_center(v21,v22,v23/*origv(sprev),
+						     destv(sprev),destv(snex)*/);
+		    plot_vedge( vv1 , vv2 );
+		  }
+	      }
+	    seen(prev) = 2;
+	    prev = nex;
+	    nex = onext(nex);
+	  } while (prev != edge);
+	}
+      }
+    push_ring(my_stack, sym(edge));
+  }
+  zero_seen(my_stack, edge);
+}
+
diff --git a/test/ccured_olden/voronoi/vector.c b/test/ccured_olden/voronoi/vector.c
new file mode 100644
index 000000000..1a288d7b6
--- /dev/null
+++ b/test/ccured_olden/voronoi/vector.c
@@ -0,0 +1,80 @@
+/* For copyright information, see olden_v1.0/COPYRIGHT */
+
+#include "defines.h"
+
+/****************************************************************/
+/*	Vector Routines.                                        */
+/*	From CMU vision library.                                */
+/*	They are used only for the VD, not the DT.              */
+/* 	They are slow because of large call-by-value parameters.*/
+/****************************************************************/
+
+/* V2_cprod: forms triple scalar product of [u,v,k], where k = u cross v */
+/* (returns the magnitude of u cross v in space)*/
+
+double V2_cprod(u,v)
+ struct VEC2 u,v;
+{
+    return(u.x * v.y - u.y * v.x);
+}
+
+
+/* V2_dot: vector dot product */
+
+double V2_dot(u,v)
+struct VEC2 u,v;
+{
+    return(u.x * v.x + u.y * v.y);
+}
+
+/* V2_times: multiply a vector by a scalar */
+
+struct VEC2 V2_times(c,v)
+ double c;
+ struct VEC2 v;
+{
+    struct VEC2 ans;
+    ans.x = c * v.x;
+    ans.y = c * v.y;
+    return(ans);
+}
+
+/* V2_sum, V2_sub: Vector addition and subtraction */
+
+struct VEC2 V2_sum(u,v)
+ struct VEC2 u,v;
+{
+    struct VEC2 ans;
+    
+    ans.x = u.x + v.x;
+    ans.y = u.y + v.y;
+    return(ans);
+}
+
+struct VEC2 V2_sub(u,v)
+ struct VEC2 u,v;
+{
+    struct VEC2 ans;
+    ans.x = u.x - v.x;
+    ans.y = u.y - v.y;
+    return(ans);
+}
+
+/* V2_magn: magnitude of vector */
+
+double V2_magn(u)
+ struct VEC2 u;
+{
+    return(sqrt(u.x*u.x+u.y*u.y));
+}
+
+/* returns k X v (cross product).  this is a vector perpendicular to v */
+
+struct VEC2 V2_cross(v)
+ struct VEC2 v;
+{
+    struct VEC2 ans;
+    ans.x = v.y;
+    ans.y = -v.x;
+    return(ans);
+}
-- 
GitLab