The '''PSET''' grahics [[SCREEN (statement)|SCREEN]] statement sets a pixel to a coordinate with a default or designated color attribute. {{PageSyntax}} :: '''PSET''' [STEP]'''('''''column%'', ''row%''''')'''[, ''colorAttribute''] ''[[Parameters]]:'' * Can use [[STEP]] relative graphics coordinates from a previous graphic object. * ''Column'' and ''row'' can be literal or variable [[INTEGER]] coordinates values which can be offscreen. * If the ''colorAttribute'' is omitted, PSET will use the current [[_DEST|destination]] page's _DEFAULTCOLOR. ''Usage:'' * ''Color attributes'' are limited to the SCREEN mode used. Any color value other than 0 will be white in [[SCREEN (statement)|SCREEN]]s 2 or 11. * PSET can locate other graphics objects and color [[DRAW]] statements. * The PSET action can be used in a graphics [[PUT (graphics statement)|PUT]] to produce an identical image on any background. * The graphic cursor is set to the center of the program window on program start for [[STEP]] relative coordinates. * '''PSET can be used in any graphic screen mode, but cannot be used in the default screen mode 0 as it is text only! (Or in any _NEWIMAGE(x, y, 0) screens which are text only as well.)''' ''Example:'' Using PSET to locate and color a [[DRAW]] statement. {{CodeStart}} '' '' SCREEN 12 {{Cl|PSET}}(100, 100), 12 {{Cl|DRAW}} "U20 R20 D20 L20" '' '' {{CodeEnd}} :''Screen results:'' A drawn box that is bright red. ''Example 2:'' Magnifying a box portion of a Mandelbrot image with PSET {{CodeStart}} '' '' {{Cl|DECLARE}} {{Cl|SUB}} readmouse (x {{Cl|AS}} {{Cl|INTEGER}}, y {{Cl|AS}} {{Cl|INTEGER}}, z {{Cl|AS}} {{Cl|INTEGER}}) {{Cl|DECLARE}} {{Cl|SUB}} rectangle (x1 {{Cl|AS}} {{Cl|INTEGER}}, y1 {{Cl|AS}} {{Cl|INTEGER}}, x2 {{Cl|AS}} {{Cl|INTEGER}}, y2 {{Cl|AS}} {{Cl|INTEGER}}) {{Cl|DECLARE}} {{Cl|FUNCTION}} mandel% (x {{Cl|AS}} {{Cl|DOUBLE}}, y {{Cl|AS}} {{Cl|DOUBLE}}, limit {{Cl|AS}} {{Cl|INTEGER}}) {{Cl|DECLARE}} {{Cl|SUB}} drawmand (x {{Cl|AS}} {{Cl|DOUBLE}}, y {{Cl|AS}} {{Cl|DOUBLE}}, mag {{Cl|AS}} {{Cl|DOUBLE}}) {{Cl|DEFSTR}} A-Z {{Cl|DIM}} red(15) {{Cl|AS}} {{Cl|INTEGER}}, green(15) {{Cl|AS}} {{Cl|INTEGER}}, blue(15) {{Cl|AS}} {{Cl|INTEGER}} {{Cl|DIM}} i {{Cl|AS}} {{Cl|INTEGER}} {{Cl|SCREEN}} 12 {{Cl|FOR...NEXT|FOR}} i = 0 {{Cl|TO}} 15: {{Cl|READ}} red(i): {{Cl|NEXT}} {{Cl|FOR...NEXT|FOR}} i = 0 {{Cl|TO}} 15: {{Cl|READ}} green(i): {{Cl|NEXT}} {{Cl|FOR...NEXT|FOR}} i = 0 {{Cl|TO}} 15: {{Cl|READ}} blue(i): {{Cl|NEXT}} {{Cl|FOR...NEXT|FOR}} i = 0 {{Cl|TO}} 15: {{Cl|PALETTE}} i, 65536 * blue(i) + 256& * green(i) + red(i): {{Cl|NEXT}} {{Cl|DATA}} 0,63,63,63,63,63,31, 0, 0,31,31,31,47,63,63,63 {{Cl|DATA}} 0, 0,15,31,47,63,63,63,63,31,15, 0, 0, 0, 0, 0 {{Cl|DATA}} 0, 0, 0, 0, 0, 0, 0, 0,31,63,63,63,63,63,42,21 {{Cl|DIM}} dmag {{Cl|AS}} {{Cl|INTEGER}}, dlogmag {{Cl|AS}} {{Cl|INTEGER}} {{Cl|DIM}} a {{Cl|AS}} {{Cl|DOUBLE}}, b {{Cl|AS}} {{Cl|DOUBLE}}, mag {{Cl|AS}} {{Cl|DOUBLE}} {{Cl|DIM}} dx {{Cl|AS}} {{Cl|INTEGER}}, dy {{Cl|AS}} {{Cl|INTEGER}} {{Cl|DIM}} mx {{Cl|AS}} {{Cl|INTEGER}}, my {{Cl|AS}} {{Cl|INTEGER}}, mz {{Cl|AS}} {{Cl|INTEGER}} dmag = 16 mag = 1 a = -.75 b = 0 DO {{Cl|DIM}} limitx {{Cl|AS}} {{Cl|DOUBLE}}, limit {{Cl|AS}} {{Cl|INTEGER}} {{Cl|DIM}} inc {{Cl|AS}} {{Cl|DOUBLE}}, left {{Cl|AS}} {{Cl|DOUBLE}}, top {{Cl|AS}} {{Cl|DOUBLE}} limitx = 150 * ({{Cl|LOG}}(mag) + 1) {{Cl|IF...THEN|IF}} limitx > 32767 {{Cl|THEN}} limitx = 32767 limit = {{Cl|INT}}(limitx) inc = .004 / mag left = a - inc * 319 top = b + inc * 239 {{Cl|CLS}} {{Cl|DIM}} yy {{Cl|AS}} {{Cl|INTEGER}}, xx {{Cl|AS}} {{Cl|INTEGER}} {{Cl|DIM}} x {{Cl|AS}} {{Cl|DOUBLE}}, y {{Cl|AS}} {{Cl|DOUBLE}}, z {{Cl|AS}} {{Cl|INTEGER}} {{Cl|FOR...NEXT|FOR}} yy = 0 {{Cl|TO}} 479 y = top - inc * yy {{Cl|FOR...NEXT|FOR}} xx = 0 {{Cl|TO}} 639 x = left + inc * xx z = mandel(x, y, limit) {{Cl|IF...THEN|IF}} z < limit {{Cl|THEN}} {{Cl|PSET}} (xx, yy), 1 + z {{Cl|MOD}} 15 {{Cl|IF...THEN|IF}} {{Cl|INKEY$}} = {{Cl|CHR$}}(27) {{Cl|THEN}} {{Cl|SYSTEM}} {{Cl|NEXT}} {{Cl|NEXT}} mz = 0 {{Cl|CALL}} readmouse(mx, my, mz) DO dx = 319 \ dmag dy = 239 \ dmag {{Cl|CALL}} readmouse(mx, my, mz) {{Cl|IF...THEN|IF}} mz {{Cl|THEN}} {{Cl|EXIT DO}} {{Cl|CALL}} rectangle(mx - dx, my - dy, mx + dx, my + dy) {{Cl|DIM}} t {{Cl|AS}} {{Cl|DOUBLE}} t = {{Cl|TIMER}} {{Cl|WHILE}} t = {{Cl|TIMER}} key$ = {{Cl|INKEY$}} {{Cl|SELECT CASE}} key$ {{Cl|CASE}} {{Cl|CHR$}}(27) {{Cl|SYSTEM}} {{Cl|CASE}} {{Cl|CHR$}}(0) + {{Cl|CHR$}}(72) dmag = dmag \ 2 {{Cl|IF...THEN|IF}} dmag < 2 {{Cl|THEN}} dmag = 2 {{Cl|CASE}} {{Cl|CHR$}}(0) + {{Cl|CHR$}}(80) dmag = dmag * 2 {{Cl|IF...THEN|IF}} dmag > 128 {{Cl|THEN}} dmag = 128 {{Cl|END SELECT}} {{Cl|WEND}} {{Cl|CALL}} rectangle(mx - dx, my - dy, mx + dx, my + dy) {{Cl|LOOP}} a = a + inc * (mx - 319): b = b - inc * (my - 239) {{Cl|IF...THEN|IF}} (mz = 1) {{Cl|THEN}} mag = dmag * mag {{Cl|ELSE}} mag = mag / dmag {{Cl|IF...THEN|IF}} (mag < 1) {{Cl|THEN}} mag = 1 {{Cl|LOOP}} {{Cl|FUNCTION}} mandel% (x {{Cl|AS}} {{Cl|DOUBLE}}, y {{Cl|AS}} {{Cl|DOUBLE}}, limit {{Cl|AS}} {{Cl|INTEGER}}) {{Cl|DIM}} a {{Cl|AS}} {{Cl|DOUBLE}}, b {{Cl|AS}} {{Cl|DOUBLE}}, t {{Cl|AS}} {{Cl|DOUBLE}} {{Cl|DIM}} n {{Cl|AS}} {{Cl|INTEGER}} n = 0: a = 0: b = 0 DO t = a * a - b * b + x b = 2 * a * b + y: a = t n = n + 1 {{Cl|LOOP}} {{Cl|UNTIL}} a * a + b * b > 4 {{Cl|OR (boolean)|OR}} n > limit mandel = n {{Cl|END FUNCTION}} {{Cl|SUB}} readmouse (x {{Cl|AS}} {{Cl|INTEGER}}, y {{Cl|AS}} {{Cl|INTEGER}}, z {{Cl|AS}} {{Cl|INTEGER}}) z=0 DO if {{Cl|_MOUSEBUTTON}}(1) {{Cl|THEN}} z = z {{Cl|OR (boolean)|OR}} 1 if {{Cl|_MOUSEBUTTON}}(2) {{Cl|THEN}} z = z {{Cl|OR (boolean)|OR}} 2 if {{Cl|_MOUSEBUTTON}}(3) {{Cl|THEN}} z = z {{Cl|OR (boolean)|OR}} 4 {{Cl|LOOP}} {{Cl|UNTIL}} {{Cl|_MOUSEINPUT}}=0 x={{Cl|_MOUSEX}} y={{Cl|_MOUSEY}} {{Cl|END SUB}} {{Cl|SUB}} rectangle (x1 {{Cl|AS}} {{Cl|INTEGER}}, y1 {{Cl|AS}} {{Cl|INTEGER}}, x2 {{Cl|AS}} {{Cl|INTEGER}}, y2 {{Cl|AS}} {{Cl|INTEGER}}) {{Cl|DIM}} i {{Cl|AS}} {{Cl|INTEGER}}, j {{Cl|AS}} {{Cl|INTEGER}} {{Cl|FOR...NEXT|FOR}} i = x1 {{Cl|TO}} x2 j = {{Cl|POINT}}(i, y1) {{Cl|PSET}} (i, y1), j {{Cl|XOR (boolean)|XOR}} 15 j = {{Cl|POINT}}(i, y2) {{Cl|PSET}} (i, y2), j {{Cl|XOR (boolean)|XOR}} 15 {{Cl|NEXT}} {{Cl|FOR...NEXT|FOR}} i = y1 {{Cl|TO}} y2 j = {{Cl|POINT}}(x1, i) {{Cl|PSET}} (x1, i), j {{Cl|XOR (boolean)|XOR}} 15 j = {{Cl|POINT}}(x2, i) {{Cl|PSET}} (x2, i), j {{Cl|XOR (boolean)|XOR}} 15 {{Cl|NEXT}} {{Cl|END SUB}} {{CodeEnd}} {{small|Code by Codeguy}} : ''Notes:'' Left click, to zoom in on the rectangle. Right click, to zoom out. Up arrow makes the rectangle bigger and down arrow makes the rectangle smaller. ''See also:'' * [[PRESET]], [[CIRCLE]], [[LINE]] * [[COLOR]], [[POINT]] * [[PUT (graphics statement)]] * [[GET (graphics statement)]] * [[Text Using Graphics]] (Demo) {{PageNavigation}}