home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <math.h>
- #include <Speech.h>
- #include <GestaltEqu.h>
-
- #include "BigEasy.h"
- #include "Globals.h"
-
- #define LoMemROM85 (* (unsigned short*) ROM85) /* ROM version */
- #define HaveCQD() (LoMemROM85 <= 0x3FFF) /* true if color quickdraw is present */
-
- #define kMaxLines 20000
- #define kTextBufLen 100000
-
- #define kDisplayFont (monaco) /* Font characteristics for window displays */
- #define kDisplaySize 9
- #define kDisplayFace 0
- #define kScrollBarPixels 16
-
- #define kAboutID 128 /* About box dialog ID */
-
- #define kWindowTop 40
- #define kWindowLeft 3
- #define kWindowBottom 340
- #define kWindowRight 510
- #define kDefaultNewWindowRect {kWindowTop, kWindowLeft, kWindowBottom, kWindowRight} /* Top, Left, Bottom, Right */
- #define kWindowBaseX 5
- #define kWindowBaseY 15
-
- GlobalsPtr globals = nil;
- char gStr[512];
- ushort gStrLen = 0;
- Boolean gPrintFlag = true;
- Handle gText = nil; // Handle to the text we want to speak
- VoiceSpec gVoiceSpec[32];
- short gCurrentVoice; // index of current voice spec
- SpeechChannel gSpeechChannel = nil;
- Fixed gSpeechRate = 0;
-
- /* =============================
- External Routines
- ============================= */
-
- // PRIVATE TRAP DEFINES TO DO TIMING MEASUREMENTS
-
- //struct Int64Bit {
- // long hiLong;
- // long loLong;
- //};
-
- //typedef struct Int64Bit Int64Bit;
-
- // this returns the number of microseconds but isn't yet defined for the public
- #pragma parameter Microseconds(__A1)
- pascal void Microseconds(Int64Bit *microsecondCount) =
- {0xA193,0x22C8,0x2280};
-
- /* =============================
- Function Prototypes
- ============================= */
-
- void AddLineToTextDisplay(GlobalsPtr g, char *formatStr, ulong value);
- void AddStringToTextDisplay(GlobalsPtr g, char *str);
- void InitTextDisplay(GlobalsPtr g);
- void ComputeWindowLines(GlobalsPtr g);
- void RefreshWindow(GlobalsPtr g);
- void PageDown(GlobalsPtr g);
- void PageUp(GlobalsPtr g);
- void GoToLine(GlobalsPtr g, ulong line);
- void UpdateDisplay(GlobalsPtr g);
- void DoClick(Ptr storage, Point p, short mods, long when);
- void DoUpdate(Ptr storage);
- void DoIdle(Ptr storage);
- void DoMyClose(Ptr storage);
- void OpenNewWindow(void);
- void DoAbout(void);
- void MenuPageUp(void);
- void MenuPageDown(void);
- void MenuLineUp(void);
- void MenuLineDown(void);
- void MenuGoToTop(void);
- void MenuGoToBottom(void);
- void MenuTimeTest(void);
- void Wait(unsigned long ticks);
- void DoOpen(void);
- void BuildVoiceMenu(void);
- void MenuVoiceSelect(void);
- void MenuTalk(void);
- void MenuShutUp(void);
- void Bootstrap(void);
-
- /* =============================
- Window Methods
- ============================= */
-
- void AddLineToTextDisplay(GlobalsPtr g, char * formatStr, ulong value)
- {
- char s[256];
- short len;
-
- len = sprintf(s, formatStr, value);
-
- if (((g->textLen + len) >= kTextBufLen)
- || (g->numLines >= kMaxLines)
- || (!g->lineStarts)
- || (!g->lines))
- return;
-
- g->lineStarts[g->numLines] = g->textLen; // save ptr to this line
-
- BlockMove(s, &g->lines[g->textLen], len); // copy text into line text buffer
-
- g->textLen += len; // increment our write ptr
- g->numLines++; // and increment our line count
-
- g->lineStarts[g->numLines] = g->textLen; // save ptr to end of text
- }
-
- void AddStringToTextDisplay(GlobalsPtr g, char * str)
- {
- char s[256];
- short len;
-
- len = sprintf(s, str);
-
- if (((g->textLen + len) >= kTextBufLen)
- || (g->numLines >= kMaxLines)
- || (!g->lineStarts)
- || (!g->lines))
- return;
-
- g->lineStarts[g->numLines] = g->textLen; // save ptr to this line
-
- BlockMove(s, &g->lines[g->textLen], len); // copy text into line text buffer
-
- g->textLen += len; // increment our write ptr
- g->numLines++; // and increment our line count
-
- g->lineStarts[g->numLines] = g->textLen; // save ptr to end of text
- }
-
- void InitTextDisplay(GlobalsPtr g)
- {
- g->curLine = 0;
- g->numLines = 0;
- g->textLen = 0;
- g->lines = nil;
- g->lineStarts = nil;
-
- // allocate space to hold the text and line start info and then
- // compute the display lines for real this time
-
- g->lineStarts = (ulong *) NewPtrClear(sizeof(ulong) * kMaxLines); // allocate space for line starts array
- if (!g->lineStarts) // could not allocate line start buffer
- TrapError("\p InitTextDisplay: Could not allocate lineStarts buffer", MemError(), true, true); // FATAL ERROR
-
- g->lines = NewPtrClear(kTextBufLen); // allocate space for display text
- if (!g->lines) // could not allocate display text buffer
- TrapError("\p InitTextDisplay: Could not allocate lines buffer", MemError(), true, true); // FATAL ERROR
-
- g->lineStarts[g->numLines] = g->textLen; // save ptr to end of text
- }
-
- void ComputeWindowLines(GlobalsPtr g)
- {
- Rect clip;
- FontInfo f;
-
- clip = g->theWindow->portRect;
- clip.right -= kScrollBarPixels; // stop drawing at scroll bar and grow icon boundaries
- clip.bottom -= kScrollBarPixels;
-
- GetFontInfo(&f);
- g->lineHeight = f.ascent + f.descent + f.leading;
- g->displayLines = (clip.bottom - clip.top)/g->lineHeight; // number of lines we can display
- }
-
- void RefreshWindow(GlobalsPtr g) // repaint window info
- {
- PenState savePen;
- RgnHandle saveClip;
- Rect clip;
- ulong linePtr;
- short lineLen;
- short i;
- Point pen;
- FontInfo f;
-
-
- if (!g) return;
- if (!g->theWindow) return;
- if (!g->numLines) return; // no lines to display
- if (!g->lines) return;
-
- saveClip = NewRgn();
- if (!saveClip) return;
-
- GetClip(saveClip);
- clip = g->theWindow->portRect;
- clip.right -= kScrollBarPixels; // stop drawing at scroll bar and grow icon boundaries
- clip.bottom -= kScrollBarPixels;
- ClipRect(&clip);
-
- ComputeWindowLines(g); // make sure our globals are set correctly
-
- for (i = 0; i < g->displayLines; i++)
- {
- if ((g->curLine + i) >= g->numLines) break;
-
- linePtr = g->lineStarts[g->curLine + i]; // get ptr to the text for this line
- lineLen = g->lineStarts[g->curLine + i + 1] - linePtr;
-
- MoveTo(kWindowBaseX,kWindowBaseY + (i * g->lineHeight));
- DrawText(&g->lines[linePtr], 0, lineLen);
- }
-
- SetClip(saveClip);
- DisposeRgn(saveClip);
- }
-
- void PageDown(GlobalsPtr g)
- {
- ulong oldLine = g->curLine;
-
- g->curLine += g->displayLines;
-
- if (g->curLine > (g->numLines -1))
- g->curLine = g->numLines - 1;
-
- if (g->curLine != oldLine)
- InvalRect(&g->theWindow->portRect);
- }
-
- void PageUp(GlobalsPtr g)
- {
- ulong oldLine = g->curLine;
-
- if (g->curLine > g->displayLines)
- g->curLine -= g->displayLines;
- else
- g->curLine = 0;
-
- if (g->curLine != oldLine)
- InvalRect(&g->theWindow->portRect);
- }
-
- void GoToLine(GlobalsPtr g, ulong line)
- {
- if (line > (g->numLines - 1))
- line = g->numLines - 1;
-
- if (g->curLine != line)
- {
- g->curLine = line;
- InvalRect(&g->theWindow->portRect);
- }
- }
-
- void UpdateDisplay(GlobalsPtr g)
- {
- ComputeWindowLines(g);
- GoToLine(g, (g->numLines > g->displayLines) ? g->numLines - g->displayLines : 0);
- RefreshWindow(g);
- }
-
- void DoClick(Ptr storage, Point p, short mods, long when)
- {
- GlobalsPtr g = (GlobalsPtr) storage;
- Point mousePt;
- short middle;
- short windowHeight = g->theWindow->portRect.bottom - g->theWindow->portRect.top - kScrollBarPixels;
- short clickHeight;
- ulong line;
-
- mousePt = p;
- GlobalToLocal(&mousePt);
-
- if ((mods & cmdKey) /* cmd key held down means simulate scroll bar */
- || (mousePt.h > (g->theWindow->portRect.right - kScrollBarPixels)))
- {
- clickHeight = mousePt.v - g->theWindow->portRect.top;
-
- line = g->numLines * clickHeight / windowHeight;
-
- GoToLine(g, line);
- }
- else
- {
- middle = g->theWindow->portRect.top + ((g->theWindow->portRect.bottom - g->theWindow->portRect.top)/2);
-
- if (mousePt.v > middle) // clicked in lower half of window
- PageDown(g);
- else // clicked in upper half of window
- PageUp(g);
- }
- }
-
- void DoUpdate(Ptr storage)
- {
- GlobalsPtr g = (GlobalsPtr) storage;
-
- EraseRect(&g->theWindow->portRect); // Erase the whole window
- DrawGrowIcon(g->theWindow);
-
- RefreshWindow(g); // repaint window info
- }
-
- void DoIdle(Ptr storage)
- {
- GlobalsPtr g = (GlobalsPtr) storage;
- double a,w;
- long mem, x;
- THz zone;
- #define kTwoPi (3.14159265 * 2)
-
- if (g->idlePurgeCompact) {
- zone = GetZone();
-
- x = 0xFFFFFFFF;
- SetZone(ApplicZone());
- PurgeMem(x);
- mem = CompactMem(x);
- SetZone(SystemZone());
- PurgeMem(x);
- mem = CompactMem(x);
-
- SetZone(zone);
- }
-
- if (g->idleTrigCalcs) {
- for (a = 0; a < kTwoPi; ) {
- w += log(abs(atan(cos(a) * sin(a))));
- a += kTwoPi/256;
- }
- }
- }
-
- void DoMyClose(Ptr storage)
- {
- GlobalsPtr g = (GlobalsPtr) storage;
- OSErr err;
-
- /* First thing to do is to free up all the RAM we allocated for this window.
- Here's what might be sitting around:
-
- Ptrs
- ----
- g->inBuf
- g->lines
- g->lineStarts
- */
-
- if (g->lines) DisposPtr(g->lines);
- g->lines = nil;
-
- if (g->lineStarts) DisposPtr((Ptr) g->lineStarts);
- g->lineStarts = nil;
-
- UninstallWindow(g->theWindow);
- g->theWindow = nil;
- }
-
- void OpenNewWindow(void)
- {
- GlobalsPtr g = nil;
- WindowPtr theWindow = nil;
- Rect r = kDefaultNewWindowRect;
- OSErr err;
-
- g = (GlobalsPtr) InstallWindow(&r, documentProc, true, "\pHey, It's Just A Test…",
- DoUpdate, DoClick, DefaultGrow, DefaultKey, DoMyClose, DefaultDeath,
- DefaultActivate, DefaultDeactivate, DoIdle, sizeof(GlobalsRecord),
- &theWindow);
-
- if (g)
- {
- g->theWindow = (WindowPtr) theWindow;
- g->numLines = 0; // initialize text display info
- g->textLen = 0;
- g->lines = nil;
- g->lineStarts = nil;
- g->curLine = 0;
-
- ShowWindow(theWindow);
-
- SetPort(theWindow);
- TextFont(kDisplayFont); // set the text drawing modes for our window
- TextSize(kDisplaySize);
- TextFace(kDisplayFace);
- TextMode(srcCopy);
-
- InitTextDisplay(g); // and set up data structures to display the converted file
-
- globals = g; // used by VoiceSearch()
- gStrLen = 0;
-
- }
- }
-
- /* =============================
- Menu Methods
- ============================= */
-
- void DoAbout(void)
- {
- DialogPtr dialog;
- short item;
-
- dialog = GetNewDialog(kAboutID, nil, (WindowPtr) -1);
- if (!dialog) return;
-
- ModalDialog(nil, &item);
-
- DisposeDialog(dialog);
- }
-
- void MenuPageUp(void)
- {
- PageUp((GlobalsPtr) GetWindowStorage(FrontWindow()));
- }
-
- void MenuPageDown(void)
- {
- PageDown((GlobalsPtr) GetWindowStorage(FrontWindow()));
- }
-
- void MenuLineUp(void)
- {
- GlobalsPtr g = (GlobalsPtr) GetWindowStorage(FrontWindow());
-
- if (g->curLine)
- GoToLine(g, g->curLine - 1);
- }
-
- void MenuLineDown(void)
- {
- GlobalsPtr g;
-
- g = (GlobalsPtr) GetWindowStorage(FrontWindow());
-
- if (g->curLine < (g->numLines - 1))
- GoToLine(g, g->curLine + 1);
- }
-
-
- void MenuGoToTop(void)
- {
- GoToLine((GlobalsPtr) GetWindowStorage(FrontWindow()), 0);
- }
-
- void MenuGoToBottom(void)
- {
- GlobalsPtr g = (GlobalsPtr) GetWindowStorage(FrontWindow());
-
- GoToLine(g, g->numLines);
- }
-
-
- #define NOW (*(unsigned long *) 0x016A) // Ticks = 0x16A, /*[GLOBAL VAR] Current number of ticks since system startup (long)
- #define DBRA (*(unsigned short *) 0x0D00) // TimeDBRA = 0x0D00, /*[GLOBAL VAR] (word) number of iterations of DBRA per millisecond*/
-
- void MenuTimeTest(void)
- {
- GlobalsPtr g = (GlobalsPtr) GetWindowStorage(FrontWindow());
- Int64Bit start, end;
- unsigned short count = DBRA - 1; // pick up TimeDBRA value
- unsigned long t;
- long microTrap = NGetTrapAddress(0xA193, OSTrap); // get addr of Microseconds trap routine
-
- t = NOW;
-
- while (t == NOW);
-
- t = NOW;
-
- Microseconds(&start);
-
- while (t == NOW);
-
- Microseconds(&end);
-
- ShowNumCR("Elapsed Microseconds in 1 Tick: %lu", end.loLong-start.loLong);
-
- ShowNumCR("TimeDBRA: %hu", (unsigned short) (*(unsigned short *) 0x0D00));
- ShowNumCR("DBRA Count: %hu", (unsigned short) count);
-
- asm {
- move sr,-(sp) ; save interrupt status
- ori #0x0700,sr ; mask off all interrupts
-
- ; inline call to the Microseconds trap
- lea start,a1
- move.l microTrap, a0
- jsr (a0)
- move.l d0, start.loLong ; only take the lower word
- }
-
- // Microseconds(&start);
-
- asm {
- move.w count,d0
- @loop: dbra d0,@loop
- }
-
- // Microseconds(&end);
-
- asm {
- ; inline call to the Microseconds trap
- lea end,a1
- move.l microTrap, a0
- jsr (a0)
- move.l d0, end.loLong ; only take the lower word
-
- move (sp)+,sr ; restore interrupts
- }
-
- ShowNumCR("Elapsed Microseconds: %lu", end.loLong-start.loLong);
-
- ComputeWindowLines(g);
-
- GoToLine(g, (g->numLines > g->displayLines) ? g->numLines - g->displayLines : 0);
-
- RefreshWindow(g);
- }
-
- void Wait (unsigned long ticks)
- {
- unsigned long stopTime = NOW + ticks;
-
- while (NOW < stopTime);
- }
-
-
- void MenuGetTextFile( void )
- {
- SFReply theReply;
- Point where = {20, 90};
- SFTypeList typeList = {'TEXT'};
- OSErr err;
- short fRefNum = 0;
- long fileLen;
- Handle textHandle = nil;
-
- MenuShutUp(); // stop any active speech
-
- SFGetFile(where, 0, 0, 1, typeList, 0, &theReply); /* get a text file */
-
- if (theReply.good)
- {
- err = FSOpen(theReply.fName, theReply.vRefNum, &fRefNum); /* Open the file */
- if (err) { /* failed on open */
- fRefNum = 0;
- goto BOMB_OUT;
- }
-
- err = GetEOF(fRefNum, &fileLen); /* find out how long file is */
- if (err) goto BOMB_OUT;
-
- textHandle = NewHandle(fileLen); /* get some memory to hold text */
- if (!textHandle) {
- err = MemError();
- goto BOMB_OUT;
- }
-
- MoveHHi(textHandle);
- HLock(textHandle);
-
- err = FSRead(fRefNum, &fileLen, *textHandle); /* read in the text */
- if (err) goto BOMB_OUT;
-
- FSClose(fRefNum); /* close the disk file */
- }
-
- if (gText) // free up any prior text data handle
- DisposeHandle(gText);
-
- gText = textHandle; // save handle to new text data
-
- return; // everything worked
-
- //______________ ERROR HANDLERS ________________________________________
-
- BOMB_OUT:
- SysBeep(10); // should put up some alert here!
-
- if (fRefNum != 0) // opened a file
- FSClose(fRefNum); // close it
-
- if (textHandle) // allocated some RAM
- DisposeHandle(textHandle); // free it up
- }
-
- void BuildVoiceMenu(void)
- {
- OSErr err;
- short voiceCount;
- short i;
- VoiceDescription vd;
-
- InstallMenu("\pVoices");
- InstallItem("\pDefault Voice", MenuVoiceSelect);
-
- err = CountVoices(&voiceCount);
-
- for (i = 1; i <= voiceCount; i++) {
- err = GetIndVoice(i, &gVoiceSpec[i]);
- err = GetVoiceDescription(&gVoiceSpec[i], &vd, sizeof(VoiceDescription));
-
- InstallItem(vd.name, MenuVoiceSelect);
- }
-
- gCurrentVoice = 0; // use Default voice
- }
-
- void MenuVoiceSelect (void)
- {
- gCurrentVoice = LoWrd(gLastMenuSelect) - 1;
- }
-
- void MenuTalk (void)
- {
- OSErr err;
-
- if (gSpeechChannel) {
- err = DisposeSpeechChannel(gSpeechChannel);
- gSpeechChannel = nil;
- }
-
- if (gText) {
- if (gCurrentVoice == 0)
- err = NewSpeechChannel(0, &gSpeechChannel);
- else
- err = NewSpeechChannel(&gVoiceSpec[gCurrentVoice], &gSpeechChannel);
-
- if (err == noErr) {
- if (gSpeechRate)
- err = SetSpeechInfo(gSpeechChannel, soRate, &gSpeechRate);
- err = SpeakText(gSpeechChannel, *gText, GetHandleSize(gText));
- }
- }
- else
- SysBeep(1);
- }
-
- void MenuShutUp (void)
- {
- OSErr err;
-
- if (gSpeechChannel) {
- err = DisposeSpeechChannel(gSpeechChannel);
- gSpeechChannel = nil;
- }
- }
-
- void MenuSystemVersionTest (void)
- {
- GlobalsPtr g = (GlobalsPtr) GetWindowStorage(FrontWindow());
- OSErr err;
- long systemVersion;
-
- err = Gestalt(gestaltSystemVersion, &systemVersion); // get our system version
-
- ShowNumCR("System Version: %lx", systemVersion);
- UpdateDisplay(g);
- }
-
- void MenuToggleIdleTrigCalcs (void)
- {
- GlobalsPtr g = (GlobalsPtr) GetWindowStorage(FrontWindow());
-
- g->idleTrigCalcs = !g->idleTrigCalcs; // toggle idle calcs variable
-
- if (g->idleTrigCalcs) {
- ShowStrCR("Starting idle time trigonometric calculations…");
- }
- else {
- ShowStrCR("Stopping idle time trigonometric calculations…");
- }
-
- UpdateDisplay(g);
- }
-
- void MenuTogglePurgeCompact (void)
- {
- GlobalsPtr g = (GlobalsPtr) GetWindowStorage(FrontWindow());
-
- g->idlePurgeCompact = !g->idlePurgeCompact; // toggle idle purge variable
-
- if (g->idlePurgeCompact) {
- ShowStrCR("Starting idle time memory purge & compact…");
- }
- else {
- ShowStrCR("Stopping idle time memory purge & compact…");
- }
-
- UpdateDisplay(g);
- }
-
- void MenuQuit (void)
- {
- MenuShutUp(); // shut down any speech
- DoQuit(); // call normal shut down routine in Big Easy
- }
-
- void MenuMeasureRAM (void)
- {
- GlobalsPtr g = (GlobalsPtr) GetWindowStorage(FrontWindow());
- long mem, x;
- long appTotal, appContig;
- long sysTotal, sysContig;
- long appMem, sysMem;
- THz zone;
-
- zone = GetZone();
-
- #if 1
- SetZone(ApplicZone());
- PurgeSpace(&appTotal, &appContig);
- SetZone(SystemZone());
- PurgeSpace(&sysTotal, &sysContig);
- appMem = appTotal;
- sysMem = sysTotal;
- #else
- x = 0xFFFFFFFF;
- SetZone(ApplicZone());
- PurgeMem(x);
- mem = CompactMem(x);
- appMem = FreeMem();
-
- SetZone(SystemZone());
- PurgeMem(x);
- mem = CompactMem(x);
- sysMem = FreeMem();
- #endif
-
- SetZone(zone);
-
- ShowNumCR("Application Heap Available: %ld", appMem);
- ShowNumCR("System Heap Available: %ld", sysMem);
-
- UpdateDisplay(g);
- }
-
-
- void MenuSpeakFaster (void)
- {
- GlobalsPtr g = (GlobalsPtr) GetWindowStorage(FrontWindow());
- Fixed rate, newRate, oldRate;
- OSErr err;
-
- if (gSpeechChannel) {
- err = GetSpeechRate(gSpeechChannel, &oldRate);
- rate = newRate = oldRate;
-
- while (rate == oldRate) {
- newRate += (1 << 16);
-
- if (abs(newRate - oldRate) > (150 << 16))
- break; // bust out if we aren't getting anywhere
-
- err = SetSpeechRate(gSpeechChannel, newRate);
- err = GetSpeechRate(gSpeechChannel, &rate);
- }
-
- gSpeechRate = rate; // save the new rate
-
- ShowNumCR("New Speaking Rate: %f", rate/65536.0);
- UpdateDisplay(g);
- }
- }
-
- void MenuSpeakSlower (void)
- {
- GlobalsPtr g = (GlobalsPtr) GetWindowStorage(FrontWindow());
- Fixed rate, newRate, oldRate;
- OSErr err;
-
- if (gSpeechChannel) {
- err = GetSpeechRate(gSpeechChannel, &oldRate);
- rate = newRate = oldRate;
-
- while (rate == oldRate) {
- newRate -= (1 << 16);
-
- if ((abs(oldRate - newRate) > (150 << 16))
- || (newRate < (1 << 16)))
- break; // bust out if we aren't getting anywhere
-
- err = SetSpeechRate(gSpeechChannel, newRate);
- err = GetSpeechRate(gSpeechChannel, &rate);
- }
-
- gSpeechRate = rate; // save the new rate
-
- ShowNumCR("New Speaking Rate: %f", rate/65536.0);
-
- UpdateDisplay(g);
- }
- }
-
- /* =============================
- Main Entry Point
- ============================= */
-
- void Bootstrap(void)
- {
- InstallMenu("\pFile");
- /* InstallItem("\pNew/N", OpenNewWindow);*/
- InstallItem("\pOpen/O", MenuGetTextFile);
- /* InstallItem("\pClose/W", DoCloseWindow);*/
- InstallItem("\p(-", nil);
- InstallItem("\pQuit/Q", MenuQuit);
-
- InstallEditMenu(nil,nil,nil,nil,nil);
-
- /* InstallMenu("\pPosition");*/
- /* InstallItem("\pTop/T", MenuGoToTop);*/
- /* InstallItem("\pBottom/B", MenuGoToBottom);*/
- /* InstallItem("\pPage Up/U", MenuPageUp);*/
- /* InstallItem("\pPage Down/D", MenuPageDown);*/
- /* InstallItem("\pLine Up/¨", MenuLineUp);*/
- /* InstallItem("\pLine Down/∂", MenuLineDown);*/
-
- InstallMenu("\pSpeech");
- InstallItem("\pTalk/T", MenuTalk);
- InstallItem("\pShutUp/.", MenuShutUp);
- InstallItem("\p(-", nil);
- InstallItem("\pSpeak Faster/=", MenuSpeakFaster);
- InstallItem("\pSpeak Slower/-", MenuSpeakSlower);
-
- /* InstallMenu("\pTiming");*/
- /* InstallItem("\pTime Some Stuff/K", MenuTimeTest);*/
-
- InstallMenu("\pIdle Tasks");
- InstallItem("\pShow System Version/1", MenuSystemVersionTest);
- InstallItem("\pMeasure Available RAM/2", MenuMeasureRAM);
- InstallItem("\p(-", nil);
- InstallItem("\pTrig Calculations/3", MenuToggleIdleTrigCalcs);
- InstallItem("\pMemory Purge & Compact/4", MenuTogglePurgeCompact);
-
- BuildVoiceMenu();
- OpenNewWindow();
- MenuGetTextFile();
- }
-
-
-
-