MID$ Anweisung im Atari BASIC

Moderator: Rockford

Antworten
Benutzeravatar
Andars
Beiträge: 132
Registriert: 12.01.2022 17:49
Has thanked: 24 times
Been thanked: 9 times
Kontaktdaten:

MID$ Anweisung im Atari BASIC

Beitrag von Andars »

Hallo,

ich möchte ein Basic Programm ins Atari Basic portieren.
Das enthält aber MID$-Anweisungen. Wie kann ich so eine Anweisung ins
Atari Basic übersetzen?

Beispiel:

Code: Alles auswählen

 ASC(MID$(A$,J+1,1)
Das ist mir zu undurchsichtig...

Benutzeravatar
pps
Beiträge: 530
Registriert: 18.06.2021 23:05
Has thanked: 115 times
Been thanked: 206 times
Kontaktdaten:

Re: MID$ Anweisung im Atari BASIC

Beitrag von pps »

Ich denke da benötigen wir etwas mehr Quellcode drumherum und die Info welcher Basic Dialekt der Ursprung ist.

Das j+1 deutet auf eine Schleife hin und das ,1 auf eine gesuchte Länge von einem Zeichen. Aber das kann auch komplett was anderes sein.

PS: Wenn es das ist, könnte man A$(LEN(A$)/2) ansprechen...
Zuletzt geändert von pps am 23.03.2022 18:00, insgesamt 1-mal geändert.
PP´s of STARSOFTBerlin__________github|meine Webseite|Demozoo

Benutzeravatar
Andars
Beiträge: 132
Registriert: 12.01.2022 17:49
Has thanked: 24 times
Been thanked: 9 times
Kontaktdaten:

Re: MID$ Anweisung im Atari BASIC

Beitrag von Andars »

Der Code stammt aus dem BASICODE, einer minimal BASIC-Variante.

Hier etwas mehr Code:

Code: Alles auswählen

1000 A=50:GOTO20:REM GRAFIKIMPORT AUS ASCII-DATEI
1010 REM STARTBILDSCHIRM
1020 GOSUB100:HO=8:VE=1:GOSUB110:SR$="IMPORT VON GRAFIKEN":GOSUB150
1030 HO=8:VE=2:GOSUB110:SR$=" AUS ASCII-DATEIEN ":GOSUB150
1040 HO=2:VE=6:GOSUB110:PRINT"AUS WELCHER DATEI LADEN";:INPUTB$
2000 REM EINLESEN DER DATEN
2010 NF=4:NF$=B$:GOSUB 500
2020 GOSUB540:PRINTIN$
2030 IF IN$<>"SCREEN"THEN2900
2040 GOSUB540:PRINTIN$
2050 GOSUB540:PRINTIN$:IFIN$<>"H320"THEN2900
2060 GOSUB540:PRINTIN$:IFIN$<>"V200"THEN2900
2070 GOSUB540:PRINTIN$
2080 GOSUB540:PRINTIN$
2890 GOTO20000
2900 PRINT"KEINE PASSENDE DATEI"
3000 GOSUB 580
3010 STOP
20000 REM ERZEUGEN DER GRAFIK
20010 GOSUB 540:C$=IN$
20100 PRINT C$
20110 D$=MID$(C$,1,1)
20120 E=ASC(D$)-64:PRINTE
20130 D$=MID$(C$,2,1)
20140 F=ASC(D$)-64:PRINTF
20150 G=16*E+F:PRINTG:GOSUB210
20160 GOSUB600:POKE41296,255-G:GOSUB210
22000 GOTO3000

Benutzeravatar
Andars
Beiträge: 132
Registriert: 12.01.2022 17:49
Has thanked: 24 times
Been thanked: 9 times
Kontaktdaten:

Re: MID$ Anweisung im Atari BASIC

Beitrag von Andars »


Benutzeravatar
pps
Beiträge: 530
Registriert: 18.06.2021 23:05
Has thanked: 115 times
Been thanked: 206 times
Kontaktdaten:

Re: MID$ Anweisung im Atari BASIC

Beitrag von pps »

Ich hatte oben auch noch was ergänzt...

A$/2 könnte bei ungeraden Zahlen Probleme bringen, also noch dort den Integer nehmen.

BASICCODE m8 das imho, wie ich ged8 habe.
PP´s of STARSOFTBerlin__________github|meine Webseite|Demozoo

Benutzeravatar
Andars
Beiträge: 132
Registriert: 12.01.2022 17:49
Has thanked: 24 times
Been thanked: 9 times
Kontaktdaten:

Re: MID$ Anweisung im Atari BASIC

Beitrag von Andars »

Hier nochmal der Code, in dem das MID$ umgewandelt werden müsste:

Code: Alles auswählen

1000 A=50:GOTO20:REM GRAFIKIMPORT AUS ASCII-DATEI
1010 REM STARTBILDSCHIRM
1020 GOSUB100:HO=8:VE=1:GOSUB110:SR$="IMPORT VON GRAFIKEN":GOSUB150
1030 HO=8:VE=2:GOSUB110:SR$=" AUS ASCII-DATEIEN ":GOSUB150
1040 HO=2:VE=6:GOSUB110:PRINT"AUS WELCHER DATEI LADEN";:INPUTB$
2000 REM EINLESEN DER DATEN
2010 NF=4:NF$=B$:GOSUB 500
2020 GOSUB540:PRINTIN$
2030 IF IN$<>"SCREEN"THEN2900
2040 GOSUB540:PRINTIN$:Z$=IN$
2050 GOSUB540:PRINTIN$:IFIN$<>"H320"THEN2900
2060 GOSUB540:PRINTIN$:IFIN$<>"V200"THEN2900
2070 GOSUB540:PRINTIN$
2080 GOSUB540:PRINTIN$
2890 GOTO20000
2900 PRINT"KEINE PASSENDE DATEI"
3000 GOSUB 580
3010 REM STOP
20000 REM ERZEUGEN DER GRAFIK
20005 GOSUB600:SR$=Z$:HO=0  :VE=.9:GOSUB650
20010 H=41296:FORL=0TO199
20020 FORK=0TO  1:GOSUB540:A$=IN$
20030 FORJ=0TO38STEP2
20040 M=16*(ASC(MID$(A$,J+1,1))-64)+ASC(MID$(A$,J+2,1))-64:POKE H,M
20050 H=H+1:NEXTJ
20060 NEXTK:NEXTL:GOSUB210
22000 GOTO3000
Das ist für mich leider zu undurchsichtig...

rvetter
Beiträge: 37
Registriert: 27.08.2021 16:48
Has thanked: 7 times
Been thanked: 5 times
Kontaktdaten:

Re: MID$ Anweisung im Atari BASIC

Beitrag von rvetter »

Hallo,

wie wäre es mit

Code: Alles auswählen

20040 M=16*(ASC(A$(J+1,J+1))-64)+ASC(A$(J+2,J+2))-64:POKE H,M
Ich hab selber nie mit BASIC programmiert aber ein Beispiel aus dem ATARI BASIC Reference Manual deutet darauf hin, daß

Code: Alles auswählen

STRING(ANFANG,ENDE)
in etwa

Code: Alles auswählen

MID$(STRING,ANFANG,ANZAHL)
bei ENDE=ANFANG+ANZAHL-1 entspricht.

Gruß, Rene

Benutzeravatar
Andars
Beiträge: 132
Registriert: 12.01.2022 17:49
Has thanked: 24 times
Been thanked: 9 times
Kontaktdaten:

Re: MID$ Anweisung im Atari BASIC

Beitrag von Andars »

Der Code:

Code: Alles auswählen

20040 M=16*(ASC(A$(J+1,J+1))-64)+ASC(A$(J+2,J+2))-64:POKE H,M
funktioniert leider nicht...

rvetter
Beiträge: 37
Registriert: 27.08.2021 16:48
Has thanked: 7 times
Been thanked: 5 times
Kontaktdaten:

Re: MID$ Anweisung im Atari BASIC

Beitrag von rvetter »

Vielleicht hilft es, 'M' an der Stelle mal mit einem Print ausgeben zu lassen. Das läßt dann Rückschlüsse zu, ob es dem erwarteten Wert entspricht. Bzw. A$, A$(J+1,J+2) und M ausgeben und dann so modifizieren, daß es am Ende funktioniert.

Benutzeravatar
DjayBee
Beiträge: 625
Registriert: 17.08.2021 04:02
Has thanked: 384 times
Been thanked: 175 times
Kontaktdaten:

Re: MID$ Anweisung im Atari BASIC

Beitrag von DjayBee »

Hast du daran gedacht, dass im Atari BASIC alle Strings auf ihre maximal benötigte Länge DIMensioniert werden müssen?

Der Hinweis von rvetter ist für das eigentliche Problem genau richtig.
MicrosoftBASIC.png
MicrosoftBASIC.png (5.45 KiB) 2859 mal betrachtet
AtariBASIC.png
AtariBASIC.png (3.75 KiB) 2859 mal betrachtet

Benutzeravatar
Andars
Beiträge: 132
Registriert: 12.01.2022 17:49
Has thanked: 24 times
Been thanked: 9 times
Kontaktdaten:

Re: MID$ Anweisung im Atari BASIC

Beitrag von Andars »

Ja, an die DIM-Anweisung habe ich gedacht.

Ich suche noch immer einen Ersatz für folgenden Ausdruck:

Code: Alles auswählen

M=16*(ASC(MID$(A$,J+1,1))
,

also ohne MID$-Anweisung.

Benutzeravatar
pps
Beiträge: 530
Registriert: 18.06.2021 23:05
Has thanked: 115 times
Been thanked: 206 times
Kontaktdaten:

Re: MID$ Anweisung im Atari BASIC

Beitrag von pps »

Hatte Atari Basic nicht die Angewohnheit, dass String(0) das erste Element war? Dann muss das +1 einfach weg.
PP´s of STARSOFTBerlin__________github|meine Webseite|Demozoo

Benutzeravatar
MichaG
Beiträge: 380
Registriert: 14.10.2021 12:54
Has thanked: 383 times
Been thanked: 111 times
Kontaktdaten:

Re: MID$ Anweisung im Atari BASIC

Beitrag von MichaG »

Code: Alles auswählen

10 DIM A$(20)
20 A$="ABCDEFGHIJ"
30 J=5
40 ? A$(J+1,J+1)
50 M=16*ASC(A$(J+1,J+1))
60 ? M

READY
RUN
F
1120
Siehe Zeile 50
ABBUC-Mitglied aus den 90ern/frühen 2000ern
Ex-WAF und Regionalgruppe Thüringen

Benutzeravatar
atarixle
Beiträge: 271
Registriert: 18.06.2021 21:19
Has thanked: 29 times
Been thanked: 51 times
Kontaktdaten:

Re: MID$ Anweisung im Atari BASIC

Beitrag von atarixle »

Andars hat geschrieben:
23.03.2022 17:48
Hallo,

ich möchte ein Basic Programm ins Atari Basic portieren.
Das enthält aber MID$-Anweisungen. Wie kann ich so eine Anweisung ins
Atari Basic übersetzen?

Beispiel:

Code: Alles auswählen

 ASC(MID$(A$,J+1,1)
Das ist mir zu undurchsichtig...
Die Zeile sieht 1:1 in Atari-BASIC übersetzt so aus:

Code: Alles auswählen

ASC(A$(J+1, J+1))
und kann auf

Code: Alles auswählen

ASC(A$(J+1))
gekürzt werden, da es für die umklammernde ASC-Funktion keine Länge des String benötigt.
Zur Erklärung: MID$ ist eine in Atari ungebräuchliche Anweisung. J+1 ist die Stelle im String und 1 ist die Länge. In Atari BASIC wäre das von Stelle J+1 bis Stelle (J+1)-1+1. Da man für ASC keine Länge benötigt, weil der ASC-Wert nur einer Stelle, nämlich die ersten, als Wert zurückgegeben wird, kann man J+1 weglassen.
Andars hat geschrieben:
25.03.2022 14:36
Ja, an die DIM-Anweisung habe ich gedacht.

Ich suche noch immer einen Ersatz für folgenden Ausdruck:

Code: Alles auswählen

M=16*(ASC(MID$(A$,J+1,1))
,

also ohne MID$-Anweisung.

Code: Alles auswählen

M=16*ASC(A$(J+1))
pps hat geschrieben:
25.03.2022 14:51
Hatte Atari Basic nicht die Angewohnheit, dass String(0) das erste Element war? Dann muss das +1 einfach weg.
Nein.

Weitere Äquivalente:

Code: Alles auswählen

LEFT$(A$, 10) => A$(1, 10)
RIGHT(A$, 10) => A$(10)

Benutzeravatar
atarixle
Beiträge: 271
Registriert: 18.06.2021 21:19
Has thanked: 29 times
Been thanked: 51 times
Kontaktdaten:

Re: MID$ Anweisung im Atari BASIC

Beitrag von atarixle »

Es könnte auch

Code: Alles auswählen

RIGHT$(A$, 10) => A$(LEN(A$)-10+1)
heißen, je nach BASIC-Dialekt.

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast