All pastes #11944 Raw Edit

ordenatexto

public c v1 · immutable
#11944 ·published 2005-05-16 23:54 UTC
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);}