TABLE OF CONTENTS

extras.lib/AddHotKey
extras.lib/AddNNStr
extras.lib/AllocProgressMeterA
extras.lib/ArgYesNo
extras.lib/boopsi_GetGInfo
extras.lib/Busy
extras.lib/CopyString
extras.lib/EnqueueName
extras.lib/EntryToNN
extras.lib/ex_CloseLibs
extras.lib/ex_OpenLibs
extras.lib/EZReq
extras.lib/FindLine
extras.lib/FreeProgressMeter
extras.lib/ftos
extras.lib/GetEntryData
extras.lib/GetGUIScale
extras.lib/GetNNData
extras.lib/GhostRect
extras.lib/IsWhiteSpace
extras.lib/LG_AddGadgets
extras.lib/LG_CreateGadgets
extras.lib/LG_FreeGadgets
extras.lib/LG_GetGadget
extras.lib/LG_GetGadgetAttrs
extras.lib/LG_RemoveGadgets
extras.lib/LG_SetGadgetAttrs
extras.lib/MakeGadgets
extras.lib/MaxStrFontLen
extras.lib/MultiAllocMemA
extras.lib/MultiAllocPooledA
extras.lib/MultiAllocVecA
extras.lib/MultiFreeMemA
extras.lib/MultiFreePooledA
extras.lib/MultiFreeVecA
extras.lib/NextEntry
extras.lib/NextNNStr
extras.lib/NNString_Overview
extras.lib/NNStrLen
extras.lib/NotBusy
extras.lib/OBSOLETECheckInnerWindowSize
extras.lib/OBSOLETECheckWindowSize
extras.lib/OBSOLETEDrawBevelBoxes
extras.lib/PD_PackData
extras.lib/PD_UnpackData
extras.lib/PhraseInStr
extras.lib/RenderText
extras.lib/StrFontLen
extras.lib/Strip
extras.lib/StrIStr
extras.lib/StrLength
extras.lib/thread_EndThread
extras.lib/thread_PutTMsg
extras.lib/thread_PutTMsg_TagList
extras.lib/thread_StartThread
extras.lib/UpdateProgressMeterA
extras.lib/AddHotKey                                     extras.lib/AddHotKey

   NAME
       AddHotKey -- Add a hotkey to a Broker.

   SYNOPSIS
       cxobj = AddHotKey(Broker,BrokerPort,HotKey,ID)

       CxObj *AddHotKey(CxObj *,struct MsgPort *,STRPTR,ULONG)

   FUNCTION
       Creates a hotkey for a broker.

   INPUTS
       Broker     - Broker CxObj to attach hotkey to. 
       BrokerPort - Broker's MsgPort.
       HotKey     - Null terminated string.
       ID         - Hot keys ID. 
       
   RESULT
       pointer to a CxObj.

   EXAMPLE

   NOTES
    requires commodities.library to be opened. 
     commodities library already has HotKey()

   BUGS

   SEE ALSO

extras.lib/AddNNStr                                       extras.lib/AddNNStr

   NAME
       AddNNStr -- append a normal string to a NNString.

   SYNOPSIS
       NewNNStr=AddNNStr(NNStr,New)

       STRPTR AddNNStr(STRPTR, STRPTR);

   FUNCTION
       

   INPUTS
       NNStr - an existing NNString or NULL, if NULL
           the function converts str into an NNString.
       New - a regular NULL terminated string.

   RESULT
       A new NNString or NULL, NNStr *WILL* be freed
       regardless of result.  if New is NULL, NNStr will
       be returned.

   EXAMPLE

   NOTES

   BUGS

   SEE ALSO

extras.lib/AllocProgressMeterA                 extras.lib/AllocProgressMeterA

   NAME
       AllocProgressMeterA -- Allocate and initialize a progressmeter.
       AllocProgressMeter -- varargs stub for AllocProgressMeterA().

   SYNOPSIS
       meter = AllocProgressMeterA(TagList)

       ProgressMeter AllocProgressMeterA( struct TagItem *);

       meter = AllocProgressMeterA(Tag, ... )

       ProgressMeter AllocProgressMeterA( Tag, ...);

   FUNCTION
       This function allocates and initializes a ProgressMeter.

   INPUTS
       TagList - 
         One of the following two are required.
         PM_Screen - The screen to place the meter on.
                     (struct Screen *)
         PM_ParentWindow - The parent window of the meter.
                           (struct Window *)
                           
         PM_MsgPort    - Already existing msgport to send the meter's
                         window events through. (Not implemented)

         PM_TextAttr   - Font to use in the meter. defaults to the
                         screen font. (struct TextAttr *)

         PM_LeftEdge   - Defaults to be centered on PM_ParentWindow
         PM_TopEdge    - or PMScreen.
         PM_MinWidth   - Set the minimum width of the meter's
                         window.
         PM_MinHeight  - Set the minimum height of the meter's
                         window (Not implemented).

         PM_WinTitle   - Meter's Window title. (STRPTR) 

         PM_LowText    - default "0%"   (STRPTR)  
         PM_HighText   - default "100%" (STRPTR)

         PM_MeterFormat - A printf style format string used inside the meter.
                          default "%ld%%". (STRPTR) 
         PM_MeterType   - How PM_MeterFormat is used, 
                            PM_TYPE_PERCENTAGE - uses the percentage of
                              where PM_MeterValue is between PM_LowValue and
                              PM_HighValue for the argument of 
                              PM_MeterFormat.
                            PM_TYPE_NUMBER - Uses the meter's value for the 
                              argument of PM_MeterFormat.
                            PM_TYPE_STRING - Doens't process the meter's 
                              value simply displays the text from 
                              PM_MeterFormat
         PM_MeterLabel    - The label above the meter.  default NULL 
         PM_MinMeterWidth - The minimum meter bar width, the default minimum
                            is 80

         PM_MeterPen      - default fillpen 
         PM_MeterBgPen    - default backgroundpen 
         PM_FormatPen     - default highlight text 
         PM_MeterLabelPen - default highlight text 
         PM_LowTextPen    - default text pen 
         PM_HighTextPen   - default text pen 

         PM_MeterValue    - (IS) default   0 (LONG) 
         PM_LowValue      - (IS) default   0 (LONG)  
         PM_HighValue     - (IS) default 100 (LONG)

         PM_Ticks         -  Ticks to draw under the meter box
                               defaults to 0 for none 

         PM_CancelButton - Create a Cancel button? (BOOL)
         PM_CancelText   - Text for cancel button. default "Cancel". (STRPTR)
         PM_QueryCancel  - (S) The number of time the user
                           has pressed the cancel button since the last
                           PM_QueryCancel (ULONG *)  

         the following three are not implemented 
         PM_CancelID - Creates an IDCMP_GADGETUP event when the Cancel button
                       is clicked. IntuiMessage->IAddress will be a pointer
                       to a gadget whose GadgetID is taken from this tag.
                       To be used in conjunctoin with the PM_MsgPort tag.
         PM_CancelSigNum  - Sets a signal when the Cancel button is clicked 
         PM_CancelSigTask - Task to signal (struct Task *)    

   RESULT
       returns a pointer to a ProgressMeter. or NULL on failure.

   EXAMPLE

   NOTES
     requires diskfont, exec, gadtools, graphics, intuition & utility
     libraries to be open.

   BUGS
       Currently uses SmartRefresh window.

   SEE ALSO
       FreeProgressMeter(), UpdateProgressMeterA()

extras.lib/ArgYesNo                                       extras.lib/ArgYesNo

   NAME
       ArgYesNo - Get a boolean tooltype value.

   SYNOPSIS
       yes = ArgYesNo(TTypes,Entry,DefVal)

       BOOL ArgYesNo(UBYTE **, STRPTR, DefVal);

   FUNCTION
       This function returns the value of a boolean tooltype.

   INPUTS
       TTypes - a ToolTypes array returned by ArgArrayInit()
       Entry - the entry to search for.
       DefVal - the default boolean value.

   RESULT
       This function only considers the first letter of the
       of the value for the tooltype.  If the first letter
       of the value for the tooltype is 'Y' 'y' 'T' or 't'
       then this function returns 1, if the function finds
       'N' 'n' 'F' or 'f' then it returns 0, if this function
       finds any other character or cannot find the tooltype,
       then the function returns the DefVal.

   NOTES
       must link with amiga.lib

   SEE ALSO
     amiga.lib/ArgArrayInit(), amiga.lib/ArgString(),
     amiga.lib/ArgInt(), amiga.lib/ArgArrayDone()
extras.lib/boopsi_GetGInfo                         extras.lib/boopsi_GetGInfo

   NAME
       boopsi_GetGInfo -- Get the GadgetInfo pointer from common BOOPSI messa
ges

   SYNOPSIS
       ginfo = boopsi_GetGInfo(Message)

       struct GadgetInfo *boopsi_GetGInfo(Msg);

   FUNCTION
       Gets the pointer to the GadgetInfo structure from a BOOPSI
       message.

   INPUTS
       Message - BOOPSI message pointer.

   RESULT
       pointer to GadgetInfo structure or NULL.

   NOTES
       Only handles OM_SET, OM_UPDATE, OM_NOTIFY, GM_HITTEST,
       GM_RENDER, GM_GOACTIVE, GM_HANDLEINPUT, GM_GOINACTIVE
       and GM_LAYOUT methods.

   BUGS

   SEE ALSO

extras.lib/Busy                                               extras.lib/Busy

   NAME
       Busy -- displays busy pointer.

   SYNOPSIS
       Busy(Window)

       void Busy(struct Window *);

   FUNCTION
       Blocks input to a window by opening a requester.

   INPUTS
       Window - 

   RESULT
       None.

   NOTES
       requires intuition.library to be open.

       This does not change the Window's IDCMP flags, so
       unless you change them your still going to receive
       input events.
       This function does nothing in WB versions less than
       3.0

   SEE ALSO
       NotBusy()

extras.lib/CopyString                                   extras.lib/CopyString

   NAME
       CopyString -- Copy a string

   SYNOPSIS
       newstring = CopyString(Source, MemFlags)

       STRPTR CopyString(STRPTR, ULONG);

   FUNCTION
       Allocates memory using AllocVec and copies a string.

   INPUTS
       Source - the source string to copy
       MemFlags - Memory flags see exec.library/AllocVec()

   RESULT
       String pointer or NULL. 

   NOTES
       newstring must be freed with FreeVec.

   SEE ALSO
     exec.library/AllocVec(), exec.library/FreeVec()

extras.lib/EnqueueName                                 extras.lib/EnqueueName

   NAME
       EnqueueName -- Place a Node in a sorted List.

   SYNOPSIS
       EnqueueName(List,Node)

       void EnqueueName(struct List *,struct Node*)

   FUNCTION
       Place a Node in a sorted List prioritized by Node.ln_Name 
       and ln_Pri.

   INPUTS
       List - pointer to a List to place Node into.
       Node - pointer to a Node to be placed in the List.

   RESULT
       None.

   NOTES
       The List must be presorted by ln_Name and ln_Pri.
       Every node must have its ln_Name field pointing to
       a NULL terminated string.

extras.lib/EntryToNN                                     extras.lib/EntryToNN

   NAME
       EntryToNN -- Retrieve data from an ENTRY of a database.

   SYNOPSIS
       STRPTR EntryToNN(BPTR File, STRPTR EntryName)

   FUNCTION
       Get data from a Database, see GetEntryData().
       All the data in the entry is put into an NNString.
       The data can then be parsed with GetNNData()

extras.lib/ex_CloseLibs                               extras.lib/ex_CloseLibs

   NAME
       ex_CloseLibs -- close multiple libraries.

   SYNOPSIS
       ex_CloseLibs(Libs)

       void ex_CloseLibs(struct Libs *);

   FUNCTION
       Close multiple libraries using the same array of
       struct Libs as used in OpenLibs.

   INPUTS
       Libs - A pointer to an array of struct Libs.

   RESULT
       none.

   NOTES
       exec.library must already be opened.(usually done by the 
       compiler's startup code)

       revision 1.1
         corrected autodoc.
         now openes ExecBase on it's own.
       revision 1.2
         renamed to ex_CloseLib due to conflict with reaction.lib

   BUGS

   SEE ALSO
       ex_OpenLibs()
extras.lib/ex_OpenLibs                                 extras.lib/ex_OpenLibs

   NAME
       ex_OpenLibs -- attempt to open multiple libraries.

   SYNOPSIS
       success = ex_OpenLibs(Argc,ProgName,ErrorStr,
                   LibVerFmt,ButtonText,Libs)

       BOOL ex_OpenLibs(ULONG Argc, STRPTR ProgName, STRPTR ErrorString, 
              STRPTR LibVerFmt, STRPTR ButtonText, struct Libs *Libs);

   FUNCTION
       Attempt to open multiple Libraries.  If any library
       fails to open, a requester is opened to notify the 
       user listing all of the libraries that failed to open. 

   INPUTS
       Argc       - argc from main()
       ProgName   - pointer to a string containing the 
                   program's name.
       ErrorStr   - error string.  May be NULL.  Defaults to
                   "The following libraries are required:\n";
       LibVerFmt  - printf style format string.  Defaults to 
                    "  %s version %ld\n"
       ButtonText - If a requester is used to display an error
                    message, this text is used in the button.
                    Defaults to "Ok"
       Libs       - an array of libraries to open.

   RESULT
       return 0 on failure and non-zero on success.

   EXAMPLE
       struct IntuitionBase *IntuitionBase;
       struct GfxBase *GfxBase;
       struct Library *GadToolsBase;
       
       struct Libs MyLibs[]=
       {
         &IntuitionBase,"intuition.library"    ,37, 0,
         &GfxBase      ,"graphics.library"     ,37, 0,
         &GadToolsBase ,"gadtools.library"     ,37, 0,
         &LocaleBase   ,"datatypes.library"    ,39, OLF_OPTIONAL,
         0,0,0
       };

       void main(int argc, char **argv) 
       {
         if(ex_OpenLibs(arcg,"MyProgram",0,0,0,MyLibs))
         {
           ...
           CloseLibs(MyLibs);
         }
       }

   NOTES
       On error, this function will automatically display an 
       intuition requester if Argc=0 or print error information 
       out to STDIO if Argc>0.

       exec.library must already be open.(usually done by the 
       compiler's startup code)

       revision 1.1
         autodoc fix
         now opens exec.library on it's own.
       revision 1.2
         renamed to ex_OpenLib due to conflict with reaction.lib

       

   BUGS

   SEE ALSO
       ex_CloseLibs()
extras.lib/EZReq                                             extras.lib/EZReq

   NAME
       EZReq -- create an Intuition EasyRequest.

   SYNOPSIS
       retval = EZReq(Win, IDCMP_ptr, Title, Text,
                       ButtonText,Arg,...)

       LONG EZReq(struct Window *, ULONG *, STRPTR, STRPTR, 
                  STRPTR, ULONG, ...);

   FUNCTION
       This function provides an easier method to use the 
       intuition/EasyRequestArgs() function.

   INPUTS
       Win -
       IDCMP_ptr - 
       Title -
       Text -
       ButtonText -
       Arg -

   RESULT

   EXAMPLE

   NOTES
       requires the exec.library to be open, automatically opens
       intuition.library.

   BUGS

   SEE ALSO

extras.lib/FindLine                                       extras.lib/FindLine

   NAME
       FindLine - find the next matching line in a file.

   SYNOPSIS






   FUNCTION


   INPUTS

   RESULT

   EXAMPLE

   NOTES

   BUGS

   SEE ALSO

extras.lib/FreeProgressMeter                     extras.lib/FreeProgressMeter

   NAME
       FreeProgressMeter -- Close a PregressMeter.

   SYNOPSIS
       FreeProgressMeter(PM)

       void FreeProgressMeter(ProgressMeter );

   FUNCTION
       Close and deallocated a ProgressMeter.

   INPUTS
       PM - pointer to an existing ProgressMeter or NULL.

   RESULT
       none.

   EXAMPLE

   NOTES
     requires diskfont, exec, gadtools, graphics, intuition & utility
     libraries to be open.

   BUGS

   SEE ALSO
       AllocProgressMeterA(), UpdateProgressMeterA()

extras.lib/ftos                                               extras.lib/ftos

   NAME
       ftos - Convert a float to a string

   SYNOPSIS






   FUNCTION


   INPUTS

   RESULT

   EXAMPLE

   NOTES

   BUGS

   SEE ALSO

extras.lib/GetEntryData                               extras.lib/GetEntryData

   NAME
       GetEntryData -- Retrieve data from an ENTRY of a database.

   SYNOPSIS
       GetEntryDataA(File, EntryName, Items) -- NOT implemented --

       BOOL GetEntryDataA(BPTR, STRPTR struct EItem *);

       GetEntryData(File, EntryName, Items, ... )

       BOOL GetEntryData(BPTR, STRPTR, STRPTR, ... );

   FUNCTION
       Retrieve data from a simple ENTRY based database.

   INPUTS
       File - an AmigaDOS BPTR to a file.
       Name - an array of struct Etems, the last struct EItem should have
              it's Name field set to NULL. (see example)
   RESULT
       returns 0 on failure, possibly due to EOF, improper file format, or
       lack of memory.  
    
       To support multiple occurances of an item Name in an Entry, this 
       function returns NNStrings.  The strings are stored end to end in 
       the order that they were read from the file.

       On success, each EItem.ReturnString either points to an NNString,
       or NULL if no data for that Name was found.

       On failure, all EItem.ReturnStrings are NULL, and any data collected
       is freed.

   EXAMPLE
       STRPTR title,desc;
       BPTR File;

       if(GetEntryData(File,"ENTRY",
                            "TITLE"  ,&title,
                            "DESC"   ,&desc,
                               0))
       {
         if(title)
         {
           printf("%s - ",title);
           FreeVec(title);
         }

         if(desc)
         {
           printf("%s\n");
           FreeVec(desc);
         }
       }


   NOTES
       The database file format is an ASCII text file, and consists
       of "ENTRY"'s, that look like this:

       <ENTRYNAME>
       {
         <ITEMNAME> = <data>
         <ITEMNAME> = <data>
       }

       an example file format from above might be:

       ENTRY
       {
         TITLE=Cows 'R Us
         DESC=All you want to know about beef.
       }

       case of <ENTRYNAME> and <ITEMNAMES> is not important.
       the equal sign is required.
       
   HISTORY
       This code probably isn't all that usefull, but it was the
       code behind the database of now defunct Tampa Bay Amiga Group's
       Amiga Support Directory.  Unfortunately, TBAG died before the
       ASD could begine to grow, and I haven't used this code since.

   BUGS
       Not reentrant.

   SEE ALSO
       ProcessNNStr, AddNNStr(), NextNNStr(), EntryToNN()

extras.lib/GetGUIScale                                 extras.lib/GetGUIScale

   NAME
       GetGUIScale -- Find the appropriate scale for an
                      interface.

   SYNOPSIS
       success = GetGUIScale(TAttr, Strings, &XScale, &YScale)

       BOOL GetGUIScale(struct TextAttr *, struct GUI_String *,
                        float *, float *);

   FUNCTION
       This function figures out the minimum size an interface
       should be so that all of the Strings will fit.

   INPUTS
       TAttr - The TextAttr to be used for the strings.
       Strings - A NULL terminated array of GUI_String containing
                 the Strings to used in the interface and the maximum
                 size each string can be before the interface needs
                 to be enlarged.
       XScale - the address of a float to contain the X scale factor.
       YScale - the address of a float to contain the Y scale factor. 

   RESULT
       This function returns non-zero on success, and will have the X &
       YScale values set apropriately.  Returns NULL on failure if the
       font specified in TAttr can not be opened, and X & YScale will be
       set to -1.

   NOTES
       requires diskfont.library to be open.

       The reason this function sets X & YScale to -1 on failure is to
       also cause CheckWindowSize() and CheckInnerWindowSize to fail.
       This way you can simply:
       GetGUIScale(ta,strings,&xscale,&yscale)
       if(!CheckWindwoWidth(scr,winwidth,winheight,xscale,yscale))
       { ... revert to topaz.8 ... 
       }

       The GUI_String specifies the maximum size a string can be before
       the interface should be scaled horizontally.  For example, if you
       have a BUTTON_KIND gadget that is 100 pixels wide, then you may
       want to set the maximum size for the string in that gadget to 90.  
       (ie.
            struct GUI_String gs[]=
            {
              "Button Text", 90,
              0,0
            };
       )

   SEE ALSO
       MakeGadgets()

extras.lib/GetNNData                                     extras.lib/GetNNData

   NAME
       GetNNData 

   SYNOPSIS
       STRPTR GetNNData(STRPTR NNStr, STRPTR Name, STRPTR DefVal);

   FUNCTION
       Retrieves data from a NNString.

       nnstr="TITLE=Joe\0COLOR=Green\0\0"

       t=GetNNData(nnstr,"TITLE","None");

       t will equal "Joe"

   SEE ALSO

extras.lib/GhostRect                                     extras.lib/GhostRect

   NAME
       GhostRect -- Cover a rectangular are with 
                    a ghosted pattern.

   SYNOPSIS
       GhostRect(RP, Pen, X0, Y0, X1, Y1)

       void GhostRect(struct RastPort *, ULONG, 
            WORD, WORD, WORD, WORD); 

   FUNCTION
       Covers a rectangular area with a ghosted pattern
       using the specified pen number.

   INPUTS
       RP - Pointer to a RastPort.
       Pen - the pen number to use for the pattern.
       X0 - left edge 
       Y0 - top edge
       X1 - right edge
       Y1 - bottom edge

   BUGS
       The following MUST be true: X1>=X0  Y1>=Y0

extras.lib/IsWhiteSpace                               extras.lib/IsWhiteSpace

   NAME
       IsWhiteSpace -- Is a character a "white-space"

   SYNOPSIS
       IsWhiteSpace(Char)

       BOOL IsWhiteSpace(char);

   FUNCTION
       Indicate whether or not a character is a "white-space"

   INPUTS
       Char - a letter.

   RESULT
       non-0 if Char is " "(space), "\t"(tab), or "\n"(cr)

   EXAMPLE

   NOTES

   BUGS

   SEE ALSO

extras.lib/LG_AddGadgets                             extras.lib/LG_AddGadgets

   NAME
       LG_AddGadgets - Add gadgets to a window.

   SYNOPSIS






   FUNCTION


   INPUTS

   RESULT

   EXAMPLE

   NOTES

   BUGS

   SEE ALSO

extras.lib/LG_CreateGadgets                       extras.lib/LG_CreateGadgets

   NAME
       LG_CreateGadgets -- Create multiple Gadtools gadgets.

   SYNOPSIS
       gcontrol = LG_CreateGadgets(Tags)

       struct LG_Control *LG_CreateGadgets(Tag Tags, ...);

   FUNCTION
       Creates multiple Gadtools, with some layout options.

   INPUTS
       Tags (see <extras/layougtgt.h>)

         LG_LeftEdge, LG_XPos - Position of gadget
         LG_TopEdge,  LG_YPos - Position of gadget
             The position of the gadget will depend on these attributes
             and the LG_Justification attribute.  Also see the relational
             macros in <extras/layoutgt.h>
         LG_Width  - Gadget width
         LG_Height - Gadget height

           for the following see the NewGadget structure in 
           <libraries/gadtools.h>
         LG_GadgetText
         LG_TextAttr
         LG_GadgetID
         LG_Flags
         LG_VisualInfo
         LG_UserData
         LG_GadgetKind
         LG_GadgetTags
         LG_GadgetTagList

         LG_OffsetX - global offset from left of window
         LG_OffsetY - global offset from top of window 
            These two set to topleft of the domain.
            Also these will be added to LG_UseScreenOffsets
            or LG_UseWindowOffsets if set.

         LG_LabelFlags - see LGLF_ 

         LG_ScaleX - Multiply gadget width and position by these.
                     (percent * 65536)
         LG_ScaleY - Multiply gadget height and position by these.
                     (percent * 65536)

         LG_Justification - Sets the "handle" of the gadget.

         LG_UseScreenOffsets - Sets global offsets based on Window border 
                           dimensions specified in the Screen structure
         LG_UseWindowOffsets - Sets global offsets based on Window border 
                           dimensions

         LG_EraseRemoved - If set gadgets erase themselves when they are 
                           removed using LG_RemoveGadgets

         LG_KeyClass  - Not used 
         LG_KeyString - A string of characters that "activate" that 
              gadget, if not specified, LG_CreateGadget() will scan 
              the gadget label for the appropriate string.  This 
              attribute is cleared after each LG_CreateGadget
               attribute
         LG_ErrorCode - Not used

         LG_Bounds - set offsets or domain area for gadgets
         LG_BoundsLeft   - Left of domain. (Alias for LG_OffsetX)
         LG_BoundsTop    - Top of domain.  (Alias for LG_OffsetY)
         LG_BoundsWidth  - Width of domain.
         LG_BoundsHeight - Height of domain.

         LG_RelHorizGap - Gap between certain relative operations
         LG_RelVertGap  - Gap between certain relative operations

         LG_HorizCells - Sets the number of columns in a table.
         LG_VertCells - Sets the number of rows in a table. 
           Sets the number of cells in a table.  The table's pixel size
           is the current LG_Bound size.  These attributes work in 
           conjunction with the LG_REL_CELL_ macros defined in 
           <extras/layoutgt.h>
           
         LG_SkipGadgets - Skip the next ti_Data LG_CreateGadgets and 
           all Tags in between.

   RESULT
       returns NULL on failure, or a pointer the LG_Control structure 
       defined in <extras/layoutgt.h>

   EXAMPLE
       See the supplied example, if there are any.

   NOTES
       Gadgets created by LG_CreateGadgets() Must be freed using 
       LG_FreeGadgets OR Removed from it's Window using 
       LG_RemoveGadgets *BEFORE* the window is closed

   BUGS

   SEE ALSO
       LG_FreeGadgets, LG_RemoveGadgets, LG_AddGadgets, LG_RemoveGadgets,

extras.lib/LG_FreeGadgets                           extras.lib/LG_FreeGadgets

   NAME
       LG_FreeGadgets - free gadgets allocated be LG_CreateGadgets.

   SYNOPSIS
       LG_FeeeGadgets(Control)

       void LG_FreeGadgets(struct LG_Control);

   FUNCTION
       deallocates gadgets ans support structures allocated by 
        LG_CreateGadget

   INPUTS
       Con - pointer to structure returned by LG_CreateGadgets.

   RESULT

   EXAMPLE

   NOTES
       Gadgets created by LG_CreateGadgets() Must be freed using 
       LG_FreeGadgets OR Removed from it's Window using 
       LG_RemoveGadgets *BEFORE* the window is closed

   BUGS

   SEE ALSO

extras.lib/LG_GetGadget                               extras.lib/LG_GetGadget

   NAME
       LG_GetGadget - get a gadget pointer using Gadget ID.

   SYNOPSIS






   FUNCTION


   INPUTS

   RESULT

   EXAMPLE

   NOTES

   BUGS

   SEE ALSO

extras.lib/LG_GetGadgetAttrs                     extras.lib/LG_GetGadgetAttrs

   NAME
       LG_GetGadgetAttrs

   SYNOPSIS






   FUNCTION


   INPUTS

   RESULT

   EXAMPLE

   NOTES

   BUGS

   SEE ALSO

extras.lib/LG_RemoveGadgets                       extras.lib/LG_RemoveGadgets

   NAME
       LG_RemoveGadgets - remove gadgets from a window.

   SYNOPSIS






   FUNCTION


   INPUTS

   RESULT

   EXAMPLE

   NOTES

   BUGS

   SEE ALSO

extras.lib/LG_SetGadgetAttrs                     extras.lib/LG_SetGadgetAttrs

   NAME
       LG_SetGadgetAttrs - set gadget attrs.

   SYNOPSIS






   FUNCTION


   INPUTS

   RESULT

   EXAMPLE

   NOTES

   BUGS

   SEE ALSO

extras.lib/MakeGadgets                                 extras.lib/MakeGadgets

   NAME
       MakeGadgets -- Layout Gadtools gadgets. *OBSOLETE*

   SYNOPSIS
       Gadget = MakeGedgets(Scr, VisualInfo, NumGadgets, NewGads, 
               NewGadTags, NewGadKinds, Gadgets, TextAttr, XScale,
               YScale)

       struct Gadget * MakeGadgets(struct Screen *,APTR ,ULONG,
               struct NewGadgets *, ULONG *, ULONG *,
               struct Gadget **, struct TextAttr *, float, float);

   FUNCTION
       This function will create Gadgets from an array of
       Gadtools NewGadgets, scaling the gadgets to the size
       specified.

   INPUTS
       Scr - This is the screen that the window containing these
                gadgets are destine for.  This is only used to get
                the WBorX values used to offset the gadgets from
                the window border.  *Set this to NULL if the gadgets
                are destine for a GimmeZeroZero window*.
       VisualInfo - VisualInfo pointer from gadtools/GetVisualInfo().
       NumGadgets - the number of gadgets to process.
       NewGads - array of struct NewGadget.
       NewGadTags - array of ULONGS to be processed as TagItems.
             All the gadget's tags are in this single array.
             (In the same fashion as GadToolsBox) 
             Individual tag arrays are NULL(TAG_DONE) terminated,
             And you may use TAG_MORE for additional Tags per gadget,
             but the array still must be NULL terminated.
       NewGadKinds - array of ULONGs, (BUTTON_KIND etc.)
       Gadgets - (struct Gadget **) Pointer to an array of
             Gadget pointers.  The Gadgets created by this
             function can be referenced by the ng_GadgetID of
             the source NewGadget.
       TextAttr - (struct TextAttr *) This TextAttr to used for
             gadgets whose ng_TextAttr is NULL.
       XScale - the x factor to scale the gadgets.
       YScale - the y factor to scale the gadgets.
             
   RESULT
       returns a pointer to the context from CreateContext()
       or NULL on failure.

   EXAMPLE

   NOTES
       requires diskfont, gadtools & utility libraries to
       be open.

       This function has a special flag for NewGadget->ng_Flags,
       NG_FITLABEL.  This flag tells the function to adjust the
       ng_LeftEdge and/or Width if the PLACETEXT_LEFT or RIGHT
       flags are set, and the ng_TopEdge and/or Height if the
       PLACETEXT_ABOVE or BELOW flags are set, so that the 
       ng_GadgetText will fit inside the area specified for the
       gadget.  You must also specify one of the PLACETEXT_?
       values or this will not work.

       For GimmeZeroZero windows set Scr to NULL.
       
       This function will not modify any of the arrays 
       (ie. NewGads, NewGadTags), this way if you have
       an interface that opens & closes multiple times
       (like commodities) you will not have to reinitialize
       the arrays.

       Every ng_GadgetID should be unique and none may have a
       larger value than the number of elements in the array
       pointed to by Gadgets.

       GTLV_ShowSelected works differently with this function.
       specify -1l for the display only gadget, specify the 
       gadget _id_ of the string gadget for the editable gadget
       (the string gadget must be created before the listview).
       Gadtools wants a NULL or poiner to a gadget for this value
       but this is taken care by this function. 

       Gadgets created by this function can be freed with a 
       call to FreeGadgets().

   BUGS

   SEE ALSO
       GetGUIScale()
extras.lib/MaxStrFontLen                             extras.lib/MaxStrFontLen

   NAME
       MaxStrFontLen - get the maximum pixel length of a
       string containg N cahracters. 

   SYNOPSIS
       length=MaxStrFontLen(Font, Chars, LowChar, HighChar)

       LONG MaxStrFontLen(struct TextFont *, ULONG, UBYTE, UBYTE);

   FUNCTION
       This function returns the maximum number of pixels
       a string with a certain number of characters could
       occupy.

   INPUTS
       Font - struct TextFont * previously opened by 
              OpenFont() or OpenDiskFont().
       Chars - the max number characters in a string.
       LowChar - the ASCII number of lowest character
                 that could be in a string.
       HighChar - the ASCII number of the highest character
                  that could be in a string.

   EXAMPLE
        find the longest pixel length of a number 
        upto 3 digits 
       long maxnumberlen;
       struct TextFont *tf;

       maxnumberlen=MaxStrFontLen(tf,3,'0','9');

   RESULT
       the pixel length or 0 if the Font parameter
       is NULL.

extras.lib/MultiAllocMemA                           extras.lib/MultiAllocMemA

   NAME
       MultiAllocMemA -- Multiple AllocMem.
       MultiAllocMem -- varargs stub.

   SYNOPSIS
       succes = MultiAllocMemA(Flags, MemTagList)

       BOOL MultiAllocMem(ULONG, struct MemTag *);

       succes = MultiAllocMemA(Flags, MemTag)

       BOOL MultiAllocMemA(Flags, ULONG, ...);

   FUNCTION
       Attempt to allocate one or more memory chunks
       using AllocMem.

   INPUTS
       Flags - MA_FAILSIZE0: fail all allocations if any
               have a size of 0.  if your application will be
               allocating memory of dynamic sizes, and if
               you want allocations of 0 bytes to fail, then
               set this flag.
       MemTag - pointer to an array of struct MemTag.
                  vt_Ptr is the address of a pointer.
                  vt_Size is the size of the allocation.
                  vt_MemFlags are the exec memory (MEMF_) flags. 
                Last tag should have vt_Ptr = NULL.
                 
   RESULT
       zero if it couldn't allocate the requested memory. or non-zero
       on success. vt_Ptrs will be point to a allocated 
       memory chunk or NULL.  

   EXAMPLE
       EX1:
         struct foo *bar;
         STRPTR dest;
         APTR cow;

        if( MultiAllocMem(0,
                           &bar,  sizeof(struct foo),  MEMF_CLEAR,
                           &dest, 25,                  MEMF_PUBLIC,
                           &cow,  100,                 MEMF_FAST|MEMF_PUBLIC,
                           0))
         {
           ...
           MultiFreeMem(3,
                           bar  ,sizeof(struct foo),
                           dest ,25,
                           cow  ,100);
         }

       EX2: This will never fail.
         APTR foo;
         if(MultiAllocMem(0,
                           &foo,0,MEMF_CLEAR,
                           0)
         {...}

       EX3: This will always fail.
         APTR foo;
         if(MultiAllocMem(MA_FAILSIZE0,
                           &foo,0,MEMF_CLEAR,
                           0)
         {...}

   NOTES
       requires exec.library to be open.

       if the MA_FAILSIZE0 Flag is not set, 0 byte allocations
       will pass even though no memory will be allocated for that.
       entry and mt_Ptr will be set to 0.

       The memory allocated may be freed individually with 
       exec.library/FreeMem()

   BUGS

   SEE ALSO
       MultiAllocVecA(), MultiFreeVecA(), MultiFreeMemA(),
       MultiAllocPooledA(), MultiFreePooledA(),
       exec.library/AllocVec(), exec.library/FreeVec()
       exec.library/AllocMem(), exec.library/FreeMem()
       exec.library/AllocPooled(), exec.library/FreePooled()
extras.lib/MultiAllocPooledA                     extras.lib/MultiAllocPooledA

   NAME
       MultiAllocPooledA -- Multiple AllocPooled.
       MultiAllocPooled -- varargs stub.

   SYNOPSIS
       succes = MultiAllocPooledA(Flags, PoolTagList)

       BOOL MultiAllocPooled(ULONG, struct PoolTag*);

       succes = MultiAllocPooledA(Flags, PoolTag)

       BOOL MultiAllocPooledA(Flags, ULONG, ...);

   FUNCTION
       Attempt to allocate one or more memory chunks
       using AllocPooled.

   INPUTS
       Flags - MA_FAILSIZE0: fail all allocations if any
               have a size of 0.  if your application will be
               allocating memory of dynamic sizes, and if
               you want allocations of 0 bytes to fail, then
               set this flag.
       PoolTag - pointer to an array of struct PoolTag.
                  pt_Ptr is the address of a pointer.
                  pt_Size is the size of the allocation.
                Last tag should have vt_Ptr = NULL.
                 
   RESULT
       zero if it couldn't allocate the requested memory. or non-zero
       on success. In either case, vt_Ptrs will be point to a allocated 
       memory chunk or NULL.  

   EXAMPLE
       EX1:
         APTR pool;
         struct foo *bar;
         STRPTR dest;
         APTR cow;

         if(pool=CreatePool(MEMF_ANY,300,300))
         {
           if( MultiAllocPooled(pool,0,
                           &bar,  sizeof(struct foo),
                           &dest, 50,       
                           &cow,  100,
                           0))
           {
             ...
             MultiFreePooled(pool,3,
                               bar,  sizeof(struct foo),
                               dest, 50,
                               cow,  100);
           }
           DeletePool(pool);
         }

       EX2: This will never fail.
         if(MultiAllocPooled(pool,0,
                           &foo, 0,
                           0)
         {...}

       EX3: This will always fail.
         if(MultiAllocPooled(pool,MA_FAILSIZE0,
                           &foo, 0,
                           0)
         {...}

   NOTES
       requires exec.library to be open.

       if the MA_FAILSIZE0 flag is not set, 0 byte allocations
       will pass even though no memory will be allocated for that.
       entry and mt_Ptr will be set to 0.

       The memory allocated may be freed individually with 
       exec.library/FreePooled()

   BUGS

   SEE ALSO
       MultiFreeVecA(), MultiAllocMemA(),MultiFreeMemA(),
       MultiFreePooledA(),
       exec.library/AllocVec(), exec.library/FreeVec()
       exec.library/AllocMem(), exec.library/FreeMem()
       exec.library/AllocPooled(), exec.library/FreePooled()
extras.lib/MultiAllocVecA                           extras.lib/MultiAllocVecA

   NAME
       MultiAllocVecA -- Multiple AllocVec.
       MultiAllocVec -- varargs stub.

   SYNOPSIS
       succes = MultiAllocVecA(Flags, VecTagList)

       BOOL MultiAllocVec(ULONG, struct VecTag *);

       succes = MultiAllocVecA(Flags, VecTag)

       BOOL MultiAllocVecA(Flags, ULONG, ...);

   FUNCTION
       Attempt to allocate one or more memory chunks
       using AllocVec.

   INPUTS
       Flags - MA_FAILSIZE0: fail all allocations if any
               have a size of 0.  if your application will be
               allocating memory of dynamic sizes, and if
               you want allocations of 0 bytes to fail, then
               set this flag.
       VecTag - pointer to an array of struct VecTag.
                  vt_Ptr is the address of a pointer.
                  vt_Size is the size of the allocation.
                  vt_MemFlags are the exec memory (MEMF_) flags. 
                Last tag should have vt_Ptr = NULL.
                 
   RESULT
       zero if it couldn't allocate the requested memory. or non-zero
       on success. In either case, vt_Ptrs will be point to a allocated 
       memory chunk or NULL.  

   EXAMPLE
       EX1:
         struct foo *bar;
         STRPTR dest;
         APTR cow;

        if( MultiAllocVec(0,
                           &bar,  sizeof(struct foo),  MEMF_CLEAR,
                           &dest, strlen(str)+1,       MEMF_PUBLIC,
                           &cow,  100,                 MEMF_FAST|MEMF_PUBLIC,
                           0))
         {
           ...
           MultiFreeVec(3,bar,dest,cow);
         }

       EX2: This will never fail.
         APTR foo;
         if(MultiAllocVec(0,
                           &foo,0,MEMF_CLEAR,
                           0)
         {...}

       EX3: This will always fail.
         APTR foo;
         if(MultiAllocVec(MA_FAILSIZE0,
                           &foo,0,MEMF_CLEAR,
                           0)
         {...}

   NOTES
       requires exec.library to be open.

       if the MA_FAILSIZE0 flag is not set, 0 byte allocations
       will pass even though no memory will be allocated for that.
       entry and mt_Ptr will be set to 0.

       The memory allocated may be freed individually with 
       exec.library/FreeVec()

   BUGS

   SEE ALSO
       MultiFreeVecA(), MultiAllocMemA(),MultiFreeMemA(),
       MultiAllocPooledA(),MultiFreePooledA(),
       exec.library/AllocVec(), exec.library/FreeVec()
       exec.library/AllocMem(), exec.library/FreeMem()
       exec.library/AllocPooled(), exec.library/FreePooled()
extras.lib/MultiFreeMemA                             extras.lib/MultiFreeMemA

   NAME
       MultiFreeMemA -- Free multiple memory chunks.
       MultiFreeMem -- varargs stub.

   SYNOPSIS
       MultiFreeMemA(Args, FreeTagList)

       void MultiFreeMemA(ULONG, struct FreeTag *);

       MultiFreeMem(Args, FreeTag, ... )

       void MultiFreeMem(ULONG, ULONG, ... );

   FUNCTION
       Free multiple memory blocks allocated with MultiAllocMemA()
       or exec.library/AllocMem(). 

   INPUTS
       Args - Number of blocks that are to be freed.
       FreeTagList - An array of FreeTags. may be NULL.
                       ft_Ptr - contains a pointer to a
                                memory block or NULL.
                       ft_Size - the size of the block.

   RESULT
       none.

   NOTES
       requires exec.library to be open.

   SEE ALSO
       MultiAllocVecA(), MultiFreeVecA(), MultiAllocMemA(),
       MultiAllocPooledA(), MultiFreePooledA(),
       exec.library/AllocVec(), exec.library/FreeVec()
       exec.library/AllocMem(), exec.library/FreeMem()
       exec.library/AllocPooled(), exec.library/FreePooled()

extras.lib/MultiFreePooledA                       extras.lib/MultiFreePooledA

   NAME
       MultiFreePooledA -- Free multiple memory chunks.
       MultiFreePooled -- varargs stub.

   SYNOPSIS
       MultiFreePooledA(Pool, Args, FreeTagList)

       void MultiFreePooledA(APTR, ULONG, struct FreeTag *);

       MultiFreePooled(Pool, Args, FreeTag, ... )

       void MultiFreePooled(APTR, ULONG, ULONG, ... );

   FUNCTION
       Free multiple memory blocks allocated with MultiAllocPooledA()
       or exec.library/AllocPooled(). 

   INPUTS
       Args - Number of blocks that are to be freed.
       FreeTagList - An array of FreeTags. may be NULL.
                       ft_Ptr - contains a pointer to a
                                memory block or NULL.
                       ft_Size - the size of the block.

   RESULT
       none.

   NOTES
       requires exec.library to be open.

   SEE ALSO
       MultiAllocVecA(), MultiFreeVecA(), MultiAllocMemA(),
       MultiAllocPooledA(), MultiFreePooledA(),
       exec.library/AllocVec(), exec.library/FreeVec()
       exec.library/AllocMem(), exec.library/FreeMem()
       exec.library/AllocPooled(), exec.library/FreePooled()

extras.lib/MultiFreeVecA                             extras.lib/MultiFreeVecA

   NAME
       MultiFreeVecA -- Free multiple memory chunks.
       MultiFreeVec -- varargs stub.

   SYNOPSIS
       MultiFreeVecA(Args,MemBlockList)

       MultiFreeVecA(ULONG, APTR *);

       MultiFreeVec(Args, MemBlock)

       void MultiFreeVec(ULONG, ULONG, ... );

   FUNCTION
       Free multiple memory blocks allocated with MultiAllocVecA()
       or exec.library/AllocVec(). 

   INPUTS
       Args - Number of blocks that are to be freed.
       MemBlockList - An array of pointers to memory
                      blocks to be freed or NULL.

   RESULT
       none.

   NOTES
       requires exec.library to be open.

   SEE ALSO
       MultiAllocVecA(), MultiFreeVecA(), MultiAllocMemA(), MultiFreeMemA(),
       MultiAllocPooledA(), MultiFreePooledA(),
       exec.library/AllocVec(), exec.library/FreeVec()
       exec.library/AllocMem(), exec.library/FreeMem()
       exec.library/AllocPooled(), exec.library/FreePooled()
extras.lib/NextEntry                                     extras.lib/NextEntry

   NAME
       NextEntry - Find the next entry in a database file.

   SYNOPSIS
       error = NextEntry(File, EntryName, Buffer, BufferSize)
       
       LONG NextEntry(BPTR, STRPTR, STRPTR, ULONG);

   FUNCTION
       Seeks for the next entry in a database file.

   INPUTS
       File - AmigaDos file handle.
       EntryName - the name of the entry, usually "ENTRY".
              case is insignificant.
       Buffer - a buffer for reading data from a file.
       BufferSize - the size of the buffer.

   RESULT
       returns 0 on failure.  on success the file is positioned
       inside the entry.

   EXAMPLE

   NOTES
       This function is mainly used for other lib functions

   BUGS

   SEE ALSO

extras.lib/NextNNStr                                     extras.lib/NextNNStr

   NAME
       NextNNStr -- Get the next string in a double NULL terminted
                    string array (aka NNString).

   SYNOPSIS
       nextstring=NextNNStr(NNString)

       STRPTR NextNNStr(STRPTR);

   FUNCTION
       returns a pointer to the next string contained in a 
       double NULL teminated string array, or NULL.

   INPUTS
       NNString - A pointer to some part of a double NULL string.

   RESULT
       Pointer to the next string or NULL if there is no string.

   EXAMPLE
       ** this example steps through an NNString. **

       STRPTR NNString;
       STRPTR str;

       for(str=NNString; str; str=NextNNStr(str))
       {
         printf("%s\n",str);
       }

       The above can be simplified by using the ProcessNNStr macro
       defined in extras/nnstring.h

       STRPTR NNString;
       STRPTR str;

       ProcessNNStr(NNString,str)
       {
         printf("%s\n",str);
       }

   NOTES

   BUGS

   SEE ALSO
       NNString AddNNStr() ProcessNNStr, extras/macros.h

extras.lib/NNString_Overview                     extras.lib/NNString_Overview

   FUNCTION
       An NNString is an array of strings, stored end to end, ending
       with a double NULL.  Individual strings are seperated by NULLs.

   EXAMPLE
       An NNString representing this array of strings:
       "Cow" "Dog" "Barn"
       would look like this:
       "Cow\0Dog\0Barn\0\0"

   SEE ALSO
       NextNNStr(), ProcessNNStr, GetEntryData(), AddNNStr(), 
       NNStrLen()

extras.lib/NNStrLen                                       extras.lib/NNStrLen

   NAME
       NNStrLen -- Return the length of an NNString.

   SYNOPSIS
       length=NNStrLen(NNStr)

       LONG NNStrLen(STRPTR);

   FUNCTION
       Returns the length in bytes of an NNString, including the
       trailing NULLs. 

   INPUTS
       NNStr - NNString pointer.

   RESULT
       Size of NNStr include NULLs.

   SEE ALSO

extras.lib/NotBusy                                         extras.lib/NotBusy

   NAME
       NotBusy -- displays busy pointer.

   SYNOPSIS
       NotBusy(Window)

       void NotBusy(struct Window *);

   FUNCTION
       Removes the busy pointer for the specified
       window.

   INPUTS
       Window - the window to remove the busy pointer
                from.

   RESULT
       None.

   NOTES
       requires intuition.library to be open.

       This does not change the Window's IDCMP flags.
       This function does nothing in WB versions less than
       3.0

   SEE ALSO
       Busy()

extras.lib/OBSOLETECheckInnerWindowSizextras.lib/OBSOLETECheckInnerWindowSize

   NAME
       CheckInnerWindowSize - See if a window will fit on a screen.

   SYNOPSIS
       windowfits = CheckInnerWindowSize(Scr, Width, Height,
                                     XScale, YScale)

       BOOL CheckInnerWindoeSize(struct Screen *, WORD, WORD, 
                                    float, float);

   FUNCTION
       This function checks to see if a window with the specified
       inner dimensions will fit on a screen.

   INPUTS
       Scr - the Screen the window is destine for.
       Width -  the base inner width of the window.
       Height - the base inner height of the window.
       XScale - the proposed x scale of the window.
       YScale - the proposed y scale of the window.

   RESULT
       Returns TRUE if the window will fit, and FALSE if not.
       if the XScale or YScale is <=0 it will also fail.

   SEE ALSO
       GetGUIScale(), CheckWindowSize()

extras.lib/OBSOLETECheckWindowSize         extras.lib/OBSOLETECheckWindowSize

   NAME
       CheckWindowSize - See if a window will fit on a screen.

   SYNOPSIS
       windowfits = CheckWindowSize(Scr, Width, Height,
                                     XScale, YScale)

       BOOL CheckWindowSize(struct Screen *, WORD, WORD, 
                                    float, float);

   FUNCTION
       This function checks to see if a window will fit on a screen.

   INPUTS
       Scr - the Screen the window is destine for.
       Width - the base width of the window.
       Height - the base height of the window.
       XScale - the proposed x scale of the window.
       YScale - the proposed y scale of the window.

   RESULT
       Returns TRUE if the window will fit, and FALSE if not.
       if the XScale or YScale is <=0 it will also fail.

   SEE ALSO
       GetGUIScale(), CheckInnerWindowSize()

extras.lib/OBSOLETEDrawBevelBoxes           extras.lib/OBSOLETEDrawBevelBoxes

   NAME
       DrawBevelBoxes -- draw a series of scaled bevel boxws.

   SYNOPSIS
       DrawBevelBoxes(Window, VisualInfo, BBoxes, NumBoxes,
             XScale, YScale);  

       void DrawBevelBoxes(struct Window *, APTR, 
             struct BevelBox *, LONG, float, float);

   FUNCTION
       Draws a series of scaled boxes.

   INPUTS
       Win - the Window to draw the bevel boxes in.
       VI - VisualInfo previously obtained by 
            gadtools.library/GetVisualInfoA()
       BBoxes - pointer to an array of struct BevelBox.
       NumBoxes - the number of entries in the array.
       XScale - 
       YScale - 

   EXAMPLE

   NOTES

   BUGS

   SEE ALSO

extras.lib/PD_PackData                                 extras.lib/PD_PackData

   NAME
       PD_PackData -- Pack supplied data into a memory block.

   SYNOPSIS
       packeddata = PD_PackData(Tags)

       struct PackedData *PD_PackData(Tag Tags, ... )

   FUNCTION
       Packs supplied data into a memory block, suitable for writing
       to disk.

   INPUTS
       Tags - a TagList.
           PD_Version - Adds a ULONG into the memory block.
                 Sets the version of the data.

           PD_BYTE - Adds a BYTE into the memory block.
           PD_UBYTE - Adds a UBYTE into the memory block.

           PD_WORD - Adds a WORD into the memory block. 
           PD_UWORD - Adds a UWORD into the memory block.

           PD_LONG - Adds a LONG into the memory block.
           PD_ULONG - Adds a ULONG into the memory block.

           PD_STRPTR - Adds a NULL terminated string into the memory block.
                 NULL pointers are supported

           PD_APTRSize - Adds the ULONG into the memory block,
                 Sets size for subsequent PD_APTRs.
           PD_APTR - Adds data into the memory block.  Size 
                 of data is set by previous PD_APTRSize.
                 if NULL, PD_APtrSize bytes are still written but are
                 unset.

           PD_BufferSize - Set the size of subsequent PD_Buffers
                 This tag does not add data to buffer.

           PD_Buffer     - Adds size of buffer, ULONG, followed by
                 data pointed to by ti_Data. 
                 See note for PD_UnpackData(()
           
           PD_MemoryFlags - Sets MemoryFlags for allocating 


   RESULT

   EXAMPLE

   NOTES
     Except for BYTEs, data is UWORD aligned, pads are inserted as needed.

     PackedData->pd_Data
     {
       ULONG privatelength
       {private bytes}
       user data
     }     


   BUGS

   SEE ALSO

extras.lib/PD_UnpackData                             extras.lib/PD_UnpackData

   NAME
       PD_UnpackData -- Unpack memory block.

   SYNOPSIS
       success = PD_UnpackData(Tags)

       BOOL *PD_UnpackData(Tag Tags, ... )

   FUNCTION
       Packs supplied data into a memory block, suitable for writing
       to disk.

   INPUTS
       Tags - a TagList.
           For most tags, ti_Data is a storage pointer, if NULL the 
           data is parsed but not stored.

           PD_Version   - (ULONG *) Reads the version of the data.

           PD_IfVersion - (ULONG) Once PD_Version has been read, you can
               this tag to stop data processing if PD_Version is lower than
               the value of this tag. 

           PD_BYTE - (BYTE *) Read a BYTE
           PD_UBYTE -(UBYTE *)

           PD_WORD - (WORD *) Read a WORD
           PD_UWORD -(UWORD *)

           PD_LONG - (LONG *) Read a LONG
           PD_ULONG -(LONG *)

           PD_STRPTR - (STRPTR *) AllocVec()s Memory for new STRPTR
               if PD_FreeSTRPTR is set, existing STRPTR is FreeVec()ed.

           PD_APTRSize - (ULONG *) Reads the amount of bytes that subsequent
               PD_APTRs read from the packed data.

           PD_APTR - Reads data from the memory block.  Size 
                 of data is set by previous PD_APTRSize.
                 if NULL, PD_APtrSize bytes are still written but are
                 unset.

           PD_BufferSize - (ULONG) Set data size for subsequent PD_Struct 
                 reads. This tag does not read any data, you must specify 
                 the size of your Buffer.

           PD_Buffer - (APTR) Data is copied to existing memory, the amount 
                 of data copied will be the lesser of PD_BufferSize or the
                 size stored in the packed data block.
           
           PD_MemoryFlags - Sets MemoryFlags for allocating 


   RESULT

   EXAMPLE
       PD_UnpackData(pd,
           PD_Version,     &dataversion, // store version number
           PD_BYTE,        &byte1,
           PD_BYTE,        0,            // byte not stored.
           PD_STRPTR,      &string,

           PD_IfVersion,   1, /* the following will only be read id PD_Versio
n >= 1 */
           PD_APTRSize,    10,
           PD_APTR,        &memchunk1,
           PD_APTR,        &memchunk2,
      
           PD_IfVersion,   2, /* the following will only be read id PD_Versio
n >= 2 */
           PD_STRUCT(mystruct),
      
           TAG_DONE,       0))

   BUGS

   SEE ALSO

extras.lib/PhraseInStr                                 extras.lib/PhraseInStr

   NAME
       PhraseInStr -- Find a phrase or word in a string.

   SYNOPSIS
       str = PhraseInStr(InStr, Phrase)

       STRPTR PhraseInStr(STRPTR , Phrase)

   FUNCTION
       Locates a phrase or word in a string.

   INPUTS
       InStr - String to search in.
       Phrase to search for.

   RESULT
       returns pointer to phrase in InStr or NULL.

   EXAMPLE

   NOTES
       case insensitive.

   BUGS

   SEE ALSO

extras.lib/RenderText                                   extras.lib/RenderText

   NAME
       RenderTextA -- Write text into a RastPort.
       RenderText -- varargs stub.

   SYNOPSIS
       reserved = RenderTextA( RP, String, TagList)

       LONG RenderTextA( struct RastPort *, STRPTR, 
                         struct TagItem *);

       reserved = RenderText( RP, String, Tags, ... )

       LONG RenderText( struct RastPort *, STRPTR, 
                        Tag, ...);

   FUNCTION
       Writes text into a Rastport, basically an interface
       to the graphics.library/Text() function.

   INPUTS
       RP - rastport to write to.
       String - the string to write.
       TagList - an array of TagItems.
         RT_Baseline - baseline of the cursor. 
                       default RastPort->cp_y
         RT_XPos     - horizontal position of the cursor.
                       default RastPort->cp_x
         RT_MaxWidth - maximum pixel length of text, excess
                       characters will be clipped.
         RT_Justification - RTJ_???  (default _LEFT)
         RT_TextFont - struct TextFont * from OpenFont()
         RT_Strlen   - number of characters in string.
         RT_TextLength - (ULONG *) Width in pixels of printed texted.


   RESULT
       Number of characters drawn.

   BUGS
       RenderText does not reset a RastPort's TextFont
       after using RT_TextFont. 

   SEE ALSO
       mlr_rendertext.image image class.

extras.lib/StrFontLen                                   extras.lib/StrFontLen

   NAME
       StrFontLen - get the pixel length of a string.

   SYNOPSIS
       length=StrFontLen(Font, Str)

       LONG StrFontLen(struct TextFont *,STRPTR);

   FUNCTION
       This function returns the number of pixels a string
       would occupy if rendered in the specified Font.

   INPUTS
       Font - struct TextFont * previously opened by 
              OpenFont() or OpenDiskFont().
       Str - a pointer to a null terminated string.

   RESULT
       the pixel length of the string or 0 if either parameter
       is NULL.

extras.lib/Strip                                             extras.lib/Strip

   NAME
       Strip - Remove leading and trailing white spaces.

   SYNOPSIS
       Strip(Str)       

       void Strip(STRPTR);

   FUNCTION
       This function removes leading and trailing whites-paces
       from a string.  White-spaces are determined by the 
       IsWhiteSpace() function.

   INPUTS
       Str - a null terminated string pointer.

   RESULT
       none.

   EXAMPLE

   NOTES
       Modifies existing string memory.

   BUGS
       Will not work on NNStr used by other some functions in 
       the extras.lib.

   SEE ALSO
       IsWhiteSpace().

extras.lib/StrIStr                                         extras.lib/StrIStr

   NAME
       StrIStr -- search for a string in another string, case 
                  insenseitive.

   SYNOPSIS
       StrIStr(InStr,SearchStr)

       STRPTR StrIStr(STRPTR InStr,STRPTR SearchStr);

   FUNCTION
       Seach for a string inside another, case insensitive.

   INPUTS
       InStr - the string to search in.
       SearchStr - the string to search for.

   RESULT
       returns a pointer in InStr that matches SearchStr, or NULL
       if no match was found.

extras.lib/StrLength                                     extras.lib/StrLength

   NAME
       StrLength -- Get the pixel length of a string.

   SYNOPSIS
       Len = StrLength(Tags)
       
       LONG StrLength(Tag, ... );

   FUNCTION
       Find the length of a given string.  If multiple strings
       are given, returns the longest length.

   INPUTS
       Tags 
         SL_TextFont - (struct TextFont *)The font the string will
           be rendered in. (required)
         SL_IgnoreChars - (STRPTR) Null terminated string of characters
           to ignore from the length calculation, useful for underscores
           in gadget text, etc.
         SL_String - (STRPTR) String to size.

   RESULT
       Length in pixels of longest string.

   EXAMPLE
         *find length of button text without the "_" 
         len= StrLength(SL_TextFont     ,TF,
                        SL_String       ,"_Button",
                        SL_IgnoreChars  ,"_",
                        TAG_DONE);

         * find maximum length of red, green and blue without "_"
         len= StrLength(SL_TextFont     ,TF,
                        SL_String       ,"_Red",
                        SL_String       ,"_Green",
                        SL_String       ,"_Blue",
                        SL_IgnoreChars  ,"_",
                        TAG_DONE);

   NOTES

   BUGS

   SEE ALSO

extras.lib/thread_EndThread                       extras.lib/thread_EndThread

   NAME
       thread_EndThread -- end a thread.

   SYNOPSIS






   FUNCTION


   INPUTS

   RESULT

   EXAMPLE

   NOTES
       Note, this function waits for a reply.

   BUGS

   SEE ALSO

extras.lib/thread_PutTMsg                           extras.lib/thread_PutTMsg

   NAME
       thread_PutTMsg -- Send a ThreadMessage to a thread.

   SYNOPSIS






   FUNCTION


   INPUTS

   RESULT

   EXAMPLE

   NOTES
       Note, this function does not wait for a reply.

   BUGS

   SEE ALSO

extras.lib/thread_PutTMsg_TagList           extras.lib/thread_PutTMsg_TagList

   NAME
       thread_PutTMsg_TagList -- Send a TagListTMsg to a thread.

   SYNOPSIS






   FUNCTION


   INPUTS

   RESULT

   EXAMPLE

   NOTES
       Note, this function waits for a reply.

   BUGS

   SEE ALSO

extras.lib/thread_StartThread                   extras.lib/thread_StartThread

   NAME
       thread_StartThread -- Create a thread.

   SYNOPSIS
       Thread thread_StartThread(Tags)

       struct Thread *thread_StartThread(Tag, ... );

   FUNCTION
       Creates and starts a new thread (Process).

   INPUTS
       Tags - TagList (on stack)
         TA_Name - Name of thread, defaults to "Thread".
         TA_Stack - Stacksize, default 8192.
         TA_Priority - default -1
         TA_MsgHandler - Function to handle thread messages.
         TA_UserData - (APTR)

   RESULT
       Pointer to the newly created Thread, or NULL on failure.
       The Thread stucture is ReadOnly, except for
         t_Node, UserData and ThreadData

   NOTES
       It's suggested that ThreadData be used store local data
       for the Thread.

   BUGS

   SEE ALSO

extras.lib/UpdateProgressMeterA               extras.lib/UpdateProgressMeterA

   NAME
       UpdateProgressMeterA -- Change ProgressMeter attributes.
       UpdateProgressMeter -- varargs stub.

   SYNOPSIS
       numProcessed UpdateProgressMeterA(PM,TagList)

       LONG UpdateProgressMeterA(ProgressMeter ,struct TagItem *);

       numProcessed UpdateProgressMeter(PM,FirstTag)

       LONG UpdateProgressMeter(ProgressMeter , Tag, ...);

   FUNCTION
       Updates a ProgressMeter's attributes  and refreshes
       it as neccessary.

   INPUTS
       PM - Pointer to an existing ProgressMeter or NULL.
       TagList - TagList of attributes to change or NULL.
           Only these four tags are processed.
             PM_QueryCancel
             PM_MeterValue
             PM_LowValue
             PM_HighValue

   RESULT
       returns the number of tags processed.

   EXAMPLE

   NOTES
     requires diskfont, exec, gadtools, graphics, intuition & utility
     libraries to be open.

   BUGS

   SEE ALSO
     AllocProgressMeterA(), FreeProgressMeter() 

