User Tools

Site Tools


extcmd.asm

This is an old revision of the document!


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    CNSGN+11        ; 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    CNSGN+3
       CLR    CNSGN+23        ; 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    OPNNRD          ; 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    CNSGN+20        ; 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   CNSGN+21
       BNE    SFRTS           ; Seulement les fichiers .MO5 ou .TO7
              
       LDB    CNSGN+11        ; On va vérifier aussi sur A:\
       PSHS   B
       LDB    #1              ; Disque A:
       STB    CNSGN+11
       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    CNSGN+11
       PULS   CC
SFRTS  RTS    
            
************************************************************************************************************
* EXIST
* Vérifie l'existence d'un fichier dans le répertoire courant.
************************************************************************************************************             
EXIST  SET    *
       JSR    BCNSGN          ; Construit une consigne standard
       LDB    #CATP           ; Primitive de catalogue
       STB    CNSGN+3
       LDX    #CNSGN
       JSR    RESEAU          ; Exécute la consigne
       LDX    #1
       CMPX   CRBUFF+2        ; 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
*
************************************************************************************************************
SWIDIR SET    *
       PSHS   X
       LDB    CNSGN+11
       STB    SVDDSK
       LDX    #SVDPTH
       STX    CNSGN+7
       LDX    #64
       STX    CNSGN+4
       LDA    #GETDIR
       STA    CNSGN+3
       LDX    #CNSGN
       JSR    RESEAU          
       PULS   X

************************************************************************************************************
* CHGDIR
*
************************************************************************************************************
CHGDIR SET    *
       STX    CNSGN+7
       LDB    SVDDSK
       STB    CNSGN+11
       LDA    #SETDIR
       STA    CNSGN+3
       LDX    #CNSGN
       JSR    RESEAU          
       LDA    #0
       STA    CDSUCS
       LDA    CRBUFF+1
       CMPA   #0
       BEQ    CDRTS
       LDA    #$FF
       STA    CDSUCS
CDRTS  RTS

************************************************************************************************************
* RSTDIR
*
************************************************************************************************************
RSTDIR SET    *
       LDX    #SVDPTH
       STX    CNSGN+7
       LDB    SVDDSK
       STB    CNSGN+11
       LDX    #64
       STX    CNSGN+4
       LDA    #SETDIR
       STA    CNSGN+3
       LDX    #CNSGN
       JSR    RESEAU
       RTS

SVDDSK RMB    1
SVDPTH RMB    65               

Retourner à la liste des fichiers

extcmd.asm.1765310435.txt.gz · Last modified: by fool-duplex

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki