home *** CD-ROM | disk | FTP | other *** search
- /* GadTools layout toolkit
- **
- ** Copyright © 1993-1995 by Olaf `Olsen' Barthel
- ** Freely distributable.
- */
-
- #include "gtlayout_global.h"
-
- VOID LIBENT
- LT_LockWindow(REG(a0) struct Window *window)
- {
- if(window)
- {
- LockNode *lockNode;
- BOOLEAN found;
-
- found = FALSE;
-
- ObtainSemaphore(<P_LockSemaphore);
-
- SCANLIST(<P_LockList,lockNode)
- {
- if(lockNode -> Window == window)
- {
- lockNode -> Count++;
-
- found = TRUE;
-
- break;
- }
- }
-
- if(!found)
- {
- if(lockNode = AllocMem(sizeof(LockNode),MEMF_PUBLIC | MEMF_ANY | MEMF_CLEAR))
- {
- AddTail((struct List *)<P_LockList,(struct Node *)lockNode);
-
- lockNode -> Window = window;
- lockNode -> OldIDCMPFlags = window -> IDCMPFlags;
- lockNode -> Count = 1;
- lockNode -> MinWidth = window -> MinWidth;
- lockNode -> MaxWidth = window -> MaxWidth;
- lockNode -> MinHeight = window -> MinHeight;
- lockNode -> MaxHeight = window -> MaxHeight;
-
- WindowLimits(window,window -> Width,window -> Height,window -> Width,window -> Height);
-
- ModifyIDCMP(window,(window -> IDCMPFlags & IDCMP_REFRESHWINDOW) | IDCMP_SIZEVERIFY);
-
- if(V39)
- {
- STATIC struct TagItem tags[3] =
- {
- WA_BusyPointer, TRUE,
- WA_PointerDelay, TRUE,
-
- TAG_DONE
- };
-
- SetWindowPointerA(window,tags);
- }
- else
- {
- STATIC UWORD __chip Stopwatch[(2 + 16) * 2] =
- {
- 0x0000,0x0000,
-
- 0x0400,0x07C0,
- 0x0000,0x07C0,
- 0x0100,0x0380,
- 0x0000,0x07E0,
- 0x07C0,0x1FF8,
- 0x1FF0,0x3FEC,
- 0x3FF8,0x7FDE,
- 0x3FF8,0x7FBE,
- 0x7FFC,0xFF7F,
- 0x7EFC,0xFFFF,
- 0x7FFC,0xFFFF,
- 0x3FF8,0x7FFE,
- 0x3FF8,0x7FFE,
- 0x1FF0,0x3FFC,
- 0x07C0,0x1FF8,
- 0x0000,0x07E0,
-
- 0x0000,0x0000
- };
-
- SetPointer(window,Stopwatch,16,16,-6,0);
- }
-
- Request(&lockNode -> Requester,window);
- }
- }
-
- ReleaseSemaphore(<P_LockSemaphore);
- }
- }
-
-
- /****************************************************************************/
-
-
- VOID LIBENT
- LT_UnlockWindow(REG(a0) struct Window *window)
- {
- if(window)
- {
- LockNode *lockNode;
-
- ObtainSemaphore(<P_LockSemaphore);
-
- SCANLIST(<P_LockList,lockNode)
- {
- if(lockNode -> Window == window)
- {
- if(--lockNode -> Count < 1)
- {
- Remove((struct Node *)lockNode);
-
- WindowLimits(window,lockNode -> MinWidth,lockNode -> MinHeight,lockNode -> MaxWidth,lockNode -> MaxHeight);
-
- EndRequest(&lockNode -> Requester,window);
-
- if(V39)
- SetWindowPointerA(window,NULL);
- else
- ClearPointer(window);
-
- ModifyIDCMP(window,lockNode -> OldIDCMPFlags);
-
- FreeMem(lockNode,sizeof(LockNode));
- }
-
- break;
- }
- }
-
- ReleaseSemaphore(<P_LockSemaphore);
- }
- }
-
-
- /*****************************************************************************/
-
-
- VOID LIBENT
- LT_DeleteWindowLock(REG(a0) struct Window *window)
- {
- if(window)
- {
- LockNode *lockNode;
-
- ObtainSemaphore(<P_LockSemaphore);
-
- SCANLIST(<P_LockList,lockNode)
- {
- if(lockNode -> Window == window)
- {
- Remove((struct Node *)lockNode);
-
- EndRequest(&lockNode -> Requester,window);
-
- if(V39)
- SetWindowPointerA(window,NULL);
- else
- ClearPointer(window);
-
- ModifyIDCMP(window,lockNode -> OldIDCMPFlags);
-
- FreeMem(lockNode,sizeof(LockNode));
-
- break;
- }
- }
-
- ReleaseSemaphore(<P_LockSemaphore);
- }
- }
-