//*****************************************
//******** PC Configurator V1.00 **********
//*** (C) - 2001 B.Bowling/A. Grippo ******
//** All derivatives from this software ***
//**  are required to keep this header ****
//*****************************************

static char *rcsId() { return "$Id$"; }

#include "stdafx.h"
#include "megatune.h"
#include "msDatabase.h"
#include "veconst.h"
#include "Dreqfuel.h"

#ifdef _DEBUG
# define new DEBUG_NEW
# undef THIS_FILE
   static char    THIS_FILE[] = __FILE__;
#endif

extern msDatabase mdb;

//------------------------------------------------------------------------------
// Dreqfuel dialog

Dreqfuel::Dreqfuel(CWnd * pParent /*=NULL*/ )
 : CDialog   (Dreqfuel::IDD, pParent)
{
   //{{AFX_DATA_INIT(Dreqfuel)
   // NOTE: the ClassWizard will add member initialization here
   //}}AFX_DATA_INIT
}

//------------------------------------------------------------------------------

void Dreqfuel::DoDataExchange(CDataExchange * pDX)
{
   CDialog::DoDataExchange(pDX);
   //{{AFX_DATA_MAP(Dreqfuel)
   // NOTE: the ClassWizard will add DDX and DDV calls here
   //}}AFX_DATA_MAP
}

//------------------------------------------------------------------------------

BEGIN_MESSAGE_MAP(Dreqfuel, CDialog)
   //{{AFX_MSG_MAP(Dreqfuel)
      ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

//------------------------------------------------------------------------------
// Dreqfuel message handlers

void Dreqfuel::OnDestroy()
{
   CDialog::OnDestroy();

   mdb.reqFuel = 0.0;
   mdb.rpmk    = 0;

   CButton *
   pCB = static_cast<CButton *>(GetDlgItem(IDC_DISP_UNITS_CID));
   double dispUnits = pCB->GetCheck() ? 1.0 : 16.38706;

   pCB = static_cast<CButton *>(GetDlgItem(IDC_INJ_UNITS_LBH));
   double injUnits = pCB->GetCheck() ? 1.0 : 10.5;

   CString hhh;
   CEdit *ced = static_cast<CEdit *>(GetDlgItem(IDC_CID)); ced->GetWindowText((CString &) hhh);
   LPTSTR pp  = hhh.GetBuffer(10); sscanf(pp, "%lf", &mdb.cid); hhh.ReleaseBuffer();
   mdb.cid = int(mdb.cid / dispUnits);

   if (mdb.cid <= 0 || mdb.cid > 1000) return;

   ced = static_cast<CEdit *>(GetDlgItem(IDC_NCYL)); ced->GetWindowText((CString &) hhh);
   int nCyl;
   pp  = hhh.GetBuffer(10); sscanf(pp, "%d", &nCyl); hhh.ReleaseBuffer();
   if (nCyl <= 0 || nCyl > 12) return;
   mdb.setCylinders(nCyl);

   ced = static_cast<CEdit *>(GetDlgItem(IDC_FLOW)); ced->GetWindowText((CString &) hhh);
   pp  = hhh.GetBuffer(10); sscanf(pp, "%lf", &mdb.injectorFlow); hhh.ReleaseBuffer();
   mdb.injectorFlow = mdb.injectorFlow / injUnits;
   if (mdb.injectorFlow <= 0.0 || mdb.injectorFlow > 100.0) return;

   ced = static_cast<CEdit *>(GetDlgItem(IDC_AFR)); ced->GetWindowText((CString &) hhh);
   pp  = hhh.GetBuffer(10); sscanf(pp, "%lf", &mdb.afr); hhh.ReleaseBuffer();
   if (mdb.afr <= 0.0 || mdb.afr > 25.0) return;

   double dtmp1 = 36.0E6 * double(mdb.cid) * 4.27793e-05;
   double dtmp2 = double(mdb.nCylinders()) * mdb.afr * mdb.injectorFlow;

   mdb.reqFuel = dtmp1 / dtmp2;
   mdb.putConstByte(Dreq_fuel, static_cast<unsigned char>(mdb.reqFuel*10.0));
   mdb.rpmk    = int(12000.0 / double(mdb.nCylinders()));
}

//------------------------------------------------------------------------------

BOOL Dreqfuel::OnInitDialog()
{
   CDialog::OnInitDialog();

   CString        hhh;
   LPTSTR         pp;

   pp = hhh.GetBuffer(10);
   sprintf(pp, "%.0f", mdb.cid);
   hhh.ReleaseBuffer();
   static_cast<CEdit *>(GetDlgItem(IDC_CID))->SetWindowText(hhh);

   pp = hhh.GetBuffer(10);
   sprintf(pp, "%d", mdb.nCylinders);
   hhh.ReleaseBuffer();
   static_cast<CEdit *>(GetDlgItem(IDC_NCYL))->SetWindowText(hhh);

   pp = hhh.GetBuffer(10);
   sprintf(pp, "%.1f", mdb.injectorFlow);
   hhh.ReleaseBuffer();
   static_cast<CEdit *>(GetDlgItem(IDC_FLOW))->SetWindowText(hhh);

   pp = hhh.GetBuffer(10);
   sprintf(pp, "%.1f", mdb.afr);
   hhh.ReleaseBuffer();
   static_cast<CEdit *>(GetDlgItem(IDC_AFR))->SetWindowText(hhh);

   static_cast<CButton *>(GetDlgItem(IDC_DISP_UNITS_CID))->SetCheck(true);
   static_cast<CButton *>(GetDlgItem(IDC_INJ_UNITS_LBH))->SetCheck(true);

   return TRUE;
}

//------------------------------------------------------------------------------

