|
|
1.1 ! root 1: /*----------------------------------------------------------------------------- ! 2: Talking BIOS device driver for the AT&T PC6300. ! 3: Copyright (C) Karl Dahlke 1987 ! 4: This software may be freely used and distributed ! 5: for any non-profit purpose. ! 6: *----------------------------------------------------------------------------- ! 7: */ ! 8: ! 9: /* speech.h: header file for speaking device drivers */ ! 10: ! 11: #ifndef MSDOS ! 12: /* char far * is the same as char * in Unix */ ! 13: #define far ! 14: #endif ! 15: ! 16: /* don't incorporate any C routines from libc.a, ! 17: * becaues they do stack checking, and this is not a normal stack. ! 18: * However, we can use the ctype macros and static _ctype[] array. */ ! 19: ! 20: #include <ctype.h> ! 21: ! 22: #define WORDLEN 24 /* length of longest "word" */ ! 23: #define LINELEN 38 /* length of support command line */ ! 24: #define N_CMDS 32 /* number of available speech commands */ ! 25: ! 26: /* record additional keystrokes, ! 27: * when a speech command requires extra data. ! 28: * For instance, search through the circular buffer for a string, ! 29: * and start reading at that point. */ ! 30: struct MULTIKEY { ! 31: char lastcmd; /* the multi-key command */ ! 32: char nextchar; /* command needs the next character */ ! 33: char nextline; /* command needs the next line */ ! 34: char textlen; ! 35: short support; /* extra key, could be function key etc */ ! 36: char text[LINELEN]; ! 37: char lasttext[LINELEN]; ! 38: }; ! 39: ! 40: /* control structure for speaking session */ ! 41: extern struct SDCONTROL { ! 42: struct MULTIKEY indata, outdata; ! 43: char *bufbot, *buftop; /* the circular buffer */ ! 44: char *bufhead, *buftail; /* extend of text within the buffer */ ! 45: char *bufcur; /* position of internal cursor within the buffer */ ! 46: int (*dev_in)(); /* function to put char on device input queue */ ! 47: char talkcmd; /* talking command */ ! 48: char dumping; /* dumping text to a file? */ ! 49: char macsel; /* macro set selection, 0 through 9 */ ! 50: long drain_lbolt; ! 51: /* flags/modes */ ! 52: char xparent; /* transparent mode, emulate the original driver */ ! 53: char buf_ok; /* send output characters to the circular buffer for reading */ ! 54: char ctrl_ok; /* allow control characters to enter the buffer for reading */ ! 55: char dev_ok; /* send output characters to the screen (or com port) */ ! 56: char rdflag; /* currently reading text */ ! 57: char onesymb; /* reading one symbol */ ! 58: char oneline; /* read one line at a time */ ! 59: char esc; /* last char was escape */ ! 60: char esc_lc; /* escape leftbrace received */ ! 61: /* arrays of text */ ! 62: /* punctuation pronounciation table, at most 10 letters per symbol. ! 63: * it turns out, you don't want long names for these anyways. ! 64: * it slows you down, reducing productivity. */ ! 65: char punctab[40*10]; ! 66: /* bind keys to talking commands */ ! 67: char keymap[146]; ! 68: char defcbuf[80]; /* in case kalloc fails */ ! 69: } *sdcontrol[5]; ! 70: ! 71: /* the above structures are initialized upon startup. ! 72: * One should use kalloc() to allocate the circular ! 73: * buffer and replacement text space at load time rather than compile time. */ ! 74: ! 75: /* speech command structure, one for each possible command */ ! 76: extern struct SDCMD { ! 77: char *desc; /* description */ ! 78: char brief[8]; ! 79: char nonempty; /* buffer must be nonempty */ ! 80: char rdline; /* read the current line */ ! 81: char rdsymb; /* read one symbol */ ! 82: char rdchar; /* read one character */ ! 83: char nextkey; /* needs next key to complete command */ ! 84: char nextline; /* needs line of text to complete command */ ! 85: } sdcmds[]; ! 86: ! 87: /* state variables, set when entering deferred speech routines */ ! 88: extern struct SDCONTROL *sdc; ! 89: extern char sdw[]; ! 90: extern int sdsession, sdnoises, sdtones; ! 91: extern int sd0synth, sd0comport; ! 92: extern int sdscreenmode, sdoverride; ! 93: ! 94: #ifdef MSDOS ! 95: extern char *kalloc(); ! 96: #else ! 97: extern char *allkp, *alloc(); ! 98: #define kalloc(n) alloc(allkp, n) ! 99: #define kfree(p) free(p) ! 100: #endif ! 101:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.