remove trailing blank lines in write_file - change check_bound - gramscii - A s… | |
Log | |
Files | |
Refs | |
Tags | |
README | |
LICENSE | |
--- | |
commit 82a7c12e8338288ccb40d213fcc9e15d102aa968 | |
parent 62713aaf65264950aecad9237d50e911d7dad893 | |
Author: KatolaZ <[email protected]> | |
Date: Thu, 1 Aug 2019 16:42:36 +0100 | |
remove trailing blank lines in write_file - change check_bound | |
Diffstat: | |
M draw.c | 33 ++++++++++++++++-------------… | |
M files.c | 14 +++++++++++--- | |
M gramscii.h | 6 ++++-- | |
M lineset.c | 9 +++++++-- | |
M main.c | 2 +- | |
M screen.c | 14 +++++++------- | |
6 files changed, 47 insertions(+), 31 deletions(-) | |
--- | |
diff --git a/draw.c b/draw.c | |
@@ -94,7 +94,7 @@ void get_text(FILE *fc){ | |
if (x >= WIDTH) | |
x = orig_x; | |
} | |
- check_bound(); | |
+ check_bound(&x, &y); | |
status_bar(); | |
show_cursor(); | |
} | |
@@ -150,7 +150,7 @@ void get_box(FILE *fc){ | |
goto update_box; | |
if (!move_around(c, fc)) | |
continue; | |
- check_bound(); | |
+ check_bound(&x, &y); | |
redraw(); | |
step = 1; | |
update_box: | |
@@ -166,19 +166,19 @@ update_box: | |
mode = MOVE; | |
} | |
-void draw_arrow(int x, int y, char *a, int a_len, int fix){ | |
+void draw_arrow(int xl, int yl, char *a, int a_len, int fix){ | |
int i, j, cur_dir; | |
char line; | |
void (*f)(int, int, char); | |
- a_miny = a_maxy = y; | |
+ a_miny = a_maxy = yl; | |
if (fix == FIX) | |
f = set_xy; | |
else | |
f = draw_xy; | |
- f(x,y,mark_st); | |
+ f(xl, yl, mark_st); | |
if (!a_len){ | |
show_cursor(); | |
return; | |
@@ -189,27 +189,28 @@ void draw_arrow(int x, int y, char *a, int a_len, int fix… | |
/* If we are switching between horizontal and vertical… | |
if (((cur_dir & DIR_HOR) && (a[i] & DIR_VER)) || | |
((cur_dir & DIR_VER) && (a[i] & DIR_HOR))){ | |
- f(x,y,corner); | |
+ f(xl, yl, corner); | |
show_cursor(); | |
} | |
} | |
for(j=0; j<a[i+1]; j++){ | |
line = (a[i] & DIR_L) || (a[i] & DIR_R) ? line_h : lin… | |
- x += progr_x(a[i]); | |
- y += progr_y(a[i]); | |
- if (y < a_miny) a_miny = y; | |
- if (y > a_maxy) a_maxy = y; | |
- f(x, y, line); | |
+ xl += progr_x(a[i]); | |
+ yl += progr_y(a[i]); | |
+ check_bound(&xl, &yl); | |
+ if (yl < a_miny) a_miny = yl; | |
+ if (yl > a_maxy) a_maxy = yl; | |
+ f(xl, yl, line); | |
} | |
/* f(x,y,mark_end);*/ | |
cur_dir = a[i]; | |
} | |
if (autoend){ | |
if (cur_dir != DIR_N) | |
- f(x,y, get_mark(cur_dir)); | |
+ f(xl,yl, get_mark(cur_dir)); | |
} | |
else | |
- f(x,y,mark_end); | |
+ f(xl,yl,mark_end); | |
show_cursor(); | |
} | |
@@ -235,7 +236,7 @@ void get_arrow(FILE *fc){ | |
goto update_arrow; | |
if (!move_around(c, fc)) | |
continue; | |
- check_bound(); | |
+ check_bound(&x, &y); | |
/* FIXME: if we are out of bound, do nothing? */ | |
if (arrow_len == arrow_sz){ | |
arrow_sz *=2; | |
@@ -289,7 +290,7 @@ void erase(FILE *fc){ | |
show_cursor(); | |
while((c=fgetc(fc))!=EOF && c!=27 && c!= 'x' && c != '\n'){ | |
if (!move_around(c, fc)) continue; | |
- check_bound(); | |
+ check_bound(&x, &y); | |
if (first || | |
(y != orig_y && ! opened) || | |
(y == orig_y && x != orig_x && !opened) ){ | |
@@ -354,7 +355,7 @@ void visual_box(FILE *fc){ | |
goto vis_exit; | |
break; | |
} | |
- check_bound(); | |
+ check_bound(&x, &y); | |
set_video(VIDEO_NRM); | |
redraw(); | |
step = 1; | |
diff --git a/files.c b/files.c | |
@@ -7,7 +7,7 @@ | |
void write_file(FILE *fc){ | |
FILE *fout; | |
- int i; | |
+ int i, ne; | |
if (!fname[0] || force_new){ | |
get_string(fc, "Write to: ", fname, 255); | |
@@ -23,8 +23,16 @@ void write_file(FILE *fc){ | |
get_key(fc, "Error opening file."); | |
return; | |
} | |
+ ne = 0; | |
for (i=0; i<HEIGHT; i++){ | |
- fprintf(fout, "%s\n", screen.l[i].s); | |
+ if (strlen(screen.l[i].s)){/* remove trailing blank lines */ | |
+ /* put the empty lines preceeding the current non-empt… | |
+ while (ne--) | |
+ fprintf(fout, "\n"); | |
+ fprintf(fout, "%s\n", screen.l[i].s); | |
+ ne = 0; | |
+ } | |
+ else ne++; | |
} | |
fclose(fout); | |
modified = 0; | |
@@ -51,7 +59,7 @@ void load_file(FILE *fc){ | |
if ((fin=fopen(newfname, "r")) != NULL){ | |
i = 0; | |
while((fgets(screen.l[i].s, WIDTH+1, fin)) != NULL && i<HEIGHT… | |
- screen.l[i].lst = strlen(screen.l[i].s) - 1; | |
+ screen.l[i].lst = strlen(screen.l[i].s) - 2; | |
screen.l[i].n = i; | |
screen.l[i].s[strlen(screen.l[i].s)-1]='\0'; | |
i++; | |
diff --git a/gramscii.h b/gramscii.h | |
@@ -82,7 +82,9 @@ typedef struct{ | |
#define progr_x(d) ((d) == DIR_L ? -1 : (d) == DIR_R ? 1 : 0) | |
#define progr_y(d) ((d) == DIR_U ? -1 : (d) == DIR_D ? 1 : 0) | |
-#define DEBUG 1 | |
+/* | |
+ * #define DEBUG 1 | |
+ */ | |
/** global variables **/ | |
@@ -139,7 +141,7 @@ struct termios t1, t2, t3; | |
void reset_styles(); | |
void redraw(); | |
int move_around(char c, FILE *fc); | |
-void check_bound(); | |
+void check_bound(int *x, int *y); | |
void status_bar(); | |
void show_cursor(); | |
void set_cur(char c); | |
diff --git a/lineset.c b/lineset.c | |
@@ -144,13 +144,18 @@ void copy_lines_to_ring(int y1, int y2, int which){ | |
else | |
idx = undo_cur + 1; | |
if (idx >= undo_sz - 1){ | |
- undo_sz += 10; | |
- tmp = realloc(undo, undo_sz * sizeof(lineset_t)); | |
+ tmp = realloc(undo, (undo_sz + 10) * sizeof(lineset_t)); | |
if (tmp == NULL){ | |
fprintf(stderr, "Error allocating undo buffer"); | |
exit(1); | |
} | |
undo = tmp; | |
+ for (i=0; i<10; i++){ | |
+ undo[undo_sz + i].sz = 0; | |
+ undo[undo_sz + i].l = NULL; | |
+ undo[undo_sz + i].num = 0; | |
+ } | |
+ undo_sz += 10; | |
} | |
ensure_num_lines(&(undo[idx]), y2 - y1 + 1); | |
for(i=y1; i<=y2; i++){ | |
diff --git a/main.c b/main.c | |
@@ -135,7 +135,7 @@ void commands(FILE *fc){ | |
break; | |
} | |
} | |
- check_bound(); | |
+ check_bound(&x, &y); | |
status_bar(); | |
show_cursor(); | |
step = 1; | |
diff --git a/screen.c b/screen.c | |
@@ -196,11 +196,11 @@ void erase_screen(){ | |
erase_line(i); | |
} | |
-void check_bound(){ | |
- if (x<0) x=0; | |
- else if (x>=WIDTH) x = WIDTH-1; | |
- if (y<0) y=0; | |
- else if (y>=HEIGHT) y = HEIGHT -1; | |
+void check_bound(int *x, int *y){ | |
+ if (*x<0) *x=0; | |
+ else if (*x>=WIDTH) *x = WIDTH-1; | |
+ if (*y<0) *y=0; | |
+ else if (*y>=HEIGHT) *y = HEIGHT -1; | |
} | |
void reset_styles(){ | |
@@ -242,7 +242,7 @@ void go_to(int where){ | |
y = HEIGHT/2; | |
break; | |
} | |
- check_bound(); | |
+ check_bound(&x, &y); | |
show_cursor(); | |
} | |
@@ -279,7 +279,7 @@ void handle_goto(){ | |
go_to(MIDDLE); | |
break; | |
} | |
- check_bound(); | |
+ check_bound(&x, &y); | |
show_cursor(); | |
} | |