Metropoli BBS
VIEWER: doline.bas MODE: TEXT (ASCII)
SUB DoLine (X1#, Y1#, X2#, Y2#) STATIC

    IF ABS(X2# - X1#) < .01 THEN      'calc slope of line
       My# = SGN(Y2# - Y1#)           'based on configuration
       Mx# = 0                        'of the end points
    ELSE
       M# = (Y2# - Y1#) / (X2# - X1#)
       IF ABS(M#) > 1 THEN
          My# = SGN(Y2# - Y1#)
          Mx# = SGN(X2# - X1#) / ABS(M#)
       ELSE
          My# = M# * SGN(Y2# - Y1#)
          Mx# = SGN(X2# - X1#)
       END IF
    END IF

DrawPixel:

    IF POINT(X1#, Y1#) = 0 THEN PSET(X1#, Y1#) 'plot if black

    X1# = X1# + Mx#     'increment current pixel on screen
    Y1# = Y1# + My#     '  whether or not a point was plotted
        IF INT(X1#) = INT(X2#) AND INT(Y1#) = INT(Y2#) THEN _
           EXIT SUB         'we reached the end of the line

        GOTO DrawPixel      'attempt to draw the next pixel

    END SUB
[ RETURN TO DIRECTORY ]