17: IO et opérations sur disque

Même si les programmes AMOS passent la plupart de leur temps à être chargés et exécutés, certains programmes sont plus complexes que cela. Parfois, vous avez besoin de charger et sauvegarder, faire des listings de répertoires et toutes sortes d'autres commandes d'entrée/sortie (ou plus couramment I/O) basées sur le disque. Il se peut que, même si vous utilisez votre Amiga depuis un moment, vous ne sachiez pas vraiment ce que signifient tous ces discours sur les fichiers et les répertoires.

Les disques sont organisés pour fournir de l'espace pour les fichiers, images ou textes utilisés par les programmes. Ils les stockent de manière organisée afin qu'ils puissent être retrouvés par l'ordinateur lorsqu'ils sont nécessaires. Cette structure est souvent décrite comme un arbre : un répertoire principal ou racine, avec un certain nombre de sous-répertoires qui en découlent comme les branches d'un arbre. Ainsi, le répertoire principal contient une liste de tous les sous-répertoires, et chaque étape dans l'arborescence des répertoires est décrite en utilisant le symbole / . Cette description de l'emplacement des fichiers sur le disque est appelée le chemin (path).

Imaginez que vous avez un disque appelé DOCS, et sur ce disque un répertoire appelé LETTERS, et un autre appelé ARTICLES. Dans LETTERS, vous avez un fichier appelé MUM.TXT qui est une lettre à votre mère, et dans ARTICLES vous avez un fichier appelé REVIEW1.TXT. Pour décrire à l'ordinateur l'emplacement de ces fichiers, vous taperiez les chemins suivants :

docs:letters/mum.txt
docs:articles/review1.txt

Tout guide standard sur AmigaDOS (comme Mastering AmigaDOS 2 de Bruce Smith et Mark Smiddy, pour un exemple évident) vous expliquera tout ce que vous devez savoir à propos de ce genre d'opération, du point de vue AmigaDOS. Du point de vue AMOS, nous pouvons effectuer nos propres opérations disque et manipuler des fichiers sur disque pour les utiliser dans nos programmes.

Opérations disque

Dans les programmes AMOS, nous pouvons diriger l'attention de l'ordinateur vers un disque ou un lecteur particulier afin que les fichiers nécessaires au programme AMOS actuel puissent être trouvés et utilisés, comme les fichiers IFF, les fichiers ABK, etc. L'Amiga utilise un système appelé périphériques (devices), comme vous le savez probablement, et ceux-ci sont notés en utilisant le symbole :.

Vous pouvez spécifier un numéro de lecteur comme df0 ou df1 de cette manière :

df0:
df1:
fh1:

Cela indique le lecteur mentionné peu importe le nom du disque. Si vous voulez obtenir des fichiers depuis un disque spécifique, vous pouvez utiliser le symbole deux-points pour le demander par son nom de volume, comme :

Hus:
MyDisk:
AMOS_DATA:
Workbench:

Si le disque requis n'est pas dans le lecteur, une invite apparaîtra pour demander ce disque par son nom. Vous pouvez aussi spécifier un périphérique logique, pas un lecteur réel mais un répertoire assigné, un port matériel ou un dossier système. Voici quelques exemples de ce type de périphériques :

RAM:
PRT:
CON:
SYS:
LIBS:
FONTS:

En utilisant la commande DIR, vous pouvez obtenir un listing du répertoire actuellement sélectionné, ou même spécifier un chemin à inspecter comme ceci :

Dir
Dir "df0:"
Dir "AMOS_DATA:"
Dir "AMOS:IFF/"

Vous pouvez aussi ajouter l'option /w à la commande pour lister les fichiers en deux colonnes à l'écran afin d'économiser de la place.

Cette commande est principalement utilisée en mode Direct, lorsque le répertoire est affiché sur l'écran actuel, généralement l'écran par défaut marron. Mais la plupart du temps, vous voudrez diriger l'attention de l'ordinateur dans un programme AMOS vers un disque ou lecteur spécifique en utilisant la commande Dir$. Dans la plupart des cas, si votre programme doit être utilisé par quelqu'un d'autre, vous dirigerez l'attention de l'ordinateur vers le lecteur de démarrage :

Dir$="df0:"

Cela signifie que le programme regardera toujours sur ce lecteur pour charger les programmes, fichiers ou données dont il a besoin.

Exécution des programmes AMOS

Pour créer des programmes plus excellents et plus grands que de simples programmes ponctuels, ou pour incorporer des programmes que vous avez déjà écrits, vous pouvez faire l'une des deux choses suivantes. Premièrement, vous pouvez fusionner le code avec le nouveau programme. Ou plus simplement, vous pouvez charger et exécuter le programme depuis le disque en utilisant la commande RUN. C'est l'option la plus lente des deux car il faut attendre que le disque accède et s'arrête avant que le programme ne s'exécute. Si vous incorporez le programme au programme actuel, alors il pourra évidemment être exécuté sans attente de chargement. Mais pour les choses qui ne sont pas basées sur le temps, l'option RUN est utile.

Pour l'utiliser, il suffit d'écrire une ligne comme celle-ci :

Run "df0:next_level.AMOS"

et le programme spécifié, dans ce cas un programme fictif appelé next_level.AMOS, sera exécuté. Bien qu'il y ait des pénalités de temps, cette fonction signifie que même si vous avez utilisé toute la mémoire disponible pour un programme, vous pouvez charger un autre programme (un niveau dans un jeu par exemple) qui remplacera celui en cours d'exécution. Ainsi, tous les programmes que vous écrivez peuvent être aussi grands que le disque sur lequel ils sont distribués. Et si vous distribuez le programme sur plusieurs disquettes et que vous écrivez un programme d'installation pour installer tous les fichiers sur un disque dur, eh bien, le ciel est la limite.

Fichiers sur disque

Quelque chose que personnellement je n'aime pas, bien que certaines personnes issues des communautés de programmation bureautique et de BASIC archaïque ne soient pas d'accord, ce sont les fichiers séquentiels. C'est une fonctionnalité qui permet d'ouvrir des fichiers directement sur le disque, d'y ajouter des données et de les refermer. C'est une opération risquée et pas quelque chose à entreprendre à la légère si vous êtes complètement débutant, mais j'inclus ici quelques détails à leur sujet par souci d'exhaustivité.

Les détails complets sur les fichiers séquentiels se trouvent dans votre manuel, mais comme toujours je pars du principe que vous l'avez lu mais que vous n'arrivez pas à en voir l'utilité. Bien que les fichiers séquentiels soient plutôt à l'extérieur de votre intérêt principal pour AMOS, je dirais qu'ils offrent tout de même des fonctionnalités intéressantes sous forme de ports et de canaux (ce que nous appelions autrefois des flux), et qu'ils devraient être étudiés pour cela. Travailler avec des canaux et des ports est quelque chose que je pensais avoir laissé derrière moi il y a des années sur le C64, mais les revoilà aussi vivants que jamais.

L'utilisation principale de ce type de fichier est la manipulation de données, en particulier des données en cours qui doivent être ajoutées ou modifiées d'une manière ou d'une autre, comme dans un programme de base de données ou quelque chose dans le genre. C'est une méthode de stockage des données sur disque incroyablement lente cependant, car elle est séquentielle comme son nom l'indique, en série, ou l'une après l'autre, ce qui signifie que les données sont stockées dans un ordre spécifique, comme la musique sur une cassette. Pour atteindre un certain point dans les données, disons au milieu, vous devez passer au travers du reste des données pour y arriver. Il existe des manières plus intéressantes de stocker des données, mais comme tant de fonctionnalités d'AMOS, celle-ci a été ajoutée pour en faire un outil universel.

Quiconque a déjà utilisé des fichiers séquentiels sur un autre ordinateur dans un autre BASIC se sentira tout à fait à l'aise avec cet ensemble de commandes, et cela lui permettra de convertir son BASIC habituel sur AmigaBASIC ou un autre BASIC inférieur en AMOS en un rien de temps.

Un concept similaire aux fichiers séquentiels est celui des fichiers à accès direct, et cela aussi est plus qu'adéquatement traité dans le manuel AMOS, donc je n'en parlerai pas davantage. Une variante plus utile de l'ouverture de canaux pour la sortie peut être trouvée plus loin dans ce chapitre sous la section Outside AMOS.

Bon, indice I/O suivant, s'il vous plaît.

Yes We Have No LLIST

Ni de bananes non plus, mais c'est une vieille blague et je ne vais pas m'y attarder.

C'est vrai, pas de LLIST. Cette commande a été incluse dans les premières versions du manuel mais plus tard certaines commandes n'ont pas été incluses pour diverses raisons, la plupart n'ayant rien à voir avec l'utilité ou non de ces commandes. Cela aurait été pratique de l'avoir, mais c'est ainsi. Le développement logiciel est un métier pour les vrais hommes. Si quelque chose ne va pas ou ne correspond pas, on le supprime, c'est ce que je dis.

Évidemment, pour faire un LLIST ou même un LPRINT, vous pouvez tout sélectionner avec <Ctrl-A>, et imprimer le bloc (contenant tout, en l'occurrence) si c'est ce que vous souhaitez faire. Je suppose que dans le pire des cas, vous pouvez toujours sauvegarder le programme en ASCII, envoyer AMOS en arrière-plan et utiliser la commande AmigaDOS :

COPY <file> TO PRT:

ou quelque chose de similaire.

Scancode

Nous avons beaucoup parlé de sortie dans ce chapitre sur l'entrée/sortie, mais pas beaucoup d'entrée. Vous connaissez probablement CHR$() et tous les codes de type ASCII pour l'entrée clavier. (Sinon, vous feriez bien de vous y mettre très vite, car ils sont très utiles.) Pour une méthode un peu plus inhabituelle de lecture de l'entrée clavier, en particulier pour les touches difficiles à intercepter comme les touches de fonction, vous devrez utiliser la commande Scancode.

Au lieu de lire les touches pressées via leur numéro ASCII, vous devrez peut-être lire une touche qui ne produit pas de caractère lorsqu'elle est pressée. Vous devez alors extraire le code interne de la touche depuis le matériel du clavier lui-même. En combinaison avec la commande Key Shift, vous pouvez tester n'importe quelle touche du clavier Amiga, avec ou sans touche majuscule, qu'elle produise un caractère à l'écran ou non.

En dehors d'AMOS

Nous avons vu que le programme AMOS peut envoyer des données à un dispositif CON:. La même chose peut être faite vers d'autres périphériques de l'Amiga en utilisant des ports logiques.

Les ports sont un concept familier pour tous ceux d'entre nous qui ont utilisé un Commodore 64 avant un Amiga. Ouvrir des ports, y envoyer des données, puis les refermer était souvent la seule façon fiable d'imprimer des choses ! Désormais, les ports permettent à l'Amiga de communiquer aussi avec le monde extérieur.

Vous pouvez accéder à certaines parties de l'Amiga habituellement hors de portée d'AMOS en utilisant les ports. En utilisant la commande Open Port, vous pouvez envoyer des données ou des chaînes de contrôle vers le port série, le port parallèle, le périphérique d'impression, ou tout autre périphérique Amiga. Cet exemple nous montre qu'on peut faire en sorte qu'un programme AMOS pilote une imprimante configurée via les préférences :

Rem * Open Port.AMOS *
Rem
Open Port 1,"prt:"
Set Tab 5
T$=Tab$
For X=O To 10
  Print #1,T$;"Mastering AMOS is a breeze!";T$;"with Mastering AMOS"
Next X
Close 1

D'abord un port est ouvert, et il est assigné au périphérique PRT: ou à l'imprimante. Nous définissons les espaces de tabulation, puis nous faisons une boucle For Next de 1 à 10. Ensuite, nous imprimons les mots, mais au lieu de les imprimer à l'écran, ils sont envoyés vers le port 1. Les mots passent dans le canal et ressortent sur la feuille de papier que vous avez insérée dans l'imprimante. (Vous avez bien mis une feuille dans l'imprimante, n'est-ce pas ?)

Les ports fonctionnent dans les deux sens, et vous pouvez lire des données aussi bien que les envoyer. En utilisant cette méthode, vous pourriez écrire un programme pour piloter votre port série, comme un programme de terminal par exemple. Un programme de terminal est simplement une méthode simple de lecture et d'écriture sur le port série, une fois que ce dernier est connecté à un modem bien sûr. Les informations sont lues par le port et affichées à l'écran, et les entrées clavier sont envoyées par le port. Si vous souhaitez connecter quelque chose d'un peu non standard en utilisant AMOS, alors les ports sont la voie à suivre.

APS

L'utilisation des ports avec AMOS peut ne pas toujours donner des résultats prévisibles, en particulier si vous tentez d'envoyer/recevoir des fichiers via des transferts parallèles ou sériels. Vous feriez peut-être mieux d'utiliser un programme de terminal, car l'implémentation des ports pour AMOS n'est pas vraiment la meilleure façon de faire des choses comme cela. Envoyer et recevoir du texte est OK, mais les fichiers, non. Vous commencez à entrer dans le domaine du code machine, donc pour les débutants, il est préférable de laisser cela de côté.

← Retour au sommaire