Esempio n. 1
0
int drop(PIECE &currentPiece){

	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;
	}
Esempio n. 2
0
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);
}