blockEdit

index
index principal

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
touchefonction
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.
HOMEVa au début de la ligne.
ENDVa à 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.
DELETEEfface le caractère à la position du curseur.
INSERTInsè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-DEfface la ligne du curseur et place celui-ci à la marge gauche.
CTRL-KEfface à partir du curseur jusqu'à la fin de la ligne.
CTRL-LEfface tout l'écran.
CTRL-XSupprime la ligne sur laquelle le curseur réside.
CTRL-YInsère une ligne vide à la position du curseur.
CTRL-BSauvegarde de l'écran dans le bloc.
CTRL-VCopie le contenu de l'écran vers un autre bloc et affiche le nouveau bloc.
CTRL-NSauvegarde le bloc actuel et charge le bloc suivant pour édition.
CTRL-PSauvegarde le bloc actuel et charge le bloc précédent pour édition.
CTRL-OSauvegarde le bloc actuel et saisie d'un numéro de bloc pour édition.
CTRL-EQuitte l'éditeur, le contenu de l'écran n'est pas sauvegardé.

index principal

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  
index
haut
index principal

RESTORELINE ( n -- )

Restaure la ligne d'écran à partir du tampon PAD.

arguments:
n   Numéro de la ligne à restaurer {1..24}.
retourne:
rien   
index
haut
index principal

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  
index
haut
index principal

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  
index
haut
index principal

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.
index
haut
index principal

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   
index
haut
index principal

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.
index
haut
index principal

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
haut
index principal

Index


haut
index principal