Def KBToANS(1) INT(Round((1024/365)*@&(1),0))
Def Wurzel2(1) Sqrt(@&(1))
Def Spalte_from_ID(1) (INT(@&(1)/Wurzel2(anzahl_teile&))+IF((@&(1) mod Wurzel2(anzahl_teile&))=0,0,1))
Def Zeile_from_ID(1) INT(@&(1)-((Spalte_from_ID(@&(1))-1)*Wurzel2(anzahl_teile&)))
Def DateiName(1) SubStr$(@$(1),-1,"\\")
Def DateiPfad(1) Translate$(@$(1),("\\" + DateiName(@$(1))),"")
Var Programm$=Par$(If((Upper$(SubStr$(Par$(0), -1, "\\"))="PROFAN.EXE") or (Upper$(SubStr$(Par$(0), -1, "\\"))="XPROFAN.EXE"),1,0))
Var txt$=DateiPfad(Programm$)+"\Options.dat"
Declare anzahl_teile&, start_kombination$, kombination$, empty&, pos&[], err&, random&, liste&, i&

Windowstyle 24
Window (%MaxX-936)/2,(((%MaxY-((%MaxY/7)*6))/2)-18) - 936,(%MaxY/7)*6
WindowTitle "Mixxer"
Var Groesse&=Val(Input$("Dateigröße (in KB) auf die Datei getrimt wird", "Dateigröße (in KB)", "255"))
Case Groesse&=0 : end
Assign #1, txt$
ReWrite #1
Close #1
whileloop 5
  anzahl_teile&=(&loop+2)^2
  Clear pos&[]
  whileloop anzahl_teile&
    pos&[&loop]=&loop 'pos&[Wahre-Positions-ID]=Aktuelle-Positions-ID
  EndWhile
  start_kombination$=Kombination()
  Destroywindow(liste&)
  liste&=Create("Listbox",%hwnd, 0, 0,0,width(%hwnd),height(%hwnd))'Create("List",0)
  empty&=1
  i&=0
  Randomize
  While GetCount(liste&)<KBToANS(Groesse&) 'Datei auf ca. x KB
    i&=i&+1
    random&=Rnd(2)+1 '-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-Verschieben per Zufall
    If random&=1 'Horizontal
      If Spalte_from_ID(empty&)=1 'Rechts
        Tausche(empty&+Wurzel2(anzahl_teile&))
      ElseIf Spalte_from_ID(empty&)=Wurzel2(anzahl_teile&) 'Links
        Tausche(empty&-Wurzel2(anzahl_teile&))
      Else 'Links oder Rechts
        random&=Rnd(2)+1
        If random&=1 'Links
          Tausche(empty&-Wurzel2(anzahl_teile&))
        ElseIf random&=2 'rechts
          Tausche(empty&+Wurzel2(anzahl_teile&))
        EndIf
      EndIf
    ElseIf random&=2 'Vertikal
      If Zeile_from_ID(empty&)=1 'Unten
        Tausche(empty&+1)
      ElseIf Zeile_from_ID(empty&)=Wurzel2(anzahl_teile&) 'Oben
        Tausche(empty&-1)
      Else 'Oben oder Unten
        random&=Rnd(2)+1
        If random&=1 'Oben
          Tausche(empty&-1)
        ElseIf random&=2 'Unten
          Tausche(empty&+1)
        EndIf
      Endif
    EndIf
    If i&>100
      kombination$=Kombination() '-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-Eintragen in Text-Datei
      If start_kombination$<>kombination$
        Clear err&
        whileloop GetCount(liste&)
          If GetString$(liste&,&loop-1)=kombination$
            err&=1
            break
          Endif
        Endwhile
        If err&<>1
          Addstring(liste&,kombination$) 'noch nicht eingetragene Kombinationen
          Sendmessage(liste&,$0186,Getcount(liste&)-1,0)
          Sendmessage(liste&,$0186,-1,0)
          Assign #1,txt$
          Append #1
          Print #1,Str$(INT(Wurzel2(anzahl_teile&)-2))+"="+kombination$
          Close #1
          Settext %hwnd,"Stufe: "+Str$(INT(Wurzel2(anzahl_teile&)-2))+" von 5  -  Einträge: "+Str$(GetCount(liste&))+" von "+Str$(KBToANS(Groesse&))+"  -  "+Str$(INT(Round(FileSize(txt$)/1024,0)))+" KB von "+Str$(Groesse&)+"KB"
        EndIf
      EndIf
    Endif
  EndWhile
EndWhile

Proc Tausche
  Parameters id& 'empty& und id& tauschen
  Declare x&
  whileloop anzahl_teile& 'Wahre-Position von id&
    If pos&[&loop]=id&
      x&=&loop
      break
    EndIf
  EndWhile
  pos&[x&]=empty&
  empty&=id&
  pos&[1]=empty& 'Tauschen
EndProc
Proc Kombination
  Declare text$
  whileloop anzahl_teile&
    text$=text$+Str$(pos&[&loop])+"|"
  Endwhile
  Return Left$(text$,Len(text$)-1)
EndProc
