iadd parallelogram mode - 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 a95019dfe0b64ed01051f2f059af7d7756d0dcdb /scm/gramscii/commit/a95019dfe0b64ed01051f2f059af7d7756d0dcdb.gph bitreich.org 70 1parent 257ec5d56fbe0ac65b04ae10bf36dd14e86c95a5 /scm/gramscii/commit/257ec5d56fbe0ac65b04ae10bf36dd14e86c95a5.gph bitreich.org 70 hAuthor: KatolaZ URL:mailto:katolaz@freaknet.org bitreich.org 70 iDate: Wed, 14 Aug 2019 07:59:53 +0100 Err bitreich.org 70 i Err bitreich.org 70 iadd parallelogram mode Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M TODO | 5 +++-- Err bitreich.org 70 i M draw.c | 58 ++++++++++++++++++++++--------- Err bitreich.org 70 i M gramscii.c | 6 +++++- Err bitreich.org 70 i M gramscii.h | 12 +++++++++++- Err bitreich.org 70 i M screen.c | 2 ++ Err bitreich.org 70 i Err bitreich.org 70 i5 files changed, 63 insertions(+), 20 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,10 +1,10 @@ Err bitreich.org 70 i + optimize redraws (redraw only the modified rectangle) Err bitreich.org 70 i+- implement comment (#: ignore everything until the end of the line) Err bitreich.org 70 i - add screen geometry option (-g 25x80?) Err bitreich.org 70 i-- maybe move "text" mode to "t" Err bitreich.org 70 i+- (?)maybe move "text" mode to "t" Err bitreich.org 70 i - implement ellipse Err bitreich.org 70 i - (?) filled box (B) Err bitreich.org 70 i - (?) manage filled box character (as for other styles) Err bitreich.org 70 i-- implement comment (#: ignore until the end of the line) Err bitreich.org 70 i + parse control characters Err bitreich.org 70 i + parse arrows (text-mode will allow movements as well) Err bitreich.org 70 i - (?) implement CTRL+G as abort (aside ESC) Err bitreich.org 70 i@@ -14,6 +14,7 @@ Err bitreich.org 70 i - allow scrolling (both vertical and horizontal) Err bitreich.org 70 i - catch SIGWINCH and react appropriately (after scrolling is Err bitreich.org 70 i enabled) Err bitreich.org 70 i+* implement parallelogram mode (z/Z) Err bitreich.org 70 i * fix bug in reading commands from files Err bitreich.org 70 i * fix bug in visual crop Err bitreich.org 70 i * read file at point Err bitreich.org 70 1diff --git a/draw.c b/draw.c /scm/gramscii/file/draw.c.gph bitreich.org 70 i@@ -143,8 +143,9 @@ void draw_box(int x1, int y1, int fix){ Err bitreich.org 70 i Err bitreich.org 70 i void draw_parallelogram(int x1, int y1, char st, char fix){ Err bitreich.org 70 i int xmin, ymin, xmax, ymax; Err bitreich.org 70 i- int dy; Err bitreich.org 70 i+ int dy, minoff, maxoff, xoff, xincr; Err bitreich.org 70 i int i; Err bitreich.org 70 i+ char lean; Err bitreich.org 70 i void (*f)(int, int, char); Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i@@ -160,27 +161,47 @@ void draw_parallelogram(int x1, int y1, char st, char fix){ Err bitreich.org 70 i } Err bitreich.org 70 i else Err bitreich.org 70 i f = draw_xy; Err bitreich.org 70 i- /*FIXME: INCOMPLETE -- CONTINUE HERE */ Err bitreich.org 70 i- for(i=xmin+1; i<=xmax; i++){ Err bitreich.org 70 i- f(i, ymin, line_h); Err bitreich.org 70 i- f(i, ymax, line_h); Err bitreich.org 70 i+ if (st & BOX_PARR){ Err bitreich.org 70 i+ minoff = dy; Err bitreich.org 70 i+ maxoff = 0; Err bitreich.org 70 i+ lean = '/'; Err bitreich.org 70 i+ xincr = -1; Err bitreich.org 70 i } Err bitreich.org 70 i- for(i=ymin+1; i<=ymax; i++){ Err bitreich.org 70 i- f(xmin, i, line_v); Err bitreich.org 70 i- f(xmax, i, line_v); Err bitreich.org 70 i+ else { Err bitreich.org 70 i+ minoff = 0; Err bitreich.org 70 i+ maxoff = dy; Err bitreich.org 70 i+ lean = '\\'; Err bitreich.org 70 i+ xincr = +1; Err bitreich.org 70 i } Err bitreich.org 70 i- f(xmin, ymin, corner); Err bitreich.org 70 i- f(xmin, ymax, corner); Err bitreich.org 70 i- f(xmax, ymin, corner); Err bitreich.org 70 i- f(xmax, ymax, corner); Err bitreich.org 70 i+ for(i=xmin+1; i<=xmax-dy; i++){ Err bitreich.org 70 i+ f(i+minoff, ymin, line_h); Err bitreich.org 70 i+ f(i+maxoff, ymax, line_h); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i+ for(i=ymin+1, xoff=minoff; i<=ymax; i++, xoff += xincr){ Err bitreich.org 70 i+ f(xmin+(xoff+xincr), i, lean); Err bitreich.org 70 i+ if (minoff) Err bitreich.org 70 i+ f(xmax - (minoff - xoff - xincr), i, lean); Err bitreich.org 70 i+ else Err bitreich.org 70 i+ f(xmax - (maxoff - xoff - xincr), i, lean); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ f(xmin+minoff, ymin, corner); Err bitreich.org 70 i+ f(xmin+maxoff, ymax, corner); Err bitreich.org 70 i+ f(xmax-maxoff, ymin, corner); Err bitreich.org 70 i+ f(xmax-minoff, ymax, corner); Err bitreich.org 70 i if (fix == FIX) Err bitreich.org 70 i copy_lines_to_ring(ymin, ymax, NEW_STATE); Err bitreich.org 70 i show_cursor(); Err bitreich.org 70 i Err bitreich.org 70 i- Err bitreich.org 70 i- Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i+char flip_lean(char st){ Err bitreich.org 70 i+ if (st & BOX_PARR) Err bitreich.org 70 i+ return BOX_PARL; Err bitreich.org 70 i+ else if (st & BOX_PARL) Err bitreich.org 70 i+ return BOX_PARR; Err bitreich.org 70 i+ return st; Err bitreich.org 70 i+} Err bitreich.org 70 i Err bitreich.org 70 i void get_box(FILE *fc, char st){ Err bitreich.org 70 i char c; Err bitreich.org 70 i@@ -189,6 +210,11 @@ void get_box(FILE *fc, char st){ Err bitreich.org 70 i step = 1; Err bitreich.org 70 i draw_box(x,y,NOFIX); Err bitreich.org 70 i while((c=fgetc(fc))!=EOF && c != 27 && c!= 'b' && c != '\n'){ Err bitreich.org 70 i+ if (c == 'Z'){ Err bitreich.org 70 i+ st = flip_lean(st); Err bitreich.org 70 i+ redraw(); Err bitreich.org 70 i+ goto update_box; Err bitreich.org 70 i+ } Err bitreich.org 70 i if (change_style(c)) Err bitreich.org 70 i goto update_box; Err bitreich.org 70 i if (!move_around(c, fc, 1)) Err bitreich.org 70 i@@ -208,8 +234,8 @@ update_box: Err bitreich.org 70 i draw_box(orig_x, orig_y, FIX); Err bitreich.org 70 i modified = 1; Err bitreich.org 70 i } Err bitreich.org 70 i- else if ((st & (BOX_PAR1 | BOX_PAR2)) && (c == 'z' || c == 'Z' || c == '\n')){ Err bitreich.org 70 i- draw_parallelogram(orig_x, orig_y, FIX); Err bitreich.org 70 i+ else if ((st & (BOX_PARR | BOX_PARL)) && (c == 'z' || c == '\n')){ Err bitreich.org 70 i+ draw_parallelogram(orig_x, orig_y, st, FIX); Err bitreich.org 70 i modified = 1; Err bitreich.org 70 i } Err bitreich.org 70 i redraw(); Err bitreich.org 70 1diff --git a/gramscii.c b/gramscii.c /scm/gramscii/file/gramscii.c.gph bitreich.org 70 i@@ -90,7 +90,7 @@ void commands(FILE *fc){ Err bitreich.org 70 i break; Err bitreich.org 70 i case 'b': Err bitreich.org 70 i mode = BOX; Err bitreich.org 70 i- get_box(fc); Err bitreich.org 70 i+ get_box(fc, BOX_RECT); Err bitreich.org 70 i break; Err bitreich.org 70 i case 'A': autoend=1; Err bitreich.org 70 i case 'a': Err bitreich.org 70 i@@ -134,6 +134,10 @@ void commands(FILE *fc){ Err bitreich.org 70 i case 'r': Err bitreich.org 70 i read_file_at(fc, x, y); Err bitreich.org 70 i break; Err bitreich.org 70 i+ case 'z': Err bitreich.org 70 i+ mode = PAR; Err bitreich.org 70 i+ get_box(fc, BOX_PARR); Err bitreich.org 70 i+ break; Err bitreich.org 70 i case 'q': Err bitreich.org 70 i check_modified(fc);/** FALLTHROUGH **/ Err bitreich.org 70 i case 'Q': Err bitreich.org 70 1diff --git a/gramscii.h b/gramscii.h /scm/gramscii/file/gramscii.h.gph bitreich.org 70 i@@ -18,6 +18,7 @@ Err bitreich.org 70 i #define TEXT 0x04 Err bitreich.org 70 i #define DEL 0x08 Err bitreich.org 70 i #define VIS 0x10 Err bitreich.org 70 i+#define PAR 0x20 Err bitreich.org 70 i /**/ Err bitreich.org 70 i Err bitreich.org 70 i /* directions */ Err bitreich.org 70 i@@ -31,6 +32,15 @@ Err bitreich.org 70 i #define DIR_VER (DIR_D | DIR_U) Err bitreich.org 70 i /**/ Err bitreich.org 70 i Err bitreich.org 70 i+/** box style **/ Err bitreich.org 70 i+/* rectangular box */ Err bitreich.org 70 i+#define BOX_RECT 0x00 Err bitreich.org 70 i+/* parallelogram (leaning right) */ Err bitreich.org 70 i+#define BOX_PARR 0x01 Err bitreich.org 70 i+/* parallelogram (leaning left) */ Err bitreich.org 70 i+#define BOX_PARL 0x02 Err bitreich.org 70 i+/**/ Err bitreich.org 70 i+ Err bitreich.org 70 i #define NOFIX 0x0 Err bitreich.org 70 i #define FIX 0x1 Err bitreich.org 70 i Err bitreich.org 70 i@@ -169,7 +179,7 @@ int _isblank(int c); Err bitreich.org 70 i /** drawing-related functions **/ Err bitreich.org 70 i int change_style(char c); Err bitreich.org 70 i void get_text(FILE *fc); Err bitreich.org 70 i-void get_box(FILE *fc); Err bitreich.org 70 i+void get_box(FILE *fc, char st); Err bitreich.org 70 i void get_arrow(FILE *fc); Err bitreich.org 70 i void erase(FILE *fc); Err bitreich.org 70 i void visual_box(FILE *fc); Err bitreich.org 70 1diff --git a/screen.c b/screen.c /scm/gramscii/file/screen.c.gph bitreich.org 70 i@@ -35,6 +35,8 @@ char* mode_str(){ Err bitreich.org 70 i return "del"; Err bitreich.org 70 i case VIS: Err bitreich.org 70 i return "vis"; Err bitreich.org 70 i+ case PAR: Err bitreich.org 70 i+ return "par"; Err bitreich.org 70 i default: Err bitreich.org 70 i return "ERR"; Err bitreich.org 70 i } Err bitreich.org 70 .