/* RECCOM.C Sound record/playback application command manager */ #include #include #include #include GLREF_D PR_RECENG * const receng; GLREF_D TEXT * const DatUsedPathNamePtr; LOCAL_C INT LaunchDial(VOID *buf,INT id,INT class) { DL_DATA dial_data; dial_data.id=id; dial_data.rbuf=buf; dial_data.pdlg=NULL; return(hLaunchDial(CAT_RECORD_RECORD,class,&dial_data)); } LOCAL_C VOID RecordToNewFile(TEXT *fname,INT DefaultName) { INT len; P_FPARSE crk; RECRBUF rb; rb.duration=((RECENG_PREFS *)p_send2(receng,O_ENG_SENSE_PREFS))->duration; f_fparse(fname,DatUsedPathNamePtr,&rb.fname[0],&crk); len=crk.system+crk.device+crk.path; if (DefaultName) len+=crk.name; rb.fname[len]=0; if (!LaunchDial(&rb,RECORD_NEW_DL,DefaultName?C_RECNEWDEF:C_RECNEW)) p_send3(receng,O_ENG_OPEN_FILE,NULL); } #pragma METHOD_CALL METHOD INT reccom_com_file_change(PR_RECCOM *self,INT command,TEXT *newname) { p_send2(receng,O_ENG_SOUND_STOP); switch (command) { case H_COMMAND_CREATE_FILE: p_send3(receng,O_ENG_NEW_FILE,newname); p_send2(receng,O_ENG_VIEW_UPDATE); RecordToNewFile((TEXT *)p_send2(receng,O_ENG_SENSE_FILE),TRUE); break; case H_COMMAND_OPEN_FILE: p_send3(receng,O_ENG_OPEN_FILE,newname); break; } return(0); /* no leave() */ } METHOD VOID reccom_com_new_file(PR_RECCOM *self) /* Called on selecting the New file menu command. */ { TEXT fspec[4]; fspec[0]=p_send2(receng,O_ENG_DEFAULT_DISK); fspec[1]=':'; fspec[2]=0; RecordToNewFile(&fspec[0],FALSE); } METHOD VOID reccom_com_record_new(PR_RECCOM *self) /* Called on pressing the Record new (Tab) button. */ { INT i,device; P_INFO info; TEXT name[32]; TEXT fspec[P_FNAMESIZE]; device=p_send2(receng,O_ENG_DEFAULT_DISK); for (i=1;i<100;i++) { hAtos(&name[0],DFLT_FNAME,device,i); /* "%c:RECORD%02d" */ p_fparse(&name[0],DatUsedPathNamePtr,&fspec[0],NULL); if (p_finfo(&fspec[0],&info)) { /* file does not exist - so use the generated name */ RecordToNewFile(&fspec[0],TRUE); return; } } RecordToNewFile("",FALSE); } METHOD VOID reccom_com_open_file(PR_RECCOM *self) /* Called on selecting the Open file menu command. */ { RECRBUF rb; p_scpy(&rb.fname[0],(TEXT *)p_send2(receng,O_ENG_SENSE_FILE)); if (!LaunchDial(&rb,OPEN_FILE_DL,C_RECOPEN)) return; /* rb.fname[] contains file name */ p_send3(receng,O_ENG_OPEN_FILE,&rb.fname); } METHOD VOID reccom_com_re_record(PR_RECCOM *self) /* Called on pressing the Record over (Space) button. */ { TEXT *fname; WVEFILE_INFO info; P_INFO finfo; RECRBUF rb; p_send3(receng,O_ENG_FILE_INFO,&info); fname=(TEXT *)p_send2(receng,O_ENG_SENSE_FILE); if (!info.duration) { /* file does not exist? */ if (p_finfo(fname,&finfo)<0) RecordToNewFile(fname,TRUE); return; } rb.duration=info.duration; p_scpy(&rb.fname[0],fname); if (!LaunchDial(&rb,RE_RECORD_DL,C_RECEXIST)) return; } METHOD VOID reccom_com_set_repeat(PR_RECCOM *self) { LaunchDial(NULL,SET_REP_DL,C_SETREP); } METHOD VOID reccom_com_rep_alarm(PR_RECCOM *self) { if (!hConfirm(ADJUST_ALARM_CONFIRM)) return; p_send4(receng,O_ENG_SET_REPEATS,0,150); /* set total time to 15 seconds */ } METHOD VOID reccom_com_preferences(PR_RECCOM *self) { LaunchDial(NULL,PREFERENCES_DL,C_SETPREF); }