/*
 * Generateur automatique de documents en LHEO
 * Copyright 2004 DGEFP, Armines/CRI.
 *
 * Compilation: gcc -o gene gene.c
 */
# include <stdio.h>
# include <stdlib.h>
# include <sys/types.h>
# include <unistd.h>
# include <assert.h>
# include <string.h>

int lcmin = 'a';
int lcmax = 'z';
int ucmin = 'A';
int ucmax = 'Z';
int nbmin = '0';
int nbmax = '9';
char ponct[] = {'.',',',';',':','-','(',')','!','?','%','$','\n'};

int
gen_random(int m)
{
  if (m == 0)
    return 0;
  else
    return random() % m;
}

void
gen_srandom()
{
  srandom(getpid());
}

void
gen_number(int ld, int hd)
{
  int d = hd - ld;
  int l;
  int i;
  assert(hd > 0);
  
  if (d == 0)
    l = ld;
  else
    l = ld + gen_random(d+1);

  for (i = 0; i < l; i++)
    printf("%d", gen_random(10));
}


void
gen_alpha(int nbc)
{
  int r;

  while (nbc--) {
    r = gen_random(100);
    if (r < 5) {
      printf("%c", ucmin + gen_random(ucmax-ucmin));    
    } else if (r < 10) {
      printf("%c", nbmin + gen_random(nbmax-nbmin));
    } else if (r < 15) {
      printf("%c", ponct[gen_random(sizeof(ponct))]);
    } else if (r < 30) {
      printf(" ");
    } else {
      printf("%c", lcmin + gen_random(lcmax-lcmin));
    } 
  }
}

void
gen_dateval()
{
  printf("%2.2d%2.2d200%1d", gen_random(27)+1, gen_random(12)+1, gen_random(6));
}

static int n;

/*
 * Le fichier lheo.c doit etre present, bien sur.
 * On inclut du code C, pas tres "joli", mais ca a le
 * merite de la simplicite.
 */
# include "lheo.c"

main(int argc, char** argv)
{
  int i;
  
  n = 0;

  if (argc > 1) {
    n = atoi(argv[1]);
    assert (n > 0);
  } else {
    /* Pour la version "cgi-bin" par defaut quand il n'y a pas d'arguments */
    printf("Content-type: text/xml\n\n");
  }
  
  /* Reinitialisation du generateur aleatoire */
  gen_srandom();

  /* Genere n offres */
  gen_lheo(n);
}
    

