int drop(PIECE ¤tPiece){ int i; //printf("entered drop\n"); PIECE potentialPiece; for(int i = 0; i < 4; i++){ potentialPiece.index[i].x = currentPiece.index[i].x; potentialPiece.index[i].y = currentPiece.index[i].y; } potentialPiece.shape = currentPiece.shape; potentialPiece.state = currentPiece.state; while(blockTest(potentialPiece)){ for(i = 0; i < 4; i++){ potentialPiece.index[i].y = potentialPiece.index[i].y - 1; if(potentialPiece.index[i].y < 0){ for(int i = 0; i < 4; i++){ currentPiece.index[i].y = potentialPiece.index[i].y + 1; } settle(currentPiece); return 1; } } } for(int i = 0; i < 4; i++){ currentPiece.index[i].y = potentialPiece.index[i].y + 1; } settle(currentPiece); return 1; }
static void workThread(threadInfo *pthreadInfo) { cmdInfo *pcmdInfo; asynUser *pasynUser; while(1) { epicsEventMustWait(pthreadInfo->work); pcmdInfo = pthreadInfo->pcmdInfo; pasynUser = pcmdInfo->pasynUser; if(pcmdInfo->test==quit) break; switch(pcmdInfo->test) { case connect: connectTest(pasynUser);break; case testBlock: blockTest(pasynUser); break; case testCancelRequest: cancelTest(pasynUser); break; default: fprintf(pcmdInfo->file,"%s workThread illegal test %d\n", pthreadInfo->threadName,pcmdInfo->test); } fprintf(pcmdInfo->file,"%s %s all done\n", pthreadInfo->threadName,pcmdInfo->message); epicsEventSignal(pthreadInfo->done); } epicsEventSignal(pthreadInfo->done); }