< COMMENTAIRE UNIQUEMENT DESTINE A PERMETTRE L'ACCES PAR 'vi' (introduit le 20061123090420).
INITS:   VAL         0               < INITIALISER LA ZONE SCRATCH DK.
INITS:   VAL         1               < NE PAS INITIALISER ZONE SCRATCH.
         IF          TITV,X100,,X100
         IDP         "TV VERSION SOLAR - RELEASE 13/03/80"
X100:    VAL         0
         IF          TITV,,X100,
         IDP         "TI VERSION SOLAR - RELEASE 13/03/80"
X100:    VAL         0
         IDP         "IMAGES VIDEOS"
         IDP         "JOHN F. COLONNA"
         PAGE
         EOT         #SIP DEFINITION CMS5#
         PAGE
         IF          TITV,,XWOR%,
NMPROC:  VAL         "TI"            < NOM DU PROCESSEUR.
XWOR%:   VAL         0
         IF          TITV,XWOR%,,XWOR%
NMPROC:  VAL         "TV"            < NOM DU PROCESSEUR.
XWOR%:   VAL         0
         EOT         #SIP DEF PROCESSEUR#
         PROG
         WORD        IMAGE           < ENTRY POINT DU GENERATEUR.
         WORD        0
PIMAGE:  EQU         $               < P='12 !!!
         LRP         L
         BR          -2,L            < ENTREE DANS LE PROCESSEUR 'TV'.
<
         IF          ORDI-"S",XWOR%,,XWOR%
MCOOL:   DZS         1               < CUMUL DES ARGUMENTS ENVOYES A CU3.
XWOR%:   VAL         0
<
         EOT         #SIP DEFINITION ITEM#
ITEM1:   EQU         ZERO+PILE-LTNI
ITEM2:   EQU         ZERO+PILE-LTNI-LTNI
         PAGE
<
<
<        I M A G E S   G R A P H I Q U E   E T   V I D E O  :
<
SIZE:    VAL         ITEM2-ZERO
<
< PILE DU PROGRAMME :
<
SSTACK:  VAL         40              < ELLE EST GRANDE A CAUSE DE
                                     < LA DICHOTOMIE...
         IF          TITV,X100,,X100
STACK:   EQU         ZERO+SIZE
<
< BUFFER DE L'IMAGE GRAPHIQUE :
<
BUFFER:  EQU         STACK+SSTACK
X100:    VAL         0
         EOT         #SIP IMAGE 256#
         IF          TITV,X100,,X100
NOM:     EQU         ZERO+PILE+5-LNOM-2  < NOM DE L'IMAGE VIDEO.
IMAG:    EQU         NOM+LNOM+2      < IMAGE VIDEO.
X100:    VAL         0
         IF          TITV,,X100,
NOM:     EQU         ITEM1           < NOM EST EN RECOUVREMENT DE
                                     < L'EN-TETE DE L'ITEM1.
IMAG:    EQU         ZERO+PILE+5
EOT:     EQU         IMAG-2
LONG:    EQU         IMAG-1
X100:    VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
ENTIM:   EQU         IMAG-LENTIM     < EN-TETE IMAGE (INTERPOLATION VIDEO
                                     < PAR CMS5).
XWOR%:   VAL         0
<
< VALIDATION DU FORMAT DE L'IMAGE (CARREE) :
<
X20:     VAL         1024/DY         < NBRE DE LIGNES/IMAGE.
X21:     VAL         CNMPL*16        < NBRE DE POINTS/LIGNE.
         IF          X20-X21,,X100,
         IF          ATTENTION : L'IMAGE N'EST PAS CARREE !!!
X100:    VAL         0
         IF          TITV,X100,,X100
<
< TAILLE MAX DE L'IMAGE GRAPHIQUE EN MOTS :
<
SIZEB:   VAL         NOM-BUFFER-2    < (-2 PAR PRUDENCE...)
<
< BUFFER DES SECTEURS SCRATCHES :
<
SECTOR:  EQU         BUFFER          < ON L'IMPLANTE EN RECOUVREMENT
                                     < DU BUFFER DE LECTURE GRAPHIQUE.
X100:    VAL         0
         PAGE
<
<
<        L O C A L  :
<
<
         TABLE
MCDAI:   ASCI        "!CDA"
         BYTE        "I";'04
MCDA:    ASCI        "!CDA"
         BYTE        '04;0
         LOCAL
LOC:     EQU         $
<
< BUFFERS ET MESSAGES :
<
NPO:     BYTE        5;"="           < POUR EDITION DU NBRE DE POINTS.
REP:     WORD        0               < REPONSE UTILISATEUR.
         WORD        0               < (ET FOND DE L'IMAGE)
                                     < (ET NBRE DE POINTS/IMAGE)
CURSOR:  DZS         3               < POUR ENTRER LE CURSEUR GRAPHIQUE:
                                     < OCTET0=CARACTERE DE DEBLOCAGE ,
                                     < MOT1=Y(CURSEUR) ,
                                     < MOT2=X(CURSEUR).
         IF          TITV,X100,,X100
MNOM:    BYTE        5;'6D
         ASCI        "NOM>"
MINT:    BYTE        2;'6D;">";0
MFOND:   BYTE        7;'6D
         ASCI        "FOND= "
ML1:     BYTE        5;'6D
         ASCI        "0-F="
ML2:     BYTE        7;'6D
         ASCI        "10-1F="
MIDEM:   BYTE        7;'6D
         ASCI        "T*T=I?"
MAT:     BYTE        2;'6D;"M";0
MX:      BYTE        3;"2";"2";"="
         BYTE        3;"2";"1";"="
         BYTE        3;"1";"2";"="
         BYTE        3;"1";"1";"="
         BYTE        12;"-"          < A T T E N T I O N  : DOIT
                                     < ETRE DERRIERE LES 4 COEFFICIENTS
                                     < DE LA MATRICE 'T'.
         ASCI        "CLASSE X,Y= "
MDIAG:   BYTE        5;'6D
         ASCI        "1/2?"
MTOPO:   BYTE        34;'6D
         ASCI        "0123456789ABCDEFGHIJKLMNOPQRSTUV"
         BYTE        '6D;0
MORG:    BYTE        5;'6D
         ASCI        "ORG="
MINIT:   BYTE        5;'6D
         ASCI        "REC?"
X100:    VAL         0
         IF          TITV,,X100,
MIT1:    BYTE        7;'6D
         ASCI        "!ITEM1"
X100:    VAL         0
MERR:    BYTE        3;'6D;"?";"?"
<
< DEMANDES A CMS4 :
<
         IF          TITV,,X100,
NSC:     ASCI        "SD    "
         BYTE        '04;0           < EOT DE FIN DE NOM.
DELSC:   WORD        '0302           < DEMANDE DE DELETE SGN DE LA
                                     < BRANCHE DE SAUVEGARDE DE SC.
         WORD        NSC-ZERO*2
         WORD        ZERO-BRANCH+PILE-LTNI-LTNI*2
         WORD        -1
X100:    VAL         0
DEMOUT:  WORD        '0202           < EMISSION D'UN MESSAGE.
         WORD        0               < @OCTET DU MESSAGE.
         WORD        0               < LONGUEUR DU MESSAGE.
         IF          TITV,X100,,X100
DEMIN:   WORD        '0101           < LECTURE DU NOM DU DESSIN.
         WORD        NOM-ZERO*2
         WORD        LNOM*2
DEMINT:  WORD        '0101           < LECTURE DE LA REPONSE UTILISATEUR.
         WORD        REP-ZERO*2
         WORD        1               < 1 CARACTERE.
DEMFON:  WORD        '0101           < DEMANDE D'ENTREE DU FOND.
         WORD        REP-ZERO*2
         WORD        4               < 4 CARACTERES OBLIGATOIRES.
LG:      WORD        '0A00           < LECTURE ALPHA SUR NVP='0A ,
                                     < ASSIGNE A VI1.
         WORD        BUFFER-ZERO*2
         WORD        SIZEB*2
X100:    VAL         0
         IF          TITV,X100,,X100
OG:      WORD        '0203           < OPEN GRAPHIQUE DE LA VISU.
CU:      WORD        '0106           < MISE EN FONCTION DU CURSEUR
                                     < GRAPHQIE.
         WORD        0               < IL FAUT : AMDEM=0 !!!
LCU:     WORD        '0109           < LECTURE DU CURSEUR GRAPHIQUE.
         WORD        CURSOR-ZERO*2
         WORD        6
X100:    VAL         0
         IF          TITV,,X100,
OG:      WORD        '0B03           < OG SUR NVP='0B.
CU:      WORD        '0B06           < CU SUR NVP='0B.
         WORD        0               < AMDEM DOIT ETRE NUL !!!
LCU:     WORD        '0B09           < LCU SUR NVP='0B.
         WORD        CURSOR-ZERO*2
         WORD        6
X100:    VAL         0
DEMMEM:  WORD        '0004           < DEMANDE D'ALLOCATION 8K-MOTS.
RELMEM:  WORD        '0004           < DEMANDE DE RETOUR A 4K MOTS.
         WORD        '4000
         WORD        '2000           < 8K OCTETS.
DEMCCI:  WORD        '0001           < RETOUR AU CCI.
SLEEP:   WORD        '0005           < DEMANDE DE TEMPORISATION.
         WORD        0
         WORD        2               < POUR 2 SECONDES ....
         IF          TITV,X100,,X100
SGN:     WORD        '0002           < DEMANDE D'ACCES AU SGN.
         WORD        NOM-ZERO*2      < @OCTET DE L'IMAGE VIDEO.
         WORD        LIMAG+LNOM+2*2  < LONGUEUR TOTALE DE L'IMAGE
                                     < VIDEO ET DE SON EN-TETE.
         WORD        2*LNOM
X100:    VAL         0
         IF          TITV,,X100,
SGN:     WORD        '0002           < ACCES SGN POUR LES IMAGES.
         WORD        NOM-ZERO*2
         WORD        IMAG-NOM+LIMAG*2
         WORD        EOT-NOM*2
X100:    VAL         0
DEMSGN:  WORD        '0402           < DEMANDE D'ACCES AU SGN OVERLAY.
         WORD        BRANCH-ZERO*2   < @OCTET DE LA BRANCHE.
         WORD        ZERO-BRANCH+PILE-LTNI-LTNI*2
         WORD        -1
RDK:     WORD        '0C00           < LECTURE SCRATCH DU DISQUE.
         IF          TITV,X100,,X100
SECT2:   WORD        SECTOR-ZERO*2   < @OCTET DU SECTEUR.
X100:    VAL         0
         IF          TITV,,X100,
SECT2:   WORD        ZSECT2          < @OCTET DU SECTEUR.
X100:    VAL         0
         WORD        256             < 1 SECTEUR=256 OCTETS.
         WORD        0               < @SECTEUR COURANT.
WDK:     WORD        '0C02           < ECRITURE SCRATCH DU DISQUE.
         IF          TITV,X100,,X100
         WORD        SECTOR-ZERO*2   < PEUT CONTENIR UNE @ SE SITUANT
                                     < DANS L'IMAGE VIDEO.
X100:    VAL         0
         IF          TITV,,X100,
         WORD        ZSECT2
X100:    VAL         0
         WORD        256             < 1 SECTEUR=256 OCTETS.
         WORD        0               < NUMERO DU SECTEUR COURANT.
<
< ACCES AU CCI INTERPRETATIF :
<
ACCI:    WORD        CCI             < S/P D'ENVOI D'UNE CARTE AU 'CCI'...
DEMCC:   WORD        '0002           < DEMANDE D'ACCES AU 'CCI' INTERPRETATIF.
         WORD        0
         WORD        80
<
< CONSTANTES DE CONVERSION GRAPHIQUE --> VIDEO :
<
         IF          TITV,X100,,X100
HY1:     WORD        0               < HIGH-Y 1ER POINT.
LY1:     WORD        0               < LOW-Y 1ER POINT.
HX1:     WORD        0               < HIGH-X 1ER POINT.
LX1:     WORD        0               < LOW-X 1ER POINT.
HY2:     WORD        0               < HIGH-Y 2EME POINT.
LY2:     WORD        0               < LOW-Y 2EME POINT.
HX2:     WORD        0               < HIGH-X 2EME POINT.
LX2:     WORD        0               < LOW-X 2EME POINT.
HY:      WORD        0               < HIGH-Y POINT COURANT.
LY:      WORD        0               < LOW-Y POINT COURANT.
HX:      WORD        0               < HIGH-X POINT COURANT.
LX:      WORD        0               < LOW-X POINT COURANT.
X100:    VAL         0
X1:      WORD        0               < X 1ER POINT.
Y1:      WORD        0               < X 1ER POINT.
X2:      WORD        0               < X 2EME POINT.
Y2:      WORD        0               < Y 2EME POINT.
X:       WORD        0               < X=(X1+X2)/2.
Y:       WORD        0               < Y=(Y1+Y2)/2.
<
< RELAIS DIVERS :
<
ASECT:   WORD        SECTOR-1,X      < REALI DE RAZ DU BUFFER SECTEUR.
AIMAG1:  WORD        IMAG,X          < RELAI DE MODIF. DE L'IMAGE VIDEO.
ASECT1:  WORD        SECTOR,X        < RELAI POUR ACCES AU SECTEUR.
AOP:     WORD        OP              < ADRESSE D'1NE INSTRUCTION
                                     < VARIABLE CONTENANT SOIT UN
                                     < 'OR' , SOIT UN 'AND' , SOIT
                                     < ENFIN UN 'EOR'.
AOP2:    WORD        OP2             < REALI VERS L'INSTRUCTION
                                     < VARIABLE DE CHOIX DES COULEURS
                                     < DE L'IMAGE VIDEO COURANTE...
AREP:    WORD        REP,X           < RELAI DE CONVERSION DU FOND.
         IF          TITV,X100,,X100
AEOT:    WORD        NOM+LNOM        < ADRESSE DE L'EOT A PRIORI.
ALONG:   WORD        NOM+LNOM+1      < ADRESSE OU METTRE UN '0000
                                     < PERMETTNAT DE DISTINGUER UNE
                                     < IMAGE VIDEO , D'UN DESSIN DE
                                     < SIMULATION FLOPPY ('DE').
X100:    VAL         0
         IF          TITV,,X100,
AEOT:    WORD        EOT             < ADRESSE DE L'EOT A PRIORI.
ALONG:   WORD        LONG            < ADRESSE DE L'INDICATEUR VIDEO.
X100:    VAL         0
AI2:     WORD        ITEM2-1,X       < RELAI VERS ITEM2-1 POUR RAZ.
ABUF:    WORD        BUFFER,X        < RELAI D'ACCES AU BUFFER CARACTERE
AIMAG:   WORD        IMAG-1,X        < RELAI D'ACCES A L'IMAGE-1.
         IF          TITV,X100,,X100
AGET:    WORD        GET             < RECUPERATION 1 CARACTERE.
ACONV:   WORD        CONV            < ROUTINE DE CONVERSION DES
                                     < CARACTERES DE COORDONNEES EN
                                     < COUPLES DE COORDONNEES Y,X.
X100:    VAL         0
         IF          TITV,,X100,
ANOM:    WORD        NOM,X           < RELAI D'ACCES AU NOM IMAGE.
AI1:     WORD        ITEM1+LTN,X     < RELAI D'ACCES A L'ITEM1.
AINOM:   WORD        INOM            < RECUPERATION NOM DANS L'ITEM1.
ASIMU:   WORD        SIMU            < RECUPERATION CARACTERE DANS ITEM1
X100:    VAL         0
APOINT:  WORD        SET             < ROUTINE D'AFFICHAGE D'UN POINT :
                                     < CONTIENT SET/RESET/INVER SUIVANT
                                     < LE FOND DE L'IMAGE CHOISI.
ASET:    WORD        SET             < ROUTINE D'AFFICHAGE UN POINT.
ARESET:  WORD        RESET           < ROUTINE D'EFFACEMENT UN POINT.
AINVER:  WORD        INVER           < INVERSION VIDEO UN POINT.
ATEST:   WORD        TEST            < TEST D'1N POINT 0/1.
LROUT:   WORD        $+3+1,X;SET;RESET;INVER
AEXIST:  WORD        EXIST           < EXISTENCE ET VALEUR D'UN POINT.
AFILTR:  WORD        FILTR           < MODULE DE FILTRAGE IMAGE.
AVIRT:   WORD        VIRT            < MODULE D'ENTREE TOPOGRAPHIE.
ACOMPT:  WORD        COMPT           < COMPTAGE DES POINTS/IMAGE.
ADEF:    WORD        DEF             < DEFINITION DE LA MATRICE DE
                                     < TRANSFORMATION.
ACOEF:   WORD        COEF            < ENTREE 1 COEEFICIENT MATRICE.
         IF          ORDI-"T",XWOR%,,XWOR%
ADICO:   WORD        DICO            < PARCOURS DICHOTOMIQUE D'UN
                                     < SEGMENT.
XWOR%:   VAL         0
ASEG:    WORD        SEG             < TRACE DU SEGMENT (M1,M2).
AGOGE:   WORD        GOGE            < MODULE DE RETOUR A 'GE'.
AOVL:    WORD        OVL             < CHARGEMENT DES OVERLAYS.
APRINT:  WORD        PRINT           < ROUTINE D'EMISSION MESSAGE.
ADESIR:  WORD        DESIR           < QUESTION-REPONSE UTILISATEUR.
AHEX:    WORD        HEX             < CONVERSION HEXA --> BINAIRE.
AGOSGN:  WORD        GOSGN           < ROUTINE D'ACCES AU SGN.
AE300:   WORD        E300            < INTERROGATION UTILISATEUR.
AFIN:    WORD        E2              < ADRESSE DE FIN DE CONVERSION.
AINTER:  WORD        E410            < 2EME NIVEAU D'INTERROGATION.
AERR:    WORD        ERROR           < ERREUR 2EME NIVEAU INTERRO.
AE770:   WORD        E770            < INTERACTION GRAPHIQUE.
AOPER:   WORD        OPER            < OPERATION LOGIQUES IMAGES.
AIMAG2:  WORD        IMAGE2          < ENTRY POUR CHANGEMENT DE NOM.
         IF          ORDI-"T",XWOR%,,XWOR%
ASP1:    WORD        SP1             < 1ERE ROUTINE MAITRE.
ASP2:    WORD        SP2             < 2EME ROUTINE MAITRE.
ASP3:    WORD        SP3             < MISE EN PLACE DE L'IMAGE COMME
                                     < ZONE VISUALISEE PAR LA VIDEO.
                                     < (SI =0 : CE N'EST PAS :SYS !!!)
XWOR%:   VAL         0
         IF          TITV,,X100,
<
< SAUVEGARDE/RESTAURATION DE L'EN-TETE ITEM1 :
<
I1:      WORD        ITEM1           < ADRESSE EN-TETE ITEM1.
ASI1:    WORD        SI1             < ADRESSE ZONE DE SAUVEGARDE.
SI1:     DZS         LNOM+2          < ZONE DE SAUVEGARDE.
NOMARG:  WORD        -1              < MEMORISE DANS LE CAS D'UN APPEL
                                     < PAR 'SC', L'INDEX EVENTUEL DE
                                     < L'IMAGE APPELEE PRECEDEMMENT
                                     < PAR 'SC' LUI-MEME...
X100:    VAL         0
<
< CONSTANTES :
<
KIN:     WORD        -2+TITV         < COMPTEUR DES ENTRIES DANS TI/TV.
         IF          TITV,X100,,X100
NGE:     WORD        "GE"            < NOM DU PROCESSEUR 'GE'.
X100:    VAL         0
         IF          TITV,,X100,
WHOCAL:  WORD        0               < PERMET DE CONNAITRE LA NATURE
                                     < DE L'OVERLAY DE RETOUR SI ALT
                                     < MODE :
                                     < 0 : APPEL DIRECT PAR GE , OU
                                     <     APPEL PAR SC , LUI MEME
                                     <     AYANT ETE APPELE PAR GE ,
                                     < 1 : APPEL PAR SC LUI-MEME AYANT
                                     <     ETE APPELE PAR EI.
NCALL:   WORD        $+1,X;"GE";"EI"
X100:    VAL         0
ACNSYS:  ASCI        ":SYS"          < NUMERO DE COMPTE DU SYSTEME.
         IF          TITV,,X100,
NCP:     WORD        NBCAR*NBLIG     < NBRE DE CARACTERES PAR ITEM.
IEG:     WORD        0               < INDEX COURANT DE L'ITEM1.
X100:    VAL         0
         IF          TITV,X100,,X100
NMOTS:   WORD        2*LTNI          < NBRE DE MOTS OCCUPES PAR
                                     < LES ITEMS 1 ET 2.
X100:    VAL         0
ALIMAG:  WORD        LIMAG           < NBRE DE MOTS OCCUPES PAR L'IMAGE.
NMPL:    WORD        CNMPL           < NBRE DE MOTS DE 16 BITS/LIGNE.
NLIG:    WORD        1024/DY-1       < NBRE DE LIGNES D'UNE IMAGE -1.
NPPL:    WORD        CNMPL*16-1      < NBRE DE POINTS/LIGNE-1.
         IF          ORDI-"S",XWOR%,,XWOR%
XWOR%1:  VAL         4
XWOR%:   VAL         0
         IF          ORDI-"T",XWOR%,,XWOR%
XWOR%1:  VAL         '400
XWOR%:   VAL         0
TEMPO:   WORD        XWOR%1*2        < TEMPORISATION PAIRE DE CLIGNOT-
                                     < TEMENT DU PSEUDO-CURSEUR TV.
WAITR:   WORD        20000*TITV+'80  < NBRE DE JDX A FAIRE LORS DU
                                     < MASCAGE DES IT DE NIVEAU 7.
INIT:    WORD        0               < INDICATEUR D'INITIALISATION
                                     < DE L'IMAGE :
                                     < =0 : INITIALISER ,
                                     < #0 : NE PAS INITIALISER.
PATS:    WORD        'FFFF;'FFFF     < LISTE SUR 32 BITS DES SECTEURS
                                     < D'UNE IMAGE SCRATCH A PRENDRE
                                     < EN COMPTE (BIT=0 : SECTEUR
                                     < DE MEME RANG A IGNORER).
MIROR:   WORD        0               < =0 : MIROIR NORMAL LORS DES
                                     <      OPERATIONS LOGIQUES ,
                                     < #0 : &AS DE MIROIR.
INDICS:  WORD        0               < INDICATEUR TEMPORAIRE DE PRISE
                                     < EN COMPTE D'UN SECTEUR ;
                                     < =0 : IGNORER LE SECTEUR ,
                                     < =1 : TRAITER LE SECTEUR COURANT.
BANDE:   WORD        0               < NUMERO DE LA BANDE COURANTE
                                     < QUE L'ON VIRTUALISE.
ATOPO:   WORD        TOPO,X          < RELAI VERS LA TOPOGRAPHIE
                                     < DES BANDES HORIZONTALES.
TOPO:    EQU         $
         BYTE        0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15
         BYTE        16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31
         IF          LIMAG/128-32,,X100,
         IF          ATTENTION : LA TOPOGRAPHIE N'EST PAS ADAPTEE !!!
X100:    VAL         0
XIMAG:   WORD        0               < INDEX DE MODIFICATION DE
                                     < L'IMAGE VIDEO.
MASKX:   WORD        LIMAG-1         < MASQUE DE CALCUL DE XIMAG
                                     < MODULO LIMAG.
SENSX:   WORD        0               < CONTIENT L'INCREMENT (+1,-1)
                                     < DE XIMAG.
SECTX:   WORD        0               < DONNE L'INDEX INITIAL DE PARCOURS
                                     < D'UN SECTEUR D'IMAGE SCRATCH.
                                     < (0 OU 127).
ITEST:   WORD        0               < 0 : TEST SUR VALEUR 0 DES POINTS.
                                     < 1 : TEST SUR VALEUR 1 DES POINTS.
IMAG2:   WORD        IMAG-ZERO*2     < @OCTET DE L'IMAGE VIDEO.
<
< MATRICE DE TRANSFORMATION :
< (INITIALISEE SUR UNE TRANSPOSITION)
<
C256:    WORD        256             < POUR DECONCATENER 2 OCTETS.
XEQUIV:  WORD        0               < CLASSE D'EQUIVALENCE DES X.
YEQUIV:  WORD        0               < CLASSE D'EQUIVALENCE DES Y.
MSX:     WORD        0               < SAVE TEMPORAIRE X DE M(X,Y).
SX:      WORD        0               < COORDONNEE REDUITE X TEMPORAIRE.
RSX:     WORD        0               < RESIDU DE X TEMPORAIRE.
MSY:     WORD        0               < SAVE TEMPORAIRE Y DE M(X,Y).
SY:      WORD        0               < COORDONNEE Y REDUITE TEMPORAIRE.
RSY:     WORD        0               < RESIDU DE Y TEMPORAIRE.
AMAT:    WORD        $,X             < LE RELAI AMAT DE LA MATRICE ,
                                     < DOIT ETRE SUIVI DANS L'ORDRE
                                     < PAR A22,A21,A12,A11.
A22:     WORD        0
A21:     WORD        1
A12:     WORD        1
A11:     WORD        0
SA22:    WORD        0               < VALEUR TEMPORAIRE DE A22.
SA21:    WORD        0               < VALEUR TEMPORAIRE DE A21.
DIAGON:  WORD        1               < #0 : &ARCOURS DIAGONAL DE
                                     < L'IMAGE LORS DE 'T'.
                                     < =0 : PARCOURS ENTIER DE L'IMAGE.
         IF          ORDI-"S",XWOR%,,XWOR%
<
< ACCES 'DKU' ET COULEURS SOLAR :
<
XALAD1:  VAL         '0E00           < PREMIER 16*Q-SECTEUR ACCESSIBLE,
XALAD2:  VAL         '0F00           < PREMIER 16*Q-SECTEUR INACCESSIBLE,
XDKU:    VAL         4               < DECALAGE DE GENERATION ADRESSES DKU.
RWDKU:   WORD        '8A00           < ACCES A 'DKU' SUR NVP='8A.
         WORD        IMAG-ZERO*2
         WORD        LIMAG*2
         WORD        XALAD1-1>XDKU   < ADRESSE DE L'IMAGE EN ABSOLU.
STDKU:   WORD        '8A01           < STABILISATION IMAGE.
         WORD        IMAG-ZERO*2
         WORD        LIMAG*2
         WORD        0               < SELECTION COULEUR.
AMCOOL:  WORD        MCOOL           < ACCES AU CUMUL DES ARGUMENTS ENVOYES
                                     < A CU3 (COULEUR SOLAR).
DEMCU3:  WORD        '8B02           < COMMANDE DES REGISTRES DE COULEUR.
         WORD        MCOOL-ZERO*2
         WORD        2
VALAD1:  WORD        XALAD1          < 'E000 : 1ER SECTEUR ACCESSIBLE,
VALAD2:  WORD        XALAD2          < 'F000 : 1ER SECTEUR INACESSIBLE.
M0FFF:   WORD        '0FFF           < POUR RAZER LES BITS 0,1,2 ET 3.
XWOR%:   VAL         0
<
< PILE DE TRAVAIL :
<
APILE:   WORD        PILE-1          < @PILE DE SODOME.
ASTACK:  WORD        STACK-1         < PILE DE TRAVAIL DU PROCESSEUR.
         PROG
         PAGE
<
<
<        M I S E   D ' U N   B I T   A   1  :
<
<
<        ARGUMENTS :
<                    X ET Y CONTIENNENT X ET Y DU POINT.
<                    C=@IMAG (IMAGE VIDEO).
<
<
SET:     EQU         $
         PSR         B,X,C
         LR          Y,A
         MP          NMPL            < CONVERSION DE L'Y DU POINT EN
                                     < UN NUMERO DE MOT.
         ADR         B,C
         LR          X,A
         SLRS        4
         ADR         A,C             < C=@MOT CONTENANT LE POINT (X,Y).
         LAI         'F
         ANDR        A,X             < CALCUL DE X MODULO 16 ;
                                     < X=NUMERO DU BIT DANS LE MOT.
         LA          0,C             < A=MOT CONTENANT LE POINT (X,Y).
         SBT         0,X             < POSITIONNEMENT DU POINT.
         STA         0,C             < MISE A JOUR DE CE MOT.
         PLR         B,X,C
         RSR
<
<
<        E F F A C E M E N T   D ' U N   P O I N T  :
<
<
<        ARGUMENTS :
<                    X ET Y CONTIENNENT X ET Y DU POINT.
<                    C=@IMAG (IMAGE VIDEO).
<
<
RESET:   EQU         $
         PSR         B,X,C
         LR          Y,A
         MP          NMPL
         ADR         B,C
         LR          X,A
         SLRS        4
         ADR         A,C             < C=@MOT CONTENANT LE POINT (X,Y).
         LAI         'F
         ANDR        A,X             < X=NUMERO DU BIT REPRESENTANT
                                     < LE POINT DANS LE MOT ((C)).
         LA          0,C             < A=MOT CONTENANT LE POINT (X,Y).
         RBT         0,X             < EFFACEMENT DU POINT.
         STA         0,C             < MISE A JOUR DE CE MOT.
         PLR         B,X,C
         RSR
<
<
<        I N V E R S I O N   V I D E O   U N   P O I N T  :
<
<
<        ARGUMENT :
<                    X ET Y CONTIENNENT X ET Y DU POINT A INVERSER.
<                    C=@IMAG (IMAGE VIDEO).
<
<
INVER:   EQU         $
         PSR         B,X,C
         LR          Y,A
         MP          NMPL
         ADR         B,C
         LR          X,A
         SLRS        4
         ADR         A,C             < C=@MOT CONTENANT LE POINT (X,Y).
         LAI         'F
         ANDR        A,X             < X=NUMERO DU BIT REPRESENTANT
                                     < LE POINT DANS LE MOT ((C)).
         LA          0,C             < A=MOT CONTENANT LE POINT (X,Y).
         IBT         0,X             < INVERSION VIDEO DU POINT.
         STA         0,C             < MISE A JOUR DE CE MOT.
         PLR         B,X,C
         RSR
<
<
<        T E S T   D ' U N   P O I N T  :
<
<
<        FONCTION DE ITEST :
<                    ITEST=0 : CARY=1 SI POINT=0 ,
<                         =1 : CARY=1 SI POINT=1.
<
<
<        ARGUMENTS :
<                    X ET Y CONTIENNENT L'X ET L'Y DU POINT ,
<                    C=@IMAG.
<
<
<        RESULTAT :
<                    CARY POISITIONNE PAR LE POINT (0/1) 9
<
<
TEST:    EQU         $
         PSR         B,X,C
         LR          Y,A             < A=COORDONNEE Y DU POINT.
         MP          NMPL
         ADR         B,C
         LR          X,A             < A=COORDONNEE X DU POINT.
         SLRS        4
         ADR         A,C             < C#MOT CONTENANT LE POINT (X,Y).
         LAI         'F
         ANDR        A,X             < X=NUMERO DU POINT DANS LE MOT (C)
         LA          0,C
         CPZ         ITEST           < TEST DE LA VALEUR LOGIQUE DU
                                     < POINT.
         JNE         E1022           < CONVENTION NORMALE (1).
         IBT         0,X             < CAS DES CONVENTIONS INVERSEES (1)
E1022:   EQU         $
         TBT         0,X             < TEST DU POINT.
         PLR         B,X,C
         RSR
         PAGE
<
<
<        E X I S T E N C E   E T   V A L E U R   P O I N T  :
<
<
<        ARGUMENT :
<                    X ET Y CONTIENNENT L'X ET L'Y D'UN POINT.
<
<
<        RESULTAT :
<                    A#0 : M(X,Y) N'EXISTE PAS , OU
<                          M(X,Y) EXISTE ET M(X,Y)=0.
<
<
<        A T T E N T I O N  :
<                      LE TEST D'EXISTENCE NE PORTE QUE
<                    SUR LA COORSONNEE Y DU POINT !!!
<
<
EXIST:   EQU         $
         LR          Y,A
         JAL         NEXIST          < M(X,Y) N'EXISTE PAS : A<0#0 !!!
         CP          NLIG
         JG          NEXIST          < M(X,Y) N'EXISTE PAS : A>0#0 !!!
<
< CAS OU LE POINT M(X,Y) EXISTE :
<
         BSR         ATEST           < TEST DE LA VALEUR DE M(X,Y).
         LAI         1
         SBCR        A               < A=0 SI M(X,Y)=1.
NEXIST:  EQU         $
         RSR
         PAGE
<
<
<        E N V O I   D ' U N E   C A R T E   A U   C C I  :
<
<
<        ARGUMENT :
<                    A=ADRESSE MOT DE LA CARTE.
<
<
CCI:     EQU         $
         ADR         A,A             < CONVERSION EN UNE ADRESSE OCTET.
         STA         DEMCC+1
         LAD         DEMCC
         SVC         0               < ET ENVOI DE LA CARTE...
         RSR
         PAGE
         IF          TITV,,X100,
<
<
<        A C C E S   C A R A C T E R E   I T E M 1  :
<
<
<        ARGUMENT :
<                    IEG=INDEX COURANT DE L'ITEM1.
<
<
<        A T T E N T I O N  :
<                      SI L'APPEL A EU LIEU PAR 'SC' ,
<                    IL EST POSSIBLE QUE L'ACCES A L'ITEM
<                    AIT LIEU VERS L'ITEM2 , ET NON L'ITEM1 ;
<                    TOUT DEPENDE DE CDRET.
<
<
<        RESULTAT :
<                    A=CARACTERE COURANT DE L'ITEM1 ,
<                    IEG<--(IEG)+1 ,
<                    RETOUR DIRECT EN 'GOGE' SI DEBORDEMENT ITEM1 !!!
<
<
SIMU:    EQU         $
         PSR         X
         LA          IEG             < A=INDEX COURANT DE L'ITEM1.
         CP          NCP             < VALIDATION DE (IEG).
         JGE         SIMUR           < ERREUR : HORS L'ITEM1 ...
         LR          A,X             < OK , X=INDEX COURANT DE L'ITEM1.
         LBY         &AI1            < A=CARACTERE COURANT DE L'ITEM1.
         IC          IEG             < PROGRESSION DE IEG.
         PLR         X
         RSR
<
< ERREUR : HORS L'ITEM1 :
<
SIMUR:   EQU         $
         BR          AGOGE           < RETOUR DIRECT EN 'GOGE' !!!
<
<
<        A C C E S   A U   N O M   D ' U N E   I M A G E
<                    D A N S   L ' I T E M1  :
<
<
<        RESULTAT :
<                    S'IL N'Y A PAS DE DEBORDEMENT DE L'ITEM1 ,
<                    'NOM' RECOIT LE NOM RECUPERE DANS L'ITEM1
<                    A CONCURRENCE DE '2*LNOM' CARACTERES ,
<                    OU JUSQU'A TROUVER UN ';' , QUI EST ALORS
<                    REMPLACE PAR UN 'EOT'.
<
<
<        A T T E N T I O N  :
<                      LE 'NOM' EST INCHANGE, SI LE
<                    NOM CORANT RECUPERE EST VIDE (';').
<
<
INOM:    EQU         $
         PSR         X,Y             < ON N'EST JAMAIS ASSEZ PRUDENT...
         LXI         2*LNOM          < X=NBRE MAX DE CARACTERES.
         LYI         0               < INDEX COURANT DU NOM.
<
< BOUCLE DE RECUPERATION :
<
INOM1:   EQU         $
         BSR         ASIMU           < A=CARACTERE COURANT DE ITEM1.
         CPI         ";"             < EST-CE LA FIN DE NOM ???
         JNE         INOM2           < NON , ON LE CONSERVE.
         CPZR        Y               < LE NOM RECUPERE EST-IL VIDE ???
         JE          INOM3           < OUI, 'NOM' RESTE ALORS INCHANGE.
         LAI         '04             < OUI , ON LE REMPLACE PAR 'EOT' ,
         LXI         1               < ET ON ARRETE ICI LA BOUCLE ...
INOM2:   EQU         $
         XR          X,Y
         STBY        &ANOM           < RANGEMENT DE (A) DANS NOM.
         ADRI        1,X             < PROGRESSION DE L'INDEX DE NOM.
         XR          X,Y
         JDX         INOM1           < SUITE EVENTUELLE DE LA BOUCLE
                                     < DE RECUPERATION ...
INOM3:   EQU         $               < CAS DES NOMS VIDES.
         PLR         X,Y
         RSR
X100:    VAL         0
         PAGE
         IF          ORDI-"T",XWOR%,,XWOR%
         EOT         #SIP SP1#
         EOT         #SIP SP3#
         EOT         #SIP SP2#
         PAGE
<
<
<        E N R E G I S T R E M E N T   V I D E O   E X T E R N E  :
<
<
VIDEO:   EQU         $
         IF          TITV,X100,,X100
         IC          KIN             < AFIN DE NE PAS PERDRE LA 1ERE
                                     < IMAGE QUE L'ON ENREGISTRE , AU
                                    < CAS OU 'V' EST LA 1ERE COMMANDE
                                     < UTILISEE.
VIDEO1:  EQU         $
X100:    VAL         0
         LA          ASP1
         JAE         E7000           < ON N'EST PAS SOUS :SYS !!!
         WORD        '1EC5           < EN MODE MAITRE :
                                     < 0- MASCAGE DES IT DE NIVEAU 7 ,
                                     < 1- INHIBITION DU ALT-MODE ,
                                     < 2- BLOCAGE DU SWAPPING ,
                                     < 3- MISE DE LA VIDEO EN LECTURE.
         IF          TITV,,X100,
         LX          WAITR
         JDX         $               < ATTENTE DE FIN D'ENREGISTREMENT
                                     < VAEC LES IT7 MASQUEES ...
X100:    VAL         0
         IF          TITV,X100,,X100
         LAI         NSPTV
         SBT         0
         WORD        '1E15           < RECUPERATION DANS B DE L'@DCT
                                     < DU SYSTEME VIDEO.
         ADRI        2,B
         LR          B,A             < A=@REGISTRE X DU SYSTEME VIDEO.
         WORD        '1E15           < RECUPERATION DANS B DU REGISTRE
                                     < X DU SYSTEME VIDEO.
         LR          B,Y             < Y=REGISTEE X DU SYSTEME
                                     < VIDEO APRES LA MISE EN RECORD.
         LX          WAITR           < INITIALISATION DU DETECTEUR DE
                                     < TIMED OUT DE LA VIDEO , OU DE SA
                                     < MISE 'OFF' !!!
<
< ATTENTE DE CHANGEMENT DE TRAME :
<
WIDEO:   EQU         $
         JDX         NTOUT           < PAS OU PAS ENCORE DE TIMED OUT.
         JMP         TOUT            < CA Y EST : TIMED OUT !!!
NTOUT:   EQU         $               < PAS OU PAS ENCORE DE TIMED OUT.
         WORD        '1E15           < B=REGISTRE X COURANT DU
                                     < SYSTEME VIDEO.
         CPR         B,Y             < A-T'ON CHANGE DE TRAME ???
         JE          WIDEO           < ON BOUCLE JUSQU'A CHANGER
                                     < DE TRAME !!!
TOUT:    EQU         $               < TIMED OUT.
X100:    VAL         0
         LA          ASP2
         WORD        '1EC5           < EXECUTION MAITRE :
                                     < 1- RETOUR VIDEO EN ECRITURE ,
                                     < 2- DEBLOCAGE DU SWAPPING ,
                                     < 3- RE-AUTORISATION DU ALT-MODE.
                                     < 4- DEMASCAGE DES IT DE NIVEAU 7.
         LA          ASET
         STA         APOINT          < ON SUPPOSE L'IMAGE EXTERNE
                                     < ENREGISTREE EN MODE 'SET'.
         IF          TITV,,X100,
         BR          AINTER          < VERS LE 2EME NIVEAU
                                     < D'INTERROGATION.
X100:    VAL         0
         IF          TITV,X100,,X100
         JMP         VIDEO1          < ON RESTE DANS CETTE SEQUENCE
                                     < D'ENREGISTREMENT JUSQU'A CE
                                     < QU'UN ALT-MODE L'INTERROMPE !!!
X100:    VAL         0
XWOR%:   VAL         0
         PAGE
<
<
<        R E T O U R   A   ' G E '  :
<
<
         IF          TITV,,X100,
<        CONDITIONS DE RETOUR :
<                    CDRET=0 : RETOUR OK ,
<                    CDRET=2 : RETOUR SUITE A UN ALT-MODE.
<
<
ABORT1:  EQU         $               < ERREUR TYPE ITEM1.
         LAD         MIT1
         BSR         APRINT          < ENVOI D'UN MESSAGE D'ERREUR.
                                     < PUIS ABORT PAR 'ALTM' !!!
ALTM:    EQU         $               < CAS D'UN ALT-MODE (PRESC).
<
< DELETE A PRIORI DE LA BRANCHE DE SAUVEGARDE :
< (MEME S'IL NE S'AGIT PAS D'UN APPEL PAR SC)
<
         WORD        '1E45           < RENVOIE : A=<IDESC>.
         ADRI        '30,A           < CONVERSION ASCI DE L'<IDESC>.
         STBY        NSC+2           < GENERATION DU NOM DE LA
                                     < BRANCHE DE SAUVEGARDE.
         LAD         DELSC
         SVC         0               < DELETE LA BRANCHE 'SC  <IDESC> '.
<
< PREPARATION DU RETOUR :
<
         STZ         MODCAL,W        < AFIN DE FAIRE COMME SI L'APPEL
                                     < AVAIT EU LIEU PAR 'GE' , AFIN
                                     < DE RETOURNER A 'GE' ET NON A
                                     < 'SC' ...
         LAI         2               < A=CODE D'ERREUR (2).
         JMP         GOBAC           < VERS LE RETOUR A GE/EI.
GOGE:    EQU         $
         LAI         0               < A=CODE DE RETOUR OK (0).
GOBAC:   EQU         $
         STA         CDRET,W         < TRANSMISSION DES CONDITIONS
                                     < DE RETOUR PAR LE CDRET.
X100:    VAL         0
         IF          TITV,X100,,X100
GOGE:    EQU         $
         LX          NMOTS           < X=NBRE DE MOTS A RAZER.
E3000:   EQU         $
         STZ         &AI2            < RAZ DES ITEMS 1 ET 2.
                                     < (EN EFFET ON Y A MIS DES
                                     < COCHONNERIES...)
         JDX         E3000
X100:    VAL         0
         LAI         '06             < NVP DE LOAD SOUS :SYS.
         IF          TITV,X100,,X100
         LB          NGE
X100:    VAL         0
         IF          TITV,,X100,
         LX          WHOCAL          < NATURE DE LA BRANCHE DE RETOUR.
         LB          &NCALL          < B=NOM DE LA BRANCHE DE RETOUR
                                     < A PRIORI ... (EN FAIT CE SERA
                                     < PEUT-ETRE LA BRANCHE SC ....)
         CPZ         MODCAL,W        < L'APPEL A-T'IL EU LIEU PAR
                                     < 'GE' OU BIEN PAR 'SC' ???
         JE          E4502           < APPEL PAR 'GE' ==> RETOUR A 'GE'.
<
< APPEL PAR 'SC' ==> RETOUR A 'SC' :
<
         LA          IEG             < RECUPERATION DE L'2NDEX COURANT
                                     < DE SIMULATION CARACTERES.
         STA         MODCAL,W        < ET TRANSMISSION A 'SC'.
         WORD        '1E45           < RECUPERATION : A=IDESC.
         ADRI        '30,A           < CONVERSION ASCI.
         STBY        2,W             < ET MISE EN TETE DE BRANCH.
         LAI         '05             < NVP DE LOAD SOUS ACN.
         LB          NSC             < LE NOM DE L'OVERLAY DE
                                     < RETOUR EST :
                                     < 'SC<SPACE><SPACE><IDESC><SPACE>'
E4502:   EQU         $
X100:    VAL         0
         STB         0,W             < MISE DU NOM (B) EN TETE
                                     < DE LA BRANCHE D'OVERLAY.
         STBY        DEMSGN          < DEMSGN EST MISE EN MODE
                                     < 'LOAD SOUS :SYS'.
         LA          APILE
         LR          A,K             < REINITIALISATION DU REGISTRE
                                     < K AVEC LA PILE DE SODOME.
         IF          TITV,,X100,
<
< INVALIDATION DE L'ITEM2 EN NE RAZANT QUE
< SON EN-TETE (EN EFFET IL NE FAUT PAS LE
< RAZER LUI-MEME CAR IL PEUT CONTENIR UNE
< BIBLIOTHEQUE APPELEE PAR 'SC'...) :
<
         LXI         LTN             < X=NBRE DE MOTS DE L'EN-TETE.
RAZET:   EQU         $
         STZ         &AI2
         JDX         RAZET
<
< RESTAURATION DE L'EN-TETE DE L'ITEM1 :
<
         LA          ASI1
         LB          I1
         LXI         LNOM+1
         MOVE
         CPZ         MODCAL,W        < RETEST DU MODE D'APPEL.
         JNE         E101            < DANS LE CAS D'UN RETOUR A 'SC'
                                     < ON RESTE SUR 8K MOTS ...
X100:    VAL         0
         LAD         RELMEM
         SVC         0               < RETOUR A 4K MEMOIRE.
E101:    EQU         $
         LAI         MCDA-ZERO
         BSR         ACCI            < RETOUR A 'CDA'...
         LAD         DEMSGN
         BSR         AOVL            < TENTATIVE DE CHARGEMENT DE 'GE'.
         LAD         DEMCCI
         SVC         0               < SI ERREUR , ON FAIT UN RETOUR AU
                                     < CCI ...
         JMP         E101            < NOUVELLE TENTATIVE SI !GO.
         PAGE
<
<
<        G E N E R A T E U R   S Y N T H E T I Q U E   V I D E O  :
<
<
<        PRINCIPE :
         IF          TITV,X100,,X100
<                      SOIT VIX SUR LAQUELLE ON FAIT UN
<                    DESSIN PAR G2/G3 ; SOIT DE PLUS !CM VIX=VI2 ;
<                    VI2 ETANT UNE LIGNE REBOUCLEE SUR VI1 , TOUT
<                    CARACTERE RECU PAR VIX ETANT DUPLIQUE SUR
<                    VI2 (PAR !CM) EST RECU PAR VI1.
<                      LE GENERATEUR SYNTHETIQUE FAIT SIMULTANEMENT
<                    UNE LECTURE ALPHA-NUMERIQUE SUR VI1 ; AINSI TOUS
<                    LES CARACTERES EMIS PAR L'INTERMEDIAIRE DE
<                    G2/G3 SONT RECUS PAR LE GENERATEUR VIDEO ;
<                    LORSQUE LE R/C DE FIN DE DESSIN (PRIMITIVE 'H'
<                    DE G2/G3) EST RECU PAR LE GENERATEUR , IL
<                    TRANSFORME LA CHAINE DE CARACTERES EN UNE
<                    IMAGE VIDEO REPRSENTE EN MEMOIRE PAR
<                    UNE MATRICE DE BITS.
<                      DONC :
<                                    !CM VIX=VI2
<                                    G2/G3 --> VIX
<                                    VI2 <--> VI1
<                                    !ASSIGN A=VI1
<                                    GENERATEUR VIDEO <-- VI1.
X100:    VAL         0
         IF          TITV,,X100,
<                      CE PROCESSEUR PERMET A PARTIR DE
<                    COMMANDES CONTENUS DANS L'ITEM1 DE
<                    TRAVAILLER SUR DES IMAGES PRE-CONSTRUITES
<                    OU PAS ...
<                      SI MODCAL#0 : 'TI' EST EN FAIT APPELE
<                    PAR 'SC' QUI LUI DEMANDE AINSI
<                    D'INTERPRETER UNE PARTIE DE SES
<                    COMMANDES.
<                      MODCAL DONNE ALORS L'INDEX INITIAL
<                    DE SIMULATION CARACTERES IEG.
<                      LE BIT0 DE MODCAL INDIQUE ALORS LE
<                    NOM DE L'APPELANT DE SC : 0 APPEL PAR GE ,
<                    1 : APPEL PAR EI ...
<
<
<        ARGUMENTS :
<                    MODCAL=INDEX CARACTERE COURANT ,
<                           BIT0=0 : RETOUR A GE SI ALT-MODE ,
<                           BIT0=1 : RETOUR A EI SI ALT-MODE.
<                    CDRET=RELAI D'ACCES A L'ITEM COURANT.
<                    B=INDEX DE L'IMAGE APPELEE EVENTUELLEMENT
<                      PRECEDEMMENT PAR 'SC', LORS D'UN APPEL
<                      PAR 'SC' (MODCAL#0).
X100:    VAL         0
<
<
<        FORMAT D'UNE IMAGE VIDEO SOUS SGN :
<                    MOTS0-9 : NOM DE L'IMAGE VIDEO , TERMINEE
<                              PAR UN 'EOT' S'IL Y A MOINS DE 20
<                              CARACTERES) ,
<                    MOT10 : 'EOT;'00 ,
<                    MOT11 : -3 : IMAGE DIRECTE ,
<                            -2 : IMAGE INVERSEE ,
<                            -1 : IMAGE A FOND HACHURE ,
<                              ON PEUT AINSI DIFFERNCIER
<                            UNE IMAGE VIDEO , D'UNE SIMULATION DE
<                            FLOPPY , MAIS AUSSI POURSUIVRE
<                            ULTERIEUREMENT LA MISE A JOUR D'UNE
<                            IMAGE VIDEO ...
<
<
<        I N I T I A L I S A T I O N  :
<
<
         WORD        IMAG            < VALEUR CONSTANTE DE LA BASE C.
         WORD        LOC+'80
         WORD        BRANCH
IMAGE:   EQU         $
         LRP         K
         ADRI        -1,K
         PLR         C,L,W           < INITIALISATION DES 3 BASES.
         LA          ASTACK
         LR          A,K             < INITIALISATION DE K.
         STZ         INIT            < A CAUSE DES ALT-MODES !!!
         IC          KIN             < COMPTAGE DES ENTRIES.
         IF          TITV,,X100,
         JG          ALTM            < RETOUR A 'GE' DANS LE CAS D'UN
                                     < ALT-MODE (QUE L'APPEL AIT
                                     < EU LIEU PAR 'SC' OU PAR 'GE').
X100:    VAL         0
         IF          TITV,X100,,X100
         JE          GOGE            < CAS D'UNE 2EME ENTRY SANS QU'IL
                                     < Y AIT EU DE PASSAGE PREALABLE
                                     < A L'ADRESSE 'AINTER' (E2).
         JL          INITV           < CAS DE LA 1ERE ENTRY (INIT).
         BR          AINTER          < CAS DES ENTREES SECONDAIRES ,
                                     < ALORS QU'UN PASSAGE EN E2
                                     < AU MOINS A EU LIEU ...
INITV:   EQU         $
X100:    VAL         0
         IF          TITV,,X100,
<
< INITIALISATION DE IEG (INDEX DE SIMULATION) :
<
         LA          MODCAL,W        < SI MODCAL#0 : L'APPEL A EU
                                     < LIEU PAR 'SC'.
         JAE         PASC            < CE N'EST PAS UN APPEL PAR 'SC'.
         STB         NOMARG          < DANS LE CAS D'UN APPEL PAR 'SC',
                                     < ON SAUVEGARDE L'INDEX DE DEBUT DU
                                     < NOM DE L'IMAGE APPELEE EVENTUEL-
                                     < LEMENT PRECEDEMMENT PAR 'SC'.
PASC:    EQU         $
         LBI         0               < POUR GE A PRIORI.
         TBT         0
         RBT         0               < RAZ DU BIT0 A PRIORI.
         ADCR        B               < B=0 : RETOUR A GE ,
                                     < B=1 : RETOUR A EI SI ALT-MODE.
         STB         WHOCAL          < SAVE LE NUMERO DE LA BRANCHE.
         STA         IEG             < MISE EN PLACE DE L'INDEX DE
                                     < SIMULATION CARACTERES.
         JAE         E4510           < VERS L'ALLOCATION 8K MOTS.
         LA          CDRET,W         < (A)=RELAI VERS L'ITEM COURANT,
                                     < MAIS, EST-CE BIEN UN RELAI ???
         JAGE        ALTM            < NON , EN FAIT , IL S'AGIT
                                     < D'UNE ENTREE FORT COMPLEXE
                                     < COINCIDANT AVEC UN ALT-MODE
                                     < FRAPPE PENDANT L'APPEL DE TI
                                     < PAR SC ......
         STA         AI1             < OK , CDRET CONTIENT LE
                                     < RELAI VERS L'ITEM COURANT.
         JMP         E4500           < IL EST DE PLUS INUTILE DE
                                     < DEMANDER 8K , ON LES A DEJA ...
<
< VALIDATION DU TYPE DE L'ITEM1 :
<
E4510:   EQU         $
         LXI         IINDIC-LTN*2    < X=INDEX OCTET DU TYPE ITEM.
         LBY         &AI1            < ACCES AU TYPE DE L'ITEM COURANT.
         CPI         "T"             < EST-CE UN TEXTE ???
         JNE         ABORT1          < ERREUR DE TYPE 'T' !!!
X100:    VAL         0
<
< DEMANDE D'ALLOCATION 8K-MOTS :
<
         LAD         DEMMEM
         SVC         0
E4500:   EQU         $
<
< PASSAGE SUR LA 'CDAI' :
< (PERMETTANT DONC AINSI
< L'ACCES A 'CDAJ' PAR
< UTILISATION DE "!CDAI=J")
<
         LAI         MCDAI-ZERO
         BSR         ACCI            < ENVOI DE "!CDAI"...
         IF          ORDI-"T",XWOR%,,XWOR%
<
< TEST DU NUMERO DE COMPTE D'APPEL :
<
         WORD        '1E25           < (A,B)=<ACN>.
         CP          ACNSYS
         JNE         E4000           < ON N'EST PAS SOUS :SYS !!!
         LR          B,A
         CP          ACNSYS+1
         JE          E4001           < ON EST SOUS :SYS !!!
E4000:   EQU         $               < ON N'EST PAS SOUS :SYS.
         STZ         ASP3            < PAS DE DEMANDE DE STABILISATION
                                     < DE L'2MAGE VIDEO.
         STZ         ASP1            < L'ENREGISTREMENT EST IMPOSSIBLE.
E4001:   EQU         $               < ON EST SOUS :SYS , YOUPI !!!
XWOR%:   VAL         0
         IF          TITV,,X100,
<
< SAUVEGARDE DE L'EN-TETE DE ITEM1 :
<
         LB          ASI1
         LA          I1
         LXI         LNOM+1
         MOVE
         CPZ         NOMARG          < Y-A-T'IL UNE IMAGE PRECEDENTE ????
         JL          PASIMA          < NON...
<
< MISE EN PLACE D'UN NOM INITIAL (CAS 'SC') :
<
         LY          IEG             < SAVE IEG DANS Y.
         LA          NOMARG
         STA         IEG             < ET ON FAIT CROIRE QUE L'INDEX
                                     < COURANT POINTE SUR LE NOM DE
                                     < L'IMAGE PRECEDENTE...
         BSR         AINOM           < RECUPERATION DU NOM DE L'IMAGE
                                     < PRECEDENTE.
         STY         IEG             < PUIS, ON RESTAURE IEG...
PASIMA:  EQU         $
X100:    VAL         0
         IF          INITS,X100,,X100
<
< INITIALISATION DE LA ZONE SCRATCH DU DISQUE :
<
         LXI         128             < X=128 MOTS=1 SECTEUR.
E830:    EQU         $
         STZ         &ASECT          < RAZ DU BUFFER SECTEUR COURANT.
         JDX         E830
         STZ         WDK+3           < RAZ DU NUMERO DE SECTEUR.
         LXI         LIMAG/128       < X=NBRE DE SECTEURS A INITIALISER.
         LAD         WDK
E831:    EQU         $
         PSR         X               < SAVE LE DECOMPTE DES SECTEURS.
         SVC         0               < INIT. LE SECTEUR COURANT.
         PLR         X
         IC          WDK+3           < PASSAGE AU SECTEUR SUIVANT.
         JDX         E831            < AU SUIVANT SI EXISTE ...
X100:    VAL         0
<
< ENTREE DU NOM DE L'IMAGE :
<
IMAGE2:  EQU         $               < ENTRY POUR CHANGEMENT DE NOM.
                                     < (SUITE A UNE 2EME INTERRO-
                                     < GATION 'N').
         IF          TITV,X100,,X100
         LAD         MNOM
         BSR         APRINT          < ENVOI D'UN MESSAGE 'NOM>'.
         LAD         DEMIN
         SVC         0               < ENTREE DU NOM DU DESSIN.
X100:    VAL         0
         IF          TITV,,X100,
         BSR         AINOM           < RECUPERATION DU NOM DE L'2MAGE.
X100:    VAL         0
         LAI         '04
         STBY        &AEOT           < MISE D'UN 'EOT' A PRIORI
                                     < TOUT AU BOUT DU NOM.
                                     < (MEME S'IL Y EN A DEJA UN) ...
<
< INTERROGATION DE L'UTILISATEUR :
<
E300:    EQU         $
         IF          TITV,X100,,X100
         LAD         MINT
X100:    VAL         0
         IF          TITV,,X100,
         STZ         OG              < LORS DE CHAQUE COMMANDE PRIMAIRE,
                                     < ON INVALIDE AINSI LE CURSEUR
                                     < GRAPHIQUE DE '0B; CELUI-CI PEUT
                                     < ETRE REAUTORISEE PAR LA PRIMITIVE
                                     < 'G' A LA SUITE DE 'M' DANS
                                     < L'ITEM COURANT.
X100:    VAL         0
         BSR         ADESIR          < QUESTION-REPONSE UTILISATEUR.
<
<        REPONSES RECONNUES :
<                    R : ENREGISTREMENT D'UNE IMAGE VIDEO (SUR NVP='0A),
<                        A PARTIR D'UN DESSIN GRAPHIQUE (G2/G3) ,
<                        INITIALISATION DU FOND.
<                    E : IDENTIQUE A 'R' , MIAS SANS INITIALISATION
<                        DU FOND BIEN QU'IL SOIT DEMANDE POUR
<                        INITIALISRR 'APOINT'.
<                        RECUPERATION D'IMAGES PREEXISTANTES.
<                    V : ENREGISTREMENT VIDEO EXTERNE ,
<                    D : AFFICHAGE D'UNE IMAGE VIDEO ,
         IF          TITV,,X100,
<                    G : VALIDATION IMAGE SANS LOAD
<                        DANS LE CAS DE L'APPEL PAR 'SC' ,
X100:    VAL         0
<                    F : RETOUR A 'GE'.
<
         IF          ORDI-"T",XWOR%,,XWOR%
         CPI         "V"
         JE          VIDEO           < ENREGISTREMENT A PARTIR D'1NE
                                     < SOURCE VIDEO EXTERNE.
XWOR%:   VAL         0
         CPI         "D"
         JE          DESSIN          < DEMANDE D'UNE IMAGE VIDEO.
         CPI         "R"
         JE          RECORD          < ENREGISTREMENT D'UNE IMAGE.
         CPI         "E"
         JE          EDIT            < PRISE EN COMPTE D'UNE IMAGE
                                     < PREEXISTANTE.
         CPI         "F"
         JE          GOGE            < RETOUR A 'GE'.
         IF          TITV,,X100,
         CPI         "G"
         JNE         E4501           < NON , COMMANDE NON RECONNUE ...
         CPZ         MODCAL,W        < DANS LE CAS DE 'G' , L'APPEL
                                     < A-T'IL EU LIEU PAR 'SC' ???
         JNE         E2              < OUI , 'G' EST AUTORISEE.
E4501:   EQU         $               < ERREUR DE COMMANDE.
X100:    VAL         0
<
< ERREUR :
<
E7000:   EQU         $
         LAD         MERR
         BSR         APRINT          < REPONSE INCOMPREHENSIBLE ...
         JMP         E300            < VERS UNE NOUVELLE INTERROGATION.
         PAGE
<
<
<        I M A G E   P R E E X I S T A N T E  :
<
<
EDIT:    EQU         $
         IC          INIT            < INIT#0 : DONC PAS D'ECRASEMENT
                                     < DE L'IMAGE PREEXISTANTE PAR
                                     < LE FOND !!!
<
<
<        E N R E G I S T R E M E N T   D ' U N E   I M A G E  :
<
<
RECORD:  EQU         $
<
< CHOIX DU FOND DE L'IMAGE :
<
         IF          TITV,X100,,X100
         LAD         MFOND
         BSR         APRINT          < ENVOI D'UN MESSAGE 'FOND= '.
         LAD         DEMFON
         SVC         0               < LECTURE DU FOND SOUS FORME DE
                                     < 4 CARACTERES HEXADECIMAUX.
X100:    VAL         0
<
< CONVERSION HEXADECIMALE --> BINAIRE :
<
         LYI         4               < Y=NBRE DE CARACTERES ATTENDUS.
         BSR         AHEX
         JNE         RECORD          < ERREUR DE CARACTERES ...
<
< CHOIX DE LA ROUTINE D'AFFICHAGE DES POINTS :
<
         LB          ASET            < SET A PRIORI.
         JAE         E52             < EFFECTIVEMENT LE FOND EST NOIR.
         LB          ARESET          < RESET A PRIORI.
         CPI         -1
         JE          E52             < EFFECTIVEMENT , LE FOND EST BLAN.
         LB          AINVER          < ET BIEN ON FERA DE L'INVERSION.
E52:     EQU         $
         STB         APOINT          < MISE EN PLACE DU RELAI D'ACCES
                                     < A LA ROUTINE D'AFFICHAGE CHOISIE.
<
< INITIALISATION DE L'IMAGE :
<
CLEAR:   EQU         $
         CPZ         INIT            < DOIT-ON INITIALISER LE FOND ???
         STZ         INIT            < REINITIALISATION INIT A PRIORI.
         JNE         E400            < NON , PAS D'INITIALISATION ;
                                     < C'EST UN CHANGEMENT DE NOM.
         LX          ALIMAG
E1:      EQU         $
         STA         &AIMAG          < INITIALISATION DE L'IMAGE.
         JDX         E1
<
<        E N R E G I S T R E M E N T   G R A P H I Q U E  :
<
E400:    EQU         $               < ENREGISTREMENT DE LA SUITE
                                     < D'UN DESSIN GRAPHIQUE.
         IF          ORDI-"T",XWOR%,,XWOR%
         IF          TITV,,X100,
         JMP         E2              < VERS LE 2EME NIVEAU D'INTERRO.
X100:    VAL         0
         IF          TITV,X100,,X100
         LAD         MINIT           < DEMANDE ENREGISTREMENT ???O/N.
         BSR         ADESIR          < QUESTION-REPONSE UTILISATEUR.
         CPI         "N"
         JE          E2              < NON : PAS D'ENREGISTREMENT , ON
                                     < VA DIRECTEMENT AU 2EME NIVEAU
                                     < D'INTERROGATION.
         CPI         "O"
         JE          E470            < OUI : VERS LA LECTURE SUR
                                     < LE NVP='0B.
         LAD         MERR
         BSR         APRINT          < REPONSE INCOMPREHENSIBLE...
         JMP         E400            < NOUVELLE INTERROGATION.
E470:    EQU         $
         LAD         LG
         SVC         0               < LECTURE SUR LE NVP='0A.
         JE          E847            < OK.
<
< CAS OU LE NVP='0A N'EST PAS ASSIGNE :
<
         LAD         DEMCCI
         SVC         0               < ON FAIT UN RETOUR PROVISOIRE
                                     < AU CCI POUR !ASSIGN.
         JMP         E400            < ET ON RECOMMENCE AU !GO.
<
<        C O N V E R S I O N   G R A P H I Q U E   -->   V I D E O  :
<
E847:    EQU         $
         LXI         0               < INDEX GRAPHIQUE.
<
< BOUCLE PRIMAIRE DE RECUPERATION GRAPHIQUE :
<
E10:     EQU         $
         BSR         AGET            < A=CARACTERE COURANT.
         CPI         '1D             < EST-CE UN 'GS' ???
         JNE         E10             < NON , IGNORE.
<
< CAS D'UN 'GS' : DEBUT D'UNE CHAINE GRAPHIQUE :
<
E11:     EQU         $
         BSR         AGET            < A=CARACTERE COURANT.
         CPI         '20             < EST-CE UN CTRL-XXX ???
         JL          E11             < OUI , IL EST IGNORE.
<
< CAS DU 1ER POINT D'UNE CHAINE GRAPHIQUE :
<
E12:     EQU         $
         STA         HY1             < HIGH-Y 1ER POINT.
         BSR         AGET
         STA         LY1             < LOW-Y 1ER POINT.
         BSR         AGET
         STA         HX1             < HIGH-X 1ER POINT.
         BSR         AGET
         STA         LX1             < LOW-X 1ER POINT.
<
< CARACTERES SUIVANTS LE 1ER POINT :
<
E18:     EQU         $
         BSR         AGET            < A=CARACTERE COURANT.
         CPI         '1F             < EST-CE UN 'US' ???
         JL          E11             < NON UN CTRL-XXX IGNORE , ON
                                     < VA DE PLUS CHANGER DE 1ER POINT.
         JE          E10             < OUI , ON RETOURNE A LA BOUCLE
                                     < PRIMAIRE DE RECUPERATION ,
                                     < JUSQU'A TROUVER UN NOUVEAU 'GS'.
<
< RECUPERATION DU 2EME POINT :
<
         STA         HY2             < HIGH-Y 2EME POINT.
         BSR         AGET
         STA         LY2             < LOW-Y 2EME POINT.
         BSR         AGET
         STA         HX2             < HIGH-X 2EME POINT.
         BSR         AGET
         STA         LX2             < LOW-X 2EME POINT.
<
<        C O O R D O N N E E S   X   E T   Y   D E S
<        P O I N T S   1   E T   2  :
<
         PSR         X               < SAVE L'INDEX GRAPHIQUE.
         LAD         HY
         LR          A,B             < RECEPTEUR=#HY.
         LAD         HY1             < EMETTEUR=@HY1.
         LXI         4
         MOVE                        < POINT COURANT=1ER POINT.
         BSR         ACONV           < CALCUL DES COORDONNEES X,Y.
         STX         X1              < X 1ER POINT.
         STY         Y1              < Y 1ER POINT.
         LAD         HY
         LR          A,B             < RECEPTEUR=@HY.
         LAD         HY2             < EMETTEUR=@HY2.
         LXI         4
         MOVE                        < POINT COURANT=2EME POINT.
         BSR         ACONV           < CALCUL DES COORDONNEES X,Y
                                     < DU 2EME POINT.
         STX         X2              < X 2EME POINT.
         STY         Y2              < Y 2EME POINT.
         LAD         HY1
         LR          A,B             < RECEPTEUR=1ER POINT.
         LAD         HY2             < EMETTEUR=2EME POINT.
         LXI         4
         MOVE                        < LE 1ER POINT EST ECRASE PAR
                                     < LE 2EME POINT , AFIN DE PRENDRE
                                     < EN COMPTE LES CHAINAGES DE
                                     < SEGMENTS.
         BSR         ASEG            < TRACE DU SEGMENT (M1,M2).
<
<
<
         PLR         X               < RESTAURE L'INDEX GRAPHIQUE.
         JMP         E18             < VERS LA RECHERCHE DU NOUVEAU
                                     < 2EME POINT.
X100:    VAL         0
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         IF          TITV,X100,,X100
         LAD         MINIT
         BSR         ADESIR          < CA NE SERT A RIEN, MAIS POUR LA
                                     < COMPATIBILITE...
X100:    VAL         0
         JMP         E2              < VERS LE 2EME NIVEAU D'INTERRO...
XWOR%:   VAL         0
<
<
<        C O M P T A G E   D E S   P O I N T S / I M A G E  :
<
<
EE15:    EQU         $
         BR          ACOMPT          < VERS LE MODULE SPECIFIQUE.
<
<        E R R E U R  :
<
E102:    EQU         $
         LAD         MERR
         BSR         APRINT          < ENVOI D'UN MESSAGE D'ERREUR.
         BR          AIMAG2          < VERS UNE REINITIALISATION DE TV.
         PAGE
<
<        L I S T E   D E S   S E C T E U R S   A   T R A I T E R  :
<
<        FONCTION :
<                      CE MODULE PERMET DE RECUPERER
<                    8 CARACTERES HEXAS ; CHAQUE BIT
<                    CORRESPONADANT A 1 SECTEUR D'1NE
<                    IMAGE SCRATCH ; UN BIT A 0
<                    INDIQUE QU'IL FAUT IGNOERER CE
<                    SECTEUR LORS DES OPERATIONS LOGIQUES
<                    ENTRE IMAGES ....
<
E2101:   EQU         $
         IF          TITV,X100,,X100
         LAD         ML1
         BSR         APRINT          < ENVOI D'UNE INVITATION.
         LAD         DEMFON
         SVC         0               < ENTREE DE CARACTERES CORRESPON-
                                     < DANT AUX SECTEURS 0 A 'F.
X100:    VAL         0
         LYI         4               < Y=4 CARACTERES A DECODER.
         BSR         AHEX            < CONVERSION HEXA --> BINAIRE.
         JNE         E2101           < ERREUR DE SYNTAXE.
         STA         PATS            < MEMORISATION DES SECTEURS 0 A 'F.
E2102:   EQU         $
         IF          TITV,X100,,X100
         LAD         ML2
         BSR         APRINT          < ENVOI D'1NE INVITATION.
         LAD         DEMFON
         SVC         0               < ENTREE DE 4 CARACTERES CORRES-
                                     < PONDANT AUX SECTEURS '10-'1F.
X100:    VAL         0
         BSR         AHEX            < CONVERSION HEXA --> BINAIRE
                                     < DES SECTEURS '10 A '1F.
         JNE         E2102           < ERREUR DE SYNTAXE.
         STA         PATS+1          < MEMORISATION SECTEURS '10-'1F.
         JMP         E410            < VERS L'2NTERROGATION.
<
<        R E T O U R   T E M P O R A I R E   A U   C C I  :
<
E2700:   EQU         $
         LAD         DEMCCI
         SVC         0
         JMP         E410            < VERS L'INTERROGATION SI !GO.
<
<        D E F I N I T I O N   D E   L A   M A T R I C E
<        D E   T R A N S F O R M A T I O N  :
<
E2800:   EQU         $
         BR          ADEF            < VERS LE MODULE SPECIFIQUE.
<
<
<        R E C H E R C H E   I M A G E   V I D E O  :
<
<
DESSIN:  EQU         $
         LAI         '05
         BSR         AGOSGN          < TENTATIVE DE CHARGEMENT.
         JE          E350            < OK , CHARGEMENT REUSSI.
         LAI         '06
         BSR         AGOSGN          < SINON TENTATIVE DE CHARGEMENT
                                     < SOUS :SYS.
         JNE         E102            < ET NON , L'IMAGE N'EXISTE PAS !!!
E350:    EQU         $
         LA          &ALONG          < VALIDATION DE L'IMAGE CHARGEE.
         JAGE        E102            < ERREUR : IL S'AGIT D'UNE
                                     < SIMULATION DE FLOPPY.
         CPI         -3
         JL          E102            < IL S'AGIT DE QUELQUE CHOISE...
         LR          A,X             < OK , X=INDEX DE RECUPERATION.
         LA          &LROUT          < SI <0 , C'EST UN INDEX DE
                                     < RECUPERATION DE LA ROUTINE
                                     < D'AFFICHAGE DES POINTS.
         STA         APOINT          < CE QUI NOUS DONNE L'ADRESSE
                                     < DE LA ROUTINE SET/RESET/INVER.
<
<
<        F I N   D E   C O N V E R S I O N  :
<
<
E2:      EQU         $
<
< INTERROGATION UTILISATEUR :
<
E410:    EQU         $
         IF          TITV,X100,,X100
         IC          KIN             < MEMORISATION QU'IL Y A EU AU
                                     < MOINS UN PASSAGE PAR ICI ...
         LAD         MINT
X100:    VAL         0
         BSR         ADESIR          < QUESTION-REPONSE UTILISATEUR.
<
<        REPONSES RECONNUES :
<                    D : ON RESTE SUR L'INTERROGATION (PERMET DONC
<                        DE RAFRAICHIR L'IMAGE VIDEO...) ,
<                        DE PLUS EDITE LE NBRE DE POINTS DE L'IMAGE
<                        COURANTE...
<                    G : VERS UNE REINITIALISATION ENTIERE ,
<                        (SAUF DE L'IMAGE SCRATCH !!!)
<                    S : SAVE L'IMAGE COURANTE EN SCRATCH ,
<                    L : ENTREE DE LA LISTE DES SECTEURS D'1NE
<                        IMAGE SCRATCH A PRENDRE EN COMPTE ,
<                    O : 'OR' ENTRE L'IMAGE COURANTE ET L'IMAGE SCRATCH,
<                    A : DE MEME AVEC 'AND' ,
<                    E : DE MEME AVEC 'EOR' ,
<                    H : DE MEME AVEC 'AD' ('HADDITION'...) ,
<                    Z : DE MEME AVEC 'SB' ('ZOUSTRACTION'....)
<                    U : IMAGE-COURANTE <-- IMAGE-SRACTCH ,
<                    N : PERMET UN 2EME ENTRY DANS TV , AFIN
<                        DE POUVOIR FAIRE DES CHANGEMENTS DE NOM ,
<                        ET DES SUPERPOSITIONS ,...
<                    I : INVERSION VIDEO DE L'IMAGE ,
<                    P : FILTRAGE D'UNE IMAGE ,
<                    C : PSEUDO-COLORIAGE DE L'IMAGE ,
<                    T : TRANSPOSITION DE L'IMAGE ,
<                    = : DEFINITION DE LA MATRICE DE TRANSFORMATION ,
<                    V : ENTREE DE LA VIRTUALISATION DE L'2MAGE ,
<                    M : MODIFICATION INTERACTIVE DE L'IMAGE VIDEO
<                        PAR LE CURSEUR GRAPHIQUE DE LA VISU ,
<                    - : DELETE L'IMAGE VIDEO SOUS SGN ,
<                    + INSERT L'IMAGE VIDEO SOUS SGN ,
<                    F : RETOUR A GE SANS RIEN FAIRE D'AUTRE ,
<                    W : RETOUR TEMPORAIRE AU CCI ,
<                    R : DEMANDE D'UNE SUITE GRAPHIQUE AU DESSIN (VI1).
<
         CPI         "R"
         JE          E400            < VERS L'ENREGISTREMENT DE LA
                                     < SUITE GRAPHIQUE DE L'IMAGE VIDEO.
         CPI         "V"
         JE          E2400           < VIRTUALISATION DE L'IMAGE.
         CPI         "L"
         JE          E2101           < ENTREE LISTE DES SECTEURS.
         CPI         "D"
         JE          EE15            < EDITION DU NBRE DE POINTS.
         CPI         "F"
         JE          E420            < VERS UN RETOUR IMMEDIAT A 'GE'.
         CPI         "W"
         JE          E2700           < DEMANDE DE RETOUR AU CCI.
         CPI         "-"
         JE          E430            < VERS UN DELETE-SGN DE L'IMAGE.
         CPI         "+"
         JE          E440            < VERS UN STORE SGN DE L'IMAGE.
         CPI         "="
         JE          E2800           < DEFINITION DE LA MATRICE.
         CPI         "I"
         JE          E870            < INVERSION VIDEO DE L'IMAGE.
         CPI         "P"
         JE          E2000           < DEMANDE DE FILTRAGE D'UNE IMAGE.
         CPI         "C"
         JE          E2010           < PSEUDO-COLORIAGE DE L'IMAGE.
         CPI         "T"
         JE          E2020           < TRANSPOSITION DE L'IMAGE.
         CPI         "M"
         JE          E790            < MODIFICATION INTERACTIVE DE
                                     < L'IMAGE VIDEO.
         CPI         "N"
         JE          E860            < 2EME ENTRY DANS LE PROCESSEUR.
         CPI         "O"
         JE          E842            < OR(IMAGE COURANTE,IMAGE SCRACTH).
         CPI         "A"
         JE          E843            < AND(IMAGE COURANTE,IMAGE SCRATCH)
         CPI         "E"
         JE          E844            < EOR(IMAGE COURANTE,IMAGE SCRATCH)
         CPI         "H"
         JE          E2550           < AD(IMAGE SCRATCH,IMAGE COURANTE).
         CPI         "Z"
         JE          E2551           < SB(IMAGE COURANTE,IMAGE SCRATCH).
         CPI         "U"
         JE          E2500           < RAPPEL DE L'IMAGE SCRATCH.
         CPI         "S"
         JE          E834            < SAVE L'IMAGE COURANTE EN SCRATCH.
         CPI         "G"
         JE          E833            < REINITIALISATION DE 'TV' ,
                                     < SAUF DE LA ZONE SCRATCH !!!
         IF          ORDI-"S",XWOR%,,XWOR%
         ADRI        -"0",A          < TEST DES FONCTIONS INDICATEUR TV.
         JAL         ERROR
         CPI         7               < DOIT ETRE ENTRE 0 ET 7.
         JG          ERROR
XWOR%1:  VAL         TVSIMU=0        < DECALAGE DES INDICATEURS.
         IF          XWOR%1,,X100,   < A APPLIQUER SI DIFFERENT DE ZERO.
         SLLS        XWOR%1
X100:    VAL         0
         TBT         13              < 0/1/2/3 OU 4/5/6/7 ???
         RBT         13              < RAZ A PRIORI...
         LR          A,B             < SAVE DANS B LA COULEUR...
         JNC         TVCOL1          < 0/1/2/3.
XWOR%1:  VAL         TVIN=0
XWOR%1:  VAL         NBITMO-1-XWOR%1
         SBT         XWOR%1          < 4/5/6/7.
TVCOL1:  EQU         $
         STA         STDKU+3         < STORE DES INDICATEURS.
         LAD         STDKU           < STABILISATION DE L'IMAGE
         SVC         0               < SI ON EST SOUS :SYS
         STB         STDKU+3         < RAZ LE BIT IN A PRIORI...
         JMP         E410            < VERS UNE NOUVELLE INTERROGATION.
XWOR%:   VAL         0
ERROR:   EQU         $               < ERREUR 2EME NIVEAU INTERRO.
         LAD         MERR
         BSR         APRINT          < REPONSE INCOMPREHENSIBLE ??
         JMP         E410            < VERS UNE NOUVELLE INTERROGATION.
<
<        C H A N G E M E N T   D E   N O M  :
<
E860:    EQU         $
         IC          INIT            < INIT#0 : AINSI ON NE REINITIA-
                                     < LISERA PAS LE FOND DE L'IMAGE ...
<
<        R E I N I T I A L I S A T I O N   G E N E R A L E   ,
<        S A U F   L ' I M A G E   S C R A T C H  :
<
E833:    EQU         $
         BR          AIMAG2          < VERS UNE 2EME ENTRY ...
<
<        V I R T U A L I S A T I O N   D E   L ' I M A G E  :
<
E2400:   EQU         $
         BR          AVIRT           < VERS LE MODULE SPECIFIQUE.
<
<        F I L T R A G E   I M A G E  :
<
E2000:   EQU         $
         LBI         0               < B=0 : DEMANDE DE FILTRAGE.
         BR          AFILTR          < VERS LE MODULE DE FILTRAGE.
<
<        P S E U D O - C O L O R I A G E  :
<
E2010:   EQU         $
         LBI         1               < B=1 : PSEUDO-COLORIAGE IMAGE.
         BR          AFILTR
<
<        T R A N S P O S I T I O N   D E   L ' I M A G E  :
<
E2020:   EQU         $
         LBI         -1              < B=-1 : DEMANDE DE TRANSPOSITION.
         BR          AFILTR
<
<        I N V E R S I O N   V I D E O   D E   L ' I M A G E  :
<
E870:    EQU         $
         LX          ALIMAG          < X=NBRE DE MOTS DE L'IMAGE.
E450:    EQU         $
         LA          &AIMAG          < A=1 MOT DE L'IMAGE.
         EORI        -1              < INVERSION BIT A BIT DE L'IMAGE.
         STA         &AIMAG          < ET MISE A JOUR DE L'IMAGE.
         JDX         E450            < AU MOT SUIVANT.
         LA          APOINT          < ACCES A LA ROUTINE COURANTE.
         LB          ARESET          < SET COURANT A PRIORI.
         CP          ASET            < EST-CE SET ???
         JE          E451            < OUI , ON PASSE DONC EN RESET.
         CP          ARESET          < EST-CE RESET ???
         JNE         E410            < NON , INVER QUE L'ON LAISSE
                                     < TELLE QU'ELLE EST ...
         LB          ASET            < ET OUI , ON PASSE DONC EN SET.
E451:    EQU         $
         STB         APOINT          < MISE EN PLACE DE LA NOUVELLE
                                     < ROUTINE SET/RESET/INVER.
         JMP         E410            < PUIS ENFIN VERS L'INTERROGATION.
<
<        D E L E T E - S G N   D E   L ' I M A G E  :
<
E430:    EQU         $
         LAI         '03
         BSR         AGOSGN          < ESSAI DE DELETE SGN.
E102J:   JNE         E102            < ERREUR : LE NOM N'EXISTE PAS ...
         JMP         E410            < VERS LA DEMANDE DES DESIRS
                                     < DE L'UTILISATEUR ....
<
<        S T O R E - S G N   D E   L ' I M A G E  :
<
E440:    EQU         $
         LA          APOINT          < RECUPERATION DE L'ADRESSE DE
                                     < LA ROUTINE SET/RESET/INVER.
         LBI         -3              < SET A PRIORI.
         CP          ASET
         JE          E960            < EFFECTIVEMENT C'EST SET.
         LBI         -2              < RESET A PRIORI.
         CP          ARESET
         JE          E960            < EFFECTIVEMENT C'EST RESET.
         LBI         -1              < ET BIEN NON , C'EST INVERS.
E960:    EQU         $
         STB         &ALONG          < MAJ DE LA LONGUEUR (?) , POUR
                                     < DISTINGUER UNE IMAGE VIDEO
                                     < D'UNE IMAGE DE SIMULATION FLOPPY.
         LAI         '03
         BSR         AGOSGN          < TENTATIVE DE DELETE PRELIMINAIRE.
         LAI         '04
         BSR         AGOSGN          < TENTATIVE DE STORE.
         IF          ORDI-"T",XWOR%,,XWOR%
         JNE         E102            < ERREUR DE STORE ...
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         JNE         E102J           < ERREUR DE STORE ...
XWOR%:   VAL         0
         JMP         E410            < VERS LA DEMANDE DES DESIRS
                                     < DE L'UTILISATEUR.
<
<        R E T O U R   A   ' G E '  :
<
E420:    EQU         $
         BR          AGOGE           < AIN'T IT HARD ???
<
<        S A V E   L ' I M A G E   C O U R A N T E   E N   S C R A T C H
<
E834:    EQU         $
         LY          WDK+2           < Y=256 (POUR TRANSLATER
                                     < L'@OCTET DU BUFFER DE SAVE).
         LB          IMAG2           < B=@OCTET INITIALE DU BUFFER
                                     < DE SAVE.
         STZ         WDK+3           < RAZ DU NUMERO DE SECTEUR COURANT.
         LXI         LIMAG/128       < X=NBRE DE SECTEURS A SAVER.
         LAD         WDK
<
< BOUCLE DE SAVE DE L'IMAGE COURANTE PAR SECTEUR :
<
E832:    EQU         $
         STB         WDK+1           < MAJ DE L'@OCTET DU BUFFER.
         PSR         X               < SAVE LE DECOMPTE DE SECTEURS.
         SVC         0               < SAVE LE SECTEUR COURANT.
         PLR         X               < RESTAURE LE DECOMPTE DES SECTEUR.
         IC          WDK+3           < PROGRESSION DU NUMERO DE SECTEUR
                                     < COURANT.
         ADR         Y,B             < PROGRESSION DE L'@OCTET BUFFER.
         JDX         E832            < AU SUIVANT ...
E410J:   JMP         E410            < VERS L'INTERRO. UTILISATEUR.
<
<        O P E R A T I O N S   L O G I Q U E S   E N T R E
<        I M A G E   C O U R A N T E   E T    I M A G E
<                    S C R A T C H  :
<
<        FONCTION :
<                      CE MODULE PERMET DE REALISER
<                    LES 3 FONCTION SUIVANTES , SELON
<                    LE MODE D'APPEL :
<                    O : IMAGE-COURANTE=IMAGE-COURANTE.OR.IMAGE-SCRATCH
<                    A : IMAGE-COURANTE=IMAGE-COURANTE.AND.IMAGE SCRATCH
<                    E : IMAGE-COURANTE=IMAGE-COURANTE.EOR.IMAGE-SCRATCH
<                    H : IMAGE-COURANTE=IMAGE-COURANTE.AD.IMAGE SCRATCH
<                    Z : IMAGE-COURANTE=IMAGE-COURANTE.SB.IMAGE SCRATCH
<        AINSI QUE :
<                    U : IMAGE-COURANTE=IMAGE-SCRATCH
<                        (U='UP')
<
E2500:   EQU         $
         IF          ORDI-"T",XWOR%,,XWOR%
         LAI         '1D             < CODE DU NOP AFIN DE NE PAS
                                     < MELANGER L'IMAGE SCRATCH AVEC
                                     < L'IMAGE COURANTE LORS DU RAPPEL.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LAI         '04             < CODE DU NOP AFIN DE NE PAS
                                     < MELANGER L'IMAGE SCRATCH AVEC
                                     < L'IMAGE COURANTE LORS DU RAPPEL.
XWOR%:   VAL         0
         JMP         E845
E2550:   EQU         $               < AD.
         LAI         'A9             < CODE DU AD INDIRECT SUR L.
         JMP         E845
E2551:   EQU         $               < SB.
         LAI         'A8             < CODE DU SB INDIRECT SUR L.
         JMP         E845
E842:    EQU         $               < OR.
         LAI         'B2             < CODE DU OR INDIRECT SUR L.
         JMP         E845
E843:    EQU         $               < AND.
         LAI         'B3             < CODE DU AND INDIRECT SUR L.
         JMP         E845
E844:    EQU         $               < EOR.
         LAI         'B4             < CODE DU EOR INDIRECT SUR L.
E845:    EQU         $
         STBY        &AOP            < MISE EN PLACE DE L'INSTRUCTION
                                     < VARIABLE D'OPERATION LOGIQUE
                                     < ENTRE IMAGES.
<
< ENTREE DU NOM DE LA NOUVELLE IMAGE COURANTE :
<
         IF          TITV,X100,,X100
         LAD         MNOM
         BSR         APRINT          < ENVOI D'UNE INVITATION.
         LAD         DEMIN
         SVC         0               < ENTREE DU NOM.
X100:    VAL         0
         IF          TITV,,X100,
         BSR         AINOM           < RECUPERATION NOM DANS ITEM1.
X100:    VAL         0
<
< OPERATION LOGIQUE ENTRE LES 2 IMAGES :
<
         BR          AOPER           < VERS L'OPERATION LOGIQUE ...
<
<
<        M O D I F I C A T I O N   I N T E R A C T I V E  :
<        D E   L ' I M A G E   V I D E O  :
         IF          TITV,,X100,
<
<
<        A T T E N T I O N  :
<                      POUR QUE L'INTERACTION AIT LIEU,
<                    IL FAUT :
<                    1- LA COMMANDE 'G' DOIT ETRE UTILISEE
<                    A LA SUITE DE 'M'; SA VALIDITE NE PORTE
<                    QUE JUSQU'A LA PROCHAINE COMMANDE
<                    PRIMAIRE.
<                    2- LE NVP='0B DOIT ETRE ASSIGNE.
X100:    VAL         0
<
<
<        COMMANDES RECONNUES :
         IF          TITV,,X100,
<                    G : VALIDATION DE L'INTERACTION SUR '0B
<                        JUSQU'A LA PROCHAINE COMMANDE
<                        PRIMAIRE,
X100:    VAL         0
<                    F : FIN D'INTERACTION ,
<                    O : MISE A L'ORIGINE DE 'A' ,
<                    A : ORIGINE D'UN SEGMENT ,
<                    B : EXTREIMITE D'UN SEGMENT ; LE SEGMENT
<                        AB EST TRACE SUIVANT 'APOINT' ,
<                        PUIS B DEVIENT A ,
<                    S : IDEM A 'B' , SAUF QUE A NE CHANGE PAS ,
<                    - : MODE TRACE 'RESET' (NOIR) ,
<                    + : MODE TRACE 'SET' (BLANC) ,
<                    E : MODE 'SET' SI 'RESET'/'RESET' SI 'SET' ,
<                    I : MODE TRACE 'INVER' (INVERSION) ,
<                    C : COMMANDE NEUTRE (CURSEUR) ,
<                    N : REINITIALISATION DE LA TOPO DES BANDES ,
<                    M : MONTERER A TV/TI LA BANDE QUE
<                        L'ON VIRTUALISE ,
<                    T : MONTRER A TV/TI LA BANDE REELLE
<                        ASSOCIEE A UNE BANDE VIRTUELLE 'M' ,
<                    V : COLORIAGE VOLET A 1 SUR FOND 0 ,
<                        (ITEST=1)
<                    W : COLORIAGE VOLET A 0 SUR FOND 1 ,
<                        (ITEST=0)
<                    0 : MISE A NOIR DU POINT COURANT ,
<                    1 : MISE A BLANC DU POINT COURANT.
<
<                      LE POINT COURANT EST DEFINI PAR
<                    LA POSITION COURANTE DU CURSEUR
<                    GRAPHIQUE ('GIN').
<
E791:    EQU         $               < RETURN DE L'INTERACTION.
         PLR         A
         STA         APOINT          < RESTAURE L'APOINT D'ENTREE.
         IF          ORDI-"T",XWOR%,,XWOR%
         JMP         E410            < VERS L'INTERROGATION '>'.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         JMP         E410J           < VERS L'INTERRO. UTILISATEUR.
XWOR%:   VAL         0
E790:    EQU         $               < ENTRY DE L'INTERACTION.
         LA          APOINT          < SAVE L'APOINT D'ENTRY.
         PSR         A
E780:    EQU         $
<
< MISE A L'ORIGINE DE A ET B :
<
         LA          NLIG            < Y INITIAL.
         STZ         X1              < X1=0.
         STA         Y1              < Y1=NLIG.
         STZ         X2              < X2=0.
         STA         Y2              < Y2=NLIG.
<
< INTERACTION CURSEUR :
<
         IF          TITV,,X100,
         LAI         'FF
         STBY        CURSOR          < A PRIORI : PAS D'INTERACTION !!!
X100:    VAL         0
E770:    EQU         $
         IF          ORDI-"S",XWOR%,,XWOR%
         LAD         STDKU
         SVC         0               < VISUALISATION AVANT LE CURSEUR...
XWOR%:   VAL         0
         LAD         OG
         SVC         0               < MISE EN GRAPHIQUE DE LA VISU.
         LAD         CU
         SVC         0               < MISE EN FONCTION DU CURSEUR.
         LAD         LCU
         SVC         0               < LECTURE DU CURSEUR GRAPHIQUE.
<
< STABILISATION DE L'2MAGE :
<
         IF          ORDI-"T",XWOR%,,XWOR%
         LA          ASP3
         JAE         E4002
         ACTD        'C
XWOR%:   VAL         0
E4002:   EQU         $               < ON N'EST PAS SSOUS :SYS ...
<
< COORDONNEES DU POINT COURANT :
<
         LA          CURSOR+1        < A=Y(CURSEUR).
         SLRS        DEDY            < PRISE EN COMPTE DE LA DEFINITION
                                     < RELATIVE DE LA VIDEO.
         SB          NLIG            < DU AU FAIT QUE LES AXES Y
                                     < DE LA VIDEO ET DES VISUS
                                     < SONT INVERSES.
         NGR         A,Y             < Y=Y(POINT COURANT).
         LA          CURSOR+2        < A=X(CURSEUR).
         SLRS        DEDX            < PRISE EN COMPTE DE LA DEFINITION
                                     < RELATIVE DE LA VIDEO.
         LR          A,X             < X=X(POINT COURANT).
<
< SIMULATION D'UN CURSEUR SUR LA TV :
<
         LB          TEMPO           < B=NBRE DE CLIGNOTTEMENTS (PAIR).
E781:    EQU         $
         IF          ORDI-"S",XWOR%,,XWOR%
         PSR         X
         LAD         STDKU
         SVC         0               < EXECUTION MAITRE DE SP3.
         PLR         X
XWOR%:   VAL         0
         BSR         AINVER          < NBRE PAIR D'INVERSION DU POINT
                                     < COURANT ...
         ADRI        -1,B            < DECOMPTE DES CLIGNOTEMENTS.
         CPZR        B               < EST-CE FINI ???
         JG          E781            < NON , ENCORE ...
<
< ANALYSE DES DESIRS DE L'UTILISATEUR :
<
         LBY         CURSOR          < A=CARACTERE DE DEBLOCAGE.
         IF          TITV,,X100,
         CPI         'FF             < Y-A-T'IL EU INTERACTION ???
         JNE         E6000           < OUI , (A) EST BON ,
         BSR         ADESIR          < NON : SIMULATION DE L'ENTREE ...
E6000:   EQU         $
X100:    VAL         0
         CPI         "B"
         JE          E774            < EXTREMITE SEQUENTIELLE
                                     < D'UN SEGMENT AB.
         CPI         "A"
         JE          E773            < ORIGINE D'UN SEGMENT.
         CPI         "0"
         JE          E771            < VERS LA MISE A NOIR DU POINT.
         CPI         "1"
         JE          E772            < VERS LA MISE A BLANC DU POINT.
         CPI         "S"
         JE          E775            < EXTREMITE ETOILEE D'UN SEGMENT.
         CPI         "-"
         JE          E776            < MISE EN MODE 'RESET' (NOIR).
         CPI         "+"
         JE          E777            < MISE EN MODE 'SET' (BLANC).
         CPI         "E"
         JE          E785            < VERS LA PERMUTATION 'SET'/'RESET'
         CPI         "I"
         JE          E778            < MISE EN MODE 'INVER' (INVERSION).
         CPI         "C"
         JE          E770            < COMMANDE NEUTRE ...
         CPI         "F"
         JE          E791            < FIN DE L'INTERACTION , RETOUR
                                     < A L'INTERROGATION ('>').
         CPI         "O"
         JE          E780            < MISE A L'ORIGINE DE A ET DE B.
                                     < COIN EN BAS A GAUCHE).
         CPI         "V"
         JE          E1010           < VERS LE COLORIAGE D'UN VOLET.
         CPI         "W"
         JE          E1020           < COLORIAGE INVERSE D'1N VOLET.
         CPI         "N"
         JE          E2300           < REINITIALISATION DE LA TOPO.
         CPI         "M"
         JE          E2301           < INDICATION BANDE A VIRTUALISER.
         CPI         "T"
         JE          E2302           < INDICATION DE LA BANDE REELLE.
         IF          TITV,,X100,
         CPI         "G"             < VALIDATION INTERACTION '0B ???
         JE          VALCU           < ET OUI...
X100:    VAL         0
         LAD         MERR
         BSR         APRINT          < DESIR INCOMPREHENSIBLE ...
         JMP         E770            < VERS UNE NOUVELL INTERACTION.
<
< MISE A NOIR DU POINT (X,Y) :
<
E771:    EQU         $
         BSR         ARESET          < RESET DU POINT.
         JMP         E770            < VERS L'INTERACTION.
<
< MISE A BLANC DU POINT (X,Y) :
<
E772:    EQU         $
         BSR         ASET            < SET DU POINT.
         JMP         E770            < VERS L'INTERACTION.
<
< ORIGINE 'A' D'UN SEGMENT :
<
E773:    EQU         $
         STX         X1              < CHANGEMENT DE M1 ('A').
         STY         Y1              < CHANGEMENT DE M1 ('A').
         JMP         E770            < VERS UNE NOUVELLE INTERACTION.
<
< EXTREMITE 'B' DU SEGMENT AB :
<
E774:    EQU         $
         STX         X2              < CHANGEMENT DE POINT M2 ('B').
         STY         Y2              < CHANGEMENT DE POINT M2 ('B').
         BSR         ASEG            < TRACE DU SEGMENT AB.
         STX         X1              < M1 <-- M2.
         STY         Y1              < ('B' DEVIENT LE NOUVEAU 'A').
         JMP         E770            < VERS UNE NOUVELLE INTERACTION.
<
< EXTREMITE 'S' D'UN SEGMENT :
<
E775:    EQU         $
         STX         X2              < CHANGEMENT DE POINT M2 ('S').
         STY         Y2              < CHANGEMENT DE POINT M2 ('S').
         LA          X1
         LB          Y1
         PSR         A,B             < SAVE LE POINT 'A' (M1).
         BSR         ASEG            < TRACE DU SEGMENT M1M2.
         PLR         A,B             < RESTAURE LE POINT 'A' (M1).
         STA         X1
         STB         Y1
         JMP         E770            < VERS UNE NOUVELLE INTERACTION.
<
< MODES DE TRACE DES SEGMENTS :
<
E776:    EQU         $
         LB          ARESET
         JMP         E779
E777:    EQU         $
         LB          ASET
         JMP         E779
E778:    EQU         $
         LB          AINVER
E779:    EQU         $
         STB         APOINT          < MAJ TEMPORAIRE DE APOINT.
         JMP         E770            < VERS L'INTERACTION.
E785:    EQU         $
         LB          ASET            < 'RESET' COURANT A PRIORI.
         LA          APOINT
         CP          ARESET
         JE          E779            < PASSAGE EN MODE 'SET'.
         LB          ARESET          < MODE 'SET' COURANT A PRIORI.
         CP          ASET
         JE          E779            < PASSAGE AU MODE 'RESET'.
         JMP         E770            < MODE INCHANGE SI 'INVER'.
<
<        C O L O R I A G E   A   0   S U R   F O N D   1  :
<
E1020:   EQU         $
         LAI         0               < CONVENTIONS INVERSEES.
         JMP         E1021
<
<        C O L O R I A G E   A   1   S U R   F O N D   0  :
<
E1010:   EQU         $
         LAI         1               < CONVENTIONS NORMALES.
E1021:   EQU         $
         STA         ITEST           < SAVE LES CONVENTIONS.
         LY          NLIG            < Y=INDEX VERTICAL.
<
< BALAYAGE VERTICAL (Y) :
<
E1001:   EQU         $
         LX          NPPL            < X=INDEX HORIZONTAL.
<
< BALAYAGE HORIZONTAL (X) :
<
E1002:   EQU         $
<
< RECHERCHE DU DERNIER POINT A 1 DE LA LIGNE (Y) :
<
         BSR         ATEST           < TEST DU POINT (X,Y).
         JC          E1003           < ON S'ARRETE SUR LE DERNIER
                                     < POINT A 1.
         ADRI        -1,X            < SI 0 , PASSAGE AU POINT
                                     < PRECEDENT DE LA LIGNE.
         CPZR        X               < DEBUT DE LIGNE ???
         JGE         E1002           < NON , PASSAGE AU POINT PRECEDENT.
<
< CAS D'UNE LIGNE NOIRE , OU FIN DE
< TRAITEMENT D'UNE LIGNE :
<
E1004:   EQU         $
         ADRI        -1,Y            < PASSAGE A LA LIGNE PRECEDENTE.
         CPZR        Y               < DEBUT D'IMAGE ???
         JGE         E1001           < NON , LIGNE PRECEDENTE ...
         JMP         E770            < C'EST FINI , VERS L'INTER-
                                     < ACTION DU CURSEUR.
<
< CAS OU ON A TROUVE UN DERNIER POINT
< BLANC (1) SUR LA LIGNE COURANTE :
<
E1003:   EQU         $
         LR          X,B             < B=COORDONEE X DU DERNIER POINT
                                     < BLANC (1) DE LA LIGNE (Y).
         LXI         0               < RETOUR AU DEBUT DE LA LIGNE (Y).
<
< RECHERCHE DU 1ER POINT BLANC :
<
E1005:   EQU         $
         BSR         ATEST           < TEST DU POINT (X,Y).
         JC          E1006           < ON S'ARRETE SUR LE 1ER POINT
                                     < BLANC (1) TROUVE.
         ADRI        1,X             < SINON , PASSAGE AU POINT SUIVANT.
         JMP         E1005           < PARCOURS DE LA LIGNE (Y)
                                     < SANS PRECAUTIONS , CAR ON EST
                                     < SUR QU'IL Y A AU MOINS UN
                                     < POINT BLANC (PEUT-ETRE UNIQUE??).
<
< CAS OU ON A TROUVE UN 1ER POINT BLANC (1) :
<
E1006:   EQU         $
         CPR         X,B             < A-T'ON BALAYE TOUS LES POINTS
                                     < DU 1ER AU DERNIER BLANC ???
         JE          E1004           < OUI , ALORS , IL FAUT PASSER
                                     < A LA LIGNE PRECEDENTE.
         BSR         APOINT          < SINON , ON TRAITE CE POINT
                                     < (X,Y) A 1 (BLANC).
         ADRI        1,X             < PASSAGE AU POINT SUIVANT.
         JMP         E1006
<
<        T O P O G R A P H I E   D E S   B A N D E S
<        H O R I Z O N T A L E S  :
<
< INDICATION D'UNE BANDE VIRTUELLE :
<
E2301:   EQU         $
         LR          Y,A             < A=NUMERO DE LIGNE COURANTE.
         SLRS        3               < A=NUMERO DE BANDE COURANTE.
         STA         BANDE           < SAVE LA BANDE VIRTUELLE COURANTE.
         BR          AE770           < VERS L'INTERROGATION ...
<
< BANDE REELLE D'UNE BANDE VIRTUELLE :
<
E2302:   EQU         $
         LX          BANDE           < X=BANDE VIRTUELLE COURANTE.
         LR          Y,A             < A=LIGNE COURANTE.
         SLRS        3               < A=BANDE COURANTE.
         STBY        &ATOPO          < SAVE LA TOPOGRAPHIE.
         BR          AE770           < VERS L'INTERROGATION ...
<
< REINITIALISATION DE LA TOPO :
<
E2300:   EQU         $
         LAI         LIMAG/128-1     < A=NUMERO DE LA DERNIERE BANDE.
E2303:   EQU         $
         LR          A,X             < X=NUMERO REGISTRE TOPOGRAPHIQUE.
         STBY        &ATOPO          < REGISTRE <-- NUMERO DE REGISTRE.
         ADRI        -1,A            < DECOMPTE.
         JAGE        E2303           < PARCOURS DE LA MEMOIRE TOPO.
         STZ         BANDE           < RAZ LA BANDE VIRTUELLE COURANTE.
         BR          AE770           < VERS L'INTERROGATION ...
         IF          TITV,,X100,
<
<        V A L I D A T I O N   I N T E R A C T I O N   ' 0 B  :
<
VALCU:   EQU         $
         LA          CU
         ADRI        -3,A            < CALCUL DE 'OG' A PARTIR DE 'CU'.
         STA         OG              < OG POSSEDE CETTE VALEUR JUSQU'A
                                     < LA PROCHAINE COMMANDE PRIMAIRE.
         BR          AE770           < VERS L'INTERROGATION SUR '0B.
X100:    VAL         0
<
<        E N T R E E   D E   L A   T O P O G R A P H I E  :
<
<        FONCTION :
<                      CE MODULE PERMET D'INITIALISER DIRECTEMENT
<                    LES REGISTRES TOPOGRAPHIQUES DE L'IMAGE ;
<                    CEUX-CI SONT BAPTISES 0,....,9,A,...,V.
<
<        CAS DES ERREURS :
<                      LA TOPOGRAPHIE EST ALORS
<                    REINITIALISEE ; UNE ERREUR
<                    VOLONTAIRE PERMET DONC DE
<                    REINITIALISER LA TOPOGRAPHIE ...
<
VIRT:    EQU         $
         IF          TITV,X100,,X100
         LAD         MTOPO
         BSR         APRINT          < ENVOI DES NUMEROS DE REGISTRES.
X100:    VAL         0
         LXI         0               < X=NUMERO DE REGISTRE COURNT.
<
< BOUCLE DE RECUPERATION :
<
VIRT1:   EQU         $
         PSR         X               < SAVE LE NUMERO DE REGISTRE.
         LAI         0               < @MESSAGE=0.
         BSR         ADESIR          < RECUPERATION D'UN CARACTERE.
         PLR         X               < RESTAURE LE NUMERO DE REGISTRE.
         ADRI        -'30,A          < CONVERSION BINAIRE.
         JAL         VIRT2           < ERREUR ...
         CPI         9               < EST-CE UN CHIFFRE ???
         JLE         VIRT3           < OUI , OK.
         ADRI        -'41+'39+1,A    < SINON , SUITE CONVERSION.
         CPI         9               < EST-CE UNE LETTRE ???
         JLE         VIRT2           < NON , ERREUR.
         CPI         LIMAG/128-1     < EST-CE UN BON NUMERO ???
         JG          VIRT2           < NON , ERREUR.
VIRT3:   EQU         $               < CAS DES BONS NUMEROS VIRTUELS.
         STBY        &ATOPO          < MEMORISATION TOPOGRAPHIE.
         ADRI        1,X             < PASSAGE AU REGISTRE SUIVANT.
         LR          X,A
         CPI         LIMAG/128       < EST-CE FINI ???
         JL          VIRT1           < NON , ON CONTINUE.
VIRT5:   EQU         $
         BR          AINTER          < SI OUI , VERS L'2NTERROGATION.
<
< CAS DES ERREURS :
<
VIRT2:   EQU         $
         LR          X,Y             < Y=INDEX COURANT DE LA TOPO.
         LAI         LIMAG/128-1     < A=NUMERO DE LA DERNIERE BANDE.
VIRT4:   EQU         $
         LR          A,X             < LE REGISTRE TOPOGRAPHIQUE EST
         STBY        &ATOPO          < AVEC SON PROPRE NUMERO.
         ADRI        -1,A            < PASSAGE AU NUMERO PRECEDENT.
         JAGE        VIRT4           < AU REGISTRE PRECEDENT ...
         CPZR        Y               < L'ERREUR S'EST-ELLE PRODUITE SUR
                                     < LE 1ER REGISTRE TOPO ???
         JE          VIRT5           < OUI , ON CONSIDERE QU'IL
                                     < N'Y AP AS ERREUR ....
         BR          AERR            < VERS LE MESSAGE D'ERREUR.
<
<        O P E R A T I O N   L O G I Q U E
<        E N T R E   I M A G E S  :
<
<        ORIGINE :
<                    BIT0=0 : SENS CROISSANT ,
<                        =1 : SENS DECROISSANT ,
<                             BIT1=0 : FAIRE UN MIROIR OK ,
<                                  1 : SUIVANT LE BIT2 :
<                                      BIT2=0 : PAS DE MIROIR, PERMET
<                                               DONC DES EFFETS TRES
<                                               SPECIAUX...
<                                           1 : CHOIX SELECTIF DE LA
<                                               COULEUR DE L'IMAGE
<                                               COURANTE.
<                    BIT14-15 : INDEX INITIAL XIMAG SI BIT2=0,
<                               SELECTION DES COULEURS SI BIT2=1.
<
<
OPER:    EQU         $
<
< DEMANDE DE L'ORIGINE DE L'IMAGE COURANTE :
<
         IF          TITV,X100,,X100
         LAD         MORG
         BSR         APRINT          < ENVOI D'1NE INVITATION.
         LAD         DEMFON
         SVC         0               < ENTREE DE 4 CARACTERES.
X100:    VAL         0
         LYI         4
         BSR         AHEX            < CONVERSION DES 4 CARACTERES
                                     < CONTENUS DANS REP.
                                     < (ET DANS L'ITEM1 POUR 'TI')
         IF          ORDI-"T",XWOR%,,XWOR%
         JNE         OPER            < ERREUR DE CONVERSION ...
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         JE          E475X           < REPONSE HEXA OK...
         XR          A,X
         CPI         1               < 1 SEUL CARACTERE RECONNU ???
         XR          A,X
         JNE         OPER            < NON, ERREUR...
         CPI         'E              < OUI, EST-CE 'E OU 'F ???
         JL          OPER            < NON, ERREUR...
         OR          RWDKU+3         < OUI, ON FORME XYZE/XYZF, OU XYZ0 EST
                                     < L'ADRESSE DKU COURANTE,
         SCRS        XDKU            < MISE SOUS FORME EXYZ/FXYZ,
         ADRI        1,A             < ET INCREMENTATION AUTOMATIQUE...
E475X:   EQU         $
XWOR%:   VAL         0
<
< VALIDATION DE L'ORIGINE :
<
         LBI         1               < +1 : SENS CROISSANT A PRIORI ...
         LYI         0               < INDEX INITIAL DE PARCOURS
                                     < POSITIF D'1N SECTEUR.
         LXI         0               < DEPART SUR LE 1ER SECTEUR
                                     < DE L'IMAGE SCRATCH A PRIORI.
         JAGE        E475            < OK, SENS CROISSANT...
         NGR         B,B             < SINON : B=-1 (DECROISSANT).
         LYI         127             < INDEX INITIAL DE PARCOURS
                                     < NEGATIF DE SECTEUR.
         LXI         LIMAG/128-1     < DEPART SUR LE DERNIER SECTEUR
                                     < DE L'IMAGE SCRATCH.
         STZ         MIROR           < MIROIR A PRIORI (=0).
         TBT         1               < SUPPRESSION DE MIROIR DEMANDEE???
         JNC         E2840           < 0 : NON , MIROIR OK.
         TBT         2
         JC          COOL1           < CHOIX COULEUR IMAGE COURANTE.
         STA         MIROR           < 1 : SUPPRESSION DU MIROIR (#0).
         RBT         1               < SUPPRESSION DE L'INDICATEUR (1).
E2840:   EQU         $
         RBT         0               < RAZ LE BIT0 DE L'ORIGINE.
E475:    EQU         $
         STB         SENSX           < SENSX=+1/-1.
         STY         SECTX           < SAVE L'INDEX INITIAL DE PARCOURS
                                     < DE SECTEUR.
         CP          ALIMAG          < VALIDATION DE L'ORIGINE PAR
                                     < RAPPORT A LA LONGUEUR DE IMAGE.
         STA         XIMAG           < OK , ON INITIALISE XIMAG
                                     < AVEC L'ORIGINE.
         IF          ORDI-"S",XWOR%,,XWOR%
         JGE         CROTA           < C'EST PEUT-ETRE UNE MODIFICATION DES
                                     < REGISTRES DE COULEUR SI BIT1=1...
XWOR%:   VAL         0
         ADRI        -127,Y
         SBR         Y,B             < B=VALEUR DE TEST DE FIN DU
                                     < PARCOURS D'UN SECTEUR.
         STX         RDK+3           < INITIALISATION NUMERO SECTEUR
                                     < COURANT DE L'IMAGE SCRATCH.
         LXI         LIMAG/128       < X=NBRE DE SECTEURS A LIRE.
<
< BOUCLE D'OPERATIONS :
<
E840:    EQU         $
         PSR         X               < SAVE LE DECOMPTE DES SECTEURS.
<
< ETAT DU SECTEUR COURANT :
<
         PSR         B
         LA          PATS
         LB          PATS+1          < (A,B)=LISTE DES SECTEURS.
         LX          RDK+3           < X=SECTEUR COURANT.
         TBT         0,X             < FAUT-IL TRAITER LE SECTEUR (X) ???
         PLR         B
         LAI         0
         ADCR        A
         STA         INDICS          < A=0 : NE PAS TRAITER LE SECTEUR.
         JAE         E2104           < INUTILE DE LIRE LE SECTEUR (X).
<
< ENTREE SECTEUR COURANT :
<
         LBY         &ATOPO          < A=SECTEUR REEL ASSOCIE AU
                                     < SECTEUR VIRTUEL (X).
         STA         RDK+3           < MAJ DE LA DEMANDE DE LECTURE.
         PSR         X               < ET SAVE LE NUMERO DE SECTEUR
                                     < VIRTUEL.
         LAD         RDK
         SVC         0               < LECTURE DU SECTEUR COURANT.
         PLR         X
         STX         RDK+3           < RESTAURE LE SECTEUR VIRTUEL
                                     < COURANT.
E2104:   EQU         $
         LA          RDK+3
         AD          SENSX
         STA         RDK+3           < CALCUL DU NUMERO DU SECTEUR
                                     < SUIVANT.
         LY          SECTX           < REINITIALISATION DE L'INDEX DE
                                     < PARCOURS DU SECTEUR COURANT.
E841:    EQU         $
         LR          Y,X             < X=INDEX COURANT DANS SECTEUR.
         CPZ         INDICS          < OPERE-T'ON AVEC LE SECTEUR
                                     < COURANT ????
         JE          E2100           < NON , ON NE FAIT PAS L'OPERATION.
         LA          &ASECT1         < ACCES AU MOT COURANT SECTEUR.
         CPZR        B               < EST-CE UN PARCOURS CROISSANT ???
         JG          E1300           < OK , (A) EST BON.
         CPZ         MIROR           < FAUT-IL MIROITER LE MOT ???
         JNE         E1300           < NON , ON SAUTE LE MIROIR !!!
<
< CAS D'UN PARCOURS DECROISSANT :
< IL FAUT MIROITER (???) LE MOT COURANT
< DU SECTEUR ; A NOTER QUE B='FFFF (-1).
<
         LXI         16              < X=NBRE DE BITS A INVERSER.
E1301:   EQU         $
         TBT         31,X            < TEST UN BIT DE A.
         JC          E1302           < 1 : IL L'EST DEJA DANS B.
         NGR         X,X             < 0 : IL FAUT LE RAZER DANS B.
         RBT         0,X             < ARZ EN MIROIR.
         NGR         X,X             < RESTAURE X.
E1302:   EQU         $
         JDX         E1301           < AU BIT SUIVANT ...
         LR          B,A             < A=MOT COURANT DU SECTEUR VU
                                     < DANS UN MIROIR.
         LBI         -1              < RESTAURE (B)=-1 : VALEUR DE
                                     < TEST DE (Y).
<
< OPERATION ELEMENTAIRE :
<
E1300:   EQU         $
         LX          XIMAG           < X=INDEX COURANT DE L'IMAGE
                                     < COURANTE.
OP:      OR          &AIMAG1         < LE MOT COURANT DE L'IMAGE
                                     < COURANTE EST OPERER AVEC LE
                                     < MOT COURANT DU SECTEUR COURANT.
         STA         &AIMAG1         < LE RESULTAT EST REMIS DANS
                                     < L'IMAGE COURANT.
E2100:   EQU         $               < CAS DES SECTEURS IGNORES.
         LA          XIMAG
         ADRI        1,A             < INCREMENTATION DE XIMAG.
         AND         MASKX           < ET CALCUL MODULO LIMAG.
         STA         XIMAG           < MAJ DE XIMAG.
         LA          SENSX
         ADR         A,Y             < INDEX DU MOT SUIVANT DU SECTEUR
                                     < COURANT.
         CPR         Y,B             < A-T'ON EXPLORE TOUT LE SECTEUR
                                     < COURANT ???
         JNE         E841            < NON , ON CONTINUE ...
         PLR         X               < OUI , RESTAURATION DU DECOMPTE
                                     < DES SECTEURS A LIRE ...
         JDX         E840            < AU SECTEUR SUIVANT ...
         BR          AINTER          < ET ENFIN , VERS L'INTERROGATION
                                     < DE L'UTILISATEUR ...
         IF          ORDI-"S",XWOR%,,XWOR%
<
<
<        M O D I F I C A T I O N   D E S   R E G I S T R E S
<                    D E   C O U L E U R  :
<
<
<        FONCTION :
<                      LES REGISTRES DE COULEUR PERMETTENT
<                    DE COLORIER AVEC DES NIVEAUX DE GRIS
<                    LES DIFFERENTES COMBINAISONS DE 3
<                    POINTS DE MEME COORDONNEES APPARTENANT
<                    AUX 3 TRAMES R, V ET B ; SOIENT PR, PV
<                    ET PB UN TRIPLET DE TELS POINTS.
<                      CHAQUE COMBINAISON (PR,PV,PB), CES
<                    3 POINTS ETANT BINAIRES (0/1) DONNENT
<                    DES NOMBRES DE 0 A 7 :
<                    PB=0 PV=0 PR=0 --> 000='0,
<                    PB=0 PV=0 PR=1 --> 001='1,
<                    PB=0 PV=1 PR=0 --> 010='2,...
<                    PB=1 PV=1 PR=1 --> 111='7,
<                      SOIT I L'UNE DES 8 VALEURS POSSIBLES ;
<                    CETTE VALEUR SERT D'INDEX DANS 3 MEMOIRES
<                    PARALLELES MR, MV ET MB CONTENANT CHACUNE
<                    DES MOTS DE 4 BITS PERMETTANT DE CODER
<                    DONC 16 NIVEAUX PAR COULEUR.
<                      SOIT DONC LE POINT P(PB,PV,PR) ; A CE
<                    POINT ON ASSOCIE DONC LE NOMBRE I TEL
<                    QUE I=PB*4+PV*2+PR*1 ; LE POINT P
<                    APPARAITRA DONC SUR L'ECRAN COMME LA
<                    SUPERPOSITION DU BLEU AVEC LE NIVEAU
<                    -MB(I), DU VERT AVEC LE NIVEAU -MV(I),
<                    ET ENFIN DU ROUGE AVEC LE NIVEAU -MR(I) ;
<                    LE SIGNE "MOINS" INDIQUE QUE LES NIVEAUX
<                    SONT COMPLEMENTES A 1 DANS LES 3 MEMOIRES.
<
<
<        UTILISATION :
<                      EN REPONSE A 'ORG' DES DIFFERENTES
<                    OPERATIONS INTER-IMAGES, ON PEUT AGIR
<                    SUR CES 3 MEMOIRES PAR LA REPONSE :
<                    ORG=4XYZ, QUI A L'EFFET SUIVANT :
<                    0<=X<=7 : SELECTIONNE 0 A 3 DES MEMOIRES,
<                    PAR EXEMPLE X=4 SELECTIONNE MB,
<                    X=2 : MV ET X=1 MR ; ON PEUT COMBINER
<                    CES DIFFERENTES VALEURS ;
<                    0<=Y<=7 : DONNE L'INDEX DANS LES MEMOIRES
<                    SELECTIONNEES, ET ENFIN
<                    0<=Z<=15 : DONNE LE NIVEAU DE GRIS COMPLEMENTE
<                    A 1, C'EST-A-DIRE QUE Z=0 DONNE LE MAXIMUM
<                    (BLANC), ET 15 LE MINIMUM (NOIR)...
<
<
CROTA:   EQU         $
         TBT         1
         JNC         OPER            < ERREUR... ON REDEMANDE 'ORG'...
         LBY         &AOP            < RECUPERATION DE L'OPERATION DEMANDEE,
         STBY        &AOP2           < ET GENERATION...
         LA          XIMAG           < NOTA : ON RAZE LES BITS INUTILISES
         SLLS        4               < COMME CECI.
         SLRS        4
OP2:     OR          &AMCOOL         < OPERATION DYNAMIQUE : CUMUL
         STA         &AMCOOL         < MAJ DES ORDRES COURANTS...
         LBY         &AOP2
         CPI         'A8             < A-T'ON FAIT UNE SOUSTRACTION ???
         JNE         CROTA2          < NON...
         LA          &AMCOOL         < OUI, IL FAUT
         NGR         A,A             < INVERSER
         STA         &AMCOOL         < LE RESULTAT...
CROTA2:  EQU         $
         LAD         DEMCU3
         SVC         0               < ENVOI DE '0XYZ,
CROTA1:  EQU         $
         BR          AINTER          < VERS L'INTERROGATION...
<
<
<        A C C E S   A B S O L U   A U X   I M A G E S
<                    S U R   D K U  :
<
<
<        FONCTION :
<                      LE NSP='8A EST ASSIGNE IMPLICI-
<                    TEMENT A 'DKU' ; ENSUITE LES COMMANDES
<                    SUIVANTES SONT DISPONIBLES :
<                    ORG='FXXX : LECTURE DE L'IMAGE SITUEE EN 'XXX0,
<                    ORG='EXXX : ECRITURE DE L'IMAGE COURANTE
<                                EN 'XXX0 SUR 'DKU'.
<
<
COOL1:   EQU         $
         TBT         3               < LECTURE OU ECRITURE ???
         LB          RWDKU
         RBT         14+16           < READ A PRIORI...
         JC          COOL2           < OUI (1)...
         SBT         14+16           < NON (0) : WRITE...
COOL2:   EQU         $
         STB         RWDKU           < MAJ DE LA DEMANDE...
         AND         M0FFF
         CP          VALAD1          < VALIDATION...
         JL          OPER            < ERREUR...
         CP          VALAD2          < VALIDATION...
         JGE         OPER            < ERREUR...
         SLLS        XDKU            < A=ADRESSE DISQUE,
         STA         RWDKU+3         < MAJ DE LA DEMANDE...
         LAD         RWDKU
         SVC         0               < ENVOI DE LA DEMANDE...
         JNE         OPER            < ERREUR !!!
         BR          AINTER          < COMMANDE SUIVANTE...
XWOR%:   VAL         0
         IF          ORDI-"T",XWOR%,,XWOR%
<
<
<        C H O I X   C O U L E U R   I M A G E   C O U R A N T E  :
<
<
<        FONCTION DES BITS DE A :
<
<        IMAGE 100 * IMAGE 010 * IMAGE 001 *         (PATTERN CYCLIQUE)
<------------------------------------------------------------------
< BIT 5 *   ROUGE  *    NOIR   *    NOIR   *
<------------------------------------------------------------------
< BIT 6 *   NOIR   *    ROUGE  *    NOIR   *
<------------------------------------------------------------------
< BIT 7 *   NOIR   *    NOIR   *    ROUGE  *
<------------------------------------------------------------------
<------------------------------------------------------------------
< BIT 9 *   VERT   *    NOIR   *    NOIR   *
<------------------------------------------------------------------
< BIT10 *   NOIR   *    VERT   *    NOIR   *
<------------------------------------------------------------------
< BIT11 *   NOIR   *    NOIR   *    VERT   *
<------------------------------------------------------------------
<------------------------------------------------------------------
< BIT13 *   BLEU   *    NOIR   *    NOIR   *
<------------------------------------------------------------------
< BIT14 *   NOIR   *    BLEU   *    NOIR   *
<------------------------------------------------------------------
< BIT15 *   NOIR   *    NOIR   *    BLEU   *
<
<
COOL1:   EQU         $
         LBI         0               < CLEAR REGISTRE B.
         LXI         3               < POUR LES 3 COULEURS.
COOL2:   EQU         $
         SLRD        3               < RECUPERATION CHOIX 1 COULEUR.
         SLRS        1               < ELIMINATION BIT NON SIGNIFICATIF.
         JDX         COOL2           < NEXT...
<
<        A T T E N T I O N  :
<                    X=0 (CF. LE JDX) !!!
<
         LBY         &AOP            < RECUPERATION DE L'OPERATION
                                     < LOGIQUE COULEUR DEMANDEE.
         STBY        &AOP2           < POSITIONNEMENT D'UNE INSTRUC-
                                     < TION VARIABLE.
         LR          B,A             < A=FUTUR MOT0 DE L'IMAGE COURANTE.
OP2:     OR          &AIMAG1         < INSTRUCTION VARIABLE !!!
                                     < RAPPEL : X=0 (JDX) !!!!
         STA         &AIMAG1         < MAJ COULEUR IMAGE COURANTE.
         BR          AINTER          < VERS L'INTERRO UTILISATEUR.
XWOR%:   VAL         0
<
<        F I L T R A G E   I M A G E  :
<
<        FONCTION :
<        1- B=0 :
<                      CE MODULE ESAYE DE SUPPRIMER LES
<                    POINTS ANORMAUX D'UNE IMAGE , EN
<                    L'OCCURENCE LES POINTS BLANCS (1)
<                    QUI N'ONT PAS DE VOISINS VERTICAUX A 1.
<        2- B=1 :
<                      CE MODULE PERMET DE COLRIER D'UNE
<                    MANIERE FICTIVE LES IMAGES , AVEC
<                    MALHEUREUSEMENT UN PETIT DEFAUT
<                    EN CE QUI CONCERNE LES CONCAVITES HAU-GAUCHE ...
<        3- B=-1 :
<                    3.1- MATRICE=(0,1,1,0) :
<                      CE MODULE PERMET ALORS DE TRANSPOSER
<                    LA MATRICE DE L'IMAGE ET CECI
<                    BIT A BIT ; IL S'AGIT DONC D'1NE
<                    SYMETRIE PAR RAPPORT A LA DIAGONALE
<                    PRINCIPALE DE CELLE-CI.
<                    3.2- MATRICE#(0,1,1,0) :
<                      CE MODULE PERMET DES TRANSFORMATIONS
<                    BIZARRES ET VARIEES !!?!?!!
<
FILTR:   EQU         $
         LAI         1
         STA         ITEST           < MISE EN MODE TESTS NORMAUX.
         LY          NLIG            < INDEX DE BALAYAGE VERTICAL.
<
< BOUCLE DE BALAYAGE VERTICAL :
<
E2001:   EQU         $
         PSR         B               < SAVE LA FONCTION DEMANDEE.
         LR          Y,A             < Y=NUMERO DE LIGNE COURANTE.
         SLRS        3
         LR          A,X             < X=NUMERO DE BANDE COURANTE.
         LA          PATS            < ACCES A LA LISTE DES BANDES
         LB          PATS+1          < A TRAITER.
         TBT         0,X             < LA BANDE COURANTE (X) DOIT-
                                     < ELLE ETRE TRAITEE ???
         PLR         B               < RESTAURE LA FONCTION DEMANDEE.
         JNC         E2821           < LA BANDE COURANTE EST IGNOREE.
         LX          NPPL            < X=INDEX DE BALAYAGE HORIZONTAL.
         CPZR        B               < EST-CE UNE TRANSPOISTION ???
         JGE         E2002           < NON , (X) EST BON.
         CPZ         DIAGON          < UN PARCOURS DIAGONAL EST-IL
                                     < DEMANDE ???
         JE          E2002           < NON , PARCOURS DE L'IMAGE
                                     < ENTIERE.
         LR          Y,X             < DANS LE CAS D'UNE TRANSPOSITION ,
                                     < ON FAIT UN PARCOURS TRIANGULAIRE
                                     < DE L'IMAGE.
<
< BOUCLE DE BALAYAGE HORIZONTAL :
<
E2002:   EQU         $
         CPZR        B
         JL          E2021           < DEMANDE DE TRANSPOSITION.
         BSR         ATEST           < TEST DU POINT COURANT M(X,Y).
         JNC         E2003           < ININTERESSANT : M(X,Y)=0.
<
< CAS OU LE POINT COURANT M(X,Y)=1 :
<
         ADRI        1,Y             < PASSAGE AU VOISIN M(X,Y+1).
         CPZR        B               < FILTRAGE OU PSEUDO-CLORIAGE ???
         JG          E2011           < PSEUDO-COLORIAGE DE L'IMAGE.
<
< FILTRAGE DE L'IMAGE :
<
         BSR         AEXIST          < TEST DU POINT M(X,Y+1) ???
         ADRI        -1,Y            < RETOUR AU POINT M(X,Y).
         JAE         E2003           < ININTERESSANT M(X,Y+1)
                                     < EXISTE ET EST A 1.
         ADRI        -1,Y            < PASSAGE SUR M(X,Y-1).
         BSR         AEXIST          < TEST DU VOISIN M(X,Y-1) ???
         ADRI        1,Y             < RETOUR AU POINT M(X,Y).
         JAE         E2003           < ININTERESSANT : M(X,Y-1)
                                     < EXISTE ET EST A 1.
         BSR         ARESET          < DANS LE CAS OU M(X,Y) A 2
                                     < VOISIN A 0 OU INEXISTANTS ,
                                     < ON LE CONSIDRE COMME SINGULIER ,
                                     < ET ON LE SUPPRIME ...
<
< CHANGEMENT DE POINT COURANT M(X,Y) :
<
E2003:   EQU         $
         ADRI        -1,X            < BALAYAGE HORIZONTAL.
E2013:   EQU         $
         CPZR        X
         JGE         E2002
E2820:   EQU         $               < ENTRY SAUT DE LA BANDE COURANTE.
         ADRI        -1,Y            < BALAYAGE VERTICAL.
         CPZR        Y
         JGE         E2001
         BR          AINTER          < RETOUR A L'INTERROGATION ...
<
<
<        P S E U D O - C O L O R I A G E  :
<
<
E2011:   EQU         $
         ADRI        -1,X            < PASSAGE AU POINT M(X-1,Y+1).
         CPZR        X               < L'X EXISTE-T'IL ???
         JL          E2012           < NON , PAS D'INTERET ...
         BSR         AEXIST          < TEST DU POINT M(X-1,Y+1).
         JANE        E2012           < M(X-1,Y+1) N'EXISTE PAS OU
                                     < EST A 0.
         ADRI        -1,Y            < SI M(X-1,Y+1)=1 , ON PASSE
                                     < AU POINT M(X-1,Y).
         BSR         APOINT          < COLORIAGE DE M(X-1,Y) SUIVANT
                                     < 'APOINT'.
         JMP         E2013           < VERS LE POINT SUIVANT ...
E2012:   EQU         $
         ADRI        -1,Y            < RETOUR A LA LIGNE (Y) ...
         JMP         E2013           < VERS LE POINT SUIVANT.
<
<
<        T R A N S F O R M A T I O N   M A T R I C I E L L E  :
<
<
E2021:   EQU         $
         PSR         B,X,Y
<        ON A ICI :
<                    B=-1.
         BSR         ATEST           < TEST DU POINT M(X,Y).
         ADCR        B               < B=0 SI M(X,Y)=1.
<
<
<        T R A N S F O R M A T I O N   D E S   C O O R D O N N E E S  :
<
<
<        METHODE DE TRANSFORMATION :
<
<                      SOIT :
<                    MSX=SX*(2**XEQUIV)+RSX ,
<                    MSY=SY*(2**YEQUIV)+RSY ,
<
<                      MSX ET MSY SONT LES COORDONNEES DU POINT M(X,Y) ,
<                    SX ET SY EN SONT LES COORDONNEES REDUITES ,
<                    RSX ET RSY LES RESIDUS ; XEQUIV ET YEQUIV
<                    DETERMINENT LES CLASSES D'EQUIVALENCE DES
<                    COORDONNEES DU PLAN.
<
<                      LA MATRICE DE TRANSFORMATION 'T' S'APPLIQUE
<                    AUX COORDONNEES REDUITES :
<                    (SXP,SYP)=T*(SX,SY) ,
<
<                      LES COORDONNEES REDUITES SXP ET SYP
<                    SONT EVENTUELLEMENT TRANSLATEES A
<                    L'AIDE DES CONSTANTES DE TRANSLATION
<                    TRX ET TRY INTRODUITES AVEC XEQUIV ET
<                    YEQUIV :
<                    (SXP,SYP)=(SXP,SYP)+(TRX,TRY) ,
<
<                      LES COORDONNEES RESULTANTES X ET Y SONT :
<                    X=SXP*(2**XEQUIV)+RSX ,
<                    Y=SYP*(2**YEQUIV)+RSY.
<
<
         PSR         B               < SAVE L'INDICATEUR D'ETAT.
         STX         MSX             < SAVE TEMPORAIRE X DE M(X,Y).
         STY         MSY             < SAVE TEMPORAIRE Y DE M(X,Y).
<
< DETERMINATION DES COORDONNEES REDUITES DE M(X,Y) :
<
         LR          X,A             < A=COORDONNEE X.
         LX          XEQUIV          < CLASSE D'EQUIVALENCE DES X.
         SLRD        0,X             < CALCUL DE LA CLASSE D'EQUI-
                                     < VALENCE DU X DE M(X,Y).
         STA         SX              < SAVE LA VALEUR REDUITE DE X.
         LR          X,A             < A=XEQUIV ,
         SLRS        5               < RECUPERATION DE TRX : A=TRX.
                                     < (TRANSLATION DES X REDUITS)
         SLLD        0,X             < A=RESIDU DE LA COORDONNEE X.
         STA         RSX             < ET SAVE LE REIDU DE X.
         LR          Y,A             < A=COORDONNEE Y DE M(X,Y).
         LX          YEQUIV          < ACCES CLASSE D'EQUIVALENCE DE Y.
         SLRD        0,X             < CALCUL DE LA CLASSE D'EQUI-
                                     < VALENCE DE LA COORDONEE Y.
         STA         SY              < SAVE LA COORDONNEE REDUITE Y.
         LR          X,A             < A=YEQUIV ,
         SLRS        5               < RECUPERATION DE TRY : A=TRY.
                                     < (TRANSLATION DES Y REDUITS)
         SLLD        0,X             < A=RESIDU DE LA COORDONNEE Y.
         STA         RSY             < SAVE LE RESIDU DE Y.
<
< TRANSFORMATION PAR LA MATRICE T DES
< COORDONNEES REDUITES DE M(X,Y) :
<
         LA          SX              < COORDONNEE X REDUITE.
         MP          A21             < B=A21*X.
         LR          B,Y
         LA          SY
         MP          A22             < B=A22*Y.
         ADR         B,Y
         LR          Y,A             < A=A21*X+A22*Y.
         LX          YEQUIV          < X=CLASSE D'EQUIVALENCE DES Y.
         SLLS        0,X             < 'DEREDUCTION' DE Y.
         AD          RSY             < RESTAURATION DU RESIDU DE Y.
         AND         NLIG            < ET ENFIN , CALCUL MODULO LE
                                     < NBRE DE LIGNES PAR ECRAN.
         LR          A,Y             < Y=COORDONNEE Y DU POINT
                                     < TRANSFORME DE M(X,Y).
         LA          SX              < COORDONNEE X REDUITE.
         MP          A11             < B=A11*X.
         LR          B,X
         LA          SY
         MP          A12             < B=A12*Y.
         ADR         B,X
         LR          X,A             < A=A11*X+A12*Y.
         LX          XEQUIV          < X=CLASSE D'EQUIVALENCE DES X.
         SLLS        0,X             < 'DEREDUCTION' DE X.
         AD          RSX             < RESTAURATION DU RESIDU DE X.
         AND         NPPL            < ET ENFIN CALCUL MODULO LE NBRE
                                     < DE POINTS PAR LIGNE.
         LR          A,X             < X=COORDONNE DU POINT TRANFORME.
         PLR         B               < RESTAURE L'INDICATEUR D'ETAT.
         BSR         ATEST           < TEST DU POINT M(Y,X).
         ADCR        B               < B=0 SI M(X,Y)#M(Y,X).
         CPZR        B
         JNE         E2022           < B=-1 OU B=1 ; CELA SIGNIFIE
                                     < QUE M(X,Y)=M(Y,X) ; IL N'Y A
                                     < DONC RIEN A FAIRE ...
         BSR         AINVER          < SINON INVERSION DE M(Y,X).
<
< TRANSFORMATION INVERSE DES COORDONNEES :
<
         LX          MSX             < RESTAURE COORDONNEE X DE M(X,Y).
         LY          MSY             < RESTAURE COORDONNEE Y DE M(X,Y).
         BSR         AINVER          < INVERSION DE M(X,Y).
E2022:   EQU         $
         PLR         B,X,Y
         JMP         E2003           < VERS LE POINT M(X,Y) SUIVANT.
<
< CAS OU LA BANDE COURANTE EST IGNOREE :
<
E2821:   EQU         $
         LR          X,A             < X=NUMERO DE LA BANDE COURANTE.
         SLLS        3
         LR          A,Y             < Y=NUMERO DE LA 1ERE LIGNE
                                     < DE LA BANDE COURANTE.
         JMP         E2820           < VERS LE PASSAGE A LA BANDE
                                     < PRECEDENTE (SI EXISTE...).
<
<        D E F I N I T I O N   D E   L A   M A T R I C E
<        D E   T R A N S F O R M A T I O N  :
<
<        NOTA :
<                      IL EST POSSIBLE DE FAIRE GENERER
<                    AU PROCESSEUR DES MATRICES IDEMPOTENTES ,
<                    C'EST-A-DIRE TELLES QUE :
<                                    M*M=I.
<                      CES MATRICES SONT DE LA FORME :
<                    -M22      (1-M22*M22)/M21
<                    M21       M22
<
<                      A NOTER QUE LES MATRICES
<                    +-1,0,0,+-1 CONVIENNENT AUSSI ...
<
DEF:     EQU         $
         LYI         4               < Y=NBRE DE CARACTERES DEMANDES
                                     < POUR CHAQUE COEFFICIENT.
<
< ENTREE DES CLASSES D'EQUIVALENCE XEQUIV ET
< YEQUIV AINSI QUE DES CONSTANTES DE TRANSLATION
< TRX ET TRY :
<
<        BITS0-2 :   TRANSLATION A DROITE DES X REDUITS (TRX) ,
<        BITS3-7 :   CLASSE D'EQUIVALENCE DES X (XEQUIV) ,
<        BITS8-10 :  TRANSLATION VERS LE BAS DES Y REDUITS (TRY) ,
<        BITS11-15 : CLASSE D'EQUIVALENCE DES Y (YEQUUIV).
<
<                      EN DONNANT '0000 , LES CLASSES
<                    SONT PONCTUELLES ET NON TRANSLATEES !!!
<
         LXI         5               < INDEX DU MESSAGE SUR LES
                                     < CLASSES D'EQUIVALENCE X,Y.
         BSR         ACOEF           < RECUPERATION DES CLASSES :
                                     < OCTET0(A)=CLASSE DE X ,
                                     < OCTET1(A)=CLASSE DE Y.
         SLRD        16              < A=0 , B=CLASSES D'EQUIVALENCE.
         DV          C256            < DECONCATENATION DES 2 OCTETS.
         STB         YEQUIV          < CLASSE D'EQUIVALENCE DE Y.
         STA         XEQUIV          < CLASSE D'EQUIVALENCE DE X.
         CP          YEQUIV          < LES CLASSES SONT-ELLES DE
                                     < 'MEME TAILLE' ???
         JNE         E2811           < NON , ON VA DONC RENTRER UNE
                                     < MATRICE QUELCONQUE ; EN EFFET
                                     < LORSQUE LES CLASSES NE SONT
                                     < PAS CARREES , LES MATRICES
                                     < IDEMPOTENTES NE DONNENT
                                     < PAS DES RESULTATS INVERSIBLES !!!
         CPI         '0F             < UNE TRANSLATION A-T'ELLE ETE
                                     < INTRODUITE , OU BIEN LA CLASSE
                                     < DEMANDEE EST-ELLE SUPERIEURE
                                     < A '0F ???
         JG          E2811           < UNE MATRICE IDEMPOTENTE NE
                                     < DONNERA PAS DE BONS RESULTATS !!!
E2810:   EQU         $
         IF          TITV,X100,,X100
         LAD         MIDEM
X100:    VAL         0
         BSR         ADESIR          < L'UTILISATEUR DESIRE-T'IL
                                     < UNE MATRICE IDEMPOTENTE OU PAS ???
         CPI         "N"             < A CONTIENT LA REPONSE ...
         JE          E2811           < IL DESIRE RENTRER LA MATRICE
                                     < ENTIERE (4 COEFFICIENTS).
         CPI         "O"
         JNE         E2810           < ERREUR , ON RECOMMENCE ...
<
< GENERATION D'UNE MATRICE IDEMPOTENTE :
<
         LXI         2               < INDEX DU MESSAGE 'M22'.
         BSR         ACOEF           < ENTREE DU COEFFICIENT M22.
         STA         SA22            < ET SAVE TEMPORAIRE.
         LXI         1               < INDEX DU MESSAGE 'M21'.
         BSR         ACOEF           < ENTREE DU COEFFICIENT M21.
         STA         SA21            < ET SAVE TEMPORAIRE.
E2816:   EQU         $               < ENTRY DE RECHERCHE D'UN JEU
                                     < DE M21,M22 QUI DONNENT UNE
                                     < MATRICE M ENTIERE.
         LA          SA22
         LR          A,Y             < Y=SA22.
         MP          SA22            < B=SA22*SA22.
         LAI         1
         SBR         B,A             < A=1-SA22*SA22.
         SARD        16              < ET CADRAGE SUR 32 BITS.
         DV          SA21            < CALCUL DE (1-SA22*SA22)/SA21.
         CPZR        B               < LE RESTE EST-IL NUL ???
         JE          E2815           < OK , RESTE NUL , M EST ENTIERE !
         LAD         MERR
         BSR         APRINT          < SINON , ENVOI D'UN MESSAGE
                                     < D'ERREUR.
         IC          SA22            < PUIS MODIFICATION DE SA22 ,
         JMP         E2816           < PUIS BOUCLAGE JUSQU'A TROUVER
                                     < LE BON COUPLE M21,M22 , OU
                                     < JUSQU'A UN ALT-MODE !!!
E2815:   EQU         $               < OK , MATRICE ENTIERE !!!
         STA         A12             < OK , GENERE A12.
         LA          SA21
         STA         A21             < OK , GENERE A21.
         STY         A22             < OK , GENERE A22.
         NGR         Y,Y
         STY         A11             < OK , GENERE A11=-A22.
         JMP         E2803           < VERS L'ENTREE DU MODE DE
                                     < PARCOURS DE L'IMAGE.
<
< ENTREE D'UNE MATRICE QUELCONQUE :
<
E2811:   EQU         $
         LXI         4               < X=NBRE DE COEFFICIENTS MATRICIELS
                                     < A ENTRER.
<
< ENTREE DES 4 COEFFICIENTS A11,A12,A21,A22 :
<
E2801:   EQU         $
         BSR         ACOEF           < ENTREE DU COEFFICIENT MIJ.
         STA         &AMAT           < SI OK , ON RANGE MIJ DANS
                                     < LA MATRICE(X).
         JDX         E2801           < AU COEFFICIENT SUIVANT.
<
< DEMANDE DE LA NATURE DU PARCOURS DE L'IMAGE :
<
E2803:   EQU         $
         STZ         DIAGON          < A PRIORI PARCOURS IMAGE ENTIERE.
         IF          TITV,X100,,X100
         LAD         MDIAG           < MESSAGE D'INTERROGATION.
X100:    VAL         0
         BSR         ADESIR          < ENTREE DES DESIRS UTILISATEUR.
         CPI         "N"             < A CONTIENT LE CARACTERE ENTRE.
         JE          E2802           < OK , PARCOURS IMAGE ENTIERE.
         CPI         "O"
         JNE         E2803           < ERREUR , ON REINTERROGE ...
         IC          DIAGON          < PARCOURS DIAGONAL DEMANDE.
E2802:   EQU         $
         BR          AINTER          < VERS L'INTERROGATION UTILISATEUR.
         PAGE
<
<
<        E N T R E E    U N   C O E F F I C I E N T
<        D E   L A   M A T R I C E   M  :
<
<
<        ARGUMENT :
<                    X=INDEX DU COEFFICIENT :
<                                    4 : A11 ,
<                                    3 : A12 ,
<                                    2 : A21 ,
<                                    1 : A22.
<
<
<        RESULTAT :
<                    A=VALEUR BINAIRE DU COEFFICIENT.
<
<
COEF:    EQU         $
         PSR         X               < SAVE LE DECOMPTE X.
         IF          TITV,X100,,X100
         LAD         MAT
         BSR         APRINT
         LAD         MX-2
         ADR         X,A
         ADR         X,A
         BSR         APRINT          < ENVOI D'UN MESSAGE MIJ=.
         LAD         DEMFON
         SVC         0               < ENTREE DU COEFFICIENT MIJ.
X100:    VAL         0
         BSR         AHEX            < CONVERSION BINAIRE DE MIJ.
         PLR         X               < RESTAURE LE DECOMPTE X.
         JNE         COEF            < ERREUR DE SYNTAXE HEXADECIMALE.
         RSR
         PAGE
<
<
<        D : C O M P T A G E   P O I N T S / I M A G E  :
<
<
COMPT:   EQU         $
         LBI         0               < INITIALISATION DU COMPTEUR.
         LX          ALIMAG          < X=NBRE DE MOTS/IMAGE.
EE10:    EQU         $
         PSR         X               < SAVE L'INDEX-MOT.
         LA          &AIMAG          < A=MOT COURANT DE L'IMAGE.
EE12:    EQU         $
         JAE         EE11            < TOUS LES POINTS DE CE MOT ONT
                                     < ETE COMPTES, OU IL EST NUL.
         DBT                         < RECHERCHE D'UN POINT.
         ADRI        1,B             < ET COMPTAGE.
         RBT         0,X             < PUIS RAZ APRES PRISE EN COMPTE.
         JMP         EE12            < AU POINT SUIVANT.
EE11:    EQU         $
         PLR         X               < RESTAURE L'INDEX MOT.
         JDX         EE10            < PASSAGE AU MOT SUIVANT.
<
< EDITION DU NBRE DE POINTS (B) :
<
         LYI         0+4             < X=0 (JDX), Y=BORNE SUP DE X.
EE13:    EQU         $
         LAI         0               < CLEAR LE REGISTRE A.
         SLLD        4               < RECUPERATION D'UN CHIFFRE HEXA.
         CPI         9               < TEST LETTRE/CHIFFRE.
         JLE         EE14            < C'EST UN CHIFFRE.
         ADRI        '41-'39-1,A     < CAS DES LETTRES.
EE14:    EQU         $
         ADRI        '30,A           < CONVERSION ASCI.
         STBY        &AREP           < MISE DANS LE BUFFER.
         ADRI        1,X             < PASSAGE AU CHIFFRE SUIVANT,
         CPR         X,Y             < SI EXISTE...
         JNE         EE13            < OUI.
         LAD         NPO
         BSR         APRINT          < EDITION DU NBRE DE POINTS/IMAGE.
         BR          AINTER          < VERS E410 (INTERRO UTILISATEUR).
         PAGE
         IF          TITV,X100,,X100
<
<
<        C O N V E R S I O N   G R A P H I Q U E   -->   V I D E O
<                    D ' U N   P O I N T  :
<
<
<        ARGUMENT :
<                    POINT COURANT GRAPHIQUE DANS HY,LY,HX,LX.
<
<
<        RESULTAT :
<                    X ET Y CONTIENNENT L'X ET L'Y DU POINT COURANT
<                    VIDEO.
<
<
CONV:    EQU         $
         LA          LY              < LOW-Y POINT COURANT.
         SLRD        5               < RECUPERATION DES 5 BITS
                                     < SIGIFICATIFS DANS B.
         LA          HY              < HIGH-Y POINT COURANT.
         ANDI        '1F             < CONSERVATION DES 5 BITS
                                     < SIGNIFICATIFS.
         SLLD        5-DEDY          < ET CONCATENATION AUX POIDS
                                     < FAIBLES AVEC UNE DIVISION
                                     < SIMULTANEE PAR DY.
         NGR         A,A             < INVERSION DU SIGNE DU AU FAIT
                                     < QUE L'AXE DES Y DES VISUS
                                     < MONTE , ALORS QUE CELUI D'UNE
                                     < IMAGE VIDEO DESCEND ...
         AD          NLIG            < LA COORDONNEE Y EST RENDUE>0.
         LR          A,Y             < COORDONNEE Y DU POINT COURANT.
         LA          LX              < LOW-X POINT COURANT.
         SLRD        5               < BITS SIGNIFICATIFS DANS B.
         LA          HX              < HIGH-X POINT COURANT.
         ANDI        '1F             < RECUPERATION DES 5 BITS
                                     < SIGNIFICATIFS.
         SLLD        5-DEDX          < CONCATENATION DES POIDES FAIBLES
                                     < ET DIVISION SIMULTANEE PAR DX.
         LR          A,X             < COORDONNEE X POINT COURANT.
         RSR                         < ET C'EST TOUT.
<
<
<        A C C E S   U N   C A R A C T E R E   G R A P H I Q U E  :
<
<
<        ARGUMENT :
<                    X=INDEX CARACTERE COURANT.
<
<
<        RESULTAT :
<                    A=CARACTERE COURANT SUR 7 BITS ,
<                    X<--(X)+1.
<
<
<        SORTIE DIRECTE PAR E2 SI RENCONTRE DU R/C DE FIN
<                    DE DESSIN , OU SI LA FIN DU BUFFR EST ATTEINTE.
<
<
GET:     EQU         $
         LBY         &ABUF
         ANDI        '7F             < A=CARACTERE COURANT ET BIT0=0.
         ADRI        1,X             < INDEX DU CARACTERE SUIVANT.
         CPI         '0D             < EST-CE LE R/C ???
         JE          E3              < OUI , FIN DE CONVERSION.
         XR          A,X
         CP          LG+2            < EST-ON AU BOUT DU DESSIN ???
         XR          A,X
         JGE         E3              < OUI , C'EST COMME R/C.
         RSR                         < CAS DES RETOURS NORMAUX.
<
< FIN DE DESSIN :
<
E3:      EQU         $
         ADRI        -1,K            < ANNULATION DU BSR D'APPEL.
         BR          AFIN            < VERS LA FIN DE CONVERSION.
X100:    VAL         0
         PAGE
         IF          ORDI-"T",XWOR%,,XWOR%
<
<
<        T R A C E   D U   S E G M E N T   ( M 1 , M 2 )  :
<
<
<        FONCTION :
<                      CETTE ROUTINE TRACE LE SEGMENT
<                    M1M2 , TEL QUE :
<                                    M1(X1,Y1) ,
<                                    M2(X2,Y2).
<
<
<        RESULTAT :
<                    X=X2 ,
<                    Y=Y2.
<
<
SEG:     EQU         $
         LX          X1
         LY          Y1
         BSR         APOINT          < AFFICHAGE 1ER POINT.
         BSR         ADICO           < PARCOURS DICHOTOMIQUE DE (M1,M2).
         LX          X2
         LY          Y2
         BSR         APOINT          < AFFICHAGE 2EME POINT.
         RSR
<
<
<        P A R C O U R S   D I C H O T O M I Q U E
<                    D ' U N   S E G M E N T  :
<
<
DICO:    EQU         $
         LA          X1
         AD          X2
         SLRS        1
         STA         X               < X=(X1+X2)/2.
         LA          Y1
         AD          Y2
         SLRS        1
         STA         Y               < Y=(Y1+Y2)/2.
<
< TEST DE M PAR RAPPORT A M1 :
<
         SB          Y1              < A=Y-Y1.
         JANE        E31             < CAS : M#M1.
         LA          X
         SB          X1              < A=X-X1.
         JAE         E32             < CAS : M=M1.
<
< TEST DE M PAR RAPPORT A M2 :
<
E31:     EQU         $
         LA          Y
         SB          Y2              < A=Y-Y2.
         JANE        E30             < CAS M#M2 ET M#M1.
         LA          X
         SB          X2              < A=X-X2.
         JANE        E30             < CAS : M#M2 ET M#M1.
<
< CAS OU M=M1 OU M=M2 :
<
E32:     EQU         $
         LX          X
         LY          Y
         BSR         APOINT          < AFFICHAGE DU POINT M.
         RSR                         < CAS : M=M1 : ON ARRETE LA
                                     < DICHOTOMIE DESCENDANTE PROVISOI-
                                     < REMENT ...
<
< CAS OU M#M1 ET M#M2 :
<
E30:     EQU         $
         LA          X2
         LB          Y2
         PSR         A,B             < SAVE LE POINT M2.
         LA          X
         STA         X2
         LA          Y
         STA         Y2              < M2 <-- M.
         BSR         ADICO           < DICHOTOMIE DU NOUVEAU SEGMENT
                                     < (M1,M2).
         LX          X2
         LY          Y2
         BSR         APOINT          < AFFICHAGE DE M2 AU RETOUR.
                                     < D'UNE DICHOTOMIE.
         STX         X1              < PUIS :
         STY         Y1              < M1 <-- M2 ; ON DECALE L'ORIGINE
                                     < DU SEGMENT (M1,M2).
         PLR         A,B
         STA         X2
         STB         Y2              < RESTAURATION DU POINT M2.
         JMP         DICO            < ET ON REPREND LA DICHOTOMIE...
XWOR%:   VAL         0
         PAGE
         IF          ORDI-"S",XWOR%,,XWOR%
<
<        T R A C E   V I D E O   D ' U N   S E G M E N T   E N   S O L A R.
<
<        (C'EST LE SYSTEME CMS5 QUI SE CHARGERA DE L'INTERPOLATION !).
<
<
<
SEG:     EQU         $
<
< PROLOGUE: SAUVEGARDE DES REGISTRES UTILISES ET SAUVEGARDE DANS LA PILE
< (QUI EST GRANDE !) DE LA ZONE QU'ON VA UTILISER POUR CONSTRUIRE L'EN-TETE
< DE L'IMAGE.
<
         PSR         A,B,X,Y
         PSR         W
<
         LR          K,B
         ADRI        1,B             < ZONE RECEPTRICE.
         LRM         A,X,W
         WORD        ENTIM           < ZONE EMETTRICE (A SAUVER DANS LA PILE).
         WORD        LENTIM          < LONGUEUR EN-TETE IMAGE.
         WORD        ENTIM           < POUR BASER L'EN-TETE.
         MOVE
         ADRI        LENTIM,K        < MISE A JOUR DE 'K'.
<
< ICI, ON A SAUVEGARDE LA ZONE DE CONSTRUCTION DE L'EN-TETE DANS LA PILE,
< ON VA CONSTRUIRE L'EN-TETE ET FAIRE LA DEMANDE D'INTERPOLATION VIDEO.
<
< CONVERSION DES COORDONNEES VIDEO EN COORDONNEES GRAPHIQUES.
<
         LA          X1              < X1 VIDEO.
         SLLS        DEDX
         STA         DEPX1,W         < X1 GRAPHIQUE.
         LA          X2              < X2 VIDEO.
         SLLS        DEDX
         STA         DEPX2,W         < X2 GRAPHIQUE.
         LA          Y1              < Y1 VIDEO.
         SB          NLIG
         NGR         A,A
         SLLS        DEDY
         STA         DEPY1,W         < Y1 GRAPHIQUE.
         LA          Y2              < Y2 VIDEO.
         SB          NLIG
         NGR         A,A
         SLLS        DEDY
         STA         DEPY2,W         < Y2 GRAPHIQUE.
<
< POSITIONNEMENT DU MODE DE TRACE ('SBT'/'RBT').
<
         STZ         DEPMOD,W        < MODE TRACE = 'RBT' A PRIORI.
         LA          APOINT
         CP          ARESET
         JE          SEGRS           < C'EST 'RBT'.
         CP          AINVER
         JE          SEGINV
         IC          DEPMOD,W        < C'EST 'SBT'.
         JMP         SEGRS
SEGINV:  EQU         $
         DC          DEPMOD,W        < C'EST 'IBT'.
SEGRS:   EQU         $
         LRM         A,X
         WORD        ENTIM-ZERO*2    < ADRESSE OCTET EN-TETE IMAGE.
         WORD        LENTIM+LIMAG*2  < LONGUEUR OCTETS EN-TETE + IMAGE.
         STA         STDKU+1
         STX         STDKU+2
         LAD         STDKU           < DEMANDE INTERPOLATION ET AFFICHAGE.
         SVC         0
         LRM         A,X
         WORD        IMAG-ZERO*2     < RESTAURATION ADRESSE ET
         WORD        LIMAG*2         < LONGUEUR IMAGE DANS LA DEMANDE.
         STA         STDKU+1
         STX         STDKU+2
<
< EPILOGUE (FAIRE COMME SI ON N'AVAIT RIEN TOUCHE...).
<
         ADRI        -LENTIM,K       < RESTAURATION DE 'K'.
         LR          K,A
         ADRI        1,A             < ZONE EMETTRICE.
         LRM         B,X
         WORD        ENTIM           < ZONE RECEPTRICE (A RESTAURER).
         WORD        LENTIM          < LONGUEUR.
         MOVE
<
         PLR         W
         PLR         A,B,X,Y
         RSR
XWOR%:   VAL         0
         PAGE
<
<
<        C O N V E R S I O N   H E X A ---> B I N A I R E  :
<
<
<        ARGUMENT :
<                    Y=NBRE DE CARACTERES A DECODER (1 A 4) ,
         IF          TITV,X100,,X100
<                    REP=(Y) CARACTERES PRESUMES HEXA.
X100:    VAL         0
         IF          TITV,,X100,
<                    ITEM1 CONTIENT 4 CARACTERES COURANTS PRESUMES HEXA.
X100:    VAL         0
<
<
<        RESULTAT :
<                    B=0 : OK ,
<                     =1#0 : CARACTERE ERRONNE ,
<                    INDICATEURS SUR LA VALEUR DE (B) ,
<                    A=VALEUR BINAIRE DES (Y) CARACTERES DE (REP)
<                      SI B=0, OU LA VALEUR COURANTE SI B#0 SUR "S"...
<
<
HEX:     EQU         $
         LXI         0               < INDEX DU BUFFER DE REPONSE.
         LBI         0               < CLEAR LE REGISTRE B.
E55:     EQU         $
         IF          TITV,X100,,X100
         LBY         &AREP           < A=CARACTERE COURANT DU BUFFER.
X100:    VAL         0
         IF          TITV,,X100,
         BSR         ASIMU           < A=CARACTERE COURANT DE ITEM1.
X100:    VAL         0
         ADRI        -'30,A
         JAL         E472            < ERREUR : CARACTERE NON RECONNU.
         CPI         9               < EST-CE UN CHIFFRE ???
         JLE         E51             < OUI , C'EST UN CHIFFRE.
         ADRI        -'41+'39+1,A    < NON.
         CPI         'A              < VALIDATION.
         JL          E472            < ERREUR : CARACTERE NON RECONNU.
         CPI         'F              < VALIDATION.
         JG          E472            < ERREUR : CARACTERE NON RECONNU.
E51:     EQU         $
         SCRS        4               < MISE DES 4 BITS EN TETE DE A.
         SCLD        4               < ET CONCATENATION A B.
         ADRI        1,X             < PROGRESSION DE L'INDEX.
         CPR         X,Y             < EST-CE FINI ???
         JNE         E55             < NON , ON CONTINUE.
         LR          B,A             < A=VALEUR BINAIRE DE (REP).
         LBI         0               < B=0 : RETOUR OK.
E473:    EQU         $
         CPZR        B               < POSITIONNEMENT DES INDICATEURS.
         RSR
<
< RETOURS EN ERREUR :
<
E472:    EQU         $
         IF          ORDI-"S",XWOR%,,XWOR%
         LR          B,A             < A=VALEUR COURANTE...
XWOR%:   VAL         0
         LBI         1               < B#0.
         JMP         E473            < VERS LA SORTIE ...
         PAGE
<
<
<        E M I S S I O N   M E S S A G E  :
<
<
<        ARGUMENT :
<                    A=@MOT DU MESSAGE.
<
<
PRINT:   EQU         $
         PSR         C,X             < SAVE L'@IMAGE VIDEO ET (X).
         LR          A,C             < C=@MOT DU MESSAGE.
         ADR         A,A
         ADRI        1,A             < A=@OCTET DU MESSAGE.
         STA         DEMOUT+1        < MAJ DE DEMOUT.
         LBY         0,C             < A=LONGUEUR DU MESSAGE.
         STA         DEMOUT+2        < MAJ DE DEMOUT.
         LAD         DEMOUT
         SVC         0               < EMISSION DU MESSAGE.
         PLR         C,X             < RESTAURE L'@IMAGE VIDEO ET (X).
         RSR                         < RETOUR.
<
<
<        I N T E R R O G A T I O N   U T I L I S A T E U R  :
<
<
         IF          TITV,X100,,X100
<        ARGUMENT :
<                    A=@MOT D'UN MESSAGE A L'UTILISATEUR.
<                    A=0 : PAS DE MESSAGE A EMETTRE.
<
<
<        RESULTAT :
<                    A=REPONSE UTILISATEUR (1 CARACTERE).
<
<
DESIR:   EQU         $
         JAE         DESIR2          < PAS DE MESSAGE A EMETTRE.
         BSR         APRINT          < ENVOI D'UNE INVITATION.
DESIR2:  EQU         $
         IF          ORDI-"S",XWOR%,,XWOR%
         LAD         STDKU
         SVC         0
XWOR%:   VAL         0
         LAD         DEMINT
         SVC         0               < LECTURE D'1 CARACTERE REPONSE.
         IF          ORDI-"T",XWOR%,,XWOR%
         LA          ASP3
         JAE         E4003           < PAS DE STABILISATION IMAGE.
         WORD        '1EC5           < EXECUTION MAITRE DE SP3.
XWOR%:   VAL         0
E4003:   EQU         $               < ON N'EST PAS SOUS :SYS ...
         LBY         REP             < A=REPONSE UTILISATEUR.
         RSR
X100:    VAL         0
         IF          TITV,,X100,
<        RESULTAT :
<                    A=CARACTERE COURANT DE L'ITEM1 (REPONSE...)
<                      (LES 'SPACE' SONT IGNORES)
<
<
DESIR:   EQU         $
         IF          ORDI-"T",XWOR%,,XWOR%
         LA          ASP3
         JAE         E4003           < PAS DE STABILISATION IMAGE.
         WORD        '1EC5           < EXECUTION MAITRE DE SP3.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LAD         STDKU
         SVC         0
XWOR%:   VAL         0
E4003:   EQU         $               < ON N'EST PAS SOUS :SYS ...
DESIR1:  EQU         $
         BSR         ASIMU           < A=CARACTERE COURANT DE L'ITEM1.
         CPI         " "
         JE          DESIR1          < LES 'SPACE' EN REPONSE SONT
                                     < DES ELEMENTS NEUTRES , ET
                                     < IGNORES ....
         RSR
X100:    VAL         0
         PAGE
<
<
<        A C C E S   A U   S G N  :
<
<
<        ARGUMENT :
<                    A=NVP D'ACCES.
<
<
<        RESULTAT :
<                    X=CONDITION DE RETOUR DU SGN.
<
<
GOSGN:   EQU         $
         STBY        SGN
         LAD         SGN
         SVC         0               < ACCES AU SGN.
         RSR
         IF          TITV,,X100,
         PAGE
<
<
<        B U F F E R   S E C T E U R   E T   P I L E  :
<
<
STACK:   EQU         $
BUFFER:  EQU         STACK+SSTACK
SECTOR:  EQU         BUFFER
ZSECTX:  VAL         SECTOR-ZERO*2
ZSECT2:  EQU         ZERO+ZSECTX     < @OCTET DU BUFFER SECTEUR.
X100:    VAL         0
         PAGE
<
<
<        I M P L A N T A T I O N  :
<
<
X14:     VAL         $-ZERO+2        < TAILLE DU PROGRAMME +2.
X14:     VAL         SIZE-X14        < ESPACE MEMOIRE LIBRE.
X15:     EQU         ZERO+X14        < ERREUR D'ASSEMBLAGE SI LE
                                     < PROGRAMME RECOUVRE L'UN DES
                                     < BUFFERS D'IMAGE.
X12:     EQU         ZERO+PILE-LTNI-LTNI
X10:     VAL         X12-$
ZEROV:   EQU         ZERO+X10        < ERREUR D'ASSEMBLAGE SI MAUVAISE
                                     < IMPLANTATION ...
         DZS         X10+1
         IF          TITV,,X100,
X21:     VAL         SECTOR-ZERO+128 < TOP BUFFER SECTEUR.
X21:     VAL         SIZE+LTN-X21
ZEROW:   EQU         ZERO+X21        < ERREUR VOLONTAIRE D'ASSEMBLAGE
                                     < SI LE TOP EST EN RECOOUVREMENT
                                     < DU CORPS DE L'ITEM2.
X100:    VAL         0
         PAGE
         EOT         #SIP GEN PROCESSEUR#



Copyright © Jean-François Colonna, 2022-2022.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2022.