Skip to content

Latest commit

 

History

History
61 lines (53 loc) · 1.37 KB

File metadata and controls

61 lines (53 loc) · 1.37 KB
#ifndef EXEC_LISTS_H
#define EXEC_LISTS_H
/*
**	$Filename: exec/lists.h $
**	$Release: 2.04 Includes, V37.4 $
**	$Revision: 36.10 $
**	$Date: 91/03/15 $
**
**	Definitions and macros for use with Exec lists
**
**	(C) Copyright 1985-1999 Amiga, Inc.
**	    All Rights Reserved
*/

#ifndef EXEC_NODES_H
#include "exec/nodes.h"
#endif /* EXEC_NODES_H */

/*
*  Full featured list header.
*/
struct List {
struct  Node *lh_Head;
struct  Node *lh_Tail;
struct  Node *lh_TailPred;
UBYTE   lh_Type;
UBYTE   l_pad;
};	/* word aligned */

/*
* Minimal List Header - no type checking
*/
struct MinList {
struct  MinNode *mlh_Head;
struct  MinNode *mlh_Tail;
struct  MinNode *mlh_TailPred;
};	/* longword aligned */


/*
*	Check for the presence of any nodes on the given list.	These
*	macros are even safe to use on lists that are modified by other
*	tasks.	However; if something is simultaneously changing the
*	list, the result of the test is unpredictable.
*
*	Unless you first arbitrated for ownership of the list, you can't
*	_depend_ on the contents of the list.  Nodes might have been added
*	or removed during or after the macro executes.
*
*		if( IsListEmpty(list) )		printf("List is empty\n");
*/
#define IsListEmpty(x) \
( ((x)->lh_TailPred) == (struct Node *)(x) )

#define IsMsgPortEmpty(x) \
( ((x)->mp_MsgList.lh_TailPred) == (struct Node *)(&(x)->mp_MsgList) )


#endif	/* EXEC_LISTS_H */