&d2D Entwicklerinformationen zu MegaPaint Professional Version 3.00 &d@

&d1D Externe Module &d@

MegaPaint Professional untersttzt ab der Version 3.00 externe Module. Dies
sind eigenstndige Programme, die aus MegaPaint aufgerufen werden und
direkten Zugriff auf die wichtigsten Variablen und smtliche Datenbereiche
von MegaPaint haben. Der Aufbau der hierzu notwendigen Informations- und
Programmdateien wird beispielhaft anhand der mitgelieferten Sourcecodes
(MAKE_MOD.PAS, MEGA_01.PAS) erlutert.

Um zu ermglichen, da MegaPaint ein Modul aufrufen kann, mssen die dazu-
gehrige Informations- und Programmdatei vor dem Start des Programms in den
Ordner MODUL im MEGPAINT-Ordner kopiert werden.

Ein Modul besteht aus zwei Dateien:

&d1D MEGA_??.MOD - Die Informationsdatei &d@

In dieser Datei befinden sich alle Informationen, die das Hauptprogramm ber
das Modul besitzen mu. Die Datei hat folgende (Pascal-)Struktur:
(s3B
  kennung:string[7];                  - $07 4d 4f 44 20 33 2e 30 = 'MOD 3.0'
   memory:long_integer;               - Fr das Modul bentigter Speicher
     name:string[31];                 - Namenseintrag im Men
      anz:integer;                    - Anzahl bentigter Dateinamen (0..8)
    files:array[0..7]of string[7];    - Endungen fr die Dateinamen
    types:array[0..7]of integer;      - Typen fr die Dateinamen
    texts:array[0..7]of string[127];  - berschriften fr GET_FILENAME
      num:integer;                    - Reserviert, beliebig
(s0B
(s1S- Memory(s0S

MEMORY gibt die Gre des fr das Modul bentigten Arbeitsspeichers an. Sind
mehrere Module vorhanden, hlt MegaPaint das Maximum der verschiedenen Memory-
Werte frei.

(s1S- Name(s0S

NAME ist die Bezeichnung des Moduls, die in MegaPaint im Untermen zur Funktion
EXTERNES MODUL erscheint (z.B. 'Konverter VEK <-> HPGL').

(s1S- Anz(s0S

ANZ gibt die Anzahl an Dateinamen an, die MegaPaint vor dem Aufruf des Moduls
abfragen und an dieses bergeben soll. Dies wurde ermglicht, damit nicht jedes
Modul die Dateiauswahlbox selbst implementieren mu. Es knnen maximal 8 Datei-
namen angefordert werden.

(s1S- Files(s0S

FILES gibt fr jeden der Dateinamen die Endung an, die in der Dateiauswahlbox
benutzt werden soll (z.B. '.VEK' oder '.GEM', siehe TYPES).

(s1S- Types(s0S

TYPES gibt fr jeden der Dateinamen den Dateityp an. Es gibt dabei drei Mglich-
keiten:

  0 - Beliebige Endung
  1 - Gegebene Endung vorgeschrieben, wird wenn ntig angehngt
  2 - Endung *.BLD oder *.BL1 vorgeschrieben
(s1S- Texts(s0S

TEXTS gibt fr jeden der Dateinamen die berschrift an, die in der Dateiaus-
wahlbox verwendet werden soll. Die Lnge sollte 48 Zeichen nicht berschreiten.

&d1D MEGA_??.PRG - Die Programmdatei &d@

Diese Datei ist das eigentliche Modul. Es mu sich hierbei immer um eine GEM-
Programmdatei mit der Endung *.PRG handeln. Sollte dieses Modul eine eigene
GEM-Menzeile benutzen, so ist diese vor der Rckkehr ins Hauptprogramm unbe-
dingt abzumelden!

Beim Aufruf des Moduls bleibt der Bildschirm unverndert, d.h. er zeigt den
MegaPaint-Schreibtisch, entweder den des Vektorteils oder den des Rasterteils.
Der Bildschirm kann vom Modul beliebig verndert werden, jedoch darf in keinem
Fall der Inhalt der zur Verfgung gestellten Maus- und Konstantenblcke vern-
dert werden! 
Die Maus ist eingeschaltet und als Diskette dargestellt. Nach der Rckkehr aus
dem Modul wird der Bildschirm komplett neu aufgebaut, der Mauszeiger wird neu
initialisiert.

Das Modul sollte als Rckgabewert (per PTERM) eine Null zurckgeben, wenn es
korrekt ausgefhrt werden konnte, oder eine der Standard-GEMDOS-Meldungen
(z.B. -39 = Nicht gengend Speicher).

Das Programm wird von MegaPaint aus mit einer Kommandozeile aufgerufen, die
wie folgt aussieht: 'MP 0000000000'. Die zehn Nullen stehen fr eine zehn-
stellige OCTAL-Zahl, die die Adresse eines Datenblockes angibt, in dem nhere
Informationen zum Status von MegaPaint, sowie die Adressen einiger wichtiger
Routinen abgefragt werden knnen. Dieser Datenblock hat folgende (Pascal-)
Struktur:
(s3B
  kennung:string[7];            - $07 50 52 47 20 33 2e 30 = 'PRG 3.0'
    maus1:long_integer;         - Startadresse des Mausdatenblockes 1
    maus2:long_integer;         - Startadresse des Mausdatenblockes 2
    maus3:long_integer;         - Startadresse des Mausdatenblockes 3
   block1:long_integer;         - Startadresse des Konstantenblockes 1
   block2:long_integer;         - Startadresse des Konstantenblockes 2
   block3:long_integer;         - Startadresse des Konstantenblockes 3
      pat:long_integer;         - Adresse der Fll- und Linienmuster
    names:long_integer;         - Adresse der bergebenen Dateinamen
(s0B
(s1S- Maus 1 ... Maus 3(s0S

Diese Zeiger zeigen auf drei Mausbeschreibungsblcke, die direkt an GRAF_MOUSE
(AES 78) bergeben werden knnen. Es sind folgende Formen vorhanden:

  Maus 1 - Sanduhr
  Maus 2 - Diskette
  Maus 3 - Drucker

Diese Mausformen sollten nach Mglichkeit quivalent zu MegaPaint weiterver-
wendet werden.

(s1S- Block 1(s0S
(s3B
window_x1 ds.w    1     ;Obere linke Ecke des Arbeitsfensters
window_y1 ds.w    1     ;
window_x2 ds.w    1     ;Untere rechte Ecke des Arbeitsfensters
window_y2 ds.w    1     ;
window_xb ds.w    1     ;Breite des Fensters in Bytes
window_xl ds.w    1     ;Breite des Fensters in Langworten
window_xs ds.w    1     ;Breite des Fensters in Pixeln
window_ys ds.w    1     ;Hhe des Fensters in Pixeln
                        ;
scr_dx    ds.w    1     ;Bildschirmbreite in Pixeln
scr_dy    ds.w    1     ;Bildschirmhhe in Pixeln
scr_byte  ds.w    1     ;Bildschirmbreite in Bytes
                        ;
line_a    ds.l    1     ;Zeiger auf LINE A Parameterblock

(s0B
(s1S- Block 2(s0S
(s3B
sv      ds.l    1   ;Zeiger auf ersten 32K-Puffer
sv2     ds.l    1   ;Zeiger auf zweiten 32K-Puffer
scr     ds.l    1   ;Zeiger auf Bildschirm
scr2    ds.l    1   ;Zeiger auf obere linke Ecke des Arbeitsfensters
scr3    ds.l    1   ;Zeiger auf Minilupe
zp      ds.l    1   ;Zeiger auf Zeichensatzdaten

pp      ds.l    1   ;Zeiger auf aktuelles Bild
pics    ds.l    4   ;Zeiger auf maximal vier Bilder
bp      ds.l    1   ;Zeiger auf den Puffer

vekanf  ds.l    1   ;Zeiger auf Vektordatenfeld
vekakt  ds.l    1   ;Zeiger aktuelles Vektordatenende
vekend  ds.l    1   ;Zeiger absolutes Vektordatenende

zchs    ds.l    8   ;Zeiger auf maximal acht Zeichenstze
zchakt  ds.l    1   ;Zeiger aktuelles Zeichensatzende
zchend  ds.l    1   ;Zeiger absolutes Zeichensatzende

syms    ds.l    8   ;Zeiger auf maximal acht Symboltabellen
symakt  ds.l    1   ;Zeiger aktuelles Rastersymbolende
symend  ds.l    1   ;Zeiger absolutes Rastersymbolende

v_syms    ds.l  8   ;Zeiger auf maximal acht Symboltabellen
v_symakt  ds.l  1   ;Zeiger aktuelles Vektorsymbolende
v_symend  ds.l  1   ;Zeiger absolutes Vektorsymbolende
(s0B
Die Speicherblcke SV und SV2 werden in MegaPaint z.B. als Bildschirmspeicher
bei der Fensterverwaltung oder als Cache verwendet. Sie knnen vom Modul be-
nutzt und beliebig verndert werden.

Die Werte von VEKAKT, ZCHAKT, SYMAKT und V_SYMAKT drfen gendert werden,
ebenso der Inhalt dieser Datenbereiche. Es mu aber garantiert werden, da
diese nderungen mit den jeweiligen Datenformaten konform gehen.

SCR zeigt auf das oberste linke Byte des Bildschirms, SCR2 zeigt auf das oberste
linke Byte des Bildausschnittes.

ZP zeigt auf die Zeichensatzdaten. Es liegen drei Zeichenstze a 256 Zeichen
vor. Jeweils 16 aufeinanderfolgende Bytes ergeben ein Zeichen. Der erste Satz
ist Normal, der zweite (s3BFett(s0B und der dritte (s1SKursiv(s0S.

Bei den Zeigern auf Bilder (PICS) und auf Vektorsymbole (V_SYMS) knnen einzelne
Zeiger nicht initialisiert sein, sie haben dann den Wert $00000000.

Das speicherinterne Format von Zeichenstzen und beiden Symboldateien ist iden-
tisch mit dem Dateiformat (inklusive des Headers!). Die Rasterbilder bestehen nur
aus den Daten, die Vektorobjekte besitzen keinen Header, sondern fangen sofort
mit dem ersten Objekt an.

(s1S- Block 3(s0S
(s3B
total.8   ds.l  1   ;Bentigter Speicher fr ein Bild

len.8     ds.l  1   ;Bildgre  in Bytes
len.32    ds.l  1   ;Bildgre  in Langworten
xmax      ds.w  1   ;Bildbreite in Pixeln-1
xsize     ds.w  1   ;Bildbreite in Pixeln
xsize.8   ds.w  1   ;Bildbreite in Bytes-1
xsize.16  ds.w  1   ;Bildbreite in Worten-1
xsize.32  ds.w  1   ;Bildbreite in Langworten-1
xbyte     ds.w  1   ;Bildbreite in Bytes
xbyte2    ds.w  1   ;Bildbreite in Bytes*2
xword     ds.w  1   ;Bildbreite in Worten
xlong     ds.w  1   ;Bildbreite in Langworten
ymax      ds.w  1   ;Bildhhe   in Pixeln-1
ysize     ds.w  1   ;Bildhhe   in Pixeln

blen.32   ds.l  1   ;Puffergre in Langworten
blkmax    ds.w  1   ;Pufferhhe  in Pixeln-1
blklen    ds.w  1   ;Pufferhhe  in Pixeln
(s0B

(s1S- Pat(s0S

PAT zeigt auf eine Datenfeld mit den Fll- und Linienmustern von MegaPaint. Das
Datenfeld hat das gleiche Format wie das zugehrige Dateiformat (inklusive
Header!).

(s1S- Names(s0S

NAMES zeigt auf ein Feld von maximal 8 Strings, jeder String ist 128 Bytes
lang. Diese Strings sind die angeforderten Dateinamen, die in MegaPaint mit
Hilfe der dortigen Dateiauswahlbox eingegeben wurden. Die Anzahl der Strings
hngt von der angeforderten Anzahl ab (siehe MEGA_??.MOD).


&d1D Die Installation der Module &d@

Alle vorhandenen Module werden in den Ordner MODUL im Ordner MEGPAINT kopiert.
Die Programmdatei eines Moduls heit standardmig 'MEGA_01.PRG', die dazuge-
hrige Informationsdatei heit 'MEGA_01.MOD'. Wenn mehr als ein Modul verwendet
werden soll, mssen einige Module umbenannt werden. Dazu wird bei allen Dateien
eines Moduls die Ziffer 01 in eine andere zweistellige Ziffer zwischen 01 und
99 einschlielich gendert.

Im Ordner MODUL erkennt MegaPaint beim Starten die Module und reiht sie in das
Untermen ein. Auerdem wird soviel Speicher freigehalten, wie fr das grte
Modul bentigt wird. Dies ist meist ein sehr kleiner Wert, da das Programm alle
Speicherbereiche und Daten von MegaPaint weiterbenutzen kann.


(s1SAugust 1990(s0S

