@c ----------------------------------------------------------------------
@node va_*, misc
@heading @code{va_start}, @code{va_end}, @code{va_arg}
@subheading Syntax

@example
#include <stdarg.h>

va_list v;
va_start(v, last-formal-arg);
va_arg(v, type)
va_end(v);
@end example

@subheading Description

These functions provide access to the variable arguments passed to
functions prototyped with the "..." symbol (like @pxref{printf}).  You
must declare a variable to hold the marker, then initialize it with
@code{va_start}.  Then, for each value you want, call @code{va_arg}
and pass it tye type of the value (for example, va_arg(v, int)).  When
you're done, call va_end to clean up.

@subheading Return Value

@code{va_arg} returns the value of the argument.

@subheading Example

@example
void sum(int x, ...)
@{
  int s = 0, i;
  va_list v;
  va_start(v, x);
  for (i=0; i<s; i++)
    s += va_arg(v, int);
  va_end(v);
  return s;
@}
@end example

void debug(char *fmt, ...)
@{
  va_list v;
  if (!do_debug) return;
  va_start(v, fmt);
  vfprintf(stderr, fmt, v);
  va_end(v);
@}

@c ----------------------------------------------------------------------
@node valloc, memory
@heading @code{valloc}
@subheading Syntax

@example
#include <stdlib.h>

void *valloc(unsigned size);
@end example

@subheading Description

This function is just like @code{malloc} (@pxref{malloc}) except that the
returned pointer is always aligned to a CPU page boundary.  This
alignment is rarely useful in djgpp. 

@subheading Return Value

A pointer to a newly allocated block of memory. 

@subheading Example

@example
char *page = valloc(getpagesize());
@end example

