First Steps
Um etwas in Action! hinein zu schnuppern, habe ich mein letztes BASIC-Programm genommen und nach Action! portiert. Das ging wider Erwarten recht einfach. Hier das Basic-Listing:
Listing in TurboBasic
10 DIM M1(6)
15 DIM ANTW$(15)
20 AD=DPEEK(88)
30 TIPP=1
40 POKE 752,1
50 DIM SP$(30)
55 SP$=" "
100 EXEC RAHMEN
110 EXEC FUELLEN
200 EXEC NEUEZAHLEN
210 EXEC BUBBLESORT
215 VZ=1
220 EXEC MARK
240 POSITION 2,21:? SP$
245 POKE 752,0
250 POSITION 2,21:INPUT "NOCH EIN TIPP?",ANTW$
255 POKE 752,1
260 IF ANTW$(1,1)="N" THEN GOTO 998
270 IF ANTW$(1,1)<>"J" THEN GOTO 240
280 POSITION 2,19:? SP$
290 POSITION 2,21:? SP$
300 TIPP=TIPP+1
305 VZ=-1
310 EXEC MARK
320 GOTO 200
998 POKE 752,0
999 END
1000 PROC RAHMEN
1005 CLS
1010 POSITION 2,1:? "LOTTO-TIPP"
1020 POSITION 2,3
1030 ? ""
1040 FOR X=1 TO 6
1050 ? "| | | | | | | |"
1060 ? ""
1070 NEXT X
1080 ? "| | | | | | | |"
1090 ? ""
1100 ENDPROC
2000 PROC FUELLEN
2010 FOR X=0 TO 6
2020 FOR Y=1 TO 7
2030 POSITION Y*3,X*2+4
2040 Z=X*7+Y
2050 IF Z<10 THEN ? " ";
2060 ? Z
2070 NEXT Y
2080 NEXT X
2100 ENDPROC
3000 PROC MARK
3010 FOR X=1 TO 6
3020 Z=M1(X) MOD 7
3030 Y=TRUNC(M1(X)/7)
3040 IF Z=0 THEN Z=7:Y=Y-1
3050 XY=Z*3+Y*80+160
3060 DPOKE AD+XY,DPEEK(AD+XY)+$8080*VZ
3070 POSITION X*3,19
3080 ? M1(X)
3090 NEXT X
3100 ENDPROC
4000 PROC BUBBLESORT
4010 REPEAT
4015 TAUSCH=0
4020 FOR X=1 TO 5
4030 IF M1(X)>M1(X+1)
4040 STA=M1(X):M1(X)=M1(X+1):M1(X+1)=STA
4050 TAUSCH=1
4060 ENDIF
4070 NEXT X
4080 UNTIL TAUSCH=0
4090 ENDPROC
5000 PROC NEUEZAHLEN
5005 POSITION 13,1:? TIPP
5010 FOR X=1 TO 6
5020 M1(X)=RAND(49)+1
5030 FOR Y=0 TO X-1
5040 IF M1(Y)=M1(X) THEN X=X-1
5050 NEXT Y
5080 NEXT X
5090 ENDPROC
und hier das ganze in Action! Nach dem Portieren habe ich es noch ein bisschen getrimmt. Die Details kann man den Kommentaren entnehmen:
Listing in Action!
;Lotto - V1.1
;V1.1 - 2010 - 05 - 19
;POINTER STATT PEEKC UND POKEC
;V1.0 - 2010 - 05 - 14
;CURSOR AN UND AUS
;V0.2 - 2010 - 05 - 12
;XOR FUER MARKIEREN
;V0.1 - 2010 - 05 - 11
;Adaptiert aus TB XL
BYTE x=[0], TIPP=[1], CRSIN=752
BYTE ARRAY LZAHLEN(6)
CARD AD=88
INT VZ
PROC rahmen()
Put(125)
Position(2,1)
PrintE("LOTTO-TIPP")
Position(2,3)
PrintE("......................")
FOR X=1 TO 6
DO
PrintE("| | | | | | | |")
PrintE("......................")
OD
PrintE("| | | | | | | |")
PrintE("......................")
RETURN
Proc fuellen()
BYTE y,z
FOR X=0 TO 6
do
FOR Y=1 TO 7
do
Position(Y*3,X*2+4)
Z=X*7+Y
IF Z<10 THEN
Put(32)
FI
PrintB(Z)
OD
OD
RETURN
Proc neuezahlen()
BYTE y
Position(13,1)
PrintB(TIPP)
FOR X=1 TO 6
DO
LZAHLEN(X)=RAND(49)+1
FOR Y=1 TO X-1
DO
IF LZAHLEN(Y)=LZAHLEN(X) THEN
X=X-1
FI
OD
OD
RETURN
Proc bubblesort()
BYTE TAUSCH=[0], STA
DO
TAUSCH=0
FOR X=1 TO 5
DO
IF LZAHLEN(X)>LZAHLEN(X+1) then
STA=LZAHLEN(X)
LZAHLEN(X)=LZAHLEN(X+1)
LZAHLEN(X+1)=STA
TAUSCH=1
FI
od
UNTIL TAUSCH=0
od
RETURN
Proc markieren()
BYTE y,z
CARD POINTER PBS
CRSIN=1
FOR X=1 TO 6
DO
Z=LZAHLEN(X) MOD 7
Y=LZAHLEN(X)/7
IF Z=0 THEN
Z=7
Y=Y-1
fi
PBS=AD+Z*3+Y*80+160
PBS^== XOR $8080
POSITION(X*3,19)
PrintB(lzahlen(X))
OD
CRSIN=0
RETURN
PROC main()
byte nochmal
CRSIN=1
rahmen()
fuellen()
DO
neuezahlen()
bubblesort()
markieren()
POSITION(1,22)
Print("Weiterer Tipp (1=JA) ? ")
nochmal=InputB()
Tipp=tipp+1
MARKIEREN()
POSITION(1,19)
PRINT(" ")
POSITION(1,22)
PRINT(" ")
until nochmal<>1
od
CRSIN=0
RETURN
Schreib was...