Below is the NeXus code for writing three data items into a NeXus file using the base NeXus API.
#include "napi.h"
int main()
{
int counts[1000][50], n_t, n_p, dims[2], i;
float t[1000], phi[50];
NXhandle file_id;
/* Read in data using local routines */
getdata (n_t, t, n_p, phi, counts);
/* Open output file and output global attributes */
NXopen ('OUTPUT.HDF', NXACC_CREATE, &file_id);
NXputattr (file_id, "user_name", "Joe Bloggs", 10, NX_CHAR);
/* Open top-level NXentry group */
NXmakegroup (file_id, "Entry1", "NXentry");
NXopengroup (file_id, "Entry1", "NXentry");
/* Open NXdata group within NXentry group */
NXmakegroup (file_id, "Data1", "NXdata");
NXopengroup (file_id, "Data1", "NXdata");
/* Output time channels */
NXmakedata (file_id, "time_of_flight", NX_FLOAT32, 1, &n_t);
NXopendata (file_id, "time_of_flight")
NXputdata (file_id, t);
NXputattr (file_id, "units", "microseconds", 12, NX_CHAR);
i = 1;
NXputattr (file_id, "axis", &i, 1, NX_INT32);
/* Output detector angles */
NXmakedata (file_id, "phi", NX_FLOAT32, 1, &n_p);
NXopendata (file_id, "phi")
NXputdata (file_id, phi);
NXputattr (file_id, "units", "degrees", 7, NX_CHAR);
i = 2;
NXputattr (file_id, "axis", &i, 1, NX_INT32);
/* Output data */
dims[0] = n_t;
dims[1] = n_p;
NXmakedata (file_id, "counts", NX_INT32, 2, dims);
NXopendata (file_id, "counts")
NXputdata (file_id, counts);
i = 1;
NXputattr (file_id, "signal", &i, 1, NX_INT32);
/* Close NXentry and NXdata groups and close file */
NXclosegroup (file_id);
NXclosegroup (file_id);
NXclose (&file_id);
return;
}