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 #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 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 BCFPT1 ; Construit une consigne standard
LDB #CATP ; Primitive de catalogue
STB CNSGN+3
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 CNSGN+11
STB SVDDSK ; On sauve le numéro de disque dans SVDDSK
LDX #SVDPTH
STX CNSGN+7
LDX #64 ; Taille maximum
STX CNSGN+4
LDA #GETDIR ; Consigne GETDIR
STA CNSGN+3
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 CNSGN+7
LDB SVDDSK
STB CNSGN+11
LDA #SETDIR ; Consigne SETDIR
STA CNSGN+3
LDX #CNSGN
JSR RESEAU ; On change de répertoire
LDA #0
STA CDSUCS ; Flag de succès
LDA CRBUFF+1
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 CNSGN+7
LDB SVDDSK
STB CNSGN+11
LDX #64 ; Taille maximum
STX CNSGN+4
LDA #SETDIR ; Consigne SETDIR
STA CNSGN+3
LDX #CNSGN
JSR RESEAU ; Change de répertoire
RTS
SVDDSK RMB 1 ; Numéro de disque à conserver
SVDPTH RMB 65 ; Chemin à conserver
extcmd.asm.1767627252.txt.gz · Last modified: by fool-duplex
