Code Search for Developers
 
 
  

GULUS_Calendrier.c from Gulus at Krugle


Show GULUS_Calendrier.c syntax highlighted

/******************************************************************************/
/*                            GULUS_Calendrier v1.0                           */
/******************************************************************************/
/* Par:                                                                       */
/*     Benoit Leblanc                                                         */
/*    Copyright (C) 2001                                                      */
/******************************************************************************/
/* This code is GPL.  You may copy it, modify it or do with it as you         */
/* please, but you may not claim copyright on any code wholly or partly based */
/* on this code.  I accept no responsability for any consequence of using     */
/* code, be they proper or otherwise.                                         */
/******************************************************************************/

#include <X11/Xlib.h>
#include <Imlib2.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>

int showErrorMSG(void){
   fprintf(stderr, "Le Calendrier doit reçevoir la liste suivante ");
   fprintf(stderr, "d'arguments:\n    GULUS_Calendrier MOIS ANNÉE ");
   fprintf(stderr, "JOUR_DU_1ER_DU_MOIS [[JOUR CODE_D'ACTIVITÉ]]\n");
   fprintf(stderr, "où:\n    01 = Conférence\n    02 = Réunion\n");
   fprintf(stderr, "    03 = Install-Fest\n    04 = GULUS_News\n");
   fprintf(stderr, "    05 = AG\n\nex:\n   GULUS_Calendrier 03 2001 ");
   fprintf(stderr, "4 10 01 17 03\n   Donnera un calendrier: ");
   fprintf(stderr, "GULUS_CAL-2001-03.png avec:\n     une conférence le ");
   fprintf(stderr, "10 mars\n     un install-fest le 17 mars\n\n");
   fprintf(stderr, "BUGS:\n  Vous devez spécifier les dates d'activités ");
   fprintf(stderr, "en ordre chronologique sinon le\n  calendrier sera ");
   fprintf(stderr, "vide...\n\nJ'espères que vous n'aurez pas trop de ");
   fprintf(stderr, "troubles avec ce programme, si vous avez\n");
   fprintf(stderr, "des questions, vous pouvez toujours m'écrire: ");
   fprintf(stderr, "extrema@ottawa.com. \n\n");
   exit(-1);
}

int main(int argc, char * argv[]) {
/* NOTE:  Le Calendrier doit reçevoir la liste suivante d'arguments:
    GULUS_Calendrier MOIS ANNÉE JOUR_DU_1ER_DU_MOIS [[JOUR CODE_D'ACTIVITÉ]]
où:
    01 = Conférence
    02 = Réunion
    03 = Install-Fest
    04 = GULUS_News
    05 = AG
        
ex:
   GULUS_Calendrier 03 2001 4 10 01 17 03
   Donnera un calendrier: GULUS_CAL-2001-03.jpg avec:
     une conférence le 10 mars
     un install-fest le 17 mars
     
BUG:
  Vous devez spécifier les dates d'activités en ordre chronologique sinon le
  calendrier sera vide...
     
J'espères que vous n'aurez pas trop de trouble avec ce programme, si vous avez
des questions, vous pouvez toujours m'écrire: extrema@ottawa.com.  */

   Imlib_Image image0;
   FILE *fp;  /* Pour notre fichier d'output */
   int largeur, hauteur;
   int largeur_texte, hauteur_texte;
   int annee, mois, jour_de_semaine, count_argv;
   int jour, jour_activite, code_activite;
   int jours_max_mois;
   int i, j, xi, yi;
   char jour_char[3];
   char buffer[4];
 	 Imlib_Font police;

     /* Check nombre d'arguments */
  if (argc < 4) showErrorMSG();
   
   /* On initialise le cache a 2M */
   imlib_set_cache_size(2048 * 1024);
   
   /* On fait du traitement des mois/jours/année Grégorien */
   mois = atoi(argv[1]);
   annee = atoi(argv[2]);
   if (mois < 8) jours_max_mois = mois % 2;
   if (mois >= 8) jours_max_mois = (mois+1) % 2;
   jours_max_mois += 30;
   if ((mois == 2) && ((annee % 4) != 0)) jours_max_mois = 28;
   if ((mois == 2) && ((annee % 4) == 0)) jours_max_mois = 29;
   jour_de_semaine = atoi(argv[3]);
   jour = 1;
   count_argv = 4;

  
   /* On choisi l'image du mois associée avec le mois demandé */
   switch(mois) {
   case 1: {
      image0 = imlib_load_image("bin/pics/GULUS_Cal_Janvier.png");
      break;
      }
   case 2: {
      image0 = imlib_load_image("bin/pics/GULUS_Cal_Fevrier.png");
      break;
      }
   case 3: {
      image0 = imlib_load_image("bin/pics/GULUS_Cal_Mars.png");
      break;
      }
   case 4: {
      image0 = imlib_load_image("bin/pics/GULUS_Cal_Avril.png");
      break;
      }
   case 5: {
      image0 = imlib_load_image("bin/pics/GULUS_Cal_Mai.png");
      break;
      }
   case 6: {
      image0 = imlib_load_image("bin/pics/GULUS_Cal_Juin.png");
      break;
      }
   case 7: {
      image0 = imlib_load_image("bin/pics/GULUS_Cal_Juillet.png");
      break;
      }
   case 8: {
      image0 = imlib_load_image("bin/pics/GULUS_Cal_Aout.png");
      break;
      }
   case 9: {
      image0 = imlib_load_image("bin/pics/GULUS_Cal_Septembre.png");
      break;
      }
   case 10: {
      image0 = imlib_load_image("bin/pics/GULUS_Cal_Octobre.png");
      break;
      }
   case 11: {
      image0 = imlib_load_image("bin/pics/GULUS_Cal_Novembre.png");
      break;
      }
   case 12: {
      image0 = imlib_load_image("bin/pics/GULUS_Cal_Decembre.png");
      break;
      }
   }
   if (image0 == NULL) {
      fprintf(stderr,
         "Incapable de loader l'Image du mois pour le calendrier\n");
      exit(-1);
   }
   
   /* On traite l'image du fond */
   imlib_context_set_image(image0);
   largeur = imlib_image_get_width();
   hauteur = imlib_image_get_height();

	/*On rajoute le repertoire courant a la liste des repertoires polices*/
	imlib_add_path_to_font_path("bin/fonts/");

   /* On écrit l'année au calendrier 
	police = imlib_load_font("hum521b.ttf/22");
	imlib_context_set_font(police);
	imlib_context_set_color(200,200,255,155);
	imlib_get_text_size(argv[2], &largeur_texte, &hauteur_texte);
  imlib_text_draw((largeur - largeur_texte) / 2, 28, argv[2]);
  imlib_free_font();
/*
   
   
  /* On crée le fichier MAP-HREF */
  if ((fp = fopen("bin/calendar.map", "w+")) == NULL) {
     fprintf(stderr, "Impossible d'ouvrir le fichier calendar.map\n");
     return(-1);
     }
  fputs("<MAP NAME=\"Calendrier\">\n", fp);
  
  /* FLECHE A GAUCHE */
  switch(mois) {
     case 1: { fputs("<AREA SHAPE=\"RECT\" COORDS=\"80,5,105,37\" HREF=\"index.php?mod=calendrier&mois=", fp);
               break;
            }
     case 8:  { fputs("<AREA SHAPE=\"RECT\" COORDS=\"80,5,105,37\" HREF=\"index.php?mod=calendrier&mois=", fp);
                break;
              }
     }
  sprintf(buffer, "%d", mois-1);   
  fputs(buffer, fp);
  fputs("&annee=", fp);
  sprintf(buffer, "%d", annee-1);     
  fputs(buffer, fp);
  fputs("\">\n", fp);
  
  
  /* FLECHE A DROITE */
  switch(mois) {
     case 1: { fputs("<AREA SHAPE=\"RECT\" COORDS=\"80,5,105,37\" HREF=\"index.php?mod=calendrier&mois=", fp);
               break;
            }
     case 8:  { fputs("<AREA SHAPE=\"RECT\" COORDS=\"190,5,215,37\" HREF=\"index.php?mod=calendrier&mois=", fp);
                break;
              }
     }
  sprintf(buffer, "%d", mois+1);
  fputs(buffer, fp);
  fputs("&annee=", fp);
  sprintf(buffer, "%d", annee+1);
  fputs(buffer, fp);
  fputs("\">\n", fp);
  
  
  /* On ajoute les jours au calendrier -- C'est parti mon kiki! */
	police = imlib_load_font("avgardm.ttf/20");
	imlib_context_set_font(police);
	imlib_context_set_color(242,228,174,255);
   
  /* On commence par la première ligne -- la plus tricky */
  for (i = jour_de_semaine; i <= 7; i++) {
     sprintf(jour_char, "%d", jour);  /* Convertir int -> char* */
     if (argc > count_argv) {
        jour_activite = atoi(argv[count_argv]);
        code_activite = atoi(argv[count_argv+1]);
        if (jour_activite == jour) {
           switch(code_activite) {
              case 1: { imlib_context_set_color(255,186,188,255);  /* rose */
                        break;
                       }
              case 2: { imlib_context_set_color(247,219,178,255); /* beige */
                        break;
                       }
              case 3: { imlib_context_set_color(109,250,255,255); /* turcoise */
                        break;
                       }
              case 4: { imlib_context_set_color(148,255,109,255); /* vert */
                        break;
                       }
              case 5: { imlib_context_set_color(255,109,255,255); /* mauve */
                        break;
                       }
           } /* Fin de switch */
           /* On écrit maintenant le HREF-MAP dans le fichier */
           fputs("<AREA SHAPE=\"RECT\" COORDS=\"", fp);
           sprintf(buffer, "%d", (41*i)+7);
           fputs(buffer, fp);
           fputs(",47,", fp);
           sprintf(buffer, "%d", (41*i)+47);
           fputs(buffer, fp);
           fputs(",79\" HREF=\"index.php?mod=activites&date=", fp);
           sprintf(buffer, "%s-%d-%d", argv[2], mois, jour);
           fputs(buffer, fp);
           switch(code_activite){
              case 1: { fputs("\" ALT=\"Conference\">\n", fp);
                        break;
                      }
              case 2: { fputs("\" ALT=\"Réunion des membres\">\n", fp);
                        break;
                      }
              case 3: { fputs("\" ALT=\"Install-Fest\">\n", fp);
                        break;
                      }
              case 4: { fputs("\" ALT=\"Sortie du GULUS_NEWS\">\n", fp);
                        break;
                      }
              case 5: { fputs("\" ALT=\"Assemblée Générale\">\n", fp);
                        break;
                      }
              }
            sprintf(jour_char, "%d", jour);  /* PATCH */
            count_argv++;
            count_argv++;
        }
      }

    imlib_get_text_size(jour_char, &largeur_texte, &hauteur_texte);
    xi = (41*i) + 27 - (largeur_texte/2);
    yi = 63 - (hauteur_texte/2);
    imlib_text_draw(xi, yi, jour_char);
    imlib_context_set_color(242,228,174,255);      
    jour++;
    } /* Fin de la première ligne du calendrier */
      
   jour--;  /* OOPS! Compté un de trop */
   /* Compteur en Y */
   for (j = 1; j < 5; j++) {
      /* Compteur en X */
      for (i = 0; i < 7; i++){
         if (jour <= jours_max_mois) { /* On arrête à ~31 */
            sprintf(jour_char, "%d", jour);
      if (argc > count_argv) {
         jour_activite = atoi(argv[count_argv]);
         code_activite = atoi(argv[count_argv+1]);
         printf("jour: %d, code: %d\n", jour_activite, code_activite);
         fflush(0);
         if (jour_activite == jour) {
        /* Hmmm.  Sentiment de DÉJÀ-VU??  Non, ne vous inquitez pas, vous n'êtes
        pas dans la Matrice.  Relaxe.  J'ai seulement recopier le code pour
        accélérer l'exécution.  Je voulais tout mettre dans un pain pour qu'on
        ne perde pas de temps à passer d'une fonction à l'autre -- et je ne
        trust pas assez GCC pour être capable d'optimiser cette partie.  Autant
        le faire à bras.  */
             switch(code_activite) {
               case 1: { imlib_context_set_color(255,186,188,255);
                         break;
                        }
               case 2: { imlib_context_set_color(247,219,178,255);
                         break;
                        }
               case 3: { imlib_context_set_color(109,250,255,255);
                         break;
                        }
               case 4: { imlib_context_set_color(148,255,109,255);
                         break;
                        }
               case 5: { imlib_context_set_color(255,109,255,255);
                         break;
                        }
            } /* Fin de switch */
            fputs("<AREA SHAPE=\"RECT\" COORDS=\"", fp);
            sprintf(buffer, "%d", (41*i)+7);
            fputs(buffer, fp); /* x */
            sprintf(buffer, "%d", (33*j)+47);
            fputs(",", fp);
            fputs(buffer, fp); /* y */
            fputs(",", fp);
            sprintf(buffer, "%d", (41*i)+47);
            fputs(buffer, fp);
            fputs(",", fp);
            sprintf(buffer, "%d", (33*j)+79);
            fputs(buffer, fp);
            fputs("\" HREF=\"index.php?mod=activites&date=", fp);
            sprintf(buffer, "%s-%d-%d", argv[2], mois, jour);
            fputs(buffer, fp);
            switch(code_activite){
               case 1: { fputs("\" ALT=\"Conference\">\n", fp);
                         break;
                       }
               case 2: { fputs("\" ALT=\"Réunion des membres\">\n", fp);
                         break;
                       }
               case 3: { fputs("\" ALT=\"Install-Fest\">\n", fp);
                         break;
                       }
               case 4: { fputs("\" ALT=\"Sortie du GULUS_NEWS\">\n", fp);
                         break;
                       }
               case 5: { fputs("\" ALT=\"Assemblée Générale\">\n", fp);
                         break;
                       }
               }
            sprintf(jour_char, "%d", jour);  /* PATCH */
            count_argv++;
            count_argv++;
         }
      }

         	imlib_get_text_size(jour_char, &largeur_texte, &hauteur_texte);
            xi = (41*i) + 27 - (largeur_texte/2);
            yi = (33*j) + 63 - (hauteur_texte/2);
            imlib_text_draw(xi, yi, jour_char);
         	imlib_context_set_color(242,228,174,255);      
            jour++;
            }
         }
      }

   fputs("</MAP>\n", fp);
   fclose(fp);
   imlib_free_font();
   /* On sauvegarde l'image résultat sur disque */
	imlib_image_set_format("png");
	imlib_save_image("bin/test.png");
   return 1;   
}
/* FICHIERS OUTPUT:
  -----------------
   bin/test.png <-- calendrier du mois demandé
   bin/calendar.map <-- HREF-MAP associé avec ce mois.
*/




See more files for this project here

Gulus

Groupe d\'Utilisateurs de Linux de l\'Universit? de Sherbrooke. http://www.gulus.org/

Project homepage: http://sourceforge.net/projects/gulus
Programming language(s): PHP,Shell Script
License: other

  GULUS_Calendrier.c
  Makefile.am
  Makefile.in