home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari FTP
/
ATARI_FTP_0693.zip
/
ATARI_FTP_0693
/
Tex
/
td187src.lzh
/
MAGICAES.D
< prev
next >
Wrap
Text File
|
1991-06-08
|
21KB
|
627 lines
(*######################################################################
MAGIC Modula's All purpose GEM Interface Cadre
########################################################################
AES Application Environment Services Interface for Modula-2
########################################################################
V2.00 17.10.90 Peter Hellinger Anpassung an neues MagicSys
V1.03 26.09.90 Peter Hellinger Parameter überarbeitet
V1.02 28.06.90 Peter Hellinger Bug in OBJECT-Deklaration gefixt
V1.01 18.06.90 Peter Hellinger Xgrf-Aufrufe ergänzt
V1.00 (C) by Peter Hellinger
######################################################################*)
DEFINITION MODULE MagicAES;
FROM SYSTEM IMPORT ADDRESS;
FROM MagicSys IMPORT Nil, Null,
Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6, Bit7,
Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14, Bit15,
LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL, sBITSET,
lWORD, lINTEGER, lCARDINAL, lBITSET;
CONST MouseLeft = Bit0; (* Maustasten *)
MouseRight = Bit1;
TYPE AESGLOBAL = RECORD
apVersion: sCARDINAL;
apCount: sCARDINAL;
apId: sCARDINAL;
apPprivate: lCARDINAL;
apPtree: ADDRESS;
apPmem: ADDRESS;
apLmem: sCARDINAL;
apNplanes: sCARDINAL;
Reserved1: sCARDINAL;
Reserved2: sCARDINAL;
apBvdisk: sBITSET;
apBvhard: sBITSET;
END;
TYPE tControl = RECORD
opcode: sINTEGER;
sizeIntIn: sINTEGER;
sizeIntOut: sINTEGER;
sizeAddrIn: sINTEGER;
sizeAddrOut: sINTEGER;
END;
TYPE tIntIn = ARRAY [0..16] OF sINTEGER;
tIntOut = ARRAY [0.. 7] OF sINTEGER;
tAddrIn = ARRAY [0.. 2] OF ADDRESS;
tAddrOut = ARRAY [0.. 1] OF ADDRESS;
VAR AESControl: tControl;
AESGlobal: AESGLOBAL;
AESIntIn: tIntIn;
AESIntOut: tIntOut;
AESAddrIn: tAddrIn;
AESAddrOut: tAddrOut;
VAR AESPB: RECORD
cbControl: POINTER TO tControl;
cbPglobal: POINTER TO AESGLOBAL;
cbPintin: POINTER TO tIntIn;
cbPintout: POINTER TO tIntOut;
cbPadrin: POINTER TO tAddrIn;
cbPadrout: POINTER TO tAddrOut;
END;
VAR CallResult: sINTEGER;
PROCEDURE AESCall (op, c1, c2, c3, c4: sINTEGER): sINTEGER;
(*-- AES-Objc --------------------------------------------------------*)
CONST GBOX = 20;
GTEXT = 21;
GBOXTEXT = 22;
GIMAGE = 23;
GPROGDEF = 24;
GIBOX = 25;
GBUTTON = 26;
GBOXCHAR = 27;
GSTRING = 28;
GFTEXT = 29;
GFBOXTEXT = 30;
GICON = 31;
GTITLE = 32;
CONST SELECTABLE = Bit0;
DEFAULT = Bit1;
Exit = Bit2; (* EXIT ist reserviertes Wort... *)
EDITABLE = Bit3;
RBUTTON = Bit4;
LASTOB = Bit5;
TOUCHEXIT = Bit6;
HIDETREE = Bit7;
INDIRECT = Bit8;
CONST SELECTED = Bit0;
CROSSED = Bit1;
CHECKED = Bit2;
DISABLED = Bit3;
OUTLINED = Bit4;
SHADOWED = Bit5;
DRAW3D = Bit6;
WHITEBAK = Bit7;
CONST WHITE = 0; (* Farben *)
BLACK = 1;
RED = 2;
GREEN = 3;
BLUE = 4;
CYAN = 5;
YELLOW = 6;
MAGENTA = 7;
LWITHE = 8;
LBLACK = 9;
LRED = 10;
LGREEN = 11;
LBLUE = 12;
LCYAN = 13;
LYELLOW = 14;
LMAGENTA = 15;
TYPE BoxInfo = RECORD
char: CHAR; (* Bit 24..31 *)
frame: CHAR; (* Bit 16..23 *)
flags: sBITSET; (* Bit 0..15 *)
END;
TYPE TEDINFO = RECORD
tePtext: POINTER TO ARRAY [0..255] OF CHAR;
tePtmplt: POINTER TO ARRAY [0..255] OF CHAR;
tePvalid: POINTER TO ARRAY [0..255] OF CHAR;
teFont: sINTEGER;
teResvd1: sINTEGER;
teJust: sINTEGER;
teColor: sINTEGER;
teResvd2: sINTEGER;
teThickness: sINTEGER;
teTxtlen: sINTEGER;
teTmplen: sINTEGER;
END;
TYPE BITBLK = RECORD
biData: ADDRESS;
biWb: sINTEGER;
biHl: sINTEGER;
biX: sINTEGER;
biY: sINTEGER;
biColor: sINTEGER;
END;
TYPE PtrPARMBLK = POINTER TO PARMBLK;
PARMBLK = RECORD
pbTree: ADDRESS;
pbObj: sINTEGER;
prPrevstate: sBITSET;
prCurrstate: sBITSET;
pbX: sINTEGER;
pbY: sINTEGER;
pbW: sINTEGER;
pbH: sINTEGER;
pbXc: sINTEGER;
pbYc: sINTEGER;
pbWc: sINTEGER;
pbHc: sINTEGER;
pbParm: ADDRESS;
END;
TYPE USERBLK = RECORD
ubCode: PROC;
ubPara: PtrPARMBLK;
END;
TYPE ICONBLK = RECORD
ibPmask: ADDRESS;
ibPdata: ADDRESS;
ibPtext: ADDRESS;
ibChar: sINTEGER;
ibXchar: sINTEGER;
ibYchar: sINTEGER;
ibXicon: sINTEGER;
ibYicon: sINTEGER;
ibWicon: sINTEGER;
ibHicon: sINTEGER;
ibXtext: sINTEGER;
ibYtext: sINTEGER;
ibWtext: sINTEGER;
ibHtext: sINTEGER;
ibResvd: sINTEGER;
END;
TYPE OBJECT = RECORD
obNext: sINTEGER;
obHead: sINTEGER;
obTail: sINTEGER;
obType: sINTEGER;
obFlags: sBITSET;
obState: sBITSET;
CASE : sCARDINAL OF
0: obSpec: ADDRESS;|
1: Box: BoxInfo;| (* Kein Pointer, steht direkt im Langwort! *)
2: TedPtr: POINTER TO TEDINFO;|
3: StringPtr: POINTER TO ARRAY [0..255] OF CHAR;|
4: ImagePtr: POINTER TO BITBLK;|
5: UserDefPtr: POINTER TO USERBLK;|
6: IconPtr: POINTER TO ICONBLK;|
END;
obX: sINTEGER;
obY: sINTEGER;
obWidth: sINTEGER;
obHeight: sINTEGER;
END;
PROCEDURE ObjcAdd (tree: ADDRESS; parent, child: sINTEGER);
PROCEDURE ObjcDelete (tree: ADDRESS; object: sINTEGER);
PROCEDURE ObjcDraw (tree: ADDRESS; start, depth: sINTEGER; pxy: ARRAY OF LOC);
PROCEDURE ObjcFind (tree: ADDRESS; start, depth, x, y: sINTEGER): sINTEGER;
PROCEDURE ObjcOffset (tree: ADDRESS; object: sINTEGER; VAR x, y: sINTEGER);
PROCEDURE ObjcOrder (tree: ADDRESS; object, newpos: sINTEGER);
CONST EDSTART = 0;
EDINIT = 1;
EDCHAR = 2;
EDEND = 3;
PROCEDURE ObjcEdit (tree: ADDRESS; object: sINTEGER; VAR pos: sINTEGER;
char, kind: sINTEGER);
PROCEDURE ObjcChange (tree: ADDRESS; object: sINTEGER; pxy: ARRAY OF LOC;
state: sBITSET; mode: sINTEGER);
(*-- AES-Appl --------------------------------------------------------*)
CONST Timer = Bit0;
Button = Bit1;
Mouse = Bit2;
Keyboard = Bit3;
TYPE RecordEntry = RECORD
kind: lBITSET; (* Siehe Timer .. Keyboard *)
event: lCARDINAL;
END;
PROCEDURE ApplInit (): sINTEGER;
PROCEDURE ApplRead (id, len: sINTEGER; VAR pipe: ARRAY OF LOC);
PROCEDURE ApplWrite (id, len: sINTEGER; VAR pipe: ARRAY OF LOC);
PROCEDURE ApplFind (name: ARRAY OF CHAR): sINTEGER;
PROCEDURE ApplTplay (num, speed: sINTEGER; VAR buffer: ARRAY OF LOC);
PROCEDURE ApplTrecord (count: sINTEGER; VAR buffer: ARRAY OF LOC): sINTEGER;
PROCEDURE ApplBvset (disk, hard: sBITSET);
PROCEDURE ApplYield;
PROCEDURE ApplExit;
(*-- AES-Evnt --------------------------------------------------------*)
CONST KRSHIFT = Bit0; (* Tastatur-Status *)
KLSHIFT = Bit1;
KCTRL = Bit2;
KALT = Bit3;
KCAPS = Bit4; (* Für AES undokumentiert! *)
PROCEDURE EvntKeybd (VAR taste, scan: sINTEGER; VAR ascii: CHAR);
PROCEDURE EvntButton (maxclicks: sINTEGER;
mask, state: sBITSET;
VAR x, y: sINTEGER;
VAR button, kbshift: sBITSET): sINTEGER;
CONST EnterRect = 0;
LeaveRect = 1;
PROCEDURE EvntMouse (mode: sINTEGER; VAR m1rect: ARRAY OF LOC;
VAR x, y: sINTEGER; VAR button, kbshift: sBITSET);
CONST MNSELECTED = 10; (* Eventmessages *)
WMREDRAW = 20;
WMTOPPED = 21;
WMCLOSED = 22;
WMFULLED = 23;
WMARROWED = 24;
WAUPPAGE = 0;
WADNPAGE = 1;
WAUPLINE = 2;
WADNLINE = 3;
WALFPAGE = 4;
WARTPAGE = 5;
WALFLINE = 6;
WARTLINE = 7;
WMHSLID = 25;
WMVSLID = 26;
WMSIZED = 27;
WMMOVED = 28;
WMNEWTOP = 29;
WMUNTOPPED = 30;
ACOPEN = 40;
ACCLOSE = 41;
CTUPDATE = 50;
CTMOVE = 51;
CTNEWTOP = 52;
PROCEDURE EvntMesag (VAR buffer: ARRAY OF LOC);
PROCEDURE EvntTimer (count: lCARDINAL);
CONST MUKEYBD = Bit0; (* Event-Typen *)
MUBUTTON = Bit1;
MUM1 = Bit2;
MUM2 = Bit3;
MUMESAG = Bit4;
MUTIMER = Bit5;
PROCEDURE EvntMulti (wich: sBITSET;
maxclicks: sINTEGER;
mask, state: sBITSET;
m1mode: sINTEGER;
m1rect: ARRAY OF LOC;
m2mode: sINTEGER;
m2rect: ARRAY OF LOC;
VAR msgBuff: ARRAY OF LOC;
loTimer, hiTimer: sINTEGER;
VAR x, y: sINTEGER;
VAR button: sBITSET;
VAR taste: sINTEGER;
VAR kbshift: sBITSET;
VAR scan: sINTEGER;
VAR ascii: CHAR;
VAR clicks: sINTEGER): sBITSET;
PROCEDURE EvntPmulti (): sBITSET;
(* Gemä₧ der Anregung im Profibuch wird dieses zusätzliche Binding angeboten.
* Dabei mu₧ man selbst die benötigten Parameter in die IntIn- und AddrIn-
* Array schreiben und nach Aufruf der Funktion auch den IntOut-Array
* auswerten. Dieses Vorgehen spart in der Regel Zeit, da die ganzen Para-
* meter von EvntMulti gar nicht erst auf den Stack gepackt werden müssen.
*
* Ein undokumentiertes Feature ist, da₧ man nicht alle Parameter setzen mu₧,
* wenn man nur auf zwei oder drei Events wartet.
*)
PROCEDURE EvntDclicks (new: sINTEGER; set: BOOLEAN): sINTEGER;
(*-- AES-Form -----------------------------------------------------------*)
PROCEDURE FormDo (tree: ADDRESS; start: sINTEGER): sINTEGER;
CONST FMDSTART = 0;
FMDGROW = 1;
FMDSHRINK = 2;
FMDFINISH = 3;
PROCEDURE FormDial (flag: sINTEGER; small, big: ARRAY OF LOC);
PROCEDURE FormAlert (button: sINTEGER; string: ARRAY OF CHAR): sINTEGER;
PROCEDURE FormError (errNum: sINTEGER);
PROCEDURE FormCenter (tree: ADDRESS; VAR rect: ARRAY OF LOC);
PROCEDURE FormKeybd (tree: ADDRESS; object, chin: sINTEGER;
VAR nextObj, chout: sINTEGER): sINTEGER;
PROCEDURE FormButton (tree: ADDRESS; object, clicks: sINTEGER;
VAR next: sINTEGER): sINTEGER;
(*-- AES-FSel -----------------------------------------------------------*)
PROCEDURE FselInput (VAR pfad, name: ARRAY OF CHAR): BOOLEAN;
PROCEDURE FselExinput (VAR info, pfad, name: ARRAY OF CHAR): BOOLEAN;
(*-- AES-Graf -----------------------------------------------------------*)
PROCEDURE GrafRubberbox (x, y, mw, mh: sINTEGER; VAR lw, lh: sINTEGER);
PROCEDURE GrafDragbox (moving, boundary: ARRAY OF LOC; VAR x, y: sINTEGER);
PROCEDURE GrafMovebox (rect: ARRAY OF LOC; dx, dy: sINTEGER);
PROCEDURE GrafGrowbox (source, dest: ARRAY OF LOC);
PROCEDURE GrafShrinkbox (source, dest: ARRAY OF LOC);
PROCEDURE GrafWatchbox (tree: ADDRESS; item: sINTEGER;
in, out: sBITSET): sINTEGER;
CONST Horizontal = 0;
Vertical = 1;
PROCEDURE GrafSlidebox (tree: ADDRESS; parent, object: sINTEGER;
dir: sINTEGER): sINTEGER;
PROCEDURE GrafHandle (VAR handle, wCh, hCh, wbox, hbox: sINTEGER);
CONST ARROW = 0;
TEXTCRSR = 1;
BUSYBEE = 2;
POINTHAND = 3;
FLATHAND = 4;
THINCROSS = 5;
THICKCROSS = 6;
OUTLCROSS = 7;
USERDEF = 255;
MOFF = 256;
MON = 257;
PROCEDURE GrafMouse (form: sINTEGER; user: ADDRESS);
PROCEDURE GrafMkstate (VAR x, y: sINTEGER; VAR button, kbshift: sBITSET);
(*-- AES-Menu -----------------------------------------------------------*)
CONST Reset = 0;
Set = 1;
PROCEDURE MenuBar (tree: ADDRESS; action: sINTEGER);
PROCEDURE MenuIcheck (tree: ADDRESS; item, action: sINTEGER);
PROCEDURE MenuIenable (tree: ADDRESS; item, action: sINTEGER);
PROCEDURE MenuTnormal (tree: ADDRESS; item, action: sINTEGER);
(* Aus welchen Gründen auch immer: Bei action sind reset und set vertauscht *)
PROCEDURE MenuText (tree: ADDRESS; item: sINTEGER; str: ARRAY OF CHAR);
PROCEDURE MenuRegister (apid: sINTEGER; str: ARRAY OF CHAR);
PROCEDURE MenuUnregister (apid: sINTEGER);
(*-- AES-Rsrc -----------------------------------------------------------*)
PROCEDURE RsrcLoad (name: ARRAY OF CHAR): BOOLEAN;
PROCEDURE RsrcFree;
CONST RTREE = 0;
ROBJECT = 1;
RTEDINFO = 2;
RICONBLK = 3;
RBITBLK = 4;
RSTRING = 5;
RIMAGEDATA = 6;
ROBSPEC = 7;
RTEPTEXT = 8;
RTEPTMPLT = 9;
RTEPVALID = 10;
RIBPMASK = 11;
RIBPDATA = 12;
RIBPTEXT = 13;
RBIDATA = 14;
RFRSTR = 15;
RFRIMG = 16;
PROCEDURE RsrcGaddr (type, item: sINTEGER): ADDRESS;
PROCEDURE RsrcSaddr (type, item: sINTEGER; tree: ADDRESS);
PROCEDURE RsrcObfix (tree: ADDRESS; object: sINTEGER);
(*-- AES-Scrp -----------------------------------------------------------*)
CONST scCSV = Bit0;
scTXT = Bit1;
scGEM = Bit2;
scIMG = Bit3;
scDCA = Bit4;
scUSR = Bit5;
PROCEDURE ScrpRead (VAR pfad: ARRAY OF CHAR): sBITSET;
(* Funktioniert nicht mit GEM 1.0, maybe auf dem TT??? *)
PROCEDURE ScrpWrite (pfad: ARRAY OF CHAR);
PROCEDURE ScrpClear;
(*-- AES-Shel -----------------------------------------------------------*)
PROCEDURE ShelRead (VAR command, path: ARRAY OF CHAR);
CONST NoProg = 0;
NewProg = 1;
CONST NoGraphic = 0;
Graphic = 1;
CONST Now = 0;
End = 1;
PROCEDURE ShelWrite (exec, appl, start: sINTEGER; command, path: ARRAY OF CHAR);
PROCEDURE ShelGet (len: sINTEGER; VAR buffer: ARRAY OF LOC);
PROCEDURE ShelPut (len: sINTEGER; VAR buffer: ARRAY OF LOC);
PROCEDURE ShelFind (VAR name: ARRAY OF CHAR);
PROCEDURE ShelEnvrn (VAR param: ARRAY OF CHAR; name: ARRAY OF CHAR);
PROCEDURE ShelRdef (command, path: ARRAY OF CHAR);
PROCEDURE ShelWdef (command, path: ARRAY OF CHAR);
(*-- AES-Wind -----------------------------------------------------------*)
CONST NAME = Bit0;
CLOSER = Bit1;
FULL = Bit2;
MOVE = Bit3;
INFO = Bit4;
Size = Bit5; (* SIZE ist reserviertes Wort *)
UPARROW = Bit6;
DNARROW = Bit7;
VSLIDE = Bit8;
LFARROW = Bit9;
RTARROW = Bit10;
HSLIDE = Bit11;
HOTCLOSEBOX = Bit12; (* Was immer das auch ist... *)
PROCEDURE WindCreate (comp: sBITSET; size: ARRAY OF LOC): sINTEGER;
PROCEDURE WindOpen (handle: sINTEGER; size: ARRAY OF LOC);
PROCEDURE WindClose (handle: sINTEGER);
PROCEDURE WindDelete (handle: sINTEGER);
CONST WFRESVD1 = 1;
WFNAME = 2;
WFINFO = 3;
WFWORKXYWH = 4;
WFCURRXYWH = 5;
WFPREVXYWH = 6;
WFFULLXYWH = 7;
WFHSLIDE = 8;
WFVSLIDE = 9;
WFTOP = 10;
WFFIRSTXYWH = 11;
WFNEXTXYWH = 12;
WFRESVD13 = 13;
WFNEWDESK = 14;
WFHSLSIZE = 15;
WFVSLSIZE = 16;
WFSCREEN = 17;
WFATTRIB = 18;
WFSIZTOP = 19;
PROCEDURE WindGet (handle, typ: sINTEGER; VAR para: ARRAY OF LOC);
PROCEDURE WindSet (handle, typ: sINTEGER; para: ARRAY OF LOC);
PROCEDURE WindFind (x, y: sINTEGER): sINTEGER;
CONST ENDUPDATE = 0;
BEGUPDATE = 1;
ENDMCTRL = 2;
BEGMCTRL = 3;
PROCEDURE WindUpdate (mode: sINTEGER);
CONST WCBORDER = 0;
WCWORK = 1;
PROCEDURE WindCalc (mode: sINTEGER; comp: sBITSET; VAR in, out: ARRAY OF LOC);
PROCEDURE WindNew;
(*--- AES-XGraf ---------------------------------------------------------*)
PROCEDURE XgrfStepcalc (ow, oh, x, y, w, h: sINTEGER;
VAR cx, cy, count, xstep, ystep: sINTEGER);
PROCEDURE Xgrf2box (xc, yc, wc, hc, corners, count, xstep, ystep, doubled: sINTEGER);
END MagicAES.