1
4
5# ifndef LMT_INSERTS_H
6# define LMT_INSERTS_H
7
8typedef struct insert_record {
9 halfword limit;
10 halfword multiplier;
11 halfword distance;
12 halfword content;
13 halfword initialized;
14 halfword options;
15 halfword penalty;
16 scaled maxdepth;
17 halfword before;
18 halfword inbetween;
19 scaled lineheight;
20 scaled linedepth;
21 scaled stretch;
22 scaled shrink;
23} insert_record;
24
25typedef enum insert_modes {
26 unset_insert_mode,
27 index_insert_mode,
28 class_insert_mode,
29} insert_modes;
30
31typedef enum insert_class_options {
32 insert_option_storing = 0x1,
33 insert_option_penalty = 0x2,
34 insert_option_maxdepth = 0x4,
35} insert_class_options;
36
37typedef enum insert_storage_actions {
38 insert_storage_ignore,
39 insert_storage_delay,
40 insert_storage_inject,
41} insert_storage_actions;
42
43typedef struct insert_state_info {
44 insert_record *inserts;
45 memory_data insert_data;
46 int mode;
47 halfword storing;
48 halfword head;
49 halfword tail;
50} insert_state_info;
51
52extern insert_state_info lmt_insert_state;
53
54# define has_insert_option(a,b) (lmt_insert_state.mode == class_insert_mode && (lmt_insert_state.inserts[a].options & b) == b)
55# define set_insert_option(a,b) (lmt_insert_state.inserts[a].options |= b)
56# define unset_insert_option(a,b) (lmt_insert_state.inserts[a].options & ~(b))
57
58extern scaled tex_get_insert_limit (halfword i);
59extern halfword tex_get_insert_multiplier (halfword i);
60extern halfword tex_get_insert_penalty (halfword i);
61extern halfword tex_get_insert_distance (halfword i);
62extern halfword tex_get_insert_maxdepth (halfword i);
63extern scaled tex_get_insert_height (halfword i);
64extern scaled tex_get_insert_depth (halfword i);
65extern scaled tex_get_insert_width (halfword i);
66extern halfword tex_get_insert_content (halfword i);
67extern halfword tex_get_insert_storage (halfword i);
68extern scaled tex_get_insert_line_height (halfword i);
69extern scaled tex_get_insert_line_depth (halfword i);
70extern scaled tex_get_insert_stretch (halfword i);
71extern scaled tex_get_insert_shrink (halfword i);
72
73extern void tex_set_insert_limit (halfword i, scaled v);
74extern void tex_set_insert_multiplier (halfword i, halfword v);
75extern void tex_set_insert_penalty (halfword i, halfword v);
76extern void tex_set_insert_distance (halfword i, halfword v);
77extern void tex_set_insert_maxdepth (halfword i, halfword v);
78extern void tex_set_insert_height (halfword i, scaled v);
79extern void tex_set_insert_depth (halfword i, scaled v);
80extern void tex_set_insert_width (halfword i, scaled v);
81extern void tex_set_insert_content (halfword i, halfword v);
82extern void tex_set_insert_storage (halfword i, halfword v);
83extern void tex_set_insert_line_height (halfword i, scaled v);
84extern void tex_set_insert_line_depth (halfword i, scaled v);
85extern void tex_set_insert_stretch (halfword i, scaled v);
86extern void tex_set_insert_shrink (halfword i, scaled v);
87
88extern void tex_wipe_insert (halfword i);
89
90extern void tex_initialize_inserts (void);
91extern int tex_valid_insert_id (halfword n);
92extern void tex_dump_insert_data (dumpstream f);
93extern void tex_undump_insert_data (dumpstream f);
94
95extern halfword lmt_get_insert_distance (halfword i, int slot);
96
97extern halfword tex_get_insert_progress (halfword i);
98
99extern void tex_insert_store (halfword i, halfword n);
100extern void tex_insert_restore (halfword n);
101extern int tex_insert_stored (void);
102
103extern halfword tex_scan_insert_index (void);
104extern void tex_set_insert_mode (halfword mode);
105extern int tex_insert_is_void (halfword i);
106
107extern int tex_identify_inserts (halfword b, halfword cbk);
108
109extern void tex_run_insert (void);
110extern void tex_finish_insert_group (void);
111
112extern void tex_show_insert_group (void);
113extern int tex_show_insert_record (void);
114
115extern scaled tex_insert_height (halfword node);
116extern void tex_insert_reset_distances (void);
117extern scaled tex_insert_distances (halfword first, halfword last, scaled *stretch, scaled *shrink);
118
119# endif
120 |