#include #include #include #include #include WINDOW *go_curses(void); void swap(char *str, char *swp); int lnlen(char *str); int main(void){ char *a,**mem_p; int pos=0,mpos=0,pointers=0,pointeds=0,x,y,mx,my,borra; unsigned int swapped=0,bytes=100; WINDOW *window; window=go_curses(); printw("Escriba un texto y presione CTRL+D\n\n"); refresh(); a=(char *)malloc(bytes*sizeof(char)); if(a==NULL){ printw("error: no se pudo reservar memoria\n"); refresh(); endwin(); return(0); } do{ *(a+pos)=(char)getch(); if(*(a+pos)!=-1){ if(pos>mpos) mpos=pos; if(*(a+pos)!=0x04){ getyx(window,y,x); getmaxyx(window,my,mx); mx--;my--; switch(*(a+pos)){ case 0x07: if(pos>0){ if(*(a+pos-1)=='\n'){ y--; } else if(x==0&&y!=0){ y--; x=mx; } else x--; pos--; for(borra=0;borra0){ if(x>0) x--; else if(y>0){ y--; x=mx; } pos--; } break; case KEY_RIGHT: if(pos0){ if(pos<0){ pos=0; x=0; } y--; } break; case KEY_DOWN: pos+=mx; if(ympos){ pos=mpos; x=mx; } y++; } break; default: if(*(a+pos)=='\n'){ pointers++; y++; x=0; } printw("%c",*(a+pos)); pos++; x++; if(pos%100==0&&pos+100>=bytes/100){ bytes+=100; a=(char*)realloc(a,bytes); if(a==NULL){ printw("error: no se pudo\ reservar memoria!\n"); free(a); endwin(); return(0); } } break; } move(y,x); if(*(a+pos)==0x07) delch(); } } refresh(); }while(*(a+pos)!=0x04); printw("\n"); refresh(); /* mem_p=(char**)malloc(pointers*sizeof(char)); pos=0; while(pointeds