A ked ta zaujima jak taka moja "kravina" vypada v C, tak takto (toto sa vola z nekonecnej slucky az kym nevrati false - dlzka dosiahla maximum, typicky by to znamenalo ze ten kto odstartoval program uz nezije )
const char strBruteCharset[] = "abcdefghijklmnopqrstuvwxyz";
// bruteforce character set length (without terminating null)
#define BRUTE_CHARSET_LEN ((sizeof(strBruteCharset)-1)/sizeof(strBruteCharset[0]))
BOOL CreateNextPass(int *piPassLen, int *piPass, char *strPass)
{
int i;
for(i = (*piPassLen)-1; i >= 0; i--)
{
if(++piPass[i] < BRUTE_CHARSET_LEN)
{
strPass[i] = strBruteCharset[piPass[i]];
break;
}
else
{
piPass[i] = 0;
strPass[i] = strBruteCharset[0];
}
}
if(i<0)
{
if((*piPassLen) >= MAX_PASS_LEN)
return FALSE;
(*piPassLen)++;
for(i=0; i<(*piPassLen); i++)
{
piPass[i] = 0;
strPass[i] = strBruteCharset[0];
}
strPass[i] = '\0';
}
return TRUE;
}
BTW. je to silne optimalizovane na rychlost, a na fakt aby charset mohol byt cokolvek a akokolvek usporiadany. Da sa to este dost zjednodusit, za tym if(i<0) nemusi byt for cyklus, stacilo pridat na koniec jeden znak a zakoncovaciu nulu. A keby som dal namiesto break return, tak sa ani nemuselo testovat if(i<0). Do delphi si to prepis sam :)