'*************************************************************

' DeluxeLiga -  Bundesliga-Verwaltung 
'

'*************************************************************
CLEAR ,40000&
  LIBRARY "graphics.library"
1 '  INPUT "Bitte Ligenname eingeben";a$ 
2 ' CHDIR a$
' fuer 3. Remark "List drm" eingeben
' fuer 4. Remark "List vrm" eingeben

' Die folgenden Routinen sorgen dafuer, dass die Ausgabe auf
' dem Schirm in 64 Zeichen erfolgt 
DECLARE FUNCTION AskSoftStyle& LIBRARY
DECLARE FUNCTION OpenFont& LIBRARY
DECLARE FUNCTION Execute& LIBRARY
  
'Programmvorbereitungen, Screen, Window, Zeichengroesse 
 printer$="par:" '  Ausgabekanal fuer Drucker
 ueber$=CHR$(14)+"   Garry's Tabellenservice Bundeliga"
 ' ^^^ Ueberschrift ueber Tabellenausdruck 
 SCREEN 2,640,200,4,2:DIM mn$(0),z(10) 
 WINDOW 3,"",(0,1)-(630,185),0,2
  Font "topaz.font",9,0,0
  enable%=AskSoftStyle&(WINDOW(8))
  SetStyle 8

' Farben setzen 
 FOR t=0 TO 15
    READ a,b,c
    PALETTE t,a/15,b/15,c/15
 NEXT
 DATA ,,,15,15,15,15,15,,15,,,,15,,,,15,15,,15,8,8,8,,,15
 DATA 15,15,15,15,15,,10,5,3,,15,,,,15,15,,15,,15,15

'Dummy-Arrays 
 DIM ana(1),anb(1),anta(1),antb(1),spiblbl(1) 
 
' Vereine einlesen 
 OPEN "vereine" FOR INPUT AS #1:ERASE mn$:DIM bth(1),btg(1) 
 INPUT #1,aver:DIM mn$(aver),ph(aver),pg(aver),pht(aver),pgt(aver),cnt(aver),ste(aver),th(aver),tg(aver)
 FOR t=1 TO aver
    INPUT #1,mn$(t)
 NEXT:CLOSE #1:k=aver

 DIM spi(k),gh(k),uh(k),vh(k),ga(k),ua(k),va(k),t$(13,aver)
 DIM the(k),thg(k),tae(k),tag(k)
 g1=aver*2-2:DIM h(g1,aver),g(g1,aver),ht(g1,aver),gt(g1,aver)

' Spieltage einlesen
 OPEN "spiele" FOR INPUT AS #1
 FOR t=1 TO g1:LOCATE 1,1:PRINT t"."
    FOR g=1 TO aver/2
       INPUT #1,h(t,g)
       INPUT #1,g(t,g)
       INPUT #1,ht(t,g)
       INPUT #1,gt(t,g)
    NEXT
 NEXT
 CLOSE#1 

' Menue-Leiste einstellen
gar:
 g=1:RESTORE menud
uuu:
 READ a
 IF a=-1 GOTO w2
 FOR t=0 TO a
    READ a$
    MENU g,t,1,a$
 NEXT
 g=g+1
 GOTO uuu
menud:
 DATA 3,DLiga,Info ->I,Neu  ->N,Quit ->Q
 DATA 3,Spieltag,eingeben  ->G,erweitern ->E,RR erz.   ->R
 DATA 4,Spieltag,anzeigen  ->A,drucken   ->P,Spiele MS ->M,Vorauss.  ->V
 DATA 2,Tabelle,anzeigen ->T,drucken  ->D 
 DATA 1,Autor,Info ->!
 DATA -1

w2:
 CLS
 minus$="-------------------------------------------------------------------------------
 DATA 13,i,n,q,g,e,r,a,p,m,v,t,d,!
 RESTORE w2
 READ tastan:DIM tast$(tastan):FOR t=1 TO tastan:READ tast$(t):NEXT
 ON MENU GOSUB mede 

' Menue- bzw. Tastenabfrage
o:
 CLS
dauernd:
 MENU ON 
 a$=INKEY$:IF a$="" GOTO dauernd
 nu=0
 FOR t=1 TO tastan:IF a$=tast$(t) THEN nu=t
 NEXT
 IF nu=0 THEN dauernd
 IF nu<4 THEN GOSUB DLiga:GOTO o
 IF nu<7 THEN nu=nu-3:GOSUB spieltag:GOTO o
 IF nu<11 THEN nu=nu-6:GOSUB spieltaga:GOTO o
 IF nu<13 THEN nu=nu-10:GOSUB tabe:GOTO o
 GOSUB autor
 GOTO o

mede:
 nu=MENU(1):MENU OFF
 ON MENU(0) GOTO DLiga,spieltag,spieltaga,tabe,autor
 
DLiga:
 ON nu GOTO info,mansch,quit
spieltag:
 ON nu GOTO sein,serw,rrerz
spieltaga:
 ON nu GOTO sanz,sanp,mannschaft,spita
tabe:
 ON nu GOTO anzei,druck

info:
 WINDOW 4,"DLiga - (C) 1986 by Freeware  ",(20,20)-(620,185),0,2
 CLS
 PRINT "DLiga                             "
 PRINT 
 PRINT "Info    I    Diese Seite
 PRINT "Neu     N    Neue Liga erstellen
 PRINT "Quit    Q    Programm beenden & Daten sichern
 PRINT "eingeb. G    Paarungen & Ergebnisse eines SpT
 PRINT "erweit. E    Ergebnisse eines SpT vervollst.
 PRINT "RR erz. R    Rueckrunde erzeugen
 PRINT "anzeig. A    Spieltag anzeigen
 PRINT "drucken P    Spieltag ausdrucken
 PRINT "Spiele  M    alle Spiele einer MS anz.
 PRINT "Vorauss.V    einen Spieltag vorhersehen 
 PRINT "anzeig. T    Tabelle anzeigen
 PRINT "drucken D    Tabelle ausdrucken
 PRINT "Autor   !    guck selber nach!!!
 PRINT:PRINT "Taste" 
iffff:
 IF INKEY$="" GOTO iffff 
 WINDOW CLOSE 4
 WINDOW OUTPUT 3
 RETURN
 
 END
 
spita:
 CLS:printen=0:INPUT "Welcher Spieltag";na:na=na-1:INPUT "Ausgabe auf Drucker ";a$:IF a$="j" THEN printen =1
 PRINT :PRINT "Bitte warten !!!":OPEN printer$ FOR OUTPUT AS #1:CALL printe("Vorhersage fuer den"+STR$(na+1)+". Spieltag",printen)
 FOR t=1 TO aver/2
    spita=na+1:GOSUB spieinl
    ERASE spiblbl:DIM spiblbl(g1,2,3):gp=0:vp=0:up=0
    m=ph(t):r=1:GOSUB findgames:cnt1=cnt
    spita=na+1:GOSUB spieinl
    m=pg(t):r=2:GOSUB findgames:cnt2=cnt
    FOR m=1 TO cnt1
       FOR g=1 TO cnt2
          IF spiblbl(m,1,1)=spiblbl(g,2,1) THEN GOSUB ausweg
       NEXT
    NEXT
    spita=na+1:GOSUB spieinl              
    CALL strform(mn$(ph(t)),20,y2$)
    CALL strform(mn$(pg(t)),20,y3$)
    CALL numform(STR$(gp),2,y4$)
    CALL numform(STR$(up),2,y5$)
    CALL numform(STR$(vp),2,y6$)
    z$=y2$+":"+y3$+"   :"+y4$+":"+y5$+":"+y6$
    CALL printe(z$,printen)
 NEXT:CLOSE 1
 GOTO tasten
 
ausweg:
 s1=spiblbl(m,1,2)
 s2=spiblbl(m,1,3)
 s3=spiblbl(g,2,2)
 s4=spiblbl(g,2,3)
 b1=s1-s2:b2=s3-s4
 gp=gp-(b1>b2)
 up=up-(b1=b2)
 vp=vp-(b1<b2)
 RETURN
    

findgames:
 cnt=1
 FOR i=1 TO na
    spita=i:GOSUB spieinl
    FOR n=1 TO aver/2       
       IF (ph(n)=m AND pht(n)<>99) THEN spiblbl(cnt,r,1)=pg(n):spiblbl(cnt,r,2)=pht(n):spiblbl(cnt,r,3)=pgt(n):cnt=cnt+1
       IF (pg(n)=m AND pht(n)<>99) THEN spiblbl(cnt,r,1)=ph(n):spiblbl(cnt,r,2)=pgt(n):spiblbl(cnt,r,3)=pht(n):cnt=cnt+1
    NEXT 
 NEXT
 RETURN
 
mannschaft:
 COLOR 5,3:CLS
 FOR t=1 TO aver-1 STEP 2:COLOR 5,7+INT(t/2):PRINT "  ";:COLOR 5,3
    PRINT mn$(t)TAB(30);:COLOR 5,7+INT(t/2):PRINT "  ";:COLOR 5,3:PRINT mn$(t+1):cnt(t)=0:cnt(t+1)=0
 NEXT 
 PRINT :PRINT "Bitte Mannschaft auswaehlen"
r3:
 GOSUB getonc
 IF z<7 GOTO r3
 n=2*(z-7)+1-(x>100):COLOR 1,0:CLS:INPUT "Ausgabe auf Drucker ";aus$:IF aus$="j" THEN prin=1 ELSE prin=0
 LOCATE 5,5:COLOR 5,3:PRINT mn$(n)
 COLOR 5:PRINT :PRINT "Bitte warten sie einen Augenblick.
 ERASE ana,anb,anta,antb:DIM ana(g1),anb(g1),anta(g1),antb(g1)
 FOR t=1 TO g1
    FOR g=1 TO aver/2
       IF (h(t,g)=n OR g(t,g)=n) AND ht(t,g)<>99 THEN ana(t)=h(t,g):anb(t)=g(t,g):anta(t)=ht(t,g):antb(t)=gt(t,g)    
    NEXT
 NEXT:OPEN printer$ FOR OUTPUT AS #1
 CLS:CALL printe ("Die Mannschaft "+mn$(n)+" hat bisher folgende Spiele gehabt:",prin)
 CALL printe ("",prin):cnt=0 
 FOR t=1 TO g1
    IF ana(t)=0 THEN GOTO weitermache
    CALL numform(STR$(t),2,y1$)
    CALL strform(mn$(ana(t)),20,y2$)
    CALL strform(mn$(anb(t)),20,y3$)
    CALL numform(STR$(anta(t)),2,y4$)
    CALL numform(STR$(antb(t)),2,y5$)
    CALL printe (y1$+".    "+y2$+":"+y3$+"   "+y4$+":"+y5$,prin)
    cnt=cnt+1
    IF cnt=15 THEN GOSUB tastewart:cnt=0
weitermache:
 NEXT:CLOSE 1
 GOSUB tastewart:COLOR 1,0:CLS:RETURN
 
SUB printe(printe$,prin) STATIC
PRINT printe$
IF prin THEN PRINT#1,printe$
END SUB

tastewart:
 PRINT :PRINT "Taste"
 WHILE INKEY$=""
 WEND:CLS
 RETURN
    
autor:
 COLOR 1,0:CLS
 PRINT :PRINT "**************************************************************"
 PRINT " Deluxe Bundesliga - Verwaltung             "
 PRINT "**************************************************************"
 PRINT " (3., erweiterte Version)"
 PRINT "Sie haben mit DLiga ein weiteres hervoragendes Programm der  
 PRINT "KKK-SOFT Programming Crew vor sich respective in Ihrem
 PRINT "Amiga. Trotz guter Kontrolle und unserem besten Programmierer
 PRINT "kann es trotzdem vorkommen, dass unser Programm einen Fehler
 PRINT "enthaelt, der in unseren monatelangen Testlaeufen nicht auf- 
 PRINT "trat. In einem solchen Fall bitten wir sie, uns diesen Fehler
 PRINT "zu melden. Sie erhalten dann in kurzer Zeit eine verbesserte
 PRINT "Version von DLiga. 
 PRINT 
 PRINT "
 GOSUB tasten:CLS
 GOTO o
quit:
 LOCATE 10,10
 PRINT "Bitte warten - ich sichere Daten"
 OPEN "spiele" FOR OUTPUT AS #1
 FOR t=1 TO g1
    FOR g=1 TO aver/2
       PRINT#1,h(t,g)
       PRINT#1,g(t,g)
       PRINT#1,ht(t,g)
       PRINT#1,gt(t,g)
    NEXT
 NEXT
 CLOSE #1   
 MENU RESET
 SCREEN CLOSE 2
 CLOSE #2
drm:
 'CHDIR "/"
 END
 
mansch:
 COLOR 5,3
 CLS
 INPUT "Wieviele Vereine";n:ERASE mn$:DIM mn$(n):aver=n
 FOR t=1 TO n
    COLOR 1,3
    PRINT "Name des "t".ten Vereins
    COLOR 2,3
    INPUT mn$(t)
 NEXT
 COLOR 5,2
 CLS
 FOR t=1 TO n
    PRINT mn$(t)
 NEXT:COLOR 1,3
 PRINT :INPUT"Alles in Ordnung";a$:IF a$="n" GOTO mansch
 OPEN "Vereine" FOR OUTPUT AS #1
 PRINT #1,n
 FOR t=1 TO n
    PRINT #1,mn$(t)
 NEXT
 CLOSE #1
 OPEN "spiele" FOR OUTPUT AS #1
 FOR t=1 TO (aver-1)*2
    FOR g=1 TO aver/2
       PRINT#1,0,0,0,0
    NEXT
 NEXT
 CLOSE #1 
vrm:
 'CHDIR "/"
 RUN
 
serw:
 CLS
 INPUT"Welcher Spieltag";spita:IF spita>(aver-1)*2 GOTO serw 
 GOSUB spieinl:GOSUB tore
 FOR t=1 TO aver/2
    IF pht(t)<>99 GOTO niem
    a$=mn$(ph(t)):b$=mn$(pg(t)):LOCATE 1,4:PRINT a$":"b$SPACE$(20)
    GOSUB torew
    pht(t)=t1:pgt(t)=t2
niem:
 NEXT
 GOSUB spispei:GOTO nomaanz


sein:
 COLOR 5,3:CLS
 FOR t=1 TO aver-1 STEP 2:COLOR 5,7+INT(t/2):PRINT "  ";:COLOR 5,3
    PRINT mn$(t)TAB(30);:COLOR 5,7+INT(t/2):PRINT "  ";:COLOR 5,3:PRINT mn$(t+1):cnt(t)=0:cnt(t+1)=0
 NEXT 
rep1:
 INPUT "Welcher Spieltag";spita:IF spita>(aver-1)*2 GOTO rep1
 FOR tt=1 TO aver/2
r:
    GOSUB getonc
    IF z<7 GOTO r
    n=2*(z-7)+1-(x>100)
    ph(tt)=n:BEEP
r1:
    GOSUB getonc
    IF z<7 GOTO r1
    n1=2*(z-7)+1-(x>100):IF n=n1 GOTO r1
    pg(tt)=n1:BEEP    
    COLOR 5,3:n=n-1:n1=n1-1
    LOCATE INT(n/2)+1,(n-INT(n/2)*2)*28+1:PRINT SPACE$(29)
    LOCATE INT(n1/2)+1,(n1-INT(n1/2)*2)*28+1:PRINT SPACE$(29) 
eingebw: 
 NEXT  
 COLOR 0,1:CLS
neing:
 GOSUB tore
 FOR t=1 TO aver/2
    a$=mn$(ph(t)):b$=mn$(pg(t))
    LOCATE 2,3:PRINT "          ":LOCATE 1,4:PRINT a$":"b$SPACE$(20)
    GOSUB torew
    pht(t)=t1:pgt(t)=t2
 NEXT
 CLS:PRINT spita
 FOR t=1 TO aver/2
    PRINT mn$(ph(t))TAB(20)":"TAB(23)mn$(pg(t))TAB(45);:IF pht(t)<>99 THEN PRINT pht(t)TAB(48)": "pgt(t):GOTO weit1
    PRINT "versch.
weit1:
 NEXT
 INPUT"Alles in Ordnung";a$:IF a$="n" THEN neing
 COLOR 1,0:CLS
 GOSUB spispei:GOTO nomaanz
 
tore:
 COLOR 1,0
 CLS
 FOR y=0 TO 2:y1=2-y
    FOR x=1 TO 3
       LOCATE 3+y1*3,10+4*x
       COLOR 0,3+x+3*y 
       PRINT "   "
       LOCATE 4+y1*3,10+4*x
       COLOR 1,0
       PRINT x+3*y 
    NEXT
 NEXT
 LOCATE 12,22:COLOR 0,13:PRINT "   "
 LOCATE 13,14:COLOR 1,0:PRINT "   0    +10"
 LOCATE 12,14:COLOR 0,3:PRINT "       "
 LOCATE 15,14:COLOR 0,14:PRINT "   "
 LOCATE 15,18:COLOR 0,15:PRINT "       "
 LOCATE 16,14:COLOR 1,0:PRINT "ver   O K"  
 LINE(122,14)-(246,150),1,b
 sum=0:PALETTE 0,0,0,0:RETURN
torew:
LOCATE 2,3:PRINT SPACE$(10):sum=0
n1i:
 GOSUB getoncat
 z=z-3:IF z<0 THEN GOTO ro1
 IF z<=9 THEN sum=z:GOTO ro1
 IF z=10 THEN sum=sum+10:GOTO ro1
 IF z=12 THEN t1=sum:sum=0:GOTO wet1
 IF z=11 THEN t1=99:t2=99:GOTO wet2
 GOTO l1i
ro1:
 LOCATE 2,4:PRINT sum": ":GOTO n1i
wet1:
 GOSUB getoncat
 z=z-3:IF z<0 THEN GOTO ro2
 IF z<=9 THEN sum=z:GOTO ro2
 IF z=10 THEN sum=sum+10:GOTO ro2
 IF z=12 THEN t2=sum:GOTO wet2
 IF z=11 THEN t1=99:t2=99:GOTO wet2
 GOTO wet1
ro2: 
 LOCATE 2,8:PRINT sum" ":GOTO wet1
wet2:
 RETURN 
  
sanz:
 COLOR 1,0:CLS
rep2:
 INPUT"Spieltag";spita:IF spita>(aver-1)*2 GOTO rep2
nomaanz:
 GOSUB spieinl
 CLS:PRINT spita
 FOR t=1 TO aver/2
    PRINT mn$(ph(t))TAB(20)":"TAB(23)mn$(pg(t));TAB(45);:IF pht(t)<>99 THEN PRINT pht(t)TAB(49)": "pgt(t):GOTO weit2
    PRINT "versch.
weit2:
 NEXT
tasten: 
 PRINT :PRINT "Taste"
 WHILE INKEY$=""
 WEND
 CLS
 RETURN

sanp:
 COLOR 1,0:CLS
rep3:
 INPUT"Spieltag";spita:IF spita>(aver-1)*2 GOTO rep
 GOSUB spieinl:OPEN printer$ FOR OUTPUT AS #1
 CLS
 PRINT#1,minus$:PRINT #1,CHR$(14)"  Spieltag:"spita
 PRINT #1,minus$
 FOR t=1 TO aver/2
    CALL strform(mn$(ph(t)),20,g1$)
    CALL strform(mn$(pg(t)),20,g2$)
    g1$=g1$+":"+g2$+SPACE$(5)
    IF pht(t)=99 THEN g1$=g1$+"versch.":GOTO weitsp
    CALL scoform(INT(pht(t)),INT(pgt(t)),g2$)
    g1$=g1$+g2$
weitsp:
    PRINT #1,g1$
 NEXT
 PRINT #1,minus$
 CLOSE 1
 CLS:RETURN  

rrerz:
 LOCATE 10,10
 PRINT "Erzeuge Rueckrunde!"
 FOR g=1 TO g1/2:spita=g+g1/2
 GOSUB spieinl
 IF ph(1)<>0 GOTO nanana
 spita=g:GOSUB spieinl 
 FOR t=1 TO aver/2
    SWAP pg(t),ph(t)
    pgt(t)=99
    pht(t)=99
 NEXT:spita=g+g1/2
 GOSUB spispei
nanana:
 NEXT:CLS
RETURN

    
spispei:
 FOR t=1 TO aver/2
    g(spita,t)=pg(t)
    h(spita,t)=ph(t)
    gt(spita,t)=pgt(t)
    ht(spita,t)=pht(t)
 NEXT       
 RETURN

spieinl:
 IF t<1 THEN t=1
 tghyu=t
 FOR t=1 TO aver/2
    ph(t)=h(spita,t)
    pg(t)=g(spita,t)
    pht(t)=ht(spita,t)
    pgt(t)=gt(spita,t)
 NEXT:t=tghyu       
 RETURN

SUB ausw(h$) STATIC
 SHARED z(),c:fl=0:i=LEN(h$)+1:c=0
 FOR t=1 TO i+1 
    u$=MID$(h$,t,1)
    IF u$>="0" AND u$<="9" THEN fl=fl+1:GOTO we1
    IF fl>0 THEN c=c+1:z(c)=VAL(MID$(h$,t-fl,fl)):fl=0
we1:
 NEXT
 END SUB

anzei:
 CLS:ERASE bth,btg,th,tg:DIM bth(aver),btg(aver),th(aver),tg(aver):na=0:FOR t=1 TO aver:ste(t)=t:NEXT
rep4: 
 INPUT"Bis zu welchem Spieltag";na:IF na=0 THEN na=g1
 IF na>(aver-1)*2 GOTO rep4
 GOSUB zaehlen
 GOSUB ssort
 FOR g=1 TO aver
    PRINT g;TAB(6)mn$(ste(g))TAB(25)bth(g)":"btg(g)TAB(38)th(g)":"tg(g)TAB(50)th(g)-tg(g)
 NEXT 
 GOTO tasten

druck:
 CLS:ERASE bth,btg,th,tg:DIM bth(aver),btg(aver),th(aver),tg(aver):na=0:FOR t=1 TO aver:ste(t)=t:NEXT
rep5:
 INPUT"Bis zu welchem Spieltag";na:IF na=0 THEN na=g1
 :IF na>(aver-1)*2 GOTO rep5
 GOSUB zaehlen
 GOSUB ssort
 FOR g%=1 TO aver
    CALL numform(STR$(g%),2,t$):t$(1,g%)=t$+". "
    CALL strform(mn$(ste(g%)),18,t$(2,g%))
    CALL scoform(INT(the(g%)),INT(thg(g%)),t$(3,g%))
    CALL scoform(INT(tae(g%)),INT(tag(g%)),t$(4,g%))
    CALL scoform(INT(th(g%)),INT(tg(g%)),t$(5,g%))
    CALL numform(STR$(th(g%)-tg(g%)),3,t$(6,g%))
    CALL numform(STR$(gh(g%)),2,t$(7,g%))
    CALL numform(STR$(uh(g%)),2,t$(8,g%))
    CALL numform(STR$(vh(g%)),2,t$(9,g%))
    CALL numform(STR$(ga(g%)),2,t$(10,g%))
    CALL numform(STR$(ua(g%)),2,t$(11,g%))
    CALL numform(STR$(va(g%)),2,t$(12,g%))
    CALL scoform(INT(bth(g%)),INT(btg(g%)),t$(13,g%))
 NEXT
 OPEN printer$ FOR OUTPUT AS #4
 PRINT #4,minus$
 PRINT #4,ueber$
 PRINT #4,minus$
 PRINT #4,"                            Tore              Heim      Ausw.    
 PRINT #4," #  Verein            Heim  Ausw. Ges.  Dif  g  u  v   g  u  v   Punkte
 PRINT #4,minus$
 FOR t=1 TO aver
    PRINT #4,t$(1,t)t$(2,t)t$(3,t)" "t$(4,t)" "t$(5,t)" "t$(6,t)" "t$(7,t)" "t$(8,t)" "t$(9,t)"  "t$(10,t)" "t$(11,t)" "t$(12,t)"   "t$(13,t)
 NEXT
 PRINT #4,minus$
 CLOSE #4
 GOTO tasten
 
SUB numform (x$,l%,s$) STATIC
 s$=RIGHT$("    "+x$,l%)
 END SUB
 
SUB scoform(x,y,s$) STATIC
 CALL numform(STR$(x),2,r$)
 CALL numform(STR$(y),2,f$)
 s$=r$+":"+f$
 END SUB
 
SUB strform(a$,l%,s$) STATIC
 s$=LEFT$(a$+"..............................",l%)
 END SUB
 

ssort:
 FOR x=1 TO aver-1:LOCATE 2,2:PRINT x
    FOR y=x TO aver
       IF bth(y)>bth(x) THEN GOSUB swaps
       IF bth(y)=bth(x) AND btg(y)<btg(x) THEN GOSUB swaps
       IF bth(y)=bth(x) AND btg(y)=btg(x) AND (th(y)-tg(y))>(th(x)-tg(x)) THEN GOSUB swaps
       IF bth(y)=bth(x) AND btg(y)=btg(x) AND (th(y)-tg(y))=(th(x)-tg(x)) AND th(y)>th(x) THEN GOSUB swaps    
    NEXT
 NEXT
 RETURN
  
swaps:
 SWAP ste(x),ste(y)
 SWAP bth(x),bth(y)
 SWAP btg(x),btg(y)
 SWAP th(x),th(y)
 SWAP tg(x),tg(y)
 SWAP gh(x),gh(y)
 SWAP uh(x),uh(y)
 SWAP vh(x),vh(y)
 SWAP ga(x),ga(y)
 SWAP ua(x),ua(y)
 SWAP va(x),va(y)
 SWAP tae(x),tae(y)
 SWAP the(x),the(y)
 SWAP tag(x),tag(y)
 SWAP thg(x),thg(y)
 RETURN
   
zaehlen:
 FOR x=1 TO aver:gh(x)=0:uh(x)=0:vh(x)=0:ga(x)=0:ua(x)=0:va(x)=0:the(x)=0:tae(x)=0:thg(x)=0:tag(x)=0:NEXT
 FOR spita=1 TO na
 GOSUB spieinl
    FOR g=1 TO aver/2
       IF pht(g)=99 GOTO nexten1
       a=ph(g):th(a)=th(a)+pht(g):tg(a)=tg(a)+pgt(g)
       the(a)=the(a)+pht(g):thg(a)=thg(a)+pgt(g)
       spi(a)=spi(a)+1
       bth(a)=bth(a)-2*(pht(g)>pgt(g))-(pht(g)=pgt(g))
       btg(a)=btg(a)-2*(pht(g)<pgt(g))-(pht(g)=pgt(g))
       gh(a)=gh(a)-(pht(g)>pgt(g))
       uh(a)=uh(a)-(pht(g)=pgt(g))
       vh(a)=vh(a)-(pht(g)<pgt(g))
       a=pg(g):th(a)=th(a)+pgt(g):tg(a)=tg(a)+pht(g)
       tae(a)=tae(a)+pgt(g):tag(a)=tag(a)+pht(g)
       spi(a)=spi(a)+1
       bth(a)=bth(a)-2*(pht(g)<pgt(g))-(pht(g)=pgt(g))
       btg(a)=btg(a)-2*(pht(g)>pgt(g))-(pht(g)=pgt(g))
       ga(a)=ga(a)-(pht(g)<pgt(g))
       ua(a)=ua(a)-(pht(g)=pgt(g))
       va(a)=va(a)-(pht(g)>pgt(g))
nexten1:
    NEXT
 NEXT
 RETURN

getonc:
 WHILE MOUSE(0)<>0
 WEND
 WHILE MOUSE(0)<>1
 WEND
 x=MOUSE(3)
 y=MOUSE(4)
 z=POINT(x,y)
 RETURN
       
getoncat:
 q$=""
 WHILE MOUSE(0)<>0
 WEND
 WHILE (MOUSE(0)<>1)AND(q$="")
 q$=INKEY$
 WEND
 IF VAL(q$)<>0 THEN z=VAL(q$)+3:RETURN
 IF q$="0" THEN z=3:RETURN
 IF q$="." THEN z=13:RETURN
 IF q$="-" THEN z=14:RETURN
 IF q$=CHR$(13) THEN z=15:RETURN
 x=MOUSE(3)
 y=MOUSE(4)
 z=POINT(x,y)
 RETURN

SUB Font(fontName$, height%, style%, prefs%) STATIC
  SHARED pFont&
  IF pFont&<>0 THEN CALL CloseFont(pFont&)
  fontName0$=fontName$+CHR$(0)
  textAttr&(0)=SADD(fontName0$)
  textAttr&(1)=height%*65536& + style%*256 + prefs%
  pFont&=OpenFont&(VARPTR(textAttr&(0)))
  IF pFont& <> 0 THEN SetFont WINDOW(8),pFont&
END SUB

SUB SetStyle(mask%) STATIC
  SHARED enable%
  SetSoftStyle WINDOW(8),mask%,enable%
  END SUB
      
