*  *   *   *   *   *                                                    *
     Předpokládám existenci procedury
        procedure putpixel(byte c, integer y, integer x)
     Parametry  uváďím  v  tomto  neobvyklém  pořadí  aby procedura přesně
     odpovídala  céčkové verzi (pascal a C předávají parametry v obráceném
     pořadí)
        procedure bres_line_2 (integer x1, integer y1, integer x2,
                               integer y2, byte c)
     (* Tato funkce ilustruje použití 2. metody implementace                *
      * bresenhamova algoritmu. (čtyři varianty)                            *)
        var
            deltax, deltay, d: integer;
        begin
            if x2 > x1 then deltax := x2 - x1; else deltax := x1 - x2;
            if y2 > y1 then deltax := y2 - y1; else deltax := y1 - y2;
     (* Trocu neohrabaný překlad operátoru ?: *)
            if deltax >= deltay then begin
                (* Řídící proměnná byla vybrána X *)
                if x1 > x2 then begin (* Jestli jsme v opačném směru *)
                    x1 := x1 xor x2; x2 := x2 xor x1; x1 := x1 xor x2;
                    y1 := y1 xor y2; y2 := y2 xor y1; y1 := y1 xor y2;
                end;
                if y2 > y1 then begin
                    (* Přičítáme Y *)
                    d := -(deltax shr 1);
                    while x1 <= x2 do begin
                        if d > 0 then begin d := d - deltax; inc(y1); end;
                        putpixel(c, y1, x1);
                        inc(x1);
                        d := d + deltay;
                    end;
                end; else begin
                    (* Odčítáme Y *)
                    d := -(deltax shr 1);
                    while x1 <= x2 do begin
                        if d > 0 then begin d := d - deltax; dec(y1); end;
                        putpixel(c, y1, x1);
                        inc(x1);
                        d := d + deltay;
                    end;
                end;
            end; else begin
                (* Řídící proměnná byla vybrána Y *)
                if y1 > y2 then begin (* Jestli jsme v opačném směru *)
                    x1 := x1 xor x2; x2 := x2 xor x1; x1 := x1 xor x2;
                    y1 := y1 xor y2; y2 := y2 xor y1; y1 := y1 xor y2;
                end;
                if x2 > x1 then begin
                    (* Přičítáme X *)
                    d := -(deltay shr 1);
                    while y1 <= y2 do begin
                        if d > 0 then begin d := d - deltay; inc(x1); end;
                        putpixel(c, y1, x1);
                        inc(y1);
                        d := d + deltax;
                    end;
                end; else begin
                    (* Odčítáme Y *)
                    d := -(deltay shr 1);
                    while y1 <= y2 do begin
                        if d > 0 then begin d := d - deltay; dec(x1); end;
                        putpixel(c, y1, x1);
                        inc(y1);
                        d := d + deltax;
                    end;
                end;
            end;
        end; (* Konec procedury *)

     Poznámka ke zdrojáku: Na mém počítači se nenalézá kompilátor pascalu,
     takže  na  rozdíl od céčkového zdrojáku, tenhle jsem nezkoušel, takže
     při  přepisu mohly vzniknout překlepy. V tom případě si to asi budete
     muset  trochu  odladit.  Ta  céčková  verze mi každopádně fungovala.

                                                                        - Bulb -



            výheň