ifix read of command scripts and script-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 0522ef659553292f546fb1f3af43cfd2f4b07bb2 /scm/gramscii/commit/0522ef659553292f546fb1f3af43cfd2f4b07bb2.gph bitreich.org 70
1parent a46183e96042cf751199f0a06d437a599f7f5bf8 /scm/gramscii/commit/a46183e96042cf751199f0a06d437a599f7f5bf8.gph bitreich.org 70
hAuthor: KatolaZ <katolaz@freaknet.org> URL:mailto:katolaz@freaknet.org bitreich.org 70
iDate: Mon, 12 Aug 2019 09:02:50 +0100 Err bitreich.org 70
i Err bitreich.org 70
ifix read of command scripts and script-mode Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M TODO | 2 +- Err bitreich.org 70
i M gramscii.1 | 4 ---- Err bitreich.org 70
i M gramscii.c | 28 ++++++++++++++++++---------- Err bitreich.org 70
i M gramscii.h | 2 +- Err bitreich.org 70
i M lineset.c | 2 +- Err bitreich.org 70
i M screen.c | 34 +++++++++++++++++-------------- Err bitreich.org 70
i Err bitreich.org 70
i6 files changed, 40 insertions(+), 32 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,5 +1,4 @@ Err bitreich.org 70
i + optimize redraws (redraw only the modified rectangle) Err bitreich.org 70
i-- fix bug in reading commands from files 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 - implement ellipse Err bitreich.org 70
i@@ -15,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+* 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
i * read output of command (!) Err bitreich.org 70
1diff --git a/gramscii.1 b/gramscii.1 /scm/gramscii/file/gramscii.1.gph bitreich.org 70
i@@ -575,10 +575,6 @@ would automatically save the screen into "filename". Err bitreich.org 70
i gramscii currently manages only a fixed screen of the same size of the Err bitreich.org 70
i screen where it starts from. This will be changed in a future release to Err bitreich.org 70
i support scrolling and "virtual" screens of any (reasonable) size. Err bitreich.org 70
i-.PP Err bitreich.org 70
i-There is currently a bug with files read before accepting commands: the Err bitreich.org 70
i-result of the commands read from the files is not show immediately, and not Err bitreich.org 70
i-shown correctly. Err bitreich.org 70
i .SH AUTHORS Err bitreich.org 70
i gramscii is written and maintained by Vincenzo "KatolaZ" Nicosia Err bitreich.org 70
i <katolaz@freaknet.org>. You can use, copy, modify, and redistribute Err bitreich.org 70
1diff --git a/gramscii.c b/gramscii.c /scm/gramscii/file/gramscii.c.gph bitreich.org 70
i@@ -35,11 +35,12 @@ char *argv0; Err bitreich.org 70
i Err bitreich.org 70
i void cleanup(int s){ Err bitreich.org 70
i Err bitreich.org 70
i- if (!silent) Err bitreich.org 70
i+ if (!script){ Err bitreich.org 70
i printf("\033[;H\033[2J"); Err bitreich.org 70
i+ tcsetattr(0, TCSANOW, &t1); Err bitreich.org 70
i+ } Err bitreich.org 70
i else Err bitreich.org 70
i dump_lines(screen, stdout); Err bitreich.org 70
i- tcsetattr(0, TCSANOW, &t1); Err bitreich.org 70
i fflush(stdout); Err bitreich.org 70
i exit(s); Err bitreich.org 70
i } Err bitreich.org 70
i@@ -53,11 +54,12 @@ void init(){ Err bitreich.org 70
i signal(SIGTERM, cleanup); Err bitreich.org 70
i signal(SIGQUIT, cleanup); Err bitreich.org 70
i Err bitreich.org 70
i- tcgetattr(0, &t1); Err bitreich.org 70
i- t2 = t1; Err bitreich.org 70
i- t2.c_lflag &= ~(ICANON | ECHO); Err bitreich.org 70
i- tcsetattr(0, TCSANOW, &t2); Err bitreich.org 70
i- Err bitreich.org 70
i+ if (!script){ Err bitreich.org 70
i+ tcgetattr(0, &t1); Err bitreich.org 70
i+ t2 = t1; Err bitreich.org 70
i+ t2.c_lflag &= ~(ICANON | ECHO); Err bitreich.org 70
i+ tcsetattr(0, TCSANOW, &t2); Err bitreich.org 70
i+ } Err bitreich.org 70
i init_screen(); Err bitreich.org 70
i x = 0; Err bitreich.org 70
i y = 0; Err bitreich.org 70
i@@ -72,9 +74,12 @@ void init(){ Err bitreich.org 70
i Err bitreich.org 70
i void commands(FILE *fc){ Err bitreich.org 70
i Err bitreich.org 70
i- char c; Err bitreich.org 70
i+ int c; Err bitreich.org 70
i while((c=fgetc(fc))!=EOF){ Err bitreich.org 70
i if (!change_style(c) && !move_around(c, fc, 1)){ Err bitreich.org 70
i+#ifdef DEBUG Err bitreich.org 70
i+ fprintf(stderr, "got command: %c\n", c); Err bitreich.org 70
i+#endif Err bitreich.org 70
i switch(c){ Err bitreich.org 70
i case 'i': Err bitreich.org 70
i mode = TEXT; Err bitreich.org 70
i@@ -156,7 +161,7 @@ int main(int argc, char *argv[]){ Err bitreich.org 70
i Err bitreich.org 70
i ARGBEGIN { Err bitreich.org 70
i case 's': Err bitreich.org 70
i- silent = 1; Err bitreich.org 70
i+ script = 1; Err bitreich.org 70
i break; Err bitreich.org 70
i case 'h': /* FALLTHROUGH */ Err bitreich.org 70
i default: Err bitreich.org 70
i@@ -171,12 +176,15 @@ int main(int argc, char *argv[]){ Err bitreich.org 70
i } Err bitreich.org 70
i else { Err bitreich.org 70
i commands(fc); Err bitreich.org 70
i+ fflush(fc); Err bitreich.org 70
i fclose(fc); Err bitreich.org 70
i redraw(); Err bitreich.org 70
i } Err bitreich.org 70
i argv++; Err bitreich.org 70
i argc--; Err bitreich.org 70
i } Err bitreich.org 70
i- commands(stdin); Err bitreich.org 70
i+ if (!script) Err bitreich.org 70
i+ commands(stdin); Err bitreich.org 70
i+ cleanup(0); Err bitreich.org 70
i return 0; Err bitreich.org 70
i } Err bitreich.org 70
1diff --git a/gramscii.h b/gramscii.h /scm/gramscii/file/gramscii.h.gph bitreich.org 70
i@@ -129,7 +129,7 @@ char modified; /* set to 1 if screen modified since last save */ Err bitreich.org 70
i char fname[256]; Err bitreich.org 70
i Err bitreich.org 70
i Err bitreich.org 70
i-char silent; /* set to 1 in script-mode */ Err bitreich.org 70
i+char script; /* set to 1 in script-mode */ Err bitreich.org 70
i char autoend; /* set to 1 in auto-arrow mode */ Err bitreich.org 70
i Err bitreich.org 70
i /* Used by draw_arrow to identify the bounding box */ Err bitreich.org 70
1diff --git a/lineset.c b/lineset.c /scm/gramscii/file/lineset.c.gph bitreich.org 70
i@@ -62,7 +62,7 @@ void ensure_num_lines(lineset_t *ls, int n){ Err bitreich.org 70
i void dump_lines(lineset_t ls, FILE *f){ Err bitreich.org 70
i int i; Err bitreich.org 70
i for (i=0; i<ls.num ;i++){ Err bitreich.org 70
i- fprintf(f, "%d:%s\n", i, ls.l[i].s); Err bitreich.org 70
i+ fprintf(f, "%s\n", ls.l[i].s); Err bitreich.org 70
i } Err bitreich.org 70
i fflush(f); Err bitreich.org 70
i } Err bitreich.org 70
1diff --git a/screen.c b/screen.c /scm/gramscii/file/screen.c.gph bitreich.org 70
i@@ -58,7 +58,7 @@ char get_mark(char dir){ Err bitreich.org 70
i Err bitreich.org 70
i void status_bar(){ Err bitreich.org 70
i Err bitreich.org 70
i- if (silent) Err bitreich.org 70
i+ if (script) Err bitreich.org 70
i return; Err bitreich.org 70
i printf("\033[%d;1f\033[7m", HEIGHT+1); Err bitreich.org 70
i printf("%*s", WIDTH-1, ""); Err bitreich.org 70
i@@ -78,7 +78,7 @@ void status_bar(){ Err bitreich.org 70
i Err bitreich.org 70
i char get_key(FILE *fc, char *msg){ Err bitreich.org 70
i Err bitreich.org 70
i- if (silent) Err bitreich.org 70
i+ if (script) Err bitreich.org 70
i return 0; Err bitreich.org 70
i printf("\033[%d;1f\033[7m", HEIGHT+1); Err bitreich.org 70
i printf("%*s", WIDTH, ""); Err bitreich.org 70
i@@ -92,7 +92,7 @@ char get_key(FILE *fc, char *msg){ Err bitreich.org 70
i Err bitreich.org 70
i void get_string(FILE *fc, char *msg, char *s, int sz){ Err bitreich.org 70
i Err bitreich.org 70
i- if (!silent){ Err bitreich.org 70
i+ if (!script){ Err bitreich.org 70
i printf("\033[%d;1f\033[7m", HEIGHT+1); Err bitreich.org 70
i printf("%*s", WIDTH, ""); Err bitreich.org 70
i printf("\033[%d;1f\033[7m", HEIGHT+1); Err bitreich.org 70
i@@ -106,9 +106,10 @@ void get_string(FILE *fc, char *msg, char *s, int sz){ Err bitreich.org 70
i } Err bitreich.org 70
i fgets(s, sz, fc); Err bitreich.org 70
i s[strlen(s)-1] = '\0'; Err bitreich.org 70
i- tcsetattr(0, TCSANOW, &t2); Err bitreich.org 70
i- if (!silent) Err bitreich.org 70
i+ if (!script){ Err bitreich.org 70
i+ tcsetattr(0, TCSANOW, &t2); Err bitreich.org 70
i fflush(stdout); Err bitreich.org 70
i+ } Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i int is_yes(char c){ Err bitreich.org 70
i@@ -119,7 +120,7 @@ int is_yes(char c){ Err bitreich.org 70
i Err bitreich.org 70
i Err bitreich.org 70
i void show_cursor(){ Err bitreich.org 70
i- if (silent) Err bitreich.org 70
i+ if (script) Err bitreich.org 70
i return; Err bitreich.org 70
i printf("\033[%d;%df", y+1, x+1); Err bitreich.org 70
i fflush(stdout); Err bitreich.org 70
i@@ -144,7 +145,7 @@ void set_cur(char c){ Err bitreich.org 70
i Err bitreich.org 70
i void draw_xy(int x, int y, char c){ Err bitreich.org 70
i /* FIXME: check if x and y are valid!!!! */ Err bitreich.org 70
i- if (silent) Err bitreich.org 70
i+ if (script) Err bitreich.org 70
i return; Err bitreich.org 70
i printf("\033[%d;%df",y+1,x+1); Err bitreich.org 70
i putchar(c); Err bitreich.org 70
i@@ -152,7 +153,7 @@ void draw_xy(int x, int y, char c){ Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i void update_current(){ Err bitreich.org 70
i- if (silent) Err bitreich.org 70
i+ if (script) Err bitreich.org 70
i return; Err bitreich.org 70
i printf("\033[%d;%df",y+1,x+1); Err bitreich.org 70
i putchar(screen.l[y].s[x]); Err bitreich.org 70
i@@ -226,7 +227,7 @@ void reset_styles(){ Err bitreich.org 70
i void redraw(){ Err bitreich.org 70
i int i; Err bitreich.org 70
i Err bitreich.org 70
i- if (silent) Err bitreich.org 70
i+ if (script) Err bitreich.org 70
i return; Err bitreich.org 70
i printf("\033[2J\033[1;1H"); Err bitreich.org 70
i for (i=0;i<HEIGHT;i++){ Err bitreich.org 70
i@@ -254,9 +255,9 @@ void go_to(int where){ Err bitreich.org 70
i show_cursor(); Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i-void handle_goto(char global){ Err bitreich.org 70
i+void handle_goto(FILE *fc, char global){ Err bitreich.org 70
i char c; Err bitreich.org 70
i- c=getchar(); Err bitreich.org 70
i+ c=fgetc(fc); Err bitreich.org 70
i switch(c){ Err bitreich.org 70
i case 'h': Err bitreich.org 70
i dir = DIR_L; Err bitreich.org 70
i@@ -348,6 +349,9 @@ int move_around(char c, FILE *fc, char global){ Err bitreich.org 70
i mult += c - '0'; Err bitreich.org 70
i return 0; Err bitreich.org 70
i } Err bitreich.org 70
i+#ifdef DEBUG Err bitreich.org 70
i+ fprintf(stderr, "got char: %c\n", c); Err bitreich.org 70
i+#endif Err bitreich.org 70
i switch(c){ Err bitreich.org 70
i case 27: /* control sequence? */ Err bitreich.org 70
i c = get_escape(fc); Err bitreich.org 70
i@@ -382,11 +386,11 @@ int move_around(char c, FILE *fc, char global){ Err bitreich.org 70
i break; Err bitreich.org 70
i case 'g': Err bitreich.org 70
i #ifdef DEBUG Err bitreich.org 70
i- fprintf(stderr, "before global: step: %d x: %d y: %d\n", step, x, y); Err bitreich.org 70
i+ fprintf(stderr, "before handle_goto: step: %d x: %d y: %d global: %d\n", step, x, y, global); Err bitreich.org 70
i #endif Err bitreich.org 70
i- handle_goto(global); Err bitreich.org 70
i+ handle_goto(fc, global); Err bitreich.org 70
i #ifdef DEBUG Err bitreich.org 70
i- fprintf(stderr, "after global: step: %d x: %d y: %d\n", step, x, y); Err bitreich.org 70
i+ fprintf(stderr, "after handle_goto: step: %d x: %d y: %d global: %d\n", step, x, y, global); Err bitreich.org 70
i #endif Err bitreich.org 70
i break; Err bitreich.org 70
i default: Err bitreich.org 70
i@@ -398,7 +402,7 @@ int move_around(char c, FILE *fc, char global){ Err bitreich.org 70
i Err bitreich.org 70
i Err bitreich.org 70
i void set_video(int v){ Err bitreich.org 70
i- if (silent) Err bitreich.org 70
i+ if (script) Err bitreich.org 70
i return; Err bitreich.org 70
i printf("\033[%dm", v); Err bitreich.org 70
i fflush(stdout); Err bitreich.org 70
.
Response:
text/plain