-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFSFIRST.LST
More file actions
144 lines (144 loc) · 5.04 KB
/
FSFIRST.LST
File metadata and controls
144 lines (144 loc) · 5.04 KB
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
143
144
FUNCTION my_fsfirst(datei$,attr&,next!)
$F%
' Der Ersatz zu FSFIRST(). Achtung: Der zus„tzliche Parameter (next!) muž
' auf TRUE gesetzt werden, wenn anschliežend my_fsnext() aufgerufen wird.
' Wird my_fsfirst() nur einmalig aufgerufen (z.B. zur Existenzprfung), so
' ist next! auf FALSE zu setzen!
'
LOCAL all_names!
LOCAL match_name!
LOCAL attrib&
LOCAL fehler%
LOCAL bufdatei$
LOCAL dateiname$
LOCAL path$
'
@chk_dirhandle
'
@pfad(datei$,path$)
'
IF domain&=1 ! Nur wenn wir uns auch in der
gl_dirhandle%=@dopendir(path$,0) ! MiNT-Domain befinden ”ffnen.
ELSE
gl_dirhandle%=einvfn% ! Normales FSFIRST/FSNEXT provozieren
ENDIF
'
IF gl_dirhandle%=einvfn% ! (-32) Kein passendes Filesystem
gl_dirhandle%=0 ! oder nicht in der MiNT-Domain
'
gl_xattr_d_attrib%=ADD(gl_xattrbuf%,&H15) ! Zum vereinfachten Zugriff auf
gl_xattr_d_time%=ADD(gl_xattrbuf%,&H16) ! die DTA (hier werden die Ergebnisse
gl_xattr_d_date%=ADD(gl_xattrbuf%,&H18) ! der Funktion eingetragen) werden
gl_xattr_d_length%=ADD(gl_xattrbuf%,&H1A) ! einige globale Variablen mit den
gl_xattr_d_fname%=ADD(gl_xattrbuf%,&H1E) ! Struktur-Adressen belegt.
'
~FSETDTA(gl_xattrbuf%) ! DTA setzen
'
RETURN FSFIRST(datei$,attr&)
'
ELSE ! In der MiNT-Domain:
fehler%=gl_dirhandle%
IF (SHR(gl_dirhandle%,24) AND &HFF)<>&HFF
gl_xattr_d_attrib%=ADD(gl_xattrbuf%,&H29) ! Variablen belegen (siehe oben)
gl_xattr_d_time%=ADD(gl_xattrbuf%,&H1C)
gl_xattr_d_date%=ADD(gl_xattrbuf%,&H1E)
gl_xattr_d_length%=ADD(gl_xattrbuf%,&H10)
gl_xattr_d_fname%=ADD(gl_fnamebuf%,&H4)
'
@filename(datei$,dateiname$) ! Datei extrahieren
IF dateiname$="*.*" OR dateiname$="*"
dateiname$="*"
all_names!=-1
ENDIF
CHAR{gl_fnamebuf%}="" ! Struktur bereinigen
'
fehler%=@dreaddir(255,gl_dirhandle%,gl_fnamebuf%) ! Lesen
'
WHILE fehler%=0
bufdatei$=CHAR{gl_xattr_d_fname%} ! Die gefundene Datei
IF all_names! ! Gesucht wurde *.*
match_name!=TRUE
ELSE
match_name!=@match(UPPER$(bufdatei$),UPPER$(dateiname$))
ENDIF
IF match_name!=TRUE ! entspricht dem Suchkriterium
datei$=path$+bufdatei$ ! Kompletter Zugriffspfad
IF @fxattr(0,datei$,gl_xattrbuf%)=0
attrib&=INT{PRED(gl_xattr_d_attrib%)}
IF attrib&=0 AND (attr& AND fa_file&)=fa_file&
attrib&=fa_file&
ENDIF
IF (attrib& AND attr&) OR attr&=0
IF NOT next! ! Dem my_fsfirst() folgt kein
~@dclosedir(gl_dirhandle%) ! my_fsnext(), also Verzeichnis
CLR gl_dirhandle% ! wieder schliežen.
ENDIF
RETURN 0
ENDIF
ENDIF
ENDIF
fehler%=@dreaddir(255,gl_dirhandle%,gl_fnamebuf%)
WEND
~@dclosedir(gl_dirhandle%)
ENDIF
ENDIF
'
CLR gl_dirhandle%
RETURN fehler%
'
ENDFUNC
FUNCTION my_fsnext(datei$,attr&)
$F%
' Der Ersatz zu FSNEXT().
'
LOCAL all_names!
LOCAL match_name!
LOCAL attrib&
LOCAL fehler%
LOCAL bufdatei$
LOCAL dateiname$
LOCAL path$
'
IF gl_dirhandle% ! Aufruf erfolgte aus MiNT-Domain
'
@pfad(datei$,path$) ! Pfad extrahieren
@filename(datei$,dateiname$) ! Dateiname extrahieren
IF dateiname$="*.*" OR dateiname$="*"
dateiname$="*"
all_names!=TRUE
ENDIF
'
CHAR{gl_fnamebuf%}="" ! Struktur bereinigen
fehler%=@dreaddir(255,gl_dirhandle%,gl_fnamebuf%) ! Lesen
WHILE fehler%=0
bufdatei$=CHAR{gl_xattr_d_fname%}
IF all_names! ! Gesucht wurde *.*
match_name!=TRUE
ELSE
match_name!=@match(UPPER$(bufdatei$),UPPER$(dateiname$))
ENDIF
IF match_name!=TRUE ! entspricht dem Suchkriterium
datei$=path$+bufdatei$ ! Kompletter Zugriffspfad
IF @fxattr(0,datei$,gl_xattrbuf%)=0
attrib&=INT{PRED(gl_xattr_d_attrib%)}
IF attrib&=0 AND (attr& AND &H27)=&H27
attrib&=&H27
ENDIF
IF (attrib& AND attr&) OR attr&=0
RETURN 0
ENDIF
ENDIF
ENDIF
fehler%=@dreaddir(255,gl_dirhandle%,gl_fnamebuf%)
WEND
~@dclosedir(gl_dirhandle%)
CLR gl_dirhandle%
RETURN fehler%
ELSE IF gl_has_dopendir!
RETURN enmfil% ! -49
'
ELSE ! Aufruf erfolgte aus TOS-Domain
RETURN FSNEXT()
ENDIF
'
ENDFUNC