[[code_source_de_nrdos.mo5_version_3.5|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 [[code_source_de_nrdos.mo5_version_3.5|Retourner à la liste des fichiers]]