Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C/C++] Creazione di un Text Editor

    Ho un piccolo problema , mi servirebbe creare un semplice text editor che leggesse e salvasse (su file / in memoria / o dove zz volete) tot (+ sono meglio è) caratteri inseriti da tastiera.
    Le opzioni sarebbero Esc = uscita / Enter=a capo / Backspace=Cancella.

    Fino alla cancellazione delle righe su una sola schermata ci sono poi.....

    Se avete qualche consiglio, tipo utilizzare altro al posto di una matrice 80X60......

    Ve lo passo pronto per l'esecuzione...

    #include <conio.h>

    void main(void){
    #define Maxrighe 60
    unsigned char v[80][Maxrighe],x=0;
    unsigned int y=0,r=-25;
    for(;y<Maxrighe;y++)
    for(;x<80;x++)
    v[x][y]=0;
    y=0; x=0;
    do{
    if(x==80){x=0;y++;}
    if((y%25==0)&&(x==0)){clrscr(); r+=25;}
    gotoxy(x+1,y+1-r);
    v[x][y]=getch();
    if ((v[x][y]!=27)&&(v[x][y]!=13)&&(v[x][y]!=8)){gotoxy(x+1,y+1-r); putch(v[x][y]); x++;}
    if(v[x][y]==13){y++; x=0;}
    if(v[x][y]==8)
    {
    if (x>0){putch(v[x][y]); v[x][y]=0; x--;}
    else
    {
    if((y>0)&&(y%25!=0))//Se cancello nella stessa schermata
    {
    putch(v[x][y]);
    for(char tem=0;tem<80;tem++)
    v[tem][y]=0;
    y--;
    for(char rd=0;(v[rd][y]!=13)&&(rd<79);rd++);
    x=rd;
    if (x==79){gotoxy(80,y-r);putch(' ');}
    }
    if((y>0)&&(y%25==0))//Se cancello tutta la prima riga di una schermata diversa dalla prima
    {
    clrscr();
    for(unsigned int j=(r-24);j<y;j++)
    for(unsigned char k=0;k<79;k++)
    if (v[k][j]>31){gotoxy(k,j);putch(v[k][j]); x=k;}
    y=24; r-=25;
    }
    }
    }
    }while((v[x][y]!=27)&&(y<Maxrighe));
    }

    //Grazie!
    I produttori sostengono che la causa del prezzo elevato di Cd e Dvd è la pirateria. Una volta debellata la pirateria i prezzi duplicheranno in quanto non si potrà più piratare.

    W WinVista & Palladium & TCPA & Chip Fritz & MIPS 0.18um Made in China!

  2. #2
    Anche io sto 'creando' un editor ma è un pò particolare e
    dedicato esclusivamente per file CNC.

    Mmmh.. La memorizzazione in una matrice bidimensinale tipo quella da te usata :
    codice:
    v[80][Maxrighe]
    Non mi sembra adatta allo scopo...
    Così facendo sicuramente allochi o troppa memoria o troppo poca...
    Dovresti usare un buffer monodimensionale
    codice:
    v[65536];
    Crei una funzione che visualizza il buffer e che accetti come
    parametri :
    1) Un riferimento al buffer
    2) La riga iniziale da visualizzare
    3) la coordinata X del cursore sullo schermo
    4) la coordinata Y del cursore sullo schermo
    In questa fuzione devi 'contare' tutti i ritorno a capo che
    trovi nel buffer fino al valore "riga iniziale' e da qui
    inizi a stampare a video fino alla fine del file o al
    raggiungumento del limite inferiore dello schermo.
    Prina di stampare la riga di testo corrente, usa un
    'delline()' per cancellare l'eventuale testo già presente.
    e per ultimo posizioni il cursore con un gotoxy().

    Naturalmente in una funzione principale (o nel main) devi
    gestirti l'input da parte dell'utente, che ad ogni tasto
    digitato genera una chiamata alla funzione di visualizzazione.
    In essa devi calcolare la posizione nel buffer del cursore,
    è dove inserirai/cancellerai i caratteri, con dei cicli
    for che spostino di una posizione in avanti o indietro tutta
    la parte restante del buffer (insert & backspace).
    Inoltre dovrai gestire i tasti 'pag Su' & 'pag Giù' i
    'tasti cursore' etcc..
    E ricordati salvare nel buffer anche i caratteri speciali cone tabulatori e ritorno a capo.

    Altro non mi viene in mente per ora

    Buon lavoro e tienici informati sui progressi
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  3. #3

    Nuove soluzioni

    Sto provando una memorizzazione dei dati in memoria dinamica..
    Dopo, oltre a questi problemi, mi ritorneranno tutti gli altri!!!

    Ecco i miei non progressi....

    #include <stdio.h>
    #include <conio.h>
    #include <alloc.h>

    struct nodo{unsigned char v; struct nodo *next;};
    typedef struct nodo Nodo;
    unsigned int no8=0,noc=1;

    void stampa(Nodo *l,char);
    Nodo *elimina(Nodo *l);

    Nodo *elimina(Nodo *l){ //Non funziona!!!!
    Nodo *ll,*lll;
    ll=l;
    do{
    printf("\nnoc %d",noc);
    printf("\nno8 %d",no8);
    printf("\nl %d v %d",l,l->v);
    ll=ll->next;
    printf("\nll %d v %d",ll,ll->v); //elem 2-3-4
    lll=ll->next; //elem 3-4-5
    printf("\nlll %d v %d",lll,lll->v);
    getch();
    if ((lll->v)==8)
    {no8--;
    ll=lll;
    noc-=2; //Errore nell'assegnamento di indirizzi!!!!
    }
    }while(no8>0);
    l=ll;
    return l;
    }

    void stampa_lista(Nodo *l,char ctr){
    printf("\n\n%d)",ctr);
    while(l!=NULL){
    printf("%d ",l->v);
    l=l->next;
    }
    }

    int main(){
    Nodo *p,*l;
    printf("Inserisci X caratteri, Esc per teriminare\n");
    p=(Nodo *)malloc(sizeof(Nodo));
    do{p->v=getch();}while(((p->v)<31)&&((p->v)!=8)&&((p->v)!=13)&&((p->v)!=27));
    putch(p->v);
    l=p;
    while(((l->v)!=27)&&((p->v)!=27)){
    l->next=(Nodo *)malloc(sizeof(Nodo));
    l=l->next;
    do{
    l->v=getch();
    }while(((p->v)<31)&&((p->v)!=8)&&((p->v)!=13)&&((p->v)!=27)&&(!(((p->v)==8)&&(noc<1))));
    if ((l->v)==13) putch(254);
    else if((l->v)!=27) putch(l->v); else noc--;
    if((l->v)==8){noc--; no8++;} else noc++;
    }
    l->next=NULL;
    p=elimina(p);
    stampa_lista(p,1);
    return 0;
    }
    I produttori sostengono che la causa del prezzo elevato di Cd e Dvd è la pirateria. Una volta debellata la pirateria i prezzi duplicheranno in quanto non si potrà più piratare.

    W WinVista & Palladium & TCPA & Chip Fritz & MIPS 0.18um Made in China!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.