From 1e95cfef08d2c490ccb2b3d1f91349e9c049a474 Mon Sep 17 00:00:00 2001 From: Andrew Pamment Date: Thu, 27 Apr 2017 18:18:43 +1000 Subject: [PATCH] Experimental Reworked Magiedit --- utils/magiedit/magiedit.ans | 24 + utils/magiedit/magiquote.ans | 24 + utils/magiedit/main.c | 864 ++++++++++++++++------------------- 3 files changed, 452 insertions(+), 460 deletions(-) create mode 100644 utils/magiedit/magiedit.ans create mode 100644 utils/magiedit/magiquote.ans diff --git a/utils/magiedit/magiedit.ans b/utils/magiedit/magiedit.ans new file mode 100644 index 0000000..46cdd43 --- /dev/null +++ b/utils/magiedit/magiedit.ans @@ -0,0 +1,24 @@ +------------------------------------------------------------------------------- + Recipient []Area [] + Subject [] +------------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + +------------------------------------------------------------------[MagiEdit2]-- + Ctrl Q Quote Ctrl X Abort Ctrl Z Save diff --git a/utils/magiedit/magiquote.ans b/utils/magiedit/magiquote.ans new file mode 100644 index 0000000..89463da --- /dev/null +++ b/utils/magiedit/magiquote.ans @@ -0,0 +1,24 @@ +------------------------------------------------------------------------------- + Recipient []Area [] + Subject [] +------------------------------------------------------------------------------- + + + + + + + + + + +---[Quote Window]-------------------------------------------------------------- + + + + + + + +------------------------------------------------------------------[MagiEdit2]-- + Ctrl Q Quote Ctrl X Abort diff --git a/utils/magiedit/main.c b/utils/magiedit/main.c index 0bc9f41..a67fc90 100644 --- a/utils/magiedit/main.c +++ b/utils/magiedit/main.c @@ -46,6 +46,7 @@ char *message_editor() { int redraw; int old_top_of_screen = 0; int stage = 0; + int qq_start; position_x = 0; position_y = 0; body_line_count = 0; @@ -57,19 +58,17 @@ char *message_editor() { while (!done) { od_clr_scr(); od_set_cursor(1, 1); - od_set_color(L_WHITE, D_BLUE); - od_printf(" TO: %-32.32s AREA: %-32.32s", msgto, msgarea); - od_clr_line(); - od_set_cursor(2, 1); - od_printf("SUBJ: %s", msgsubj); - od_clr_line(); - od_set_cursor(24, 1); - od_printf("Enter /S to save, /Q to quote or /A to abort on a new line."); - od_clr_line(); - od_set_cursor(3, 1); - od_set_color(L_WHITE, D_BLACK); + od_send_file("magiedit.ans"); + od_set_color(D_GREY, D_BLACK); + od_set_cursor(2, 13); + od_printf("%-26.26s", msgto); + od_set_cursor(3, 13); + od_printf("%-26.26s", msgsubj); + od_set_cursor(2, 52); + od_printf("%-26.26s", msgarea); + od_set_cursor(5, 1); while (1) { - od_get_input(&ch, OD_NO_TIMEOUT, GETIN_NORMAL); + od_get_input(&ch, OD_NO_TIMEOUT, GETIN_RAWCTRL); if (ch.EventType == EVENT_EXTENDED_KEY) { if (ch.chKeyPress == OD_KEY_UP) { if (position_y > 0) { @@ -88,18 +87,18 @@ char *message_editor() { } if (old_top_of_screen != top_of_screen) { - od_set_cursor(3, 1); + od_set_cursor(5, 1); for (i=top_of_screen;i top_of_screen + 20) { + if (position_y > top_of_screen + 17) { top_of_screen++; } @@ -129,32 +128,32 @@ char *message_editor() { od_set_cursor(3, 1); for (i=top_of_screen;i 0) { position_x--; - od_set_cursor(position_y - top_of_screen + 3, position_x + 1); + od_set_cursor(position_y - top_of_screen + 5, position_x + 1); } } else if (ch.chKeyPress == OD_KEY_RIGHT) { if (position_x < strlen(line)) { position_x++; - od_set_cursor(position_y - top_of_screen + 3, position_x + 1); + od_set_cursor(position_y - top_of_screen + 5, position_x + 1); } } } else if (ch.EventType == EVENT_CHARACTER) { @@ -165,434 +164,181 @@ char *message_editor() { stage = 0; continue; } + if (ch.chKeyPress == 27) { // got an escape that i shouldnt have stage = 1; } else if (ch.chKeyPress == '\r' || strlen(line) >= 73) { - if (strcasecmp(line, "/S") == 0) { - // save message - body_len = 0; - for (i=0;i 0) { - for (i=0;i= 73 && ch.chKeyPress != '\r') { + if (position_x == strlen(line)) { + strncat(line, &ch.chKeyPress, 1); + z = 1; + } else { + strncpy(line_cpy, line, position_x); + line_cpy[position_x] = '\0'; + strncat(line_cpy, &ch.chKeyPress, 1); + strcat(line_cpy, &line[position_x]); + memset(line, 0, 81); + strcpy(line, line_cpy); + memset(line_cpy, 0, 81); + z = 0; } - return return_body; - } else if (strcasecmp(line, "/A") == 0) { - // abort message - if (body_line_count > 0) { - for (i=0;i 0) { - redraw = 1; - od_clr_scr(); - od_set_cursor(1, 1); - od_set_color(L_WHITE, D_BLUE); - od_printf("Quoting Message --"); - od_clr_line(); - od_set_cursor(2, 1); - od_printf("Press Enter to Select a line, Q to Quote, A to Abort"); - od_clr_line(); - od_set_cursor(3, 1); - od_set_color(L_WHITE, D_BLACK); - - q_start = 0; - q_position = 0; - q_line_count = 0; - q_done = 0; - q_marker = ' '; - while (!q_done) { - if (redraw) { - for (i=q_start;i0;i--) { + if (line[i] == ' ') { + line[i] = '\0'; + strcpy(line_cpy, &line[i+1]); + if (body_line_count == 0) { + body_lines = (char **)malloc(sizeof(char *)); + } else { + body_lines = (char **)realloc(body_lines, sizeof(char *) * (body_line_count + 1)); } - od_get_input(&ch, OD_NO_TIMEOUT, GETIN_NORMAL); - if (ch.EventType == EVENT_EXTENDED_KEY) { - if (ch.chKeyPress == OD_KEY_UP) { - q_position--; - if (q_position < 0) { - q_position = 0; - } - if (q_position < q_start) { - q_start = q_start - 21; - if (q_start < 0) { - q_start = 0; - } - redraw = 1; - } - - if (!redraw) { - q_marker = ' '; - for (j=0;j= quote_line_count) { - q_position = quote_line_count - 1; - } - - if (q_position >= q_start + 21) { - q_start = q_start + 21; - if (q_start + 21 >= quote_line_count) { - q_start = quote_line_count - 21; - } - redraw = 1; - } - if (!redraw) { - q_marker = ' '; - for (j=0;jposition_y;j--) { + body_lines[j] = body_lines[j-1]; } - } else if (ch.EventType == EVENT_CHARACTER) { - if (ch.chKeyPress == 13) { - q_unquote = 0; - if (q_line_count > 0) { - for (i=0;i 17) { + top_of_screen++; } - } - - } - - } - // restore screen - od_set_color(L_WHITE, D_BLACK); - od_clr_scr(); - od_set_cursor(1, 1); - od_set_color(L_WHITE, D_BLUE); - od_printf(" TO: %-32.32s AREA: %-32.32s", msgto, msgarea); - od_clr_line(); - od_set_cursor(2, 1); - od_printf("SUBJ: %s", msgsubj); - od_clr_line(); - od_set_cursor(24, 1); - od_printf("Enter /S to save, /Q to quote or /A to abort on a new line."); - od_clr_line(); - od_set_cursor(3, 1); - od_set_color(L_WHITE, D_BLACK); - - if (position_y - top_of_screen > 20) { - top_of_screen = position_y - 20; - } - - for (i=top_of_screen;i= 73 && ch.chKeyPress != '\r') { - if (position_x == strlen(line)) { - strncat(line, &ch.chKeyPress, 1); - z = 1; - } else { - strncpy(line_cpy, line, position_x); - line_cpy[position_x] = '\0'; - strncat(line_cpy, &ch.chKeyPress, 1); - strcat(line_cpy, &line[position_x]); - memset(line, 0, 81); - strcpy(line, line_cpy); - memset(line_cpy, 0, 81); - z = 0; - } - - for (i=strlen(line)-1;i>0;i--) { - if (line[i] == ' ') { - line[i] = '\0'; - strcpy(line_cpy, &line[i+1]); - if (body_line_count == 0) { - body_lines = (char **)malloc(sizeof(char *)); + strcpy(line, line_cpy); + memset(line_cpy, 0, 81); + position_x = strlen(line); + } else { + if (strlen(body_lines[position_y]) + strlen(line_cpy) + 1 <= 73) { + strcat(line_cpy, " "); + strcat(line_cpy, body_lines[position_y]); + free(body_lines[position_y]); + body_lines[position_y] = strdup(line_cpy); + memset(line_cpy, 0, 81); + position_x++; } else { - body_lines = (char **)realloc(body_lines, sizeof(char *) * (body_line_count + 1)); - } - if (z == 1) { for (j=body_line_count;j>position_y;j--) { body_lines[j] = body_lines[j-1]; } body_line_count++; - body_lines[j] = strdup(line); + body_lines[j] = strdup(line_cpy); - position_y++; - if (position_y - top_of_screen > 20) { - top_of_screen++; - } - - strcpy(line, line_cpy); memset(line_cpy, 0, 81); - position_x = strlen(line); - } else { - if (strlen(body_lines[position_y]) + strlen(line_cpy) + 1 <= 73) { - strcat(line_cpy, " "); - strcat(line_cpy, body_lines[position_y]); - free(body_lines[position_y]); - body_lines[position_y] = strdup(line_cpy); - memset(line_cpy, 0, 81); - position_x++; - } else { - for (j=body_line_count;j>position_y;j--) { - body_lines[j] = body_lines[j-1]; - } - body_line_count++; - body_lines[j] = strdup(line_cpy); - - memset(line_cpy, 0, 81); - position_x++; - } + position_x++; } - od_set_cursor(position_y - top_of_screen + 3 - 1, 1); - od_printf("%s", body_lines[position_y - 1]); - od_clr_line(); - od_set_cursor(position_y - top_of_screen + 3, 1); - od_printf("%s", line); - od_clr_line(); - break; } - } - if (i==0) { - position_x++; - if (body_line_count == 0) { - body_lines = (char **)malloc(sizeof(char *)); - } else { - body_lines = (char **)realloc(body_lines, sizeof(char *) * (body_line_count + 1)); - } - - for (i=body_line_count;i>position_y;i--) { - body_lines[i] = body_lines[i-1]; - } - body_line_count++; - body_lines[i] = strdup(line); - if (z == 1) { - position_y++; - if (position_y - top_of_screen > 20) { - top_of_screen++; - } - position_x = 0; - } - memset(line, 0, 81); - } - } else { - if (position_x < strlen(line)) { - // insert line - if (body_line_count == 0) { - body_lines = (char **)malloc(sizeof(char *)); - } else { - body_lines = (char **)realloc(body_lines, sizeof(char *) * (body_line_count + 1)); - } - - for (i=body_line_count;i>position_y;i--) { - body_lines[i] = body_lines[i-1]; - } - - body_line_count++; - body_lines[i] = (char *)malloc(sizeof(char) * (position_x + 1)); - strncpy(body_lines[i], line, position_x); - body_lines[i][position_x] = '\0'; - strcpy(line_cpy, &line[position_x]); - memset(line, 0, 81); - strcpy(line, line_cpy); - memset(line_cpy, 0, 81); - - position_y++; - if (position_y - top_of_screen > 20) { - top_of_screen++; - } - position_x = 0; + od_set_cursor(position_y - top_of_screen + 5 - 1, 1); + od_printf("%s", body_lines[position_y - 1]); od_clr_line(); + od_set_cursor(position_y - top_of_screen + 5, 1); + od_printf("%s", line); + od_clr_line(); + break; + } + } + if (i==0) { + position_x++; + if (body_line_count == 0) { + body_lines = (char **)malloc(sizeof(char *)); } else { - if (body_line_count == 0) { - body_lines = (char **)malloc(sizeof(char *)); - } else { - body_lines = (char **)realloc(body_lines, sizeof(char *) * (body_line_count + 1)); - } - - for (i=body_line_count;i>position_y;i--) { - body_lines[i] = body_lines[i-1]; - } - body_line_count++; - body_lines[i] = strdup(line); + body_lines = (char **)realloc(body_lines, sizeof(char *) * (body_line_count + 1)); + } + for (i=body_line_count;i>position_y;i--) { + body_lines[i] = body_lines[i-1]; + } + body_line_count++; + body_lines[i] = strdup(line); + if (z == 1) { position_y++; - if (position_y - top_of_screen > 20) { + if (position_y - top_of_screen > 17) { top_of_screen++; } position_x = 0; - memset(line, 0, 81); } + memset(line, 0, 81); } - - - if (old_top_of_screen != top_of_screen) { - od_set_cursor(3, 1); - - for (i=top_of_screen;iposition_y;i--) { + body_lines[i] = body_lines[i-1]; + } + + body_line_count++; + body_lines[i] = (char *)malloc(sizeof(char) * (position_x + 1)); + strncpy(body_lines[i], line, position_x); + body_lines[i][position_x] = '\0'; + strcpy(line_cpy, &line[position_x]); + memset(line, 0, 81); + strcpy(line, line_cpy); + memset(line_cpy, 0, 81); + + position_y++; + if (position_y - top_of_screen > 17) { + top_of_screen++; + } + position_x = 0; od_clr_line(); - } - old_top_of_screen = top_of_screen; - - if (position_x > 0) { - od_set_cursor(position_y - top_of_screen + 3, position_x); - od_printf("%s", &line[position_x-1]); - od_clr_line(); - } else { - od_set_cursor(position_y - top_of_screen + 3, 1); - od_printf("%s", line); - od_clr_line(); + if (body_line_count == 0) { + body_lines = (char **)malloc(sizeof(char *)); + } else { + body_lines = (char **)realloc(body_lines, sizeof(char *) * (body_line_count + 1)); + } + + for (i=body_line_count;i>position_y;i--) { + body_lines[i] = body_lines[i-1]; + } + body_line_count++; + body_lines[i] = strdup(line); + + position_y++; + if (position_y - top_of_screen > 17) { + top_of_screen++; + } + position_x = 0; + memset(line, 0, 81); } - for (i=position_y;i 0) { + od_set_cursor(position_y - top_of_screen + 5, position_x); + od_printf("%s", &line[position_x-1]); + od_clr_line(); + + } else { + od_set_cursor(position_y - top_of_screen + 5, 1); + od_printf("%s", line); + od_clr_line(); } + for (i=position_y;i 0) { + // Quote + od_clr_scr(); + od_set_cursor(1, 1); + od_send_file("magiquote.ans"); + od_set_color(D_GREY, D_BLACK); + od_set_cursor(2, 13); + od_printf("%-26.26s", msgto); + od_set_cursor(3, 13); + od_printf("%-26.26s", msgsubj); + od_set_cursor(2, 52); + od_printf("%-26.26s", msgarea); + od_set_cursor(5, 1); + + q_start = 0; + q_position = 0; + q_line_count = 0; + q_done = 0; + redraw = 1; + qq_start = 0; + + if (strlen(line) > 0) { + + if (body_line_count == 0) { + body_lines = (char **)malloc(sizeof(char *)); + } else { + body_lines = (char **)realloc(body_lines, sizeof(char *) * (body_line_count + 1)); + } + + for (i=body_line_count;i>position_y;i--) { + body_lines[i] = body_lines[i-1]; + } + body_line_count++; + body_lines[i] = strdup(line); + + position_y++; + } + // do quoting... + while (!q_done) { + if (redraw) { + if (q_line_count - 9 < 0) { + qq_start = 0; + } else { + qq_start = q_line_count - 9; + } + od_set_color(D_GREY, D_BLACK); + for (i=qq_start;i= quote_line_count) { + q_position = quote_line_count - 1; + } + + if (q_position >= q_start + 7) { + q_start = q_start + 7; + if (q_start + 7 >= quote_line_count) { + q_start = quote_line_count - 7; + } + redraw = 1; + } + if (!redraw) { + od_set_cursor(q_position - q_start + 16, 1); + od_set_color(D_BLACK, D_GREEN); + od_printf("%s", quote_lines[q_position]); + od_clr_line(); + od_set_cursor(q_position - 1 - q_start + 16, 1); + od_set_color(D_BLACK, D_GREEN); + od_printf("%s", quote_lines[q_position - 1]); + od_clr_line(); + } + } + } else { + if (ch.chKeyPress == 17) { + // do quote + for (i=0;iposition_y;j--) { + body_lines[j] = body_lines[j-1]; + } + + body_lines[j] = strdup(quote_lines[q_lines[i]]); + position_y++; + body_line_count++; + } + if (q_line_count) { + free(q_lines); + } + position_x = 0; + q_done = 1; + } else if (ch.chKeyPress == 24) { + if (q_line_count) { + free(q_lines); + } + q_done = 1; + } else if (ch.chKeyPress == 13) { + // add line to quote body + if (q_line_count == 0) { + q_lines = (int *)malloc(sizeof(int *)); + } else { + q_lines = (int *)realloc(q_lines, sizeof(int *) * (q_line_count + 1)); + } + + q_lines[q_line_count] = q_position; + q_line_count++; + redraw = 1; + } + } + } + // restore screen + od_clr_scr(); + od_set_cursor(1, 1); + od_send_file("magiedit.ans"); + od_set_color(D_GREY, D_BLACK); + od_set_cursor(2, 13); + od_printf("%-26.26s", msgto); + od_set_cursor(3, 13); + od_printf("%-26.26s", msgsubj); + od_set_cursor(2, 52); + od_printf("%-26.26s", msgarea); + od_set_cursor(5, 1); + + + + if (position_y - top_of_screen > 17) { + top_of_screen = position_y - 17; + } + + for (i=top_of_screen;i 0) { + for (i=0;i 0) { + for (i=0;i= strlen(line)) { strncat(line, &ch.chKeyPress, 1); @@ -631,53 +611,15 @@ char *message_editor() { } if (position_x > 0) { - od_set_cursor(position_y - top_of_screen + 3, position_x); + od_set_cursor(position_y - top_of_screen + 5, position_x); od_printf("%s", &line[position_x-1]); od_clr_line(); } else { - od_set_cursor(position_y - top_of_screen + 3, 1); + od_set_cursor(position_y - top_of_screen + 5, 1); od_printf("%s", line); od_clr_line(); } - od_set_cursor(position_y - top_of_screen + 3, position_x + 1); -/* - if (position_x > 1) { - if (position_y > 20) { - od_set_cursor(23, position_x - 1); - od_clr_line(); - } else { - od_set_cursor(position_y + 3, position_x - 1); - od_clr_line(); - } - - for (i = position_x - 2; i < position_x; i++) { - od_printf("%c", line[i]); - } - } else { - if (position_y > 20) { - od_set_cursor(23, 1); - od_clr_line(); - } else { - od_set_cursor(position_y + 3, 1); - od_clr_line(); - } - - for (i = 0; i < position_x; i++) { - od_printf("%c", line[i]); - } - } - if (position_x < strlen(line) ) { - for (i = position_x; i < strlen(line); i++) { - od_printf("%c", line[i]); - } - } - - if (position_y > 20) { - od_set_cursor(23, position_x + 1); - } else { - od_set_cursor(position_y - top_of_screen + 3, position_x + 1); - } - */ + od_set_cursor(position_y - top_of_screen + 5, position_x + 1); } } } @@ -736,6 +678,8 @@ int main(int argc, char **argv) } od_init(); + + od_control_get()->od_page_pausing = FALSE; msgtmp = (char *)malloc(strlen(msgpath) + 8); if (!msgtmp) {