-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathnndir.h
142 lines (124 loc) · 4.62 KB
/
nndir.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#ifndef LFN_H
#define LFN_H
#if defined(__DMC__) && defined(__OS2__)
# include <sys/dirent.h>
#endif
#include "config.h"
#include "nnstring.h"
#include "nnhash.h"
#ifdef NYADOS
typedef unsigned long filesize_t;
#else
typedef unsigned long long filesize_t;
#endif
#ifdef NYADOS
union REGS;
struct SREGS;
#endif
struct NnTimeStamp {
int second;
int minute;
int hour;
int day;
int month;
int year;
NnTimeStamp() :
second(0) , minute(0) , hour(0) ,
day(0) , month(0) , year(0){}
int compare( const NnTimeStamp &) const ;
};
class NnFileStat : public NnSortable {
NnString name_ ;
unsigned long attr_ ;
filesize_t size_ ;
NnTimeStamp stamp_ ;
public:
enum{
ATTR_READONLY = 0x01 ,
ATTR_HIDDEN = 0x02 ,
ATTR_SYSTEM = 0x04 ,
ATTR_LABEL = 0x08 ,
ATTR_DIRECTORY= 0x10 ,
ATTR_ARCHIVED = 0x20
};
NnFileStat( const NnString &name , unsigned attr , filesize_t size ,
const NnTimeStamp &stamp )
: name_(name) , attr_(attr) , size_(size) , stamp_(stamp) { }
NnFileStat( const NnFileStat &p )
: name_(p.name_) , attr_(p.attr_) , size_(p.size_) , stamp_(p.stamp_){ }
~NnFileStat();
const NnString &name() const { return name_; }
unsigned attr() const { return attr_; }
filesize_t size() const { return size_; }
const NnTimeStamp &stamp() const { return stamp_; }
int isReadOnly() const { return (attr_ & ATTR_READONLY ) != 0 ; }
int isHidden() const { return (attr_ & ATTR_HIDDEN ) != 0 ; }
int isSystem() const { return (attr_ & ATTR_SYSTEM ) != 0 ; }
int isLabel() const { return (attr_ & ATTR_LABEL ) != 0 ; }
int isDir() const { return (attr_ & ATTR_DIRECTORY) != 0 ; }
int isArchived() const { return (attr_ & ATTR_ARCHIVED ) != 0 ; }
virtual int compare( const NnSortable &another ) const ;
static NnFileStat *stat( const NnString &name );
};
int fnexplode( const char *path , NnVector &list );
int fnexplode_( const char *path , NnVector &list );
class NnDir : public NnEnum {
int status , hasHandle;
unsigned handle , attr_ ;
filesize_t size_ ;
NnString name_;
NnTimeStamp stamp_;
#ifdef NYADOS
unsigned findcore( union REGS &in , union REGS &out , struct SREGS &segs );
#endif
unsigned findfirst( const NnString &path , unsigned attr );
unsigned findfirst( const char *path , unsigned attr );
unsigned findnext ( );
void findclose();
public:
NnDir( const NnString &path , int attr=0x37 )
{ status = NnDir::findfirst( path , attr ); }
NnDir( const char *path , int attr=0x37 )
{ status = NnDir::findfirst( path , attr ); }
NnDir()
{ status = NnDir::findfirst( "." , 0x37 ); }
~NnDir();
virtual NnObject *operator *();
virtual void operator++(void);
NnString *operator ->(){ return &name_; }
const char *name() const { return name_.chars() ; }
int isReadOnly() const { return (attr_ & NnFileStat::ATTR_READONLY )!=0; }
int isHidden() const { return (attr_ & NnFileStat::ATTR_HIDDEN )!=0; }
int isSystem() const { return (attr_ & NnFileStat::ATTR_SYSTEM )!=0; }
int isLabel() const { return (attr_ & NnFileStat::ATTR_LABEL )!=0; }
int isDir() const { return (attr_ & NnFileStat::ATTR_DIRECTORY)!=0; }
int isArchived() const { return (attr_ & NnFileStat::ATTR_ARCHIVED )!=0; }
int attr() const { return attr_ ; }
filesize_t size()const { return size_ ; }
const NnTimeStamp &stamp() const { return stamp_; }
NnFileStat *stat() const { return new NnFileStat(name_,attr_,size_,stamp_);}
// ŠeŽí VFAT —pƒc[ƒ‹W.
static void f2b( const char * , NnString & );
static void filter( const char * , NnString & );
static int getcwd( NnString &pwd );
static int getcwdrive();
static int chdrive( int driveletter );
static int chdir( const char *dirname );
static int open( const char *fname , const char *mode );
static int write( int fd , const void *ptr , size_t size );
static void close( int fd );
static const NnString &tempfn();
static int access( const char *path );
static int lastRoot(const char *path)
{ return NnString::findLastOf(path,"/\\:"); }
static int seekEnd( int handle );
#ifdef NYADOS
static const char *long2short( const char *src );
#else
static const char *long2short( const char *src ){ return src; }
#endif
static void extractDots( const char *&sp, NnString &dst );
static NnHash specialFolder;
static void set_default_special_folder();
};
#endif