Introduction
Introduction Statistics Contact Development Disclaimer Help
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
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.