// Emacs style mode select   -*- C++ -*- 
//-----------------------------------------------------------------------------
//
// $Id:$
//
// Copyright (C) 1993-1996 by id Software, Inc.
//
// This source is available for distribution and/or modification
// only under the terms of the DOOM Source Code License as
// published by id Software. All rights reserved.
//
// The source is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License
// for more details.
//
// DESCRIPTION:
//  MapObj data. Map Objects or mobjs are actors, entities,
//  thinker, take-your-pick... anything that moves, acts, or
//  suffers state changes of more or less violent nature.
//
//-----------------------------------------------------------------------------


#ifndef __D_THINK__
#define __D_THINK__


#ifdef __GNUG__
#pragma interface
#endif

#ifdef __SASC
#pragma options align=mac68k
#endif

//
// Experimental stuff.
// To compile this as "ANSI C with classes"
//  we will need to handle the various
//  action functions cleanly.
//
typedef  void  (*actionf_v)();
typedef  void  (*actionf_p1)( void* );
typedef  void  (*actionf_p2)( void*, void* );

typedef union
{
  actionf_p1	 acp1;
  actionf_v	 acv;
  actionf_p2	 acp2;

}  actionf_t;




// Historically, "think_t" is yet another
//  function pointer to a routine to handle
//  an actor.
typedef actionf_t   think_t;


// Doubly linked list of actors.
typedef struct thinker_s
{
    struct thinker_s  *	prev;
    struct thinker_s  *	next;
    think_t		 function;
    
}  thinker_t;

#ifdef __SASC
#pragma options align=power
#endif

#endif
//-----------------------------------------------------------------------------
//
// $Log:$
//
//-----------------------------------------------------------------------------
