.TH IM_ITERATE 3 "30 October 1992"
.SH NAME
im_iterate \- PIO input from image
.SH SYNOPSIS
.B #include <vips/vips.h>

int im_iterate( im, start_fn, scan_fn, stop_fn, a, b )
.br
IMAGE *im;
.br
void *(*start_fn)();
.br
int (*scan_fn)();
.br
int (*stop_fn)();
.br
void *a, *b;

where, typically, 

void *start_fn( im, a, b )
.br
IMAGE *im;
.br
void *a, *b;

int scan_fn( or, seq, a, b )
.br
REGION *or;
.br
void *seq;
.br
void *a, *b;

int stop_fn( seq, a, b )
.br
void *seq;
.br
void *a, *b;
.SH DESCRIPTION
im_iterate(3) is used for PIO image input. See `VIPS Library Programmers'
guide,' in the accompanying documentation, for an introduction to this
function.

im_iterate(3) makes one or more regions on im, and starts one or more sequences
running over the image. im_iterate(3) guarantees that

   - scan_fn() will see each of the pels in im exactly once
   - start_fn() and stop_fn() are both exclusive

See the guide, the man page for im_generate(3), and the source to im_deviate(3)
for examples.

On machines with SVR4 threads and several CPUs, im_generate(3) and
im_iterate(3) automatically parallelise programs. You can set the desired
concurrency level with the environment variable IM_CONCURRENCY, for example

    example% setenv IM_CONCURRENCY 2
    example% stats fred.v 

will run stats with enough concurrency to keep 2 CPUs fully occupied.
If IM_CONCURRENCY is not set, then it defaults to 1.
.SH RETURN VALUE
All functions return 0 on success and non-zero on error.
.SH SEE ALSO
im_generate(3).
.SH COPYRIGHT
National Gallery, 1993
.SH AUTHOR
J. Cupitt \- 23/7/93
