blockEdit
Description
Éditeur de texte simple qui travail sur un seul écran à la fois et permet
de sauvegarder le texte de cet écran dans un bloc. Ultérieurement ce
bloc peut-être évalué avec la commande LOAD.
L'idée d'un éditeur de bloc viens de l'origine même du langage. Charles Moore
Travaillait sur un terminal vidéo de 16 lignes de 64 caractères, ce qui fait qu'un
écran occupait 1024 caractères. Il avait donc eu l'idée de sauvegarder le contenu
de la mémoire vidéo sur l'unité de stockage permanent sans modification.
Chaque écran sauvegardé s'appelait un bloc.
Le problème c'est que BLKED utilise un écran de 23 lignes au lieu de 16 ce qui
fait qu'un bloc serait de 1472 caractères au lieu de 1024. Mais comme le standard
ANSI Forth défini toujours les blocs comme étant 1024 caractères je devais trouver
une solution pour sauvegarder les écrans dans des blocs. Entre autre solutions il y a
1) M'écarter du standard et modifier la taille des blocs à 1472 octets.
2) Utiliser 2 blocs standards pour sauvegarder un écran, occasionne une perte d'espace.
3) Compressser le contenu de l'écran pour le faire entrer dans un bloc standard, gain d'espace.
J'ai opté pour la 3ième solution.
En principe Lorsqu'on écris du code source les lignes ne sont pas pleines.
Parfois on laisse même des lignes vides pour rendre le texte plus facile à lire.
Lors de la sauvegarde dans un bloc les lignes sont tronquées après le dernier caractère
et un caractère de fin de ligne est ajouté. Il y a 23 lignes de texte sur
un écran dans BLKED. Donc si la longueur moyenne des lignes est inférieure à
(BLOCK_SIZE-23)/23 l'écran peut être sauvegardé dans un bloc. Le mot SCR-SIZE
permet de connaître la taille occupée par un écran dans un bloc.
Il est problable que dans la majorité des cas un écran avec les lignes tronquées après
le dernier caractère répondra à ce critère. Au pire il suffira de raccourcir les commentaires.
FONCTIONNEMENT:
BLKED réserve la ligne 24 comme ligne d'état donc un bloc de texte occupe les
lignes 1..23.
Le curseur peut-être déplacé n'importe où sur l'écran et le texte modifié.
Cependant le curseur ne peut sortir des limites de l'écran, il n'y a pas de défilement.
L'éditeur fonctionne en mode écrasement, donc si le curseur est déplacé au dessus d'un
caractère il sera remplacé par le caractère tapé à cet endroit. La seule façon d'insérer
un caractère au milieu d'un ligne est d'utiliser la touche INSERT suivie du caractère.
COMMANDES |
touche | fonction |
↑ | Déplace le curseur d'une ligne vers le haut. |
↓ | Déplace le curseur d'une ligne vers le bas. |
← | Déplace le curseur d'un caractère vers la gauche. |
→ | Déplace le curseur d'un caractère vers la droite. |
↵ | Va au début de la ligne suivante. |
HOME | Va au début de la ligne. |
END | Va à la fin de la ligne. |
PAGE UP | Déplace le curseur dans le coin supérieur gauche de l'écran. |
PAGE DOWN | Déplace le curseur à la fin du texte. |
DELETE | Efface le caractère à la position du curseur. |
INSERT | Insère un espace à la position du curseur. S'il y a un caractère à la colonne 64 il est perdu. |
⇚ | Efface le caractère à gauche du curseur. |
CTRL-D | Efface la ligne du curseur et place celui-ci à la marge gauche. |
CTRL-K | Efface à partir du curseur jusqu'à la fin de la ligne. |
CTRL-L | Efface tout l'écran. |
CTRL-X | Supprime la ligne sur laquelle le curseur réside. |
CTRL-Y | Insère une ligne vide à la position du curseur. |
CTRL-B | Sauvegarde de l'écran dans le bloc. |
CTRL-V | Copie le contenu de l'écran vers un autre bloc et affiche le nouveau bloc. |
CTRL-N | Sauvegarde le bloc actuel et charge le bloc suivant pour édition. |
CTRL-P | Sauvegarde le bloc actuel et charge le bloc précédent pour édition. |
CTRL-O | Sauvegarde le bloc actuel et saisie d'un numéro de bloc pour édition. |
CTRL-E | Quitte l'éditeur, le contenu de l'écran n'est pas sauvegardé. |
SAVELINE ( n -- )
Sauvegarde de la ligne d'écran 'n' dans le tampon PAD.
Pour que RESTORELINE restitue la ligne d'écran à son état original
l'application doit éviter d'écraser le contenu des 64 premiers caractères
du PAD entre les 2 appels.
arguments:
n Numéro de ligne {1..24}
retourne:
rien
RESTORELINE ( n -- )
Restaure la ligne d'écran à partir du tampon PAD.
arguments:
n Numéro de la ligne à restaurer {1..24}.
retourne:
rien
PROMPT ( c-addr u n -- )
Affiche un message en vidéo inversé sur la ligne 'n' de l'écran.
Utilise SAVELINE pour conserver le contenu original de cette ligne dans
la mémoire tampon PAD. Les applications qui utilisent PROMPT et doivent restaurer
le contenu original de la ligne utilisée par PROMPT doivent s'assurer
de ne pas écraser les 64 premiers caractères du PAD.
Après l'exécution de PROMPT la sortie vidéo est en mode inversée et le curseur
est positionné après le prompt permettant une saisie d'information par l'application.
arguments:
c-addr Adresse du premier caractère du message à afficher.
u Nombre de caractères du message, maximum 63.
n Numéro de la ligne sur laquelle le message sera affiché, {1..24}
retourne:
rien
MSGLINE ( u1 c-addr u2 n -- )
Affiche un message en inverse vidéo à l'écran et attend une touche au clavier
avant de poursuivre l'exécution. Le message doit tenir sur une
seule ligne d'écran. Cette ligne d'écran est sauvegardée et restaurée à la
sortie de ce mot. Le curseur texte est retourné à la position qu'il avait
avant l'appel de MSGLINE.
arguments:
u1 Durée maximale d'attente en msec ou zéro pour attendre indéfiniment.
c-addr Adresse du premier caractère du message.
u1 Longueur du message, limité à 63 caractères.
n Numéro de la ligne où doit-être affiché le message.
retourne:
rien
SCR-SIZE ( -- n )
Calcule la taille que la mémoire tampon vidéo occuperait dans un bloc
s'il était sauvegardé avec SCR>BLK. Seul les lignes 1..23 sont sauvegardées.
BLKED utilise la ligne 24 comme ligne d'état.
arguments:
aucun
retourne:
n Taille qui serait occupée par l'écran dans un bloc.
BLK>SCR ( n+ -- )
Copie le contenu d'un bloc dans le tampon d'écran arrête au premier
caractère non valide.
arguments:
n+ Numéro du bloc.
retourne:
rien
SCR>BLK ( n+ -- f )
Sauvegarde de la mémoire tampon de l'écran dans un bloc sur périphérique de stockage.
Seul lignes 1..23 sont sauvegardées.
Si le contenu de l'écran n'entre pas dans un bloc, l'opération est abaondonnée et retourne faux.
Les espaces qui termines les lignes sont supprimés et chaque ligne est complétée
par un VK_CR (code ASCII 13).
* ne fonctionne qu'avec LOCAL CONSOLE. Cependant BLKEDIT utilise le frame buffer
local même lorsque la console est en mode REMOTE, donc BLKEDIT peut sauvegarder
le bloc en édition.
arguments:
n+ numéro du bloc où sera sauvegardé l'écran.
retourne:
f indicateur booléen, T si sauvegarde réussie, F si trop grand.
BLKED ( n+ -- )
Éditeur de bloc texte. Edite 1 bloc à la fois.
Le curseur peut-être déplacé à n'importe qu'elle position sur l'écran et
son contenu modifié à volonté avant de le sauvegarder le bloc sur le
périphéirque de stockage actif. Si ce bloc contient du texte source ForthEx
il peut-être ultérieurement évalué par la commande LOAD ou THRU.
arguments:
n+ Le numéro du bloc à éditer.
retourne:
rien
Index