home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Freelog 8
/
Freelog008.iso
/
Prog
/
SCROLLS2.C
< prev
next >
Wrap
C/C++ Source or Header
|
2000-02-06
|
2KB
|
75 lines
#include <conio.h>
#include <math.h>
#include "vga.h"
#define LG 24
#define HT 25
extern int CTx[256],CTy[256]; //Abscisses et ordonnees precalculees
extern unsigned char far *Video; //Pointeur qui pointe sur la memoire video
void DetCoordLettre(int car);
void CreatTabLettre(void);
unsigned char far Page2[64000]; //Buffer qui va conserver le contenu du fichier font.pcx
unsigned char far Page1[64000]; //Buffer temporaire
unsigned char far Pal[768]; //Buffer qui va conserver la palette de couleur utilisee
unsigned char far Sin[360]; //Table des sinus
unsigned char far Texte[]="CECI EST UN SCROLLING TEXTE SINUSOIDAL ";
//Creation d'une table des sinus
void CreateSinTab(void)
{
int i;
for(i=0;i<=360;i++) Sin[i]=20+10*sin(2*i*3.14159265358/180);
}
void main(void)
{
int car; //Caractere affiche
int x=0; //Colonne du graphique en cours de traitement
int num=0, //Numero du caractere en cours de traitement dans Texte
lg=0; //Longueur du texte
int j;
int rad=0;
InitVGA(); //Initialisation du mode VGA
LoadPCX("font",Page2,Pal); //Chargement du fichier font.pcx
SetAllPal(Pal); //Mise en place de la palette de couleur presente dans le fichier font.pcx
CreateSinTab(); // Creation d'une table des sinus
CreatTabLettre(); // Remplissage des tableaux CTx et CTy
while(Texte[lg++]); //Determination du nombre de caractere dans Texte
lg--;
while(!kbhit()) //Le programme s'arrete si on appuie sur une touche
{
car=Texte[num];
CpyBlk2(2,95,318,HT,0,95,Page1,Page1); //Scrolling de 2 colonnes
CpyBlk2(CTx[car]+x,CTy[car],2,HT,318,95,Page2,Page1); //On affiche les 2 colonnes suivantes du graphique
VBL; //Cette fonction permet de ralentir ce programme et d'eviter l'affichage de scintillement sur l'ecran
//On affiche a l'ecran le contenu du buffer temporaire en appliquant la fonction sinus sur l'axe des ordonnees
for(j=0;j<=320;j++)
CpyBlk2(j,95,1,HT,j,75+Sin[(rad+2*j)%360],Page1,Video);
//variable incremente dans la boucle principale symbolisant le temps
rad++;
if(rad>=360) rad=0;
if((x+=2)>=LG) //On verifie si on a traite toutes les colonnes du graphique
{
x=0; //On va traiter la premiere colonne du graphiqu
num++; //On s'occupe du caractere suivant
}
if (num>=lg) num=0;
}
InitTexte(); //On initialise le mode texte
}