<!---  Produced by FS2LSL (Flash Scratch to LSL),  John K. Bennett,  ATLAS Institute, University of Colorado at Boulder,  http://redwood.colorado.edu/jkb/fs2lsl/  -->
<program>
  <globvars>
    <stack x="33" y="16">
      <block spec="Declare Global Variables"/>
      <block spec="global comment: %s">
        <blockarg val="Demonstration of Selection Sort"/>
      </block>
      <block spec="create global var: %g type: %m value: %t">
        <blockarg val="SIZE"/>
        <blockarg val="integer"/>
        <blockarg val="50"/>
      </block>
      <block spec="create global var: %g type: %m value: %t">
        <blockarg val="RANGE"/>
        <blockarg val="float"/>
        <blockarg val="10000.0"/>
      </block>
      <block spec="create global var: %g type: %m value: %t">
        <blockarg val="numbers"/>
        <blockarg val="list"/>
        <blockarg val="[1]"/>
      </block>
      <block spec="create global var: %g type: %m value: %t">
        <blockarg val="i"/>
        <blockarg val="integer"/>
        <blockarg val="none"/>
      </block>
      <block spec="create global var: %g type: %m value: %t">
        <blockarg val="j"/>
        <blockarg val="integer"/>
        <blockarg val="none"/>
      </block>
      <block spec="create global var: %g type: %m value: %t">
        <blockarg val="saveindex"/>
        <blockarg val="integer"/>
        <blockarg val="none"/>
      </block>
      <block spec="create global var: %g type: %m value: %t">
        <blockarg val="swapped"/>
        <blockarg val="integer"/>
        <blockarg val="none"/>
      </block>
      <block spec="create global var: %g type: %m value: %t">
        <blockarg val="oldlowest"/>
        <blockarg val="integer"/>
        <blockarg val="none"/>
      </block>
      <block spec="create global var: %g type: %m value: %t">
        <blockarg val="lowest"/>
        <blockarg val="integer"/>
        <blockarg val="none"/>
      </block>
      <block spec="create global var: %g type: %m value: %t">
        <blockarg val="current"/>
        <blockarg val="integer"/>
        <blockarg val="none"/>
      </block>
      <block spec="create global var: %g type: %m value: %t">
        <blockarg val="index"/>
        <blockarg val="integer"/>
        <blockarg val="0"/>
      </block>
    </stack>
  </globvars>
  <functions/>
  <states>
    <state>
      <stacks>
        <stack x="28" y="346">
          <block spec="state %s">
            <blockarg val="default"/>
          </block>
          <block spec="when I enter this state"/>
          <block spec="comment: %s">
            <blockarg val="Generate a random list of numbers"/>
          </block>
          <block spec="repeat %n times">
            <block varName="SIZE" varScope="global"/>
            <stack>
              <block spec="set %s = %n">
                <block varName="numbers" varScope="global"/>
                <block spec="list %s with item %s inserted at index %n">
                  <block varName="numbers" varScope="global"/>
                  <block spec="random #: 0 to %n">
                    <block varName="RANGE" varScope="global"/>
                  </block>
                  <block varName="index" varScope="global"/>
                </block>
              </block>
              <block spec="%s ++">
                <block varName="index" varScope="global"/>
              </block>
            </stack>
          </block>
          <block spec=" %S msg: %s on channel %n">
            <blockarg val="Say"/>
            <block spec="dump list %s to string">
              <block varName="numbers" varScope="global"/>
            </block>
            <blockarg val="0"/>
          </block>
        </stack>
        <stack x="36" y="584">
          <block spec="when I am touched"/>
          <block spec="comment: %s">
            <blockarg val="Do a selection sort"/>
          </block>
          <block spec="set %s = %n">
            <block varName="i" varScope="global"/>
            <blockarg val="0"/>
          </block>
          <block spec="repeat %n times">
            <block varName="SIZE" varScope="global"/>
            <stack>
              <block spec="comment: %s">
                <blockarg val="assume first element is lowest"/>
              </block>
              <block spec="set %s = %n">
                <block varName="lowest" varScope="global"/>
                <block spec="list %s element at %n to %w">
                  <block varName="numbers" varScope="global"/>
                  <block varName="i" varScope="global"/>
                  <blockarg val="Integer"/>
                </block>
              </block>
              <block spec="set %s = %n">
                <block varName="oldlowest" varScope="global"/>
                <block varName="lowest" varScope="global"/>
              </block>
              <block spec="comment: %s">
                <blockarg val="find new lowest"/>
              </block>
              <block spec="set %s = %n">
                <block varName="swapped" varScope="global"/>
                <block spec="false"/>
              </block>
              <block spec="set %s = %n">
                <block varName="j" varScope="global"/>
                <block spec=" %n %P %n ">
                  <block varName="i" varScope="global"/>
                  <blockarg val="+"/>
                  <blockarg val="1"/>
                </block>
              </block>
              <block spec="while %b do">
                <block spec=" %n %Q %n ">
                  <block varName="j" varScope="global"/>
                  <blockarg val="&lt;"/>
                  <block spec=" %n %P %n ">
                    <block varName="SIZE" varScope="global"/>
                    <blockarg val="+"/>
                    <blockarg val="1"/>
                  </block>
                </block>
                <stack>
                  <block spec="set %s = %n">
                    <block varName="current" varScope="global"/>
                    <block spec="list %s element at %n to %w">
                      <block varName="numbers" varScope="global"/>
                      <block varName="j" varScope="global"/>
                      <blockarg val="Integer"/>
                    </block>
                  </block>
                  <block spec="if %b">
                    <block spec=" %n %Q %n ">
                      <block varName="current" varScope="global"/>
                      <blockarg val="&lt;"/>
                      <block varName="lowest" varScope="global"/>
                    </block>
                    <stack>
                      <block spec="comment: %s">
                        <blockarg val="assign new lowest and save index"/>
                      </block>
                      <block spec="set %s = %n">
                        <block varName="lowest" varScope="global"/>
                        <block varName="current" varScope="global"/>
                      </block>
                      <block spec="set %s = %n">
                        <block varName="saveindex" varScope="global"/>
                        <block varName="j" varScope="global"/>
                      </block>
                      <block spec="set %s = %n">
                        <block varName="swapped" varScope="global"/>
                        <block spec="true"/>
                      </block>
                    </stack>
                  </block>
                  <block spec="%s ++">
                    <block varName="j" varScope="global"/>
                  </block>
                </stack>
              </block>
              <block spec="comment: %s">
                <blockarg val="swap old lowest and new lowest"/>
              </block>
              <block spec="if %b">
                <block spec="variable %s as a boolean">
                  <block varName="swapped" varScope="global"/>
                </block>
                <stack>
                  <block spec="comment: %s">
                    <blockarg val="perform the swap"/>
                  </block>
                  <block spec="set %s = %n">
                    <block varName="numbers" varScope="global"/>
                    <block spec="list %s replaced %n to %n with list %s">
                      <block varName="numbers" varScope="global"/>
                      <block varName="saveindex" varScope="global"/>
                      <block varName="saveindex" varScope="global"/>
                      <block spec="%s as a %m">
                        <block varName="oldlowest" varScope="global"/>
                        <blockarg val="list"/>
                      </block>
                    </block>
                  </block>
                  <block spec="set %s = %n">
                    <block varName="numbers" varScope="global"/>
                    <block spec="list %s replaced %n to %n with list %s">
                      <block varName="numbers" varScope="global"/>
                      <block varName="i" varScope="global"/>
                      <block varName="i" varScope="global"/>
                      <block spec="%s as a %m">
                        <block varName="lowest" varScope="global"/>
                        <blockarg val="list"/>
                      </block>
                    </block>
                  </block>
                  <block spec="comment: %s">
                    <blockarg val="and go again"/>
                  </block>
                </stack>
              </block>
              <block spec="%s ++">
                <block varName="i" varScope="global"/>
              </block>
            </stack>
          </block>
          <block spec="comment: %s">
            <blockarg val="show the sorted list"/>
          </block>
          <block spec=" %S msg: %s on channel %n">
            <blockarg val="Say"/>
            <block spec="dump list %s to string">
              <block varName="numbers" varScope="global"/>
            </block>
            <blockarg val="0"/>
          </block>
        </stack>
      </stacks>
    </state>
  </states>
</program>