/* anim --- animate a gadget... Thuy (my girlfriend.device) insists this means "animal." I don't know why */ #include #include "stuff.h" #ifndef POPLITE #include "anim.h" #endif #define gadgedata(g) (((struct Image *) (g->GadgetRender))->ImageData) #define BIGDATA (save2SIZE*2) #define swilldefault 5 extern struct Window * win ; extern ULONG msgclass ; extern USHORT msgcode ; extern int gadcode ; extern struct RastPort * reep ; extern struct Gadget TGads [] ; struct Image vop = { 0, 0, 32, 24, 5, NL, 0x1f, 0, NL }; #ifndef POPLITE struct Image animage = { 0, 0, 32, 24, 5, NL, 0x1f, 0, NL }; static struct Gadget *gogo; static long swill = swilldefault; #endif anim (gaga) struct Gadget *gaga; { #ifndef POPLITE REG int zot; animage.ImageData = AllocMem ( BIGDATA, MEMF_CHIP | MEMF_PUBLIC ); ifn (animage.ImageData) { ALERT ("Low Chip Mem! Look out!"); RET; } gogo = gaga; if (gaga == &TGads [7]) { swill = 4; animage.Height = 20; animage.Width = 32; loop (zot = 3; --zot;) popanim (ni_clon2), popanim (gadgedata (gaga)); swill = 5; } /* animate block */ if (gaga == &TGads [3]) { animage.Height = 24; animage.Width = 32; loop (zot = 4; zot--;) { popanim (new1); popanim (new2); popanim (new3); } swill = 1; popanim (gadgedata (gaga)); } /* animate block */ if (gaga == &TGads [10]) { animage.Height = ni_inc1HITE; animage.Width = ni_inc1WIDT; animage.TopEdge = 3; animage.LeftEdge = 3; swill = 6; popanim (ni_inc1 ); popanim (ni_inc2 ); popanim (ni_inc3 ); popanim (ni_inc4 ); popanim (ni_inc5 ); popanim (ni_inc6 ); popanim (ni_inc7 ); popanim (ni_inc8 ); popanim (ni_inc9 ); popanim (ni_inc10); animage.Height = 26; animage.Width = 38; animage.LeftEdge = 0; animage.TopEdge = 0; swill = 1; popanim (gadgedata (gaga)); } if (gaga == &TGads [6]) { animage.Height = ni_ld1HITE; animage.Width = ni_ld1WIDT; animage.TopEdge = 5; animage.LeftEdge = 3; swill = 8; popanim (ni_ld1 ); swill = 2; popanim (ni_ld2 ); popanim (ni_ld3 ); popanim (ni_ld2 ); popanim (ni_ld3 ); popanim (ni_ld4 ); popanim (ni_ld3 ); popanim (ni_ld4 ); popanim (ni_ld5 ); popanim (ni_ld6 ); popanim (ni_ld3 ); popanim (ni_ld4 ); popanim (ni_ld6 ); popanim (ni_ld4 ); popanim (ni_ld7 ); popanim (ni_ld5 ); popanim (ni_ld6 ); popanim (ni_ld7 ); swill = 8; popanim (ni_ld8 ); animage.Height = 26; animage.Width = 38; animage.LeftEdge = 0; animage.TopEdge = 0; swill = 1; popanim (gadgedata (gaga)); } #endif if (gaga == &TGads [ 9]) { #ifndef POPLITE extern USHORT ni_roll [], ni_seq []; animage.Height = ni_roll1HITE; animage.Width = ni_roll1WIDT; popanim (ni_roll1); popanim (ni_roll2); popanim (ni_roll3); popanim (ni_roll4); popanim (ni_roll5); popanim (ni_roll6); popanim (ni_roll7); popanim (ni_roll8); #endif roll (); /* WE ACTUALLY DO IT HERE!!! */ #ifndef POPLITE animage.Height = 20; popanim (ni_roll ); vop.PlanePick = 0x017; popChip (ni_seq, ni_roll1SIZE /* should be big enough... */, 6, 20, 229, 121); vop.PlanePick = 0x01f; #endif } /* restore the seq gadget after roll clobbers it */ #ifndef POPLITE if (gaga == &TGads [5]) { animage.Height = 24; animage.Width = 32; animage.LeftEdge = 3; animage.TopEdge = 0; swill = 3; popanim (save1 ); popanim (save2 ); popanim (save3 ); popanim (save4 ); popanim (save5 ); popanim (save6 ); popanim (save7 ); popanim (save8 ); popanim (save9 ); popanim (save10); popanim (save11); popanim (save12); popanim (save13); swill = 11; popanim (save14); swill = 1; animage.Height = 26; animage.Width = 38; animage.LeftEdge = 0; animage.TopEdge = 0; popanim (gadgedata (gaga)); } if (gaga == &TGads[12]) { extern int webefillin; animage.Height = ni_fill1HITE; animage.Width = ni_fill1WIDT; animage.TopEdge = 3; animage.LeftEdge = 3; swill = 2; ifn (webefillin) { popanim (ni_fill1); popanim (ni_fill2); popanim (ni_fill3); popanim (ni_fill4); popanim (ni_fill5); popanim (ni_fill6); swill = 5; popanim (ni_fill7); swill = 1; animage.TopEdge = 0; animage.LeftEdge = 0; animage.Height = 26; animage.Width = 38; popanim (gadgedata (gaga)); } else { popanim (ni_fill7); popanim (ni_fill6); popanim (ni_fill5); popanim (ni_fill4); popanim (ni_fill3); popanim (ni_fill2); swill = 5; popanim (ni_fill1); swill = 1; animage.TopEdge = 0; animage.LeftEdge = 0; animage.Height = 26; animage.Width = 38; popanim (gadgedata (gaga)); } } swill = swilldefault; FreeMem (animage.ImageData, BIGDATA); #endif } /* now its a waste of code, now its a stub ... */ #ifndef POPLITE popanim (what) void *what; { CopyMem (what, animage.ImageData, BIGDATA); WaitTOF (); Delay ((long) swill); DrawImage (reep, &animage, (long) gogo->LeftEdge, (long) gogo->TopEdge); } /* alright, alright, I'll put in a closing brace, you stupid compiler! gad - even COBOL can handled a missing subroutine exit!! */ #endif void popChip (array, size, xsize, ysize, xx, yy) USHORT *array; long size; { REG USHORT *myChip; extern USHORT *imagine; IFN ( myChip = (USHORT *) AllocMem (size, MEMF_CHIP | MEMF_CLEAR)) { ALERT ("Can't do it - no chips left!"); return; } CopyMem (array, myChip, size); vop.ImageData = myChip; vop.Width = xsize; vop.Height = ysize; #ifdef POPLITE if (imagine) vop.Depth = 5, vop.PlanePick = 0x1f; else vop.Depth = 1, vop.PlanePick = 1; #endif slap bubble gum on the cracks... DrawImage (win->RPort, &vop, (long) xx, (long) yy); FreeMem (myChip, size); }