Chapitre XXIII : Annexe 1


    Sur cette page, vous pourrez trouver le code source de la librairie utilisée au Chapitre XXIII, écrit d'un seul bloc, plutôt que sous formes de multiples "petits morceaux".
    Voilà ce source. Pour les explications, veuillez consulter le Chapitre XXIII.

#define USE_KERNEL
#include <tigcclib.h>

char _library[]="Librairie de démo TCIlib1";
short _ti92plus, _ti89;


#define tcilib1_version tcilib1__0000
long tcilib1_version = 0b0000000000000001;


#define DrawLineFast tcilib1__0001
void DrawLineFast(short x1, short y1, short x2, short y2, short mode)
{
/* Liste des Arguments :
x1 : coordonnées en X du point de départ.
y1 : coordonnées en Y du point de départ.
x2 : coordonnées en X du point d'arrivée.
y2 : coordonnées en Y du point d'arrivée.
mode : Le mode selon lequel la ligne sera tracée. mode peut prendre pour valeurs : A_NORMAL, A_REVERSE, A_XOR.
*/
  short x = x1, y = y1;
  short dx = abs (x2 - x1), dy = abs (y2 - y1);
  short ystep = (y1 < y2) ? 1 : -1, pystep = 30 * ystep;
  short mov = dx ? 0 : -1;
  unsigned char *ptr = (char*)(void *)LCD_MEM + 30 * y + (x >> 3);
  short mask = 1 << (~x & 7);
  if (x1 < x2)
    while (x != x2 || y != y2)
      {
        if(mode == A_NORMAL)
          *ptr |= mask;
        if(mode == A_REVERSE)
          *ptr &= mask;
        if(mode == A_XOR)
          *ptr ^= mask;
        if (mov < 0) y += ystep, ptr += pystep, mov += dx;
        else
          {
            mov -= dy;
            if (++x & 7) mask >>= 1;
            else ptr++, mask = 0x80;
          }
      }
  else
    while (x != x2 || y != y2)
      {
        if(mode == A_NORMAL)
          *ptr |= mask;
        if(mode == A_REVERSE)
          *ptr &= mask;
        if(mode == A_XOR)
          *ptr ^= mask;
        if (mov < 0) y += ystep, ptr += pystep, mov += dx;
        else
          {
            mov -= dy;
            if (x-- & 7) mask <<= 1;
            else ptr--, mask = 1;
          }
      }
}


#define tcilib1_chaine1 tcilib1__0002
char tcilib1_chaine1[15] = "";


#define InputStrXY tcilib1__0003
void InputStrXY(short x, short y, char *buffer, short maxlen)
{
/* Liste des Arguments :
x : coordonnées en X du point où la demande apparaîtra à l'écran.
y : coordonnées en Y du point où la demande apparaîtra à l'écran.
buffer : la chaîne de caractères où le résultat sera stocké.
maxlen : le nombre maximal de caractères qu'il sera possible d'entrer.
*/
  SCR_STATE ss;
  short key, captured, i=0;
  void CaptureHandler (EVENT *ev)
  {
    if (ev->Type == CM_STRING)
      captured = *(ev->extra.pasteText);
  }
  MoveTo(x, y);
  buffer[0] = 0;
  SaveScrState (&ss);
  do
  {
    MoveTo (ss.CurX, ss.CurY);
    printf ("%s_  ", buffer);
      // Note that two spaces are required if F_4x6 font is used
    key = ngetchx();
    if (key == KEY_CHAR && i < maxlen)
    {
      EVENT ev;
      ev.Type = CM_KEYPRESS;
      ev.extra.Key.Code = key;
      EV_captureEvents (CaptureHandler);
      EV_defaultHandler (&ev);
      EV_captureEvents (NULL);
      buffer[i++] = captured;
    }
    if (key >= ' ' && key <= '~' && i < maxlen) buffer[i++] = key;
    if (key == KEY_BACKSPACE && i) i--;
    buffer[i] = 0;
  }while (key != KEY_ENTER);
}

Retour au Chapitre XXIII

 


Copyright Squale92 & Verstand. Logo et sigle TCI® réservés. Développé pour MS Internet Explorer 5.0 en 1024x768 pixels. Page modifiée le