/* ** Output and Error handling */ static Bool asFile=FALSE; static Int16 Verbosity=2; static FILE *Stdout; /*command output*/ static FILE *Stderr; /*errors*/ static FILE *Stdwarn; /*warningss*/ static FILE *Stdinfo; /*infos*/ void PrintInit(Bool asfile) { #if DT_OS == 'o' setbuf(stdout,(char *)NULL); #endif /*clear a previous call*/ PrintExit(); /* choose */ if(asfile==TRUE) { if((Stdout=fopen("output.txt",FOPEN_WT))==NULL) ProgError("Can't open output.txt"); if((Stderr=fopen("error.txt",FOPEN_WT))==NULL) { Stderr=stderr; ProgError("Can't open error.txt"); } Stdinfo=stdout; Stdwarn=Stderr; } else { Stdout=stdout; Stderr=stderr; Stdwarn=stderr; Stdinfo=stdout; } asFile=asfile; }
void Bug (const char *errstr, ...) { va_list args; fflush (Stdout); va_start( args, errstr); fprintf(Stderr, "\nBug: "); vfprintf(Stderr, errstr, args); fprintf(Stderr, "\n"); fprintf(Stderr, "Please report that bug.\n"); va_end( args); /* CloseWadFiles();*/ PrintExit(); exit( -10); }
void ProgError (const char *errstr, ...) { va_list args; fflush (Stdout); va_start( args, errstr); fprintf(Stderr, "\nError: "); vfprintf(Stderr, errstr, args); fprintf(Stderr, "\n"); va_end( args); (*Action)(); /* execute error handler*/ PrintExit(); exit( -5); }
void ProgError (const char *code, const char *fmt, ...) { va_list args; fflush (stdout_); fprintf(stderr_, "E %s ", code); lprintf("E %s ", code); va_start(args, fmt); vfprintf(stderr_, fmt, args); va_end(args); va_start(args, fmt); vlprintf(fmt, args); va_end(args); fputc('\n', stderr_); lputc('\n'); (*Action)(); /* execute error handler*/ PrintExit(); exit(2); }
void Bug (const char *code, const char *fmt, ...) { va_list args; fflush(stdout_); fprintf(stdwarn_, "%c %s ", MSGCLASS_BUG, code); lprintf("%c %s ", MSGCLASS_BUG, code); va_start(args, fmt); vfprintf(stderr_, fmt, args); va_end(args); va_start(args, fmt); vlprintf(fmt, args); va_end(args); fputc('\n', stderr_); lputc('\n'); fputs("Please report that bug\n", stderr_); lputs("Please report that bug\n"); /* CloseWadFiles();*/ PrintExit(); exit(3); }
void CGame::ComputerRender(CDrawPort *pdp) { // if playing a demo if (_pNetwork->IsPlayingDemo()) { // never call computer cmp_ppenPlayer = NULL; } // disable netricsa for non-local players if (cmp_ppenPlayer!=NULL && !_pNetwork->IsPlayerLocal(cmp_ppenPlayer)) { cmp_ppenPlayer = NULL; } if (cmp_ppenDHPlayer!=NULL && !_pNetwork->IsPlayerLocal(cmp_ppenDHPlayer)) { cmp_ppenDHPlayer = NULL; } if (cmp_ppenDHPlayer!=NULL && !pdp->IsDualHead()) { cmp_ppenDHPlayer = NULL; } // initially - no player _ppenPlayer=NULL; // if player calls computer if (cmp_ppenPlayer!=NULL) { // use that player _ppenPlayer = cmp_ppenPlayer; // if computer is on in background if (_pGame->gm_csComputerState==CS_ONINBACKGROUND) { // just toggle to on _pGame->gm_csComputerState=CS_ON; // find group with some unread messages FindGroupWithUnread(); // force reinit _cmtCurrentType = (enum CompMsgType)-1; } // if using dualhead to render computer on second display } else if (cmp_ppenDHPlayer!=NULL) { // use that player _ppenPlayer = cmp_ppenDHPlayer; // clear dualhead request - it has to be reinitialized every frame cmp_ppenDHPlayer = NULL; // if viewing statistics if (_cmtWantedType == CMT_STATISTICS) { // fill in fresh player statistics _ppenPlayer->GetStats(_strStatsDetails, CST_DETAIL, _ctTextCharsPerRow); // force updating UpdateType(TRUE); } // if computer is not on or on in background if (_pGame->gm_csComputerState!=CS_ON && _pGame->gm_csComputerState!=CS_ONINBACKGROUND) { // switch on fast ComputerOn(); fComputerFadeValue = 1.0f; _pGame->gm_csComputerState = CS_ONINBACKGROUND; cmp_bInitialStart = FALSE; // end of eventual initial start } // if should update to new message if (cmp_bUpdateInBackground) { cmp_bUpdateInBackground = FALSE; FindGroupWithUnread(); // force reinit _cmtCurrentType = (enum CompMsgType)-1; } } // if no player if (_ppenPlayer==NULL) { // make sure computer is off _pGame->gm_csComputerState=CS_OFF; // do nothing more return; } // if computer is not active if (_pGame->gm_csComputerState==CS_OFF) { // just remember time tvComputerLast = _pTimer->GetHighPrecisionTimer(); // if a player wants computer if (_ppenPlayer!=NULL) { // start turning on _pGame->gm_csComputerState=CS_TURNINGON; ComputerOn(); } else { return; } } // calculate up-down speed to be independent of refresh speed CTimerValue tvNow = _pTimer->GetHighPrecisionTimer(); CTimerValue tvDelta = tvNow - tvComputerLast; tvComputerLast = tvNow; FLOAT fFadeSpeed = (FLOAT)(tvDelta.GetSeconds() / tmComputerFade); // if computer is dropping down if( _pGame->gm_csComputerState==CS_TURNINGON) { // move it down fComputerFadeValue += fFadeSpeed; // if finished moving if( fComputerFadeValue>1.0f) { // stop fComputerFadeValue = 1.0f; _pGame->gm_csComputerState = CS_ON; cmp_bInitialStart = FALSE; // end of eventual initial start } } // if computer is pulling up if( _pGame->gm_csComputerState==CS_TURNINGOFF) { // move it up fComputerFadeValue -= fFadeSpeed; // if finished moving if( fComputerFadeValue<0.0f) { // stop fComputerFadeValue = 0.0f; _pGame->gm_csComputerState = CS_OFF; ComputerOff(); cmp_ppenPlayer = NULL; // exit computer return; } } // safety check -> do not proceed if no player if (_ppenPlayer==NULL) { return; } // lock drawport CDrawPort dpComp(pdp, FALSE); if(!dpComp.Lock()) { // do nothing return; } // if in fullscreen CDisplayMode dmCurrent; _pGfx->GetCurrentDisplayMode(dmCurrent); if (dmCurrent.IsFullScreen() && dmCurrent.IsDualHead()) { // clamp mouse pointer _vpixMouse(1) = Clamp(_vpixMouse(1), 0L, dpComp.GetWidth()); _vpixMouse(2) = Clamp(_vpixMouse(2), 0L, dpComp.GetHeight()); // if in window } else { // use same mouse pointer as windows _vpixMouse = _vpixExternMouse; // if dualhead if (dpComp.dp_MinI>0) { // offset by half screen _vpixMouse(1) -= dpComp.GetWidth(); } // if widescreen if (dpComp.dp_MinJ>0) { // offset by screen top _vpixMouse(2) -= dpComp.dp_MinJ; } } TIME tmOld = _pTimer->CurrentTick(); FLOAT fLerpOld = _pTimer->GetLerpFactor(); FLOAT fSec = tvNow.GetSeconds(); TIME tmTick = floor(fSec/_pTimer->TickQuantum)*_pTimer->TickQuantum; FLOAT fLerp = (fSec-tmTick)/_pTimer->TickQuantum; _pTimer->SetCurrentTick(tmTick); _pTimer->SetLerp(fLerp); LCDPrepare(1.0f);//ClampUp(fComputerFadeValue*10,1.0f)); LCDSetDrawport(&dpComp); // if initial start if (cmp_bInitialStart) { // do not allow game to show through dpComp.Fill(C_BLACK|255); // if normal start } else { // fade over game view dpComp.Fill(LCDFadedColor(C_BLACK|255)); } dpComp.FillZBuffer(1.0f); // update screen geometry UpdateSize(&dpComp); // update scroll positions UpdateType(); UpdateFirstOnScreen(); // check for message change UpdateMessageAppearing(); // mark current message as read MarkCurrentRead(); // get current time and alpha value FLOAT tmNow = (FLOAT)tvNow.GetSeconds(); ULONG ulA = NormFloatToByte(fComputerFadeValue); _colLight = LCDFadedColor(C_WHITE|255); _colMedium = LCDFadedColor(SE_COL_BLUE_LIGHT|255); _colDark = LCDFadedColor(LerpColor(SE_COL_BLUE_DARK, SE_COL_BLUE_LIGHT, 0.5f)|255); _colBoxes = LCDFadedColor(LerpColor(SE_COL_BLUE_DARK, SE_COL_BLUE_LIGHT, 0.5f)|255); // background LCDRenderCloudsForComp(); // dpComp.DrawLine( 0, pixSizeJ-1, pixSizeI, pixSizeJ-1, C_GREEN|ulA); // all done dpComp.Unlock(); // print title CDrawPort dpTitle(&dpComp, _boxTitle); if (dpTitle.Lock()) { LCDSetDrawport(&dpTitle); LCDRenderCompGrid(); LCDRenderClouds2(); LCDScreenBoxOpenLeft(_colBoxes); PrintTitle(&dpTitle); dpTitle.Unlock(); } // print exit button CDrawPort dpExit(&dpComp, _boxExit); if (dpExit.Lock()) { LCDSetDrawport(&dpExit); LCDRenderCompGrid(); LCDRenderClouds2(); LCDScreenBoxOpenRight(_colBoxes); PrintExit(&dpExit); dpExit.Unlock(); } // print buttons for (INDEX i=0; i<CMT_COUNT; i++) { PrintButton(&dpComp, i); } // print list of messages CDrawPort dpMsgList(&dpComp, _boxMsgList); if (dpMsgList.Lock()) { LCDSetDrawport(&dpMsgList); LCDRenderCompGrid(); LCDRenderClouds2(); LCDScreenBox(_colBoxes); PrintMessageList(&dpMsgList); dpMsgList.Unlock(); } // print text of current message CDrawPort dpMsgText(&dpComp, _boxMsgText); if (dpMsgText.Lock()) { LCDSetDrawport(&dpMsgText); LCDRenderCompGrid(); LCDRenderClouds2(); LCDScreenBox(_colBoxes); PrintMessageText(&dpMsgText); dpMsgText.Unlock(); } // draw image of current message CDrawPort dpMsgImage(&dpComp, _boxMsgImage); if (dpMsgImage.Lock()) { LCDSetDrawport(&dpMsgImage); RenderMessageImage(&dpMsgImage); dpMsgImage.Unlock(); } // render mouse pointer on top of everything else if (_pGame->gm_csComputerState != CS_ONINBACKGROUND) { if (dpComp.Lock()) { LCDSetDrawport(&dpComp); LCDDrawPointer(_vpixMouse(1), _vpixMouse(2)); dpComp.Unlock(); } } _pTimer->SetCurrentTick(tmOld); _pTimer->SetLerp(fLerpOld); }