Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*+-------------------------------------------------------------------------+
| Copyright 1993-1994 (C) Microsoft Corporation - All rights reserved. | +-------------------------------------------------------------------------+*/
#ifndef _HFILESEL_
#define _HFILESEL_
#ifdef __cplusplus
extern "C"{ #endif
// Forward references as the structures are recursively linked
struct _DIR_BUFFER; struct _DIR_LIST; struct _FILE_BUFFER; struct _FILE_LIST; struct SHARE_BUFFER;
/*+-------------------------------------------------------------------------+
| | The dir/file lists contain all the information used when working with | a file tree. The naming convention is that a buffer (I.E. | DIR_BUFFER) contains the information for one entry (one directory | or one file). A List is an array of buffers of the appropriate | type (DIR_LIST contains an array of DIR_BUFFERS). | | The whole mess starts with a root DIR_BUFFER, the DIR_BUFFER then | points to a cascading chain of DIR and FILE LISTS. | | Almost all of the structures are a doubly linked list with a pointer back | to their parent. A buffer parent pointer, points to it's parent list | structure. The List structure then has a back pointer to the parent | DIR_BUFFER. This facilitates recursing up and down the chain when | an item is checked/un-checked and it's parent and/or children are affected. | | +--------+ +----------+ | | Dir |<--->| Dir List | | | Buffer |<-+ +----------+ | +--------+ | | Dir |-->Dir List... | | | Buffer |-->File List... | | + - - - - -+ | | | | | | + - - - - -+ | | | | | | | | | | +-----------+ | +->| File List | | +-----------+ | | File | | | Buffer | | + - - - - - + | | | | + - - - - - + | | | | +-------------------------------------------------------------------------+*/ #define CONVERT_NONE 0
#define CONVERT_ALL 1
#define CONVERT_PARTIAL 2
// A dir buffer holds a directory or sub-directory entry, with pointers to the
// files and other dirs within it.
typedef struct _DIR_BUFFER { TCHAR Name[MAX_PATH]; struct _DIR_LIST *parent; BOOL Last; // Flag is last dir-buffer in list
DWORD Attributes; BYTE Convert; // None, All or Partial
BOOL Special;
struct _DIR_LIST *DirList; // Directory List structure
struct _FILE_LIST *FileList; // File List structure
} DIR_BUFFER;
// A dir list contains the sub-directories in a directory - basically a count
// and then array of sub-dirs.
typedef struct _DIR_LIST { ULONG Count; DIR_BUFFER *parent; UINT Level; // how deeply nested in file tree (nesting level)
DIR_BUFFER DirBuffer[]; } DIR_LIST;
// Structures to hold information on individual files selected/de-selected for
// conversion
typedef struct _FILE_BUFFER { TCHAR Name[MAX_PATH]; struct _FILE_LIST *parent; BOOL Convert; DWORD Attributes; ULONG Size; } FILE_BUFFER;
typedef struct _FILE_LIST { ULONG Count; DIR_BUFFER *parent; FILE_BUFFER FileBuffer[]; } FILE_LIST;
typedef struct _FILE_PATH_BUFFER { LPTSTR Server; LPTSTR Share; LPTSTR Path; TCHAR FullPath[MAX_PATH + 1]; } FILE_PATH_BUFFER;
/*+-------------------------------------------------------------------------+
| Function Prototypes | +-------------------------------------------------------------------------+*/ void TreeDelete(DIR_BUFFER *Dir); void TreePrune(DIR_BUFFER *Dir); ULONG TreeCount(DIR_BUFFER *Dir); DIR_BUFFER *TreeCopy(DIR_BUFFER *Dir);
FILE_PATH_BUFFER *FilePathInit(); void FilePathServerSet(FILE_PATH_BUFFER *fpBuf, LPTSTR Server); void FilePathShareSet(FILE_PATH_BUFFER *fpBuf, LPTSTR Share); void FilePathPathSet(FILE_PATH_BUFFER *fpBuf, LPTSTR Path);
#ifdef __cplusplus
} #endif
#endif
|