ftp.nice.ch/pub/next/science/chemistry/WaterC.s.tar.gz#/WaterC/w.c

This is w.c in view mode; [Download] [Up]

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#include "wconfig.h"
#include "w.h"
#include "winclude.h"
#include "wmenu.c"
#include "wengine.c"
#include "wfront.c"

main()                                     
{                            
	int prp, have;
	have = FALSE;
	init();
	prp = 0;
	printf("Equation of State Properties for H2O \n");
                                 
	while(1) {         
	  switch( menu1_select()) {
	    case 't': 
		tripleChanged();
                break;
	    case 'd':
	    	fileInput();
		break;
	    case 'i':
	    	getInitials();
		break;
	    case 'c':
	    	goGo();
		break;
	    case 'o':
	    	defineOutput();
		break;
	    case 's':
	    	satSurface();
		break;
	    case 'u':
	    	selectUnits();
		break;
	    case 'q':
		exit(0);
                break;
          }
	}
}

defineOutput()
{
	char ans[25],*answ;
	answ=ans;
	while(1) {         
	  switch( output_select()) {
	    case '\0':
	      return;
	      break;
	    case 'f':
	      printf("\n Would you like (V)erbose output or assign (C)olumn attributes? (V): ");
	      gets(ans);
	      if (tolower(*answ) == 'c')
	        { nxOutput = YES;
		  getColumns();
		}
	      else
	        { if (incData)
		   printf("\n **Verbose output with incremental data is not an option. No changes made.**\n");
		  else 
		   nxOutput = NO; }
	      break;
	    case 'o':
	      printf("\n Would you like data in (S)hort, (M)edium, or (L)ong length? (M): ");
	      gets(ans);
	      switch(tolower(*answ)) {
	        case 's':
		  outputLength = 0;
		  break;
		case 'm':
		  outputLength = 1;
		  break;
		case 'l':
		  outputLength = 2;
		  break; }
	      break;
	    case 'd':
	      printf("\n Would you like output to the (S)creen or a (F)ile? (S): ");
	      gets(ans);
	      if (tolower(*answ) == 'f')
	        { printf("What file name : ");
		  gets(ans);
		  fors = fopen(answ,"w"); }
	      else 
	        fors = stdout;
	      break; } }
}

fileInput()
{
	char ans[25],*answ;
	answ=ans;
	inFile = NO;
	printf("\n Will this file be Temp/(P)res or Temp/(D)ens data points? (P): ");
	gets(ans);
	if (tolower(*answ) == 'd')
	  dataType = TD;
	else
	  dataType = TP;
	printf("\n What is the file name: ");
	gets(ans);
	if (!(fil1 = fopen(answ,"r")))
	  printf("File not found.\n");
	else
	  { inFile = YES;
	    fscanf(fil1,"%d",&numData);
	    printf("** Please choose output preferences before computing data **\n"); }
}
	

getColumns()
{
	char ans[10],*answ;
	extern int strindex();
	int i,index;
	answ=ans;
	printf("\n You may choose up to eight column attributes: \n Current attribute number assignments are as follow: \n \n");
	for(i=0;i<8;i++)
	  { printf("%s : ",columns[i]);
	    if (attributes[i] == 0)
	      printf(" none \n");
	    else
	      printf("%d \n",attributes[i]); }
	while(1) {
	  printf("\n Choose A-H or <cr> for previous menu: ");
	  gets(ans);
	  switch(tolower(*answ)) {
	    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h':
	      attributeList();
	      index = strindex(columns,ans);
	      gets(ans);
	      if ((atoi(answ) < 1) || (atoi(answ) > 27))
	        printf("Attribute number out of range. \n");
	      else
	        attributes[index] = atoi(answ);
	      break;
	    case '\0':
	      return;
	      break; }
	 }
}

selectUnits()
{
	fixUnits();
	while(1) {         
	  switch( units_select()) {
	    case '\0':
	      return;
	      break;
	    case 't':
	      get_t_units();
	      break;
	    case 'p':
	      get_p_units();
	      break;
	    case 'd':
	      get_d_units();
	      break;
	    case 'e':
	      get_e_units();
	      break;
	   }
	}
}

satSurface()
{
	char ans[10],*answ;
	answ=ans;
	printf("\n Will the saturation surface follow (T)emperature or (P)ressure? (T):  ");
	gets(ans);
	if (tolower(*answ) == 'p')
	  dataType = Pr;
	else
	  dataType = Te;
	getIncrs(1);
}

getIncrs(incrSet)
int incrSet;
{
	char ans[10],*answ;
	answ=ans;
	printf("\n Input inital value: ");
	gets(ans);
	nxOutput = incData = YES;
	if (incrSet == 1)
	  min = current = atof(answ);
	else
	  min2 = current2 = atof(answ);
	printf("%7.3f\n Input final value: ",atof(answ));
	gets(ans);
	if (incrSet == 1)
	  max = atof(answ);
	else
	  max2 = atof(answ);
	printf("%7.3f\n Input incremental value: ",atof(answ));
	gets(ans);
	if (incrSet == 1)
	  incr = atof(answ);
	else
	  incr2 = atof(answ);
	printf("%7.3f\n",atof(answ));
}

getInitials()
{
	char ans[10],*answ;
	answ=ans;
	printf("\n Will these be for Temp/(P)res or Temp/(D)ens? (P):  ");
	gets(ans);
	if (tolower(*answ) == 'd')
	  dataType = TD;
	else
	  dataType = TP;
	switch(initials_menu()) {
	  case 'o':
	    initialType = 0;
	    printf("\n Input temperature value: ");
	    _params_.states[0] = atof(gets(answ));
	    nxOutput = incData = NO;
	    printf("%7.3f\n Input ",_params_.states[0]);
	    if (dataType)
	      printf("pressure value: ");
	    else
	      printf("density value: ");
	    gets(ans);
	    if (dataType)
	      _params_.states[1] = atof(answ);
	    else
	      _params_.states[2] = atof(answ);
	    printf("%7.3f\n",atof(answ));
	    break;
	  case 's':
	    printf("\n Would you like to increment over 1)Temperature or 2)");
	    if (dataType)
	      printf("Pressure? (1): ");
	    else
	      printf("Density? (1): ");
	    gets(ans);
	    if (tolower(*answ) == '2')
	      { printf("\n Input temperature value: ");
	        _params_.states[0] = atof(gets(answ));
		printf("%7.3f\n",_params_.states[0]);
		initialType = 1;
		getIncrs(1); }
	    else
	      { printf("\n Input ");
	        if (dataType)
	          printf("pressure value: ");
	        else
	          printf("density value: ");
	        gets(ans);
	        if (dataType)
	          _params_.states[1] = atof(answ);
	        else
	          _params_.states[2] = atof(answ);
	        printf("%7.3f\n",atof(answ));
		initialType = 2;
		getIncrs(1); }
	    break;
	  default:
	    initialType = 3;
	    printf("\n For temperature range: \n");
	    getIncrs(1);
	    printf("\n For ");
	    if (dataType)
	      printf("pressure range: \n");
	    else
	      printf("density range: \n");
	    getIncrs(2);
	    break;
	}
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.