home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 13 / AACD13.ISO / AACD / Programming / vbcc_MorphOS / doc / vbcc.doc < prev    next >
Text File  |  2000-08-20  |  27KB  |  680 lines

  1. vbcc - C compiler (c) in 1995-2000 by Volker Barthelmann
  2. vbpp - C preprocessor (c) in 1995-96 by Thorsten Schaaps
  3.  
  4.  
  5. INTRODUCTION
  6.  
  7.     vbcc is a free portable and retargetable ANSI C compiler.
  8.     It is split into a target-independant and a target-dependant part, and
  9.     supports emulating datatypes of the target machine on any other machine
  10.     so that it is possible to e.g. make a crosscompiler for a 64bit machine
  11.     on a 32bit machine.
  12.  
  13.     The target-independant part generates a form of intermediate code
  14.     (quads) which has to be dealt with by the code generator. This
  15.     intermediate code is rather cpu independant (apart from register usage)
  16.     but the target-independant part of vbcc uses informations about the
  17.     target machine while generating this code.
  18.  
  19.     If you are interested in writing a code generator for vbcc, contact
  20.     me (the necessary documents are not written yet).
  21.  
  22.     This document only deals with the target-independant parts of vbcc.
  23.     Be sure to read all the documents for your machine.
  24.  
  25.  
  26. LEGAL
  27.  
  28.     vbcc is (c) in 1995-2000 by Volker Barthelmann.
  29.     This is a development snapshot which must not be distributed.
  30.     Commercial usage is forbidden.
  31.  
  32.  
  33. INSTALLATION
  34.  
  35.     The installation is system dependant and covered in another manual.
  36.  
  37.  
  38. USAGE
  39.  
  40.     Usually vbcc will be called by a frontend. However, if you call it
  41.     directly it has to be done like this (and most of the options
  42.     should be passed through to vbcc by the frontend):
  43.  
  44.       vbcc [options] file
  45.  
  46.     The following options are supported by the machine independant part
  47.     of vbcc:
  48.  
  49.     -quiet      Do not print the copyright notice.
  50.  
  51.     -ic1        Write the intermediate code before optimizing to file.ic1.
  52.  
  53.     -ic2        Write the intermediate code after optimizing to file.ic2.
  54.  
  55.     -debug=n    Set the debug level to n.
  56.  
  57.     -o=ofile    Write the generated assembler output to <ofile> rather than
  58.                 the default file.
  59.  
  60.     -noasm      Do not generate assembler output (only for testing).
  61.  
  62.     -O=n        Turns optimizing options on/off; every bit set in n turns
  63.                 on an option.
  64.                 (See section on optimizing.)
  65.  
  66.     -speed      Turns on optimizations which improve speed even if they
  67.                 increase code-size quite a bit.
  68.  
  69.     -size       Turns on optimizations which improve code-size even if
  70.                 they have negative effect on execution-times.
  71.  
  72.     -maxoptpasses=n
  73.                 Set maximum number of optimizer passes to n.
  74.                 (See section on optimizing.)
  75.  
  76.     -inline-size=n
  77.                 Set the maximum 'size' of functions to be inlined.
  78.                 (See section on optimizing.)
  79.  
  80.     -unroll-size=n
  81.                 Set the maximum 'size' of unrolled loops.
  82.                 (See section on optimizing.)
  83.  
  84.     -unroll-all
  85.                 By default, vbcc will only unroll loops where the number
  86.                 of iterations can be determined at compile-time. If this
  87.                 option is specified it will also unroll loops where the
  88.                 number of iterations can be calculated at runtime when
  89.                 the loop is entered.
  90.  
  91.     -fp-associative
  92.                 Floating point operations do not obey the law of
  93.                 associativity, e.g. (a+b)+c==a+(b+c) is not true for all
  94.                 floating point numbers a,b,c. Therefore certain optimizations
  95.                 depending on this property cannot be performed on floating
  96.                 point numbers.
  97.                 With this option you can tell vbcc to treat floating point
  98.                 operations as associative and perform those optimizations
  99.                 even if that may change the results in some cases (not
  100.                 ANSI conforming).
  101.  
  102.     -no-alias-opt
  103.                 If the optimizer is turned on, vbcc has to make assumptions
  104.                 on aliasing (i.e. which pointer can point to which
  105.                 objects at a given time). If this option is specified,
  106.                 vbcc will make worst-case assumptions and some
  107.                 non-conforming programs could be made to work that way.
  108.  
  109.     -no-multiple-ccs
  110.                 If the code generator supports multiple condition code
  111.                 registers, vbcc will try to use them when optimizing.
  112.                 This flag prevents vbcc from using them.
  113.  
  114.     -double-push
  115.                 On targets where function-arguments are passed in registers
  116.                 but also stack-slots are left empty for such arguments,
  117.                 pass those arguments both in registers and on the stack.
  118.                 This generates less efficient code but some broken code
  119.                 (e.g. code which calls varargs functions without correct
  120.                 prototypes in scope) may work.
  121.  
  122.     -stack-check
  123.                 Insert code for dynamic stack checking/extending if the
  124.                 backend and environment supports this feature.
  125.  
  126.     -iso
  127.     -ansi       Switch to ANSI/ISO mode.
  128.                 In ISO mode warning 209 will be printed by default.
  129.                 '__reg' and inline-assembly-functions are not recognized.
  130.                 Also assignments between pointers to <type> and pointers
  131.                 to unsigned <type> will cause warnings.
  132.  
  133.     -maxerrors=n
  134.                 Abort the compilation after n errors; do not stop if n==0.
  135.  
  136.     -dontwarn=n
  137.                 Suppress warning number n; suppress all warnings if n<0.
  138.                 (See the section on errors/warnings.)
  139.  
  140.     -warn=n
  141.                 Turn on warning number n; turn on all warnings if n<0.
  142.                 (See the section on errors/warnings.)
  143.  
  144.     -strip-path
  145.                 Strip the path of filenames in error messages.
  146.                 Error messages may look more convenient to some people that
  147.                 way, but using this together with message browsers or
  148.                 similar programs could cause trouble.
  149.  
  150.     -nested-comments
  151.                 Allow nested comments (not ANSI conforming).
  152.                 Has no effect if the builtin preprocessor is disabled.
  153.  
  154.     -cpp-comments
  155.                 Allow C++ style comments (not ANSI conforming).
  156.                 Has no effect if the builtin preprocessor is disabled.
  157.  
  158.     -macro-redefinition
  159.                 Allow redefinition of macros (not ANSI conforming).
  160.                 Has no effect if the builtin preprocessor is disabled.
  161.  
  162.     -no-trigraphs
  163.                 Prevents expansion of trigraphs (not ANSI conforming).
  164.                 Has no effect if the builtin preprocessor is disabled.
  165.  
  166.     -no-preprocessor
  167.                 Do not invoke the builtin preprocessor vbpp.
  168.  
  169.     -E          Only preprocess the file and write the preprocessed
  170.                 source to <file>.i.
  171.  
  172.     -dontkeep-initialized-data
  173.                 By default vbcc keeps all data of initializations in memory
  174.                 during the whole compilation (it can sometimes make use
  175.                 of this when optimizing). This can take some amount of
  176.                 memory, though. If this option is specified, vbcc does not
  177.                 keep this data in memory and uses less memory.
  178.                 This has not yet been tested very well.
  179.  
  180.  
  181.     The assembler output will be saved to file.asm (if file already contained
  182.     a suffix, this will first be removed; same applies to .ic1/.ic2)
  183.  
  184.  
  185. SOME INTERNALS
  186.  
  187.     I try to make vbcc as ANSI compliant as possible, so I am only mentioning
  188.     some things I consider interesting.
  189.  
  190.  
  191. ERRORS/WARNINGS
  192.  
  193.     vbcc knows the following kinds of messages:
  194.  
  195.     fatal errors        Something is badly wrong and further compilation is
  196.                         impossible or pointless. vbcc will abort.
  197.                         E.g. no source file or really corrupt source.
  198.  
  199.     errors              There was an error and vbcc cannot generate useful
  200.                         code. Compilation continues, but no code will be
  201.                         generated.
  202.                         E.g. unknown identifiers.
  203.  
  204.     warnings (1)        Warnings with ANSI-violations. The program is not
  205.                         ANSI-conforming, but vbcc will generate code that
  206.                         could be what you want (or not).
  207.                         E.g. missing semicolon.
  208.  
  209.     warnings (2)        The code has no ANSI-violations, but contains some
  210.                         strange things you should perhaps look at.
  211.                         E.g. unused variables.
  212.  
  213.     Errors or the first kind of warnings are always displayed and cannot
  214.     be suppressed.
  215.  
  216.     Only some warnings of the second kind are turned on by default.
  217.     Many of them are very useful for some but annoying to others, and
  218.     their usability may depend on programming style. As I do not want
  219.     to force anyone to a certain style, I recommend everyone to find
  220.     their own preferences.
  221.  
  222.     A good way to do this is starting with all warnings turned on by
  223.     -warn=-1. So you will see all possible warnings. Now everytime you
  224.     get a warning you do not find useful, turn that one off with
  225.     -dontwarn=n.
  226.     The file errors.doc contains a list of all errors/warnings, sometimes
  227.     with more detailed descriptions. This might be very useful, too.
  228.  
  229.     See the docs on your frontend on how to configure it to your
  230.     preferences.
  231.  
  232.  
  233. DATA TYPES
  234.  
  235.     vbcc can handle the following atomic data types:
  236.  
  237.     signed/unsigned char/short/int/long  (signed is always default)
  238.     float/double  (long double is always the same as double)
  239.  
  240.     However several of them can be identical in certain implementations.
  241.  
  242.  
  243. OPTIMIZATIONS
  244.  
  245.     vbcc can compile with or without global optimizations.
  246.     But note that the optimizer is not yet finished and has not been
  247.     tested much. So only use it with care.
  248.  
  249.     In the first compilation phase every function is parsed into a tree
  250.     structure one expression after the other. Then type-checking and some
  251.     minor optimizations like constant-folding or some algebraic
  252.     simplifications are done on the trees.
  253.     This phase of the translation is identical in optimizing and
  254.     non-optimizing compilation.
  255.  
  256.     Then intermediate code is generated from the trees. In non-optimizing
  257.     compilation temporaries needed to evaluate the expression are
  258.     immediately assigned to registers, if possible. In optimizing
  259.     compilation, a new variable is generated for each temporary required.
  260.     Also for certain constructs like loops, different intermediate code
  261.     is produced in optimizing compilation.
  262.     Some minor optimizations are performed while generating the intermediate
  263.     code (simple elimination of unreachable code, some optimizations on
  264.     branches etc.).
  265.  
  266.     After intermediate code for the whole function has been generated
  267.     simple register allocation may be done in non-optimizing compilation
  268.     if bit 1 has been set in the -O option.
  269.     After that, the intermediate code is passed to the code generator and
  270.     then all memory for the function, its variables etc. is freed.
  271.  
  272.     In optimizing compilation flowgraphs are constructed, data flow analysis
  273.     is performed and many passes are made over the function's intermediate
  274.     code. Code may be moved around, new variables may be added, other
  275.     variables removed etc. etc. (for more detailed information on the
  276.     performed optimizations look at the description for the -O option
  277.     below).
  278.  
  279.     Many of the optimization routines depend on each other and if one
  280.     routine finds an optimization, this often enables other routines to
  281.     find further ones. Also some routines only do a first step and let
  282.     other routines 'clean up' afterwards. Because of this, vbcc usually
  283.     makes many passes until no further optimizations are found.
  284.     To avoid possible extremely long optimization times, the number of
  285.     those passes can be limited with the -maxoptpasses=n option (the
  286.     default value is max. 10 passes).
  287.  
  288.     Now it will be decided if the compiled function is a candidate for
  289.     inlining. In this case the intermediate code, as well as the data
  290.     structures for the local variables, will be copied and stored until
  291.     compilation of the entire translation-unit has finished.
  292.  
  293.     After those phases, register allocation should be done. As temporaries
  294.     have not been assigned to registers up to this point, register
  295.     allocation is crucial in optimizing compilation (note that some flags
  296.     MUST be turned on).
  297.  
  298.     Note that optimizing compilation can take MUCH more time and needs
  299.     MUCH more memory. It is hard to predict how much time and space it
  300.     needs, but usually it roughly depends on length of a function (time
  301.     and space needed will usually increase more than linear with the
  302.     length of a function).
  303.  
  304.  
  305.     At the moment the following bits in the -O option are recognized:
  306.  
  307.  
  308.     Bit 0 (1)           Register allocation
  309.  
  310.     This is the only flag that has any effect in non-optimizing compilation.
  311.  
  312.     In non-optimizing compilation, any registers that have never been used
  313.     for temporaries in this function are used for register variables in a
  314.     simple way.
  315.     For each variable, a priority to registerize it is computed (this has
  316.     already been done during generation of intermediate code). This value
  317.     usually reflects how much can be gained by putting it in a register.
  318.     Then, for every free register, the variable with the highest priority
  319.     that can be stored in that register is assigned that register for
  320.     the entire function.
  321.     This improves the generated code quite a bit.
  322.  
  323.     In optimizing compilation several passes are made:
  324.  
  325.     - First, all temporaries are assigned to registers in basic blocks.
  326.       Temporaries are recognized by utilising data flow information on
  327.       active variables, and one variable can be a temporary at one or
  328.       several points although it is alive over several basic blocks at
  329.       another point.
  330.  
  331.     - Then vbcc computes approximate savings that can be obtained by
  332.       holding a variable in a register within a certain program region
  333.       (usually a loop) and assigns the most used variables to registers
  334.       within this region.
  335.       Information on the function's loop structure and active variables
  336.       are used.
  337.  
  338.  
  339.     Bit 1 (2)           activate optimizing compilation
  340.  
  341.     This flag turns on the optimizer. If it is set to zero, no global
  342.     optimizations will be performed, no matter what the other flags are set
  343.     to.
  344.     When turned on, slightly different intermediate code will be generated
  345.     by the first translation phases.
  346.     Also the following optimizations are performed:
  347.  
  348.     - A flow graph is constructed and unused labels are deleted.
  349.  
  350.     - Unreachable code is eliminated.
  351.  
  352.     - Jump optimizations are performed.
  353.  
  354.     - Several peephole optimizations, like constant folding and algebraic
  355.       simplifications, are performed on the intermediate code.
  356.  
  357.     - Identical statements at the beginning/end of basic blocks are
  358.       moved to the successors/predecessors under certain conditions.
  359.  
  360.  
  361.     Bit 2 (4)           common subexpression elimination
  362.  
  363.     The intermediate code is scanned for common subexpressions that can be
  364.     eliminated. Also copy propagation is performed.
  365.     This can be done only within basic blocks or over the whole function,
  366.     depending on bit 5.
  367.     If global cse is selected, data flow analysis for available expressions
  368.     and available copies is performed.
  369.  
  370.     Note that the local versions of these optimizations are only restricted
  371.     versions of the global ones. They operate on the intermediate code
  372.     rather than on trees and therefore are slower than they could be
  373.     on compilers that only perform local versions.
  374.  
  375.  
  376.     Bit 3 (8)           constant propagation
  377.  
  378.     Variables which are known to have a constant value at one time are
  379.     replaced by constants.
  380.     This can be done only within basic blocks or over the whole function,
  381.     depending on bit 5.
  382.     If global constant propagation is selected, data flow analysis for
  383.     reaching definitions is performed.
  384.  
  385.     Note that the local versions of these optimizations are only restricted
  386.     versions of the global ones. They operate on the intermediate code
  387.     rather than on trees and therefore are slower than they could be
  388.     on compilers that only perform local versions.
  389.  
  390.  
  391.     Bit 4 (16)          elimination of dead code
  392.  
  393.     Code which computes a value that is never used will be eliminated.
  394.     Lots of dead code may be generated during the process of optimizing,
  395.     so this optimizations is crucial.
  396.  
  397.  
  398.     Bit 5 (32)          global optimization
  399.  
  400.     Some optimizations are available in local and global versions. This
  401.     flag turns on the global versions.
  402.     At the moment, this effects common subexpression elimination, copy
  403.     propagation, constant propagation and loop optimizations.
  404.  
  405.     Also, if this flag is not turned on, only one optimization pass is
  406.     done, whereas several are done if it is turned on.
  407.  
  408.     Not turning on this flag results in worse code and often shorter
  409.     compile time. However, there are cases where this increases compile
  410.     time.
  411.  
  412.  
  413.     Bit 6 (64)          reserved for future use
  414.  
  415.  
  416.     Bit 7 (128)         loop optimizations
  417.  
  418.     vbcc will try to identify loops and perform the following optimizations
  419.     on the loops it finds:
  420.  
  421.     - frequency-reduction: Loop-invariant operations will be moved out of
  422.                            the loop.
  423.  
  424.     - strength-reduction:  Linear functions of induction variables will be
  425.                            replaced by additional induction variables.
  426.  
  427.     These only work in conjunction with bit 5 (32).
  428.  
  429.  
  430.     Bit 8 (256)         merge variable space
  431.  
  432.     vbcc tries to place variables at the same memory addresses if possible.
  433.  
  434.  
  435.     Bit 9 (512)         reserved for future use
  436.  
  437.  
  438.     Bit 10 (1024)       move assignments out of loops
  439.  
  440.     If bits 5, 7 and 10 are set, vbcc will try to move loop-invariant
  441.     assignments out of loops.
  442.  
  443.  
  444.     Bit 11 (2048)       loop-unrolling, induction-variable-elimination
  445.  
  446.     vbcc tries to unroll certain loops. Only works together with bit 5 (32)
  447.     and bit 7 (128). By default a loop is only unrolled if the number
  448.     of iterations can be determined at compile time. If -unroll-all is
  449.     specified, loops are also unrolled if the number of iterations can be
  450.     calculated at loop entry.
  451.     With -unroll-size you can specify how many intermediate instructions
  452.     the unrolled loop should have at most.
  453.  
  454.     Additionaly, certain loops will be changed to count down to zero and
  455.     the original induction variable will be removed.
  456.  
  457.  
  458.     Bit 12 (4096)       function inlining
  459.  
  460.     The intermediate code of functions that meet certain conditions
  461.     (mainly adjustable by -inline-size) is kept in memory for the entire
  462.     translation unit, and subsequent calls to this function are replaced
  463.     with this code.
  464.  
  465.     This way, constant arguments can be propagated across the function
  466.     and certain parts of the function may be omitted. Also common
  467.     subexpressions across the functions can be eliminated.
  468.  
  469.     An inlined function call is about the same as a macro expansion (but
  470.     safer).
  471.  
  472.     Also look at #pragma only-inline in the following section.
  473.  
  474.  
  475.  
  476.     Also look at the documentation for the target-dependant part of vbcc.
  477.     There may be additional machine specific optimization options.
  478.  
  479.  
  480. EXTENSIONS
  481.  
  482.     #pragma:
  483.  
  484.       At the moment vbcc accepts the following #pragma-directives:
  485.  
  486.       #pragma printflike <function>   This tells vbcc to handle <function>
  487.       #pragma scanflike <function>    specially.
  488.                                       <function> must be an already declared
  489.                                       function, with external linkage, that
  490.                                       takes a variable number of arguments
  491.                                       and a const char * as the last fixed
  492.                                       parameter.
  493.                                       If such a function is called with a
  494.                                       string-constant as format-string, vbcc
  495.                                       will check if the arguments seem to
  496.                                       match the format-specifiers in the
  497.                                       format-string, according to the rules
  498.                                       of printf or scanf.
  499.                                       Also, vbcc will replace the call by a
  500.                                       call to a simplified version according
  501.                                       to the following rules, if such a
  502.                                       function has been declared with external
  503.                                       linkage:
  504.  
  505.                                       If no format-specifiers are used at all,
  506.                                       __v0<function> will be called.
  507.  
  508.                                       If no qualifiers are used and only
  509.                                       d,i,x,X,o,s,c are used, __v1<function>
  510.                                       will be called.
  511.  
  512.                                       If no floating-point arguments are used,
  513.                                       __v2<function> will be called.
  514.  
  515.  
  516.       #pragma only-inline on          The following functions are prepared for
  517.                                       inlining, but no code is generated. This
  518.                                       can be used e.g. in header-files to
  519.                                       supply inline versions of certain
  520.                                       functions.
  521.                                       -inline-size is ignored in this mode -
  522.                                       every function gets prepared for
  523.                                       inlining.
  524.  
  525.                                       Do not use this with functions that have
  526.                                       local static variables!
  527.  
  528.       #pragma only-inline off         The following functions are translated
  529.                                       as usual again.
  530.  
  531.       #pragma opt <n>                 Sets the optimization options to <n>
  532.                                       (similar to -O=<n>) for the following
  533.                                       functions.
  534.                                       Never use this inside a function!
  535.  
  536.       #pragma type <expr>             Write the type of <expr> to stdout.
  537.                                       This is mainly intended for testing.
  538.  
  539.       #pragma tree <expr>             Write the parse-tree of <expr> to stdout.
  540.                                       This is mainly intended for testing.
  541.  
  542.  
  543.     Register parameters:
  544.  
  545.       If the parameters for certain functions should be passed in certain
  546.       registers, you can specify the registers with __reg("<reg>") in the
  547.       prototype, e.g.
  548.  
  549.         void f(__reg("d0") int x, __reg("a0") char *y) { ... }
  550.  
  551.       The names of the available registers depend on the code generator.
  552.       Note that a matching prototype must be in scope when calling such
  553.       a function - or wrong code will be generated.
  554.       Therefore it is not useful to use register parameters in an old-style
  555.       function-definition.
  556.  
  557.       If the code generator cannot handle the specified register for a
  558.       certain type, this will cause an error. Note that this may happen
  559.       although the register could store that type, if the code generator
  560.       does not know about it.
  561.  
  562.       Also note that this may force vbcc to create worse code.
  563.  
  564.       __reg is not recognized when ANSI/ISO mode is turned on.
  565.  
  566.  
  567.     Inline-assembly-functions:
  568.  
  569.       Only use them if you know what you are doing!
  570.  
  571.       A function-declaration may be followed by '=' and a string-constant.
  572.       If a function is called with such a declaration in scope, then no
  573.       function-call will be generated but the string-constant will be
  574.       inserted in the assembly-output.
  575.       Otherwise the compiler and optimizer will treat this like a
  576.       function-call, i.e. the inline-assembly must not modify any callee-save
  577.       registers without restoring them. (In the future there will be
  578.       possibilities to specify side-effects of function-calls to prevent the
  579.       compiler from having to use worst-case-assumptions.)
  580.  
  581.       Example:
  582.  
  583.         double sin(__reg("fp0") double) = "\tfsin.x\tfp0\n";
  584.  
  585.       Inline-assembly-functions are not recognized when ANSI/ISO mode is
  586.       turned on.
  587.  
  588.  
  589.     Target-specific variable attributes
  590.  
  591.       Some targets may offer additional options which are syntactically
  592.       similar to storage-class-specifiers. Multiple specification of an
  593.       attribute or redeclaration of a variable with a differing setting of
  594.       an attribute will cause a warning.
  595.  
  596.       However, no further checkings will be applied. E.g. if an attribute
  597.       is given to a variable it is not applicable to they will usually be
  598.       silently ignored.
  599.  
  600.       Further details may be found in the target-specific documentation.
  601.  
  602.       Target-specific variable attributes are not recognized when ANSI/ISO
  603.       mode is turned on.
  604.  
  605.  
  606.     __typeof:
  607.  
  608.       __typeof is syntactically equivalent to sizeof, but its result is of
  609.       type int and is a number representing the type of its argument.
  610.       This may be necessary for implementing stdarg.h.
  611.  
  612.  
  613. KNOWN PROBLEMS
  614.  
  615.     Some known target-independant problems of vbcc at the moment:
  616.  
  617.     - Some size limits are still hardcoded into the program (the maximum
  618.       nesting of blocks and the maximum length of input lines).
  619.  
  620.     - Bitfields are not really supported (they are always used as int).
  621.  
  622.     - 'volatile' is sometimes ignored.
  623.  
  624.     - long double is not really supported (see errors.doc).
  625.  
  626.     - The optimizer is not finished and may have a few bugs.
  627.  
  628.  
  629. CREDITS
  630.  
  631.     All those who wrote parts of the vbcc distribution, made suggestions,
  632.     answered my questions, tested vbcc, reported errors or were otherwise
  633.     involved in the development of vbcc (in descending alphabetical order,
  634.     under work, not complete):
  635.  
  636.     Frank Wille
  637.     Gary Watson
  638.     Johnny Tevessen
  639.     Ralph Schmidt
  640.     Markus Schmidinger
  641.     Thorsten Schaaps
  642.     Anton Rolls
  643.     Michaela Pruess
  644.     Joerg Plate
  645.     Gilles Pirio
  646.     Bartlomiej Pater
  647.     Gunther Nikl
  648.     Robert Claus Mueller
  649.     Joern Maass
  650.     Aki M Laukkanen
  651.     Kai Kohlmorgen
  652.     Uwe Klinger
  653.     Andreas Kleinert
  654.     Julian Kinraid
  655.     Acereda Macia Jorge
  656.     Dirk Holtwick
  657.     Kasper Graversen
  658.     Jens Granseuer
  659.     Volker Graf
  660.     Marcus Geelnard
  661.     Matthias Fleischer
  662.     Alexander Fichtner
  663.     Olivier Fabre
  664.     Robert Ennals
  665.     Thomas Dorn
  666.     Walter Doerwald
  667.     Aaron Digulla
  668.     Lars Dannenberg
  669.     Sam Crow
  670.     Michael Bode
  671.     Michael Bauer
  672.     Juergen Barthelmann
  673.     Thomas Arnhold
  674.     Alkinoos Alexandros Argiropoulos
  675.     Thomas Aglassinger
  676.  
  677.  
  678. Volker Barthelmann                                      volker@vb.franken.de
  679.  
  680.