home *** CD-ROM | disk | FTP | other *** search
/ Freelog 8 / Freelog008.iso / Prog / SCROLLS1.C < prev    next >
C/C++ Source or Header  |  2000-02-06  |  2KB  |  75 lines

  1. #include <conio.h>
  2. #include <math.h>
  3. #include "vga.h"
  4.  
  5. #define LG 24
  6. #define HT 25
  7.  
  8. extern int CTx[256],CTy[256]; //Abscisses et ordonnees precalculees
  9. extern unsigned char far *Video; //Pointeur qui pointe sur la memoire video
  10.  
  11. void DetCoordLettre(int car);
  12. void CreatTabLettre(void);
  13.  
  14. unsigned char far Page2[64000]; //Buffer qui va conserver le contenu du fichier font.pcx
  15. unsigned char far Page1[64000]; //Buffer temporaire
  16. unsigned char far Pal[768]; //Buffer qui va conserver la palette de couleur utilisee
  17. unsigned char far Sin[360]; //Table des sinus
  18.  
  19. unsigned char far Texte[]="CECI EST UN SCROLLING TEXTE SINUSOIDAL             ";
  20.  
  21. //Creation d'une table des sinus
  22. void CreateSinTab(void)
  23. {
  24. int i;
  25. for(i=0;i<=360;i++) Sin[i]=8+2*sin(20*i*3.14159265358/180);
  26. }
  27.  
  28. void main(void)
  29. {
  30.   int car;     //Caractere affiche
  31.   int x=0;     //Colonne du graphique en cours de traitement
  32.   int num=0, //Numero du caractere en cours de traitement dans Texte
  33.        lg=0;    //Longueur du texte
  34.  
  35.   int j;
  36.   int rad=0;
  37.  
  38.   InitVGA(); //Initialisation du mode VGA
  39.   LoadPCX("font",Page2,Pal); //Chargement du fichier font.pcx
  40.   SetAllPal(Pal); //Mise en place de la palette de couleur presente dans le fichier font.pcx
  41.  
  42.   CreateSinTab();       //Creation de la table des sinus
  43.   CreatTabLettre();     // Remplissage des tableaux CTx et CTy
  44.  
  45.   while(Texte[lg++]); //Determination du nombre de caractere dans Texte
  46.   lg--;
  47.  
  48.   while(!kbhit()) //Le programme s'arrete si on appuie sur une touche
  49.   {
  50.     car=Texte[num];
  51.     CpyBlk2(2,95,318,HT,0,95,Page1,Page1); //Scrolling de 2 colonnes
  52.     CpyBlk2(CTx[car]+x,CTy[car],2,HT,318,95,Page2,Page1); //On affiche les 2 colonnes suivantes du graphique
  53.  
  54.     VBL; //Cette fonction permet de ralentir ce programme et d'eviter l'affichage de scintillement sur l'ecran
  55.  
  56. //On affiche a l'ecran le contenu du buffer temporaire en appliquant la fonction sinus sur l'axe des abscisses
  57. for(j=0;j<=HT;j++)
  58. CpyBlk2(0,95+j,312,1,Sin[(rad+2*j)%360],95+j,Page1,Video);
  59.  
  60. //variable incremente dans la boucle principale symbolisant le temps
  61. rad++;
  62. if(rad>=360) rad=0;
  63.  
  64.     if((x+=2)>=LG) //On verifie si on a traite toutes les colonnes du graphique
  65.     {
  66.           x=0;     //On va traiter la premiere colonne du graphique
  67.       num++; //On s'occupe du caractere suivant
  68.     }
  69.  
  70.   if (num>=lg) num=0;
  71.   }
  72.  
  73.   InitTexte(); //On initialise le mode texte
  74. }
  75.