/*----------------------------------------------------------------------- A couple of utility functions for handling a list of MotReg structures . This is a helper module for the anticollider collision control system. See anticollider.tex for more details. copyright: see file copyright Mark Koennecke, August 2002 -------------------------------------------------------------------------*/ #include #include #include "fortify.h" #include "lld.h" #include "motreglist.h" /*-----------------------------------------------------------------------*/ int MakeMotList(){ return LLDcreate(sizeof(pMotReg)); } /*----------------------------------------------------------------------*/ pMotReg FindMotEntry(int iList, char *name){ int iRet; pMotReg pMot = NULL; iRet = LLDnodePtr2First(iList); while(iRet != 0){ LLDnodeDataTo(iList,&pMot); if(pMot != NULL){ if(RegMotMatch(pMot,name)){ return pMot; } } iRet = LLDnodePtr2Next(iList); } return NULL; } /*-----------------------------------------------------------------------*/ pMotReg FindMotFromDataStructure(int iList, void *pData){ int iRet; pMotReg pMot = NULL; iRet = LLDnodePtr2First(iList); while(iRet != 0){ LLDnodeDataTo(iList,&pMot); if(pMot != NULL){ if(pMot->motorData == pData){ return pMot; } } iRet = LLDnodePtr2Next(iList); } return NULL; } /*----------------------------------------------------------------------*/ int CheckAllMotors(int iList, SConnection *pCon){ int iRet, count = 0; pMotReg pMot = NULL; iRet = LLDnodePtr2First(iList); while(iRet != 0){ LLDnodeDataTo(iList,&pMot); if(pMot != NULL){ CheckRegMot(pMot,pCon); if(pMot->iActive){ count++; } } iRet = LLDnodePtr2Next(iList); } return count; } /*----------------------------------------------------------------------*/ void StopAllMotors(int iList){ int iRet, count = 0; pMotReg pMot = NULL; pIDrivable pDriv; iRet = LLDnodePtr2First(iList); while(iRet != 0){ LLDnodeDataTo(iList,&pMot); if(pMot != NULL){ if(pMot->iActive){ pDriv = (pIDrivable)GetDrivableInterface(pMot->motorData); if(pDriv){ pDriv->Halt(pMot->motorData); } pMot->iActive = 0; } } iRet = LLDnodePtr2Next(iList); } } /*----------------------------------------------------------------------*/ void DeactivateAllMotors(int iList){ int iRet, count = 0; pMotReg pMot = NULL; pIDrivable pDriv; iRet = LLDnodePtr2First(iList); while(iRet != 0){ LLDnodeDataTo(iList,&pMot); if(pMot != NULL){ pMot->iActive = 0; } iRet = LLDnodePtr2Next(iList); } } /*----------------------------------------------------------------------*/ void KillMotList(int iList){ int iRet; pMotReg pMot = NULL; iRet = LLDnodePtr2First(iList); while(iRet != 0){ LLDnodeDataTo(iList,&pMot); if(pMot != NULL){ KillRegMot(pMot); } iRet = LLDnodePtr2Next(iList); } LLDdelete(iList); }