1
2#ifndef SPEAKUP_TYPES_H
3#define SPEAKUP_TYPES_H
4
5
6
7#include <linux/types.h>
8#include <linux/fs.h>
9#include <linux/errno.h>
10#include <linux/delay.h>
11#include <linux/wait.h>
12#include <linux/init.h>
13#include <linux/module.h>
14#include <linux/vt_kern.h>
15#include <linux/spinlock.h>
16#include <linux/mutex.h>
17#include <linux/io.h>
18#include <linux/device.h>
19
20enum var_type_t {
21 VAR_NUM = 0,
22 VAR_TIME,
23 VAR_STRING,
24 VAR_PROC
25};
26
27enum {
28 E_DEFAULT = 0,
29 E_SET,
30 E_INC,
31 E_DEC,
32 E_NEW_DEFAULT,
33};
34
35enum var_id_t {
36 VERSION = 0, SYNTH, SILENT, SYNTH_DIRECT,
37 KEYMAP, CHARS,
38 PUNC_SOME, PUNC_MOST, PUNC_ALL,
39 DELIM, REPEATS, EXNUMBER,
40 DELAY, TRIGGER, JIFFY, FULL,
41 BLEEP_TIME, CURSOR_TIME, BELL_POS,
42 SAY_CONTROL, SAY_WORD_CTL, NO_INTERRUPT, KEY_ECHO,
43 SPELL_DELAY, PUNC_LEVEL, READING_PUNC,
44 ATTRIB_BLEEP, BLEEPS,
45 RATE, PITCH, INFLECTION, VOL, TONE, PUNCT, VOICE, FREQUENCY, LANG,
46 DIRECT, PAUSE,
47 CAPS_START, CAPS_STOP, CHARTAB,
48 MAXVARS
49};
50
51typedef int (*special_func)(struct vc_data *vc, u_char type, u_char ch,
52 u_short key);
53
54#define COLOR_BUFFER_SIZE 160
55
56struct spk_highlight_color_track {
57
58 unsigned int bgcount[8];
59
60 u16 highbuf[8][COLOR_BUFFER_SIZE];
61
62 unsigned int highsize[8];
63
64 u_long rpos[8], rx[8], ry[8];
65
66 ulong cy;
67};
68
69struct st_spk_t {
70 u_long reading_x, cursor_x;
71 u_long reading_y, cursor_y;
72 u_long reading_pos, cursor_pos;
73 u_long go_x, go_pos;
74 u_long w_top, w_bottom, w_left, w_right;
75 u_char w_start, w_enabled;
76 u_char reading_attr, old_attr;
77 char parked, shut_up;
78 struct spk_highlight_color_track ht;
79 int tty_stopped;
80};
81
82
83#define spk_shut_up (speakup_console[vc->vc_num]->shut_up)
84#define spk_killed (speakup_console[vc->vc_num]->shut_up & 0x40)
85#define spk_x (speakup_console[vc->vc_num]->reading_x)
86#define spk_cx (speakup_console[vc->vc_num]->cursor_x)
87#define spk_y (speakup_console[vc->vc_num]->reading_y)
88#define spk_cy (speakup_console[vc->vc_num]->cursor_y)
89#define spk_pos (speakup_console[vc->vc_num]->reading_pos)
90#define spk_cp (speakup_console[vc->vc_num]->cursor_pos)
91#define goto_pos (speakup_console[vc->vc_num]->go_pos)
92#define goto_x (speakup_console[vc->vc_num]->go_x)
93#define win_top (speakup_console[vc->vc_num]->w_top)
94#define win_bottom (speakup_console[vc->vc_num]->w_bottom)
95#define win_left (speakup_console[vc->vc_num]->w_left)
96#define win_right (speakup_console[vc->vc_num]->w_right)
97#define win_start (speakup_console[vc->vc_num]->w_start)
98#define win_enabled (speakup_console[vc->vc_num]->w_enabled)
99#define spk_attr (speakup_console[vc->vc_num]->reading_attr)
100#define spk_old_attr (speakup_console[vc->vc_num]->old_attr)
101#define spk_parked (speakup_console[vc->vc_num]->parked)
102
103struct st_var_header {
104 char *name;
105 enum var_id_t var_id;
106 enum var_type_t var_type;
107 void *p_val;
108 void *data;
109};
110
111struct num_var_t {
112 char *synth_fmt;
113 int default_val;
114 int low;
115 int high;
116 short offset, multiplier;
117 char *out_str;
118 int value;
119};
120
121struct punc_var_t {
122 enum var_id_t var_id;
123 short value;
124};
125
126struct string_var_t {
127 char *default_val;
128};
129
130struct var_t {
131 enum var_id_t var_id;
132 union {
133 struct num_var_t n;
134 struct string_var_t s;
135 } u;
136};
137
138struct st_bits_data {
139 char *name;
140 char *value;
141 short mask;
142};
143
144struct synth_indexing {
145 char *command;
146 unsigned char lowindex;
147 unsigned char highindex;
148 unsigned char currindex;
149};
150
151struct spk_synth;
152
153struct spk_io_ops {
154 int (*synth_out)(struct spk_synth *synth, const char ch);
155 int (*synth_out_unicode)(struct spk_synth *synth, u16 ch);
156 void (*send_xchar)(char ch);
157 void (*tiocmset)(unsigned int set, unsigned int clear);
158 unsigned char (*synth_in)(void);
159 unsigned char (*synth_in_nowait)(void);
160 void (*flush_buffer)(void);
161 int (*wait_for_xmitr)(struct spk_synth *synth);
162};
163
164struct spk_synth {
165 struct list_head node;
166
167 const char *name;
168 const char *version;
169 const char *long_name;
170 const char *init;
171 char procspeech;
172 char clear;
173 int delay;
174 int trigger;
175 int jiffies;
176 int full;
177 int ser;
178 char *dev_name;
179 short flags;
180 short startup;
181 const int checkval;
182 struct var_t *vars;
183 int *default_pitch;
184 int *default_vol;
185 struct spk_io_ops *io_ops;
186 int (*probe)(struct spk_synth *synth);
187 void (*release)(void);
188 const char *(*synth_immediate)(struct spk_synth *synth,
189 const char *buff);
190 void (*catch_up)(struct spk_synth *synth);
191 void (*flush)(struct spk_synth *synth);
192 int (*is_alive)(struct spk_synth *synth);
193 int (*synth_adjust)(struct st_var_header *var);
194 void (*read_buff_add)(u_char c);
195 unsigned char (*get_index)(struct spk_synth *synth);
196 struct synth_indexing indexing;
197 int alive;
198 struct attribute_group attributes;
199};
200
201
202
203
204
205
206
207
208#define module_spk_synth(__spk_synth) \
209 module_driver(__spk_synth, synth_add, synth_remove)
210
211struct speakup_info_t {
212 spinlock_t spinlock;
213 int port_tts;
214 int flushing;
215};
216
217struct bleep {
218 short freq;
219 unsigned long jiffies;
220 int active;
221};
222#endif
223