mirror of
https://github.com/bobbimanners/emailler.git
synced 2024-10-01 06:54:52 +00:00
Bug fix to update_after_delete*() routines. Start of support for selection.
This commit is contained in:
parent
5120c43ddd
commit
289b54b96e
38
apps/edit.c
38
apps/edit.c
@ -3,6 +3,8 @@
|
|||||||
// Bobbi July 2020
|
// Bobbi July 2020
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// TODO: Start prototyping selection
|
||||||
|
// TODO: Modify/extend keybindings to be more like Appleworks
|
||||||
// TODO: The code doesn't check for error cases when calling gap buffer
|
// TODO: The code doesn't check for error cases when calling gap buffer
|
||||||
// functions.
|
// functions.
|
||||||
|
|
||||||
@ -35,7 +37,7 @@
|
|||||||
typedef unsigned char uint8_t;
|
typedef unsigned char uint8_t;
|
||||||
typedef unsigned short uint16_t;
|
typedef unsigned short uint16_t;
|
||||||
|
|
||||||
#define BUFSZ 20000 // 65535
|
#define BUFSZ 20000
|
||||||
char gapbuf[BUFSZ];
|
char gapbuf[BUFSZ];
|
||||||
uint16_t gapbegin = 0;
|
uint16_t gapbegin = 0;
|
||||||
uint16_t gapend = BUFSZ - 1;
|
uint16_t gapend = BUFSZ - 1;
|
||||||
@ -47,13 +49,16 @@ char userentry[80];
|
|||||||
|
|
||||||
// Interface to read_char_update_pos()
|
// Interface to read_char_update_pos()
|
||||||
uint8_t do_print;
|
uint8_t do_print;
|
||||||
uint16_t pos;
|
uint16_t pos, startsel, endsel;
|
||||||
uint8_t row, col;
|
uint8_t row, col;
|
||||||
|
|
||||||
uint8_t cursrow, curscol; // Cursor position is kept here by draw_screen()
|
uint8_t cursrow, curscol; // Cursor position is kept here by draw_screen()
|
||||||
|
|
||||||
uint8_t quit_to_email;
|
uint8_t quit_to_email;
|
||||||
|
|
||||||
|
enum selmode {SEL_NONE, SEL_DEL, SEL_MOVE, SEL_COPY};
|
||||||
|
enum selmode mode;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return number of bytes of freespace in gapbuf
|
* Return number of bytes of freespace in gapbuf
|
||||||
*/
|
*/
|
||||||
@ -456,8 +461,10 @@ void update_after_delete_char_right(void) {
|
|||||||
while ((pos < BUFSZ) && (row < NROWS))
|
while ((pos < BUFSZ) && (row < NROWS))
|
||||||
read_char_update_pos();
|
read_char_update_pos();
|
||||||
|
|
||||||
|
putchar(CLREOL);
|
||||||
|
|
||||||
// Erase the rest of the screen (if any)
|
// Erase the rest of the screen (if any)
|
||||||
for (i = row; i < NROWS; ++i) {
|
for (i = row + 1; i < NROWS; ++i) {
|
||||||
gotoxy(0, i);
|
gotoxy(0, i);
|
||||||
putchar(CLRLINE);
|
putchar(CLRLINE);
|
||||||
}
|
}
|
||||||
@ -518,8 +525,10 @@ void update_after_delete_char(void) {
|
|||||||
while ((pos < BUFSZ) && (row < NROWS))
|
while ((pos < BUFSZ) && (row < NROWS))
|
||||||
read_char_update_pos();
|
read_char_update_pos();
|
||||||
|
|
||||||
|
putchar(CLREOL);
|
||||||
|
|
||||||
// Erase the rest of the screen (if any)
|
// Erase the rest of the screen (if any)
|
||||||
for (i = row; i < NROWS; ++i) {
|
for (i = row + 1; i < NROWS; ++i) {
|
||||||
gotoxy(0, i);
|
gotoxy(0, i);
|
||||||
putchar(CLRLINE);
|
putchar(CLRLINE);
|
||||||
}
|
}
|
||||||
@ -747,7 +756,8 @@ int edit(char *fname) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
jump_pos(0);
|
jump_pos(0);
|
||||||
pos = 0;
|
pos = startsel = endsel = 0;
|
||||||
|
mode = SEL_NONE;
|
||||||
draw_screen();
|
draw_screen();
|
||||||
while (1) {
|
while (1) {
|
||||||
cursor(1);
|
cursor(1);
|
||||||
@ -776,7 +786,14 @@ int edit(char *fname) {
|
|||||||
show_error(userentry);
|
show_error(userentry);
|
||||||
}
|
}
|
||||||
jump_pos(0);
|
jump_pos(0);
|
||||||
pos = 0;
|
pos = startsel = endsel = 0;
|
||||||
|
mode = SEL_NONE;
|
||||||
|
draw_screen();
|
||||||
|
break;
|
||||||
|
case 0x80 + 'M': // OA-M "Move"
|
||||||
|
case 0x80 + 'm': // OA-m
|
||||||
|
mode = SEL_MOVE;
|
||||||
|
startsel = pos;
|
||||||
draw_screen();
|
draw_screen();
|
||||||
break;
|
break;
|
||||||
case 0x80 + 'N': // OA-N "New"
|
case 0x80 + 'N': // OA-N "New"
|
||||||
@ -785,7 +802,8 @@ int edit(char *fname) {
|
|||||||
gapbegin = 0;
|
gapbegin = 0;
|
||||||
gapend = BUFSZ - 1;
|
gapend = BUFSZ - 1;
|
||||||
jump_pos(0);
|
jump_pos(0);
|
||||||
pos = 0;
|
pos = startsel = endsel = 0;
|
||||||
|
mode = SEL_NONE;
|
||||||
draw_screen();
|
draw_screen();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -841,9 +859,13 @@ int edit(char *fname) {
|
|||||||
case 0x0a: // Down
|
case 0x0a: // Down
|
||||||
cursor_down();
|
cursor_down();
|
||||||
break;
|
break;
|
||||||
|
case EOL: // Return
|
||||||
|
insert_char(c);
|
||||||
|
update_after_insert_char();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
//printf("**%02x**", c);
|
//printf("**%02x**", c);
|
||||||
if ((c >= 0x20) && (c < 0x80) || (c == EOL)) {
|
if ((c >= 0x20) && (c < 0x80)) {
|
||||||
insert_char(c);
|
insert_char(c);
|
||||||
update_after_insert_char();
|
update_after_insert_char();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user