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); }
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