| <?php // php pages made with phpMyBuilder <http://kyber.dk/phpMyBuilder> ?> | 
 | <?php | 
 | 	// (C) Copyright 2001 | 
 | 	// Murray Jensen <Murray.Jensen@csiro.au> | 
 | 	// CSIRO Manufacturing Science and Technology, Preston Lab | 
 |  | 
 | 	// contains mysql user id and password - keep secret | 
 | 	require("config.php"); | 
 |  | 
 | 	if (isset($_REQUEST['logout'])) { | 
 | 		Header("status: 401 Unauthorized"); | 
 | 		Header("HTTP/1.0 401 Unauthorized"); | 
 | 		Header("WWW-authenticate: basic realm=\"$bddb_label\""); | 
 |  | 
 | 		echo "<html><head><title>" . | 
 | 			"Access to '$bddb_label' Denied" . | 
 | 			"</title></head>\n"; | 
 | 		echo "<body bgcolor=#ffffff><br></br><br></br><center><h1>" . | 
 | 			"You must be an Authorised User " . | 
 | 			"to access the '$bddb_label'" . | 
 | 			"</h1>\n</center></body></html>\n"; | 
 | 		exit; | 
 | 	} | 
 |  | 
 | 	// contents of the various enumerated types - if first item is | 
 | 	// empty ('') then the enum is allowed to be null (ie "not null" | 
 | 	// is not set on the column) | 
 |  | 
 | 	// all column names in the database table | 
 | 	$columns = array( | 
 | 		'serno','ethaddr','date','batch', | 
 | 		'type','rev','location','comments', | 
 | 		'sdram0','sdram1','sdram2','sdram3', | 
 | 		'flash0','flash1','flash2','flash3', | 
 | 		'zbt0','zbt1','zbt2','zbt3','zbt4','zbt5','zbt6','zbt7', | 
 | 		'zbt8','zbt9','zbta','zbtb','zbtc','zbtd','zbte','zbtf', | 
 | 		'xlxtyp0','xlxtyp1','xlxtyp2','xlxtyp3', | 
 | 		'xlxspd0','xlxspd1','xlxspd2','xlxspd3', | 
 | 		'xlxtmp0','xlxtmp1','xlxtmp2','xlxtmp3', | 
 | 		'xlxgrd0','xlxgrd1','xlxgrd2','xlxgrd3', | 
 | 		'cputyp','cpuspd','cpmspd','busspd', | 
 | 		'hstype','hschin','hschout' | 
 | 	); | 
 |  | 
 | 	// board type | 
 | 	$type_vals = array('IO','CLP','DSP','INPUT','ALT-INPUT','DISPLAY'); | 
 |  | 
 | 	// Xilinx fpga types | 
 | 	$xlxtyp_vals = array('','XCV300E','XCV400E','XCV600E','XC2V2000','XC2V3000','XC2V4000','XC2V6000','XC2VP2','XC2VP4','XC2VP7','XC2VP20','XC2VP30','XC2VP50','XC4VFX20','XC4VFX40','XC4VFX60','XC4VFX100','XC4VFX140'); | 
 |  | 
 | 	// Xilinx fpga speeds | 
 | 	$xlxspd_vals = array('','6','7','8','4','5','9','10','11','12'); | 
 |  | 
 | 	// Xilinx fpga temperatures (commercial or industrial) | 
 | 	$xlxtmp_vals = array('','COM','IND'); | 
 |  | 
 | 	// Xilinx fpga grades (normal or engineering sample) | 
 | 	$xlxgrd_vals = array('','NORMAL','ENGSAMP'); | 
 |  | 
 | 	// CPU types | 
 | 	$cputyp_vals = array('','MPC8260(HIP3)','MPC8260A(HIP4)','MPC8280(HIP7)','MPC8560'); | 
 |  | 
 | 	// CPU/BUS/CPM clock speeds  | 
 | 	$clk_vals = array('','33MHZ','66MHZ','100MHZ','133MHZ','166MHZ','200MHZ','233MHZ','266MHZ','300MHZ','333MHZ','366MHZ','400MHZ','433MHZ','466MHZ','500MHZ','533MHZ','566MHZ','600MHZ','633MHZ','666MHZ','700MHZ','733MHZ','766MHZ','800MHZ','833MHZ','866MHZ','900MHZ','933MHZ','966MHZ','1000MHZ','1033MHZ','1066MHZ','1100MHZ','1133MHZ','1166MHZ','1200MHZ','1233MHZ','1266MHZ','1300MHZ','1333MHZ'); | 
 |  | 
 | 	// sdram sizes (nbits array is for eeprom config file) | 
 | 	$sdram_vals = array('','32M','64M','128M','256M','512M','1G','2G','4G'); | 
 | 	$sdram_nbits = array(0,25,26,27,28,29,30,31,32); | 
 |  | 
 | 	// flash sizes (nbits array is for eeprom config file) | 
 | 	$flash_vals = array('','4M','8M','16M','32M','64M','128M','256M','512M','1G'); | 
 | 	$flash_nbits = array(0,22,23,24,25,26,27,28,29,30); | 
 |  | 
 | 	// zbt ram sizes (nbits array is for write into eeprom config file) | 
 | 	$zbt_vals = array('','512K','1M','2M','4M','8M','16M'); | 
 | 	$zbt_nbits = array(0,19,20,21,22,23,24); | 
 |  | 
 | 	// high-speed serial attributes | 
 | 	$hstype_vals = array('','AMCC-S2064A','Xilinx-Rockets'); | 
 | 	$hschin_vals = array('0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16'); | 
 | 	$hschout_vals = array('0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16'); | 
 |  | 
 | 	// value filters - used when outputting html | 
 | 	function rev_filter($num) { | 
 | 		if ($num == 0) | 
 | 			return "001"; | 
 | 		else | 
 | 			return sprintf("%03d", $num); | 
 | 	} | 
 |  | 
 | 	function text_filter($str) { | 
 | 		return urldecode($str); | 
 | 	} | 
 |  | 
 | 	mt_srand(time() | getmypid()); | 
 |  | 
 | 	// set up MySQL connection | 
 | 	mysql_connect("", $mysql_user, $mysql_pw) || die("cannot connect"); | 
 | 	mysql_select_db($mysql_db) || die("cannot select db"); | 
 |  | 
 | 	// page header | 
 | 	function pg_head($title) | 
 | 	{ | 
 | 		echo "<html>\n<head>\n"; | 
 | 		echo "<link rel=stylesheet href=\"bddb.css\" type=\"text/css\" title=\"style sheet\"></link>\n"; | 
 | 		echo "<title>$title</title>\n"; | 
 | 		echo "</head>\n"; | 
 | 		echo "<body>\n"; | 
 | 		echo "<center><h1>$title</h1></center>\n"; | 
 | 		echo "<hr></hr>\n"; | 
 | 	} | 
 |  | 
 | 	// page footer | 
 | 	function pg_foot() | 
 | 	{ | 
 | 		echo "<hr></hr>\n"; | 
 | 		echo "<table width=\"100%\"><tr><td align=left>\n<address>" . | 
 | 			"If you have any problems, email " . | 
 | 			"<a href=\"mailto:Murray.Jensen@csiro.au\">" . | 
 | 			"Murray Jensen" . | 
 | 			"</a></address>\n" . | 
 | 			"</td><td align=right>\n" . | 
 | 			"<a href=\"index.php?logout=true\">logout</a>\n" . | 
 | 			"</td></tr></table>\n"; | 
 | 		echo "<p><small><i>Made with " . | 
 | 		    "<a href=\"http://kyber.dk/phpMyBuilder/\">" . | 
 | 		    "Kyber phpMyBuilder</a></i></small></p>\n"; | 
 | 		echo "</body>\n"; | 
 | 		echo "</html>\n"; | 
 | 	} | 
 |  | 
 | 	// some support functions | 
 |  | 
 | 	if (!function_exists('array_search')) { | 
 |  | 
 | 		function array_search($needle, $haystack, $strict = false) { | 
 |  | 
 | 			if (is_array($haystack) && count($haystack)) { | 
 |  | 
 | 				$ntype = gettype($needle); | 
 |  | 
 | 				foreach ($haystack as $key => $value) { | 
 |  | 
 | 					if ($value == $needle && (!$strict || | 
 | 					    gettype($value) == $ntype)) | 
 | 						return $key; | 
 | 				} | 
 | 			} | 
 |  | 
 | 			return false; | 
 | 		} | 
 | 	} | 
 |  | 
 | 	if (!function_exists('in_array')) { | 
 |  | 
 | 		function in_array($needle, $haystack, $strict = false) { | 
 |  | 
 | 			if (is_array($haystack) && count($haystack)) { | 
 |  | 
 | 				$ntype = gettype($needle); | 
 |  | 
 | 				foreach ($haystack as $key => $value) { | 
 |  | 
 | 					if ($value == $needle && (!$strict || | 
 | 					    gettype($value) == $ntype)) | 
 | 						return true; | 
 | 				} | 
 | 			} | 
 |  | 
 | 			return false; | 
 | 		} | 
 | 	} | 
 |  | 
 | 	function key_in_array($key, $array) { | 
 | 		return in_array($key, array_keys($array), true); | 
 | 	} | 
 |  | 
 | 	function enum_to_index($name, $vals) { | 
 | 		$index = array_search($GLOBALS[$name], $vals); | 
 | 		if ($vals[0] != '') | 
 | 		        $index++; | 
 | 		return $index; | 
 | 	} | 
 |  | 
 | 	// fetch a value from an array - return empty string is not present | 
 | 	function get_key_value($key, $array) { | 
 | 		if (key_in_array($key, $array)) | 
 | 			return $array[$key]; | 
 | 		else | 
 | 			return ''; | 
 | 	} | 
 |  | 
 | 	function fprintf() { | 
 | 		$n = func_num_args(); | 
 | 		if ($n < 2) | 
 | 			return FALSE; | 
 | 		$a = func_get_args(); | 
 | 		$fp = array_shift($a); | 
 | 		$x = "\$s = sprintf"; | 
 | 		$sep = '('; | 
 | 		foreach ($a as $z) { | 
 | 			$x .= "$sep'$z'"; | 
 | 			$sep = ','; | 
 | 		} | 
 | 		$x .= ');'; | 
 | 		eval($x); | 
 | 		$l = strlen($s); | 
 | 		$r = fwrite($fp, $s, $l); | 
 | 		if ($r != $l) | 
 | 			return FALSE; | 
 | 		else | 
 | 			return TRUE; | 
 | 	} | 
 |  | 
 | 	// functions to display (print) a database table and its columns | 
 |  | 
 | 	function begin_table($ncols) { | 
 | 		global $table_ncols; | 
 | 		$table_ncols = $ncols; | 
 | 		echo "<table align=center width=\"100%\"" | 
 | 			. " border=1 cellpadding=4 cols=$table_ncols>\n"; | 
 | 	} | 
 |  | 
 | 	function begin_field($name, $span = 0) { | 
 | 		global $table_ncols; | 
 | 		echo "<tr valign=top>\n"; | 
 | 		echo "\t<th align=center>$name</th>\n"; | 
 | 		if ($span <= 0) | 
 | 			$span = $table_ncols - 1; | 
 | 		if ($span > 1) | 
 | 			echo "\t<td colspan=$span>\n"; | 
 | 		else | 
 | 			echo "\t<td>\n"; | 
 | 	} | 
 |  | 
 | 	function cont_field($span = 1) { | 
 | 		echo "\t</td>\n"; | 
 | 		if ($span > 1) | 
 | 			echo "\t<td colspan=$span>\n"; | 
 | 		else | 
 | 			echo "\t<td>\n"; | 
 | 	} | 
 |  | 
 | 	function end_field() { | 
 | 		echo "\t</td>\n"; | 
 | 		echo "</tr>\n"; | 
 | 	} | 
 |  | 
 | 	function end_table() { | 
 | 		echo "</table>\n"; | 
 | 	} | 
 |  | 
 | 	function print_field($name, $array, $size = 0, $filt='') { | 
 |  | 
 | 		begin_field($name); | 
 |  | 
 | 		if (key_in_array($name, $array)) | 
 | 			$value = $array[$name]; | 
 | 		else | 
 | 			$value = ''; | 
 |  | 
 | 		if ($filt != '') | 
 | 			$value = $filt($value); | 
 |  | 
 | 		echo "\t\t<input name=$name value=\"$value\""; | 
 | 		if ($size > 0) | 
 | 			echo " size=$size maxlength=$size"; | 
 | 		echo "></input>\n"; | 
 |  | 
 | 		end_field(); | 
 | 	} | 
 |  | 
 | 	function print_field_multiline($name, $array, $cols, $rows, $filt='') { | 
 |  | 
 | 		begin_field($name); | 
 |  | 
 | 		if (key_in_array($name, $array)) | 
 | 			$value = $array[$name]; | 
 | 		else | 
 | 			$value = ''; | 
 |  | 
 | 		if ($filt != '') | 
 | 			$value = $filt($value); | 
 |  | 
 | 		echo "\t\t<textarea name=$name " . | 
 | 			"cols=$cols rows=$rows wrap=off>\n"; | 
 | 		echo "$value"; | 
 | 		echo "</textarea>\n"; | 
 |  | 
 | 		end_field(); | 
 | 	} | 
 |  | 
 | 	// print a mysql ENUM as an html RADIO INPUT | 
 | 	function print_enum($name, $array, $vals, $def = -1) { | 
 |  | 
 | 		begin_field($name); | 
 |  | 
 | 		if (key_in_array($name, $array)) | 
 | 			$chk = array_search($array[$name], $vals, FALSE); | 
 | 		else | 
 | 			$chk = $def; | 
 |  | 
 | 		$nval = count($vals); | 
 |  | 
 | 		for ($i = 0; $i < $nval; $i++) { | 
 |  | 
 | 			$val = $vals[$i]; | 
 | 			if ($val == '') | 
 | 				$pval = "none"; | 
 | 			else | 
 | 				$pval = "$val"; | 
 |  | 
 | 			printf("\t\t<input type=radio name=$name" | 
 | 				. " value=\"$val\"%s>$pval</input>\n", | 
 | 				$i == $chk ? " checked" : ""); | 
 | 		} | 
 |  | 
 | 		end_field(); | 
 | 	} | 
 |  | 
 | 	// print a mysql ENUM as an html SELECT INPUT | 
 | 	function print_enum_select($name, $array, $vals, $def = -1) { | 
 |  | 
 | 		begin_field($name); | 
 |  | 
 | 		echo "\t\t<select name=$name>\n"; | 
 |  | 
 | 		if (key_in_array($name, $array)) | 
 | 			$chk = array_search($array[$name], $vals, FALSE); | 
 | 		else | 
 | 			$chk = $def; | 
 |  | 
 | 		$nval = count($vals); | 
 |  | 
 | 		for ($i = 0; $i < $nval; $i++) { | 
 |  | 
 | 			$val = $vals[$i]; | 
 | 			if ($val == '') | 
 | 				$pval = "none"; | 
 | 			else | 
 | 				$pval = "$val"; | 
 |  | 
 | 			printf("\t\t\t<option " . | 
 | 				"value=\"%s\"%s>%s</option>\n", | 
 | 				$val, $i == $chk ? " selected" : "", $pval); | 
 | 		} | 
 |  | 
 | 		echo "\t\t</select>\n"; | 
 |  | 
 | 		end_field(); | 
 | 	} | 
 |  | 
 | 	// print a group of mysql ENUMs (e.g. name0,name1,...) as an html SELECT | 
 | 	function print_enum_multi($base, $array, $vals, $cnt, $defs, $grp = 0) { | 
 |  | 
 | 		global $table_ncols; | 
 |  | 
 | 		if ($grp <= 0) | 
 | 			$grp = $cnt; | 
 | 		$ncell = $cnt / $grp; | 
 | 		$span = ($table_ncols - 1) / $ncell; | 
 |  | 
 | 		begin_field($base, $span); | 
 |  | 
 | 		$nval = count($vals); | 
 |  | 
 | 		for ($i = 0; $i < $cnt; $i++) { | 
 |  | 
 | 			if ($i > 0 && ($i % $grp) == 0) | 
 | 				cont_field($span); | 
 |  | 
 | 			$name = sprintf("%s%x", $base, $i); | 
 |  | 
 | 			echo "\t\t<select name=$name>\n"; | 
 |  | 
 | 			if (key_in_array($name, $array)) | 
 | 				$ai = array_search($array[$name], $vals, FALSE); | 
 | 			else { | 
 | 				if (key_in_array($i, $defs)) | 
 | 					$ai = $defs[$i]; | 
 | 				else | 
 | 					$ai = 0; | 
 | 			} | 
 |  | 
 | 			for ($j = 0; $j < $nval; $j++) { | 
 |  | 
 | 				$val = $vals[$j]; | 
 | 				if ($val == '') | 
 | 					$pval = " "; | 
 | 				else | 
 | 					$pval = "$val"; | 
 |  | 
 | 				printf("\t\t\t<option " . | 
 | 					"value=\"%s\"%s>%s</option>\n", | 
 | 					$val, | 
 | 					$j == $ai ? " selected" : "", | 
 | 					$pval); | 
 | 			} | 
 |  | 
 | 			echo "\t\t</select>\n"; | 
 | 		} | 
 |  | 
 | 		end_field(); | 
 | 	} | 
 |  | 
 | 	// functions to handle the form input | 
 |  | 
 | 	// fetch all the parts of an "enum_multi" into a string suitable | 
 | 	// for a MySQL query | 
 | 	function gather_enum_multi_query($base, $cnt) { | 
 |  | 
 | 		$retval = ''; | 
 |  | 
 | 		for ($i = 0; $i < $cnt; $i++) { | 
 |  | 
 | 			$name = sprintf("%s%x", $base, $i); | 
 |  | 
 | 			if (isset($_REQUEST[$name])) { | 
 | 				$retval .= sprintf(", %s='%s'", | 
 | 					$name, $_REQUEST[$name]); | 
 | 			} | 
 | 		} | 
 |  | 
 | 		return $retval; | 
 | 	} | 
 |  | 
 | 	// fetch all the parts of an "enum_multi" into a string suitable | 
 | 	// for a display e.g. in an html table cell | 
 | 	function gather_enum_multi_print($base, $cnt, $array) { | 
 |  | 
 | 		$retval = ''; | 
 |  | 
 | 		for ($i = 0; $i < $cnt; $i++) { | 
 |  | 
 | 			$name = sprintf("%s%x", $base, $i); | 
 |  | 
 | 			if ($array[$name] != '') { | 
 | 				if ($retval != '') | 
 | 					$retval .= ','; | 
 | 				$retval .= $array[$name]; | 
 | 			} | 
 | 		} | 
 |  | 
 | 		return $retval; | 
 | 	} | 
 |  | 
 | 	// fetch all the parts of an "enum_multi" into a string suitable | 
 | 	// for writing to the eeprom data file | 
 | 	function gather_enum_multi_write($base, $cnt, $vals, $xfrm = array()) { | 
 |  | 
 | 		$retval = ''; | 
 |  | 
 | 		for ($i = 0; $i < $cnt; $i++) { | 
 |  | 
 | 			$name = sprintf("%s%x", $base, $i); | 
 |  | 
 | 			if ($GLOBALS[$name] != '') { | 
 | 				if ($retval != '') | 
 | 					$retval .= ','; | 
 | 				$index = enum_to_index($name, $vals); | 
 | 				if ($xfrm != array()) | 
 | 					$retval .= $xfrm[$index]; | 
 | 				else | 
 | 					$retval .= $index; | 
 | 			} | 
 | 		} | 
 |  | 
 | 		return $retval; | 
 | 	} | 
 |  | 
 | 	// count how many parts of an "enum_multi" are actually set | 
 | 	function count_enum_multi($base, $cnt) { | 
 |  | 
 | 		$retval = 0; | 
 |  | 
 | 		for ($i = 0; $i < $cnt; $i++) { | 
 |  | 
 | 			$name = sprintf("%s%x", $base, $i); | 
 |  | 
 | 			if (isset($_REQUEST[$name])) | 
 | 				$retval++; | 
 | 		} | 
 |  | 
 | 		return $retval; | 
 | 	} | 
 |  | 
 | 	// ethernet address functions | 
 |  | 
 | 	// generate a (possibly not unique) random vendor ethernet address | 
 | 	// (setting bit 6 in the ethernet address - motorola wise i.e. bit 0 | 
 | 	// is the most significant bit - means it is not an assigned ethernet | 
 | 	// address - it is a "locally administered" address). Also, make sure | 
 | 	// it is NOT a multicast ethernet address (by setting bit 7 to 0). | 
 | 	// e.g. the first byte of all ethernet addresses generated here will | 
 | 	// have 2 in the bottom two bits (incidentally, these are the first | 
 | 	// two bits transmitted on the wire, since the octets in ethernet | 
 | 	// addresses are transmitted LSB first). | 
 |  | 
 | 	function gen_eth_addr($serno) { | 
 |  | 
 | 		$ethaddr_hgh = (mt_rand(0, 65535) & 0xfeff) | 0x0200; | 
 | 		$ethaddr_mid = mt_rand(0, 65535); | 
 | 		$ethaddr_low = mt_rand(0, 65535); | 
 |  | 
 | 		return sprintf("%02lx:%02lx:%02lx:%02lx:%02lx:%02lx", | 
 | 			$ethaddr_hgh >> 8, $ethaddr_hgh & 0xff, | 
 | 			$ethaddr_mid >> 8, $ethaddr_mid & 0xff, | 
 | 			$ethaddr_low >> 8, $ethaddr_low & 0xff); | 
 | 	} | 
 |  | 
 | 	// check that an ethernet address is valid | 
 | 	function eth_addr_is_valid($ethaddr) { | 
 |  | 
 | 		$ethbytes = split(':', $ethaddr); | 
 |  | 
 | 		if (count($ethbytes) != 6) | 
 | 			return FALSE; | 
 |  | 
 | 		for ($i = 0; $i < 6; $i++) { | 
 | 			$ethbyte = $ethbytes[$i]; | 
 | 			if (!ereg('^[0-9a-f][0-9a-f]$', $ethbyte)) | 
 | 				return FALSE; | 
 | 		} | 
 |  | 
 | 		return TRUE; | 
 | 	} | 
 |  | 
 | 	// write a simple eeprom configuration file | 
 | 	function write_eeprom_cfg_file() { | 
 |  | 
 | 		global $sernos, $nsernos, $bddb_cfgdir, $numerrs, $cfgerrs; | 
 | 		global $date, $batch, $type_vals, $rev; | 
 | 		global $sdram_vals, $sdram_nbits; | 
 | 		global $flash_vals, $flash_nbits; | 
 | 		global $zbt_vals, $zbt_nbits; | 
 | 		global $xlxtyp_vals, $xlxspd_vals, $xlxtmp_vals, $xlxgrd_vals; | 
 | 		global $cputyp, $cputyp_vals, $clk_vals; | 
 | 		global $hstype, $hstype_vals, $hschin, $hschout; | 
 |  | 
 | 		$numerrs = 0; | 
 | 		$cfgerrs = array(); | 
 |  | 
 | 		for ($i = 0; $i < $nsernos; $i++) { | 
 |  | 
 | 			$serno = sprintf("%010d", $sernos[$i]); | 
 |  | 
 | 			$wfp = @fopen($bddb_cfgdir . "/$serno.cfg", "w"); | 
 | 			if (!$wfp) { | 
 | 				$cfgerrs[$i] = 'file create fail'; | 
 | 				$numerrs++; | 
 | 				continue; | 
 | 			} | 
 | 			set_file_buffer($wfp, 0); | 
 |  | 
 | 			if (!fprintf($wfp, "serno=%d\n", $sernos[$i])) { | 
 | 				$cfgerrs[$i] = 'cfg wr fail (serno)'; | 
 | 				fclose($wfp); | 
 | 				$numerrs++; | 
 | 				continue; | 
 | 			} | 
 |  | 
 | 			if (!fprintf($wfp, "date=%s\n", $date)) { | 
 | 				$cfgerrs[$i] = 'cfg wr fail (date)'; | 
 | 				fclose($wfp); | 
 | 				$numerrs++; | 
 | 				continue; | 
 | 			} | 
 |  | 
 | 			if ($batch != '') { | 
 | 				if (!fprintf($wfp, "batch=%s\n", $batch)) { | 
 | 					$cfgerrs[$i] = 'cfg wr fail (batch)'; | 
 | 					fclose($wfp); | 
 | 					$numerrs++; | 
 | 					continue; | 
 | 				} | 
 | 			} | 
 |  | 
 | 			$typei = enum_to_index("type", $type_vals); | 
 | 			if (!fprintf($wfp, "type=%d\n", $typei)) { | 
 | 				$cfgerrs[$i] = 'cfg wr fail (type)'; | 
 | 				fclose($wfp); | 
 | 				$numerrs++; | 
 | 				continue; | 
 | 			} | 
 |  | 
 | 			if (!fprintf($wfp, "rev=%d\n", $rev)) { | 
 | 				$cfgerrs[$i] = 'cfg wr fail (rev)'; | 
 | 				fclose($wfp); | 
 | 				$numerrs++; | 
 | 				continue; | 
 | 			} | 
 |  | 
 | 			$s = gather_enum_multi_write("sdram", 4, | 
 | 				$sdram_vals, $sdram_nbits); | 
 | 			if ($s != '') { | 
 | 				$b = fprintf($wfp, "sdram=%s\n", $s); | 
 | 				if (!$b) { | 
 | 					$cfgerrs[$i] = 'cfg wr fail (sdram)'; | 
 | 					fclose($wfp); | 
 | 					$numerrs++; | 
 | 					continue; | 
 | 				} | 
 | 			} | 
 |  | 
 | 			$s = gather_enum_multi_write("flash", 4, | 
 | 				$flash_vals, $flash_nbits); | 
 | 			if ($s != '') { | 
 | 				$b = fprintf($wfp, "flash=%s\n", $s); | 
 | 				if (!$b) { | 
 | 					$cfgerrs[$i] = 'cfg wr fail (flash)'; | 
 | 					fclose($wfp); | 
 | 					$numerrs++; | 
 | 					continue; | 
 | 				} | 
 | 			} | 
 |  | 
 | 			$s = gather_enum_multi_write("zbt", 16, | 
 | 				$zbt_vals, $zbt_nbits); | 
 | 			if ($s != '') { | 
 | 				$b = fprintf($wfp, "zbt=%s\n", $s); | 
 | 				if (!$b) { | 
 | 					$cfgerrs[$i] = 'cfg wr fail (zbt)'; | 
 | 					fclose($wfp); | 
 | 					$numerrs++; | 
 | 					continue; | 
 | 				} | 
 | 			} | 
 |  | 
 | 			$s = gather_enum_multi_write("xlxtyp", 4, $xlxtyp_vals); | 
 | 			if ($s != '') { | 
 | 				$b = fprintf($wfp, "xlxtyp=%s\n", $s); | 
 | 				if (!$b) { | 
 | 					$cfgerrs[$i] = 'cfg wr fail (xlxtyp)'; | 
 | 					fclose($wfp); | 
 | 					$numerrs++; | 
 | 					continue; | 
 | 				} | 
 | 			} | 
 |  | 
 | 			$s = gather_enum_multi_write("xlxspd", 4, $xlxspd_vals); | 
 | 			if ($s != '') { | 
 | 				$b = fprintf($wfp, "xlxspd=%s\n", $s); | 
 | 				if (!$b) { | 
 | 					$cfgerrs[$i] = 'cfg wr fail (xlxspd)'; | 
 | 					fclose($wfp); | 
 | 					$numerrs++; | 
 | 					continue; | 
 | 				} | 
 | 			} | 
 |  | 
 | 			$s = gather_enum_multi_write("xlxtmp", 4, $xlxtmp_vals); | 
 | 			if ($s != '') { | 
 | 				$b = fprintf($wfp, "xlxtmp=%s\n", $s); | 
 | 				if (!$b) { | 
 | 					$cfgerrs[$i] = 'cfg wr fail (xlxtmp)'; | 
 | 					fclose($wfp); | 
 | 					$numerrs++; | 
 | 					continue; | 
 | 				} | 
 | 			} | 
 |  | 
 | 			$s = gather_enum_multi_write("xlxgrd", 4, $xlxgrd_vals); | 
 | 			if ($s != '') { | 
 | 				$b = fprintf($wfp, "xlxgrd=%s\n", $s); | 
 | 				if (!$b) { | 
 | 					$cfgerrs[$i] = 'cfg wr fail (xlxgrd)'; | 
 | 					fclose($wfp); | 
 | 					$numerrs++; | 
 | 					continue; | 
 | 				} | 
 | 			} | 
 |  | 
 | 			if ($cputyp != '') { | 
 | 				$cputypi = enum_to_index("cputyp",$cputyp_vals); | 
 | 				$cpuspdi = enum_to_index("cpuspd", $clk_vals); | 
 | 				$busspdi = enum_to_index("busspd", $clk_vals); | 
 | 				$cpmspdi = enum_to_index("cpmspd", $clk_vals); | 
 | 				$b = fprintf($wfp, "cputyp=%d\ncpuspd=%d\n" . | 
 | 					"busspd=%d\ncpmspd=%d\n", | 
 | 					$cputypi, $cpuspdi, $busspdi, $cpmspdi); | 
 | 				if (!$b) { | 
 | 					$cfgerrs[$i] = 'cfg wr fail (cputyp)'; | 
 | 					fclose($wfp); | 
 | 					$numerrs++; | 
 | 					continue; | 
 | 				} | 
 | 			} | 
 |  | 
 | 			if ($hstype != '') { | 
 | 				$hstypei = enum_to_index("hstype",$hstype_vals); | 
 | 				$b = fprintf($wfp, "hstype=%d\n" . | 
 | 					"hschin=%s\nhschout=%s\n", | 
 | 					$hstypei, $hschin, $hschout); | 
 | 				if (!$b) { | 
 | 					$cfgerrs[$i] = 'cfg wr fail (hstype)'; | 
 | 					fclose($wfp); | 
 | 					$numerrs++; | 
 | 					continue; | 
 | 				} | 
 | 			} | 
 |  | 
 | 			if (!fclose($wfp)) { | 
 | 				$cfgerrs[$i] = 'file cls fail'; | 
 | 				$numerrs++; | 
 | 			} | 
 | 		} | 
 |  | 
 | 		return $numerrs; | 
 | 	} | 
 | ?> |