diff --git a/contrib/MergeHelper.sh b/contrib/MergeHelper.sh deleted file mode 100644 index db47ea536..000000000 --- a/contrib/MergeHelper.sh +++ /dev/null @@ -1,243 +0,0 @@ -#!/bin/sh -# This code is part of MaNGOS. Contributor & Copyright details are in AUTHORS/THANKS. -# This program is free software licensed under GPL version 2 -# Please see the included COPYING for full text */ - -############################################################################### -# -# Simple helper script to help merging branches & pull requests -# -############################################################################### - -#internal use -script_file_name="MergeHelper.sh" -config_file_name="_MergeHelper.config" - -base_dir=${0%[/\\]*} -config_file=$base_dir/$config_file_name - -DEBUG=0 - -no_ff_merge="--no-ff" - -# ############################################################################# -# Helper functions - -# ############################################################################# -# Re(create) the config file -function create_config { -cat > $config_file << EOF -############################################################################### -# This is the config file for the '$script_file_name' script -# -# The format to automatically merge (and fetch) remote branches is -# repo/branch -# repo2/branch2 -# -# The format to automatically merge local branches is -# branch1 -# branch2 -# -# The format to automatically merge (and fetch) pull requests is -# remote#PullRequestNumber1 -# remote#PullRequestNumber2 -# -############################################################################### - -# Which remote branches should be fetched and merged? -# Format to automatically fetch from a repo and merge the branch: -# Example: -#origin/master - - -# Which local branches should be merged? -# Format to automatically merge a local branch: -#some_cool_feature - - -# Which pull requests shall be merged from a repo? -# Format to automatically fetch and merge a pull request: -# Example: -#origin#17 - -# Enjoy using the tool -EOF -} - -# ############################################################################# -# Display help -function display_help { - echo - echo "Welcome to the MaNGOS merge helper $script_file_name" - echo - echo "Run this tool from a bash compatible terminal (on windows like Git Bash)" - echo - echo "To configure edit the file \"$config_file\"" - echo - echo "Supported options are" - echo " -h -- displays the help you currently see" - echo " -c -- specify config file (Default: $base_dir/$config_file_name )" - echo " -r -- change the remote from which you want to merge a pull-request" - echo " -l -- list available pull-requests from the remote (by default from origin)" - echo " -f -- do fast forward merges if possible (default: do not use fast-forward merges)" - echo - echo "Supported parameters are" - echo " XX -- Number which pull-reqest to merge" - echo " (Default PR pulled from origin, the remote can be changed with -r option" - echo -} - -# ############################################################################# -# Function to fetch and merge a pull reqest -# Call with param1 == remote, param2 == Number -function merge_pull_request { - echo "Now fetching and merging pull-request $2 (from remote $1)" - git fetch $1 +refs/pull/$2/head:refs/remotes/$1/pr/$2 - [[ $? != 0 ]] && exit 1 - git merge $no_ff_merge $1/pr/$2 - [[ $? != 0 ]] && exit 1 -} - -# ############################################################################# -# Main Method -# ############################################################################# - -# Must have Git available -git rev-parse --git-dir 1>/dev/null 2>&1 -if [[ $? -ne 0 ]]; then - echo "ERROR: This script must be used within a Git working tree" - echo "Try to start from your main mangos directory by using" - echo " \"contrib/$script_file_name\"" - read -p"Press [RETURN] to exit" - exit 1 -fi - -# Config options -pull_remote="origin" -do_help=0 -do_list=0 -while getopts ":hc:r:lf" opt; do - case $opt in - h) - do_help=1 - ;; - c) - config_file=$OPTARG - echo "Using configuration file $config_file" - ;; - r) - pull_remote=$OPTARG - echo "Using remote $pull_remote for parameter pull-request merge" - ;; - l) - do_list=1 - ;; - f) - no_ff_merge="" - ;; - \?) - echo "Invalid option: -$OPTARG" - exit 1 - ;; - :) - echo "Option -$OPTARG requires an argument." - exit 1 - ;; - esac -done -shift $((OPTIND-1)) - -# Display help and exit -if [ $do_help -eq 1 ]; then - display_help - if [ ! -f $config_file ]; then - create_config - fi - exit 0 -fi - -# List remotes and exit -if [ $do_list -eq 1 ]; then - echo "Available Pull-Requests on remote $pull_remote:" - git ls-remote $pull_remote pull/*/head | sed 's;.*refs/pull/\([0-9]*\)/head; \1;g' - exit 0 -fi - -# Called with Pull Request for direct merge -if [ "$1" != "" ]; then - # Alternate call with pull-request number - merge_pull_request $pull_remote $1 - exit 0 -fi - -# Check if config file present -if [ ! -f $config_file ] -then - create_config - display_help - read -p"Press [RETURN] to exit" - exit 1 -fi - -already_fetched_remotes="" -# The config file exists, read it line by line and use its content -while read cline -do - if [ $DEBUG -eq 1 ]; then echo "DEBUG - Processing line $cline"; fi - # Non-empty and non-comment line (comments start with #) - if [[ "$cline" != "" && "$cline" != \#* ]]; then - if echo $cline | egrep -s "^([[:alnum:]_-]+)#([[:digit:]]+)$" ; then - # Pull-Request found - Format is - remote=`echo $cline | sed -r 's@([[:alnum:]_-]+)#([[:digit:]]+)@\1@'` - PR=`echo $cline | sed -r 's@([[:alnum:]_-]+)#([[:digit:]]+)@\2@'` - - if [ $DEBUG -eq 1 ]; then echo "DEBUG - pull request line found (remote $remote PR $PR)"; fi - - merge_pull_request $remote $PR - - elif echo $cline | egrep -s "^([[:alnum:]_-]+)/([[:alnum:]_-]+)$" ; then - # remote branch found - Format is - remote=`echo $cline | sed -r 's@([[:alnum:]_-]+)/([[:alnum:]_-]+)@\1@'` - branch=`echo $cline | sed -r 's@([[:alnum:]_-]+)/([[:alnum:]_-]+)@\2@'` - - if [ $DEBUG -eq 1 ]; then echo "DEBUG - remote branch line found (remote $remote branch $branch)"; fi - - found_remote=0 - for f in $already_fetched_remotes; do - if [ "$f" = "$remote" ]; then - found_remote=1 - fi - done - - if [ $found_remote -eq 0 ]; then - already_fetched_remotes="$already_fetched_remotes $remote" - echo "Fetching $remote" - git fetch $remote - [[ $? != 0 ]] && exit 1 - fi - - echo "Merging $branch from $remote" - git merge $no_ff_merge $remote/$branch - [[ $? != 0 ]] && exit 1 - - elif echo $cline | egrep -s "^([[:alnum:]_-]+)$" ; then - # local branch found - Format is - branch=`echo $cline | sed -r 's@([[:alnum:]_-]+)@\1@'` - - if [ $DEBUG -eq 1 ]; then echo "DEBUG - local branch line found (branch $branch)"; fi - - git merge $no_ff_merge $branch - [[ $? != 0 ]] && exit 1 - - else - echo "Unsupported config line found: $cline" - echo "Aborting..." - exit 1 - fi - fi -done < $config_file - -echo -echo "All done." -echo -exit 0 diff --git a/contrib/backporting/mangos-backport.sh b/contrib/backporting/mangos-backport.sh deleted file mode 100644 index 6c2bb1854..000000000 --- a/contrib/backporting/mangos-backport.sh +++ /dev/null @@ -1,333 +0,0 @@ -#!/bin/bash -# -# mangos-backport - a bash helper for backporting in git for MaNGOS project -# Copyright (C) 2009 freghar -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA -# - -# The script works pretty simple - each time an empty commit is made, -# copying author and message from the original one. -# Then the original commit is cherry-picked -n (no commit) -# and the changes are git commit --amended to the prepared empty commit. - -### general definitions - -## internals -BATCH_PROCESS=0 -VERBOSE=0 - -## user-tunable -AUTORESOLVE="src/shared/revision_nr.h" -GIT_AMEND_OPTS="-s" -GIT_RECOVER="git reset --hard HEAD^" -CONFLICT_RETVAL=2 # for batch usage -GIT_PATH="./" - - -### print error to stderr -function print_error { - echo -e "${@}" 1>&2 -} - -### prints help -function print_help { - echo -e "Usage: ${0##*/} [-vb] " \ - "\nBackports a specified commit to current branch." \ - "\n\n -b Batch processing (no interaction)." \ - "\n (runs amend without calling \$EDITOR)" \ - "\n -v Be verbose." \ - "\n -n Never automatically commit." \ - "\n" -} - -### verbose print -function verbose_print { - [[ ${VERBOSE} > 0 ]] && echo "${@}" -} - -### runs a command and handles it's output verbosity -#function verbose_run { -# if [[ ${VERBOSE} > 0 ]]; then -# "${@}" -# return $? -# else -# "${@}" 1 > /dev/null -# return $? -# fi -#} - -### catches output of a command and returns it's retval -#function catch_out { -# pick_out=$(${@} 2>&1) -# return $? -#} - -### recover from an error, deleting empty commit -function git_recover { - print_error "----------" - print_error "Caught an error, checking for last commit ..." - - # check if the last commit is empty, - # ie. it has the same tree object dependency as it's parent - local head_tree=$(git log -1 --pretty="%T" HEAD) - local prev_tree=$(git log -1 --pretty="%T" HEAD^) - if [[ $head_tree == $prev_tree ]]; then - print_error "Last commit empty, running ${GIT_RECOVER}" \ - "\nto previous HEAD (should be ${CURRENT_HEAD})." - print_error "----------" - ${GIT_RECOVER} - else - print_error "Last commit isn't empty (or git log failed) -" \ - "something strange happened,\ncheck git log" \ - "and do the cleanup (if needed) by hand." - fi - exit 1 -} - -### amend the empty commit, assigning new tree -function git_autoamend { - - # if the index is empty, there's nothing to amend - if [[ -z $(git diff-index --cached HEAD) ]]; then - git_retval=$? - [[ $git_retval != 0 ]] && git_recover - - print_error "The index is empty, nothing to amend. This should" \ - "not happen during normal\nworkflow, so you" \ - "probably did something crazy like picking\na" \ - "commit to a branch where it already exists." - git_recover - fi - - verbose_print "----------" - if [[ ${BATCH_PROCESS} > 0 ]]; then - if [[ ${VERBOSE} > 0 ]]; then - git commit ${GIT_AMEND_OPTS} --amend -C HEAD - git_retval=$? - else - git commit ${GIT_AMEND_OPTS} --amend -C HEAD 1> /dev/null - git_retval=$? - [[ $git_retval == 0 ]] && echo \ - "Commit ${COMMIT_HASH} picked." - fi - else - git commit ${GIT_AMEND_OPTS} --amend -c HEAD - git_retval=$? - fi - [[ $git_retval != 0 ]] && git_recover -} - - -### main() - -## arguments - -# arg parsing -while getopts "vbn" OPTION; do - case $OPTION in - v) - VERBOSE=1 - ;; - b) - BATCH_PROCESS=1 - ;; - n) - NO_AUTOCOMMIT=1 - ;; - \?) - print_help - exit 1 - ;; - esac -done; -shift $(( $OPTIND - 1 )) -ORIG_REF=${1} - -# check for needed arguments -if [[ -z ${ORIG_REF} ]]; then - print_help - exit 1 -fi - -## startup checks - -# check for needed commands -for cmd in git grep sed wc; do - if [[ -z $(which ${cmd}) ]]; then - print_error "error: ${cmd}: command not found" - exit 1 - fi -done; - -# are we in git root dir? -if [[ ! -d .git/ ]]; then - print_error "error: not in repository root directory" - exit 1 -fi - -# is the index clean? -if [[ ! -z $(git diff-index HEAD) ]]; then - print_error "error: dirty index, run mixed/hard reset first" - exit 1 -fi - -## original commit infos - -# current HEAD commit hash -CURRENT_HEAD=$(git show -s --pretty=format:'%h' HEAD) -[[ $? != 0 ]] && exit 1 - -# author with email -COMMIT_AUTHOR=$(git show -s --pretty=format:'%an <%ae>' ${ORIG_REF}) -[[ $? != 0 ]] && exit 1 - -# commit object hash (abbrev) -COMMIT_HASH=$(git show -s --pretty=format:'%h' ${ORIG_REF}) -[[ $? != 0 ]] && exit 1 - -# subject (with removed revision number) -COMMIT_SUBJECT=$(git show -s --pretty=format:'%s' ${ORIG_REF} | sed -r 's/\[[a-z]?[0-9]*\] //') -[[ $? != 0 ]] && exit 1 -COMMIT_REVISION=$(git show -s --pretty=format:'%s' ${ORIG_REF} | sed -nr 's/^\[([a-z]?[0-9]*).*/\1/p') -[[ $? != 0 ]] && exit 1 -if [ "$COMMIT_REVISION" != "" ]; then COMMIT_REVISION="[$COMMIT_REVISION] - "; fi - -# body -COMMIT_BODY=$(git show -s --pretty=format:'%b' ${ORIG_REF}) -[[ $? != 0 ]] && exit 1 - -# whole message (yea, it could be done without echo) -COMMIT_MESSAGE=$(echo -e "${COMMIT_SUBJECT}\n\n${COMMIT_BODY}\n\n(based on commit $COMMIT_REVISION${COMMIT_HASH})") -[[ $? != 0 ]] && exit 1 - -## new empty commit ready, so create it -verbose_print "Creating new empty commit on current HEAD (${CURRENT_HEAD}}." -verbose_print "----------" -if [[ ${VERBOSE} > 0 ]]; then - git commit --author="${COMMIT_AUTHOR}" -m "${COMMIT_MESSAGE}" \ - --allow-empty - [[ $? != 0 ]] && exit 1 -else - git commit --author="${COMMIT_AUTHOR}" -m "${COMMIT_MESSAGE}" \ - --allow-empty 1> /dev/null - [[ $? != 0 ]] && exit 1 -fi - - -## first, try cherry-picking the commit and catch conflicts. -## - if there are none, simply amend and exit -## - if there are none related to $AUTORESOLVE, only prepare -## the backported commit -## - when multiple conflicts occur, including $AUTORESOLVE, -## do the resolution for the one file, prepare the commit -## and let user resolve the rest (+ amend) -## - when only single ($AUTORESOLVE) conflict occur, resolve it -## and fire up $EDITOR to autocommit - -pick_out=$(git cherry-pick -n ${ORIG_REF} 2>&1) -pick_retval=$? - -# exit if there was a fatal app error -if [[ $pick_retval > 1 ]]; then - print_error "${pick_out}" - git_recover -fi - -# get a list of unmerged files -unmerged_files=$(git diff-files --diff-filter=U | sed 's/^[^\t]*\t//') -git_retval=$? -if [[ $git_retval != 0 ]]; then - print_error "${pick_out}" - git_recover -fi - -# simply amend if the pick was successful -if [[ $pick_retval == 0 && -z $unmerged_files ]]; then - verbose_print "${pick_out}" - verbose_print "----------" - if [[ ${NO_AUTOCOMMIT} > 0 ]]; then - verbose_print "No conflicts to resolve, nothing to do." - verbose_print "Please run git commit ${GIT_AMEND_OPTS} --amend" \ - "after making all necessary changes." - verbose_print "Use ${GIT_RECOVER} to recover." - else - verbose_print "No conflicts to resolve, running amend." - git_autoamend - fi - exit 0 -fi - -# sanity check -if [[ -z $unmerged_files ]]; then - print_error "${pick_out}" - print_error "----------" - print_error "git cherry-pick failed with status 1," \ - "\nbut no unmerged files were found." - git_recover -fi - -# if $AUTORESOLVE isn't there (but other conflicts are), simply exit -if [[ -z $(echo "${unmerged_files}" | grep ${AUTORESOLVE}) ]]; then - print_error "${pick_out}" - echo "----------" - verbose_print "${AUTORESOLVE} not found as unmerged." - echo "Please run git commit ${GIT_AMEND_OPTS} --amend" \ - "after resolving all conflicts." - echo "To recover from the resolution, use ${GIT_RECOVER}." - exit ${CONFLICT_RETVAL} -fi - -# do the resolution - use old version of the file -if [[ -f ${AUTORESOLVE} ]]; then - verbose_print "${pick_out}" - verbose_print "----------" - verbose_print "Auto-resolving ${AUTORESOLVE} using old version." - git show :2:${AUTORESOLVE} > ${AUTORESOLVE} - [[ $? != 0 ]] && git_recover - git add ${AUTORESOLVE} - [[ $? != 0 ]] && git_recover -# echo "Resolution of ${AUTORESOLVE} finished successfuly." -else - print_error "${pick_out}" - print_error "----------" - print_error "error: ${AUTORESOLVE} not found, cannot resolve" - git_recover -fi - -# if $AUTORESOLVE was the only conflict, amend the commit -if [[ $(echo "${unmerged_files}" | wc -l) == 1 ]]; then - verbose_print "----------" - if [[ ${NO_AUTOCOMMIT} > 0 ]]; then - verbose_print "All done, autocommit disabled, nothing to do." - verbose_print "Please run git commit ${GIT_AMEND_OPTS} --amend" \ - "after making all necessary changes." - verbose_print "Use ${GIT_RECOVER} to recover." - else - verbose_print "All done, running git commit ${GIT_AMEND_OPTS} --amend ..." - git_autoamend - fi - exit 0 - -# else let the user do all other conflict resolutions -else - print_error "${pick_out}" - echo "----------" - echo "Please run git commit ${GIT_AMEND_OPTS} --amend" \ - "after resolving all conflicts." - echo "To recover from the resolution, use ${GIT_RECOVER}." - exit ${CONFLICT_RETVAL} -fi diff --git a/contrib/backporting/update-commit-log.sh b/contrib/backporting/update-commit-log.sh deleted file mode 100644 index 9298bb3fc..000000000 --- a/contrib/backporting/update-commit-log.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh - -# Simple helper script to create backport lists - -# By user defined (remote/branch to the to-be-backported history) -COMPARE_PATH="wotlk/master" -OUTPUT_FILE="contrib/backporting/todo_wotlk_commits.log" - -# By user defined (text format) -#SMALL_FORMAT="wotlk: %h * %an (committer %cn)" -#FULL_FORMAT="${SMALL_FORMAT}: %s" -#FOOTER_FORMAT="FILE LAST UPDATED BASED ON... ${SMALL_FORMAT}" - -# By user defined (Textile markup based wiki format) -SMALL_FORMAT="\"three\":http://github.com/mangosthree/server/commit/%h: %h * %an (committer %cn)" -FULL_FORMAT="%n* ${SMALL_FORMAT}
%s"
-FOOTER_FORMAT="
FILE LAST UPDATED BASED ON... ${SMALL_FORMAT}" - -# param1 must be the commit hash of last backported commit (of original commit) -if [ "$#" != "1" ] -then - echo "You must provide the last commit's hash of the \"$OUTPUT_FILE\" file" - exit 1 -fi - -# are we in git root dir? -if [[ ! -d .git/ ]]; then - echo "ERROR: This script is expected to be called from repository root directory" - echo "Try: contrib/backporting/update-commit-log.sh" - exit 1 -fi - -HASH=$1 - -git log $HASH..$COMPARE_PATH --pretty=format:"${FULL_FORMAT}" --reverse --dirstat >> $OUTPUT_FILE -echo "" >> $OUTPUT_FILE -echo "$(git log -1 --pretty="${FOOTER_FORMAT}" $COMPARE_PATH)" >> $OUTPUT_FILE -echo "" >> $OUTPUT_FILE diff --git a/contrib/cleanupTools/.gitignore b/contrib/cleanupTools/.gitignore deleted file mode 100644 index 5b5118b5b..000000000 --- a/contrib/cleanupTools/.gitignore +++ /dev/null @@ -1 +0,0 @@ -cleanupTools.config diff --git a/contrib/cleanupTools/cleanupHistory.sh b/contrib/cleanupTools/cleanupHistory.sh deleted file mode 100644 index 22ede2a3a..000000000 --- a/contrib/cleanupTools/cleanupHistory.sh +++ /dev/null @@ -1,133 +0,0 @@ -#!/bin/sh -# -# Tool to rebase a branch with cleaned commits -# -# Required: -# - some tool for the cleanup -# - base commit from which on the current branch shall be cleaned - -# Do config stuff -sh "${0%/*}/cleanupToolConfig.sh" -if [ "$?" != "0" ] -then - echo "You need to edit the configuration file before you can use this tool!" - echo "Configuration file: ${0%/*}/cleanupTools.config" - exit 0 -fi - -# And use config settings -. "${0%/*}/cleanupTools.config" - -if [ "$BASE_COMMIT" = "" ] -then - echo "You did not specify a base-commit onto which to rebuild history" - echo "or another unexpected error happened.." - exit 1 -fi - -# First: commit all changes onto current branch -git commit -a -m"Cleanup History Commit: Pending Changes of WorkDir" - -# Create list of commits that needs to be processed -COMMIT_LIST=`git log --reverse --format=format:"%H" $BASE_COMMIT..HEAD` - -# prepare history_cleanup branch -git checkout -b history_cleanup $BASE_COMMIT -# cleanup history -echo "Cleanup History Tool: Cleanup initial state before rewriting history(might result in an empty commit)" -$CLEANUP_TOOL > /dev/null -git commit -a -m"Cleanup History Commit: Cleanup state before starting cleaning history" - -for commit in $COMMIT_LIST -do - git checkout -b history_cleanup_tmp $commit - [[ $? != 0 ]] && exit 1 - echo "Cleanup History Tool: Cleanup after commit $commit)" - $CLEANUP_TOOL > /dev/null - git commit -a -m"Cleanup History Commit: Temp cleaned" --allow-empty - [[ $? != 0 ]] && exit 1 - git checkout history_cleanup - [[ $? != 0 ]] && exit 1 - - ## Catch differences - git diff --binary history_cleanup..history_cleanup_tmp > history_cleanup_tmp.patch - - # Get committer information to store it - COMMITTER_N=$(git show -s --pretty=format:'%cn' ${commit}) - [[ $? != 0 ]] && exit 1 - COMMITTER_M=$(git show -s --pretty=format:'%ce' ${commit}) - [[ $? != 0 ]] && exit 1 - COMMITTER_D=$(git show -s --pretty=format:'%cd' ${commit}) - [[ $? != 0 ]] && exit 1 - GIT_COMMITTER_NAME=$COMMITTER_N; GIT_COMMITTER_EMAIL=$COMMITTER_M; GIT_COMMITTER_DATE=$COMMITTER_D; - export GIT_COMMITTER_NAME; export GIT_COMMITTER_EMAIL; export GIT_COMMITTER_DATE; - - # Two cases: either diff is identical to original commit, or not - git diff --binary $commit^..$commit > history_cleanup_compare.patch - DIFF_COUNT=`diff history_cleanup_tmp.patch history_cleanup_compare.patch | grep ">" | grep -v "> index " | wc -l` - echo "Current State: Diffcount=$DIFF_COUNT" - if [ "$DIFF_COUNT" = " 0" ] - then # identical# TODO this is too strict! - git cherry-pick $commit - else # different, use new commit - # commit object hash - COMMIT_HASH=$(git show -s --pretty=format:'%h' ${commit}) - [[ $? != 0 ]] && exit 1 - # subject - COMMIT_SUBJECT=$(git show -s --pretty=format:'%s' ${commit}) - [[ $? != 0 ]] && exit 1 - # body - COMMIT_BODY=$(git show -s --pretty=format:'%b' ${commit}) - [[ $? != 0 ]] && exit 1 - # whole message - COMMIT_MESSAGE=$(echo -e "${COMMIT_SUBJECT}\n\n${COMMIT_BODY}\n\n(cleaned version of ${COMMIT_HASH})") - [[ $? != 0 ]] && exit 1 - - # Apply Cleaned changeset - git apply history_cleanup_tmp.patch - if [ $? != 0 ] - then - echo "Could not apply patch with git methods, try with patch tool directly? (y/n)" - read line - if [ "$line" = "y" ] - then - patch -p1 -d. < history_cleanup_tmp.patch - echo "Please check manually if this worked.." - echo "Did it work? (y/n)" - read line - if [ "$line" != "y" ] - then - exit 1 - fi - fi - fi - if [ $? != 0 ] - then - echo "Could not apply patch, store in history_cleanup_tmp.patch" - exit 1 - fi - - # Git add new files - NEW_FILES_LIST=`grep -B1 "new file mode" history_cleanup_tmp.patch | grep "diff --git a/" | sed 's!diff --git a/\(.*\) .*!\1!'` - for fline in $NEW_FILES_LIST - do - git add $fline - [[ $? != 0 ]] && exit 1 - done - - # Commit just created commit with original information - git commit -a --allow-empty -C"$commit" - [[ $? != 0 ]] && exit 1 - git commit --amend --allow-empty -m"${COMMIT_MESSAGE}" - [[ $? != 0 ]] && exit 1 - fi - - git branch -D history_cleanup_tmp - [[ $? != 0 ]] && exit 1 -done - -rm history_cleanup_tmp.patch -rm history_cleanup_compare.patch - -GIT_COMMITTER_NAME=""; GIT_COMMITTER_EMAIL=""; GIT_COMMITTER_DATE=""; -export GIT_COMMITTER_NAME; export GIT_COMMITTER_EMAIL; export GIT_COMMITTER_DATE; diff --git a/contrib/cleanupTools/cleanupStyle.sh b/contrib/cleanupTools/cleanupStyle.sh deleted file mode 100644 index 5b8dbb66a..000000000 --- a/contrib/cleanupTools/cleanupStyle.sh +++ /dev/null @@ -1,203 +0,0 @@ -#!/bin/sh - -# SUPPORTED: ASTYLE COMMENT_STYLE OVERRIDE_CORRECTNESS -# ASTYLE <- runs AStyle -# COMMENT_STYLE <- converts //bla to // bla (note, // Bla might be better, but this would conflict with code (at least) -# Use at own Risk: -# OVERRIDE_CORRECTNESS[2] <- Appends override correctness (add 2 for second pass) - -# Do config stuff -sh "${0%/*}/cleanupToolConfig.sh" -if [ "$?" != "0" ] -then - echo "You need to edit the configuration file before you can use this tool!" - echo "Configuration file: ${0%/*}/cleanupTools.config" - exit 0 -fi - -# And use config settings -. "${0%/*}/cleanupTools.config" - - -## Internal Stuff - -# Mangos Cleanup options for AStyle -OPTIONS="--convert-tabs --align-pointer=type --suffix=none \ - --keep-one-line-blocks --keep-one-line-statements \ - --indent-classes --indent-switches --indent-namespaces \ - --pad-header --unpad-paren --pad-oper --style=allman" - -if [ "$DO_ON" = "MANGOS_SRC" ] -then - FILEPATH=$BASEPATH/src - OPTIONS="$OPTIONS --exclude=ScriptDev2" -elif [ "$DO_ON" = "MANGOS_CONTRIB" ] -then - FILEPATH=$BASEPATH/contrib -elif [ "$DO_ON" = "MANGOS_WHOLE" ] -then - FILEPATH=$BASEPATH - OPTIONS="$OPTIONS --exclude=ScriptDev2" -elif [ "$DO_ON" = "SD2" ] -then - FILEPATH=$BASEPATH/src/bindings/ScriptDev2 -else - exit 1 -fi - -OPTIONS="$OPTIONS --recursive" - -#################################################################################################### -## USING ASTYLE UPDATING ## -#################################################################################################### -if [ $DO = ASTYLE ] -then - echo "Process $FILEPATH with options $MOPTIONS" - $ASTYLE $OPTIONS "$FILEPATH/*.cpp" "$FILEPATH/*.h" - - #Restore style of auto-generated sql-files - if [ "$DO_ON" = "MANGOS_SRC" -o "$DO_ON" = "MANGOS_WHOLE" ] - then - if [ -f "$BASEPATH/src/shared/revision_nr.h" ] - then - sed 's/^#define REVISION_NR/ #define REVISION_NR/g' < ${BASEPATH}/src/shared/revision_nr.h > temp - mv temp "$BASEPATH/src/shared/revision_nr.h" - fi - if [ -f "$BASEPATH/src/shared/revision_sql.h" ] - then - sed 's/^#define REVISION_DB/ #define REVISION_DB/g' < ${BASEPATH}/src/shared/revision_sql.h > temp - mv temp "$BASEPATH/src/shared/revision_sql.h" - fi - elif [ "$DO_ON" = "SD2" ] - then - if [ -f "$BASEPATH/src/bindings/ScriptDev2/sd2_revision_nr.h" ] - then - sed 's/^#define SD2_REVISION_NR/ #define SD2_REVISION_NR/g' < ${BASEPATH}/src/bindings/ScriptDev2/sd2_revision_nr.h > temp - mv temp "$BASEPATH/src/bindings/ScriptDev2/sd2_revision_nr.h" - fi - fi - - echo "Processing $DO on $DO_ON done" - exit 0 -fi - - -#################################################################################################### -## UNIFYING COMMENTS ## -#################################################################################################### -## Make comments neater //bla => // bla ## note for uppercase s:\// \([a-z]\):// \1:g -if [ $DO = COMMENT_STYLE ] -then - if [ "$DO_ON" = "MANGOS_SRC" ] - then - LIST=`find ${BASEPATH}/src/ -path "${BASEPATH}/src/bindings/ScriptDev2" -prune -o -type f -iname "*.cpp" -print -o -iname "*.h" -print ` - elif [ "$DO_ON" = "SD2" ] - then - LIST=`find ${BASEPATH}/src/bindings/ScriptDev2 -type f -iname "*.cpp" -o -iname "*.h" ` - else - echo "Unsupported combination with DO and DO_ON" - exit 1 - fi - - for l in $LIST - do - echo "Converting comments in $l" - sed '/http:/ !s:\//\([a-zA-Z0-9]\):// \1:g; - s#^\(............................................................\) [ ]*//#\1//#g; - /^..............................................\/[\/]*$/ !s#^\(..................................................\)//#\1 //#g; ' "$l" > temp - if [ "$?" != "0" ] - then - echo "An error HAPPENED" - exit 1 - fi - - mv temp "$l" - done - - echo "Processing $DO on $DO_ON done" - exit 0 -fi - -#################################################################################################### -## OVERRIDE CORRECTNESS ## -#################################################################################################### -# use OVERRIDE_CORRECTNESS to create helper file listing all virtual methods -# use OVERRIDE_CORRECTNESS2 to add the word "override" after all functions with virtual names - -if [ "$DO_ON" != "MANGOS_SRC" -a "$DO_ON" != "SD2" ] -then - echo "OVERRIDE atm only supported for MANGOS_SRC or SD2 target" - exit 0 -fi - -if [ $DO = OVERRIDE_CORRECTNESS ] -then - #Create a list of all virtual functions in mangos (class scope) - if [ $DO_ON = MANGOS_SRC ] - then - HEADERLIST=`find ${BASEPATH}/src/ -path "${BASEPATH}/src/bindings/ScriptDev2" -prune -o -type f -iname "*.h" -print` - else - HEADERLIST=`find ${BASEPATH}/src/bindings/ScriptDev2 -type f -iname "*.h"` - HEADERLIST="${HEADERLIST} ${BASEPATH}/src/game/CreatureAI.h" - HEADERLIST="${HEADERLIST} ${BASEPATH}/src/game/InstanceData.h" - fi - - rm virtuals - for h in $HEADERLIST - do - grep "virtual" "$h" >> virtuals - done - - #Filter comment lines - sed -n '/^[ ]*\/\// !p' virtuals | sed -n '/^[ ]*\/\*/ !p' | \ - ##Get function name - sed -r -n '/^[ ]*virtual[ ][ ]*const[\*]*[ ][ ]*[a-zA-Z_~0-9\*:&]*[ ][ ]*const[\*]*[ ][]*[a-zA-Z_~0-9]*[ ]*\(.*\)/ { s/^[ ]*virtual[ ]*const[ ]*[a-zA-Z_~0-9\*:]*[ ]*const[ ]*([a-zA-Z_~0-9]*).*/\1/g; tEnde} - /^[ ]*virtual[ ][ ]*const[\*]*[ ][ ]*[a-zA-Z_~0-9\*:&]*[ ][ ]*[a-zA-Z_~0-9]*[ ]*\(.*\)/ { s/^[ ]*virtual[ ]*const[ ]*[a-zA-Z_~0-9\*:]*[ ]*([a-zA-Z_~0-9]*).*/\1/g; tEnde} - /^[ ]*virtual[ ][ ]*[a-zA-Z_~0-9\*:&]*[ ][ ]*const[\*]*[ ][ ]*[a-zA-Z_~0-9]*[ ]*\(.*\)/ { s/^[ ]*virtual[ ]*[a-zA-Z_~0-9\*:]*[ ]*const[\*]*[ ]*([a-zA-Z_~0-9]*).*/\1/g; tEnde} - /^[ ]*virtual[ ]*[a-zA-Z_~0-9\*:&]*[ ][ ]*[a-zA-Z_~0-9]*[ ]*\(.*\)/ { s/^[ ]*virtual[ ]*[a-zA-Z_~0-9\*:]*[ ][ ]*([a-zA-Z_~0-9]*).*/\1/g;} - :Ende; p' > virtualNames - - ##Make its entries unique - sort < virtualNames > virtuals - uniq < virtuals > virtualNames - - echo "Check file virtualNames for inconsitencies!" - rm virtuals - - echo "Processing $DO on $DO_ON done" - exit 0 -fi - -if [ $DO = OVERRIDE_CORRECTNESS2 ] -then - ## Assume virtualNames is good - if [ $DO_ON = MANGOS_SRC ] - then - FILELIST=`find ${BASEPATH}/src/ -path "${BASEPATH}/src/bindings/ScriptDev2" -prune -o -type f -iname "*.h" -print` - else - FILELIST=`find ${BASEPATH}/src/bindings/ScriptDev2 -type f -iname "*.cpp" -o -iname "*.h"` - fi - - for h in $FILELIST - do - echo "Progress file $h" - while read f - do - # basic pattern: NAME(..)...[;] - PARSE="s/( "$f"\(.*\)[ ]*const[\*]*);/\1 override;/g; t - s/( "$f"\(.*\));/\1 override;/g; t - s/( "$f"\(.*\)[ ]*const[\*]*)$/\1 override/g; t - s/( "$f"\(.*\))$/\1 override/g; t - s/( "$f"\(.*\)[ ]*const[\*]*)([ ].*)/\1 override\2/g; t - s/( "$f"\(.*\))([ ].*)/\1 override\2/g" - sed -r "$PARSE" "$h" > temp - mv temp "$h" - done < virtualNames - done - - echo "Processing $DO on $DO_ON done" - exit 0 - -fi - -exit 0 diff --git a/contrib/cleanupTools/cleanupToolConfig.sh b/contrib/cleanupTools/cleanupToolConfig.sh deleted file mode 100644 index 63a2f7cbe..000000000 --- a/contrib/cleanupTools/cleanupToolConfig.sh +++ /dev/null @@ -1,68 +0,0 @@ -#!/bin/sh - -# Helper script to create a config file for the cleanup tools -# The created config file must be edited manually - - -if [ -f "${0%/*}/cleanupTools.config" ] -then - # file already exists, exit - exit 0 -fi - -# Create file -cat << EOF > "${0%/*}/cleanupTools.config" -#!/bin/sh - -# Basic configuration for the cleanup helper scripts with mangos -# Be sure to read this whole file and edit the variables as required -# -############################################################ -# Generic options: -############################################################ -# Define the path to folder relatively from where you want to call the scripts. -# The cleanupHistory.sh script must be called from within the repository that is to be cleaned! -# -BASEPATH="." -# -# Path to Astyle from the directory -ASTYLE="../AStyle/bin/AStyle.exe" - - -############################################################ -# The cleanupStyle.sh tool: -############################################################ -# Job selection options are: -# DO with possible choices: ASTYLE (to call the Astyle tool) -# COMMENT_STYLE (to change comments from //foo to // foo and align them to column 61 if possible -# OVERRIDE_CORRECTNESS[2] use at own RISK, this is maybe not too usefull -DO="ASTYLE" -# -# DO_ON with possible choices: MANGOS_SRC to invoke the above cleanup routine on /src directory and subdirectories -# MANGOS_CONTRIB to invoke the above cleanup routine on /contrib directory and subdirectories -# MANGOS_WHOLE to invoke the above cleanup routine on directory and subdirectories -# SD2 to invoke the above cleanup routine on /src/bindings/ScriptDev2 directory and subdirectories -DO_ON="MANGOS_SRC" - - -############################################################ -# The cleanupHistory.sh tool: -############################################################ -# This tool will USE the cleanupStyle.sh tool to cleanup the history of the current branch with the settings above -# It will clean the history based on the variable BASE_COMMIT that needs to be defined here -BASE_COMMIT="" - - - -### -# Internal variables, do not change except you know what you are doing -### -# cleanup-tool -CLEANUP_TOOL="\$BASEPATH/contrib/cleanupTools/cleanupStyle.sh" -# path from current's caller position to ASTYLE -ASTYLE="\$BASEPATH/\$ASTYLE" - -EOF - -# Return wil error, to display message if file is not found -exit 1 diff --git a/contrib/dbcEditer/BcdEditer.ini b/contrib/dbcEditer/BcdEditer.ini deleted file mode 100644 index 99284e8b9..000000000 --- a/contrib/dbcEditer/BcdEditer.ini +++ /dev/null @@ -1,34 +0,0 @@ -[TaxiNodes.dbc] -ColType2=0 -ColType3=1 -ColType4=1 -[SpellRange.dbc] -ColType2=0 -ColType3=0 -ColType1=0 -[Talent.dbc] -ColType1=0 -ColType5=0 -ColType4=0 -[test.dbc] -ColType1=0 -ColType3=1 -ColType2=0 -[TalentTab.dbc] -ColType15=2 -[TalentTab_new.dbc] -ColType15=2 -[SpellIcon.dbc] -ColType2=0 -ColType1=0 -[FactionGroup.dbc] -ColType12=0 -ColType3=2 -ColType2=0 -ColType8=0 -[gtRegenMPPerSpt.dbc] -ColType1=1 -[gtOCTRegenMP.dbc] -ColType1=1 -[gtOCTRegenHP.dbc] -ColType1=1 diff --git a/contrib/dbcEditer/SearchFrm.cpp b/contrib/dbcEditer/SearchFrm.cpp deleted file mode 100644 index f04a99503..000000000 --- a/contrib/dbcEditer/SearchFrm.cpp +++ /dev/null @@ -1,26 +0,0 @@ -//--------------------------------------------------------------------------- - -#include -#pragma hdrstop - -#include "SearchFrm.h" -//--------------------------------------------------------------------------- -#pragma package(smart_init) -#pragma resource "*.dfm" -TFrmSearch* FrmSearch; -//--------------------------------------------------------------------------- -__fastcall TFrmSearch::TFrmSearch(TComponent* Owner) - : TForm(Owner) -{ -} -//--------------------------------------------------------------------------- -void __fastcall TFrmSearch::btOkClick(TObject* Sender) -{ - ModalResult = mrOk; -} -//--------------------------------------------------------------------------- -void __fastcall TFrmSearch::btCancelClick(TObject* Sender) -{ - ModalResult = mrCancel; -} -//--------------------------------------------------------------------------- diff --git a/contrib/dbcEditer/SearchFrm.ddp b/contrib/dbcEditer/SearchFrm.ddp deleted file mode 100644 index cdc0ee8c2..000000000 Binary files a/contrib/dbcEditer/SearchFrm.ddp and /dev/null differ diff --git a/contrib/dbcEditer/SearchFrm.dfm b/contrib/dbcEditer/SearchFrm.dfm deleted file mode 100644 index 06a3613a7..000000000 --- a/contrib/dbcEditer/SearchFrm.dfm +++ /dev/null @@ -1,63 +0,0 @@ -object FrmSearch: TFrmSearch - Left = 261 - Top = 194 - Width = 324 - Height = 215 - Caption = 'Seach F3 Seach Next' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - PixelsPerInch = 96 - TextHeight = 13 - object lbseach: TLabel - Left = 48 - Top = 16 - Width = 57 - Height = 17 - AutoSize = False - Caption = 'Input:' - end - object rgSI: TRadioGroup - Left = 64 - Top = 40 - Width = 185 - Height = 97 - Caption = 'Seach Dir' - ItemIndex = 1 - Items.Strings = ( - 'Seach up' - 'Seach down' - 'Seach up Current rol' - 'Seach down Current rol') - TabOrder = 0 - end - object edSeach: TEdit - Left = 120 - Top = 16 - Width = 121 - Height = 21 - TabOrder = 1 - end - object btOk: TButton - Left = 64 - Top = 152 - Width = 75 - Height = 25 - Caption = 'Ok' - TabOrder = 2 - OnClick = btOkClick - end - object btCancel: TButton - Left = 176 - Top = 152 - Width = 75 - Height = 25 - Caption = 'Cancel' - TabOrder = 3 - OnClick = btCancelClick - end -end diff --git a/contrib/dbcEditer/SearchFrm.h b/contrib/dbcEditer/SearchFrm.h deleted file mode 100644 index 4a70c8f6a..000000000 --- a/contrib/dbcEditer/SearchFrm.h +++ /dev/null @@ -1,29 +0,0 @@ -//--------------------------------------------------------------------------- - -#ifndef SearchFrmH -#define SearchFrmH -//--------------------------------------------------------------------------- -#include -#include -#include -#include -#include -//--------------------------------------------------------------------------- -class TFrmSearch : public TForm -{ - __published: // IDE-managed Components - TRadioGroup* rgSI; - TEdit* edSeach; - TLabel* lbseach; - TButton* btOk; - TButton* btCancel; - void __fastcall btOkClick(TObject* Sender); - void __fastcall btCancelClick(TObject* Sender); - private: // User declarations - public: // User declarations - __fastcall TFrmSearch(TComponent* Owner); -}; -//--------------------------------------------------------------------------- -extern PACKAGE TFrmSearch* FrmSearch; -//--------------------------------------------------------------------------- -#endif diff --git a/contrib/dbcEditer/TitleFrm.cpp b/contrib/dbcEditer/TitleFrm.cpp deleted file mode 100644 index e17c6a6e7..000000000 --- a/contrib/dbcEditer/TitleFrm.cpp +++ /dev/null @@ -1,26 +0,0 @@ -//--------------------------------------------------------------------------- - -#include -#pragma hdrstop - -#include "TitleFrm.h" -//--------------------------------------------------------------------------- -#pragma package(smart_init) -#pragma resource "*.dfm" -TFrmTitle* FrmTitle; -//--------------------------------------------------------------------------- -__fastcall TFrmTitle::TFrmTitle(TComponent* Owner) - : TForm(Owner) -{ -} -//--------------------------------------------------------------------------- -void __fastcall TFrmTitle::Button1Click(TObject* Sender) -{ - ModalResult = mrOk; -} -//--------------------------------------------------------------------------- -void __fastcall TFrmTitle::Button2Click(TObject* Sender) -{ - ModalResult = mrCancel; -} -//--------------------------------------------------------------------------- diff --git a/contrib/dbcEditer/TitleFrm.ddp b/contrib/dbcEditer/TitleFrm.ddp deleted file mode 100644 index cdc0ee8c2..000000000 Binary files a/contrib/dbcEditer/TitleFrm.ddp and /dev/null differ diff --git a/contrib/dbcEditer/TitleFrm.dfm b/contrib/dbcEditer/TitleFrm.dfm deleted file mode 100644 index 0d1570f38..000000000 --- a/contrib/dbcEditer/TitleFrm.dfm +++ /dev/null @@ -1,51 +0,0 @@ -object FrmTitle: TFrmTitle - Left = 328 - Top = 252 - Width = 235 - Height = 112 - BorderIcons = [biSystemMenu] - Caption = 'Col Title' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poDesktopCenter - PixelsPerInch = 96 - TextHeight = 13 - object Label1: TLabel - Left = 8 - Top = 24 - Width = 65 - Height = 13 - AutoSize = False - Caption = 'Title:' - end - object edTitle: TEdit - Left = 80 - Top = 16 - Width = 121 - Height = 21 - TabOrder = 0 - end - object Button1: TButton - Left = 24 - Top = 48 - Width = 75 - Height = 25 - Caption = 'Ok' - TabOrder = 1 - OnClick = Button1Click - end - object Button2: TButton - Left = 136 - Top = 48 - Width = 75 - Height = 25 - Caption = 'Cancel' - TabOrder = 2 - OnClick = Button2Click - end -end diff --git a/contrib/dbcEditer/TitleFrm.h b/contrib/dbcEditer/TitleFrm.h deleted file mode 100644 index 18a6b83db..000000000 --- a/contrib/dbcEditer/TitleFrm.h +++ /dev/null @@ -1,27 +0,0 @@ -//--------------------------------------------------------------------------- - -#ifndef TitleFrmH -#define TitleFrmH -//--------------------------------------------------------------------------- -#include -#include -#include -#include -//--------------------------------------------------------------------------- -class TFrmTitle : public TForm -{ - __published: // IDE-managed Components - TLabel* Label1; - TEdit* edTitle; - TButton* Button1; - TButton* Button2; - void __fastcall Button1Click(TObject* Sender); - void __fastcall Button2Click(TObject* Sender); - private: // User declarations - public: // User declarations - __fastcall TFrmTitle(TComponent* Owner); -}; -//--------------------------------------------------------------------------- -extern PACKAGE TFrmTitle* FrmTitle; -//--------------------------------------------------------------------------- -#endif diff --git a/contrib/dbcEditer/dbcedit.cpp b/contrib/dbcEditer/dbcedit.cpp deleted file mode 100644 index 7a8a3ccaa..000000000 --- a/contrib/dbcEditer/dbcedit.cpp +++ /dev/null @@ -1,826 +0,0 @@ -//--------------------------------------------------------------------------- - -#include -#pragma hdrstop - -#include "dbcedit.h" -#include "stdio.h" -#include "IdGlobal.hpp" -#include -#include "TitleFrm.h" -#include -#include "thOpenSource.h" -#include "SearchFrm.h" -//#include "SysUtils.hpp" - - -//--------------------------------------------------------------------------- -#pragma package(smart_init) -#pragma resource "*.dfm" -TFrmMain* FrmMain; -//--------------------------------------------------------------------------- -__fastcall TFrmMain::TFrmMain(TComponent* Owner) - : TForm(Owner) -{ - OpenOk = false; - Term = false; -} -//--------------------------------------------------------------------------- - -void __fastcall TFrmMain::btOpenClick(TObject* Sender) -{ - if (OpenDialog1->Execute()) - { - if (FileExists(OpenDialog1->FileName)) - { - OpenOk = false; - if (thOpen) - { - thOpen->Terminate(); - } - thOpen = new thOpenFile(false); - //thOpen->Priority = tpTimeCritical; - pnFileName->Caption = OpenDialog1->FileName; - } - else - { - OpenOk = false; - pnFileName->Caption = ""; - } - } -} -//--------------------------------------------------------------------------- -void __fastcall TFrmMain::btSaveClick(TObject* Sender) -{ - //CurrentOpenFile; - if (OpenOk) - { - SaveToFile(CurrentOpenFile.c_str()); - } - else - { - ShowMessage("文件未打开完成!"); - } -} -//--------------------------------------------------------------------------- - -void TFrmMain::SaveToFile(const char* pszFileName) -{ - char szFileName[255]; - FILE* stream; - - - - - fnsplit(pszFileName, 0, 0, szFileName, 0); - strcat(szFileName, "_new.dbc"); - - - AnsiString NewFileName = ExtractFilePath(Application->ExeName) + szFileName; //=pszFileName; - int iFileHandle; //文件句柄 - AnsiString iniSetFile = ExtractFilePath(Application->ExeName) + "BcdEditer.ini"; - AnsiString SectionName = ExtractFileName(CurrentOpenFile); - - DWORD w; - - CopyFileTo(pszFileName, NewFileName); - - iFileHandle = FileOpen(NewFileName, fmOpenRead | fmOpenWrite); //打开文件 - - if ((stream = fopen(CurrentOpenFile.c_str(), "r+")) - == NULL) - { - ShowMessage("打开文件出错"); - return; - } - - - int iVal; - float fVal; - bool isFloat; - int ColType; - - FileSeek(iFileHandle, 0x14, 0); - TIniFile* ini; - ini = new TIniFile(iniSetFile); - - for (int i = 1; i < sgEdit->RowCount; i++) - { - for (int j = 1; j < sgEdit->ColCount; j++) - { - if (j == 1) //ID - { - iVal = StrToInt(sgEdit->Cells[j][i]); - FileWrite(iFileHandle, &iVal, 4); - } - else - { - - //ColType= ini->ReadInteger(SectionName,"ColType"+IntToStr(j-1),0); - //thOpen->ColType[10000]; - - switch (thOpen->ColType[j]) - { - case 0: //整型 - iVal = StrToFloat(sgEdit->Cells[j][i]); - FileWrite(iFileHandle, &iVal, 4); - break; - case 1: //浮点 - fVal = StrToFloat(sgEdit->Cells[j][i]); - FileWrite(iFileHandle, &fVal, 4); - break; - case 2: //文本 - fseek(stream, 0x14 + (i * (sgEdit->ColCount - 1) + (j - 1)) * 4, 0); - fread(&iVal, 4, 1, stream); - FileWrite(iFileHandle, &iVal, 4); - break; - default: //整型 - iVal = StrToFloat(sgEdit->Cells[j][i]); - FileWrite(iFileHandle, &iVal, 4); - } - } - } - } - FileClose(iFileHandle); - fclose(stream); - - delete ini; - ShowMessage("Save To File:" + NewFileName); -} -void __fastcall TFrmMain::btIntTypeClick(TObject* Sender) -{ - if (OpenOk == true) - { - AnsiString iniSetFile = ExtractFilePath(Application->ExeName) + "BcdEditer.ini"; - AnsiString SectionName = ExtractFileName(CurrentOpenFile); - TIniFile* ini; - ini = new TIniFile(iniSetFile); - ini->WriteInteger(SectionName, "ColType" + IntToStr(sgEdit->Col), 0); - delete ini; - thOpen->ColType[sgEdit->Col] = 0; - //重新打开对应列的值 - //OpenFileCol(AnsiString FileName,int ColType); - OpenFileCol(CurrentOpenFile, sgEdit->Col, 0); - } -} -//--------------------------------------------------------------------------- - - -void __fastcall TFrmMain::btFloatTypeClick(TObject* Sender) -{ - if (OpenOk == true) - { - AnsiString iniSetFile = ExtractFilePath(Application->ExeName) + "BcdEditer.ini"; - AnsiString SectionName = ExtractFileName(CurrentOpenFile); - TIniFile* ini; - ini = new TIniFile(iniSetFile); - ini->WriteInteger(SectionName, "ColType" + IntToStr(sgEdit->Col), 1); - delete ini; - thOpen->ColType[sgEdit->Col] = 1; - OpenFileCol(CurrentOpenFile, sgEdit->Col, 1); - } -} -//--------------------------------------------------------------------------- - -void __fastcall TFrmMain::PopupMenu1Popup(TObject* Sender) -{ - if (OpenOk == true) - { - AnsiString iniSetFile = ExtractFilePath(Application->ExeName) + "BcdEditer.ini"; - AnsiString SectionName = ExtractFileName(CurrentOpenFile); - int ColType; - TIniFile* ini; - ini = new TIniFile(iniSetFile); - ColType = ini->ReadInteger(SectionName, "ColType" + IntToStr(sgEdit->Col), 0); - delete ini; - switch (ColType) - { - case 0: - btIntType->Checked = true; - btFloatType->Checked = false; - btTxtType->Checked = false; - break; - case 1: - btIntType->Checked = false; - btFloatType->Checked = true; - btTxtType->Checked = false; - break; - case 2: - btIntType->Checked = false; - btFloatType->Checked = false; - btTxtType->Checked = true; - break; - default: - btIntType->Checked = true; - btFloatType->Checked = false; - } - } -} -//--------------------------------------------------------------------------- - -void __fastcall TFrmMain::N1Click(TObject* Sender) -{ - AnsiString iniSetFile = ExtractFilePath(Application->ExeName) + "BcdEditer.ini"; - AnsiString SectionName = ExtractFileName(CurrentOpenFile); - int ColType; - FrmTitle->edTitle->Text = sgEdit->Cells[sgEdit->Col][0]; - if (FrmTitle->ShowModal() == mrOk) - { - TIniFile* ini; - ini = new TIniFile(iniSetFile); - ini->WriteString(SectionName, "ColTitle" + IntToStr(sgEdit->Col), FrmTitle->edTitle->Text); - delete ini; - sgEdit->Cells[sgEdit->Col][0] = FrmTitle->edTitle->Text; - } -} -//--------------------------------------------------------------------------- - - - -void __fastcall TFrmMain::FormDestroy(TObject* Sender) -{ - if (thOpen) - { - thOpen->Terminate(); - SleepEx(200, 0); - } -} -//--------------------------------------------------------------------------- - -void __fastcall TFrmMain::ToolButton1Click(TObject* Sender) -{ - bool SeFlag = true; - if (FrmSearch->ShowModal() == mrOk) - { - switch (FrmSearch->rgSI->ItemIndex) - { - case 0: //向上找; - for (int i = sgEdit->ColCount * sgEdit->Row + sgEdit->Col - 1; i > sgEdit->ColCount; i--) - { - if (i % sgEdit->ColCount != 0) - { - if (0 == CompareStr(sgEdit->Cells[i - sgEdit->ColCount * (i / sgEdit->ColCount)][i / sgEdit->ColCount], - FrmSearch->edSeach->Text)) //找到了 - { - sgEdit->Col = i - sgEdit->ColCount * i / sgEdit->ColCount; - sgEdit->Row = i / sgEdit->ColCount; - SeFlag = false; - break; - } - } - } - if (SeFlag) ShowMessage("Seach Top,Find Nothing."); - break; - case 1: //向下找; - for (int i = sgEdit->ColCount * sgEdit->Row + sgEdit->Col + 1; i < sgEdit->ColCount * sgEdit->RowCount; i++) - { - if (i % sgEdit->ColCount != 0) - { - if (0 == CompareStr(sgEdit->Cells[i - sgEdit->ColCount * (i / sgEdit->ColCount)][i / sgEdit->ColCount], - FrmSearch->edSeach->Text)) //找到了 - { - sgEdit->Col = i - sgEdit->ColCount * (i / sgEdit->ColCount); - sgEdit->Row = i / sgEdit->ColCount; - SeFlag = false; - break; - } - } - } - if (SeFlag) ShowMessage("Seach End,Find Nothing"); - break; - case 2: //当前列向上找; - for (int i = sgEdit->Row; i > 1; i--) - { - if (0 == CompareStr(sgEdit->Cells[sgEdit->Col][i], - FrmSearch->edSeach->Text)) //找到了 - { - sgEdit->Row = i; - SeFlag = false; - break; - } - } - if (SeFlag) ShowMessage("Seach col top,Find Nothing"); - break; - case 3: //当前列向下找; - for (int i = sgEdit->Row; i < sgEdit->RowCount; i++) - { - if (0 == CompareStr(sgEdit->Cells[sgEdit->Col][i], - FrmSearch->edSeach->Text)) //找到了 - { - sgEdit->Row = i; - SeFlag = false; - break; - } - } - if (SeFlag) ShowMessage("Seach col end,Find Nothing."); - break; - } - } -} -//--------------------------------------------------------------------------- - -void __fastcall TFrmMain::sgEditKeyDown(TObject* Sender, WORD& Key, - TShiftState Shift) -{ - - bool SeFlag = true; - if (Key == VK_F3) - { - switch (FrmSearch->rgSI->ItemIndex) - { - case 0: //向上找; - for (int i = sgEdit->ColCount * sgEdit->Row + sgEdit->Col - 1; i > sgEdit->ColCount; i--) - { - if (i % sgEdit->ColCount != 0) - { - if (0 == CompareStr(sgEdit->Cells[i - sgEdit->ColCount * (i / sgEdit->ColCount)][i / sgEdit->ColCount], - FrmSearch->edSeach->Text)) //找到了 - { - sgEdit->Col = i - sgEdit->ColCount * i / sgEdit->ColCount; - sgEdit->Row = i / sgEdit->ColCount; - SeFlag = false; - break; - } - } - } - if (SeFlag) ShowMessage("Seach Top,Find Nothing."); - break; - case 1: //向下找; - for (int i = sgEdit->ColCount * sgEdit->Row + sgEdit->Col + 1; i < sgEdit->ColCount * sgEdit->RowCount; i++) - { - if (i % sgEdit->ColCount != 0) - { - if (0 == CompareStr(sgEdit->Cells[i - sgEdit->ColCount * (i / sgEdit->ColCount)][i / sgEdit->ColCount], - FrmSearch->edSeach->Text)) //找到了 - { - sgEdit->Col = i - sgEdit->ColCount * (i / sgEdit->ColCount); - sgEdit->Row = i / sgEdit->ColCount; - SeFlag = false; - break; - } - } - } - if (SeFlag) ShowMessage("Seach End,Find Nothing."); - break; - case 2: //当前列向上找; - for (int i = sgEdit->Row; i > 1; i--) - { - if (0 == CompareStr(sgEdit->Cells[sgEdit->Col][i], - FrmSearch->edSeach->Text)) //找到了 - { - sgEdit->Row = i; - SeFlag = false; - break; - } - } - if (SeFlag) ShowMessage("Seach col Top,Find Nothing."); - break; - case 3: //当前列向下找; - for (int i = sgEdit->Row; i < sgEdit->RowCount; i++) - { - if (0 == CompareStr(sgEdit->Cells[sgEdit->Col][i], - FrmSearch->edSeach->Text)) //找到了 - { - sgEdit->Row = i; - SeFlag = false; - break; - } - } - if (SeFlag) ShowMessage("Seach col end,Find Nothing."); - break; - } - } -} -//--------------------------------------------------------------------------- - -void __fastcall TFrmMain::sgEditSelectCell(TObject* Sender, int ACol, - int ARow, bool& CanSelect) -{ -// -} -//--------------------------------------------------------------------------- -void __fastcall TFrmMain::OpenFileCol(AnsiString FileName, int ColIndex, int ColType) -{ - int iFileHandle; //文件句柄 - char Txtbuf[255]; - int iVal; - float fVal; - FILE* stream; - long curpos, length; - DWORD dwRows, dwCols, dwRowLen, dwTextLen; - - DWORD dwTextStartPos; - char* pTextPtr ; - - - if ((stream = fopen(FileName.c_str(), "r+")) - == NULL) - { - ShowMessage("Open File Error"); - return; - } - - curpos = ftell(stream); - fseek(stream, 0L, SEEK_END); - length = ftell(stream); - - - switch (ColType) - { - case 0: //整型值 Int - for (int i = 0; i < sgEdit->RowCount - 1; i++) - { - fseek(stream, 0x14 + (i * (sgEdit->ColCount - 1) + (ColIndex - 1)) * 4, 0); - fread(&iVal, 4, 1, stream); - sgEdit->Cells[ColIndex][i + 1] = IntToStr(iVal); - } - break; - case 1: //浮点值 Float - for (int i = 0; i < sgEdit->RowCount - 1; i++) - { - fseek(stream, 0x14 + (i * (sgEdit->ColCount - 1) + (ColIndex - 1)) * 4, 0); - fread(&fVal, 4, 1, stream); - sgEdit->Cells[ColIndex][i + 1] = FloatToStr(fVal); - } - break; - case 2: //文本 Text - fseek(stream, 0x4, 0); - fread(&iVal, 4, 1, stream); - dwRows = iVal; - fread(&iVal, 4, 1, stream); - dwCols = iVal; - fread(&iVal, 4, 1, stream); - dwRowLen = iVal; - fread(&iVal, 4, 1, stream); - dwTextLen = iVal; - - dwTextStartPos = dwRows * dwRowLen + 20; - for (int i = 0; i < sgEdit->RowCount - 1; i++) - { - fseek(stream, 0x14 + (i * (sgEdit->ColCount - 1) + (ColIndex - 1)) * 4, 0); - fread(&iVal, 4, 1, stream); - sgEdit->Cells[ColIndex][i + 1] = IntToStr(iVal); - if (dwTextStartPos + iVal < length) - { - fseek(stream, dwTextStartPos + iVal, 0); - fread(Txtbuf, 1, 255, stream); - //pTextPtr = pBuff + dwTextStartPos + lTemp; - sgEdit->Cells[ColIndex][i + 1] = Txtbuf; - } - else - { - sgEdit->Cells[ColIndex][i + 1] = "This Col Not Text!"; - } - } - break; - } - fclose(stream); -} -void __fastcall TFrmMain::Timer1Timer(TObject* Sender) -{ - if (OpenOk) - { - lbOpState->Caption = "Open File Ok."; - } - else - { - lbOpState->Caption = "Open Now....."; - } -} -//--------------------------------------------------------------------------- -//当前格子写入修改文件中 -void __fastcall TFrmMain::N4Click(TObject* Sender) -{ - if (!thOpen) return; - - int iFileHandle; //文件句柄 - char buf[4]; - int iVal; - float fVal; - FILE* stream; - /* - if ((stream = fopen(CurrentOpenFile.c_str(), "r+")) - == NULL) - { - ShowMessage("打开文件出错"); - return; - } - */ - iFileHandle = FileOpen(CurrentOpenFile, fmOpenRead | fmOpenWrite); //打开文件 - - switch (thOpen->ColType[sgEdit->Col]) - { - case 0: //整型值 - //for(int i=0;iRowCount-1;i++){ - /* - fseek(stream, 0x14+((sgEdit->Row-1)*(sgEdit->ColCount-1)+(sgEdit->Col-1))*4, 0); - iVal=StrToInt(sgEdit->Cells[sgEdit->Col][sgEdit->Row]); - memcpy(buf, &iVal, 4); - for(int i=0;i<4;i++) - fwrite(buf+i, 1, 1, stream); - */ - iVal = StrToInt(sgEdit->Cells[sgEdit->Col][sgEdit->Row]); - memcpy(buf, &iVal, 4); - FileSeek(iFileHandle, 0x14 + ((sgEdit->Row - 1) * (sgEdit->ColCount - 1) + (sgEdit->Col - 1)) * 4, 0); - FileWrite(iFileHandle, buf, 4); - //} - break; - case 1: //浮点值 - //fseek(stream, 0x14+((sgEdit->Row-1)*(sgEdit->ColCount-1)+(sgEdit->Col-1))*4, 0); - //fVal=StrToFloat(sgEdit->Cells[sgEdit->Col][sgEdit->Row]); - //fwrite(&fVal, 4, 1, stream); - fVal = StrToFloat(sgEdit->Cells[sgEdit->Col][sgEdit->Row]); - memcpy(buf, &fVal, 4); - FileSeek(iFileHandle, 0x14 + ((sgEdit->Row - 1) * (sgEdit->ColCount - 1) + (sgEdit->Col - 1)) * 4, 0); - FileWrite(iFileHandle, buf, 4); - break; - case 2: //文本不写入 - break; - } - - // fclose(stream); - FileClose(iFileHandle); -} -//--------------------------------------------------------------------------- - -void __fastcall TFrmMain::btTxtTypeClick(TObject* Sender) -{ - if (OpenOk == true) - { - AnsiString iniSetFile = ExtractFilePath(Application->ExeName) + "BcdEditer.ini"; - AnsiString SectionName = ExtractFileName(CurrentOpenFile); - TIniFile* ini; - ini = new TIniFile(iniSetFile); - ini->WriteInteger(SectionName, "ColType" + IntToStr(sgEdit->Col), 2); - delete ini; - thOpen->ColType[sgEdit->Col] = 2; - OpenFileCol(CurrentOpenFile, sgEdit->Col, 2); - } -} -//--------------------------------------------------------------------------- - -void __fastcall TFrmMain::ToolButton3Click(TObject* Sender) -{ - int OldCol; - int OldRow; - OldRow = sgEdit->Row; - OldCol = sgEdit->Col; - if (sgEdit->FixedCols == 1) - { - sgEdit->FixedCols = 2; - if (OldCol != 1) - sgEdit->Col = OldCol; - sgEdit->Row = OldRow; - } - else - { - sgEdit->FixedCols = 1; - sgEdit->Row = OldRow; - if (OldCol != 2) - sgEdit->Col = OldCol; - } -} -//--------------------------------------------------------------------------- - -void __fastcall TFrmMain::btRowSaveClick(TObject* Sender) -{ - if (OpenOk == false) return; - - int iFileHandle; //文件句柄 - char Txtbuf[255]; - int iVal; - char buf[4]; - float fVal; - FILE* stream; - long curpos, length; - DWORD dwRows, dwCols, dwRowLen, dwTextLen; - - DWORD dwTextStartPos; - char* pTextPtr ; - - - //if ((stream = fopen(CurrentOpenFile.c_str(), "r+")) - // == NULL) - //{ - // ShowMessage("打开文件出错"); - // return; - //} - - //curpos = ftell(stream); - //fseek(stream, 0L, SEEK_END); - //length = ftell(stream); - iFileHandle = FileOpen(CurrentOpenFile, fmOpenRead | fmOpenWrite); //打开文件 - - for (int i = 0; i < sgEdit->ColCount - 1; i++) - { - switch (thOpen->ColType[i]) - { - case 0: //整型值 sgEdit->Row - //fseek(stream, 0x14+((sgEdit->Row-1)*(sgEdit->ColCount-1)+i)*4, 0); - //iVal=StrToInt(sgEdit->Cells[i+1][sgEdit->Row]); - //fwrite(&iVal, 4, 1, stream); - iVal = StrToInt(sgEdit->Cells[i + 1][sgEdit->Row]); - memcpy(buf, &iVal, 4); - FileSeek(iFileHandle, 0x14 + ((sgEdit->Row - 1) * (sgEdit->ColCount - 1) + i) * 4, 0); - FileWrite(iFileHandle, buf, 4); - break; - case 1: //浮点值 - //fseek(stream, 0x14+((sgEdit->Row-1)*(sgEdit->ColCount-1)+i)*4, 0); - //fVal=StrToFloat(sgEdit->Cells[i+1][sgEdit->Row]); - //fwrite(&fVal, 4, 1, stream); - fVal = StrToFloat(sgEdit->Cells[i + 1][sgEdit->Row]); - memcpy(buf, &fVal, 4); - FileSeek(iFileHandle, 0x14 + ((sgEdit->Row - 1) * (sgEdit->ColCount - 1) + i) * 4, 0); - FileWrite(iFileHandle, buf, 4); - break; - case 2: //文本 不存 - break; - } - } - //fclose(stream); - FileClose(iFileHandle); - ShowMessage("The " + IntToStr(sgEdit->Row) + " Row Write Ok!"); -} -//--------------------------------------------------------------------------- - -void __fastcall TFrmMain::btColSaveClick(TObject* Sender) -{ - if (OpenOk == false) return; - - int iFileHandle; //文件句柄 - char Txtbuf[255]; - int iVal; - char buf[4]; - float fVal; - FILE* stream; - long curpos, length; - DWORD dwRows, dwCols, dwRowLen, dwTextLen; - - DWORD dwTextStartPos; - char* pTextPtr ; - - iFileHandle = FileOpen(CurrentOpenFile, fmOpenRead | fmOpenWrite); //打开文件 - - //if ((stream = fopen(CurrentOpenFile.c_str(), "r+")) - // == NULL) - //{ - // ShowMessage("打开文件出错"); - // return; - //} - - //curpos = ftell(stream); - //fseek(stream, 0L, SEEK_END); - //length = ftell(stream); - - - switch (thOpen->ColType[sgEdit->Col]) - { - case 0: //整型值 - for (int i = 0; i < sgEdit->RowCount - 1; i++) - { - //fseek(stream, 0x14+(i*(sgEdit->ColCount-1)+(sgEdit->Col-1))*4, 0); - //iVal=StrToInt(sgEdit->Cells[sgEdit->Col][i+1]); - //fwrite(&iVal, 4, 1, stream); - iVal = StrToInt(sgEdit->Cells[sgEdit->Col][i + 1]); - memcpy(buf, &iVal, 4); - FileSeek(iFileHandle, 0x14 + (i * (sgEdit->ColCount - 1) + (sgEdit->Col - 1)) * 4, 0); - FileWrite(iFileHandle, buf, 4); - } - break; - case 1: //浮点值 - for (int i = 0; i < sgEdit->RowCount - 1; i++) - { - //fseek(stream, 0x14+(i*(sgEdit->ColCount-1)+(sgEdit->Col-1))*4, 0); - //fVal=StrToFloat(sgEdit->Cells[sgEdit->Col][i+1]); - //fwrite(&fVal, 4, 1, stream); - fVal = StrToFloat(sgEdit->Cells[sgEdit->Col][i + 1]); - memcpy(buf, &fVal, 4); - FileSeek(iFileHandle, 0x14 + (i * (sgEdit->ColCount - 1) + (sgEdit->Col - 1)) * 4, 0); - FileWrite(iFileHandle, buf, 4); - } - break; - case 2: //文本 不存 - break; - } - //fclose(stream); - - FileClose(iFileHandle); - ShowMessage("The " + IntToStr(sgEdit->Col) + "Col Write Ok!"); -} -//--------------------------------------------------------------------------- - -void __fastcall TFrmMain::btRowClearClick(TObject* Sender) -{ - if (OpenOk == false) return; - - int iFileHandle; //文件句柄 - char Txtbuf[255]; - int iVal; - float fVal; - FILE* stream; - long curpos, length; - DWORD dwRows, dwCols, dwRowLen, dwTextLen; - - DWORD dwTextStartPos; - char* pTextPtr ; - - - if ((stream = fopen(CurrentOpenFile.c_str(), "r+")) - == NULL) - { - ShowMessage("Open File Error!"); - return; - } - - curpos = ftell(stream); - fseek(stream, 0L, SEEK_END); - length = ftell(stream); - - for (int i = 1; i < sgEdit->ColCount - 1; i++) - { - switch (thOpen->ColType[i]) - { - case 0: //整型值 sgEdit->Row - //fseek(stream, 0x14+(sgEdit->Row*(sgEdit->ColCount-1)+i)*4, 0); - //iVal=StrToInt(sgEdit->Cells[i+1][sgEdit->Row]); - //fwrite(&iVal, 4, 1, stream); - sgEdit->Cells[i + 1][sgEdit->Row] = "0"; - break; - case 1: //浮点值 - //fseek(stream, 0x14+(sgEdit->Row*(sgEdit->ColCount-1)+i)*4, 0); - //fVal=StrToFloat(sgEdit->Cells[i+1][sgEdit->Row]); - //fwrite(&fVal, 4, 1, stream); - sgEdit->Cells[i + 1][sgEdit->Row] = "0"; - break; - case 2: //文本 不存 - break; - } - } - fclose(stream); -} -//--------------------------------------------------------------------------- - -void __fastcall TFrmMain::btColClearClick(TObject* Sender) -{ - if (OpenOk == false) return; - - int iFileHandle; //文件句柄 - char Txtbuf[255]; - int iVal; - float fVal; - FILE* stream; - long curpos, length; - DWORD dwRows, dwCols, dwRowLen, dwTextLen; - - DWORD dwTextStartPos; - char* pTextPtr ; - - - if ((stream = fopen(CurrentOpenFile.c_str(), "r+")) - == NULL) - { - ShowMessage("Open File Error!"); - return; - } - - curpos = ftell(stream); - fseek(stream, 0L, SEEK_END); - length = ftell(stream); - - - switch (thOpen->ColType[sgEdit->Col]) - { - case 0: //整型值 - for (int i = 0; i < sgEdit->RowCount - 1; i++) - { - //fseek(stream, 0x14+(i*(sgEdit->ColCount-1)+(ColIndex-1))*4, 0); - //iVal=StrToInt(sgEdit->Cells[ColIndex][i+1]); - //fwrite(&iVal, 4, 1, stream); - sgEdit->Cells[sgEdit->Col][i + 1] = "0"; - } - break; - case 1: //浮点值 - for (int i = 0; i < sgEdit->RowCount - 1; i++) - { - //fseek(stream, 0x14+(i*(sgEdit->ColCount-1)+(ColIndex-1))*4, 0); - //fVal=StrToFloat(sgEdit->Cells[ColIndex][i+1]); - //fwrite(&fVal, 4, 1, stream); - sgEdit->Cells[sgEdit->Col][i + 1] = "0"; - } - break; - case 2: //文本 不存 - break; - } - fclose(stream); -} -//--------------------------------------------------------------------------- - -void __fastcall TFrmMain::ToolButton4Click(TObject* Sender) -{ - AnsiString Cmd; - Cmd = "calc.exe"; - WinExec(Cmd.c_str(), SW_SHOWNORMAL); -} -//--------------------------------------------------------------------------- - - diff --git a/contrib/dbcEditer/dbcedit.ddp b/contrib/dbcEditer/dbcedit.ddp deleted file mode 100644 index cdc0ee8c2..000000000 Binary files a/contrib/dbcEditer/dbcedit.ddp and /dev/null differ diff --git a/contrib/dbcEditer/dbcedit.dfm b/contrib/dbcEditer/dbcedit.dfm deleted file mode 100644 index 0750c97cd..000000000 --- a/contrib/dbcEditer/dbcedit.dfm +++ /dev/null @@ -1,1259 +0,0 @@ -object FrmMain: TFrmMain - Left = 162 - Top = 122 - Width = 544 - Height = 375 - Caption = 'Dbc Editer v1.4.2 Vendy QQ:11177905' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - OnDestroy = FormDestroy - PixelsPerInch = 96 - TextHeight = 13 - object Panel1: TPanel - Left = 0 - Top = 33 - Width = 536 - Height = 315 - Align = alClient - Caption = 'Panel1' - TabOrder = 0 - object sgEdit: TStringGrid - Left = 1 - Top = 1 - Width = 534 - Height = 287 - Align = alClient - Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goDrawFocusSelected, goRowSizing, goColSizing, goEditing] - PopupMenu = PopupMenu1 - TabOrder = 0 - OnKeyDown = sgEditKeyDown - OnSelectCell = sgEditSelectCell - end - object pnFileName: TPanel - Left = 1 - Top = 288 - Width = 534 - Height = 26 - Align = alBottom - Alignment = taLeftJustify - Caption = 'pnFileName' - Font.Charset = DEFAULT_CHARSET - Font.Color = clRed - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - TabOrder = 1 - object lbOpState: TLabel - Left = 444 - Top = 1 - Width = 89 - Height = 24 - Align = alRight - AutoSize = False - Caption = #25171#24320#25991#20214#29366#24577 - end - end - end - object CoolBar1: TCoolBar - Left = 0 - Top = 0 - Width = 536 - Height = 33 - Bands = < - item - Control = ToolBar1 - ImageIndex = -1 - Width = 532 - end> - object ToolBar1: TToolBar - Left = 9 - Top = 0 - Width = 519 - Height = 25 - Caption = 'ToolBar1' - Images = ImageList1 - TabOrder = 0 - object btOpen: TToolButton - Left = 0 - Top = 2 - Caption = 'btOpen' - ImageIndex = 7 - OnClick = btOpenClick - end - object btSave: TToolButton - Left = 23 - Top = 2 - Caption = 'btSave' - Enabled = False - Grouped = True - ImageIndex = 8 - OnClick = btSaveClick - end - object ToolButton2: TToolButton - Left = 46 - Top = 2 - Width = 8 - Caption = 'ToolButton2' - ImageIndex = 10 - Style = tbsSeparator - end - object ToolButton1: TToolButton - Left = 54 - Top = 2 - Caption = 'ToolButton1' - ImageIndex = 9 - OnClick = ToolButton1Click - end - object ToolButton3: TToolButton - Left = 77 - Top = 2 - Caption = 'ToolButton3' - ImageIndex = 10 - OnClick = ToolButton3Click - end - object ToolButton5: TToolButton - Left = 100 - Top = 2 - Width = 8 - Caption = 'ToolButton5' - ImageIndex = 12 - Style = tbsSeparator - end - object ToolButton4: TToolButton - Left = 108 - Top = 2 - Caption = 'ToolButton4' - ImageIndex = 11 - OnClick = ToolButton4Click - end - end - end - object OpenDialog1: TOpenDialog - Filter = '.dbc|*.dbc' - Left = 216 - Top = 96 - end - object PopupMenu1: TPopupMenu - OnPopup = PopupMenu1Popup - Left = 264 - Top = 96 - object N1: TMenuItem - Caption = 'Set Current Col Title' - OnClick = N1Click - end - object N2: TMenuItem - Caption = 'Set Current Col Type' - object btIntType: TMenuItem - Caption = 'INT' - OnClick = btIntTypeClick - end - object btFloatType: TMenuItem - Caption = 'FLOAT' - OnClick = btFloatTypeClick - end - object btTxtType: TMenuItem - Caption = 'TEXT' - OnClick = btTxtTypeClick - end - end - object N4: TMenuItem - Caption = 'Write Current Grid' - OnClick = N4Click - end - object btRowSave: TMenuItem - Caption = 'Write Current Row' - OnClick = btRowSaveClick - end - object btColSave: TMenuItem - Caption = 'Write Current Col' - OnClick = btColSaveClick - end - object btRowClear: TMenuItem - Caption = 'Clear Current Row' - OnClick = btRowClearClick - end - object btColClear: TMenuItem - Caption = 'Clear Current Col' - OnClick = btColClearClick - end - end - object ImageList1: TImageList - Left = 352 - Top = 112 - Bitmap = { - 494C010118001D00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 - 0000000000003600000028000000400000008000000001002000000000000080 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000800000008000000080000000800000008000000080000000800000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000FF000000FF00FFFFFF00FFFFFF00FFFFFF000000FF000000FF000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000008000 - 000080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008000 - 000080000000000000000000000000000000000000000000000000000000FFFF - FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00FFFF - FF00000000000000000000000000000000000000000000000000000000000000 - 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF - 000000FF00000000000000000000000000000000000000000000000000000000 - 00000000FF0080808000000000000000000000000000000000000000FF008080 - 8000000000000000000000000000000000000000000000000000800000008000 - 000080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008000 - 0000800000008000000000000000000000000000000000000000FFFFFF000000 - FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 - FF00FFFFFF000000000000000000000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000FF00808080000000000000000000000000000000FF00808080000000 - 0000000000000000000000000000000000000000000080000000800000008000 - 0000800000008000000080000000FFFFFF00FFFFFF00FFFFFF00800000008000 - 00008000000080000000000000000000000000000000FFFFFF000000FF000000 - FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 - FF000000FF00FFFFFF0000000000000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000FF008080800000000000000000000000FF0080808000000000000000 - 0000000000000000000000000000000000000000000080000000800000008000 - 0000800000008000000080000000FFFFFF00FFFFFF00FFFFFF00800000008000 - 0000800000008000000080000000000000000000FF000000FF000000FF000000 - FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 - FF000000FF000000FF000000FF00000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000FF0080808000000000000000FF008080800000000000000000000000 - 0000000000000000000000000000000000008000000080000000800000008000 - 0000800000008000000080000000FFFFFF00FFFFFF00FFFFFF00800000008000 - 0000800000008000000080000000000000000000FF000000FF000000FF000000 - FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 - FF000000FF000000FF000000FF00000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000FF00808080000000FF00808080000000000000000000000000000000 - 0000000000000000000000000000000000008000000080000000800000008000 - 0000800000008000000080000000FFFFFF00FFFFFF00FFFFFF00800000008000 - 000080000000800000008000000000000000FFFFFF000000FF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF000000FF00FFFFFF00000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000FF000000FF000000FF000000FF000000FF000000FF000000FF008080 - 8000000000000000000000000000000000008000000080000000800000008000 - 0000800000008000000080000000FFFFFF00FFFFFF00FFFFFF00800000008000 - 000080000000800000008000000000000000FFFFFF000000FF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF000000FF00FFFFFF00000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000FF0080808000808080008080800080808000808080000000FF008080 - 8000000000000000000000000000000000008000000080000000800000008000 - 0000800000008000000080000000FFFFFF00FFFFFF00FFFFFF00800000008000 - 000080000000800000008000000000000000FFFFFF000000FF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF000000FF00FFFFFF00000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000FF0080808000000000000000000000000000000000000000FF008080 - 8000000000000000000000000000000000000000000080000000800000008000 - 000080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00800000008000 - 0000800000008000000080000000000000000000FF000000FF000000FF000000 - FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 - FF000000FF000000FF000000FF00000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000FF00808080000000000000000000000000000000FF000000FF008080 - 8000000000000000000000000000000000000000000080000000800000008000 - 0000800000008000000080000000800000008000000080000000800000008000 - 0000800000008000000080000000000000000000FF000000FF000000FF000000 - FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 - FF000000FF000000FF000000FF00000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000FF000000FF000000FF000000FF000000FF00808080000000 - 0000000000000000000000000000000000000000000080000000800000008000 - 00008000000080000000FFFFFF00FFFFFF00FFFFFF0080000000800000008000 - 00008000000080000000000000000000000000000000FFFFFF000000FF000000 - FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 - FF000000FF00FFFFFF0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000008080800080808000808080008080800080808000000000000000 - 0000000000000000000000000000000000000000000000000000800000008000 - 00008000000080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00800000008000 - 0000800000000000000000000000000000000000000000000000FFFFFF000000 - FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 - FF00FFFFFF000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000008000 - 00008000000080000000FFFFFF00FFFFFF00FFFFFF0080000000800000008000 - 000000000000000000000000000000000000000000000000000000000000FFFF - FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00FFFF - FF00000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000080000000800000008000000080000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000FF000000FF00FFFFFF00FFFFFF00FFFFFF000000FF000000FF000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000080000000800000008000000080000000800000008000 - 0000800000008000000080000000800000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000080000000800000008000 - 0000800000008000000080000000800000008000000080000000800000008000 - 0000800000008000000000000000000000000000000000000000000000000000 - 0000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00800000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000080000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF008000000000000000000000000000000000000000000000000000 - 0000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00800000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000080000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF008000000000000000000000000000000000000000000000000000 - 0000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00800000000000000000000000000000000000 - 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF - 000000FF00000000000000000000000000000000000000000000000000000000 - 000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF - 000000FF00000000000000000000000000000000000080000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF008000000000000000000000000000000000000000000000008000 - 0000800000008000000080000000800000008000000080000000800000008000 - 0000800000008000000080000000800000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000080000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF008000000000000000000000000000000000000000000000008000 - 0000FFFFFF00FFFFFF0080000000800000008000000080000000800000008000 - 00008000000080000000FFFFFF00800000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000080000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF008000000000000000000000000000000000000000000000008000 - 0000FFFFFF00FFFFFF0080000000800000008000000080000000800000008000 - 0000800000008000000080000000800000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000080000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF008000000000000000000000000000000000000000000000008000 - 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00800000000000000000000000000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000080000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF008000000000000000000000000000000080000000800000008000 - 0000800000008000000080000000800000008000000080000000800000008000 - 0000800000000000000000000000000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000080000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF008000000000000000000000000000000080000000FFFFFF008000 - 000080000000800000008000000080000000800000008000000080000000FFFF - FF00800000000000000000000000000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000080000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF008000000000000000000000000000000080000000FFFFFF008000 - 0000800000008000000080000000800000008000000080000000800000008000 - 0000800000000000000000000000000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000080000000800000008000 - 0000800000008000000080000000800000008000000080000000800000008000 - 0000800000008000000000000000000000000000000080000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00800000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000080000000800000008000 - 00008000000080000000FFFFFF00800000008000000080000000800000008000 - 0000FFFFFF008000000000000000000000000000000080000000800000008000 - 0000800000008000000080000000800000008000000080000000800000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000FF00000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000080000000800000008000 - 0000800000008000000080000000800000008000000080000000800000008000 - 0000800000008000000000000000000000000000000080000000800000008000 - 00008000000080000000800000008000000080000000FFFFFF00800000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000080000000800000008000 - 0000800000008000000080000000800000008000000080000000800000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000800000008000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000008000 - 0000C0C0C0008000000080000000000000000000000000000000000000000000 - 0000000000000000000000000000000000008000000080000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000080000000800000008000 - 0000800000008000000080000000800000008000000080000000800000008000 - 0000800000008000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000080000000C0C0 - C000800000008000000080000000000000000000000000000000000000000000 - 0000000000000000000000000000800000008000000080000000000000000000 - 0000000000000000000000000000000000000000000000000000C0C0C000C0C0 - C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C0000000 - 0000C0C0C0000000000000000000000000000000000080000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF008000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000080000000C0C0C0008000 - 0000800000008000000000000000000000000000000000000000000000000000 - 0000000000000000000080000000800000008000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000C0C0C00000000000000000000000000080000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF008000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000080000000C0C0C000800000008000 - 000080000000000000000000000000000000000000000000000080808000C0C0 - C000FFFFFF008080800000000000800000000000000000000000000000000000 - 00000000800000000000000000000000000000000000C0C0C000C0C0C000C0C0 - C000C0C0C000C0C0C000C0C0C00000FFFF0000FFFF0000FFFF00C0C0C000C0C0 - C000000000000000000000000000000000000000000080000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF008000000000000000000000000000000000000000000000000000 - 0000C0C0C000C0C0C000C0C0C000FFFFFF008080800080000000800000008000 - 0000000000000000000000000000000000000000000080808000C0C0C000C0C0 - C000C0C0C000FFFFFF0080808000000000000000000000000000000000000000 - 80000000800000000000000000000000000000000000C0C0C000C0C0C000C0C0 - C000C0C0C000C0C0C000C0C0C000808080008080800080808000C0C0C000C0C0 - C00000000000C0C0C00000000000000000000000000080000000800000008000 - 0000800000008000000080000000800000008000000080000000800000008000 - 000080000000800000000000000000000000000000000000000080808000C0C0 - C000C0C0C000C0C0C000C0C0C000C0C0C000FFFFFF0080808000000000000000 - 00000000000000000000000000000000000000000000C0C0C000C0C0C000C0C0 - C000C0C0C000C0C0C000FFFFFF00000000000000000000000000000080000000 - 8000000080000000800000008000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000C0C0C000C0C0C000000000000000000080000000800000008000 - 0000800000008000000080000000800000008000000080000000800000008000 - 0000FFFFFF008000000000000000000000000000000000000000C0C0C000C0C0 - C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000FFFFFF00000000000000 - 00000000000000000000000000000000000000000000C0C0C000FFFFFF00FFFF - 0000C0C0C000C0C0C000C0C0C000000000000000000000000000000000000000 - 80000000800000000000000000000000800000000000C0C0C000C0C0C000C0C0 - C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C0000000 - 0000C0C0C00000000000C0C0C000000000000000000080000000800000008000 - 0000800000008000000080000000800000008000000080000000800000008000 - 00008000000080000000000000000000000000000000C0C0C000C0C0C000C0C0 - C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C0000000 - 0000000000000000000000000000000000000000000080808000FFFFFF00FFFF - FF00C0C0C000C0C0C00080808000000000000000000000000000000000000000 - 0000000080000000000000000000000080000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000C0C0 - C00000000000C0C0C00000000000000000000000000080000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF0080000000000000000000000000000000C0C0C000C0C0C000C0C0 - C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C0000000 - 000000000000000000000000000000000000000000000000000080808000C0C0 - C000C0C0C0008080800000000000000000000000000000000000000000000000 - 000000000000000000000000000000008000000000000000000000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 - 0000C0C0C00000000000C0C0C000000000000000000080000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF0080000000000000000000000000000000C0C0C000FFFFFF00FFFF - 0000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C0000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000008000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 - 0000000000000000000000000000000000000000000080000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF0080000000000000000000000000000000C0C0C000FFFFFF00FFFF - 0000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C0000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000008000000000000000 - 0000000080000000000000000000000000000000000000000000000000000000 - 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00000000000000000000000000000000000000000080000000800000008000 - 0000800000008000000080000000800000008000000080000000800000008000 - 0000800000008000000000000000000000000000000000000000FFFFFF00FFFF - FF00FFFF0000FFFF0000C0C0C000C0C0C000C0C0C000C0C0C000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000008000000000000000 - 0000000080000000800000000000000000000000000000000000000000000000 - 000000000000FFFFFF000000000000000000000000000000000000000000FFFF - FF00000000000000000000000000000000000000000080000000800000008000 - 0000800000008000000080000000800000008000000080000000800000008000 - 0000FFFFFF00800000000000000000000000000000000000000080808000FFFF - FF00FFFFFF00FFFFFF00C0C0C000C0C0C000C0C0C00080808000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000080000000 - 8000000080000000800000008000000000000000000000000000000000000000 - 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF000000000000000000000000000000000080000000800000008000 - 0000800000008000000080000000800000008000000080000000800000008000 - 0000800000008000000000000000000000000000000000000000000000000000 - 0000C0C0C000C0C0C000C0C0C000C0C0C0000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000080000000800000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000080000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000008080000080 - 8000000000000000000000000000000000000000000000000000C0C0C000C0C0 - C0000000000000808000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 - 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000008080000080 - 8000000000000000000000000000000000000000000000000000C0C0C000C0C0 - C0000000000000808000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00000000000000 - 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000800000008000 - 0000800000000000000000000000000000000000000000000000008080000080 - 8000000000000000000000000000000000000000000000000000C0C0C000C0C0 - C0000000000000808000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF000000000080808000C0C0C000C0C0C0008080 - 80000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000800000008000 - 0000800000000000000000000000000000000000000000000000008080000080 - 8000000000000000000000000000000000000000000000000000000000000000 - 00000000000000808000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000000000080808000C0C0C000C0C0C000FFFF00008080 - 80008080800000000000000000000000000000000000FFFFFF00000000000000 - 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000008080000080 - 8000008080000080800000808000008080000080800000808000008080000080 - 80000080800000808000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0000000000C0C0C000C0C0C000C0C0C000C0C0C0008080 - 8000C0C0C00000000000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000800000008000 - 0000800000000000000000000000000000000000000000000000008080000080 - 8000000000000000000000000000000000000000000000000000000000000000 - 00000080800000808000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF0000000000C0C0C000FFFF0000C0C0C000C0C0C0008080 - 8000C0C0C00000000000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000800000008000 - 0000800000000000000000000000000000000000000000000000008080000000 - 0000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0 - C0000000000000808000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000000000080808000FFFF0000FFFF0000C0C0C0008080 - 80008080800000000000000000000000000000000000FFFFFF00000000000000 - 0000FFFFFF00FFFFFF00FFFFFF0000000000C0C0C00000000000FFFFFF000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000008000 - 0000800000008000000000000000000000000000000000000000008080000000 - 0000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0 - C0000000000000808000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF000000000080808000C0C0C000C0C0C0008080 - 80000000000000000000000000000000000000000000FFFFFF0000000000C0C0 - C00000000000FFFFFF0000000000C0C0C00000000000C0C0C000000000000000 - 0000000000000000000080000000800000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000800000008000000080000000000000000000000000000000008080000000 - 0000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0 - C0000000000000808000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00FFFFFF000000 - 0000C0C0C00000000000C0C0C00000000000C0C0C00000000000C0C0C000C0C0 - C000C0C0C0000000000080000000800000000000000000000000000000000000 - 0000000000000000000000000000800000008000000080000000000000000000 - 0000000000008000000080000000800000000000000000000000008080000000 - 0000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0 - C0000000000000808000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000C0C0C00000000000C0C0C00000000000C0C0C000C0C0C000C0C0 - C000C0C0C000C0C0C00080000000800000000000000000000000000000000000 - 0000000000000000000000000000800000008000000080000000000000000000 - 0000000000008000000080000000800000000000000000000000008080000000 - 0000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0 - C0000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000C0C0C00000000000C0C0C000C0C0C000C0C0C000C0C0 - C000C0C0C000C0C0C00080000000800000000000000000000000000000000000 - 0000000000000000000000000000800000008000000080000000000000000000 - 0000000000008000000080000000800000000000000000000000008080000000 - 0000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0 - C00000000000C0C0C000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000C0C0C000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000C0C0C000C0C0C000C0C0C000C0C0C000C0C0 - C000C0C0C0000000000080000000800000000000000000000000000000000000 - 0000000000000000000000000000000000008000000080000000800000008000 - 0000800000008000000080000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000080000000800000000000000000000000000000000000 - 0000000000000000000000000000000000000000000080000000800000008000 - 0000800000008000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00000000000000000000000000000000000000000000000000008080000080 - 8000008080000080800000808000008080000080800000808000008080000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00000000000000000000000000000000000000000000FFFF00000000000080 - 8000008080000080800000808000008080000080800000808000008080000080 - 8000000000000000000000000000000000000000000000000000000000008000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF000000000000000000000000000000000000000000FFFFFF0000FFFF000000 - 0000008080000080800000808000008080000080800000808000008080000080 - 8000008080000000000000000000000000000000000000000000000000008000 - 0000000000000000000000000000000000000000000080000000800000008000 - 0000800000008000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00000000000000000000000000000000000000000000FFFF00FFFFFF0000FF - FF00000000000080800000808000008080000080800000808000008080000080 - 8000008080000080800000000000000000000000000000000000800000000000 - 0000000000000000000000000000000000000000000000000000800000008000 - 0000800000008000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF000000000000000000000000000000000000000000FFFFFF0000FFFF00FFFF - FF0000FFFF000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000800000000000 - 0000000000000000000000000000000000000000000000000000000000008000 - 0000800000008000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00000000000000000000000000000000000000000000FFFF00FFFFFF0000FF - FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00000000000000 - 0000000000000000000000000000000000000000000000000000800000000000 - 0000000000000000000000000000000000000000000000000000800000000000 - 0000800000008000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF000000000000000000000000000000000000000000FFFFFF0000FFFF00FFFF - FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF00000000000000 - 0000000000000000000000000000000000000000000000000000000000008000 - 0000000000000000000000000000000000008000000080000000000000000000 - 0000000000008000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00000000000000000000000000000000000000000000FFFF00FFFFFF0000FF - FF00000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000800000008000000080000000800000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000008000000080000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000080000000800000008000000080000000800000008000 - 0000800000008000000080000000800000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000800000000000000000000000800000000000000000000000800000008000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000800000008000000080000000800000008000 - 0000800000008000000080000000800000000000000000000000000000000000 - 0000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00800000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000800000000000000000000000800000000000000080000000000000000000 - 0000800000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00800000000000000080808000008080008080 - 8000008080008080800080000000FFFFFF000000000000000000000000000000 - 00000000000000000000FFFFFF00800000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000800000000000000000000000800000000000000080000000000000000000 - 0000800000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000080000000FFFFFF0000000000000000000000 - 00000000000000000000FFFFFF00800000000000000000808000808080000080 - 8000808080000080800080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00800000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000008000000080000000800000000000000080000000000000000000 - 0000800000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00800000000000000080808000008080008080 - 8000008080008080800080000000FFFFFF00000000000000000000000000FFFF - FF00800000008000000080000000800000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000800000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000800000000000000080000000800000008000 - 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF0000000000000000000000 - 00000000000000000000FFFFFF00800000000000000000808000808080000080 - 8000808080000080800080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0080000000FFFFFF0080000000000000000000000000000000800000008000 - 0000800000008000000080000000000000000000000000000000000000000000 - 0000800000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000800000000000000080000000000000000000 - 0000000000000000000000000000000000000000000000000000FFFFFF000000 - 000000000000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00800000000000000080808000008080008080 - 8000008080008080800080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00800000008000000000000000000000000000000000000000800000008000 - 0000800000008000000000000000000000000000000000000000000000000000 - 0000000000008000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF000000000000000000FFFF - FF00800000008000000080000000800000000000000000808000808080000080 - 8000808080000080800080000000800000008000000080000000800000008000 - 0000800000000000000000000000000000000000000000000000800000008000 - 0000800000000000000000000000000000000000000000000000000000000000 - 0000000000008000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000FFFFFF000000 - 000000000000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFF - FF0080000000FFFFFF0080000000000000000000000080808000008080008080 - 8000008080008080800000808000808080000080800080808000008080008080 - 8000008080000000000000000000000000000000000000000000800000008000 - 0000000000008000000000000000000000000000000000000000000000000000 - 0000000000008000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF - FF00800000008000000000000000000000000000000000808000808080000000 - 0000000000000000000000000000000000000000000000000000000000008080 - 8000808080000000000000000000000000000000000000000000800000000000 - 0000000000000000000080000000800000000000000000000000000000000000 - 0000800000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000FFFFFF000000 - 000000000000FFFFFF0000000000800000008000000080000000800000008000 - 0000800000000000000000000000000000000000000080808000808080000000 - 0000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000000000008080 - 8000008080000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000008000000080000000800000008000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF0000000000FFFFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000808000808080000080 - 80000000000000FFFF00000000000000000000FFFF0000000000808080000080 - 8000808080000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000FFFF0000FFFF000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000424D3E000000000000003E000000 - 2800000040000000800000000100010000000000000400000000000000000000 - 000000000000000000000000FFFFFF0000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000FFF7FFFFFC3FFFFFFFFBFFFFE00FF01F - E001FFFFC007E00FE003F3CF8003C007E7F7F39F80018003E7C3F33F00010001 - E7EFF27F00000001E7F7F0FF00000001E7FBF00F00000001E7C3F00F00000001 - E77FF3CF00010001E77FF38F00010001A37FF81F80018003C6BFF83FC003C007 - EDDFFFFFE007E00FFFFFFFFFF01FF01FFFFFFC00FFF7FFF78003FC00FFFBFFFB - 8003FC00E001E0018003FC00E003E0038003E000E7F7E7F78003E000E7DDE707 - 8003E000E7EBE7BF8003E007E7F7E7DF80038007E7EBE70F80038007E75DE7FF - 80038007E77FE5DF8003801FE77FE6BF8003801FA37FA37F8003801FC6BFC6BF - FFFF801FEDDFEDDFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFE1FF3FC0078003 - FFC1FE3F80038003FF83C07F00018003F00780F700018003C00F00E700018003 - 801F00C100008003801F00E600008003000F00F680008003000F81FEC0008003 - 000FC3BFE0018003000FFFB7E0078003801FFFB3F0078003801FFFC1F0038003 - C03FFFF3F803FFFFF0FFFFF7FFFFFFFFFFFFFFFFFFFFFFFFC001000C000FF9FF - 80010008000FF9FF80010001000FF3C780010003000F73C780010003000F27FF - 80010003000F07C780010003000F00C780010003000F01E380010007000403F1 - 8001000F000006388001000F00000E388001000FF8001E388001001FFC003F01 - 8001003FFE047F83FFFF007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFEFFDC007001FFFFFC7FFC007000FFFFFC3FBC0070007EFFFE3F7C0070003 - EF83F1E7C0070001DFC3F8CFC0070000DFE3FC1FC007001FDFD3FE3FC007001F - EF3BFC1FC007001FF0FFF8CFC0078FF1FFFFE1E7C00FFFF9FFFFC3F3C01FFF75 - FFFFC7FDC03FFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFFFFFFC00FFFF - F6CFFE008000FFFFF6B7FE000000FFFFF6B7FE000000FFFFF8B780000000FFF7 - FE8F80000001C1F7FE3F80000003C3FBFF7F80000003C7FBFE3F80010003CBFB - FEBF80030003DCF7FC9F80070003FF0FFDDF807F0003FFFFFDDF80FF8007FFFF - FDDF81FFF87FFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 - 000000000000} - end - object Timer1: TTimer - Interval = 300 - OnTimer = Timer1Timer - Left = 440 - Top = 48 - end -end diff --git a/contrib/dbcEditer/dbcedit.h b/contrib/dbcEditer/dbcedit.h deleted file mode 100644 index 2db8d891c..000000000 --- a/contrib/dbcEditer/dbcedit.h +++ /dev/null @@ -1,105 +0,0 @@ -//--------------------------------------------------------------------------- - -#ifndef dbceditH -#define dbceditH -//--------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "thOpenSource.h" - -union TypePtr -{ - long* l; - DWORD* dw; - WORD* w; - char* c; - void* p; - float* f; - - TypePtr(void* in) : p(in) - { - } -}; - -#define TAG(x) (DWORD)( (((DWORD)x&0x0000ff00)<<8)+(((DWORD)x&0x000000ff)<<24)+(((DWORD)x&0x00ff0000)>>8)+(((DWORD)x&0xff000000)>>24) ) - - -//--------------------------------------------------------------------------- -class TFrmMain : public TForm -{ - __published: // IDE-managed Components - TPanel* Panel1; - TCoolBar* CoolBar1; - TToolBar* ToolBar1; - TToolButton* btOpen; - TToolButton* btSave; - TStringGrid* sgEdit; - TOpenDialog* OpenDialog1; - TPopupMenu* PopupMenu1; - TMenuItem* N1; - TMenuItem* N2; - TMenuItem* btIntType; - TMenuItem* btFloatType; - TMenuItem* btTxtType; - TImageList* ImageList1; - TPanel* pnFileName; - TToolButton* ToolButton1; - TToolButton* ToolButton2; - TTimer* Timer1; - TLabel* lbOpState; - TMenuItem* N4; - TToolButton* ToolButton3; - TMenuItem* btRowSave; - TMenuItem* btColSave; - TMenuItem* btRowClear; - TMenuItem* btColClear; - TToolButton* ToolButton4; - TToolButton* ToolButton5; - void __fastcall btOpenClick(TObject* Sender); - void __fastcall btSaveClick(TObject* Sender); - void __fastcall btIntTypeClick(TObject* Sender); - void __fastcall btFloatTypeClick(TObject* Sender); - void __fastcall PopupMenu1Popup(TObject* Sender); - void __fastcall N1Click(TObject* Sender); - void __fastcall FormDestroy(TObject* Sender); - void __fastcall ToolButton1Click(TObject* Sender); - void __fastcall sgEditKeyDown(TObject* Sender, WORD& Key, - TShiftState Shift); - void __fastcall sgEditSelectCell(TObject* Sender, int ACol, - int ARow, bool& CanSelect); - void __fastcall Timer1Timer(TObject* Sender); - void __fastcall N4Click(TObject* Sender); - void __fastcall btTxtTypeClick(TObject* Sender); - void __fastcall ToolButton3Click(TObject* Sender); - void __fastcall btRowSaveClick(TObject* Sender); - void __fastcall btColSaveClick(TObject* Sender); - void __fastcall btRowClearClick(TObject* Sender); - void __fastcall btColClearClick(TObject* Sender); - void __fastcall ToolButton4Click(TObject* Sender); - private: // User declarations - - - thOpenFile* thOpen; - bool Term; - - public: // User declarations - bool OpenOk; - - AnsiString CurrentOpenFile; - __fastcall TFrmMain(TComponent* Owner); - void SaveToFile(const char* pszFileName); - void __fastcall OpenFileCol(AnsiString FileName, int ColIndex, int ColType); -}; -//--------------------------------------------------------------------------- -extern PACKAGE TFrmMain* FrmMain; -//--------------------------------------------------------------------------- -#endif diff --git a/contrib/dbcEditer/pjDbcEditer.bpr b/contrib/dbcEditer/pjDbcEditer.bpr deleted file mode 100644 index 522df6660..000000000 --- a/contrib/dbcEditer/pjDbcEditer.bpr +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[Version Info] -IncludeVerInfo=0 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=2052 -CodePage=936 - -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= - -[Debugging] -DebugSourceDirs=$(BCB)\source\vcl - -[Parameters] -RunParams= -Launcher= -UseLauncher=0 -DebugCWD= -HostApplication= -RemoteHost= -RemotePath= -RemoteLauncher= -RemoteCWD= -RemoteDebug=0 - -[Compiler] -ShowInfoMsgs=0 -LinkDebugVcl=0 -LinkCGLIB=0 - -[CORBA] -AddServerUnit=1 -AddClientUnit=1 -PrecompiledHeaders=1 - -[Language] -ActiveLang= -ProjectLang= -RootDir= - - \ No newline at end of file diff --git a/contrib/dbcEditer/pjDbcEditer.cpp b/contrib/dbcEditer/pjDbcEditer.cpp deleted file mode 100644 index f36d9ce18..000000000 --- a/contrib/dbcEditer/pjDbcEditer.cpp +++ /dev/null @@ -1,37 +0,0 @@ -//--------------------------------------------------------------------------- - -#include -#pragma hdrstop -//--------------------------------------------------------------------------- -USEFORM("dbcedit.cpp", FrmMain); -USEFORM("TitleFrm.cpp", FrmTitle); -USEFORM("SearchFrm.cpp", FrmSearch); -//--------------------------------------------------------------------------- -WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) -{ - try - { - Application->Initialize(); - Application->CreateForm(__classid(TFrmMain), &FrmMain); - Application->CreateForm(__classid(TFrmTitle), &FrmTitle); - Application->CreateForm(__classid(TFrmSearch), &FrmSearch); - Application->Run(); - } - catch (Exception& exception) - { - Application->ShowException(&exception); - } - catch (...) - { - try - { - throw Exception(""); - } - catch (Exception& exception) - { - Application->ShowException(&exception); - } - } - return 0; -} -//--------------------------------------------------------------------------- diff --git a/contrib/dbcEditer/pjDbcEditer.exe b/contrib/dbcEditer/pjDbcEditer.exe deleted file mode 100644 index 9b11ec746..000000000 Binary files a/contrib/dbcEditer/pjDbcEditer.exe and /dev/null differ diff --git a/contrib/dbcEditer/pjDbcEditer.res b/contrib/dbcEditer/pjDbcEditer.res deleted file mode 100644 index d1c532760..000000000 Binary files a/contrib/dbcEditer/pjDbcEditer.res and /dev/null differ diff --git a/contrib/dbcEditer/pjDbcEditer.tds b/contrib/dbcEditer/pjDbcEditer.tds deleted file mode 100644 index 1995524a2..000000000 Binary files a/contrib/dbcEditer/pjDbcEditer.tds and /dev/null differ diff --git a/contrib/dbcEditer/thOpenSource.cpp b/contrib/dbcEditer/thOpenSource.cpp deleted file mode 100644 index cc1c86026..000000000 --- a/contrib/dbcEditer/thOpenSource.cpp +++ /dev/null @@ -1,188 +0,0 @@ -//--------------------------------------------------------------------------- - -#include -#pragma hdrstop - -#include "thOpenSource.h" -#include "dbcedit.h" -#include "stdio.h" -#include -#include -#include -#pragma package(smart_init) -//--------------------------------------------------------------------------- - -// Important: Methods and properties of objects in VCL can only be -// used in a method called using Synchronize, for example: -// -// Synchronize(UpdateCaption); -// -// where UpdateCaption could look like: -// -// void __fastcall thOpenFile::UpdateCaption() -// { -// Form1->Caption = "Updated in a thread"; -// } -//--------------------------------------------------------------------------- - -__fastcall thOpenFile::thOpenFile(bool CreateSuspended) - : TThread(CreateSuspended) -{ - -} -//--------------------------------------------------------------------------- -void __fastcall thOpenFile::Execute() -{ - //---- Place thread code here ---- - //if(!Terminated){ - // FrmMain->LoadAndModify(FrmMain->OpenDialog1->FileName.c_str()); - // FrmMain->OpenOk=true; - //} - thEnd = false; - RunOpen(); - FrmMain->OpenOk = true; - thEnd = true; - -} -//--------------------------------------------------------------------------- -void __fastcall thOpenFile::RunOpen() -{ - LoadAndModify(FrmMain->OpenDialog1->FileName.c_str()); - //OpenOk=true; -} - -void thOpenFile::ReadAndModifyFromBuff(char* pBuff, DWORD dwSize, const char* pszFileName) -{ - char szErrorMsg[MAX_PATH]; - char szNewFileName[MAX_PATH]; - DWORD w; - TIniFile* ini; - - - TypePtr p(pBuff); - if ('WDBC' != TAG(*p.dw)) - { - _snprintf(szErrorMsg, 512, "[%s]Not Wow's dbc file!", pszFileName); - ShowMessage(szErrorMsg); - return; - } - p.dw++; - - DWORD dwRows, dwCols, dwRowLen, dwTextLen; - dwRows = *p.dw++; - dwCols = *p.dw++; - dwRowLen = *p.dw++; - dwTextLen = *p.dw++; - - FrmMain->sgEdit->RowCount = dwRows + 1; - FrmMain->sgEdit->ColCount = dwCols + 1; - - for (int i = 0; i < FrmMain->sgEdit->RowCount; i++) - { - FrmMain->sgEdit->Cells[0][i] = IntToStr(i); - if (Terminated) return; - } - //设定列标题 - AnsiString iniSetFile = ExtractFilePath(Application->ExeName) + "BcdEditer.ini"; - AnsiString SectionName = ExtractFileName(FrmMain->CurrentOpenFile); - - ini = new TIniFile(iniSetFile); - for (int j = 0; j < FrmMain->sgEdit->ColCount; j++) - { - FrmMain->sgEdit->Cells[j][0] = ini->ReadString(SectionName, "ColTitle" + IntToStr(j), IntToStr(j)); - //sgEdit->Cells[j][0]=IntToStr(j); - ColType[j] = ini->ReadInteger(SectionName, "ColType" + IntToStr(j), 0); - if (Terminated) return; - } - delete ini; - - //int *ColType = new int[dwCols]; - - DWORD dwTextStartPos = dwRows * dwRowLen + 20; - char* pTextPtr = pBuff + dwTextStartPos; - char pszTemp[MAX_PATH]; - float fTemp; - long lTemp; - DWORD i, j; - BOOL* pbString = new BOOL[dwRows * dwCols]; - float newTmp; - //int ColType; - - ini = new TIniFile(iniSetFile); - - for (i = 0; i < dwRows; i++) - { - for (j = 0; j < dwCols; j++) - { - //SleepEx(0,0); - if (Terminated) return; - lTemp = *p.l; - newTmp = *p.f; - memcpy(&fTemp, &newTmp, 4); - - if (j == 0) //ID - FrmMain->sgEdit->Cells[j + 1][i + 1] = IntToStr(lTemp); - else - { - - //ColType= ini->ReadInteger(SectionName,"ColType"+IntToStr(j),0); - - switch (ColType[j + 1]) - { - case 0: //整型 - FrmMain->sgEdit->Cells[j + 1][i + 1] = IntToStr(lTemp); - break; - case 1: //浮点 - FrmMain->sgEdit->Cells[j + 1][i + 1] = FloatToStr(fTemp); - break; - case 2: //文本 文本类型只能看,不能编辑 - if (dwTextStartPos + lTemp < dwSize) - { - pTextPtr = pBuff + dwTextStartPos + lTemp; - FrmMain->sgEdit->Cells[j + 1][i + 1] = pTextPtr; - } - else - { - FrmMain->sgEdit->Cells[j + 1][i + 1] = "该列不是文本"; - } - break; - default: //整型 - FrmMain->sgEdit->Cells[j + 1][i + 1] = IntToStr(lTemp); - } - } - p.c += 4; - } - } - - delete [] pbString; - //delete [] ColType; - delete ini; - -} - -void thOpenFile::LoadAndModify(const char* pszFileName) -{ - HANDLE hFile = NULL; - hFile = CreateFile(pszFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); - if (hFile == INVALID_HANDLE_VALUE)return; - - DWORD r = 0, nFileSize = 0; - nFileSize = GetFileSize(hFile, NULL); - char* pTmpBuf = new char[nFileSize]; - if (pTmpBuf == NULL) - { - CloseHandle(hFile); - return; - } - ReadFile(hFile, pTmpBuf, nFileSize, &r, NULL); - - FrmMain->CurrentOpenFile = pszFileName; - FrmMain->btSave->Enabled = true; - - ReadAndModifyFromBuff(pTmpBuf, nFileSize, pszFileName); - - //SAFE_DELETE_ARRAY(pTmpBuf); - delete [] pTmpBuf; - CloseHandle(hFile); - -} diff --git a/contrib/dbcEditer/thOpenSource.h b/contrib/dbcEditer/thOpenSource.h deleted file mode 100644 index a9d7cc995..000000000 --- a/contrib/dbcEditer/thOpenSource.h +++ /dev/null @@ -1,24 +0,0 @@ -//--------------------------------------------------------------------------- - -#ifndef thOpenSourceH -#define thOpenSourceH -//--------------------------------------------------------------------------- -#include -//--------------------------------------------------------------------------- -class thOpenFile : public TThread -{ - private: - protected: - void __fastcall Execute(); - void __fastcall RunOpen(); - public: - bool thEnd; - int ColType[10000]; - - __fastcall thOpenFile(bool CreateSuspended); - void LoadAndModify(const char* pszFileName); - void ReadAndModifyFromBuff(char* pBuff, DWORD dwSize, const char* pszFileName); - -}; -//--------------------------------------------------------------------------- -#endif diff --git a/contrib/dbcformat/DBC Store.exe b/contrib/dbcformat/DBC Store.exe deleted file mode 100755 index f0e001495..000000000 Binary files a/contrib/dbcformat/DBC Store.exe and /dev/null differ diff --git a/contrib/dbcformat/dbc.desc b/contrib/dbcformat/dbc.desc deleted file mode 100644 index e17767d2c..000000000 --- a/contrib/dbcformat/dbc.desc +++ /dev/null @@ -1,241 +0,0 @@ -ENTRY ItemSetEntry - -UNUSED INDEX setid -UNUSED STR setname -UNKNOWN[7] -UNUSED UINT flags//, const -UNUSED UINT required_item_id[8] -UNKNOWN[48] -UINT spells[8] -UINT items_to_triggerspell[8] //items_to_triggerspell[0] -- for spells[0] -UINT required_skill_id//only 2 items sets have requirements -UINT required_skill_value - -ENDENTRY - - -ENTRY TalentEntry - - INDEX TalentID - UINT TalentTree - UNKNOWN [2] - UINT RankID[5] - UNKNOWN[12] - -ENDENTRY - - -ENTRY emoteentry - - INDEX Id - UNUSED STR name - UINT textid - UNUSED UINT textid2 - UNUSED UINT textid3 - UNUSED UINT textid4 - UNKNOWN - UNUSED UINT textid5 - UNKNOWN - UNUSED UINT textid6 - UNKNOWN[9] - -ENDENTRY - -ENTRY SpellEntry - - INDEX Id - UINT School - UNKNOWN [2] - UINT Category - UNKNOWN - UINT Attributes - UINT AttributesEx - UNKNOWN [3] - UINT Targets - UINT TargetCreatureType - UINT RequiresSpellFocus - UNKNOWN - UINT CasterAuraState - UINT CastingTimeIndex - UINT RecoveryTime - UINT CategoryRecoveryTime - UINT InterruptFlags - UINT AuraInterruptFlags - UINT ChannelInterruptFlags - UINT procFlags - UINT procChance - UINT procCharges - UINT maxLevel - UINT baseLevel - UINT spellLevel - UINT DurationIndex - UINT powerType - UINT manaCost - UINT manaCostPerlevel - UINT manaPerSecond - UINT manaPerSecondPerLevel - UINT rangeIndex - FLOAT speed - UINT modalNextSpell - UNKNOWN - UINT Totem[2] - UINT Reagent[8] - UINT ReagentCount[8] - UINT EquippedItemClass - UINT EquippedItemSubClass - UINT Effect[3] // 59 - 61 - UINT EffectDieSides[3] - UINT EffectBaseDice[3] - FLOAT EffectDicePerLevel[3] - FLOAT EffectRealPointsPerLevel[3] - INT EffectBasePoints[3] // 74 - 76 - UNKNOWN [3] - UINT EffectImplicitTargetA[3] // 80 - 82 - UINT EffectImplicitTargetB[3] // 83 - 85 - UINT EffectRadiusIndex[3] - UINT EffectApplyAuraName[3] // 89 - 91 - UINT EffectAmplitude[3] - UINT Effectunknown[3] - UINT EffectChainTarget[3] - UINT EffectItemType[3] - UINT EffectMiscValue[3] // 104 - 106 - UINT EffectTriggerSpell[3] - FLOAT EffectPointsPerComboPoint[3] - UINT SpellVisual - UNKNOWN - UINT SpellIconID - UINT activeIconID - UINT spellPriority - UNUSED STR Name - UNUSED STR NameAlt1 - UNUSED STR NameAlt2 - UNUSED STR NameAlt3 - UNUSED STR NameAlt4 - UNUSED STR NameAlt5 - UNUSED STR NameAlt6 - UNUSED STR NameAlt7 - UNUSED STR NameFlags - UINT Rank - UINT RankAlt1 - UINT RankAlt2 - UINT RankAlt3 - UINT RankAlt4 - UINT RankAlt5 - UINT RankAlt6 - UINT RankAlt7 - UINT RankFlags - UNUSED STR Description - UNUSED STR DescriptionAlt1 - UNUSED STR DescriptionAlt2 - UNUSED STR DescriptionAlt3 - UNUSED STR DescriptionAlt4 - UNUSED STR DescriptionAlt5 - UNUSED STR DescriptionAlt6 - UNUSED STR DescriptionAlt7 - UNUSED UINT DescriptionFlags - UNUSED STR BuffDescription - UNUSED STR BuffDescriptionAlt1 - UNUSED STR BuffDescriptionAlt2 - UNUSED STR BuffDescriptionAlt3 - UNUSED STR BuffDescriptionAlt4 - UNUSED STR BuffDescriptionAlt5 - UNUSED STR BuffDescriptionAlt6 - UNUSED STR BuffDescriptionAlt7 - UINT ManaCostPercentage - UINT StartRecoveryCategory - UINT StartRecoveryTime - UINT field156 //nice name - UNKNOWN[2] - UINT SpellFamilyName - UNKNOWN[11] -ENDENTRY - -ENTRY SpellCastTime - INDEX ID - UINT CastTime - UNKNOWN[2] -ENDENTRY - -ENTRY SpellRadius - INDEX ID - FLOAT Radius - UNKNOWN - FLOAT Radius2 -ENDENTRY - -ENTRY SpellRange - INDEX ID - FLOAT minRange - FLOAT maxRange - UNKNOWN[18] - UNKNOWN//some flag -ENDENTRY - -ENTRY SpellDuration - INDEX ID - UINT Duration1 - UINT Duration2 - UINT Duration3 -ENDENTRY - -ENTRY AreaTableEntry - - UINT ID - UNUSED UINT map - UINT zone - INDEX exploreFlag - UNKNOWN[6] - UINT area_level - UNUSED STR name - UNKNOWN[9] - -ENDENTRY - - -ENTRY FactionEntry - INDEX ID - INT reputationListID - - UNKNOWN[7] - UINT something1 - UINT something2 - UINT something3 - UINT something4 - UINT something5 - UINT something6 - UINT something7 - UINT something8 - UINT something9 - UINT faction - - UNUSED STR name - UNKNOWN[17] - -ENDENTRY - - -ENTRY FactionTemplateEntry - INDEX ID - UINT faction - UNKNOWN - UINT fightsupport - UINT friendly - UINT hostile - UNKNOWN[8] -ENDENTRY - - -ENTRY ItemDisplayTemplateEntry - - UINT ID - UNUSED STR modelFile - UNKNOWN - UNUSED STR imageFile - UNKNOWN - UNUSED STR invImageFile - UNKNOWN[5] - UINT seed - UNKNOWN [10] - UINT randomPropertyID - -ENDENTRY diff --git a/contrib/mysql_to_pgsql/CMakeLists.txt b/contrib/mysql_to_pgsql/CMakeLists.txt deleted file mode 100644 index 88159b2fb..000000000 --- a/contrib/mysql_to_pgsql/CMakeLists.txt +++ /dev/null @@ -1,36 +0,0 @@ -# This code is part of MaNGOS. Contributor & Copyright details are in AUTHORS/THANKS. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -cmake_minimum_required (VERSION 2.8) - -INCLUDE(cmake/FindMySQL.cmake) -INCLUDE(cmake/FindPostgreSQL.cmake) - -MESSAGE("-- Check PostgreSQL") -FIND_PGSQL() -ADD_DEFINITIONS(-DDO_POSTGRESQL) - -MESSAGE("-- Check MySQL") -FIND_MYSQL() -ADD_DEFINITIONS(-DDO_MYSQL) - -INCLUDE_DIRECTORIES(${MYSQL_INCLUDE_DIR}) -INCLUDE_DIRECTORIES(${PGSQL_INCLUDE_DIR}) - -ADD_EXECUTABLE (mysql2pgsql src/main.cpp) - -TARGET_LINK_LIBRARIES(mysql2pgsql ${PGSQL_LIBRARIES}) -TARGET_LINK_LIBRARIES(mysql2pgsql ${MYSQL_LIBRARIES}) diff --git a/contrib/mysql_to_pgsql/README b/contrib/mysql_to_pgsql/README deleted file mode 100644 index 5c852e2fb..000000000 --- a/contrib/mysql_to_pgsql/README +++ /dev/null @@ -1,13 +0,0 @@ -Using cmake on a Windows ------------------- - 1. install cmake (http://www.cmake.org/cmake/resources/software.html) - 2. cmake -i - 3. Project.sln - 4. {Debug/Release}/mysql2pgsql.exe - -Using cmake on a Unix/Linux ------------------- - 1. install cmake - 2. cmake -i - 3. make - 4. ./mysql2pgsql diff --git a/contrib/mysql_to_pgsql/cmake/FindMySQL.cmake b/contrib/mysql_to_pgsql/cmake/FindMySQL.cmake deleted file mode 100644 index 98b2f8a57..000000000 --- a/contrib/mysql_to_pgsql/cmake/FindMySQL.cmake +++ /dev/null @@ -1,68 +0,0 @@ -# - Find mysqlclient -# Find the native MySQL includes and library -# -# MYSQL_INCLUDE_DIR - where to find mysql.h, etc. -# MYSQL_LIBRARIES - List of libraries when using MySQL. -# MYSQL_FOUND - True if MySQL found. -MACRO(FIND_MYSQL) - -IF (MYSQL_INCLUDE_DIR) - # Already in cache, be silent - SET(MySQL_FIND_QUIETLY TRUE) -ENDIF (MYSQL_INCLUDE_DIR) - -FIND_PATH(MYSQL_INCLUDE_DIR mysql.h - $ENV{ProgramFiles}/MySQL/*/include - $ENV{SystemDrive}/MySQL/*/include - /usr/local/mysql/include - /usr/local/include/mysql - /usr/local/include - /usr/include/mysql - /usr/include - /usr/mysql/include -) - -IF(MSVC) - SET(MYSQL_NAMES libmysql) -ELSE(MSVC) - SET(MYSQL_NAMES mysqlclient mysqlclient_r) -ENDIF(MSVC) -SET(MYSQL_SEARCH_LIB_PATHS - $ENV{ProgramFiles}/MySQL/*/lib/opt - $ENV{SystemDrive}/MySQL/*/lib/opt - /usr/local/mysql/lib - /usr/local/lib/mysql - /usr/local/lib - /usr/lib/mysql - /usr/lib -) -FIND_LIBRARY(MYSQL_LIBRARY - NAMES ${MYSQL_NAMES} - PATHS ${MYSQL_SEARCH_LIB_PATHS} -) - -IF (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY) - SET(MYSQL_FOUND TRUE) - SET( MYSQL_LIBRARIES ${MYSQL_LIBRARY} ) -ELSE (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY) - SET(MYSQL_FOUND FALSE) - SET( MYSQL_LIBRARIES ) -ENDIF (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY) - -IF (MYSQL_FOUND) - IF (NOT MySQL_FIND_QUIETLY) - MESSAGE(STATUS "Found MySQL: ${MYSQL_LIBRARY}") - ENDIF (NOT MySQL_FIND_QUIETLY) -ELSE (MYSQL_FOUND) - IF (MySQL_FIND_REQUIRED) - MESSAGE(STATUS "Looked for MySQL libraries named ${MYSQL_NAMES}.") - MESSAGE(FATAL_ERROR "Could NOT find MySQL library") - ENDIF (MySQL_FIND_REQUIRED) -ENDIF (MYSQL_FOUND) - -MARK_AS_ADVANCED( - MYSQL_LIBRARY - MYSQL_INCLUDE_DIR -) - -ENDMACRO(FIND_MYSQL) diff --git a/contrib/mysql_to_pgsql/cmake/FindPostgreSQL.cmake b/contrib/mysql_to_pgsql/cmake/FindPostgreSQL.cmake deleted file mode 100644 index 2b37d57b4..000000000 --- a/contrib/mysql_to_pgsql/cmake/FindPostgreSQL.cmake +++ /dev/null @@ -1,67 +0,0 @@ -# - Find libpq -# Find the native PostgreSQL includes and library -# -# PGSQL_INCLUDE_DIR - where to find libpq-fe.h, etc. -# PGSQL_LIBRARIES - List of libraries when using PGSQL. -# PGSQL_FOUND - True if PGSQL found. - -MACRO(FIND_PGSQL) -IF (PGSQL_INCLUDE_DIR) - # Already in cache, be silent - SET(PostgreSQL_FIND_QUIETLY TRUE) -ENDIF (PGSQL_INCLUDE_DIR) - -FIND_PATH(PGSQL_INCLUDE_DIR libpq-fe.h - $ENV{ProgramFiles}/PostgreSQL/*/include - $ENV{SystemDrive}/PostgreSQL/*/include - /usr/local/pgsql/include - /usr/local/postgresql/include - /usr/local/include/pgsql - /usr/local/include/postgresql - /usr/local/include - /usr/include/pgsql - /usr/include/postgresql - /usr/include - /usr/pgsql/include - /usr/postgresql/include -) - -SET(PGSQL_NAMES pq libpq) -SET(PGSQL_SEARCH_LIB_PATHS - ${PGSQL_SEARCH_LIB_PATHS} - $ENV{ProgramFiles}/PostgreSQL/*/lib - $ENV{SystemDrive}/PostgreSQL/*/lib - /usr/local/pgsql/lib - /usr/local/lib - /usr/lib -) -FIND_LIBRARY(PGSQL_LIBRARY - NAMES ${PGSQL_NAMES} - PATHS ${PGSQL_SEARCH_LIB_PATHS} -) - -IF (PGSQL_INCLUDE_DIR AND PGSQL_LIBRARY) - SET(PGSQL_FOUND TRUE) - SET( PGSQL_LIBRARIES ${PGSQL_LIBRARY} ) -ELSE (PGSQL_INCLUDE_DIR AND PGSQL_LIBRARY) - SET(PGSQL_FOUND FALSE) - SET( PGSQL_LIBRARIES ) -ENDIF (PGSQL_INCLUDE_DIR AND PGSQL_LIBRARY) - -IF (PGSQL_FOUND) - IF (NOT PostgreSQL_FIND_QUIETLY) - MESSAGE(STATUS "Found PostgreSQL: ${PGSQL_LIBRARY}") - ENDIF (NOT PostgreSQL_FIND_QUIETLY) -ELSE (PGSQL_FOUND) - IF (PostgreSQL_FIND_REQUIRED) - MESSAGE(STATUS "Looked for PostgreSQL libraries named ${PGSQL_NAMES}.") - MESSAGE(FATAL_ERROR "Could NOT find PostgreSQL library") - ENDIF (PostgreSQL_FIND_REQUIRED) -ENDIF (PGSQL_FOUND) - -MARK_AS_ADVANCED( - PGSQL_LIBRARY - PGSQL_INCLUDE_DIR -) -ENDMACRO(FIND_PGSQL) - diff --git a/contrib/mysql_to_pgsql/src/defines.h b/contrib/mysql_to_pgsql/src/defines.h deleted file mode 100644 index 6fdefd5af..000000000 --- a/contrib/mysql_to_pgsql/src/defines.h +++ /dev/null @@ -1,183 +0,0 @@ -/** - * This code is part of MaNGOS. Contributor & Copyright details are in AUTHORS/THANKS. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _DEFINES_ -#define _DEFINES_ - -#ifdef WIN32 -#include -#pragma warning(disable:4996) -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -using namespace std; - - -#ifdef WIN32 -typedef unsigned __int64 uint64; -typedef unsigned int uint32; -#else -#include -#ifndef uint64_t -#include -#endif -typedef uint64_t uint64; -typedef unsigned int uint32; -#endif - -struct sField -{ - string name; // field name - string def; // field default data - string type; // field type - uint32 flags; // filed flags, see field flags; -}; -typedef vector T_Table; -typedef vector T_TableList; -typedef map< string, T_Table > TDataBase; - -static -void pg_notice(void* arg, const char* message) -{ - /// Do nothing - //printf("%s\n", message); -} - -inline -string ConvertNativeType(enum_field_types mysqlType, uint32 length) -{ - - switch (mysqlType) - { - case FIELD_TYPE_TIMESTAMP: - return "timestamp"; - case FIELD_TYPE_BIT: - return "bit(1)"; - case FIELD_TYPE_DATETIME: - return "date"; - case FIELD_TYPE_YEAR: - case FIELD_TYPE_BLOB: - case FIELD_TYPE_SET: - case FIELD_TYPE_NULL: - case FIELD_TYPE_ENUM: - return "text"; - case FIELD_TYPE_TINY: - case FIELD_TYPE_SHORT: - case FIELD_TYPE_INT24: - return "integer"; - case FIELD_TYPE_LONGLONG: - case FIELD_TYPE_LONG: - { - string temp; - char str[10]; - temp = "numeric"; - if (length) - { - temp.append("("); - sprintf(str, "%d", length); - temp.append(str); - temp.append(")"); - } - return temp; - } - case FIELD_TYPE_DECIMAL: - case FIELD_TYPE_FLOAT: - case FIELD_TYPE_DOUBLE: - return "float"; - case FIELD_TYPE_STRING: - { - string temp; - char str[10]; - temp = "char"; - if (length) - { - temp.append("("); - sprintf(str, "%d", length); - temp.append(str); - temp.append(")"); - } - return temp; - } - case FIELD_TYPE_VAR_STRING: - { - string temp; - char str[10]; - temp = "varchar"; - if (length) - { - temp.append("("); - sprintf(str, "%d", length); - temp.append(str); - temp.append(")"); - } - return temp; - } - default: - return "text"; - } - return "text"; -} - -inline -bool IsNeeedEscapeString(enum_field_types mysqlType) -{ - switch (mysqlType) - { - case FIELD_TYPE_VAR_STRING: - case FIELD_TYPE_STRING: - case FIELD_TYPE_TINY_BLOB: - case FIELD_TYPE_MEDIUM_BLOB: - case FIELD_TYPE_LONG_BLOB: - case FIELD_TYPE_BLOB: - return true; - default: - return false; - } - return false; -} - -inline -void PG_Exec_str(string sql, PGconn* mPGconn) -{ - PGresult* res = PQexec(mPGconn, sql.c_str()); - if (PQresultStatus(res) != PGRES_COMMAND_OK) - { - printf("SQL: %s", sql.c_str()); - printf("SQL %s", PQerrorMessage(mPGconn)); - } -} - -void PG_Escape_Str(string& str) -{ - if (str.empty()) - return; - char* buf = new char[str.size() * 2 + 1]; - PQescapeString(buf, str.c_str(), str.size()); - str = buf; - delete[] buf; -} - -#endif diff --git a/contrib/mysql_to_pgsql/src/main.cpp b/contrib/mysql_to_pgsql/src/main.cpp deleted file mode 100644 index 723fc0a1e..000000000 --- a/contrib/mysql_to_pgsql/src/main.cpp +++ /dev/null @@ -1,338 +0,0 @@ -/** - * This code is part of MaNGOS. Contributor & Copyright details are in AUTHORS/THANKS. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "defines.h" - -int main(int argc, char* argv[]) -{ - char sPGhost[26], sPGport[26], sPGdb[26], sPGuser[26], sPGpass[26]; - printf("Postgres connection settings\n Host>"); - scanf("%s", sPGhost); - printf(" Port>"); - scanf("%s", sPGport); - printf(" Base>"); - scanf("%s", sPGdb); - printf(" User>"); - scanf("%s", sPGuser); - printf(" Pass>"); - scanf("%s", sPGpass); - - /////////////////////////////// - ///////PGSQL Connect/////////// - /////////////////////////////// - PGconn* mPGconn = NULL; - mPGconn = PQsetdbLogin(sPGhost, sPGport, NULL, NULL, sPGdb, sPGuser, sPGpass); - - if (PQstatus(mPGconn) != CONNECTION_OK) - { - printf("Could not connect to Postgre database at [%s]: \n %s\n", sPGhost, PQerrorMessage(mPGconn)); - PQfinish(mPGconn); - return 1; - } - else - { - printf("Connected to Postgre database at [%s]\n", sPGhost); - printf(" PostgreSQL server ver: [%d]\n\n", PQserverVersion(mPGconn)); - } - - /// Set dummy notice processor - PQsetNoticeProcessor(mPGconn, pg_notice, mPGconn); - - /////////////////////////////// - ///////MySQL Connect/////////// - /////////////////////////////// - MYSQL* mysqlInit; - mysqlInit = mysql_init(NULL); - if (!mysqlInit) - { - printf("Could not initialize Mysql connection\n"); - return 1; - } - - char sMYhost[26], sMYdb[26], sMYuser[26], sMYpass[26]; - int iMYport; - printf("Mysql connection settings \n Host>"); - scanf("%s", sMYhost); - printf(" Port>"); - scanf("%d", &iMYport); - printf(" Base>"); - scanf("%s", sMYdb); - printf(" User>"); - scanf("%s", sMYuser); - printf(" Pass>"); - scanf("%s", sMYpass); - - mysql_options(mysqlInit, MYSQL_SET_CHARSET_NAME, "utf8"); - - MYSQL* mMysql; - mMysql = mysql_real_connect(mysqlInit, sMYhost, sMYuser, sMYpass, sMYdb, iMYport, NULL, 0); - - if (mMysql) - { - printf("Connected to MySQL database at [%s] \n", sMYhost); - printf(" MySQL client library: [%s] \n", mysql_get_client_info()); - printf(" MySQL server ver: [%s] \n\n", mysql_get_server_info(mMysql)); - } - else - { - printf("Could not connect to MySQL database at [%s]:\n %s\n", sMYhost , mysql_error(mysqlInit)); - mysql_close(mysqlInit); - return 1; - } - - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - MYSQL_RES* result = NULL; - MYSQL_ROW row; - MYSQL_FIELD* fields = NULL; - uint64 rowCount = 0; - uint32 fieldCount = 0; - result = mysql_list_tables(mMysql , NULL); - rowCount = mysql_num_rows(result); - - /***********************/ - /* get list of tables */ - /***********************/ - T_TableList mTableList; - mTableList.reserve((size_t)rowCount); - while ((row = mysql_fetch_row(result)) != NULL) - { - for (uint32 i = 0; i < mysql_num_fields(result); i++) - { - mTableList.push_back(row[i]); - } - } - mysql_free_result(result); - - /****************************************/ - /* convert filed type and default type */ - /****************************************/ - T_Table m_Table; - TDataBase m_DataBase_Map; - m_DataBase_Map.clear(); - for (uint32 j = 0; j < mTableList.size(); ++j) - { - result = mysql_list_fields(mMysql, mTableList[j].c_str(), NULL); - fieldCount = mysql_num_fields(result); - fields = mysql_fetch_fields(result); - - for (uint32 i = 0; i < fieldCount; ++i) - { - sField mfield; - mfield.name = fields[i].name; - if (!fields[i].def) - { - mfield.def = "NULL"; - } - else if (!strcmp(fields[i].def, "0000-00-00 00:00:00")) - { - /// Convert MySQL Default timestamp to PGSQL Default timestamp - mfield.def.append("'1970-01-01 00:00:00'"); - } - else - { - /// Append ' - mfield.def.append("'"); - mfield.def.append(fields[i].def);; - mfield.def.append("'"); - } - mfield.type = ConvertNativeType(fields[i].type, fields[i].length); - mfield.flags = fields[i].flags; - m_Table.push_back(mfield); - } - m_DataBase_Map[mTableList[j]] = m_Table; - m_Table.clear(); - mysql_free_result(result); - } - - /******************************************/ - /* Conversion of the layout of the tables */ - /******************************************/ - - uint32 count = 0; - TDataBase::const_iterator citr; - for (citr = m_DataBase_Map.begin(); citr != m_DataBase_Map.end(); ++citr) - { - ostringstream sql_str; - sql_str << "DROP TABLE IF EXISTS " << (*citr).first.c_str() << ";\n"; - sql_str << "CREATE TABLE " << (*citr).first.c_str() << "(\n"; - - T_Table::const_iterator v_iter; - ostringstream prim_key_str; - ostringstream index_str; - for (v_iter = (*citr).second.begin(); - v_iter != (*citr).second.end(); - ++v_iter) - { - sql_str << " " << (*v_iter).name; - if (((*v_iter).flags & AUTO_INCREMENT_FLAG) != 0) - { - /// AUTO_INCREMENT fields not have "default" data - sql_str << " bigserial"; - } - else - { - sql_str << " " << (*v_iter).type; - sql_str << " default " << (*v_iter).def; - } - /// IF column have PRIMARY KEY flag then use column in PRIMARY KEY - if (IS_PRI_KEY((*v_iter).flags) != 0) - { - if (prim_key_str.str().size()) - prim_key_str << ", "; - else - { - prim_key_str << "ALTER TABLE "; - prim_key_str << (*citr).first.c_str(); - prim_key_str << " ADD CONSTRAINT pk_"; - prim_key_str << (*citr).first.c_str(); - prim_key_str << "_"; - prim_key_str << (*v_iter).name; - prim_key_str << " PRIMARY KEY ("; - } - prim_key_str << (*v_iter).name; - } - else if (((*v_iter).flags & MULTIPLE_KEY_FLAG) != 0) - { - /// IF column have INDEX flag then create INDEX - index_str << "CREATE INDEX idx_"; - index_str << (*citr).first.c_str(); - index_str << "_"; - index_str << (*v_iter).name; - index_str << " ON "; - index_str << (*citr).first.c_str(); - index_str << " USING btree ("; - index_str << (*v_iter).name; - index_str << ");\n"; - } - else if (((*v_iter).flags & UNIQUE_KEY_FLAG) != 0) - { - /// IF column have UNIQUE INDEX flag then create INDEX - index_str << "CREATE UNIQUE INDEX uidx_"; - index_str << (*citr).first.c_str(); - index_str << "_"; - index_str << (*v_iter).name; - index_str << " ON "; - index_str << (*citr).first.c_str(); - index_str << " USING btree ("; - index_str << (*v_iter).name; - index_str << ");\n"; - } - /// don't output "," for last column - if (v_iter + 1 != (*citr).second.end()) - sql_str << ",\n"; - else - sql_str << "\n"; - } - sql_str << ")\n"; - - /// Out Table structure - PG_Exec_str(sql_str.str(), mPGconn); - - /// out PRIMARY KEY - if (prim_key_str.str().size()) - { - prim_key_str << ")"; - PG_Exec_str(prim_key_str.str(), mPGconn); - } - - /// out INDEX's - if (index_str.str().size()) - PG_Exec_str(index_str.str(), mPGconn); - - ++count; - printf("Convert [%d] tables...\r", count); - } - printf("Completed the conversion of [%d] tables!\n", count); - - /****************/ - /* Copying data */ - /****************/ - - count = 0; - for (uint32 j = 0; j < mTableList.size(); ++j) - { - ostringstream sql_str; - sql_str << "SELECT * FROM "; - sql_str << mTableList[j].c_str(); - - if (mysql_query(mysqlInit, sql_str.str().c_str())) - continue; - if (!(result = mysql_store_result(mysqlInit))) - continue; - - while ((row = mysql_fetch_row(result)) != NULL) - { - ostringstream insert_str; - insert_str << "INSERT INTO "; - insert_str << mTableList[j].c_str(); - insert_str << " VALUES ("; - - fieldCount = mysql_num_fields(result); - fields = mysql_fetch_fields(result); - for (uint32 i = 0 ; i < fieldCount ; ++i) - { - if (!row[i]) - insert_str << "NULL"; - else - { - if (IsNeeedEscapeString(fields[i].type)) - { - string field_str = row[i]; - PG_Escape_Str(field_str); - insert_str << "E'"; - insert_str << field_str.c_str(); - insert_str << "'"; - } - else if (!strcmp(row[i], "0000-00-00 00:00:00")) - { - /// Convert MySQL timestamp to PGSQL timestamp - insert_str << "'1970-01-01 00:00:00'"; - } - else - { - insert_str << "'"; - insert_str << row[i]; - insert_str << "'"; - } - } - - /// don't output "," for last column - if (i + 1 != fieldCount) - insert_str << ","; - else - insert_str << ")\n"; - } - PG_Exec_str(insert_str.str(), mPGconn); - } - mysql_free_result(result); - ++count; - printf("Copied data from [%d] tables...\r", count); - } - printf("Finished copying the data from [%d] tables!\n", count); - mTableList.clear(); - m_DataBase_Map.clear(); - - /// Close connections - mysql_close(mMysql); - PQfinish(mPGconn); - - printf("end\n"); - return 0; - -}