Salve a tutti,
sto realizzando un programma che faccia da convertitore tra numeri greci e numeri arabi decimali.
Per quanto riguarda l'interfaccia grafica e l'immissione dei caratteri tutto torna.
È (solo ) la funzione che deve di fatto convertire a darmi problemi.
Posto il codice:
codice:
GtkWidget *risultato, *testo;
gunichar *a;

int finale = 0;

void calcola()
{
    guint lungh;
    int i;
    gchar *num;
    lungh = GTK_ENTRY(testo)->text_length;
    for(i = lungh-1; i >= 0; i--)
    {
       switch (a[i])
       {
            case 45518: //alfa
                finale += 1;
                break;
            case 45774: //beta
                finale += 2;
                break;
            case 46030: //gamma
                finale += 3;
                break;
            case 46286: //delta
                finale += 4;
                break;
            case 46542: //epsilon
                finale += 5;
                break;
            case 39887: //stigma
                finale += 6;
                break;
            case 46798: //zeta
                finale += 7;
                break;
            case 47054: //eta
                finale += 8;
                break;
            case 47310: //theta
                finale += 9;
                break;
            case 47566: //iota
                finale += 10;
                break;
            case 47822: //kappa
                finale += 20;
                break;
            case 48078: //lambda
                finale += 30;
                break;
            case 48334: //mi
                finale += 40;
                break;
            case 48590: //ni
                finale += 50;
                break;
            case 48846: //xi
                finale += 60;
                break;
            case 49102: //omicron
                finale += 70;
                break;
            case 32975: //pi
                finale += 80;
                break;
            case 39375: //qoppa
                finale += 90;
                break;
            case 33231: //rho
                finale += 100;
                break;
            case 33743: //sigma
                finale += 200;
                break;
            case 33999: //tau
                finale += 300;
                break;
            case 34255: //upsilon
                finale += 400;
                break;
            case 34511: //phi
                finale += 500;
                break;
            case 34767: //chi
                finale += 600;
                break;
            case 35023: //psi
                finale += 700;
                break;
            case 35279: //omega
                finale += 800;
                break;
            case 41: //sampi
                finale += 900;
                break;
        }
    }
    sprintf(num, "%d", finale);
    gtk_label_set_text(risultato,num);
    finale = 0;
}
Quando inserisco un solo carattere nel widget entry, funziona tutto, per esempio inserendo (alpha), la variabile finale restituisce effettivamente 1.
Quando però inserisco più di un carattere, il corrispettivo codice Unicode cambia, a seconda della stringa inserita. Quindi l'alpha non avrà più un valore di 45518.
Per esempio:
input = β (=45774). Risultato finale = 2.
input = ββ (=1815352320 la prima e -1295076658 la seconda). Risultato finale = 0.

Sapete spiegarmi come mai, e, eventualmente, come risolvere?

Ne approfitto anche per chiedere: è possibile, nella funzione g_signal_connect passare più di un argomento alla funzione di callback?

Grazie.
Girildo.