1#ifndef SPEAKUP_TYPES_H
2#define SPEAKUP_TYPES_H
3
4/*
5 * This file includes all of the typedefs and structs used in speakup.
6 */
7
8#include <linux/types.h>
9#include <linux/fs.h>
10#include <linux/errno.h>
11#include <linux/delay.h>
12#include <linux/wait.h>		/* for wait_queue */
13#include <linux/init.h> /* for __init */
14#include <linux/module.h>
15#include <linux/vt_kern.h>
16#include <linux/spinlock.h>
17#include <linux/mutex.h>
18#include <linux/io.h>		/* for inb_p, outb_p, inb, outb, etc... */
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, /* all timers must be together */
41	BLEEP_TIME, CURSOR_TIME, BELL_POS,
42SAY_CONTROL, SAY_WORD_CTL, NO_INTERRUPT, KEY_ECHO,
43	SPELL_DELAY, PUNC_LEVEL, READING_PUNC,
44	ATTRIB_BLEEP, BLEEPS,
45 RATE, PITCH, VOL, TONE, PUNCT, VOICE, FREQUENCY, LANG, DIRECT,
46	CAPS_START, CAPS_STOP, CHARTAB,
47	MAXVARS
48};
49
50typedef int (*special_func)(struct vc_data *vc, u_char type, u_char ch,
51		u_short key);
52
53#define COLOR_BUFFER_SIZE 160
54
55struct spk_highlight_color_track {
56	/* Count of each background color */
57	unsigned int bgcount[8];
58	/* Buffer for characters drawn with each background color */
59	char highbuf[8][COLOR_BUFFER_SIZE];
60	/* Current index into highbuf */
61	unsigned int highsize[8];
62	/* Reading Position for each color */
63	u_long rpos[8], rx[8], ry[8];
64	/* Real Cursor Y Position */
65	ulong cy;
66};
67
68struct st_spk_t {
69	u_long reading_x, cursor_x;
70	u_long reading_y, cursor_y;
71	u_long reading_pos, cursor_pos;
72	u_long go_x, go_pos;
73	u_long w_top, w_bottom, w_left, w_right;
74	u_char w_start, w_enabled;
75	u_char reading_attr, old_attr;
76	char parked, shut_up;
77	struct spk_highlight_color_track ht;
78	int tty_stopped;
79};
80
81/* now some defines to make these easier to use. */
82#define spk_shut_up (speakup_console[vc->vc_num]->shut_up)
83#define spk_killed (speakup_console[vc->vc_num]->shut_up & 0x40)
84#define spk_x (speakup_console[vc->vc_num]->reading_x)
85#define spk_cx (speakup_console[vc->vc_num]->cursor_x)
86#define spk_y (speakup_console[vc->vc_num]->reading_y)
87#define spk_cy (speakup_console[vc->vc_num]->cursor_y)
88#define spk_pos (speakup_console[vc->vc_num]->reading_pos)
89#define spk_cp (speakup_console[vc->vc_num]->cursor_pos)
90#define goto_pos (speakup_console[vc->vc_num]->go_pos)
91#define goto_x (speakup_console[vc->vc_num]->go_x)
92#define win_top (speakup_console[vc->vc_num]->w_top)
93#define win_bottom (speakup_console[vc->vc_num]->w_bottom)
94#define win_left (speakup_console[vc->vc_num]->w_left)
95#define win_right (speakup_console[vc->vc_num]->w_right)
96#define win_start (speakup_console[vc->vc_num]->w_start)
97#define win_enabled (speakup_console[vc->vc_num]->w_enabled)
98#define spk_attr (speakup_console[vc->vc_num]->reading_attr)
99#define spk_old_attr (speakup_console[vc->vc_num]->old_attr)
100#define spk_parked (speakup_console[vc->vc_num]->parked)
101
102struct st_var_header {
103	char *name;
104	enum var_id_t var_id;
105	enum var_type_t var_type;
106	void *p_val; /* ptr to programs variable to store value */
107	void *data; /* ptr to the vars data */
108};
109
110struct num_var_t {
111	char *synth_fmt;
112	int default_val;
113	int low;
114	int high;
115	short offset, multiplier; /* for fiddling rates etc. */
116	char *out_str; /* if synth needs char representation of number */
117	int value; /* current value */
118};
119
120struct punc_var_t {
121	enum var_id_t var_id;
122	short value;
123};
124
125struct string_var_t {
126	char *default_val;
127};
128
129struct var_t {
130	enum var_id_t var_id;
131	union {
132		struct num_var_t n;
133		struct string_var_t s;
134	} u;
135};
136
137struct st_bits_data { /* punc, repeats, word delim bits */
138	char *name;
139	char *value;
140	short mask;
141};
142
143struct synth_indexing {
144	char *command;
145	unsigned char lowindex;
146	unsigned char highindex;
147	unsigned char currindex;
148};
149
150struct spk_synth {
151	const char *name;
152	const char *version;
153	const char *long_name;
154	const char *init;
155	char procspeech;
156	char clear;
157	int delay;
158	int trigger;
159	int jiffies;
160	int full;
161	int ser;
162	short flags;
163	short startup;
164	const int checkval; /* for validating a proper synth module */
165	struct var_t *vars;
166	int *default_pitch;
167	int *default_vol;
168	int (*probe)(struct spk_synth *synth);
169	void (*release)(void);
170	const char *(*synth_immediate)(struct spk_synth *synth, const char *buff);
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;
178	int alive;
179	struct attribute_group attributes;
180};
181
182struct speakup_info_t {
183	spinlock_t spinlock;
184	int port_tts;
185	int flushing;
186};
187
188struct bleep {
189	short freq;
190	unsigned long jiffies;
191	int active;
192};
193#endif
194