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 Texte[]="CECI EST UN SCROLLING TEXTE VERTICAL ";
void main(void)
{
int x=0; //Ligne des 11 symboles en cours de traitement
int num=0, //Numero du paquet de 11 caracteres en cours de traitement dans Texte
lg=0; //Longueur du texte
int j;
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
CreatTabLettre(); // Remplissage des tableaux CTx et CTy
while(Texte[lg++]); //Determination du nombre de caractere dans Texte
lg--;
//Il faut faire en sorte que lg soit un multiple de 11 pour pouvoir
//afficher correctement les derniers symboles
for(j=0;j<11-lg%11;j++) Texte[lg+j]=' ';
lg=((lg/11)+1)*11;
while(!kbhit()) //Le programme s'arrete si on appuie sur une touche
{
CpyBlk2(17,2,284,198,17,0,Page1,Page1); //Scrolling de 2 lignes
for(j=0;j<11;j++)
CpyBlk2(CTx[Texte[num+j]],CTy[Texte[num+j]]+x,LG,2,17+LG*j,198,Page2,Page1); //On affiche les 2 lignes suivantes des 11 symboles en cours de traitement
VBL; //Cette fonction permet de ralentir ce programme et d'eviter l'affichage de scintillements a l'ecran
CpyBnd(0,200,0,Page1,Video);
if((x+=2)>=HT) //On verifie si on a traite toutes les lignes des 11 symboles
{
x=0; //On va traiter la premiere ligne des 11 symboles