CATaclysme 1.0
Une production GPA (c) 2004
revision du 02/11/2004
Introduction
1) Principe de fonctionnement du logiciel
2) Syntaxe du listing Basic
3) Limites de CATaclysme
4) Pour aller plus loin...
Structure d'une entree de catalogue detournee
Les restrictions liees a l'affichage du catalogue
Credits et remerciements
***************************
CATaclysme est un logiciel qui permet de creer des "catalogues detournes" avec
un minimum d'efforts et des connaissances minimalistes en Basic.
Qu'est-ce qu'un catalogue detourne ? C'est un catalogue particulier,
evidemment stocke sur disquette, qui, au lieu d'afficher des noms de
fichiers, execute des commandes !
Concretement, quand vous tapez la commande CAT, l'ecran s'efface, les couleurs
et le mode graphique changent, et un beau message s'affiche ! Cette technique
a tres souvent ete utilisee par les editeurs de jeux (Ere informatique, Chip,
U.s.Gold) et les demo-makers (Voyage 93, The Demo, Face Hugger Megademo).
Comment ce petit miracle est-il possible ? Nous le devons au vecteur &BB5A du
CPC. Cette routine, utilisee par le CPC pour afficher le catalogue, interprete
comme des commandes les caracteres dont la valeur ASCII est inferieure a 32.
Pour plus d'informations, lisez "Le guide de l'utilisateur", chapitre 7 page 3
(pour un CPC 6128).
Temperons nos ardeurs, il n'est malheureusement pas possible de faire tout et
n'importe quoi avec ces caracteres de commandes. Certains sont tout bonnement
inexploitables dans un catalogue (25, 23). Il faut egalement tenir compte des
nombreuses contraintes liees au fait que le CPC essaie d'afficher un catalogue
de disquette, informations que nous aborderons par la suite.
Apres cette succinte introduction, voyons comment fonctionne CATaclysme.
1) Principe de fonctionnement du logiciel
-------------------------------------------
CATaclysme se compose de deux modules distincts :
1) un interpreteur de fichier ASCII
Ce programme lit un fichier Basic sauvegarde en ASCII, analyse son
contenu, et transforme les commandes reconnues en codes ASCII
correspondants.
2) Un module de generation du catalogue
Il lit les donnees creees en memoire par l'interpreteur et cree une
structure de type catalogue en memoire. Une fois cette structure cree,
le programme l'enregistre sur les quatre secteurs qu'occupe un
catalogue standard.
Pour generer un catalogue detourne, il vous faut, avant d'utiliser CATaclysme
creer un fichier Basic particulier qui "execute" votre presentation.
Un exemple ?
100 MODE 1
110 INK 0,0
120 INK 1,24
130 PAPER 0
140 PEN 1
150 LOCATE 13,12
160 PRINT "CECI EST UN TEST"
170 LOCATE 1,24
Une fois le listing au point, il faut le sauvegarder en ASCII
(SAVE "PRESENT.TXT",A). Lancez ensuite le programme -CATA.BAS. Le premier
module vous demandera, en plus du nom du fichier source, deux informations :
* Correction de l'alignement vertical (-2 a 1) :
Permet de modifier l'alignement vertical de la presentation.
La valeur saisie concerne les commandes LOCATE et WINDOW.
* Mode LOCATE (Y/N) :
Permet de creer une presentation generique, affichee correctement quel
que soit le mode graphique. Ce mode implique de se limiter a des
affichages simples de textes, car on ne sait pas normalement dans quel
ordre le CPC va traiter les commandes.
Une exception a cette regle d'or : la premiere entree du catalogue
est toujours affichee en premier ! Il faut donc dans cette ligne
placer la commande effacant l'ecran.
Si le mode LOCATE n'est pas actif, le programme considere que le MODE
1 est le mode implicite lorsque vous tapez la commande CAT. Si le
MODE reel est different, la presentation ne sera pas affichee dans
l'ordre pre-determinee par CATaclysme, ce qui se traduira la plupart
du temps par des effets etranges et illisibles a l'ecran !
Le programme travaille tranquillement (vive le Basic !) puis vous propose
d'ecrire le catalogue detourne. Une fois le catalogue cree, tapez simplement
la commande CAT !
Sur l'archive, vous trouverez trois exemples de presentations illustrant les
possibilites de CATaclysme.
MODE0.TXT : presentation en MODE 0 (pas en mode LOCATE),
utilisant l'instruction CHR$(x) pour afficher des
bandes de couleurs.
MODE1.TXT : presentation en MODE 1 (pas en mode LOCATE) avec un
beau logo fait avec des commandes WINDOW.
MODE2.TXT : presentation en MODE 2 (mode LOCATE) qui fonctionne
correctement quel que soit le mode graphique courant
avant de saisir la commande CAT.
Une fois que votre presentation est faite, peut-etre aimeriez vous copier des
fichiers sur votre disquette. C'est tout a fait possible ! Il faut juste faire
en sorte que ces fichiers ne soient pas affiches par le catalogue, en les
masquant. Tout bon utilitaire de gestion de fichier est capable de ce genre
de prouesse :-).
2) Syntaxe du listing BASIC
---------------------------
Pour etre correctement interprete par CATaclysme, le listing Basic doit obeir
aux regles suivante :
* une seule commande par ligne
* pas d'utilisation de variables
* les valeurs numeriques doivent etre saisie en decimal
Le programme reconnait les instructions suivantes :
REM ou ' Afficher une remarque dans le listing. La ligne
est bien evidemment non interpretee.
MODE a Mode graphique
PEN a Selection de la couleur du texte
PAPER a Selection de la couleur du fond
INK a,b,c Definition d'une encre
BORDER a,b Definition de la couleur de la bordure de l'icran
WINDOW a,b,c,d Definition de la fenetre texte courante
PRINT Affichage d'un texte (Attention, la commande se
comporte comme un PRINT "";
PRINT CHR$(x) Affichage d'un ou d'une serie de caracteres. La
encore, la commande correspond a un PRINT CHR$(x);
CLS Effacement de la fenetre courante
LOCATE x,y Positionnement du curseur texte en colonne x ligne y
Certaines commandes sont plus restrictives qu'en "pur" Basic :
* On ne peut pas afficher des caracteres superieurs a 127. La commande sera
correctement interpretee, mais c'est le caractere (char-128) qui sera
affiche. Blamez la routine systeme de traitement du catalogue, qui fait
disparaitre le bit 7 de tous les octets affiches.
* En mode LOCATE, a moins de savoir exactement ce que vous faites, il est peu
conseille d'utiliser la commande WINDOW. La commande MODE doit etre la
premiere utilisee dans le listing Basic. Il n'est pas non plus evident de
changer la meme couleur plusieurs fois de suite, ni d'utiliser le mode
transparent car vous ne savez pas quand les commandes sont executees.
3) Limites liees a CATaclysme
-----------------------------
Vous ne pouvez pas utiliser le caractere " dans vos textes (il sert de
separateur en Basic). Remplacez-le par un ' et jouez de l'editeur de secteurs
si vous souhaitez absolument utiliser des guillemets...
CATaclysme n'a pas du tout ete prevu pour gerer l'affichage d'un catalogue
detourne avec la commande ùDIR. Cela n'a de reelle incidence qu'en MODE 2, ou
le catalogue est alors affiche sur cinq colonnes. Voir a ce sujet le chapitre
suivant. De toute maniere, personne n'utilise ùDIR, alors bon...
4) Pour aller plus loin...
--------------------------
Structure d'une entree catalogue detournee :
********************************************
En mode standard :
------------------
00 id 06 dd dd dd dd dd 17 dd dd 15 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
06 = autoriser l'affichage.
15 = interdire l'affichage : utile car le catalogue affichage des
blancs et la taille du fichier entre chaque nom.
17 = commande ne faisant rien, mais necessitant un parametre. Elle
permet de masquer le point que le systeme affiche habituellement
entre le nom et l'extension du fichier.
id = numero d'index : permet d'ordonner de facon sequentielle les
entrees.
dd = donnee
En mode Locate :
----------------
Entree si la commande PRINT est utilisee :
00 06 1F xx yy dd dd dd 17 dd dd 15 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
06 = autoriser l'affichage.
15 = interdire l'affichage : utile car le catalogue affichage des
blancs et la taille du fichier entre chaque nom.
17 = commande ne faisant rien, mais necessitant un parametre. Elle
permet de masquer le point que le systeme affiche habituellement
entre le nom et l'extension du fichier.
1F = code ASCII de la commande LOCATE
xx & yy : parametres de la commande LOCATE
Entree si la commande PRINT n'est pas utilisee
00 06 dd dd dd dd dd dd 17 dd dd 15 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Il est evidement possible d'optimiser cette structure en fonction des
commandes utilisees, CATaclysme ne pretend pas etre l'ultime generateur de
catalogue detournes !
Les restrictions liees a l'affichage du catalogue
*************************************************
* En fonction du mode graphique en cours au moment ou vous lancez la commande
CAT, le catalogue de la disquette sera affichee sur une colonne (MODE 0),
deux colonnes (MODE 1) ou quatre colonnes (MODE 2).
Le CPC effectue un tri alphabetique des fichiers, puis les affiche par
colonne ! Cette facon de proceder explique pourquoi le CPC n'affiche pas de
facon sequentielle les entrees du catalogue, et qu'une presentation prevue
pour fonctionner dans un mode graphique ne fonctionne pas dans un autre
MODE.
CATaclysme essaie de resoudre cette equation de deux manieres differentes :
- Il utilise un octet d'indexation pour chaque entree du catalogue, ce qui
permet de determiner quand le CPC traitera les commandes chaque entree.
Cela ne permet pas de resoudre le probleme du MODE de depart, mais evite
d'avoir a se triturer les meninges pour savoir si le CPC va executer
telle commande avant telle autre.
- Le curseur est systematiquement positionne a un endroit precis de l'ecran
au debut de chaque entree. C'est le mode LOCATE, qui s'affranchit lui de
toute notion d'indexation. Revers de la medaille, il offre fatalement
moins de possibilites que le mode indexe.
* La routine d'affichage du catalogue insere un point entre le nom et
l'extension du fichier. Elle rajoute a la fin du fichier sa taille. Ces
informations parasites doivent etre "effaces" ou inhibees afin que
l'affichage ne soit pas perturbe.
Il existe plusieurs methodes pour supprimer le point. La plus simple
consiste a desactiver/reactiver l'affichage, mais cela "prend" deux
octets. On peut se servir de la commande CHR$(8), mais il faut alors etre
sur qu'un caractere sera affiche apres le CHR$(8).
La methode la plus elegante, trouvee par Sylvestre, consiste a utiliser
la commande CHR$(23). Pour l'affichage du catalogue, elle n'a aucun effet
mais necessite un parametre ! Place juste a la fin du nom du fichier,
elle empeche dont le point de s'afficher !
Pour eviter l'affichage de la taille du fichier, le plus simple est de
se servir des commandes pour desactiver l'affichage ( CHR$(21) ) puis le
reactiver lorsque le besoin s'en fait sentir ( CHR$(6) ).
En pratique, il est fortement conseille d'activer l'affichage au debut
de chaque entree, car toutes les commandes manipulant la position du
curseur texte en ont besoin (LOCATE, etc...).
* Le systeme ne permet pas d'afficher des caracteres ASCII superieurs a 127.
Aucun moyen de contourner cette limitation. Maigre consolation, on peut
afficher les caracteres 0 a 31. Ils ne sont pas grandioses, mais bon...
* Les commandes ne peuvent pas etre a cheval sur deux entrees catalogue.
Si votre commande "deborde" d'une ligne, elle ira chercher les parametres
dont elle a besoin dans les caracteres affiches par le CPC a la suite du
nom de fichier ! Ceci peut s'averer un moyen tordu d'optimisation
(n'est ce pas, Sylvestre !).
CATaclysme ne gere pas ce genre de bidouille, et remplit avec des 00 les
zones trop petites pour contenir des commandes.
* Les commandes SYMBOL (CHR$(&19)), CHR$(&5), CHR$(17) ne sont pas
utilisables.
- CHR$(&5) et CHR$(&17) car le mode graphique ne peut pas etre active
- SYMBOL pour de multiples raisons : table des caracteres initialisee par
defaut pas le CPC en SYMBOL AFTER 240, parametres de la commande ne tenant
pas sur une entree catalogue, impossibilite d'utiliser des valeurs
superieures a 127, etc...
Credits et remerciements
------------------------
CATaclysme a ete programme par Tom et Jerry / GPA. Ce logiciel a ete developpe
en un temps assez court (environ un mois), ce qui explique son interface
deplorable et ses capacites limitees :-).
Un grand merci a Super Sylvestre, qui m'a encourage fortemment (harcele ?) a
creer ce programme. Cette idee m'avait deja ete suggeree par Iron lors de
l'Amstrad Expo 2004, mais a l'epoque, j'avais juge le sujet sans reel interet
apres avoir teste un generateur de catalogues en assembleur assez minable.
C'est grace a Super Sylvestre que je me suis apercu que finalement, cet
aspect etrange du CPC s'avere digne de consideration.
Salutation a tous les survivants du CPC, en particulier a mes collegues
d'infortunes Tronic et Tenebros, qui eux aussi, dans leurs antres, nous
concoctent surement des programmes d'enfer :-)).
NOTICE TEXTE n° 2 (11.66 Ko)
CATaclysme 1.0
A GPA production (c) 2004
Last update : 11/02/2004
Introduction
1) How to use the software
2) Basic's syntax of the listing
3) Cataclysme's limits
4) A deeper approach...
Structure of a directory entry
Restrictions due to the catalog print routine
Credits and acknowledgments
***************************
Sorry to all Shakespeare' lovers, once again this is "french computing"
english.
CATaclysme is a little tool that allow you to create easily "catalog intros"
with a minimum knowledges of Basic (yes !).
What is a "catalog intro" ? It is a kind of catalog that executes commands
instead of printing on screen filenames !
Basically, when you type the CAT command, the screen clears, colours and
graphic mode change, then a nice message appears ! This strange technic has
been usually used by software houses (Ere informatique, Chip, U.s.Gold) and
of course demo-makers (Voyage 93, The Demo, Face Hugger Megademo).
How this little miracle is possible ? You can thanks the &BB5A system vector.
This routine, used by the CPC to print the directory, executes commands when
the ASCII code value to print is lower than 32. For further informations, you
should try to read the CPC user book, chapter 7 page 3 (for a french CPC 6128
book !).
Do no be too optimistic, it is not possible to do whatever you want with these
nice command characters. Some are useless (&1B, &17). We must consider too the
numerous limits due to the fact the CPC try to display a catalog, not simply
texts.
After this short introduction, let's see what CATaclysme can do.
1) How to use the software
--------------------------
Cataclysme is divided in two parts :
1) an ASCII file interpreter
The program reads a Basic file saved in ASCII, parses it
and make a conversion of the known commands in ASCII ones.
2) a catalog generator module
It reads the data in memory generated by the first program
and creates a directory structure in memory. After that, it
saves it onto the first four sectors of a diskette.
To create a "Catalog Intro", before to launch CATaclysme, you must
create a Basic file that "executes" your presentation.
Let's see an example !
100 MODE 1
110 INK 0,0
120 INK 1,24
130 PAPER 0
140 PEN 1
150 LOCATE 13,12
160 PRINT "THIS IS A TEST !"
170 LOCATE 1,24
When your listing is ready, save it in ASCII format (SAVE "PRESENT.TXT",A)
then launch -CATA.BAS. The first part will ask you the filename to load plus
two important informations :
* Vertical position update (-2 to 1) :
Add or remove value from the vertical axys position in the LOCATE
and WINDOW commands. Usefull when or presentation is not well
lined up.
* LOCATE mode (Y/N)
Allows you to create a generic presentation, correctly printed
whatever the starting graphic mode is. In this mode, you cannot
know the order where the catalog will be displayed. So, it is
sadly logical to limitate your creations to simple texts.
One exception, the first entry of the directory is always the
first printed. So, you must put the MODE command in the
beginning of your presentation.
If the LOCATE mode is inactive, CATaclysm considers that the
'beginning' mode is MODE 1. So, if the "real" mode is not the
good one, the presentation will not be displayed in the right
order, and does not do what you want !
After these boring questions, the program takes its time to do his job. Then,
it awaits you for writing the catalog intro. To view the final result, just
type the CAT command and enjoy !
On the archive, there are three examples in mode 0, 1 and 2. The last one
is a "generic" one but only displays texts. It is possible to do better
things if you know exactly how works a intro catalog.
MODE0.TXT : presentation in MODE 0 (no LOCATE mode). It uses
CHR$(x) instruction to display nice color bars.
MODE1.TXT : presentation in MODE 1 (no LOCATE mode) with big
letters done with WINDOW commands.
MODE2.TXT : presentation in MODE 2 (LOCATE mode). It runs ok
even if the active MODE before you type the CAT
command is not MODE 2.
When you have finished your intro catalog, I suppose you would be interested
in copying on the diskette some files. Fortunately, it is possible. The only
thing you must do is to protect the files from been displayed by the
directory command. This is really easy, just activate the flag "System" of
the files (every good filemanager can do that).
2) Basic's syntax of the listing
--------------------------------
To be properly understood by CATaclysm, the Basic listing must obey some
rules :
* only one command per line
* no variable !
* all values must be in decimal (no hexadecimal)
CATaclysme recognizes the following instructions :
REM or ' Displays REMak in the listing, of course, not
converted into commands !
MODE a Graphical MODE
PEN a Selects pen ink
PAPER a Selects paper ink
INK a,b,c Defines colors of an ink
BORDER a,b Defines BORDER colors
WINDOW a,b,c,d Defines a WINDOW
PRINT Displays text (Warning, it acts as PRINT "";)
PRINT CHR$(x) Displays character ( = PRINT CHR$(x); )
CLS Clears the screen
LOCATE x,y Moves text cursor to position X, Y
Some commands are not exactly the same as in "real" Basic :
* It is impossible to display characters whose value is higher than 127.
CATaclysm won't blame you, but it will be the character char-128 that
will be displayed ! Let's thank the system CAT routine, that make
disapear the seventh bit of every byte printed.
* In LOCATE mode, excepted for the first entry, unlike you now exactly what
you do, you should not use WINDOW command, try to change an ink several
times, and use the transparent mode. Why, because you don't know when these
commands will be activated !
3) CATaclysme limits...
-----------------------
You cannot use the character " in your text (Basic text separator... ).
Replace it by an ', and after having generated you intro catalog, play with
a sector editor you you want absolutly having inverted commas...
CATaclysme is NOT designed to display intro catalog with the ùDIR command. It
only creates problems in MODE 2, because the catalog is displayed with five
columns. See chapter 5 for more informations. Anyway, who still uses this
forgotten instruction :-)
4) A deeper approach...
-----------------------
Structure of a directory entry
******************************
Classical mode :
----------------
00 id 06 dd dd dd dd dd 17 dd dd 15 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
06 = allows text display.
15 = lock text display : obligatory because the CPC add blanks and
filelength after its name.
17 = Does nothing, but needs a parameter. Nice trick to mask the dot
between the filename and its extension.
id = index number : force the CPC to display the entries in a defined
order. Another nice idea, in fact...
dd = data
LOCATE mode :
--------------
Entry if the PRINT command is used :
00 06 1F xx yy dd dd dd 17 dd dd 15 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
06 = allows text display.
15 = lock text display : obligatory because the CPC add blanks and
file's length after its name.
17 = Does nothing, but needs a parameter. Nice trick to mask the dot
between the filename and its extension.
1F = ASCII code of the LOCATE command
xx & yy : LOCATE parameters.
Entry if the PRINT command is not used :
00 06 dd dd dd dd dd dd 17 dd dd 15 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Well, it is obviously possible to do better in some circunstances.
CATaclysme does not pretend to be the ultimate intro Catalog generator !
Restrictions due to the catalog print routine
*********************************************
* When you type the CAT command, the CPC reads the MODE value to know
how to display files. It orders alphabetically the files and send it
to the screen in one (MODE 0), two (MODE 1) or four columns (MODE 2).
Note that the files are ordered by column ! This strange way of doing
this job explains why a presentation designed to be display in MODE 1
does not work properly in other resolutions.
CATaclysme try to solve this equation using two ways :
- it uses an index byte for every directory entry, so it can know the
order where the CPC will sort the file entries. So, it is possible
to create easly complex effects. Huge limit, CATaclysm considers that
the "departure mode" is MODE 1. If it is not so, the introduction
will be badly displayed... Fortunately, when you reset you CPC, MODE 1
is activated !
- On every directory entry, the text cursor position is obligatory
defined with a LOCATE command. This is the LOCATE mode. On one hand,
you can create a generic presentation, without index byte, in the
other hand, it cannot allow you to make complex things easily.
* Directory printing routine inserts a dot between the filename and its
extension, followed by filelength. These unwanted informations must be
"hidden" so the presentation runs correctly.
There are several ways to kill the dot ! The first one is to lock/unlock
display, but it costs two bytes (&15 &06). We can use the CHR$(8) char
(moves cursor one char back) but we must be sure to display after it
another character.
The better way in my mind, found by the illustrous Sylvestre, is to use
the CHR$(&17). It does absolutely nothing, but, as it needs a parameter,
it reserves the dot !
To avoid the file length printing, the easy way is to lock/unlock the
text display. I advice you to unlock the printing at the beginning of
an entry, because all commands that have consequences on the text cursor
position needs it !
* The CPC does not allow us to display ASCII values upper than 127.
No way to cheat the machine. Sad comfort, you can print chars 0 to 31.
They are not terrific, but that is better than nothing...
* Commands CAN NOT overflow an entry to another.
If you command "overflows", it will not take parameters it needs on the
next entry, but in the chars usually displayed by the catalog
(filelength) ! This can sometimes be a way to optimise an intro, most
of the time, it does horrible things on screen...
CATaclysme DOES NOT deal with this kind of trick, and fill with 00 unused
areas.
* Commands SYMBOL (CHR$(&19)), CHR$(&5), CHR$(&17) are not functionnal.
- CHR$(&5) and CHR$(&17) because the graphical MODE can't be activated.
- SYMBOL for two reasons : default init of the SYMBOL array at 240,
command too long (9 bytes).
Credits and acknowledgments
---------------------------
CATaclysme has been programmed by Tom et Jerry / GPA. This little tool has
been coded in a short time (about a month), it does explains why its
looking is to poor and its capabilities so limited :-).
A big hello to Super Sylveste, who has supported me to create such an
utility. To be honest, during the Amstrad Expo 2004, Iron asked me for a
tool like this one, but, at the moment, I found the subject uninteresting.
Thanks to Super Sylvestre, I have opened my eyes : finaly, this strange
particularity of the CPC is amazing !
Greetings to all CPC survivors. Hi to my unfortunate roomates, Tronic and
Tenebros, who may, in their caverns, try to create evil CPC programs :-)