Ce petit utilitaire permet de connaitre, au niveau du prompt en mode ligne de commande, le nom du système de fichiers courant ainsi que le répertoire courant dans ce système de fichiers.
Il dispose des caractéristiques suivantes:
Le programme Sys$CSD se présente sous la forme d'un fichier de type Util nommé SysCSDxx où xx désigne la version (actuellement la version 03).
Double-cliquez dessus. Le programme va alors charger sa partie résidente dans la zone Heap du système.
Ouvrez alors une Task Window, et tapez au prompt la suite de commandes suivantes:
*SetMacro CLI$Prompt <Sys$CSD> *
ADFS::<NoCurrentDirectory> *Dir @
ADFS:IDEDisc4.$ *
Note: ce qui est souligné est ce que vous devez taper. Les réactions du système peuvent varier quelque peu en fonction de la configuration de votre ordinateur Acorn au moment du test.
Pour revenir à une présentation normale, tapez la commande suivante:
*Set CLI$Prompt *
Ou bien:
*UnSet CLI$Prompt
Il est possible de libérer la mémoire occupée par la partie résidente en supprimant la variable Sys$CSD. Ceci ne peut toutefois se faire avec la commande Unset qui ne joue que sur les variables classiques . Il faut alors utiliser le petit utilitaire DelVCod présenté dans un autre chapitre de ce numéro.
; Bit inhibant la génération ; d'erreurs au sein des SWI appelés XBit * (1<<17) OS_Byte * &06 XOS_Byte * OS_Byte :OR: Xbit READOSVER * 129 ; Version minimum supportée: RISC OS 3.00 OS_MIN * &A3 ; Teste le numéro de version du système MOV R0, #READOSVER MOV R1, #0 MOV R2, #&FF SWI XOS_Byte CMP R1, #OS_MIN-1 ADRLS R0, meserr ORRLS R14, R14, #MBITV MOVLSS PC, R14 ... meserr DCD &1234 DCB "This utility requires RISC OS 3.00 (or later).",0
OS_SetVarVal * &24 XOS_SetVarVal * OS_SetVarVal :OR: Xbit ... ;Adresse du nom de variable ADR R0, varname ;Adresse du code ADR R1, Code LDR R2, size MOV R3, #0 ;Indique une variable "code" MOV R4, #&10 ;Enregistrement de la variable SWI XOS_SetVarVal MOV PC, R14 ;Retour au système varname DCB "Sys$CSD",0 ALIGN size DCD EndCode-Code Code ...
; Le premier mot est une instruction de saut ; sur le code "écriture", ou un retour ; simple dans le cas le programme ne gère ; pas la modification. Code MOV PC, R14
OS_ReadVarVal * &23 XOS_ReadVarVal * OS_ReadVarVal :OR: XBit ; Macro générique permettant de lire la ; valeur d'une variable système RISC OS MACRO LITVGEN $VarName ADR R0, $VarName MOV R3, #0 MOV R4, #0 SWI XOS_ReadVarVal MEND ; Macro normale pour lire la valeur d'une ; variable système RISC OS avec des ; définitions de zones buffer classiques. MACRO LITVAR $VarName, $Buffer ADR R1, $Buffer MOV R2, #?$Buffer LITVGEN $VarName MEND ... ; A partir du deuxième mot se trouve le code ; "lecture" ; Comme le code est appelé en mode SVC et ; qu'il comporte lui même un appel SWI, il ; faut sauvegarder R14 (ici R14_svc) dans la ; pile système. De plus, R3 doit être ; préservé car utilisé par ailleurs dans le ; code. STMFD SP!, {r3 , R14} ; Phase préliminaire: Initialiser la ; longueur de la chaine renvoyee a zero MOV R0, #0 STR R0, lenbuf1 ; Première phase: aller chercher le ; CurrentFilingSystem LITVAR Var1, buffer0 LDMVSFD SP!, {r3 , PC} ; A ce moment là, ; R1 (inchangé) = adresse du ; buffer; R2 = nombre de caractères lus. ; Deuxième phase: on recopie la zone ADR R3, buffer1 MOV R4, #0 0 TEQ R4, R2 BEQ %F1 LDRB R0, [R1, R4] STRB R0, [R3, R4] ADD R4, R4, #1 B %B0 1 STR R4, lenbuf1 ; M.A.J. longueur ; Troisième phase: on suffixe correctement ADR R0, VarSuffix ADD R1, R1, R2 ;Adresse destinat. MOV R4, #0 2 LDRB R3, [R0, R4] STRB R3, [R1], #1 ADD R4, R4, #1 TEQ R4, #?VarSuffix BNE %B2 ; Quatrième phase: lire le CSD courant ADR R1, buffer1 LDR R0, lenbuf1 ADD R1, R1, R0 RSB R2, R0,#?buffer1 LITVGEN Var2 MOVVS R2, #0 ; Affichage d'une chaine par ; défaut TEQ R2, #0 BNE %F4 ADR R3, mesdef 3 LDRB R0, [R3, R2] STRB R0, [R1, R2] ADD R2, R2, #1 TEQ R2, #?mesdef BNE %B3 4 LDR R0, lenbuf1 ADD R2, R0, R2 ;Ajout longueurs ADR R0, buffer1 LDMFD SP!, {r3 , PC}^ lenbuf1 DCD 0 ;Longueur du prompt Var1 DCB "FileSwitch$CurrentFilingSystem",0 Var2 DCB "FileSwitch$" buffer0 % 16 buffer1 % 48 VarSuffix DCB "$CSD",0 mesdef DCB ":<NoCurrentDirectory>" EndCode END