program ldir; { Testprogram for the nwFile unit / NwTP 0.6 API. (c) 1993,1995, R.Spronk } { LDIR is an alternative for NDIR, showing the use of the ScanDirectoryEntry function. } uses nwMisc,nwBindry,nwFile; Function GetEntryAttributeString(Attr:Longint):string; Var res:string; begin if (Attr and A_DIRECTORY)=0 then res:=' RwSAXHSyTPCDR ' else res:=' -----HSy-P-DR '; if (Attr and A_HIDDEN)=0 then res[7]:='-'; if (Attr and A_SYSTEM)=0 then begin res[8]:='-';res[9]:='-'; end; if (Attr and A_RENAME_INHIBIT)=0 then res[14]:='-'; if (Attr and A_DELETE_INHIBIT)=0 then res[13]:='-'; if (Attr and A_PURGE)=0 then res[11]:='-'; if (Attr and A_DIRECTORY)=0 then begin if ((Attr and A_READ_ONLY)>0) then res[3]:='o'; if (Attr and A_EXECUTE_ONLY)=0 then res[6]:='-'; if (Attr and A_NEEDS_ARCHIVED)=0 then res[5]:='-'; if (Attr and A_SHAREABLE)=0 then res[4]:='-'; if (Attr and A_TRANSACTIONAL)=0 then res[10]:='-'; if (Attr and A_COPY_INHIBIT)=0 then res[12]:='-'; end; GetEntryAttributeString:=res; end; Var DirHandle:Byte; DirPath:String; SequenceNumber:Byte; TrusteeInfo: TtrusteeInformation; t:Byte; ObjName:string; ObjType:word; ObjId:Longint; DH,EffRights:byte; EntryName:string; SearchFlags:Longint; EntryId:Longint; Entry:Tentry; s,s1:string; p:byte; OwnerName:string; OwnerType:word; entry2:Tentry; begin DirHandle:=0; if ParamCount>0 then s:=paramStr(1) else s:='.'; IF NOT GetTrueEntryName(s,DirPath) then begin writeln('Error resolving given filename (err: 0-',nwfile.result,')'); halt(1); end; if pos(':',DirPath)=2 then begin writeln('You cannot use this program on a local drive.'); halt(1); end; { ok. Try to separate EntryName from path } p:=ord(DirPath[0]); while (p>0) and (DirPath[p]<>'\') do dec(p); s:=copy(DirPath,p+1,255); if (pos('.',s)>0) or (pos('*',s)>0) or (pos('?',s)>0) then begin { last part is definately a filename } EntryName:=s; DirPath[0]:=chr(p-1); IF NOT AllocTemporaryDirHandle(31,0,DirPath,DH,EffRights) then begin writeln('Could not locate directory (err: 1-',nwfile.result,')'); halt(1); end; end else begin IF AllocTemporaryDirHandle(31,0,DirPath,DH,EffRights) { assume it's a path} then begin { whole thing appears to be a path.. } EntryName:='*'; end else begin { whoops.. not a path, but a filename without an extension } EntryName:=s; DirPath[0]:=chr(p-1); IF NOT AllocTemporaryDirHandle(31,0,DirPath,DH,EffRights) then begin writeln('Could not locate directory (err: 2-',nwfile.result,')'); halt(1); end; end; end; writeln('EntryName Size Flags EntryID Creation Owner'); writeln('------------+---------+---------------+--------+---------------+----------'); SearchFlags:=$ef; { all NON directories, i.e. all files } EntryId:=-1; While ScanDirectoryEntry(DH,EntryName,SearchFlags,EntryID,Entry) do begin s:=entry.EntryName; p:=pos('.',s); if p=0 then begin s:=s+' '; s[0]:=#12; end else begin s1:=copy(s,1,p-1)+' '; s1[0]:=#8; s:=s1+copy(s,p,255)+' '; s[0]:=#12; end; write(s); write(entry.FileSize:10); s:=GetEntryAttributeString(entry.Attributes); write(' F',s); write(HexStr(entryId,8)); NovTime2String(entry.CreationTime,s); delete(s,1,5);dec(s[0],3); delete(s,8,2); s[3]:='-';s[7]:='-'; write(' ',s); GetBinderyObjectName(entry.OwnerId,OwnerName,OwnerType); s:=ownerName+' '; s[0]:=#10; write(' ',s); writeln; end; if nwFile.result<>$FF { no more matching entries } then writeln('Error scanning directory information (err : 3-',nwfile.result,')'); {-- As an extra gimmick: if you DEFINE ShowScan, salvagable files will also be shown.. } {$IFDEF ShowScan} { Scan salvagable files.. } EntryId:=-1; WHILE ScanSalvagableFiles(DH,EntryId,Entry) do begin s:=entry.EntryName; p:=pos('.',s); if p=0 then begin s:=s+' '; s[0]:=#12; end else begin s1:=copy(s,1,p-1)+' '; s1[0]:=#8; s:=s1+copy(s,p,255)+' '; s[0]:=#12; end; write(s); write(entry.FileSize:10); s:=GetEntryAttributeString(entry.Attributes); write(' S',s); write(HexStr(entryId,8)); NovTime2String(entry.CreationTime,s); delete(s,1,5);dec(s[0],3); delete(s,8,2); s[3]:='-';s[7]:='-'; write(' ',s); GetBinderyObjectName(entry.OwnerId,OwnerName,OwnerType); s:=ownerName+' '; s[0]:=#10; write(' ',s); writeln; end; If nwFile.result<>$FF { normal iteration end } then writeln('Error using ScanSalvagableFiles.'); {$ENDIF} {------------------ show subdir info } SearchFlags:=$3f; EntryId:=-1; While ScanDirectoryEntry(DH,EntryName,SearchFlags,EntryID,Entry) do begin s:=entry.EntryName; p:=pos('.',s); if p=0 then begin s:=s+' '; s[0]:=#11; end else begin delete(s,p,1); s:=s+' '; s[0]:=#11; end; write('\',s); write(0:10); { filesize } s:=GetEntryAttributeString(entry.Attributes); write(' D',s); write(HexStr(entryId,8)); NovTime2String(entry.CreationTime,s); delete(s,1,5);dec(s[0],3); delete(s,8,2); s[3]:='-';s[7]:='-'; write(' ',s); GetBinderyObjectName(entry.OwnerId,OwnerName,OwnerType); s:=ownerName+' '; s[0]:=#12; write(' ',s); writeln; end; if nwFile.result<>$FF { no more matching entries } then writeln('Error scanning directory information (err : 4-',nwfile.result,')'); DeallocateDirHandle(DH); end.