IMAGE record EXTERNAL olib EXTERNAL hwim INCLUDE p_std.h INCLUDE p_gen.h INCLUDE p_que.h INCLUDE p_object.h INCLUDE p_file.h INCLUDE epoc.h INCLUDE wlib.h INCLUDE olib.g INCLUDE varray.g INCLUDE appman.g INCLUDE timer.g INCLUDE bwin.g INCLUDE matcher.g INCLUDE listbox.g INCLUDE pulldown.g INCLUDE hwimman.g CLASS waveao active Sound file record and play { REPLACE ao_init Queue into appman and init callback REPLACE ao_run Call back REPLACE ao_cancel Cancel sound ADD wv_record Start recording a file ADD wv_play Start playing a file ADD wv_stop Start playing/recording a file PROPERTY { WORD request; Request type PR_ROOT *hdone; Callback handle on completion UWORD done_record; Callback method on record completion UWORD done_play; Callback method on playback completion } } CLASS wvefile root Sound file { ADD wve_new Create a new file ADD wve_open Open an existing file ADD wve_sense_fname Sense the file name (for reading) ADD wve_sense_info Fill in a WVEFILE_INFO struct ADD wve_set_repeats Set the repeat and silence TYPES { typedef struct { TEXT *device; address of device character TEXT *name; file name component WORD ret; possible error return WORD nmlen; length of file name UWORD duration; duration in 10ths of a sec UWORD silence; silence in 10ths of a second UWORD repeats; number of repeats ULONG total; total time in seconds (with repeats & silence) ULONG samples; number of samples ULONG flen; file length } WVEFILE_INFO; } PROPERTY { VOID *fcb; WORD ret; P_FPARSE crk; TEXT fname[P_FNAMESIZE]; P_INFO info; SndFile head; } } CLASS receng root { ADD eng_init ADD eng_new_file Start a new file ADD eng_open_file Open an existing file (close any current file) ADD eng_sense_file Get the current file name ADD eng_file_info Get information on the current file ADD eng_default_disk Return default device for new file ADD eng_view_update Call back view to update itself ADD eng_done_record Callback from active object on record completion ADD eng_done_play Callback from active object on play completion ADD eng_sound_play Play the current file ADD eng_sound_record Record to the current file ADD eng_sound_stop Stop the current record or playback ADD eng_set_repeats Set the number of repeats and trailing silence ADD eng_set_prefs Set the persistent preferences ADD eng_sense_prefs Sense the persistent preferences TYPES { typedef struct { WORD volume; volume for playback WORD duration; maximum duration in 10ths of a sec WORD disk; preferred disk for new files } RECENG_PREFS; } PROPERTY 2 { PR_WVEFILE *wvefile; digital sound file PR_WAVEAO *waveao; record/play active object PR_ROOT *hview; callback view handle UWORD mupdate; callback view method for update UWORD msound; callback view method for begin sound RECENG_PREFS prefs; persistent preferences } } CLASS reccom comman { REPLACE com_file_change from System application ADD com_set_repeat Set repeat menu command ADD com_rep_alarm Repeat for alarm menu command ADD com_preferences Set preferences menu command ADD com_new_file New file menu command ADD com_open_file Open file menu command ADD com_record_new Record new (Tab) button ADD com_re_record Record over (Space) button TYPES { typedef struct { WORD duration; TEXT fname[P_FNAMESIZE]; } RECRBUF; } } CLASS recman hwimman { REPLACE am_clean_up } CLASS recwserv wserv { REPLACE ws_dyn_init } CLASS timebar active { REPLACE ao_init Queue into appman and set priority REPLACE ao_queue Queue next read REPLACE ao_run Update on tick ADD tb_start Start time bar ADD tb_stop Stop time bar ADD tb_draw For redraw PROPERTY { WORD visible; Visible if TRUE WORD wid; Window id of landlord LONG tenths0; Initial value of timer LONG tenths; Counted down value of timer WORD x; Bar value in pixels P_RECT rect; Bar rectangle } } CLASS recbut root { REPLACE destroy ADD rb_init ADD rb_draw ADD rb_depress ADD rb_hide PROPERTY { WORD hide; Hide button if TRUE WORD wid; Window id of landlord P_RECT rect; Button rectangle VOID *buttxt; As loaded from resource file TEXT *inlabel; Button label TEXT *caption; Caption above button WORD caplen; Caption length } } CLASS reccli bwin { REPLACE destroy REPLACE wn_connect REPLACE wn_draw REPLACE wn_key ADD cl_update Viewed data has changed ADD cl_sound_filter To catch keys while recording or playing ADD cl_pause_filter To catch keys while waiting to record ADD cl_begin_sound ADD cl_pause PROPERTY 6 { PR_TIMEBAR *timebar; PR_RECBUT *recbut[5]; UINT duration; Stored for pause to record WORD running; TRUE if sound record/play running WORD width; Window width VOID *clitxt; Allocated resource TEXT *secs; Seconds suffix TEXT *title; Title format string TEXT *sub; Subtitle format string TEXT tsep; Time separator UBYTE spare; } } CLASS setrep dlgbox { REPLACE dl_dyn_init REPLACE dl_key } CLASS setpref dlgbox { REPLACE dl_dyn_init REPLACE dl_key } CLASS recnew dlgbox Record to new file dialog { REPLACE dl_dyn_init REPLACE dl_key } CLASS recnewdef recnew Record to new file dialog with a default name { REPLACE dl_set_size } CLASS recexist recnew Record to existing file dialog { REPLACE dl_dyn_init REPLACE dl_set_size } CLASS recopen dlgbox Open file dialog { REPLACE dl_key }