Updated PCI IDs to latest snapshot.
[tangerine.git] / rom / intuition / startscreennotifytaglist.c
blob6819ce6fcae646037cffdcc232f25ef7ad96c1a7
1 /*
2 Copyright 1995-2007, The AROS Development Team. All rights reserved.
3 Copyright 2001-2003, The MorphOS Development Team. All Rights Reserved.
4 $Id$
6 Add a Intuition Notification.
7 */
9 #include <intuition/intuition.h>
11 #include "intuition_intern.h"
13 /*****************************************************************************
15 NAME */
17 #include <proto/exec.h>
18 #include <proto/intuition.h>
19 #include <proto/utility.h>
21 AROS_LH1(IPTR, StartScreenNotifyTagList,
23 /* SYNOPSIS */
24 AROS_LHA(struct TagItem *, tags, A0),
26 /* LOCATION */
27 struct IntuitionBase *, IntuitionBase, 161, Intuition)
29 /* FUNCTION
30 Add Notifications to Intuition. You will be notified when
31 the screen changes.
33 INPUTS
34 tags - see below
36 TAGS
37 SNA_PubName (STRPTR) - Name of the public screen. NULL means
38 you'll get notifications for all screens.
39 SNA_MsgPort (struct MsgPort*) - Notifications will be sent to this port.
40 SNA_SigBit (BYTE) - The signal bit to use
41 SNA_SigTask (struct Task*) - The task to signal
42 SNA_UserData (IPTR) - For your personal use. Will be copied
43 into snm_UserData of the messages you receive
44 SNA_Hook (struct Hook*)
45 SNA_Priority (Byte) - Priority in the notification queue.
46 SNA_Notify (ULONG) - SNOTIFY_ flags, see intuition/intuition.h
48 RESULT
49 The value is private, only a test against ZERO is allowed and means Failure
51 NOTES
53 EXAMPLE
55 BUGS
57 SEE ALSO
58 EndScreenNotify()
60 INTERNALS
62 HISTORY
64 *****************************************************************************/
66 AROS_LIBFUNC_INIT
67 struct IntScreenNotify *notify;
69 notify = (struct IntScreenNotify *) AllocVec(sizeof(struct IntScreenNotify), MEMF_CLEAR);
71 if (notify)
73 notify->port = (struct MsgPort *) GetTagData(SNA_MsgPort, 0, tags);
74 notify->sigbit = (BYTE) GetTagData(SNA_SigBit, 0, tags);
75 notify->sigtask = (struct Task *) GetTagData(SNA_SigTask, 0, tags);
76 notify->flags = (ULONG) GetTagData(SNA_Notify, 0, tags);
77 notify->userdata = (IPTR) GetTagData(SNA_UserData, 0, tags);
78 notify->hook = (struct Hook *) GetTagData(SNA_Hook, 0, tags);
79 notify->node.ln_Pri = (BYTE) GetTagData(SNA_Priority, 0, tags);
80 notify->pubname = NULL;
82 char *pubname = (char *) GetTagData(SNA_PubName, 0, tags);
83 if (pubname)
85 notify->pubname = AllocVec(strlen(pubname) + 1, MEMF_CLEAR);
86 if (notify->pubname)
88 strcpy(notify->pubname, pubname);
90 else
92 FreeVec(notify);
93 notify = NULL;
96 if (notify)
98 ObtainSemaphore(&GetPrivIBase(IntuitionBase)->ScreenNotificationListLock);
99 Enqueue(&GetPrivIBase(IntuitionBase)->ScreenNotificationList, (struct Node *) notify);
100 ReleaseSemaphore(&GetPrivIBase(IntuitionBase)->ScreenNotificationListLock);
104 ReturnPtr ("StartScreenNotifyTagList", IPTR, notify);
106 AROS_LIBFUNC_EXIT
107 } /* StartScreenNotifyTagList */