type PBoolean = ^boolean; PByte = ^byte; PInteger = ^integer; PLongint = ^longint; PObj = AESOBJECTPtr; PPointer = ^pointer; PShort = ^shortint; PString = ^string; PTree = AESTreePtr; PWord = ^word;
Folgende Typen sind aus Kompatibilitätsgründen zu BorlandPascal bzw. Windows/ObjectWindows vorhanden:
PBool = ^Bool; Bool = word; (von PurePascal nicht unterstützt) PStr = PChar;
Deklaration
PAPPLRECORD = ^APPLRECORD; APPLRECORD = record Typ: longint; What: record case boolean of false: (Long: longint); true: (Hi,Lo: word) end end;
Beschreibung
Dient zum Speichern von Benutzeraktionen bei appl_trecord() und appl_tplay(). Folgende Aktionen sind möglich:
Typ | Wert | What |
AT_TIMER | 0 | Anzahl der verstrichenen Milli- |
sekunden | ||
AT_BUTTON | 1 | Status der Maustaste im unteren |
Wort (0: nicht gedrückt, 1: ge- | ||
drückt); Anzahl der Klicks im | ||
oberen Wort | ||
AT_MOUSE | 2 | X/Y-Koordinaten (oberes/unteres |
Wort) | ||
AT_KEYBD | 3 | eingegebenes Zeichen (unteres |
Wort); Status der Umschalttasten | ||
(oberes Wort) |
Deklaration
PGRECT = ^GRECT; GRECT = record case integer of 0: (g_x,g_y,g_w,g_h : integer); 1: (X,Y,W,H,X1,Y1,X2,Y2: integer); 2: (A1,A2 : ARRAY_4) end;
Beschreibung
Enthält die Größe eines Bildschirmrechtecks. X und Y geben die linke obere Ecke des Rechtecks an, W und H die Breite und Höhe. In X1..Y2 können die beiden gegenüberliegenden Eckpunkte als absolute Koordinaten gespeichert werden (die meisten ObjectGEM-Routinen speichern beide Arten). In A1 und A2 sind die relativen bzw. die absoluten Koordinaten zusammengefaßt. g_x..g_h sind nur aus Kompatibilitätsgründen zur ursprünglichen C-Deklaration vorhanden.
Deklaration
HBrush = THandle;
Beschreibung
Wird zur Speicherung eines "Zeichenstiftes" verwendet. Im Moment ist dies ein VDI-Farbindex, mit dem eine Fläche gefüllt wird. Später werden hiermit aber evtl. auch verschiedene Muster etc. verwaltet.
Deklaration
HCursor = THandle;
Beschreibung
Speichert eine Mausform. Dabei kann es sich um eine Konstante (ARROW etc.) handeln, oder aber um einen Pointer (Wert>$7fff), der auf eine MFORM-Struktur zeigt.
Deklaration
HWnd = THandle;
Beschreibung
Wird zur Speicherung der ObjectGEM-internen Kennung eines jeden Fensterobjekts verwendet.
Deklaration
PINFOXSSI = ^INFOXSSI; INFOXSSI = record id : longint; version : word; save_stat, prg_stat : integer; vec_stat : longint end;
Beschreibung
Bildschirmschoner, die das "eXtended ScreenSaver Interface" unterstützen, richten einen XSSI-Cookie ein, der auf eine INFOXSSI-Struktur zeigt. id enthält die Kennung des Bildschirmschoners; für den Aufbau einer solchen Kennung gilt dasselbe wie für XBRA-Kennungen (BeforeDawn: 'DAWN', TwiLight: 'DATL', midnight: 'midn'). In version findet man die unterstützte XSSI-Version ($0100 oder $0101). save_stat gibt an, ob gerade geschont wird (negativer Wert) oder nicht (0). Applikationen können so evtl. ihre Grafikausgabe anhalten. Mit prg_stat kann ein Programm dem Bildschirmschoner eine Mitteilung schicken:
0 | ganz normal schonen |
1 | sofort aufhören zu schonen |
-1 | sofort aktiv werden |
vec_stat (ab Version 1.01) ist ein Bitfeld, in dem der Status der einzelnen überwachten Vektoren eingetragen ist (Bit gesetzt=aktiv):
Bit | |
0 | Tastatur |
1 | Maus |
2 | Joystick |
3 | MIDI |
4 | Modem 1 |
5 | Modem 2 |
6 | Serial 1 |
7 | Serial 2 |
8-14 | Reserviert |
15 | Grafik in Menüzeile unterdrücken (Uhren) |
16 | AES-Grafikausgaben überwachen |
17,18 | Grafiküberwachung: |
00: Durchlassen | |
01: Unterdrücken | |
10: Überwachen (bei Grafik aufwachen) | |
11: reserviert | |
19,20 | Textüberwachung (GEMDOS und VDI); |
Bits entsprechend der Grafiküberwachung | |
21-31 | Reserviert |
Im Moment wird die Struktur noch nicht benötigt, es ist jedoch nicht ausgeschlossen, daß ObjectGEM später evtl. den XSSI-Cookie automatische beachtet und auswertet.
Deklaration
PIterationFunc = ^IterationProc; IterationFunc = function(p: pointer): boolean;
Beschreibung
Wird von FirstThat, LastThat und FirstWndThat als Standardtyp für die aufzurufende Funktion verwendet.
Deklaration
PIterationProc = ^IterationProc; IterationProc = procedure(p: pointer);
Beschreibung
Wird von ForEach und ForEachWnd als Standardtyp für die aufzurufende Prozedur verwendet.
Deklaration
PLongRec = ^LongRec; LongRec = record Hi,Lo: word end;
Beschreibung
Ein Hilfs-Record, der den Zugriff auf das höher- und niederwertige Wort eines longints ermöglicht.
Deklaration
PPipearray = ^Pipearray; Pipearray = ARRAY_8;
Beschreibung
Dies ist ein Array von 8 integer-Werten, das zur Speicherung einer GEM-Message verwendet wird. Für die Nachrichten existiert eine Konvention über die Belegung der einzelnen Felder:
[0] | Nachrichtennummer |
[1] | Nummer (apID) des Absenders |
[2] | Anzahl der Bytes, die noch nachträglich |
per appl_read() gelesen werden müssen | |
(siehe TApplication.MessageBuffer) |
Feld 2 enthält normalerweise eine Null. Die Belegung der anderen Felder hängt von der verschickten Nachricht ab.
Deklaration
PByteArray = ^TByteArray; TByteArray = array [0..maxlongint-1] of byte;
Beschreibung
Ein universeller Byte-Array-Typ; kann z.B. zum Typecasting bei Pointern verwendet werden.
Deklaration
PCharSet = ^TCharSet; TCharSet = set of char;
Beschreibung
Wird von TFilterValidator zur Speicherung der gültigen Zeichen verwendet.
Deklaration
PCookie = ^TCookie; TCookie = record ID: TCookieID; Val: longint end;
Beschreibung
Enthält einen kompletten CookieJar-Eintrag. Dieser besteht aus einer (hoffentlich) eindeutigen Kennung und einem Wert, der z.B. als Pointer auf eine zugehörige Struktur oder für eine Versionsnummer genutzt werden kann.
Der CookieJar nimmt eine Art programmspezifische "Systemvariablen" auf, die von vielen Tools installiert werden. Applikationen werten diese Variablen normalerweise nur aus.
Deklaration
PCookieID = ^TCookieID; TCookieID = array [0..3] of char;
Beschreibung
Dies ist der Datentyp für eine CookieJar-Kennung. Bei der Belegung sollte man folgendes beachten:
- Mit "_" beginnende Kennungen sind für Atari reserviert
- Die vier Buchstaben sollten "druckbar" sein, d.h. ASCII-Codes zwischen 32 und 126, keine nationalen Sonderzeichen!
- Die Buchstaben sollten eine Abkürzung ergeben, aus der man auf das zugehörige Programm schließen kann. Varianten der Wörter "Cookie", "Vector" u.ä. gehören nicht dazu!
Deklaration
PEventData = ^TEventData; TEventData = record Pipe : Pipearray; mX,mY : integer; BStat,KStat: integer; Key,Clicks : integer end;
Beschreibung
Dieser Record wird von TApplication.GetEvent und von allen von TApplication.MessageLoop aufgerufenen Methoden zur Datenübergabe genutzt. Er enthält alle wichtigen Rückgabewerte von evnt_multi().
Pipe nimmt eine komplette GEM-Message auf. In mX und mY wird die Mausposition, in BStat die gedrückte Maustaste (1=links, 2=rechts) und in Clicks die Anzahl der Mausklicks gespeichert. KStat enthält den Status der Umschalttasten, Key den eigentlichen Tastencode.
Je nach aufgetretenem Ereignis werden nicht immer alle Felder gleichzeitig gefüllt.
Deklaration
THandle = longint;
Beschreibung
THandle definiert einen generischen Handle-Typ. Wichtig: Unter ObjectWindows ist dieser als word deklariert!
Deklaration
PItemList = ^TItemList; TItemList = array [0..MaxCollectionSize-1] of pointer;
Beschreibung
Ein Array von generischen Zeigern, die intern von TCollection-Objekten verwendet werden. Im Gegensatz zu ObjectWindows können allerdings wesentlich mehr Elemente gespeichert werden!
MaxCollectionSize ist festgelegt als
const MaxCollectionSize = 536870911;
Deklaration
PPaintStruct = ^TPaintStruct; TPaintStruct = record fErase : boolean; feColor: HBrush; rcPaint: GRECT end;
Beschreibung
Diese Struktur wird von TWindow.WMRedraw ausgefüllt und von TWindow.Paint ausgewertet.
fErase gibt an, ob der Fensterhintergrund vor dem Aufruf der Paint-methode gelöscht wurde (d.h. Class.hbrBackground ist größer als Null). feColor enthält dann die entsprechende Farbe.
rcPaint ist das wohl wichtigste Feld, in ihm wird nämlich der neu zu zeichnende Bereich übergeben.
Deklaration
PRsFile = ^TRsFile; TRsFile = record case boolean of false: (rsh: RSHDR); true: (rsd: array [0..65535] of byte) end;
Beschreibung
Mit diesem Record kann entweder komfortabel auf den Header einer Resource-Datei oder aber auf jedes einzelne Byte dieser Datei zugegriffen werden. Der Header ist in der Unit Gem folgendermaßen deklariert:
RSHDRPtr = ^RSHDR; RSHDR = record rsh_vrsn : word; rsh_object : word; rsh_tedinfo: word; rsh_iconblk: word; rsh_bitblk : word; rsh_frstr : word; rsh_string : word; rsh_imdata : word; rsh_frimg : word; rsh_trindex: word; rsh_nobs : word; rsh_ntree : word; rsh_nted : word; rsh_nib : word; rsh_nbb : word; rsh_nstring: word; rsh_nimages: word; rsh_rssize : word end;
Die Struktur wird ObjectGEM-intern verwendet und braucht normalerweise anderweitig nicht verwendet werden.
Deklaration
PScrollBarTransferRec = ^TScrollBarTransferRec; TScrollBarTransferRec = record LowValue : longint; HighValue: longint; Position : longint end;
Beschreibung
Speichert den Bereich und die Position einer Bildlaufleiste (Slider). Wird für den Datentransfermechanismus verwendet.
Deklaration
PWordArray = ^TWordArray; TWordArray = array [0..1073741822] of word;
Beschreibung
Ein universeller Word-Array-Typ; kann z.B. zum Typecasting bei Pointern verwendet werden.
Deklaration
PXAccAttr = ^TXAccAttr; TXAccAttr = record Version, MsgGroups, Protocol : byte; AppTypeMR : TAppTypeMR; (s.u.) AppTypeHR, ExtFeatures, GenericName, Name : PString; apID, menuID : integer; AVSrvMsg, AVAccMsg : word; pXDSC : PChar end;
Beschreibung
Enthält die Beschreibung einer Applikation mit allen für das XAcc-Protokoll wichtigen Daten. Version bezeichnet die Programmversion und kann beliebig gesetzt werden. MsgGroups enthält eine Bitmap der verstandenen XAcc-Message-Groups. Bit 0 entspricht Gruppe 1 und umfaßt die Messages ACC_TEXT und ACC_KEY. Bit 1 entspricht Gruppe 2 mit den Messages ACC_META und ACC_IMG. Protocol ist eine Bitmap der unterstützten Protokolle, z.Z. können PROTO_XACC (Bit 0) und PROTO_AV (Bit 1) eingetragen sein.
In Name ist der (XAcc-)Name des Programms gespeichert, der nichts mit dem Dateinamen zu tun haben muß! apID und menuID geben AES-Kennung und die Nummer des Desk-Menüeintrags an.
AppTypeMR gibt den maschinenlesbaren Programmtyp an (s.u.), AppTypeHR den dazugehörigen "menschenlesbaren". Wenn AppTypeHR nicht angegeben ist, versucht ObjectGEM diesen aus AppTypeMR zu ermitteln.
ExtFeatures enthält zusätzliche Eigenschaften einer Applikation. Diese sind nicht genormt und können daher nur von Programmen ausgewertet werden, die sich gegenseitig "kennen".
GenericName gibt den sog. generischen Namen einer Applikation an. Dieser kann z.B. dann gesetzt werden, wenn Programme mit gleicher Funktionalität verschiedene Namen benutzen, aber irgendwie als zusammengehörig erkannt werden müssen.
pXDSC ist ein Zeiger auf die "Extended names" einer Applikation. Die Auswertung ist aber nur dann nötig, wenn mehr als ein "extended feature" benötigt wird, da ObjectGEM nur das erste Feature in ExtFeatures einträgt. Der genaue XDSC-Aufbau ist in der XAcc-Dokumentation beschrieben. Wenn keine "Extended names" vorhanden sind, ist pXDSC nil!
Folgende maschinenlesbaren Programmtypen sind bisher definiert:
WP | Textverarbeitung |
DP | DTP |
ED | Texteditor |
DB | Datenbank |
SS | Tabellenkalkulation |
RG | Rastergrafikprogramm |
VG | Vektorgrafikprogramm |
GG | allgemeines Grafikprogramm |
MU | Musikanwendung |
CD | CAD |
DC | Datenkommunikation |
DT | Desktop |
PE | Programmierumgebung |
AVSrvMsg und AVAccMsg werden für Applikationen benutzt, die das AV-Protokoll unterstützen. Je nachdem, ob der Record den Server oder ein anderes AV-Accessory beschreibt, ist der jeweils andere Wert Null. Die Bits in AVSrvMsg haben folgende Bedeutung (gesetztes Bit=Message wird verstanden):
Die Bits in AVAccMsg bedeuten folgendes:
1 | VA_SETSTATUS |
2 | VA_START |
Wenn eine Applikation nur das AV-Protokoll unterstützt, werden die XAcc-spezifischen Parameter ausgenullt; wenn beide Protokolle vorhanden sind, haben die Werte des XAcc-Protokolls Priorität (z.B. der Name).
TAppTypeMR ist definiert als
type PAppTypeMR = ^TAppTypeMR; TAppTypeMR = string[2];
Deklaration
PWordRec = ^WordRec; WordRec = record Hi,Lo: byte end;
Beschreibung
Ein Hilfs-Record, der den Zugriff auf das höher- und niederwertige Byte eines words ermöglicht.
Deklaration
PXBRA = ^XBRA; XBRA = record xb_magic : array [0..3] of char; xb_id : array [0..3] of char; xb_oldvec: pointer end;
Beschreibung
Speicherresidente, vektorverbiegende Programme setzen das sog. XBRA-Verfahren ein, um z.B. doppelte Installationen zu verhindern oder sich wieder deinstallieren zu können.
GEM-Applikationen werten diese Struktur, die unmittelbar vor der neuen Adresse des verbogenen Vektors zu finden ist, - wenn überhaupt - nur aus.
xb_magic muß die Zeichenkette "XBRA" ($58425241) enthalten. xb_id enthält die Kennung des verbiegenden Programms, die aus "druckbaren" ASCII-Zeichen bestehen sollte. In xb_oldvec schließlich ist der alte Vektor gespeichert.