\n"; print &ui_columns_start([ $text{'ports_name'}, $text{'ports_addr'}, $text{'ports_port'}, $text{'ports_opts'}, ], 100); $i = 0; @tds = ( "valign=top", "valign=top", "valign=top" ); @known_opts = ( 'Name', 'Address', 'Port', 'Modifiers', 'Family' ); foreach $p (@ports, { }) { @cols = ( ); foreach $k (@known_opts) { $fk = substr($k, 0, 1); if ($p->{$fk} && !$p->{$k}) { # Using first letter abbreviation only $p->{$k} = $p->{$fk}; delete($p->{$fk}); } } if ($p->{'Addr'}) { # Some systems use 'Addr' instead of 'Address' $p->{'Address'} = $p->{'Addr'}; delete($p->{'Addr'}); } push(@cols, &ui_textbox("name_$i", $p->{'Name'}, 10)); push(@cols, &ui_opt_textbox("addr_$i", $p->{'Address'}, 15, $text{'ports_all'}, $text{'ports_ip'}). "\n". $text{'ports_family'}." ". &ui_select("family_$i", $p->{'Family'}, [ [ '', $text{'default'} ], [ 'inet', $text{'ports_inet'} ], [ 'inet6', $text{'ports_inet6'} ] ])); push(@cols, &ui_opt_textbox("port_$i", $p->{'Port'}, 6, $text{'default'}." (25)")); @mods = ( ); foreach $m (@port_modifier_flags) { push(@mods, &ui_checkbox("mod_$i", $m, $text{'ports_mod_'.$m}, $p->{'Modifiers'} =~ /$m/)); } push(@cols, &ui_grid_table(\@mods, 2)); print &ui_columns_row(\@cols, \@tds); # Hidden field for other settings foreach $k (@known_opts) { delete($p->{$k}); } print &ui_hidden("other_$i", join(",", map { $_."=".$p->{$_} } keys %$p)); $i++; } print &ui_columns_end(); print &ui_form_end([ [ undef, $text{'save'} ] ]); &ui_print_footer("", $text{'index_return'});