    rem Basic2D Showcase

    rem Standard Setup Code for all examples
    sync on : sync rate 0
    set text font "arial" : set text size 16
    set text to bold : set text transparent

    rem Nice backdrop
    load bitmap "parchment.jpg"

    rem Produce Title
    ink rgb(0,0,0),0 : center text (screen width()/2)+1,7,"2D Graphics Support"
    ink rgb(255,255,255),0 : center text screen width()/2,6,"2D Graphics Support"

    rem Create an array to hold pixeldatas
    bitsperpixel=bitmap depth()/8
    workA = make memory(640*480*bitsperpixel)
    fill memory workA, 0, 640*480*bitsperpixel

    rem Create Art Space
    set current bitmap 0
    box 48,48,640-48,450-48,rgb(255,255,0),rgb(255,200,255),rgb(255,255,200),rgb(200,255,255)
    lock pixels
    pitch=get pixels pitch() : ptr=get pixels pointer()
    workAptr=workA : linesize=640*bitsperpixel
    for y=0 to 479
     copy memory workAptr, ptr, linesize : inc workAptr,640*bitsperpixel : inc ptr,pitch
    next y
    unlock pixels

    rem Main loop
    do

    rem Draw to Memory
    mx=mousex() : my=mousey()
    focus=16*(1+size)
    if mx>focus and mx<640-focus and my>focus and my<479-focus
     for focus=1 to 16*(1+size)
      for y=my-focus to my+focus
       penwidth=focus-abs(y-my)
       for x=mx-penwidth to mx+penwidth
        workptr=workA+(x*bitsperpixel)+(y*640*bitsperpixel)
        col = *workptr
        colb = col && %1111111111111111
        if bitsperpixel=2
         cr = (col && %11111000000000000000000000000000)>>27
         cg = (col && %00000111111000000000000000000000)>>21
         cb = (col && %00000000000111110000000000000000)>>16
         dec cr
         dec cg
         dec cb
        endif
        if bitsperpixel=4
         cr = rgbr(col) - 1
         cg = rgbg(col) - 1
         cb = rgbb(col) - 1
        endif
        if nocap=0
         if cr<0 then cr=0
         if cg<0 then cg=0
         if cb<0 then cb=0
        endif
        if bitsperpixel=2
         col = (cr<<27)+(cg<<21)+(cb<<16)
         *workptr = col+colb
        endif
        if bitsperpixel=4
         col = rgb(cr,cg,cb)
         *workptr = col
        endif
       next x
      next y
     next focus
    endif

    rem Draw Memory to screen
    workAptr=workA+(640*48*bitsperpixel)
    ymax=450-48
    lock pixels
    linesize=(640-48-48)*bitsperpixel
    pitch=get pixels pitch()
    ptr=get pixels pointer()+(48*pitch)
    for y=48 to ymax
     copy memory ptr+(48*bitsperpixel), workAptr+(48*bitsperpixel), linesize
     inc workAptr,640*bitsperpixel
     inc ptr,pitch
    next y
    unlock pixels

    rem Show Buttons
    over=0
    for but=1 to 3
     for high=0 to 1
      if high=0 then ink rgb(20,20,20),0 : bx=-1 : by=-1
      if high=1 then ink rgb(100,200,100),0 : bx=0 : by=0
      if high=1 and mousey()>420 and mousey()<460
       if but=1 and abs(mousex()-170)<50 then ink rgb(255,255,255),0 : over=1
       if but=2 and abs(mousex()-320)<50 then ink rgb(255,255,255),0 : over=2
       if but=3 and abs(mousex()-470)<50 then ink rgb(255,255,255),0 : over=3
      endif
      if but=1 then but$="SIZE"
      if but=2 then but$="PLASMA"
      if but=3 then but$="EXIT"
      center text 320+bx+((but-2)*150),420+by,but$
     next high
    next but

    rem Controls
    if mouseclick()=1
     if once=0
      once=1
      if over=1 then size=size+1
      if over=2 then nocap=1-nocap
      if size=3 then size=0
      if over=3 then delete memory workA : end
     endif
    else
     once=0
    endif

    rem Update screen
    sync

    rem End loop
    loop

    rem Free memory
    delete memory workA
    delete memory workB