Rev 16 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 16 | Rev 288 | ||
|---|---|---|---|
| Line 1... | Line 1... | ||
| 1 | #!/bin/bash
 | 
            1 | #!/bin/bash
 | 
          
| 2 | 2 | ||
| 3 | APPNAME="EazyTranslator"  | 
            3 | appname="EazyTranslator"  | 
          
| 4 | APPVER="0.97a"  | 
            4 | appver="0.97a"  | 
          
| 5 | APPFILENAME=`basename $0`  | 
            5 | appfilename=$(readlink $(basename "$0"))  | 
          
| 6 | APPFILEDIR=`echo $0 | sed 's/'$APPFILENAME$'//'`  | 
            6 | [ -n "$appfilename" ] && appfiledir=$(echo "$0" | sed "s/$appfilename\$//")  | 
          
| 7 | 7 | ||
| 8 | # dictionary file
 | 
            8 | # dictionary file
 | 
          
| 9 | DICT="$TRANSLATE_DIR"  | 
            9 | dict="$TRANSLATE_DIR"  | 
          
| 10 | if [ -z "$DICT" ]; then DICT=$APPFILEDIR ; fi  | 
            10 | [ -z "$dict" ] && dict=$appfiledir  | 
          
| 11 | 11 | ||
| 12 | # delimiter name (for help page only) and character (string) for separating original expression
 | 
            12 | # delimiter name (for help page only) and character (string) for separating original expression
 | 
          
| 13 | # and translation in dictionary file
 | 
            13 | # and translation in dictionary file
 | 
          
| 14 | DELIMITER_NAME="colon"  | 
            14 | delimiter_name="colon"  | 
          
| 15 | DELIMITER=":"  | 
            15 | delimiter=":"  | 
          
| 16 | 16 | ||
| 17 | # all help on a single page
 | 
            17 | # all help on a single page
 | 
          
| 18 | SINGLE_PAGE=0  | 
            18 | single_page=0  | 
          
| 19 | 19 | ||
| 20 | # bell character
 | 
            20 | # bell character
 | 
          
| 21 | CH_SOUND=""  | 
            21 | ch_sound=""  | 
          
| 22 | CH_SOUND_ON=$'\a'  | 
            22 | ch_sound_on=$'\a'  | 
          
| 23 | 23 | ||
| 24 | RESULT=""  | 
            24 | result=""  | 
          
| 25 | 25 | ||
| 26 | function title {  | 
            26 | title() {  | 
          
| 27 | if [ $SINGLE_PAGE -eq 0 ]; then clear ; fi  | 
            27 |   #[ $single_page -eq 0 ] && clear
 | 
          
| 28 |   echo
 | 
            28 | echo "  | 
          
| 29 | echo $APPNAME" "$APPVER" - Stream editor to use and to manage dictionary files"  | 
            29 | $appname $appver - Stream editor to use and to manage dictionary files
 | 
          
| 30 | echo "Requires 'basename', 'grep' and 'sed', optionally 'sort' and 'mktemp' in PATH"  | 
            30 | Requires 'basename', 'grep' and 'sed', optionally 'sort' and 'mktemp' in PATH
 | 
          
| 31 |   echo
 | 
            31 | "
 | 
          
| 32 | }
 | 
            32 | }
 | 
          
| 33 | 33 | ||
| 34 | function copyright {  | 
            34 | copyright() {  | 
          
| 35 | echo "Copyright (C) 2001 Thomas Lahn (webmaster@PointedEars.de)"  | 
            35 | echo "Copyright (C) 2001 Thomas Lahn (webmaster@PointedEars.de)  | 
          
| 36 | echo "Be sure to have 'easyTrans' or similar in mail subject line for fast response."  | 
            36 | Be sure to have 'easyTrans' or similar in mail subject line for fast response.
 | 
          
| 37 |   echo
 | 
            37 | "
 | 
          
| 38 | }
 | 
            38 | }
 | 
          
| 39 | 39 | ||
| 40 | function pause {  | 
            40 | pause() {  | 
          
| 41 | if [ "$1" == "c" ]; then  | 
            41 | if [ "$1" == "c" ]; then  | 
          
| 42 | echo "Hit RETURN to continue..."  | 
            42 | echo "Hit RETURN to continue..."  | 
          
| 43 |   else
 | 
            43 |   else
 | 
          
| 44 | echo "Hit RETURN for the next page"  | 
            44 | echo "Hit RETURN for the next page"  | 
          
| 45 |   fi
 | 
            45 |   fi
 | 
          
| 46 |   read
 | 
            46 |   read
 | 
          
| 47 | }
 | 
            47 | }
 | 
          
| 48 | 48 | ||
| 49 | function copying {  | 
            49 | copying() {  | 
          
| 50 | title  | 
            50 | title  | 
          
| 51 | copyright  | 
            51 | copyright  | 
          
| 52 | echo "This program is free software; you can redistribute it and/or modify"  | 
            52 | echo "This program is free software; you can redistribute it and/or modify  | 
          
| 53 | echo "it under the terms of the GNU General Public License as published by"  | 
            53 | it under the terms of the GNU General Public License as published by
 | 
          
| 54 | echo "the Free Software Foundation; either version 2 of the License, or"  | 
            54 | the Free Software Foundation; either version 2 of the License, or
 | 
          
| 55 | echo "(at your option) any later version."  | 
            55 | (at your option) any later version.
 | 
          
| 56 |   echo
 | 
            56 | |
| 57 | echo "This program is distributed in the hope that it will be useful,"  | 
            57 | This program is distributed in the hope that it will be useful,
 | 
          
| 58 | echo "but WITHOUT ANY WARRANTY; without even the implied warranty of"  | 
            58 | but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
          
| 59 | echo "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the"  | 
            59 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
          
| 60 | echo "GNU General Public License for more details."  | 
            60 | GNU General Public License for more details.
 | 
          
| 61 |   echo
 | 
            61 | |
| 62 | echo "You should have received a copy of the GNU General Public License"  | 
            62 | You should have received a copy of the GNU General Public License
 | 
          
| 63 | echo "along with this program (COPYING file); if not, write to the"  | 
            63 | along with this program (COPYING file); if not, write to the
 | 
          
| 64 | echo "Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA."  | 
            64 | Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
          
| 65 |   echo
 | 
            65 | "
 | 
          
| 66 | }
 | 
            66 | }
 | 
          
| 67 | 67 | ||
| 68 | function cmdHelp {  | 
            68 | cmdHelp() {  | 
          
| 69 | title  | 
            69 | title  | 
          
| 70 | echo $APPFILENAME" EXPRESSION DICTIONARY [OPTIONS]"  | 
            70 | echo "$appfilename EXPRESSION DICTIONARY [OPTIONS]  | 
          
| 71 |   echo
 | 
            71 | |
| 72 | echo "Tries to translate EXPRESSION looking up DICTIONARY and writes the result"  | 
            72 | Tries to translate EXPRESSION looking up DICTIONARY and writes the result
 | 
          
| 73 | echo "to standard output (stdout) in a single line followed by a newline (\n)."  | 
            - | |
| 74 |   echo
 | 
            73 | |
| 75 | echo "Environment:"  | 
            74 | Environment:
 | 
          
| 76 |   echo
 | 
            75 | |
| 77 | echo "TRANSLATE_DIR Dictionary folder root (absolute path '/')"  | 
            76 | TRANSLATE_DIR     Dictionary folder root (absolute path '/')"
 | 
          
| 78 | if [ -n "$TRANSLATE_DIR" ]; then  | 
            77 | if [ -n "$TRANSLATE_DIR" ]; then  | 
          
| 79 | local INVALID_PATH=" -- INVALID PATH!"  | 
            78 | local INVALID_PATH=" -- INVALID PATH!"  | 
          
| 80 | local INVALID_FORMAT=" -- INVALID FORMAT!"  | 
            79 | local INVALID_FORMAT=" -- INVALID FORMAT!"  | 
          
| 81 |   # : AutoCorrect performed!
 | 
            80 |     # : AutoCorrect performed!
 | 
          
| 82 | local INVALID_MSG=""  | 
            81 | local INVALID_MSG=""  | 
          
| 83 | if [ ! -e $TRANSLATE_DIR ]; then  | 
            82 | if [ ! -e $TRANSLATE_DIR ]; then  | 
          
| 84 | INVALID_MSG=$INVALID_PATH  | 
            83 | INVALID_MSG=$INVALID_PATH  | 
          
| 85 |   else
 | 
            84 |     else
 | 
          
| 86 | local GREPRES=`echo $TRANSLATE_DIR | grep -e "\/$"`  | 
            85 | local GREPRES=$(echo $TRANSLATE_DIR | grep -e "\/$")  | 
          
| 87 | if [ -z "$GREPRES" ]; then INVALID_MSG=$INVALID_FORMAT ; fi  | 
            86 | [ -z "$GREPRES" ] && INVALID_MSG=$INVALID_FORMAT  | 
          
| 88 |   fi
 | 
            87 |     fi
 | 
          
| 89 | echo " (currently '"$TRANSLATE_DIR"'"$INVALID_MSG")"  | 
            88 | echo " (currently '"$TRANSLATE_DIR"'"$INVALID_MSG")"  | 
          
| 90 |   #if [ "$INVALID_MSG" == "$INVALID_FORMAT" ]; then
 | 
            89 |     #if [ "$INVALID_MSG" == "$INVALID_FORMAT" ]; then
 | 
          
| 91 |     #export TRANSLATE_DIR=$TRANSLATE_DIR"/"
 | 
            90 |       #export TRANSLATE_DIR=$TRANSLATE_DIR"/"
 | 
          
| 92 |     #set -a
 | 
            91 |       #set -a
 | 
          
| 93 |   #fi
 | 
            92 |     #fi
 | 
          
| 94 | fi
 | 
            93 |   fi
 | 
          
| - | 94 | echo "\  | 
          |
| 95 | echo " If undefined, this is the program directory"  | 
            95 |                     If undefined, this is the program directory
 | 
          
| 96 | echo " (currently '"$APPFILEDIR"')."  | 
            96 |                     (currently '$appfiledir').
 | 
          
| 97 | echo "TRANSLATE_OPTIONS Default options to overwrite command-line options"  | 
            97 | TRANSLATE_OPTIONS Default options to overwrite command-line options"
 | 
          
| 98 | if [ -n "$TRANSLATE_OPTIONS" ]; then  | 
            98 | if [ -n "$TRANSLATE_OPTIONS" ]; then  | 
          
| 99 | echo " (currently '"$TRANSLATE_OPTIONS"')"  | 
            99 | echo " (currently '"$TRANSLATE_OPTIONS"')"  | 
          
| 100 | fi
 | 
            100 | fi
 | 
          
| 101 |   echo
 | 
            101 | echo "  | 
          
| 102 | echo "Arguments:"  | 
            102 | Arguments:
 | 
          
| 103 |   echo
 | 
            103 | |
| 104 | echo "EXPRESSION Word or (double-quoted) phrase to be translated"  | 
            104 | EXPRESSION        Word or (double-quoted) phrase to be translated
 | 
          
| 105 | echo "DICTIONARY Path of dictionary file relative to TRANSLATE_DIR"  | 
            105 | DICTIONARY        Path of dictionary file relative to TRANSLATE_DIR
 | 
          
| 106 |   echo
 | 
            106 | "
 | 
          
| 107 | if [ $SINGLE_PAGE -eq 0 ]; then pause "c" ; fi  | 
            107 | [ $single_page -eq 0 ] && pause "c"  | 
          
| - | 108 | echo "\  | 
          |
| 108 | echo "Translation OPTIONS:"  | 
            109 | Translation OPTIONS:
 | 
          
| 109 | echo " -b, --brackets If not in DICTIONARY, writes given WORD or EXPRESSION"  | 
            110 |   -b, --brackets  If not in DICTIONARY, writes given WORD or EXPRESSION
 | 
          
| 110 | echo " as [WORD] or [EXPRESSION]."  | 
            111 |                     as [WORD] or [EXPRESSION].
 | 
          
| 111 | echo " -m, --messages Return error messages instead of null-strings."  | 
            112 |   -m, --messages  Return error messages instead of null-strings.
 | 
          
| 112 | echo " -p, --phrase Translate EXPRESSION as entire phrase. If not given,"  | 
            113 |   -p, --phrase    Translate EXPRESSION as entire phrase. If not given,
 | 
          
| 113 | echo " each WORD of EXPRESSION is translated seperately."  | 
            114 |                     each WORD of EXPRESSION is translated seperately.
 | 
          
| 114 | echo " -r, --reverse Perform reverse translation. Recommended only if"  | 
            115 |   -r, --reverse   Perform reverse translation. Recommended only if
 | 
          
| 115 | echo " no appropriate dictionary file for vice-versa translation is"  | 
            116 |                     no appropriate dictionary file for vice-versa translation is
 | 
          
| 116 | echo " available and -p is also used."  | 
            117 |                     available and -p is also used.
 | 
          
| 117 | echo " -s, --sound Beep on fatal errors."  | 
            118 |   -s, --sound     Beep on fatal errors.
 | 
          
| 118 | echo " -v, --verbose Display flow of operation. Includes -m behavior."  | 
            119 |   -v, --verbose   Display flow of operation. Includes -m behavior.
 | 
          
| 119 | echo " -z, --zero Return not translatable tokens as null-strings."  | 
            120 |   -z, --zero      Return not translatable tokens as null-strings.
 | 
          
| 120 | echo " Overwrites -b."  | 
            121 |                     Overwrites -b.
 | 
          
| 121 |   echo
 | 
            122 | "
 | 
          
| 122 | if [ $SINGLE_PAGE -eq 0 ]; then pause "c" ; fi  | 
            123 | [ $single_page -eq 0 ] && pause "c"  | 
          
| - | 124 | echo "\  | 
          |
| 123 | echo $APPFILENAME" EXPRESSION DICTIONARY COMMAND TRANSLATION [INFO] [OPTIONS]"  | 
            125 | $appfilename EXPRESSION DICTIONARY COMMAND TRANSLATION [INFO] [OPTIONS]
 | 
          
| 124 | echo $APPFILENAME" COMMAND DICTIONARY [INFO] [OPTIONS]"  | 
            126 | $appfilename COMMAND DICTIONARY [INFO] [OPTIONS]
 | 
          
| 125 |   echo
 | 
            127 | |
| 126 | echo "Dictionary file COMMANDs:"  | 
            128 | Dictionary file COMMANDs:
 | 
          
| 127 | echo " -a, --add If not in DICTIONARY, add EXPRESSION with TRANSLATION"  | 
            129 |   -a,  --add      If not in DICTIONARY, add EXPRESSION with TRANSLATION
 | 
          
| 128 | echo " to DICTIONARY and write TRANSLATION."  | 
            130 |                     to DICTIONARY and write TRANSLATION.
 | 
          
| 129 | echo " If DICTIONARY not exists, create the file with INFO"  | 
            131 |                     If DICTIONARY not exists, create the file with INFO
 | 
          
| 130 | echo " and add the entry; if INFO is a null-string,"  | 
            132 |                     and add the entry; if INFO is a null-string,
 | 
          
| 131 | echo " default INFO is added, containing program version,"  | 
            133 |                     default INFO is added, containing program version,
 | 
          
| 132 | echo " user name and timestamp. Requires 'sort'."  | 
            134 |                     user name and timestamp. Requires 'sort'.
 | 
          
| 133 | echo " -ai, --addinfo Add information data INFO to DICTIONARY."  | 
            135 |   -ai, --addinfo  Add information data INFO to DICTIONARY.
 | 
          
| 134 | echo " Must be used as first argument."  | 
            136 |                     Must be used as first argument.
 | 
          
| 135 | echo " -c, --create Create new DICTIONARY with INFO (see -a)."  | 
            137 |   -c,  --create   Create new DICTIONARY with INFO (see -a).
 | 
          
| 136 | echo " Existing files are replaced. Must be used as first argument."  | 
            138 |                     Existing files are replaced. Must be used as first argument.
 | 
          
| - | 139 | ||
| 137 | echo " -d, --delete If used with EXPRESSION and DICTIONARY, remove EXPRESSION"  | 
            140 |   -d,  --delete   If used with EXPRESSION and DICTIONARY, remove EXPRESSION
 | 
          
| 138 | echo " from DICTIONARY instead of translating."  | 
            141 |                     from DICTIONARY instead of translating.
 | 
          
| 139 | echo " If used as first argument, delete DICTIONARY."  | 
            142 |                     If used as first argument, delete DICTIONARY.
 | 
          
| 140 | echo " -i, --info Display information about DICTIONARY."  | 
            143 |   -i,  --info     Display information about DICTIONARY.
 | 
          
| 141 | echo " Must be used as first argument."  | 
            144 |                     Must be used as first argument.
 | 
          
| 142 |   echo
 | 
            145 | "
 | 
          
| 143 | if [ $SINGLE_PAGE -eq 0 ]; then pause "c" ; fi  | 
            146 | [ $single_page -eq 0 ] && pause "c"  | 
          
| - | 147 | echo "\  | 
          |
| 144 | echo " -o, --overwrite Like -a but overwrite a contained translation of"  | 
            148 |   -o, --overwrite Like -a but overwrite a contained translation of
 | 
          
| 145 | echo " EXPRESSION with TRANSLATION without question."  | 
            149 |                     EXPRESSION with TRANSLATION without question.
 | 
          
| 146 | echo " Additionally requires 'mktemp'."  | 
            150 |                     Additionally requires 'mktemp'.
 | 
          
| 147 | echo " -R, --repair Repair DICTIONARY instead of translating. Requires 'mktemp'."  | 
            151 |   -R, --repair    Repair DICTIONARY instead of translating. Requires 'mktemp'.
 | 
          
| 148 | echo " Info data is be kept but invalid entries are removed."  | 
            152 |                     Info data is be kept but invalid entries are removed.
 | 
          
| 149 | echo " USE WITH CAUTION!"  | 
            153 |                     USE WITH CAUTION!
 | 
          
| 150 | echo " -s, --sort Sort DICTIONARY instead of translating. Requires 'sort'."  | 
            154 |   -s, --sort      Sort DICTIONARY instead of translating. Requires 'sort'.
 | 
          
| 151 | echo " Includes --sound when used with -v."  | 
            155 |                     Includes --sound when used with -v.
 | 
          
| 152 | echo " Must be used as first argument."  | 
            156 |                     Must be used as first argument.
 | 
          
| 153 |   echo
 | 
            157 | "
 | 
          
| 154 | if [ $SINGLE_PAGE -eq 0 ]; then pause "c" ; fi  | 
            158 | [ $single_page -eq 0 ] && pause "c"  | 
          
| - | 159 | echo "\  | 
          |
| 155 | echo $APPFILENAME" OPTION [OPTION]"  | 
            160 | $appfilename OPTION [OPTION]
 | 
          
| 156 |   echo
 | 
            161 | |
| 157 | echo "Help page OPTIONs:"  | 
            162 | Help page OPTIONs:
 | 
          
| 158 | echo " --1 Display help on one page (without 'clear' and user input)."  | 
            163 |   --1             Display help on one page (without 'clear' and user input).
 | 
          
| 159 | echo " Useful with redirection "  | 
            164 |                     Useful with redirection
 | 
          
| 160 | echo " (try '"$APPFILENAME" --1 --? > translate.doc.txt')."  | 
            165 | (try '"$appfilename" --1 --? > translate.doc.txt').  | 
          
| 161 | echo " Must be given before all other help page options."  | 
            166 |                     Must be given before all other help page options.
 | 
          
| 162 | echo " --a, --about Display information about the program."  | 
            167 |   --a, --about    Display information about the program.
 | 
          
| 163 | echo " --c, --cmd Display this help page."  | 
            168 |   --c, --cmd      Display this help page.
 | 
          
| 164 | echo " --d, --dict Display help about dictionary files."  | 
            169 |   --d, --dict     Display help about dictionary files.
 | 
          
| 165 | echo " --dev, --emp Display special information for developers and employers."  | 
            170 |   --dev, --emp    Display special information for developers and employers.
 | 
          
| 166 | echo " --x, --example Display example."  | 
            171 |   --x, --example  Display example.
 | 
          
| 167 | echo " --?, --help Display all help pages."  | 
            172 |   --?, --help     Display all help pages.
 | 
          
| 168 |   echo
 | 
            173 | "
 | 
          
| 169 | }
 | 
            174 | }
 | 
          
| 170 | 175 | ||
| 171 | function example {  | 
            176 | example() {  | 
          
| 172 | title  | 
            177 | title  | 
          
| 173 | echo "EXAMPLE: If you would like to translate the English words 'a few' into German,"  | 
            178 | echo "EXAMPLE: If you would like to translate the English words 'a few' into German,  | 
          
| 174 |   echo
 | 
            179 | |
| 175 | echo " "$APPFILENAME" ''a few'' en-de"  | 
            180 |   $appfilename 'a few' en-de
 | 
          
| 176 |   echo
 | 
            181 | |
| 177 | echo "should write the German words"  | 
            182 | should write the German words
 | 
          
| 178 |   echo
 | 
            183 | |
| 179 | echo " ein(e) wenig(e)\n"  | 
            184 |   ein(e) wenig(e)\n
 | 
          
| 180 |   echo
 | 
            185 | |
| 181 | echo "(without indent) to stdout if the echo dictionary file 'en-de' contains"  | 
            186 | (without indent) to stdout if the echo dictionary file 'en-de' contains
 | 
          
| 182 | echo "a correct entry for it (see next page). You may also translate it as"  | 
            187 | a correct entry for it (see next page). You may also translate it as
 | 
          
| 183 | echo "entire phrase (which seems to make more sense here):"  | 
            188 | entire phrase (which seems to make more sense here):
 | 
          
| 184 |   echo
 | 
            189 | |
| 185 | echo " "$APPFILENAME" ''a few'' en-de -p"  | 
            190 |   $appfilename 'a few' en-de -p
 | 
          
| 186 |   echo
 | 
            191 | |
| 187 | echo "should instead write the German word 'einige\n'"  | 
            192 | should instead write the German word 'einige\n'
 | 
          
| 188 | echo "(replace '' in input with the double-quote character)."  | 
            193 | (replace '' in input with the double-quote character).
 | 
          
| - | 194 | ||
| 189 |   echo
 | 
            195 | "
 | 
          
| 190 | }
 | 
            196 | }
 | 
          
| 191 | 197 | ||
| 192 | function dictHelp {  | 
            198 | dictHelp() {  | 
          
| 193 | title  | 
            199 | title  | 
          
| - | 200 | echo "\  | 
          |
| 194 | echo "DICTIONARY FILES:"  | 
            201 | DICTIONARY FILES:
 | 
          
| 195 | echo "You may create/improve dictionary files to be used with "$APPNAME  | 
            202 | You may create/improve dictionary files to be used with $appname
 | 
          
| 196 | echo "of your own. Translation data must match the following expression:"  | 
            203 | of your own. Translation data must match the following expression:
 | 
          
| 197 |   echo
 | 
            204 | |
| 198 | echo "#"$DELIMITER"File description displayed when option -i is used\n[#"$DELIMITER"File description\n]"  | 
            205 | #${delimiter}File description displayed when option -i is used\\n[#${delimiter}File description\\n]
 | 
          
| 199 | echo "[Expression"$DELIMITER"translation\n[Next expression"$DELIMITER"next translation\n]]"  | 
            206 | [Expression"$delimiter"translation\\n[Next expression"$delimiter"next translation\\n]]  | 
          
| 200 | echo "Last expression"$DELIMITER"last translation\z"  | 
            207 | Last expression"$delimiter"last translation\z  | 
          
| 201 |   echo
 | 
            208 | |
| 202 | echo "Parts enclosed in rectangle brackets are optional. The "$DELIMITER_NAME" ("$DELIMITER") is to be used"  | 
            209 | Parts enclosed in rectangle brackets are optional. The $delimiter_name ($delimiter) is to be used
 | 
          
| 203 | echo "as delimiter character between original and translated expression only."  | 
            210 | as delimiter character between original and translated expression only.
 | 
          
| 204 | echo "Dictionary file names should contain common language identifiers separated"  | 
            211 | Dictionary file names should contain common language identifiers separated
 | 
          
| 205 | echo "by a dash (such as 'en-de.dic' for an English-German dictionary file)."  | 
            212 | by a dash (such as 'en-de.dic' for an English-German dictionary file).
 | 
          
| 206 |   echo
 | 
            213 | |
| 207 | echo "Program updates and dictionaries can be obtained from"  | 
            214 | Program updates and dictionaries can be obtained from
 | 
          
| 208 | echo "'http://pointedears.de/dev/unix/translate/'."  | 
            215 | 'http://pointedears.de/tools/eazytrans/'.
 | 
          
| 209 | echo "Thank you for using a program by PointedEars."  | 
            216 | Thank you for using a program by PointedEars.
 | 
          
| 210 |   echo
 | 
            217 | "
 | 
          
| 211 | }
 | 
            218 | }
 | 
          
| 212 | 219 | ||
| 213 | function devInfo {  | 
            220 | devInfo() {  | 
          
| 214 | title  | 
            221 | title  | 
          
| 215 | copyright  | 
            222 | copyright  | 
          
| 216 | echo "INFORMATION FOR DEVELOPERS (KNOWN ISSUES)..."  | 
            - | |
| 217 |   echo
 | 
            223 | echo "\  | 
          
| 218 | echo "- Sorting the dictionary unfortunately also sorts its info data by now."  | 
            - | |
| 219 |   echo
 | 
            224 | KNOWN ISSUES
 | 
          
| 220 | echo "...AND FOR EMPLOYERS:"  | 
            - | |
| 221 |   echo
 | 
            225 | |
| 222 | echo "BTW, if you have an idea for improving EasyTranslator or for another (field of)"  | 
            - | |
| 223 | echo "application you want me to develop for you (BASIC, DOS batch, Windows INF,"  | 
            226 | - Sorting the dictionary unfortunately also sorts its info data by now.
 | 
          
| 224 | echo "Visual Basic, bash, Pascal, Delphi, C, HTML/JavaScript, and I am still learning"  | 
            - | |
| 225 | echo "other languages) feel free to mail me, too. THNX! -- PointedEars, 2001-03-28"  | 
            - | |
| 226 |   echo
 | 
            227 | "
 | 
          
| 227 | }
 | 
            228 | }
 | 
          
| 228 | 229 | ||
| 229 | function help {  | 
            230 | help() {  | 
          
| 230 | copying  | 
            231 | copying  | 
          
| 231 | if [ $SINGLE_PAGE -eq 0 ]; then pause ; fi  | 
            232 | [ $single_page -eq 0 ] && pause  | 
          
| 232 | cmdHelp  | 
            233 | cmdHelp  | 
          
| 233 | if [ $SINGLE_PAGE -eq 0 ]; then pause ; fi  | 
            234 | [ $single_page -eq 0 ] && pause  | 
          
| 234 | example  | 
            235 | example  | 
          
| 235 | if [ $SINGLE_PAGE -eq 0 ]; then pause ; fi  | 
            236 | [ $single_page -eq 0 ] && pause  | 
          
| 236 | dictHelp  | 
            237 | dictHelp  | 
          
| 237 | if [ $SINGLE_PAGE -eq 0 ]; then pause ; fi  | 
            238 | [ $single_page -eq 0 ] && pause  | 
          
| 238 | devInfo  | 
            239 | devInfo  | 
          
| 239 | }
 | 
            240 | }
 | 
          
| 240 | 241 | ||
| 241 | function translateReverse {  | 
            242 | check_dictionary() {  | 
          
| 242 | local EXPR="$1"  | 
            243 |   # check if dictionary file (contains at least '#$delimiter')
 | 
          
| 243 | if [ $VERBOSE -eq 1 ]; then echo "Executing: grep -i -e '"$DELIMITER$EXPR"$' '"$DICT"'" ; fi  | 
            244 | [ $verbose -eq 1 ] && echo "Executing: grep -e '."$delimiter".' '"$dict"'"  | 
          
| 244 | RESULT=`grep -i -e "$DELIMITER$EXPR$" "$DICT"`  | 
            245 | result=$(grep -e "#$delimiter." "$dict")  | 
          
| - | 246 | if [ -z "$result" ]; then  | 
          |
| 245 | if [ $VERBOSE -eq 1 ]; then echo "grep returned: '"$RESULT"'" ; fi  | 
            247 | [ $verbose -eq 1 ] && echo "grep returned: ''"  | 
          
| - | 248 | echo $dict": Not a (valid) dictionary file (type '"$appfilename" --d' for details)."  | 
          |
| 246 | if [ -n "$RESULT" ]; then  | 
            249 | [ $verbose -eq 1 ] && echo  | 
          
| - | 250 | exit $EDICT_WRONG_FORMAT  | 
          |
| - | 251 |   else
 | 
          |
| 247 | if [ $VERBOSE -eq 1 ]; then  | 
            252 | if [ $verbose -eq 1 ]; then  | 
          
| 248 | echo "Reading expression from recordset (with sed requires only 1 step! :o)" ;  | 
            253 | echo "grep returned not a null-string: '$dict' seems to be a dictionary file"  | 
          
| 249 | echo "Executing: echo $RESULT | sed 's/$DELIMITER[ ]*[^$DELIMITER]*//'"  | 
            - | |
| 250 |     fi
 | 
            254 |     fi
 | 
          
| 251 | RESULT=`echo $RESULT | sed 's/'$DELIMITER'[ ]*[^'$DELIMITER']*//'`  | 
            - | |
| 252 | if [ $VERBOSE -eq 1 ]; then echo "sed returned: '"$RESULT"'" ; fi  | 
            - | |
| 253 |   fi
 | 
            255 |   fi
 | 
          
| 254 | 256 | result=""  | 
          |
| 255 |   # Should return only characters before the delimiter until BOL (expression)
 | 
            - | |
| 256 | }
 | 
            257 | }
 | 
          
| 257 | 258 | ||
| 258 | function translate {  | 
            259 | create() {  | 
          
| 259 | local EXPR="$1"  | 
            - | |
| 260 | if [ $REVERSE -eq 1 ]; then translateReverse "$1" ; return ; fi  | 
            - | |
| 261 | if [ $VERBOSE -eq 1 ]; then echo "Executing: grep -i -e '^"$EXPR$DELIMITER"' '"$DICT"'" ; fi  | 
            - | |
| 262 | RESULT=`grep -i -e "^$EXPR$DELIMITER" "$DICT"`  | 
            - | |
| 263 | if [ $VERBOSE -eq 1 ]; then echo "grep returned: '"$RESULT"'" ; fi  | 
            260 | [ $verbose -eq 1 ] && echo $dict": Creating dictionary"  | 
          
| 264 | if [ -n "$RESULT" ]; then  | 
            261 | if [ -z "$3" ]; then  | 
          
| 265 | if [ $VERBOSE -eq 1 ]; then  | 
            - | |
| 266 | echo "Reading translation from recordset (with sed requires only 1 step! :o)" ;  | 
            262 | [ $verbose -eq 1 ] && echo $dict": Adding information: '"$DEFAULT_INFO  | 
          
| 267 | echo "Executing: echo $RESULT | sed 's/[^$DELIMITER]*$DELIMITER[ ]*//'"  | 
            263 | echo "#"$delimiter$DEFAULT_INFO &>$dict  | 
          
| 268 |     fi
 | 
            264 |   else
 | 
          
| 269 | RESULT=`echo $RESULT | sed 's/[^'$DELIMITER']*'$DELIMITER'[ ]*//'`  | 
            265 | [ $verbose -eq 1 ] && echo $dict": Adding information: '"$3"'"  | 
          
| 270 | if [ $VERBOSE -eq 1 ]; then echo "sed returned: '"$RESULT"'" ; fi  | 
            266 | echo "#"$delimiter$3 &>$dict  | 
          
| 271 |   fi
 | 
            267 |   fi
 | 
          
| 272 | - | ||
| 273 |   # Should return only characters after the separation character until EOL
 | 
            268 | [ $verbose -eq 1 ] && echo  | 
          
| 274 |   # (translation)
 | 
            269 | exit $?  | 
          
| 275 | }
 | 
            270 | }
 | 
          
| 276 | 271 | ||
| 277 | # exit codes
 | 
            272 | add_info() {  | 
          
| 278 | ESUCCESS=0  | 
            - | |
| 279 | ENO_DICT=1  | 
            - | |
| 280 | EDICT_DIR_NOT_FOUND=2  | 
            273 | if [ -z "$3" ]; then  | 
          
| - | 274 | [ $verbose -eq 1 ] && echo $dict": Adding information: '"$DEFAULT_INFO"'"  | 
          |
| 281 | EDICT_NOT_FOUND=3  | 
            275 | echo "#"$delimiter$DEFAULT_INFO >>$dict  | 
          
| 282 | EDICT_WRONG_FORMAT=4  | 
            276 |   else
 | 
          
| 283 | EDICT_EXPR_CONTAINED=5  | 
            277 | [ $verbose -eq 1 ] && echo $dict": Adding information: '"$3"'"  | 
          
| 284 | EDICT_TEMP_ERROR=6  | 
            278 | echo "#"$delimiter$3 >>$dict  | 
          
| 285 | EDICT_CREATE_ERROR=7  | 
            279 |   fi
 | 
          
| 286 | EDICT_DELETE_EXPR_NOT_FOUND=8  | 
            280 | [ $verbose -eq 1 ] && echo  | 
          
| 287 | EDICT_REMOVE=9  | 
            281 | exit $?  | 
          
| 288 | 282 | }
 | 
          |
| 289 | # argument flags
 | 
            - | |
| 290 | DICTIONARY=0 # if 1, -d refers to the dictionary file instead of an entry  | 
            - | |
| 291 | 283 | ||
| 292 | # option flags - may be replaced by declare -i FLAG
 | 
            - | |
| 293 | ADD=0  | 
            - | |
| 294 | ADDINFO=0  | 
            284 | info() {  | 
          
| 295 | BRACKETS=0  | 
            285 | if [ $verbose -eq 1 ]; then  | 
          
| 296 | CREATE=0  | 
            286 | echo "Obtaining information..."  | 
          
| 297 | DELETE=0  | 
            287 |     echo
 | 
          
| 298 | INFO=0  | 
            288 |   fi
 | 
          
| - | 289 | grep "^#$delimiter" "$dict" | sed 's/^#'$delimiter'//'  | 
          |
| 299 | MESSAGES=0  | 
            290 | result=$(grep -e "^#$delimiter" "$dict")  | 
          
| - | 291 | [ -z "$result" ] && echo $ch_sound$dict": No information available"  | 
          |
| 300 | OVERWRITE=0  | 
            292 | [ $verbose -eq 1 ] && echo  | 
          
| 301 | PHRASE=0  | 
            - | |
| 302 | REPAIR=0  | 
            - | |
| 303 | REVERSE=0  | 
            - | |
| 304 | SORT=0  | 
            - | |
| 305 | SOUND=0  | 
            - | |
| 306 | VERBOSE=0  | 
            293 | exit $ESUCCESS  | 
          
| 307 | ZERO=0  | 
            294 | }
 | 
          
| 308 | 295 | ||
| 309 | if [ -n "$1" ]; then  | 
            - | |
| 310 |   # retrieve arguments and use default settings from environment variable
 | 
            - | |
| 311 | ARGUMENTS=$* ; if [ -n "$TRANSLATE_OPTIONS" ]; then ARGUMENTS=$ARGUMENTS" "$TRANSLATE_OPTIONS ; fi  | 
            - | |
| 312 |   # check options
 | 
            296 | add_translation() {  | 
          
| 313 | for argument in $ARGUMENTS; do  | 
            - | |
| 314 | case "$argument" in  | 
            297 | [ $verbose -eq 1 ] && echo  | 
          
| 315 | "-b" | "--brackets") BRACKETS=1;;  | 
            - | |
| 316 | "-m" | "--messages") MESSAGES=1;;  | 
            - | |
| 317 | "-p" | "--phrase") PHRASE=1;;  | 
            - | |
| 318 | "-r" | "--reverse") REVERSE=1;;  | 
            - | |
| 319 | "-s" | "--sound") SOUND=1;;  | 
            - | |
| 320 | "-v" | "--verbose") VERBOSE=1 ; title ; copyright;;  | 
            298 | result=$(grep -i -e "^$1$delimiter" "$dict")  | 
          
| 321 | "-z" | "--zero") ZERO=1;;  | 
            299 | if [ -z "$result" ]; then  | 
          
| 322 | "--a" | "--about") copying ; exit $ESUCCESS;;  | 
            - | |
| 323 | "--c" | "--cmd") cmdHelp ; exit $ESUCCESS;;  | 
            - | |
| 324 | "--d" | "--dict") dictHelp ; exit $ESUCCESS;;  | 
            300 | echo $dict": Adding expression: '"$1"'"  | 
          
| 325 | "--dev" | "--emp") devInfo ; exit $ESUCCESS;;  | 
            301 | echo $dict": Adding translation: '"$4"'"  | 
          
| 326 | "--1") SINGLE_PAGE=1;;  | 
            302 | if [ -n "$4" ]; then  | 
          
| 327 | "--x" | "--example") example ; exit $ESUCCESS;;  | 
            - | |
| 328 | "--?" | "--help") help ; exit $ESUCCESS;;  | 
            303 | echo $1$delimiter$4 >>$dict  | 
          
| 329 |     esac
 | 
            304 |     else
 | 
          
| 330 |   done
 | 
            - | |
| 331 | if [ $SOUND -eq 1 ]; then CH_SOUND=$CH_SOUND_ON ; fi  | 
            305 | [ $messages -eq 1 ] || [ $verbose -eq 1 ] && echo $ch_sound$appfilename": No translation given for '"$1"'"  | 
          
| 332 | if [ -n "$2" ]; then  | 
            - | |
| 333 | # concatenate dictionary root and given dictionary file
 | 
            - | |
| 334 | DICT="$DICT$2"  | 
            306 |     fi
 | 
          
| 335 | # check for dictionary commands
 | 
            - | |
| 336 | case "$1" in  | 
            307 | sort=1  | 
          
| 337 | "-d" | "--delete") DELETE=1 ; DICTIONARY=1 ;;  | 
            - | |
| 338 | "-c" | "--create") CREATE=1;;  | 
            - | |
| 339 | "-i" | "--info") INFO=1;;  | 
            - | |
| 340 | "-s" | "--sort") SORT=1;;  | 
            - | |
| 341 | "-R" | "--repair") REPAIR=1;;  | 
            - | |
| 342 |     esac
 | 
            308 |   else
 | 
          
| 343 | case "$3" in  | 
            309 |     translate "$1"
 | 
          
| 344 | "-a" | "--add") ADD=1;;  | 
            - | |
| 345 | "-ai" | "--addinfo") ADDINFO=1;;  | 
            310 | echo $ch_sound$dict": Expression already contained: '"$1"':"$result  | 
          
| 346 | "-d" | "--delete") DELETE=1;;  | 
            311 | [ $verbose -eq 1 ] && echo  | 
          
| 347 | "-o" | "--overwrite") OVERWRITE=1;;  | 
            312 | exit $EDICT_EXPR_CONTAINED  | 
          
| 348 |     esac
 | 
            313 |   fi
 | 
          
| - | 314 | }
 | 
          |
| 349 | 315 | ||
| - | 316 | replace_translation() {  | 
          |
| - | 317 | [ $verbose -eq 1 ] && echo  | 
          |
| - | 318 | echo $dict": Replacing expression: '"$1"'"  | 
          |
| - | 319 | echo $dict": Replacing translation: '"$4"'"  | 
          |
| - | 320 | TMPFILE=$(mktemp -q /tmp/$appfilename.XXXXXX)  | 
          |
| 350 | if [ $VERBOSE -eq 1 ]; then  | 
            321 | if [ $? -ne 0 ]; then  | 
          
| - | 322 | [ $verbose -eq 1 ] && echo $appfilename": Can't create temp file, exiting..."  | 
          |
| - | 323 |     exit EDICT_TEMP_ERROR
 | 
          |
| - | 324 |   else
 | 
          |
| 351 | if [ -z "$TRANSLATE_DIR" ]; then  | 
            325 | if [ -n "$4" ]; then  | 
          
| - | 326 | grep -iv -e "^$1$delimiter" "$dict" &>$TMPFILE  | 
          |
| 352 | echo "Dictionary root (program directory): '"$APPFILEDIR"'"  | 
            327 | [ $? -eq 0 ] && echo $1$delimiter$4 >>$TMPFILE  | 
          
| - | 328 | [ $? -eq 0 ] && mv $TMPFILE $dict &>/dev/null  | 
          |
| - | 329 | if [ $? -ne 0 ]; then  | 
          |
| - | 330 | [ $verbose -eq 1 ] && echo $appfilename": Unable to replace dictionary file: '"$dict"'"  | 
          |
| - | 331 |         exit EDICT_REPLACE_ERROR
 | 
          |
| 353 |       else
 | 
            332 |       else
 | 
          
| 354 | echo "Dictionary root (TRANSLATE_DIR): '"$TRANSLATE_DIR"'"  | 
            333 | sort=1  | 
          
| 355 |       fi
 | 
            334 |       fi
 | 
          
| 356 | echo "Dictionary file: '"$2"'"  | 
            335 |     else
 | 
          
| 357 | echo "Dictionary file path: '"$DICT"'"  | 
            336 | [ $messages -eq 1 ] || [ $verbose -eq 1 ] && echo $ch_sound$appfilename": No translation given for '"$1"'"  | 
          
| 358 |     fi
 | 
            337 |     fi
 | 
          
| - | 338 |   fi
 | 
          |
| - | 339 | }
 | 
          |
| 359 | 340 | ||
| - | 341 | delete() {  | 
          |
| - | 342 | if [ $dictionary -eq 0 ]; then  | 
          |
| - | 343 |     # delete entry
 | 
          |
| 360 | DEFAULT_INFO=$APPNAME" "$APPVER" dictionary file created by '"`whoami`"' on "`date`  | 
            344 | [ $verbose -eq 1 ] && echo $dict": Removing expression: "$1  | 
          
| 361 | - | ||
| - | 345 | result=$(grep -i -e "^$1$delimiter" "$dict")  | 
          |
| 362 | if [ $CREATE -eq 1 ]; then  | 
            346 | if [ -z "$result" ]; then  | 
          
| - | 347 | [ $messages -eq 1 ] || [ $verbose -eq 1 ] && echo $dict": Expression not contained in dictionary: '"$1"'"  | 
          |
| - | 348 | exit $EDICT_DELETE_EXPR_NOT_FOUND  | 
          |
| - | 349 |     fi
 | 
          |
| - | 350 | TMPFILE=$(mktemp -q /tmp/$appfilename.XXXXXX)  | 
          |
| 363 | if [ $VERBOSE -eq 1 ]; then  | 
            351 | if [ $? -ne 0 ]; then  | 
          
| - | 352 | [ $verbose -eq 1 ] && echo $appfilename": Can't create temp file, exiting..."  | 
          |
| 364 | echo $DICT": Creating dictionary"  | 
            353 |       exit EDICT_TEMP_ERROR
 | 
          
| 365 |       fi
 | 
            354 |     else
 | 
          
| - | 355 | grep -iv -e "$1$delimiter" "$dict" &>$TMPFILE  | 
          |
| - | 356 | [ $? -eq 0 ] && mv $TMPFILE $dict &>/dev/null  | 
          |
| 366 | if [ -z "$3" ]; then  | 
            357 | if [ $? -ne 0 ]; then  | 
          
| 367 | if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$DEFAULT_INFO ; fi  | 
            358 | [ $verbose -eq 1 ] && echo $dict": Unable to modify dictionary (cannot replace file)"  | 
          
| 368 | echo "#"$DELIMITER$EFAULT_INFO &>$DICT  | 
            359 |         exit EDICT_REPLACE_ERROR
 | 
          
| 369 |       else
 | 
            360 |       else
 | 
          
| 370 | if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$3"'" ; fi  | 
            361 | [ $verbose -eq 1 ] && echo $dict": Modification successful"  | 
          
| 371 | echo "#"$DELIMITER$3 &>$DICT  | 
            362 | exit $ESUCCESS  | 
          
| 372 |       fi
 | 
            363 |       fi
 | 
          
| 373 | if [ $VERBOSE -eq 1 ]; then echo ; fi  | 
            - | |
| 374 | exit $?  | 
            - | |
| 375 |     fi
 | 
            364 |     fi
 | 
          
| 376 | 365 |   else
 | 
          |
| - | 366 |     # delete dictionary
 | 
          |
| 377 | if [ -e "$DICT" ]; then # if dictionary file exists  | 
            367 | if [ $verbose -eq 1 ]; then  | 
          
| 378 |       # check if dictionary file (contains at least '#$DELIMITER')
 | 
            368 | echo $appfilename": Deleting dictionary: '"$dict"'"  | 
          
| 379 | if [ $VERBOSE -eq 1 ]; then echo "Executing: grep -e '."$DELIMITER".' '"$DICT"'" ; fi  | 
            369 | echo $appfilename": Executing: rm '"$dict"' &>/dev/null"  | 
          
| - | 370 |     fi
 | 
          |
| 380 | RESULT=`grep -e "#$DELIMITER." "$DICT"`  | 
            371 | rm $dict &>/dev/null  | 
          
| 381 | if [ -z "$RESULT" ]; then  | 
            372 | if [ $? -ne 0 ]; then  | 
          
| 382 | if [ $VERBOSE -eq 1 ]; then echo "grep returned: ''" ; fi  | 
            373 | [ $messages -eq 1 ] || [ $verbose -eq 1 ] && echo $dict": Unable to remove dictionary"  | 
          
| 383 | echo $DICT": Not a (valid) dictionary file (type '"$APPFILENAME" --d' for details)."  | 
            - | |
| 384 | if [ $VERBOSE -eq 1 ]; then echo ; fi  | 
            - | |
| 385 | exit $EDICT_WRONG_FORMAT  | 
            374 | exit $EDICT_REMOVE  | 
          
| 386 |       else
 | 
            375 |     else
 | 
          
| 387 | if [ $VERBOSE -eq 1 ]; then  | 
            376 | if [ $verbose -eq 1 ]; then  | 
          
| 388 | echo "grep returned not a null-string: '$DICT' seems to be a dictionary file"  | 
            377 | echo $dict": Dictionary successfully removed"  | 
          
| 389 |         fi
 | 
            378 |         echo
 | 
          
| 390 |       fi
 | 
            379 |       fi
 | 
          
| 391 | RESULT=""  | 
            380 | exit $ESUCCESS  | 
          
| - | 381 |     fi
 | 
          |
| - | 382 |   fi
 | 
          |
| - | 383 | }
 | 
          |
| 392 | 384 | ||
| - | 385 | sort_dictionary() {  | 
          |
| 393 | if [ $ADDINFO -eq 1 ]; then  | 
            386 | if [ $verbose -eq 1 ]; then  | 
          
| 394 | if [ -z "$3" ]; then  | 
            387 | echo "Sorting dictionary: '"$dict"'"  | 
          
| 395 | if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$DEFAULT_INFO"'" ; fi  | 
            388 | echo "Executing: sort -d -f -o "$dict" -t "$delimiter" "$dict  | 
          
| - | 389 |   fi
 | 
          |
| 396 | echo "#"$DELIMITER$DEFAULT_INFO >>$DICT  | 
            390 | result=$(sort -d -f -o "$dict" -t $delimiter "$dict")  | 
          
| 397 |         else
 | 
            391 | SORT_EXIT=$?  | 
          
| - | 392 | if [ $verbose -eq 1 ]; then  | 
          |
| 398 | if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$3"'" ; fi  | 
            393 | echo "sort returned exit code "$SORT_EXIT  | 
          
| - | 394 | if [ $SORT_EXIT -eq 0 ]; then  | 
          |
| 399 | echo "#"$DELIMITER$3 >>$DICT  | 
            395 | echo "Sorting successful: '"$dict"'"  | 
          
| 400 |         fi
 | 
            396 |     else
 | 
          
| 401 | if [ $VERBOSE -eq 1 ]; then echo ; fi  | 
            397 | echo "Sorting failed: '"$dict"'"  | 
          
| 402 | exit $?  | 
            398 |     fi
 | 
          
| 403 |       fi
 | 
            399 |     echo
 | 
          
| - | 400 |   fi
 | 
          |
| - | 401 | exit $SORT_EXIT  | 
          |
| - | 402 | }
 | 
          |
| 404 | 403 | ||
| - | 404 | repair() {  | 
          |
| 405 | if [ $INFO -eq 1 ]; then  | 
            405 | [ $verbose -eq 1 ] && echo $dict": Repairing dictionary"  | 
          
| - | 406 | TMPFILE=$(mktemp -q /tmp/$appfilename.XXXXXX)  | 
          |
| 406 | if [ $VERBOSE -eq 1 ]; then  | 
            407 | if [ $? -ne 0 ]; then  | 
          
| 407 | echo "Obtaining information..."  | 
            408 | [ $verbose -eq 1 ] && echo $appfilename": Can't create temp file, exiting..."  | 
          
| 408 |           echo
 | 
            409 |     exit EDICT_TEMP_ERROR
 | 
          
| 409 |         fi
 | 
            410 |   else
 | 
          
| 410 | grep "^#$DELIMITER" "$DICT" | sed 's/^#'$DELIMITER'//'  | 
            411 | grep -e "^#$delimiter" "$dict" &>$TMPFILE  | 
          
| 411 | RESULT=`grep -e "^#$DELIMITER" "$DICT"`  | 
            412 | grep -e ".$delimiter." "$dict" >>$TMPFILE  | 
          
| 412 | if [ -z "$RESULT" ]; then echo $CH_SOUND$DICT": No information available" ; fi  | 
            413 | [ $? -eq 0 ] && mv $TMPFILE $dict &>/dev/null  | 
          
| 413 | if [ $VERBOSE -eq 1 ]; then echo ; fi  | 
            414 | if [ $? -ne 0 ]; then  | 
          
| - | 415 | [ $verbose -eq 1 ] && echo $dict": Unable to repair dictionary (cannot replace file)"  | 
          |
| 414 | exit $ESUCCESS  | 
            416 |       exit EDICT_REPLACE_ERROR
 | 
          
| - | 417 |     else
 | 
          |
| - | 418 | $dict": Repair successful"  | 
          |
| 415 |       fi
 | 
            419 |     fi
 | 
          
| - | 420 |   fi
 | 
          |
| - | 421 | }
 | 
          |
| 416 | 422 | ||
| - | 423 | translateReverse() {  | 
          |
| 417 | if [ $ADD -eq 1 ]; then  | 
            424 | local EXPR="$1"  | 
          
| 418 | if [ $VERBOSE -eq 1 ]; then echo ; fi  | 
            425 | [ $verbose -eq 1 ] && echo >&2 "Executing: grep -i -e '"$delimiter$EXPR"$' '"$dict"'"  | 
          
| - | 426 | result=$(egrep -i -e "$delimiter(\([^\)]+\))?.*\<$EXPR\>.*(\([^\)]+\))?$" "$dict")  | 
          |
| 419 | RESULT=`grep -i -e "^$1$DELIMITER" "$DICT"`  | 
            427 | [ $verbose -eq 1 ] && echo >&2 "grep returned: '"$result"'"  | 
          
| 420 | if [ -z "$RESULT" ]; then  | 
            428 | if [ -n "$result" ]; then  | 
          
| - | 429 | if [ $verbose -eq 1 ]; then  | 
          |
| - | 430 | echo >&2 "Reading expression from recordset (with sed requires only 1 step! :o)  | 
          |
| 421 | echo $DICT": Adding expression: '"$1"'"  | 
            431 | Executing: echo $result | sed 's/$delimiter[ ]*[^$delimiter]*//'"
 | 
          
| - | 432 |     fi
 | 
          |
| 422 | echo $DICT": Adding translation: '"$4"'"  | 
            433 |   # result=$(echo $result | sed 's/'$delimiter'[ ]*[^'$delimiter']*//')
 | 
          
| 423 | if [ -n "$4" ]; then  | 
            434 | result=$(echo $result | sed 's/'$delimiter'.*$//')  | 
          
| 424 | echo $1$DELIMITER$4 >>$DICT  | 
            435 | [ $verbose -eq 1 ] && echo >&2 "sed returned: '"$result"'"  | 
          
| 425 |           else
 | 
            436 |   fi
 | 
          
| - | 437 | ||
| 426 | if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": No translation given for '"$1"'" ; fi  | 
            438 |   # Should return only characters before the delimiter until BOL (expression)
 | 
          
| - | 439 | }
 | 
          |
| - | 440 | ||
| 427 |           fi
 | 
            441 | translate() {  | 
          
| 428 | SORT=1  | 
            442 | local EXPR="$1"  | 
          
| 429 |         else
 | 
            443 | if [ $reverse -eq 1 ]; then  | 
          
| 430 |           translate "$1"
 | 
            444 |     translateReverse "$1"
 | 
          
| - | 445 |     return
 | 
          |
| - | 446 |   fi
 | 
          |
| - | 447 | [ $verbose -eq 1 ] && echo >&2 "Executing: grep -i -e '^"$EXPR$delimiter"' '"$dict"'"  | 
          |
| - | 448 | result=$(grep -i -e "^$EXPR$delimiter" "$dict")  | 
          |
| 431 | echo $CH_SOUND$DICT": Expression already contained: '"$1"':"$RESULT  | 
            449 | [ $verbose -eq 1 ] && echo >&2 "grep returned: '"$result"'"  | 
          
| - | 450 | if [ -n "$result" ]; then  | 
          |
| 432 | if [ $VERBOSE -eq 1 ]; then echo ; fi  | 
            451 | if [ $verbose -eq 1 ]; then  | 
          
| - | 452 | echo >&2 "Reading translation from recordset (with sed requires only 1 step! :o)  | 
          |
| 433 | exit $EDICT_EXPR_CONTAINED  | 
            453 | Executing: echo $result | sed 's/[^$delimiter]*$delimiter[ ]*//'"
 | 
          
| 434 |         fi
 | 
            454 |     fi
 | 
          
| - | 455 | result=$(echo $result | sed 's/[^'$delimiter']*'$delimiter'[ ]*//')  | 
          |
| - | 456 | [ $verbose -eq 1 ] && echo >&2 "sed returned: '"$result"'"  | 
          |
| 435 |       fi
 | 
            457 |   fi
 | 
          
| - | 458 | ||
| - | 459 |   # Should return only characters after the separation character until EOL
 | 
          |
| - | 460 |   # (translation)
 | 
          |
| - | 461 | }
 | 
          |
| 436 | 462 | ||
| - | 463 | translate_all() {  | 
          |
| - | 464 | local second_pass=0  | 
          |
| - | 465 | [ "$1" = "-2" ] && {  | 
          |
| - | 466 |     shift
 | 
          |
| - | 467 | second_pass=1  | 
          |
| - | 468 |   }
 | 
          |
| - | 469 | TRANSL=""  | 
          |
| - | 470 | REVERSE_TRANSL=""  | 
          |
| - | 471 | REVERSE_TRANSL_CAPT="T"  | 
          |
| - | 472 | REVERSE_TRANSL_on=" (reverse)"  | 
          |
| - | 473 | REVERSE_TRANSL_CAPT_on="Reverse t"  | 
          |
| 437 | if [ $OVERWRITE -eq 1 ]; then  | 
            474 | if [ $reverse -eq 1 ]; then  | 
          
| - | 475 | REVERSE_TRANSL=$REVERSE_TRANSL_on  | 
          |
| - | 476 | REVERSE_TRANSL_CAPT=$REVERSE_TRANSL_CAPT_on  | 
          |
| - | 477 |   fi
 | 
          |
| 438 | if [ $VERBOSE -eq 1 ]; then echo ; fi  | 
            478 | if [ $phrase -eq 1 ] ; then  | 
          
| 439 | echo $DICT": Replacing expression: '"$1"'"  | 
            479 | [ $verbose -eq 1 ] && echo "Looking up phrase"$REVERSE_TRANSL": '"$1"'"  | 
          
| 440 | echo $DICT": Replacing translation: '"$4"'"  | 
            480 | if [ $zero -eq 0 ]; then  | 
          
| - | 481 | TRANSL="$1"  | 
          |
| 441 | TMPFILE=`mktemp -q /tmp/$APPFILENAME.XXXXXX`  | 
            482 | [ $brackets -eq 1 ] && TRANSL="["$TRANSL"]"  | 
          
| - | 483 |     fi
 | 
          |
| - | 484 |     translate "$1"
 | 
          |
| 442 | if [ $? -ne 0 ]; then  | 
            485 | if [ -n "$result" ]; then  | 
          
| - | 486 | TRANSL=$result  | 
          |
| 443 | if [ $VERBOSE -eq 1 ]; then echo $APPFILENAME": Can't create temp file, exiting..." ; fi  | 
            487 | [ $verbose -eq 1 ] && echo $REVERSE_TRANSL_CAPT"ranslation: '"$TRANSL"'"  | 
          
| - | 488 |     else
 | 
          |
| - | 489 | if [ $verbose -eq 1 ]; then  | 
          |
| 444 |           exit EDICT_TEMP_ERROR
 | 
            490 | if [ $zero -eq 1 ]; then  | 
          
| - | 491 | echo $REVERSE_TRANSL_CAPT"ranslation failed (return not translatable tokens as null-string): '"$1"'"  | 
          |
| 445 |         else
 | 
            492 |         else
 | 
          
| 446 | if [ -n "$4" ]; then  | 
            - | |
| 447 | grep -iv -e "^$1$DELIMITER" "$DICT" &>$TMPFILE  | 
            - | |
| 448 | if [ $? -eq 0 ]; then echo $1$DELIMITER$4 >>$TMPFILE ; fi  | 
            - | |
| 449 | if [ $? -eq 0 ]; then mv $TMPFILE $DICT &>/dev/null ; fi  | 
            - | |
| 450 | if [ $? -ne 0 ]; then  | 
            493 | if [ $brackets -eq 1 ]; then  | 
          
| 451 | if [ $VERBOSE -eq 1 ]; then echo $APPFILENAME": Unable to replace dictionary file: '"$DICT"'" ; fi  | 
            494 | echo $ch_sound$REVERSE_TRANSL_CAPT"ranslation failed (enclosing phrase in brackets): '"$1"'"  | 
          
| 452 |               exit EDICT_REPLACE_ERROR
 | 
            - | |
| 453 |             else
 | 
            - | |
| 454 | SORT=1  | 
            - | |
| 455 |             fi
 | 
            - | |
| 456 |           else
 | 
            495 |           else
 | 
          
| 457 | if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": No translation given for '"$1"'" ; fi  | 
            496 | echo $ch_sound$REVERSE_TRANSL_CAPT"ranslation failed (leave 'as is'): '"$1"'"  | 
          
| 458 |           fi
 | 
            497 |           fi
 | 
          
| 459 |         fi
 | 
            498 |         fi
 | 
          
| 460 |       fi
 | 
            499 |       fi
 | 
          
| - | 500 |     fi
 | 
          |
| 461 | 501 |   else
 | 
          |
| - | 502 | for word in $@; do  | 
          |
| 462 | if [ $DELETE -eq 1 ]; then  | 
            503 | if [ $zero -eq 0 ]; then  | 
          
| 463 | if [ $DICTIONARY -eq 0 ]; then  | 
            504 | TRANSLWORD="$word"  | 
          
| - | 505 |       else
 | 
          |
| 464 |           # delete entry
 | 
            506 | TRANSLWORD=""  | 
          
| - | 507 |       fi
 | 
          |
| 465 | if [ $VERBOSE -eq 1 ]; then echo $DICT": Removing expression: "$1 ; fi  | 
            508 | [ $verbose -eq 1 ] && echo "Looking up word"$REVERSE_TRANSL": "$word  | 
          
| 466 | RESULT=`grep -i -e "^$1$DELIMITER" "$DICT"`  | 
            509 |       translate "$word"
 | 
          
| 467 | if [ -z "$RESULT" ]; then  | 
            510 | if [ -n "$result" ]; then  | 
          
| - | 511 | TRANSLWORD=$result  | 
          |
| 468 | if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $DICT": Expression not contained in dictionary: '"$1"'" ; fi  | 
            512 | elif [ -n "$wsep" ] && [ $second_pass -eq 0 ]; then  | 
          
| - | 513 | word=${word//$wsep/ }  | 
          |
| - | 514 | translate_all -2 $word  | 
          |
| 469 | exit $EDICT_DELETE_EXPR_NOT_FOUND  | 
            515 | if [ -n "$result" ]; then  | 
          
| - | 516 | TRANSLWORD=$result  | 
          |
| 470 |           fi
 | 
            517 |         fi
 | 
          
| - | 518 |       fi
 | 
          |
| 471 | TMPFILE=`mktemp -q /tmp/$APPFILENAME.XXXXXX`  | 
            519 | [ -n "$result" ] && [ $verbose -eq 1 ] && echo $REVERSE_TRANSL_CAPT"ranslation: '"$TRANSLWORD"'"  | 
          
| - | 520 | ||
| 472 | if [ $? -ne 0 ]; then  | 
            521 | if [ -z "$result" ]; then  | 
          
| 473 | if [ $VERBOSE -eq 1 ]; then echo $APPFILENAME": Can't create temp file, exiting..." ; fi  | 
            522 | [ $zero -eq 0 ] && [ $brackets -eq 1 ] && TRANSLWORD="["$TRANSLWORD"]"  | 
          
| - | 523 | if [ $verbose -eq 1 ]; then  | 
          |
| 474 |             exit EDICT_TEMP_ERROR
 | 
            524 | if [ $zero -eq 1 ]; then  | 
          
| - | 525 | echo $REVERSE_TRANSL_CAPT"ranslation failed (return not translatable tokens as null-string): "$word  | 
          |
| 475 |           else
 | 
            526 |           else
 | 
          
| 476 | grep -iv -e "$1$DELIMITER" "$DICT" &>$TMPFILE  | 
            - | |
| 477 | if [ $? -eq 0 ]; then mv $TMPFILE $DICT &>/dev/null ; fi  | 
            - | |
| 478 | if [ $? -ne 0 ]; then  | 
            527 | if [ $brackets -eq 1 ]; then  | 
          
| 479 | if [ $VERBOSE -eq 1 ]; then echo $DICT": Unable to modify dictionary (cannot replace file)" ; fi  | 
            528 | echo $REVERSE_TRANSL_CAPT"ranslation failed (enclosing word in brackets): "$word  | 
          
| 480 |               exit EDICT_REPLACE_ERROR
 | 
            - | |
| 481 |             else
 | 
            529 |             else
 | 
          
| 482 | if [ $VERBOSE -eq 1 ]; then echo $DICT": Modification successful" ; fi  | 
            530 | echo $REVERSE_TRANSL_CAPT"ranslation failed (leave 'as is'): "$word  | 
          
| 483 | exit $ESUCCESS  | 
            - | |
| 484 |             fi
 | 
            531 |             fi
 | 
          
| 485 |           fi
 | 
            532 |           fi
 | 
          
| 486 |         else
 | 
            - | |
| 487 |           # delete dictionary
 | 
            - | |
| 488 | if [ $VERBOSE -eq 1 ]; then  | 
            - | |
| 489 | echo $APPFILENAME": Deleting dictionary: '"$DICT"'"  | 
            - | |
| 490 | echo $APPFILENAME": Executing: rm '"$DICT"' &>/dev/null"  | 
            - | |
| 491 |           fi
 | 
            - | |
| 492 | rm $DICT &>/dev/null  | 
            - | |
| 493 | if [ $? -ne 0 ]; then  | 
            - | |
| 494 | if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $DICT": Unable to remove dictionary" ; fi  | 
            - | |
| 495 | exit $EDICT_REMOVE  | 
            - | |
| 496 |           else
 | 
            - | |
| 497 | if [ $VERBOSE -eq 1 ]; then  | 
            - | |
| 498 | echo $DICT": Dictionary successfully removed"  | 
            - | |
| 499 |               echo
 | 
            - | |
| 500 |             fi
 | 
            - | |
| 501 | exit $ESUCCESS  | 
            - | |
| 502 |           fi
 | 
            - | |
| 503 |         fi
 | 
            533 |         fi
 | 
          
| 504 |       fi
 | 
            534 |       fi
 | 
          
| - | 535 | TRANSL=$TRANSL" "$TRANSLWORD  | 
          |
| - | 536 |     done
 | 
          |
| - | 537 |   fi
 | 
          |
| - | 538 | }
 | 
          |
| 505 | 539 | ||
| 506 | if [ $SORT -eq 1 ]; then  | 
            540 | # exit codes
 | 
          
| 507 | if [ $VERBOSE -eq 1 ]; then  | 
            - | |
| 508 | echo "Sorting vocabulary: '"$DICT"'"  | 
            - | |
| 509 | echo "Executing: sort -d -f -o "$DICT" -t "$DELIMITER" "$DICT  | 
            - | |
| 510 |         fi
 | 
            541 | ESUCCESS=0  | 
          
| 511 | RESULT=`sort -d -f -o "$DICT" -t $DELIMITER "$DICT"`  | 
            - | |
| 512 | SORT_EXIT=$?  | 
            542 | ENO_DICT=1  | 
          
| 513 | if [ $VERBOSE -eq 1 ]; then  | 
            - | |
| 514 | echo "sort returned exit code "$SORT_EXIT  | 
            - | |
| 515 | if [ $SORT_EXIT -eq 0 ]; then  | 
            543 | EDICT_DIR_NOT_FOUND=2  | 
          
| 516 | echo "Sorting successful: '"$DICT"'"  | 
            - | |
| 517 |           else
 | 
            544 | EDICT_NOT_FOUND=3  | 
          
| 518 | echo "Sorting failed: '"$DICT"'"  | 
            545 | EDICT_WRONG_FORMAT=4  | 
          
| 519 |           fi
 | 
            546 | EDICT_EXPR_CONTAINED=5  | 
          
| 520 |           echo
 | 
            547 | EDICT_TEMP_ERROR=6  | 
          
| 521 |         fi
 | 
            548 | EDICT_CREATE_ERROR=7  | 
          
| 522 | exit $SORT_EXIT  | 
            549 | EDICT_DELETE_EXPR_NOT_FOUND=8  | 
          
| 523 |       fi
 | 
            550 | EDICT_REMOVE=9  | 
          
| 524 | 551 | ||
| 525 | if [ $REPAIR -eq 1 ]; then  | 
            - | |
| 526 | if [ $VERBOSE -eq 1 ]; then echo $DICT": Repairing dictionary" ; fi  | 
            - | |
| 527 | TMPFILE=`mktemp -q /tmp/$APPFILENAME.XXXXXX`  | 
            - | |
| 528 | if [ $? -ne 0 ]; then  | 
            - | |
| 529 | if [ $VERBOSE -eq 1 ]; then echo $APPFILENAME": Can't create temp file, exiting..." ; fi  | 
            - | |
| 530 |           exit EDICT_TEMP_ERROR
 | 
            - | |
| 531 |         else
 | 
            552 | # argument flags
 | 
          
| 532 | grep -e "^#$DELIMITER" "$DICT" &>$TMPFILE  | 
            - | |
| 533 | grep -e ".$DELIMITER." "$DICT" >>$TMPFILE  | 
            - | |
| 534 | if [ $? -eq 0 ]; then mv $TMPFILE $DICT &>/dev/null ; fi  | 
            553 | dictionary=0 # if 1, -d refers to the dictionary file instead of an entry  | 
          
| 535 | if [ $? -ne 0 ]; then  | 
            - | |
| 536 | if [ $VERBOSE -eq 1 ]; then echo $DICT": Unable to repair dictionary (cannot replace file)" ; fi  | 
            - | |
| 537 |             exit EDICT_REPLACE_ERROR
 | 
            - | |
| 538 |           else
 | 
            - | |
| 539 | $DICT": Repair successful"  | 
            - | |
| 540 |           fi
 | 
            - | |
| 541 |         fi
 | 
            - | |
| 542 |       fi
 | 
            - | |
| 543 | 554 | ||
| - | 555 | # option flags - may be replaced by declare -i FLAG
 | 
          |
| - | 556 | add=0  | 
          |
| - | 557 | addinfo=0  | 
          |
| - | 558 | brackets=0  | 
          |
| - | 559 | create=0  | 
          |
| - | 560 | delete=0  | 
          |
| - | 561 | info=0  | 
          |
| - | 562 | messages=0  | 
          |
| - | 563 | overwrite=0  | 
          |
| - | 564 | phrase=0  | 
          |
| - | 565 | repair=0  | 
          |
| - | 566 | reverse=0  | 
          |
| 544 | TRANSL=""  | 
            567 | show_version=0  | 
          
| - | 568 | sort=0  | 
          |
| - | 569 | sound=0  | 
          |
| - | 570 | verbose=0  | 
          |
| - | 571 | zero=0  | 
          |
| - | 572 | ||
| - | 573 | if $(getopt -T >/dev/null 2>&1); [ $? = 4 ]; then  | 
          |
| 545 | REVERSE_TRANSL=""  | 
            574 |   getopt_type=long
 | 
          
| 546 | REVERSE_TRANSL_CAPT="T"  | 
            575 | #  echo "getopt(1) type:     enhanced" >&2
 | 
          
| - | 576 | tmp=$(getopt -o hVbmpoRrSsvzA:a:c:D:d:E:e:i:t: \  | 
          |
| 547 | REVERSE_TRANSL_ON=" (reverse)"  | 
            577 | -l help,version\  | 
          
| - | 578 | ,brackets,messages,phrase,overwrite,repair,reverse,sort,sound,verbose,zero\
 | 
          |
| - | 579 | ,add:,addinfo:,dictionary:,delete:word-separator:\  | 
          |
| - | 580 | ,about,cmd,dictionary-help,dev,emp,1,x,example \
 | 
          |
| 548 | REVERSE_TRANSL_CAPT_ON="Reverse t"  | 
            581 | -n "$appname" \  | 
          
| 549 | if [ $REVERSE -eq 1 ]; then  | 
            582 | -- "$@")  | 
          
| - | 583 | else
 | 
          |
| - | 584 |   getopt_type=short
 | 
          |
| 550 | REVERSE_TRANSL=$REVERSE_TRANSL_ON  | 
            585 | #  echo "getopt(1) type:     old" >&2
 | 
          
| 551 | REVERSE_TRANSL_CAPT=$REVERSE_TRANSL_CAPT_ON  | 
            586 | tmp=$(getopt bdhVmpoRrSsvzA:a:c:D:E:e:i: "$@")  | 
          
| 552 |       fi
 | 
            587 | fi
 | 
          
| - | 588 | ||
| - | 589 | getopt_exit_code=$?  | 
          |
| - | 590 | ||
| 553 | if [ $PHRASE -eq 1 ] ; then  | 
            591 | if [ $getopt_exit_code -eq 0 ]; then  | 
          
| 554 | if [ $VERBOSE -eq 1 ]; then echo "Looking up phrase"$REVERSE_TRANSL": '"$1"'" ; fi  | 
            592 | ##     getopt  returns  error  code 0 for successful parsing, 1 if
 | 
          
| - | 593 | ##     getopt(3) returns errors, 2 if it does not understand its
 | 
          |
| - | 594 | ##     own parameters, 3 if an internal error occurs like out-of-
 | 
          |
| 555 | if [ $ZERO -eq 0 ]; then  | 
            595 | ##     memory, and 4 if it is called with -T.
 | 
          
| - | 596 | #
 | 
          |
| - | 597 | # Note the quotes around '$tmp': they are essential!
 | 
          |
| - | 598 | #  echo $tmp
 | 
          |
| - | 599 | # remove "--"
 | 
          |
| 556 | TRANSL="$1" ; if [ $BRACKETS -eq 1 ]; then TRANSL="["$TRANSL"]" ; fi  | 
            600 | #  for i in $tmp; do if [ "$i" != "--" ]; then tmp2="${tmp2} $i"; fi; done
 | 
          
| - | 601 | eval set -- "$tmp"  | 
          |
| - | 602 | echo "${extd}New arguments: $*$norm" >&2  | 
          |
| - | 603 | ||
| - | 604 |   # First pass to make sure that only help is displayed if wanted
 | 
          |
| 557 |         fi
 | 
            605 | for arg in $*  | 
          
| - | 606 |   do
 | 
          |
| 558 |         translate "$1"
 | 
            607 | case "$arg" in  | 
          
| - | 608 | -h | --help) help; exit $ESUCCESS;;  | 
          |
| 559 | if [ -n "$RESULT" ]; then  | 
            609 | #      -V | --version)  show_version=1;;
 | 
          
| 560 | TRANSL=$RESULT  | 
            610 | --) break;;  | 
          
| - | 611 |     esac
 | 
          |
| - | 612 |   done
 | 
          |
| - | 613 | ||
| 561 | if [ $VERBOSE -eq 1 ]; then echo $REVERSE_TRANSL_CAPT"ranslation: '"$TRANSL"'" ; fi  | 
            614 |   # Second pass to deal with the other options
 | 
          
| - | 615 | while true  | 
          |
| - | 616 |   do
 | 
          |
| - | 617 | case "$1" in  | 
          |
| 562 |         else
 | 
            618 |       # switches
 | 
          
| 563 | if [ $VERBOSE -eq 1 ]; then  | 
            619 | -b | --brackets) brackets=1;;  | 
          
| 564 | if [ $ZERO -eq 1 ]; then  | 
            620 | -r | --reverse) reverse=1;;  | 
          
| 565 | echo $REVERSE_TRANSL_CAPT"ranslation failed (return not translatable tokens as null-string): '"$1"'"  | 
            621 | -v | --verbose) verbose=1; title; copyright;;  | 
          
| 566 |             else
 | 
            622 |       # options
 | 
          
| 567 | if [ $BRACKETS -eq 1 ]; then  | 
            623 | -D | --dictionary) shift; dict="$1";;  | 
          
| 568 | echo $CH_SOUND$REVERSE_TRANSL_CAPT"ranslation failed (enclosing phrase in brackets): '"$1"'"  | 
            624 | -t | --word-separator) shift; wsep="$1";;  | 
          
| 569 |               else
 | 
            625 | --) shift; break;;  | 
          
| - | 626 |     esac
 | 
          |
| - | 627 |     shift
 | 
          |
| - | 628 |   done
 | 
          |
| - | 629 | [ -n "$*" ] && args=$args" $*"  | 
          |
| 570 | echo $CH_SOUND$REVERSE_TRANSL_CAPT"ranslation failed (leave 'as is'): '"$1"'"  | 
            630 | [ -z "$args" -a $show_version -eq 0 -a -z "$dict" ] && echo help  | 
          
| 571 |               fi
 | 
            631 | set -- $args  | 
          
| - | 632 | else
 | 
          |
| - | 633 | #  echo "getopt exited: $getopt_exit_code
 | 
          |
| 572 |             fi
 | 
            634 | #  " >&2
 | 
          
| - | 635 | if [ $getopt_exit_code -eq 1 ] || [ $getopt_exit_code -eq 2 ]; then  | 
          |
| 573 |           fi
 | 
            636 |     echo
 | 
          
| 574 |         fi
 | 
            637 | echo help  | 
          
| 575 |       else
 | 
            638 |   else
 | 
          
| 576 | for word in $1; do  | 
            639 | exit $getopt_exit_code  | 
          
| - | 640 |   fi
 | 
          |
| - | 641 | fi
 | 
          |
| - | 642 | ||
| - | 643 | if [ -n "$1" ]; then  | 
          |
| 577 | if [ $ZERO -eq 0 ]; then TRANSLWORD="$word" ; else TRANSLWORD="" ; fi  | 
            644 |   # retrieve arguments and use default settings from environment variable
 | 
          
| - | 645 | arguments=$*  | 
          |
| 578 | if [ $VERBOSE -eq 1 ]; then echo "Looking up word"$REVERSE_TRANSL": "$word ; fi  | 
            646 | [ -n "$TRANSLATE_OPTIONS" ] && arguments=$arguments" "$TRANSLATE_OPTIONS  | 
          
| - | 647 | ||
| - | 648 |   # check options
 | 
          |
| - | 649 | #  for argument in $arguments
 | 
          |
| - | 650 | #  do
 | 
          |
| 579 |           translate "$word"
 | 
            651 | #    case "$argument" in
 | 
          
| - | 652 | #      "-m" | "--messages") messages=1;;
 | 
          |
| 580 | if [ -n "$RESULT" ]; then  | 
            653 | #      "-p" | "--phrase")   phrase=1;;
 | 
          
| - | 654 | #      "-r" | "--reverse")  reverse=1;;
 | 
          |
| - | 655 | #      "-s" | "--sound")    sound=1;;
 | 
          |
| 581 | TRANSLWORD=$RESULT  | 
            656 | #      "-z" | "--zero")     zero=1;;
 | 
          
| - | 657 | #      "--a" | "--about")   copying; exit $ESUCCESS;;
 | 
          |
| - | 658 | #      "--c" | "--cmd")     cmdHelp; exit $ESUCCESS;;
 | 
          |
| 582 | if [ -n "$RESULT" ] && [ $VERBOSE -eq 1 ]; then echo $REVERSE_TRANSL_CAPT"ranslation: '"$TRANSLWORD"'" ; fi  | 
            659 | #      "--d" | "--dictionary-help")    dictHelp; exit $ESUCCESS;;
 | 
          
| - | 660 | #      "--dev" | "--emp")   devInfo; exit $ESUCCESS;;
 | 
          |
| 583 |           else
 | 
            661 | #      "--1") single_page=1;;
 | 
          
| 584 | if [ $ZERO -eq 0 ] && [ $BRACKETS -eq 1 ]; then TRANSLWORD="["$TRANSLWORD"]" ; fi  | 
            662 | #      "--x" | "--example") example; exit $ESUCCESS;;
 | 
          
| 585 | if [ $VERBOSE -eq 1 ]; then  | 
            663 | #      "-h" | "--help")    help; exit $ESUCCESS;;
 | 
          
| - | 664 | #    esac
 | 
          |
| - | 665 | #  done
 | 
          |
| - | 666 | ||
| - | 667 | [ $sound -eq 1 ] && ch_sound=$ch_sound_on  | 
          |
| - | 668 | ||
| 586 | if [ $ZERO -eq 1 ]; then  | 
            669 | if [ -n "$dict" ]; then  | 
          
| 587 | echo $REVERSE_TRANSL_CAPT"ranslation failed (return not translatable tokens as null-string): "$word  | 
            670 | #    # concatenate dictionary root and given dictionary file
 | 
          
| 588 |               else
 | 
            671 | #    dict="$dict$2"
 | 
          
| 589 | if [ $BRACKETS -eq 1 ]; then  | 
            672 | #    # check for dictionary commands
 | 
          
| - | 673 | #    case "$1" in
 | 
          |
| 590 | echo $REVERSE_TRANSL_CAPT"ranslation failed (enclosing word in brackets): "$word  | 
            674 | #      "-d" | "--delete") delete=1 ; dictionary=1 ;;
 | 
          
| 591 |                 else
 | 
            675 | #      "-c" | "--create") create1;;
 | 
          
| 592 | echo $REVERSE_TRANSL_CAPT"ranslation failed (leave 'as is'): "$word  | 
            676 | #      "-i" | "--info")   info=1;;
 | 
          
| 593 |                 fi
 | 
            677 | #      "-S" | "--sort")   sort=1;;
 | 
          
| - | 678 | #      "-R" | "--repair") repair=1;;
 | 
          |
| 594 |               fi
 | 
            679 | #    esac
 | 
          
| - | 680 | #    
 | 
          |
| 595 |             fi
 | 
            681 | #    case "$3" in
 | 
          
| - | 682 | #      "-a"  | "--add")       add=1;;
 | 
          |
| - | 683 | #      "-A" | "--addinfo")   addinfo=1;;
 | 
          |
| - | 684 | #      "-d"  | "--delete")    delete=1;;
 | 
          |
| - | 685 | #      "-o"  | "--overwrite") overwrite=1;;
 | 
          |
| 596 |           fi
 | 
            686 | #    esac
 | 
          
| - | 687 | #
 | 
          |
| - | 688 | #    if [ $verbose -eq 1 ]; then
 | 
          |
| 597 | TRANSL=$TRANSL" "$TRANSLWORD  | 
            689 | #      if [ -z "$TRANSLATE_DIR" ]; then
 | 
          
| - | 690 | #        echo "Dictionary root (program directory): '"$appfiledir"'"
 | 
          |
| 598 |         done
 | 
            691 | #      else
 | 
          
| - | 692 | #        echo "Dictionary root (TRANSLATE_DIR): '"$TRANSLATE_DIR"'"
 | 
          |
| 599 |       fi
 | 
            693 | #      fi
 | 
          
| - | 694 | #      echo "Dictionary file: '$2'"
 | 
          |
| - | 695 | #      echo "Dictionary file path: '$dict'"
 | 
          |
| - | 696 | #    fi
 | 
          |
| - | 697 | #
 | 
          |
| - | 698 | #    DEFAULT_INFO="$appname $appver dictionary file created by '$(whoami)' on $(date)"
 | 
          |
| - | 699 | #
 | 
          |
| - | 700 | #    [ $create -eq 1 ] && create
 | 
          |
| - | 701 | #
 | 
          |
| - | 702 | if [ -e "$dict" ]; then # if dictionary file exists  | 
          |
| - | 703 | check_dictionary  | 
          |
| - | 704 | ||
| - | 705 | #      [ $addinfo -eq 1 ] && add_info
 | 
          |
| - | 706 | #      [ $info -eq 1 ] && info
 | 
          |
| - | 707 | #      [ $add -eq 1 ] && add_translation
 | 
          |
| - | 708 | #      [ $overwrite -eq 1 ] && replace_translation
 | 
          |
| - | 709 | #      [ $delete -eq 1 ] && delete
 | 
          |
| - | 710 | #      [ $sort -eq 1 ] && sort_dictionary
 | 
          |
| - | 711 | #      [ $repair -eq 1 ] && repair
 | 
          |
| - | 712 | ||
| - | 713 |       translate_all "$@"
 | 
          |
| - | 714 | ||
| 600 | if [ $VERBOSE -eq 1 ]; then echo "Overall translation:" ; fi  | 
            715 | [ $verbose -eq 1 ] && echo "Overall translation:"  | 
          
| 601 | if [ -n "$TRANSL" ]; then echo $TRANSL ; fi  | 
            716 | [ -n "$TRANSL" ] && echo $TRANSL  | 
          
| 602 | if [ $VERBOSE -eq 1 ]; then echo ; fi  | 
            717 | [ $verbose -eq 1 ] && echo  | 
          
| 603 |     else
 | 
            718 |     else
 | 
          
| 604 |       # send errmsg to stderr
 | 
            719 |       # send errmsg to stderr
 | 
          
| 605 | if [ -n "$TRANSLATE_DIR" ] && [ ! -e "$TRANSLATE_DIR" ]; then  | 
            720 | if [ -n "$TRANSLATE_DIR" ] && [ ! -e "$TRANSLATE_DIR" ]; then  | 
          
| 606 | if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND"$APPFILENAME: Unable to locate dictionary root: '"$TRANSLATE_DIR"'" 1>&2 ; fi  | 
            721 | [ $messages -eq 1 ] || [ $verbose -eq 1 ] && echo $ch_sound"$appfilename: Unable to locate dictionary root: '"$TRANSLATE_DIR"'" 1>&2  | 
          
| 607 |       else
 | 
            722 |       else
 | 
          
| 608 | if [ $INFO -eq 0 ] && [ $ADD -eq 1 ] || [ $OVERWRITE -eq 1 ]; then  | 
            723 | if [ $info -eq 0 ] && [ $add -eq 1 ] || [ $overwrite -eq 1 ]; then  | 
          
| 609 | if [ $VERBOSE -eq 1 ]; then  | 
            724 | if [ $verbose -eq 1 ]; then  | 
          
| 610 |             echo
 | 
            725 |             echo
 | 
          
| 611 | echo $DICT": Creating dictionary"  | 
            726 | echo $dict": Creating dictionary"  | 
          
| 612 |           fi
 | 
            727 |           fi
 | 
          
| 613 | if [ -n "$4" ]; then  | 
            728 | if [ -n "$4" ]; then  | 
          
| 614 | if [ -z "$5" ]; then  | 
            729 | if [ -z "$5" ]; then  | 
          
| 615 | if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$APPNAME" "$APPVER" dictionary file created by '"`whoami`"' on "`date`"'" ; fi  | 
            730 | [ $verbose -eq 1 ] && echo $dict": Adding information: '"$appname" "$appver" dictionary file created by '"$(whoami)"' on "$(date)"'"  | 
          
| 616 | echo "#"$DELIMITER$APPNAME" "$APPVER" dictionary file created by '"`whoami`"' on "`date` &>$DICT  | 
            731 | echo "#"$delimiter$appname" "$appver" dictionary file created by '"$(whoami)"' on "$(date) &>$dict  | 
          
| 617 |             else
 | 
            732 |             else
 | 
          
| 618 | if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$5"'" ; fi  | 
            733 | [ $verbose -eq 1 ] && echo $dict": Adding information: '"$5"'"  | 
          
| 619 | echo "#"$DELIMITER$5 &>$DICT  | 
            734 | echo "#"$delimiter$5 &>$dict  | 
          
| 620 |             fi
 | 
            735 |             fi
 | 
          
| 621 | if [ $? -eq 0 ]; then  | 
            736 | if [ $? -eq 0 ]; then  | 
          
| 622 | if [ $VERBOSE -eq 1 ]; then  | 
            737 | if [ $verbose -eq 1 ]; then  | 
          
| 623 | echo $DICT": Adding expression: '"$1"'"  | 
            738 | echo $dict": Adding expression: '"$1"'"  | 
          
| 624 | echo $DICT": Adding translation: '"$4"'"  | 
            739 | echo $dict": Adding translation: '"$4"'"  | 
          
| 625 |               fi
 | 
            740 |               fi
 | 
          
| 626 | echo $1$DELIMITER$4 >>$DICT  | 
            741 | echo $1$delimiter$4 >>$dict  | 
          
| 627 |             else
 | 
            742 |             else
 | 
          
| 628 | if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": Unable to create dictionary file: '"$DICT"'" ; fi  | 
            743 | [ $messages -eq 1 ] || [ $verbose -eq 1 ] && echo $ch_sound$appfilename": Unable to create dictionary file: '"$dict"'"  | 
          
| 629 |               exit EDICT_CREATE_ERROR
 | 
            744 |               exit EDICT_CREATE_ERROR
 | 
          
| 630 |             fi
 | 
            745 |             fi
 | 
          
| 631 |           else
 | 
            746 |           else
 | 
          
| 632 | if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": No translation given for '"$1"'" ; fi  | 
            747 | [ $messages -eq 1 ] || [ $verbose -eq 1 ] && echo $ch_sound$appfilename": No translation given for '"$1"'"  | 
          
| 633 |           fi
 | 
            748 |           fi
 | 
          
| 634 |         else
 | 
            749 |         else
 | 
          
| - | 750 | if [ $messages -eq 1 ] || [ $verbose -eq 1 ]; then  | 
          |
| 635 | if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": Unable to locate dictionary file: '"$DICT"' (please double-quote phrases)" 1>&2 ; fi  | 
            751 | echo >&2 "$ch_sound$appfilename: Unable to locate dictionary file: '$dict'"  | 
          
| - | 752 |           fi
 | 
          |
| 636 |         fi
 | 
            753 |         fi
 | 
          
| 637 |       fi
 | 
            754 |       fi
 | 
          
| 638 | if [ $VERBOSE -eq 1 ]; then echo ; fi  | 
            755 | [ $verbose -eq 1 ] && echo  | 
          
| 639 | if [ -n "$TRANSLATE_DIR" ] && [ ! -e "$TRANSLATE_DIR" ]; then  | 
            756 | if [ -n "$TRANSLATE_DIR" ] && [ ! -e "$TRANSLATE_DIR" ]; then  | 
          
| 640 | exit $EDICT_DIR_NOT_FOUND  | 
            757 | exit $EDICT_DIR_NOT_FOUND  | 
          
| 641 |       else
 | 
            758 |       else
 | 
          
| 642 | exit $EDICT_NOT_FOUND  | 
            759 | exit $EDICT_NOT_FOUND  | 
          
| 643 |       fi
 | 
            760 |       fi
 | 
          
| 644 |     fi
 | 
            761 |     fi
 | 
          
| 645 |   else
 | 
            762 |   else
 | 
          
| 646 | if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then  | 
            763 | if [ $messages -eq 1 ] || [ $verbose -eq 1 ]; then  | 
          
| 647 |       # send errmsg to stderr
 | 
            764 |       # send errmsg to stderr
 | 
          
| 648 | echo $CH_SOUND$APPFILENAME": No dictionary file given" 1>&2  | 
            765 | echo >&2 $ch_sound$appfilename": No dictionary file given"  | 
          
| 649 |     fi
 | 
            766 |     fi
 | 
          
| 650 | if [ $VERBOSE -eq 1 ]; then echo ; fi  | 
            767 | [ $verbose -eq 1 ] && echo  | 
          
| 651 | exit $ENO_DICT  | 
            768 | exit $ENO_DICT  | 
          
| 652 |   fi
 | 
            769 |   fi
 | 
          
| 653 | else
 | 
            770 | else
 | 
          
| 654 |   help
 | 
            771 |   help
 | 
          
| 655 | fi
 | 
            772 | fi
 |