zurück : weiter : inhalt =
 
 

5.2.4 ** Traps des Pointer-I.F

Trap #3 Op-Codes sind bis zur Obergrenze der möglichen Angaben definiert.
Lücken bei $75 und $79.

Beschreibung aktualisiert anhand der PIF-Version 1.71.
 
 



 
IOP.FLIM IOP.FLIM 3 / 108 $6C
Ermitteln der äußeren Grenzwerte eines Fensters - outline
  IN:   OUT:  
D2 0
A1 Adr des Datenblocks A1 Adr des Datenblocks
 
ERR.BP -15, auch wenn D2 =/= 0
Im Datenblock als Bildschirmkoordinaten:
0(A1) Breite
2(A1) Höhe
4(A1) X-Ursprung
6(A1) Y dto.


 
IOP.SVPW IOP.SVPW 3 / 109  
Teilfenster sichern. "save part of window"
  IN:   OUT:  
D1 rel Ursprung D1 Adr der Ablage
des zu sichernden Bereichs
D2 Null oder Breite | Höhe
für die Ablage
A1 Adr des Datenblocks mit den
Bildschirmmaßen des Ausschnitts
A2 Adr des Ablagebereiches
 
ERR.OR -4 Teilfenster überragt OL/Ablagebereich
ERR.OM -3
Bei D2 =/= 0 wird ein entsprechender Speicherbereich neu zugewiesen und dessen Größe in D2 zurückgegeben.
Bei D2 = 0 wird der mit A2 bezeichnete Speicherbereich benutzt.
 
An verschiedenen PIF-Versionen beobachtet:  


 
IOP.RSPW IOP.RSPW 3 / 110  
Teilfenster aus dem Speicher holen
  IN:   OUT:  
D1 rel Ursprung
D2 =/= 0 erhält Ablage, sonst Auflösung des Speicherbereiches
A1 adr, Datenblock mit den Bildschirmmaßen des Teilfensters
 
ERR.OR -4 Teilfenster überragt OL/Ablagebereich
 

 
IOP.SLNK IOP.SLNK 3 / 111  
Daten im Linkblock setzen
  IN:   OUT:  
D1.W Position im Linkblock
D2.W Anzahl Bytes
A1 Pointer zu den Daten A1 Adr. des Linkblocks
 
Nur mit größter Sorgfalt zu verwenden, da (zweckbedingt) völlig ungeschützt.
Zu große oder falsche Werte in D1/D2 können das gesamte System beschädigen.
 


 
IOP.PINF IOP.PINF 3 / 112  
Pointer-Information
  IN:   OUT:  
D1 PTR-Version ASCII codiert
A1 Window Manager Vektor
 
ERR.NC  -1 bei unzugänglichem Kanal(!)
ERR.BP -15 Pointer Interface nicht installiert
 


 
IOP.RPTR IOP.RPTR 3 / 113  
Pointer lesen 
  IN:   OUT:  
D1 X | Y Bildkoordinaten D1 X | Y Pointer-Koordinaten
D2.B Abbruchtabelle
D3 -1
A1 Ptr zum Pointer-Record
 
Mit D1 wird überprüft, ob sich der Pointer bewegt hat.
Die Koordinaten sind auf das Gesamtbild (nicht Fenster) zu beziehen.

Die Bits der Abbruchtabelle bestimmen, welche Ereignisse zum vollständigen Abschluss der Operation führen:
 
0 Taste oder Mausknopf im Fenster betätigt oder Fenster-Änderung; 
Sprite der Bewegung zeichnen.
1 Taste oder Mausknopf dauernd gedrückt; 
Sprite der Formatänderung zeichnen
2 Taste oder Mausknopf wird losgelassen
3 Pointer entfernt sich von den angegebenen Koordinaten
4 Pointer außerhalb des Fensters
5 dto., innerhalb
6 -/-
7 Abfrage des Trefferbereiches (hit area)
 
Bit 7 gilt nur mit Bits 0 und 1, alle anderen dürfen nicht gesetzt sein.
Sind Bit 4 und Bit 5 gesetzt, erfolgt Rückkehr sofort auch bei geschlossenem Fenster.
Während der Abfrage sind alle anderen Fenster geschlossen und nur im oberen Fenster des Pile gilt die Eingabe.

24 Bytes Pointer-Record:
00 ID des Primärfensters oder -1 bei Bereichsüberschreitung 
04 .w Teilfenster oder -1 bei Hauptfenster
06 .w X-Position des Pointers im (Teil-)Fenster
08 .w Y dto.
10 .b 0 kein Tastendruck, =/=0 Tasten- oder Maus-Code
11 .b 0 keine Taste unten, =/= 0 Taste/Mausknopf gedrückt 
12 Ereignis-Vektor, nur niederwertiges Byte bestimmt (s.u.)
16 .w *4 Größe und Ursprung des (Teil-)Fensters
24 Referenzadresse des Fensters
 
Die hier gültigen Bits im "event"-Vector:
0 Taste kurz betätigt ("click")
1 Taste festgehalten
2 Taste ist freigegeben
3 Ptr wurde bewegt
4 Ptr außerhalb des Fensters
5 Ptr im Fenster
6 Ptr hat Bildschirmgrenze erreicht
7
8 ... 23 Window-Manager "event"-Bits (hier nicht besetzt(?)
24 ... 31 Job-"event"-Bits, soweit diese Auslöser der Rückkehr sind
 
Das PIF ermittelt im Pile der Primärfenster das erste, in dessen Trefferbereich sich der Pointer befindet. Liegt diese Stelle bei einem Fenster ohne Definitionsliste außerhalb des durch SD.WDEF gesetzten aktuellen Bereiches, gilt das als Bereichsüberschreitung.
Dann beziehen sich die Koordinaten für den Pointer auf den Ursprung der Bildschirmkoordinaten.
Befindet sich der Pointer nicht in einem Teilfenster, wird -1 als dessen Nummer angegeben und die Koordinaten beziehen sich auf das Hauptfenster.
Gibt es keine Definitionsliste, beziehen sich die Koordinaten auf den Ursprung der aktuellen Fensterdefinition.
 



 
IOP.RPXL IOP.RPXL 3 / 114  
Pixel-Farbe lesen 
  IN:   OUT:  
D1 X | Y Koordinaten D1 ermittelte Position | Farbe
D2 Suchschlüssel und -farbe
 
Suchschlüssel in den Bits von D2
IOP..GCL 16 mit angegebener Farbe
IOP..SDR 17 nach unten rechts
IOP..SLR  18 von links nach rechts
IOP..SSC 19 dieselbe Farbe suchen
IOP..SCN 31 Abtastung angefordert
Bei erfolgloser Abtastung kommt im höherwertigen Wort D1 = -1 zurück.
ERR.OR -4 X,Y nicht im Fenster


 
IOP.WBLB IOP.WBLB 3 / 115  
Blob zeichnen
  IN:   OUT:  
D1  X | Y Koordinaten
A1  Ptr zur BLOB-Definition
A2  Ptr zur PATTERN-Definition
 
ERR.OR -4 X,Y nicht im Fenster
 

 
IOP.LBLB IOP.LBLB 3 / 116  
Linie aus Blobs zeichnen
  IN:   OUT:  
D1 X | Y Startpunkt D1 Endpunkt
D2 Endpunkt (ausschließlich)
A1 Ptr auf Blobdefinition
A2 Ptr auf Musterdefinition A2 aktualisiert
 
ERR.BP -15 Definition wurde nicht gefunden
Fehler beim "clipping": Wenn die Koordinaten in Richtung oben links überlaufen, kann es durch Rechenfehler, bei denen der Aufruf in einer endlosen Schleife hängenbleibt, zum Überschreiben der Systemvariablen kommen.
 


IOP.WSPT IOP.WSPT 3 / 117  
Sprite zeichnen 
  IN:   OUT:  
D1 X | Y Koordinaten
A1 Ptr auf Sprite-Definition oder Nummer eines vordefinierten Sprite
 
ERR.OR -4 X,Y nicht im Fenster
ERR.BP -15 Fehler in der Datenstruktur, Definition nicht gefunden
Standard-Sprites:
0 SP.ARROW Pfeil
1 SP.LOCK Vorhängeschloss
2 SP.NULL  Leeres Fenster
3 SP.MODE MODE falsch (4 oder 8)
4 SP.KEY Tastatur-Eingabe
5 SP.BUSY  Sperrzeichen
6 SP.WMOVE Fenster-Bewegung
7 SP.WSIZE Fenster-Änderung
 

 
IOP.SPRY IOP.SPRY 3 / 118  
Blob durch Maske hindurch pixelweise zeichnen
  IN:   OUT:  
D1 X | Y Koordinaten D1 X | Y Koordinaten
D2.W Anzahl der Füllpixel 
A1 Ptr zum Blob
A2 Ptr zur Maske (pattern)
 
ERR.OR -4 X,Y nicht im Fenster
 

 
IOP.FILM IOP.FILM 3 / 121  
Bildschirmmaße festlegen
  IN:   OUT:  
D1 D1 (?)
D2 (?)
 
Keine (annehmbare) Dokumentation hierzu verfügbar.
Mit Aufruf dieser Trap wird der Inhalt von D1/D2 an der Stelle $E0/$E4 ab Handler-Basis (intern A3) eingetragen. An diesen ebensowenig dokumentierten Adressen liegen in den untersuchten (re-assemblierten) PIF-Versionen die hardware-bezogenen Bildschirmmaße für den Pointer (als Bild, nicht Adresse) des PIF.
 

 
IOP.OUTL IOP.OUTL 3 / 122  
Fensterbereiche definieren
  IN:   OUT:  
D1 X | Y Schattenbreite D1 verdorben
D2 (s. unten)
A1 Ptr auf Fenstermaße
 
ERR.OR -4 Fenster außerhalb des Bildschirms
Bits von D2:
IOP..SET 0 gerade erledigt
IOP..MOV 1 Inhalt mitnehmen und Maße einrichten
A1 weist auf einen Datenblock mit Wort-Werten für Breite, Höhe, Ursprung.
Die OL entsteht durch Hinzufügen der Schatten-Breite. Zugleich wird (nicht ganz fehlerfrei) bei Sekundärfenstern der darunterliegende Bereich im Speicher gesichert.
Das PIF erkennt ein so definiertes Fenster als "verwaltet" (managed).
Danach folgende SD.WDEF-Aufrufe berühren den Trefferbereich.
 

 
IOP.SPTR IOP.SPTR 3 / 123  
Pointer positionieren
  IN:   OUT:  
D1 Punkt Pointerkoordinaten D1 Punkt in Bildkoordinaten
D2.B  Ursprungsrelation
 
ERR.OR -4 X,Y außerhalb des Fensters
D2 mit der Relation für den Ursprung
IOP..REW -1 Pointer relativ zum Fenster
IOP..ABS 0 mit absoluter Position I
OP..REH 1 relativ zum Trefferbereich
 


 
IOP.PICKK IOP.PICK 3 / 124  
Fenster auswählen
  IN:   OUT:  
D1 Job-ID D1 verdorben
D2  0
 
ERR.NJ -2
A0 muß mit irgendeiner gültigen Fenster-ID besetzt sein.
Für D1 gilt:
D1=Job-ID holt das Primärfenster an die Spitze des Pile.
-1 befördert stattdessen das untere Fenster dorthin.
-2 markiert Fenster der Kanal-ID als nicht verriegelbar.
-3 Bild und Ptr einfrieren
 

 
IOP.SWDF IOP.SWDF 3 / 125  
Liste von Teilfenstern einrichten
  IN:   OUT:  
A1 Ptr zur Teilfenster-Liste oder Null
 
Die Liste endet mit Null (ungerade Adresse), sie besteht aus einer Anzahl Ptr (.L) auf die Records von Teilfenstern:
sw_xsize $00 .w (Teil-)Fenster-X-Größe (Breite) in Pixeln
sw_ysize $02 .w (Teil-)Fenster-Y-Größe (Höhe) in Pixeln
sw_xorg  $04 .w X-Ursprung des (Teil-)Fensters
sw_yorg  $06 .w Y-Ursprung des (Teil-)Fensters
sw_wattr $08 4.w Attribute: Freiraum, Rand, Randfarbe, Papierfarbe
sw_psprt $10 .l Ptr auf Pointer-Sprite für das Teilfenster
 

 
IOP.WSAV IOP.WSAV 3 / 126  
Fenster-Bereich sichern
IOP.WRST IOP.WRST 3 / 127  
Fenster-Bereich aus dem Speicher restaurieren
  IN:   OUT:  
D1 WSAV : Null oder Bereichslänge
D2.B WRST : =/= 0 Erhalt des Speicherbereichs
A1 Null oder Adresse des Speicherbereichs
 
ERR.OM -3 Speicherüberlauf
Die Daten auf einem mit A1 gesondert zugewiesenen Speicherbereich sind gegen Überschreiben durch das PIF geschützt. Bei Null in A1 oder D1 gelten die Daten der Fensterdefinition.

 


  oben : zurück : weiter : inhalt 

(count)