Fonctions 13h (1)
Quelques fonctions C et structures C utiles pour le mode 13h.

Librairie : lib_graph_c.zip

Les structures manipulées par les fonctions

Image (ou surface)

struct IMAGE
{
  int x, y ;
  unsigned char far *data ;
} ;


Palette graphique

typedef struct PALETTE
{
  unsigned char red[ 256 ] ;
  unsigned char green[ 256 ] ;
  unsigned char blue[ 256 ] ;
} ;


Fonctions diverses

Attente retour balayage video (fin du dessin en cours)

void Syncronise()
{
  asm
  {
    mov dx,3dah
    boucle:
    in al,dx
    test al,8h
    jz boucle
    ret
  }
}


Attente pendant un instant

void Timer(int clicks)
{
  unsigned int far *clock = (unsigned int far *)0x0000046CL;
  unsigned int now;
  now = *clock;
  while( abs ( *clock - now) < clicks)
  {}
}


Fonctions d'initialisations

Passer en mode 13h

void Mode_13h()
{
  asm
  {
    mov ah, 00h
    mov al, 13h
    int 10h
  }
}


Passer en mode text

void Mode_Text()
{
  asm
  {
    mov ah, 00h
    mov al, 03h
    int 10h
  }
}


Fonctions sur les couleurs et palettes graphiques

Modifier une couleur dans la palette graphique courante

void change_couleur( char Rouge , char Vert , char Bleu , char Numero )
{
  asm
  {
    mov DX, 3C8h
    mov AL, Numero
    out DX, AL
    mov DX, 3C9h
    mov AL, Rouge
    out DX, AL
    mov AL, Vert
    out DX, AL
    mov AL, Bleu
    out DX, AL
  }
}


Definir une palette comme palette graphique courante

void Set_Pal( struct PALETTE *PAL )
{
  int num ;
  for ( num = 0 ; num <= 255 ; num ++ )
    change_couleur( PAL->red[num] , PAL->green[num] , PAL->blue[num] , num ) ;
}


Initialiser une palette (toutes les couleurs seront noir)

void Cls_Pal( struct PALETTE *PAL )
{
  int i ;
  for ( i = 0 ; i <= 255 ; i ++ )
  {
    PAL->red[i] = 0 ;
    PAL->green[i] = 0 ;
    PAL->blue[i] = 0 ;
  }
}


Fondu de couleur entrant (l'image s'affiche doucement)

void fade_in( struct PALETTE *PAL )
{
  int i, j ;
  struct PALETTE pal_tmp ;
  Cls_Pal( &pal_tmp ) ;
  Set_Pal( &pal_tmp ) ;
  for ( i = 0 ; i < 64 ; i ++ )
  {
    for ( j = 0 ; j <= 255 ; j ++ )
    {
      if ( i < PAL->red[j] )
        pal_tmp.red[j] = i ;
      if ( i < PAL->green[j] )
        pal_tmp.green[j] = i ;
      if ( i < PAL->blue[j] )
        pal_tmp.blue[j] = i ;
    }
    Syncronise() ;
    Set_Pal( &pal_tmp ) ;
    Timer( 1 ) ;
  }
}


Fondu de couleur sortant (l'image devient noir)

void fade_out( struct PALETTE *PAL )
{
  int i, j ;
  for ( i = 0 ; i < 64 ; i ++ )
  {
    for ( j = 0 ; j <= 255 ; j ++ )
    {
      if ( PAL->red[j] > 0 )
        PAL->red[j] -- ;
      if ( PAL->green[j] > 0 )
        PAL->green[j] -- ;
      if ( PAL->blue[j] > 0 )
        PAL->blue[j] -- ;
    }
    Syncronise() ;
    Set_Pal( PAL ) ;
    Timer( 1 ) ;
  }
}



Tutoriaux - Fonctions 13h (1) - Photographies, projects informatiques et tutoriaux de programmation.
Chandelier Japonais - Annonce immobilière maison - Sellette occasion - Logiciel de rendez-vous - Velo route occasion - Chat sans inscription - Masque - Pic petrolier