DosMkDir2

This call creates a subdirectory that has extended attributes associated with it.

Syntax
DosMkDir2 (DirName, EABuf, Reserved)

Parameters

 * DirName (PSZ) - input : Address of the ASCIIZ directory path name, which may or may not contain a drive specification. If no drive is specified, the current drive is assumed.
 * DosQSysInfo is called by an application during initialization to determine the maximum path length allowed by OS/2.


 * EABuf (PEAOP) - input/output: Address of the extended attribute buffer, which contains an EAOP structure.
 * Reserved (ULONG) - input: Reserved and must be set to zero.

Return Code

 * rc (USHORT) - return:Return code descriptions are:
 * 0  NO_ERROR
 * 3  ERROR_PATH_NOT_FOUND
 * 5  ERROR_ACCESS_DENIED
 * 26 ERROR_NOT_DOS_DISK
 * 87 ERROR_INVALID_PARAMETER
 * 108 ERROR_DRIVE_LOCKED
 * 206 ERROR_FILENAME_EXCED_RANGE
 * 254 ERROR_INVALID_EA_NAME
 * 255 ERROR_EA_LIST_INCONSISTENT

Remarks
DosMkDir2 allows an application to define extended attributes for a subdirectory at the time of its creation.

If any subdirectory names in the path do not exist, the subdirectory is not created. Upon return, a subdirectory is created at the end of the specified path.

DosQSysInfo must be used by an application to determine the maximum path length supported by OS/2. The returned value should be used to dynamically allocate buffers that are to be used to store paths.

If a program running with the NEWFILES bit set tries to create a directory with blanks immediately preceding the dot on a FAT drive, the system rejects the name. For example, if c: is a FAT drive, the name "file .txt" is rejected and the name "file.txt" is accepted.

C
 typedef struct _GEA {      /* gea */ BYTE cbName;           /* name length not including NULL */ CHAR szName[1];        /* attribute name */ } GEA;

typedef struct _GEALIST {  /* geal */ ULONG cbList;          /* total bytes of structure including full list */ GEA list[1];           /* variable length GEA structures */ } GEALIST;

typedef struct _FEA {      /* fea */ BYTE fEA;              /* flags */ BYTE cbName;           /* name length not including NULL */ USHORT cbValue;        /* value length */ } FEA;

typedef struct _FEALIST {  /* feal */ ULONG cbList;          /* total bytes of structure including full list */ FEA list[1];           /* variable length FEA structures */ } FEALIST;

typedef struct _EAOP {     /* eaop */ PGEALIST fpGEAList;    /* general EA list */ PFEALIST fpFEAList;    /* full EA list */ ULONG oError; } EAOP;


 * 1) define INCL_DOSFILEMGR

USHORT rc = DosMkDir2(DirName, EABuf, Reserved);

PSZ    DirName;       /* New directory name string */ PEAOP  EABuf;         /* Extended attribute buffer */ ULONG  0;             /* Reserved (must be zero) */

USHORT rc;            /* return code */ 

MASM
 GEA   struc gea_cbName     db  ? ;name length not including NULL gea_szName     db  1 dup (?)  ;attribute name GEA   ends

GEALIST   struc geal_cbList    dd  ? ;total bytes of structure including full list geal_list      db  size GEA * 1 dup (?) ;variable length GEA structures GEALIST   ends

FEA  struc fea_fEA        db  ? ;flags fea_cbName     db  ? ;name length not including NULL fea_cbValue    dw  ? ;value length FEA  ends

FEALIST struc feal_cbList    dd  ? ;total bytes of structure including full list feal_list      db  size FEA * 1 dup (?) ;variable length FEA structures FEALIST ends

EAOP   struc eaop_fpGEAList dd  ? ;general EA list eaop_fpFEAList dd  ? ;full EA list eaop_oError    dd  ? ; EAOP   ends

EXTRN DosMkDir2:FAR INCL_DOSFILEMGR    EQU 1

PUSH@ ASCIIZ  DirName       ;New directory name string PUSH@ OTHER   EABuf         ;Extended attribute buffer PUSH  DWORD   0             ;Reserved (must be zero) CALL  DosMkDir2

Returns WORD 