diff options
author | KatolaZ <katolaz@freaknet.org> | 2019-07-19 18:03:29 +0100 |
---|---|---|
committer | KatolaZ <katolaz@freaknet.org> | 2019-07-19 18:03:29 +0100 |
commit | 52a48d7718c6467da380a51f49327323e15e00c7 (patch) | |
tree | 277bcad9c7160cb4fa752979ab5903459813a56d /gramscii.c | |
parent | a2bf8545d73621de7cfa3a06663d1b94fdc668c4 (diff) |
save to file works
Diffstat (limited to 'gramscii.c')
-rw-r--r-- | gramscii.c | 110 |
1 files changed, 91 insertions, 19 deletions
@@ -41,6 +41,10 @@ #define ARR_D 'v' +#define HOME 0x01 +#define END 0x02 +#define MIDDLE 0x04 + #define MIN(x,y) (x) < (y) ? (x) : (y) #define MAX(x,y) (x) > (y) ? (x) : (y) @@ -71,7 +75,7 @@ char line_v; char mark_st; char mark_end; -struct termios t1, t2; +struct termios t1, t2, t3; void cleanup(int s){ @@ -245,6 +249,13 @@ void draw_box(int x1, int y1, int fix){ } +void move_around(char c){ + + + +} + + void get_box(){ char c; int orig_x=x, orig_y=y; @@ -285,28 +296,12 @@ void get_box(){ int progr_x(int dir){ - switch(dir){ - case DIR_L: - return -1; - case DIR_R: - return +1; - default: - return 0; - } - return 0; + return dir == DIR_L ? -1 : dir == DIR_R ? 1: 0; } int progr_y(int dir){ - switch(dir){ - case DIR_D: - return +1; - case DIR_U: - return -1; - default: - return 0; - } - return 0; + return dir == DIR_U ? -1 : dir == DIR_D ? 1: 0; } @@ -412,9 +407,58 @@ void get_arrow(){ state = MOVE; } +char get_key(char *s){ + + printf("\033[%d;1f\033[7m", HEIGHT+1); + printf("%100s", " "); + printf("\033[%d;1f\033[7m", HEIGHT+1); + printf("%s ", s); + printf("\033[0m"); + return getchar(); +} + +void get_string(char *s, int sz){ + + printf("\033[%d;1f\033[7m", HEIGHT+1); + printf("%100s", " "); + printf("\033[%d;1f\033[7m", HEIGHT+1); + /* We must activate echo now */ + t3 = t2; + t3.c_lflag |= (ECHO | ICANON); + tcsetattr(0, TCSANOW, &t3); + printf("Write to: "); + printf("\033[0m"); + fgets(s, sz, stdin); + s[strlen(s)-1] = '\0'; + tcsetattr(0, TCSANOW, &t2); +} + +int is_yes(char c){ + return c=='y' ? 1 : c == 'Y'? 1 : 0; +} + void write_file(){ char fname[256]; FILE *f; + int i; + + get_string(fname, 255); + if (f=fopen(fname, "r")){ + if (!is_yes(get_key("File exists. Overwrite [y/N]?")) ){ + fclose(f); + return; + } + fclose(f); + } + if((f=fopen(fname, "w"))==NULL){ + get_key("Error opening file."); + return; + } + for (i=0; i<HEIGHT; i++){ + fprintf(f, "%s\n", screen[i]); + } + fclose(f); + get_key("File saved."); } void toggle_hline(){ @@ -450,6 +494,25 @@ void toggle_end_mark(){ mark_end = end_marks[cur_end]; } +void go_to(int where){ + switch(where){ + case HOME: + x = y = 0; + break; + case END: + x = WIDTH-1; + y = HEIGHT-1; + break; + case MIDDLE: + x = WIDTH/2; + y = HEIGHT/2; + break; + } + check_bound(); + show_cursor(); +} + + void commands(){ char c; @@ -494,6 +557,15 @@ void commands(){ case 'w': write_file(); break; + case 'g': + go_to(HOME); + break; + case 'G': + go_to(END); + break; + case 'm': + go_to(MIDDLE); + break; case '-': toggle_hline(); break; |