[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