#include "mess822.h"

int mess822_fold(out,in,prefix,linelen)
stralloc *out;
stralloc *in;
char *prefix;
int linelen;
{
  int i;
  int j;
  int k;
  int partial;

  if (!stralloc_copys(out,prefix)) return 0;
  partial = out->len;

  for (j = i = 0;j <= in->len;++j)
    if ((j == in->len) || (in->s[j] == '\n')) {
      k = i;
      while ((in->s[k] == ' ') && (in->s[k + 1] == ' ')) ++k;
      if (i && (partial + j - k > linelen)) {
	if (!stralloc_cats(out,"\n")) return 0;
	if (!stralloc_catb(out,in->s + i,j - i)) return 0;
	partial = j - i;
      }
      else {
	if (!stralloc_catb(out,in->s + k,j - k)) return 0;
	partial += j - k;
      }
      i = j + 1;
    }

  if (!stralloc_append(out,"\n")) return 0;

  return 1;
}


syntax highlighted by Code2HTML, v. 0.9.1