/* rectangle.c :
  Affiche un rectangle rouge au milieu de l'écran */

#include <sys/types.h> /* pour lseek(2) */
#include <sys/stat.h>  /* pour open(2) */
#include <unistd.h>    /* pour write(2) etc. */
#include <fcntl.h>     /* pour open(2) */

/* dimensions de l'écran */
#define VIDEO_L 640
#define VIDEO_H 480

/* dimensions du rectangle */
#define RECT_L	200
#define RECT_H	200

#ifndef COULEUR
#define COULEUR 15 /* blanc */
#endif

char ligne[RECT_L]; /* pour écrire dans l'écran */

int main(int argc, char **argv) {
  int fd, i;

  /* initialise la ligne */
  for (i=0; i<RECT_L; i++)
    ligne[i]=COULEUR;

  /* ouvre le framebuffer */
  fd=open("/dev/fb0", O_RDWR);

  /* place le pointeur au début du rectangle */
  lseek(fd,
    (VIDEO_L*((VIDEO_H-RECT_H)>>1))
             +(VIDEO_L-RECT_L), SEEK_SET);

  /* tracé du rectangle */
  for (i=0; i<RECT_H; i++) {
    /* place le curseur sur le bord gauche */
    lseek(fd, VIDEO_L-RECT_L, SEEK_CUR);
    /* écrit la ligne */
    write(fd, ligne, RECT_L);
  }

  return 0;
}
