/*
 ****************************************************************************
 *
 *                   "DHRYSTONE" Benchmark Program
 *                   -----------------------------
 *                                                                            
 *  Version:    C, Version 2.0
 *                                                                            
 *  File:       dhry_pack_2.c (part 3 of 3)
 *
 *  Date:       March 3, 1988
 *
 *  Author:     Reinhold P. Weicker
 *
 ****************************************************************************
 */

#include "dhry_glo.h"

#ifndef REG
#define REG			/* REG becomes defined as empty */
#endif				/* i.e. no register variables   */

extern int      Int_Glob;
extern char     Ch_1_Glob;


Proc_6 (Enum_Val_Par, Enum_Ref_Par)	/* executed once */
Enumeration	Enum_Val_Par;		/* Enum_Val_Par == Ident_3 */
Enumeration    *Enum_Ref_Par;		/* Enum_Ref_Par becomes Ident_2 */
{
	*Enum_Ref_Par = Enum_Val_Par;
	if (!Func_3 (Enum_Val_Par))
	 	/*
		 *   then, not executed
		 */
		*Enum_Ref_Par = Ident_4;

	switch (Enum_Val_Par)
	{
	case Ident_1: 
		*Enum_Ref_Par = Ident_1;
		break;
	case Ident_2: 
		if (Int_Glob > 100)
			*Enum_Ref_Par = Ident_1;
		else
			*Enum_Ref_Par = Ident_4;
		break;
	case Ident_3: 			/* executed */
		*Enum_Ref_Par = Ident_2;
		break;
	case Ident_4: 
		break;
	case Ident_5: 
		*Enum_Ref_Par = Ident_3;
		break;
	}
}


Proc_7 (Int_1_Par_Val, Int_2_Par_Val, Int_Par_Ref)	/* executed three times */
One_Fifty	Int_1_Par_Val;
One_Fifty	Int_2_Par_Val;
One_Fifty      *Int_Par_Ref;
/*
 *   first call:      Int_1_Par_Val == 2, Int_2_Par_Val == 3,
 *                    Int_Par_Ref becomes 7
 *   second call:     Int_1_Par_Val == 10, Int_2_Par_Val == 5,
 *                    Int_Par_Ref becomes 17
 *   third call:      Int_1_Par_Val == 6, Int_2_Par_Val == 10,
 *                    Int_Par_Ref becomes 18
 */
{
	One_Fifty	Int_Loc;

	Int_Loc = Int_1_Par_Val + 2;
	*Int_Par_Ref = Int_2_Par_Val + Int_Loc;
}


Proc_8 (Ar_1_Par_Ref, Ar_2_Par_Ref, Int_1_Par_Val, Int_2_Par_Val)/* executed once      */
Array	Ar_1_Par_Ref[];		
Array	Ar_2_Par_Ref[][50];
int     Int_1_Par_Val;				/* Int_Par_Val_1 == 3 */
int     Int_2_Par_Val;				/* Int_Par_Val_2 == 7 */
{
	REG One_Fifty	Int_Index;
	REG One_Fifty 	Int_Loc;

	Int_Loc = Int_1_Par_Val + 5;
	Ar_1_Par_Ref[Int_Loc] = Int_2_Par_Val;
	Ar_1_Par_Ref[Int_Loc + 1] = Ar_1_Par_Ref[Int_Loc];
	Ar_1_Par_Ref[Int_Loc + 30] = Int_Loc;
	for (Int_Index = Int_Loc; Int_Index <= Int_Loc + 1; ++Int_Index)
		Ar_2_Par_Ref[Int_Loc][Int_Index] = Int_Loc;
	Ar_2_Par_Ref[Int_Loc][Int_Loc - 1] += 1;
	Ar_2_Par_Ref[Int_Loc + 20][Int_Loc] = Ar_1_Par_Ref[Int_Loc];
	Int_Glob = 5;
}


Enumeration Func_1 (Ch_1_Par_Val, Ch_2_Par_Val) /* executed three times */
/*
 *   first call:      Ch_1_Par_Val == 'H', Ch_2_Par_Val == 'R'
 *   second call:     Ch_1_Par_Val == 'A', Ch_2_Par_Val == 'C'
 *   third call:      Ch_1_Par_Val == 'B', Ch_2_Par_Val == 'C'
 */
Capital_Letter	Ch_1_Par_Val;
Capital_Letter	Ch_2_Par_Val;
{
	Capital_Letter	Ch_1_Loc;
	Capital_Letter	Ch_2_Loc;

	Ch_1_Loc = Ch_1_Par_Val;
	Ch_2_Loc = Ch_1_Loc;
	if (Ch_2_Loc != Ch_2_Par_Val)
		/*
		 *   then, executed
		 */
		return (Ident_1);
	else				/* not executed */
	{
		Ch_1_Glob = Ch_1_Loc;
		return (Ident_2);
	}
}


Boolean Func_2 (Str_1_Par_Ref, Str_2_Par_Ref)	/* executed once */
/*
 *   Str_1_Par_Ref == "DHRYSTONE PROGRAM, 1'ST STRING"
 *   Str_2_Par_Ref == "DHRYSTONE PROGRAM, 2'ND STRING"
 */
char    Str_1_Par_Ref[31];
char    Str_2_Par_Ref[31];
{
	REG One_Thirty	Int_Loc;
	Capital_Letter	Ch_Loc;

	Int_Loc = 2;
	while (Int_Loc <= 2)		/* loop body executed once */
		if (Func_1 (Str_1_Par_Ref[Int_Loc],
				Str_2_Par_Ref[Int_Loc + 1]) == Ident_1)
		{
			/*
			 *   then, executed
			 */
			Ch_Loc = 'A';
			Int_Loc += 1;
		}
	if (Ch_Loc >= 'W' && Ch_Loc < 'Z')
		/*
		 *   then, not executed
		 */
		Int_Loc = 7;
	if (Ch_Loc == 'R')
		/*
		 *   then, not executed
		 */
		return (true);
	else
	{
		/*
		 *   executed
		 */
		if (strcmp (Str_1_Par_Ref, Str_2_Par_Ref) > 0)
		{
			/*
			 *   then, not executed
			 */
			Int_Loc += 7;
			Int_Glob = Int_Loc;
			return (true);
		}
		else
			/*
			 *   executed
			 */
			return (false);
	}
}


Boolean Func_3 (Enum_Par_Val)			/* executed once */
Enumeration	Enum_Par_Val;			/* Enum_Par_Val == Ident_3 */
{
	Enumeration	Enum_Loc;

	Enum_Loc = Enum_Par_Val;
	if (Enum_Loc == Ident_3)
		/*
		 *   then, executed
		 */
		return (true);
}
