rendered paste body#include<fcntl.h>#include<ncurses.h>#include<stdio.h>#include<stdlib.h>#include<string.h>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;borra<strlen(a)-pos;borra++) *(a+pos+borra)=*(a+pos+borra+1); *(a+pos+borra)='\0'; mpos--; } break; case KEY_LEFT: if(pos>0){ if(x>0) x--; else if(y>0){ y--; x=mx; } pos--; } break; case KEY_RIGHT: if(pos<mpos){ if(x<mx) x++; else if(y<my){ y++; x=mx; } pos++; } break; case KEY_UP: pos-=mx; if(y>0){ if(pos<0){ pos=0; x=0; } y--; } break; case KEY_DOWN: pos+=mx; if(y<my){ if(pos>mpos){ 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<pointers){ *(mem_p+pointeds)=a+pointeds; pos=lnlen(a); *(a+pointeds)='\0'; pointeds++; ESTO ES CUALQUIERA POR ESO LO COMENTE } pointeds=0; do{ if(pointeds<pointers){ if(strcmp(*(mem_p+pointeds),*(mem_p+(pointeds+1)))<0){ swap(*(mem_p+pointeds),*(mem_p+(pointeds+1))); swapped++; } } pointeds++; }while(swapped!=0); printw("\nLa cadena quedo ordenada como \""); for(pointeds=0;pointeds<pointers;pointeds++) printw("%s",*(mem_p+pointeds)); printw("\"\n"); refresh(); endwin(); free(mem_p); free(a); return(0);*/}WINDOW *go_curses(void){ WINDOW *win; win=initscr(); fcntl(0,F_SETFL,O_NONBLOCK); keypad(win,TRUE); clear(); noecho(); cbreak(); refresh(); return(win);}void swap(char *str, char *swp){ char *tmp; tmp=str; str=swp; swp=tmp;}int lnlen(char *str){ int len; for(len=0;str[len]=='\n';len++); return(len);}