build: add the SIBO SDK
This commit is contained in:
@@ -0,0 +1,293 @@
|
||||
/*
|
||||
SPYBW.C
|
||||
|
||||
Written by SteveT
|
||||
Started on 20/7/92
|
||||
|
||||
Part of Spy to monitor CPU band width usage.
|
||||
*/
|
||||
|
||||
#include <plib.h>
|
||||
#include <hwif.h>
|
||||
|
||||
#define DLG_WIDTH 190
|
||||
#define DLG_HEIGHT 49
|
||||
#define DLG_LINE 13
|
||||
#define STACK_SIZE 500
|
||||
|
||||
GLREF_D TEXT *DatCommandPtr;
|
||||
GLREF_D VOID *winHandle;
|
||||
GLREF_D TEXT *DatProcessNamePtr;
|
||||
|
||||
LOCAL_D UINT TaskCount;
|
||||
|
||||
LOCAL_D INT Debug=FALSE;
|
||||
LOCAL_D UINT oldPri;
|
||||
LOCAL_D INT winId;
|
||||
LOCAL_D HANDLE bwPid;
|
||||
LOCAL_D HANDLE spyPid;
|
||||
LOCAL_D VOID *TimCB;
|
||||
LOCAL_D ULONG bwTotal;
|
||||
LOCAL_D UINT bwCount;
|
||||
LOCAL_D ULONG bwCabTotal;
|
||||
LOCAL_D UINT bwCabCount;
|
||||
LOCAL_D UINT bwCabBase;
|
||||
LOCAL_D ULONG bwCabDisplayTotal;
|
||||
LOCAL_D UINT bwCabDisplayCount;
|
||||
LOCAL_D UINT bwCabDisplayBase;
|
||||
LOCAL_D UWORD LastCount;
|
||||
LOCAL_D UWORD SampleCount;
|
||||
|
||||
LOCAL_D UBYTE TaskStack[STACK_SIZE];
|
||||
|
||||
/***********************************************************/
|
||||
/* This section of code is used by the task to measure the */
|
||||
/* available band width. */
|
||||
/***********************************************************/
|
||||
|
||||
LOCAL_C VOID MonitorLoop(VOID)
|
||||
{
|
||||
UINT i;
|
||||
|
||||
p_unmarka();
|
||||
FOREVER
|
||||
{
|
||||
for(i=0;i<500;i++);
|
||||
TaskCount++;
|
||||
}
|
||||
}
|
||||
|
||||
/*********************/
|
||||
/* Main body of code */
|
||||
/*********************/
|
||||
|
||||
LOCAL_C VOID DebugInfo(VOID)
|
||||
{
|
||||
TEXT buf[80];
|
||||
|
||||
p_atos(&buf[0],"%u/%u",LastCount,SampleCount);
|
||||
wInfoMsg(&buf[0]);
|
||||
}
|
||||
|
||||
GLDEF_C VOID DisableReads(UINT flag)
|
||||
{
|
||||
UINT tmp;
|
||||
|
||||
tmp=P_SCR_DISABLE_READS;
|
||||
p_iow(winHandle,P_FSET,&tmp,&flag);
|
||||
}
|
||||
|
||||
LOCAL_C INT CreateDialog(VOID)
|
||||
{
|
||||
W_WINDATA windata;
|
||||
INT w_id;
|
||||
|
||||
windata.extent.width=DLG_WIDTH;
|
||||
windata.extent.height=DLG_HEIGHT;
|
||||
windata.extent.tl.x=(240-DLG_WIDTH)>>1;
|
||||
windata.extent.tl.y=(80-DLG_HEIGHT)>>1;
|
||||
w_id=wCreateWindow(0,W_WIN_EXTENT,&windata,1);
|
||||
wInitialiseWindowTree(w_id);
|
||||
return(w_id);
|
||||
}
|
||||
|
||||
LOCAL_C VOID pTxt(UINT line,TEXT *txt,ULONG *pTotal,INT count,INT count2)
|
||||
{
|
||||
P_RECT rect;
|
||||
TEXT buf[20];
|
||||
ULONG Percentage,lCount;
|
||||
|
||||
rect.tl.x=4;
|
||||
rect.br.x=96;
|
||||
rect.tl.y=DLG_LINE+3+line*10;
|
||||
rect.br.y=rect.tl.y+8;
|
||||
gPrintBoxText(&rect,7,G_TEXT_ALIGN_LEFT,0,txt,p_slen(txt));
|
||||
buf[0]=0;
|
||||
if (bwCount>0 && count!=0)
|
||||
{
|
||||
lCount=(ULONG)(count==-1?1:count);
|
||||
Percentage=(*pTotal)*100l;
|
||||
Percentage/=lCount;
|
||||
Percentage/=(ULONG)SampleCount;
|
||||
if (count!=0)
|
||||
{
|
||||
if (count2>=0)
|
||||
p_atos(&buf[0],"%U%% [%u-%u]",Percentage,count2,count+count2);
|
||||
else
|
||||
p_atos(&buf[0],count>0?"%U%% [%u]":"%U%%",Percentage,count);
|
||||
}
|
||||
}
|
||||
rect.tl.x=rect.br.x;
|
||||
rect.br.x=DLG_WIDTH-6;
|
||||
gPrintBoxText(&rect,7,G_TEXT_ALIGN_LEFT,0,&buf[0],p_slen(&buf[0]));
|
||||
}
|
||||
|
||||
LOCAL_C VOID redrawWin(UINT update)
|
||||
{
|
||||
P_RECT rect;
|
||||
ULONG tmp;
|
||||
|
||||
if (update)
|
||||
gCreateTempGC0(winId);
|
||||
else
|
||||
{
|
||||
wBeginRedrawWinGC0(winId);
|
||||
gBorder(W_BORD_CORNER_4|W_BORD_SHADOW_D|W_BORD_SHADOW_ON);
|
||||
rect.tl.x=4;
|
||||
rect.br.x=DLG_WIDTH-6;
|
||||
rect.tl.y=3;
|
||||
rect.br.y=11;
|
||||
gPrintBoxText(&rect,7,G_TEXT_ALIGN_CENTRE,0,"Available CPU band width",24);
|
||||
gDrawLine(1,DLG_LINE,DLG_WIDTH-2,DLG_LINE);
|
||||
}
|
||||
pTxt(0,"Average",&bwTotal,bwCount,-1);
|
||||
tmp=LastCount;
|
||||
pTxt(1,"Last",&tmp,-1,-1);
|
||||
pTxt(2,"<Cntrl>\002B",&bwCabDisplayTotal,bwCabDisplayCount,bwCabDisplayBase);
|
||||
if (update)
|
||||
gFreeTempGC();
|
||||
else
|
||||
wEndRedraw();
|
||||
}
|
||||
|
||||
LOCAL_C VOID GetCount(UWORD *pCount)
|
||||
{
|
||||
LONG time;
|
||||
WORD tstat;
|
||||
|
||||
p_presume(bwPid);
|
||||
time=10l;
|
||||
TaskCount=0;
|
||||
p_ioc(TimCB,P_FREAD,&tstat,&time);
|
||||
p_waitstat(&tstat);
|
||||
*pCount=TaskCount;
|
||||
if (TaskCount>SampleCount)
|
||||
SampleCount=TaskCount;
|
||||
p_psuspend(bwPid);
|
||||
p_allowoff();
|
||||
}
|
||||
|
||||
LOCAL_C VOID InitBW(VOID)
|
||||
{
|
||||
UWORD oldSample,Count2;
|
||||
INT i;
|
||||
|
||||
f_leave(bwPid=p_ptask("SYS$SPY",E_MAX_PRIORITY-1,MonitorLoop,&TaskStack[STACK_SIZE-1]));
|
||||
f_open(&TimCB,"TIM:",-1);
|
||||
spyPid=p_getpid();
|
||||
oldPri=p_getpri(spyPid);
|
||||
p_setpri(spyPid,E_MAX_PRIORITY);
|
||||
if (SampleCount==0)
|
||||
for(i=0;i<5;i++)
|
||||
{ /* If no matching samples in 5 then just take the best so far */
|
||||
oldSample=SampleCount;
|
||||
GetCount(&Count2);
|
||||
if (Count2==oldSample || (Count2+1)==oldSample || Count2==(oldSample+1))
|
||||
break; /* Two matching samples, must be good! */
|
||||
}
|
||||
p_setpri(bwPid,E_MIN_PRIORITY);
|
||||
p_setpri(spyPid,E_PRIORITY_WSERV-1);
|
||||
}
|
||||
|
||||
#ifdef JPIC
|
||||
#pragma save,ENTER_CALL
|
||||
#endif
|
||||
LOCAL_C INT xMonitorBandWidth(VOID)
|
||||
{
|
||||
WS_EV event;
|
||||
|
||||
bwCabDisplayCount=bwCabCount=bwCount=bwCabDisplayBase=bwCabBase=LastCount=0;
|
||||
bwCabDisplayTotal=bwCabTotal=bwTotal=0;
|
||||
DisableReads(TRUE);
|
||||
winId=CreateDialog();
|
||||
redrawWin(FALSE);
|
||||
wFlush();
|
||||
InitBW();
|
||||
wGetEvent(&event);
|
||||
FOREVER
|
||||
{
|
||||
p_ioyield();
|
||||
if (event.type!=E_FILE_PENDING)
|
||||
{
|
||||
p_iowait();
|
||||
if (event.type==WM_KEY)
|
||||
{
|
||||
if (event.p.key.keycode==27)
|
||||
break;
|
||||
if (event.p.key.keycode==(W_SPECIAL_KEY|'p'))
|
||||
wClientPosition(0,0);
|
||||
else if (event.p.key.keycode==(W_SPECIAL_KEY|'b'))
|
||||
{
|
||||
p_sound(-5,320);
|
||||
bwCabDisplayTotal=bwCabTotal;
|
||||
bwCabDisplayCount=bwCabCount;
|
||||
bwCabDisplayBase=bwCabBase;
|
||||
bwCabTotal=0;
|
||||
bwCabCount=0;
|
||||
bwCabBase=bwCount;
|
||||
redrawWin(TRUE);
|
||||
}
|
||||
else if (event.p.key.keycode=='d')
|
||||
Debug=!Debug;
|
||||
}
|
||||
else switch (event.type)
|
||||
{
|
||||
case WM_REDRAW:
|
||||
if (event.handle!=1)
|
||||
wInfoMsg("Redraw to unknown window!");
|
||||
else
|
||||
redrawWin(FALSE);
|
||||
break;
|
||||
case WM_FOREGROUND:
|
||||
case WM_BACKGROUND:
|
||||
p_setpri(spyPid,E_PRIORITY_WSERV-1);
|
||||
break;
|
||||
}
|
||||
wGetEvent(&event);
|
||||
}
|
||||
else
|
||||
{
|
||||
GetCount(&LastCount);
|
||||
if (Debug)
|
||||
DebugInfo();
|
||||
bwTotal+=LastCount;
|
||||
if (bwCount++==9999)
|
||||
bwCount=1;
|
||||
bwCabTotal+=LastCount;
|
||||
bwCabCount++;
|
||||
redrawWin(TRUE);
|
||||
wFlush();
|
||||
}
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
#ifdef JPIC
|
||||
#pragma restore
|
||||
#endif
|
||||
|
||||
GLDEF_C VOID MonitorBandWidth(VOID)
|
||||
{
|
||||
INT err;
|
||||
TEXT *name;
|
||||
|
||||
name=DatProcessNamePtr;
|
||||
bwPid=spyPid=0;
|
||||
DatProcessNamePtr=0;
|
||||
if (wCaptureKey(W_SPECIAL_KEY|'b',W_PSION_MODIFIER|W_CTRL_MODIFIER,W_PSION_MODIFIER|W_CTRL_MODIFIER)<0)
|
||||
wInfoMsg("'b' key capture failed");
|
||||
wDisableLeaves(FALSE);
|
||||
err=p_enter1(xMonitorBandWidth);
|
||||
wDisableLeaves(TRUE);
|
||||
p_close(TimCB);
|
||||
wCancelCaptureKey(W_SPECIAL_KEY|'b',W_PSION_MODIFIER|W_CTRL_MODIFIER,W_PSION_MODIFIER|W_CTRL_MODIFIER);
|
||||
if (bwPid>0)
|
||||
p_pkill(bwPid,0);
|
||||
wCloseWindowTree(winId);
|
||||
DisableReads(FALSE);
|
||||
if (spyPid>0)
|
||||
p_setpri(spyPid,oldPri);
|
||||
if (err<0)
|
||||
p_notifyerr(err,"Band width monitor failed",NULL,NULL,NULL);
|
||||
DatProcessNamePtr=name;
|
||||
wDisableLeaves(FALSE);
|
||||
}
|
||||
Reference in New Issue
Block a user