The SYMBOL statement uses a two-dimensional two- or three-column array to plot a user-defined symbol. Symbols are created with moves and draws in the symbol coordinate system; an area nine units wide and fifteen units high. The symbol may be defined to extend outside of this 9x15 cell; thus allowing you to create any size symbol you wish. The CSIZE, LDIR, and LORG statements affect the SYMBOL statement, but the SHOW or WINDOW to VIEWPORT scaling does not. This keeps the labels from becoming distorted by graphic data scaling.
The symbol data is drawn using the current pen control and line type and is clipped at the clip boundary. A move is always done to the first point and the current pen position is left at the last X,Y position specified in the array and is not updated to the next symbol position. This allows a SYMBOL to cover a group of character cells. The following program shows you how to define a SYMBOL to extend outside the character cell.
10 GINIT
20 DIM A(6,2)
30 READ A(*)
40 DATA 1,7,-2,16,7,-1,15,4,-1,21,8,-1,15,12,-1,16,9,-1,1,9,-1
50 DRAW 50,50
60 RECTANGLE 3,5
70 SYMBOL A(*)
80 END
Notice that the symbol is not closed at one end. Another X,Y data point could be added to the DATA statement to fix this, or the FILL and EDGE commands would also work. Taking the same data points as defined for the SYMBOL command, change line 70 to either the PLOT or RPLOT statements to see what happens.
70 PLOT A(*) !Absolute Points
or
70 RPLOT A(*) !Relative Points
The array is now affected by the scaling of the WINDOW values, and the data points are mapped onto the WINDOW. This causes the arrow to become larger. The PLOT statement is in absolute coordinates, that is why it is close to the origin of 0,0. RPLOT is defined in relative coordinates, being relative to the current position of 50,50.