Écrire à l'envers
GW-Basic, utilisé par PC-Basic
Programme avec Texte Seulement
PC-BASIC
Tapez une lettre. N'importe quelle lettre. Essayez q, par exemple. Et puis q apparaît sur l'écran vide, mais pas là où vous l'attendez. La lettre apparaît en haut à droite de l'écran. Choisissez une autre lettre : peut-être p cette fois. Il apparaît également sur le côté droit de l'écran, mais immédiatement à gauche de q.
Choisissez plus de lettres à taper. Un d, un r, un w (la seule lettre avec plus d'une syllabe), un s et un t. Et quel est le résultat ? tswrdpq. Tapez fred et le résultat est derf.
Lorsqu'il est exécuté, le programme attend patiemment qu'une touche du clavier (n'importe quelle touche ) soit affectée à la variable INKEY$. Une fois qu'une lettre ou un chiffre ou un autre caractère est tapé, l'instruction LOCATE est utilisée pour placer le curseur à l'extrême droite de l'écran.
Avec chaque caractère supplémentaire, LOCATE se déplace vers la gauche d'une unité (c'est là que le compteur X = X-1 entre en jeu) - jusqu'à ce qu'il touche le côté gauche de l'écran, auquel cas il se réinitialise vers la droite (le X = 75) et descend d'une ligne (Y=Y+1).
Soit dit en passant, il y a un bouton du clavier qui ne s'imprime pas à l'écran lorsqu'il est pressé : la touche ESCAPE, mieux connue sous le nom de CHR$ (27) pour les initiés au GW-BASIC.
BACKWRIT.BAS
5 X=75:Y=1
10 CLS
20
A$=INKEY$
30 IF A$="" THEN 20
40 IF A$=CHR$(27) THEN END
50 IF X=1
THEN X=75:Y=Y+1
60 LOCATE Y,X:PRINT A$;:X=X-1
70 GOTO 20
Bien que court et simple, le programme pourrait supporter quelques améliorations. Tout d'abord, remplacer GOTO par une boucle WHILE -WEND ne serait pas la pire idée du monde ; il n'y aurait aucune bouffée de code spaghetti.
Deuxièmement, il est difficile de garder une trace de ce qui est tapé pendant qu'il est tapé à l'envers. Imaginez pouvoir taper des lettres, des mots, des phrases au début - vers l'avant, de gauche à droite - puis appuyer sur un bouton (disons, la touche ÉCHAP) pour trouver ce même texte se transposant instantanément à l'envers. Un tableau (ou un ensemble de tableaux) peut être nécessaire pour capturer cette entrée avant initiale.
5 X=75:Y=1:A$=""
10 CLS
20 WHILE A$<> CHR$(27)
30
A$=INKEY$
40 IF A$="" THEN 30
50 IF X=1
THEN X=75:Y=Y+1
60 LOCATE Y,X:PRINT A$;:X=X-1
70 WEND