10 ! LIST PADDEL.BAS
100 REM ++++++++++++++++++++++++++++++++
101 REM ! Program .... PADDEL
102 REM ! fr}n demokassetten till ABC80
103 REM ! Utg}va 1.0 79-03-10
104 REM ! av (c) DATAINDUSTRIER AB
105 REM ! Minne 16 Kbytes
106 REM ++++++++++++++++++++++++++++++++
140 ! Ins{nd av Lars B. Cid <7390> 1988-03-19 21.29.17
150 ! MODIFIERAT av Lars B. Cid 1988-03-19
155 ! Ljudeffekter, TIO-I-TOPP tabell, autoplayer.
157 !
158 ! ---------------------------------------
159 ! F|ljande {ndringar inf|rda 1988-06-04.1345 av <2776> B Sandgren
160 ! WIDTH 80 inf|rt i FNEnd f|r }terg}ng till normall{ge vid avslut.
161 ! Inf|rt FNtid$(n,n) som promptar f|r att st{lla klockan.
162 ! [ndrat namnet till PADDEL.BAS
163 ! ---------------------------------------
164 !
165 INTEGER : EXTEND
166 IF INSTR(1,TIME$,'I') Slask$=FNTid$(1,16)
170 DIM P9$(10,10)=3,P9dat$(10,10)=14,P9(10,10)
175 GOSUB 1060 : WIDTH 40
180 Current=1 : Z=FNL{s
185 Z=FNLista(Current)
190 ; CUR(20,5) '0 - Avslut, A - Autoplay.'
195 ; CUR(18,5) 'Sv}righetsgrad (1-10): ';
200 ON ERROR GOTO 190
205 INPUT P1$ : IF P1$='A' OR P1$='a' Auto=-1 : P1$=NUM$(Current) ELSE Auto=0
210 P1=VAL(P1$)
215 IF P1=0 Z=FNEnd ! CHAIN 'start'
220 IF P1<1 OR P1>10 GOTO 190
225 IF Current<>P1 Current=P1 : GOTO 185
230 P1=7+(10-P1)*2
235 P=34 : P2=P1
240 W3=1 : Q=0 : F2=47 : F1=47
245 B=0 : S=0 : W=6
250 DIM A(12,10)
255 GOSUB 780
260 GOSUB 995
265 ; CUR(23,2); : ; 'Po{ng:';
270 ; S; : ; " Boll:"; : ; B;' Niv}:' Current;
275 T1=T1+W2
280 X1=X+T1*R1
285 Y1=Y+T1*100/V*R2
290 IF Y1<4 AND R2=-1 Y1=3
295 IF Y1>62 AND R2=1 Y1=63
300 SET DOT Y1,X1
305 CLR DOT F2,F1
310 F1=X1 : F2=Y1
315 IF X1>76 GOTO 405
320 IF X1<38 GOTO 645
325 IF Y1=3 GOTO 595
330 IF Y1=63 GOTO 620
335 REM
340 ! Ta bort nedanst}ende rad, om du vill att datorn skall vara b{ttre
345 IF Auto IF Ww3=0 Ww3=1 : GOTO 275 ELSE Ww3=0
350 FOR J=1 TO 1+W1*(ABS(Auto=0))
355 IF Auto=0 THEN 375
360 IF PY1 GOSUB 900
370 GOTO 390
375 Tb=ABS(SYS(8)*INP(34))
380 IF Tb=8 OR Tb=199 GOSUB 900
385 IF Tb=9 OR Tb=198 GOSUB 930
390 IF Tb=192 THEN 185
395 NEXT J
400 GOTO 275
405 REM ==KOLLA PADDELTR[FF===
410 IF K5=0 GOSUB 835
415 IF DOT(Y1,X1+1) GOTO 510
420 CLR DOT F2,F1
425 Z=FNLjud(5)
430 FOR I=1 TO 2000 : NEXT I
435 FOR I=1 TO 6000 : NEXT I
440 IF B<6 GOTO 505
441 IF S<=P9(Current,10) THEN 185
445 ; CHR$(12) : ;
450 ; 'Grattis du har kommit in p}'
455 ; 'listan, skriv in ditt namn.'
460 IF Auto A$='Cpu' : ; 'Computer' : GOTO 475
465 Z=SYS(6) : GET A$
470 ; : INPUT ''A$
475 IF LEN(A$)>3 A$=LEFT$(A$,3)
480 A$=A$+SPACE$(3-LEN(A$))
485 P9$(Current,10)=A$
490 P9(Current,10)=S
495 P9dat$(Current,10)=MID$(TIME$,3,14)
500 Z=FNBubble+FNSkriv : GOTO 185
505 GOSUB 995 : GOTO 265
510 REM ===PADDELTR[FF====
515 IF W1=1 AND W=2 GOTO 535
520 IF W1<>1 GOTO 530
525 W2=2 : W1=6 : GOTO 535
530 W1=W1-1
535 Z=FNLjud(3)
540 I=P2/2-ABS(P-Y1+R2)
545 IF I>-1 GOTO 555
550 R2=-R2 : V=80 : GOTO 565
555 V=80+I*60
560 IF V>300 V=300
565 R1=-R1 : S1=S1+1
570 IF S1/10*10<>S1 GOTO 585
575 IF P2>7 P2=P2-2
580 GOSUB 960
585 X=77 : Y=Y1 : T1=0
590 GOTO 335
595 REM ==KANTTR[FF
600 R2=1
605 X=X1 : Y=4 : T1=0
610 Z=FNLjud(1)
615 GOTO 335
620 REM ==KANTTR[FF
625 R2=-1
630 X=X1 : Y=62 : T1=0
635 Z=FNLjud(1)
640 GOTO 335
645 IF X1>5 GOTO 665
650 Z=FNLjud(1)
655 Q=1
660 GOTO 770
665 IF X1<15 GOTO 325
670 IF X1/2*2=X1 GOTO 325
675 M=R2
680 IF (Y1-3)/6*6<>Y1-3 M=0
685 L1=(Y1-M+2)/6*6-2
690 L2=L1/6+1
695 L3=(X1-14)/2+1
700 IF A(L3,L2)=0 GOTO 325
705 A(L3,L2)=0
710 Z=FNLjud(2)
715 FOR I=0 TO 5
720 CLR DOT L1+I,X1
725 NEXT I
730 K5=K5-1
735 S=S+13-L3
740 ; CUR(23,2); : ; 'Po{ng:';
745 ; S; : ; " Boll:" B;
750 REM ==V[ND
755 IF Q=0 GOTO 765
760 Q=0 : GOTO 770
765 IF R1>0 GOTO 325
770 X=X1 : Y=Y1 : T1=0 : R1=-R1
775 GOTO 325
780 REM ===INITIERA BR[DET====
785 ; CHR$(12)
790 FOR I=1 TO 23 : ; CHR$(151)
795 NEXT I
800 FOR I=4 TO 77
805 SET DOT 2,I
810 SET DOT 64,I
815 NEXT I
820 FOR I=3 TO 64
825 SET DOT I,4
830 NEXT I
835 Z=FNLjud(4)
840 FOR I=1 TO 12
845 FOR J=1 TO 10
850 A(I,J)=1
855 NEXT J : NEXT I
860 K5=120
865 GOSUB 960
870 FOR I=15 TO 37 STEP 2
875 FOR J=3 TO 57 STEP 6
880 FOR K=1 TO 5
885 SET DOT J+K,I
890 NEXT K : NEXT J : NEXT I
895 RETURN
900 REM ====PADDEL UPP]T====
905 IF P-P2/2=3 RETURN
910 CLR DOT P+P2/2,78
915 P=P-1
920 SET DOT P-P2/2,78
925 RETURN
930 REM ====PADDEL NED]T====
935 IF P+P2/2=63 RETURN
940 CLR DOT P-P2/2,78
945 P=P+1
950 SET DOT P+P2/2,78
955 RETURN
960 REM ====RITA PADDEL========
965 FOR I=1 TO 64
970 CLR DOT I,78
975 NEXT I
980 FOR I=P-P2/2 TO P+P2/2
985 SET DOT I,78 : NEXT I
990 RETURN
995 REM ========SERV===========
1000 Y=100*RND : S1=0
1005 IF Y<5 OR Y>63 GOTO 1000
1010 P=34
1015 P2=P1 : GOSUB 960
1020 V=125+180*RND
1025 X=77 : N=N+1
1030 R2=1 : IF RND>.5 R2=-1
1035 T1=0 : R1=-1
1040 X1=X : Y1=Y
1045 W1=W : W2=W3 : B=B+1
1050 Z=FNLjud(1)
1055 RETURN
1060 DIM Asm$=15
1065 Asm$=CHR$(66,22,0,219,5,197,16,254,193,27,122,179,32,245,201)
1070 RETURN
1075 DEF FNLjud(S) LOCAL A,B,C
1080 ON S RESTORE 1145,1150,1155,1160,1165,1170
1085 WHILE -1
1090 READ A,B,C : IF A=0 THEN 1120
1095 IF C<=-255 FOR P=A TO B : NEXT P : GOTO 1090
1100 FOR Pp=A TO B STEP C
1105 Z=FNSoundx(Pp,10)
1110 NEXT Pp
1115 WEND
1120 RETURN 0
1125 FNEND
1130 !
1135 DEF FNSoundx(Frekv,L{ngd)=CALL(VARPTR(Asm$),Frekv*256+L{ngd)
1140 !
1145 DATA 1,30,6,0,0,0
1150 DATA 1,10,2,0,0,0
1155 DATA 55,50,-1,0,0,0
1160 DATA 35,50,1,35,50,1,35,50,1,35,50,1,35,50,1,0,0,0
1165 DATA 1,5,1,5,1,-1,1,5,1,5,1,-1,0,0,0
1170 DATA 100,30,1,200,30,-1,100,30,1,200,30,-1,100,30,1,200,30,-1,0,0,0
1175 !
1180 !
1185 DEF FNLista(Level)
1190 ; CHR$(12) STRING$(10,42) ' P A D D E L ' STRING$(10,42)
1195 ; CUR(4,5) 'Resultatlista, Niv}' Level
1200 !
1205 FOR I=1 TO 10
1210 ; CUR(I+5,5); : ; USING '##' I;
1215 ; ' ' P9dat$(Level,I) ' ' P9$(Level,I) ' ';
1220 ; USING '#### po{ng' P9(Level,I)
1225 NEXT I
1230 !
1235 RETURN 0
1240 FNEND
1245 !
1250 DEF FNL{s
1255 !
1260 ON ERROR GOTO 1330
1265 OPEN 'PADDEL.DAT' AS FILE 1
1270 FOR I=1 TO 10
1275 FOR J=1 TO 10
1280 INPUT #1,P9dat$(I,J)
1285 INPUT #1,P9$(I,J)
1290 INPUT #1,P9(I,J)
1295 NEXT J
1300 NEXT I
1305 CLOSE 1
1310 !
1315 RETURN 0
1320 !
1325 ! *Error*
1330 ON ERROR GOTO 1395
1335 PREPARE 'PADDEL.DAT' AS FILE 1
1340 FOR I=1 TO 10
1345 FOR J=1 TO 10
1350 ; #1 '00-00-00 00.00'
1355 ; #1 'ABC'
1360 ; #1;11-J
1365 NEXT J
1370 NEXT I
1375 CLOSE 1
1380 GOTO 1260
1385 !
1390 ! *Can't prepare*
1395 CLOSE
1400 ; 'Errcode' ERRCODE
1405 STOP
1410 FNEND
1415 !
1420 DEF FNSkriv
1425 PREPARE 'paddel.dat' AS FILE 1
1430 FOR I=1 TO 10
1435 FOR J=1 TO 10
1440 ; #1 P9dat$(I,J)
1445 ; #1 P9$(I,J)
1450 ; #1 P9(I,J)
1455 NEXT J
1460 NEXT I
1465 CLOSE 1
1470 RETURN 0
1475 FNEND
1480 !
1485 DEF FNBubble
1490 !
1495 FOR I=1 TO 10
1500 !
1505 FOR J=10 TO I STEP -1
1510 !
1515 IF P9(Current,J) Dagens datum ]],MM,DD,HH,MM : 'Z0,Z1,Z2,Z3,Z4
2070 POKE -17,Z0,Z1,Z2,Z3,Z4,0
2080 RETURN MID$(TIME$,Fr}ntkn,Tomtkn)
2090 FNEND
2100 !