[Contents] [Index] [Help] [Retrace] [browse <] [Browse >]

TABLE OF CONTENTS

dos.library/AbortPkt
dos.library/AddBuffers
dos.library/AddDosEntry
dos.library/AddPart
dos.library/AddSegment
dos.library/AllocDosObject
dos.library/AssignAdd
dos.library/AssignLate
dos.library/AssignLock
dos.library/AssignPath
dos.library/AttemptLockDosList
dos.library/ChangeMode
dos.library/CheckSignal
dos.library/Cli
dos.library/CliInitNewcli
dos.library/CliInitRun
dos.library/Close
dos.library/CompareDates
dos.library/CreateDir
dos.library/CreateNewProc
dos.library/CreateProc
dos.library/CurrentDir
dos.library/DateStamp
dos.library/DateToStr
dos.library/Delay
dos.library/DeleteFile
dos.library/DeleteVar
dos.library/DeviceProc
dos.library/DoPkt
dos.library/DupLock
dos.library/DupLockFromFH
dos.library/EndNotify
dos.library/ErrorReport
dos.library/ExAll
dos.library/Examine
dos.library/ExamineFH
dos.library/Execute
dos.library/Exit
dos.library/ExNext
dos.library/Fault
dos.library/FGetC
dos.library/FGets
dos.library/FilePart
dos.library/FindArg
dos.library/FindCliProc
dos.library/FindDosEntry
dos.library/FindSegment
dos.library/FindVar
dos.library/Flush
dos.library/Format
dos.library/FPutC
dos.library/FPuts
dos.library/FRead
dos.library/FreeArgs
dos.library/FreeDeviceProc
dos.library/FreeDosEntry
dos.library/FreeDosObject
dos.library/FWrite
dos.library/GetArgStr
dos.library/GetConsoleTask
dos.library/GetCurrentDirName
dos.library/GetDeviceProc
dos.library/GetFileSysTask
dos.library/GetProgramDir
dos.library/GetProgramName
dos.library/GetPrompt
dos.library/GetVar
dos.library/Info
dos.library/Inhibit
dos.library/Input
dos.library/InternalLoadSeg
dos.library/InternalUnLoadSeg
dos.library/IoErr
dos.library/IsFileSystem
dos.library/IsInteractive
dos.library/LoadSeg
dos.library/Lock
dos.library/LockDosList
dos.library/LockRecord
dos.library/LockRecords
dos.library/MakeDosEntry
dos.library/MakeLink
dos.library/MatchEnd
dos.library/MatchFirst
dos.library/MatchNext
dos.library/MatchPattern
dos.library/MatchPatternNoCase
dos.library/MaxCli
dos.library/NameFromFH
dos.library/NameFromLock
dos.library/NewLoadSeg
dos.library/NextDosEntry
dos.library/Open
dos.library/OpenFromLock
dos.library/Output
dos.library/ParentDir
dos.library/ParentOfFH
dos.library/ParsePattern
dos.library/ParsePatternNoCase
dos.library/PathPart
dos.library/PrintFault
dos.library/PutStr
dos.library/Read
dos.library/ReadArgs
dos.library/ReadItem
dos.library/ReadLink
dos.library/Relabel
dos.library/RemAssignList
dos.library/RemDosEntry
dos.library/RemSegment
dos.library/Rename
dos.library/ReplyPkt
dos.library/RunCommand
dos.library/SameDevice
dos.library/SameLock
dos.library/Seek
dos.library/SelectInput
dos.library/SelectOutput
dos.library/SendPkt
dos.library/SetArgStr
dos.library/SetComment
dos.library/SetConsoleTask
dos.library/SetCurrentDirName
dos.library/SetFileDate
dos.library/SetFileSize
dos.library/SetFileSysTask
dos.library/SetIoErr
dos.library/SetMode
dos.library/SetProgramDir
dos.library/SetProgramName
dos.library/SetPrompt
dos.library/SetProtection
dos.library/SetVar
dos.library/SetVBuf
dos.library/SplitName
dos.library/StartNotify
dos.library/StrToDate
dos.library/StrToLong
dos.library/SystemTagList
dos.library/UnGetC
dos.library/UnLoadSeg
dos.library/UnLock
dos.library/UnLockDosList
dos.library/UnLockRecord
dos.library/UnLockRecords
dos.library/VFPrintf
dos.library/VFWritef
dos.library/VPrintf
dos.library/WaitForChar
dos.library/WaitPkt
dos.library/Write
dos.library/WriteChars
dos.library/AbortPkt                                     dos.library/AbortPkt

   NAME
        AbortPkt -- Aborts an asynchronous packet, if possible. (V36)

   SYNOPSIS
        AbortPkt(port, pkt)
                  D1    D2

        void AbortPkt(struct MsgPort *, struct DosPacket *)

   FUNCTION
        This attempts to abort a packet sent earlier with SendPkt to a
        handler.  There is no guarantee that any given handler will allow
        a packet to be aborted, or if it is aborted whether function
        requested completed first or completely.  After calling AbortPkt(),
        you must wait for the packet to return before reusing it or
        deallocating it.

   INPUTS
        port - port the packet was sent to
        pkt  - the packet you wish aborted

   BUGS
        As of V37, this function does nothing.

   SEE ALSO
        SendPkt(), DoPkt(), WaitPkt()

dos.library/AddBuffers                                 dos.library/AddBuffers

   NAME
        AddBuffers -- Changes the number of buffers for a filesystem (V36)

   SYNOPSIS
        success = AddBuffers(filesystem, number)
        D0                     D1          D2

        BOOL AddBuffers(STRPTR, LONG)

   FUNCTION
        Adds buffers to a filesystem.  If it succeeds, the number of current
        buffers is returned in IoErr().  Note that "number" may be negative.
        The amount of memory used per buffer, and any limits on the number of
        buffers, are dependant on the filesystem in question.
        If the call succeeds, the number of buffers in use on the filesystem
        will be returned by IoErr().

   INPUTS
        filesystem - Name of device to add buffers to (with ':').
        number     - Number of buffers to add.  May be negative.

   RESULT
        success    - Success or failure of command.

   BUGS
        The V36 ROM filesystem (FFS/OFS) doesn't return the right number of
        buffers unless preceded by an AddBuffers(fs,-1) (in-use buffers aren't
        counted).  This is fixed in V37.

        The V37 and before ROM filesystem doesn't return success, it returns
        the number of buffers.  The best way to test for this is to consider
        0 (FALSE) failure, -1 (DOSTRUE) to mean that IoErr() will have the
        number of buffers, and any other positive value to be the number of
        buffers.  It may be fixed in some future ROM revision.

   SEE ALSO
        IoErr()

dos.library/AddDosEntry                               dos.library/AddDosEntry

   NAME
        AddDosEntry -- Add a Dos List entry to the lists (V36)

   SYNOPSIS
        success = AddDosEntry(dlist)
        D0                     D1

        LONG AddDosEntry(struct DosList *)

   FUNCTION
        Adds a device, volume or assign to the dos devicelist.  Can fail if it
        conflicts with an existing entry (such as another assign to the same
        name or another device of the same name).  Volume nodes with different
        dates and the same name CAN be added, or with names that conflict with
        devices or assigns.  Note: the dos list does NOT have to be locked to
        call this.  Do not access dlist after adding unless you have locked the
        Dos Device list.

        An additional note concerning calling this from within a handler:
        in order to avoid deadlocks, your handler must either be multi-
        threaded, or it must attempt to lock the list before calling this
        function.  The code would look something like this:

        if (AttemptLockDosList(LDF_xxx|LDF_WRITE))
        {
                rc = AddDosEntry(...);
                UnLockDosList(LDF_xxx|LDF_WRITE);
        }

        If AttemptLockDosList() fails (i.e. it's locked already), check for
        messages at your filesystem port (don't wait!) and try the
        AttemptLockDosList() again.

   INPUTS
        dlist   - Device list entry to be added.

   RESULT
        success - Success/Failure indicator

   SEE ALSO
        RemDosEntry(), FindDosEntry(), NextDosEntry(), LockDosList(),
        MakeDosEntry(), FreeDosEntry(), AttemptLockDosList()

dos.library/AddPart                                       dos.library/AddPart

   NAME
        AddPart -- Appends a file/dir to the end of a path (V36)

   SYNOPSIS
        success = AddPart( dirname, filename, size )
        D0                   D1        D2      D3

        BOOL AddPart( STRPTR, STRPTR, ULONG )

   FUNCTION
        This function adds a file, directory, or subpath name to a directory
        path name taking into account any required separator characters.  If
        filename is a fully-qualified path it will totally replace the current
        value of dirname.

   INPUTS
        dirname  - the path to add a file/directory name to.
        filename - the filename or directory name to add.  May be a relative
                   pathname from the current directory (example: foo/bar).
                   Can deal with leading '/'(s), indicating one directory up
                   per '/', or with a ':', indicating it's relative to the
                   root of the appropriate volume.
        size     - size in bytes of the space allocated for dirname.  Must
                   not be 0.

   RESULT
        success - non-zero for ok, FALSE if the buffer would have overflowed.
                  If an overflow would have occured, dirname will not be
                  changed.

   BUGS
        Doesn't check if a subpath is legal (i.e. doesn't check for ':'s) and
        doesn't handle leading '/'s in 2.0 through 2.02 (V36).  V37 fixes
        this, allowing filename to be any path, including absolute.

   SEE ALSO
        Filepart(), PathPart()

dos.library/AddSegment                                 dos.library/AddSegment

   NAME
        AddSegment - Adds a resident segment to the resident list (V36)

   SYNOPSIS
        success = AddSegment(name, seglist, type)
        D0                    D1     D2      D3

        BOOL AddSegment(STRPTR, BPTR, LONG)

   FUNCTION
        Adds a segment to the Dos resident list, with the specified Seglist
        and type (stored in seg_UC - normally 0).  NOTE: currently unused
        types may cause it to interpret other registers (d4-?) as additional
        parameters in the future.

        Do NOT build Segment structures yourself!

   INPUTS
        name    - name for the segment
        seglist - Dos seglist of code for segment
        type    - initial usecount, normally 0

   RESULT
        success - success or failure

   SEE ALSO
        FindSegment(), RemSegment(), LoadSeg()

dos.library/AllocDosObject                         dos.library/AllocDosObject

   NAME
        AllocDosObject -- Creates a dos object (V36)

   SYNOPSIS
        ptr = AllocDosObject(type, tags)
        D0                    D1    D2

        void *AllocDosObject(ULONG, struct TagItem *)

        ptr = AllocDosObjectTagList(type, tags)
        D0                           D1    D2

        void *AllocDosObjectTagList(ULONG, struct TagItem *)

        ptr = AllocDosObjectTags(type, Tag1, ...)

        void *AllocDosObjectTags(ULONG, ULONG, ...)

   FUNCTION
        Create one of several dos objects, initializes it, and returns it
        to you.  Note the DOS_STDPKT returns a pointer to the sp_Pkt of the
        structure.

   INPUTS
        type - type of object requested
        tags - pointer to taglist with additional information

   RESULT
        packet - pointer to the object or NULL

   SEE ALSO
        FreeDosObject(), <dos/dostags.h>, <dos/dos.h>

dos.library/AssignAdd                                   dos.library/AssignAdd

   NAME
        AssignAdd -- Adds a lock to an assign for multi-directory assigns (V36)

   SYNOPSIS
        success = AssignAdd(name,lock)
        D0                   D1   D2

        BOOL AssignAdd(STRPTR,BPTR)

   FUNCTION
        Adds a lock to an assign, making or adding to a multi-directory
        assign.  Note that this only will succeed on an assign created with
        AssignLock(), or an assign created with AssignLate() which has been
        resolved (converted into a AssignLock()-assign).

        NOTE: you should not use the lock in any way after making this call
        successfully.  It becomes the part of the assign, and will be unlocked
        by the system when the assign is removed.  If you need to keep the
        lock, pass a lock from DupLock() to AssignLock().

   INPUTS
        name - Name of device to assign lock to (without trailing ':')
        lock - Lock associated with the assigned name

   RESULT
        success - Success/failure indicator.  On failure, the lock is not
                  unlocked.

   SEE ALSO
        Lock(), AssignLock(), AssignPath(), AssignLate(), DupLock(),
        RemAssignList()

dos.library/AssignLate                                 dos.library/AssignLate

   NAME
        AssignLate -- Creates an assignment to a specified path later (V36)

   SYNOPSIS
        success = AssignLate(name,path)
        D0                    D1   D2

        BOOL AssignLate(STRPTR,STRPTR)

   FUNCTION
        Sets up a assignment that is expanded upon the FIRST reference to the
        name.  The path (a string) would be attached to the node.  when
        the name is referenced (Open("FOO:xyzzy"...), the string will be used
        to determine where to set the assign to, and if the directory can be
        locked, the assign will act from that point on as if it had been
        created by AssignLock().

        A major advantage is assigning things to unmounted volumes, which
        will be requested upon access (useful in startup sequences).

   INPUTS
        name - Name of device to be assigned (without trailing ':')
        path - Name of late assignment to be resolved on the first reference.

   RESULT
        success - Success/failure indicator of the operation

   SEE ALSO
        Lock(), AssignAdd(), AssignPath(), AssignLock(),

dos.library/AssignLock                                 dos.library/AssignLock

   NAME
        AssignLock -- Creates an assignment to a locked object (V36)

   SYNOPSIS
        success = AssignLock(name,lock)
        D0                    D1   D2

        BOOL AssignLock(STRPTR,BPTR)

   FUNCTION
        Sets up an assign of a name to a given lock.  Passing NULL for a lock
        cancels any outstanding assign to that name.  If an assign entry of
        that name is already on the list, this routine replaces that entry.  If
        an entry is on the list that conflicts with the new assign, then a
        failure code is returned.

        NOTE: you should not use the lock in any way after making this call
        successfully.  It becomes the assign, and will be unlocked by the
        system when the assign is removed.  If you need to keep the lock,
        pass a lock from DupLock() to AssignLock().

   INPUTS
        name - Name of device to assign lock to (without trailing ':')
        lock - Lock associated with the assigned name

   RESULT
        success - Success/failure indicator.  On failure, the lock is not
                  unlocked.

   SEE ALSO
        Lock(), AssignAdd(), AssignPath(), AssignLate(), DupLock(),
        RemAssignList()

dos.library/AssignPath                                 dos.library/AssignPath

   NAME
        AssignPath -- Creates an assignment to a specified path (V36)

   SYNOPSIS
        success = AssignPath(name,path)
        D0                    D1   D2

        BOOL AssignPath(STRPTR,STRPTR)

   FUNCTION
        Sets up a assignment that is expanded upon EACH reference to the name.
        This is implemented through a new device list type (DLT_ASSIGNPATH, or
        some such).  The path (a string) would be attached to the node.  when
        the name is referenced (Open("FOO:xyzzy"...), the string will be used
        to determine where to do the open.  No permanent lock will be part of
        it.  For example, you could AssignPath() c2: to df2:c, and references
        to c2: would go to df2:c, even if you change disks.

        The other major advantage is assigning things to unmounted volumes,
        which will be requested upon access (useful in startup sequences).

   INPUTS
        name - Name of device to be assigned (without trailing ':')
        path - Name of late assignment to be resolved at each reference

   RESULT
        success - Success/failure indicator of the operation

   SEE ALSO
        AssignAdd(), AssignLock(), AssignLate(), Open()

dos.library/AttemptLockDosList                 dos.library/AttemptLockDosList

   NAME
        AttemptLockDosList -- Attempt to lock the Dos Lists for use (V36)

   SYNOPSIS
        dlist = AttemptLockDosList(flags)
        D0                          D1

        struct DosList *AttemptLockDosList(ULONG)

   FUNCTION
        Locks the dos device list in preparation to walk the list.  If the
        list is 'busy' then this routine will return NULL.  See LockDosList()
        for more information.

   INPUTS
        flags - Flags stating which types of nodes you want to lock.

   RESULT
        dlist - Pointer to the beginning of the list or NULL.  Not a valid
                node!

   SEE ALSO
        LockDosList(), UnLockDosList(), Forbid(), NextDosEntry()

dos.library/ChangeMode                                 dos.library/ChangeMode

   NAME
        ChangeMode - Change the current mode of a lock or filehandle (V36)

   SYNOPSIS
        success = ChangeMode(type, object, newmode)
        D0                    D1     D2      D3

        BOOL ChangeMode(ULONG, BPTR, ULONG)

   FUNCTION
        This allows you to attempt to change the mode in use by a lock or
        filehandle.  For example, you could attempt to turn a shared lock
        into an exclusive lock.  The handler may well reject this request.
        Warning: if you use the wrong type for the object, the system may
        crash.

   INPUTS
        type    - Either CHANGE_FH or CHANGE_LOCK
        object  - A lock or filehandle
        newmode - The new mode you want

   RESULT
        success - Boolean

   BUGS
        Did not work in 2.02 or before (V36).  Works in V37.  In the
        earlier versions, it can crash the machine.

   SEE ALSO
        Lock(), Open()

dos.library/CheckSignal                               dos.library/CheckSignal

   NAME
        CheckSignal -- Checks for break signals (V36)

   SYNOPSIS
        signals = CheckSignal(mask)
        D0                    D1

        ULONG CheckSignals(ULONG)

   FUNCTION
        This function checks to see if any signals specified in the mask have
        been set and if so, returns them.  Otherwise it returns FALSE.
        All signals specified in mask will be cleared.

   INPUTS
        mask    - Signals to check for.

   RESULT
        signals - Signals specified in mask that were set.

   SEE ALSO

dos.library/Cli                                               dos.library/Cli

   NAME
        Cli -- Returns a pointer to the CLI structure of the process (V36)

   SYNOPSIS
        cli_ptr = Cli()
        D0

        struct CommandLineInterface *Cli(void)

   FUNCTION
        Returns a pointer to the CLI structure of the current process, or NULL
        if the process has no CLI structure.

   RESULT
        cli_ptr - pointer to the CLI structure, or NULL.

   SEE ALSO

dos.library/CliInitNewcli                           dos.library/CliInitNewcli

   NAME
        CliInitNewcli -- Set up a process to be a shell from initial packet

   SYNOPSIS
        flags = CliInitNewcli( packet )
        D0                       A0

        LONG CliInitNewcli( struct DosPacket * )

   FUNCTION
        This function initializes a process and CLI structure for a new
        shell, from parameters in an initial packet passed by the system
        (NewShell or NewCLI, etc).  The format of the data in the packet
        is purposely not defined.  The setup includes all the normal fields
        in the structures that are required for proper operation (current
        directory, paths, input streams, etc).

        It returns a set of flags containing information about what type
        of shell invocation this is.

        Definitions for the values of fn:
                Bit 31     Set to indicate flags are valid
                Bit  3     Set to indicate asynch system call
                Bit  2     Set if this is a System() call
                Bit  1     Set if user provided input stream
                Bit  0     Set if RUN provided output stream

        If Bit 31 is 0, then you must check IoErr() to determine if an error
        occurred.  If IoErr() returns a pointer to your process, there has
        been an error, and you should clean up and exit.  The packet will
        have already been returned by CliInitNewcli().  If it isn't a pointer
        to your process and Bit 31 is 0, reply the packet immediately.
        (Note: this is different from what you do for CliInitRun().)

        This function is very similar to CliInitRun().

   INPUTS
        packet - the initial packet sent to your process MsgPort

   RESULT
        fn - flags or a pointer

   SEE ALSO
        CliInitRun(), ReplyPkt(), WaitPkt(), IoErr()

dos.library/CliInitRun                                 dos.library/CliInitRun

   NAME
        CliInitRun -- Set up a process to be a shell from initial packet

   SYNOPSIS
        flags = CliInitRun( packet )
        D0                    A0

        LONG CliInitRun( struct DosPacket * )

   FUNCTION
        This function initializes a process and CLI structure for a new
        shell, from parameters in an initial packet passed by the system
        (Run, System(), Execute()).  The format of the data in the packet
        is purposely not defined.  The setup includes all the normal fields
        in the structures that are required for proper operation (current
        directory, paths, input streams, etc).

        It returns a set of flags containing information about what type
        of shell invocation this is.

        Definitions for the values of fn:
                Bit 31     Set to indicate flags are valid
                Bit  3     Set to indicate asynch system call
                Bit  2     Set if this is a System() call
                Bit  1     Set if user provided input stream
                Bit  0     Set if RUN provided output stream

        If Bit 31 is 0, then you must check IoErr() to determine if an error
        occurred.  If IoErr() returns a pointer to your process, there has
        been an error, and you should clean up and exit.  The packet will
        have already been returned by CliInitNewcli().  If it isn't a pointer
        to your process and Bit 31 is 0, you should wait before replying
        the packet until after you've loaded the first command (or when you
        exit).  This helps avoid disk "gronking" with the Run command.
        (Note: this is different from what you do for CliInitNewcli().)

        If Bit 31 is 1, then if Bit 3 is one, ReplyPkt() the packet
        immediately (Asynch System()), otherwise wait until your shell exits
        (Sync System(), Execute()).
        (Note: this is different from what you do for CliInitNewcli().)

        This function is very similar to CliInitNewcli().

   INPUTS
        packet - the initial packet sent to your process MsgPort

   RESULT
        fn - flags or a pointer

   SEE ALSO
        CliInitNewcli(), ReplyPkt(), WaitPkt(), System(), Execute(), IoErr()

dos.library/Close                                           dos.library/Close

    NAME
        Close -- Close an open file

    SYNOPSIS
        success = Close( file )
           D0             D1

        BOOL Close(BPTR)

    FUNCTION
        The file specified by the file handle is closed. You must close all
        files you explicitly opened, but you must not close inherited file
        handles that are passed to you (each filehandle must be closed once
        and ONLY once).  If Close() fails, the file handle is still
        deallocated and should not be used.

    INPUTS
        file - BCPL pointer to a file handle

    RESULTS
        success - returns if Close() succeeded.  Note that it might fail
                  depending on buffering and whatever IO must be done to
                  close a file being written to.  NOTE: this return value
                  did not exist before V36!

    SEE ALSO
        Open(), OpenFromLock()

dos.library/CompareDates                             dos.library/CompareDates

   NAME
        CompareDates -- Compares two datestamps (V36)

   SYNOPSIS
        result = CompareDates(date1,date2)
        D0                     D1     D2

        LONG CompareDates(struct DateStamp *,struct DateStamp *)

   FUNCTION
        Compares two times for relative magnitide.  <0 is returned if date1 is
        later than date2, 0 if they are equal, or >0 if date2 is later than
        date1.  NOTE: this is NOT the same ordering as strcmp!

   INPUTS
        date1, date2 - DateStamps to compare

   RESULT
        result -  <0, 0, or >0 based on comparison of two date stamps

   SEE ALSO
        DateStamp(), DateToStr(), StrToDate()

dos.library/CreateDir                                   dos.library/CreateDir

    NAME
        CreateDir -- Create a new directory

    SYNOPSIS
        lock = CreateDir( name )
        D0                D1

        BPTR CreateDir(STRPTR)

    FUNCTION
        CreateDir creates a new directory with the specified name. An error
        is returned if it fails.  Directories can only be created on
        devices which support them, e.g. disks.  CreateDir returns an
        exclusive lock on the new directory if it succeeds.

    INPUTS
        name - pointer to a null-terminated string

    RESULTS
        lock - BCPL pointer to a lock or NULL for failure.

    SEE ALSO
        Lock(), UnLock()

dos.library/CreateNewProc                           dos.library/CreateNewProc

   NAME
        CreateNewProc -- Create a new process (V36)

   SYNOPSIS
        process = CreateNewProc(tags)
        D0                       D1

        struct Process *CreateNewProc(struct TagItem *)

        process = CreateNewProcTagList(tags)
        D0                              D1

        struct Process *CreateNewProcTagList(struct TagItem *)

        process = CreateNewProcTags(Tag1, ...)

        struct Process *CreateNewProcTags(ULONG, ...)

   FUNCTION
        This creates a new process according to the tags passed in.  See
        dos/dostags.h for the tags.

        You must specify one of NP_Seglist or NP_Entry.  NP_Seglist takes a
        seglist (as returned by LoadSeg()).  NP_Entry takes a function
        pointer for the routine to call.

        There are many options, as you can see by examining dos/dostags.h.
        The defaults are for a non-CLI process, with copies of your
        CurrentDir, HomeDir (used for PROGDIR:), priority, consoletask,
        windowptr, and variables.  The input and output filehandles default
        to opens of NIL:, stack to 4000, and others as shown in dostags.h.
        This is a fairly reasonable default setting for creating threads,
        though you may wish to modify it (for example, to give a descriptive
        name to the process.)

        CreateNewProc() is callable from a task, though any actions that
        require doing Dos I/O (DupLock() of currentdir, for example) will not
        occur.

        NOTE: if you call CreateNewProc() with both NP_Arguments, you must
        not specify an NP_Input of NULL.  When NP_Arguments is specified, it
        needs to modify the input filehandle to make ReadArgs() work properly.

   INPUTS
        tags - a pointer to a TagItem array.

   RESULT
        process - The created process, or NULL.  Note that if it returns
                  NULL, you must free any items that were passed in via
                  tags, such as if you passed in a new current directory
                  with NP_CurrentDir.

   BUGS
        In V36, NP_Arguments was broken in a number of ways, and probably
        should be avoided (instead you should start a small piece of your
        own code, which calls RunCommand() to run the actual code you wish
        to run).  In V37, NP_Arguments works, though see the note above.

   SEE ALSO
        LoadSeg(), CreateProc(), ReadArgs(), RunCommand(), <dos/dostags.h>

dos.library/CreateProc                                 dos.library/CreateProc

    NAME

        CreateProc -- Create a new process

    SYNOPSIS
        process = CreateProc( name, pri, seglist, stackSize )
        D0                    D1    D2   D3       D4

        struct MsgPort *CreateProc(STRPTR, LONG, BPTR, LONG)

    FUNCTION
        CreateProc() creates a new AmigaDOS process of name 'name'.  AmigaDOS
        processes are a superset of exec tasks.

        A seglist, as returned by LoadSeg(), is passed as 'seglist'.
        This represents a section of code which is to be run as a new
        process. The code is entered at the first hunk in the segment list,
        which should contain suitable initialization code or a jump to
        such.  A process control structure is allocated from memory and
        initialized.  If you wish to fake a seglist (that will never
        have DOS UnLoadSeg() called on it), use this code:

                    DS.L    0   ;Align to longword
                    DC.L    16  ;Segment "length" (faked)
                    DC.L    0   ;Pointer to next segment
                    ...start of code...

        The size of the root stack upon activation is passed as
        'stackSize'.  'pri' specifies the required priority of the new
        process.  The result will be the process msgport address of the new
        process, or zero if the routine failed.  The argument 'name'
        specifies the new process name.  A zero return code indicates
        error.

        The seglist passed to CreateProc() is not freed when it exits; it
        is up to the parent process to free it, or for the code to unload
        itself.

        Under V36 and later, you probably should use CreateNewProc() instead.

    INPUTS
        name      - pointer to a null-terminated string
        pri       - signed long (range -128 to +127)
        seglist   - BCPL pointer to a seglist
        stackSize - integer (must be a multiple of 4 bytes)

    RESULTS
        process   - pointer to new process msgport

    SEE ALSO
        CreateNewProc(), LoadSeg(), UnLoadSeg()

dos.library/CurrentDir                                 dos.library/CurrentDir

    NAME
        CurrentDir -- Make a directory lock the current directory

    SYNOPSIS
        oldLock = CurrentDir( lock )
        D0                    D1

        BPTR CurrentDir(BPTR)

    FUNCTION
        CurrentDir() causes a directory associated with a lock to be made
        the current directory.  The old current directory lock is returned.

        A value of zero is a valid result here, this 0 lock represents the
        root of file system that you booted from.

        Any call that has to Open() or Lock() files (etc) requires that
        the current directory be a valid lock or 0.

    INPUTS
        lock - BCPL pointer to a lock

    RESULTS
        oldLock - BCPL pointer to a lock

    SEE ALSO
        Lock(), UnLock(), Open(), DupLock()

dos.library/DateStamp                                   dos.library/DateStamp

    NAME
        DateStamp -- Obtain the date and time in internal format

    SYNOPSIS
        ds = DateStamp( ds );
        D0              D1

        struct DateStamp *DateStamp(struct DateStamp *)

    FUNCTION
        DateStamp() takes a structure of three longwords that is set to the
        current time.  The first element in the vector is a count of the
        number of days.  The second element is the number of minutes elapsed
        in the day.  The third is the number of ticks elapsed in the current
        minute.  A tick happens 50 times a second.  DateStamp() ensures that
        the day and minute are consistent.  All three elements are zero if
        the date is unset. DateStamp() currently only returns even
        multiples of 50 ticks.  Therefore the time you get is always an even
        number of ticks.

        Time is measured from Jan 1, 1978.

    INPUTS
        ds - pointer a struct DateStamp

    RESULTS
        The array is filled as described and returned (for pre-V36
        compabability).

    SEE ALSO
        DateToStr(), StrToDate(), SetFileDate(), CompareDates()

dos.library/DateToStr                                   dos.library/DateToStr

   NAME
        DateToStr -- Converts a DateStamp to a string (V36)

   SYNOPSIS
        success = DateToStr( datetime )
        D0                      D1

        BOOL DateToStr(struct DateTime *)

   FUNCTION
        StamptoStr converts an AmigaDOS DateStamp to a human
        readable ASCII string as requested by your settings in the
        DateTime structure.

   INPUTS
        DateTime - a pointer to an initialized DateTime structure.

        The DateTime structure should be initialized as follows:

        dat_Stamp - a copy of the datestamp you wish to convert to
                  ascii.

        dat_Format - a format   byte which specifies the format of the
                  dat_StrDate.  This can be any of the following
                  (note: If value used is something other than those
                  below, the default of FORMAT_DOS is used):

                  FORMAT_DOS:     AmigaDOS format (dd-mmm-yy).

                  FORMAT_INT:     International format (yy-mmm-dd).

                  FORMAT_USA:     American format (mm-dd-yy).

                  FORMAT_CDN:     Canadian format (dd-mm-yy).

                  FORMAT_DEF:     default format for locale.

        dat_Flags - a   flags byte.  The only flag which affects this
                  function is:

                  DTF_SUBST:      If set, a string such as Today,
                                  Monday, etc., will be used instead
                                  of the dat_Format specification if
                                  possible.
                  DTF_FUTURE:     Ignored by this function.

        dat_StrDay - pointer to a buffer to receive the day of the
                  week string.  (Monday, Tuesday, etc.). If null, this
                  string will not be generated.

        dat_StrDate -   pointer to a buffer to receive the date
                  string, in the format requested by dat_Format,
                  subject to possible modifications by DTF_SUBST.  If
                  null, this string will not be generated.

        dat_StrTime -   pointer to a buffer to receive the time of day
                  string. If NULL, this will not be generated.

   RESULT
        success - a zero return indicates that the DateStamp was
                  invalid, and could not be converted.  Non-zero
                  indicates that the call succeeded.

   SEE ALSO
        DateStamp(), StrtoDate(), <dos/datetime.h>

dos.library/Delay                                           dos.library/Delay

    NAME
        Delay -- Delay a process for a specified time

    SYNOPSIS
        Delay( ticks )
               D1

        void Delay(ULONG)

    FUNCTION
        The argument 'ticks' specifies how many ticks (50 per second) to
        wait before returning control.

    INPUTS
        ticks - integer

    BUGS
        Due to a bug in the timer.device in V1.2/V1.3, specifying a timeout
        of zero for Delay() can cause the unreliable timer & floppy disk
        operation.  This is fixed in V36 and later.

    SEE ALSO

dos.library/DeleteFile                                 dos.library/DeleteFile

    NAME
        DeleteFile -- Delete a file or directory

    SYNOPSIS
        success = DeleteFile( name )
        D0                    D1

        BOOL DeleteFile(STRPTR)

    FUNCTION
        This attempts to delete the file or directory specified by 'name'.
        An error is returned if the deletion fails. Note that all the files
        within a directory must be deleted before the directory itself can
        be deleted.

    INPUTS
        name - pointer to a null-terminated string

    RESULTS
        success - boolean

    SEE ALSO

dos.library/DeleteVar                                   dos.library/DeleteVar

   NAME
        DeleteVar -- Deletes a local or environment variable (V36)

   SYNOPSIS
        success = DeleteVar( name, flags )
        D0                    D1    D2

        BOOL DeleteVar(STRPTR, ULONG )

   FUNCTION
        Deletes a local or environment variable.

   INPUTS
        name   - pointer to an variable name.  Note variable names follow
                 filesystem syntax and semantics.
        flags  - combination of type of var to delete (low 8 bits), and
                 flags to control the behavior of this routine.  Currently
                 defined flags include:

                 GVF_LOCAL_ONLY  - delete a local (to your process) variable.
                 GVF_GLOBAL_ONLY - delete a global environment variable.

                 The default is to delete a local variable if found, otherwise
                 a global environment variable if found (only for LV_VAR).

   RESULT
        success - If non-zero, the variable was sucessfully deleted, FALSE
                  indicates failure.

   BUGS
        LV_VAR is the only type that can be global

   SEE ALSO
        GetVar(), SetVar(), FindVar(), DeleteFile(), <dos/var.h>

dos.library/DeviceProc                                 dos.library/DeviceProc

    NAME
        DeviceProc -- Return the process MsgPort of specific I/O handler

    SYNOPSIS
        process = DeviceProc( name )
        D0                    D1

        struct MsgPort *DeviceProc (STRPTR)

    FUNCTION
        DeviceProc() returns the process identifier of the process which
        handles the device associated with the specified name. If no
        process handler can be found then the result is zero. If the name
        refers to an assign then a directory lock is returned in IoErr().
        This lock should not be UnLock()ed or Examine()ed (if you wish to do
        so, DupLock() it first).

    BUGS
        In V36, if you try to DeviceProc() something relative to an assign
        made with AssignPath(), it will fail.  This is because there's no
        way to know when to unlock the lock.  If you're writing code for
        V36 or later, it is highly advised you use GetDeviceProc() instead,
        or make your code conditional on V36 to use GetDeviceProc()/
        FreeDeviceProc().

    SEE ALSO
        GetDeviceProc(), FreeDeviceProc(), DupLock(), UnLock(), Examine()

dos.library/DoPkt                                           dos.library/DoPkt

   NAME
        DoPkt -- Send a dos packet and wait for reply (V36)

   SYNOPSIS
        result1 = DoPkt(port,action,arg1,arg2,arg3,arg4,arg5)
        D0               D1    D2    D3   D4   D5   D6   D7

        LONG DoPkt(struct MsgPort *,LONG,LONG,LONG,LONG,LONG,LONG)

   FUNCTION
        Sends a packet to a handler and waits for it to return.  Any secondary
        return will be available in D1 AND from IoErr().  DoPkt() will work
        even if the caller is an exec task and not a process; however it will
        be slower, and may fail for some additional reasons, such as being
        unable to allocate a signal.  DoPkt() uses your pr_MsgPort for the
        reply, and will call pr_PktWait.  (See BUGS regarding tasks, though).

        Only allows 5 arguments to be specified.  For more arguments (packets
        support a maximum of 7) create a packet and use SendPkt()/WaitPkt().

   INPUTS
        port    - pr_MsgPort of the handler process to send to.
        action  - the action requested of the filesystem/handler
        arg1, arg2, arg3, arg4,arg5 - arguments, depend on the action, may not
                   be required.

   RESULT
        result1 - the value returned in dp_Res1, or FALSE if there was some
                  problem in sending the packet or recieving it.
        result2 - Available from IoErr() AND in register D1.

   BUGS
        Using DoPkt() from tasks doesn't work in V36. Use AllocDosObject(),
        PutMsg(), and WaitPort()/GetMsg() for a workaround, or you can call
        CreateNewProc() to start a process to do Dos I/O for you.  In V37,
        DoPkt() will allocate, use, and free the MsgPort required.

   NOTES
        Callable from a task (under V37 and above).

   SEE ALSO
        AllocDosObject(), FreeDosObject(), SendPkt(), WaitPkt(),
        CreateNewProc(), AbortPkt()

dos.library/DupLock                                       dos.library/DupLock

    NAME
        DupLock -- Duplicate a lock

    SYNOPSIS
        lock = DupLock( lock )
        D0              D1

        BPTR DupLock(BPTR)

    FUNCTION
        DupLock() is passed a shared filing system lock.  This is the ONLY
        way to obtain a duplicate of a lock... simply copying is not
        allowed.

        Another lock to the same object is then returned.  It is not
        possible to create a copy of a exclusive lock.

        A zero return indicates failure.

    INPUTS
        lock - BCPL pointer to a lock

    RESULTS
        newLock - BCPL pointer to a lock

    SEE ALSO
        Lock(), UnLock(), DupLockFromFH(), ParentOfFH()

dos.library/DupLockFromFH                           dos.library/DupLockFromFH

   NAME
        DupLockFromFH -- Gets a lock on an open file (V36)

   SYNOPSIS
        lock = DupLockFromFH(fh)
        D0                   D1

        BPTR DupLockFromFH(BPTR)

   FUNCTION
        Obtain a lock on the object associated with fh.  Only works if the
        file was opened using a non-exclusive mode.  Other restrictions may be
        placed on success by the filesystem.

   INPUTS
        fh   - Opened file for which to obtain the lock

   RESULT
        lock - Obtained lock or NULL for failure

   SEE ALSO
        DupLock(), Lock(), UnLock()

dos.library/EndNotify                                   dos.library/EndNotify

   NAME
        EndNotify -- Ends a notification request (V36)

   SYNOPSIS
        EndNotify(notifystructure)
                        D1

        VOID EndNotify(struct NotifyRequest *)

   FUNCTION
        Removes a notification request.  Safe to call even if StartNotify()
        failed.  For NRF_SEND_MESSAGE, it searches your port for any messages
        about the object in question and removes and replies them before
        returning.

   INPUTS
        notifystructure - a structure passed to StartNotify()

   SEE ALSO
        StartNotify(), <dos/notify.h>

dos.library/ErrorReport                               dos.library/ErrorReport

   NAME
        ErrorReport -- Displays a Retry/Cancel requester for an error (V36)

   SYNOPSIS
        status = ErrorReport(code, type, arg1, device)
        D0                    D1    D2    D3     A0

        BOOL ErrorReport(LONG, LONG, ULONG, struct MsgPort *)

   FUNCTION
        Based on the request type, this routine formats the appropriate
        requester to be displayed.  If the code is not understood, it returns
        DOS_TRUE immediately.  Returns DOS_TRUE if the user selects CANCEL or
        if the attempt to put up the requester fails, or if the process
        pr_WindowPtr is -1.  Returns FALSE if the user selects Retry.  The
        routine will retry on DISKINSERTED for appropriate error codes.
        These return values are the opposite of what AutoRequest returns.

        Note: this routine sets IoErr() to code before returning.

   INPUTS
        code   - Error code to put a requester up for.
           Current valid error codes are:
                ERROR_DISK_NOT_VALIDATED
                ERROR_DISK_WRITE_PROTECTED
                ERROR_DISK_FULL
                ERROR_DEVICE_NOT_MOUNTED
                ERROR_NOT_A_DOS_DISK
                ERROR_NO_DISK
                ABORT_DISK_ERROR        /* read/write error */
                ABORT_BUSY              /* you MUST replace... */
        type   - Request type:
                       REPORT_LOCK   - arg1 is a lock (BPTR).
                       REPORT_FH     - arg1 is a filehandle (BPTR).
                        REPORT_VOLUME - arg1 is a volumenode (C pointer).
                        REPORT_INSERT - arg1 is the string for the volumename
                                        (will be split on a ':').
                                        With ERROR_DEVICE_NOT_MOUNTED puts
                                        up the "Please insert..." requester.
        arg1   - variable parameter (see type)
        device - (Optional) Address of handler task for which report is to be
                made.  Only required for REPORT_LOCK, and only if arg1==NULL.

   RESULT
        status - Cancel/Retry indicator (0 means Retry)

   SEE ALSO
        Fault(), IoErr()

dos.library/ExAll                                           dos.library/ExAll

   NAME
        ExAll -- Examine an entire directory (V36)

   SYNOPSIS
        continue = ExAll(lock, buffer, size, type, control)
        D0               D1     D2     D3    D4     D5

        BOOL ExAll(BPTR,STRPTR,LONG,LONG,struct ExAllControl *)

   FUNCTION
        Examines an entire directory.

 Lock must be on a directory.  Size is the size of the buffer supplied.
 The buffer will be filled with (partial) ExAllData structures, as
 specified by the type field.

 Type is a value from those shown below that determines which information is
 to be stored in the buffer.  Each higher value adds a new thing to the list
 as described in the table below:-

        ED_NAME         FileName
        ED_TYPE         Type
        ED_SIZE         Size in bytes
        ED_PROTECTION   Protection bits
        ED_DATE         3 longwords of date
        ED_COMMENT      Comment (will be NULL if no comment)

 Thus, ED_NAME gives only filenames, and ED_COMMENT gives everything.

 The ead_Next entry gives a pointer to the next entry in the buffer.  The
 last entry will have NULL in ead_Next.

 The control structure is required so that FFS can keep track if more than
 one call to ExAll is required.  This happens when there are more names in
 a directory than will fit into the buffer.  The format of the control
 structure is as follows:-

 NOTE: the control structure MUST be allocated by AllocDosObject!!!

 Entries:  This field tells the calling application how many entries are
            in the buffer after calling ExAll.  Note: make sure your code
            handles the 0 entries case, including 0 entries with continue
            non-zero.

 LastKey:  This field ABSOLUTELY MUST be initialised to 0 before calling
            ExAll for the first time.  Any other value will cause nasty
            things to happen.  If ExAll returns non-zero, then this field
            should not be touched before making the second and subsequent
            calls to ExAll.  Whenever ExAll returns non-zero, there are more
            calls required before all names have been received.

            As soon as a FALSE return is received then ExAll has completed
            (if IoErr() returns ERROR_NO_MORE_ENTRIES - otherwise it returns
            the error that occured, similar to ExNext.)

 MatchString
            If this field is NULL then all filenames will be returned.  If
            this field is non-null then it is interpreted as a pointer to
            a string that is used to pattern match all file names before
            accepting them and putting them into the buffer.  The default
            AmigaDOS caseless pattern match routine is used.  This string
            MUST have been parsed by ParsePatternNoCase()!

 MatchFunc:
            Contains a pointer to a hook for a routine to decide if the entry
            will be included in the returned list of entries.  The entry is
            filled out first, and then passed to the hook.  If no MatchFunc is
            to be called then this entry should be NULL.  The hook is
            called with the following parameters (as is standard for hooks):

            BOOL = MatchFunc( hookptr, data, typeptr )
                                a0      a1      a2
            (a0 = ptr to hook, a1 = ptr to filled in ExAllData, a2 = ptr
             to longword of type).

            MatchFunc should return FALSE if the entry is not to be
            accepted, otherwise return TRUE.

        Note that Dos will emulate ExAll() using Examine() and ExNext()
        if the handler in question doesn't support the ExAll() packet.

   INPUTS
        lock    - Lock on directory to be examined.
        buffer  - Buffer for data returned (MUST be at least word-aligned,
                  preferably long-word aligned).
        size    - Size in bytes of 'buffer'.
        type    - Type of data to be returned.
        control - Control data structure (see notes above).  MUST have been
                  allocated by AllocDosObject!

   RESULT
        continue - Whether or not ExAll is done.  If FALSE is returned, either
                   ExAll has completed (IoErr() == ERROR_NO_MORE_ENTRIES), or
                   an error occurred (check IoErr()).  If non-zero is returned,
                   you MUST call ExAll again until it returns FALSE.

   EXAMPLE

   eac = AllocDosObject(DOS_EXALLCONTROL,NULL);
   if (!eac) ...
   ...
   eac->eac_LastKey = 0;
   do {
       more = ExAll(lock, EAData, sizeof(EAData), ED_FOO, eac);
       if ((!more) && (IoErr() != ERROR_NO_MORE_ENTRIES)) {
           /* ExAll failed abnormally */
           break;
       }
       if (eac->eac_Entries == 0) {
           /* ExAll failed normally with no entries */
           continue;                   /* ("more" is *usually* zero) */
       }
       ead = (struct ExAllData *) EAData;
       do {
           /* use ead here */
           ...
           /* get next ead */
           ead = ead->ed_Next;
       } while (ead);

   } while (more);
   ...
   FreeDosObject(DOS_EXALLCONTROL,eac);

   BUGS
        In V36, there were problems with ExAll (particularily with
        eac_MatchString, and ed_Next with the ramdisk and the emulation
        of it in Dos for handlers that do not support the packet.  It is
        advised you only use this under V37 and later.

   SEE ALSO
        Examine(), ExNext(), ExamineFH(), MatchPatternNoCase(),
        ParsePatternNoCase(), AllocDosObject()

dos.library/Examine                                       dos.library/Examine

    NAME
        Examine -- Examine a directory or file associated with a lock

    SYNOPSIS
        success = Examine( lock, FileInfoBlock )
        D0                  D1        D2

        BOOL Examine(BPTR,struct FileInfoBlock *)

    FUNCTION
        Examine() fills in information in the FileInfoBlock concerning the
        file or directory associated with the lock. This information
        includes the name, size, creation date and whether it is a file or
        directory.  FileInfoBlock must be longword aligned.  Examine() gives
        a return code of zero if it fails.

        You may make a local copy of the FileInfoBlock, as long as it is
        never passed to ExNext().

    INPUTS
        lock      - BCPL pointer to a lock
        infoBlock - pointer to a FileInfoBlock (MUST be longword aligned)

    RESULTS
        success - boolean

    SPECIAL NOTE
        FileInfoBlock must be longword-aligned.  AllocDosObject() will
        allocate them correctly for you.

    SEE ALSO
        Lock(), UnLock(), ExNext(), ExamineFH(), <dos/dos.h>, AllocDosObject(),
        ExAll()

dos.library/ExamineFH                                   dos.library/ExamineFH

   NAME
        ExamineFH -- Gets information on an open file (V36)

   SYNOPSIS
        success = ExamineFH(fh, fib)
        D0                  D1  D2

        BOOL ExamineFH(BPTR, struct FileInfoBlock *)

   FUNCTION
        Examines a filehandle and returns information about the file in the
        FileInfoBlock.  There are no guarantees as to whether the fib_Size
        field will reflect any changes made to the file size it was opened,
        though filesystems should attempt to provide up-to-date information
        for it.

   INPUTS
        fh  - Filehandle you wish to examine
        fib - FileInfoBlock, must be longword aligned.

   RESULT
        success - Success/failure indication

   SEE ALSO
        Examine(), ExNext(), ExAll(), Open(), AllocDosObject()

dos.library/Execute                                       dos.library/Execute

    NAME
        Execute -- Execute a CLI command

    SYNOPSIS
        success = Execute( commandString, input, output )
        D0                 D1             D2     D3

        BOOL Execute(STRPTR, BPTR, BPTR)

    FUNCTION
        This function attempts to execute the string commandString as a
        Shell command and arguments. The string can contain any valid input
        that you could type directly in a Shell, including input and output
        redirection using < and >.  Note that Execute() doesn't return until
        the command(s) in commandstring have returned.

        The input file handle will normally be zero, and in this case
        Execute() will perform whatever was requested in the commandString
        and then return. If the input file handle is nonzero then after the
        (possibly empty) commandString is performed subsequent input is read
        from the specified input file handle until end of that file is
        reached.

        In most cases the output file handle must be provided, and is used
        by the Shell commands as their output stream unless output
        redirection was specified. If the output file handle is set to zero
        then the current window, normally specified as *, is used. Note
        that programs running under the Workbench do not normally have a
        current window.

        Execute() may also be used to create a new interactive Shell process
        just like those created with the NewShell command. In order to do
        this you would call Execute() with an empty commandString, and pass
        a file handle relating to a new window as the input file handle.
        The output file handle would be set to zero. The Shell will read
        commands from the new window, and will use the same window for
        output. This new Shell window can only be terminated by using the
        EndCLI command.

        Under V37, if an input filehandle is passed, and it's either
        interactive or a NIL: filehandle, the pr_ConsoleTask of the new
        process will be set to that filehandle's process (the same applies
        to SystemTagList()).

        For this command to work the program Run must be present in C: in
        versions before V36 (except that in 1.3.2 and any later 1.3 versions,
        the system first checks the resident list for Run).

    INPUTS
        commandString - pointer to a null-terminated string
        input         - BCPL pointer to a file handle
        output        - BCPL pointer to a file handle

    RESULTS
        success - BOOLEAN indicating whether Execute was successful
                  in finding and starting the specified program.  Note this
                  is NOT the return code of the command(s).
    SEE ALSO
        SystemTagList(), NewShell, EndCLI, Run

dos.library/Exit                                             dos.library/Exit

    NAME
        Exit -- Exit from a program

    SYNOPSIS
        Exit( returnCode )
              D1

        void Exit(LONG)

    FUNCTION
        Exit() is currently for use with programs written as if they
        were BCPL programs.  This function is not normally useful for
        other purposes.

        In general, therefore, please DO NOT CALL THIS FUNCTION!

        In order to exit, C programs should use the C language exit()
        function (note the lower case letter "e").  Assembly programs should
        place a return code in D0, and execute an RTS instruction with
        their original stack ptr.

    IMPLEMENTATION
        The action of Exit() depends on whether the program which called it
        is running as a command under a CLI or not. If the program is
        running under the CLI the command finishes and control reverts to
        the CLI. In this case, returnCode is interpreted as the return code
        from the program.

        If the program is running as a distinct process, Exit() deletes the
        process and release the space associated with the stack, segment
        list and process structure.

    INPUTS
        returnCode - integer

    SEE ALSO
        CreateProc(), CreateNewProc()

dos.library/ExNext                                         dos.library/ExNext

    NAME
        ExNext -- Examine the next entry in a directory

    SYNOPSIS
        success = ExNext( lock, FileInfoBlock )
        D0                 D1        D2

        BOOL ExNext(BPTR, struct FileInfoBlock *)

    FUNCTION
        This routine is passed a directory lock and a FileInfoBlock that
        have been initialized by a previous call to Examine(), or updated
        by a previous call to ExNext().  ExNext() gives a return code of zero
        on failure.  The most common cause of failure is reaching the end
        of the list of files in the owning directory.  In this case, IoErr
        will return ERROR_NO_MORE_ENTRIES and a good exit is appropriate.

        So, follow these steps to examine a directory:
        1) Pass a Lock and a FileInfoBlock to Examine().  The lock must
           be on the directory you wish to examine.
        2) Pass ExNext() the same lock and FileInfoBlock.
        3) Do something with the information returned in the FileInfoBlock.
           Note that the fib_DirEntryType field is positive for directories,
           negative for files.
        4) Keep calling ExNext() until it returns FALSE.  Check IoErr()
           to ensure that the reason for failure was ERROR_NO_MORE_ENTRIES.

        Note: if you wish to recursively scan the file tree and you find
        another directory while ExNext()ing you must Lock that directory and
        Examine() it using a new FileInfoBlock.  Use of the same
        FileInfoBlock to enter a directory would lose important state
        information such that it will be impossible to continue scanning
        the parent directory.  While it is permissible to UnLock() and Lock()
        the parent directory between ExNext() calls, this is NOT recommended.
        Important state information is associated with the parent lock, so
        if it is freed between ExNext() calls this information has to be
        rebuilt on each new ExNext() call, and will significantly slow down
        directory scanning.

        It is NOT legal to Examine() a file, and then to ExNext() from that
        FileInfoBlock.  You may make a local copy of the FileInfoBlock, as
        long as it is never passed back to the operating system.

    INPUTS
        lock - BCPL pointer to a lock originally used for the Examine() call
        infoBlock - pointer to a FileInfoBlock used on the previous Examine()
                    or ExNext() call.

    RESULTS
        success - boolean

    SPECIAL NOTE
        FileInfoBlock must be longword-aligned.  AllocDosObject() will
        allocate them correctly for you.

    SEE ALSO
        Examine(), Lock(), UnLock(), IoErr(), ExamineFH(), AllocDosObject(),
        ExAll()

dos.library/Fault                                           dos.library/Fault

   NAME
        Fault -- Returns the text associated with a DOS error code (V36)

   SYNOPSIS
        success = Fault(code, header, buffer, len)
        D0               D1     D2      D3    D4

        BOOL Fault(LONG, STRPTR, STRPTR, LONG)

   FUNCTION
        This routine obtains the error message text for the given error code.
        The header is prepended to the text of the error message, followed
        by a colon.  Puts a null-terminated string for the error message into
        the buffer.  By convention, error messages should be no longer than 80
        characters (+1 for termination), and preferably no more than 60.
        The value returned by IoErr() is set to the code passed in.  If there
        is no message for the error code, the message will be "Error code
        <number>\n".

   INPUTS
        code   - Error code
        header - header to output before error text
        buffer - Buffer to receive error message.
        len    - Length of the buffer.

   RESULT
        success - Success/failure code.

   SEE ALSO
        IoErr(), SetIoErr(), PrintFault()

dos.library/FGetC                                           dos.library/FGetC

   NAME
        FGetC -- Read a character from the specified input (buffered) (V36)

   SYNOPSIS
        char = FGetC(fh)
        D0           D1

        LONG FGetC(BPTR)

   FUNCTION
        Reads the next character from the input stream.  A -1 is
        returned when EOF or an error is encountered.  This call is buffered.
        Use Flush() between buffered and unbuffered I/O on a filehandle.

   INPUTS
        fh - filehandle to use for buffered I/O

   RESULT
        char - character read (0-255) or -1

   BUGS
        In V36, after an EOF was read, EOF would always be returned from
        FGetC() from then on.  Starting in V37, it tries to read from the
        handler again each time (unless UnGetC(fh,-1) was called).

   SEE ALSO
        FPutC(), UnGetC(), Flush()

dos.library/FGets                                           dos.library/FGets

   NAME
        FGets -- Reads a line from the specified input (buffered) (V36)

   SYNOPSIS
        buffer = FGets(fh, buf, len)
        D0             D1  D2   D3

        STRPTR FGets(BPTR, STRPTR, ULONG)

   FUNCTION
        This routine reads in a single line from the specified input stopping
        at a NEWLINE character or EOF.  In either event, UP TO the number of
        len specified bytes minus 1 will be copied into the buffer.  Hence if
        a length of 50 is passed and the input line is longer than 49 bytes,
        it will return 49 characters.  It returns the buffer pointer normally,
        or NULL if EOF is the first thing read.

        If terminated by a newline, the newline WILL be the last character in
        the buffer.  This is a buffered read routine.  The string read in IS
        null-terminated.

   INPUTS
        fh  - filehandle to use for buffered I/O
        buf - Area to read bytes into.
        len - Number of bytes to read, must be > 0.

   RESULT
        buffer - Pointer to buffer passed in, or NULL for immediate EOF or for
                 an error.  If NULL is returnd for an EOF, IoErr() will return
                 0.

   SEE ALSO
        FRead(), FPuts(), FGetC()

dos.library/FilePart                                     dos.library/FilePart

   NAME
        FilePart -- Returns the last component of a path (V36)

   SYNOPSIS
        fileptr = FilePart( path )
        D0                   D1

        STRPTR FilePart( STRPTR )

   FUNCTION
        This function returns a pointer to the last component of a string path
        specification, which will normally be the file name.  If there is only
        one component, it returns a pointer to the beginning of the string.

   INPUTS
        path - pointer to an path string.  May be relative to the current
               directory or the current disk.

   RESULT
        fileptr - pointer to the last component of the path.

   EXAMPLE
        FilePart("xxx:yyy/zzz/qqq") would return a pointer to the first 'q'.
        FilePart("xxx:yyy") would return a pointer to the first 'y').

   SEE ALSO
        PathPart(), AddPart()

dos.library/FindArg                                       dos.library/FindArg

   NAME
        FindArg - find a keyword in a template (V36)

   SYNOPSIS
        index = FindArg(template, keyword)
        D0                D1        D2

        LONG FindArg(STRPTR, STRPTR)

   FUNCTION
        Returns the argument number of the keyword, or -1 if it is not a
        keyword for the template.  Abbreviations are handled.

   INPUTS
        keyword  - keyword to search for in template
        template - template string to search

   RESULT
        index - number of entry in template, or -1 if not found

   BUGS
        In earlier published versions of the autodoc, keyword and template
        were backwards.

   SEE ALSO
        ReadArgs(), ReadItem(), FreeArgs()

dos.library/FindCliProc                               dos.library/FindCliProc

   NAME
        FindCliProc -- returns a pointer to the requested CLI process (V36)

   SYNOPSIS
        proc = FindCliProc(num)
        D0             D1

        struct Process *FindCliProc(LONG)

   FUNCTION
        This routine returns a pointer to the CLI process associated with the
        given CLI number.  If the process isn't an active CLI process, NULL is
        returned.  NOTE: should normally be called inside a Forbid(), if you
        must use this function at all.

   INPUTS
        num  - Task number of CLI process

   RESULT
        proc - Pointer to given CLI process

   SEE ALSO
        Cli(), Forbid(), MaxCli()

dos.library/FindDosEntry                             dos.library/FindDosEntry

   NAME
        FindDosEntry -- Finds a specific Dos List entry (V36)

   SYNOPSIS
        newdlist = FindDosEntry(dlist,name,flags)
        D0                       D1    D2   D3

        struct DosList *FindDosEntry(struct DosList *,STRPTR,ULONG)

   FUNCTION
        Locates an entry on the device list.  Starts with the entry dlist.
        NOTE: must be called with the device list locked, no references may be
        made to dlist after unlocking.

   INPUTS
        dlist    - The device entry to start with.
        name     - Name of device entry (without ':') to locate.
        flags    - Search control flags.  Use the flags you passed to
                   LockDosList, or a subset of them.  LDF_READ/LDF_WRITE are
                   not required for this call.

   RESULT
        newdlist - The device entry or NULL

   SEE ALSO
        AddDosEntry(), RemDosEntry(), NextDosEntry(), LockDosList(),
        MakeDosEntry(), FreeDosEntry()

dos.library/FindSegment                               dos.library/FindSegment

   NAME
        FindSegment - Finds a segment on the resident list (V36)

   SYNOPSIS
        segment = FindSegment(name, start, system)
        D0                     D1     D2     D3

        struct Segment *FindSegment(STRPTR, struct Segment *, LONG)

   FUNCTION
        Finds a segment on the Dos resident list by name and type, starting
        at the segment AFTER 'start', or at the beginning if start is NULL.
        If system is zero, it will only return nodes with a seg_UC of 0
        or more.  It does NOT increment the seg_UC, and it does NOT do any
        locking of the list.  You must Forbid() lock the list to use this
        call.

        To use an entry you have found, you must: if the seg_UC is 0 or more,
        increment it, and decrement it (under Forbid()!) when you're done
        the the seglist.

        The other values for seg_UC are:
                -1   - system module, such as a filesystem or shell
                -2   - resident shell command
                -999 - disabled internal command, ignore
        Negative values should never be modified.  All other negative
        values between 0 and -32767 are reserved to AmigaDos and should not
        be used.

   INPUTS
        name   - name of segment to find
        start  - segment to start the search after
        system - true for system segment, false for normal segments

   RESULT
        segment - the segment found or NULL

   SEE ALSO
        AddSegment(), RemSegment(), Forbid()

dos.library/FindVar                                       dos.library/FindVar

   NAME
        FindVar -- Finds a local variable (V36)

   SYNOPSIS
        var = FindVar( name, type )
        D0              D1    D2

        struct LocalVar * FindVar(STRPTR, ULONG )

   FUNCTION
        Finds a local variable structure.

   INPUTS
        name - pointer to an variable name.  Note variable names follow
               filesystem syntax and semantics.

        type - type of variable to be found (see <dos/var.h>)

   RESULT

        var  - pointer to a LocalVar structure or NULL

   SEE ALSO
        GetVar(), SetVar(), DeleteVar(), <dos/var.h>

dos.library/Flush                                           dos.library/Flush

   NAME
        Flush -- Flushes buffers for a buffered filehandle (V36)

   SYNOPSIS
        success = Flush(fh)
        D0              D1

        LONG Flush(BPTR)

   FUNCTION
        Flushes any pending buffered writes to the filehandle.  All buffered
        writes will also be flushed on Close().  If the filehandle was being
        used for input, it drops the buffer, and tries to Seek() back to the
        last read position  (so subsequent reads or writes will occur at the
        expected position in the file).

   INPUTS
        fh      - Filehandle to flush.

   RESULT
        success - Success or failure.

   BUGS
        Before V37 release, Flush() returned a random value.  As of V37,
        it always returns success (this will be fixed in some future
        release).

   SEE ALSO
        FputC(), FGetC(), UnGetC(), Seek(), Close()

dos.library/Format                                         dos.library/Format

   NAME
        Format -- Causes a filesystem to initialize itself (V36)

   SYNOPSIS
        success = Format(filesystem, volumename, dostype)
        D0                   D1          D2         D3

        BOOL Format(STRPTR, STRPTR, ULONG)

   FUNCTION
        Interface for initializing new media on a device.  This causes the
        filesystem to write out an empty disk structure to the media, which
        should then be ready for use.  This assumes the media has been low-
        level formatted and verified already.

        The filesystem should be inhibited before calling Format() to make
        sure you don't get an ERROR_OBJECT_IN_USE.

   INPUTS
        filesystem - Name of device to be formatted.  ':' must be supplied.
        volumename - Name for volume (if supported).  No ':'.
        dostype    - Type of format, if filesystem supports multiple types.

   RESULT
        success - Success/failure indicator.

   BUGS
        Existed, but was non-functional in V36 dos.  (The volumename wasn't
        converted to a BSTR.)  Workaround: require V37, or under V36
        convert volumename to a BPTR to a BSTR before calling Format().
        Note: a number of printed packet docs for ACTION_FORMAT are wrong
        as to the arguments.

   SEE ALSO

dos.library/FPutC                                           dos.library/FPutC

   NAME
        FPutC -- Write a character to the specified output (buffered) (V36)

   SYNOPSIS
        char = FPutC(fh, char)
        D0           D1   D2

        LONG FPutC(BPTR, UBYTE)

   FUNCTION
        Writes a single character to the output stream.  This call is
        buffered.  Use Flush() between buffered and unbuffered I/O on a
        filehandle.  Interactive filehandles are flushed automatically
        on a newline, return, '\0', or line feed.

   INPUTS
        fh   - filehandle to use for buffered I/O
        char - character to write

   RESULT
        char - either the character written, or EOF for an error.

   SEE ALSO
        FGetC(), UnGetC(), Flush()

dos.library/FPuts                                           dos.library/FPuts

   NAME
        FPuts -- Writes a string the the specified output (buffered) (V36)

   SYNOPSIS
        error = FPuts(fh, str)
        D0            D1  D2

        LONG FPuts(BPTR, STRPTR)

   FUNCTION
        This routine writes an unformatted string to the filehandle.  No
        newline is appended to the string and the length actually written is
        returned.  This routine is buffered.

   INPUTS
        fh    - filehandle to use for buffered I/O
        str   - Null-terminated string to be written to default output

   RESULT
        error - 0 normally, otherwise -1.  Note that this is opposite of
                most other Dos functions, which return success.

   SEE ALSO
        FGets(), FPutC(), FWrite(), PutStr()

dos.library/FRead                                           dos.library/FRead

   NAME
        FRead -- Reads a number of blocks from an input (buffered) (V36)

   SYNOPSIS
        count = FRead(fh, buf, blocklen, blocks)
        D0            D1  D2     D3        D4

        LONG FRead(BPTR, STRPTR, ULONG, ULONG)

   FUNCTION
        Attempts to read a number of blocks, each blocklen long, into the
        specified buffer from the input stream.  May return less than
        the number of blocks requested, either due to EOF or read errors.
        This call is buffered.

   INPUTS
        fh       - filehandle to use for buffered I/O
        buf      - Area to read bytes into.
        blocklen - number of bytes per block.  Must be > 0.
        blocks   - number of blocks to read.  Must be > 0.

   RESULT
        count - Number of _blocks_ read, or 0 for EOF.  On an error, the
                number of blocks actually read is returned.

   BUGS
        Doesn't clear IoErr() before starting.  If you want to find out
        about errors, use SetIoErr(0L) before calling.

   SEE ALSO
        FGetC(), FWrite(), FGets()

dos.library/FreeArgs                                     dos.library/FreeArgs

   NAME
        FreeArgs - Free allocated memory after ReadArgs() (V36)

   SYNOPSIS
        FreeArgs(rdargs)
                   D1

        void FreeArgs(struct RDArgs *)

   FUNCTION
        Frees memory allocated to return arguments in from ReadArgs().  If
        ReadArgs allocated the RDArgs structure it will be freed.

   INPUTS
        rdargs - structure returned from ReadArgs()

   SEE ALSO
        ReadArgs(), ReadItem(), FindArg()

dos.library/FreeDeviceProc                         dos.library/FreeDeviceProc

   NAME
        FreeDeviceProc -- Releases port returned by GetDeviceProc() (V36)

   SYNOPSIS
        FreeDeviceProc(devproc)
                         D1

        void FreeDeviceProc(struct DevProc *)

   FUNCTION
        Frees up the structure created by GetDeviceProc(), and any associated
        temporary locks.

        Decrements the counter incremented by GetDeviceProc().  The counter
        is in an extension to the 1.3 process structure.  After calling
        FreeDeviceProc(), do not use the port or lock again!  It is safe to
        call FreeDeviceProc(NULL).

   INPUTS
        devproc - A value returned by GetDeviceProc()

   BUGS
        Counter not currently active in 2.0.

   SEE ALSO
        GetDeviceProc(), DeviceProc(), AssignLock(), AssignLate(),
        AssignPath()

dos.library/FreeDosEntry                             dos.library/FreeDosEntry

   NAME
        FreeDosEntry -- Frees an entry created by MakeDosEntry (V36)

   SYNOPSIS
        FreeDosEntry(dlist)
                       D1

        void FreeDosEntry(struct DosList *)

   FUNCTION
        Frees an entry created by MakeDosEntry().  This routine should be
        eliminated and replaced by a value passed to FreeDosObject()!

   INPUTS
        dlist - DosList to free.

   SEE ALSO
        AddDosEntry(), RemDosEntry(), FindDosEntry(), LockDosList(),
        NextDosEntry(), MakeDosEntry()

dos.library/FreeDosObject                           dos.library/FreeDosObject

   NAME
        FreeDosObject -- Frees an object allocated by AllocDosObject() (V36)

   SYNOPSIS
        FreeDosObject(type, ptr)
                       D1   D2

        void FreeDosObject(ULONG, void *)

   FUNCTION
        Frees an object allocated by AllocDosObject().  Do NOT call for
        objects allocated in any other way.

   INPUTS
        type - type passed to AllocDosObject()
        ptr  - ptr returned by AllocDosObject()

   SEE ALSO
        AllocDosObject(), <dos/dos.h>

dos.library/FWrite                                         dos.library/FWrite

   NAME
        FWrite -- Writes a number of blocks to an output (buffered) (V36)

   SYNOPSIS
        count = FWrite(fh, buf, blocklen, blocks)
        D0             D1  D2     D3        D4

        LONG FWrite(BPTR, STRPTR, ULONG, ULONG)

   FUNCTION
        Attempts to write a number of blocks, each blocklen long, from the
        specified buffer to the output stream.  May return less than the
        number of blocks requested, if there is some error such as a full
        disk or r/w error.  This call is buffered.

   INPUTS
        fh       - filehandle to use for buffered I/O
        buf      - Area to write bytes from.
        blocklen - number of bytes per block.  Must be > 0.
        blocks   - number of blocks to read.  Must be > 0.

   RESULT
        count - Number of _blocks_ written.  On an error, the number of
                blocks actually written is returned.

   BUGS
        Doesn't clear IoErr() before starting.  If you want to find out
        about errors, use SetIoErr(0L) before calling.

   SEE ALSO
        FPutC(), FRead(), FPuts()

dos.library/GetArgStr                                   dos.library/GetArgStr

   NAME
        GetArgStr -- Returns the arguments for the process (V36)

   SYNOPSIS
        ptr = GetArgStr()
        D0

        STRPTR GetArgStr(void)

   FUNCTION
        Returns a pointer to the (null-terminated) arguments for the program
        (process).  This is the same string passed in a0 on startup from CLI.

   RESULT
        ptr - pointer to arguments

   SEE ALSO
        SetArgStr(), RunCommand()

dos.library/GetConsoleTask                         dos.library/GetConsoleTask

   NAME
        GetConsoleTask -- Returns the default console for the process (V36)

   SYNOPSIS
        port = GetConsoleTask()
        D0

        struct MsgPort *GetConsoleTask(void)

   FUNCTION
        Returns the default console task's port (pr_ConsoleTask) for the
        current process.

   RESULT
        port - The pr_MsgPort of the console handler, or NULL.

   SEE ALSO
        SetConsoleTask(), Open()

dos.library/GetCurrentDirName                   dos.library/GetCurrentDirName

   NAME
        GetCurrentDirName -- returns the current directory name (V36)

   SYNOPSIS
        success = GetCurrentDirName(buf, len)
        D0                          D1   D2

        BOOL GetCurrentDirName(STRPTR, LONG)

   FUNCTION
        Extracts the current directory name from the CLI structure and puts it
        into the buffer.  If the buffer is too small, the name is truncated
        appropriately and a failure code returned.  If no CLI structure is
        present, a null string is returned in the buffer, and failure from
        the call (with IoErr() == ERROR_OBJECT_WRONG_TYPE);

   INPUTS
        buf     - Buffer to hold extracted name
        len     - Number of bytes of space in buffer

   RESULT
        success - Success/failure indicator

   BUGS
        In V36, this routine didn't handle 0-length buffers correctly.

   SEE ALSO
        SetCurrentDirName()

dos.library/GetDeviceProc                           dos.library/GetDeviceProc

   NAME
        GetDeviceProc -- Finds a handler to send a message to (V36)

   SYNOPSIS
        devproc = GetDeviceProc(name, devproc)
          D0                     D1     D2

        struct DevProc *GetDeviceProc(STRPTR, struct DevProc *)

   FUNCTION
        Finds the handler/filesystem to send packets regarding 'name' to.
        This may involve getting temporary locks.  It returns a structure
        that includes a lock and msgport to send to to attempt your operation.
        It also includes information on how to handle multiple-directory
        assigns (by passing the DevProc back to GetDeviceProc() until it
        returns NULL).

        The initial call to GetDeviceProc() should pass NULL for devproc.  If
        after using the returned DevProc, you get an ERROR_OBJECT_NOT_FOUND,
        and (devproc->dvp_Flags & DVPF_ASSIGN) is true, you should call
        GetDeviceProc() again, passing it the devproc structure.  It will
        either return a modified devproc structure, or NULL (with
        ERROR_NO_MORE_ENTRIES in IoErr()).  Continue until it returns NULL.

        This call also increments the counter that locks a handler/fs into
        memory.  After calling FreeDeviceProc(), do not use the port or lock
        again!

   INPUTS
        name    - name of the object you wish to access.  This can be a
                  relative path ("foo/bar"), relative to the current volume
                  (":foo/bar"), or relative to a device/volume/assign
                  ("foo:bar").
        devproc - A value returned by GetDeviceProc() before, or NULL

   RESULT
        devproc - a pointer to a DevProc structure or NULL

   BUGS
        Counter not currently active in 2.0.
        In 2.0 and 2.01, you HAD to check DVPF_ASSIGN before calling it again.
        This was fixed for the 2.02 release of V36.

   SEE ALSO
        FreeDeviceProc(), DeviceProc(), AssignLock(), AssignLate(),
        AssignPath()

dos.library/GetFileSysTask                         dos.library/GetFileSysTask

   NAME
        GetFileSysTask -- Returns the default filesystem for the process (V36)

   SYNOPSIS
        port = GetFileSysTask()
        D0

        struct MsgPort *GetFileSysTask(void)

   FUNCTION
        Returns the default filesystem task's port (pr_FileSystemTask) for the
        current process.

   RESULT
        port - The pr_MsgPort of the filesystem, or NULL.

   SEE ALSO
        SetFileSysTask(), Open()

dos.library/GetProgramDir                           dos.library/GetProgramDir

   NAME
        GetProgramDir -- Returns a lock on the directory the program was loaded
                         from (V36)

   SYNOPSIS
        lock = GetProgramDir()
        D0

        BPTR GetProgramDir(void)

   FUNCTION
        Returns a shared lock on the directory the program was loaded from.
        This can be used for a program to find data files, etc, that are stored
        with the program, or to find the program file itself.  NULL returns are
        valid, and may occur, for example, when running a program from the
        resident list.  You should NOT unlock the lock.

   RESULT
        lock - A lock on the directory the current program was loaded from,
               or NULL if loaded from resident list, etc.

   BUGS
        Should return a lock for things loaded via resident.  Perhaps should
        return currentdir if NULL.

   SEE ALSO
        SetProgramDir(), Open()

dos.library/GetProgramName                         dos.library/GetProgramName

   NAME
        GetProgramName -- Returns the current program name (V36)

   SYNOPSIS
        success = GetProgramName(buf, len)
        D0                       D1   D2

        BOOL GetProgramName(STRPTR, LONG)

   FUNCTION
        Extracts the program name from the CLI structure and puts it
        into the buffer.  If the buffer is too small, the name is truncated
        present, a null string is returned in the buffer, and failure from
        the call (with IoErr() == ERROR_OBJECT_WRONG_TYPE);

   INPUTS
        buf     - Buffer to hold extracted name
        len     - Number of bytes of space in buffer

   RESULT
        success - Success/failure indicator

   SEE ALSO
        SetProgramName()

dos.library/GetPrompt                                   dos.library/GetPrompt

   NAME
        GetPrompt -- Returns the prompt for the current process (V36)

   SYNOPSIS
        success = GetPrompt(buf, len)
        D0                  D1   D2

        BOOL GetPrompt(STRPTR, LONG)

   FUNCTION
        Extracts the prompt string from the CLI structure and puts it
        into the buffer.  If the buffer is too small, the string is truncated
        appropriately and a failure code returned.  If no CLI structure is
        present, a null string is returned in the buffer, and failure from
        the call (with IoErr() == ERROR_OBJECT_WRONG_TYPE);

   INPUTS
        buf     - Buffer to hold extracted prompt
        len     - Number of bytes of space in buffer

   RESULT
        success - Success/failure indicator

   SEE ALSO
        SetPrompt()

dos.library/GetVar                                         dos.library/GetVar

   NAME
        GetVar -- Returns the value of a local or global variable (V36)

   SYNOPSIS
        len = GetVar( name, buffer, size, flags )
        D0             D1     D2     D3    D4

        LONG GetVar( STRPTR, STRPTR, LONG, ULONG )

   FUNCTION
        Gets the value of a local or environment variable.  It is advised to
        only use ASCII strings inside variables, but not required.  This stops
        putting characters into the destination when a \n is hit, unless
        GVF_BINARY_VAR is specified.  (The \n is not stored in the buffer.)

   INPUTS
        name   - pointer to a variable name.
        buffer - a user allocated area which will be used to store
                 the value associated with the variable.
        size   - length of the buffer region in bytes.
        flags  - combination of type of var to get value of (low 8 bits), and
                 flags to control the behavior of this routine.  Currently
                 defined flags include:

                        GVF_GLOBAL_ONLY - tries to get a global env variable.
                        GVF_LOCAL_ONLY  - tries to get a local variable.
                        GVF_BINARY_VAR  - don't stop at \n

                 The default is to try to get a local variable first, then
                 to try to get a global environment variable.

   RESULT
        len -   Size of environment variable.  -1 indicates that the
                variable was not defined (if IoErr() returns
                ERROR_OBJECT_NOT_FOUND - it returns ERROR_BAD_NUMBER if
                you specify a size of 0).  If the value would overflow
                the user buffer, the buffer is truncated.  The buffer
                returned is null-terminated (even if GVF_BINARY_VAR is
                used).  The number of characters put in the buffer (not
                including '\0') is returned, and IoErr() will return the
                the size of the variable.

   BUGS
        LV_VAR is the only type that can be global.
        Under V36, we documented (and it returned) the size of the variable,
        not the number of characters transferred.  For V37 this was changed
        to the number of characters put in the buffer, and the total size
        of the variable is put in IoErr().

   SEE ALSO
        SetVar(), DeleteVar(), FindVar(), <dos/var.h>

dos.library/Info                                             dos.library/Info

    NAME
        Info -- Returns information about the disk

    SYNOPSIS
        success = Info( lock, parameterBlock )
        D0              D1    D2

        BOOL Info(BPTR, struct InfoData *)

    FUNCTION
        Info() can be used to find information about any disk in use.
        'lock' refers to the disk, or any file on the disk. The parameter
        block is returned with information about the size of the disk,
        number of free blocks and any soft errors.

    INPUTS
        lock           - BCPL pointer to a lock
        parameterBlock - pointer to an InfoData structure
                         (longword aligned)

    RESULTS
        success - boolean

    SPECIAL NOTE:
        Note that InfoData structure must be longword aligned.

dos.library/Inhibit                                       dos.library/Inhibit

   NAME
        Inhibit -- Inhibits access to a filesystem (V36)

   SYNOPSIS
        success = Inhibit(filesystem, flag)
        D0                    D1       D2

        BOOL Inhibit(STRPTR,LONG)

   FUNCTION
        Sends an ACTION_INHIBIT packet to the indicated handler.  This stops
        all activity by the handler until uninhibited.  When uninhibited,
        anything may have happened to the disk in the drive, or there may no
        longer be one.

   INPUTS
        filesystem - Name of device to inhibit (with ':')
        flag       - New status.  DOSTRUE = inhibited, FALSE = uninhibited

   RESULT
        success    - Success/failure indicator

   SEE ALSO

dos.library/Input                                           dos.library/Input

    NAME
        Input -- Identify the program's initial input file handle

    SYNOPSIS
        file = Input()
        D0

        BPTR Input(void)

    FUNCTION
        Input() is used to identify the initial input stream allocated when
        the program was initiated.  Never close the filehandle returned by
        Input!

    RESULTS
        file - BCPL pointer to a file handle

    SEE ALSO
        Output(), SelectInput()

dos.library/InternalLoadSeg                       dos.library/InternalLoadSeg

   NAME
        InternalLoadSeg -- Low-level load routine (V36)

   SYNOPSIS
        seglist = InternalLoadSeg(fh,table,functionarray,stack)
        D0                        D0  A0        A1        A2

        BPTR InternalLoadSeg(BPTR,BPTR,LONG *,LONG *)

   FUNCTION
        Loads from fh.  Table is used when loading an overlay, otherwise
        should be NULL.  Functionarray is a pointer to an array of functions.
        Note that the current Seek position after loading may be at any point
        after the last hunk loaded.  The filehandle will not be closed.  If a
        stacksize is encoded in the file, the size will be stuffed in the
        LONG pointed to by stack.  This LONG should be initialized to your
        default value: InternalLoadSeg() will not change it if no stacksize
        is found. Clears unused portions of Code and Data hunks (as well as
        BSS hunks).  (This also applies to LoadSeg() and NewLoadSeg()).

        If the file being loaded is an overlaid file, this will return
        -(seglist).  All other results will be positive.

        NOTE to overlay users: InternalLoadSeg() does NOT return seglist in
        both D0 and D1, as LoadSeg does.  The current ovs.asm uses LoadSeg(),
        and assumes returns are in D1.  We will support this for LoadSeg()
        ONLY.

   INPUTS
        fh            - Filehandle to load from.
        table         - When loading an overlay, otherwise ignored.
        functionarray - Array of function to be used for read, alloc, and free.
           FuncTable[0] ->  Actual = ReadFunc(readhandle,buffer,length),DOSBase
                            D0                D1         A0     D0      A6
           FuncTable[1] ->  Memory = AllocFunc(size,flags), Execbase
                            D0                 D0   D1      a6
           FuncTable[2] ->  FreeFunc(memory,size), Execbase
                                     A1     D0     a6
        stack         - Pointer to storage (ULONG) for stacksize.

   RESULT
        seglist       - Seglist loaded or NULL.  NOT returned in D1!

   BUGS
        Really should use tags.

   SEE ALSO
        LoadSeg(), UnLoadSeg(), NewLoadSeg(), InternalUnLoadSeg()

dos.library/InternalUnLoadSeg                   dos.library/InternalUnLoadSeg

   NAME
        InternalUnLoadSeg -- Unloads a seglist loaded with InternalLoadSeg() (V36)

   SYNOPSIS
        success = InternalUnLoadSeg(seglist,FreeFunc)
          D0                          D1       A1

        BOOL InternalUnLoadSeg(BPTR,void (*)(STRPTR,ULONG))

   FUNCTION
        Unloads a seglist using freefunc to free segments.  Freefunc is called
        as for InternalLoadSeg.  NOTE: will call Close() for overlaid
        seglists.

   INPUTS
        seglist  - Seglist to be unloaded
        FreeFunc - Function called to free memory

   RESULT
        success - returns whether everything went OK (since this may close
                  files).  Also returns FALSE if seglist was NULL.

   BUGS
        Really should use tags

   SEE ALSO
        LoadSeg(), UnLoadSeg(), InternalLoadSeg(), NewUnLoadSeg(), Close()

dos.library/IoErr                                           dos.library/IoErr

    NAME
        IoErr -- Return extra information from the system

    SYNOPSIS
        error = IoErr()
          D0

        LONG IoErr(void)

    FUNCTION
        Most I/O routines return zero to indicate an error. When this
        happens (or whatever the defined error return for the routine)
        this routine may be called to determine more information. It is
        also used in some routines to pass back a secondary result.

        Note: there is no guarantee as to the value returned from IoErr()
        after a successful operation, unless to specified by the routine.

    RESULTS
        error - integer

    SEE ALSO
        Fault(), PrintFault(), SetIoErr()

dos.library/IsFileSystem                             dos.library/IsFileSystem

   NAME
        IsFileSystem -- returns whether a Dos handler is a filesystem (V36)

   SYNOPSIS
        result = IsFileSystem(name)
        D0                     D1

        BOOL IsFileSystem(STRPTR)

   FUNCTION
        Returns whether the device is a filesystem or not.  A filesystem
        supports seperate files storing information.  It may also support
        sub-directories, but is not required to.  If the filesystem doesn't
        support this new packet, IsFileSystem() will use Lock(":",...) as
        an indicator.

   INPUTS
        name   - Name of device in question, with trailing ':'.

   RESULT
        result - Flag to indicate if device is a file system

   SEE ALSO
        Lock()

dos.library/IsInteractive                           dos.library/IsInteractive

    NAME
        IsInteractive -- Discover whether a file is "interactive"

    SYNOPSIS
        status = IsInteractive( file )
        D0                      D1

        BOOL IsInteractive(BPTR)

    FUNCTION
        The return value 'status' indicates whether the file associated
        with the file handle 'file' is connected to a virtual terminal.

    INPUTS
        file - BCPL pointer to a file handle

    RESULTS
        status - boolean

    SEE ALSO

dos.library/LoadSeg                                       dos.library/LoadSeg

    NAME
        LoadSeg -- Scatterload a loadable file into memory

    SYNOPSIS
        seglist = LoadSeg( name )
        D0                 D1

        BPTR LoadSeg(STRPTR)

    FUNCTION
        The file 'name' should be a load module produced by the linker.
        LoadSeg() scatterloads the CODE, DATA and BSS segments into memory,
        chaining together the segments with BPTR's on their first words.
        The end of the chain is indicated by a zero.  There can be any number
        of segments in a file.  All necessary relocation is handled by
        LoadSeg().

        In the event of an error any blocks loaded will be unloaded and a
        NULL result returned.

        If the module is correctly loaded then the output will be a pointer
        at the beginning of the list of blocks. Loaded code is unloaded via
        a call to UnLoadSeg().

    INPUTS
        name - pointer to a null-terminated string

    RESULTS
        seglist - BCPL pointer to a seglist

    SEE ALSO
        UnLoadSeg(), InternalLoadSeg(), InternalUnLoadSeg(), CreateProc(),
        CreateNewProc(), NewLoadSeg().

dos.library/Lock                                             dos.library/Lock

    NAME
        Lock -- Lock a directory or file

    SYNOPSIS
        lock  = Lock( name, accessMode )
        D0            D1        D2

        BPTR Lock(STRPTR, LONG)

    FUNCTION
        A filing system lock on the file or directory 'name' is returned if
        possible.

        If the accessMode is ACCESS_READ, the lock is a shared read lock;
        if the accessMode is ACCESS_WRITE then it is an exclusive write
        lock.  Do not use random values for mode.

        If Lock() fails (that is, if it cannot obtain a filing system lock
        on the file or directory) it returns a zero.

        Tricky assumptions about the internal format of a lock are unwise,
        as are any attempts to use the fl_Link or fl_Access fields.

    INPUTS
        name       - pointer to a null-terminated string
        accessMode - integer

    RESULTS
        lock - BCPL pointer to a lock

    SEE ALSO
        UnLock(), DupLock(), ChangeMode(), NameFromLock(), DupLockFromFH()

dos.library/LockDosList                               dos.library/LockDosList

   NAME
        LockDosList -- Locks the specified Dos Lists for use (V36)

   SYNOPSIS
        dlist = LockDosList(flags)
        D0                   D1

        struct DosList *LockDosList(ULONG)

   FUNCTION
        Locks the dos device list in preparation to walk the list.
        If the list is 'busy' then this routine will not return until it is
        available.  This routine "nests": you can call it multiple times, and
        then must unlock it the same number of times.  The dlist
        returned is NOT a valid entry: it is a special value.  Note that
        for 1.3 compatibility, it also does a Forbid() - this will probably
        be removed at some future time.  The 1.3 Forbid() locking of this
        list had some race conditions.  The pointer returned by this is NOT
        an actual DosList pointer - you should use on of the other DosEntry
        calls to get actual pointers to DosList structures (such as
        NextDosEntry()), passing the value returned by LockDosList()
        as the dlist value.

        Note for handler writers: you should never call this function with
        LDF_WRITE, since it can deadlock you (if someone has it read-locked
        and they're trying to send you a packet).  Use AttemptLockDosList()
        instead, and effectively busy-wait with delays for the list to be
        available.  The other option is that you can spawn a process to
        add the entry safely.

        As an example, here's how you can search for all volumes of a specific
        name and do something with them:

        2.0 way:

                dl = LockDosList(LDF_VOLUMES|LDF_READ);
                while (dl = FindDosEntry(dl,name,LDF_VOLUMES))
                {
                        Add to list of volumes to process or break out of
                        the while loop.
                        (You could try using it here, but I advise
                        against it for compatability reasons if you
                        are planning on continuing to examine the list.)
                }

                process list of volumes saved above, or current entry if
                you're only interested in the first one of that name.

                UnLockDosList();  /* must not use dl after this! */

        1.3/2.0 way:

                if (version >= 36)
                        dl = LockDosList(LDF_VOLUMES|LDF_READ);
                else {
                        Forbid();
                        /* tricky! note dol_Next is at offset 0! */
                        dl = &(...->di_DeviceList);
                }

                while (version >= 36 ?
                                dl = FindDosEntry(dl,name,LDF_VOLUMES) :
                                dl = yourfindentry(dl,name,DLT_VOLUME))
                {
                        Add to list of volumes to process, or break out of
                        the while loop.
                        Do NOT lock foo1/foo2 here if you will continue
                        to examine the list - it breaks the forbid
                        and the list may change on you.
                }

                process list of volumes saved above, or current entry if
                you're only interested in the first one of that name.

                if (version >= 36)
                        UnLockDosList();
                else
                        Permit();
                /* must not use dl after this! */
                ...

                struct DosList *
                yourfindentry (struct DosList *dl, STRPTRname, type)
                {
                /* tricky - depends on dol_Next being at offset 0,
                   and the initial ptr being a ptr to di_DeviceList! */
                        while (dl = dl->dol_Next)
                        {
                            if (dl->dol_Type == type &&
                                stricmp(name,BADDR(dl->dol_Name)+1) == 0)
                            {
                                break;
                            }
                        }
                        return dl;
                }

   INPUTS
        flags - Flags stating which types of nodes you want to lock.

   RESULT
        dlist - Pointer to the head of the list.  NOT a valid node!

   SEE ALSO
        AttemptLockDosList(), UnLockDosList(), Forbid(), NextDosEntry()

dos.library/LockRecord                                 dos.library/LockRecord

   NAME
        LockRecord -- Locks a portion of a file (V36)

   SYNOPSIS
        success = LockRecord(fh,offset,length,mode,timeout)
        D0                   D1   D2     D3    D4    D5

        ULONG LockRecord(BPTR,ULONG,ULONG,ULONG,ULONG)

   FUNCTION
        This locks a portion of a file for exclusive access.  Timeout is how
        long to wait in ticks (1/50 sec) for the record to be available.

        Valid modes are:
                REC_EXCLUSIVE
                REC_EXCLUSIVE_IMMED
                REC_SHARED
                REC_SHARED_IMMED
        For the IMMED modes, the timeout is ignored.

        Record locks are tied to the filehandle used to create them.  The
        same filehandle can get any number of exclusive locks on the same
        record, for example.  These are cooperative locks, they only
        affect other people calling LockRecord().

   INPUTS
        fh      - File handle for which to lock the record
        offset  - Record start position
        length  - Length of record in bytes
        mode    - Type of lock requester
        timeout - Timeout interval in ticks.  0 is legal.

   RESULT
        success - Success or failure

   BUGS
        In 2.0 through 2.02 (V36), LockRecord() only worked in the ramdisk.
        Attempting to lock records on the disk filesystem causes a crash.
        This was fixed for V37.

   SEE ALSO
        LockRecords(), UnLockRecord(), UnLockRecords()

dos.library/LockRecords                               dos.library/LockRecords

   NAME
        LockRecords -- Lock a series of records (V36)

   SYNOPSIS
        success = LockRecords(record_array,timeout)
        D0                       D1           D2

        BOOL LockRecords(struct RecordLock *,ULONG)

   FUNCTION
        This locks several records within a file for exclusive access.
        Timeout is how long to wait in ticks for the records to be available.
        The wait is applied to each attempt to lock each record in the list.
        It is recommended that you always lock a set of records in the same
        order to reduce possibilities of deadlock.

        The array of RecordLock structures is terminated by an entry with
        rec_FH of NULL.

   INPUTS
        record_array - List of records to be locked
        timeout      - Timeout interval.  0 is legal

   RESULT
        success      - Success or failure

   BUGS
        See LockRecord()

   SEE ALSO
        LockRecord(), UnLockRecord(), UnLockRecords()

dos.library/MakeDosEntry                             dos.library/MakeDosEntry

   NAME
        MakeDosEntry -- Creates a DosList structure (V36)

   SYNOPSIS
        newdlist = MakeDosEntry(name, type)
        D0                       D1    D2

        struct DosList *MakeDosEntry(STRPTR, LONG)

   FUNCTION
        Create a DosList structure, including allocating a name and correctly
        null-terminating the BSTR.  It also sets the dol_Type field, and sets
        all other fields to 0.  This routine should be eliminated and replaced
        by a value passed to AllocDosObject()!

   INPUTS
        name - name for the device/volume/assign node.
        type - type of node.

   RESULT
        newdlist - The new device entry or NULL.

   SEE ALSO
        AddDosEntry(), RemDosEntry(), FindDosEntry(), LockDosList(),
        NextDosEntry(), FreeDosEntry()

dos.library/MakeLink                                     dos.library/MakeLink

   NAME
        MakeLink -- Creates a filesystem link (V36)

   SYNOPSIS
        success = MakeLink( name, dest, soft )
        D0                   D1    D2    D3

        BOOL MakeLink( STRPTR, LONG, LONG )

   FUNCTION
        Create a filesystem link from 'name' to dest.  For "soft-links",
        dest is a pointer to a null-terminated path string.  For "hard-
        links", dest is a lock (BPTR).  'soft' is FALSE for hard-links,
        non-zero otherwise.

        Soft-links are resolved at access time by a combination of the
        filesystem (by returning ERROR_IS_SOFT_LINK to dos), and by
        Dos (using ReadLink() to resolve any links that are hit).

        Hard-links are resolved by the filesystem in question.  A series
        of hard-links to a file are all equivalent to the file itself.
        If one of the links (or the original entry for the file) is
        deleted, the data remains until there are no links left.

   INPUTS
        name - Name of the link to create
        dest - CPTR to path string, or BPTR lock
        soft - FALSE for hard-links, non-zero for soft-links

   RESULT
        Success - boolean

   BUGS
        In V36, soft-links didn't work in the ROM filesystem.  This was
        fixed for V37.

   SEE ALSO
        ReadLink(), Open(), Lock()

dos.library/MatchEnd                                     dos.library/MatchEnd

   NAME
        MatchEnd -- Free storage allocated for MatchFirst()/MatchNext() (V36)

   SYNOPSIS
        MatchEnd(AnchorPath)
                     D1

        VOID MatchEnd(struct AnchorPath *)

   FUNCTION
        Return all storage associated with a given search.

   INPUTS
        AnchorPath - Anchor used for MatchFirst()/MatchNext()
                     MUST be longword aligned!

   SEE ALSO
        MatchFirst(), ParsePattern(), Examine(), CurrentDir(), Examine(),
        MatchNext(), ExNext(), <dos/dosasl.h>

dos.library/MatchFirst                                 dos.library/MatchFirst

   NAME
        MatchFirst -- Finds file that matches pattern (V36)

   SYNOPSIS
        error = MatchFirst(pat, AnchorPath)
        D0                 D1       D2

        LONG MatchFirst(STRPTR, struct AnchorPath *)

   FUNCTION
        Locates the first file or directory that matches a given pattern.
        MatchFirst() is passed your pattern (you do not pass it through
        ParsePattern() - MatchFirst() does that for you), and the control
        structure.  MatchFirst() normally initializes your AnchorPath
        structure for you, and returns the first file that matched your
        pattern, or an error.  Note that MatchFirst()/MatchNext() are unusual
        for Dos in that they return 0 for success, or the error code (see
        <dos/dos.h>), instead of the application getting the error code
        from IoErr().

        When looking at the result of MatchFirst()/MatchNext(), the ap_Info
        field of your AnchorPath has the results of an Examine() of the object.
        You normally get the name of the object from fib_FileName, and the
        directory it's in from ap_Current->an_Lock.  To access this object,
        normally you would temporarily CurrentDir() to the lock, do an action
        to the file/dir, and then CurrentDir() back to your original directory.
        This makes certain you affect the right object even when two volumes
        of the same name are in the system.  You can use ap_Buf (with
        ap_Strlen) to get a name to report to the user.

        To initialize the AnchorPath structure (particularily when reusing
        it), set ap_BreakBits to the signal bits (CDEF) that you want to take
        a break on, or NULL, if you don't want to convenience the user.
        ap_Flags should be set to any flags you need or all 0's otherwise.
        ap_FoundBreak should be cleared if you'll be using breaks.

        If you want to have the FULL PATH NAME of the files you found,
        allocate a buffer at the END of this structure, and put the size of
        it into ap_Strlen.  If you don't want the full path name, make sure
        you set ap_Strlen to zero.  In this case, the name of the file, and
        stats are available in the ap_Info, as per usual.

        Then call MatchFirst() and then afterwards, MatchNext() with this
        structure.  You should check the return value each time (see below)
        and take the appropriate action, ultimately calling MatchEnd() when
        there are no more files or you are done.  You can tell when you are
        done by checking for the normal AmigaDOS return code
        ERROR_NO_MORE_ENTRIES.

        Note: patterns with trailing slashes may cause MatchFirst()/MatchNext()
        to return with an ap_Current->an_Lock on the object, and a filename
        of the empty string ("").

        See ParsePattern() for more information on the patterns.

   INPUTS
        pat        - Pattern to search for
        AnchorPath - Place holder for search.  MUST be longword aligned!

   RESULT
        error - 0 for success or error code.  (Opposite of most Dos calls!)

   BUGS
        In V36, there were a number of bugs with MatchFirst()/MatchNext().
        One was that if you entered a directory with a name like "df0:l"
        using DODIR, it would re-lock the full string "df0:l", which can
        cause problems if the disk has changed.  It also had problems
        with patterns such as #?/abc/def - the ap_Current->an_Lock would
        not be on the directory def is found in.  ap_Buf would be correct,
        however.  It had similar problems with patterns with trailing
        slashes.  These have been fixed for V37 and later.

        A bug that has not been fixed for V37 concerns a pattern of a
        single directory name (such as "l").  If you enter such a directory
        via DODIR, it re-locks l relative to the current directory.  Thus
        you must not change the current directory before calling MatchNext()
        with DODIR in that situation.  If you aren't using DODIR to enter
        directories you can ignore this.  This may be fixed in some upcoming
        release.

   SEE ALSO
        MatchNext(), ParsePattern(), Examine(), CurrentDir(), Examine(),
        MatchEnd(), ExNext(), <dos/dosasl.h>

dos.library/MatchNext                                   dos.library/MatchNext

   NAME
        MatchNext - Finds the next file or directory that matches pattern (V36)

   SYNOPSIS
        error = MatchNext(AnchorPath)
        D0                    D1

        LONG MatchNext(struct AnchorPath *)

   FUNCTION
        Locates the next file or directory that matches a given pattern.
        See <dos/dosasl.h> for more information.  Various bits in the flags
        allow the application to control the operation of MatchNext().

        See MatchFirst() for other notes.

   INPUTS
        AnchorPath - Place holder for search.  MUST be longword aligned!

   RESULT
        error - 0 for success or error code.  (Opposite of most Dos calls)

   BUGS
        See MatchFirst().

   SEE ALSO
        MatchFirst(), ParsePattern(), Examine(), CurrentDir(), Examine(),
        MatchEnd(), ExNext(), <dos/dosasl.h>

dos.library/MatchPattern                             dos.library/MatchPattern

   NAME
        MatchPattern --  Checks for a pattern match with a string (V36)

   SYNOPSIS
        match = MatchPattern(pat, str)
        D0                   D1   D2

        BOOL MatchPattern(STRPTR, STRPTR)

   FUNCTION
        Checks for a pattern match with a string.  The pattern must be a
        tokenized string output by ParsePattern().  This routine is
        case-sensitive.

        NOTE: this routine is highly recursive.  You must have at least
        1500 free bytes of stack to call this (it will cut off it's
        recursion before going any deeper than that and return failure).
        That's _currently_ enough for about 100 levels deep of #, (, ~, etc.

   INPUTS
        pat - Special pattern string to match as returned by ParsePattern()
        str - String to match against given pattern

   RESULT
        match - success or failure of pattern match.  On failure,
                IoErr() will return 0 or ERROR_TOO_MANY_LEVELS (starting
                with V37 - before that there was no stack checking).

   SEE ALSO
        ParsePattern(), MatchPatternNoCase(), MatchFirst(), MatchNext()

dos.library/MatchPatternNoCase                 dos.library/MatchPatternNoCase

   NAME
        MatchPatternNoCase --  Checks for a pattern match with a string (V37)

   SYNOPSIS
        match = MatchPatternNoCase(pat, str)
        D0                         D1   D2

        BOOL MatchPatternNoCase(STRPTR, STRPTR)

   FUNCTION
        Checks for a pattern match with a string.  The pattern must be a
        tokenized string output by ParsePatternNoCase().  This routine is
        case-insensitive.

        NOTE: this routine is highly recursive.  You must have at least
        1500 free bytes of stack to call this (it will cut off it's
        recursion before going any deeper than that and return failure).
        That's _currently_ enough for about 100 levels deep of #, (, ~, etc.

   INPUTS
        pat - Special pattern string to match as returned by ParsePatternNoCase()
        str - String to match against given pattern

   RESULT
        match - success or failure of pattern match.  On failure,
                IoErr() will return 0 or ERROR_TOO_MANY_LEVELS (starting
                with V37 - before that there was no stack checking).

   SEE ALSO
        ParsePatternNoCase(), MatchPattern(), MatchFirst(), MatchNext()

dos.library/MaxCli                                         dos.library/MaxCli

   NAME
        MaxCli -- returns the highest CLI process number possibly in use (V36)

   SYNOPSIS
        number = MaxCli()
        D0

        LONG MaxCli(void)

   FUNCTION
        Returns the highest CLI number that may be in use.  CLI numbers are
        reused, and are usually as small as possible.  To find all CLIs, scan
        using FindCliProc() from 1 to MaxCLI().  The number returned by
        MaxCli() may change as processes are created and destroyed.

   RESULT
        number - The highest CLI number that _may_ be in use.

   SEE ALSO
        FindCliProc(), Cli()

dos.library/NameFromFH                                 dos.library/NameFromFH

   NAME
        NameFromFH -- Get the name of an open filehandle (V36)

   SYNOPSIS
        success = NameFromFH(fh, buffer, len)
        D0                   D1    D2    D3

        BOOL NameFromFH(BPTR, STRPTR, LONG)

   FUNCTION
        Returns a fully qualified path for the filehandle.  This routine is
        guaranteed not to write more than len characters into the buffer.  The
        name will be null-terminated.  See NameFromLock() for more information.

   INPUTS
        fh     - Lock of object to be examined.
        buffer - Buffer to store name.
        len    - Length of buffer.

   RESULT
        success - Success/failure indicator.

   SEE ALSO
        NameFromLock()

dos.library/NameFromLock                             dos.library/NameFromLock

   NAME
        NameFromLock -- Returns the name of a locked object (V36)

   SYNOPSIS
        success = NameFromLock(lock, buffer, len)
        D0                      D1     D2    D3

        BOOL NameFromLock(BPTR, STRPTR, LONG)

   FUNCTION
        Returns a fully qualified path for the lock.  This routine is
        guaranteed not to write more than len characters into the buffer.  The
        name will be null-terminated.  NOTE: if the volume is not mounted,
        the system will request it (unless of course you set pr_WindowPtr to
        -1).  If the volume is not mounted or inserted, it will return an
        error.  If the lock passed in is NULL, "SYS:" will be returned. If
        the buffer is too short, an error will be returned, and IoErr() will
        return ERROR_LINE_TOO_LONG.

   INPUTS
        lock   - Lock of object to be examined.
        buffer - Buffer to store name.
        len    - Length of buffer.

   RESULT
        success - Success/failure indicator.

   BUGS
        Should return the name of the boot volume instead of SYS: for a NULL
        lock.

   SEE ALSO
        NameFromFH(), Lock()

dos.library/NewLoadSeg                                 dos.library/NewLoadSeg

   NAME
        NewLoadSeg -- Improved version of LoadSeg for stacksizes (V36)

   SYNOPSIS
        seglist = NewLoadSeg(file, tags)
        D0                    D1    D2

        BPTR NewLoadSeg(STRPTR, struct TagItem *)

        seglist = NewLoadSegTagList(file, tags)
        D0                           D1    D2

        BPTR NewLoadSegTagList(STRPTR, struct TagItem *)

        seglist = NewLoadSegTags(file, ...)

        BPTR NewLoadSegTags(STRPTR, ...)

   FUNCTION
        Does a LoadSeg on a file, and takes additional actions based on the
        tags supplied.

        Clears unused portions of Code and Data hunks (as well as BSS hunks).
        (This also applies to InternalLoadSeg() and LoadSeg()).

        NOTE to overlay users: NewLoadSeg() does NOT return seglist in
        both D0 and D1, as LoadSeg does.  The current ovs.asm uses LoadSeg(),
        and assumes returns are in D1.  We will support this for LoadSeg()
        ONLY.

   INPUTS
        file - Filename of file to load
        tags - pointer to tagitem array

   RESULT
        seglist - Seglist loaded, or NULL

   BUGS
        No tags are currently defined.

   SEE ALSO
        LoadSeg(), UnLoadSeg(), InternalLoadSeg(), InternalUnLoadSeg()

dos.library/NextDosEntry                             dos.library/NextDosEntry

   NAME
        NextDosEntry -- Get the next Dos List entry (V36)

   SYNOPSIS
        newdlist = NextDosEntry(dlist,flags)
        D0                       D1    D2

        struct DosList *NextDosEntry(struct DosList *,ULONG)

   FUNCTION
        Find the next Dos List entry of the right type.  You MUST have locked
        the types you're looking for.  Returns NULL if there are no more of
        that type in the list.

   INPUTS
        dlist    - The current device entry.
        flags    - What type of entries to look for.

   RESULT
        newdlist - The next device entry of the right type or NULL.

   SEE ALSO
        AddDosEntry(), RemDosEntry(), FindDosEntry(), LockDosList(),
        MakeDosEntry(), FreeDosEntry()

dos.library/Open                                             dos.library/Open

    NAME
        Open -- Open a file for input or output

    SYNOPSIS
        file = Open( name, accessMode )
        D0           D1    D2

        BPTR Open(STRPTR, LONG)

    FUNCTION
        The named file is opened and a file handle returned.  If the
        accessMode is MODE_OLDFILE, an existing file is opened for reading
        or writing. If the value is MODE_NEWFILE, a new file is created for
        writing. MODE_READWRITE opens a file with an shared lock, but
        creates it if it didn't exist.  Open types are documented in the
        <dos/dos.h> or <libraries/dos.h> include file.

        The 'name' can be a filename (optionally prefaced by a device
        name), a simple device such as NIL:, a window specification such as
        CON: or RAW: followed by window parameters, or "*", representing the
        current window.  Note that as of V36, "*" is obsolete, and CONSOLE:
        should be used instead.

        If the file cannot be opened for any reason, the value returned
        will be zero, and a secondary error code will be available by
        calling the routine IoErr().

    INPUTS
        name       - pointer to a null-terminated string
        accessMode - integer

    RESULTS
        file - BCPL pointer to a file handle

    SEE ALSO
        Close(), ChangeMode(), NameFromFH(), ParentOfFH(), ExamineFH()

dos.library/OpenFromLock                             dos.library/OpenFromLock

   NAME
        OpenFromLock -- Opens a file you have a lock on (V36)

   SYNOPSIS
        fh = OpenFromLock(lock)
        D0                 D1

        BPTR OpenFromLock(BPTR)

   FUNCTION
        Given a lock, this routine performs an open on that lock.  If the open
        succeeds, the lock is (effectively) relinquished, and should not be
        UnLock()ed or used.  If the open fails, the lock is still usable.
        The lock associated with the file internally is of the same access
        mode as the lock you gave up - shared is similar to MODE_OLDFILE,
        exclusive is similar to MODE_NEWFILE.

   INPUTS
        lock - Lock on object to be opened.

   RESULT
        fh   - Newly opened file handle or NULL for failure

   BUGS
        In the original V36 autodocs, this was shown (incorrectly) as
        taking a Mode parameter as well.  The prototypes and pragmas were
        also wrong.

   SEE ALSO
        Open(), Close(), Lock(), UnLock()

dos.library/Output                                         dos.library/Output

    NAME
        Output -- Identify the programs' initial output file handle

    SYNOPSIS
        file = Output()
        D0

        BPTR Output(void)

    FUNCTION
        Output() is used to identify the initial output stream allocated
        when the program was initiated.  Never close the filehandle returned
        by Output().

    RESULTS
        file - BCPL pointer to a file handle

    SEE ALSO
        Input()

dos.library/ParentDir                                   dos.library/ParentDir

    NAME
        ParentDir -- Obtain the parent of a directory or file

    SYNOPSIS
        newlock = ParentDir( lock )
        D0                   D1

        BPTR ParentDir(BPTR)

    FUNCTION
        The argument 'lock' is associated with a given file or directory.
        ParentDir() returns 'newlock' which is associated the parent
        directory of 'lock'.

        Taking the ParentDir() of the root of the current filing system
        returns a NULL (0) lock.  Note this 0 lock represents the root of
        file system that you booted from (which is, in effect, the parent
        of all other file system roots.)

    INPUTS
        lock - BCPL pointer to a lock

    RESULTS
        newlock - BCPL pointer to a lock

    SEE ALSO
        Lock(), DupLock(), UnLock(), ParentOfFH(), DupLockFromFH()

dos.library/ParentOfFH                                 dos.library/ParentOfFH

   NAME
        ParentOfFH -- returns a lock on the parent directory of a file (V36)

   SYNOPSIS
        lock = ParentOfFH(fh)
        D0               D1

        BPTR ParentOfFH(BPTR)

   FUNCTION
        Returns a shared lock on the parent directory of the filehandle.

   INPUTS
        fh   - Filehandle you want the parent of.

   RESULT
        lock - Lock on parent directory of the filehandle or NULL for failure.

   SEE ALSO
        Parent(), Lock(), UnLock() DupLockFromFH()

dos.library/ParsePattern                             dos.library/ParsePattern

   NAME
        ParsePattern -- Create a tokenized string for MatchPattern() (V36)

   SYNOPSIS
        IsWild = ParsePattern(Source, Dest, DestLength)
        d0                      D1     D2      D3

        LONG ParsePattern(STRPTR, STRPTR, LONG)

   FUNCTION
        Tokenizes a pattern, for use by MatchPattern().  Also indicates if
        there are any wildcards in the pattern (i.e. whether it might match
        more than one item).  Note that Dest must be at least 2 times as
        large as Source plus bytes to be (almost) 100% certain of no
        buffer overflow.  This is because each input character can currently
        expand to 2 tokens (with one exception that can expand to 3, but
        only once per string).  Note: this implementation may change in
        the future, so you should handle error returns in all cases, but
        the size above should still be a reasonable upper bound for a buffer
        allocation.

        The patterns are fairly extensive, and approximate some of the ability
        of Unix/grep "regular expression" patterns.  Here are the available
        tokens:

        ?       Matches a single character.
        #       Matches the following expression 0 or more times.
        (ab|cd) Matches any one of the items seperated by '|'.
        ~       Negates the following expression.  It matches all strings
                that do not match the expression (aka ~(foo) matches all
                strings that are not exactly "foo").
        [abc]   Character class: matches any of the characters in the class.
        [~bc]   Character class: matches any of the characters not in the
                class.
        a-z     Character range (only within character classes).
        %       Matches 0 characters always (useful in "(foo|bar|%)").
        *       Synonym for "#?", not available by default in 2.0.  Available
                as an option that can be turned on.

        "Expression" in the above table means either a single character
        (ex: "#?"), or an alternation (ex: "#(ab|cd|ef)"), or a character
        class (ex: "#[a-zA-Z]").

   INPUTS
        source     - unparsed wildcard string to search for.
       dest       - output string, gets tokenized version of input.
        DestLength - length available in destination (should be at least as
                     twice as large as source + 2 bytes).

   RESULT
        IsWild - 1 means there were wildcards in the pattern,
                 0 means there were no wildcards in the pattern,
                -1 means there was a buffer overflow or other error

   BUGS
        Should set IoErr() to something useful (not currently set) on an
        error.

   SEE ALSO
        ParsePatternNoCase(), MatchPattern(), MatchFirst(), MatchNext()

dos.library/ParsePatternNoCase                 dos.library/ParsePatternNoCase

   NAME
        ParsePatternNoCase -- Create a tokenized string for
                                                MatchPatternNoCase() (V37)

   SYNOPSIS
        IsWild = ParsePatternNoCase(Source, Dest, DestLength)
        d0                            D1     D2      D3

        LONG ParsePatternNoCase(STRPTR, STRPTR, LONG)

   FUNCTION
        Tokenizes a pattern, for use by MatchPatternNoCase().  Also indicates
        if there are any wildcards in the pattern (i.e. whether it might match
        more than one item).  Note that Dest must be at least 2 times as
        large as Source plus 2 bytes.

        For a description of the wildcards, see ParsePattern().

   INPUTS
        source     - unparsed wildcard string to search for.
       dest       - output string, gets tokenized version of input.
        DestLength - length available in destination (should be at least as
                     twice as large as source + 2 bytes).

   RESULT
        IsWild - 1 means there were wildcards in the pattern,
                 0 means there were no wildcards in the pattern,
                -1 means there was a buffer overflow or other error

   BUGS
        Should set IoErr() to something useful (not currently set) on an
        error.

   SEE ALSO
        ParsePattern(), MatchPatternNoCase(), MatchFirst(), MatchNext()

dos.library/PathPart                                     dos.library/PathPart

   NAME
        PathPart -- Returns a pointer to the end of the next-to-last (V36)
                    component of a path.

   SYNOPSIS
        fileptr = PathPart( path )
        D0                   D1

        STRPTR PathPart( STRPTR )

   FUNCTION
        This function returns a pointer to the character after the next-to-last
        component of a path specification, which will normally be the directory
        name.  If there is only one component, it returns a pointer to the
        beginning of the string.  The only real difference between this and
        FilePart() is the handling of '/'.

   INPUTS
        path - pointer to an path string.  May be relative to the current
               directory or the current disk.

   RESULT
        fileptr - pointer to the end of the next-to-last component of the path.

   EXAMPLE
        PathPart("xxx:yyy/zzz/qqq") would return a pointer to the last '/'.
        PathPart("xxx:yyy") would return a pointer to the first 'y').

   SEE ALSO
        FilePart(), AddPart()

dos.library/PrintFault                                 dos.library/PrintFault

   NAME
        PrintFault -- Returns the text associated with a DOS error code (V36)

   SYNOPSIS
        success = PrintFault(code, header)
        D0                    D1     D2

        BOOL PrintFault(LONG, STRPTR)

   FUNCTION
        This routine obtains the error message text for the given error code.
        This is similar to the Fault() function, except that the output is
        written to the default output channel with buffered output.
        The value returned by IoErr() is set to the code passed in.

   INPUTS
        code   - Error code
        header - header to output before error text

   RESULT
        success - Success/failure code.

   SEE ALSO
        IoErr(), Fault(), SetIoErr(), Output(), FPuts()

dos.library/PutStr                                         dos.library/PutStr

   NAME
        PutStr -- Writes a string the the default output (buffered) (V36)

   SYNOPSIS
        error = PutStr(str)
        D0             D1

        LONG PutStr(STRPTR)

   FUNCTION
        This routine writes an unformatted string to the default output.  No
        newline is appended to the string and any error is returned.  This
        routine is buffered.

   INPUTS
        str   - Null-terminated string to be written to default output

   RESULT
        error - 0 for success, -1 for any error.  NOTE: this is opposite
                most Dos function returns!

   SEE ALSO
        FPuts(), FPutC(), FWrite(), WriteChars()

dos.library/Read                                             dos.library/Read

    NAME
        Read -- Read bytes of data from a file

    SYNOPSIS
        actualLength = Read( file, buffer, length )
        D0                   D1    D2      D3

        LONG Read(BPTR, void *, LONG)

    FUNCTION
        Data can be copied using a combination of Read() and Write().
        Read() reads bytes of information from an opened file (represented
        here by the argument 'file') into the buffer given. The argument
        'length' is the length of the buffer given.

        The value returned is the length of the information actually read.
        So, when 'actualLength' is greater than zero, the value of
        'actualLength' is the the number of characters read. Usually Read
        will try to fill up your buffer before returning. A value of zero
        means that end-of-file has been reached. Errors are indicated by a
        value of -1.

        Note: this is an unbuffered routine (the request is passed directly
        to the filesystem.)  Buffered I/O is more efficient for small
        reads and writes; see FGetC().

    INPUTS
        file - BCPL pointer to a file handle
        buffer - pointer to buffer
        length - integer

    RESULTS
        actualLength - integer

    SEE ALSO
        Open(), Close(), Write(), Seek(), FGetC()

dos.library/ReadArgs                                     dos.library/ReadArgs

   NAME
        ReadArgs - Parse the command line input (V36)

   SYNOPSIS
        result = ReadArgs(template, array, rdargs)
        D0                   D1      D2      D3

        struct RDArgs * ReadArgs(STRPTR, LONG *, struct RDArgs *)

   FUNCTION
        Parses and argument string according to a template.  Normally gets
        the arguments by reading buffered IO from Input(), but also can be
        made to parse a string.  MUST be matched by a call to FreeArgs().

        ReadArgs() parses the commandline according to a template that is
        passed to it.  This specifies the different command-line options and
        their types.  A template consists of a list of options.  Options are
        named in "full" names where possible (for example, "Quick" instead of
        "Q").  Abbreviations can also be specified by using "abbrev=option"
        (for example, "Q=Quick").

        Options in the template are separated by commas.  To get the results
        of ReadArgs(), you examine the array of longwords you passed to it
        (one entry per option in the template).  This array should be cleared
        (or initialized to your default values) before passing to ReadArgs().
        Exactly what is put in a given entry by ReadArgs() depends on the type
        of option.  The default is a string (a sequence of non-whitespace
        characters, or delimited by quotes, which will be stripped by
        ReadArgs()), in which case the entry will be a pointer.

        Options can be followed by modifiers, which specify things such as
        the type of the option.  Modifiers are specified by following the
        option with a '/' and a single character modifier.  Multiple modifiers
        can be specified by using multiple '/'s.  Valid modifiers are:

        /S - Switch.  This is considered a boolean variable, and will be
             set if the option name appears in the command-line.  The entry
             is the boolean (0 for not set, non-zero for set).

        /K - Keyword.  This means that the option will not be filled unless
             the keyword appears.  For example if the template is "Name/K",
             then unless "Name=<string>" or "Name <string>" appears in the
             command line, Name will not be filled.

        /N - Number.  This parameter is considered a decimal number, and will
             be converted by ReadArgs.  If an invalid number is specified,
             an error will be returned.  The entry will be a pointer to the
             longword number (this is how you know if a number was specified).

        /T - Toggle.  This is similar to a switch, but when specified causes
             the boolean value to "toggle".  Similar to /S.

        /A - Required.  This keyword must be given a value during command-line
             processing, or an error is returned.

        /F - Rest of line.  If this is specified, the entire rest of the line
             is taken as the parameter for the option, even if other option
             keywords appear in it.

        /M - Multiple strings.  This means the argument will take any number
             of strings, returning them as an array of strings.  Any arguments
             not considered to be part of another option will be added to this
             option.  Only one /M should be specified in a template.  Example:
             for a template "Dir/M,All/S" the command-line "foo bar all qwe"
             will set the boolean "all", and return an array consisting of
             "foo", "bar", and "qwe".  The entry in the array will be a pointer
             to an array of string pointers, the last of which will be NULL.

             There is an interaction between /M parameters and /A parameters.
             If there are unfilled /A parameters after parsing, it will grab
             strings from the end of a previous /M parameter list to fill the
             /A's.  This is used for things like Copy ("From/A/M,To/A").

        ReadArgs() returns a struct RDArgs if it succeeds.  This serves as an
        "anchor" to allow FreeArgs() to free the associated memory.  You can
        also pass in a struct RDArgs to control the operation of ReadArgs()
        (normally you pass NULL for the parameter, and ReadArgs() allocates
        one for you).  This allows providing different sources for the
        arguments, providing your own string buffer space for temporary
        storage, and extended help text.  See <dos/rdargs.h> for more
        information on this.  Note: if you pass in a struct RDArgs, you must
        still call FreeArgs() to release storage that gets attached to it,
        but you are responsible for freeing the RDArgs yourself.

        See BUGS regarding passing in strings.

   INPUTS
        template - formatting string
        array    - array of longwords for results, 1 per template entry
        rdargs   - optional rdargs structure for options.  AllocDosObject
                   should be used for allocating them if you pass one in.

   RESULT
        result   - a struct RDArgs or NULL for failure.

   BUGS
        In V36, there were a couple of minor bugs with certain argument
        combinations (/M/N returned strings, /T didn't work, and /K and
        /F interacted).  Also, a template with a /K before any non-switch
        parameter will require the argument name to be given in order for
        line to be accepted (i.e. "parm/K,xyzzy/A" would require
        "xyzzy=xxxxx" in order to work - "xxxxx" would not work).  If you
        need to avoid this for V36, put /K parameters after all non-switch
        parameters.  These problems should be fixed for V37.

        Currently (V37 and before) it requires any strings passed in to have
        newlines at the end of the string.  This may or may not be fixed in
        the future.

   SEE ALSO
        FindArg(), ReadItem(), FreeArgs(), AllocDosObject()

dos.library/ReadItem                                     dos.library/ReadItem

   NAME
        ReadItem - reads a single argument/name from command line (V36)

   SYNOPSIS
        value = ReadItem(buffer, maxchars, input)
        D0                D1        D2      D3

        LONG ReadItem(STRPTR, LONG, struct CSource *)

   FUNCTION
        Reads a "word" from either Input() (buffered), or via CSource, if it
        is non-NULL (see <dos/rdargs.h> for more information).  Handles
        quoting and some '*' substitutions (*e and *n) inside quotes (only).
        See dos/dos.h for a listing of values returned by ReadItem()
        (ITEM_XXXX).  A "word" is delimited by whitespace, quotes, or an EOF.

        ReadItem always unreads the last thing read (UnGetC(fh,-1)) so the
        caller can find out what the terminator was.

   INPUTS
        buffer   - buffer to store word in.
        maxchars - size of the buffer
        input    - CSource input or NULL (uses FGetC(Input()))

   RESULT
        value - See <dos/dos.h> for return values.

   SEE ALSO
        ReadArgs(), FindArg(), UnGetC(), FGetC(), Input(), <dos/dos.h>,
        <dos/rdargs.h>, FreeArgs()

dos.library/ReadLink                                     dos.library/ReadLink

   NAME
        ReadLink -- Reads the path for a soft filesystem link (V36)

   SYNOPSIS
        success = ReadLink( port, lock, path, buffer, size)
        D0                   D1    D2    D3     D4     D5

        BOOL ReadLink( struct MsgPort *, BPTR, STRPTR, STRPTR, ULONG)

   FUNCTION
        ReadLink() takes a lock/name pair (usually from a failed attempt
        to use them to access an object with packets), and asks the
        filesystem to find the softlink and fill buffer with the modified
        path string.  You then start the resolution process again by
        calling GetDeviceProc() with the new string from ReadLink().

        Soft-links are resolved at access time by a combination of the
        filesystem (by returning ERROR_IS_SOFT_LINK to dos), and by
        Dos (using ReadLink() to resolve any links that are hit).

   INPUTS
        port - msgport of the filesystem
        lock - lock this path is relative to on the filesystem
        path - path that caused the ERROR_IS_SOFT_LINK
        buffer - pointer to buffer for new path from handler.
        size - size of buffer.

   RESULT
        Success - boolean

   BUGS
        In V36, soft-links didn't work in the ROM filesystem.  This was
        fixed for V37.

   SEE ALSO
        MakeLink(), Open(), Lock(), GetDeviceProc()

dos.library/Relabel                                       dos.library/Relabel

   NAME
        Relabel -- Change the volume name of a volume (V36)

   SYNOPSIS
        success = Relabel(volumename,name)
        D0                    D1      D2

        BOOL Relabel(STRPTR,STRPTR)

   FUNCTION
        Changes the volumename of a volume, if supported by the filesystem.

   INPUTS
        volumename - Full name of device to rename (with ':')
        newname    - New name to apply to device (without ':')

   RESULT
        success    - Success/failure indicator

   SEE ALSO

dos.library/RemAssignList                           dos.library/RemAssignList

   NAME
        RemAssignList -- Remove an entry from a multi-dir assign (V36)

   SYNOPSIS
        success = RemAssignList(name,lock)
        D0                       D1   D2

        BOOL RemAssignList(STRPTR,BPTR)

   FUNCTION
        Removes an entry from a multi-directory assign.  The entry removed is
        the first one for which SameLock with 'lock' returns that they are on
        the same object.  The lock for the entry in the list is unlocked (not
        the entry passed in).

   INPUTS
        name - Name of device to remove lock from (without trailing ':')
        lock - Lock associated with the object to remove from the list

   RESULT
        success - Success/failure indicator.

   SEE ALSO
        Lock(), AssignLock(), AssignPath(), AssignLate(), DupLock(),
        AssignAdd(), UnLock()

dos.library/RemDosEntry                               dos.library/RemDosEntry

   NAME
        RemDosEntry -- Removes a Dos List entry from it's list (V36)

   SYNOPSIS
        success = RemDosEntry(dlist)
        D0                     D1

        BOOL RemDosEntry(struct DosList *)

   FUNCTION
        This removes an entry from the Dos Device list.  The memory associated
        with the entry is NOT freed.  NOTE: you must have locked the Dos List
        with the appropriate flags before calling this routine.  Handler
        writers should see the AddDosEntry() caveats about locking and use
        a similar workaround to avoid deadlocks.

   INPUTS
        dlist   - Device list entry to be removed.

   RESULT
        success - Success/failure indicator

   SEE ALSO
        AddDosEntry(), FindDosEntry(), NextDosEntry(), LockDosList(),
        MakeDosEntry(), FreeDosEntry()

dos.library/RemSegment                                 dos.library/RemSegment

   NAME
        RemSegment - Removes a resident segment from the resident list (V36)

   SYNOPSIS
        success = RemSegment(segment)
        D0                      D1

        BOOL RemSegment(struct Segment *)

   FUNCTION
        Removes a resident segment from the Dos resident segment list,
        unloads it, and does any other cleanup required.  Will only succeed
        if the seg_UC (usecount) is 0.

   INPUTS
        segment - the segment to be removed

   RESULT
        success - success or failure.

   SEE ALSO
        FindSegment(), AddSegment()

dos.library/Rename                                         dos.library/Rename

    NAME
        Rename -- Rename a directory or file

    SYNOPSIS
        success = Rename( oldName, newName )
        D0                D1       D2

        BOOL Rename(STRPTR, STRPTR)

    FUNCTION
        Rename() attempts to rename the file or directory specified as
        'oldName' with the name 'newName'. If the file or directory
        'newName' exists, Rename() fails and returns an error. Both
        'oldName' and the 'newName' can contain a directory specification.
        In this case, the file will be moved from one directory to another.

        Note: it is impossible to Rename() a file from one volume to
        another.

    INPUTS
        oldName - pointer to a null-terminated string
        newName - pointer to a null-terminated string

    RESULTS
        success - boolean

    SEE ALSO
        Relabel()

dos.library/ReplyPkt                                     dos.library/ReplyPkt

   NAME
        ReplyPkt -- replies a packet to the person who sent it to you (V36)

   SYNOPSIS
        ReplyPkt(packet, result1, result2)
                   D1      D2       D3

        void ReplyPkt(struct DosPacket *, LONG, LONG)

   FUNCTION
        This returns a packet to the process which sent it to you.  In
        addition, puts your pr_MsgPort address in dp_Port, so using ReplyPkt()
        again will send the message to you.  (This is used in "ping-ponging"
        packets between two processes).  It uses result 1 & 2 to set the
        dp_Res1 and dp_Res2 fields of the packet.

   INPUTS
        packet  - packet to reply, assumed to set up correctly.
        result1 - first result
        result2 - secondary result

   SEE ALSO
        DoPkt(), SendPkt(), WaitPkt(), IoErr()

dos.library/RunCommand                                 dos.library/RunCommand

   NAME
        RunCommand -- Runs a program using the current process (V36)

   SYNOPSIS
        rc = RunCommand(seglist, stacksize, argptr, argsize)
        D0                D1         D2       D3      D4

        LONG RunCommand(BPTR, ULONG, STRPTR, ULONG)

   FUNCTION
        Runs a command on your process/cli.  Seglist may be any language,
        including BCPL programs.  Stacksize is in bytes.  argptr is a null-
        terminated string, argsize is its length.  Returns the returncode the
        program exited with in d0. Returns -1 if the stack couldn't be
        allocated.

        NOTE: the argument string MUST be terminated with a newline to work
        properly with ReadArgs() and other argument parsers.

        RunCommand also takes care of setting up the current input filehandle
        in such a way that ReadArgs() can be used in the program, and restores
        the state of the buffering before returning.  It also sets the value
        returned by GetArgStr(), and restores it before returning.  NOTE:
        the setting of the argument string in the filehandle was added in V37.

        It's usually appropriate to set the command name (via
        SetProgramName()) before calling RunCommand().  RunCommand() sets
        the value returned by GetArgStr() while the command is running.

   INPUTS
        seglist   - Seglist of command to run.
        stacksize - Number of bytes to allocate for stack space
        argptr    - Pointer to argument command string.
        argsize   - Number of bytes in argument command.

   RESULT
        rc        - Return code from executed command. -1 indicates failure

   SEE ALSO
        CreateNewProc(), SystemTagList(), Execute(), GetArgStr(),
        SetProgramName(), ReadArgs()

dos.library/SameDevice                                 dos.library/SameDevice

   NAME
        SameDevice -- Are two locks are on partitions of the device? (V37)

   SYNOPSIS
        same = SameDevice(lock1, lock2)
        D0                 D1     D2

        BOOL SameDevice( BPTR, BPTR )

   FUNCTION
        SameDevice() returns whether two locks refer to partitions that
        are on the same physical device (if it can figure it out).  This
        may be useful in writing copy routines to take advantage of
        asynchronous multi-device copies.

        Entry existed in V36 and always returned 0.

   INPUTS
        lock1,lock2 - locks

   RESULT
        same - whether they're on the same device as far as Dos can determine.

dos.library/SameLock                                     dos.library/SameLock

   NAME
        SameLock -- returns whether two locks are on the same object (V36)

   SYNOPSIS
        value = SameLock(lock1, lock2)
        D0                D1     D2

        LONG SameLock(BPTR, BPTR)

   FUNCTION
        Compares two locks.  Returns LOCK_SAME if they are on the same object,
        LOCK_SAME_VOLUME if on different objects on the same volume, and
        LOCK_DIFFERENT if they are on different volumes.  Always compare
        for equality or non-equality with the results, in case new return
        values are added.

   INPUTS
        lock1 - 1st lock for comparison
        lock2 - 2nd lock for comparison

   RESULT
        value - LOCK_SAME, LOCK_SAME_VOLUME, or LOCK_DIFFERENT

   BUGS
        Should do more extensive checks for NULL against a real lock, checking
        to see if the real lock is a lock on the root of the boot volume.

        In V36, it would return LOCK_SAME_VOLUME for different volumes on the
        same handler.  Also, LOCK_SAME_VOLUME was LOCK_SAME_HANDLER (now
        an obsolete define, see <dos/dos.h>).

   SEE ALSO
        <dos/dos.h>

dos.library/Seek                                             dos.library/Seek

    NAME
        Seek -- Set the current position for reading and writing

    SYNOPSIS
        oldPosition = Seek( file, position, mode )
        D0                  D1    D2        D3

        LONG Seek(BPTR, LONG, LONG)

    FUNCTION
        Seek() sets the read/write cursor for the file 'file' to the
        position 'position'. This position is used by both Read() and
        Write() as a place to start reading or writing. The result is the
        current absolute position in the file, or -1 if an error occurs, in
        which case IoErr() can be used to find more information. 'mode' can
        be OFFSET_BEGINNING, OFFSET_CURRENT or OFFSET_END. It is used to
        specify the relative start position. For example, 20 from current
        is a position 20 bytes forward from current, -20 is 20 bytes back
        from current.

        So that to find out where you are, seek zero from current. The end
        of the file is a Seek() positioned by zero from end. You cannot
        Seek() beyond the end of a file.

    INPUTS
        file - BCPL pointer to a file handle
        position - integer
        mode - integer

    RESULTS
        oldPosition - integer

    BUGS
        The V36 and V37 ROM filesystem (and V36/V37 l:fastfilesystem)
        returns the current position instead of -1 on an error.  It sets
        IoErr() to 0 on success, and an error code on an error.

    SEE ALSO
        Read(), Write(), SetFileSize()

dos.library/SelectInput                               dos.library/SelectInput

   NAME
        SelectInput -- Select a filehandle as the default input channel (V36)

   SYNOPSIS
        old_fh = SelectInput(fh)
        D0                   D1

        BPTR SelectInput(BPTR)

   FUNCTION
        Set the current input as the default input for the process.
        This changes the value returned by Input().  old_fh should
        be closed or saved as needed.

   INPUTS
        fh     - Newly default input handle

   RESULT
        old_fh - Previous default input filehandle

   SEE ALSO
        Input(), SelectOutput(), Output()

dos.library/SelectOutput                             dos.library/SelectOutput

   NAME
        SelectOutput -- Select a filehandle as the default input channel (V36)

   SYNOPSIS
        old_fh = SelectOutput(fh)
        D0                    D1

        BPTR SelectOutput(BPTR)

   FUNCTION
        Set the current output as the default output for the process.
        This changes the value returned by Output().  old_fh should
        be closed or saved as needed.

   INPUTS
        fh     - Newly desired output handle

   RESULT
        old_fh - Previous current output

   SEE ALSO
        Output(), SelectInput(), Input()

dos.library/SendPkt                                       dos.library/SendPkt

   NAME
        SendPkt -- Sends a packet to a handler (V36)

   SYNOPSIS
        SendPkt(packet, port, replyport)
                 D1     D2      D3

        void SendPkt(struct DosPacket *,struct MsgPort *,struct MsgPort *)

   FUNCTION
        Sends a packet to a handler and does not wait.  All fields in the
        packet must be initialized before calling this routine.  The packet
        will be returned to replyport.  If you wish to use this with
        WaitPkt(), use the address or your pr_MsgPort for replyport.

   INPUTS
        packet - packet to send, must be initialized and have a message.
        port   - pr_MsgPort of handler process to send to.
        replyport - MsgPort for the packet to come back to.

   NOTES
        Callable from a task.

   SEE ALSO
        DoPkt(), WaitPkt(), AllocDosObject(), FreeDosObject(), AbortPkt()

dos.library/SetArgStr                                   dos.library/SetArgStr

   NAME
        SetArgStr -- Sets the arguments for the current process (V36)

   SYNOPSIS
        oldptr = SetArgStr(ptr)
        D0                 D1

        STRPTR SetArgStr(STRPTR)

   FUNCTION
        Sets the arguments for the current program.  The ptr MUST be reset
        to it's original value before process exit.

   INPUTS
        ptr - pointer to new argument string.

   RESULT
        oldptr - the previous argument string

   SEE ALSO
        GetArgStr(), RunCommand()

dos.library/SetComment                                 dos.library/SetComment

    NAME
        SetComment -- Change a files' comment string

    SYNOPSIS
        success = SetComment( name, comment )
        D0                    D1    D2

        BOOL SetComment(STRPTR, STRPTR)

    FUNCTION
        SetComment() sets a comment on a file or directory. The comment is
        a pointer to a null-terminated string of up to 80 characters in the
        current ROM filesystem (and RAM:).  Note that not all filesystems
        will support comments (for example, NFS usually will not), or the
        size of comment supported may vary.

    INPUTS
        name    - pointer to a null-terminated string
        comment - pointer to a null-terminated string

    RESULTS
        success - boolean

    SEE ALSO
        Examine(), ExNext(), SetProtection()

dos.library/SetConsoleTask                         dos.library/SetConsoleTask

   NAME
        SetConsoleTask -- Sets the default console for the process (V36)

   SYNOPSIS
        oldport = SetConsoleTask(port)
        D0                        D1

        struct MsgPort *SetConsoleTask(struct MsgPort *)

   FUNCTION
        Sets the default console task's port (pr_ConsoleTask) for the
        current process.

   INPUTS
        port - The pr_MsgPort of the default console handler for the process

   RESULT
        oldport - The previous ConsoleTask value.

   SEE ALSO
        GetConsoleTask(), Open()

dos.library/SetCurrentDirName                   dos.library/SetCurrentDirName

   NAME
        SetCurrentDirName -- Sets the directory name for the process (V36)

   SYNOPSIS
        success = SetCurrentDirName(name)
        D0                        D1

        BOOL SetCurrentDirName(STRPTR)

   FUNCTION
        Sets the name for the current dir in the cli structure.  If the name
        is too long to fit, a failure is returned, and the old value is left
        intact.  It is advised that you inform the user of this condition.
        This routine is safe to call even if there is no CLI structure.

   INPUTS
        name    - Name of directory to be set.

   RESULT
        success - Success/failure indicator

   BUGS
        This clips to a fixed (1.3 compatible) size.

   SEE ALSO
        GetCurrentDirName()

dos.library/SetFileDate                               dos.library/SetFileDate

   NAME
        SetFileDate -- Sets the modification date for a file or dir (V36)

   SYNOPSIS
        success = SetFileDate(name, date)
        D0                     D1    D2

        BOOL SetFileDate(STRPTR, struct DateStamp *)

   FUNCTION
        Sets the file date for a file or directory.  Note that for the Old
        File System and the Fast File System, the date of the root directory
        cannot be set.  Other filesystems may not support setting the date
        for all files/directories.

   INPUTS
        name - Name of object
        date - New modification date

   RESULT
        success - Success/failure indication

   SEE ALSO
        DateStamp(), Examine(), ExNext(), ExAll()

dos.library/SetFileSize                               dos.library/SetFileSize

   NAME
        SetFileSize -- Sets the size of a file (V36)

   SYNOPSIS
        newsize = SetFileSize(fh, offset, mode)
        D0                    D1    D2     D3

        LONG SetFileSize(BPTR, LONG, LONG)

   FUNCTION
        Changes the file size, truncating or extending as needed.  Not all
        handlers may support this; be careful and check the return code.  If
        the file is extended, no values should be assumed for the new bytes.
        If the new position would be before the filehandle's current position
        in the file, the filehandle will end with a position at the
        end-of-file.  If there are other filehandles open onto the file, the
        new size will not leave any filehandle pointing past the end-of-file.
        You can check for this by looking at the new size.

        Do NOT count on any specific values to be in the extended area.

   INPUTS
        fh     - File to be truncated/extended.
        offset - Offset from position determined by mode.
        mode   - One of OFFSET_BEGINNING, OFFSET_CURRENT, or OFFSET_END.

   RESULT
        newsize - position of new end-of-file or -1 for error.

   SEE ALSO
        Seek()

dos.library/SetFileSysTask                         dos.library/SetFileSysTask

   NAME
        SetFileSysTask -- Sets the default filesystem for the process (V36)

   SYNOPSIS
        oldport = SetFileSysTask(port)
        D0                        D1

        struct MsgPort *SetFileSysTask(struct MsgPort *)

   FUNCTION
        Sets the default filesystem task's port (pr_FileSystemTask) for the
        current process.

   INPUTS
        port - The pr_MsgPort of the default filesystem for the process

   RESULT
        oldport - The previous FileSysTask value

   SEE ALSO
        GetFileSysTask(), Open()

dos.library/SetIoErr                                     dos.library/SetIoErr

   NAME
        SetIoErr -- Sets the value returned by IoErr() (V36)

   SYNOPSIS
        oldcode = SetIoErr(code)
        D0                  D1

        LONG SetIoErr(LONG);

   FUNCTION
        This routine sets up the secondary result (pr_Result2) return code
        (returned by the IoErr() function).

   INPUTS
        code - Code to be returned by a call to IoErr.

   RESULT
        oldcode - The previous error code.

   SEE ALSO
        IoErr(), Fault(), PrintFault()

dos.library/SetMode                                       dos.library/SetMode

   NAME
        SetMode - Set the current behavior of a handler (V36)

   SYNOPSIS
        success = SetMode(fh, mode)
        D0                D1  D2

        BOOL SetMode(BPTR, LONG)

   FUNCTION
        SetMode() sends an ACTION_SCREEN_MODE packet to the handler in
        question, normally for changing a CON: handler to raw mode or
        vice-versa.  For CON:, use 1 to go to RAW: mode, 0 for CON: mode.

   INPUTS
        fh   - filehandle
        mode - The new mode you want

   RESULT
        success - Boolean

   SEE ALSO

dos.library/SetProgramDir                           dos.library/SetProgramDir

   NAME
        SetProgramDir -- Sets the directory returned by GetProgramDir (V36)

   SYNOPSIS
        oldlock = SetProgramDir(lock)
        D0                       D1

        BPTR SetProgramDir(BPTR)

   FUNCTION
        Sets a shared lock on the directory the program was loaded from.
        This can be used for a program to find data files, etc, that are
        stored with the program, or to find the program file itself.  NULL
        is a valid input.  This can be accessed via GetProgramDir() or
        by using paths relative to PROGDIR:.

   INPUTS
        lock - A lock on the directory the current program was loaded from

   RESULT
        oldlock - The previous ProgramDir.

   SEE ALSO
        GetProgramDir(), Open()

dos.library/SetProgramName                         dos.library/SetProgramName

   NAME
        SetProgramName -- Sets the name of the program being run (V36)

   SYNOPSIS
        success = SetProgramName(name)
        D0                        D1

        BOOL SetProgramName(STRPTR)

   FUNCTION
        Sets the name for the program in the cli structure.  If the name is
        too long to fit, a failure is returned, and the old value is left
        intact.  It is advised that you inform the user if possible of this
        condition, and/or set the program name to an empty string.
        This routine is safe to call even if there is no CLI structure.

   INPUTS
        name    - Name of program to use.

   RESULT
        success - Success/failure indicator.

   BUGS
        This clips to a fixed (1.3 compatible) size.

   SEE ALSO
        GetProgramName()

dos.library/SetPrompt                                   dos.library/SetPrompt

   NAME
        SetPrompt -- Sets the CLI/shell prompt for the current process (V36)

   SYNOPSIS
        success = SetPrompt(name)
        D0                D1

        BOOL SetPrompt(STRPTR)

   FUNCTION
        Sets the text for the prompt in the cli structure.  If the prompt is
        too long to fit, a failure is returned, and the old value is left
        intact.  It is advised that you inform the user of this condition.
        This routine is safe to call even if there is no CLI structure.

   INPUTS
        name    - Name of prompt to be set.

   RESULT
        success - Success/failure indicator.

   BUGS
        This clips to a fixed (1.3 compatible) size.

   SEE ALSO
        GetPrompt()

dos.library/SetProtection                           dos.library/SetProtection

    NAME
        SetProtection -- Set protection for a file or directory

    SYNOPSIS
        success = SetProtection( name, mask )
        D0                       D1    D2:4

        BOOL SetProtection (STRPTR, LONG)

    FUNCTION
        SetProtection() sets the protection attributes on a file or
        directory. The lower bits of the mask are as follows:

        bit 4: 1 = file has not changed         0 = file has been changed
        bit 3: 1 = reads not allowed,           0 = reads allowed.
        bit 2: 1 = writes not allowed,          0 = writes allowed.
        bit 1: 1 = execution not allowed,       0 = execution allowed.
        bit 0: 1 = deletion not allowed,        0 = deletion allowed.

        Before V36, the ROM filesystem didn't respect the Read and Write
        bits.  In V36 or later and in the FFS, the Read and Write
        bits are respected.

        The archive bit should be cleared by the filesystem whenever the file
        is changed.  Backup utilities will generally set the bit after
        backing up each file.

        The V36 Shell looks at the execute bit, and will refuse to execute
        a file if it is set.

        Other bits will be defined in the <dos/dos.h> include files.  Rather
        than referring to bits by number you should use the definitions in
        <dos/dos.h>.

    INPUTS
        name - pointer to a null-terminated string
        mask - the protection mask required

    RESULTS
        success - boolean

    SEE ALSO
        SetComment(), Examine(), ExNext(), <dos/dos.h>

dos.library/SetVar                                         dos.library/SetVar

   NAME
        SetVar -- Sets a local or environment variable (V36)

   SYNOPSIS
        success = SetVar( name, buffer, size, flags )
        D0                 D1     D2     D3    D4

        BOOL SetVar(STRPTR, STRPTR, LONG, ULONG )

   FUNCTION
        Sets a local or environment variable.  It is advised to only use
        ASCII strings inside variables, but not required.

   INPUTS
        name   - pointer to an variable name.  Note variable names follow
                 filesystem syntax and semantics.
        buffer - a user allocated area which contains a string that is the
                 value to be associated with this variable.
        size   - length of the buffer region in bytes.  -1 means buffer
                 contains a null-terminated string.
        flags  - combination of type of var to set (low 8 bits), and
                 flags to control the behavior of this routine.  Currently
                 defined flags include:

                GVF_LOCAL_ONLY - set a local (to your process) variable.
                GVF_GLOBAL_ONLY - set a global environment variable.

                The default is to set a local environment variable.

   RESULT
        success - If non-zero, the variable was sucessfully set, FALSE
                  indicates failure.

   BUGS
        LV_VAR is the only type that can be global

   SEE ALSO
        GetVar(), DeleteVar(), FindVar(), <dos/var.h>

dos.library/SetVBuf                                       dos.library/SetVBuf

   NAME
        SetVBuf -- set buffering modes and size (V36)

   SYNOPSIS
        error = SetVBuf(fh, buff, type, size)
        D0              D1   D2    D3    D4

        LONG SetVBuf(BPTR, STRPTR, LONG, LONG)

   FUNCTION
        Changes the buffering modes and buffer size for a filehandle.
        With buff == NULL, the current buffer will be deallocated and a
        new one of (approximately) size will be allocated.  If buffer is
        non-NULL, it will be used for buffering and must be at least
        max(size,208) bytes long.  If buff is NULL and size is -1,
        then only the buffering mode will be changed.

   INPUTS
        fh   - Filehandle
        buff - buffer pointer for buffered I/O
        type - buffering mode (see <dos/stdio.h>)
        size - size of buffer for buffered I/O (sizes less than 208 bytes
               will be ignored).

   RESULT
        error - 0 if successful.  NOTE: opposite of most dos functions!

   BUGS
        Not implemented yet, always returns 0.

   SEE ALSO
        FputC(), FGetC(), UnGetC(), Flush(), FRead(), FWrite(), FGets(),
        FPuts().

dos.library/SplitName                                   dos.library/SplitName

   NAME
        SplitName -- splits out a component of a pathname into a buffer (V36)

   SYNOPSIS
        newpos = SplitName(name, separator, buf, oldpos, size)
        D0                  D1      D2      D3     D4     D5

        WORD SplitName(STRPTR, UBYTE, STRPTR, WORD, LONG)

   FUNCTION
        This routine splits out the next piece of a name from a given file
        name.  Each piece is copied into the buffer, truncating at size-1
        characters.  The new position is then returned so that it may be
        passed in to the next call to splitname.  If the separator is not
        found within 'size' characters, then size-1 characters plus a null will
        be put into the buffer, and the position of the next separator will
        be returned.

        If a a separator cannot be found, -1 is returned (but the characters
        from the old position to the end of the string are copied into the
        buffer, up to a maximum of size-1 characters).  Both strings are
        null-terminated.

        This function is mainly intended to support handlers.

   INPUTS
        name      - Filename being parsed.
        separator - Separator charactor to split by.
        buf       - Buffer to hold separated name.
        oldpos    - Current position in the file.
        size      - Size of buf in bytes (including null termination);

   RESULT
        newpos    - New position for next call to splitname.  -1 for last one.

   SEE ALSO
        FilePart(), PathPart(), AddPart()

dos.library/StartNotify                               dos.library/StartNotify

   NAME
        StartNotify -- Starts notification on a file or directory (V36)

   SYNOPSIS
        success = StartNotify(notifystructure)
        D0                          D1

        BOOL StartNotify(struct NotifyRequest *)

   FUNCTION
        Posts a notification request.  Do not modify the notify structure while
        it is active.  You will be notified when the file or directory changes.
        For files, you will be notified after the file is closed.  Not all
        filesystems will support this: applications should NOT require it.  In
        particular, most network filesystems won't support it.

   INPUTS
        notifystructure - A filled-in NotifyRequest structure

   RESULT
        success - Success/failure of request

   BUGS
        The V36 floppy/HD filesystem doesn't actually send notifications.  The
        V36 ram handler (ram:) does.  This has been fixed for V37.

   SEE ALSO
        EndNotify(), <dos/notify.h>

dos.library/StrToDate                                   dos.library/StrToDate

   NAME
        StrToDate -- Converts a string to a DateStamp (V36)

   SYNOPSIS
        success = StrToDate( datetime )
        D0                      D1

        BOOL StrToDate( struct DateTime * )

   FUNCTION
        Converts a human readable ASCII string into an AmigaDOS
        DateStamp.

   INPUTS
        DateTime - a pointer to an initialized DateTime structure.

        The DateTime structure should   be initialized as follows:

        dat_Stamp  - ignored on input.

        dat_Format - a format   byte which specifies the format of the
                dat_StrDat.  This can   be any of the following (note:
                If value used   is something other than those below,
                the default of FORMAT_DOS is used):

                FORMAT_DOS:       AmigaDOS format (dd-mmm-yy).

                FORMAT_INT:       International format (yy-mmm-dd).

                FORMAT_USA:       American format (mm-dd-yy).

                FORMAT_CDN:       Canadian format (dd-mm-yy).

                FORMAT_DEF:       default format for locale.

        dat_Flags - a flags byte.  The only flag which affects this
                  function is:

                DTF_SUBST:      ignored by this function
                DTF_FUTURE:       If set, indicates that strings such
                                  as (stored in dat_StrDate) "Monday"
                                  refer to "next" monday. Otherwise,
                                  if clear, strings like "Monday"
                                  refer to "last" monday.

        dat_StrDay - ignored bythis function.

        dat_StrDate -   pointer to valid string representing the date.
                  This can be a "DTF_SUBST" style string such as
                  "Today" "Tomorrow" "Monday", or it may be a string
                  as specified by the dat_Format byte.  This will be
                  converted to the ds_Days portion of the DateStamp.
                  If this pointer is NULL, DateStamp->ds_Days will not
                  be affected.

        dat_StrTime -   Pointer to a buffer which contains the time in
                  the ASCII format hh:mm:ss.  This will be converted
                  to the ds_Minutes and ds_Ticks portions of the
                  DateStamp.  If this pointer is NULL, ds_Minutes and
                  ds_Ticks will be unchanged.

   RESULT
        success - a zero return indicates that a conversion could
                not be performed. A non-zero return indicates that the
                DateTime.dat_Stamp variable contains the converted
                values.

   SEE ALSO
        DateStamp(), DateToStr(), <dos/datetime.h>

dos.library/StrToLong                                   dos.library/StrToLong

   NAME
        StrToLong -- string to long value (decimal) (V36)

   SYNOPSIS
        characters = StrToLong(string,value)
        D0                       D1    D2

        LONG StrToLong(STRPTR, LONG *)

   FUNCTION
        Converts decimal string into LONG value.  Returns number of characters
        converted.  Skips over leading spaces & tabs (included in count).  If
        no decimal digits are found (after skipping leading spaces & tabs),
        StrToLong returns -1 for characters converted, and puts 0 into value.

   INPUTS
        string - Input string.
        value  - Pointer to long value.  Set to 0 if no digits are converted.

   RESULT
        result - Number of characters converted or -1.

dos.library/SystemTagList                           dos.library/SystemTagList

   NAME
        SystemTagList -- Have a shell execute a command line (V36)

   SYNOPSIS
        error = SystemTagList(command, tags)
        D0                      D1      D2

        LONG SystemTagList(STRPTR, struct TagItem *)

        error = System(command, tags)
        D0               D1      D2

        LONG System(STRPTR, struct TagItem *)

        error = SystemTags(command, Tag1, ...)

        LONG SystemTags(STRPTR, ULONG, ...)

   FUNCTION
        Similar to Execute(), but does not read commands from the input
        filehandle.  Spawns a Shell process to execute the command, and
        returns the returncode the command produced, or -1 if the command
        could not be run for any reason.  The input and output filehandles
        will not be closed by System, you must close them (if needed) after
        System returns, if you specified them via SYS_INPUT or SYS_OUTPUT.

        By default the new process will use your current Input() and Output()
        filehandles.  Normal Shell command-line parsing will be done
        including redirection on 'command'.  The current directory and path
        will be inherited from your process.  Your path will be used to find
        the command (if no path is specified).

        If used with the SYS_Asynch flag, it WILL close both it's input and
        output filehandles after running the command (even if these were
        your Input() and Output()!)

        Normally uses the boot (ROM) shell, but other shells can be specified
        via SYS_UserShell and SYS_CustomShell.  Normally, you should send
        things written by the user to the UserShell.  The UserShell defaults
        to the same shell as the boot shell.

        The tags are passed through to CreateNewProc() (tags that conflict
        with SystemTagList() will be filtered out).  This allows setting
        things like priority, etc for the new process.

   INPUTS
        command - Program and arguments
        tags    - see <dos/dostags.h>.  Note that both SystemTagList()-
                  specific tags and tags from CreateNewProc() may be passed.

   RESULT
        error   - 0 for success, result from command, or -1.  Note that on
                  error, the caller is responsible for any filehandles or other
                  things passed in via tags.

   SEE ALSO
        Execute(), CreateNewProc(), <dos/dostags.h>, Input(), Output()

dos.library/UnGetC                                         dos.library/UnGetC

   NAME
        UnGetC -- Makes a char available for reading again. (buffered) (V36)

   SYNOPSIS
        value = UnGetC(fh, character)
        D0             D1      D2

        LONG UnGetC(BPTR, LONG)

   FUNCTION
        Pushes the character specified back into the input buffer.  Every
        time you use a buffered read routine, you can always push back 1
        character.  You may be able to push back more, though it is not
        recommended, since there is no guarantee on how many can be
        pushed back at a given moment.

        Passing -1 for the character will cause the last character read to
        be pushed back.  If the last character read was an EOF, the next
        character read will be an EOF.

        Note: UnGetC can be used to make sure that a filehandle is set up
        as a read filehandle.  This is only of importance if you are writing
        a shell, and must manipulate the filehandle's buffer.

   INPUTS
        fh        - filehandle to use for buffered I/O
        character - character to push back or -1

   RESULT
        value     - character pushed back, or FALSE if the character cannot
                    be pushed back.

   BUGS
        In V36, UnGetC(fh,-1) after an EOF would not cause the next character
        read to be an EOF.  This was fixed for V37.

   SEE ALSO
        FGetC(), FPutC(), Flush()

dos.library/UnLoadSeg                                   dos.library/UnLoadSeg

    NAME
        UnLoadSeg -- Unload a seglist previously loaded by LoadSeg()

    SYNOPSIS
        success = UnLoadSeg( seglist )
        D0                     D1

        BOOL UnLoadSeg(BPTR)

    FUNCTION
        Unload a seglist loaded by LoadSeg().  'seglist' may be zero.
        Overlaid segments will have all needed cleanup done, including
        closing files.

    INPUTS
        seglist - BCPL pointer to a segment identifier

    RESULTS
        success - returns 0 if a NULL seglist was passed or if it failed
                  to close an overlay file.  NOTE: this function returned
                  a random value before V36!

    SEE ALSO
        LoadSeg(), InternalLoadSeg(), InternalUnLoadSeg()

dos.library/UnLock                                         dos.library/UnLock

    NAME
        UnLock -- Unlock a directory or file

    SYNOPSIS
        UnLock( lock )
                D1

        void UnLock(BPTR)

    FUNCTION
        The filing system lock (obtained from Lock(), DupLock(), or
        CreateDir()) is removed and deallocated.

    INPUTS
        lock - BCPL pointer to a lock

    NOTE
        passing zero to UnLock() is harmless

    SEE ALSO
        Lock(), DupLock(), ParentOfFH(), DupLockFromFH()

dos.library/UnLockDosList                           dos.library/UnLockDosList

   NAME
        UnLockDosList -- Unlocks the Dos List (V36)

   SYNOPSIS
        UnLockDosList(flags)
                        D1

        void UnLockDosList(ULONG)

   FUNCTION
        Unlocks the access on the Dos Device List.  You MUST pass the same
        flags you used to lock the list.

   INPUTS
        flags - MUST be the same flags passed to (Attempt)LockDosList()

   SEE ALSO
        AttemptLockDosList(), LockDosList(), Permit()

dos.library/UnLockRecord                             dos.library/UnLockRecord

   NAME
        UnLockRecord -- Unlock a record (V36)

   SYNOPSIS
        success = UnLockRecord(fh,offset,length)
        D0                     D1   D2     D3

        BOOL UnLockRecord(BPTR,ULONG,ULONG)

   FUNCTION
        This releases the specified lock on a file.  Note that you must use
        the same filehandle you used to lock the record, and offset and length
        must be the same values used to lock it.  Every LockRecord() call must
        be balanced with an UnLockRecord() call.

   INPUTS
        fh      - File handle of locked file
        offset  - Record start position
        length  - Length of record in bytes

   RESULT
        success - Success or failure.

   BUGS
        See LockRecord()

   SEE ALSO
        LockRecords(), LockRecord(), UnLockRecords()

dos.library/UnLockRecords                           dos.library/UnLockRecords

   NAME
        UnLockRecords -- Unlock a list of records (V36)

   SYNOPSIS
        success = UnLockRecords(record_array)
        D0                           D1

        BOOL UnLockRecords(struct RecordLock *)

   FUNCTION
        This releases an array of record locks obtained using LockRecords.
        You should NOT modify the record_array while you have the records
        locked.  Every LockRecords() call must be balanced with an
        UnLockRecords() call.

   INPUTS
        record_array - List of records to be unlocked

   RESULT
        success      - Success or failure.

   BUGS
        See LockRecord()

   SEE ALSO
        LockRecords(), LockRecord(), UnLockRecord()

dos.library/VFPrintf                                     dos.library/VFPrintf

   NAME
        VFPrintf -- format and print a string to a file (buffered) (V36)

   SYNOPSIS
        count = VFPrintf(fh, fmt, argv)
        D0               D1  D2    D3

        LONG VFPrintf(BPTR, STRPTR, LONG *)

        count = FPrintf(fh, fmt, ...)

        LONG FPrintf(BPTR, STRPTR, ...)

   FUNCTION
        Writes the formatted string and values to the given file.  This
        routine is assumed to handle all internal buffering so that the
        formatting string and resultant formatted values can be arbitrarily
        long.  Any secondary error code is returned in IoErr().  This routine
        is buffered.

   INPUTS
        fh    - Filehandle to write to
        fmt   - RawDoFmt() style formatting string
        argv  - Pointer to array of formatting values

   RESULT
        count - Number of bytes written or -1 (EOF) for an error

   BUGS
        The prototype for FPrintf() currently forces you to cast the first
        varargs parameter to LONG due to a deficiency in the program
        that generates fds, prototypes, and amiga.lib stubs.

   SEE ALSO
        VPrintf(), VFWritef(), RawDoFmt(), FPutC()

dos.library/VFWritef                                     dos.library/VFWritef

   NAME
        VFWritef - write a BCPL formatted string to a file (buffered) (V36)

   SYNOPSIS
        count = VFWritef(fh, fmt, argv)
        D0               D1  D2    D3

        LONG VFWritef(BPTR, STRPTR, LONG *)

        count = FWritef(fh, fmt, ...)

        LONG FWritef(BPTR, STRPTR, ...)

   FUNCTION
        Writes the formatted string and values to the default output.  This
        routine is assumed to handle all internal buffering so that the
        formatting string and resultant formatted values can be arbitrarily
        long.  The formats are in BCPL form.  This routine is buffered.

        Supported formats are:  (Note x is in base 36!)
                %S  - string (CSTR)
                %Tx - writes a left-justified string in a field at least
                      x bytes long.
                %C  - writes a single character
                %Ox - writes a number in octal, maximum x characters wide
                %Xx - writes a number in hex, maximum x characters wide
                %Ix - writes a number in decimal, maximum x characters wide
                %N  - writes a number in decimal, any length
                %Ux - writes an unsigned number, maximum x characters wide
                %$  - ignore parameter

        Note: 'x' above is actually the character value - '0'.

   INPUTS
        fmt   - BCPL style formatting string
        argv  - Pointer to array of formatting values

   RESULT
        count - Number of bytes written or -1 for error

   BUGS
        As of V37, VFWritef() does NOT return a valid return value.  In
        order to reduce possible errors, the prototypes supplied for the
        system as of V37 have it typed as VOID.

   SEE ALSO
        VFPrintf(), VFPrintf(), FPutC()

dos.library/VPrintf                                       dos.library/VPrintf

   NAME
        VPrintf -- format and print string (buffered) (V36)

   SYNOPSIS
        count = VPrintf(fmt, argv)
          D0            D1   D2

        LONG VPrintf(STRPTR, LONG *)

        count = Printf(fmt, ...)

        LONG Printf(STRPTR, ...)

   FUNCTION
        Writes the formatted string and values to Output().  This routine is
        assumed to handle all internal buffering so that the formatting string
        and resultant formatted values can be arbitrarily long.  Any secondary
        error code is returned in IoErr().  This routine is buffered.

        Note: RawDoFmt assumes 16 bit ints, so you will usually need 'l's in
        your formats (ex: %ld versus %d).

   INPUTS
        fmt   - exec.library RawDoFmt() style formatting string
        argv  - Pointer to array of formatting values

   RESULT
        count - Number of bytes written or -1 (EOF) for an error

   BUGS
        The prototype for Printf() currently forces you to cast the first
        varargs parameter to LONG due to a deficiency in the program
        that generates fds, prototypes, and amiga.lib stubs.

   SEE ALSO
        VFPrintf(), VFWritef(), RawDoFmt(), FPutC()

dos.library/WaitForChar                               dos.library/WaitForChar

    NAME
        WaitForChar -- Determine if chars arrive within a time limit

    SYNOPSIS
        status = WaitForChar( file, timeout )
        D0                    D1    D2

        BOOL WaitForChar(BPTR, LONG)

    FUNCTION
        If a character is available to be read from 'file' within a the
        time (in microseconds) indicated by 'timeout', WaitForChar()
        returns -1 (TRUE). If a character is available, you can use Read()
        to read it.  Note that WaitForChar() is only valid when the I/O
        stream is connected to a virtual terminal device. If a character is
        not available within 'timeout', a 0 (FALSE) is returned.

    BUGS
        Due to a bug in the timer.device in V1.2/V1.3, specifying a timeout
        of zero for WaitForChar() can cause the unreliable timer & floppy
        disk operation.

    INPUTS
        file - BCPL pointer to a file handle
        timeout - integer

    RESULTS
        status - boolean

    SEE ALSO
        Read(), FGetC()

dos.library/WaitPkt                                       dos.library/WaitPkt

   NAME
        WaitPkt -- Waits for a packet to arrive at your pr_MsgPort (V36)

   SYNOPSIS
        packet = WaitPkt()
        D0

        struct DosPacket *WaitPkt(void);

   FUNCTION
        Waits for a packet to arrive at your pr_MsgPort.  If anyone has
        installed a packet wait function in pr_PktWait, it will be called.
        The message will be automatically GetMsg()ed so that it is no longer
        on the port.  It assumes the message is a dos packet.  It is NOT
        guaranteed to clear the signal for the port.

   RESULT
        packet - the packet that arrived at the port (from ln_Name of message).

   SEE ALSO
        SendPkt(), DoPkt(), AbortPkt()

dos.library/Write                                           dos.library/Write

    NAME
        Write -- Write bytes of data to a file

    SYNOPSIS
        returnedLength =  Write( file, buffer, length )
        D0                       D1    D2      D3

        LONG Write (BPTR, void *, LONG)

    FUNCTION
        Write() writes bytes of data to the opened file 'file'. 'length'
        indicates the length of data to be transferred; 'buffer' is a
        pointer to the buffer. The value returned is the length of
        information actually written. So, when 'length' is greater than
        zero, the value of 'length' is the number of characters written.
        Errors are indicated by a value of -1.

        Note: this is an unbuffered routine (the request is passed directly
        to the filesystem.)  Buffered I/O is more efficient for small
        reads and writes; see FPutC().

    INPUTS
        file - BCPL pointer to a file handle
        buffer - pointer to the buffer
        length - integer

    RESULTS
        returnedLength - integer

    SEE ALSO
        Read(), Seek(), Open(), Close(), FPutC

dos.library/WriteChars                                 dos.library/WriteChars

   NAME
        WriteChars -- Writes bytes to the the default output (buffered) (V36)

   SYNOPSIS
        count = WriteChars(buf, buflen)
        D0                 D1

        LONG WriteChars(STRPTR, LONG)

   FUNCTION
        This routine writes a number of bytes to the default output.  The
        length is returned.  This routine is buffered.

   INPUTS
        buf    - buffer of characters to write
        buflen - number of characters to write

   RESULT
        count - Number of bytes written.  -1 (EOF) indicates an error

   SEE ALSO
        FPuts(), FPutC(), FWrite(), PutStr()