Action! Pointer
Moderatoren: Sven, Sleepy, Wolfgang, cas, des-or-mad
7 Beiträge
• Seite 1 von 1
Action! Pointer
hat nicht so direkt mit Programmierungsfragen zu tun...
gestern das erste mal "unfallfrei" eine komplizierte Anwendung von POINTERn in Action! hingekriegt. Wenn man das dann endlich mal kapiert hat, ist es eine riesige Hilfe beim Programmieren. Z.B. Weitergabe von Variablen über mehrere PROC/FUNCs ist simpel möglich. Werde beizeiten mal ein paar Beispiele einstellen.
gestern das erste mal "unfallfrei" eine komplizierte Anwendung von POINTERn in Action! hingekriegt. Wenn man das dann endlich mal kapiert hat, ist es eine riesige Hilfe beim Programmieren. Z.B. Weitergabe von Variablen über mehrere PROC/FUNCs ist simpel möglich. Werde beizeiten mal ein paar Beispiele einstellen.
RUN $E477
--
--
-
FlorianD - Super Poster
- Beiträge: 1599
- Registriert: Do 1. Jan 1970, 01:00
- Wohnort: Frankfurt am Main
Re: Action! Pointer
Ich nutze Pointer gerne um Daten direkt im Bildschirmspeicher zu schreiben oder zu manipulieren.
Hier eine Funktion, die in einem auf dem Bildschirm dargestellten Zahlenraster, bestimmte Zahlen durch Invertieren markiert. Da die Zahlen zweistellig ausgegeben werden, werden auch immer beide Ziffern invertiert.
Zuerst wird die Position der Zahl ermittelt, dann diese mittels Pointer angesprochen:
Das gesamte Listing ist hier weiter unten auf der Seite zu finden...
Hier eine Funktion, die in einem auf dem Bildschirm dargestellten Zahlenraster, bestimmte Zahlen durch Invertieren markiert. Da die Zahlen zweistellig ausgegeben werden, werden auch immer beide Ziffern invertiert.
Zuerst wird die Position der Zahl ermittelt, dann diese mittels Pointer angesprochen:
- Code: Alles auswählen
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 ; Adresse ermitteln
PBS^== XOR $8080 ; Invertieren
POSITION(X*3,19)
PrintB(lzahlen(X))
OD
CRSIN=0
RETURN
Das gesamte Listing ist hier weiter unten auf der Seite zu finden...
-
eda70 - Super Poster
- Beiträge: 1000
- Registriert: Do 1. Jan 1970, 01:00
Re: Action! Pointer
- Code: Alles auswählen
PROC MAIN()
BYTE POINTER P
BYTE I
BYTE A=[3 4 5 6 7 8]
BYTE B=[10 20 30 40 50 60]
;
P=A ;INHALT P IST NUN GLEICH INHALT VON A, IN DIESEM FALL DIE ERSTE STELLE VON A
PRINTCE(P)
P=@A ;JETZT ZEIGT P AUF DIE ADR VON A. @ IST DER "ADRESSOPRATOR"
PRINTCE(P) ;ADR DRUCKEN
PRINTCE(P^) ;INHALT DER ADRESSE VON A DRUCKEN, ^ IST DER INHALTSOPERATOR
PRINTE("HIER KOMMEN ALLE A'S")
P=@A ;POINTER AUF ADRESSE VON A SETZEN
FOR I=1 TO 6 DO
PRINTBE(P^) ;PRINTE DEN INHALT VON ADRESSE A, ALSO DAS AUF WAS DER POINTER P ZEIGT
P==+1 ;POINTER 1 ERHOEHEN (ALSO EINE ADRESSE WEITERSCHALTEN)
OD
PRINTE("NUN KOMMEN DIE B'S")
P=@B
FOR I=1 TO 6 DO
PRINTB(P^) ; INHALT ZEIGEN DER STELLE AUF DIE P ZEIGT
PRINT(" ")
P^==+1 ; INHALT DER ADRESSE, AUF DIE P ZEIGT UM 1 ERHOEHEN
PRINTBE(P^) ; NOCHMAL INHALT DER STELLE AUF DIE P ZEIGT ANZEIGEN
P==+1 ; EINE ADRESSE WEITERSCHALTEN
; MAN BEACHTE DEN UNTERSCHIED ZWISCHEN "P^==+1" UND "P==+1" !
OD
RETURN
RUN $E477
--
--
-
FlorianD - Super Poster
- Beiträge: 1599
- Registriert: Do 1. Jan 1970, 01:00
- Wohnort: Frankfurt am Main
Re: Action! Pointer
Sollte das nicht
Freue mich jedenfalls auf Beispiele mit Pointern als Parameter bzw. Return-Werte!
Das Fehlen von (mehr) Beispielcode war damals für mich als Teenager und vermutlich auch für viele andere ein Grund, nicht mehr mit Action! zu machen, da ich einige Konzepte von BASIC kommend einfach nicht kapiert habe.
P.S.: Kann man in einem Code-Segment im Forum eigentlich was hervorheben?
- Code: Alles auswählen
BYTE ARRAY A=[3 4 5 6 7 8]
BYTE ARRAY B=[10 20 30 40 50 60]
Freue mich jedenfalls auf Beispiele mit Pointern als Parameter bzw. Return-Werte!
Das Fehlen von (mehr) Beispielcode war damals für mich als Teenager und vermutlich auch für viele andere ein Grund, nicht mehr mit Action! zu machen, da ich einige Konzepte von BASIC kommend einfach nicht kapiert habe.
P.S.: Kann man in einem Code-Segment im Forum eigentlich was hervorheben?
- slx
- Multi Poster
- Beiträge: 231
- Registriert: Fr 31. Mai 2013, 22:20
Re: Action! Pointer
Hallo,
nein, das ist Absicht. Ich will da nur Bytes ablegen, kein Array. Daher die Definition
Ich hatte auch erst gedacht, da müßte ein ARRAY hin, habe das dann aber in den Beispielen von Peter Finzel im ATARI Magazin so gesehen.
nein, das ist Absicht. Ich will da nur Bytes ablegen, kein Array. Daher die Definition
- Code: Alles auswählen
BYTE
Ich hatte auch erst gedacht, da müßte ein ARRAY hin, habe das dann aber in den Beispielen von Peter Finzel im ATARI Magazin so gesehen.
RUN $E477
--
--
-
FlorianD - Super Poster
- Beiträge: 1599
- Registriert: Do 1. Jan 1970, 01:00
- Wohnort: Frankfurt am Main
Re: Action! Pointer
so geht es, mehrere Rückgabewerte aus einer Funktion wieder rauszubekommen
I,J sind Bytevariablen
AP,BP sind Pointer darauf
I,J sind Bytevariablen
AP,BP sind Pointer darauf
- Code: Alles auswählen
PROC TEST(BYTE POINTER A,B)
A^=99
B^=55
RETURN
PROC MAIN()
BYTE POINTER AP,BP
BYTE I,J
I=3
J=4 ; i und j initialisieren
PRINTBE(I)
PRINTBE(J) ; Werte von I,J anzeigen ("3" und "4")
AP=@I
BP=@J ; Pointer aus I,J setzen
TEST(AP,BP) ; Prozedur mit Pointern aufrufen. Achtung: Pointer als Argumente, nicht die Variablen direkt
PRINTBE(I)
PRINTBE(J) ; Werte von I,J anzeigen ("99" und "55")
RETURN
RUN $E477
--
--
-
FlorianD - Super Poster
- Beiträge: 1599
- Registriert: Do 1. Jan 1970, 01:00
- Wohnort: Frankfurt am Main
Re: Action! Pointer
geht auch micht Strings
- Code: Alles auswählen
PROC STRTEST(CHAR POINTER A)
A^="ABBUC"
RETURN
PROC MAIN()
CHAR ARRAY STRING="HALLO"
CHAR POINTER CP
;
PRINTE(STRING)
CP=@STRING
STRTEST(CP)
PRINTE(STRING)
RETURN
RUN $E477
--
--
-
FlorianD - Super Poster
- Beiträge: 1599
- Registriert: Do 1. Jan 1970, 01:00
- Wohnort: Frankfurt am Main
7 Beiträge
• Seite 1 von 1
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast