[[code_source_de_nrdos.mo5_version_3.5|Retourner à la liste des fichiers]] * NRDOS.MO5 version 3.5 * EXTCMD.ASM (Appel d'une commande externe) ************************************************************************************************************ * EXTCMD * Cherche un fichier .MO5 ou .NRD sur le disque courant pour l'exécuter. ************************************************************************************************************ EXTCMD SET * LDX #FNMBF1 ; Le nom à chercher se trouve là LDA #9 ; Longueur de la chaîne LDB #QMARK ; On vérifie s'il y a des ? dans le nom de fichier ECLOOP DECA BEQ ECFNOK CMPB ,X+ BNE ECLOOP LDB #EAMBI ; No. d'erreur "Nom de fichier ambigu" JMP ERRMSG ; Affiche le message et retourne ECFNOK LDX #CSGNDK ; On copie le nom dans la consigne LDY #FNMBF1 LDA #9 JSR MEMCPY LDY #MO5 ; On rajoute le suffixe ".MO5" BSR SEEKF ; Et on cherche le fichier BNE ECNRD LDB #CHBIN ; Fichier trouvé, on lance l'exécution par une consigne CHBIN STB CSGNTA CLR CSGND2 ; Mode de chargement : exécution automatique LDX #CNSGN JSR RESEAU ; Appel au central ECWAIT JMP ECWAIT ; On attend jusqu'à ce que le fichier est téléchargé et exécuté ECNRD LDY #NRD ; Pas un .MO5, on essaye avec un .NRD BSR SEEKF BNE ECFNE JSR FOPENR ; Il existe, on l'ouvre RTS ECFNE LDX #FILENE ; Sinon, "Fichier inexistant." JSR DSPSTR ; On affiche le message RTS ************************************************************************************************************ * SEEKF * Cherche un fichier dans le répertoire courant et pour les .MO5 et .TO7, cherche aussi sur la racine du * disque système. ************************************************************************************************************ SEEKF SET * LDX #CSGNFE ; Copie le suffixe pointé par Y dans la consigne LDA #3 JSR MEMCPY JSR EXIST ; Teste la présence du fichier BEQ SFRTS ; S'il existe, c'est super LDB #'O ; O comme dans MO5 ou TO7 CMPB CSGNFE+1 BNE SFRTS ; Seulement les fichiers .MO5 ou .TO7 LDB CSGNDK ; On va vérifier aussi sur A:\ PSHS B LDB #1 ; Disque A: STB CSGNDK LDX #ROOT ; "/" LBSR SWIDIR ; Change le répertoire vers A:\ JSR EXIST ; Teste la présence du fichier PSHS CC LBSR RSTDIR ; Restaure le répertoire courant PULS CC PULS B PSHS CC STB CSGNDK PULS CC SFRTS RTS ************************************************************************************************************ * EXIST * Vérifie l'existence d'un fichier dans le répertoire courant. ************************************************************************************************************ EXIST SET * JSR BCFPT1 ; Construit une consigne standard LDB #CATP ; Primitive de catalogue STB CSGNTA LDX #CNSGN JSR RESEAU ; Exécute la consigne LDX #1 CMPX CRXT0 ; Résultat RTS MO5 FCC /MO5/ ; Suffixe .MO5 TO7 FCC /TO7/ ; Suffixe .TO7 NRD FCC /NRD/ ; Suffixe .NRD ROOT FCS %/% ; Répertoire à chercher sur le disque système AUTOST FCB $FF ; Flag d'autostart (recherche et exécution de DEPART.NRD) ; 0 = Ignorer DEPART.NRD FILENE FCB CR, LF FCS /Fichier inexistant./ ************************************************************************************************************ * SWIDIR * Sauve le disque et répertoire courants puis continue sur CHGDIR pour changer de répertoire. ************************************************************************************************************ SWIDIR SET * PSHS X ; On sauve X LDB CSGNDK STB SVDDSK ; On sauve le numéro de disque dans SVDDSK LDX #SVDPTH STX CSGNAD LDX #64 ; Taille maximum STX CSGNSZ LDA #GETDIR ; Consigne GETDIR STA CSGNTA LDX #CNSGN JSR RESEAU ; On récupère le chemin courant dans SVDPTH PULS X ; On récupère X qui contient le pointeur vers le nouveau répertoire ************************************************************************************************************ * CHGDIR * Change de répertoire. ************************************************************************************************************ CHGDIR SET * STX CSGNAD LDB SVDDSK STB CSGNDK LDA #SETDIR ; Consigne SETDIR STA CSGNTA LDX #CNSGN JSR RESEAU ; On change de répertoire LDA #0 STA CDSUCS ; Flag de succès LDA CRERR CMPA #0 BEQ CHDRTS LDA #$FF STA CDSUCS CHDRTS RTS ************************************************************************************************************ * RSTDIR * Restaure le disque et répertoire qui avait été sauvés dans SVDDSK et SVDPTH. ************************************************************************************************************ RSTDIR SET * LDX #SVDPTH STX CSGNAD LDB SVDDSK STB CSGNDK LDX #64 ; Taille maximum STX CSGNSZ LDA #SETDIR ; Consigne SETDIR STA CSGNTA LDX #CNSGN JSR RESEAU ; Change de répertoire RTS SVDDSK RMB 1 ; Numéro de disque à conserver SVDPTH RMB 65 ; Chemin à conserver [[code_source_de_nrdos.mo5_version_3.5|Retourner à la liste des fichiers]]