/*
area.c original C code by Thomas Rapp
area.e by ghh 2022
*/
OPT PREPROCESS ->potreba pro makro RASSIZE v graphics/gfx.m
MODULE 'exec/ports','exec/memory'
MODULE 'dos/dos','utility/tagitem'
MODULE 'graphics/gfx','graphics/rastport'
MODULE 'intuition/intuition'
CONST MAXVEC = 10 /* maximale Anzahl Area-Funktionsaufrufe */
PROC main()
DEF win:PTR TO window
DEF port:PTR TO mp
DEF mess:PTR TO intuimessage
DEF weiter
DEF rp:PTR TO rastport
DEF tmpras:tmpras /* TmpRas-Struktur */
DEF tmpbuf:PTR TO CHAR /* Puffer für TmpRas */
DEF rassize /* Größe des TmpRas-Puffer */
DEF areainfo:areainfo /* AreaInfo-Struktur */
DEF areabuf:PTR TO CHAR /* Puffer für AreaInfo */
win:= OpenWindowTagList(NIL,
[WA_Left,400,WA_Top,300,
WA_InnerWidth, 100,
WA_InnerHeight, 100,
WA_Title,'Fenster',
WA_Flags,WFLG_CLOSEGADGET OR WFLG_DRAGBAR OR WFLG_DEPTHGADGET OR
WFLG_ACTIVATE OR WFLG_GIMMEZEROZERO OR WFLG_NOCAREREFRESH,
WA_IDCMP,IDCMP_CLOSEWINDOW OR IDCMP_VANILLAKEY,
TAG_END])
IF (win)
rp:= win.rport
rassize:= RASSIZE(win.gzzwidth,win.gzzheight)
tmpbuf:= AllocVec(rassize,MEMF_CHIP OR MEMF_CLEAR) /* Puffer für TmpRas anlegen */
IF (tmpbuf)
InitTmpRas(tmpras,tmpbuf,rassize) /* TmpRas initialisieren */
rp.tmpras:= tmpras /* und in RastPort eintragen */
ENDIF
areabuf:= AllocVec(5*MAXVEC,MEMF_CLEAR) /* Puffer für AreaInfo anlegen */
IF (areabuf) /* (5 Bytes pro Area-Funktionsaufruf) */
InitArea(areainfo,areabuf,MAXVEC) /* AreaInfo initialisieren */
rp.areainfo:= areainfo /* und in RastPort eintragen */
ENDIF
SetAPen(rp,2) /* Farbe setzten (Stift 2 ist meistens weiß) */
AreaMove(rp,10,50) /* Startecke setzen */
AreaDraw(rp,50,10) /* Nächste Ecke setzen */
AreaDraw(rp,90,50)
AreaDraw(rp,50,90)
AreaEnd(rp) /* Area abschließen und füllen */
/* die Linie zum Startpunkt wird automatisch ergänzt */
/* Zum Vergleich: den Rahmen mit Linien nachziehen */
SetAPen(rp,1) /* Stift 1 = schwarz */
Move(rp,10,50)
Draw(rp,50,10)
Draw(rp,90,50)
Draw(rp,50,90)
Draw(rp,10,50) /* Diesmal muß die letzte Linie mitgezeichnet werden */
port:= win.userport
weiter:= TRUE
WHILE (weiter)
WaitPort(port)
mess:= GetMsg(port)
WHILE (mess)
SELECT (mess.class)
CASE IDCMP_CLOSEWINDOW
weiter:= FALSE
CASE IDCMP_VANILLAKEY
IF (mess.code = $1b)
weiter:= FALSE
ENDIF
ENDSELECT
ReplyMsg(mess)
mess:= GetMsg(port)
ENDWHILE
EXIT weiter = FALSE
ENDWHILE
IF (tmpbuf)
rp.tmpras:= NIL /* TmpRas aus RastPort entfernen */
FreeVec(tmpbuf) /* Puffer freigeben */
ENDIF
IF (areabuf)
rp.areainfo:= NIL /* AreaInfo aus RastPort entfernen */
FreeVec(areabuf) /* Puffer freigeben */
ENDIF
CloseWindow(win)
ELSE
WriteF('Konnte Fenster nicht öffnen !\n')
RETURN RETURN_FAIL
ENDIF
ENDPROC RETURN_OK
|