ifix arrow pointer -- toggle start and end markers - gramscii - A simple editor for ASCII box-and-arrow charts Err bitreich.org 70 1Log /scm/gramscii/log.gph bitreich.org 70 1Files /scm/gramscii/files.gph bitreich.org 70 1Refs /scm/gramscii/refs.gph bitreich.org 70 1Tags /scm/gramscii/tag bitreich.org 70 1README /scm/gramscii/file/README.md.gph bitreich.org 70 1LICENSE /scm/gramscii/file/COPYING.gph bitreich.org 70 i--- Err bitreich.org 70 1commit a2bf8545d73621de7cfa3a06663d1b94fdc668c4 /scm/gramscii/commit/a2bf8545d73621de7cfa3a06663d1b94fdc668c4.gph bitreich.org 70 1parent 34a0ec991e4985d3ca4719ffc696f681370e14fc /scm/gramscii/commit/34a0ec991e4985d3ca4719ffc696f681370e14fc.gph bitreich.org 70 hAuthor: KatolaZ URL:mailto:katolaz@freaknet.org bitreich.org 70 iDate: Fri, 19 Jul 2019 15:38:14 +0100 Err bitreich.org 70 i Err bitreich.org 70 ifix arrow pointer -- toggle start and end markers Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M TODO | 4 +++- Err bitreich.org 70 i M gramscii.c | 63 +++++++++++++++++++++++++------ Err bitreich.org 70 i Err bitreich.org 70 i2 files changed, 54 insertions(+), 13 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/TODO b/TODO /scm/gramscii/file/TODO.gph bitreich.org 70 i@@ -1,13 +1,15 @@ Err bitreich.org 70 i + optimize redraws (i.e., avoid to redraw if possible) Err bitreich.org 70 i - (?) change cursor shape according to action Err bitreich.org 70 i - save to file Err bitreich.org 70 i-- implement arrow Err bitreich.org 70 i+- implement auto-arrow 'A' (automatic end-char) Err bitreich.org 70 i+- implement delete 'x' or 'd' Err bitreich.org 70 i - manage special chars (DEL/CANC) during text insert Err bitreich.org 70 i (also do not print unmanaged chars!) Err bitreich.org 70 i - load from file Err bitreich.org 70 i - insert file at position Err bitreich.org 70 i - get screen geometry Err bitreich.org 70 i - allow scrolling (both vertical and horizontal) Err bitreich.org 70 i+* implement arrow Err bitreich.org 70 i * set different line styles (done for hl, vl, corner) Err bitreich.org 70 i * add status bar Err bitreich.org 70 i * implement box Err bitreich.org 70 1diff --git a/gramscii.c b/gramscii.c /scm/gramscii/file/gramscii.c.gph bitreich.org 70 i@@ -23,6 +23,8 @@ Err bitreich.org 70 i #define DIR_D 0x04 Err bitreich.org 70 i #define DIR_L 0x08 Err bitreich.org 70 i Err bitreich.org 70 i+#define DIR_HOR (DIR_R | DIR_L) Err bitreich.org 70 i+#define DIR_VER (DIR_D | DIR_U) Err bitreich.org 70 i Err bitreich.org 70 i #define WIDTH 100 Err bitreich.org 70 i #define HEIGHT 25 Err bitreich.org 70 i@@ -54,12 +56,20 @@ char corner; Err bitreich.org 70 i char hlines[] = {"-~=#@._ "}; Err bitreich.org 70 i char vlines[] = {"|H#@:;i "}; Err bitreich.org 70 i char corners[] = {"+'H#@.\""}; Err bitreich.org 70 i+char st_marks[] = {"+o-|<>^v"}; Err bitreich.org 70 i+char end_marks[] = {">+o-|<^v"}; Err bitreich.org 70 i+ Err bitreich.org 70 i int hlines_sz= sizeof(hlines) -1; Err bitreich.org 70 i int vlines_sz= sizeof(vlines) -1; Err bitreich.org 70 i int corners_sz = sizeof(corners) -1; Err bitreich.org 70 i-int cur_hl, cur_vl, cur_corn; Err bitreich.org 70 i+int stmarks_sz = sizeof(st_marks) - 1; Err bitreich.org 70 i+int endmarks_sz = sizeof(st_marks) - 1; Err bitreich.org 70 i+ Err bitreich.org 70 i+int cur_hl, cur_vl, cur_corn, cur_start, cur_end; Err bitreich.org 70 i char line_h; Err bitreich.org 70 i char line_v; Err bitreich.org 70 i+char mark_st; Err bitreich.org 70 i+char mark_end; Err bitreich.org 70 i Err bitreich.org 70 i struct termios t1, t2; Err bitreich.org 70 i Err bitreich.org 70 i@@ -99,8 +109,11 @@ void init_screen(){ Err bitreich.org 70 i cur_corn = 0; Err bitreich.org 70 i corner = corners[0]; Err bitreich.org 70 i cur_hl = cur_vl = 0; Err bitreich.org 70 i+ cur_start = cur_end = 0; Err bitreich.org 70 i line_h = hlines[cur_hl]; Err bitreich.org 70 i line_v = vlines[cur_vl]; Err bitreich.org 70 i+ mark_st = st_marks[cur_start]; Err bitreich.org 70 i+ mark_end = end_marks[cur_end]; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i char* state_str(){ Err bitreich.org 70 i@@ -123,8 +136,8 @@ char* state_str(){ Err bitreich.org 70 i void status_bar(){ Err bitreich.org 70 i Err bitreich.org 70 i printf("\033[%d;1f\033[7m", HEIGHT+1); Err bitreich.org 70 i- printf(" x: %3d y: %3d -- mode: %4s hl: %c vl: %c cn: %c %10s", Err bitreich.org 70 i- x, y, state_str(), line_h, line_v, corner, ""); Err bitreich.org 70 i+ printf(" x: %3d y: %3d -- mode: %4s hl: %c vl: %c cn: %c <: %c >: %c %10s", Err bitreich.org 70 i+ x, y, state_str(), line_h, line_v, corner, mark_st, mark_end, ""); Err bitreich.org 70 i Err bitreich.org 70 i printf("\033[0m"); Err bitreich.org 70 i } Err bitreich.org 70 i@@ -297,12 +310,9 @@ int progr_y(int dir){ Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i-/* FIXME: fix pointer position */ Err bitreich.org 70 i-/* FIXME: set initial and final markers */ Err bitreich.org 70 i-/* FIXME: draw "corner" as first char after change of dir */ Err bitreich.org 70 i void draw_arrow(int x, int y, char *a, int a_len, int fix){ Err bitreich.org 70 i Err bitreich.org 70 i- int i, j; Err bitreich.org 70 i+ int i, j, cur_dir; Err bitreich.org 70 i char line; Err bitreich.org 70 i void (*f)(int, int, char); Err bitreich.org 70 i Err bitreich.org 70 i@@ -312,20 +322,31 @@ void draw_arrow(int x, int y, char *a, int a_len, int fix){ Err bitreich.org 70 i else Err bitreich.org 70 i f = draw_xy; Err bitreich.org 70 i Err bitreich.org 70 i+ f(x,y,mark_st); Err bitreich.org 70 i if (!a_len){ Err bitreich.org 70 i- f(x,y,corner); Err bitreich.org 70 i+ show_cursor(); Err bitreich.org 70 i return; Err bitreich.org 70 i } Err bitreich.org 70 i- line = (a[0] & DIR_L) || (a[0] & DIR_R) ? line_h : line_v; Err bitreich.org 70 i- f(x,y,line); Err bitreich.org 70 i+ cur_dir=DIR_N; Err bitreich.org 70 i for (i=0; i0) { Err bitreich.org 70 i+ /* If we are switching between horizontal and vertical, put a "corner" */ Err bitreich.org 70 i+ if (((cur_dir & DIR_HOR) && (a[i] & DIR_VER)) || Err bitreich.org 70 i+ ((cur_dir & DIR_VER) && (a[i] & DIR_HOR))){ Err bitreich.org 70 i+ f(x,y,corner); Err bitreich.org 70 i+ show_cursor(); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ } Err bitreich.org 70 i for(j=0; j': Err bitreich.org 70 i+ toggle_end_mark(); Err bitreich.org 70 i+ break; Err bitreich.org 70 i case 'Q': Err bitreich.org 70 i case 'q': Err bitreich.org 70 i cleanup(0); Err bitreich.org 70 .