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


NAME
    MakeDosNode -- construct dos data structures that a disk needs

SYNOPSIS
    deviceNode = MakeDosNode( parameterPkt )
    D0                        A0

    struct DeviceNode * MakeDosNode( void * );

FUNCTION
    This routine manufactures the data structures needed to enter
    a dos disk device into the system.  This consists of a DeviceNode,
    a FileSysStartupMsg, a disk environment vector, and up to two
    bcpl strings.  See the libraries/dosextens.h and
    libraries/filehandler.h include files for more information.

    MakeDosNode will allocate all the memory it needs, and then
    link the various structure together.  It will make sure all
    the structures are long-word aligned (as required by the DOS).
    It then returns the information to the user so he can
    change anything else that needs changing.  Typically he will
    then call AddDosNode() to enter the new device into the dos
    tables.

INPUTS
    parameterPkt - a longword array containing all the information
        needed to initialize the data structures.  Normally I
        would have provided a structure for this, but the variable
        length of the packet caused problems.  The two strings are
        null terminated strings, like all other exec strings.

        longword    description
        --------    -----------
        0           string with dos handler name
        1           string with exec device name
        2           unit number (for OpenDevice)
        3           flags (for OpenDevice)
        4           # of longwords in rest of enviroment
        5-n         file handler environment (see libraries/filehandler.h)

RESULTS
    deviceNode - pointer to initialize device node structure, or
        null if there was not enough memory.  You may need to change
        certain fields before passing the DeviceNode to AddDosNode().

EXAMPLES
    /* set up a 3.5" amiga format floppy drive for unit 1 */

    char execName[] = "trackdisk.device";
    char dosName[] = "df1";

    ULONG parmPkt[] = {
        (ULONG) dosName,
        (ULONG) execName,
        1,                  /* unit number */
        0,                  /* OpenDevice flags */

        /* here is the environment block */
        16,                 /* table upper bound */
        512>>2,             /* # longwords in a block */
        0,                  /* sector origin -- unused */
        2,                  /* number of surfaces */
        1,                  /* secs per logical block -- leave as 1 */
        11,                 /* blocks per track */
        2,                  /* reserved blocks -- 2 boot blocks */
        0,                  /* ?? -- unused */
        0,                  /* interleave */
        0,                  /* lower cylinder */
        79,                 /* upper cylinder */
        5,                  /* number of buffers */
        MEMF_CHIP,          /* type of memory for buffers */
        (~0 >> 1),          /* largest transfer size (largest signed #) */
        ~1,                 /* addmask */
        0,                  /* boot priority */
        0x444f5300,         /* dostype: 'DOS0' */
    };

    struct Device Node *node, *MakeDosNode();

    node = MakeDosNode( parmPkt );


SEE ALSO
    AddDosNode, libraries/dosextens.h, libraries/filehandler.h