1 #ifndef SPEAKUP_TYPES_H
2 #define SPEAKUP_TYPES_H
4 /* This file includes all of the typedefs and structs used in speakup. */
6 #include <linux/types.h>
8 #include <linux/errno.h>
9 #include <linux/delay.h>
10 #include <linux/wait.h> /* for wait_queue */
11 #include <linux/init.h> /* for __init */
12 #include <linux/module.h>
13 #include <linux/vt_kern.h>
14 #include <linux/spinlock.h>
15 #include <linux/mutex.h>
16 #include <linux/io.h> /* for inb_p, outb_p, inb, outb, etc... */
17 #include <linux/device.h>
35 VERSION = 0, SYNTH, SILENT, SYNTH_DIRECT,
37 PUNC_SOME, PUNC_MOST, PUNC_ALL,
38 DELIM, REPEATS, EXNUMBER,
39 DELAY, TRIGGER, JIFFY, FULL, /* all timers must be together */
40 BLEEP_TIME, CURSOR_TIME, BELL_POS,
41 SAY_CONTROL, SAY_WORD_CTL, NO_INTERRUPT, KEY_ECHO,
42 SPELL_DELAY, PUNC_LEVEL, READING_PUNC,
44 RATE, PITCH, VOL, TONE, PUNCT, VOICE, FREQUENCY, LANG, DIRECT,
45 CAPS_START, CAPS_STOP, CHARTAB,
49 typedef int (*special_func)(struct vc_data *vc, u_char type, u_char ch,
52 #define COLOR_BUFFER_SIZE 160
54 struct spk_highlight_color_track {
55 /* Count of each background color */
56 unsigned int bgcount[8];
57 /* Buffer for characters drawn with each background color */
58 char highbuf[8][COLOR_BUFFER_SIZE];
59 /* Current index into highbuf */
60 unsigned int highsize[8];
61 /* Reading Position for each color */
62 u_long rpos[8], rx[8], ry[8];
63 /* Real Cursor Y Position */
68 u_long reading_x, cursor_x;
69 u_long reading_y, cursor_y;
70 u_long reading_pos, cursor_pos;
72 u_long w_top, w_bottom, w_left, w_right;
73 u_char w_start, w_enabled;
74 u_char reading_attr, old_attr;
76 struct spk_highlight_color_track ht;
80 /* now some defines to make these easier to use. */
81 #define spk_shut_up (speakup_console[vc->vc_num]->shut_up)
82 #define spk_killed (speakup_console[vc->vc_num]->shut_up & 0x40)
83 #define spk_x (speakup_console[vc->vc_num]->reading_x)
84 #define spk_cx (speakup_console[vc->vc_num]->cursor_x)
85 #define spk_y (speakup_console[vc->vc_num]->reading_y)
86 #define spk_cy (speakup_console[vc->vc_num]->cursor_y)
87 #define spk_pos (speakup_console[vc->vc_num]->reading_pos)
88 #define spk_cp (speakup_console[vc->vc_num]->cursor_pos)
89 #define goto_pos (speakup_console[vc->vc_num]->go_pos)
90 #define goto_x (speakup_console[vc->vc_num]->go_x)
91 #define win_top (speakup_console[vc->vc_num]->w_top)
92 #define win_bottom (speakup_console[vc->vc_num]->w_bottom)
93 #define win_left (speakup_console[vc->vc_num]->w_left)
94 #define win_right (speakup_console[vc->vc_num]->w_right)
95 #define win_start (speakup_console[vc->vc_num]->w_start)
96 #define win_enabled (speakup_console[vc->vc_num]->w_enabled)
97 #define spk_attr (speakup_console[vc->vc_num]->reading_attr)
98 #define spk_old_attr (speakup_console[vc->vc_num]->old_attr)
99 #define spk_parked (speakup_console[vc->vc_num]->parked)
101 struct st_var_header {
103 enum var_id_t var_id;
104 enum var_type_t var_type;
105 void *p_val; /* ptr to programs variable to store value */
106 void *data; /* ptr to the vars data */
114 short offset, multiplier; /* for fiddling rates etc. */
115 char *out_str; /* if synth needs char representation of number */
116 int value; /* current value */
120 enum var_id_t var_id;
124 struct string_var_t {
129 enum var_id_t var_id;
132 struct string_var_t s;
136 struct st_bits_data { /* punc, repeats, word delim bits */
142 struct synth_indexing {
144 unsigned char lowindex;
145 unsigned char highindex;
146 unsigned char currindex;
152 const char *long_name;
163 const int checkval; /* for validating a proper synth module */
167 int (*probe)(struct spk_synth *synth);
168 void (*release)(void);
169 const char *(*synth_immediate)(struct spk_synth *synth,
171 void (*catch_up)(struct spk_synth *synth);
172 void (*flush)(struct spk_synth *synth);
173 int (*is_alive)(struct spk_synth *synth);
174 int (*synth_adjust)(struct st_var_header *var);
175 void (*read_buff_add)(u_char);
176 unsigned char (*get_index)(void);
177 struct synth_indexing indexing;
179 struct attribute_group attributes;
183 * module_spk_synth() - Helper macro for registering a speakup driver
184 * @__spk_synth: spk_synth struct
185 * Helper macro for speakup drivers which do not do anything special in module
186 * init/exit. This eliminates a lot of boilerplate. Each module may only
187 * use this macro once, and calling it replaces module_init() and module_exit()
189 #define module_spk_synth(__spk_synth) \
190 module_driver(__spk_synth, synth_add, synth_remove)
192 struct speakup_info_t {
200 unsigned long jiffies;