Example #1
0
void
diag (char *fmt, ...)
{
    va_list args;
    char    line[1024];
    va_start (args, fmt);

    vsprintf (line, fmt, args);
    va_end (args);
    WinPaintChars (line, strlen (line), 0, 0);
    DbgMessage (line);
    SysTaskDelay (sysTicksPerSecond/4);
}
Example #2
0
void CScoringForm::OnDraw() {

	HostTraceOutputTL(sysErrorClass, "OnDraw");

	Boolean won_bid = false;
	Int16 high_p = -1, low_p = -1, jack_p = -1, game_p = -1;
	Card::face_t high_c, low_c;

	Int16 points[3];
	Int16 old_points[3];
	
	points[0] = gManager->scores[0];
	points[1] = gManager->scores[1];
	points[2] = gManager->scores[2];

	old_points[0] = gManager->scores[0];
	old_points[1] = gManager->scores[1];
	old_points[2] = gManager->scores[2];



	Boolean smudge = false;

	won_bid = gManager->trk->CalculateGamePoints(&high_p, &low_p, &jack_p, &game_p, 
									&high_c, &low_c, &smudge );


	if ( gManager->CutThroat() == false ) {
	
		if ( smudge ) {
			switch ( (*gManager->tbl->winning_bidder)->playerIndex ) {
				case 0:
				case 2:
					points[0]++;
					break;
				case 1:
				case 3:
					points[1]++;
					break;
			}
		}
	
		switch( high_p ) {
			case 0:
			case 2:
				points[0]++;
				break;
			case 1:
			case 3:
				points[1]++;
				break;
		}
		
		switch( low_p ) {
			case 0:
			case 2:
				points[0]++;
				break;
			case 1:
			case 3:
				points[1]++;
				break;
		}
		
		switch( game_p ) {
			case 0:
			case 2:
				points[0]++;
				break;
			case 1:
			case 3:
				points[1]++;
				break;
		}
		
		switch( jack_p ) {
			case 0:
			case 2:
				points[0]++;
				break;
			case 1:
			case 3:
				points[1]++;
				break;
		}
	}
	else {
	
		points[high_p]++;
		points[low_p]++;
		
		if ( game_p != -1 ) {
			points[game_p]++;
		}
		
		if ( jack_p != -1 ) {
			points[jack_p]++;
		}
		

	}


	if ( high_p != -1 ) {
		high_field.Replace( (const char *)gManager->getPlayer(high_p)->getName() );
	}

	if ( low_p != -1 ) {
		low_field.Replace( (const char *)gManager->getPlayer(low_p)->getName() );
	}

	if ( jack_p != -1 ) {
		jack_field.Replace( (const char *)gManager->getPlayer(jack_p)->getName() );
	}
	else {
		jack_field.Replace("none");
	}


	Card foo(gManager->trk->getTrump(), high_c);
	Card foo2(gManager->trk->getTrump(), low_c);

	FormPtr frmP = FrmGetActiveForm();

	RectangleType  bounds;
	UInt16 gadgetIndex = FrmGetObjectIndex(frmP, HighCardGadget );
	FrmGetObjectBounds(frmP, gadgetIndex, &bounds);
	foo.Draw(bounds.topLeft.x, bounds.topLeft.y, CPlayerHandGadget::card_width, CPlayerHandGadget::card_height);

	gadgetIndex = FrmGetObjectIndex(frmP, LowCardGadget );
	FrmGetObjectBounds(frmP, gadgetIndex, &bounds);
	foo2.Draw(bounds.topLeft.x, bounds.topLeft.y, CPlayerHandGadget::card_width, CPlayerHandGadget::card_height);


	char gamestr[80];

	if ( gManager->CutThroat() == false ) {
		if ( game_p == 1 ) {
			StrPrintF(gamestr, "E/W team wins, %d - %d", 
				gManager->GetTeamPoints('b'), gManager->GetTeamPoints('a') );
		}
		else if ( game_p == 0 ) {
			StrPrintF(gamestr, "N/S team wins, %d - %d",
				gManager->GetTeamPoints('a'), gManager->GetTeamPoints('b') );
		}
		else {
			StrPrintF(gamestr, "teams tied on points at %d",
				gManager->GetTeamPoints('a') );
		}
	}
	else {
		if ( game_p == 2 ) {
			StrPrintF(gamestr, "%s wins, %d - %d - %d",
				(const char *)gManager->players[2]->getName(),
				gManager->GetTeamPoints('c'), 
				gManager->GetTeamPoints('a'),
				gManager->GetTeamPoints('b') );
		}
		else if ( game_p == 1 ) {
			StrPrintF(gamestr, "%s wins, %d - %d - %d",
				(const char *)gManager->players[1]->getName(),
				gManager->GetTeamPoints('b'), 
				gManager->GetTeamPoints('a'),
				gManager->GetTeamPoints('c') );
		}
		else if ( game_p == 0 ) {
			StrPrintF(gamestr, "%s wins, %d - %d - %d",
				(const char *)gManager->players[0]->getName(),
				gManager->GetTeamPoints('a'), 
				gManager->GetTeamPoints('b'),
				gManager->GetTeamPoints('c') );
		}
		else {
			StrPrintF(gamestr, "tied on points at %d",
				gManager->GetTeamPoints('a') );

		}

	}

	game_field.Replace( gamestr );


	char bid_results_str[255];

	char bidval[10];
	if ( gManager->tbl->bid != 5 ) {
		StrPrintF(bidval, "%d", gManager->tbl->bid);
	}
	else {
		StrCopy(bidval, "smudge");
	}

	Int16 score_diff;
	Int16 bidder_score = 0;

	char other_results[80];
	other_results[0] = 0;


	if ( gManager->CutThroat() == false ) {

		if ( (*gManager->tbl->winning_bidder)->playerIndex == 1 || 
			(*gManager->tbl->winning_bidder)->playerIndex == 3 ) {
			score_diff = points[0] - old_points[0];
			bidder_score = points[1] - old_points[1];
		}
		else {
			score_diff = points[1] - old_points[1];
			bidder_score = points[0] - old_points[0];
		}

	}
	else {

		bidder_score = points[(*gManager->tbl->winning_bidder)->playerIndex] - 
					old_points[(*gManager->tbl->winning_bidder)->playerIndex];
	}

	if ( won_bid ) {

		StrPrintF(bid_results_str, 
			"%s bid %s and won %d\n", 
			(const char *)(*gManager->tbl->winning_bidder)->getName(), 
			bidval, bidder_score );
	}
	else {
		StrPrintF(bid_results_str, 
			"%s bid %s and lost\n", 
			(const char *)(*gManager->tbl->winning_bidder)->getName(), bidval );

		
		if ( gManager->CutThroat() == false ) {

			switch ( (*gManager->tbl->winning_bidder)->playerIndex ) {
				case 0:
				case 2:
//					points[0] += (-1 * gManager->tbl->bid);
					points[0] = old_points[0] + (-1 * gManager->tbl->bid);
					break;
				case 1:
				case 3:
//					points[1] += (-1 * gManager->tbl->bid);
					points[1] = old_points[1] + (-1 * gManager->tbl->bid);
					break;
			}
		}
		else {
//			points[(*gManager->tbl->winning_bidder)->playerIndex] = -1 * gManager->tbl->bid;
			points[(*gManager->tbl->winning_bidder)->playerIndex] = 
				old_points[(*gManager->tbl->winning_bidder)->playerIndex] +
					(-1 * gManager->tbl->bid);
		}
	}


	if ( gManager->CutThroat() == false ) {

		char other_team[4];

		if ( (*gManager->tbl->winning_bidder)->playerIndex == 1 || 
				(*gManager->tbl->winning_bidder)->playerIndex == 3 ) {
			StrCopy(other_team, "N/S");
		}
		else {
			StrCopy(other_team, "E/W");
		}

		if ( score_diff == 0 ) {
			StrPrintF(other_results, "%s team scored no points", other_team);
		} else if ( score_diff == 1 ) {
			StrPrintF(other_results, "%s team scored 1 point", other_team);
		}
		else {
			StrPrintF(other_results, "%s team scored %d points", other_team, score_diff);	
		}
		
		StrCat(bid_results_str, other_results);

	}
	else {


		bidder_score = points[(*gManager->tbl->winning_bidder)->playerIndex] - 
				old_points[(*gManager->tbl->winning_bidder)->playerIndex];

		if ((*gManager->tbl->winning_bidder)->playerIndex != 0 ) {
			score_diff = points[0] - old_points[0];

			if ( score_diff == 0 ) {
				StrPrintF(other_results, "%s scored no points\n", (const char *)gManager->players[0]->getName() );
			} else if ( score_diff == 1 ) {
				StrPrintF(other_results, "%s scored 1 point\n", (const char *)gManager->players[0]->getName() );
			}
			else {
				StrPrintF(other_results, "%s scored %d points\n", (const char *)gManager->players[0]->getName(), score_diff );
			}

			StrCat(bid_results_str, other_results);
		}


		if ((*gManager->tbl->winning_bidder)->playerIndex != 1 ) {
			score_diff = points[1] - old_points[1];

			char tmpstr[40];

			if ( score_diff == 0 ) {
				StrPrintF(tmpstr, "%s scored no points\n", (const char *)gManager->players[1]->getName() );
			} else if ( score_diff == 1 ) {
				StrPrintF(tmpstr, "%s scored 1 point\n", (const char *)gManager->players[1]->getName() );
			}
			else {
				StrPrintF(tmpstr, "%s scored %d points\n", (const char *)gManager->players[1]->getName(), score_diff );
			}

			StrCat(bid_results_str, tmpstr);

		}
		


		if ((*gManager->tbl->winning_bidder)->playerIndex != 2 ) {
			score_diff = points[2] - old_points[2];

			char tmpstr[60];

			if ( score_diff == 0 ) {
				StrPrintF(tmpstr, "%s scored no points", (const char *)gManager->players[2]->getName() );
			} else if ( score_diff == 1 ) {
				StrPrintF(tmpstr, "%s scored 1 point", (const char *)gManager->players[2]->getName() );
			}
			else {
				StrPrintF(tmpstr, "%s scored %d points", (const char *)gManager->players[2]->getName(), score_diff );
			}

			StrCat(bid_results_str, tmpstr);
		}

	}

	bid_results.Replace( bid_results_str );


	RectangleType  score_bounds;
	gadgetIndex = FrmGetObjectIndex(frmP, ScoreDisplayGadget );
	FrmGetObjectBounds(frmP, gadgetIndex, &score_bounds);

	Int16 y = score_bounds.topLeft.y;

	if ( gManager->CutThroat() ) {
		CString scores[3];
		CString tmp;

		for ( int i = 0; i < 3; i++ ) {
//			tmp.Format("%d", gManager->scores[i] + points[i] - old_points[i]);
			tmp.Format("%d", points[i]);
			scores[i] = gManager->players[i]->getName() + ": " + tmp + " points";

			WinPaintChars(scores[i], StrLen(scores[i]), score_bounds.topLeft.x + 2, y);
			y += FntLineHeight() + 2;
		}
	
	}
	else {

		CString ew_score_str;
		CString ns_score_str;

//		ew_score_str.Format("E/W: %d points", gManager->scores[1] + points[1] - old_points[1]);
//		ns_score_str.Format("N/S: %d points", gManager->scores[0] + points[0] - old_points[0]);

		ns_score_str.Format("N/S: %d points", points[0]);
		ew_score_str.Format("E/W: %d points", points[1]);

		WinPaintChars(ns_score_str, StrLen(ns_score_str), 
			score_bounds.topLeft.x + 2, y );

		y += FntLineHeight() + 2;

		WinPaintChars(ew_score_str, StrLen(ew_score_str), 
			score_bounds.topLeft.x + 2, y);


	}

	HostTraceOutputTL(sysErrorClass, "OnDraw done");

}
Example #3
0
static Boolean MainFormHandleEvent (EventPtr e)
{
    Boolean handled = false;
    FormPtr frm;
    static UInt32 start_sec=0;
    static UInt32 start_tik;
    static UInt32 end_sec;
    static UInt32 end_tik;
    //static int run = 0;
    
    switch (e->eType) {
    case frmOpenEvent:
	frm = FrmGetActiveForm();
	FrmDrawForm(frm);

	// resume interrupted count
	// note now stopWatchPrefs.tik_timestamp != stopWatchPrefs.timestamp
        // now this does work okay when switching away from app BUT
        // not when palm is turned off & on but stays in app
        // I think possibly GetTicks gets ticks from start of app
        // when palm off the ticks do not increment
	if (stopWatchPrefs.timestamp != 0) {
	    stopWatchPrefs.tik_timestamp = TimGetSeconds();
	    start_tik = TimGetTicks();
	    RunCount(start_tik);
	}

	handled = true;
	break;

    case menuEvent:
	MenuEraseStatus(NULL);

	switch(e->data.menu.itemID) {
	    // TODO add to TestTemp code
	    //case itemBar:
	    case itemRun:
		if (start_sec == 0) {
		    stopWatchPrefs.tik_timestamp =
			stopWatchPrefs.timestamp = 
			start_sec = TimGetSeconds();
		    start_tik = TimGetTicks();
		}
		RunCount(start_tik);
		break;
	    case itemHold:
		// break the run loop
		run = 0;
		break;
	    case itemStop:
		// break the run loop
		run = 0;
		end_sec = TimGetSeconds();
 		end_tik = TimGetTicks();
		break;
	    case itemClear:
		// break the run loop
		run = 0;
		start_sec = 0;
		stopWatchPrefs.timestamp = 0;
		stopWatchPrefs.tik_timestamp = 0;
		end_tik = 0;
		drawCount(0);
		break;

	    case itemPrefs:
		FrmPopupForm(PrefForm);
		break;

	    case itemTest1:

		WinDrawLine(20,20,50,50);
//void WinDrawChar (WChar theChar, Coord x, Coord y)
///void WinDrawChars (const Char *chars, Int16 len, Coord x, Coord y)
//void WinPaintChar (WChar theChar, Coord x, Coord y)
//void WinPaintChars (const Char *chars, Int16 len, Coord x, Coord y)
///opt/palmdev/sdk-5/include/Core/System/Window.h
// Font.h
		WinDrawChar('X',20,50);
		FntSetFont(symbol11Font);
		WinDrawChar('Y',40,50);
		FntSetFont(largeFont);
		WinDrawChar('Z',60,50);
		WinDrawChars("large Font",10,80,50);
		FntSetFont(largeBoldFont);
		WinDrawChars("large Bold",10,110,50);

		{
		    char buf[100];
		    int l=0;
		    UInt32 t = SysTicksPerSecond();
		    l+=StrPrintF(buf+l, "SysTicksPerSec is %lu", t);
		    FntSetFont(largeBoldFont);
		    WinPaintChars(buf,l,1,20);
		}

		if (0){
		    digiFontType ft;
		    ft.h = 20;
		    ft.w = 16;
		    ft.th = 4; ft.tw = 7;
		    drawHSeg(11,9,ft,WinDrawLineF);
		    drawVSeg(10,10,ft,WinDrawLineF);
		    drawHSeg(11,36,ft,WinDrawLineF);
		    drawVSeg(39,10,ft,WinDrawLineF);
		}

		if (0){
		    digiFontType ft;
		    ft.h = 20;
		    ft.w = 12;
		    ft.th = 4; ft.tw = 7;
		    drawHSeg(11,59,ft,WinDrawLineF);
		    drawVSeg(10,60,ft,WinDrawLineF);
		    drawVSeg(38,60,ft,WinDrawLineF);
		    drawHSeg(11,79,ft,WinDrawLineF);
		    drawVSeg(10,80,ft,WinDrawLineF);
		    drawVSeg(38,80,ft,WinDrawLineF);
		    drawHSeg(11,99,ft,WinDrawLineF);
		}

		bigDigit(5,20,'2',WinDrawLineF);
		bigDigit(40,20,'5',WinDrawLineF);
		bigDigit(5,70,'7',WinDrawLineF);
		break;

	    case itemTest2:

		bigDigit(5,20,'8',WinEraseLineF);
		bigDigit(40,20,'8',WinEraseLineF);
		bigDigit(5,70,'8',WinEraseLineF);

		WinDrawChars("Hello",5,20,80);
		WinPaintChars("Paint",5,20,110);

		//Err err; err = TimInit();
		{
		    char buf[100];
		    int l=0;
		    UInt32 s,t;
		    UInt32 hour,min,sec;
		    UInt32 day;
		    // seconds since 1/1/1904
		    //void TimSetSeconds(UInt32 seconds) 	
		    // ticks since power on
		    t = TimGetTicks();
		    s = TimGetSeconds();
		    
		    l+=StrPrintF(buf+l, "Secs %lu", s);
		    FntSetFont(largeBoldFont);
		    WinPaintChars(buf,l,1,20);

		    l=0;
		    l+=StrPrintF(buf+l, "Ticks %lu", t);
		    FntSetFont(largeBoldFont);
		    WinPaintChars(buf,l,1,40);

		    day = s / (UInt32)(24 * 60 * 60);
		    s = s - day * (24 * 60 * 60);
		    hour = s / (60 * 60);
		    s = s - hour * (60 * 60);
		    min = s / 60;
		    sec = s - min * 60;
		    l=0;
		    l+=StrPrintF(buf+l, "%07d:%02d:%02d:%02d", day, hour,min,sec);
		    FntSetFont(largeBoldFont);
		    WinPaintChars(buf,l,1,60);

		}
		break;

		// call this periodically to hold off auto off  
		// Err EvtResetAutoOffTimer(void)

// SystemMgr.h
//Err SysTimerCreate(UInt32 *timerIDP, UInt32 *tagP, 
//            SysTimerProcPtr timerProc, UInt32 periodicDelay, UInt32	param)
//Err		SysTimerDelete(UInt32 timerID)
//Err		SysTimerWrite(UInt32 timerID, UInt32 value)
//Err		SysTimerRead(UInt32 timerID, UInt32 *valueP)

//      SysTaskDelay((100 * SysTicksPerSecond())/1000);

	    case itemOptHelp:
		FrmHelp(hlpHelp);
		break;
		//case itemOptDbgDump:
		//debugDump(e->eType);
		//break;
	    case itemOptCopy:
		FrmHelp(hlpCopy);
		break;
	    case itemOptAbout:
		FrmCustomAlert(alertInfo, 
			       "stopWatch v" VERSION " not even Alpha. "
			       "Built " __DATE__ ", " __TIME__ ". "
			       "James Coleman http://www.dspsrv.com/~jamesc "
			       "copyleft me.", "", "");
		break;

	}

	//DEBUGBOX("menuEvent","");

    	handled = true;
	break;

    case ctlSelectEvent:
	switch(e->data.ctlSelect.controlID) {

	    case btnRun:
		if (start_sec == 0) {
		    stopWatchPrefs.tik_timestamp =
			stopWatchPrefs.timestamp = 
			start_sec = TimGetSeconds();
		    start_tik = TimGetTicks();
		}
		RunCount(start_tik);
		break;
	    case btnHold:
		// break the run loop
		run = 0;
		break;
	    case btnStop:
		// break the run loop
		run = 0;
		end_sec = TimGetSeconds();
 		end_tik = TimGetTicks();
		break;
	    case btnClear:
		// break the run loop
		run = 0;
		stopWatchPrefs.timestamp = start_sec = 0;
		stopWatchPrefs.tik_timestamp = 0;
		end_tik = 0;
		drawCount(0);
		break;

	}
	break;

    //case ctlRepeatEvent:
    //break;

    case penDownEvent:
    case penMoveEvent:
      doPenAction( e->eType, e->screenX, e->screenY, 0, 0); 
      //FrmCustomAlert(alertInfo, "pen down", "ARGSTR1", "ARGSTR2");
      break;

    case penUpEvent:
      doPenAction( penUpEvent, 
      	   e->data.penUp.start.x, e->data.penUp.start.y, 
      	   e->data.penUp.end.x, e->data.penUp.end.y);
      break;

    case keyDownEvent:

      {
	char buf[1000];
	int l=0;
	l+=StrPrintF(buf+l, "Char: %c %02x\n",e->data.keyDown.chr,e->data.keyDown.chr);
	buf[l]=0;
	DEBUGBOX("keyDownEvent",buf);
      }

      switch(e->data.keyDown.chr) {
      case pageUpChr:
      case pageDownChr:
	handled = true;
	break;
      case prevFieldChr:
      case nextFieldChr:
      case '\n':
	handled = true;
	break;
      default:
	if (!TxtCharIsCntrl(e->data.keyDown.chr)) {
	  handled = true;                 /* Swallow event */
	}
	break;
      }
      break;

    default:
        break;
    }

    return handled;
}
Example #4
0
Boolean CBiddingForm::OnNilEvent(EventPtr pEvent, Boolean& bHandled) {

	if ( gManager->Status() == GetHandBids ) {

		HighlightActiveBidder();

		FormPtr frmP = FrmGetActiveForm();

		Int16 player_index = (*gManager->tbl->current_bidder)->playerIndex;


		//
		// if this is a human player, we need to render the screen widgets for their bid
		//
		if ( player_index == gManager->humanIndex && player_has_bid == false ) {

			player_hand.Render(true);

			Int16 current_bid = 0;

			if ( (*gManager->tbl->dealer)->playerIndex != gManager->humanIndex || ! gManager->dealer_take_bid ) {
				current_bid = gManager->tbl->high_bid;
			}
			else {
				current_bid = gManager->tbl->high_bid - 1;
			}
			
			if ( (*gManager->tbl->dealer)->playerIndex == gManager->humanIndex && gManager->tbl->high_bid < 2 ) {
				CtlSetEnabled((ControlType *)FrmGetObjectPtr( frmP, FrmGetObjectIndex( frmP, PlayerBid4PushButton )), false);	
				CtlSetLabel ((ControlType *)FrmGetObjectPtr( frmP, FrmGetObjectIndex( frmP, PlayerBid4PushButton )), "-4-");
				CtlSetEnabled((ControlType *)FrmGetObjectPtr( frmP, FrmGetObjectIndex( frmP, PlayerBid3PushButton )), false);
				CtlSetLabel ((ControlType *)FrmGetObjectPtr( frmP, FrmGetObjectIndex( frmP, PlayerBid3PushButton )), "-3-");
				CtlSetEnabled((ControlType *)FrmGetObjectPtr( frmP, FrmGetObjectIndex( frmP, PlayerBidPassPushButton )), false);
				CtlSetLabel ((ControlType *)FrmGetObjectPtr( frmP, FrmGetObjectIndex( frmP, PlayerBidPassPushButton )), "-Pass-");
			}
			else {
				switch (current_bid) {
					case 5:
						CtlSetEnabled((ControlType *)FrmGetObjectPtr( frmP, FrmGetObjectIndex( frmP, PlayerBidSmudgePushButton )), false);	
						CtlSetLabel ((ControlType *)FrmGetObjectPtr( frmP, FrmGetObjectIndex( frmP, PlayerBidSmudgePushButton )), "-S-");
					case 4:
						CtlSetEnabled((ControlType *)FrmGetObjectPtr( frmP, FrmGetObjectIndex( frmP, PlayerBid4PushButton )), false);	
						CtlSetLabel ((ControlType *)FrmGetObjectPtr( frmP, FrmGetObjectIndex( frmP, PlayerBid4PushButton )), "-4-");
					case 3:
						CtlSetEnabled((ControlType *)FrmGetObjectPtr( frmP, FrmGetObjectIndex( frmP, PlayerBid3PushButton )), false);
						CtlSetLabel ((ControlType *)FrmGetObjectPtr( frmP, FrmGetObjectIndex( frmP, PlayerBid3PushButton )), "-3-");
					case 2:
						CtlSetEnabled((ControlType *)FrmGetObjectPtr( frmP, FrmGetObjectIndex( frmP, PlayerBid2PushButton )), false);
						CtlSetLabel ((ControlType *)FrmGetObjectPtr( frmP, FrmGetObjectIndex( frmP, PlayerBid2PushButton )), "-2-");
				}
			}

		} // if if ( player_index == 3 && player_has_bid == false )


		//
		// handle processing actual bids here - get one automatically if this player isn't
		// a human, or if the human has already bid
		//
		if ( player_index != gManager->humanIndex || player_has_bid == true ) {

			Boolean player_did_bid = gManager->GetNextBid(gManager->trk, false );
			Int16 tmp_bid = (*gManager->tbl->current_bidder)->Bid();

			if ( player_did_bid && 
					gManager->tbl->current_bidder == gManager->tbl->winning_bidder &&
					(tmp_bid >= 2) ) {

				char x[10];
				StrPrintF(x, "bids %d", tmp_bid );
				bidstr = x;
			}
			else {
				bidstr = "passes";
			}
				
			bids[(*gManager->tbl->current_bidder)->playerIndex].Replace(bidstr);


			//
			// if we just got the dealer's bid, then we are all done
			//
			if ( gManager->tbl->current_bidder == gManager->tbl->dealer ) {

				//
				// at this point we need to set trump...
				//	
				gManager->Status(SetHandTrump);


				if ( (*gManager->tbl->winning_bidder)->playerIndex == gManager->humanIndex ) {
					CPlayerTrumpForm frmPlayerTrump;
					frmPlayerTrump.DoModal();
				}

				FrmDrawForm(frmP);

				//
				// ... and display the final results
				//

				Card::suit_t foo = (*gManager->tbl->winning_bidder)->Trump();
				gManager->tbl->trump = foo;
				gManager->trk->no_trump_first_trick = (*gManager->tbl->winning_bidder)->NoTrumpFirstTrickP();

				MemHandle hRsc;
				BitmapType* bitmapP;

				switch ( gManager->tbl->trump ) {

					case Card::heart:
						hRsc = DmGetResource(bitmapRsc, HeartBitmapFamily );
						break;
					case Card::diamond:
						hRsc = DmGetResource(bitmapRsc, DiamondBitmapFamily );
						break;
					case Card::club:
						hRsc = DmGetResource(bitmapRsc, ClubBitmapFamily );
						break;
					case Card::spade:
						hRsc = DmGetResource(bitmapRsc, SpadeBitmapFamily );
						break;
				}

				if ( gManager->trk->no_trump_first_trick ) {
					FrmCustomAlert(NoTrumpFirstTrickAlert, (*gManager->tbl->winning_bidder)->name, "", "");
				}


				RectangleType bounds;

				UInt16 gadgetIndex = FrmGetObjectIndex(frmP, BiddingTrumpGadget);
				FrmGetObjectBounds(frmP, gadgetIndex, &bounds);
				WinPaintChars("Trump Is: ", StrLen("Trump Is: "), bounds.topLeft.x, bounds.topLeft.y );

				ErrFatalDisplayIf(!hRsc, "Could not get bitmap family resource");
				bitmapP = (BitmapType*) MemHandleLock(hRsc);
				WinDrawBitmap (bitmapP, bounds.topLeft.x + 40, bounds.topLeft.y);
				MemHandleUnlock(hRsc);
				DmReleaseResource(hRsc);

				UInt32 hsStatusVersion;
				
				if (FtrGet (hsFtrCreator, hsFtrIDNavigationSupported, &hsStatusVersion) == 0) {
					FrmGlueNavObjectTakeFocus(FrmGetActiveForm(), BiddingOKButton );
				}

			
			} // if ( dealer bid )

			else {

				// move along to the next player
				gManager->tbl->current_bidder = gManager->getNextPlayerIter(gManager->tbl->current_bidder);

				EventType event;
				event.eType = nilEvent;
				EvtAddEventToQueue (&event);

				// pause here
//				SysTaskDelay(SysTicksPerSecond());
				gManager->ShortDelay();
			
			}


		} // if ( player_index != 3 || player_has_bid == true )


	} // if GetHandBids

	bHandled = false;
	return true;
}
Example #5
0
// TODO: use timestamp stored in porefs so if palm turned off
//   or app switch, stopwatch should continue running
void drawCount(UInt32 dtik) {
    char buf[100];
    int l=0;
    unsigned long int s,hour,min,sec,hs;
    static unsigned long int lastsec=666;
    static unsigned long int lastmin=666;

    if (stopWatchPrefs.showTicks) {
	l=0;
	l+=StrPrintF(buf+l, "Ticks %lu", dtik);
	FntSetFont(largeBoldFont);
	WinPaintChars(buf,l,1,100);
    }

    //ms = dtik / (SysTicksPerSecond()/1000);
    s = dtik / (SysTicksPerSecond()/100);
    // for resumption of interrupted timer
    hs = s % 100;
    s = s / 100;
    s += stopWatchPrefs.tik_timestamp - stopWatchPrefs.timestamp;
    sec = s % 60;
    s = s / 60;
    min = s % 60;
    s = s / 60;
    hour = s % 60;
    l=0;
    l+=StrPrintF(buf+l, "%02d:%02d:%02d:%02d", (int)hour,(int)min,(int)sec,(int)hs);
    FntSetFont(largeBoldFont);
    WinPaintChars(buf,l,1,120);

    // a minute alarm
    if (sec == 0 && stopWatchPrefs.vol!=0) {
	int i;
	for(i=0;i<min%10;i++){
	    playFreq(sndCmdFrqOn,100+min*4,10,stopWatchPrefs.vol); 
            // freq,maxdur, amp(0 - sndMaxAmp)
	}
    }

    // not wanted every update, every second should do.
    if (sec != lastsec) {
	lastsec = sec;
	switch(stopWatchPrefs.visual) {
	    case btnVisualNum:
		// a big font

		// gfx too big & flickery ugly to flick every sec
		if (min != lastmin) {
		    lastmin=min;
		    bigDigit(5,20,'8',WinEraseLineF);
		    bigDigit(40,20,'8',WinEraseLineF);
		    //bigDigit(5,70,'8',WinEraseLineF);
		    bigDigit(80,20,'8',WinEraseLineF);
		    bigDigit(115,20,'8',WinEraseLineF);

		    l=0;
		    //l+=StrPrintF(buf+l, "%02d:%02d", (int)min,(int)sec);
		    l+=StrPrintF(buf+l, "%02d:%02d", (int)hour, (int)min);

		    bigDigit(5,20,buf[0],WinDrawLineF);
		    bigDigit(40,20,buf[1],WinDrawLineF);
		    //bigDigit(5,70,'7',WinDrawLineF);
		    bigDigit(80,20,buf[3],WinDrawLineF);
		    bigDigit(115,20,buf[4],WinDrawLineF);
		}
		break;

	    case btnVisualHour:
		break;

	    case btnVisualBar:
		eraseRectangleSafe(0, 20, 160, 20); // x,y,width,height
		drawRectangleSafe(0, 20, min * 4, 20); // x,y,width,height
		eraseRectangleSafe((min * 4)-1, 41, 160, 1); // x,y,width,height
		drawRectangleSafe((min * 4)-1, 41, 1, 1); // x,y,width,height
		if ((min%5)==0){
		    eraseRectangleSafe((min * 4)-2, 41, 160, 2); // x,y,width,height
		    drawRectangleSafe((min * 4)-2, 41, 2, 2); // x,y,width,height
		}
		break;

	    case btnVisualSticks:

		/* count like this 1 line = 1 minute
		   -----  -----  -----  -----
		   -----  -----  -----  -----
		   -----  -----  -----  -----
		   -----  -----  -----  -----
		   -----  -----  -----  -----
		   
		   -----
		   -----
		   160/4 = 40 => width 32 + 4 each side
		   base weights 1, 5, 20, oh look rns :)
		   3 height with 2 sep + 5 sep big blocks
		*/

		// better visually but is not a bar anymore
		/*drawRectangleSafe(4+36*(((min-1)/5)%4), 
				  20 + 30*((min-1)/20) + 5*((min-1)%5), 
				  32, 3); // x,y,width,height*/
		drawRectangleSafe(4+36*(((min)/5)%4), 
				  20 + 30*((min)/20) + 5*((min)%5), 
				  (32*sec)/59, 3); // x,y,width,height

		break;
	}

    }

    /* for testing
    drawRectangleSafe(4+36*(((sec-1)/5)%4), 
		      20 + 30*((sec-1)/20) + 5*((sec-1)%5), 
		      32, 3); // x,y,width,height
    */
}