  OPTION SCALE, 96
  TITLE By Mac
  DIALOG CREATE, "Find VDS Variables",-1,0,400,240
  DIALOG ADD,BUTTON,Load,5,5,120,20,"Load DSC File"
  DIALOG ADD,BUTTON,Copy,5,135,120,20,"Copy to Clipboard"
  DIALOG ADD,LIST,L1,30,5,390,180
  DIALOG ADD,STATUS,Stat, "Ready..."
  DIALOG SHOW

  rem -- Put horizontal slider on list --
  %z = @sendmsg(@winexists(~L1),$0194,2000,0)

  LIST CREATE, 1
  LIST CREATE, 2, SORTED

  %a = "0123456789_abcdefghijklmnopqrstuvwxyz"
  %b = "123456789abcdefghijklmnopqrstuvwxyz"

:EVLOOP
  WAIT EVENT
  goto @event()

:CopyBUTTON
  if @greater(@count(L1), 0)
    LIST COPY, L1
    DIALOG SET, Stat, "Vars copied from "@name(%f).@ext(%f)
  end 
  goto EVLOOP

:LoadBUTTON
  %f = @filedlg()
  if @file(%f)
    rem -- User defined vars --
    DIALOG SET, Stat, Please Wait...
    LIST CLEAR, 1
    LIST CLEAR, 2
    LIST CLEAR, L1
    LIST LOADFILE, 1, %f
    %x = 0
    REPEAT 
      %i = @item(1, %x)
      if @greater(@pos("%%", %i), 0)
        %p = @sum(@pos("%%", %i), 2)
        %v = "%%"
        REPEAT 
          :Found 
          %s = @substr(%i, %p)
          if @greater(@pos(%s, %a), 0)
            %v = %v%s
          else 
            LIST ADD, 2, %v
            %i = @strdel(%i, 1, %p)
            if @greater(@pos("%%", %i), 0)
              %p = @sum(@pos("%%", %i), 2)
              %v = "%%"
              goto Found
            else 
              %p = @succ(@len(%i))
            end 
          end 
          %p = @succ(%p)
        UNTIL @greater(%p, @succ(@len(%i))) 
      end 
      %x = @succ(%x)
      DIALOG SET, Stat, "Searching for user defined vars "@count(2)
    UNTIL @equal(%x, @count(1))
    %u = @count(2)
    rem -- Standard vars --
    %x = 0
    REPEAT 
      %i = @item(1, %x)
      if @greater(@pos("%", %i), 0)
        %p = @pos("%", %i)
        REPEAT 
          %r = @substr(%i, @pred(%p))
          %s = @substr(%i, %p)
          %v = @substr(%i, @succ(%p))
          if @equal(%s, "%")
            if @not(@equal(%r, "%"))
              if @not(@equal(%v, "%"))
                if @greater(@pos(%v, %b), 0)
                  LIST ADD, 2, %s%v
                end 
              end 
            end 
          end        
          %p = @succ(%p)
        UNTIL @greater(%p, @len(%i)) 
      end 
      %x = @succ(%x)
      DIALOG SET, Stat, "Searching for standard vars "@diff(@count(2), %u)
    UNTIL @equal(%x, @count(1))
    %s = @diff(@count(2), %u)
    if @greater(@count(2), 0)
      LIST ASSIGN, L1, 2
      LIST SEEK, L1, 0
      LIST INSERT, L1, %u" user defined variables  (128 limit for VDS 3.51)"
      LIST INSERT, L1, %s" standard variables  (35 limit for VDS 3.51)"
      LIST INSERT, L1, ""
    else 
      LIST ADD, L1, "No variables found"
    end 
    DIALOG SET, Stat, %f
  end 
  goto EVLOOP

:CLOSE
  EXIT 
