- First working version of the TRICS collision protection module
This commit is contained in:
115
Busy.c
Normal file
115
Busy.c
Normal file
@@ -0,0 +1,115 @@
|
||||
/*------------------------------------------------------------------------
|
||||
A busy flag module for SICS.
|
||||
|
||||
Mark Koennecke, July 2002
|
||||
-------------------------------------------------------------------------*/
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
#include "fortify.h"
|
||||
#include "sics.h"
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
typedef struct BUSY__ {
|
||||
pObjectDescriptor pDes;
|
||||
int iBusy;
|
||||
}Busy;
|
||||
/*---------------------------------------------------------------------*/
|
||||
busyPtr makeBusy(void){
|
||||
busyPtr result = NULL;
|
||||
|
||||
result = (busyPtr)malloc(sizeof(Busy));
|
||||
if(!result){
|
||||
return NULL;
|
||||
}
|
||||
result->pDes = CreateDescriptor("BusyFlag");
|
||||
if(!result->pDes){
|
||||
free(result);
|
||||
return NULL;
|
||||
}
|
||||
result->iBusy = 0;
|
||||
return result;
|
||||
}
|
||||
/*---------------------------------------------------------------------*/
|
||||
void killBusy(void *self){
|
||||
busyPtr busy;
|
||||
if(self != NULL){
|
||||
busy = (busyPtr)self;
|
||||
if(busy->pDes != NULL){
|
||||
DeleteDescriptor(busy->pDes);
|
||||
}
|
||||
free(busy);
|
||||
}
|
||||
}
|
||||
/*---------------------------------------------------------------------*/
|
||||
void incrementBusy(busyPtr self){
|
||||
assert(self != NULL);
|
||||
self->iBusy++;
|
||||
}
|
||||
/*--------------------------------------------------------------------*/
|
||||
void decrementBusy(busyPtr self){
|
||||
assert(self != NULL);
|
||||
self->iBusy--;
|
||||
if(self->iBusy < 0){
|
||||
self->iBusy = 0;
|
||||
}
|
||||
}
|
||||
/*--------------------------------------------------------------------*/
|
||||
void clearBusy(busyPtr self){
|
||||
assert(self != NULL);
|
||||
self->iBusy = 0;
|
||||
}
|
||||
/*--------------------------------------------------------------------*/
|
||||
void setBusy(busyPtr self, int val){
|
||||
assert(self != NULL);
|
||||
self->iBusy = val;
|
||||
}
|
||||
/*--------------------------------------------------------------------*/
|
||||
int isBusy(busyPtr self){
|
||||
assert(self != NULL);
|
||||
return self->iBusy;
|
||||
}
|
||||
/*--------------------------------------------------------------------*/
|
||||
int BusyAction(SConnection *pCon,SicsInterp *pSics, void *pData,
|
||||
int argc, char *argv[]){
|
||||
busyPtr self = NULL;
|
||||
char pBuffer[80];
|
||||
|
||||
self = (busyPtr)pData;
|
||||
assert(self != NULL);
|
||||
|
||||
if(argc > 1){
|
||||
strtolower(argv[1]);
|
||||
if(usUser < SCGetRights(pCon)){
|
||||
SCWrite(pCon,"ERROR: no privilege to manipulate busy flag",eError);
|
||||
return 0;
|
||||
}
|
||||
if(strcmp(argv[1],"incr") == 0){
|
||||
incrementBusy(self);
|
||||
SCSendOK(pCon);
|
||||
return 1;
|
||||
} else if(strcmp(argv[1],"decr") == 0){
|
||||
decrementBusy(self);
|
||||
SCSendOK(pCon);
|
||||
return 1;
|
||||
} else if(strcmp(argv[1],"clear") == 0){
|
||||
clearBusy(self);
|
||||
SCSendOK(pCon);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
sprintf(pBuffer,"Busy = %d", isBusy(self));
|
||||
SCWrite(pCon,pBuffer,eValue);
|
||||
return 1;
|
||||
}
|
||||
/*---------------------------------------------------------------------*/
|
||||
busyPtr findBusy(SicsInterp *pInter){
|
||||
CommandList *pCom = NULL;
|
||||
|
||||
pCom = FindCommand(pInter,"busy");
|
||||
if(pCom != NULL){
|
||||
return (busyPtr)pCom->pData;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user