   IFND  LIBRARIES_FEELIN_I
LIBRARIES_FEELIN_I SET 1

   INCLUDE 'exec/types.i'
   INCLUDE 'exec/libraries.i'
   INCLUDE 'exec/semaphores.i'

FV_VERSION     EQU 4
FV_REVISION    EQU 28

;; Module information
;   All constants follow these rules :
;
;   FM_<method>          - General method, understood by all classes
;   FM_<class>_<method>  - Class method
;   FA_<attrib>          - General attribute, known by many classes.
;   FA_<class>_<attrib>  - Specific class attribute
;   FV_<class>_<value>   - Special attribute value
;   FS_<name>            - Shortcut to structure name
;   FP_<class>_<value>   - Preference value, resolved on FM_Setup
;
;   FA_<attrib> definitions are followed by a comment [ISG] :
;      I : it's possible to specify this attribute at object creation time.
;      S : it's possible to change this attribute with F_Set().
;      G : it's possible to get this attribute with F_Get().
;
;   FR_<class> = Registered class id (unsigned 24 bits)
;   FR_<class>_Mthd = First Method ID of <class>
;   FR_<class>_Attr = First Attribute ID of <class>
;   FR_<class>_Pref = First Preference ID of <class>
;
;   Ranges:
;
;   $F0000000 - $FFFFFFFF is reserved for Feelin methods.
;   $8F000000 - $8FFFFFFF is reserved for Feelin attributes.
;   $50000000 - $5FFFFFFF is reserver for Preference items.
;
;   $C0000000 - $CFFFFFFF is reserved for custom classes methods.
;   $8C000000 - $8CFFFFFF is reserved for custom classes attributes.

MTHD_BASE EQU $F0000000
ATTR_BASE EQU $8F000000
PREF_BASE EQU $50000000

FCCM_BASE EQU $C0000000
FCCA_BASE EQU $8C000000
;*

*** Misc ********************************************************************

;; System Structures
   STRUCTURE   FeelinNode,0
      ULONG    fn_Next
      ULONG    fn_Prev
   LABEL       FeelinNode_SIZE

   STRUCTURE   FeelinList,0
      APTR     fl_Head
      APTR     fl_Tail
   LABEL       FeelinList_SIZE

   STRUCTURE   FeelinListSemaphored,FeelinList_SIZE
      STRUCT   fl_Semaphore,SS_SIZE
   LABEL       FeelinListSemaphored_SIZE

   STRUCTURE FeelinBase,LIB_SIZE
      UBYTE  fb_Flags
      UBYTE  fb_Pad
      ULONG  fb_SegList

      APTR   fb_SystemServer

      APTR   fb_Exec
      APTR   fb_DOS
      APTR   fb_Graphics
      APTR   fb_Intuition
      APTR   fb_Utility
      APTR   fb_Layers

      APTR   fb_DefaultPool
      APTR   fb_ClassesPool

      STRUCT fb_Pools,FeelinList_SIZE
      STRUCT fb_Classes,FeelinList_SIZE
      STRUCT fb_Servers,FeelinListSemaphored_SIZE

      STRUCT fb_RenderSemaphore,SS_SIZE

      APTR   fb_Console
      APTR   fb_PutChar
   LABEL     FeelinBase_SIZE

   STRUCTURE FeelinClass,FeelinNode_SIZE
      APTR   fc_ID
      UWORD  fc_OffSet
      UWORD  fc_Size
      APTR   fc_Super

      ULONG  fc_Userdata
      APTR   fc_Dispatcher
** PRIVATE
      APTR   fc_Setup
      APTR   fc_Cleanup
      ULONG  fc_OpenCount
      APTR   fc_LibBase
      APTR   fc_ObjectsPool
   LABEL     FeelinClass_SIZE

*** Pools / Memory **********************************************************

   STRUCTURE   FeelinMemChunk,0
      APTR     fmc_Next ;PTR TO feelinMemChunk
      ULONG    fmc_Size
      ; Memory area follows
   LABEL       FeelinMemChunk_SIZE

   STRUCTURE   FeelinPuddle,FeelinNode_SIZE
      APTR     fpud_Pool  ;PTR TO feelinPool
      ULONG    fpud_Lower
      ULONG    fpud_Upper
      APTR     fpud_First ;PTR TO feelinMemChunk
      ULONG    fpud_Size
      ULONG    fpud_Free
      ; Memory area follows
   LABEL       FeelinPuddle_SIZE

   STRUCTURE   FeelinPool,FeelinNode_SIZE
      STRUCT   fpool_Semaphore,SS_SIZE
      ULONG    fpool_Flags
      ULONG    fpool_PuddleSize
      ULONG    fpool_ThreshSize
      STRUCT   fpool_List,FeelinList_SIZE  ;feelinList
   LABEL       FeelinPool_SIZE

;*

*** Root Object for most objects ********************************************

;;Object                               $000000
FC_Object      MACRO
   Dc.b 'Object.fcc',0
   ENDM
FR_Object      EQU $000000
FR_Object_Mthd EQU MTHD_BASE | FR_Object
FR_Object_Attr EQU ATTR_BASE | FR_Object

   ENUM  FR_Object_Mthd
   EITEM FM_New
   EITEM FM_Dispose
   EITEM FM_Set
   EITEM FM_Get

   ENUM  FR_Object_Attr
   EITEM FA_ID
   EITEM FA_UserData
   EITEM FA_NoNotify
   EITEM FA_Parent
   EITEM FA_Class
   EITEM FA_Revision
   EITEM FA_Version
   EITEM FA_ClassID
   EITEM FA_SuperID
   EITEM FA_DataSize
   EITEM FA_Dispatcher
   EITEM FA_ClassInit
   EITEM FA_ClassExit
   EITEM FA_ClassData
   EITEM FA_ClassPool

   ENUM  0
   EITEM FV_Notify_None
   EITEM FV_Notify_Self
   EITEM FV_Notify_Parent
   EITEM FV_Notify_Window
   EITEM FV_Notify_Client

FV_Notify_Always EQU $49893131
FV_Notify_Toggle EQU $49893132
FV_Notify_Value  EQU $49893131

fo_Class EQU -4

   STRUCTURE FeelinObject,FeelinNode_SIZE
      APTR   fo_Parent
      ULONG  fo_ID
      ULONG  fo_UserData
   LABEL     FeelinObject_SIZE
;*

*** Servers *****************************************************************

;;Server                               $800000
FC_Server      MACRO
   Dc.b 'Server.fc',0
   ENDM

FR_Server      EQU $800000
FR_Server_Mthd EQU MTHD_BASE | FR_Server
FR_Server_Attr EQU ATTR_BASE | FR_Server

   ENUM  FR_Server
   EITEM FSA_Remove ; Feelin Server Action

   ENUM  FR_Server_Attr
   EITEM FA_Server_Port

   STRUCTURE   FeelinServer,SS_SIZE
      UWORD    fs_Reserved
      ULONG    fs_OpenCount
      APTR     fs_Port
      STRUCT   fs_Node,FeelinNode_SIZE
   LABEL       FeelinServer_SIZE

   STRUCTURE FeelinServerMessage,MN_SIZE
      UWORD  fsm_Reserved
      ULONG  fsm_Action
      ULONG  fsm_Args
      ULONG  fsm_Return
   LABEL     FeelinServerMessage_SIZE
;*
;;SystemServer                                $800040
FR_SystemServer      EQU $800040
FR_SystemServer_Mthd EQU MTHD_BASE | FR_SystemServer
FR_SystemServer_Attr EQU ATTR_BASE | FR_SystemServer

   ENUM  FR_SystemServer_Mthd
   EITEM FM_SystemServer_OpenLibrary
   EITEM FM_SystemServer_CloseLibrary
   EITEM FM_SystemServer_ObtainClassTags
   EITEM FM_SystemServer_MakeObject
   EITEM FM_SystemServer_OpenFont
   EITEM FM_SystemServer_CloseFont
   EITEM FM_SystemServer_ClipboardLoad
   EITEM FM_SystemServer_ClipboardSave
;*

*** Tools *******************************************************************

;;Tool                                 $700000
FC_Tool  MACRO
   Dc.b  'Tool.fc',0
         ENDM

FR_Tool        EQU $700000
FR_Tool_Mthd   EQU MTHD_BASE | FR_Tool
FR_Tool_Attr   EQU ATTR_BASE | FR_Tool

   ENUM  FR_Tool_Attr
   EITEM FA_Tool_Owner

   STRUCTURE   FeelinTool,0
      APTR     fc_t_Owner
   LABEL       FeelinTool_SIZE
;*
;;Family                               $700040
FC_Family   MACRO
   Dc.b 'Family.fc',0
            ENDM

FR_Family      EQU $700040
FR_Family_Mthd EQU MTHD_BASE | FR_Family
FR_Family_Attr EQU ATTR_BASE | FR_Family

   ENUM  FR_Family_Mthd
   EITEM FM_Family_AddTail
   EITEM FM_Family_Remove
   EITEM FM_Family_AddHead
   EITEM FM_Family_Insert
   EITEM FM_Family_Sort
   EITEM FM_Family_Transfer

FM_AddMember EQU FM_Family_AddTail
FM_RemMember EQU FM_Family_Remove

   ENUM  FR_Family_Attr
   EITEM FA_Child
   EITEM FA_Family
   EITEM FA_Family_List
   EITEM FA_Family_Head
   EITEM FA_Family_Tail

   STRUCTURE   FeelinFamily,FeelinTool_SIZE
      APTR     fc_f_Head
      APTR     fc_f_Tail
   LABEL       FeelinFamily_SIZE
;*

*** GUI System **************************************************************

;;Window                               $004040
FC_Window  MACRO
   Dc.b 'Window.fcc',0
   ENDM
FR_Window      EQU $004040
FR_Window_Mthd EQU MTHD_BASE | FR_Window
FR_Window_Attr EQU ATTR_BASE | FR_Window

   ENUM  FR_Window_Mthd
   EITEM FM_Window_Event
   EITEM FM_Window_ChainAdd
   EITEM FM_Window_ChainRem
   EITEM FM_Window_AddEventHandler
   EITEM FM_Window_RemEventHandler

   STRUCTURE FeelinRender,0
      APTR   frnd_ServerObject
      APTR   frnd_ClientObject
      APTR   frnd_WindowObject
      APTR   frnd_Context
      APTR   frnd_Window
      APTR   frnd_RPort
      APTR   frnd_Pens
      APTR   frnd_Flags
   LABEL     FeelinRender_SIZE

   BITDEF   F,Render_Refreshing,   0
   BITDEF   F,Render_Forbid,       1

   STRUCTURE FeelinEventHandler,FeelinNode_SIZE
      UWORD  feh_Flags
      BYTE   feh_Priority
      UBYTE  feh_Reserved
      ULONG  feh_Events
      APTR   feh_Object    ;PTR TO feelinObject
      APTR   feh_Class     ;PTR TO feelinClass
   LABEL     FeelinEventHandler_SIZE
;*

*** GUI Classes *************************************************************

;;Area                                 $000040
FC_Area  MACRO
   Dc.b 'Area.fcc',0
   ENDM
FR_Area        EQU $000040
FR_Area_Mthd   EQU MTHD_BASE | FR_Area
FR_Area_Attr   EQU ATTR_BASE | FR_Area

   ENUM  FR_Area_Mthd
   EITEM FM_Setup
   EITEM FM_Cleanup
   EITEM FM_Show
   EITEM FM_Hide
   EITEM FM_AskMinMax
   EITEM FM_Layout
   EITEM FM_Draw
   EITEM FM_DrawBackground
   EITEM FM_HandleEvent
   EITEM FM_Active
   EITEM FM_Inactive

FV_MAXMAX EQU 10000

   STRUCTURE FeelinMinMax,0
      UWORD  fmm_MinW
      UWORD  fmm_MinH
      UWORD  fmm_MaxW
      UWORD  fmm_MaxH
   LABEL     FeelinMinMax_SIZE

   STRUCTURE FeelinRect,0
      UWORD  fr_x1
      UWORD  fr_y1
      UWORD  fr_x2
      UWORD  fr_y2
   LABEL     FeelinRect_SIZE

   STRUCTURE FeelinBox,0
      UWORD  fb_x
      UWORD  fb_y
      UWORD  fb_w
      UWORD  fb_h
   LABEL     FeelinBox_SIZE

   STRUCTURE FeelinInner,0
      UBYTE  fi_bl
      UBYTE  fi_bt
      UBYTE  fi_br
      UBYTE  fi_bb
   LABEL     FeelinInner_SIZE

   STRUCTURE FeelinArea,FeelinObject_SIZE
      ULONG  fa_Flags
      APTR   fa_Render     ; PTR TO FeelinRender
      
      STRUCT fa_Box,FeelinBox_SIZE
      STRUCT fa_Inner,FeelinInner_SIZE
      STRUCT fa_MinMax,FeelinMinMax_SIZE

      APTR   fa_Pens       ; PTR TO LONG
      APTR   fa_Font       ; PTR TO textfont
      APTR   fa_Handler    ; PTR TO FeelinEventHandler
   LABEL     FeelinArea_SIZE

   BITDEF F,Horizontal,          0
   BITDEF F,Area_Selected,       1
   BITDEF F,Area_Pressed,        2
   BITDEF F,Area_Hidden,         3
   BITDEF F,Area_Disabled,       4
   BITDEF F,Area_Draggable,      5
   BITDEF F,Area_Dropable,       6
   BITDEF F,Area_FixedWidth,     7
   BITDEF F,Area_FixedHeight,    8

FF_Area_Fixed EQU FF_Area_FixedWidth | FF_Area_FixedHeight

   BITDEF F,Area_Active,         9
   BITDEF F,Area_HiddenPage,    10

   BITDEF F,Custom_1,            24
   BITDEF F,Custom_2,            25
   BITDEF F,Custom_3,            26
   BITDEF F,Custom_4,            27
   BITDEF F,Custom_5,            28
   BITDEF F,Custom_6,            29
   BITDEF F,Custom_7,            30
   BITDEF F,Custom_8,            31

   BITDEF F,Draw_Object,         0
   BITDEF F,Draw_Update,         1
   BITDEF F,Draw_Selected,       2
;*

   ENDC
