|
|
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 |
|