2364 lines
62 KiB
C
2364 lines
62 KiB
C
// DEBUGING for SOUNDxD
|
||
|
||
#include <windows.h>
|
||
#include <winuser.h>
|
||
#include <commctrl.h>
|
||
#include <stdio.h>
|
||
#include <stdlib.h>
|
||
|
||
#include "resource.h"
|
||
|
||
#include "SNDinc.h"
|
||
|
||
#include "snddll.h"
|
||
|
||
#include "snddbg.h"
|
||
#include "sndplay.h"
|
||
#include "sndvect.h"
|
||
#include "sndres.h"
|
||
#include "sndini.h"
|
||
#include "sndtheme.h"
|
||
#include "sndvirt.h"
|
||
#include "sndevent.h"
|
||
|
||
#ifdef SUPERVISATER
|
||
|
||
static HINSTANCE hSupervisaterDLL=NULL;
|
||
static HANDLE hSupervisaterThread=NULL;
|
||
static HANDLE hMutex=NULL;
|
||
static DWORD dwSupervisaterThreadId=0;
|
||
static HWND hwndMain=NULL,hwndSupervisater=NULL,hwndHistoric=NULL,hwndVisuSnd=NULL,hwndDiversSnd=NULL,hwndVisuVirt=NULL;
|
||
static SndBool bSupervisaterActive=FALSE;
|
||
|
||
#define GOTO_BYEBYE 2
|
||
#define GOTO_SUPERVISATER 3
|
||
#define GOTO_HISTORIC 4
|
||
#define GOTO_VISUSND 5
|
||
#define GOTO_DIVERS 6
|
||
#define GOTO_VISUVIRT 7
|
||
|
||
/************ pour objet states ******************************************/
|
||
//-------- infos pour supervisater
|
||
typedef struct dbgMICRO_DESCRIPTION_ *pdbgMICRO_DESCRIPTION;
|
||
|
||
SNDLST2_M_DynamicUseListOf(pdbgMICRO_DESCRIPTION);
|
||
|
||
typedef struct dbgMICRO_DESCRIPTION_{
|
||
long Id;
|
||
long sndId;
|
||
MicroParam par;
|
||
SNDLST2_M_DynamicElementDeclaration(pdbgMICRO_DESCRIPTION)
|
||
}dbgMICRO_DESCRIPTION;
|
||
|
||
typedef struct dbgLISTE_MICRO_{
|
||
SNDLST2_M_DynamicAnchorDeclaration(pdbgMICRO_DESCRIPTION) pList;
|
||
}dbgLISTE_MICRO;
|
||
|
||
//-------stockage des associations
|
||
typedef struct dbgSND_tdstEvtStruct_ *pdbgSND_tdstEvtStruct;
|
||
SNDLST2_M_DynamicUseListOf(pdbgSND_tdstEvtStruct);
|
||
typedef struct dbgSND_tdstEvtStruct_
|
||
{
|
||
SND_tdstBlockEvent *evt_pstPtr;
|
||
tdxId evt_Id;
|
||
tdeTypeEvent evt_eType;
|
||
long asso;
|
||
SNDLST2_M_DynamicElementDeclaration(pdbgSND_tdstEvtStruct)
|
||
} dbgSND_tdstEvtStruct;
|
||
typedef struct dbgLISTE_EVT_{
|
||
SNDLST2_M_DynamicAnchorDeclaration(pdbgSND_tdstEvtStruct) pList;
|
||
} dbgLISTE_EVT;
|
||
|
||
typedef struct dbgSND_tdstObjectStruct_ *pdbgSND_tdstObjectStruct;
|
||
SNDLST2_M_DynamicUseListOf(pdbgSND_tdstObjectStruct);
|
||
typedef struct dbgSND_tdstObjectStruct_
|
||
{
|
||
//long asso; //id de l'asso SOUND3D
|
||
long indice; //id de l'objet
|
||
SoundParam par;
|
||
dbgLISTE_EVT evts;
|
||
SNDLST2_M_DynamicElementDeclaration(pdbgSND_tdstObjectStruct)
|
||
} dbgSND_tdstObjectStruct;
|
||
typedef struct dbgLISTE_OBJECT_{
|
||
SNDLST2_M_DynamicAnchorDeclaration(pdbgSND_tdstObjectStruct) pList;
|
||
} dbgLISTE_OBJECT;
|
||
|
||
//variables
|
||
static dbgLISTE_MICRO dbg_micros;//liste des micros (utiliser pas SynchroSonore)
|
||
static dbgLISTE_OBJECT dbg_objects; //description des associations courantes
|
||
static BOOL dbg_micros_init=FALSE;
|
||
static BOOL dbg_objects_init=FALSE;
|
||
|
||
static BOOL delete_objects=FALSE;
|
||
|
||
//resource view-list
|
||
typedef struct {
|
||
char name[20];
|
||
int width;
|
||
int id_col;
|
||
} info_column;
|
||
#define NB_MICRO_COLUMN 10
|
||
static info_column micro_column[NB_MICRO_COLUMN]
|
||
={{"Micro ID",60},{"X:",60},{"Y:",60},{"Z:",60},{"NX:",60},{"NY:",60},{"NZ:",60},{"TX:",60},{"TY:",60},{"TZ:",60},};
|
||
#define MIC_COL_ID 0
|
||
#define MIC_COL_X 1
|
||
#define MIC_COL_Y 2
|
||
#define MIC_COL_Z 3
|
||
#define MIC_COL_DNX 4
|
||
#define MIC_COL_DNY 5
|
||
#define MIC_COL_DNZ 6
|
||
#define MIC_COL_DTX 7
|
||
#define MIC_COL_DTY 8
|
||
#define MIC_COL_DTZ 9
|
||
#define NB_OBJECT_COLUMN 7
|
||
static info_column object_column[NB_OBJECT_COLUMN]
|
||
={{"Object ID",60},{"X:",60},{"Y:",60},{"Extra:",60},{"Z:",60},{"D:",80},{"Evts:ptr(Id)-asso",200}};
|
||
#define OBJ_COL_ID 0
|
||
#define OBJ_COL_X 1
|
||
#define OBJ_COL_Y 2
|
||
#define OBJ_COL_Z 3
|
||
#define OBJ_COL_EXTRA 4
|
||
#define OBJ_COL_DIST 5
|
||
#define OBJ_COL_EVTS 6
|
||
|
||
/*************** pour historic *************************/
|
||
#define TAILLE_HISTORIC 256
|
||
|
||
typedef struct {
|
||
SYSTEMTIME time;
|
||
SND_tdstBlockEvent *evt_pstPtr;
|
||
tdxId evt_Id;
|
||
tdeTypeEvent evt_eType;
|
||
tdstBlockResourceMem *res_pstPtr;
|
||
long obj;
|
||
long type_obj;
|
||
long asso;
|
||
char info[80];
|
||
} historic_element;
|
||
|
||
static historic_element historic[TAILLE_HISTORIC];
|
||
|
||
static int next_element=0;
|
||
static tdstBlockResourceMem *res_for_editor=NULL;
|
||
static BOOL historic_init=FALSE;//FALSE tant que le tableau n'a pas <20>t<EFBFBD> initialis<69>
|
||
|
||
//resource view-list
|
||
#define NB_HISTORIC_COLUMN 6
|
||
static info_column historic_column[NB_HISTORIC_COLUMN]
|
||
={{"Time",80},{"Obj[ptr(type)]:",80},{"Evt[type(EdID)ptr]:",120},{"Rsv[name(EdId)ptr]:",160},{"Vol",40},{"Info:",160}};
|
||
#define HIS_COL_TIME 0
|
||
#define HIS_COL_OBJ 1
|
||
#define HIS_COL_EVT 2
|
||
#define HIS_COL_RSV 3
|
||
#define HIS_COL_VOL 4
|
||
#define HIS_COL_INFO 5
|
||
|
||
static BOOL filtre_evt=FALSE,filtre_obj=FALSE,filtre_type=FALSE;
|
||
static long filtre_evtval,filtre_objval,filtre_typeval;
|
||
static BOOL most_recent=FALSE;
|
||
static BOOL last_event_only=FALSE,last_res_only=FALSE;
|
||
static long nb_most_recent=10;
|
||
static long actual_most_recent=0;
|
||
static BOOL flagDebugBreak=FALSE;
|
||
|
||
typedef struct dbgEVENT_YET_DISPLAYED_ *pdbgEVENT_YET_DISPLAYED;
|
||
typedef struct dbgRES_YET_DISPLAYED_ *pdbgRES_YET_DISPLAYED;
|
||
|
||
SNDLST2_M_DynamicUseListOf(pdbgEVENT_YET_DISPLAYED);
|
||
SNDLST2_M_DynamicUseListOf(pdbgRES_YET_DISPLAYED);
|
||
|
||
typedef struct dbgEVENT_YET_DISPLAYED_{
|
||
SND_tdstBlockEvent* evt;
|
||
SNDLST2_M_DynamicElementDeclaration(pdbgEVENT_YET_DISPLAYED)
|
||
}dbgEVENT_YET_DISPLAYED;
|
||
typedef struct dbgRES_YET_DISPLAYED_{
|
||
tdstBlockResourceMem* res;
|
||
SNDLST2_M_DynamicElementDeclaration(pdbgRES_YET_DISPLAYED)
|
||
}dbgRES_YET_DISPLAYED;
|
||
|
||
typedef struct dbgLISTE_YET_DISPLAYED_{
|
||
SNDLST2_M_DynamicAnchorDeclaration(pdbgEVENT_YET_DISPLAYED) pListEvent;
|
||
SNDLST2_M_DynamicAnchorDeclaration(pdbgRES_YET_DISPLAYED) pListRes;
|
||
}dbgLISTE_YET_DISPLAYED;
|
||
|
||
dbgLISTE_YET_DISPLAYED DisplayList;
|
||
|
||
/***************** pour visuSND *****************************************/
|
||
//resource view-list
|
||
#define NB_VISUSND_COLUMN 8
|
||
static info_column visusnd_column[NB_VISUSND_COLUMN]
|
||
={{"Id",60},{"Rsv:",60},{"ID Rsv:",60},{"P:",20},{"Vol:",40},{"Pan:",40},{"Space:",40},{"Freq:",40}};
|
||
#define VISUSND_COL_ID 0
|
||
#define VISUSND_COL_RES 1
|
||
#define VISUSND_COL_RESID 2
|
||
#define VISUSND_COL_PAUSE 3
|
||
#define VISUSND_COL_VOL 4
|
||
#define VISUSND_COL_PAN 5
|
||
#define VISUSND_COL_SPACE 6
|
||
#define VISUSND_COL_FREQ 7
|
||
|
||
typedef struct dbgVISUSND_ELEMENT_ *pdbgVISUSND_ELEMENT;
|
||
|
||
SNDLST2_M_DynamicUseListOf(pdbgVISUSND_ELEMENT);
|
||
|
||
typedef struct dbgVISUSND_ELEMENT_{
|
||
long id;
|
||
tdstBlockResourceMem *res_pstPtr;
|
||
tdxId res_Id;
|
||
SoundParam par;
|
||
SndBool bPaused;
|
||
SNDLST2_M_DynamicElementDeclaration(pdbgVISUSND_ELEMENT)
|
||
}dbgVISUSND_ELEMENT;
|
||
|
||
typedef struct dbgVISUSND_LISTE_{
|
||
SNDLST2_M_DynamicAnchorDeclaration(pdbgVISUSND_ELEMENT) pList;
|
||
}dbgVISUSND_LISTE;
|
||
|
||
static dbgVISUSND_LISTE dbg_visusnd;
|
||
static BOOL dbg_visusnd_init=FALSE;
|
||
|
||
/***************** pour diversSND *****************************************/
|
||
//resource view-list
|
||
typedef struct dbgVOLUMELINE_DESCRIPTION_ *pdbgVOLUMELINE_DESCRIPTION;
|
||
|
||
SNDLST2_M_DynamicUseListOf(pdbgVOLUMELINE_DESCRIPTION);
|
||
|
||
typedef struct dbgVOLUMELINE_DESCRIPTION_{
|
||
long id;
|
||
long vol;
|
||
SNDLST2_M_DynamicElementDeclaration(pdbgVOLUMELINE_DESCRIPTION)
|
||
}dbgVOLUMELINE_DESCRIPTION;
|
||
|
||
typedef struct dbgLISTE_VOLUMELINE_{
|
||
SNDLST2_M_DynamicAnchorDeclaration(pdbgVOLUMELINE_DESCRIPTION) pList;
|
||
}dbgVOLUMELINE_MICRO;
|
||
|
||
static dbgVOLUMELINE_MICRO dbgVolumeLineSnd;
|
||
static BOOL dbgVolumeLineInit=FALSE;
|
||
|
||
#define NB_DIVERS_COLUMN 2
|
||
static info_column diverssnd_column[NB_DIVERS_COLUMN]
|
||
={{"Id",60},{"Vol:",60}};
|
||
#define DIVERSSND_COL_ID 0
|
||
#define DIVERSSND_COL_VOL 1
|
||
|
||
//************************ pour VisuVirt ********************************
|
||
#define NB_VV_COLUMN 8
|
||
static info_column vv_column[NB_VV_COLUMN]
|
||
={{"Id Voie",60},{"Paused",40},{"Res (Grp:Id (Ptr))",100},{"Loop",40},{"Norme:",60},{"Instance:",60},{"Voie audible:",80},{"Voie hard:",80}};
|
||
#define VV_COL_ID 0
|
||
#define VV_COL_PAUSE 1
|
||
#define VV_COL_RES 2
|
||
#define VV_COL_LOOP 3
|
||
#define VV_COL_NORME 4
|
||
#define VV_COL_INSTANCE 5
|
||
#define VV_COL_VA 6
|
||
#define VV_COL_VH 7
|
||
|
||
typedef struct dbgVISUVIRT_ELEMENT_ *pdbgVISUVIRT_ELEMENT;
|
||
|
||
SNDLST2_M_DynamicUseListOf(pdbgVISUVIRT_ELEMENT);
|
||
|
||
typedef struct dbgVISUVIRT_ELEMENT_{
|
||
p_virtual_voice id;//pointeur <20> ne pas utiliser; les champs sont copi<70>s ci dessous
|
||
SndReal rNorme;
|
||
long lInstance;
|
||
p_audible_voice audible;
|
||
long lVoice;
|
||
SndBool bPaused;
|
||
long lResId;
|
||
long lResRef;
|
||
SndBool bLoop;
|
||
//--- pour affichage
|
||
SndBool bDisplayed;
|
||
SndBool bStillActive;
|
||
SNDLST2_M_DynamicElementDeclaration(pdbgVISUVIRT_ELEMENT)
|
||
}dbgVISUVIRT_ELEMENT;
|
||
|
||
typedef struct dbgVISUVIRT_LISTE_{
|
||
SNDLST2_M_DynamicAnchorDeclaration(pdbgVISUVIRT_ELEMENT) pList;
|
||
long iIdModule;
|
||
char szDescription[128];
|
||
}dbgVISUVIRT_LISTE;
|
||
|
||
static dbgVISUVIRT_LISTE *p_vv_list;
|
||
|
||
static int iCurrentVirtModule=-1;
|
||
static int iNbVirtModule=0;
|
||
|
||
BOOL topmost=FALSE;
|
||
|
||
void SND_CALL dbgSND_fn_vKillEventToObjectPrivate(long indice,long asso);
|
||
|
||
|
||
SndReal dbg_calcul_pseudo_d(SndReal a,SndReal b)
|
||
{
|
||
SndReal aa,bb;
|
||
aa=abs(a);bb=abs(b);
|
||
|
||
if (aa<bb)
|
||
return (bb+(aa>>1));
|
||
else
|
||
return (aa+(bb>>1));
|
||
}
|
||
|
||
SndReal dbgSND_fn_rPseudoNormeVectorSnd(SndVector *v)
|
||
{
|
||
SndReal dx,dy,dz;
|
||
|
||
dx=abs(v->x);
|
||
dy=abs(v->y);
|
||
dz=abs(v->z);
|
||
|
||
return dbg_calcul_pseudo_d(dbg_calcul_pseudo_d(dx,dy),dz);
|
||
}
|
||
|
||
/************ pour objet states ******************************************/
|
||
void refresh_liste()
|
||
{
|
||
LV_FINDINFO lvf;
|
||
int i,iFind;
|
||
pdbgMICRO_DESCRIPTION pdbgMicro;
|
||
pdbgSND_tdstObjectStruct pdbgObj;
|
||
pdbgSND_tdstEvtStruct pevt;
|
||
char texte[80],texte2[256];
|
||
HWND hwnd;
|
||
SndVector vect;
|
||
|
||
if (hwndSupervisater)
|
||
{
|
||
if (!hMutex || (WaitForSingleObject(hMutex,0)==WAIT_OBJECT_0))
|
||
{
|
||
|
||
SNDLST2_M_DynamicForEachElementOf(&dbg_micros.pList,pdbgMicro,i)
|
||
{
|
||
hwnd=GetDlgItem(hwndSupervisater,IDC_LISTMICRO);
|
||
memset(&lvf,0,sizeof(LV_FINDINFO));
|
||
lvf.flags=LVFI_PARAM;
|
||
lvf.lParam=pdbgMicro->Id;
|
||
iFind=ListView_FindItem(hwnd,-1,&lvf);
|
||
|
||
sprintf(texte,"%6.3f",M_RealToDoubleSnd(pdbgMicro->par.pos.x));
|
||
ListView_SetItemText(hwnd,iFind,micro_column[MIC_COL_X].id_col,texte);
|
||
sprintf(texte,"%6.3f",M_RealToDoubleSnd(pdbgMicro->par.pos.y));
|
||
ListView_SetItemText(hwnd,iFind,micro_column[MIC_COL_Y].id_col,texte);
|
||
sprintf(texte,"%6.3f",M_RealToDoubleSnd(pdbgMicro->par.pos.z));
|
||
ListView_SetItemText(hwnd,iFind,micro_column[MIC_COL_Z].id_col,texte);
|
||
sprintf(texte,"%6.3f",M_RealToDoubleSnd(pdbgMicro->par.dirnor.x));
|
||
ListView_SetItemText(hwnd,iFind,micro_column[MIC_COL_DNX].id_col,texte);
|
||
sprintf(texte,"%6.3f",M_RealToDoubleSnd(pdbgMicro->par.dirnor.y));
|
||
ListView_SetItemText(hwnd,iFind,micro_column[MIC_COL_DNY].id_col,texte);
|
||
sprintf(texte,"%6.3f",M_RealToDoubleSnd(pdbgMicro->par.dirnor.z));
|
||
ListView_SetItemText(hwnd,iFind,micro_column[MIC_COL_DNZ].id_col,texte);
|
||
sprintf(texte,"%6.3f",M_RealToDoubleSnd(pdbgMicro->par.dirtan.x));
|
||
ListView_SetItemText(hwnd,iFind,micro_column[MIC_COL_DTX].id_col,texte);
|
||
sprintf(texte,"%6.3f",M_RealToDoubleSnd(pdbgMicro->par.dirtan.y));
|
||
ListView_SetItemText(hwnd,iFind,micro_column[MIC_COL_DTY].id_col,texte);
|
||
sprintf(texte,"%6.3f",M_RealToDoubleSnd(pdbgMicro->par.dirtan.z));
|
||
ListView_SetItemText(hwnd,iFind,micro_column[MIC_COL_DTZ].id_col,texte);
|
||
}
|
||
|
||
////
|
||
SNDLST2_M_DynamicForEachElementOf(&dbg_objects.pList,pdbgObj,i)
|
||
{
|
||
memset(&lvf,0,sizeof(LV_FINDINFO));
|
||
lvf.flags=LVFI_PARAM;
|
||
lvf.lParam=pdbgObj->indice;
|
||
iFind=ListView_FindItem(GetDlgItem(hwndSupervisater,IDC_LISTOBJECT),-1,&lvf);
|
||
|
||
sprintf(texte,"%6.3f",M_RealToDoubleSnd(pdbgObj->par.Pos.x));
|
||
ListView_SetItemText(GetDlgItem(hwndSupervisater,IDC_LISTOBJECT),iFind,object_column[OBJ_COL_X].id_col,texte);
|
||
sprintf(texte,"%6.3f",M_RealToDoubleSnd(pdbgObj->par.Pos.y));
|
||
ListView_SetItemText(GetDlgItem(hwndSupervisater,IDC_LISTOBJECT),iFind,object_column[OBJ_COL_Y].id_col,texte);
|
||
sprintf(texte,"%6.3f",M_RealToDoubleSnd(pdbgObj->par.Pos.z));
|
||
ListView_SetItemText(GetDlgItem(hwndSupervisater,IDC_LISTOBJECT),iFind,object_column[OBJ_COL_Z].id_col,texte);
|
||
sprintf(texte,"%6.3f",M_RealToDoubleSnd(pdbgObj->par.Freq));
|
||
ListView_SetItemText(GetDlgItem(hwndSupervisater,IDC_LISTOBJECT),iFind,object_column[OBJ_COL_EXTRA].id_col,texte);
|
||
|
||
texte2[0]=0;
|
||
SNDLST2_M_DynamicForEachElementOf(&dbg_micros.pList,pdbgMicro,i)
|
||
{
|
||
vect.x=pdbgObj->par.Pos.x-pdbgMicro->par.pos.x;
|
||
vect.y=pdbgObj->par.Pos.y-pdbgMicro->par.pos.y;
|
||
vect.z=pdbgObj->par.Pos.z-pdbgMicro->par.pos.z;
|
||
sprintf(texte,"%6.3f-",M_RealToDoubleSnd(dbgSND_fn_rPseudoNormeVectorSnd(&vect)));
|
||
strncat(texte2,texte,sizeof(texte2)-1-strlen(texte2));
|
||
}
|
||
ListView_SetItemText(GetDlgItem(hwndSupervisater,IDC_LISTOBJECT),iFind,object_column[OBJ_COL_DIST].id_col,texte2);
|
||
|
||
texte2[0]=0;
|
||
SNDLST2_M_DynamicForEachElementOf(&pdbgObj->evts.pList,pevt,i)
|
||
{
|
||
sprintf(texte,"[%x(%x)-%x]-",pevt->evt_pstPtr,pevt->evt_Id,pevt->asso);
|
||
strncat(texte2,texte,sizeof(texte2)-1-strlen(texte2));
|
||
}
|
||
ListView_SetItemText(GetDlgItem(hwndSupervisater,IDC_LISTOBJECT),iFind,object_column[OBJ_COL_EVTS].id_col,texte2);
|
||
}
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
BOOL CALLBACK SupervisaterCallback(HWND hdwnd,UINT msg,WPARAM wParam,LPARAM lParam)
|
||
{
|
||
LV_COLUMN lvc;
|
||
LV_ITEM lvi;
|
||
int i,iIns;
|
||
pdbgMICRO_DESCRIPTION pdbgMicro;
|
||
pdbgSND_tdstObjectStruct obj,objnext;
|
||
char texte[80];
|
||
static BOOL auto_refresh=FALSE;
|
||
|
||
switch (msg)
|
||
{
|
||
case WM_INITDIALOG:
|
||
hwndSupervisater=hdwnd;
|
||
|
||
for (i=0;i<NB_MICRO_COLUMN;i++)
|
||
{
|
||
memset(&lvc,0,sizeof(lvc));
|
||
lvc.pszText=micro_column[i].name;
|
||
lvc.iSubItem=i-1;
|
||
lvc.cx=micro_column[i].width;
|
||
lvc.mask=LVCF_TEXT|LVCF_SUBITEM|LVCF_WIDTH;
|
||
micro_column[i].id_col=ListView_InsertColumn(GetDlgItem(hdwnd,IDC_LISTMICRO),i,&lvc);
|
||
}
|
||
for (i=0;i<NB_OBJECT_COLUMN;i++)
|
||
{
|
||
memset(&lvc,0,sizeof(lvc));
|
||
lvc.pszText=object_column[i].name;
|
||
lvc.cx=object_column[i].width;
|
||
lvc.iSubItem=i-1;
|
||
lvc.mask=LVCF_TEXT|LVCF_SUBITEM|LVCF_WIDTH;
|
||
object_column[i].id_col=ListView_InsertColumn(GetDlgItem(hdwnd,IDC_LISTOBJECT),i,&lvc);
|
||
}
|
||
|
||
if (hMutex) WaitForSingleObject(hMutex,INFINITE);
|
||
|
||
SNDLST2_M_DynamicForEachElementOf(&dbg_micros.pList,pdbgMicro,i)
|
||
{
|
||
//raj liste
|
||
memset(&lvi,0,sizeof(lvi));
|
||
lvi.mask=LVIF_TEXT|LVIF_PARAM;
|
||
lvi.iItem=0;
|
||
lvi.iSubItem=0;
|
||
sprintf(texte,"0x%x",pdbgMicro->Id);
|
||
lvi.pszText=texte;
|
||
lvi.lParam=pdbgMicro->Id;
|
||
iIns=ListView_InsertItem(GetDlgItem(hwndSupervisater,IDC_LISTMICRO),&lvi);
|
||
}
|
||
|
||
SNDLST2_M_DynamicForEachElementOf(&dbg_objects.pList,obj,i)
|
||
{
|
||
//raj liste
|
||
memset(&lvi,0,sizeof(lvi));
|
||
lvi.mask=LVIF_TEXT|LVIF_PARAM;
|
||
lvi.iItem=0;
|
||
lvi.iSubItem=0;
|
||
sprintf(texte,"0x%x",obj->indice);
|
||
lvi.pszText=texte;
|
||
lvi.lParam=obj->indice;
|
||
iIns=ListView_InsertItem(GetDlgItem(hwndSupervisater,IDC_LISTOBJECT),&lvi);
|
||
}
|
||
|
||
SendDlgItemMessage(hdwnd,IDC_DELETEOBJECTS,BM_SETCHECK,delete_objects?BST_CHECKED:BST_UNCHECKED,0);
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
break;
|
||
case WM_TIMER:
|
||
refresh_liste();
|
||
break;
|
||
case WM_COMMAND:
|
||
switch (LOWORD(wParam))
|
||
{
|
||
case IDC_TOPMOST:
|
||
topmost=!topmost;
|
||
SetWindowText(GetDlgItem(hdwnd,IDC_TOPMOST),topmost ? "Go to back-ground" : "Go to Fore-Ground");
|
||
SetWindowPos(hdwnd,topmost ? HWND_TOPMOST : HWND_BOTTOM,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
|
||
break;
|
||
case IDC_DELETEOBJECTS:
|
||
if (SendDlgItemMessage(hdwnd,IDC_DELETEOBJECTS,BM_GETCHECK,0,0)==BST_CHECKED)
|
||
{
|
||
if (!delete_objects)
|
||
{
|
||
delete_objects=TRUE;
|
||
SNDLST2_M_DynamicForEachMovingElementOf(&dbg_objects.pList,obj,objnext,i)
|
||
{
|
||
dbgSND_fn_vKillEventToObjectPrivate(obj->indice,(long)NULL);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
delete_objects=FALSE;
|
||
break;
|
||
case IDC_REFRESH:
|
||
if (auto_refresh)
|
||
{
|
||
auto_refresh=FALSE;
|
||
KillTimer(hdwnd,0);
|
||
}
|
||
|
||
refresh_liste();
|
||
break;
|
||
case IDC_AUTOREFRESH:
|
||
if (!auto_refresh)
|
||
{
|
||
auto_refresh=TRUE;
|
||
SetTimer(hdwnd,0,100,NULL);
|
||
}
|
||
break;
|
||
case IDC_HISTORIC:
|
||
EndDialog(hdwnd,GOTO_HISTORIC);
|
||
break;
|
||
case IDC_RESOURCES:
|
||
EndDialog(hdwnd,GOTO_VISUSND);
|
||
break;
|
||
case IDC_INFORMATIONS:
|
||
EndDialog(hdwnd,GOTO_DIVERS);
|
||
return 1;
|
||
case IDC_VISUVIRT:
|
||
EndDialog(hdwnd,GOTO_VISUVIRT);
|
||
return 1;
|
||
case IDC_CLOSE:
|
||
EndDialog(hdwnd,GOTO_BYEBYE);
|
||
break;
|
||
case IDCANCEL:
|
||
EndDialog(hdwnd,0);
|
||
return 1;
|
||
}
|
||
break;
|
||
case WM_DESTROY:
|
||
case WM_QUIT:
|
||
hwndSupervisater=NULL;
|
||
EndDialog(hdwnd,0);
|
||
return 0;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
void add_evt(dbgSND_tdstObjectStruct* obj,long asso,SND_tduRefEvt evt)
|
||
{
|
||
pdbgSND_tdstEvtStruct pevt;
|
||
|
||
pevt=GlobalAlloc(GMEM_FIXED,sizeof(dbgSND_tdstEvtStruct));
|
||
memset(pevt,0,sizeof(dbgSND_tdstEvtStruct));
|
||
SNDLST2_M_DynamicInitElement(pevt);
|
||
pevt->asso=asso;
|
||
pevt->evt_pstPtr=evt.pstPtr;
|
||
pevt->evt_Id=evt.pstPtr->Id;
|
||
pevt->evt_eType=evt.pstPtr->eType;
|
||
|
||
SNDLST2_M_DynamicAddTail(&obj->evts.pList,pevt);
|
||
}
|
||
|
||
void del_evt(dbgSND_tdstObjectStruct* obj,long asso)
|
||
{
|
||
pdbgSND_tdstEvtStruct pevt,pevtnext;
|
||
int i;
|
||
|
||
SNDLST2_M_DynamicForEachMovingElementOf(&obj->evts.pList,pevt,pevtnext,i)
|
||
{
|
||
if ((asso==0) || (pevt->asso==asso))
|
||
{
|
||
SNDLST2_M_DynamicIsolate(pevt);
|
||
GlobalFree(pevt);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/************** pour historic ***************************/
|
||
//init the display list
|
||
void init_display_liste()
|
||
{
|
||
SNDLST2_M_DynamicInitAnchor(&DisplayList.pListEvent);
|
||
SNDLST2_M_DynamicInitAnchor(&DisplayList.pListRes);
|
||
}
|
||
|
||
//desinit/purge the display list
|
||
void desinit_display_liste()
|
||
{
|
||
pdbgEVENT_YET_DISPLAYED pEvent,pEventNext;
|
||
pdbgRES_YET_DISPLAYED pRes,pResNext;
|
||
int i;
|
||
|
||
SNDLST2_M_DynamicForEachMovingElementOf(&DisplayList.pListEvent,pEvent,pEventNext,i)
|
||
{
|
||
SNDLST2_M_DynamicIsolate(pEvent);
|
||
GlobalFree(pEvent);
|
||
}
|
||
SNDLST2_M_DynamicForEachMovingElementOf(&DisplayList.pListRes,pRes,pResNext,i)
|
||
{
|
||
SNDLST2_M_DynamicIsolate(pRes);
|
||
GlobalFree(pRes);
|
||
}
|
||
}
|
||
|
||
//add a event in the display list/ return FALSE if event has not been yet displayed
|
||
SndBool event_displayed(SND_tdstBlockEvent* event)
|
||
{
|
||
SndBool bFound=FALSE;
|
||
pdbgEVENT_YET_DISPLAYED pEvent;
|
||
int i;
|
||
|
||
SNDLST2_M_DynamicForEachElementOf(&DisplayList.pListEvent,pEvent,i)
|
||
{
|
||
if (pEvent->evt==event)
|
||
{
|
||
bFound=TRUE;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (!bFound)
|
||
{
|
||
pEvent=GlobalAlloc(GMEM_FIXED,sizeof(dbgEVENT_YET_DISPLAYED));
|
||
SNDLST2_M_DynamicInitElement(pEvent);
|
||
pEvent->evt=event;
|
||
SNDLST2_M_DynamicAddTail(&DisplayList.pListEvent,pEvent);
|
||
}
|
||
|
||
return bFound;
|
||
}
|
||
|
||
//add a res in the display list/ return FALSE if res has not been yet displayed
|
||
SndBool res_displayed(tdstBlockResourceMem* res)
|
||
{
|
||
SndBool bFound=FALSE;
|
||
pdbgRES_YET_DISPLAYED pRes;
|
||
int i;
|
||
|
||
SNDLST2_M_DynamicForEachElementOf(&DisplayList.pListRes,pRes,i)
|
||
{
|
||
if (pRes->res==res)
|
||
{
|
||
bFound=TRUE;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (!bFound)
|
||
{
|
||
pRes=GlobalAlloc(GMEM_FIXED,sizeof(dbgRES_YET_DISPLAYED));
|
||
SNDLST2_M_DynamicInitElement(pRes);
|
||
pRes->res=res;
|
||
SNDLST2_M_DynamicAddTail(&DisplayList.pListRes,pRes);
|
||
}
|
||
|
||
return bFound;
|
||
}
|
||
|
||
void add_histo(historic_element *hist)
|
||
{
|
||
LV_ITEM lvi;
|
||
int iIns;
|
||
HWND hwnd;
|
||
char texte[80],texte2[50];
|
||
|
||
if (hwndHistoric)
|
||
{
|
||
hwnd=GetDlgItem(hwndHistoric,IDC_LISTE);
|
||
//raj liste
|
||
memset(&lvi,0,sizeof(lvi));
|
||
lvi.mask=LVIF_TEXT|LVIF_PARAM;
|
||
lvi.iItem=0;
|
||
lvi.iSubItem=0;
|
||
sprintf(texte,"%02d:%02d:%02d:%03d(%d)",hist->time.wHour,hist->time.wMinute,hist->time.wSecond,hist->time.wMilliseconds,hist);
|
||
lvi.pszText=texte;
|
||
lvi.lParam=(long)hist;
|
||
if (most_recent && (actual_most_recent>nb_most_recent))
|
||
ListView_DeleteItem(hwnd,0);
|
||
else
|
||
actual_most_recent++;
|
||
|
||
iIns=ListView_InsertItem(hwnd,&lvi);
|
||
sprintf(texte,"0x%x (%d)",hist->obj,hist->type_obj);
|
||
ListView_SetItemText(hwnd,iIns,historic_column[HIS_COL_OBJ].id_col,texte);
|
||
|
||
switch (hist->evt_eType)
|
||
{
|
||
case EVT_SON_PLAY : sprintf(texte2,"PLAY");break;
|
||
case EVT_SON_STOP : sprintf(texte2,"STOP");break;
|
||
case EVT_SON_STOP_ALL : sprintf(texte2,"STOP_ALL");break;
|
||
case EVT_SON_STOP_N_GO: sprintf(texte2,"STOP_N_GO");break;
|
||
case EVT_SON_STOP_N_GO_CROSSFADE : sprintf(texte2,"STOP_N_GO_CROSSFADE");break;
|
||
case EVT_SON_PITCH : sprintf(texte2,"XTRAPITCH");break;
|
||
case EVT_SON_VOLUME : sprintf(texte2,"XTRAVOLUME");break;
|
||
case EVT_SON_PAN : sprintf(texte2,"XTRAPAN");break;
|
||
case EVT_SON_EFFET: sprintf(texte2,"EFFET");break;
|
||
case EVT_SON_CHANGE_VOLUME: sprintf(texte2,"CHNGVOL");break;
|
||
default: sprintf(texte2,"????");break;
|
||
}
|
||
sprintf(texte,"%s:(0x%x)Ox%x",texte2,hist->evt_Id,hist->evt_pstPtr);
|
||
ListView_SetItemText(hwnd,iIns,historic_column[HIS_COL_EVT].id_col,texte);
|
||
|
||
if (hist->res_pstPtr)
|
||
{
|
||
strncpy(texte2,SND_fn_czGetResNameFromEdId(hist->res_pstPtr->Id),sizeof(texte2)-1);
|
||
sprintf(texte,"%s (0x%x)0x%x",texte2,hist->res_pstPtr->Id,hist->res_pstPtr);
|
||
ListView_SetItemText(hwnd,iIns,historic_column[HIS_COL_RSV].id_col,texte);
|
||
|
||
sprintf(texte,"%d",hist->res_pstPtr->ucVolume);
|
||
ListView_SetItemText(hwnd,iIns,historic_column[HIS_COL_VOL].id_col,texte);
|
||
}
|
||
else
|
||
{
|
||
ListView_SetItemText(hwnd,iIns,historic_column[HIS_COL_RSV].id_col,"no resource");
|
||
ListView_SetItemText(hwnd,iIns,historic_column[HIS_COL_VOL].id_col,"?");
|
||
}
|
||
|
||
ListView_SetItemText(hwnd,iIns,historic_column[HIS_COL_INFO].id_col,hist->info);
|
||
}
|
||
}
|
||
|
||
BOOL filtre(historic_element *hist)
|
||
{
|
||
if (hist->time.wYear==0)
|
||
return TRUE;
|
||
if (filtre_evt && ((long)hist->evt_pstPtr!=filtre_evtval))
|
||
return TRUE;
|
||
if (filtre_obj && (hist->obj!=filtre_objval))
|
||
return TRUE;
|
||
if (filtre_type && (hist->evt_eType!=filtre_typeval))
|
||
return TRUE;
|
||
if (last_event_only && event_displayed(hist->evt_pstPtr))
|
||
return TRUE;
|
||
if (last_res_only && (hist->res_pstPtr!=NULL) && res_displayed(hist->res_pstPtr))
|
||
return TRUE;
|
||
return FALSE;
|
||
}
|
||
|
||
void refresh_historic()
|
||
{
|
||
int i;
|
||
|
||
//purge list of previous instance
|
||
desinit_display_liste();
|
||
|
||
actual_most_recent=0;
|
||
for (i=next_element-1+TAILLE_HISTORIC;i>next_element-1;i--)
|
||
{
|
||
if (!filtre(&historic[i%TAILLE_HISTORIC]))
|
||
{
|
||
add_histo(&historic[i%TAILLE_HISTORIC]);
|
||
//actual_most_recent++;
|
||
}
|
||
if ((most_recent) && (actual_most_recent>=nb_most_recent))
|
||
break;
|
||
}
|
||
}
|
||
|
||
void check_change(long vIDC_FILTREEVT,long vIDC_FILTREOBJ,long vIDC_FILTREEVTTYPE,long vIDC_MOSTRECENT,long vIDC_FIRSTEVENTONLY,long vIDC_FIRSTRESONLY)
|
||
{
|
||
BOOL old_filtre_evt=filtre_evt;
|
||
BOOL old_filtre_obj=filtre_obj;
|
||
BOOL old_filtre_type=filtre_type;
|
||
BOOL old_most_recent=most_recent;
|
||
BOOL old_last_event_only=last_event_only;
|
||
BOOL old_last_res_only=last_res_only;
|
||
|
||
filtre_evt=(vIDC_FILTREEVT==BST_CHECKED)?TRUE:FALSE;
|
||
filtre_obj=(vIDC_FILTREOBJ==BST_CHECKED)?TRUE:FALSE;
|
||
filtre_type=(vIDC_FILTREEVTTYPE==BST_CHECKED)?TRUE:FALSE;
|
||
most_recent=(vIDC_MOSTRECENT==BST_CHECKED)?TRUE:FALSE;
|
||
last_event_only=(vIDC_FIRSTEVENTONLY==BST_CHECKED)?TRUE:FALSE;
|
||
last_res_only=(vIDC_FIRSTRESONLY==BST_CHECKED)?TRUE:FALSE;
|
||
|
||
if ((old_filtre_evt!=filtre_evt)
|
||
|| (old_filtre_obj!=filtre_obj)
|
||
|| (old_filtre_type!=filtre_type)
|
||
|| (old_most_recent!=most_recent)
|
||
|| (old_last_event_only!=last_event_only)
|
||
|| (old_last_res_only!=last_res_only))
|
||
{
|
||
ListView_DeleteAllItems(GetDlgItem(hwndHistoric,IDC_LISTE));
|
||
refresh_historic();
|
||
}
|
||
}
|
||
|
||
|
||
BOOL CALLBACK HistoricCallback(HWND hdwnd,UINT msg,WPARAM wParam,LPARAM lParam)
|
||
{
|
||
LV_COLUMN lvc;
|
||
int i;
|
||
static int prev_n=0;
|
||
SYSTEMTIME cur_time;
|
||
FILETIME cur_filetime,filetime;
|
||
char texte[80];
|
||
LPNMHDR nmhdr;
|
||
NM_LISTVIEW *nm;
|
||
|
||
switch (msg)
|
||
{
|
||
case WM_INITDIALOG:
|
||
hwndHistoric=hdwnd;
|
||
|
||
init_display_liste();
|
||
|
||
for (i=0;i<NB_HISTORIC_COLUMN;i++)
|
||
{
|
||
memset(&lvc,0,sizeof(lvc));
|
||
lvc.pszText=historic_column[i].name;
|
||
lvc.iSubItem=i-1;
|
||
lvc.cx=historic_column[i].width;
|
||
lvc.mask=LVCF_TEXT|LVCF_SUBITEM|LVCF_WIDTH;
|
||
historic_column[i].id_col=ListView_InsertColumn(GetDlgItem(hdwnd,IDC_LISTE),i,&lvc);
|
||
}
|
||
|
||
for (i=0;i<TAILLE_HISTORIC;i++)
|
||
if (!filtre(&historic[i]))
|
||
add_histo(&historic[i]);
|
||
|
||
SendDlgItemMessage(hdwnd,IDC_DELETEOBJECTS,BM_SETCHECK,delete_objects?BST_CHECKED:BST_UNCHECKED,0);
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
|
||
SendDlgItemMessage(hdwnd,IDC_FILTREEVT,BM_SETCHECK,filtre_evt?BST_CHECKED:BST_UNCHECKED,0);
|
||
SendDlgItemMessage(hdwnd,IDC_FILTREOBJ,BM_SETCHECK,filtre_obj?BST_CHECKED:BST_UNCHECKED,0);
|
||
SendDlgItemMessage(hdwnd,IDC_FILTREEVTTYPE,BM_SETCHECK,filtre_type?BST_CHECKED:BST_UNCHECKED,0);
|
||
SendDlgItemMessage(hdwnd,IDC_MOSTRECENT,BM_SETCHECK,most_recent?BST_CHECKED:BST_UNCHECKED,0);
|
||
SendDlgItemMessage(hdwnd,IDC_FIRSTEVENTONLY,BM_SETCHECK,last_event_only?BST_CHECKED:BST_UNCHECKED,0);
|
||
SendDlgItemMessage(hdwnd,IDC_FIRSTRESONLY,BM_SETCHECK,last_res_only?BST_CHECKED:BST_UNCHECKED,0);
|
||
sprintf(texte,"0x%x",filtre_evtval);
|
||
SetDlgItemText(hdwnd,IDC_FILTREEVTVAL,texte);
|
||
sprintf(texte,"0x%x",filtre_objval);
|
||
SetDlgItemText(hdwnd,IDC_FILTREOBJVAL,texte);
|
||
sprintf(texte,"0x%x",filtre_typeval);
|
||
SetDlgItemText(hdwnd,IDC_FILTREEVTTYPEVAL,texte);
|
||
sprintf(texte,"%d",nb_most_recent);
|
||
SetDlgItemText(hdwnd,IDC_NBMOSTRECENT,texte);
|
||
|
||
SetTimer(hdwnd,1,1000,NULL);
|
||
break;
|
||
case WM_TIMER:
|
||
GetLocalTime(&cur_time);
|
||
sprintf(texte,"%02d:%02d:%02d:%03d",cur_time.wHour,cur_time.wMinute,cur_time.wSecond,cur_time.wMilliseconds);
|
||
SetDlgItemText(hdwnd,IDC_CURRENTTIME,texte);
|
||
break;
|
||
case WM_NOTIFY:
|
||
switch (LOWORD(wParam))
|
||
{
|
||
case IDC_LISTE:
|
||
nmhdr=(LPNMHDR)lParam;
|
||
switch (nmhdr->code)
|
||
{
|
||
case LVN_ITEMCHANGED:
|
||
nm=(NM_LISTVIEW*)lParam;
|
||
|
||
if (nm->uNewState & LVIS_SELECTED)
|
||
{
|
||
if (nm->lParam != (long)NULL)
|
||
res_for_editor=((historic_element*)(nm->lParam))->res_pstPtr;
|
||
else
|
||
res_for_editor=NULL;
|
||
|
||
if (!res_for_editor)
|
||
sprintf(texte,"none");
|
||
else
|
||
sprintf(texte,"%40s (EdId=0x%d; ptr=0x%d)",SND_fn_czGetResNameFromEdId(res_for_editor->Id),res_for_editor->Id,res_for_editor);
|
||
|
||
SetDlgItemText(hdwnd,IDC_SELECTEDRESOURCE,texte);
|
||
}
|
||
break;
|
||
}
|
||
break;
|
||
}
|
||
break;
|
||
case WM_COMMAND:
|
||
switch (LOWORD(wParam))
|
||
{
|
||
case IDC_TOPMOST:
|
||
topmost=!topmost;
|
||
SetWindowText(GetDlgItem(hdwnd,IDC_TOPMOST),topmost ? "Go to back-ground" : "Go to Fore-Ground");
|
||
SetWindowPos(hdwnd,topmost ? HWND_TOPMOST : HWND_BOTTOM,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
|
||
break;
|
||
case IDC_FILTREEVT:
|
||
case IDC_FILTREOBJ:
|
||
case IDC_FILTREEVTTYPE:
|
||
case IDC_MOSTRECENT:
|
||
case IDC_FIRSTEVENTONLY:
|
||
case IDC_FIRSTRESONLY:
|
||
GetDlgItemText(hdwnd,IDC_FILTREEVTVAL,texte,sizeof(texte));
|
||
sscanf(texte,"%x",&filtre_evtval);
|
||
sprintf(texte,"%x",filtre_evtval);
|
||
SetDlgItemText(hdwnd,IDC_FILTREEVTVAL,texte);
|
||
GetDlgItemText(hdwnd,IDC_FILTREOBJVAL,texte,sizeof(texte));
|
||
sscanf(texte,"%x",&filtre_objval);
|
||
sprintf(texte,"%x",filtre_objval);
|
||
SetDlgItemText(hdwnd,IDC_FILTREOBJVAL,texte);
|
||
GetDlgItemText(hdwnd,IDC_FILTREEVTTYPEVAL,texte,sizeof(texte));
|
||
sscanf(texte,"%x",&filtre_typeval);
|
||
sprintf(texte,"%x",filtre_typeval);
|
||
SetDlgItemText(hdwnd,IDC_FILTREEVTTYPEVAL,texte);
|
||
GetDlgItemText(hdwnd,IDC_NBMOSTRECENT,texte,sizeof(texte));
|
||
sscanf(texte,"%d",&filtre_typeval);
|
||
sprintf(texte,"%d",filtre_typeval);
|
||
SetDlgItemText(hdwnd,IDC_NBMOSTRECENT,texte);
|
||
sscanf(texte,"%d",&nb_most_recent);
|
||
check_change(
|
||
SendDlgItemMessage(hdwnd,IDC_FILTREEVT,BM_GETCHECK,0,0)
|
||
,SendDlgItemMessage(hdwnd,IDC_FILTREOBJ,BM_GETCHECK,0,0)
|
||
,SendDlgItemMessage(hdwnd,IDC_FILTREEVTTYPE,BM_GETCHECK,0,0)
|
||
,SendDlgItemMessage(hdwnd,IDC_MOSTRECENT,BM_GETCHECK,0,0)
|
||
,SendDlgItemMessage(hdwnd,IDC_FIRSTEVENTONLY,BM_GETCHECK,0,0)
|
||
,SendDlgItemMessage(hdwnd,IDC_FIRSTRESONLY,BM_GETCHECK,0,0)
|
||
);
|
||
break;
|
||
case IDC_DEBUGBREAK:
|
||
if (SendDlgItemMessage(hdwnd,IDC_FILTREEVT,BM_GETCHECK,0,0)==BST_CHECKED)
|
||
flagDebugBreak=TRUE;
|
||
else
|
||
flagDebugBreak=FALSE;
|
||
break;
|
||
case IDC_PURGETOTALE:
|
||
memset(historic,0,sizeof(historic));
|
||
ListView_DeleteAllItems(GetDlgItem(hdwnd,IDC_LISTE));
|
||
refresh_historic();
|
||
break;
|
||
case IDC_PURGE20:
|
||
ListView_DeleteAllItems(GetDlgItem(hdwnd,IDC_LISTE));
|
||
GetLocalTime(&cur_time);
|
||
SystemTimeToFileTime(&cur_time,&cur_filetime);
|
||
for (i=0;i<TAILLE_HISTORIC;i++)
|
||
{
|
||
SystemTimeToFileTime(&historic[i].time,&filetime);
|
||
filetime.dwLowDateTime+=200000000;
|
||
if (filetime.dwLowDateTime<200000000)
|
||
filetime.dwHighDateTime++;
|
||
if (CompareFileTime(&filetime,&cur_filetime)==-1)
|
||
memset(&historic[i],0,sizeof(historic[i]));
|
||
}
|
||
refresh_historic();
|
||
break;
|
||
case IDC_SUPERVISATER:
|
||
EndDialog(hdwnd,GOTO_SUPERVISATER);
|
||
return 1;
|
||
case IDC_RESOURCES:
|
||
EndDialog(hdwnd,GOTO_VISUSND);
|
||
break;
|
||
case IDC_INFORMATIONS:
|
||
EndDialog(hdwnd,GOTO_DIVERS);
|
||
return 1;
|
||
case IDC_VISUVIRT:
|
||
EndDialog(hdwnd,GOTO_VISUVIRT);
|
||
break;
|
||
case IDC_CLOSE:
|
||
EndDialog(hdwnd,GOTO_BYEBYE);
|
||
return 1;
|
||
case IDCANCEL:
|
||
EndDialog(hdwnd,0);
|
||
return 1;
|
||
}
|
||
break;
|
||
case WM_DESTROY:
|
||
case WM_QUIT:
|
||
EndDialog(hdwnd,0);
|
||
return 0;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
|
||
/************* pour visusnd ****************************/
|
||
void refresh_liste_visusnd()
|
||
{
|
||
LV_FINDINFO lvf;
|
||
int i,iFind;
|
||
pdbgVISUSND_ELEMENT pdbgVisuSnd;
|
||
char texte[80];
|
||
HWND hwnd;
|
||
|
||
if (hwndVisuSnd)
|
||
{
|
||
if (!hMutex || (WaitForSingleObject(hMutex,0)==WAIT_OBJECT_0))
|
||
{
|
||
|
||
SNDLST2_M_DynamicForEachElementOf(&dbg_visusnd.pList,pdbgVisuSnd,i)
|
||
{
|
||
hwnd=GetDlgItem(hwndVisuSnd,IDC_LISTE);
|
||
memset(&lvf,0,sizeof(LV_FINDINFO));
|
||
lvf.flags=LVFI_PARAM;
|
||
lvf.lParam=pdbgVisuSnd->id;
|
||
iFind=ListView_FindItem(hwnd,-1,&lvf);
|
||
|
||
sprintf(texte,"%x",pdbgVisuSnd->res_pstPtr);
|
||
ListView_SetItemText(hwnd,iFind,visusnd_column[VISUSND_COL_RES].id_col,texte);
|
||
sprintf(texte,"%x",(pdbgVisuSnd->res_pstPtr!=NULL)?pdbgVisuSnd->res_Id:-1);
|
||
ListView_SetItemText(hwnd,iFind,visusnd_column[VISUSND_COL_RESID].id_col,texte);
|
||
sprintf(texte,"%d",pdbgVisuSnd->par.ucVol);
|
||
ListView_SetItemText(hwnd,iFind,visusnd_column[VISUSND_COL_PAUSE].id_col,texte);
|
||
strcpy(texte,pdbgVisuSnd->bPaused?"P":" ");
|
||
ListView_SetItemText(hwnd,iFind,visusnd_column[VISUSND_COL_VOL].id_col,texte);
|
||
sprintf(texte,"%d",pdbgVisuSnd->par.ucPan);
|
||
ListView_SetItemText(hwnd,iFind,visusnd_column[VISUSND_COL_PAN].id_col,texte);
|
||
sprintf(texte,"%d",pdbgVisuSnd->par.ucSpace);
|
||
ListView_SetItemText(hwnd,iFind,visusnd_column[VISUSND_COL_SPACE].id_col,texte);
|
||
sprintf(texte,"%3.2f",M_RealToDoubleSnd(pdbgVisuSnd->par.Freq));
|
||
ListView_SetItemText(hwnd,iFind,visusnd_column[VISUSND_COL_FREQ].id_col,texte);
|
||
}
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
}
|
||
}
|
||
}
|
||
|
||
BOOL CALLBACK VisuSndCallback(HWND hdwnd,UINT msg,WPARAM wParam,LPARAM lParam)
|
||
{
|
||
LV_COLUMN lvc;
|
||
LV_ITEM lvi;
|
||
int i,iIns;
|
||
pdbgVISUSND_ELEMENT pdbgVisuSnd;
|
||
char texte[80];
|
||
static BOOL auto_refresh=FALSE;
|
||
|
||
switch (msg)
|
||
{
|
||
case WM_INITDIALOG:
|
||
if (hMutex) WaitForSingleObject(hMutex,INFINITE);
|
||
|
||
hwndVisuSnd=hdwnd;
|
||
|
||
for (i=0;i<NB_VISUSND_COLUMN;i++)
|
||
{
|
||
memset(&lvc,0,sizeof(lvc));
|
||
lvc.pszText=visusnd_column[i].name;
|
||
lvc.iSubItem=i-1;
|
||
lvc.cx=micro_column[i].width;
|
||
lvc.mask=LVCF_TEXT|LVCF_SUBITEM|LVCF_WIDTH;
|
||
visusnd_column[i].id_col=ListView_InsertColumn(GetDlgItem(hdwnd,IDC_LISTE),i,&lvc);
|
||
}
|
||
|
||
SNDLST2_M_DynamicForEachElementOf(&dbg_visusnd.pList,pdbgVisuSnd,i)
|
||
{
|
||
//raj liste
|
||
memset(&lvi,0,sizeof(lvi));
|
||
lvi.mask=LVIF_TEXT|LVIF_PARAM;
|
||
lvi.iItem=0;
|
||
lvi.iSubItem=0;
|
||
sprintf(texte,"0x%x",pdbgVisuSnd->id);
|
||
lvi.pszText=texte;
|
||
lvi.lParam=pdbgVisuSnd->id;
|
||
iIns=ListView_InsertItem(GetDlgItem(hwndVisuSnd,IDC_LISTE),&lvi);
|
||
}
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
break;
|
||
case WM_TIMER:
|
||
refresh_liste_visusnd();
|
||
break;
|
||
case WM_COMMAND:
|
||
switch (LOWORD(wParam))
|
||
{
|
||
case IDC_TOPMOST:
|
||
topmost=!topmost;
|
||
SetWindowText(GetDlgItem(hdwnd,IDC_TOPMOST),topmost ? "Go to back-ground" : "Go to Fore-Ground");
|
||
SetWindowPos(hdwnd,topmost ? HWND_TOPMOST : HWND_BOTTOM,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
|
||
break;
|
||
case IDC_REFRESH:
|
||
if (auto_refresh)
|
||
{
|
||
auto_refresh=FALSE;
|
||
KillTimer(hdwnd,0);
|
||
}
|
||
|
||
refresh_liste_visusnd();
|
||
break;
|
||
case IDC_AUTOREFRESH:
|
||
if (!auto_refresh)
|
||
{
|
||
auto_refresh=TRUE;
|
||
SetTimer(hdwnd,0,100,NULL);
|
||
}
|
||
break;
|
||
case IDC_HISTORIC:
|
||
EndDialog(hdwnd,GOTO_HISTORIC);
|
||
break;
|
||
case IDC_SUPERVISATER:
|
||
EndDialog(hdwnd,GOTO_SUPERVISATER);
|
||
return 1;
|
||
case IDC_INFORMATIONS:
|
||
EndDialog(hdwnd,GOTO_DIVERS);
|
||
return 1;
|
||
case IDC_CLOSE:
|
||
EndDialog(hdwnd,GOTO_BYEBYE);
|
||
break;
|
||
case IDCANCEL:
|
||
EndDialog(hdwnd,0);
|
||
return 1;
|
||
case IDC_VISUVIRT:
|
||
EndDialog(hdwnd,GOTO_VISUVIRT);
|
||
break;
|
||
}
|
||
break;
|
||
case WM_DESTROY:
|
||
case WM_QUIT:
|
||
EndDialog(hdwnd,0);
|
||
return 0;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
//*********************** voies virtuelles
|
||
void refresh_liste_virt()
|
||
{
|
||
pdbgVISUVIRT_ELEMENT dbgv,dbgvnext;
|
||
int iDel,iIns,iFind,i;
|
||
LV_FINDINFO lvf;
|
||
LV_ITEM lvi;
|
||
char texte[80];
|
||
SND_tdhVirtualModule p_virtual_module;
|
||
HWND hwnd;
|
||
|
||
if (hMutex) WaitForSingleObject(hMutex,INFINITE);
|
||
|
||
p_virtual_module=(SND_tdhVirtualModule)p_vv_list[iCurrentVirtModule].iIdModule;
|
||
|
||
sprintf(texte,"%d/%d",SNDLST2_M_DynamicGetNumberOfElements(&p_virtual_module->virtual_voices.pList),p_virtual_module->g_lNbSxdAudible);
|
||
SetDlgItemText(hwndVisuVirt,IDC_NBVOIX,texte);
|
||
|
||
hwnd=GetDlgItem(hwndVisuVirt,IDC_LISTVV);
|
||
|
||
//2:raj de anciennes lignes et ajo<6A>ts des nouvelles
|
||
SNDLST2_M_DynamicForEachMovingElementOf(&p_vv_list[iCurrentVirtModule].pList,dbgv,dbgvnext,i)
|
||
{//pour chacune voies actuelle
|
||
if (!dbgv->bStillActive)
|
||
{//voie d<>truite->effacer la ligne
|
||
memset(&lvf,0,sizeof(LV_FINDINFO));
|
||
lvf.flags=LVFI_PARAM;
|
||
lvf.lParam=(long)dbgv;
|
||
iFind=ListView_FindItem(hwnd,-1,&lvf);
|
||
if (iFind!=-1)
|
||
iDel=ListView_DeleteItem(hwnd,iFind);
|
||
|
||
SNDLST2_M_DynamicIsolate(dbgv);
|
||
GlobalFree(dbgv);
|
||
}
|
||
else
|
||
{
|
||
if (!dbgv->bDisplayed)
|
||
{
|
||
memset(&lvi,0,sizeof(lvi));
|
||
lvi.mask=LVIF_TEXT|LVIF_PARAM;
|
||
lvi.iItem=0;
|
||
lvi.iSubItem=0;
|
||
sprintf(texte,"0x%x",dbgv);
|
||
lvi.pszText=texte;
|
||
lvi.lParam=(long)dbgv;
|
||
iIns=ListView_InsertItem(hwnd,&lvi);
|
||
|
||
dbgv->bDisplayed=TRUE;
|
||
}
|
||
|
||
memset(&lvf,0,sizeof(LV_FINDINFO));
|
||
lvf.flags=LVFI_PARAM;
|
||
lvf.lParam=(long)dbgv;
|
||
iFind=ListView_FindItem(hwnd,-1,&lvf);
|
||
|
||
sprintf(texte,"%f",M_RealToDoubleSnd(dbgv->rNorme));
|
||
ListView_SetItemText(hwnd,iFind,vv_column[VV_COL_NORME].id_col,texte);
|
||
sprintf(texte,"%s",dbgv->bPaused?"P":" ");
|
||
ListView_SetItemText(hwnd,iFind,vv_column[VV_COL_PAUSE].id_col,texte);
|
||
sprintf(texte,"%d:%d (0x%x)",(dbgv->lResId>>16)&0xFFFF,dbgv->lResId&0xFFFF,dbgv->lResRef);
|
||
ListView_SetItemText(hwnd,iFind,vv_column[VV_COL_RES].id_col,texte);
|
||
sprintf(texte,"%s",dbgv->bLoop?"Loop":" ");
|
||
ListView_SetItemText(hwnd,iFind,vv_column[VV_COL_LOOP].id_col,texte);
|
||
sprintf(texte,"%d",dbgv->lInstance);
|
||
ListView_SetItemText(hwnd,iFind,vv_column[VV_COL_INSTANCE].id_col,texte);
|
||
if (dbgv->audible)
|
||
{
|
||
sprintf(texte,"0x%x",dbgv->audible);
|
||
ListView_SetItemText(hwnd,iFind,vv_column[VV_COL_VA].id_col,texte);
|
||
sprintf(texte,"0x%x",dbgv->lVoice);
|
||
ListView_SetItemText(hwnd,iFind,vv_column[VV_COL_VH].id_col,texte);
|
||
}
|
||
else
|
||
{
|
||
sprintf(texte," ");
|
||
ListView_SetItemText(hwnd,iFind,vv_column[VV_COL_VA].id_col,texte);
|
||
sprintf(texte," ");
|
||
ListView_SetItemText(hwnd,iFind,vv_column[VV_COL_VH].id_col,texte);
|
||
}
|
||
}
|
||
}
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
}
|
||
|
||
BOOL CALLBACK VisuVirtCallback(HWND hdwnd,UINT msg,WPARAM wParam,LPARAM lParam)
|
||
{
|
||
LV_COLUMN lvc;
|
||
int i,j;
|
||
pdbgVISUVIRT_ELEMENT dbgv,dbgvnext;
|
||
char texte[128];
|
||
long ret;
|
||
|
||
switch (msg)
|
||
{
|
||
case WM_INITDIALOG:
|
||
hwndVisuVirt=hdwnd;
|
||
|
||
if (hMutex) WaitForSingleObject(hMutex,INFINITE);
|
||
|
||
for (i=0;i<NB_VV_COLUMN;i++)
|
||
{
|
||
memset(&lvc,0,sizeof(lvc));
|
||
lvc.pszText=vv_column[i].name;
|
||
lvc.iSubItem=i-1;
|
||
lvc.cx=vv_column[i].width;
|
||
lvc.mask=LVCF_TEXT|LVCF_SUBITEM|LVCF_WIDTH;
|
||
vv_column[i].id_col=ListView_InsertColumn(GetDlgItem(hdwnd,IDC_LISTVV),i,&lvc);
|
||
}
|
||
|
||
//init de vv_list
|
||
ret=SendDlgItemMessage(hdwnd,IDC_LISTEMODULE,CB_RESETCONTENT,0,0);
|
||
for (i=0;i<iNbVirtModule;i++)
|
||
{
|
||
SNDLST2_M_DynamicInitAnchor(&p_vv_list[i].pList);
|
||
ret=SendDlgItemMessage(hdwnd,IDC_LISTEMODULE,CB_ADDSTRING,0,(LPARAM)(LPCTSTR)p_vv_list[i].szDescription);
|
||
}
|
||
|
||
iCurrentVirtModule=iNbVirtModule-1;
|
||
if (iCurrentVirtModule>=0)
|
||
{
|
||
ret=SendDlgItemMessage(hdwnd,IDC_LISTEMODULE,CB_SELECTSTRING,0,(LPARAM)(LPCTSTR)p_vv_list[iCurrentVirtModule].szDescription);
|
||
SetDlgItemText(hdwnd,IDC_NBVOIX,"?");
|
||
}
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
|
||
SetTimer(hdwnd,0,100,NULL);
|
||
|
||
break;
|
||
case WM_TIMER:
|
||
refresh_liste_virt();
|
||
break;
|
||
case WM_COMMAND:
|
||
switch (LOWORD(wParam))
|
||
{
|
||
case IDC_TOPMOST:
|
||
topmost=!topmost;
|
||
SetWindowText(GetDlgItem(hdwnd,IDC_TOPMOST),topmost ? "Go to back-ground" : "Go to Fore-Ground");
|
||
SetWindowPos(hdwnd,topmost ? HWND_TOPMOST : HWND_BOTTOM,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
|
||
break;
|
||
case IDC_HISTORIC:
|
||
EndDialog(hdwnd,GOTO_HISTORIC);
|
||
break;
|
||
case IDC_RESOURCES:
|
||
EndDialog(hdwnd,GOTO_VISUSND);
|
||
break;
|
||
case IDC_INFORMATIONS:
|
||
EndDialog(hdwnd,GOTO_DIVERS);
|
||
return 1;
|
||
case IDC_VISUVIRT:
|
||
EndDialog(hdwnd,GOTO_VISUVIRT);
|
||
return 1;
|
||
case IDC_CLOSE:
|
||
EndDialog(hdwnd,GOTO_BYEBYE);
|
||
break;
|
||
case IDCANCEL:
|
||
EndDialog(hdwnd,0);
|
||
return 1;
|
||
case IDC_LISTEMODULE:
|
||
SendDlgItemMessage(hdwnd,IDC_LISTEMODULE,CB_GETLBTEXT,(WPARAM)SendDlgItemMessage(hdwnd,IDC_LISTEMODULE,CB_GETCURSEL,0,0),(LPARAM)texte);
|
||
|
||
if (hMutex) WaitForSingleObject(hMutex,INFINITE);
|
||
|
||
for (i=0;i<iNbVirtModule;i++)
|
||
{
|
||
if (!strcmp(p_vv_list[i].szDescription,texte) && (i!=iCurrentVirtModule))
|
||
{
|
||
SNDLST2_M_DynamicForEachMovingElementOf(&p_vv_list[iCurrentVirtModule].pList,dbgv,dbgvnext,j)
|
||
{
|
||
SNDLST2_M_DynamicIsolate(dbgv);
|
||
GlobalFree(dbgv);
|
||
}
|
||
|
||
iCurrentVirtModule=i;
|
||
|
||
ListView_DeleteAllItems(GetDlgItem(hdwnd,IDC_LISTVV));
|
||
|
||
SetDlgItemText(hdwnd,IDC_NBVOIX,"?");
|
||
}
|
||
}
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
|
||
break;
|
||
}
|
||
break;
|
||
case WM_DESTROY:
|
||
case WM_QUIT:
|
||
//desinit de vv_list
|
||
if (hMutex) WaitForSingleObject(hMutex,INFINITE);
|
||
|
||
for (i=0;i<iNbVirtModule;i++)
|
||
{
|
||
SNDLST2_M_DynamicForEachMovingElementOf(&p_vv_list[i].pList,dbgv,dbgvnext,j)
|
||
{
|
||
SNDLST2_M_DynamicIsolate(dbgv);
|
||
GlobalFree(dbgv);
|
||
}
|
||
}
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
|
||
hwndVisuVirt=NULL;
|
||
EndDialog(hdwnd,0);
|
||
return 0;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
//obsol<6F>te
|
||
void SND_CALL dbgSND_fn_vRajListesSxdVirtual(void* VV,void* VA,void* VD)
|
||
{
|
||
}
|
||
|
||
void SND_CALL dbgSND_fn_vInitListesSxdVirtual(long virtual_module,char* descrpition)
|
||
{
|
||
if (hMutex) WaitForSingleObject(hMutex,INFINITE);
|
||
|
||
if (iNbVirtModule)
|
||
p_vv_list=GlobalReAlloc(p_vv_list,(iNbVirtModule+1)*sizeof(*p_vv_list),GMEM_MOVEABLE);
|
||
else
|
||
p_vv_list=GlobalAlloc(GMEM_FIXED,sizeof(*p_vv_list));
|
||
|
||
p_vv_list[iNbVirtModule].iIdModule=virtual_module;
|
||
strncpy(p_vv_list[iNbVirtModule].szDescription,descrpition,sizeof(p_vv_list[iNbVirtModule].szDescription)-1);
|
||
|
||
iNbVirtModule++;
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
}
|
||
|
||
void SND_CALL dbgSND_fn_vRajListesSxdVirtual2(SND_tdhVirtualModule p_virtual_module)
|
||
{
|
||
virtual_voice_list* VV=&p_virtual_module->virtual_voices;
|
||
audible_voice_list* VA=&p_virtual_module->audible_voices;
|
||
dead_voice_list* VD=&p_virtual_module->dead_voices;
|
||
p_virtual_voice v;
|
||
pdbgVISUVIRT_ELEMENT dbgv,dbgvnext;
|
||
SndBool bFound;
|
||
int i,j;
|
||
int id_module;
|
||
|
||
if (hwndVisuVirt)
|
||
{
|
||
if (hMutex) WaitForSingleObject(hMutex,INFINITE);
|
||
|
||
/*zz
|
||
hwnd=GetDlgItem(hwndVisuVirt,IDC_LISTVV);
|
||
*/
|
||
|
||
//recherche du bon module
|
||
bFound=FALSE;
|
||
for (id_module=0;id_module<iNbVirtModule;id_module++)
|
||
{
|
||
if (p_vv_list[id_module].iIdModule==(long)p_virtual_module)
|
||
{
|
||
bFound=TRUE;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (bFound && id_module==iCurrentVirtModule)
|
||
{
|
||
/*zz
|
||
sprintf(texte,"%d/%d",SNDLST2_M_DynamicGetNumberOfElements(&p_virtual_module->virtual_voices.pList),p_virtual_module->g_lNbSxdAudible);
|
||
SetDlgItemText(hwndVisuVirt,IDC_NBVOIX,texte);
|
||
*/
|
||
|
||
//1:<3A>limination des lignes obsol<6F>tes
|
||
SNDLST2_M_DynamicForEachMovingElementOf(&p_vv_list[id_module].pList,dbgv,dbgvnext,i)
|
||
{
|
||
bFound=FALSE;
|
||
SNDLST2_M_DynamicForEachElementOf(&VV->pList,v,j)
|
||
{
|
||
if (v==dbgv->id)
|
||
{
|
||
bFound=TRUE;
|
||
break;
|
||
}
|
||
}
|
||
if (!bFound)
|
||
{//to be destroyed
|
||
/*zz
|
||
memset(&lvf,0,sizeof(LV_FINDINFO));
|
||
lvf.flags=LVFI_PARAM;
|
||
lvf.lParam=(long)dbgv;
|
||
iFind=ListView_FindItem(hwnd,-1,&lvf);
|
||
if (iFind!=-1)
|
||
iDel=ListView_DeleteItem(hwnd,iFind);
|
||
|
||
SNDLST2_M_DynamicIsolate(dbgv);
|
||
GlobalFree(dbgv);
|
||
*/
|
||
dbgv->bStillActive=FALSE;
|
||
}
|
||
}
|
||
//2:raj de anciennes lignes et ajo<6A>ts des nouvelles
|
||
SNDLST2_M_DynamicForEachElementOf(&VV->pList,v,i)
|
||
{//pour chacune voies actuelle
|
||
bFound=FALSE;
|
||
SNDLST2_M_DynamicForEachElementOf(&p_vv_list[id_module].pList,dbgv,j)
|
||
{//vette voix <20>xistait-elle d<>j<EFBFBD>
|
||
if ((dbgv->id==v) && (dbgv->bStillActive))
|
||
{
|
||
bFound=TRUE;
|
||
break;
|
||
}
|
||
}
|
||
if (!bFound)
|
||
{
|
||
dbgv=GlobalAlloc(GMEM_FIXED,sizeof(*dbgv));
|
||
SNDLST2_M_DynamicInitElement(dbgv);
|
||
SNDLST2_M_DynamicAddTail(&p_vv_list[id_module].pList,dbgv);
|
||
|
||
dbgv->bDisplayed=FALSE;
|
||
dbgv->bStillActive=TRUE;
|
||
/*zz
|
||
memset(&lvi,0,sizeof(lvi));
|
||
lvi.mask=LVIF_TEXT|LVIF_PARAM;
|
||
lvi.iItem=0;
|
||
lvi.iSubItem=0;
|
||
sprintf(texte,"0x%x",dbgv);
|
||
lvi.pszText=texte;
|
||
lvi.lParam=(long)dbgv;
|
||
iIns=ListView_InsertItem(hwnd,&lvi);
|
||
*/
|
||
}
|
||
dbgv->id=v;
|
||
dbgv->rNorme=v->rNorme;
|
||
dbgv->lInstance=v->lInstance;
|
||
dbgv->audible=v->audible;
|
||
dbgv->lVoice=v->lVoice;
|
||
dbgv->bPaused=v->bPaused;
|
||
dbgv->lResId=v->tduRes.pstPtr->Id;
|
||
dbgv->lResRef=(long)v->tduRes.pstPtr;
|
||
dbgv->bLoop=v->tduRes.pstPtr->uRes.stSample.bLoop;
|
||
|
||
/*zz
|
||
memset(&lvf,0,sizeof(LV_FINDINFO));
|
||
lvf.flags=LVFI_PARAM;
|
||
lvf.lParam=(long)dbgv;
|
||
iFind=ListView_FindItem(hwnd,-1,&lvf);
|
||
|
||
sprintf(texte,"%f",M_RealToDoubleSnd(dbgv->rNorme));
|
||
ListView_SetItemText(hwnd,iFind,vv_column[VV_COL_NORME].id_col,texte);
|
||
sprintf(texte,"%s",dbgv->bPaused?"P":" ");
|
||
ListView_SetItemText(hwnd,iFind,vv_column[VV_COL_PAUSE].id_col,texte);
|
||
sprintf(texte,"%d",dbgv->lInstance);
|
||
ListView_SetItemText(hwnd,iFind,vv_column[VV_COL_INSTANCE].id_col,texte);
|
||
if (dbgv->audible)
|
||
{
|
||
sprintf(texte,"0x%x",dbgv->audible);
|
||
ListView_SetItemText(hwnd,iFind,vv_column[VV_COL_VA].id_col,texte);
|
||
sprintf(texte,"0x%x",dbgv->lVoice);
|
||
ListView_SetItemText(hwnd,iFind,vv_column[VV_COL_VH].id_col,texte);
|
||
}
|
||
else
|
||
{
|
||
sprintf(texte," ");
|
||
ListView_SetItemText(hwnd,iFind,vv_column[VV_COL_VA].id_col,texte);
|
||
sprintf(texte," ");
|
||
ListView_SetItemText(hwnd,iFind,vv_column[VV_COL_VH].id_col,texte);
|
||
}
|
||
*/
|
||
}
|
||
}//if bFound
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
}
|
||
}
|
||
|
||
|
||
//*********** info divers
|
||
void refresh_theme()
|
||
{
|
||
tduRefRes current_theme,asked_theme;
|
||
long id_part,id_loop;
|
||
char texte[256];
|
||
SndBool transiting;
|
||
|
||
if (dbgSND_fn_bGetThemePosition(¤t_theme,&id_part,&id_loop))
|
||
{
|
||
sprintf(texte,"0x%x (%x)",current_theme.pstPtr,current_theme.pstPtr->Id);
|
||
SetDlgItemText(hwndDiversSnd,IDC_CURRENT_THEME,texte);
|
||
sprintf(texte,"%x",id_part);
|
||
SetDlgItemText(hwndDiversSnd,IDC_CURRENT_PART,texte);
|
||
|
||
sprintf(texte," %d loops left",id_loop);
|
||
SetDlgItemText(hwndDiversSnd,IDC_CURRENT_BRIDGE,texte);
|
||
|
||
if (dbgSND_fn_bGetAskedTheme(&asked_theme,&transiting))
|
||
{
|
||
sprintf(texte,"0x%x (%x)",asked_theme.pstPtr,asked_theme.pstPtr->Id);
|
||
SetDlgItemText(hwndDiversSnd,IDC_ASKED_THEME,texte);
|
||
if (transiting)
|
||
sprintf(texte,"transiting");
|
||
else
|
||
sprintf(texte,"waiting before transition");
|
||
SetDlgItemText(hwndDiversSnd,IDC_STATE_THEME,texte);
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
SetDlgItemText(hwndDiversSnd,IDC_CURRENT_THEME,"none");
|
||
SetDlgItemText(hwndDiversSnd,IDC_CURRENT_PART,"none");
|
||
SetDlgItemText(hwndDiversSnd,IDC_CURRENT_BRIDGE,"none");
|
||
}
|
||
}
|
||
|
||
BOOL CALLBACK DiversCallback(HWND hdwnd,UINT msg,WPARAM wParam,LPARAM lParam)
|
||
{
|
||
LV_COLUMN lvc;
|
||
LV_ITEM lvi;
|
||
int i,iIns;
|
||
pdbgVOLUMELINE_DESCRIPTION pdbgLine;
|
||
char texte[80];
|
||
static BOOL auto_refresh=FALSE;
|
||
|
||
switch (msg)
|
||
{
|
||
case WM_INITDIALOG:
|
||
if (hMutex) WaitForSingleObject(hMutex,INFINITE);
|
||
|
||
hwndDiversSnd=hdwnd;
|
||
|
||
for (i=0;i<NB_DIVERS_COLUMN;i++)
|
||
{
|
||
memset(&lvc,0,sizeof(lvc));
|
||
lvc.pszText=diverssnd_column[i].name;
|
||
lvc.iSubItem=i-1;
|
||
lvc.cx=micro_column[i].width;
|
||
lvc.mask=LVCF_TEXT|LVCF_SUBITEM|LVCF_WIDTH;
|
||
diverssnd_column[i].id_col=ListView_InsertColumn(GetDlgItem(hdwnd,IDC_LISTE),i,&lvc);
|
||
}
|
||
|
||
SNDLST2_M_DynamicForEachElementOf(&dbgVolumeLineSnd.pList,pdbgLine,i)
|
||
{
|
||
//raj liste
|
||
memset(&lvi,0,sizeof(lvi));
|
||
lvi.mask=LVIF_TEXT|LVIF_PARAM;
|
||
lvi.iItem=0;
|
||
lvi.iSubItem=0;
|
||
sprintf(texte,"0x%x",pdbgLine->id);
|
||
lvi.pszText=texte;
|
||
lvi.lParam=pdbgLine->id;
|
||
iIns=ListView_InsertItem(GetDlgItem(hdwnd,IDC_LISTE),&lvi);
|
||
|
||
sprintf(texte,"%d",pdbgLine->vol);
|
||
ListView_SetItemText(GetDlgItem(hdwnd,IDC_LISTE),iIns,diverssnd_column[DIVERSSND_COL_VOL].id_col,texte);
|
||
}
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
|
||
SetTimer(hdwnd,0,100,NULL);
|
||
|
||
break;
|
||
case WM_TIMER:
|
||
refresh_theme();
|
||
break;
|
||
case WM_COMMAND:
|
||
switch (LOWORD(wParam))
|
||
{
|
||
case IDC_TOPMOST:
|
||
topmost=!topmost;
|
||
SetWindowText(GetDlgItem(hdwnd,IDC_TOPMOST),topmost ? "Go to back-ground" : "Go to Fore-Ground");
|
||
SetWindowPos(hdwnd,topmost ? HWND_TOPMOST : HWND_BOTTOM,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
|
||
break;
|
||
case IDC_REFRESH:
|
||
if (auto_refresh)
|
||
{
|
||
auto_refresh=FALSE;
|
||
KillTimer(hdwnd,0);
|
||
}
|
||
|
||
refresh_liste_visusnd();
|
||
break;
|
||
case IDC_AUTOREFRESH:
|
||
if (!auto_refresh)
|
||
{
|
||
auto_refresh=TRUE;
|
||
SetTimer(hdwnd,0,100,NULL);
|
||
}
|
||
break;
|
||
case IDC_HISTORIC:
|
||
EndDialog(hdwnd,GOTO_HISTORIC);
|
||
break;
|
||
case IDC_SUPERVISATER:
|
||
EndDialog(hdwnd,GOTO_SUPERVISATER);
|
||
return 1;
|
||
case IDC_INFORMATIONS:
|
||
EndDialog(hdwnd,GOTO_DIVERS);
|
||
return 1;
|
||
case IDC_VISUVIRT:
|
||
EndDialog(hdwnd,GOTO_VISUVIRT);
|
||
break;
|
||
case IDC_CLOSE:
|
||
EndDialog(hdwnd,GOTO_BYEBYE);
|
||
break;
|
||
case IDCANCEL:
|
||
EndDialog(hdwnd,0);
|
||
return 1;
|
||
}
|
||
break;
|
||
case WM_DESTROY:
|
||
case WM_QUIT:
|
||
EndDialog(hdwnd,0);
|
||
return 0;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
void SND_CALL dbgSND_fn_vSetProcessTimeSample(float ratio)
|
||
{
|
||
char texte[256];
|
||
|
||
if (bSupervisaterActive)
|
||
{
|
||
if (hwndVisuSnd)
|
||
{
|
||
sprintf(texte,"%d/1000",(int)(1000.0*ratio));
|
||
SetDlgItemText(hwndVisuSnd,IDC_PROCESSTIME,texte);
|
||
}
|
||
}
|
||
}
|
||
|
||
void SND_CALL dbgSND_fn_vAddVoiceSample(long id,tduRefRes res,SampleParam* par)
|
||
{
|
||
BOOL visusnd_found=FALSE;
|
||
pdbgVISUSND_ELEMENT visusnd;
|
||
int i,iIns;
|
||
LV_ITEM lvi;
|
||
char texte[80];
|
||
|
||
if (bSupervisaterActive)
|
||
{
|
||
if (!dbg_visusnd_init)
|
||
{
|
||
dbg_visusnd_init=TRUE;
|
||
SNDLST2_M_DynamicInitAnchor(&dbg_visusnd.pList);
|
||
}
|
||
|
||
SNDLST2_M_DynamicForEachElementOf(&dbg_visusnd.pList,visusnd,i)
|
||
{
|
||
if (visusnd->id==id)
|
||
{
|
||
visusnd_found=TRUE;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (!visusnd_found)
|
||
{
|
||
visusnd=GlobalAlloc(GMEM_FIXED,sizeof(dbgVISUSND_ELEMENT));
|
||
memset(visusnd,0,sizeof(dbgVISUSND_ELEMENT));
|
||
SNDLST2_M_DynamicInitElement(visusnd);
|
||
visusnd->id=id;
|
||
SNDLST2_M_DynamicAddTail(&dbg_visusnd.pList,visusnd);
|
||
//raj liste
|
||
if (hwndVisuSnd)
|
||
{
|
||
memset(&lvi,0,sizeof(lvi));
|
||
lvi.mask=LVIF_TEXT|LVIF_PARAM;
|
||
lvi.iItem=0;
|
||
lvi.iSubItem=0;
|
||
sprintf(texte,"0x%x",visusnd->id);
|
||
lvi.pszText=texte;
|
||
lvi.lParam=visusnd->id;
|
||
iIns=ListView_InsertItem(GetDlgItem(hwndVisuSnd,IDC_LISTE),&lvi);
|
||
}
|
||
}
|
||
|
||
visusnd->res_pstPtr=res.pstPtr;
|
||
visusnd->res_Id=res.pstPtr->Id;
|
||
memcpy(&visusnd->par,par,sizeof(SampleParam));
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
}
|
||
}
|
||
|
||
void SND_CALL dbgSND_fn_vSetParVoiceSample(long id,SampleParam* par)
|
||
{
|
||
pdbgVISUSND_ELEMENT visusnd;
|
||
int i;
|
||
BOOL visusnd_found=FALSE;
|
||
|
||
if (bSupervisaterActive)
|
||
{
|
||
SNDLST2_M_DynamicForEachElementOf(&dbg_visusnd.pList,visusnd,i)
|
||
{
|
||
if (visusnd->id==id)
|
||
{
|
||
visusnd_found=TRUE;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (visusnd_found)
|
||
{
|
||
memcpy(&visusnd->par,par,sizeof(SampleParam));
|
||
}
|
||
}
|
||
}
|
||
|
||
void SND_CALL dbgSND_fn_vDelVoiceSample(long id)
|
||
{
|
||
pdbgVISUSND_ELEMENT visusnd;
|
||
BOOL visusnd_found=FALSE;
|
||
int i,iDel,iFind;
|
||
LV_FINDINFO lvf;
|
||
|
||
if (bSupervisaterActive)
|
||
{
|
||
if (hMutex) WaitForSingleObject(hMutex,INFINITE);
|
||
|
||
SNDLST2_M_DynamicForEachElementOf(&dbg_visusnd.pList,visusnd,i)
|
||
{
|
||
if (visusnd->id==id)
|
||
{
|
||
visusnd_found=TRUE;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (visusnd_found)
|
||
{
|
||
if (hwndVisuSnd)
|
||
{
|
||
memset(&lvf,0,sizeof(LV_FINDINFO));
|
||
lvf.flags=LVFI_PARAM;
|
||
lvf.lParam=id;
|
||
iDel=ListView_DeleteItem(GetDlgItem(hwndVisuSnd,IDC_LISTE)
|
||
,iFind=ListView_FindItem(GetDlgItem(hwndVisuSnd,IDC_LISTE),-1,&lvf)
|
||
);
|
||
}
|
||
SNDLST2_M_DynamicIsolate(visusnd);
|
||
GlobalFree(visusnd);
|
||
}
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
}
|
||
}
|
||
|
||
void SND_CALL dbgSND_fn_vPauseVoiceSample(long id)
|
||
{
|
||
pdbgVISUSND_ELEMENT visusnd;
|
||
BOOL visusnd_found=FALSE;
|
||
int i;
|
||
|
||
if (bSupervisaterActive)
|
||
{
|
||
if (hMutex) WaitForSingleObject(hMutex,INFINITE);
|
||
|
||
SNDLST2_M_DynamicForEachElementOf(&dbg_visusnd.pList,visusnd,i)
|
||
{
|
||
if (visusnd->id==id)
|
||
{
|
||
visusnd_found=TRUE;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (visusnd_found)
|
||
{
|
||
visusnd->bPaused=TRUE;
|
||
}
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
}
|
||
}
|
||
|
||
void SND_CALL dbgSND_fn_vResumeVoiceSample(long id)
|
||
{
|
||
pdbgVISUSND_ELEMENT visusnd;
|
||
BOOL visusnd_found=FALSE;
|
||
int i;
|
||
|
||
if (bSupervisaterActive)
|
||
{
|
||
if (hMutex) WaitForSingleObject(hMutex,INFINITE);
|
||
|
||
SNDLST2_M_DynamicForEachElementOf(&dbg_visusnd.pList,visusnd,i)
|
||
{
|
||
if (visusnd->id==id)
|
||
{
|
||
visusnd_found=TRUE;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (visusnd_found)
|
||
{
|
||
visusnd->bPaused=FALSE;
|
||
}
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
}
|
||
}
|
||
|
||
//ajout d'un historic
|
||
void SND_CALL dbgSND_fn_vAddHistoric(SND_tduRefEvt evt,long indice,long type_obj,long asso,tdstBlockResourceMem* res)
|
||
{
|
||
if (bSupervisaterActive)
|
||
{
|
||
if (!historic_init)
|
||
{
|
||
historic_init=TRUE;
|
||
memset(historic,0,sizeof(historic));
|
||
}
|
||
|
||
GetLocalTime(&historic[next_element].time);
|
||
historic[next_element].evt_pstPtr=evt.pstPtr;
|
||
historic[next_element].evt_Id=evt.pstPtr->Id;
|
||
historic[next_element].evt_eType=evt.pstPtr->eType;
|
||
historic[next_element].obj=indice;
|
||
historic[next_element].type_obj=type_obj;
|
||
historic[next_element].asso=asso;
|
||
historic[next_element].res_pstPtr=res;
|
||
|
||
dbgSND_fn_vGetInfoForObjectSound(indice,type_obj,historic[next_element].info,sizeof(historic[next_element].info)-1);
|
||
historic[next_element].info[sizeof(historic[next_element].info)-1]=0;
|
||
|
||
if (flagDebugBreak)
|
||
{
|
||
if (!filtre(&historic[next_element]))
|
||
/******* BreakPoint demand<6E> par le SUPERVISATER ****************/
|
||
DebugBreak();
|
||
/******* BreakPoint demand<6E> par le SUPERVISATER ****************/
|
||
}
|
||
if (!filtre(&historic[next_element]))
|
||
add_histo(&historic[next_element]);
|
||
next_element++;
|
||
if (next_element>=TAILLE_HISTORIC) next_element=0;
|
||
}
|
||
}
|
||
|
||
//ajout d'un couple evt-objet
|
||
void SND_CALL dbgSND_fn_vAddEventToObject(long indice,long type,long asso,SND_tduRefEvt evt)
|
||
{
|
||
dbgSND_tdstObjectStruct* obj=NULL;
|
||
int i,iIns;
|
||
BOOL obj_found=FALSE;
|
||
LV_ITEM lvi;
|
||
char texte[80];
|
||
char info[10];
|
||
|
||
if (bSupervisaterActive)
|
||
{
|
||
if (hMutex) WaitForSingleObject(hMutex,INFINITE);
|
||
|
||
if (!dbg_objects_init)
|
||
{
|
||
dbg_objects_init=TRUE;
|
||
SNDLST2_M_DynamicInitAnchor(&dbg_objects.pList);
|
||
}
|
||
|
||
SNDLST2_M_DynamicForEachElementOf(&dbg_objects.pList,obj,i)
|
||
{
|
||
if (obj->indice==indice)
|
||
{
|
||
obj_found=TRUE;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (obj_found)
|
||
{
|
||
add_evt(obj,asso,evt);
|
||
}
|
||
else
|
||
{
|
||
obj=GlobalAlloc(GMEM_FIXED,sizeof(dbgSND_tdstObjectStruct));
|
||
memset(obj,0,sizeof(dbgSND_tdstObjectStruct));
|
||
SNDLST2_M_DynamicInitElement(obj);
|
||
obj->indice=indice;
|
||
SNDLST2_M_DynamicInitAnchor(&obj->evts.pList);
|
||
SNDLST2_M_DynamicAddTail(&dbg_objects.pList,obj);
|
||
|
||
add_evt(obj,asso,evt);
|
||
|
||
//raj liste
|
||
if (hwndSupervisater)
|
||
{
|
||
memset(&lvi,0,sizeof(lvi));
|
||
lvi.mask=LVIF_TEXT|LVIF_PARAM;
|
||
lvi.iItem=0;
|
||
lvi.iSubItem=0;
|
||
dbgSND_fn_vGetInfoForObjectSound(indice,type,info,sizeof(info)-1);info[sizeof(info)-1]=0;
|
||
sprintf(texte,"0x%x (%s)",obj->indice,info);
|
||
lvi.pszText=texte;
|
||
lvi.lParam=obj->indice;
|
||
iIns=ListView_InsertItem(GetDlgItem(hwndSupervisater,IDC_LISTOBJECT),&lvi);
|
||
}
|
||
}
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
}
|
||
}
|
||
|
||
// destruction d'un couple evt-couple
|
||
void SND_CALL dbgSND_fn_vKillEventToObjectPrivate(long indice,long asso)
|
||
{
|
||
dbgSND_tdstObjectStruct* obj=NULL;
|
||
int i,iFind,iDel;
|
||
BOOL obj_found=FALSE;
|
||
LV_FINDINFO lvf;
|
||
|
||
if (bSupervisaterActive)
|
||
{
|
||
if (hMutex) WaitForSingleObject(hMutex,INFINITE);
|
||
|
||
SNDLST2_M_DynamicForEachElementOf(&dbg_objects.pList,obj,i)
|
||
{
|
||
if (obj->indice==indice)
|
||
{
|
||
obj_found=TRUE;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (obj_found)
|
||
{
|
||
del_evt(obj,asso);
|
||
|
||
if (!SNDLST2_M_DynamicGetNumberOfElements(&obj->evts.pList) && delete_objects)
|
||
{
|
||
//destruction
|
||
if (hwndSupervisater)
|
||
{
|
||
memset(&lvf,0,sizeof(LV_FINDINFO));
|
||
lvf.flags=LVFI_PARAM;
|
||
lvf.lParam=indice;
|
||
iDel=ListView_DeleteItem(GetDlgItem(hwndSupervisater,IDC_LISTOBJECT)
|
||
,iFind=ListView_FindItem(GetDlgItem(hwndSupervisater,IDC_LISTOBJECT),-1,&lvf)
|
||
);
|
||
}
|
||
SNDLST2_M_DynamicIsolate(obj);
|
||
GlobalFree(obj);
|
||
}
|
||
}
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
}
|
||
}
|
||
|
||
void SND_CALL dbgSND_fn_vKillEventToObject(long indice,long asso)
|
||
{
|
||
dbgSND_fn_vKillEventToObjectPrivate(indice,asso);
|
||
}
|
||
|
||
|
||
//raj des param<61>tres d'un couple
|
||
void SND_CALL dbgSND_fn_vSetPosObject(long indice,SoundParam* par)
|
||
{
|
||
dbgSND_tdstObjectStruct* obj=NULL;
|
||
int i;
|
||
BOOL obj_found=FALSE;
|
||
|
||
if (bSupervisaterActive)
|
||
{
|
||
SNDLST2_M_DynamicForEachElementOf(&dbg_objects.pList,obj,i)
|
||
{
|
||
if (obj->indice==indice)
|
||
{
|
||
obj_found=TRUE;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (obj_found)
|
||
{
|
||
memcpy(&obj->par,par,sizeof(SoundParam));
|
||
}
|
||
}
|
||
}
|
||
|
||
//add a micro
|
||
void SND_CALL dbgSND_fn_vAddMicro(long indice)
|
||
{
|
||
pdbgMICRO_DESCRIPTION mic;
|
||
int iIns;
|
||
LV_ITEM lvi;
|
||
char texte[80];
|
||
|
||
if (bSupervisaterActive)
|
||
{
|
||
if (hMutex) WaitForSingleObject(hMutex,INFINITE);
|
||
|
||
if (!dbg_micros_init)
|
||
{
|
||
dbg_micros_init=TRUE;
|
||
SNDLST2_M_DynamicInitAnchor(&dbg_micros.pList);
|
||
}
|
||
|
||
mic=GlobalAlloc(GMEM_FIXED,sizeof(dbgMICRO_DESCRIPTION));
|
||
memset(mic,0,sizeof(dbgMICRO_DESCRIPTION));
|
||
SNDLST2_M_DynamicInitElement(mic);
|
||
mic->Id=indice;
|
||
SNDLST2_M_DynamicAddTail(&dbg_micros.pList,mic);
|
||
//raj liste
|
||
if (hwndSupervisater)
|
||
{
|
||
memset(&lvi,0,sizeof(lvi));
|
||
lvi.mask=LVIF_TEXT|LVIF_PARAM;
|
||
lvi.iItem=0;
|
||
lvi.iSubItem=0;
|
||
sprintf(texte,"0x%x",mic->Id);
|
||
lvi.pszText=texte;
|
||
lvi.lParam=mic->Id;
|
||
iIns=ListView_InsertItem(GetDlgItem(hwndSupervisater,IDC_LISTMICRO),&lvi);
|
||
}
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
}
|
||
}
|
||
|
||
//destroy z micro
|
||
void SND_CALL dbgSND_fn_vKillMicro(long indice)
|
||
{
|
||
BOOL mic_found=FALSE;
|
||
pdbgMICRO_DESCRIPTION mic;
|
||
int i,iDel,iFind;
|
||
LV_FINDINFO lvf;
|
||
|
||
if (bSupervisaterActive)
|
||
{
|
||
if (hMutex) WaitForSingleObject(hMutex,INFINITE);
|
||
|
||
SNDLST2_M_DynamicForEachElementOf(&dbg_micros.pList,mic,i)
|
||
{
|
||
if (mic->Id==indice)
|
||
{
|
||
mic_found=TRUE;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (mic_found)
|
||
{
|
||
//raj liste
|
||
if (hwndSupervisater)
|
||
{
|
||
memset(&lvf,0,sizeof(LV_FINDINFO));
|
||
lvf.flags=LVFI_PARAM;
|
||
lvf.lParam=indice;
|
||
iDel=ListView_DeleteItem(GetDlgItem(hwndSupervisater,IDC_LISTMICRO)
|
||
,iFind=ListView_FindItem(GetDlgItem(hwndSupervisater,IDC_LISTMICRO),-1,&lvf)
|
||
);
|
||
}
|
||
SNDLST2_M_DynamicIsolate(mic);
|
||
GlobalFree(mic);
|
||
}
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
}
|
||
}
|
||
|
||
//raj micro
|
||
void SND_CALL dbgSND_fn_vSetPosMicro(long indice,MicroParam* par)
|
||
{
|
||
BOOL mic_found=FALSE;
|
||
pdbgMICRO_DESCRIPTION mic;
|
||
int i;
|
||
|
||
if (bSupervisaterActive)
|
||
{
|
||
if (hMutex) WaitForSingleObject(hMutex,INFINITE);
|
||
|
||
SNDLST2_M_DynamicForEachElementOf(&dbg_micros.pList,mic,i)
|
||
{
|
||
if (mic->Id==indice)
|
||
{
|
||
mic_found=TRUE;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (mic_found)
|
||
{
|
||
memcpy(&mic->par,par,sizeof(MicroParam));
|
||
}
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
}
|
||
}
|
||
|
||
//----ligne
|
||
void SND_CALL dbgSND_fn_vKillVolumeLine(long line)
|
||
{
|
||
pdbgVOLUMELINE_DESCRIPTION dbgpvol,dbgpvolnext;
|
||
int i;
|
||
|
||
SNDLST2_M_DynamicForEachMovingElementOf(&dbgVolumeLineSnd.pList,dbgpvol,dbgpvolnext,i)
|
||
{
|
||
if (dbgpvol->id==line)
|
||
{
|
||
SNDLST2_M_DynamicIsolate(dbgpvol);
|
||
GlobalFree(dbgpvol);
|
||
}
|
||
}
|
||
}
|
||
|
||
void SND_CALL dbgSND_fn_vAddVolumeLine(long line)
|
||
{
|
||
int iIns;
|
||
LV_ITEM lvi;
|
||
LV_COLUMN lvc;
|
||
char texte[80];
|
||
pdbgVOLUMELINE_DESCRIPTION dbgpvol;
|
||
|
||
if (bSupervisaterActive)
|
||
{
|
||
if (hMutex) WaitForSingleObject(hMutex,INFINITE);
|
||
|
||
if (!dbgVolumeLineInit)
|
||
{
|
||
SNDLST2_M_DynamicInitAnchor(&dbgVolumeLineSnd.pList);
|
||
dbgVolumeLineInit=TRUE;
|
||
}
|
||
|
||
dbgpvol=GlobalAlloc(GMEM_FIXED,sizeof(dbgVOLUMELINE_DESCRIPTION));
|
||
memset(dbgpvol,0,sizeof(dbgVOLUMELINE_DESCRIPTION));
|
||
SNDLST2_M_DynamicInitElement(dbgpvol);
|
||
SNDLST2_M_DynamicAddTail(&dbgVolumeLineSnd.pList,dbgpvol);
|
||
dbgpvol->id=line;
|
||
dbgpvol->vol=127;
|
||
|
||
//raj liste
|
||
if (hwndDiversSnd)
|
||
{
|
||
memset(&lvi,0,sizeof(lvi));
|
||
lvi.mask=LVIF_TEXT|LVIF_PARAM;
|
||
lvi.iItem=0;
|
||
lvi.iSubItem=0;
|
||
sprintf(texte,"0x%x",line);
|
||
lvi.pszText=texte;
|
||
lvi.lParam=line;
|
||
iIns=ListView_InsertItem(GetDlgItem(hwndDiversSnd,IDC_LISTE),&lvi);
|
||
|
||
memset(&lvc,0,sizeof(lvc));
|
||
sprintf(texte,"%d",127);
|
||
lvc.pszText=texte;
|
||
lvc.cx=diverssnd_column[1].width;
|
||
lvc.iSubItem=1;
|
||
lvc.mask=LVCF_TEXT|LVCF_SUBITEM|LVCF_WIDTH;
|
||
diverssnd_column[1].id_col=ListView_InsertColumn(GetDlgItem(hwndDiversSnd,IDC_LISTE),1,&lvc);
|
||
}
|
||
|
||
if (hMutex) ReleaseMutex(hMutex);
|
||
}
|
||
}
|
||
|
||
void refresh_volume_line()
|
||
{
|
||
HWND hwnd;
|
||
int iFind,i;
|
||
LV_FINDINFO lvf;
|
||
char texte[256];
|
||
pdbgVOLUMELINE_DESCRIPTION dbgpvol;
|
||
|
||
if (hwndDiversSnd)
|
||
{
|
||
hwnd=GetDlgItem(hwndDiversSnd,IDC_LISTE);
|
||
|
||
SNDLST2_M_DynamicForEachElementOf(&dbgVolumeLineSnd.pList,dbgpvol,i)
|
||
{
|
||
memset(&lvf,0,sizeof(LV_FINDINFO));
|
||
lvf.flags=LVFI_PARAM;
|
||
lvf.lParam=dbgpvol->id;
|
||
iFind=ListView_FindItem(hwnd,-1,&lvf);
|
||
sprintf(texte,"%d",dbgpvol->vol);
|
||
ListView_SetItemText(hwnd,iFind,diverssnd_column[DIVERSSND_COL_VOL].id_col,texte);
|
||
}
|
||
}
|
||
}
|
||
|
||
void SND_CALL dbgSND_fn_vSetVolumeLine(long line,long vol)
|
||
{
|
||
pdbgVOLUMELINE_DESCRIPTION dbgpvol;
|
||
int i;
|
||
|
||
SNDLST2_M_DynamicForEachElementOf(&dbgVolumeLineSnd.pList,dbgpvol,i)
|
||
{
|
||
if (dbgpvol->id==line)
|
||
{
|
||
dbgpvol->vol=vol;
|
||
}
|
||
}
|
||
|
||
refresh_volume_line();
|
||
}
|
||
|
||
|
||
//---------- g<>n<EFBFBD>rales
|
||
//thread du supervisater
|
||
DWORD WINAPI SupervistareThread(DWORD par)
|
||
{
|
||
int ret=GOTO_SUPERVISATER;
|
||
|
||
while ((ret!=GOTO_BYEBYE) && (ret!=-1))
|
||
{
|
||
switch (ret)
|
||
{
|
||
case GOTO_SUPERVISATER:
|
||
ret=DialogBox(hSupervisaterDLL,MAKEINTRESOURCE(IDD_SUPERVISATER),HWND_DESKTOP,(DLGPROC)SupervisaterCallback);
|
||
hwndSupervisater=NULL;
|
||
break;
|
||
case GOTO_HISTORIC:
|
||
// ret=CreateDialog(hSupervisaterDLL,MAKEINTRESOURCE(IDD_HISTORIC),HWND_DESKTOP,(DLGPROC)HistoricCallback);
|
||
ret=DialogBox(hSupervisaterDLL,MAKEINTRESOURCE(IDD_HISTORIC),HWND_DESKTOP,(DLGPROC)HistoricCallback);
|
||
hwndHistoric=NULL;
|
||
break;
|
||
case GOTO_VISUSND:
|
||
ret=DialogBox(hSupervisaterDLL,MAKEINTRESOURCE(IDD_VISUSND),HWND_DESKTOP,(DLGPROC)VisuSndCallback);
|
||
hwndVisuSnd=NULL;
|
||
break;
|
||
case GOTO_DIVERS:
|
||
ret=DialogBox(hSupervisaterDLL,MAKEINTRESOURCE(IDD_DIVERS),HWND_DESKTOP,(DLGPROC)DiversCallback);
|
||
hwndDiversSnd=NULL;
|
||
break;
|
||
case GOTO_VISUVIRT:
|
||
ret=DialogBox(hSupervisaterDLL,MAKEINTRESOURCE(IDD_VISUVIRT),HWND_DESKTOP,(DLGPROC)VisuVirtCallback);
|
||
hwndVisuVirt=NULL;
|
||
break;
|
||
default:
|
||
ret=GOTO_BYEBYE;
|
||
break;
|
||
}
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
|
||
#endif //SUPERVISATER
|
||
|
||
// lance la fen<65>tre de Supervisater
|
||
void SND_CALL SND_fn_vLaunchSupervisater(SND_tdstInitStruct *pInitStruct)
|
||
{
|
||
#ifdef SUPERVISATER
|
||
#if defined(_DLL_COMPILATION_MODE)
|
||
SND_DllInitEntryPoints_StaticFunctions((HMODULE)pInitStruct->hProcessInstance );
|
||
#endif
|
||
|
||
if (bSupervisaterActive)
|
||
{
|
||
if (!hSupervisaterThread)
|
||
{
|
||
InitCommonControls();
|
||
|
||
hMutex=CreateMutex(NULL,FALSE,NULL);
|
||
|
||
hwndMain=pInitStruct->hMainWindow;
|
||
hSupervisaterDLL=SND_fn_vGetHModuleDbg();
|
||
|
||
hSupervisaterThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)SupervistareThread,NULL,0,&dwSupervisaterThreadId);
|
||
}
|
||
}
|
||
#endif
|
||
}
|
||
|
||
// ferme la fen<65>tre de Supervisater
|
||
void SND_CALL SND_fn_vKillSupervisater()
|
||
{
|
||
#ifdef SUPERVISATER
|
||
pdbgSND_tdstObjectStruct obj,objnext;
|
||
pdbgSND_tdstEvtStruct evt,evtnext;
|
||
pdbgMICRO_DESCRIPTION mic,micnext;
|
||
pdbgVISUSND_ELEMENT visu,visunext;
|
||
pdbgVOLUMELINE_DESCRIPTION vol,volnext;
|
||
int i,j;
|
||
|
||
if (bSupervisaterActive)
|
||
{
|
||
PostThreadMessage(dwSupervisaterThreadId,WM_QUIT,0,0);
|
||
WaitForSingleObject(hSupervisaterThread,50000);
|
||
CloseHandle(hSupervisaterThread);
|
||
CloseHandle(hMutex);
|
||
hMutex=NULL;
|
||
}
|
||
|
||
//free memory
|
||
SNDLST2_M_DynamicForEachMovingElementOf(&dbg_objects.pList,obj,objnext,i)
|
||
{
|
||
SNDLST2_M_DynamicForEachMovingElementOf(&obj->evts.pList,evt,evtnext,j)
|
||
{
|
||
SNDLST2_M_DynamicIsolate(evt);
|
||
GlobalFree(evt);
|
||
}
|
||
SNDLST2_M_DynamicIsolate(obj);
|
||
GlobalFree(obj);
|
||
}
|
||
SNDLST2_M_DynamicForEachMovingElementOf(&dbg_visusnd.pList,visu,visunext,i)
|
||
{
|
||
SNDLST2_M_DynamicIsolate(visu);
|
||
GlobalFree(visu);
|
||
}
|
||
SNDLST2_M_DynamicForEachMovingElementOf(&dbg_micros.pList,mic,micnext,i)
|
||
{
|
||
SNDLST2_M_DynamicIsolate(mic);
|
||
GlobalFree(mic);
|
||
}
|
||
SNDLST2_M_DynamicForEachMovingElementOf(&dbgVolumeLineSnd.pList,vol,volnext,i)
|
||
{
|
||
SNDLST2_M_DynamicIsolate(vol);
|
||
GlobalFree(vol);
|
||
}
|
||
#endif
|
||
}
|
||
|
||
void SND_CALL SND_fn_vSetSupervisaterActive(void)
|
||
{
|
||
bSupervisaterActive=TRUE;
|
||
}
|
||
|
||
SndBool SND_CALL SND_fn_bIsSupervisaterActive(void)
|
||
{
|
||
return bSupervisaterActive;
|
||
}
|
||
|
||
//fonctions pour <20>diteur
|
||
tdstBlockResourceMem* SND_CALL dbgSND_fn_pstGetSelectedResource(void)
|
||
{
|
||
if (hwndHistoric)
|
||
return res_for_editor;
|
||
else
|
||
return NULL;
|
||
}
|
||
|
||
SndBool SND_CALL dbgSND_fn_bDoesSupervisaterSelectResource(void)
|
||
{
|
||
if (hwndHistoric)
|
||
{
|
||
if (SendDlgItemMessage(hwndHistoric,IDC_SELECTRESOURCE,BM_GETCHECK,0,0)==BST_CHECKED)
|
||
return TRUE;
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
void SND_CALL dbgSND_fn_vLoadBank(int iId)
|
||
{
|
||
}
|
||
|
||
void SND_CALL dbgSND_fn_vUnLoadBank(int iId)
|
||
{
|
||
}
|
||
|
||
//redfresh Supervistaer display
|
||
void SND_CALL dbgSND_fn_vRefreshSupervisater(void)
|
||
{
|
||
if (bSupervisaterActive)
|
||
{
|
||
if (hwndHistoric)
|
||
{
|
||
ListView_DeleteAllItems(GetDlgItem(hwndHistoric,IDC_LISTE));
|
||
refresh_historic();
|
||
}
|
||
}
|
||
}
|