home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_10_06
/
1006047a
< prev
next >
Wrap
Text File
|
1991-11-07
|
1KB
|
58 lines
LISTING TWO
#include "channel.hpp"
// initialize the channel
void CHANNEL::prep(int line)
{
lineno = line;
// enable events for this line: change in loop
// current, ring detected, off-hook or on-hook
// completed. Answer after 1 ring.
setcst(lineno, C_LC | C_RING | C_OFFH | C_ONH, 1);
// initial state is wait for ring
begin_func = &CHANNEL::wait_for_ring;
end_func = &CHANNEL::wait_complete;
begin_state();
}
// play the message back to the user
int CHANNEL::play()
{
printf("Playing %s on %d\n", msgname, lineno);
clrrwb(&rwb); // clear the read/write block
char fname[13];
sprintf(fname, "%s%s", msgname, SPEECH_EXT);
// open the handle to be played back, should
// check against -1 return in production code
rwb.filehndl = open(fname, O_RDONLY | O_BINARY);
// instruct card to cause event if keypad is
// pressed or loop signal detected
rwb.maxdtmf = 1;
rwb.loopsig = 1;
return(xplayf(lineno, PM_NORM, &rwb));
}
// execute the state begin function
int CHANNEL::begin_state()
{
INTPROC fp = this->begin_func;
return (this->*fp)();
}
// execute the state end function
void CHANNEL::cmplt_state(int evtcode)
{
VOIDPROC fp = this->end_func;
(this->*fp)(evtcode);
}