Action! Pointer

Bild Alles zum Thema Programmierung
Bild All around programming

Moderatoren: Sven, Sleepy, Wolfgang, cas, des-or-mad

Action! Pointer

Beitragvon FlorianD » Mo 20. Mär 2017, 09:15

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.
RUN $E477
--
Benutzeravatar
FlorianD
Super Poster
Super Poster
 
Beiträge: 1565
Registriert: Do 1. Jan 1970, 01:00
Wohnort: Frankfurt am Main

Re: Action! Pointer

Beitragvon eda70 » Mi 22. Mär 2017, 10:48

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:
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...
Benutzeravatar
eda70
Super Poster
Super Poster
 
Beiträge: 1000
Registriert: Do 1. Jan 1970, 01:00

Re: Action! Pointer

Beitragvon FlorianD » Sa 16. Sep 2017, 16:13

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
--
Benutzeravatar
FlorianD
Super Poster
Super Poster
 
Beiträge: 1565
Registriert: Do 1. Jan 1970, 01:00
Wohnort: Frankfurt am Main

Re: Action! Pointer

Beitragvon slx » So 1. Okt 2017, 06:27

Sollte das nicht
Code: Alles auswählen
 BYTE ARRAY A=[3 4 5 6 7 8]
 BYTE ARRAY B=[10 20 30 40 50 60]
sein?

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
Multi Poster
 
Beiträge: 207
Registriert: Fr 31. Mai 2013, 22:20

Re: Action! Pointer

Beitragvon FlorianD » So 1. Okt 2017, 17:00

Hallo,

nein, das ist Absicht. Ich will da nur Bytes ablegen, kein Array. Daher die Definition
Code: Alles auswählen
BYTE
, dann eine Variable (die dann die Adresse darstellt) und dann in eckigen Klammern die Werte.

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
--
Benutzeravatar
FlorianD
Super Poster
Super Poster
 
Beiträge: 1565
Registriert: Do 1. Jan 1970, 01:00
Wohnort: Frankfurt am Main


Zurück zu Programmierung



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast