📄 watch.c
字号:
/*************************************************************/
globle char *GetNthWatchName(
void *theEnv,
int whichItem)
{
int i;
struct watchItem *wPtr;
for (wPtr = WatchData(theEnv)->ListOfWatchItems, i = 1;
wPtr != NULL;
wPtr = wPtr->next, i++)
{ if (i == whichItem) return(wPtr->name); }
return(NULL);
}
/***************************************************************/
/* GetNthWatchValue: Returns the current state associated with */
/* the nth item in the list of watchable items. If the nth */
/* item does not exist, then -1 is returned. */
/***************************************************************/
globle int GetNthWatchValue(
void *theEnv,
int whichItem)
{
int i;
struct watchItem *wPtr;
for (wPtr = WatchData(theEnv)->ListOfWatchItems, i = 1;
wPtr != NULL;
wPtr = wPtr->next, i++)
{ if (i == whichItem) return((int) *(wPtr->flag)); }
return(-1);
}
/**************************************/
/* WatchCommand: H/L access routine */
/* for the watch command. */
/**************************************/
globle void WatchCommand(
void *theEnv)
{
DATA_OBJECT theValue;
char *argument;
int recognized;
struct watchItem *wPtr;
/*========================================*/
/* Determine which item is to be watched. */
/*========================================*/
if (EnvArgTypeCheck(theEnv,"watch",1,SYMBOL,&theValue) == FALSE) return;
argument = DOToString(theValue);
wPtr = ValidWatchItem(theEnv,argument,&recognized);
if (recognized == FALSE)
{
SetEvaluationError(theEnv,TRUE);
ExpectedTypeError1(theEnv,"watch",1,"watchable symbol");
return;
}
/*=================================================*/
/* Check to make sure extra arguments are allowed. */
/*=================================================*/
if (GetNextArgument(GetFirstArgument()) != NULL)
{
if ((wPtr == NULL) ? TRUE : (wPtr->accessFunc == NULL))
{
SetEvaluationError(theEnv,TRUE);
ExpectedCountError(theEnv,"watch",EXACTLY,1);
return;
}
}
/*=====================*/
/* Set the watch item. */
/*=====================*/
EnvSetWatchItem(theEnv,argument,ON,GetNextArgument(GetFirstArgument()));
}
/****************************************/
/* UnwatchCommand: H/L access routine */
/* for the unwatch command. */
/****************************************/
globle void UnwatchCommand(
void *theEnv)
{
DATA_OBJECT theValue;
char *argument;
int recognized;
struct watchItem *wPtr;
/*==========================================*/
/* Determine which item is to be unwatched. */
/*==========================================*/
if (EnvArgTypeCheck(theEnv,"unwatch",1,SYMBOL,&theValue) == FALSE) return;
argument = DOToString(theValue);
wPtr = ValidWatchItem(theEnv,argument,&recognized);
if (recognized == FALSE)
{
SetEvaluationError(theEnv,TRUE);
ExpectedTypeError1(theEnv,"unwatch",1,"watchable symbol");
return;
}
/*=================================================*/
/* Check to make sure extra arguments are allowed. */
/*=================================================*/
if (GetNextArgument(GetFirstArgument()) != NULL)
{
if ((wPtr == NULL) ? TRUE : (wPtr->accessFunc == NULL))
{
SetEvaluationError(theEnv,TRUE);
ExpectedCountError(theEnv,"unwatch",EXACTLY,1);
return;
}
}
/*=====================*/
/* Set the watch item. */
/*=====================*/
EnvSetWatchItem(theEnv,argument,OFF,GetNextArgument(GetFirstArgument()));
}
/************************************************/
/* ListWatchItemsCommand: H/L access routines */
/* for the list-watch-items command. */
/************************************************/
globle void ListWatchItemsCommand(
void *theEnv)
{
struct watchItem *wPtr;
DATA_OBJECT theValue;
int recognized;
/*=======================*/
/* List the watch items. */
/*=======================*/
if (GetFirstArgument() == NULL)
{
for (wPtr = WatchData(theEnv)->ListOfWatchItems; wPtr != NULL; wPtr = wPtr->next)
{
EnvPrintRouter(theEnv,WDISPLAY,wPtr->name);
if (*(wPtr->flag)) EnvPrintRouter(theEnv,WDISPLAY," = on\n");
else EnvPrintRouter(theEnv,WDISPLAY," = off\n");
}
return;
}
/*=======================================*/
/* Determine which item is to be listed. */
/*=======================================*/
if (EnvArgTypeCheck(theEnv,"list-watch-items",1,SYMBOL,&theValue) == FALSE) return;
wPtr = ValidWatchItem(theEnv,DOToString(theValue),&recognized);
if ((recognized == FALSE) || (wPtr == NULL))
{
SetEvaluationError(theEnv,TRUE);
ExpectedTypeError1(theEnv,"list-watch-items",1,"watchable symbol");
return;
}
/*=================================================*/
/* Check to make sure extra arguments are allowed. */
/*=================================================*/
if ((wPtr->printFunc == NULL) &&
(GetNextArgument(GetFirstArgument()) != NULL))
{
SetEvaluationError(theEnv,TRUE);
ExpectedCountError(theEnv,"list-watch-items",EXACTLY,1);
return;
}
/*====================================*/
/* List the status of the watch item. */
/*====================================*/
EnvPrintRouter(theEnv,WDISPLAY,wPtr->name);
if (*(wPtr->flag)) EnvPrintRouter(theEnv,WDISPLAY," = on\n");
else EnvPrintRouter(theEnv,WDISPLAY," = off\n");
/*============================================*/
/* List the status of individual watch items. */
/*============================================*/
if (wPtr->printFunc != NULL)
{
if ((*wPtr->printFunc)(theEnv,WDISPLAY,wPtr->code,
GetNextArgument(GetFirstArgument())) == FALSE)
{ SetEvaluationError(theEnv,TRUE); }
}
}
/*******************************************/
/* GetWatchItemCommand: H/L access routine */
/* for the get-watch-item command. */
/*******************************************/
globle int GetWatchItemCommand(
void *theEnv)
{
DATA_OBJECT theValue;
char *argument;
int recognized;
/*============================================*/
/* Check for the correct number of arguments. */
/*============================================*/
if (EnvArgCountCheck(theEnv,"get-watch-item",EXACTLY,1) == -1)
{ return(FALSE); }
/*========================================*/
/* Determine which item is to be watched. */
/*========================================*/
if (EnvArgTypeCheck(theEnv,"get-watch-item",1,SYMBOL,&theValue) == FALSE)
{ return(FALSE); }
argument = DOToString(theValue);
ValidWatchItem(theEnv,argument,&recognized);
if (recognized == FALSE)
{
SetEvaluationError(theEnv,TRUE);
ExpectedTypeError1(theEnv,"get-watch-item",1,"watchable symbol");
return(FALSE);
}
/*===========================*/
/* Get the watch item value. */
/*===========================*/
if (EnvGetWatchItem(theEnv,argument) == 1)
{ return(TRUE); }
return(FALSE);
}
/*************************************************************/
/* WatchFunctionDefinitions: Initializes the watch commands. */
/*************************************************************/
globle void WatchFunctionDefinitions(
void *theEnv)
{
#if ! RUN_TIME
EnvDefineFunction2(theEnv,"watch", 'v', PTIEF WatchCommand, "WatchCommand", "1**w");
EnvDefineFunction2(theEnv,"unwatch", 'v', PTIEF UnwatchCommand, "UnwatchCommand", "1**w");
EnvDefineFunction2(theEnv,"get-watch-item", 'b', PTIEF GetWatchItemCommand, "GetWatchItemCommand", "11w");
EnvDefineFunction2(theEnv,"list-watch-items", 'v', PTIEF ListWatchItemsCommand,
"ListWatchItemsCommand", "0**w");
#endif
EnvAddRouter(theEnv,WTRACE,1000,RecognizeWatchRouters,CaptureWatchPrints,NULL,NULL,NULL);
EnvDeactivateRouter(theEnv,WTRACE);
}
/**************************************************/
/* RecognizeWatchRouters: Looks for WTRACE prints */
/**************************************************/
#if IBM_TBC
#pragma argsused
#endif
static intBool RecognizeWatchRouters(
void *theEnv,
char *logName)
{
#if MAC_MCW || IBM_MCW || MAC_XCD
#pragma unused(theEnv)
#endif
if (strcmp(logName,WTRACE) == 0) return(TRUE);
return(FALSE);
}
/**************************************************/
/* CaptureWatchPrints: Suppresses WTRACE messages */
/**************************************************/
#if IBM_TBC
#pragma argsused
#endif
static int CaptureWatchPrints(
void *theEnv,
char *logName,
char *str)
{
#if MAC_MCW || IBM_MCW || MAC_XCD
#pragma unused(logName)
#pragma unused(str)
#pragma unused(theEnv)
#endif
return(1);
}
#endif /* DEBUGGING_FUNCTIONS */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -