function get_datatype_definition($idx, $title, $rowspan = 1, $collate = FALSE)
{
    global $s_coldefs, $tb_strings;
    // preselect values for the form elements
    $name_value = isset($s_coldefs[$idx]['name']) ? $s_coldefs[$idx]['name'] : '';
    $colpos_value = isset($_POST['tb_modcol_pos']) ? $_POST['tb_modcol_pos'] : '';
    $datatype_pre = isset($s_coldefs[$idx]['type']) ? $s_coldefs[$idx]['type'] : NULL;
    $size_value = isset($s_coldefs[$idx]['size']) ? $s_coldefs[$idx]['size'] : '';
    $charset_pre = isset($s_coldefs[$idx]['charset']) ? $s_coldefs[$idx]['charset'] : NULL;
    $collate_pre = isset($s_coldefs[$idx]['collate']) ? $s_coldefs[$idx]['collate'] : NULL;
    $prec_value = isset($s_coldefs[$idx]['prec']) ? $s_coldefs[$idx]['prec'] : '';
    $scale_value = isset($s_coldefs[$idx]['scale']) ? $s_coldefs[$idx]['scale'] : '';
    $stype_value = isset($s_coldefs[$idx]['stype']) ? $s_coldefs[$idx]['stype'] : '';
    $segsize_value = isset($s_coldefs[$idx]['segsize']) ? $s_coldefs[$idx]['segsize'] : '';
    // colspan attribute for the charset cell
    $charspan = $collate == FALSE ? 2 : 1;
    // javascript event-handler to adjust the collation accordingly to the selected charset
    $charset_tags = array();
    if ($collate == TRUE) {
        $form_name = get_form_name($idx);
        $charset_tags = array('onChange' => 'adjustCollation(document.' . $form_name . '.cd_def_charset' . $idx . ', document.' . $form_name . '.cd_def_collate' . $idx . ')');
    }
    $html = "  <tr>\n" . '    <th colspan="9" align="left"><b>' . $title . "</b></th>\n" . "  </tr>\n" . "  <tr>\n" . '    <td rowspan="' . $rowspan . "\" valign=\"top\" height=\"100%\">\n" . "      <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n" . "        <tr>\n" . "          <td>\n" . '            <b>' . $tb_strings['Name'] . "</b><br>\n" . '            ' . get_textfield('cd_def_name' . $idx, 20, 31, $name_value) . "          </td>\n" . "        </tr>\n" . "      </table>\n";
    if ($idx === 'mod') {
        $html .= "      <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" valign=\"bottom\" height=\"100%\">\n" . "        <tr>\n" . "          <td>\n" . '            <b>' . $tb_strings['NewColPos'] . "</b><br>\n" . '            ' . get_textfield('tb_modcol_pos', 4, 4, $colpos_value) . "          </td>\n" . "        </tr>\n" . "      </table>\n";
    }
    $html .= "    </td>\n" . "     <td>\n" . '      <b>' . $tb_strings['Datatype'] . "</b><br>\n" . '      ' . get_selectlist('cd_def_type' . $idx, get_datatypes(SERVER_FAMILY, SERVER_VERSION), $datatype_pre, TRUE) . "    </td>\n" . "    <td>\n" . '      <b>' . $tb_strings['Size'] . "</b><br>\n" . '      ' . get_textfield('cd_def_size' . $idx, 5, 5, $size_value) . "    </td>\n" . '    <td colspan="' . $charspan . "\">\n" . '      <b>' . $tb_strings['Charset'] . "</b><br>\n" . '      ' . get_charset_select('cd_def_charset' . $idx, $charset_pre, TRUE, $charset_tags) . "    </td>\n";
    if ($collate == TRUE) {
        $html .= "    <td>\n" . '      <b>' . $tb_strings['Collation'] . "</b><br>\n" . '      ' . get_collation_select('cd_def_collate' . $idx, $collate_pre, TRUE) . "    </td>\n";
    }
    $html .= "    <td align=\"center\">\n" . '      <b>' . $tb_strings['PrecShort'] . "</b><br>\n" . '      ' . get_textfield('cd_def_prec' . $idx, 2, 2, $prec_value) . "    </td>\n" . "    <td align=\"center\">\n" . '      <b>' . $tb_strings['Scale'] . "</b><br>\n" . '      ' . get_textfield('cd_def_scale' . $idx, 2, 2, $scale_value) . "    </td>\n" . "    <td align=\"center\">\n" . '      <b>' . $tb_strings['Subtype'] . "</b><br>\n" . '      ' . get_textfield('cd_def_stype' . $idx, 3, 3, $stype_value) . "    </td>\n" . "    <td align=\"center\">\n" . '      <b>' . $tb_strings['SegSiShort'] . "</b><br>\n" . '      ' . get_textfield('cd_def_segsize' . $idx, 5, 5, $segsize_value) . "    </td>\n" . "  </tr>\n";
    echo $html;
}
function get_datatype($type, $subtype)
{
    $datatypes = get_datatypes(SERVER_FAMILY, SERVER_VERSION);
    if ($type == 16 && empty($subtype) && !isset($datatypes[16])) {
        return 'INT64';
    }
    if ($subtype == 0 or $subtype == NULL or $type == 261 or $type == 14) {
        return $datatypes[$type];
    } elseif ($subtype == 1) {
        return 'NUMERIC';
    } elseif ($subtype == 2) {
        return 'DECIMAL';
    } else {
        return 'unknown';
    }
}