#include <tscope.h>
#include <tscope/internal.h>
struct stopsignal_param {
int freq;
int staircase;
int ssd;
int step;
__int64 soundtime;
__int64 cleartime;
__int64 maxtime;
} stopsignal;
int ts_stop(__int64 * time, __int64 * errortime, int tmp_ssd)
{
ts_sinefreq(stopsignal.freq);
stopsignal.ssd = tmp_ssd;
ts_flushresp();
int usrnput = 0, ddln = 0, cleared = 0, stop_sound = 0;
__int64 prev, start, tm;
__int64 err = 0, lapse = 0;
AUDIOSTREAM *str;
str = ts_makestream();
start = prev = ts_time();
do {
if (lapse > mtt(stopsignal.ssd)
&& (lapse < mtt(stopsignal.ssd) + stopsignal.soundtime))
ts_updatestream(str);
tm = ts_time();
err = tm - prev;
prev = tm;
lapse = tm - start;
usrnput = ts_respstatus();
if (stopsignal.maxtime > 0)
if (lapse >= stopsignal.maxtime)
ddln = 1;
if (stopsignal.cleartime > 0)
if (lapse >= stopsignal.cleartime && !cleared) {
cleared = 1;
ts_clrscr();
}
if ((lapse > mtt(stopsignal.ssd) + stopsignal.soundtime)
&& !stop_sound) {
stop_sound = 1;
ts_killstream(str);
}
} while (!usrnput && !ddln);
if (!stop_sound)
ts_killstream(str);
*time = tm;
*errortime = err;
if (stopsignal.staircase == ON) {
if ((usrnput > 0 && stopsignal.ssd > stopsignal.step))
stopsignal.ssd = stopsignal.ssd - stopsignal.step;
else if (usrnput == 0)
stopsignal.ssd = stopsignal.ssd + stopsignal.step;
}
return usrnput;
}
int ts_go(__int64 * time, __int64 * errortime)
{
ts_flushresp();
int usrnput = 0, ddln = 0, cleared = 0;
__int64 prev, start, tm;
__int64 err = 0, lapse = 0;
start = prev = ts_time();
do {
tm = ts_time();
err = tm - prev;
prev = tm;
lapse = tm - start;
usrnput = ts_respstatus();
if (stopsignal.maxtime > 0)
if (lapse >= stopsignal.maxtime)
ddln = 1;
if (stopsignal.cleartime > 0)
if (lapse >= stopsignal.cleartime && !cleared) {
cleared = 1;
ts_clrscr();
}
} while (!usrnput && !ddln);
*time = tm;
*errortime = err;
return usrnput;
}
void stop_init()
{
stopsignal.freq = 750;
stopsignal.soundtime = mtt(75);
stopsignal.cleartime = mtt(0);
stopsignal.maxtime = mtt(1500);
stopsignal.staircase = ON;
stopsignal.step = 50;
ts_volume(60);
}