gramscii.h - gramscii - A simple editor for ASCII box-and-arrow charts | |
Log | |
Files | |
Refs | |
Tags | |
README | |
LICENSE | |
--- | |
gramscii.h (3758B) | |
--- | |
1 #ifndef __GRAMSCII_H__ | |
2 #define __GRAMSCII_H__ | |
3 | |
4 #define _POSIX_C_SOURCE 200112L | |
5 | |
6 #include <stdio.h> | |
7 #include <termios.h> | |
8 #include <unistd.h> | |
9 | |
10 | |
11 | |
12 /** constants **/ | |
13 | |
14 /* modes */ | |
15 #define MOVE 0x00 | |
16 #define BOX 0x01 | |
17 #define ARROW 0x02 | |
18 #define TEXT 0x04 | |
19 #define DEL 0x08 | |
20 #define VIS 0x10 | |
21 #define PAR 0x20 | |
22 #define REM 0x40 | |
23 #define TRP 0x80 | |
24 /**/ | |
25 | |
26 /* directions */ | |
27 #define DIR_N 0x00 | |
28 #define DIR_R 0x01 | |
29 #define DIR_U 0x02 | |
30 #define DIR_D 0x04 | |
31 #define DIR_L 0x08 | |
32 | |
33 #define DIR_HOR (DIR_R | DIR_L) | |
34 #define DIR_VER (DIR_D | DIR_U) | |
35 /**/ | |
36 | |
37 /** box style **/ | |
38 /* rectangular box */ | |
39 #define BOX_RECT 0x00 | |
40 /* parallelograms */ | |
41 #define BOX_PAR 0x10 | |
42 /* parallelogram (leaning right) */ | |
43 #define BOX_PARR 0x11 | |
44 /* parallelogram (leaning left) */ | |
45 #define BOX_PARL 0x12 | |
46 /* trapezium */ | |
47 #define BOX_TRAP 0x20 | |
48 #define BOX_TRAP_U 0x24 | |
49 #define BOX_TRAP_D 0x28 | |
50 #define BOX_TRAP_R 0x21 | |
51 #define BOX_TRAP_C 0x22 | |
52 #define BOX_TRAP_L 0x23 | |
53 #define BOX_TRAP_UR 0x25 | |
54 #define BOX_TRAP_UC 0x26 | |
55 #define BOX_TRAP_UL 0x27 | |
56 #define BOX_TRAP_DL 0x29 | |
57 #define BOX_TRAP_DC 0x2a | |
58 #define BOX_TRAP_DR 0x2b | |
59 #define STYLE_IS(x, y) (((x) & (y) ) == y) | |
60 /**/ | |
61 | |
62 #define NOFIX 0x0 | |
63 #define FIX 0x1 | |
64 | |
65 /* markers */ | |
66 #define BG ' ' | |
67 #define PTR '+' | |
68 #define UND '_' | |
69 #define ARR_L '<' | |
70 #define ARR_R '>' | |
71 #define ARR_U '^' | |
72 #define ARR_D 'v' | |
73 /**/ | |
74 | |
75 /* global positions */ | |
76 #define HOME 0x01 | |
77 #define END 0x02 | |
78 #define MIDDLE 0x04 | |
79 /**/ | |
80 | |
81 /* video modes */ | |
82 #define VIDEO_NRM 0 | |
83 #define VIDEO_REV 7 | |
84 /**/ | |
85 | |
86 /* undo buffer elem types */ | |
87 #define PRV_STATE 0x01 | |
88 #define NEW_STATE 0x02 | |
89 /**/ | |
90 | |
91 /* file types */ | |
92 #define FFILE 0x01 | |
93 #define FPIPE 0x02 | |
94 | |
95 /** types **/ | |
96 | |
97 typedef struct{ | |
98 int sz;/* allocated size */ | |
99 int n;/* line number */ | |
100 int lst;/* last visible char (before the first \0) */ | |
101 char *s; | |
102 } line_t; | |
103 | |
104 typedef struct{ | |
105 int sz;/* allocated size */ | |
106 int num;/* number of lines stored */ | |
107 line_t *l; | |
108 } lineset_t; | |
109 | |
110 typedef struct{ | |
111 int x; | |
112 int y; | |
113 } pos_t; | |
114 | |
115 | |
116 /** MACROS **/ | |
117 | |
118 #define MIN(x,y) (x) < (y) ? (x) : (y) | |
119 #define MAX(x,y) (x) > (y) ? (x) : (y) | |
120 | |
121 #define progr_x(d) ((d) == DIR_L ? -1 : (d) == DIR_R ? 1 : 0) | |
122 #define progr_y(d) ((d) == DIR_U ? -1 : (d) == DIR_D ? 1 : 0) | |
123 | |
124 | |
125 /** screen-related functions **/ | |
126 void reset_styles(); | |
127 void redraw(); | |
128 int move_around(char c, FILE *fc, char global); | |
129 void check_bound(int *x, int *y); | |
130 void status_bar(); | |
131 void show_cursor(); | |
132 void set_cur(char c); | |
133 void update_current(); | |
134 void set_xy(int _x, int _y, char c); | |
135 void draw_xy(int x, int y, char c); | |
136 char get_mark(char dir); | |
137 void set_video(int v); | |
138 char get_key(FILE *fc, char *msg); | |
139 void get_string(FILE *fc, char *msg, char *s, int sz); | |
140 void erase_box(int x1, int y1, char c); | |
141 int is_yes(char c); | |
142 void init_screen(); | |
143 void erase_line(int i); | |
144 void erase_screen(); | |
145 void go_to(int where); | |
146 void crop_to_nonblank(); | |
147 void crop_to_rect(); | |
148 void erase_blank_lines(int y1, int y2); | |
149 int _isblank(int c); | |
150 void mark_pos(FILE *fc); | |
151 /**/ | |
152 | |
153 /** drawing-related functions **/ | |
154 int change_style(char c); | |
155 void get_text(FILE *fc); | |
156 void get_box(FILE *fc, char st); | |
157 void get_arrow(FILE *fc); | |
158 void erase(FILE *fc); | |
159 void visual_box(FILE *fc); | |
160 void paste(); | |
161 void undo_change(); | |
162 void redo_change(); | |
163 void get_comment(FILE *fc); | |
164 /**/ | |
165 | |
166 /** file-related functions **/ | |
167 void write_file(FILE *fc); | |
168 void check_modified(FILE *fc); | |
169 void load_file(FILE *fc); | |
170 void new_file(FILE *fc); | |
171 void read_file_at(FILE *fc, int xl, int yl); | |
172 /**/ | |
173 | |
174 /** line-related functions **/ | |
175 void dump_lines(lineset_t ls, FILE *f); | |
176 void alloc_line(line_t *l); | |
177 void ensure_line_length(line_t *l, int len); | |
178 void ensure_num_lines(lineset_t *ls, int n); | |
179 void yank_region(int x1, int y1, int x2, int y2); | |
180 void paste_region(int x1, int y1); | |
181 void copy_lines_to_ring(int y1, int y2, int which); | |
182 void invalidate_undo(); | |
183 /**/ | |
184 | |
185 void cleanup(int); | |
186 | |
187 #endif |