[TiLUG] problemi con gcc 4.0.0.1
__vroby__@libero.it
vroby.mail@gmail.com
Gio 10 Maggio 2007 23:36:38 CEST
> A parte i casting (usali, anche se sono noiosi), l'unica incoerenza
> che mi sembra di aver trovato l'ho segnalata
> A posto dei memset io avrei usato un accesso diretto del tipo
> dispstring[displen]=0 al posto di memset(dispstring+displen,0,1).
> Bisogna verificare quale delle due soluzioni sia piu' efficente.
>
mi hai letto nel pensiero. E' stato quello che ho fatto
ecco la rutine modificata ora funziona bene
/*
this was my very old rutines for input used in 1995 on borland tc
turbovision replacement project adapted
on SDLengine
*/
void _input(char *instring,int x, int y,int displen)
{
#define k_delete 127
#define k_up 273
#define k_down 274
#define k_right 275
#define k_left 276
#define k_insert 277
#define k_home 278
#define k_end 279
#define k_pageup 280
#define k_pagedown 281
int i,n;
int p,p1,pdisp;
char provstring[255];
char dispstring[255];
int px;
p=0;
pdisp=0;
strcpy(provstring,instring);
p=strlen(provstring);
provstring[p+1]=0;
if ((p-pdisp)>displen)pdisp=p-displen;
if ((p-pdisp)<0)pdisp=p;
strncpy(dispstring, provstring+pdisp, displen);
locate(x,y);fprints(dispstring);
do{
while (inkey()!=0);
n=0;
while(n==0){
px=(p-pdisp);//*xdf;
locate(x+px,y);
n=inkey();
if (key(k_left)){
n=0;
if(p>0){
p--;
}
while(key(k_left));
break;
} //cleft
if (key(k_right)){
n=0;
if(p<strlen(provstring)){
p++;
}
while(key(k_right));
break;
} //crigth
if (key(k_delete)){
n=0;
if(p<strlen(provstring))memcpy(provstring+p,provstring+p+1,strlen(provstring)-p);
while(key(k_delete));
break;
} //cancel
if (key(k_home)){p=0;n=0;break;}//inizio
if (key(k_end)){p=strlen(provstring);n=0;break;}//fine
}
if (n==13)break;
if (n==8){
n=0;
if (p>0){
for(i=p;i<strlen(provstring)+1;i++)
provstring[i-1]=provstring[i];
p--;
}
}//backdel
if (n==127){
if(p<strlen(provstring)){
for(i=p;i<strlen(provstring);i++)
provstring[i]=provstring[i+1];
}
n=0;
}//delete
if (n!=0 && strlen(provstring)<254){
for(p1=strlen(provstring);p1>=p;p1--)
provstring[p1+1]=provstring[p1];
provstring[p]=n;
p++;
}
if ((p-pdisp)>displen)pdisp=p-displen;
if ((p-pdisp)<0)pdisp=p;
strncpy(dispstring,provstring+pdisp,displen);
locate(x+strlen(dispstring),y);
if(n==0)fprints(" ");
if (n!=0 && stx[c_screen]==0 &&
sty[c_screen]+2>(screenheight()/(PRINT_SIZE)))y--;
i=0;
locate(x,y);
fprints(dispstring);
screenswap();
}
while (n !=13);
strcpy (instring,provstring);
}
//_______________________________________________________________________________________________________________________
grazie cmq aggiungero' i casting
__vroby__
Maggiori informazioni sulla lista
TiLUG