Poslao: 21 Jan 2012 18:17
|
offline
- morando
- Građanin
- Pridružio: 19 Maj 2011
- Poruke: 297
|
Koliko vidim samo jedna funkcija koristi MENU_TEXT_COLOR (draw_screen_locked). Ako si u mogucnsti da rebuild-ujes celu biblioteku onda bi mogao da menjas boju textu.
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 21 Jan 2012 18:59
|
offline
- savan2
- Građanin
- Pridružio: 15 Jul 2009
- Poruke: 150
|
Ok, hvala ti puno! Ovo mi malo nije ok, mislim da nece bas valjati, sta ti mislis?
MENU_TEXT_COLOR.r = strtoul(buf, &end, 10);
MENU_TEXT_COLOR.g = strtoul(end, &end, 10);
MENU_TEXT_COLOR.b = strtoul(end, 0, 10);
ako je unsigned long int strtoul ( const char * str, char ** endptr, int base );
i ona klasa gore gde si definisao rgb kao bute.
Dali mozda znas koja je funkcija u c ekvivalent funkciji subst u php, trazio sam na netu ne mogu da nadjem neku da moze da zameni substr?
php.net/manual/en/function.substr.php
na primer sta ako user ne napravi dobro txt fajl tj stavi vise razmaka nego sto treba ili ne napravi razmak, kako bi moglo da se uradi na primer neki "trim" pa na primer kao u php sto je php.net/manual/en/function.explode.php pa na primer da proverim dali je ukucao brojeve ili je ukucao slova php.net/manual/en/function.is-numeric.php ...ovaj c je stvarno neverovatno komplikovan jezik
|
|
|
|
Poslao: 21 Jan 2012 19:26
|
offline
- morando
- Građanin
- Pridružio: 19 Maj 2011
- Poruke: 297
|
1. Bice "okrnjen" rezlutat, u textualnom fajlu moras da pazis da ne kucas brojeve koji su manji od 0 ili veci od 255 i to da idu 3 za redom podeljeni jednim space karakterom. Znaci ne bi radilo ovako nesto:
Citat:
deda mraz
0
-55 6841112844
bezveze 18
Na tebi je kako ces da parsujes text i proveravas greske koje su moguce unosom korisnika u taj fajl.
2. Mislim da nema ekvivalentna standardna funkcija (nisam siguran). Morao bi da pravis svoju verziju pomocu recimo strncpy
|
|
|
|
Poslao: 21 Jan 2012 19:35
|
offline
- savan2
- Građanin
- Pridružio: 15 Jul 2009
- Poruke: 150
|
Hehe, hvala ti u svakom slucaju na pokusaju, razumem te sta kazes, i dao si mi ideju kako da to odradim! Dali bi samo hteo da se vratis ovde sa komentarom u vezi dela coda koji cu da pokusam napraviti onako kako sam zamislio, kad ga napravim i napisem ovde? Pokusacu da napravim neke filtere na "user" text
|
|
|
|
|
Poslao: 23 Jan 2012 14:50
|
offline
- savan2
- Građanin
- Pridružio: 15 Jul 2009
- Poruke: 150
|
Hvala za link! Evo nesto sam poceo malo da radim ali i dalje ne kontam bas najbolje kako da to odradim. Na primer nesto na ovaj fazon bi bilo dobro:
char *substr(const char *str, size_t begin, size_t len)
{
if (str == 0 || strlen(str) == 0 || strlen(str) < begin || strlen(str) < (begin+len))
return 0;
return strndup(str + begin, len);
}
char str[] = "0,234,128"; //r,g,b
char keys[] = "\2c"; //zarez u hex formatu
size_t one = 0;
size_t two = 0;
size_t len = strlen(str);
size_t i;
//default colors
char rgb_boja[0][1] = "0";
char rgb_boja[1][3] = "122";
char rgb_boja[2][3] = "255";
if (len)
{
for (i=0; i<len; i++)
{
if (str[i] == keys)
one += 1;
two += i;
rgb_boja[one][two] = str[i];
}
if (rgb_boja[0] != NULL && strtoi(rgb_boja[0]) <= 255) char *r = substr(rgb_boja[0], 0, strlen(rgb_boja[0]));
if (rgb_boja[1] != NULL && strtoi(rgb_boja[1]) <= 255) char *g = substr(rgb_boja[1], 0, strlen(rgb_boja[1]));
if (rgb_boja[2] != NULL && strtoi(rgb_boja[2]) <= 255) char *b = substr(rgb_boja[2], 0, strlen(rgb_boja[2]));
}
Sta mislis?
|
|
|
|
Poslao: 23 Jan 2012 15:30
|
offline
- morando
- Građanin
- Pridružio: 19 Maj 2011
- Poruke: 297
|
1. Ne razumem zasto ti se ne svidja strtoul?
2. Ne znam gde si nasao "strndup" funkciju? Da nisi mislio na "strdup"? U svakom slucaju ja ne bih ni jednu od tih koristio.
Sad hoces sa delimiterom (zapeta)?
Koji kompajler koristis? Mozda bi jednostavno mogao mixovati C++ standardne klase sa C-om kao sto su stringstream, string i regex?
|
|
|
|
Poslao: 23 Jan 2012 15:41
|
offline
- savan2
- Građanin
- Pridružio: 15 Jul 2009
- Poruke: 150
|
Pozz, strndup sam nasao ovde a kompajler je cross kompajler arm-eabi- koji koristim za kompilaciju kernela i nekih android stvari kao na primer ovo sto sam radio za android. Delimiter zarez sam mislio da iskoristim da user stavi txt u formatu 2,244,221 na primer a i da bih mogao da iskoristim to da presecem array u novi
Ne razumem bas najbolje onaj tvoj primer sa strtoul posto si tamo definisao bute umesto *char a i ne razumem onu definiciju za base i vrednost 10 koju si stavio. Nebi da mixujem c++ posto radim u cistom c u kernel sourcu...
|
|
|
|
Poslao: 23 Jan 2012 16:07
|
offline
- morando
- Građanin
- Pridružio: 19 Maj 2011
- Poruke: 297
|
Citat:
Delimiter zarez sam mislio...
Mnogo je lakse sbez zareza.
Ako ovako izgleda iplementacija strndup-a onda treba da obratis paznju jer ta funkcija alocira memoriju sa malloc pa bi trebalo da je oslobodis sa "free" funkcijom kad zavrsis sa tim pokazivacem da ne bi ima "curenje" memorije.
Ceo tvoj kod koji si postavio je pogresan. Izvadicu samo par fragmenata:
//default colors
char rgb_boja[b][0][/b][1] = "0"; // WTF?
char rgb_boja[1][3] = "122";
char rgb_boja[2][3] = "255";
Zasto koristis dvodimenzione nizove?
//ovako
char boje[3][4] = { {"0"}, {"231"}, {"196"} } ; // default boje
...boje[0] //r
...boje[1] //g
...boje[2] //b
// ili ovako
char boja_r[] = "0";
char boja_g[] = "231";
char boja_b[] = "196";
// ili direktno kao sto sam ti gore stavio da
// ne bi dzabe parsovao stringove
typedef struct
{
byte r;
byte g;
byte b;
}RGB_COLOR;
RGB_COLOR color = { 0, 191, 255 };
...
...gr_color(color.r, color.g, color.b);
Definisao sam byte (unsigned char) jer i funkcija gr_color trazi tog tipa parametre?
Citat:
...ne razumem onu definiciju za base i vrednost 10 koju si stavio.
hexadecimalni = baza 16 ( 0, 1, 2... 9, A, B, C, D, E, F)
decimalni = baza 10 ( 0, 1, 2... 9)
binarni = baza 2 (0, 1)
|
|
|
|
Poslao: 23 Jan 2012 16:21
|
offline
- savan2
- Građanin
- Pridružio: 15 Jul 2009
- Poruke: 150
|
Da, unsigned char u gr_color. Ok, pregledacu malo ovo tvoje da malo bolje razumem, mada opet mi je nesigurno, sta ako user ne napravi txt kako treba, dali ce biti "curenje" i dali ce se desiti greska u programu, nebi da program "zakuca" ako nije podesen gr_color prilikom initializacije? Aj samo mi reci dali valja nesto ovako na primer:
char *substr(const char *str, size_t begin, size_t len)
{
if (str == 0 || strlen(str) == 0 || strlen(str) < begin || strlen(str) < (begin+len))
return 0;
return strndup(str + begin, len);
}
char str[] = "0,234,128"; //r,g,b ovo sam stavio bezveze, mada ovo ce biti iz fajla!
char keys[] = "\2c"; //zarez u hex formatu
size_t one = 0;
size_t two = 0;
size_t len = strlen(str);
size_t i;
char rgb_boja[3][4];
char *r = (char *)malloc(3);
char *g = (char *)malloc(3);
char *b = (char *)malloc(3);
if (len)
{
for (i=0; i<len; i++)
{
if (str[i] == keys)
one += 1;
two += i;
rgb_boja[one][two] = str[i];
}
if (rgb_boja[0] != NULL && strtoi(rgb_boja[0]) <= 255)
r = substr(rgb_boja[0], 0, strlen(rgb_boja[0]));
else
r = "0";
if (rgb_boja[1] != NULL && strtoi(rgb_boja[1]) <= 255)
g = substr(rgb_boja[1], 0, strlen(rgb_boja[1]));
else
g = "122";
if (rgb_boja[2] != NULL && strtoi(rgb_boja[2]) <= 255)
b = substr(rgb_boja[2], 0, strlen(rgb_boja[2]));
else
b = "255";
}
free(rgb_boja);
|
|
|
|