> la funzione doubletrunc e` pericolosa, perche` presuppone che la > scrittura di un double includa sempre il . decimale. Non credo che > questo sia specificato nello standard ANSI. Anzi, se un numero e` molto > grande - fai conto un milione - potresti ottenere qualcosa come 1E6 > o similare. Credo che > sprintf(output, "%.1f\0", value); > faccia esattamente quello che chiedi dalla funzione doubletrunc. Se non > funziona, ed il numero non viene scritto in formato esponenziale, penso > che sia comunque piu` sicuro sostituire la riga > sprintf(output, "%f", value); > nella funzione doubletrunc con > sprintf(output, "%f.0", value); Quello che dici è vero; tuttavia anche io sono convinto che il problema non sia in quella funzione. Sono stato costretto a scrivermi quella funzione poiché z88dk non supporta %f.0 ma solo %f :-( ...comunque la metterò a posto. > Comunque non credo che il problema sia li`, visto che il programma fa > ancora in tempo a scrivere il numero troncato prima di crashare. Darei > un'occhiata alla chiamata bit_fx(6), visto che le linee precedenti pare > funzionare perfettamente, ma nessun suono e` prodotto. Temo anche io e forse ne ho la prova definitiva: ho fatto questo test #include <sound.h> #include <stdio.h> #define N_EFFECTS 7 #define N_TIMES 5 int main() { int i, j; putchar(12); for (i = 0; i <= N_EFFECTS ; i++ ) for (j = 0; j < N_TIMES ; j++) { printf("i=%d, j=%d\n", i, j); bit_fx(i); } } ...e l'ho compklato con zcc +zx -O3 -zorg=36864 -create-app -vn -lndos -lm -o fx2 fx2.c E il risultato è stato incredibile: di tanto in tanto il colore del bordo cambia inaspettatamente. Segno che qualcosa in qualche area di memoria strana è stato modificato dalla funzione bit_fx(int)! Solo che è scritta interamente in LM :-( Il sorgente è qui: http://cvs.sourceforge.net/viewcvs.py/z88dk/z88dk/libsrc/games/bit_fx.asm?rev=1.2&view=log Grazie e ciao, Marcello