Q: FindFirst 
Author Message
 Q: FindFirst

Hi!

I'd like to know how to do the FindFirst with an Int21-call.
I've come this far:

FileName:='UFF.*';      (or whatever)
regs.ax:=$714E;         (the LongFileName function (source: R.Brown,ofcourse))
regs.cx:=$3F;           (AnyFile)
regs.ds:=Seg(FileName);
regs.dx:=Ofs(FileName)+1;
Intr($21,regs);

This finds the first UFF-file. Now I want to know which one of my UFF-files it
finds (UFF.TXT, UFF.PRO or UFF.GZP?). How do I do that? If you have the time
to explain how to access the rest of the information, like last modification
time and so, please do!!!

ES:DI holds the following information:

Offset  Size    Description
 00h    DWORD   file attributes
                bits 0-6 standard DOS attributes (see #0717 at INT
21/AX=4301h)
                bit 8: temporary file
 04h    QWORD   file creation time (number of 100ns intervals since 1/1/1601)
 0Ch    QWORD   last access time
 14h    QWORD   last modification time
 1Ch    DWORD   file size (high 32 bits)
 20h    DWORD   file size (low 32 bits)
 24h  8 BYTEs   reserved
 2Ch 260 BYTEs  ASCIZ full filename
130h 14 BYTEs   ASCIZ short filename (for backward compatibility)

(Above information is from Ralph Browns Interruptlist 49)

This can't be too hard for you ASM-programmers, can it?

Many thanks in advance, with best regards,

/Baudkern...

"Hey, no brain, but what the heck!?"



Wed, 18 Jun 1902 08:00:00 GMT  
 Q: FindFirst


Happy New Year!

I got this from usenet (somewhere...)
I don't know how it works, but to use it do this:

FindFirst
  FindNext
  FindNext
  [...]
FindClose

------ 8< ------

Here's my BP code for a little program that prints both the short and
long version of any longnamed file on C:.  it'll be pretty similar in Delphi,
if the INT 21 approach is what you're supposed to use in Win16.  

type                                    
  TSearchRec = record                    
    attr : longint;                      
    creation : comp;                    
    lastaccess : comp;                  
    lastmodification : comp;            
    highfilesize : longint;              
    lowfilesize : longint;              
    reserved : comp;                    
    name : array[0..259] of char;        
    shortname : array[0..13] of char;    
    handle : word;                      
  end;                                  

const                                    
  faReadOnly      =  $01;                
  faHidden        =  $02;                
  faSysFile       =  $04;                
  faVolumeID      =  $08;                
  faDirectory     =  $10;                
  faArchive       =  $20;                
  faAnyFile       =  $3F;                

function lFindFirst(filespec:string;attr:word;var S:TSearchRec):integer;  
begin                                                                    
  filespec := filespec + #0;                                            
  S.attr := attr;                                                        
  asm                                                                    
    push ds                                                              
    push ss                                                              
    pop ds                                                              
    lea dx,filespec+1                                                    
    les di,S                                                            
    mov ax,$714e                                                        
    mov cx,attr                                                          
    mov si,0                                                            
    int $21                                                              
    les di,S                                                            
    mov word ptr es:[di+TSearchRec.handle], ax                          

    xor ax,ax                                                            


    pop ds                                                              
  end;                                                                  
end;                                                                    

function lFindNext(var S:TSearchRec):integer;    
begin                                            
  asm                                            
    mov ax,$714f                                
    mov si,0                                    
    les di,S                                    
    mov bx,word ptr es:[di+TSearchRec.Handle]    
    int $21                                      

    xor ax,ax                                    


  end;                                          
end;                                            

function lFindClose(var S:TSearchRec):integer;    
begin                                            
  asm                                            
    mov ax,$71a1                                
    les di,S                                    
    mov bx,word ptr es:[di+TSearchRec.Handle]    
    int $21                                      

    xor ax,ax                                                            


  end;                                                                  
end;                                                                    

--
* TQ 1.0 * The 'Just So Quotes'.
If people think nature is their friend, then they sure don't need an enemy.
        -- Kurt Vonnegut



Wed, 18 Jun 1902 08:00:00 GMT  
 
 [ 2 post ] 

 Relevant Pages 

1. qs?.mb files and lost data

2. Database link'n'joining Qs

3. Peculiarity with FindFirst and CON.

4. Some simple problem with FindFirst - pc1.pas [01/01]

5. FindFirst will only work on local dir?

6. RTL - "FindFirst"

7. FindFirst and DosError

8. FindFirst and DosError

9. findfirst dont work good?

10. FindFirst, must find just directories

11. findfirst problem

12. FindFirst Directory problem

 

 
Powered by phpBB® Forum Software