Bad LINE Drawn Using Coordinates Far Outside WINDOW Viewport (52170)
This article was previously published under Q52170
SYMPTOMS
Using the LINE statement with coordinate values that significantly
exceed the coordinate limits set by the WINDOW statement can produce
unexpected results.
STATUS
Microsoft has confirmed this to be a bug in QuickBasic versions
3.00, 4.00, 4.00b, and 4.50; in Microsoft Basic Compiler versions 6.00
and 6.00b (buglist6.00, buglist6.00b); and in Microsoft Basic
Professional Development System (PDS) versions 7.00 and 7.10
(buglist7.00, buglist7.10). This problem was partially corrected in
Microsoft Basic PDS versions 7.00 and 7.10 (fixlist7.00, fixlist7.10)
as shown in Example 1. At run time, Basic PDS 7.00 and 7.10 correctly
flag the negative number in Example 1 as an overflow. However, Basic
PDS 7.00 and 7.10 incorrectly handle the overflow case in Example 2
(buglist7.00, buglist7.10), allowing an incorrect LINE statement
(reversed top to bottom, and incorrect coordinate values) to be drawn.
To work around these problems, a LINE statement should not be executed
with coordinate values that significantly exceed the logical
dimensions of the current viewport set by the WINDOW statement. The
amount that you must exceed the coordinate limits to get the problem
is variable and difficult to predict.
MORE INFORMATION
Code Example 1
The problem occurs in Example 1 under the following conditions:
- The Y-coordinates for the WINDOW statement have a difference of 32
or less. For example: WINDOW (0, 1880)-(20, 1912)
- The parameters on the LINE statement are less than -1800 when the
coordinates of the WINDOW statement are greater than 1850.
The following code shows the problem in QuickBasic 3.00, 4.00, 4.00b,
and 4.50, but correctly gives "Overflow" error in Basic PDS 7.00 and
7.10:
CLS
xl! = 0: xu! = 20!
yl! = 1880!: yu! = 1912! 'Values that have a difference less than 32
SCREEN 9
COLOR 9
VIEW (50, 56)-(639, 336) 'Set up maximum viewport coordinates
WINDOW (xl!, yl!)-(xu!, yu!) 'Set up window to view
READ r!
PSET (0, r!)
FOR j = 2 TO 13
READ r!
LINE -(j * 1.5, r!)
NEXT j
DATA 1881,1887,1881,1840,-1881,1887,1883,-1827,1890,1882,-1807,1883,1887
'DATA statement contains the numbers that fall within
'the needed range for the problem.
END
Code Example 2
This code displays the LINE problem in Basic PDS 7.00 and 7.10, as
well as in QuickBasic 3.00, 4.00, 4.00b, 4.50. If you use a value for
r! a little above 1069 in the LINE statement, the line should go down,
but instead it goes up in this example. Note that PMAP invoked on the
integer boundaries says you can use 1066 or 1067 as a minimum
coordinate that could be trapped, but using 1069, which is above this
limit, still incorrectly draws the line instead of giving an
"Overflow" error.
ON ERROR GOTO checkerror
CLS
xl! = 0: xu! = 20!
yl! = 1880!: yu! = 1890!
SCREEN 12
COLOR 9
VIEW (50, 64)-(639, 463)
WINDOW (xl!, yl!)-(xu!, yu!)
READ r!
PRINT r!
PSET (0, r!)
FOR j = 2 TO 13
READ r!
PRINT r!, POINT(1), POINT(3)
LINE -(j * 1.5, r!)
NEXT j
DATA 1881,1887,1881,1887,1881,1887,1069
DATA 1072,1890,1882,1840,-1887,1887
END
checkerror:
yll! = PMAP(32762, 3)
yul! = PMAP(-32762, 3)
xll! = PMAP(-32762, 2)
xul! = PMAP(32762, 2)
PRINT "Axis limits "; xll!; xul!; yll!; yul!
RESUME NEXT
Modification Type: |
Minor |
Last Reviewed: |
1/9/2003 |
Keywords: |
KB52170 |
|