Create: Computing AgesDoc Brass
Premiers pas

Le shell et l'éditeur

Toutes les commandes de l'invite, les dossiers et les chemins, le fichier startup, l'interpréteur interactif, et toutes les touches de l'éditeur de code.

Quand aucun programme ne tourne, un ordinateur affiche son invite et attend une commande : c'est le shell. De là, vous copiez des exemples, gérez fichiers et dossiers, ouvrez l'éditeur pour écrire du code, et lancez des programmes. Cette page liste tout ce que savent faire le shell et l'éditeur. Les écrans ci-dessous viennent d'un Micro-ordinateur (51 colonnes) ; sur un Calculateur à tubes, le même texte passe à la ligne à 40 colonnes.

L'invite

Terminal
Brass OS 1.0
Tier 4 - 131072 cells
Tapez help pour commencer.
>

L'invite est > à la racine du support, et affiche le dossier courant ailleurs, comme /jeux/serpent>. Un chemin très long est raccourci par la gauche avec ....

Tapez une commande et appuyez sur Entrée. Avant cela, la ligne se modifie :

ToucheCe qu'elle fait
← →, Début Finse déplacer dans la ligne
Retour arrière, Suppreffacer avant ou après le curseur
↑ ↓parcourir les 50 dernières lignes tapées (une ligne tapée deux fois de suite n'est gardée qu'une fois)
Tabcompléter le mot en cours (voir plus bas)
Ctrl+Vcoller la première ligne du presse-papiers
Ctrl+Tabandonner la ligne (l'écran affiche ^T) et repartir sur une invite neuve

Une ligne contient jusqu'à 1 024 caractères. Les commandes et les noms de fichiers distinguent majuscules et minuscules : Help n'est pas help. Les erreurs s'affichent en rouge ; la plupart sont en anglais, quelques-unes suivent votre langue.

Lancer un programme

Tapez le nom d'un fichier pour le lancer, suivi de ses arguments s'il en prend :

Terminal
> blink
> jeux/serpent/main
> impulsion left 3

Le shell cherche d'abord une commande de ce nom, puis un fichier. Un fichier qui porte le nom d'une commande (un fichier appelé help, par exemple) se lance quand même avec run help. Si rien ne correspond, le shell répond No such program: <nom> ; si le nom est un dossier, il propose 'jeux' est un dossier : cd jeux.

Pendant qu'un programme tourne, l'invite disparaît : ce que vous tapez va au programme (à read() ou sous forme d'évènements de touches). Quand le programme se termine ou s'arrête sur une erreur, l'invite revient.

Complétion par Tab

Tab complète le dernier mot de la ligne autant que possible :

  • le premier mot : une commande ou un fichier du dossier courant (exa devient examples) ;
  • après examples : un nom d'exemple (examples seq devient examples sequencer) ;
  • partout ailleurs : un chemin, dossier par dossier (cd /je devient cd /jeux/, un dossier recevant sa barre oblique).

Quand plusieurs noms commencent pareil, Tab complète leur début commun ; tapez une lettre de plus et appuyez de nouveau sur Tab.

Les commandes

CommandeCe qu'elle fait
help, help <bibliothèque>les commandes et bibliothèques de cet ordinateur, les fonctions d'une bibliothèque
examples, examples <nom> [fichier]lister les programmes tout faits, en copier un sur le support
ls [dossier]lister les fichiers et dossiers
cd [dossier]changer de dossier courant (seul : retour à la racine)
mkdir <dossier>créer un dossier
cat <fichier>afficher un fichier
edit [fichier ou dossier]ouvrir l'éditeur
run <fichier> [arguments]lancer un programme (taper son nom fait pareil)
rm [-r] <fichier ou dossier>supprimer
cp <source> <destination>, mv <source> <destination>copier, déplacer ou renommer
label [nom]afficher ou donner le nom de l'ordinateur
memmémoire utilisée
idle numéro et l'étiquette de l'ordinateur
cleareffacer l'écran
brassl'interpréteur interactif
reboot, shutdownredémarrer, éteindre

help

help liste les commandes, puis les bibliothèques que possède cet ordinateur (un Calculateur à tubes n'a ni gfx ni net), puis quelques conseils. help <bibliothèque> liste les fonctions d'une bibliothèque :

Terminal
> help rs
rs: get, get_output, set, sides
> help os
os: clock, day_time, id, label, memory, pull_event,
 queue_event, reboot, shutdown, start_timer, tier,
time
> help lampe
No library 'lampe'

La documentation complète de chaque fonction se trouve sur ce site (rs, os...) et dans l'éditeur, quand la souris s'arrête sur un nom.

examples

examples liste les programmes intégrés que cet ordinateur sait faire tourner, et dit combien un ordinateur plus récent en proposerait de plus. examples <nom> en copie un sur le support, sous son propre nom ou sous le nom que vous donnez :

Terminal
> examples blink
Copié dans 'blink'. Lisez-le : edit blink   Lancez-
le : blink
> examples blink
'blink' existe déjà : 'examples blink <autre nom>'
> examples blink lampe
Copié dans 'lampe'. Lisez-le : edit lampe   Lancez-
le : lampe

La copie est un fichier ordinaire, commenté dans la langue du joueur au clavier : lisez-le, modifiez-le, cassez-le, recopiez-le. Un programme qui demande un ordinateur plus récent est refusé avec Cet ordinateur n'a pas la bibliothèque 'net' ou Cet exemple demande un micro-ordinateur+. Les pages Programmes intégrés expliquent chacun d'eux.

ls

ls liste le dossier courant (ou le dossier donné) : d'abord les dossiers, en bleu clair avec une barre oblique, puis les fichiers. La dernière ligne donne la place libre sur tout le support (en octets, bytes) :

Terminal
> ls
jeux/  lib/  blink  startup
60620 / 65536 bytes free
> ls jeux
serpent/  pong
60620 / 65536 bytes free

Un dossier vide affiche (vide). ls nullepart répond No folder 'nullepart', et ls blink répond 'blink' is a file.

cd

cd jeux entre dans un dossier, cd .. remonte d'un niveau, cd seul revient à la racine. Les programmes lancés depuis un dossier travaillent dans ce dossier : leurs noms de fichiers partent de lui (fs.cwd() dit lequel c'est).

Terminal
> cd jeux
/jeux> cd serpent
/jeux/serpent> cd ..
/jeux> cd
>

mkdir

mkdir jeux crée un dossier ; mkdir jeux/serpent/niveaux crée d'un coup tous les dossiers manquants du chemin. Si le nom est pris : 'jeux' already exists.

cat

cat <fichier> affiche un fichier à l'écran, pratique pour jeter un œil à un petit fichier ou aux données qu'un programme a enregistrées. Un long fichier défile trop vite : ouvrez-le plutôt avec edit.

edit

edit <fichier> ouvre le fichier dans l'éditeur. Si le fichier n'existe pas encore, l'éditeur s'ouvre vide et le fichier est créé au premier enregistrement. edit <dossier> ouvre l'éditeur avec l'arborescence de ce dossier à gauche, et edit seul ouvre le dossier courant.

run

run <fichier> [arguments] lance un programme ; taper directement le nom du fichier fait pareil. Les mots qui suivent le nom sont les arguments, donnés au programme dans la table globale arg : arg[1], arg[2]..., toujours sous forme de chaînes, et arg[0] est le chemin du fichier. Les mots sont séparés par des espaces, et les guillemets ne les regroupent pas.

impulsion
-- impulsion <face> <nombre> : envoie de courtes impulsions de redstone
local face = arg[1] or "top"
local fois = tonumber(arg[2]) or 1
for i = 1, fois do
  rs.set(face, true)
  sleep(0.2)
  rs.set(face, false)
  sleep(0.2)
end
print(fois .. " impulsion(s) envoyée(s) : " .. face)
Terminal
> impulsion left 3
3 impulsion(s) envoyée(s) : left
> impulsion
1 impulsion(s) envoyée(s) : top

arg[1] or "top" donne une valeur par défaut quand l'argument manque, et tonumber transforme le texte "3" en nombre 3 (ou en nil pour tout le reste). #arg est le nombre d'arguments.

rm

rm <fichier> supprime un fichier, ou un dossier vide. Un dossier qui contient quelque chose demande rm -r, qui le supprime avec tout son contenu :

Terminal
> rm jeux
'jeux' n'est pas vide : rm -r jeux
> rm -r jeux
Attention

Il n'y a ni corbeille ni confirmation : ce que rm supprime est perdu. Copiez d'abord ce qui compte sur un autre support (cp).

cp et mv

cp <source> <destination> copie un fichier ou un dossier entier ; mv <source> <destination> le déplace ou le renomme. Quand la destination est un dossier existant, le fichier va dedans, sous le même nom :

Terminal
> mv blink startup
> cp startup secours/startup
> mv lampe jeux

La première ligne renomme, la deuxième copie dans un dossier (créé si besoin), la troisième déplace lampe dans le dossier existant jeux. Un fichier qui existe déjà à la destination est remplacé sans prévenir. Un dossier ne peut pas être déplacé dans lui-même.

label

label seul affiche le nom de l'ordinateur, label <nom> le change (32 caractères au plus ; au-delà, le nom est coupé). L'étiquette apparaît dans les Lunettes d'ingénieur, dans id et pour les autres ordinateurs via net.computers(). Pour l'effacer, tapez brass, puis os.label(nil).

Terminal
> label
No label
> label Four à fer
> id
Computer #7 "Four à fer"

mem

mem mesure la mémoire utilisée, en cellules, sur le total de l'ordinateur :

Terminal
> mem
Memory: 63 / 131072 cells

Les variables globales des programmes lancés depuis le dernier redémarrage comptent encore : un programme qui a rempli une table globale la laisse derrière lui jusqu'au reboot. Voir La mémoire.

id

id affiche le numéro de l'ordinateur (Computer #7), et son étiquette s'il en a une. Le numéro est unique dans le monde, et les programmes le lisent avec os.id().

clear

clear efface l'écran, texte et dessins, et remet l'invite en haut.

brass : l'interpréteur interactif

brass transforme l'invite en calculatrice qui parle Brass : tapez une expression et sa valeur s'affiche, tapez une instruction et elle s'exécute. C'est le moyen le plus rapide d'essayer une fonction ou de vérifier une valeur.

Terminal
> brass
Brass 1.0 - type 'exit' to leave.
brass> 1 + 2
3
brass> 2 ^ 10
1024
brass> "lingot" .. " de fer"
lingot de fer
brass> string.upper("redstone")
REDSTONE
brass> x = 64
brass> x * 9
576
brass> local y = 5
brass> y
brass> for i = 1, 3 do print(i) end
1
2
3
brass> exit
>
  • Une expression affiche sa valeur ; nil n'affiche rien, et une table s'affiche comme table: 0x....
  • Chaque ligne est un petit programme à part : un local disparaît à la fin de sa ligne (ci-dessus, y vaut nil à la ligne suivante). Les globales restent : écrivez x = 64, et non local x = 64, pour garder une valeur pour les lignes suivantes.
  • Les globales laissées par les derniers programmes sont là aussi : après un programme arrêté sur une erreur, brass permet d'examiner ses variables globales.
  • Une erreur s'affiche en rouge (brass:1: attempt to call a nil value (global 'pritn')) et vous pouvez continuer.
  • Tab complète les noms globaux et les membres des bibliothèques (term.set_c devient term.set_cursor), et ↑ rappelle les lignes précédentes.
  • exit revient au shell. Ctrl+T aussi, à l'invite brass> ; pendant qu'une ligne tourne (une boucle sans fin, par exemple), le premier Ctrl+T arrête cette ligne et le second fait sortir.

reboot et shutdown

reboot redémarre l'ordinateur comme le bouton Redémarrer : la mémoire est effacée, les sorties sont coupées, la bannière revient et startup se lance. shutdown l'éteint comme le bouton Éteindre : il reste éteint, écran noir, jusqu'à ce que quelqu'un appuie sur Allumer dans son terminal. Voir Alimentation, redémarrage et boutons du terminal.

Dossiers et chemins

Un support contient des fichiers et des dossiers, comme le disque d'un ordinateur. Les noms utilisent des lettres non accentuées, des chiffres, _, . et -, jusqu'à 32 caractères.

CheminSignifie
blinkle fichier blink du dossier courant
jeux/serpent/mainle fichier main, dans serpent, dans jeux, depuis le dossier courant
/startupdepuis la racine, où que vous soyez
..le dossier au-dessus (../lib/outils est dans un dossier voisin)
.le dossier courant

Les chemins marchent dans toutes les commandes et dans les programmes : fs.read() et les autres fonctions de fs les comprennent de la même façon. Un programme découpé en plusieurs fichiers charge les autres avec import(), dont les chemins partent du dossier du fichier qui importe. Voir Les modules.

Le fichier startup

Un fichier nommé startup à la racine du support se lance tout seul à chaque démarrage de l'ordinateur : quand il se met à tourner, après Redémarrer ou Allumer, quand son chunk se recharge. Mettez-y votre contrôleur et il n'aura plus jamais besoin de vous.

Terminal
> mv blink startup
> reboot

Quand startup se termine (ou s'arrête sur une erreur), l'invite apparaît. Ctrl+T l'arrête comme n'importe quel programme.

Astuce

Un startup cassé qui redémarre ou bloque l'ordinateur ? Appuyez sur Ctrl+T dès qu'il démarre, ou éjectez le support (accroupi + clic droit), redémarrez, et remettez-le une fois l'invite revenue : puis edit startup.

L'éditeur

edit <fichier> ouvre un éditeur de code dans l'esprit de VS Code : numéros de ligne, couleurs, guides d'indentation, une barre d'état avec la position du curseur (Ligne 12, col. 5) et la taille du fichier face à la place restante sur le support (1234 / 65000 caractères). Un fichier avec des changements non enregistrés affiche ● modifié à côté de son nom.

Écrire du code

  • Complétion : pendant que vous tapez un nom, une liste propose les mots-clés, les fonctions et les variables du fichier. Après term. elle liste les fonctions de term, après un bloc piloté (feu.) les méthodes de ce bloc, après nom: les méthodes des chaînes. Elle ne propose que ce que cet ordinateur possède : pas de net sur un Calculateur à tubes. Tab ou Entrée valide, ↑ ↓ choisissent (et Pg.Préc Pg.Suiv par 8), Échap ferme, un clic choisit. Une fonction s'écrit avec ses parenthèses, le curseur entre les deux quand elle prend des arguments ; une bibliothèque reçoit son point et la liste de ses membres s'ouvre. Ctrl+Espace ouvre la liste n'importe où.
  • Signature : dans un appel, l'éditeur affiche les arguments de la fonction au-dessus du curseur, celui que vous tapez en jaune : term.set_cursor(x, y).
  • Documentation : laissez la souris sur une fonction, une bibliothèque ou une méthode (print, term.write, math, feu.set...) et une bulle montre ce qu'elle fait, ses arguments (les facultatifs en gris) et un exemple. Une bibliothèque absente de cet ordinateur le signale. Pour une méthode de bloc piloté, la bulle montre chaque genre de bloc qui la possède, sauf si le fichier précise le type (peripheral.find("inventory")).
  • Indentation : Entrée garde l'indentation de la ligne, et ajoute un niveau (deux espaces) après then, do, else, repeat, function(...) ou une parenthèse, un crochet ou une accolade ouvrante. Quand le bloc n'a pas encore son end, l'éditeur l'écrit (ou until après repeat). end, else, elseif, until et les fermetures reviennent d'eux-mêmes au niveau de leur bloc. Retour arrière dans l'indentation enlève un niveau entier.
  • Paires : (, [, { et les guillemets se ferment tout seuls ; taper le caractère fermant passe par-dessus, et Retour arrière entre une paire vide efface les deux. Avec du texte sélectionné, taper une parenthèse ou un guillemet entoure la sélection.

Les touches

TouchesCe qu'elles font
Ctrl+Senregistrer le fichier affiché
Échaprevenir au terminal (deux fois quand quelque chose n'est pas enregistré)
Ctrl+Zannuler (jusqu'à 200 étapes)
Ctrl+Y ou Ctrl+Maj+Zrétablir
Ctrl+X Ctrl+C Ctrl+Vcouper, copier, coller ; sans sélection, couper et copier prennent la ligne entière
Ctrl+Atout sélectionner
Ctrl+: (AZERTY), Ctrl+/ (QWERTY)commenter les lignes sélectionnées avec --, ou les décommenter
Ctrl+Espaceouvrir la liste de complétion
Tab, Maj+Tabindenter, désindenter les lignes sélectionnées
Alt+↑ Alt+↓monter ou descendre les lignes sélectionnées
Maj+Alt+↑ Maj+Alt+↓dupliquer les lignes sélectionnées au-dessus ou en dessous
Ctrl+← Ctrl+→sauter d'un mot
Ctrl+Retour arrière, Ctrl+Suppreffacer un mot avant, après le curseur
Débutpremier caractère de la ligne, puis son tout début
Ctrl+Début Ctrl+Findébut, fin du fichier
Pg.Préc Pg.Suivun écran plus haut ou plus bas
Maj + un déplacementsélectionner

À la souris : un clic place le curseur, glisser ou Maj+clic sélectionne, un double clic sélectionne un mot, la molette fait défiler (Maj+molette pour défiler sur le côté).

Note

Les raccourcis suivent les lettres imprimées sur votre clavier : en AZERTY, Ctrl+Z est la touche marquée Z. Le raccourci de commentaire est Ctrl+: en AZERTY (où / demande Maj) et Ctrl+/ en QWERTY ; le / du pavé numérique marche partout. AltGr n'est jamais pris pour un raccourci : [, { et @ se tapent normalement.

Enregistrer

Ctrl+S (ou le bouton Enregistrer) écrit le fichier sur le support et affiche Enregistré. Échap (ou Retour) revient au terminal ; si un fichier a des changements non enregistrés, la barre d'état prévient : Non enregistré : Échap encore pour quitter quand même, Ctrl+S pour enregistrer. Un fichier ne peut pas dépasser la place restante sur le support : l'éditeur affiche alors Le support est plein : N caractères au maximum.

Plusieurs fichiers : l'arborescence

edit <dossier>, ou edit seul pour le dossier courant, ouvre l'éditeur avec l'arborescence du dossier à gauche. Il affiche d'abord startup ou main si le dossier en contient un.

  • Un clic sur un fichier l'ouvre. Plusieurs fichiers restent ouverts, chacun avec ses changements et son historique d'annulation ; un fichier non enregistré est marqué ● dans l'arborescence. Ctrl+S enregistre le fichier affiché : enregistrez-les un par un.
  • Un clic sur un dossier le replie ou le déplie.
  • + Fichier et + Dossier en créent un dans le dossier cliqué en dernier (une marque bleue l'indique ; cliquez sous les fichiers pour viser le dossier du haut). Tapez le nom, Entrée pour créer, Échap pour annuler. Un nom peut contenir / pour créer des sous-dossiers en chemin.

La recette projet en plusieurs fichiers met tout cela en pratique.

Les touches du terminal

Dans le terminal, ces touches marchent à tout moment, même pendant qu'un programme tourne :

Touche ou boutonCe qu'elle fait
Ctrl+T, Stopperarrête le programme en cours (aucun pcall ne peut l'empêcher), efface l'écran et ses couleurs, affiche Terminated et montre l'invite. À l'invite, abandonne la ligne ; dans brass, en sort
Ctrl+R, Redémarrerredémarre l'ordinateur
Ctrl+Vcolle le presse-papiers, jusqu'à 4 096 caractères : à l'invite et dans read(), la première ligne ; un programme qui attend des évènements reçoit un évènement paste avec tout le texte
Éteindre / Allumeréteint l'ordinateur (écran noir, sorties coupées) ou le rallume
Échapferme le terminal ; le programme continue de tourner

Toutes les autres touches vont au programme : les lettres sous forme d'évènements char, et Entrée, Retour arrière, Suppr, les flèches, Début, Fin et Tab sous forme d'évènements key. Un clic sur l'écran envoie un évènement click, et bouger la souris avec un bouton enfoncé envoie des évènements drag (pas sur le papier du Calculateur à tubes). La page Évènements et la référence des touches montrent comment les programmes s'en servent.

Voir aussi