User Tools

Site Tools


files.asm

Retourner à la liste des fichiers

* NRDOS.MO5 version 3.5
* FILES.ASM (Gestion de fichiers)

************************************************************************************************************
* FOPENR
* Ouvre un fichier en lecture
************************************************************************************************************
FOPENR SET    *              
       LDA    #OUVFL          ; Consigne OUVFL    
       STA    CSGNTA,PCR
       LBSR   XCNSGN          ; Exécute la consigne
       BNE    ONEND         
                             
       LDA    CRXT0,PCR   
       STA    FNHNDL,PCR      ; Récupère le descripteur de fichier
       LDA    #FBFSIZ         ; et initialise les variables de gestion du buffer
       STA    BUFPOS,PCR
       LDD    #0            
       STD    FP242,PCR       ; Position dans le fichier sur 24 bits
       STA    FP240,PCR
       STA    FRERR,PCR
       LDA    #$FF          
       STA    FOFLG,PCR
ONEND  RTS                   
                             
FNHNDL FCB    0              ; Descripteur de fichier
FOFLG  FCB    0              ; Flag de fichier ouvert
BUFPOS FCB    FBFSIZ         ; Position courante dans le buffer de lecture de fichier
FP242  FCB    0              ; Position courante dans le fichier (24 bits)
FP241  FCB    0              
FP240  FCB    0              
BREAD  FCB    0              ; Nombre d'octets effectivement lus
FRERR  FCB    0              ; Résultat de la lecture (erreur ou EOF)
FBUFFR RMB    FBFSIZ,0       ; Buffer de lecture de fichier

************************************************************************************************************
* FCLOSE
* Ferme le fichier courant
************************************************************************************************************
FCLOSE SET    *              
       TST    FOFLG,PCR
       BEQ    FCEND         
       LDA    #0
       STA    CSGDST,PCR
       LDA    #SYSFIC       
       STA    CSGNTR,PCR
       LDA    FNHNDL        
       STA    CSGNDK,PCR
       LDA    #FERFI          ; Consigne FERFI        
       STA    CSGNTA,PCR
       LEAX   CNSGN,PCR
       JSR    RESEAU          ; Exécute la consigne
       CLR    FOFLG,PCR
       LDA    #$FF          
       STA    FNHNDL,PCR
FCEND  RTS                   
                             
************************************************************************************************************
* FGETCH
* Lit un caractère depuis un fichier en ignorant les LF
************************************************************************************************************
FGETCH SET    *
       TST    FOFLG,PCR
       BNE    FGREAD        

       RTS                   
                             
FGREAD BSR    FREAD           ; Lit un octet brut
       CMPB   #LF             ; Ignore les LF
       BEQ    FGREAD        

       RTS  

************************************************************************************************************
* FREAD
* Remplit le buffer de lecture de fichier et renvoie un caractère
************************************************************************************************************
FREAD  SET    *                
       PSHS   CC,A,DP,X,Y,U    

FRNXTB LDA    BUFPOS,PCR    
       BMI    FRFILE          ; Faut-il chercher la suite ?

       LEAX   FBUFFR,PCR      ; Non, on lit un caractère dans le buffer
       LDB    A,X              
       INCA                    
       STA    BUFPOS,PCR    
       BMI    FRFULL          ; On est déjà au bout ?

       CMPA   BREAD,PCR     
       BCC    FRSTOP          ; On est déjà au bout ? 

FRFULL CMPB   #EOF             
       LBNE   FREND            

FRSTOP BSR    FCLOSE           
       LDB    #EOF             
       LBRA   FREND            

FRFILE LDB    FRERR,PCR       
       BEQ    FRFTCH          ; Pas d'erreur ? 

       LDB    #EOF             
       LBRA   FREND            

FRFTCH LDA    #0              ; Central
       STA    CSGDST,PCR    
       LDA    #SYSFIC          
       STA    CSGNTR,PCR    
       LDA    FNHNDL           
       STA    CSGNDK,PCR    
       LDD    FP242,PCR     
       STD    CSGNFN,PCR    
       LDA    FP240,PCR     
       STA    CSGSZ0,PCR 
       LEAX   FBUFFR,PCR    
       STX    CSGNAD,PCR    
       LDD    #FBFSIZ          
       STD    CSGNSZ,PCR    
       CLRA                    
       STA    CSGNPG,PCR    
       LDA    #LIRFI          ; Consigne LIRFI         
       STA    CSGNTA,PCR    
       LEAX   CNSGN,PCR     
       JSR    RESEAU          ; Exécute la consigne et lit FBFSIZ (128) octets depuis le fichier
       LDB    CRERR,PCR      
       BEQ    FRUPOS           

       CMPB   #EFINF          ; Code d'erreur de Fin de fichier
       BEQ    FRUPOS           

       LBSR   FCLOSE          ; Fermeture automatique     
       LDB    #EOF             
       BRA    FREND            

FRUPOS STB    FRERR,PCR       ; Mise à jour des pointeurs
       CLR    BUFPOS,PCR    
       LDD    CRXT0,PCR      
       STB    BREAD,PCR     
       LDD    FP241,PCR     
       ADDD   CRXT0,PCR      
       STD    FP241,PCR     
       LBCC   FRNXTB           

       INC    FP242,PCR     
       LBRA   FRNXTB           

FREND  PULS   PC,U,Y,X,DP,A,CC 

Retourner à la liste des fichiers

files.asm.txt · Last modified: by fool-duplex

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki