10 '    *** HIGH-SCORE-Tabelle ***
20 ' zum Verwalten  Ihrer High-Scores
30 '
40 '       written in June '86
50 '     by Jan-Mirko Maczewski
60 '
70 'DDI-1,CPC 664/6128 User muessen         statt "|CAS" "|TAPE" eingeben !
80 '464 User ohne Disk lassen "|CAS" und    "|DISC" einfach weg !
90 '
100 |CAS:OPENOUT"%":MEMORY HIMEM-1:CLOSEOUT:|DISC:INK 0,0:BORDER 0
110 DEFINT i,x,y,c,n:INK 1,26:INK 2,24
120 'Fuer Gruenmonitor :                     CALL &BC02:INK 3,15,17
130 DIM s(200,10)  '200 Games,je 10 HSs
140 DIM n$(200,10) '... und je 10 Namen
150 DIM g$(200)    'Namen der 200 Games
160 r$=CHR$(24):z$=CHR$(34):DIM gn(200)
170 MODE 1:PRINT SPC(11)STRING$(18,"-")
180 PRINT SPC(11)"HIGH-SCORE-Tabelle"
190 PRINT SPC(11)STRING$(18,"-")
200 PEN 2:PRINT SPC(5)"written by Jan-Mirko Maczewski":PEN 1
210 WINDOW 1,40,5,25
220 PRINT:PRINT"Einen Augenblick bitte ..."
230 FOR i=1 TO 200:g$(i)="-":NEXT
240 FOR i=1 TO 200:FOR i1=1 TO 10
250  n$(i,i1)="-"
260 NEXT i1,i:GOTO 280
270 GOSUB 1670:GOSUB 1300
280 CLS:PRINT:a$="L":GOSUB 1630
290 PRINT"- Lesen der Tabelle ("z$"HI-SCORE.TAB"z$")
300 PRINT:a$="S":GOSUB 1630
310 PRINT"- Schreiben der Tabelle
320 PRINT:a$="E":GOSUB 1630
330 PRINT"- Eingabe neuer Scores,Score-Halter
340 PRINT:a$="A":GOSUB 1630
350 PRINT"- Anzeigen einer/mehrerer Tabelle(n)
360 PRINT:a$="D":GOSUB 1630
370 PRINT"- Drucken einer/mehrerer Tabelle(n)
380 PRINT:a$="F":GOSUB 1630
390 PRINT"- Finden eines Scores/Score-Halters
400 PRINT:a$="H":GOSUB 1630
410 PRINT"- High-Score-Anzeige aller Games
420 PRINT:a$="C":GOSUB 1630
430 PRINT"- CAT von Disk/Tape"
440 a$=INKEY$:IF a$="" GOTO 440 ELSE a$=LOWER$(a$)
450 IF a$="l" THEN GOSUB 1670:GOSUB 1300:GOTO 280
460 IF a$="s" THEN GOSUB 1670:GOSUB 1440:GOTO 280
470 IF a$="e" THEN 550 'Score-Eingabe
480 IF a$="a" THEN 750 'Tab.-Anzeige
490 IF a$="d" THEN 860 'Tab.-Druck
500 IF a$="f" THEN 970 'Sc./Nam-Finden
510 IF a$="h" THEN 1180 'HI-Anzeige
520 IF a$="c" THEN GOTO 1710 'CAT
530 PRINT CHR$(7)CHR$(11):GOTO 440
540 ' --- Eingabe neuer Scores ... ---
550 CLS:PRINT:PRINT SPC(2)"Eingabe neuer Scores,Score-Halter
560 PRINT:INPUT" Bei welchem Spiel wurde der Score       erreicht ";game$
570 game$=UPPER$(game$):PRINT
580 INPUT"Welcher Score ";sc
590 INPUT"Score-Halter ";name$:PRINT
600 PRINT"Game :";game$:PRINT"Score:";sc:PRINT"Name :";name$
610 PRINT:PRINT" OK ? ";:GOSUB 1580
620 IF j=0 THEN 550 ELSE GOSUB 1790
630 g$(nr)=game$:CLS:PRINT
640 PRINT"Bisheriger Stand bei "
650 GOSUB 1850
660 FOR i=1 TO 10
670  IF sc>s(nr,i) THEN GOTO 2030
680 NEXT:PRINT:PRINT CHR$(7)
690 PRINT sc;"ist zu wenig,"
700 PRINT" um in die 'TOP-TEN' zu kommen."
710 PRINT:PRINT"(TASTE DRUECKEN !)":CALL &BB18:GOTO 280
720 CLS:PRINT:PRINT"Die 'TOP-TEN' von"
730 LOCATE x,3:PRINTSTRING$(LEN(g$(nr)),"_")
740 GOSUB 1850:GOTO 280
750 ' --- Anzeigen der Tabelle(n) ---
760 CLS:PRINT:PRINT"   Anzeigen einer/mehrerer Tabelle(n)
770 PRINT:y$="sehen  ":GOSUB 2100
780 IF p=1 THEN 820
790 FOR j=1 TO c-1
800  CLS:nr=gn(j):GOSUB 1850
810 NEXT:GOTO 280
820 FOR j=1 TO 200
830  IF g$(j)="-" THEN 850
840  CLS:nr=j:GOSUB 1850
850 NEXT:GOTO 280
860 '--- Drucken e./m. Tabelle(n) ---
870 CLS:PRINT:PRINT"   Drucken einer/mehrerer Tabelle(n)
880 PRINT:y$="drucken":GOSUB 2100
890 IF p=1 THEN 930
900 FOR j=1 TO c-1
910  CLS:nr=gn(j):GOSUB 1850:GOSUB 2270
920 NEXT j:GOTO 280
930 FOR j=1 TO 200
940  IF g$(j)="-" THEN 960
950  CLS:nr=j:GOSUB 1850:GOSUB 2270
960 NEXT:GOTO 280
970 '--- Finden eines Scores,... ---
980 CLS:PRINT:PRINT"   Finden eines Score/Score-Halters
990 PRINT:INPUT"Bei welchem Spiel soll gesucht werden ";ga$:ga$=UPPER$(ga$)
1000 PRINT:PRINT"Ist ein Score gesucht ? ";:GOSUB 1580
1010 IF j=0 THEN 1110 ELSE PRINT
1020 INPUT"Name des Score-Halters ";na$
1030 PRINT:PRINT"Sollen alle Scores von ";na$:PRINT"ausgegeben werden oder nur der beste ?  (J=alle;N=nur der beste) ";:GOSUB 1580
1040 CLS:PRINT:IF j THEN PRINT na$"'s Scores" ELSE PRINT na$"'s bester Score"
1050 PRINT"bei "r$;ga$;r$" :
1060 PRINT:game$=ga$:GOSUB 1790
1070 FOR i=1 TO 10:snr=s(nr,i)
1080  IF n$(nr,i)=na$ THEN PRINT" Platz"i": "snr" Punkte":IF j=0 THEN 1100
1090 NEXT:PRINT:PRINT"(TASTE !)
1100 CALL &BB18:GOTO 280
1110 PRINT:INPUT"Score des zu suchenden Score-Halters  ";sc:PRINT:game$=ga$:GOSUB 1790
1120 FOR i=1 TO 10:snr=s(nr,i)
1130  IF snr=sc THEN PRINT" Platz"i": "n$(nr,1);:GOTO 1150
1140 NEXT
1150 IF i<10 THEN IF s(nr,i+1)=sc THEN PRINT" und":PRINT SPC(11);n$(nr,i+1)
1160 PRINT:PRINT"(TASTE !)"
1170 CALL &BB18:GOTO 280
1180 '--- Hi's aller Games ---
1190 CLS:PRINT:PRINT"Die High-Scores aller vermerkten Spiele":PRINT
1200 PRINT"Soll mitgedruckt werden ? ";:GOSUB 1580
1210 IF g$(200)<>"-" THEN a=200 ELSE game$="?":GOSUB 1790:a=nr-1
1220 FOR i=1 TO a
1230  IF j THEN PRINT#8,CHR$(27)"x0"CHR$(27)"E
1240  PRINT:PRINT " "r$;g$(i);r$" :"
1250  IF j THEN PRINT#8,g$(i);CHR$(27)"F : ";s(i,1);"   ";n$(i,1)
1260  PRINT:PRINT s(i,1);SPC(5);n$(i,1)
1270  PRINT:PRINT"(TASTE !)":CALL &BB18
1280  PRINT CHR$(11)CHR$(18)CHR$(11);
1290 NEXT:GOTO 280
1300 ' --- Einlesen der Tabelle ---
1310 OPENIN"hi-score.tab"
1320 INPUT#9,a
1330 FOR i=1 TO a
1340  INPUT#9,g$(i)
1350 NEXT i
1360 FOR i=1 TO a
1370  FOR i1=1 TO 10
1380   INPUT#9,s(i,i1):INPUT#9,n$(i,i1)
1390  NEXT i1
1400 NEXT i
1410 CLOSEIN
1420 RETURN
1430 ' --- Speichern der Tabelle ---
1440 OPENOUT"hi-score.tab"
1450 FOR i=1 TO 200
1460  IF g$(i)<>"-" THEN a=i
1470 NEXT:PRINT#9,a
1480 FOR i=1 TO a
1490  PRINT#9,g$(i)
1500 NEXT i
1510 FOR i=1 TO a
1520  FOR i1=1 TO 10
1530   PRINT#9,s(i,i1):PRINT#9,n$(i,i1)
1540  NEXT i1
1550 NEXT i
1560 CLOSEOUT
1570 RETURN
1580 'Ja/Nein-Abfrage
1590 x$=INKEY$:IF x$="" GOTO 1590
1600 x$=LOWER$(x$):IF x$="j" THEN j=-1:PRINT"Ja":RETURN
1610 IF x$<>"n" THEN GOTO 1590
1620 PRINT"Nein":j=0:RETURN
1630 PEN 2:PRINT " "r$;a$;r$;
1640 x=POS(#0):y=VPOS(#0)
1650 LOCATE x-1,y-1:PRINT"_":PEN 1
1660 LOCATE x+1,y:RETURN
1670 CLS:PRINT:PRINT" Bitte Disk/Kass. mit "z$"HI-SCORE.TAB"z$
1680 PRINT" einlegen und dann eine TASTE druecken !":CALL &BB18
1690 RETURN
1700 ' --- CAT v. Disk o. Tape ---
1710 CLS:PRINT:PRINT SPC(9);
1720 PRINT"CAT von Disk oder Tape
1730 PRINT:PRINT:PRINT"J=Disk ; N=Tape
1740 GOSUB 1580:IF j THEN |DISC.IN ELSE |CAS.IN
1750 CAT:PRINT CHR$(11);
1760 PRINT"(TASTE DRUECKEN !)"
1770 CALL &BB18:GOTO 280
1780 ' --- Game suchen ---
1790 FOR i=1 TO 200:t$=UPPER$(g$(i))
1800  IF t$=game$ THEN nr=i:RETURN
1810 NEXT:IF g$(200)<>"-" THEN PRINT CHR$(7)"*** TABELLE VOLL ***":END
1820 FOR i=1 TO 200:t$=g$(i)
1830  IF t$="-" THEN nr=i:RETURN
1840 NEXT i
1850 ' --- die 10 Hi-Scores ---
1860 y=LEN(g$(nr)):x=(40-y)/2:PEN 1
1870 LOCATE x,3:PRINT STRING$(y,"_")
1880 LOCATE x,4:PRINT r$;g$(nr);r$
1890 PEN 3:LOCATE 1,6:PRINT "Platz  1";
1900 snr=s(nr,1)
1910 IF INT(snr)-snr<0 THEN PRINT" "USING"########.##";snr:GOTO 1930
1920 PRINT" "USING"########";s(nr,1)
1930 LOCATE 22,6:PRINT n$(nr,1)
1940 PRINT:PEN 2:FOR i=2 TO 10
1950  PRINT SPC(6);USING"##";i;
1960  snr=s(nr,i)
1970  IF INT(snr)-snr<0 THEN 2080
1980  PRINT" "USING"########";snr
1990  LOCATE 22,i+6:PRINT n$(nr,i)
2000 NEXT i:PRINT:PRINT:PRINT"(TASTE !)
2010 CALL &BB18:RETURN
2020 ' --- neue Tab. erst. ---
2030 FOR j=10 TO i STEP -1
2040  s(nr,j)=s(nr,j-1)
2050  n$(nr,j)=n$(nr,j-1)
2060 NEXT j:s(nr,i)=sc
2070 n$(nr,i)=name$:GOTO 720
2080 PRINT" "USING"########.##";snr
2090 GOTO 1990
2100 PRINT"Wollen Sie die 'TOP-TEN' aller bisher   eingetragenen Spiele "y$"?";
2110 GOSUB 1580:PRINT:IF j THEN p=1:RETURN ELSE p=0
2120 PRINT"Bitte geben Sie 'J' ein,wenn Sie die    TOP-TEN des angezeigten Spieles "y$
2130 PRINT"moechten;'N',wenn Sie sie nicht "y$"wollen und '@' zum Beenden der Abfrage."
2140 PRINT:c=1
2150 FOR i=1 TO 200
2160  IF g$(i)="-" THEN 2240
2170  PRINT USING"###";i;:PRINT". ";
2180  PRINT g$(i)" ?"
2190  a$=INKEY$:IF a$="" GOTO 2190
2200  a$=LOWER$(a$):IF a$="n" THEN 2240
2210  IF a$="@" THEN 2250
2220  IF a$<>"j" THEN PRINT CHR$(7)CHR$(11);:GOTO 2190
2230  gn(c)=i:c=c+1
2240 NEXT
2250 RETURN
2260 ' --- Hi's auf den Drucker ---
2270 PRINT#8,CHR$(27)"x0"CHR$(27)"G
2280 PRINT#8,g$(nr):PRINT#8,CHR$(27)"H
2290 PRINT#8,"Platz  1";:snr=s(nr,1)
2300 IF INT(snr)-snr<0 THEN PRINT#8," "USING"########.##";snr:GOTO 2320
2310 PRINT#8," "USING"########";snr
2320 PRINT#8,SPACE$(22-PEEK(&AC23));n$(nr,1)
2330 '!!! CPC 664/6128: !!!                  PRINT#8,SPACE$(22-PEEK(&AC08))...!
2340 PRINT#8:FOR i=2 TO 10
2350  PRINT#8,SPACE$(6)USING"##";i;
2360  snr=s(nr,i)
2370  IF INT(snr)-snr<0 THEN 2440
2380  PRINT#8," "USING"########";snr;
2390  PRINT#8,SPACE$(22-PEEK(&AC23));
2400  '664/6128:...(22-PEEK(&AC08));...
2410  PRINT#8,n$(nr,i)
2420 NEXT i:PRINT#8:PRINT#8:PRINT#8
2430 RETURN
2440 PRINT#8," "USING"########.##";snr;
2450 GOTO 2390