Cr4sh_Dump
(usa Debian)
Enviado em 09/12/2012 - 20:06h
Obrigado consegui entender a logica do que voce falo mais não sei como implementar isso sera que se eu postar o codigo voce possa me ajudar vou le mostrar como ta meu codigo ate agora.
#include <stdio.h>
#include <curses.h>
#define CTRL(c) ((c) & 037)
/*Variavel gobal para definir a posição do cursor com cordenada x, y*/
int row, col;
int main(int argc,char **argv)
{
extern void perror(), exit();
int i, n, l;
int c;
int line = 0;
FILE *fd;
if (argc != 2)
{
fprintf(stderr, "Usage: %s file\n", argv[0]);
exit(1);
}
fd = fopen(argv[1], "r");
if (fd == NULL)
{
perror(argv[1]);
exit(2);
}
initscr();
cbreak();
nonl();
noecho();
idlok(stdscr, TRUE);
keypad(stdscr, TRUE);
/* Ler de dentro do arquivo */
while ((c = getc(fd)) != EOF)
{
if (c == '\n')
line++;
if (line > LINES - 2)
break;
addch(c);
}
fclose(fd);
move(0,0);
refresh();
edit();
/* Escrever no arquivo */
fd = fopen(argv[1], "w");
for (l = 0; l < LINES - 1; l++)
{
n = len(l);
for (i = 0; i < n; i++)
putc(mvinch(l, i) & A_CHARTEXT, fd);
putc('\n', fd);
}
fclose(fd);
endwin();
return 0;
}
len(int lineno)
{
int linelen = COLS - 1;
while (linelen >= 0 && mvinch(lineno, linelen) == ' ')
linelen--;
return linelen + 1;
}
edit()
{
int c;
while(1)
{
move(row, col);
refresh();
c = getch();
/* comandos do editor */
switch (c)
{
/* move o cursor nos quatro sentidos */
case 'h':
case KEY_LEFT:
if (col > 0)
col--;
else
flash();
break;
case 'j':
case KEY_DOWN:
if (row < LINES - 1)
row++;
else
flash();
break;
case 'k':
case KEY_UP:
if (row > 0)
row--;
else
flash();
break;
case 'l':
case KEY_RIGHT:
if (col < COLS - 1)
col++;
else
flash();
break;
/* i:entra em modo de entrada*/
case KEY_IC:
case 'i':
input();
break;
/* x: deleta um carater */
case KEY_DC:
case 'x':
delch();
break;
/* o: cria uma nova linha e entra em modo de entrada */
case KEY_IL:
case 'o':
move(++row, col = 0);
insertln();
input();
break;
/* d: deleta uma linha */
case KEY_DL:
case 'd':
deleteln();
break;
/* ^L: redesenha a tela */
case KEY_CLEAR:
case CTRL('L'):
wrefresh(curscr);
break;
/* w: salva e sai */
case 'w':
return;
/* q: sai sem salvar */
case 'q':
endwin();
exit(2);
default:
flash();
break;
}
}
}
/*
* modo de entrada aceita comando e pode sair dele com ^D or EIC
*/
input()
{
int c;
standout();
mvaddstr(LINES - 1, COLS - 20, "INPUT MODE");
standend();
move(row, col);
refresh();
for (;;)
{
c = getch();
if (c == CTRL('D') || c == KEY_EIC)
break;
insch(c);
move(row, ++col);
refresh();
}
move(LINES - 1, COLS - 20);
clrtoeol();
move(row, col);
refresh();
}
Acredito que me dando mais uma força vou conseguir :)