Files
sibo-playground/code/SIBOSDK/record/reccom.c
T

152 lines
3.8 KiB
C
Raw Normal View History

2026-07-06 18:01:36 +01:00
/*
RECCOM.C
Sound record/playback application command manager
*/
#include <record.g>
#include <record.rsg>
#include <hwim.h>
#include <s_.rsg>
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);
}