Jump to content

DosMkDir2: Difference between revisions

From EDM2
Ak120 (talk | contribs)
Ak120 (talk | contribs)
mNo edit summary
 
(5 intermediate revisions by 2 users not shown)
Line 1: Line 1:
[[image:legacy.png]]
This function has been renamed to "[[OS2_API:CPI:DosCreateDir|DosCreateDir]]". [https://books.google.com.ec/books?id=u7WbsmbttwYC&pg=PT372&lpg=PT372&dq#v=onepage&q&f=false]
==Description==
This call creates a subdirectory that has extended attributes associated with it.
This call creates a subdirectory that has extended attributes associated with it.


==Syntax==
==Syntax==
<PRE>
  DosMkDir2 (DirName, EABuf, Reserved)
  DosMkDir2


    (DirName, EABuf, Reserved)
</PRE>
==Parameters==
==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.
;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.
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.
; EABuf (PEAOP) - input/output : Address of the extended attribute buffer, which contains an EAOP structure. An EAOP structure has the following format:
 
fpGEAList (PGEALIST) : Address of GEAList. GEAList is a packed array of variable length "get EA" structures, each containing an EA name and the length of the name.
 
fpFEAList (PFEALIST) : Address of FEAList. FEAList is a packed array of variable length "full EA" structures, each containing an EA name and its corresponding value, as well as the lengths of the name and the value.
 
oError (ULONG) : Offset into structure where error has occurred.
 
On input, the fpGEAList field and oError fields are ignored. The EA setting operation is performed on the information contained in FEAList. If extended attributes are not to be defined or modified, then EABuf must be set to null. Following is the FEAList format:
   
cbList (ULONG) : Length of the FEA list, including the length itself.
 
list (FEA) : List of FEA structures. An FEA structure has the following format:
 
Flags (BYTE) :  Bit indicator describing the characteristics of the EA being defined.
'''Bit                Description'''
7                Critical EA.
6-0                Reserved and must be set to zero.
If bit 7 is set to 1, this indicates a critical EA. If bit 7 is 0, this means the EA is noncritical; that is, the EA is not essential to the intended use by an application of the file with which it is associated.
 
cbName (BYTE) : Length of EA ASCIIZ name, which does not include the null character.
 
cbValue (USHORT) : Length of EA value, which cannot exceed 64KB.
 
szName (PSZ) : Address of the ASCIIZ name of EA.
 
aValue (PSZ) : Address of the free-format value of EA.
 
Note: The szName and aValue fields are not included as part of header or include files. Because of their variable lengths, these entries must be built manually.  
               
On output, fpGEAList is unchanged. fpFEAList is unchanged as is the area pointed to by fpFEAList. If an error occurred during the set, oError is the offset of the FEA where the error occurred. The API return code is the error code corresponding to the condition generating the error.
If no error occurred, oError is undefined.
If EABuf is 0x00000000, then no extended attributes are defined for the directory.
 
; Reserved (ULONG) - input : Reserved and must be set to zero.
 


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


==Remarks==
==Remarks==
Line 76: Line 29:
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.
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.  
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.


==Example Code==
==Bindings==
===C Binding===
===C===
<PRE>
<PRE>
typedef struct _GEA {      /* gea */
typedef struct _GEA {      /* gea */
   BYTE cbName;            /* name length not including NULL */
   BYTE cbName;            /* name length not including NULL */
   CHAR szName[1];        /* attribute name */
   CHAR szName[1];        /* attribute name */
} GEA;
} GEA;


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


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


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


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


Line 122: Line 65:
USHORT  rc = DosMkDir2(DirName, EABuf, Reserved);
USHORT  rc = DosMkDir2(DirName, EABuf, Reserved);


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


USHORT           rc;            /* return code */
USHORT rc;            /* return code */
</PRE>
</PRE>


===MASM Binding===
===MASM===
<PRE>
<PRE>
GEA    struc
GEA    struc
   gea_cbName      db  ?          ;name length not including NULL
   gea_cbName      db  ?          ;name length not including NULL
   gea_szName      db  1 dup (?)  ;attribute name
   gea_szName      db  1 dup (?)  ;attribute name
GEA    ends
GEA    ends


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


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


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


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


Line 178: Line 111:
Returns WORD
Returns WORD
</PRE>
</PRE>
==Related Functions==
*


[[Category:The OS/2 API Project]]
[[Category:Dos16]]

Latest revision as of 04:51, 26 January 2020

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.

Bindings

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;

#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