From $NEMO/src/tutor/nbody/snaptrans.c we quote a NEMO versino of a program which reads in a (time selected) series of snapshots, and allows you to operate on the basic snapshot variables. Most of the programs in $NEMO/src/nbody/trans can be derived from this template.
/*
* SNAPTRANS: template to operate on snapshot files
*
* With the $NEMOBIN/cc script it should compile as follows:
* cc -o snaptrans snaptrans.c -lnemo -lm
*
* 26-jan-94 V1.0 Created Peter Teuben
*/
#include <stdinc.h>
#include <getparam.h>
#include <vectmath.h>
#include <filestruct.h>
#include <snapshot/snapshot.h>
#include <snapshot/body.h>
#include <snapshot/get_snap.c>
#include <snapshot/put_snap.c>
string defv[] = { /* Nemo_Keys: "key=val\n help", */
"in=???\n input (snapshot) file",
"out=???\n output (snapshot) file",
"times=all\n times to process",
"VERSION=1.0\n 26-jan-94 PJT",
NULL,
};
string usage = "template for snapshot operations";
nemo_main() /* nemo_main: this replaces main(argc,argv) */
{
stream instr, outstr;
string times = getparam("times");
real tsnap;
Body *btab = NULL, *bp;
int i, nbody, bits;
bool first = TRUE;
instr = stropen(getparam("in"), "r");
outstr = stropen(getparam("out"), "w");
for (;;) { /* infinite loop, broken only when ran out of snapshots */
get_history(instr); /* read history */
if (!get_tag_ok(instr, SnapShotTag)) break; /* check if done */
get_snap(instr, &btab, &nbody, &tsnap, &bits); /* get next */
/* Operate on the snapshot here : */
for (bp=btab, i=0; i<nbody; bp++, i++) {
/* all the work goes here */
}
if (first) {
put_history(outstr);
first = FALSE;
}
put_snap(outstr, &btab, &nbody, &tsnap, &bits); /* output */
}
strclose(instr);
if (first) {
warning("No snapshots processed");
strdelete(outstr);
} else
strclose(outstr);
}