TABLE OF CONTENTS

    BST_System/BeastLibrary
    BeastLibrary/BST_AddClass
    BeastLibrary/BST_ApplyTagChanges
    BeastLibrary/BST_CloneTagItems
    BeastLibrary/BST_FindTagItem
    BeastLibrary/BST_FreeClass
    BeastLibrary/BST_FreeTagItems
    BeastLibrary/BST_MakeClass
    BeastLibrary/BST_MakeSubClass
    BeastLibrary/BST_NextTagItem
    BeastLibrary/BST_RemoveClass
    BeastLibrary/CLSS_AddMethod
    BeastLibrary/CLSS_DisposeMethod
    BeastLibrary/CLSS_FindMethod
    BeastLibrary/OBJ_CreateConnection
    BeastLibrary/OBJ_DestroyObject
    BeastLibrary/OBJ_DisposeObject
    BeastLibrary/OBJ_DoMethod
    BeastLibrary/OBJ_FromInput
    BeastLibrary/OBJ_MethodToChildren
    BeastLibrary/OBJ_MethodToParent
    BeastLibrary/OBJ_NewObject
    BeastLibrary/OBJ_RemoveConnection
    BeastLibrary/OBJ_ToOutput

BST_System/BeastLibrary

NAME

    BeastLibrary -- Library for BEAST. (V1 Alpha)

COPYRIGHT

    Maverick Software Development

FUNCTION

      The BEAST engine.

AUTHOR

    Jacco van Weert

CREATION DATE

    23-Apr-95

MODIFICATION HISTORY

      27-Mar-96:    First release, V1 Alpha.

NOTES


    BeastLibrary/BST_AddClass

    NAME

      BST_AddClass -- Add a Beast class to the class list. (V1 Alpha)

    SYNOPSIS

      AddClass( Class )
      A0
      void BST_AddClass( struct BST_Class * );

    FUNCTION

        Add the Beast class to the Beast system.

    INPUTS

        Class - Pointer to the class.

    SEE ALSO

      BST_RemoveClass, BST_MakeClass

    BeastLibrary/BST_ApplyTagChanges

    NAME

      BST_ApplyTagChanges -- (V1 Alpha)

    SYNOPSIS

      BST_ApplyTagChanges( list, changeList )
      A0 A1

    FUNCTION

        

    NOTES

      This routine is subject to change

    BeastLibrary/BST_CloneTagItems

    NAME

      BST_CloneTagItems -- (V1 Alpha)

    SYNOPSIS

      clone = BST_CloneTagItems( original )
      D0 A0

    FUNCTION

        

    NOTES

      This routine is subject to change

    BeastLibrary/BST_FindTagItem

    NAME

      BST_FindTagItem -- (V1 Alpha)

    SYNOPSIS

      Result = BST_FindTagItem( tagValue, tagList )
      D0,A0 D0 A0
      struct TagItem *BST_FindTagItem( ULONG, struct TagItem * );

    FUNCTION

        Same functionallity as the utility.library equivalent, added are
      special handling functions for the BEAST tags.

    BeastLibrary/BST_FreeClass

    NAME

      BST_FreeClass -- Free a Beast class. (V1 Alpha)

    SYNOPSIS

      BST_FreeClass( Class )
      A0
      void BST_FreeClass( struct BST_Class );

    FUNCTION

        Free the Beast class from the memory. Also deallocate all class related
      stuff. Such as the methods lists.

    INPUTS

        Class - Pointer to the class.

    NOTES

      Before this routine BST_RemoveClass must be called.

    BUGS

        No check if the Class is still in use.

    SEE ALSO

      BST_RemoveClass, BST_MakeClass

    BeastLibrary/BST_FreeTagItems

    NAME

      BST_FreeTagItems -- (V1 Alpha)

    SYNOPSIS

      BST_FreeTagItems( taglist )
      A0

    FUNCTION

        

    NOTES

      This routine is subject to change

    BeastLibrary/BST_MakeClass

    NAME

      BST_MakeClass -- Make a Beast class. (V1 Alpha)

    SYNOPSIS

      Result = BST_MakeClass( ClassID, InstanceSize )
      D0 A0 D0
      struct BST_Class *BST_MakeClass( char *, ULONG );

    FUNCTION

        Defines a new public class, BST_AddClass must be called to add
      the class to the BEAST system.

    INPUTS

        ClassID      - Class ID, pointer to the public-name.
      Please choose this name carefully, otherwise a
      conflict may occur.
      Beast classes always are starting with a 'B'.
      BST_, BVS_, BFS_, ..etc..

      InstanceSize - The Instance size in bytes.

    RESULT

        Result - The created class

    SEE ALSO

      BST_FreeClass, BST_AddClass

    BeastLibrary/BST_MakeSubClass

    NAME

      BST_MakeSubClass -- Make a Beast subclass. (V1 Alpha)

    SYNOPSIS

      Result = BST_MakeSubClass( ClassID, InstanceSize, SuperClass )
      D0 A0 D0 A1

    FUNCTION

        The same function as BST_MakeClass, only now this class is a subclass
      of 'SuperClass'. This superclass _must_ be added to the system, because
      at least 1 object is created of this class.

    INPUTS

        ClassID      - Class ID, pointer to public-name.
      InstanceSize - The private class datasize in bytes.
      SuperClass - The name of the SuperClass.

    RESULT

        Result - The created sub class

    SEE ALSO

      BST_FreeClass, BST_AddClass, BST_MakeClass

    BeastLibrary/BST_NextTagItem

    NAME

      BST_NextTagItem -- (V1 Alpha)

    SYNOPSIS

      Result = BST_NextTagItem( tagList )
      D0,A0 A0
      struct TagItem *BST_NextTagItem( struct TagItem * );

    FUNCTION

        Similar function as the one in the utility.library, only this
      takes care about some BEAST tags.

    RESULT

        Result - Pointer to the new position.
      =NULL when end of TagList

    BeastLibrary/BST_RemoveClass

    NAME

      BST_RemoveClass -- Remove a Beast class from the class list. (V1 Alpha)

    SYNOPSIS

      BST_RemoveClass( Class )
      A0
      void BST_RemoveClass( struct BST_Class * );

    FUNCTION

        Unlink the Beast class from the list.

    INPUTS

        Class - Pointer to the class.

    SEE ALSO

      BST_AddClass, BST_FreeClass

    BeastLibrary/CLSS_AddMethod

    NAME

      CLSS_AddMethod -- Add a Method to a class. (V1 Alpha)

    SYNOPSIS

      Result = CLSS_AddMethod( Class, MethodStart, Method_ID )
      D0 A0 A1 D0
      struct BST_Class CLSS_AddMethod( struct BST_Class *, ULONG *, BST_Method );

    FUNCTION

        Add a method to a class, every method may have several method-routines.
      The Beast system has a large number of pre-defined method ID's.
      There are a number of free slots for local methods. Please consider
      very carefully when using local methods ID. Those are not supported
      among other classes. Also _NEVER_ use method delegation (MTHF_DOPARENTS,
      MTHF_DOCHILDREN..etc..) when using local methods. In the BEAST OO system
      objects are _never_ sure who parents or children are, even if you add them
      yourself.
      Free slots for local method ID's:
      OBM_local0 = 0x00000040 - 0x0000007F
      OBM_local1 = 0x00000100 - 0x000007FF
      OBM_local2 = 0x00004000 - 0x00004FFF
      OBM_local3 = 0x00100000 - 0x001FFFFF

      The method ID's with the lowest number have the highest priority. In
      V1 Alpha the priority is not yet implemented, but it will be in the future.

    INPUTS

        Class       - Pointer to the class.
      MethodStart - The start of the method routine.
      Method_ID - The Method_ID number.

    RESULT

        Result - =NULL when Error.
      <>NULL Class.

    SEE ALSO

      CLSS_DisposeMethod

    BeastLibrary/CLSS_DisposeMethod

    NAME

      CLSS_DisposeMethod -- Dispose a Method from a class. (V1 Alpha)

    SYNOPSIS

      CLSS_DisposeMethod( Class, MethodStart, Method_ID )
      A0 A1 D0
      void CLSS_DisposeMethod( struct BST_Class *, ULONG *, BST_Method );

    FUNCTION

        Remove the method from the class.

    INPUTS

        Class       - Pointer to the class.
      MethodStart - Start of the method routine.
      Method_ID - Method ID number

    SEE ALSO

      CLSS_AddMethod

    BeastLibrary/CLSS_FindMethod

    NAME

      CLSS_FindMethod -- Find a Method in a class. (V1 Alpha)

    SYNOPSIS

      Result = CLSS_FindMethod( Class, Method_ID )
      D0,A0 A0 D0
      struct class_MethodList *CLSS_FindMethod( struct BST_Class *, BST_Method );

    FUNCTION

        Search for a certain method ID.

    INPUTS

        Class     - Pointer to the class.
      Method_ID - Method ID number.

    RESULT

        Result - Pointer to found CLSS_MethodList or NULL when the method
      is not found.

    BeastLibrary/OBJ_CreateConnection

    NAME

      OBJ_CreateConnection -- Create a connection between two methods. (V1 Alpha)

    SYNOPSIS

      Result = OBJ_CreateConnection( FromObject, ToObject, FromMethod, ToMethod )
      D0 A0 A1 D0 D1
      struct obj_OutputLink *OBJ_CreateConnection( struct BST_Object *, struct BST_Object *, BST_Method, BST_Method );

    FUNCTION

        Create a connection between two objects. Every Method can be connected to any
      other method. Connections between objects running at the same task will be
      a direct connection. When connecting to object of different task the routine
      will insert an intermediair (not implemented in V1 Alpha). The same when connecting
      between two objects at two different computer systems.
      A connection can have multiple inputs and outputs. But a things must be take into
      consideration. When a 'FromMethod' is connected to several other methods the
      TagList (which is the data) is shared among the connected objects, which means
      that if the first object changes something in the TagList, the others will also
      see it.

    INPUTS

        FromObject - Pointer to the 'From' object.
      ToObject - Pointer to the 'To' object
      FromMethod - The Method ID number of the FromObject.
      ToMethod - The Method ID number of the ToObject.

    RESULT

        Result - 0 = An error has occured. Also when FromObject or ToObject
      is zero. Otherwise, pointer to the obj_OutputLink.

      A double linked connection is created, an OIL_Connection
      and an OOL_Connection structure.

    SEE ALSO

      OBJ_RemoveConnection

    BeastLibrary/OBJ_DestroyObject

    NAME

      OBJ_DestroyObject -- Destroy an object. (V1 Alpha)

    SYNOPSIS

      OBJ_DestroyObject( Object, MethodFlags )
      A0 D3
      struct BST_Object *OBJ_DestroyObject( struct BST_Object *, BST_MethodFlags );

    FUNCTION

        This function combines a OBM_DISPOSE method with a OBJ_DisposeObject
      call.

    INPUTS

        Object      - Pointer to the object to be destroyed.
      MethodFlags - MTHF_DOCHILDREN will be added by the function!!

    SEE ALSO

      OBJ_DoMethod, OBJ_DisposeObject

    BeastLibrary/OBJ_DisposeObject

    NAME

      OBJ_DisposeObject -- Dispose an object. (V1 Alpha)

    SYNOPSIS

      OBJ_DisposeObject( Object )
      A0
      void OBJ_DisposeObject( struct BST_Object * );

    FUNCTION

        Dispose this object AND all it's children.

    INPUTS

        Object - The object to be disposed. May be NULL.

    RESULT

        This object AND the children objects are disposed.

    NOTES

      This function will NOT perform an OBM_DISPOSE method.

    SEE ALSO

      OBJ_NewObject, OBJ_DestroyObject

    BeastLibrary/OBJ_DoMethod

    NAME

      OBJ_DoMethod -- Perform a method on a object. (V1 Alpha)

    SYNOPSIS

      Result = OBJ_DoMethod( Object, Method_ID, TagList, MethodFlags )
      A0 D0 A1 D3
      BST_MethodFlags OBJ_DoMethod( struct BST_Object *, BST_Method, struct TagItem *, BST_MethodFlags );

    FUNCTION

        Trigger a method on a certain object.

    INPUTS

        Object      - Pointer to the object (may NULL).
      Method_ID - Method ID number.
      TagList - Pointer to the TagList used by the Method routine.
      MethodFlags - Special method flags;
      See the Beast:Docs/Beast_OO/Methods.doc

    RESULT

        Result = The new method flags

      Method call with the following registers set;
      D2 = Method_ID
      D3 = MethodFlags
      A2 = Object
      A3 = TagList

      As a result the method must deliver the new MethodFlags in d0.
      Besides the discussed MethodFlags (INPUTS) there are some more;
      See the Beast:Docs/Beast_OO/Methods.doc

    SEE ALSO

      OBJ_MethodToParent, OBJ_MethodToChildren

    BeastLibrary/OBJ_FromInput

    NAME

      OBJ_FromInput -- Trigger methods connections to an input. (V1 Alpha)

    SYNOPSIS

      OBJ_FromInput( Object, InputMethod, MethodFlags, TagList )
      A0, D0 D3 A1
      BST_MethodFlags OBJ_FromInput( struct BST_Object *, BST_Method, BST_MethodFlags, struct TagItem * );

    FUNCTION

        Request input from the method 'InputMethod', this will trigger ( if
      connected ) a method at the object connected to the 'InputMethod'.

    INPUTS

        Object       - Pointer to the object.
      InputMethod - The input method number.
      MethodFlags - The Method flags, see OBJ_DoMethod
      TagList - The TagList put to the input/output-methods of the
      connection.

    SEE ALSO

      OBJ_ToOutput, OBJ_CreateConnection

    BeastLibrary/OBJ_MethodToChildren

    NAME

      OBJ_MethodToChildren -- Delegate the method to the children. (V1 Alpha)

    SYNOPSIS

      Result = OBJ_MethodToChildren( Object, Method_ID, TagList, MethodFlags )
      A0 D0 A1 D3

    FUNCTION

        See DoMethod for full description. 
      This function pass the method to the children. This is used in a method
      definition when the MTHF_PASSTOCHILD flag is set.

    INPUTS

        Object      - Pointer to the object (may NULL).
      Method_ID - Method ID number.
      TagList - Pointer to the TagList used by the Method routine.
      MethodFlags - Special method flags;

    RESULT

        Result = The new method flags

      Method call with the following registers set;

      D2 = Method_ID
      D3 = MethodFlags
      A2 = Object
      A3 = TagList

      As a result the method must deliver the new MethodFlags in d0.

    NOTES

      SEE ALSO

        OBJ_DoMethod

      BeastLibrary/OBJ_MethodToParent

      NAME

        OBJ_MethodToParent -- Delegate the method to the parent. (V1 Alpha)

      SYNOPSIS

        Result = OBJ_MethodToParent( Object, Method_ID, TagList, MethodFlags )
        A0 D0 A1 D3
        BST_MethodFlags OBJ_MethodToParent( struct BST_Object *, BST_Method, struct TagItem *, BST_MethodFlags );

      FUNCTION

          See DoMethod for full description. 
        This function pass the method to the parent. In this way the method won't
        be triggered at the caller object. Remember to set the MTHF_DOPARENTS flags
        the method should be delegated to other parents as well.

      INPUTS

          Object      - Pointer to the object (may NULL).
        Method_ID - Method ID number.
        TagList - Pointer to the TagList used by the Method routine.
        MethodFlags - Special method flags;

      RESULT

          Result = The new method flags

        Method call with the following registers set;

        D2 = Method_ID
        D3 = MethodFlags
        A2 = Object
        A3 = TagList

        As a result the method must deliver the new MethodFlags in d0.

      SEE ALSO

        OBJ_DoMethod

      BeastLibrary/OBJ_NewObject

      NAME

        OBJ_NewObject -- Create a new object. (V1 Alpha)

      SYNOPSIS

        Result = OBJ_NewObject( Class, Class_ID, Parent )
        D0 A0 A1 D0
        struct BST_Object *OBJ_NewObject( struct BST_Class *, char *, struct BST_Object * );

      FUNCTION

          Create a new object. The object is added 'under' the Parent. In version
        V1 Alpha multiple parents are not supported. If the Parent is null the
        object is added under the Beast root, or when the Beast FileSystem is
        available it's added under the UserClass.

      INPUTS

          Class    - Pointer to an already known class (private class)
        NULL if not used. (normally NULL).
        Class_ID - Pointer to the name of the public class.
        Parent - Pointer to the parent object or NULL.

      RESULT

          Result - Pointer to created object. NULL if the object could
        not be added.

      SEE ALSO

        OBJ_DisposeObject

      BeastLibrary/OBJ_RemoveConnection

      NAME

        OBJ_RemoveConnection -- (V1 Alpha)

      SYNOPSIS

        OBJ_RemoveConnection( OxL_Connection )
        A1
        void OBJ_RemoveConnection( struct obj_OutputLink * );

      FUNCTION

          Remove a created OIL_Connection or OOL_Connection.

      INPUTS

          OxL_Connection - Pointer to an OIL/OOL_Connection.

      RESULT

          The OIL_Connection and OOL_Connection structures are destroyed.

      SEE ALSO

        OBJ_CreateConnection

      BeastLibrary/OBJ_ToOutput

      NAME

        OBJ_ToOutput -- Trigger methods connections to an output. (V1 Alpha)

      SYNOPSIS

        Result = OBJ_ToOutput( Object, TagList, OutputMethod, MethodFlags )
        A0 A1 D0 D3
        BST_MethodFlags OBJ_ToOutput( struct BST_Object *, struct TagItem *, BST_Method, BST_MethodFlags );

      FUNCTION

          'Output' the TagList (A1) to the connected input, the used output
        is the OutputMethod (D0). The object is triggered which is connected
        to 'Object' at MethodID 'OutputMethod'.

      INPUTS

          Object       - Pointer to the object.
        TagList - The TagList put to the input/output-method of the
        connection.
        OutputMethod - The output method ID.
        MethodFlags - The Method flags, see OBJ_DoMethod

      RESULT

          Result = The new methodflags.

      SEE ALSO

        OBJ_FromInput, OBJ_CreateConnection, OBJ_DoMethod