/*************************************************************************

* File	:	aga10win.h
* Description	:	function prototypes and defines for aga10win.cpp
* Version	:	1.7   2002.11.17
* Author	:	W.B. Peterson
* Revisions	:	
* Copyright (c) 2002 American Gas Association

**************************************************************************/

#ifndef _AGA10WIN_H #define _AGA10WIN_H

#include <windows.h> #include <commdlg.h>

/* control IDs for windows interface	*/

#define IDC_LSTATUS	20
#define IDC_XIC1	21
#define IDC_XIN2	22
#define IDC_XICO2	23
#define IDC_XIC2	24
#define IDC_XIC3	25
#define IDC_XIH2O	26
#define IDC_XIH2S	27
#define IDC_XIH2	28
#define IDC_XICO	29
#define IDC_XIO2	30
#define IDC_XIIC4	31
#define IDC_XINC4	32
#define IDC_XIIC5	33
#define IDC_XINC5	34
#define IDC_XINC6	35
#define IDC_XINC7	36
#define IDC_XINC8	37
#define IDC_XINC9	38
#define IDC_XINC10	39
#define IDC_XIHE	40
#define IDC_XIAR	41
#define IDC_PB	42




#define IDC_TB	43
#define IDC_PF	44
#define IDC_TF	45
#define IDC_MRX	46
#define IDC_ZB	47
#define IDC_ZF	48
#define IDC_FPV	49
#define IDC_DB	50
#define IDC_DF	51
#define IDC_RHOB	52
#define IDC_RHOF	53
#define IDC_RD_IDEAL	54
#define IDC_RD_REAL	55
#define IDC_HO	56
#define IDC_H	57
#define IDC_S	58
#define IDC_CPI	59
#define IDC_CP	60
#define IDC_CV	61
#define IDC_K	62
#define IDC_KAPPA	63
#define IDC_SOS	64
#define IDC_CSTAR	65
#define IDC_PB_U	66
#define IDC_TB_U	67
#define IDC_PF_U	68
#define IDC_TF_U	69
#define IDC_SOS_U	70
#define IDC_RHOB_U	71
#define IDC_RHOF_U	72
#define IDC_ENTHALPY_U	73
#define IDC_ENTROPY_U	74
#define IDC_TOTAL	75
#define IDC_CLEAR	76
#define IDC_NORMALIZE	77
#define KILOPASCAL	78
#define MEGAPASCAL	79
#define PSI	80
#define KELVIN	81
#define CELSIUS	82




#define RANKINE	83
#define FAHRENHEIT	84
#define KGPERCUBICMETRE	85
#define LBMPERCUBICFOOT	86
#define METREPERSECOND	87
#define FOOTPERSECOND	88
#define KJPERKG	89
#define BTUPERLBM	90
#define KJPERKGK	91
#define BTUPERLBMF	92
#define CM_FILEOPEN	93
#define CM_FILESAVE	94
#define CM_FILESAVEAS	95
#define CM_HELPABOUT	96
#define IDR_MENU1	97
#define IDC_STATIC	(-1)
/* buffer sizes */	
#define FIELD40	40
#define FIELD30	30

/* function prototypes */

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; void PressureDlgHelp(HWND) ;

void TemperatureDlgHelp(HWND) ; void DensityDlgHelp(HWND) ; void SOSDlgHelp(HWND) ;

void EnthalpyDlgHelp(HWND) ; void EntropyDlgHelp(HWND) ; void FileInitialize (HWND) ;
BOOL FileOpenDlg (HWND, PSTR, PSTR) ;

BOOL FileSaveDlg (HWND, PSTR, PSTR) ; #endif












/*************************************************************************	
* File		:	aga10win.cpp		
* Description	:	Simple Win32 program demonstrating use of aga10.dll	
*				Supports Windows dialog box and file operations	
* Version		:	1.7	2002.11.17		
* Author		:	W.B. Peterson		
* Revisions		:				
* Copyright (c) 2002 American Gas Association		
**************************************************************************/	
#include "aga10win.h"				
#include "aga10.h"					
/*	create pointer to a data structure for exchanging data with aga10.dll	*/
static AGA10STRUCT *A10 ;			
/*	global variables for strings, filenames, etc	*/	
static char	szAppName[] = "aga10win" ;		
static char	szBuffer[FIELD40] ;		
char szFileName[_MAX_PATH] ;			
char szTitleName[_MAX_FNAME + _MAX_EXT] ;		
/*	declare one application instance */		
HINSTANCE hInst ;					
/*	global variables for units of measure and critical flow coefficient C*	*/
double total = 0.0 ;				
long int lPb_unit ;		/* unit of measure for base pressure */	
long int lPf_unit ;		/* unit of measure for flowing pressure */	
long int lTb_unit ;		/* unit of measure for base temperature */	
long int lTf_unit ;		/* unit of measure for flowing temperature */	
long int lRhob_unit ;		/* unit of measure for density at base conditions */
long int lRhof_unit ;		/* unit of measure for density at flowing conditions */
long int lSOS_unit ;		/* unit of measure for speed of sound */	
long int lEnthalpy_unit ;	/* unit of measure for specific enthalpy */	
long int lEntropy_unit ;		/* unit of measure for specific entropy */	

// prototypes for support functions not prototyped in aga10win.h bool FileRead(HWND, PSTR, AGA10STRUCT *);

bool FileWrite(HWND, PSTR, AGA10STRUCT *) ;





void ReadInputs(HWND, AGA10STRUCT *) ; void WriteInputs(HWND, AGA10STRUCT *) ; void WriteOutputs(HWND, AGA10STRUCT *) ; void SetDefaults(AGA10STRUCT *) ;


/**************************************************************************
*	Function	:	WinMain()
*	Arguments	:	HINSTANCE, HINSTANCE, PSTR, int
*	Returns	:	int
*	Purpose	:	Every Windows application has a WinMain()
*	Revisions	:	
**************************************************************************/

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
HWND	hWnd ;
MSG	msg ;
WNDCLASSEX	wndclass ;

/* set window class properties */

wndclass.cbSize	= sizeof (wndclass) ;
wndclass.style	= CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc	= WndProc ;

wndclass.cbClsExtra	= 0 ;

wndclass.cbWndExtra	= DLGWINDOWEXTRA ;
wndclass.hInstance	= hInstance ;
wndclass.hIcon	= LoadIcon (hInstance, szAppName) ;

wndclass.hCursor	= LoadCursor (NULL, IDC_ARROW) ;

wndclass.hbrBackground = (HBRUSH) (COLOR_BTNFACE+1) ;
wndclass.lpszMenuName	= MAKEINTRESOURCE(IDR_MENU1) ;
wndclass.lpszClassName = szAppName ;
wndclass.hIconSm	= LoadIcon (hInstance, szAppName) ;

/* register the class */ RegisterClassEx (&wndclass) ;

/* create a dialog box */

hWnd = CreateDialog (hInstance, "aga10win", 0, NULL) ;




/* start the application's message pump */ while (GetMessage (&msg, NULL, 0, 0))

{
TranslateMessage(&msg) ;

DispatchMessage(&msg) ;

}
return msg.wParam ;
}


/**************************************************************************
*	Function	:	WndProc()
*	Arguments	:	HWND, UINT, WPARAM, LPARAM
*	Returns	:	LRESULT
*	Purpose	:	One and only window process for this app
*	Revisions	:	
**************************************************************************/

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)

{

int i = 0 ; double temp ;

switch (iMsg)

{

case WM_CREATE :
/* get application instance */
hInst = ((LPCREATESTRUCT) lParam)->hInstance ;

/* initialize file data */ FileInitialize (hwnd) ;

/* initialize calculation library */ AGA10_Init() ;

/* create an object at the pointer we have already defined */ if (NULL == (A10 = new AGA10STRUCT)) return TRUE ;

/* set the defaults for this application */




SetDefaults(A10) ; return FALSE ;

case WM_COMMAND :

/* refresh the input data, triggered by focus change */ if (lParam && HIWORD (wParam) == EN_KILLFOCUS)
{
ReadInputs(hwnd, A10) ;

WriteInputs(hwnd, A10) ; lstrcpy(szBuffer, "Press Calculate") ;

SetDlgItemText (hwnd, IDC_LSTATUS, szBuffer) ; return FALSE ;
}

/*	decode WM_COMMAND messages	*/

switch (LOWORD (wParam))

{
case IDOK :

/* refresh input fields */ ReadInputs(hwnd, A10) ; WriteInputs(hwnd, A10) ;

//ensure the compositions adds up before proceeding

//find the current sum of fractions
temp = 0.0 ;

for (i = 0 ; i < NUMBEROFCOMPONENTS ; i++) temp += A10->adMixture[i] ; if (temp < 0.9999 || temp > 1.0001)
{
MessageBox (hwnd,"Error. Composition must total 100%, +/- 0.01%", szAppName, MB_OK | MB_ICONERROR) ;

lstrcpy(szBuffer, "Error. Composition <> 100%.") ; SetDlgItemText (hwnd, IDC_LSTATUS, szBuffer) ; return FALSE ;

}

// ensure the pressure is acceptable before proceeding if (A10->dPf < P_MIN || A10->dPf > P_MAX)

{
MessageBox (hwnd,"Error. Pf out of range.", szAppName, MB_OK | MB_ICONERROR) ;




lstrcpy(szBuffer, "Error. Pf out of range.") ; SetDlgItemText (hwnd, IDC_LSTATUS, szBuffer) ; return FALSE ;

}

// ensure the temperature is acceptable before proceeding if (A10->dTf < T_MIN || A10->dTf > T_MAX)

{
MessageBox (hwnd,"Error. Tf out of range.", szAppName, MB_OK | MB_ICONERROR) ;

lstrcpy(szBuffer, "Error. Tf out of range.") ; SetDlgItemText (hwnd, IDC_LSTATUS, szBuffer) ; return FALSE ;

}

/* indicate that a calculation has begun */ lstrcpy(szBuffer, "Calculation In Progress") ; SetDlgItemText (hwnd, IDC_LSTATUS, szBuffer) ;

/*	run the sound speed AND C* calculation	*/

Crit(A10, 0.0) ;

/* write the outputs to the dialog box */ WriteOutputs(hwnd, A10) ;

return FALSE ;

case IDC_CLEAR :

/* zero out the composition and then display it */
for (i = 0 ; i < NUMBEROFCOMPONENTS ; i++) A10->adMixture[i] = 0.0 ; WriteInputs(hwnd, A10) ;
return FALSE	;

case IDC_NORMALIZE :

//normalize the composition to equal 1.0000 ReadInputs(hwnd, A10) ;
temp = 0.0 ;
//find the current sum of fractions

for (i = 0 ; i < NUMBEROFCOMPONENTS ; i++) temp += A10->adMixture[i] ; // adjust each non-zero entry by the required proportion

for (i = 0 ; i < NUMBEROFCOMPONENTS ; i++)




if (A10->adMixture[i] > 0.0) A10->adMixture[i] /= temp ; // write the adjusted values to the screen

WriteInputs(hwnd, A10) ; return FALSE ;

case IDCANCEL :

/* start tear-down process */ SendMessage(hwnd, WM_CLOSE, 0,0L) ; return FALSE ;

case IDRETRY :

//reset the defaults SetDefaults(A10) ;

//display the input data to the screen WriteInputs(hwnd, A10) ;

//send a message back to this proc, requesting a calculation SendMessage(hwnd, WM_COMMAND, IDOK,0L) ;

return FALSE  ;

case CM_FILEOPEN :

// standard Windows file operations
GetFileTitle (szFileName, szTitleName, sizeof (szTitleName)) ; if (FileOpenDlg (hwnd, szFileName, szTitleName))

{

if (!FileRead (hwnd, szFileName, A10))
{

MessageBox(hwnd,"Could not read file.", szTitleName, MB_OK | MB_ICONSTOP) ;
}

}

else return FALSE ;

//Write the new values to the window WriteInputs(hwnd, A10) ;

//send a message back to this proc, requesting a calculation SendMessage(hwnd, WM_COMMAND, IDOK,0L) ;




return FALSE	;

case CM_FILESAVE :

// standard Windows file operations
GetFileTitle (szFileName, szTitleName, sizeof (szTitleName)) ; if (szFileName[0])
{
if (FileWrite(hwnd, szFileName, A10))
{
return TRUE ;

}

else
{

MessageBox(hwnd,"Could not write file.", szTitleName, MB_OK | MB_ICONSTOP) ;

}

return FALSE ;
}

// fall through

case CM_FILESAVEAS :

// standard Windows file operations
GetFileTitle (szFileName, szTitleName, sizeof (szTitleName)) ; if (FileSaveDlg (hwnd, szFileName, szTitleName))

{

if (FileWrite (hwnd, szFileName, A10))
{
return 1 ;

}

else
{

MessageBox(hwnd,"Could not write file.", szTitleName, MB_OK | MB_ICONSTOP) ;

}

}
return FALSE ;

case CM_HELPABOUT : MessageBox (hwnd,




"AGA10win.exe and AGA10.dll (c) American Gas Association, 2002", szAppName, MB_OK | MB_ICONINFORMATION) ;

return FALSE ;
}
return FALSE ;

case WM_CLOSE :

/* un-initialize the calculation library */ AGA10_UnInit() ;

// remove the AGA10STRUCT object from memory delete A10 ;

/* request Windows to terminate the app */ DestroyWindow (hwnd) ;

return FALSE ;

case WM_DESTROY :

/* final message exhange with Windows during shut-down */ PostQuitMessage (0) ;

return FALSE ;

}

return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
}























/*************************************************************************
* File	:	file.cpp
* Description	:	Supports file access to AGA10 functions
* Author	:	W.B. Peterson
* Version	:	1.7   2002.11.17
* Revisions	:	
* Copyright (c) 2002	American Gas Association
**************************************************************************/

#include "aga10.h"

// declare a Windows-defined structure for file names static OPENFILENAME ofn ;

/**************************************************************************

*	Function	:	FileInitialize()
*	Arguments	:	HWND
*	Returns	:	void
*	Purpose	:	Prepares for Windows file access
*	Revisions	:	
**************************************************************************/

void FileInitialize (HWND hWnd)

{
/* set file filters; assign the filename extension 'sos' for files of this type */

static char szFilter[] = "AGA10 Files (*.sos)\0*.sos\0" ; static char szExt[] = "sos" ;

// populate a OPENFILENAME structure
ofn.lStructSize	= sizeof (OPENFILENAME)  ;
ofn.hwndOwner	= hWnd	;	
ofn.hInstance	= NULL	;	
ofn.lpstrFilter	= szFilter	;
ofn.lpstrCustomFilter	= NULL	;	
ofn.nMaxCustFilter	= 0	;		
ofn.nFilterIndex	= 0	;		
ofn.lpstrFile	= NULL	;	
ofn.nMaxFile	= _MAX_PATH	;
ofn.lpstrFileTitle	= NULL	;	




ofn.nMaxFileTitle	= _MAX_FNAME + _MAX_EXT  ;
ofn.lpstrInitialDir	= NULL	;
ofn.lpstrTitle	= NULL	;
ofn.Flags	= 0	;	
ofn.nFileOffset	= 0	;	
ofn.nFileExtension	= 0	;	
ofn.lpstrDefExt	= szExt	;
ofn.lCustData	= 0L  ;	
ofn.lpfnHook	= NULL	;
ofn.lpTemplateName	= NULL	;
}


/**************************************************************************

*	Function	:	FileOpenDlg()
*	Arguments	:	HWND, PSTR, PSTR
*	Returns	:	BOOL
*	Purpose	:	Access common controls for file-open operation
*	Revisions	:	
**************************************************************************/

BOOL FileOpenDlg (HWND hWnd, PSTR pstrFileName, PSTR pstrTitleName)

{
ofn.hwndOwner	= hWnd	;
ofn.lpstrFile	= pstrFileName	;

ofn.lpstrFileTitle	= pstrTitleName	;

ofn.Flags	= OFN_HIDEREADONLY | OFN_CREATEPROMPT	;

return GetOpenFileName (&ofn)	;

}



/**************************************************************************

*	Function	:	FileSaveDlg()
*	Arguments	:	HWND, PSTR, PSTR
*	Returns	:	BOOL
*	Purpose	:	Access common controls for file-save operation
*	Revisions	:	
**************************************************************************/




BOOL FileSaveDlg (HWND hWnd, PSTR pstrFileName, PSTR pstrTitleName)

{
ofn.hwndOwner	= hWnd	;
ofn.lpstrFile	= pstrFileName	;

ofn.lpstrFileTitle	= pstrTitleName	;

ofn.Flags	= OFN_OVERWRITEPROMPT	;

return GetSaveFileName (&ofn)	;

}



/**************************************************************************

*	Function	:	FileRead()
*	Arguments	:	HWND, PSTR, AGA10STRUCT
*	Returns	:	bool
*	Purpose	:	Reads contents of a .sos file into a AGA10STRUCT
*	Revisions	:	
**************************************************************************/

bool FileRead(HWND hWnd, PSTR pstrFileName, AGA10STRUCT *A10)

{
FILE	*file	;

// open the file in binary mode, if it exists

if (NULL == (file = fopen (pstrFileName, "rb"))) return false ;

//set file position to beginning rewind(file) ;

//read one (only) data structure

if (fread(A10, sizeof (AGA10STRUCT), 1, file))
{

fclose (file) ; return true;
}
else
{

// some problem encountered




fclose (file) ; return false ;

}
}


/**************************************************************************
*	Function	:	FileWrite()
*	Arguments	:	HWND, PSTR, AGA10STRUCT
*	Returns	:	bool
*	Purpose	:	Writes contents of a AGA10STRUCT into a .vos file
*	Revisions	:	
**************************************************************************/

bool FileWrite(HWND hWnd, PSTR pstrFileName, AGA10STRUCT *A10)

{

FILE	*file	;

// open the file in binary mode; create if necessary

if (NULL == (file = fopen (pstrFileName, "wb"))) return false ;

//set file position to beginning rewind(file) ;

//write one (only) data structure

if (fwrite(A10, sizeof (AGA10STRUCT), 1, file))

{
fclose (file) ; return true;

}

else
{

// problem encountered; close and return 'false' fclose (file) ;

return false ;

}
}








/*************************************************************************
* File	:	dlghlp.cpp
* Description	:	Helper functions for aga10win main dialog box
* Version	:	1.7   2002.11.17
* Author	:	W.B. Peterson
* Revisions	:	
* Copyright (c) 2002 American Gas Association
**************************************************************************/

#include "aga10win.h" #include "aga10.h"

/* variables declared externally */ extern HINSTANCE hInst ;

extern double total ; extern long int lPb_unit ; extern long int lPf_unit ; extern long int lTb_unit ; extern long int lTf_unit ; extern long int lRhob_unit ; extern long int lRhof_unit ; extern long int lSOS_unit ;

extern long int lEnthalpy_unit ; extern long int lEntropy_unit ;

/* a local buffer for text strings */ static char szBuffer[FIELD40] ;

/**************************************************************************

*	Function	:	WriteInputs()
*	Arguments	:	HWND
*	Returns	:	void
*	Purpose	:	Function for writing the input fields of the main window
*	Notes	:	Uses non-portable, run-time library function _gcvt()
*			for converting strings to double precision floats.
*	Revisions	:	
**************************************************************************/

void WriteInputs(HWND hDlg, AGA10STRUCT *A10)

{




HWND hListBox; int i ;
double Pbx, Tbx, Pfx, Tfx ;

/* calculate Pb in specified unit of measure */ switch (lPb_unit)
{
case KILOPASCAL :

Pbx = A10->dPb * 1.0e-3 ; break ;

	case MEGAPASCAL :
	Pbx =	A10->dPb * 1.0e-6 ;
	break ;
	case PSI :	
}	Pbx =	A10->dPb / 6894.75729 ;
		
/*	calculate Pf in specified unit of measure */
switch (lPf_unit)	
{	case KILOPASCAL :
	
	Pfx =	A10->dPf * 1.0e-3 ;
	break ;
	case MEGAPASCAL :
	Pfx =	A10->dPf * 1.0e-6 ;
	break ;
	case PSI :	
}	Pfx =	A10->dPf / 6894.75729 ;
		
/*	calculate Tb in specified unit of measure */
switch (lTb_unit)	
{	case CELSIUS :
	
	Tbx =	A10->dTb - 273.15 ;
	break	;



	case FAHRENHEIT :
	Tbx =	(A10->dTb * 1.8) - 459.67 ;
	break	;
	case KELVIN	:
	Tbx =	A10->dTb ;
	break	;
	case RANKINE :
}	Tbx =	A10->dTb * 1.8 ;
		
/*	calculate Tf in specified unit of measure */
switch (lTf_unit)	
{	case CELSIUS :
	
	Tfx =	A10->dTf - 273.15 ;
	break ;
	case FAHRENHEIT :
	Tfx =	(A10->dTf * 1.8) - 459.67 ;
	break	;
	case KELVIN	:
	Tfx =	A10->dTf ;
	break	;
	case RANKINE :
}	Tfx =	A10->dTf * 1.8 ;
		

// Pb

_gcvt (Pbx, 9, szBuffer);
SetDlgItemText (hDlg, IDC_PB, szBuffer) ; // Tb
_gcvt (Tbx, 9, szBuffer);
SetDlgItemText (hDlg, IDC_TB, szBuffer) ; // Pf

_gcvt (Pfx, 9, szBuffer);




SetDlgItemText (hDlg, IDC_PF, szBuffer) ; // Tf

_gcvt (Tfx, 9, szBuffer);
SetDlgItemText (hDlg, IDC_TF, szBuffer) ; // composition

_gcvt (A10->adMixture[XiC1] * 100.0, 9, szBuffer); SetDlgItemText (hDlg, IDC_XIC1, szBuffer) ;
_gcvt (A10->adMixture[XiN2] * 100.0, 9, szBuffer); SetDlgItemText (hDlg, IDC_XIN2, szBuffer) ;

_gcvt (A10->adMixture[XiCO2] * 100.0, 9, szBuffer); SetDlgItemText (hDlg, IDC_XICO2, szBuffer) ;
_gcvt (A10->adMixture[XiC2] * 100.0, 9, szBuffer); SetDlgItemText (hDlg, IDC_XIC2, szBuffer) ;

_gcvt (A10->adMixture[XiC3] * 100.0, 9, szBuffer); SetDlgItemText (hDlg, IDC_XIC3, szBuffer) ;

_gcvt (A10->adMixture[XiH2O] * 100.0, 9, szBuffer); SetDlgItemText (hDlg, IDC_XIH2O, szBuffer) ;
_gcvt (A10->adMixture[XiH2S] * 100.0, 9, szBuffer); SetDlgItemText (hDlg, IDC_XIH2S, szBuffer) ;

_gcvt (A10->adMixture[XiH2] * 100.0, 9, szBuffer); SetDlgItemText (hDlg, IDC_XIH2, szBuffer) ;
_gcvt (A10->adMixture[XiCO] * 100.0, 9, szBuffer); SetDlgItemText (hDlg, IDC_XICO, szBuffer) ;

_gcvt (A10->adMixture[XiO2] * 100.0, 9, szBuffer); SetDlgItemText (hDlg, IDC_XIO2, szBuffer) ;

_gcvt (A10->adMixture[XiIC4] * 100.0, 9, szBuffer); SetDlgItemText (hDlg, IDC_XIIC4, szBuffer) ;
_gcvt (A10->adMixture[XiNC4] * 100.0, 9, szBuffer); SetDlgItemText (hDlg, IDC_XINC4, szBuffer) ;

_gcvt (A10->adMixture[XiIC5] * 100.0, 9, szBuffer); SetDlgItemText (hDlg, IDC_XIIC5, szBuffer) ;
_gcvt (A10->adMixture[XiNC5] * 100.0, 9, szBuffer); SetDlgItemText (hDlg, IDC_XINC5, szBuffer) ;

_gcvt (A10->adMixture[XiNC6] * 100.0, 9, szBuffer); SetDlgItemText (hDlg, IDC_XINC6, szBuffer) ;
_gcvt (A10->adMixture[XiNC7] * 100.0, 9, szBuffer); SetDlgItemText (hDlg, IDC_XINC7, szBuffer) ;

_gcvt (A10->adMixture[XiNC8] * 100.0, 9, szBuffer); SetDlgItemText (hDlg, IDC_XINC8, szBuffer) ;

_gcvt (A10->adMixture[XiNC9] * 100.0, 9, szBuffer);




SetDlgItemText (hDlg, IDC_XINC9, szBuffer) ; _gcvt (A10->adMixture[XiNC10] * 100.0, 9, szBuffer);

SetDlgItemText (hDlg, IDC_XINC10, szBuffer) ; _gcvt (A10->adMixture[XiHe] * 100.0, 9, szBuffer);

SetDlgItemText (hDlg, IDC_XIHE, szBuffer) ; _gcvt (A10->adMixture[XiAr] * 100.0, 9, szBuffer);
SetDlgItemText (hDlg, IDC_XIAR, szBuffer) ;

for (i=0, total = 0.0 ; i<NUMBEROFCOMPONENTS; i++) total += A10->adMixture[i]; sprintf(szBuffer, "%6.6f", total * 100.0) ;

SetDlgItemText(hDlg, IDC_TOTAL, szBuffer) ;

hListBox = GetDlgItem(hDlg, IDC_PB_U) ;

if (!SendMessage(hListBox, CB_GETCOUNT, 0,0)) PressureDlgHelp(hListBox) ; LoadString(hInst, lPb_unit, szBuffer, FIELD40) ;

SendMessage(hListBox, CB_SELECTSTRING, -1,(LONG)(LPSTR)szBuffer) ;

hListBox = GetDlgItem(hDlg, IDC_PF_U) ;

if (!SendMessage(hListBox, CB_GETCOUNT, 0,0)) PressureDlgHelp(hListBox) ; LoadString(hInst, lPf_unit, szBuffer, FIELD40) ;

SendMessage(hListBox, CB_SELECTSTRING, -1,(LONG)(LPSTR)szBuffer) ;

hListBox = GetDlgItem(hDlg, IDC_TB_U) ;

if (!SendMessage(hListBox, CB_GETCOUNT, 0,0)) TemperatureDlgHelp(hListBox) ; LoadString(hInst, lTb_unit, szBuffer, FIELD40) ;

SendMessage(hListBox, CB_SELECTSTRING, -1,(LONG)(LPSTR)szBuffer) ;

hListBox = GetDlgItem(hDlg, IDC_TF_U) ;

if (!SendMessage(hListBox, CB_GETCOUNT, 0,0)) TemperatureDlgHelp(hListBox) ; LoadString(hInst, lTf_unit, szBuffer, FIELD40) ;
SendMessage(hListBox, CB_SELECTSTRING, -1,(LONG)(LPSTR)szBuffer) ;

hListBox = GetDlgItem(hDlg, IDC_RHOB_U) ;

if (!SendMessage(hListBox, CB_GETCOUNT, 0,0)) DensityDlgHelp(hListBox) ; LoadString(hInst, lRhob_unit, szBuffer, FIELD40) ; SendMessage(hListBox, CB_SELECTSTRING, -1,(LONG)(LPSTR)szBuffer) ;

hListBox = GetDlgItem(hDlg, IDC_RHOF_U) ;

if (!SendMessage(hListBox, CB_GETCOUNT, 0,0)) DensityDlgHelp(hListBox) ; LoadString(hInst, lRhof_unit, szBuffer, FIELD40) ;




SendMessage(hListBox, CB_SELECTSTRING, -1,(LONG)(LPSTR)szBuffer) ;

hListBox = GetDlgItem(hDlg, IDC_SOS_U) ;

if (!SendMessage(hListBox, CB_GETCOUNT, 0,0)) SOSDlgHelp(hListBox) ; LoadString(hInst, lSOS_unit, szBuffer, FIELD40) ; SendMessage(hListBox, CB_SELECTSTRING, -1,(LONG)(LPSTR)szBuffer) ;

hListBox = GetDlgItem(hDlg, IDC_ENTHALPY_U) ;

if (!SendMessage(hListBox, CB_GETCOUNT, 0,0)) EnthalpyDlgHelp(hListBox) ; LoadString(hInst, lEnthalpy_unit, szBuffer, FIELD40) ; SendMessage(hListBox, CB_SELECTSTRING, -1,(LONG)(LPSTR)szBuffer) ;

hListBox = GetDlgItem(hDlg, IDC_ENTROPY_U) ;

if (!SendMessage(hListBox, CB_GETCOUNT, 0,0)) EntropyDlgHelp(hListBox) ; LoadString(hInst, lEntropy_unit, szBuffer, FIELD40) ; SendMessage(hListBox, CB_SELECTSTRING, -1,(LONG)(LPSTR)szBuffer) ;

}

/**************************************************************************

*	Function	:	WriteInputs()
*	Arguments	:	HWND
*	Returns	:	void
*	Purpose	:	Function for writing the input fields of the main window
*	Notes	:	Uses non-portable, run-time library function _gcvt()
*			for converting strings to double precision floats.
*	Revisions	:	
**************************************************************************/

void WriteOutputs(HWND hDlg, AGA10STRUCT *A10)

{

double Rhofx, SOSx, Enthalpyx, Entropyx ;

/* calculate Rhof in specified unit of measure */ switch (lRhof_unit)

{

case KGPERCUBICMETRE : Rhofx = A10->dRhof ; break ;

case LBMPERCUBICFOOT :




Rhofx = (A10->dRhof	/ 0.45359237) * pow(0.3048, 3.0)	;

}				
/*	calculate SOS in specified unit of measure	*/	
switch (lSOS_unit)			
{	case METREPERSECOND :			
				
	SOSx = A10->dSOS ;			
	break ;			
	case FOOTPERSECOND :			
}	SOSx = A10->dSOS  / 0.3048  ;			
				
/*	calculate specific enthalpy in specified unit of measure	*/
switch (lEnthalpy_unit)			
{	case KJPERKG :			
				
	Enthalpyx = A10->dH * 0.001 ;			
	break ;			
	case BTUPERLBM :			
}	Enthalpyx = A10->dH / ((5000./9.) * 4.1868) ;		
				
/*	calculate specific entropy in specified unit of measure	*/
switch (lEntropy_unit)			
{	case KJPERKGK :			
				
	Entropyx = A10->dS * 0.001 ;			
	break ;			
	case BTUPERLBMF :			
}	Entropyx = A10->dS / (1.0e3 * 4.1868)  ;		
				
/*	write the outputs to the window	*/		
_gcvt (Rhofx, 9, szBuffer);			
SetDlgItemText (hDlg, IDC_RHOF, szBuffer) ;		





_gcvt (SOSx, 9, szBuffer);

SetDlgItemText (hDlg, IDC_SOS, szBuffer) ;

_gcvt (A10->dZb, 9, szBuffer); SetDlgItemText (hDlg, IDC_ZB, szBuffer) ;

_gcvt (A10->dZf, 9, szBuffer); SetDlgItemText (hDlg, IDC_ZF, szBuffer) ;

_gcvt (A10->dFpv, 9, szBuffer); SetDlgItemText (hDlg, IDC_FPV, szBuffer) ;

_gcvt (A10->dDf, 9, szBuffer); SetDlgItemText (hDlg, IDC_DF, szBuffer) ;

_gcvt (A10->dRD_Ideal, 9, szBuffer); SetDlgItemText (hDlg, IDC_RD_IDEAL, szBuffer) ;

_gcvt (A10->dRD_Real, 9, szBuffer); SetDlgItemText (hDlg, IDC_RD_REAL, szBuffer) ;

_gcvt (A10->dMrx, 9, szBuffer); SetDlgItemText (hDlg, IDC_MRX, szBuffer) ;

_gcvt (A10->dCpi * 0.001, 9, szBuffer); SetDlgItemText (hDlg, IDC_CPI, szBuffer) ;

_gcvt (A10->dCp * 0.001, 9, szBuffer); SetDlgItemText (hDlg, IDC_CP, szBuffer) ;

_gcvt (A10->dCv * 0.001, 9, szBuffer); SetDlgItemText (hDlg, IDC_CV, szBuffer) ;

_gcvt (A10->dk, 9, szBuffer); SetDlgItemText (hDlg, IDC_K, szBuffer) ;

_gcvt (A10->dKappa, 9, szBuffer); SetDlgItemText (hDlg, IDC_KAPPA, szBuffer) ;

_gcvt (A10->dHo * 0.001, 9, szBuffer);




SetDlgItemText (hDlg, IDC_HO, szBuffer) ;

_gcvt (Enthalpyx, 9, szBuffer); SetDlgItemText (hDlg, IDC_H, szBuffer) ;

_gcvt (Entropyx, 9, szBuffer); SetDlgItemText (hDlg, IDC_S, szBuffer) ;

// reality check included for C*

if (A10->dCstar > 0.3 && A10->dCstar < 1.3)
{

_gcvt (A10->dCstar, 9, szBuffer); SetDlgItemText (hDlg, IDC_CSTAR, szBuffer) ;
}
else

{
	lstrcpy(szBuffer, "Cannot Solve!") ;
}	SetDlgItemText (hDlg, IDC_CSTAR, szBuffer) ;
	
/*	update status indicator, based on return codes  */
if (A10->lStatus == 9000)
{

lstrcpy(szBuffer, "Calculation Completed") ; SetDlgItemText (hDlg, IDC_LSTATUS, szBuffer) ;

}

else
{

_ltoa (A10->lStatus, szBuffer, 10); SetDlgItemText (hDlg, IDC_LSTATUS, szBuffer) ;
}
}

/**************************************************************************

*	Function	:	ReadInputs()
*	Arguments	:	HWND
*	Returns	:	void
*	Purpose	:	Function for reading the input fields of the main window
*	Revisions	:	
**************************************************************************/




void ReadInputs(HWND hDlg, AGA10STRUCT *A10)

{
HWND hListBox; int iSelection; int i ;
char * stopstr;

//Pb

GetDlgItemText(hDlg, IDC_PB, szBuffer, FIELD30) ; hListBox = GetDlgItem(hDlg, IDC_PB_U) ;

iSelection = SendMessage(hListBox, CB_GETCURSEL, 0,0) ; switch (iSelection)

{
case 0 :

lPb_unit = KILOPASCAL ;

A10->dPb = strtod(szBuffer, &stopstr) * 1.0e3 ; break ;

case 1 :
lPb_unit = MEGAPASCAL ;

A10->dPb = strtod(szBuffer, &stopstr) * 1.0e6 ; break ;
case 2 :
lPb_unit = PSI ;
A10->dPb = strtod(szBuffer, &stopstr) * 6894.75729 ;

}

//Pf

GetDlgItemText(hDlg, IDC_PF, szBuffer, FIELD30) ; hListBox = GetDlgItem(hDlg, IDC_PF_U) ;

iSelection = SendMessage(hListBox, CB_GETCURSEL, 0,0) ; switch (iSelection)

{
case 0 :

lPf_unit = KILOPASCAL ;

A10->dPf = strtod(szBuffer, &stopstr) * 1.0e3 ; break ;

case 1 :
lPf_unit = MEGAPASCAL ;

A10->dPf = strtod(szBuffer, &stopstr) * 1.0e6 ;




break ; case 2 :

lPf_unit = PSI ;
A10->dPf = strtod(szBuffer, &stopstr) * 6894.75729 ;
}

//Tb

GetDlgItemText(hDlg, IDC_TB, szBuffer, FIELD30) ; hListBox = GetDlgItem(hDlg, IDC_TB_U) ;

iSelection = SendMessage(hListBox, CB_GETCURSEL, 0,0) ; switch (iSelection)
{
case 0 :
lTb_unit = CELSIUS ;

A10->dTb = strtod(szBuffer, &stopstr) + 273.15; break ;
case 1 :
lTb_unit = FAHRENHEIT ;

A10->dTb = (strtod(szBuffer, &stopstr) + 459.67) / 1.8 ; break ;

case 2 :

lTb_unit = KELVIN ;
A10->dTb = strtod(szBuffer, &stopstr) ; break ;

case 3 :
lTb_unit = RANKINE ;

A10->dTb = strtod(szBuffer, &stopstr) / 1.8;
}


//Tf

GetDlgItemText(hDlg, IDC_TF, szBuffer, FIELD30) ; hListBox = GetDlgItem(hDlg, IDC_TF_U) ;

iSelection = SendMessage(hListBox, CB_GETCURSEL, 0,0) ; switch (iSelection)
{
case 0 :
lTf_unit = CELSIUS ;

A10->dTf = strtod(szBuffer, &stopstr) + 273.15; break ;




case 1 :

lTf_unit = FAHRENHEIT ;

A10->dTf = (strtod(szBuffer, &stopstr) + 459.67) / 1.8 ; break ;

case 2 :
lTf_unit = KELVIN ;

A10->dTf = strtod(szBuffer, &stopstr) ; break ;

case 3 :
lTf_unit = RANKINE ;

A10->dTf = strtod(szBuffer, &stopstr) / 1.8;

}

//Rhof

hListBox = GetDlgItem(hDlg, IDC_RHOF_U) ;
iSelection = SendMessage(hListBox, CB_GETCURSEL, 0,0) ; switch (iSelection)
{
case 0 :

lRhof_unit = KGPERCUBICMETRE ; break ;
case 1 :
lRhof_unit = LBMPERCUBICFOOT ;
}

//SOS

hListBox = GetDlgItem(hDlg, IDC_SOS_U) ;
iSelection = SendMessage(hListBox, CB_GETCURSEL, 0,0) ; switch (iSelection)

{

case 0 :
lSOS_unit = METREPERSECOND ; break ;

case 1 :
lSOS_unit = FOOTPERSECOND ;

}

//Enthalpy

hListBox = GetDlgItem(hDlg, IDC_ENTHALPY_U) ; iSelection = SendMessage(hListBox, CB_GETCURSEL, 0,0) ;




switch (iSelection)

{
case 0 :

lEnthalpy_unit = KJPERKG ; break ;

case 1 :

lEnthalpy_unit = BTUPERLBM ;
}

//Entropy

hListBox = GetDlgItem(hDlg, IDC_ENTROPY_U) ; iSelection = SendMessage(hListBox, CB_GETCURSEL, 0,0) ; switch (iSelection)

{
case 0 :

lEntropy_unit = KJPERKGK ; break ;
case 1 :
lEntropy_unit = BTUPERLBMF ;
}

// composition

GetDlgItemText(hDlg,IDC_XIC1, szBuffer, FIELD30) ; A10->adMixture[XiC1] = strtod(szBuffer, &stopstr) * 0.01 ; GetDlgItemText(hDlg,IDC_XIN2, szBuffer, FIELD30) ; A10->adMixture[XiN2] = strtod(szBuffer, &stopstr) * 0.01 ; GetDlgItemText(hDlg,IDC_XICO2, szBuffer, FIELD30) ; A10->adMixture[XiCO2] = strtod(szBuffer, &stopstr) * 0.01 ; GetDlgItemText(hDlg,IDC_XIC2, szBuffer, FIELD30) ; A10->adMixture[XiC2] = strtod(szBuffer, &stopstr) * 0.01 ; GetDlgItemText(hDlg,IDC_XIC3, szBuffer, FIELD30) ; A10->adMixture[XiC3] = strtod(szBuffer, &stopstr) * 0.01 ; GetDlgItemText(hDlg,IDC_XIH2O, szBuffer, FIELD30) ; A10->adMixture[XiH2O] = strtod(szBuffer, &stopstr) * 0.01 ; GetDlgItemText(hDlg,IDC_XIH2S, szBuffer, FIELD30) ; A10->adMixture[XiH2S] = strtod(szBuffer, &stopstr) * 0.01 ; GetDlgItemText(hDlg,IDC_XIH2, szBuffer, FIELD30) ; A10->adMixture[XiH2] = strtod(szBuffer, &stopstr) * 0.01 ; GetDlgItemText(hDlg,IDC_XICO, szBuffer, FIELD30) ; A10->adMixture[XiCO] = strtod(szBuffer, &stopstr) * 0.01 ;




GetDlgItemText(hDlg,IDC_XIO2, szBuffer, FIELD30) ;

A10->adMixture[XiO2] = strtod(szBuffer, &stopstr) * 0.01 ;
GetDlgItemText(hDlg,IDC_XIIC4, szBuffer, FIELD30) ;
A10->adMixture[XiIC4] = strtod(szBuffer, &stopstr) * 0.01 ;
GetDlgItemText(hDlg,IDC_XINC4, szBuffer, FIELD30) ;

A10->adMixture[XiNC4] = strtod(szBuffer, &stopstr) * 0.01 ;

GetDlgItemText(hDlg,IDC_XIIC5, szBuffer, FIELD30) ;
A10->adMixture[XiIC5] = strtod(szBuffer, &stopstr) * 0.01 ;
GetDlgItemText(hDlg,IDC_XINC5, szBuffer, FIELD30) ;
A10->adMixture[XiNC5] = strtod(szBuffer, &stopstr) * 0.01 ;

GetDlgItemText(hDlg,IDC_XINC6, szBuffer, FIELD30) ;

A10->adMixture[XiNC6] = strtod(szBuffer, &stopstr) * 0.01 ;
GetDlgItemText(hDlg,IDC_XINC7, szBuffer, FIELD30) ;
A10->adMixture[XiNC7] = strtod(szBuffer, &stopstr) * 0.01 ;
GetDlgItemText(hDlg,IDC_XINC8, szBuffer, FIELD30) ;

A10->adMixture[XiNC8] = strtod(szBuffer, &stopstr) * 0.01 ;

GetDlgItemText(hDlg,IDC_XINC9, szBuffer, FIELD30) ;
A10->adMixture[XiNC9] = strtod(szBuffer, &stopstr) * 0.01 ;
GetDlgItemText(hDlg,IDC_XINC10, szBuffer, FIELD30) ;
A10->adMixture[XiNC10] = strtod(szBuffer, &stopstr) * 0.01 ;

GetDlgItemText(hDlg,IDC_XIHE, szBuffer, FIELD30) ;

A10->adMixture[XiHe] = strtod(szBuffer, &stopstr) * 0.01 ;
GetDlgItemText(hDlg,IDC_XIAR, szBuffer, FIELD30) ;
A10->adMixture[XiAr] = strtod(szBuffer, &stopstr) * 0.01 ;

// sum up the mole fractions

for (i=0,total = 0.0; i<NUMBEROFCOMPONENTS; i++) total += A10->adMixture[i]; sprintf(szBuffer, "%6.6f", total * 100.0) ;

SetDlgItemText(hDlg, IDC_TOTAL, szBuffer) ;
}


/**************************************************************************

*	Function	:	PressureDlgHelp()
*	Arguments	:	HWND
*	Returns	:	void
*	Purpose	:	Helper function for loading strings into pressure
*			drop-list controls
*	Revisions	:	
**************************************************************************/




void PressureDlgHelp(HWND hListBox)

{
LoadString(hInst, KILOPASCAL, szBuffer, FIELD40) ; SendMessage(hListBox, CB_INSERTSTRING, 0, (LONG)(LPSTR) szBuffer) ; LoadString(hInst, MEGAPASCAL, szBuffer, FIELD40) ; SendMessage(hListBox, CB_INSERTSTRING, 1, (LONG)(LPSTR) szBuffer) ; LoadString(hInst, PSI, szBuffer, FIELD40) ;
SendMessage(hListBox, CB_INSERTSTRING, 2, (LONG)(LPSTR) szBuffer) ;
}


/**************************************************************************
*	Function	:	TemperatureDlgHelp()
*	Arguments	:	HWND
*	Returns	:	void
*	Purpose	:	Helper function for loading strings into temperature
*			drop-list controls
*	Revisions	:	
**************************************************************************/

void TemperatureDlgHelp(HWND hListBox)

{
LoadString(hInst, CELSIUS, szBuffer, FIELD40) ; SendMessage(hListBox, CB_INSERTSTRING, 0, (LONG)(LPSTR) szBuffer) ; LoadString(hInst, FAHRENHEIT, szBuffer, FIELD40) ; SendMessage(hListBox, CB_INSERTSTRING, 1, (LONG)(LPSTR) szBuffer) ; LoadString(hInst, KELVIN, szBuffer, FIELD40) ; SendMessage(hListBox, CB_INSERTSTRING, 2, (LONG)(LPSTR) szBuffer) ; LoadString(hInst, RANKINE, szBuffer, FIELD40) ; SendMessage(hListBox, CB_INSERTSTRING, 3, (LONG)(LPSTR) szBuffer) ;

}


/**************************************************************************
*	Function	:	DensityDlgHelp()
*	Arguments	:	HWND
*	Returns	:	void
*	Purpose	:	Helper function for loading strings into density
*			drop-list controls




*	Revisions	:

**************************************************************************/

void DensityDlgHelp(HWND hListBox)

{
LoadString(hInst, KGPERCUBICMETRE, szBuffer, FIELD40) ; SendMessage(hListBox, CB_INSERTSTRING, 0, (LONG)(LPSTR) szBuffer) ; LoadString(hInst, LBMPERCUBICFOOT, szBuffer, FIELD40) ; SendMessage(hListBox, CB_INSERTSTRING, 1, (LONG)(LPSTR) szBuffer) ;

}


/**************************************************************************
*	Function	:	SOSDlgHelp()
*	Arguments	:	HWND
*	Returns	:	void
*	Purpose	:	Helper function for loading strings into SOS
*			drop-list controls
*	Revisions	:	
**************************************************************************/

void SOSDlgHelp(HWND hListBox)

{
LoadString(hInst, METREPERSECOND, szBuffer, FIELD40) ; SendMessage(hListBox, CB_INSERTSTRING, 0, (LONG)(LPSTR) szBuffer) ; LoadString(hInst, FOOTPERSECOND, szBuffer, FIELD40) ; SendMessage(hListBox, CB_INSERTSTRING, 1, (LONG)(LPSTR) szBuffer) ;

}


/**************************************************************************
*	Function	:	EnthalpyDlgHelp()
*	Arguments	:	HWND
*	Returns	:	void
*	Purpose	:	Helper function for loading strings into enthalpy
*			drop-list controls
*	Revisions	:	
**************************************************************************/

void EnthalpyDlgHelp(HWND hListBox)




{

LoadString(hInst, KJPERKG, szBuffer, FIELD40) ; SendMessage(hListBox, CB_INSERTSTRING, 0, (LONG)(LPSTR) szBuffer) ; LoadString(hInst, BTUPERLBM, szBuffer, FIELD40) ; SendMessage(hListBox, CB_INSERTSTRING, 1, (LONG)(LPSTR) szBuffer) ;

}

/**************************************************************************
*	Function	:	EntropyDlgHelp()
*	Arguments	:	HWND
*	Returns	:	void
*	Purpose	:	Helper function for loading strings into entropy
*			drop-list controls
*	Revisions	:	
**************************************************************************/

void EntropyDlgHelp(HWND hListBox)

{
LoadString(hInst, KJPERKGK, szBuffer, FIELD40) ; SendMessage(hListBox, CB_INSERTSTRING, 0, (LONG)(LPSTR) szBuffer) ; LoadString(hInst, BTUPERLBMF, szBuffer, FIELD40) ; SendMessage(hListBox, CB_INSERTSTRING, 1, (LONG)(LPSTR) szBuffer) ;

}

/**************************************************************************

*	Function	:	SetDefaults()
*	Arguments	:	void	
*	Returns	:	void	
*	Purpose	:	initializes AGA10STRUCT and units of measure
*	Revisions	:		
**************************************************************************/
void SetDefaults(AGA10STRUCT *A10)	
{	A10->lStatus = 9000 ;	/* 9000 is status code for 'ok' */
		
	A10->bForceUpdate = true;	/* ensures that full calculation is performed */
	A10->dPb = 101325.0 ;	/* 1 atm */
	A10->dTb = 288.15;		/* 15 C */
	A10->dPf = 4000000.0 ;	/* 4 MPa */
	A10->dTf = 283.15;		/* 10 C */




A10->adMixture[XiC1] = 0.906724;	/* AMARILLO example composition...*/

A10->adMixture[XiN2] = 0.031284;
A10->adMixture[XiCO2] = 0.004676;
A10->adMixture[XiC2] = 0.045279;
A10->adMixture[XiC3] = 0.00828;

A10->adMixture[XiH2O] = 0.0;

A10->adMixture[XiH2S] = 0.0;
A10->adMixture[XiH2] = 0.0;
A10->adMixture[XiCO] = 0.0;
A10->adMixture[XiO2] = 0.0;

A10->adMixture[XiIC4] = 0.001037;

A10->adMixture[XiNC4] = 0.001563;
A10->adMixture[XiIC5] = 0.000321;
A10->adMixture[XiNC5] = 0.000443;
A10->adMixture[XiNC6] = 0.000393;

A10->adMixture[XiNC7] = 0.0;

A10->adMixture[XiNC8] = 0.0;
A10->adMixture[XiNC9] = 0.0;
A10->adMixture[XiNC10] = 0.0;
A10->adMixture[XiHe] = 0.0;

A10->adMixture[XiAr] = 0.0;

/* reset units of measure	*/

lPb_unit = KILOPASCAL ;
lPf_unit = KILOPASCAL ;

lTb_unit = CELSIUS ;

lTf_unit = CELSIUS ; lRhob_unit = KGPERCUBICMETRE ; lRhof_unit = KGPERCUBICMETRE ; lSOS_unit = METREPERSECOND ; lEnthalpy_unit = KJPERKG ; lEntropy_unit = KJPERKGK ;

}












//	File	:	resource.h
//	Description	:	header file used for Windows resource file
//	Version	:	1.7   2002.11.17
//	Author	:	W.B. Peterson
//	Revisions	:	
//Copyright (c) 2002 American Gas Association

//{{NO_DEPENDENCIES}}

//Microsoft Developer Studio generated include file.
//Used by aga10win.rc

//

// Next default values for new objects	
//	
#ifdef APSTUDIO_INVOKED	
#ifndef APSTUDIO_READONLY_SYMBOLS	
#define _APS_NO_MFC	1
#define _APS_NEXT_RESOURCE_VALUE	105
#define _APS_NEXT_COMMAND_VALUE	40003
#define _APS_NEXT_CONTROL_VALUE	1018
#define _APS_NEXT_SYMED_VALUE	101
#endif	
#endif	



//	File	:	aga10win.rc
//	Description	:	resource script for aga10win’s interface
//	Version	:	1.7   2002.11.17
//	Author	:	W.B. Peterson
//	Revisions	:	
//Copyright (c) 2002 American Gas Association

//Microsoft Developer Studio generated resource script.

//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.

//

#define APSTUDIO_HIDDEN_SYMBOLS #include "windows.h"

#undef APSTUDIO_HIDDEN_SYMBOLS #include "aga10win.h"

/////////////////////////////////////////////////////////////////////////////

#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////

// English (U.S.) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32

LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252)
#endif //_WIN32

/////////////////////////////////////////////////////////////////////////////

//

//Icon
//

//Icon with lowest ID value placed first to ensure application icon

//remains consistent on all systems.




AGA10WIN	ICON	DISCARDABLE	"aga10win.ico"

/////////////////////////////////////////////////////////////////////////////

//
// Dialog

//

AGA10WIN DIALOGEX 0, 0, 575, 315

STYLE DS_3DLOOK | WS_MINIMIZEBOX | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CLIENTEDGE | WS_EX_CONTROLPARENT

CAPTION "AGA 10 Example Program"

MENU IDR_MENU1
CLASS "aga10win"
FONT 8, "MS Sans Serif"
BEGIN

EDITTEXT	IDC_XIHE,55,15,44,14,ES_AUTOHSCROLL | WS_GROUP

EDITTEXT	IDC_XIH2,55,33,44,14,ES_AUTOHSCROLL
EDITTEXT	IDC_XIN2,55,51,44,14,ES_AUTOHSCROLL
EDITTEXT	IDC_XICO2,55,69,44,14,ES_AUTOHSCROLL
EDITTEXT	IDC_XIH2S,55,87,44,14,ES_AUTOHSCROLL

EDITTEXT	IDC_XIC1,55,105,44,14,ES_AUTOHSCROLL

EDITTEXT	IDC_XIC2,55,123,44,14,ES_AUTOHSCROLL
EDITTEXT	IDC_XIC3,153,16,44,14,ES_AUTOHSCROLL
EDITTEXT	IDC_XIIC4,153,34,44,14,ES_AUTOHSCROLL
EDITTEXT	IDC_XINC4,153,52,44,14,ES_AUTOHSCROLL

EDITTEXT	IDC_XIIC5,153,70,44,14,ES_AUTOHSCROLL

EDITTEXT	IDC_XINC5,154,89,44,14,ES_AUTOHSCROLL
EDITTEXT	IDC_XINC6,154,107,44,14,ES_AUTOHSCROLL
EDITTEXT	IDC_XINC7,154,125,44,14,ES_AUTOHSCROLL

EDITTEXT	IDC_XINC8,259,16,44,14,ES_AUTOHSCROLL

EDITTEXT	IDC_XINC9,259,34,44,14,ES_AUTOHSCROLL
EDITTEXT	IDC_XINC10,259,52,44,14,ES_AUTOHSCROLL
EDITTEXT	IDC_XIAR,259,70,44,14,ES_AUTOHSCROLL
EDITTEXT	IDC_XIH2O,259,88,44,14,ES_AUTOHSCROLL

EDITTEXT	IDC_XICO,259,106,44,14,ES_AUTOHSCROLL

EDITTEXT	IDC_XIO2,259,124,44,14
PUSHBUTTON	"Clear Mixture",IDC_CLEAR,47,149,60,20
EDITTEXT	IDC_PB,34,196,60,14,ES_AUTOHSCROLL
COMBOBOX	IDC_PB_U,98,197,60,44,CBS_DROPDOWNLIST | CBS_SORT |

WS_VSCROLL | WS_TABSTOP




EDITTEXT	IDC_TB,34,215,60,14,ES_AUTOHSCROLL

COMBOBOX	IDC_TB_U,98,216,60,44,CBS_DROPDOWNLIST | CBS_SORT |
WS_VSCROLL | WS_TABSTOP
EDITTEXT	IDC_PF,191,196,60,14,ES_AUTOHSCROLL
COMBOBOX	IDC_PF_U,254,196,60,44,CBS_DROPDOWNLIST | CBS_SORT |

WS_VSCROLL | WS_TABSTOP

EDITTEXT	IDC_TF,191,215,60,14,ES_AUTOHSCROLL
COMBOBOX	IDC_TF_U,255,215,60,44,CBS_DROPDOWNLIST | CBS_SORT |
WS_VSCROLL | WS_TABSTOP
DEFPUSHBUTTON	"Calculate",IDOK,137,282,50,20

PUSHBUTTON	"Initialize",IDRETRY,61,282,50,20

PUSHBUTTON	"Quit",IDCANCEL,213,282,50,20,WS_GROUP
GROUPBOX	"Composition (Mole Percent)",IDC_STATIC,5,3,322,175
LTEXT	"Helium",IDC_STATIC,21,18,28,8,NOT WS_GROUP
LTEXT	"Hydrogen",IDC_STATIC,21,36,32,8,NOT WS_GROUP

LTEXT	"Nitrogen",IDC_STATIC,21,55,28,8,NOT WS_GROUP

LTEXT	"CO2",IDC_STATIC,22,71,15,8,NOT WS_GROUP
LTEXT	"H2S",IDC_STATIC,22,89,15,8,NOT WS_GROUP
LTEXT	"Methane",IDC_STATIC,22,108,29,8,NOT WS_GROUP
LTEXT	"Ethane",IDC_STATIC,22,126,24,8,NOT WS_GROUP

LTEXT	"Propane",IDC_STATIC,116,18,28,8,NOT WS_GROUP

LTEXT	"i-Butane",IDC_STATIC,116,37,27,8,NOT WS_GROUP
LTEXT	"n-Butane",IDC_STATIC,116,55,30,8,NOT WS_GROUP
LTEXT	"i-Pentane",IDC_STATIC,116,72,31,8,NOT WS_GROUP
LTEXT	"n-Pentane",IDC_STATIC,115,92,34,8,NOT WS_GROUP

LTEXT	"n-Hexane",IDC_STATIC,115,110,32,8,NOT WS_GROUP

LTEXT	"n-Heptane",IDC_STATIC,115,128,34,8,NOT WS_GROUP
LTEXT	"n-Octane",IDC_STATIC,218,19,30,8,NOT WS_GROUP
LTEXT	"n-Nonane",IDC_STATIC,218,37,32,8,NOT WS_GROUP

LTEXT	"n-Decane",IDC_STATIC,218,55,32,8,NOT WS_GROUP

LTEXT	"Argon",IDC_STATIC,219,73,27,8,NOT WS_GROUP
LTEXT	"Water",IDC_STATIC,219,91,23,8,NOT WS_GROUP
LTEXT	"CO",IDC_STATIC,219,109,11,8,NOT WS_GROUP
LTEXT	"O2",IDC_STATIC,219,128,24,8,NOT WS_GROUP

LTEXT	"TOTAL",IDC_STATIC,218,147,24,8,NOT WS_GROUP

LTEXT	"Static",IDC_TOTAL,259,146,44,12,SS_SUNKEN | NOT
WS_GROUP
GROUPBOX	"Gas Temperature and Absolute Pressure",IDC_STATIC,6,182,
322,56

LTEXT	"Pb",IDC_STATIC,12,199,10,8




LTEXT	"Tb",IDC_STATIC,11,217,10,8

LTEXT	"Pf",IDC_STATIC,177,199,8,8
LTEXT	"Tf",IDC_STATIC,176,217,8,8
GROUPBOX	"Calculation Results",IDC_STATIC,334,3,234,306
LTEXT	"Speed of Sound",IDC_STATIC,348,24,52,8

LTEXT	"Zf",IDC_STATIC,348,173,8,8

LTEXT	"Zb",IDC_STATIC,348,158,10,8
LTEXT	"Fpv",IDC_STATIC,348,187,13,8
LTEXT	"Cp (real gas)",IDC_STATIC,348,232,40,8
LTEXT	"Cv (real gas)",IDC_STATIC,348,248,40,8

LTEXT	"Cp/Cv",IDC_STATIC,348,264,22,8

LTEXT	"Isentropic Exponent",IDC_STATIC,348,53,67,8
LTEXT	"Mass Density",IDC_STATIC,348,113,43,8
LTEXT	"Molar Density",IDC_STATIC,348,98,44,8
LTEXT	"Specific Enthalpy",IDC_STATIC,348,68,56,8

LTEXT	"Specific Entropy",IDC_STATIC,348,83,52,8

LTEXT	"Enthalpy (ideal gas)",IDC_STATIC,348,280,62,8
LTEXT	"Cp (ideal gas)",IDC_STATIC,348,216,44,8
LTEXT	"Molar Mass",IDC_STATIC,348,201,37,8
LTEXT	"0",IDC_SOS,422,24,50,8,NOT WS_GROUP

LTEXT	"0",IDC_H,422,69,50,8,NOT WS_GROUP

LTEXT	"0",IDC_S,422,83,50,8,NOT WS_GROUP
LTEXT	"0",IDC_DF,422,99,60,8,NOT WS_GROUP
LTEXT	"0",IDC_RHOF,422,113,55,8,NOT WS_GROUP
LTEXT	"0",IDC_ZB,422,157,50,8,NOT WS_GROUP

LTEXT	"0",IDC_ZF,422,171,50,8,NOT WS_GROUP

LTEXT	"0",IDC_FPV,422,186,50,8,NOT WS_GROUP
LTEXT	"0",IDC_MRX,422,201,50,8,NOT WS_GROUP
LTEXT	"0",IDC_CPI,422,216,50,8,NOT WS_GROUP

LTEXT	"0",IDC_HO,422,280,50,8,NOT WS_GROUP

LTEXT	"0",IDC_CP,422,232,50,8,NOT WS_GROUP
LTEXT	"0",IDC_CV,422,248,50,8,NOT WS_GROUP
LTEXT	"0",IDC_K,422,264,50,8,NOT WS_GROUP
LTEXT	"0",IDC_KAPPA,422,53,50,8,NOT WS_GROUP

LTEXT	"moles/dm3",IDC_STATIC,483,98,32,8

LTEXT	"kJ/kg-K",IDC_STATIC,483,216,26,8
LTEXT	"kJ/kg",IDC_STATIC,483,280,20,8
LTEXT	"RD (ideal gas)",IDC_STATIC,348,128,46,8
LTEXT	"RD (real gas)",IDC_STATIC,348,143,42,8

LTEXT	"0",IDC_RD_IDEAL,422,128,50,8,NOT WS_GROUP




LTEXT	"0",IDC_RD_REAL,422,143,50,8,NOT WS_GROUP

LTEXT	"Press Initialize Button to Begin",IDC_LSTATUS,106,259,
107,8
LTEXT	"kJ/kg-K",IDC_STATIC,483,232,26,8
LTEXT	"kJ/kg-K",IDC_STATIC,483,248,26,8

LTEXT	"C*",IDC_STATIC,348,39,10,8

LTEXT	"0",IDC_CSTAR,422,39,58,8
COMBOBOX	IDC_SOS_U,482,21,80,43,CBS_DROPDOWNLIST | CBS_SORT |
WS_VSCROLL | WS_TABSTOP
COMBOBOX	IDC_RHOF_U,482,111,80,44,CBS_DROPDOWNLIST | CBS_SORT |

WS_VSCROLL | WS_TABSTOP

COMBOBOX	IDC_ENTHALPY_U,482,66,80,40,CBS_DROPDOWNLIST | CBS_SORT |
WS_VSCROLL | WS_TABSTOP
COMBOBOX	IDC_ENTROPY_U,482,82,80,37,CBS_DROPDOWNLIST | CBS_SORT |
WS_VSCROLL | WS_TABSTOP

GROUPBOX	"Current Status",IDC_STATIC,5,247,322,27

PUSHBUTTON	"Normalize",IDC_NORMALIZE,118,149,60,20
END


#ifdef APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE DISCARDABLE

BEGIN "resource.h\0"

END

2 TEXTINCLUDE DISCARDABLE

BEGIN
"#define APSTUDIO_HIDDEN_SYMBOLS\r\n" "#include ""windows.h""\r\n"
"#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" "#include ""aga10win.h""\r\n"
"\0"
END





3 TEXTINCLUDE DISCARDABLE

BEGIN "\r\n" "\0"

END

#endif	// APSTUDIO_INVOKED


/////////////////////////////////////////////////////////////////////////////

//

// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED

GUIDELINES DESIGNINFO DISCARDABLE

BEGIN
"AGA10WIN", DIALOG
BEGIN

LEFTMARGIN, 5 RIGHTMARGIN, 568 BOTTOMMARGIN, 309
END
END
#endif	// APSTUDIO_INVOKED


#ifndef _MAC

/////////////////////////////////////////////////////////////////////////////
//

// Version
//

VS_VERSION_INFO VERSIONINFO FILEVERSION 1,7,0,0 PRODUCTVERSION 1,7,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG

FILEFLAGS 0x21L #else




FILEFLAGS 0x20L #endif

FILEOS 0x40004L
FILETYPE 0x1L FILESUBTYPE 0x0L

BEGIN

BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN

VALUE "Comments", "Post Ballot Version\0"

VALUE "CompanyName", "American Gas Association\0" VALUE "FileDescription", "aga10win\0"
VALUE "FileVersion", "1, 7, 0, 0\0"
VALUE "InternalName", "aga10win\0"

VALUE "LegalCopyright", "Copyright © 2002 American Gas Association\0" VALUE "LegalTrademarks", "\0"

VALUE "OriginalFilename", "aga10win.exe\0" VALUE "PrivateBuild", "\0"

VALUE "ProductName", "aga10win\0" VALUE "ProductVersion", "1, 7, 0, 0\0"
VALUE "SpecialBuild", "2002.11.17 Build\0"
END
END
BLOCK "VarFileInfo"
BEGIN

VALUE "Translation", 0x409, 1200
END
END

#endif	// !_MAC


/////////////////////////////////////////////////////////////////////////////

//

// Menu
//

IDR_MENU1 MENU DISCARDABLE

BEGIN




POPUP "&File"

BEGIN
MENUITEM "&Open...",	CM_FILEOPEN
MENUITEM "&Save...",	CM_FILESAVE
MENUITEM "Save &As...",	CM_FILESAVEAS

MENUITEM "E&xit",	IDCANCEL

END
POPUP "&Help"
BEGIN
MENUITEM "&About",	CM_HELPABOUT

END

END


/////////////////////////////////////////////////////////////////////////////

//

// String Table
//

STRINGTABLE DISCARDABLE

BEGIN

KILOPASCAL	"kilopascals"
MEGAPASCAL	"megapascals"
END

STRINGTABLE DISCARDABLE

BEGIN
PSI	"PSI"
KELVIN	"Kelvin"

CELSIUS	"Celsius"

RANKINE	"Rankine"
FAHRENHEIT	"Fahrenheit"
KGPERCUBICMETRE	"kg per cubic metre"
LBMPERCUBICFOOT	"lbm per cubic foot"

METREPERSECOND	"metres per second"

FOOTPERSECOND	"feet per second"
KJPERKG	"kJ per kg"
BTUPERLBM	"Btu per lbm"
KJPERKGK	"kJ per kg-K"

BTUPERLBMF	"Btu per lbm-F"




END

#endif	// English (U.S.) resources

/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////
//

// Generated from the TEXTINCLUDE 3 resource.

//


/////////////////////////////////////////////////////////////////////////////

#endif	// not APSTUDIO_INVOKED





























