home *** CD-ROM | disk | FTP | other *** search
- #define SCREENTOP\
- (screen->TopEdge << ((screen->ViewPort.Modes & LACE)? 0: 1))
-
- IMPORT struct IntuitionBase *IntuitionBase;
- IMPORT struct MsgPort *Sharedport;
- IMPORT WORD Sharedrefs;
-
- struct Screen *WhichScreen()
- {
- REGISTER struct Screen *screen;
- Forbid();
- screen = IntuitionBase->FirstScreen;
- while (screen && IntuitionBase->MouseY < SCREENTOP) {
- screen = screen->NextScreen;
- }
- if (screen == NULL) { /* Shouldn't happen */
- screen = IntuitionBase->ActiveScreen;
- }
- Permit();
- return screen;
- }
-
- struct Window *WhichWindow(screen)
- struct Screen *screen;
- {
- struct Layer *layer;
- layer = (struct Layer *)WhichLayer(&screen->LayerInfo,
- (LONG)screen->MouseX, (LONG)screen->MouseY);
- if (layer) {
- return (struct Window *)layer->Window;
- } else {
- return NULL;
- }
- }
-
- struct Window *opensharedwindow(nw)
- struct NewWindow *nw;
- {
- struct Window *win;
- struct Screen scr;
-
- if (Sharedport) {
- nw->IDCMPFlags = NULL;
- } else {
- nw->IDCMPFlags = CLOSEWINDOW;
- }
- if (!GetScreenData(&scr, (LONG)sizeof(struct Screen), WBENCHSCREEN, NULL)) {
- return NULL; /* No WB */
- }
- if (nw->TopEdge+nw->Height > scr.Height) {
- nw->TopEdge = scr.Height-nw->Height;
- }
- if (nw->LeftEdge+nw->Width > scr.Width) {
- nw->LeftEdge = scr.Width-nw->Width;
- }
- if (nw->TopEdge < 0) {
- nw->TopEdge = 0;
- }
- if (nw->LeftEdge < 0) {
- nw->LeftEdge = 0;
- }
-
- if (win = OpenWindow(nw)) {
- if (Sharedport) {
- win->UserPort = Sharedport;
- ModifyIDCMP(win, CLOSEWINDOW);
- } else {
- Sharedport = win->UserPort;
- }
- ++Sharedrefs;
- }
- return(win);
- }
-
-
- VOID closesharedwindow(win)
- struct Window *win;
- {
- Forbid();
- win->UserPort = NULL;
- ModifyIDCMP(win, GADGETUP); /* NEVER occurs */
- Permit();
- CloseWindow(win);
- --Sharedrefs;
- if (Sharedrefs == 0 && Sharedport) {
- DeletePort(Sharedport);
- Sharedport = NULL;
- }
- }
-
- VOID FreePlanes(bm, width, height)
- struct BitMap *bm;
- LONG width, height;
- {
- SHORT i;
- for (i=0; i < bm->Depth; i++) {
- if (bm->Planes[i]) {
- FreeRaster(bm->Planes[i], width, height);
- }
- }
- }
-
- WORD AllocPlanes(bm, width, height)
- struct BitMap *bm;
- LONG width, height;
- {
- WORD i;
- for (i=0; i < bm->Depth; i++) {
- bm->Planes[i] = NULL;
- }
- for (i=0; i < bm->Depth; i++) {
- if (!(bm->Planes[i] = AllocRaster(width, height))) {
- return 0;
- }
- }
- return 1;
- }
-