#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define COLUMNS 256
#define ROWS 192
static float heights[ROWS * COLUMNS];
static void generate_heights(void)
{
for (size_t row = 0; row < ROWS; ++row)
{
const bool in_region = row > 100 && row < 110;
const double row_factor = 2e-6 * sin(0.1 * (double)row);
float *line = heights + row * COLUMNS;
for (size_t column = 0; column < COLUMNS; ++column)
{
line[column] =
in_region && column < 40
? NAN
: (float)(row_factor * cos(0.07 * (double)column));
}
}
}
{
}
{
init_header(header, revision, type);
{
}
{
}
{
}
return status ==
SDFIO_OK ? EXIT_SUCCESS : EXIT_FAILURE;
}
int main(int argc, char **argv)
{
if (argc < 3)
{
fprintf(stderr, "usage: %s iso2.sdf iso1.sdf\n", argv[0]);
return EXIT_FAILURE;
}
generate_heights();
const int integers =
return floats == EXIT_SUCCESS && integers == EXIT_SUCCESS ? EXIT_SUCCESS
: EXIT_FAILURE;
}
Files by path, and the stream over a C file.
sdfio_status sdfio_create_file(sdfio_writer *writer, const char *path, const sdfio_header *header)
Creates the file at a path and starts it as sdfio_create_stream() does.
const sdfio_layout * sdfio_layout_packed(sdfio_data_type type)
Returns the layout of a plain array: the elements follow each other and the rows follow each other.
Reading and writing of ISO 25178-71 SDF surface data files.
sdfio_revision
Revision of the SDF format that a file follows.
Definition types.h:72
@ SDFIO_ISO_1_0
Revision ISO-1.0.
Definition types.h:74
@ SDFIO_ISO_2_0
Revision ISO-2.0.
Definition types.h:76
sdfio_status
Result of a function call.
Definition types.h:31
@ SDFIO_OK
The call succeeded.
Definition types.h:33
const sdfio_allocator * sdfio_default_allocator(void)
Returns the allocator that uses malloc() and free().
sdfio_data_type
Type of the coded values of the data area of a file, and of the elements of a buffer of heights.
Definition types.h:112
@ SDFIO_TYPE_FLOAT
float: IEEE 754 binary32.
Definition types.h:114
@ SDFIO_TYPE_INT16
int16_t.
Definition types.h:118
const sdfio_time_zone * sdfio_system_time_zone(void)
Returns the time zone of the machine, as its C library knows it.
sdfio_status sdfio_write_trailer_field(sdfio_writer *writer, const char *name, const char *value)
Writes a line field = value of the trailer, which ISO-2.0 expects.
sdfio_status sdfio_writer_add_binary(sdfio_writer *writer)
Adds the binary format to the formats that the writer writes.
sdfio_status sdfio_writer_create(const sdfio_allocator *allocator, sdfio_writer **writer)
Creates a writer.
struct sdfio_writer sdfio_writer
Opaque handle of a writer.
Definition writer.h:69
const char * sdfio_writer_error_message(const sdfio_writer *writer)
Returns a description of the most recent failure of the writer, or an empty string if none occurred.
void sdfio_writer_free(sdfio_writer *writer)
Releases a writer.
sdfio_status sdfio_write_heights(sdfio_writer *writer, const sdfio_layout *layout, const void *src)
Writes the whole data area from a matrix of heights in metres that lies in memory as the layout descr...
sdfio_status sdfio_writer_set_time_zone(sdfio_writer *writer, const sdfio_time_zone *time_zone)
Sets the conversion of the dates of ISO-1.0 files.
sdfio_status sdfio_end_file(sdfio_writer *writer)
Ends the file: closes the trailer, the last record, flushes the stream and, for a file that sdfio_cre...