annotate kdiff3/doc/en/index.html @ 2:53b8ecbce0cb

Initial revision
author joachim99
date Sun, 18 Aug 2002 16:23:32 +0000
parents
children
rev   line source
joachim99@2 1 <!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
joachim99@2 2 <html>
joachim99@2 3 <head>
joachim99@2 4
joachim99@2 5 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
joachim99@2 6
joachim99@2 7 <meta name="GENERATOR" content="Mozilla/4.78 [de] (X11; U; Linux 2.4.10-4GB i686) [Netscape]">
joachim99@2 8 </head>
joachim99@2 9 <body background="background.png">
joachim99@2 10
joachim99@2 11 <h1> KDiff3 - Text Diff And Merge Tool</h1>
joachim99@2 12 Author: <a href="mailto:joachim.eibl@gmx.de">Joachim Eibl</a>
joachim99@2 13 <br>
joachim99@2 14 Copyright 2002 <br>
joachim99@2 15 Documentation for version 0.81.<br>
joachim99@2 16 <br>
joachim99@2 17 KDiff3 is a program that<br>
joachim99@2 18 <ul>
joachim99@2 19 <li>compares two or three text input files,</li>
joachim99@2 20 <li>shows the differences line by line and character by character (!),</li>
joachim99@2 21 <li>provides an automatic merge-facility and</li>
joachim99@2 22 <li>an editor for comfortable solving of merge-conflicts</li>
joachim99@2 23 <li>and has an intuitive graphical user interface.</li>
joachim99@2 24 </ul>
joachim99@2 25 <p><a href="http://kdiff3.sourceforge.net">KDiff3 Home</a>
joachim99@2 26 </p>
joachim99@2 27
joachim99@2 28 <p><a href="#screenshots">Screenshots</a>
joachim99@2 29 </p>
joachim99@2 30
joachim99@2 31 <p><a href="#documentation">Documentation</a>
joachim99@2 32 </p>
joachim99@2 33
joachim99@2 34 <p><a href="#features">Features</a>
joachim99@2 35 </p>
joachim99@2 36
joachim99@2 37 <p><a href="#faq">Questions and Answers</a>
joachim99@2 38 <br>
joachim99@2 39 &nbsp; <br>
joachim99@2 40 &nbsp; <br>
joachim99@2 41 &nbsp; </p>
joachim99@2 42
joachim99@2 43 <h2> <a name="screenshots"></a>
joachim99@2 44 Screenshots</h2>
joachim99@2 45 This screenshot shows the difference between two text files: <br>
joachim99@2 46 <img src="screenshot_diff.png" height="269" width="578">
joachim99@2 47
joachim99@2 48 <p>This screenshot shows three input files being merged: <br>
joachim99@2 49 <img src="screenshot_merge.png" height="306" width="577">
joachim99@2 50 </p>
joachim99@2 51
joachim99@2 52 <h2> <a name="features"></a>
joachim99@2 53 Features</h2>
joachim99@2 54
joachim99@2 55 <h3> Line-By-Line And Char-By-Char Diff-Viewer</h3>
joachim99@2 56 By using the possiblities of a graphical color display KDiff3 shows exactly
joachim99@2 57 what the difference is: <br>
joachim99@2 58 <img src="letter_by_letter.png" height="63" width="490">
joachim99@2 59 <br>
joachim99@2 60 &nbsp;
joachim99@2 61 <h3> See White-Space Differences At One Glance</h3>
joachim99@2 62 Spaces and tabs that differ appear visibly. When lines differ only in the
joachim99@2 63 amount of white space this can be seen at one&nbsp; look in the summary
joachim99@2 64 column on the left side. <br>
joachim99@2 65 <img src="white_space.png" height="60" width="480">
joachim99@2 66 <br>
joachim99@2 67 &nbsp;
joachim99@2 68 <h3> Triple-Diff</h3>
joachim99@2 69 Analyze three files and see where they differ. <br>
joachim99@2 70 The left/middle/right windows are named A/B/C and have the blue/green/magenta
joachim99@2 71 color respectively. <br>
joachim99@2 72 If one file is the same and one file is different on a line then the color
joachim99@2 73 shows which file is different. The red color means that both other files are
joachim99@2 74 different. <br>
joachim99@2 75 <img src="triple_diff.png" height="50" width="512">
joachim99@2 76 <br>
joachim99@2 77 &nbsp;
joachim99@2 78 <h3> Comfortable Merge Of Two Or Three Input Files</h3>
joachim99@2 79 KDiff3 can be used to merge two or three input files and automatically
joachim99@2 80 merges as much as possible. The result is presented in an editable window
joachim99@2 81 where most conflicts can be solved with a single mouseclick: Select the buttons
joachim99@2 82 A/B/C from the button-bar to select the source that should be used. You can
joachim99@2 83 also select more than one source. Since this output window is an editor even
joachim99@2 84 conflicts which need further corrections can be solved here without requiring
joachim99@2 85 another tool. <br>
joachim99@2 86 &nbsp;
joachim99@2 87 <h3> And ...</h3>
joachim99@2 88
joachim99@2 89 <ul>
joachim99@2 90 <li> Fast navigation via buttons.</li>
joachim99@2 91 <li>A&nbsp;mouse-click into a summary column sync's all windows to show
joachim99@2 92 the same position.</li>
joachim99@2 93 <li> Select and copy from any window and paste into the merge result window.</li>
joachim99@2 94 <li> Overview column that shows where the changes and conflicts are.</li>
joachim99@2 95 <li> The colors are adjustable to your specific preferences.</li>
joachim99@2 96 <li> Adjustable Tab size.&nbsp;</li>
joachim99@2 97 <li>Option to insert spaces instead of tabs.</li>
joachim99@2 98 <li> Open files comfortably via dialog or specify files on the command
joachim99@2 99 line.</li>
joachim99@2 100 <li> ...</li>
joachim99@2 101
joachim99@2 102 </ul>
joachim99@2 103
joachim99@2 104 <h3> Diff Algorithm</h3>
joachim99@2 105 Some graphical diff-tools are just front-ends to the good old command-line
joachim99@2 106 Diff. This is reuse at its best but also limits the possiblities of any
joachim99@2 107 front-end because a diff-analysis of each line is not provided by Diff.
joachim99@2 108 <p>I invented my own diff-algorithm, with the advantage that I could also
joachim99@2 109 reuse it for a line comparison. This algorithm was optimized for use with
joachim99@2 110 C/C++-source files. I hope that the results are useful for you. <br>
joachim99@2 111 &nbsp; </p>
joachim99@2 112
joachim99@2 113 <h2> <a name="documentation"></a>
joachim99@2 114 Documentation</h2>
joachim99@2 115
joachim99@2 116 <h3> Command-Line Options</h3>
joachim99@2 117 - Comparing 2 files: <br>
joachim99@2 118 <tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
joachim99@2 119 kdiff3 <i>file1 file2</i></tt>
joachim99@2 120 <p>- Merging 2 files: <br>
joachim99@2 121 <tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
joachim99@2 122 kdiff3 <i>file1 file2</i> -m</tt> <br>
joachim99@2 123 <tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
joachim99@2 124 kdiff3 <i>file1 file2</i> -o <i>outputfile</i></tt> </p>
joachim99@2 125
joachim99@2 126 <p>- Comparing 3 files: <br>
joachim99@2 127 <tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
joachim99@2 128 kdiff3 <i>file1 file2 file3</i></tt> </p>
joachim99@2 129
joachim99@2 130 <p>- Merging 3 files: <br>
joachim99@2 131 <tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
joachim99@2 132 kdiff3 <i>file1 file2 file3</i> -m</tt> <br>
joachim99@2 133 <tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
joachim99@2 134 kdiff3 <i>file1 file2 file3</i> -o <i>outputfile</i></tt><i> </i><br>
joachim99@2 135 &nbsp;&nbsp;&nbsp;&nbsp; Note that file1 will be treated as base of file2
joachim99@2 136 and file3. </p>
joachim99@2 137
joachim99@2 138 <p>For more information use: <br>
joachim99@2 139 <tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
joachim99@2 140 kdiff3 --help</tt> </p>
joachim99@2 141
joachim99@2 142 <h3> Open-Dialog</h3>
joachim99@2 143 Since many input files must be selectable, the program has a special open
joachim99@2 144 dialog: <br>
joachim99@2 145 <img src="open_dialog.png" height="189" width="448">
joachim99@2 146 <br>
joachim99@2 147 The open dialog allows to edit the filenames by hand, selecting a file via
joachim99@2 148 the file-browser ("Select...") or allows to choose recent files from the drop-down
joachim99@2 149 lists. If you open the dialog again, then the current names still remain
joachim99@2 150 there. The third &nbsp;input file is not required. If the entry for "C" remains
joachim99@2 151 empty, then only a two file diff analysis will be done.
joachim99@2 152 <p>If "Merge" is selected, then the "Output"-line becomes editable. But it
joachim99@2 153 is not required to specify the output filename immediately. You can also postpone
joachim99@2 154 this until saving. </p>
joachim99@2 155
joachim99@2 156 <p>The "Configure"-button opens the options-dialog, so that you can set the
joachim99@2 157 options before running the analysis. <br>
joachim99@2 158 &nbsp; </p>
joachim99@2 159
joachim99@2 160 <h3> Interpreting The Information In The Input Windows</h3>
joachim99@2 161 At the top of each text window is its "info line". The info lines of the
joachim99@2 162 input windows contain a letter "A", "B" or "C", the filename and the line
joachim99@2 163 number of the first visible line in the window. (Note that window "C" is optional.)
joachim99@2 164 Each info line appears in a different color. <br>
joachim99@2 165 The three input windows are assigned the letters "A", "B" and "C". "A" has
joachim99@2 166 color blue, "B" has green and "C" has magenta. (These are the defaults, but
joachim99@2 167 can be changed in the Settings-Menu.) <br>
joachim99@2 168 When a difference is detected then the color shows which input file differs.
joachim99@2 169 When both other input files differ then the color used to express this is
joachim99@2 170 red by default ("Conflict color" in the Settings).
joachim99@2 171 <p>Left of each text is the "summary column". If differences occurred on
joachim99@2 172 a line then the summary column shows the respective color. For a white-space-only
joachim99@2 173 difference the summary is chequered. For programming languages where white
joachim99@2 174 space is not so important this is useful to see at one glance if anything
joachim99@2 175 of importance was modified. (In C/C++ white space is only interesting within
joachim99@2 176 strings, comments, for the preprocessor, and some only very esoteric situations.)
joachim99@2 177 <br>
joachim99@2 178 The vertical line separating the summary column and the text is interrupted
joachim99@2 179 if the input file had no lines there. </p>
joachim99@2 180
joachim99@2 181 <p>On the right side a "overview"-column is visible left of the vertical
joachim99@2 182 scrollbar. It shows the compressed summary column of input "A". All the differences
joachim99@2 183 and conflicts are visible at one glance. When only two input windows are used,
joachim99@2 184 then all differences appear red here because every difference is also a conflict.
joachim99@2 185 A black rectangle frames the visible part of the inputs. For very long input
joachim99@2 186 files, when the number of input lines is bigger than the height of the overview
joachim99@2 187 column in pixels, then several input lines share one overview line. A conflict
joachim99@2 188 then has top priority over simple differences, which have priority over no
joachim99@2 189 change, so that no difference or conflict is lost here. By clicking into
joachim99@2 190 this overview column the corresponding text will be shown.<br>
joachim99@2 191 &nbsp; </p>
joachim99@2 192
joachim99@2 193 <h3> Merging And The Merge Output Editor Window</h3>
joachim99@2 194 This window also has an info line at the top showing "Output:", the filename
joachim99@2 195 and "[Modified]" if you edited something. Usually it will contain some text
joachim99@2 196 through the automatic merge facilities, but often it will also contain conflicts.
joachim99@2 197
joachim99@2 198 <p>!!! Saving is disabled until all conflicts are resolved !!! </p>
joachim99@2 199
joachim99@2 200 <p>With only two input files every difference is also a conflict that must
joachim99@2 201 be solved manually. <br>
joachim99@2 202 With three input files the first file is treated as base, while the second
joachim99@2 203 and third input files contain modifications. When at any line only either
joachim99@2 204 input B or input C have changed but not both then the changed source will
joachim99@2 205 automatically be selected. Only when B and C have changed on the same lines,
joachim99@2 206 then the tool detects a conflict that must be solved manually. </p>
joachim99@2 207
joachim99@2 208 <p>The merge output editor window also has a summary column. It shows the
joachim99@2 209 letter of the input from which a line was selected or nothing if all three
joachim99@2 210 sources where equal on a line. For conflicts it shows a questionmark "?"
joachim99@2 211 and the line shows "&lt;Merge Conflict&gt;", all in red. Because solving
joachim99@2 212 conflicts line by line would take very long, the lines are grouped into
joachim99@2 213 groups that have the same difference and conflict characteristics. When
joachim99@2 214 clicking into the summary column with the left mouse button in either window
joachim99@2 215 then the group belonging to that line will be selected in all windows and
joachim99@2 216 the beginning of that group will be shown. (This might involve an automatic
joachim99@2 217 position jump in the windows if the beginning of a group is not visible.)
joachim99@2 218 <br>
joachim99@2 219 Note the input selector buttons containing the letters "A", "B" and "C"
joachim99@2 220 in the button bar below the menu bar. When clicking on either input selector
joachim99@2 221 button, the lines from that input will be added at the end of the selected
joachim99@2 222 group if that group didn't contain that source before. Otherwise the lines
joachim99@2 223 from that input will be removed. </p>
joachim99@2 224
joachim99@2 225 <p>Besides, you can directly edit any line. The summary column will show
joachim99@2 226 "m" for every line that was modified . </p>
joachim99@2 227
joachim99@2 228 <p>Sometimes, when a line is removed either by automatic merge or be editing
joachim99@2 229 and no other lines remain in that group, then the text &lt;No src line&gt;
joachim99@2 230 will appear in that line. This is just a placeholder for the group for when
joachim99@2 231 you might change your mind and select some source again. This text won't appear
joachim99@2 232 in the saved file or in any selections you want to copy and paste. </p>
joachim99@2 233
joachim99@2 234 <p>The text "&lt;Merge Conflict&gt;" will not appear either if you copy and
joachim99@2 235 paste some text containing that line. Be careful to do so! </p>
joachim99@2 236
joachim99@2 237 <h3> Navigation And Editing</h3>
joachim99@2 238 Much navigation will be done with the scroll bars and the mouse but you
joachim99@2 239 can also navigate with the keys. If you click into either window then you
joachim99@2 240 can use the cursor buttons left, right, up, down, page up, page down, home,
joachim99@2 241 end, ctrl-home, ctrl-end as you would in other programs. The overview-column
joachim99@2 242 next to the &nbsp;vertical scroll bar of the input files can also be used
joachim99@2 243 for navigating by clicking into it.
joachim99@2 244 <p>In the merge output editor you can also use the other keys for editing.
joachim99@2 245 You can toggle between insert and overwrite mode with the insert key. (Default
joachim99@2 246 is insert-mode.) </p>
joachim99@2 247
joachim99@2 248 <p>A left-mouse-button-click into any summary column will synchronise all
joachim99@2 249 windows to show the beginning of the same group of lines (as explained above,
joachim99@2 250 see Merging). </p>
joachim99@2 251
joachim99@2 252 <p>The button bar also contains six navigation buttons with which you can
joachim99@2 253 jump to the first/last group of lines, to the next/previous difference group
joachim99@2 254 or to the next/previous conflict. </p>
joachim99@2 255
joachim99@2 256 <h3> Select, Copy And Paste</h3>
joachim99@2 257 The input windows don't show a cursor, so selections must be made with
joachim99@2 258 the mouse by clicking with the left mouse button at the start, holding down
joachim99@2 259 the mousebutton and moving to the end, where you release the mouse button
joachim99@2 260 again. You can also select a word by double clicking it. In the merge output
joachim99@2 261 editor you can also select via the keyboard by holding the "shift"-button
joachim99@2 262 and navigation with the cursor keys.
joachim99@2 263 <p>To copy to the clipboard you must press the "Copy"-button or Ctrl-C. But
joachim99@2 264 there exists an option "Auto Copy Selection". If this is enabled, then whatever
joachim99@2 265 you select is copied immediately and you don't need to explicitely copy. But
joachim99@2 266 pay attention when using this because the contents of the clipboard might
joachim99@2 267 then be destroyed accidentally. </p>
joachim99@2 268
joachim99@2 269 <p>"Cut" (Ctrl-X) copies to the clipboard and deletes the selected text and
joachim99@2 270 "Paste" (Ctrl-V) inserts the text in the clipboard at the cursorposition
joachim99@2 271 or over the current selection. </p>
joachim99@2 272
joachim99@2 273 <h3> Options</h3>
joachim99@2 274 Options and the recent-file-list will be saved when you exit the program,
joachim99@2 275 and reloaded when you start it.
joachim99@2 276 <h4> Font</h4>
joachim99@2 277 Select a fixed width font. (On some systems this dialog will also present
joachim99@2 278 variable width fonts, but you should not use them.)
joachim99@2 279 <h4> Colors</h4>
joachim99@2 280 Foreground color: Usually black. <br>
joachim99@2 281 Background color: Usually white. <br>
joachim99@2 282 Diff Background color: Usually light gray. <br>
joachim99@2 283 Color A: Usually dark blue. <br>
joachim99@2 284 Color B: Usually dark green. <br>
joachim99@2 285 Color C: Usually dark magenta. <br>
joachim99@2 286 Conflict Color: Usually red.
joachim99@2 287 <h4> Editor Settings</h4>
joachim99@2 288 Tab inserts spaces: If this is disabled and you press the tabulator key,
joachim99@2 289 a tab-character is inserted, otherwise the appropriate amount of characters
joachim99@2 290 is inserted. <br>
joachim99@2 291 Tab size: Can be adjusted for your specific needs. Default is 8. <br>
joachim99@2 292 Auto indentation: When pressing Enter or Return the indentation of the previous
joachim99@2 293 line is used for the new line. <br>
joachim99@2 294 Auto copy selection: Every selection is immediately copied to the clipboard
joachim99@2 295 when active and you needn't explicitely copy it.
joachim99@2 296 <h4> Diff Settings</h4>
joachim99@2 297 Ignore white space: Default is on. White space will be ignored in the first
joachim99@2 298 part of the analysis in which the line matching is done. In the result the
joachim99@2 299 white space differences will be shown nevertheless. <br>
joachim99@2 300 Ignore trivial matches: Default is on. When trivial lines match after an
joachim99@2 301 difference, this will be ignored and the search for a nontrivial matching
joachim99@2 302 line continues. This improves the results for inputs with empty lines and
joachim99@2 303 lines containing only a open or close-brace character, which is often the
joachim99@2 304 case for C/C++-programs. <br>
joachim99@2 305 &nbsp; <br>
joachim99@2 306 &nbsp;
joachim99@2 307 <h2> <a name="faq"></a>
joachim99@2 308 Questions And Answers</h2>
joachim99@2 309
joachim99@2 310 <h4> Why is it called KDiff3?</h4>
joachim99@2 311 Tools named KDiff and KDiff2 already exist. Also "KDiff3" should suggest
joachim99@2 312 that it can merge like the "diff3"-tool in the Diff-Tool collection.
joachim99@2 313 <h4> Why did I release it under GPL?</h4>
joachim99@2 314 I'm using GPL programs for a very long time now and learned very much by
joachim99@2 315 having a look at many of the sources. Hence this is my "Thank You" to all
joachim99@2 316 programmers that also did so or will do the same.
joachim99@2 317 <h4> Often lines that are similar but not identical appear next to each other
joachim99@2 318 but sometimes not. Why?</h4>
joachim99@2 319 Lines where only the amount of white space characters is different are
joachim99@2 320 treated as "equal" at first, while just one different non-white character
joachim99@2 321 causes the lines to be "different". If similar lines appear next to each
joachim99@2 322 other, this actually is coincidence but this fortunately is often the case.
joachim99@2 323
joachim99@2 324 <h4> Sometimes lines that are identical don't appear next to each other. Why?</h4>
joachim99@2 325 Lines that contain very few (less than three) non-white characters are
joachim99@2 326 not used for a match after a difference. Also solitary matching lines in
joachim99@2 327 the middle of differences are not used for matching if they are too far apart.
joachim99@2 328 Most of the time this behaviour improves the quality of the diff-analysis.
joachim99@2 329 But if users (that includes you!) tell me that they need a different behaviour,
joachim99@2 330 then I'll make this an option in the next version.
joachim99@2 331 <h4> Why won't the merge tool automatically merge if both changes are equal?</h4>
joachim99@2 332 Previously I also thought this would be nice, but when I tried it, I saw
joachim99@2 333 that this is dangerous. Sometimes by coincindence two changes are identical
joachim99@2 334 in certain lines but not otherwise. When this is merged automatically then
joachim99@2 335 these lines that are actually needed twice - once for each change - only
joachim99@2 336 appear once in the merge result. It can even happen that no other conflict
joachim99@2 337 appears in the vicinity and then the problem goes completely unnoticed.
joachim99@2 338 <h4> Why must all conflicts be solved before the merge result can be saved?</h4>
joachim99@2 339 For each equal or different section the editor in the merge result window
joachim99@2 340 remembers where it begins or ends. This is needed so that conflicts can
joachim99@2 341 be solved manually by simply selecting the source button (A, B or C). This
joachim99@2 342 information is lost while saving as text and it is too much effort to create
joachim99@2 343 a special file format that supports saving and restoring all necessary information.
joachim99@2 344
joachim99@2 345 <h4> Why does the editor in the merge result window not have an "undo"-function?</h4>
joachim99@2 346 This was too much effort to do in the first version. And you can always
joachim99@2 347 restore a version from one source (A, B or C) by clicking the respective
joachim99@2 348 button. For big editing the use of another editor is recommended anyway.
joachim99@2 349
joachim99@2 350 <h4> When I removed some text, then suddenly "&lt;No src line&gt;" appeared
joachim99@2 351 and can't be deleted. What does that mean and how can one remove this?</h4>
joachim99@2 352 For each equal or different section the editor in the merge result window
joachim99@2 353 remembers where it begins or ends.&nbsp; "&lt;No src line&gt;" means that
joachim99@2 354 there is nothing left in a section, not even a new line character. This
joachim99@2 355 can happen either while merging automatically or by editing. This is no problem,
joachim99@2 356 since this hint won't appear in the saved file. If you want the orignal source
joachim99@2 357 back just select the section (click on the left summary column) and then click
joachim99@2 358 the source button with the needed contents (A/B or C).
joachim99@2 359 <h4> Why doesn't KDiff3 support syntax-highlighting?</h4>
joachim99@2 360 KDiff3 already uses many colors for difference highlighting. More highlighting
joachim99@2 361 would be confusing. Use another editor for this. <br>
joachim99@2 362
joachim99@2 363 <h4>There is so much information here, but your question is still not answered?</h4>
joachim99@2 364 Please send me your question. I appreciate every comment.<br>
joachim99@2 365 &nbsp;
joachim99@2 366 </body>
joachim99@2 367 </html>