ceckovy kviz

Jan Waclawek konfera na efton.sk
Neděle Září 3 23:00:41 CEST 2023


Mam funkciu

  void LcdBPrint(uint32_t x, uint32_t y, char * s);

ktora vypise retazec na LCD s rozmermi LCD_XMAX, LCD_YMAX na poziciu x, y
pixelov od laveho horneho rohu.

Vypisuje to neproporcionalnym fontom s rozmermi znaku FONT_XSIZE,
FONT_YSIZE. 

Z nejakych dovodov chcem vypisovat retazce zarovnane jeden za druhym; ale
niekedy chcem vypisovat retazce pod seba zarovnane na pravy okraj. To prve
vedie na volania typu:

  LcdBPrint(doteraz_napocitane_znaky_od_laveho_okraja * FONT_XSIZE, riadok
* FONT_YSIZE , retazec);

a to druhe na 

  LcdBPrint(LCD_XMAX - strlen(retazec) * FONT_XSIZE, riadok * FONT_YSIZE,
retazec);
 
Vravim si, takto je to dost neprehladne, a pritom sa tam to nasobenie furt
opakuje. A tiez, tie dve veci su navzajom dostatocne podobne. Tak co keby
ze si napisem makro, do ktoreho bud zadam kladne x, co znamena pocet
znakov od laveho okraja, alebo zaporne x, co znamena pocet znakov od
praveho okraja:

  #define LcdBXPrint(xx, yy, s) LcdBPrint( (((xx) < 0) ? LCD_XMAX : 0) +
(xx) * FONT_XSIZE, (yy) * FONT_YSIZE, s)

Ked pisem zlava, tak mam 

  LcdBXPrint(doteraz_napocitane_znaky_od_laveho_okraja, riadok, retazec);

co je pekne, prehladne, a funguje. Ale ked pisem zlava, tak

  LcdBXPrint(-sizeof(retazec), riadok, retazec);

nefunguje.

Preco?

wek



Další informace o konferenci Hw-list