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 <katolaz@freaknet.org> 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; i<a_len; i+=2){ Err bitreich.org 70
i+ if (i>0) { 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<a[i+1]; j++){ Err bitreich.org 70
i line = (a[i] & DIR_L) || (a[i] & DIR_R) ? line_h : line_v; Err bitreich.org 70
i x += progr_x(a[i]); Err bitreich.org 70
i y += progr_y(a[i]); Err bitreich.org 70
i f(x, y, line); Err bitreich.org 70
i } Err bitreich.org 70
i+ /* f(x,y,mark_end);*/ Err bitreich.org 70
i+ cur_dir = a[i]; Err bitreich.org 70
i } Err bitreich.org 70
i+ f(x,y,mark_end); Err bitreich.org 70
i show_cursor(); Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i@@ -345,7 +366,7 @@ void get_arrow(){ Err bitreich.org 70
i Err bitreich.org 70
i redraw(); Err bitreich.org 70
i step = 1; Err bitreich.org 70
i- //draw_arrow(x,y,NOFIX); Err bitreich.org 70
i+ draw_arrow(x,y, arrow, 0, NOFIX); Err bitreich.org 70
i while((c=getchar())!=EOF && c != 27 && c!= 'a'){ Err bitreich.org 70
i switch(c){ Err bitreich.org 70
i case 'H': step = 5; Err bitreich.org 70
i@@ -417,6 +438,18 @@ void toggle_vline(){ Err bitreich.org 70
i Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i+void toggle_st_mark(){ Err bitreich.org 70
i+ Err bitreich.org 70
i+ cur_start = (cur_start + 1 ) % stmarks_sz; Err bitreich.org 70
i+ mark_st = st_marks[cur_start]; Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+void toggle_end_mark(){ Err bitreich.org 70
i+ Err bitreich.org 70
i+ cur_end = (cur_end+ 1 ) % endmarks_sz; 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 void commands(){ Err bitreich.org 70
i Err bitreich.org 70
i char c; Err bitreich.org 70
i@@ -467,9 +500,15 @@ void commands(){ Err bitreich.org 70
i case '|': Err bitreich.org 70
i toggle_vline(); Err bitreich.org 70
i break; Err bitreich.org 70
i- case '+': Err bitreich.org 70
i+ case '+': Err bitreich.org 70
i toggle_corner(); Err bitreich.org 70
i break; Err bitreich.org 70
i+ case '<': Err bitreich.org 70
i+ toggle_st_mark(); Err bitreich.org 70
i+ break; Err bitreich.org 70
i+ case '>': 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
.
Response:
text/plain