IF          VTVG,X100,,X100
NMPROC:  VAL         "VG"            < NOM DU PROCESSEUR.
         IDP         "VG - RELEASE 07/07/1980"
X100:    VAL         0
         IF          VTVG,,X100,
ZDC:     VAL         0               < ASSEMBLAGE SGN : X469,,X469
ZDC:     VAL         1               < ASSEMBLAGE ZDC : ,,X469,
NMPROC:  VAL         "VT"            < NOM DU PROCESSEUR.
         IDP         "VT - RELEASE 01/06/1979"
X100:    VAL         0
         IDP         "JOHN F. COLONNA"
         PROG
         PAGE
         EOT         #SIP DEFINITION CMS5#
         EOT         #SIP DEF PROCESSEUR#
         PROG
         WORD        IMAGE           < ENTRY POINT DU GENERATEUR.
         WORD        0
PIMAGE:  EQU         $               < P='12 !!!
         LRP         L
         BR          -2,L            < ENTRY DANS LE PROCESSEUR.
         EOT         #SIP DEFINITION ITEM#
ITEM1:   EQU         ZERO+PILE-LTNI  < @ITEM1.
         PAGE
         EOT         #SIP IMAGE 256#
IMAG:    EQU         ZERO+PILE+5     < IMAGE VIDEO.
NOM:     EQU         ITEM1           < LE NOM DE L'IMAGE VIDEO RECOUVRE
                                     < L'EN-TETE DE L'ITEM1.
EOT:     EQU         IMAG-2
LONG:    EQU         IMAG-1          < DOIT CONTENIR -1,-2,-3 SI
                                     < L'IMAGE EST BIEN VIDEO.
         PAGE
<
<
<        L O C A L  :
<
<
         LOCAL
LOC:     EQU         $
<
< BUFFER ET MESSAGES :
<
LINCR:   ASCI        "ADBHEFJI"      < LISTE DE GESTION DU MODE INCR.
CURSOR:  BYTE        "N";0           < CURSEUR GRAPHIQUE DE LA VISU :
                                     < OCTET0=CARACTERE DE DEBLOCAGE ,
                                     < (NON A PRIORI...)
         WORD        0               < MOT1=Y(CURSEUR GRAPHIQUE) ,
         WORD        0               < MOT2=X(CURSEUR GRAPHIQUE).
INTENS:  WORD        0               < LE MOT INTENS DOIT PRECEDER
                                     < LA LISTE DES POINTS !!!
         IF          VTVG,,X100,
         IF          ZDC,X469,,X469
NOMSEG:  ASCI        ":G"
         BYTE        "S";'04
X469:    VAL         0
         IF          ZDC,,X469,
NOMSEG:  WORD        0               < SEGMENT INVALIDE INITIALEMENT.
X469:    VAL         0
SEGSGN:  DZS         4               < SEGMENT GRAPHIQUE COURANT.
LONSEG:  VAL         $-NOMSEG*2
X100:    VAL         0
SEG:     WORD        0;0             < POUR (TY,TX) DE POSITIONNEMENT.
         BYTE        '1E;'1E;'1E;'1E < POUR AVOIR UN NBRE D'OCTETS
                                     < MULTIPLE DE 4 (CF. CMS4).
         DZS         8*2
         IF          VTVG,X100,,X100
         IF          SEG-INTENS-1,,X100,
         IF          ERREUR VOLONTAIRE D'ASSEMBLAGE !!!
X100:    VAL         0
MNOM:    BYTE        5;'6D
         ASCI        "NOM>"
MINT:    BYTE        2;'6D;">";0
REP:     WORD        0               < REPONSE DE REDUCTION.
         WORD        0               < POUR LES ENTREES DE SEUILS.
MFAST:   BYTE        6;'6D
         ASCI        "FAST? "
M4014:   BYTE        6;'6D
         ASCI        "4014? "
AMRED:   WORD        MRED
AMPAS:   WORD        MPAS
         IF          VTVG,X100,,X100
AMCONR:  WORD        MCONTR
X100:    VAL         0
AMIS:    WORD        MIS
AMEFFA:  WORD        MEFFAC
         IF          VTVG,X100,,X100
AMCOPY:  WORD        MCOPY
X100:    VAL         0
         IF          VTVG,,X100,
AMFIN:   WORD        MFIN
AMPASA:  WORD        MPASA
X100:    VAL         0
AMTR:    WORD        MTR
AMMAT:   WORD        MMAT-1,X
MDEL:    BYTE        7;'6D
         ASCI        "DX/DY="
AMSE:    WORD        MSE
AMSEX:   WORD        MSEX
AMSEY:   WORD        MSEY
AMCONT:  WORD        MCONT
AMPERX:  WORD        MPERX
AMPERY:  WORD        MPERY
AP:      WORD        MF              < MESSAGES DE PERMUTATION BITS X/Y.
AMINC:   WORD        MINC
AMLIST:  WORD        MLIST
AMIC:    WORD        MIC
AMEPAI:  WORD        MEPAIS
MW:      BYTE        3;'6D;"W";"?"
MNW:     BYTE        4;'6D;"N";"W";"?";0
MN:      BYTE        3;'6D;"N";"?"
MNE:     BYTE        4;'6D;"N";"E";"?";0
MERR:    BYTE        3;'6D;"?";"?"
         IF          VTVG,X100,,X100
MCU1:    ASCI        "!ASSIGN B=CU"
         BYTE        NBCUS;'04
MCUS:    ASCI        "!ASSIGN B="
         BYTE        "S";'04
X100:    VAL         0
<
< DEMANDES A CMS4 :
<
DEMIN:   WORD        '0101           < LECTURE DU NOM DE L'IMAGE.
         WORD        NOM-ZERO*2
         WORD        LNOM*2
DEMREP:  WORD        '0101           < LECTURE DU FACTEUR DE REDUCTION.
         WORD        REP-ZERO*2
         WORD        1               < 1 CARACTERE.
DEMSE:   WORD        '0101           < ENTREE DES SEUILS.
         WORD        REP-ZERO*2
         WORD        3               < SOUS FORME DE 3 CARACTERES
                                     < HEXADECIMAUX.
DEMOUT:  WORD        '0202           < EDITION MESSAGE.
         WORD        0               < @OCTET DU MESSAGE.
         WORD        0               < LONGUEUR DU MESSAGE.
ERASE:   WORD        '0B05           < EFFACEMENT ECRAN VISU.
OG:      WORD        '0B03           < OPEN GRAPHIQUE VISU EMISSION.
CG:      WORD        '0B04           < CLOSE GRAPHIQUE VISU EMISSION.
WG:      WORD        '0B0A           < AFFICHAGE SEGMENT COURANT.
         WORD        SEG-ZERO*2
         IF          VTVG,X100,,X100
         WORD        8               < POUR INITIALISER LE MODE
                                     < INCREMENTAL A PRIORI.
X100:    VAL         0
         IF          VTVG,,X100,
         WORD        2               < CAS DU MODE INCREMENTAL A PRIORI.
X100:    VAL         0
         IF          VTVG,,X100,
         IF          ZDC,X469,,X469
DELGS:   WORD        '0302           < DELETE INITIAL DU SEGMENT.
         WORD        NOMSEG-ZERO*2
         WORD        LONSEG
         WORD        -1
DEMGS:   WORD        '0402           < STORE LE SEGMENT COURANT.
         WORD        NOMSEG-ZERO*2
         WORD        LONSEG
         WORD        -1
DEMSCH:  WORD        '0006           < PASSAGE DE MAIN.
X469:    VAL         0
         IF          ZDC,,X469,
STOGS:   WORD        '000A           < STORE SEGMENT DANS ZDC.
         WORD        NOMSEG-ZERO*2
         WORD        LONSEG
         WORD        'FFC0           < VALIDATION DES OCTETS SEGMENT.
GETGS:   WORD        '0008           < ACCES A LA VALIDATION DANS ZDC.
         WORD        NOMSEG-ZERO*2
         WORD        SEGSGN-NOMSEG*2
         WORD        'C000
X469:    VAL         0
X100:    VAL         0
         IF          VTVG,X100,,X100
FS:      WORD        '0B07           < MISE EN SPECIAL POINT PLOT 4014.
         BYTE        '1B;'1C;'04;0   < 'ESC'+'FS'+'EOT'.
SPPM:    WORD        '0B0A           < L'ECRITURE GRAPHIQUE EN MMODE
                                     < 4014 EST FAITE AVEC UN COMPTE
                                     < D'OCTETS NON MULTIPLE DE 4 ,
                                     < AFIN QUE CMS4 NE FASSE PAS DE
                                     < CONVERSION GRAPHIQUE EN ASCI !!!!
         WORD        INTENS-ZERO*2+1
         WORD        5               < 1 CARACTERE D'INTENSITE , PLUS
                                     < 4 CARACTERES DE COORDONNEES ...
COPY:    WORD        '0B07           < ECRITURE DIRECTE HARD-COPY.
         BYTE        '1B;'17;'8D;'04 < ESC,CTRL-W,R/C.
X100:    VAL         0
DEMMEM:  WORD        '0004           < DEMANDE D'ALLOCATION 8K MOTS.
RELMEM:  WORD        '0004           < DEMANDE DE RETOUR A 4K MOTS.
         WORD        '4000
         WORD        '2000
DEMCCI:  WORD        '0001           < DEMANDE DE RETOUR AU CCI.
         IF          VTVG,X100,,X100
DEMCU1:  WORD        '0002           < APPEL CCI NON INTERACTIF.
         WORD        MCU1-ZERO*2     < POUR UN !ASSIGN B=CU1.
         WORD        80
DEMS:    WORD        '0002           < APPEL DU CCI NON INTERACTIF.
         WORD        MCUS-ZERO*2     < POUR UN !ASSIGN B=S.
         WORD        80
X100:    VAL         0
SLEEP:   WORD        '0005           < DEMANDE MISE EN SOMMEIL.
         WORD        0
         WORD        15              < POUR 15 SECONDES.
SGN:     WORD        '0002           < ACCES A L'IMAGE VIDEO.
         WORD        NOM-ZERO*2
         WORD        IMAG-NOM+LIMAG*2
         WORD        EOT-NOM*2       < DEPLACEMENT D'ACCES A LA VALEUR.
DEMSGN:  WORD        '0402           < DEMANDE SGN OVERLAY.
         WORD        BRANCH-ZERO*2
         WORD        ZERO-BRANCH+PILE-LTNI-LTNI*2
         WORD        -1
         IF          ORDI-"S",XWOR%,,XWOR%
STABIL:  WORD        '8A01           < STABILISATION IMAGE VIDEO.
         WORD        IMAG-ZERO*2
         WORD        LIMAG*2
         WORD        TVPV            < SUR LE PROCESSEUR VERT.
XWOR%:   VAL         0
<
< RELAIS DIVERS :
<
         IF          ORDI-"T",XWOR%,,XWOR%
ASP3:    WORD        SP3             < ROUTINE MAITRE DE STABILISATION
                                     < DE L'IMAGE VIDEO.
XWOR%:   VAL         0
AGOGE:   WORD        GOGE            < RETOUR A 'GE'.
         IF          VTVG,,X100,
AERR:    WORD        E1100           < RETOUR EN ERREUR A !GE.
X100:    VAL         0
AOVL:    WORD        OVL             < CHARGEMENT DES OVERLAYS.
APRINT:  WORD        PRINT           < EDITION D'UN MESSAGE.
         IF          VTVG,X100,,X100
ARCOPY:  WORD        RCOPY           < ROUTINE DE HARD-COPY EVENTUEL
                                     < ET TEMPORISATION ASSOCIEE.
X100:    VAL         0
AGETS:   WORD        GETS            < RECUPERATION DES SEUILS.
ACARD:   WORD        CARD            < ROUTINE DIRECTIONS CARDINALES.
ATEST:   WORD        TEST            < TEST DU POINT COURANT (X,Y).
AEXIST:  WORD        EXIST           < EXISTENCE ET VALEUR D'UN POINT.
AISOL:   WORD        ISOL            < DETERMINATION POINTS ISOLES.
AMS:     WORD        MS              < MODIFICATION DE L'ORIGINE DE
                                     < LA LISTE DES SEGMENTS.
AINCX:   WORD        INCX            < INCREMENTATION DE X.
AINCY:   WORD        INCY            < INCREMENTATION DE Y.
ADECX:   WORD        DECX            < DECREMENTATION DE X.
ADECY:   WORD        DECY            < DECREMENTATION DE Y.
ATRF:    WORD        TRF             < ROUTINE D'OPERATION MATRICIELLE
                                     < SUR LES COORDONNEES X,Y.
AXY:     WORD        XY              < ENTREE DU POINT ((X),(Y)) DANS
                                     < LA LISTE DES SEGMENTS.
AXY1:    WORD        XY1             < RE-INSERTION DU POINT (X,Y)
                                     < DANS LA LISTE DES SEGMENTS.
ASEG:    WORD        SEG             < POINTEUR COURANT DE LA LISTE
                                     < DES SEGMENTS.
         IF          VTVG,X100,,X100
ACONV:   WORD        SEG-1,X         < RELAI DE CONVERSION EN MODE 4014.
ASP:     WORD        SP              < ROUTINE MAITRE DE SORTIE CU1.
X100:    VAL         0
I1:      WORD        ITEM1           < @EN-TETE DE L'ITEM1.
ASI1:    WORD        SI1             < @ZONE DE SAVE DE L'EN-TETE ITEM1.
SI1:     DZS         LNOM+2          < ZONE DE SAVE EN-TETE ITEM1.
AIMAG:   WORD        IMAG-1,X        < POUR ACCES A L'IMAGE PAR JDX.
ALONG:   WORD        LONG            < POUR VALIDER L'IMAGE VIDEO.
AREP:    WORD        REP,X           < POUR CONVERSION DES SEUILS.
AE1003:  WORD        E1003           < CAS DES POINTS NOIRS (0).
AE1001:  WORD        E1001           < SUITE BALAYAGE VERTICAL.
AE1002:  WORD        E1002           < POURSUITE DU BALYAGE.
                                     < (HORIZONTAL)
APARA:   WORD        PARA            < MODULE DE PARAGLYPHE.
APARA5:  WORD        PARA5           < CAS DES POINTS ISOLES DE 'PARA'.
AINC3:   WORD        INC3            < ECRITURE GRAPHIQUE DANS LE CAS
                                     < DU MODE INCREMENTAL.
AE1009:  WORD        E1009           < TRACE POINT NON ISOLE.
AMESS:   WORD        0               < SAVE L'ADRESSE DU MESSAGE A
                                     < L'ENTREE DE GETS EN VUE DES
                                     < ERREURS DE SYNTAXE ...
         IF          VTVG,,X100,
ASTORE:  WORD        STORE           < STORE LE SEGMENT COURANT.
X100:    VAL         0
<
< CONSTANTES :
<
KIN:     WORD        -1              < COMPTEUR DES ENTREES DANS 'VG'.
IS:      WORD        0               < IS=0 : L'EN-TETE DE L'ITEM1 N'A
                                     < PAS ETE SAUVEGARDEE.
ACNSYS:  ASCI        ":SYS"
         IF          VTVG,X100,,X100
ISON:    WORD        0               < 0 : PAS DE SON GENERE ,
                                     < #0 : DU SON A ETE GENERE.
X100:    VAL         0
REDUC:   WORD        0               < FACTEUR DE REDUCTION=0/-1/-2.
FAST:    WORD        0               < FAST=0 : GRAPHIQUE RAPIDE ,
                                     < FAST>0 : GRAPHIQUE FIN ET LENT ,
         IF          VTVG,X100,,X100
                                     < FAST<0 : SPECIAL POINT PLOT
                                     <           MODE DU 4014.
X100:    VAL         0
MISOL:   WORD        0               < INDICATEUR POINT ISOLE SI =0.
KPOINT:  WORD        0               < COMPTEUR DES POINTS VOISINS DU
                                     < POINT COURANT RENCONTRES DANS
                                     < LES DIRECTIONS CARDINALES.
         IF          VTVG,X100,,X100
XCONTR:  WORD        0               < PARAMETRE DE CONTRASTE : IL
                                     < DONNE UN DECALAGE A FAIRE SUR
                                     < LE NBRE DES VOISINS (KPOINT).
X100:    VAL         0
COEF:    VAL         252             < PARAMETRE D'UNE COURBE CONIQUE.
ACOEF:   WORD        -COEF
POINTI:  WORD        0               < 0 : TRACER LES POINTS ISOLES ,
                                     < 1 : NE PAS LES TRACER.
NGE:     WORD        "GE"            < NOM DE L'OVERLAY 'GE'.
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/IMAGE -1.
NPOINT:  WORD        CNMPL*16-1      < NBRE DE POINTS/LIGNE-1.
M101:    WORD        '0101           < POUR FAIRE A=B='01.
DELTAX:  WORD        0               < DELTAX=ABS(X-X(1ER POINT)).
DELTAY:  WORD        0               < DELTAY=ABS(Y-Y(1ER POINT)).
SEUIL:   WORD        0               < SEUIL DE TEST DE DELTAX+DELTAY.
SEUILX:  WORD        0               < SEUIL DE TEST DE DELATX.
SEUILY:  WORD        0               < SEUIL DE TEST DE DELTAY.
IW:      WORD        0               < 0 : DEPLACEMENT OUEST.
INW:     WORD        0               < 0 : DEPLACEMENT NORD-OUEST.
IN:      WORD        0               < 0 : DEPLACEMENT NORD.
INE:     WORD        0               < 0 : DEPLACEMENT NORD-EST.
CONTO:   WORD        1               < 1 : DEMANDE D'UNE REPRODUCTION
                                     <     NORMALE ,
                                     < 0 : DEMANDE D'UN PARAGLYPHE.
                                     < -1 : MODE INCREMENTAL.
KEPAIS:  WORD        1               < CONSTANTE D'EPAISSISSEMENT DES TRAITS.
PLIG:    WORD        1               < PAS DE PASSAGE D'UNE LIGNE
                                     < A L'AUTRE.
PCOL:    WORD        1               < PAS DE PASSAGE D'UN POINT A
                                     < A L'AUTRE SUR UNE LIGNE.
DELX:    WORD        1               < PAS IMPLICITE DE VARIATION DE X.
DELY:    WORD        1               < PAS IMPLICITE DE VARIATION DE Y.
         IF          VTVG,,X100,
IPASA:   WORD        0               < 0=EXECUTION PAS A PAS.
X100:    VAL         0
<
< ACCES EVENTUEL AU CURSEUR GRAPHIQUE :
<
OGT:     WORD        '0B03           < NE PAS UTILISER OG , CAR SINON
                                     < RISQUE D'ERREUR SUR LE NVP
                                     < SI ON NE RENTRE PAS DE
                                     < TRANSFORMATION !!!
CU:      WORD        '0B06           < MISE EN FONCTION DU CURSEUR
         WORD        0               < GRAPHIQUE : IL FAUT AMDEM=0 !!!
LG:      WORD        '0B09           < LECTURE DU CURSEUR GRAPHIQUE.
         WORD        CURSOR-ZERO*2
         WORD        6
<
< GESTION DU MODE INCREMENTAL :
<
ALINCR:  WORD        LINCR,X         < ACCES A LA LISTE DE GESTION.
DEMINC:  WORD        '0101           < ENTREE DE LA LISTE DE GESTION.
         WORD        LINCR-ZERO*2
         WORD        8               < LA LISTE FAIT 8 CARACTERES.
IINC:    WORD        0               < INDICATEUR DU TYPE DE GESTION
                                     < DE KPOINT LORS DE L'INCREMENTAL.
<
< PERMUTATION DES BITS D'UN MOT X/Y :
<
INDPEX:  WORD        1               < 1 : NE PAS PERMUTER LES BITS(X) ,
                                     < 0 : LES PERMUTER SUIVANT 'PERX'.
INDPEY:  WORD        1               < DE MEME POUR LES BITS(Y).
APERX:   WORD        PERX-1,X        < MATRICE DE PERMUTATION DES
                                     < BITS D'UNE COORDONNEE X.
APERY:   WORD        PERY-1,X        < DE MEME POUR LES COORDONNEES Y.
<
< MATRICE DE TRANSFORMATION :
<
MAT:     EQU         $
DM22:    WORD        0
M22:     WORD        0
DM21:    WORD        0
M21:     WORD        0
DM12:    WORD        0
M12:     WORD        0
DM11:    WORD        0
M11:     WORD        0
TY:      WORD        0               < VECTEUR TRANSLATION SUR LES Y.
TX:      WORD        0               < VECTEUR TRANSLATION SUR LES X.
AMAT:    WORD        MAT-1,X         < POUR INITIALISER LA MATRICE.
INDTR:   WORD        0               < 0 : APPLIQUER LA MATRICE DE
                                     < TRANSFORMATION SUR L'IMAGE
                                     < GRAPHIQUE ; 1 : NON.
SAVEX:   WORD        0               < SAVE X A L'INITIALISATION DE
                                     < LA MATRICE DE TRANSFORMATION.
C1023:   WORD        1024-1          < X/Y MAX DE L'ECRAN.
<
< PILES DE TRAVAIL :
<
APILE:   WORD        PILE-1          < PILE DE SODOME.
STACK:   DZS         10              < PILE DE TRAVAIL.
<
< SUITE DES MESSAGES (ICI A CAUSE DE SEG-ZERO UTILISEE DANS UN CPI) :
<
MEPAIS:  BYTE        7;'6D
         ASCI        "EPAIS="
MSE:     BYTE        7;'6D
         ASCI        "SEUIL="
MSEX:    BYTE        4;'6D
         ASCI        "SX= "
MSEY:    BYTE        4;'6D
         ASCI        "SY= "
MCONT:   BYTE        6;'6D
         ASCI        "PARA? "
         IF          VTVG,X100,,X100
MCONTR:  BYTE        11;'6D
         ASCI        "CONTRASTE="
X100:    VAL         0
MIS:     BYTE        8;'6D
         ASCI        "ISOLES? "
MEFFAC:  BYTE        7;'6D
         ASCI        "ERASE?"
         IF          VTVG,X100,,X100
MCOPY:   BYTE        6;'6D
         ASCI        "COPY? "
X100:    VAL         0
MTRAX:   BYTE        4;'6D
         ASCI        "TX= "
MTRAY:   BYTE        4;'6D
         ASCI        "TY= "
MTR:     BYTE        7;'6D
         ASCI        "TRANS?"
MSLA:    BYTE        1;"/"
MM11:    BYTE        5;'6D
         ASCI        "M11="
MM12:    BYTE        5;'6D
         ASCI        "M12="
MM21:    BYTE        5;'6D
         ASCI        "M21="
MM22:    BYTE        5;'6D
         ASCI        "M22="
MMAT:    EQU         $
         WORD        MSLA;MM22
         WORD        MSLA;MM21
         WORD        MSLA;MM12
         WORD        MSLA;MM11
         WORD        MTRAY;MTRAX
MPAS:    BYTE        9;'6D
         ASCI        "PAS L/C="
MRED:    BYTE        7;'6D
         ASCI        "REDUC="
MINC:    BYTE        6;'6D
         ASCI        "INCR? "
MLIST:   BYTE        7;'6D
         ASCI        "LISTE?"
MIC:     BYTE        5;'6D
         ASCI        "TYP="
M0:      BYTE        3;'6D
         ASCI        "0="
M1:      BYTE        3;'6D
         ASCI        "1="
M2:      BYTE        3;'6D
         ASCI        "2="
M3:      BYTE        3;'6D
         ASCI        "3="
M4:      BYTE        3;'6D
         ASCI        "4="
M5:      BYTE        3;'6D
         ASCI        "5="
M6:      BYTE        3;'6D
         ASCI        "6="
M7:      BYTE        3;'6D
         ASCI        "7="
M8:      BYTE        3;'6D
         ASCI        "8="
M9:      BYTE        3;'6D
         ASCI        "9="
MA:      BYTE        3;'6D
         ASCI        "A="
MB:      BYTE        3;'6D
         ASCI        "B="
MC:      BYTE        3;'6D
         ASCI        "C="
MD:      BYTE        3;'6D
         ASCI        "D="
ME:      BYTE        3;'6D
         ASCI        "E="
MF:      BYTE        3;'6D
         ASCI        "F="
LMESS:   VAL         MF-ME           < LONGUEUR DE TOUS LES MESSAGES
                                     < RELATIFS AU PERMUTATIONS X/Y.
MPERX:   BYTE        4;'6D
         ASCI        "PX? "
MPERY:   BYTE        4;'6D
         ASCI        "PY? "
         IF          VTVG,,X100,
MFIN:    BYTE        5;'6D
         ASCI        "FIN?"
MPASA:   BYTE        20;'6D
         ASCI        "OAB INTERMEDIAIRES? "
X100:    VAL         0
         PROG
         PAGE
         IF          ORDI-"T",XWOR%,,XWOR%
TIMAG:   WORD        IMAG            < @RELATIVE IMAGE VIDEO.
         EOT         #SIP SP3#
XWOR%:   VAL         0
         PAGE
<
<
<        I N S E R T I O N   P O I N T   C O U R A N T  :
<
<
<        ARGUMENTS :
<                      X ET Y CONTIENNENT LES COORDONEES
<                    X ET Y DU POINT COURANT.
<
<
XY:      EQU         $
         LR          X,B             < B=X(POINT COURANT).
         PSR         X               < SAVE LA COORDONNEE X.
         LX          REDUC           < X=FACTEUR DE REDUCTION.
         LR          Y,A             < A=Y(POINT COURANT).
         SB          NLIG
         NGR         A,A             < POUR TENIR COMPTE DU FAIT QUE LES
                                     < Y VIDEOS ET GRAPHIQUES SONT
                                     < INVERSES.
         SLLS        DEDY,X          < EXPANSION GRAPHIQUE.
         STA         &ASEG           < INSERTION DANS LA LISTE.
         SLLD        DEDX,X          < EXPANSION GRAPHIQUE DE X.
         PLR         X               < RESTAURE LA COORDONNEE X.
         LA          ASEG            < ACCES AU POINTEUR COURANT.
         CPI         SEG-ZERO        < EST-ON EN BAS DE LA LISTE ???
         JE          E1300           < EN BAS DE LA LISTE PAS DE TEST!!!
<
< TEST DE PRISE EN COMPTE DU SEGMENT :
<
         LA          &ASEG           < Y.
         SB          SEG             < Y-Y(1ER POINT).
         JAGE        E1400
         NGR         A,A
E1400:   EQU         $
         CP          SEUILY          < LE SEGMENT EST-IL ADMISSIBLE ???
         JL          E1403           < NON , DELTAY TROP PETIT ...
         STA         DELTAY          < DELTAY=ABS(Y-Y(1ER POINT)).
         LR          B,A             < X.
         SB          SEG+1           < X-X(1ER POINT).
         JAGE        E1401
         NGR         A,A
E1401:   EQU         $
         CP          SEUILX          < LE SEGMENT EST-IL ADMISSIBLE ???
         JL          E1403           < NON , DELTAX TROP PETIT ...
         STA         DELTAX          < DELTAX=ABS(X-X(1ER POINT)).
         AD          DELTAY          < LA NORME CHOISIE POUR LES
                                     < SEGMENTS EST DELTAX+DELTAY.
         CP          SEUIL           < LE SEGMENT EST-IL ADMISSIBLE ???
         JL          E1403           < NON , IL EST TROP PETIT ...
E1300:   EQU         $               < ENTRY 'XY1'.
         IC          ASEG            < PROGRESSION POINTEUR DE LISTE.
         STB         &ASEG           < INSERTION DE LA COORDONNEE X.
         IC          ASEG            < PROGRESSION POINTEUR DE LISTE.
<
< MISE A JOUR DU CODEM DE WG :
<
         LA          WG+2
         ADRI        4,A             < 1 POINT=4 OCTETS.
E1402:   EQU         $               < SEGMENT DE TROP PETITE NORME.
         STA         WG+2
         RSR
<
< CAS DES SEGMENTS DE PETITE NORME :
<
E1403:   EQU         $
         DC          ASEG            < SUPPRESSION DE L'ENTREE
         DC          ASEG            < PRECEDENTE DE LA LISTE.
         LA          WG+2            < ACCES AU CODEM DE WG.
         ADRI        -4,A            < SUPPRESSION DU POINT PRECEDENT.
         JMP         E1402           < VERS LA SORTIE SANS INSERTION.
<
<
<        R E - I N S E R T I O N   D U   1 E R   P O I N T  :
<
<
XY1:     EQU         $
         LA          SEG             < A=Y(1ER PINT).
         LB          SEG+1           < B=X(1ER POINT).
         STA         &ASEG           < RE-INSERTION Y(1ER POINT).
         JMP         E1300           < VERS LA REINSERTION DU X , ET
                                     < LA MISE A JOUR DE WG.
<
<
<        O R I G I N E   D E   L A   L I S T E
<                    D E S   S E G M E N T S  :
<
<
<        RESULTAT :
<                    A=CODEM(WG).
<
<
MS:      EQU         $
         LA          WG+1            < ACCES A L'@OCTET DU BUFFER.
         ADRI        4,A             < SUPPRESSION DU 1ER POINT DE
                                     < LA LISTE.
         STA         WG+1            < MAJ DE WG.
         LA          WG+2
         ADRI        -4,A            < 1 POINT=2 MOTS=4 OCTETS.
         STA         WG+2            < MAJ DE WG.
         RSR
         PAGE
<
<
<        I N C R E M E N T A T I O N / D E C R E M E N T A T I O N
<                    D E   X   E T   D E   Y  :
<
<
INCX:    EQU         $
         XR          A,X
         AD          DELX            < X<--(X)+(DELX).
         XR          A,X
         RSR
DECX:    EQU         $
         XR          A,X
         SB          DELX            < X<--(X)-(DELX).
         XR          A,X
         RSR
INCY:    EQU         $
         XR          A,Y
         AD          DELY            < Y<--(Y)+(DELY).
         XR          A,Y
         RSR
DECY:    EQU         $
         XR          A,Y
         SB          DELY            < Y<--(Y)-(DELY).
         XR          A,Y
         RSR
         PAGE
<
<
<        D E P L A C E M E N T S   C A R D I N A U X  :
<
<
<        ARGUMENT :
<                    A=@MESSAGE A EMETTRE.
<
<
<        RESULTAT :
<                    B=0 : ALLER DANS LA DIRECTION DEMANDEE PAR
<                          LE MESSAGE ,
<                     =1 : NE PAS Y ALLER.
<                    INDICATEURS POSITIONNES PAR 'CPZR B'.
<
<
CARD1:   EQU         $               < CAS DES ERREURS DE REPONSES.
         LA          AMESS           < RESTAURE : A=@MESSAGE.
CARD:    EQU         $               < ENTREE NORMALE.
         STA         AMESS           < SAVE L'@MESSAGE EN CAS D'ERREUR.
         BSR         APRINT          < ENVOI DU MESSAGE ARGUMENT.
         LAD         DEMREP
         SVC         0               < ENTREE DE LA REPONSE.
         LBY         REP             < A=REPONSE UTILISATEUR.
<
<        REPONSES RECONNUES :
<                    N : NE PAS Y ALLER (B=1) ,
<                    O : ALLER DANS LA DIRECTION DU MESSAGE (B=0).
<
         LBI         0               < OUI A PRIORI ...
         CPI         "O"
         JE          CARD2           < OK , ON Y VA ...
         LBI         1               < NON A PRIORI.
         CPI         "N"
         JNE         CARD1           < ERREUR : REINITERROGATION ...
CARD2:   EQU         $
         CPZR        B               < POUR TEST EN RETOUR DE (B).
         RSR                         < RENVOIE B.
         PAGE
<
<
<        R E C U P E R A T I O N   D E S   S E U I L S  :
<
<
<        FONCTION :
<                      CETTE ROUTINE PERMET D'ENTRER
<                    DES NOMBRE HEADECIMAUX AVEC
<                    EMISSION PREALABLE D'UN MESSAGE ,
<                    ET ITERATION SUR FAUTE DE SYNTAXE.
<                      LES SEUILS SONT EXPRIMES EN NOMBRE DE
<                    POINTS ET DE LIGNE TELEVISION !!!!
<
<
<        ARGUMENT :
<                    A=@MESSAGE DE DEMANDE DU SEUIL.
<
<
<        RESULTAT :
<                    A=SEUIL DEMANDE.
<
<
GETS3:   EQU         $               < ENTRY POUR ERREUR DE SYNTAXE.
         LA          AMESS           < RESTAURE : A=@MESSAGE.
GETS:    EQU         $               < ENTRY NORMALE.
         STA         AMESS           < SAVE L'@MESSAGE AU CAS OU
                                     < UNE ERREUR DE SYNTAXE DANS LES
                                     < SEUILS AURAIT LIEU.
         BSR         APRINT          < EMISSION DU MESSAGE.
         LAD         DEMSE
         SVC         0               < ENTRREE DES 3 CARACTERES.
         LXI         0               < X=INDEX DE PARCOURS DU BUFFER.
         LY          DEMSE+2         < POUR TEST D'ARRET SUR (X).
         LBI         0               < CLEAR LE REGISTRE B.
<
< BOUCLE DE CONVERSION :
<
GETS1:   EQU         $
         LBY         &AREP           < A=CARACTERE COURANT.
         CPI         '04
         JE          GETS4           < ON ARRETE SUR 'EOT'.
         CPI         '0D
         JE          GETS4           < ON ARRETE SUR 'R/C'.
         ADRI        -'30,A
         JAL         GETS3           < ERREUR DE SYNTAXE.
         CPI         9               < EST-CE UN CHIFFRE ???
         JLE         GETS2           < OUI , OK.
         ADRI        -'41+'39+1,A
         CPI         'A              < EST-CE UNE LETTRE ???
         JL          GETS3           < NON , ERREUR.
         CPI         'F              < VALIDATION SUPERIEURE ???
         JG          GETS3           < ERREUR.
GETS2:   EQU         $               < OK , CHIFFRE HEXADECIMAL.
         SCRS        4               < MISE EN TETE DE A.
         SCLD        4               < CONCATENATION DANS B.
         ADRI        1,X             < PROGRESSION DANS LE BUFFER.
         CPR         X,Y             < EST-CE FINI ???
         JNE         GETS1           < NON , ON CONTINUE ....
GETS4:   EQU         $               < ARRET SUR 'EOM'.
         LR          B,A             < RENVOIE : A=SEUIL DEMANDE ...
         RSR
         PAGE
<
<
<        O P E R A T I O N S   M A T R I C I E L L E S  :
<
<
<        FONCTION :
<                      CETTE ROUTINE APPLIQUE SI CELA A
<                    ETE DEMANDE LES TRANSFORMATIONS
<                    MATRICIELLES ET PERMUTATIONNELLES
<                    SUR LES COORDONNEES X ET Y.
<
<
<        ARGUMENT :
<                    X=NBRE DE COORDONNEES A TRANSFORMER.
<
<
TRF:     EQU         $
         CPZ         INDTR           < FAUT IL TRANSFORMER L'IMAGE
                                     < GRAPHIQUE ???
         JNE         E6010           < NON , ALLONS L'AFFICHER ...
         LA          WG+1            < A=@OCTET REELLE LISTE SEGMENTS.
         SLRS        1               < A=@MOT LISTE REELLE ....
         STA         ASEG            < REINITIALISATION DU POINTEUR
                                     < DE LISTE GRAPHIQUE.
<
< APPLICATION DE LA TRANSFORMATION A 1 POINT :
<
TR:      EQU         $
         LA          &ASEG           < Y.
         MP          M12
         DV          DM12
         PSR         A               < SAVE A=M12*Y.
         IC          ASEG
         LA          &ASEG           < X.
         MP          M11
         DV          DM11            < A=M11*X.
         PLR         B               < B=M12*Y.
         ADR         B,A             < A=M11*X+M12*Y.
         AD          TX
         PSR         A               < SAVE A=M11*X+M12*Y+TX.
         LA          &ASEG           < X.
         MP          M21
         DV          DM21
         PSR         A               < SAVE A=M21*X.
         DC          ASEG
         LA          &ASEG           < Y.
         MP          M22
         DV          DM22            < A=M22*Y.
         PLR         B               < B=M21*X.
         ADR         B,A             < A=M21*X+M22*Y.
         AD          TY              < A=M21*X+M22*Y+TY.
<
< PERMUTATION DES BITS DE Y TRANSFORMEE :
<
         CPZ         INDPEY          < FAUT-IL PERMUTER ???
         JNE         PRY1            < NON ...
         PSR         X               < ET OUI , ALORS SAVE X.
         LR          A,Y             < Y=COORDONNEE Y DONT ON PERMUTE
                                     < LES BITS.
         LBI         0               < INITIALISATION DE LA COORDONNEE
                                     < Y PERMUTEE.
         LXI         16              < 16 BITS DANS UN MOT ....
PRY2:    EQU         $
         LA          &APERY          < A=COEFFICIENT COURANT DE LA
                                     < MATRICE DE PERMUTATION DES Y.
         ANDR        Y,A
         JAE         PRY3            < INTERSECTION VIDE.
         SBT         15,X            < INTERSECTION NON VIDE.
PRY3:    EQU         $
         JDX         PRY2            < AU BIT PRECEDENT.
         LR          B,A             < A=COORDONNEE Y TRANSFORMEE
                                     < ET PERMUTEE ...
         PLR         X               < RESTAURE X.
PRY1:    EQU         $
         CP          C1023           < VALIDATION GRAPHIQUE.
         JLE         TR1             < OK POUR LE MAX.
         LA          C1023           < SI TROP GRAND , ON PREND LE MAX.
TR1:     EQU         $
         JAGE        TR3             < OK , POUR LE MIN.
         LAI         0               < SI TROP PETIT , ON PREND LE MIN.
TR3:     EQU         $
         STA         &ASEG           < SAVE L'Y TRANSFORME.
         IC          ASEG            < PASSAGE A L'ENTREE SUIVANTE.
         PLR         A               < RESTAURE A=M11*X+M12*Y+TX.
<
< FAUT-IL PERMUTER LES BITS DE LA COORDONNEE X TRANSFORMEE ???
<
         CPZ         INDPEX          < ALORS ON PERMUTE ???
         JNE         PRX1            < NON.
         PSR         X               < OUI , ALORS SAVE X.
         LR          A,Y             < Y=COORDONNEE X TRANSFORMEE ,
                                     < DONT ON PERMUTE LES BITS
                                     < SUIVANT LA MATRICE PERX.
         LBI         0               < INITIALISATION DE LA COORDONNEE
                                     < X PERMUTEE.
         LXI         16              < 16 BITS DANS UN MOT.
PRX2:    EQU         $
         LA          &APERX          < A=COEFFICIENT COURANT DE LA
                                     < MATRICE DE PERMUTATION.
         ANDR        Y,A
         JAE         PRX3            < INTERSECTION VIDE.
         SBT         15,X            < INTERSECTION NON VIDE.
PRX3:    EQU         $
         JDX         PRX2            < AU BIT PRECEDENT.
         LR          B,A             < A=COORDONNEE X TRANSFORMEE
                                     < PUIS PERMUTEE ...
         PLR         X               < ET ENFIN , RESTAURE X.
PRX1:    EQU         $
         CP          C1023           < VALIDATION MAX.
         JLE         TR2             < OK POUR LE MAX.
         LA          C1023           < SI TROP GRAND , ON PREND LE MAX.
TR2:     EQU         $
         JAGE        TR4             < OK POUR LE MIN.
         LAI         0               < SI TROP PETIT , ON PREND LE MIN.
TR4:     EQU         $
         STA         &ASEG           < SAVE L'X TRANSFORME.
         IC          ASEG            < PASSAGE A 6HENTREE SUIVANTE.
         JDX         TR              < PASSAGE AU POINT SUIVANT.
E6010:   EQU         $
         RSR
         PAGE
<
<
<        T E S T   U N   P O I N T  :
<
<
<        ARGUMENT :
<                    C=@IMAG ,
<                    X ET Y CONTIENNENT L'X ET L'Y DU POINT.
<
<
<        RESULTAT :
<                    LE CARY EST POSITIONNE PAR UN 'TBT'.
<
<
TEST:    EQU         $
         PSR         B,X,C
         LR          Y,A             < A=Y DU POINT A TESTER.
         MP          NMPL
         ADR         B,C
         LR          X,A             < A= X DU POINT A TESTER.
         SLRS        4               < DIVISION PAR 16.
         ADR         A,C             < C=@MOT CONTENANT LE POINT.
         LAI         'F
         ANDR        A,X             < X=NUMERO DU BIT REPRESENTANT
                                     < LE POINT X,Y DANS LE MOT (C).
         LA          0,C
         TBT         0,X             < TEST DU POINT ARGUMENT.
         PLR         B,X,C
         RSR
         PAGE
<
<
<        E X I S T E N C E   E T   V A L E U R
<        D U   P O I N T   C O U R A N T  :
<
<
<        ARGUMENT :
<                    X ET Y=COORDONNEES X ET Y DU POINT COURANT.
<
<
<        RESULTAT :
<                    A=0 : (X,Y) EXISTE ET EST A 1 ,
<                    A#0 : (X,Y) N'EXISTE PAS , OU
<                          (X,Y) EXISTE ET EST A 0.
<
<
EXIST:   EQU         $
         LAI         1               < LE POINT (X,Y) N'EXISTE PAS
                                     < A PRIORI ...
         CPZR        X               < VALIDATION COORDONNEE X.
         JL          NEXIST          < (X,Y) N'EXISTE PAS.
         CPZR        Y               < VALIDATION COORDONNEE Y.
         JL          NEXIST          < (X,Y) N'EXISTE PAS.
         LR          X,A
         CP          NPOINT          < VALIDATION COORDONNEE X.
         JG          NEXIST          < (X,Y) N'EXISTE PAS.
         LR          Y,A
         CP          NLIG            < VALIDATION COORDONNEE Y.
         JG          NEXIST          < NX,Y) N'EXISTE PAS.
<
< CAS OU LE POINT (X,Y) EXISTE :
<
         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 (X,Y) DANS LE MOT ((C)).
         LA          0,C             < ACCES AU MOT.
         TBT         0,X             < TEST DU POINT.
         PLR         B,X,C
         LAI         1
         SBCR        A               < A=0 : LE POINT (X,Y) EST A 1.
         JANE        NEXIST          < LE POINT N'EXISTE PAS.
         IC          KPOINT          < SI LE POINT EXISTE ON LE COMPTE.
NEXIST:  EQU         $
         RSR
<
<
<        P O I N T S   I S O L E S  :
<
<
<        RESULTATS :
<                    B=-1 : DANS TOUS LES CAS ...
<                    MISOL=0 : LE POINT EST PEUT-ETRE ISOLE ,
<                              OU BIEN MODE 4014 ...
<                         =-1 : LE POINT N'EST PAS ISOLE ...
<
<
ISOL:    EQU         $
         LBI         -1              < A PRIORI , ON PREPARE LE
                                     < COMPTAGE.
         CPZ         FAST            < QUEL EST LE MODE D'EXECUTION ???
         JGE         ISOL2           < CAS DU 4010 , OU TOUS LES CAS
                                     < DE GRAPHIQUE FIN.
         LAI         -1              < DANS LE CAS 4014 , ON FAIT
                                     < COMME SI LE POINT ETAIT ISOLE.
ISOL2:   EQU         $
         JANE        ISOL1
         STB         MISOL           < ON MEMORISE QU'ON A TROUVE AU
                                     < MOINS UN VOISIN AU POINT
                                     < COURANT :
                                     < - EST , OU
                                     < - SUD-EST , OU
                                     < - SUD , OU
                                     < - SUD-OUEST.
ISOL1:   EQU         $
         RSR
         PAGE
<
<
<        E M I S S I O N   D ' U N   M E S S A G E  :
<
<
<        FONCTION :
<                      EDITER UN MESSAGE ; DE PLUS SI
<                    LE DEMANDEUR EST SOUS :SYS ,
<                    CETTE ROUTINE STABILISE L'IMAGE
<                    VIDEO COURANTE.
<
<
<        ARGUMENT :
<                    A=@MOT DU MESSAGE.
<
<
PRINT:   EQU         $
         PSR         C               < SAVE L'@ IMAG.
         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 MESSAGE.
         PLR         C               < RESTAURE C=@IMAGE VIDEO.
         IF          ORDI-"T",XWOR%,,XWOR%
         LA          ASP3            < A=@ROUTINE DE STABILISATION.
         JAE         PRINT1          < ON N'EST PAS SOUS :SYS !!!
         WORD        '1EC5           < SOUS :SYS : STABILISATION DE
                                     < L'IMAGE VIDEO.
PRINT1:  EQU         $
XWOR%:   VAL         0
         RSR
         IF          VTVG,X100,,X100
         PAGE
<
<
<        H A R D - C O P Y   E T   T E M P O R I S A T I O N   ???
<
<
<        FONCTION :
<                      CETTE ROUTINE PERMET D'INTERROGER
<                    L'UTILISATEUR SUR UN HARD-COPY
<                    EVENTUEL , ET PERMET EN TOUT CAS
<                    D'INTERROMPRE L'EMISSION ET PAR LA
<                    DEMANDE DE COPY D'EMETTRE UN R/C
<                    FORT UTILE DANS LE CAS OU LES CARACTERES
<                    GRAPHIQUES SONT RECUPERES PAR UNE
<                    LIGNE BOUCLEE !!!
<
<
RCOPY:   EQU         $
<
< FAUT-IL FAIRE UN HARD-COPY DE L'IMAGE :
<
         LAD         CG
         SVC         0               < MISE EN ALPHA DE LA VISU.
                                     < (UTILE DANS LE CAS NVP='02).
HCOPY:   EQU         $
         LA          AMCOPY
         BSR         ACARD           < ENVOI D'1N MESSAGE , ET RENVOIIE
                                     < LA REPONSE : B=0 SI OUI.
         JNE         NCOPY           < NON , RETOUR A 'GE'.
         LAD         COPY
         SVC         0
         LAD         SLEEP
         SVC         0               < ET ATTENTE DE 15 SECONDES DE
                                     < FIN DE HARD-COPY.
         JMP         HCOPY           < FAUT-IL EN FAIRE ENCORE UNE ???
NCOPY:   EQU         $
         RSR
X100:    VAL         0
         IF          VTVG,,X100,
         PAGE
<
<
<        I N T E R F A C E   D ' I N T E R P O L A T I O N  :
<
<
<        FONCTION :
<                      TENTE TANT QU'IL LE FAUT DE STORER
<                    LE SEGMENT ':GS' SOUS SGN.
<                    (OU DANS LA ZDC, SUIVANT LA VALEUR DU
<                    PARAMETRE 'ZDC')
<
<
<
STORE:   EQU         $
         IF          ZDC,X469,,X469
INT2:    EQU         $
         LAD         DEMGS
         SVC         0               < TENTATIVE DE STORE LE SEGMENT.
         JE          INT3            < OK , STORE ACCEPTE.
         LAD         DEMSCH
         SVC         0               < DANS LE CAS CONTRAIRE ON REND
                                     < LA MAIN TEMPORAIREMENT.
         JMP         INT2            < PUIS ON REFAIT UNE NOUVELLE
                                     < TENTATIVE.
INT3:    EQU         $
X469:    VAL         0
         IF          ZDC,,X469,
         LAD         GETGS
         SVC         0               < ACCES A LA VALIDATION COURANTE.
         CPZ         NOMSEG          < TEST DE LA VALIDATION...
         JNE         STORE           < LE SEGMENT PRECEDENT N'A PAS
                                     < ENCORE ETE ACQUIS, ON REBOUCLE.
         DC          NOMSEG          < OK, IL A ETE ACQUIS, VALIDONS
         LAD         STOGS           < LE SUIVANT,
         SVC         0               < QUE L'ON EVOIE DANS ZDC.
X469:    VAL         0
         RSR
X100:    VAL         0
         PAGE
<
<
<        G E N E R A T E U R   V I D E O - G R A P H I Q U E  :
<
<
<        FONCTION :
<                      CE PROCESSEUR PERMET D'AFFICHER
<                    SUR LA VISU NVP='0B UNE IMAGE VIDEO
<                    SOUS FORME D'UN TREILLIS DE SEGMENTS.
         IF          VTVG,,X100,
<                      DE PLUS, VT CONSTITUE UN INTERFACE
<                    AVEC TA POUR LES INTERPOLATIONS
<                    DE TYPE GRAPHIQUE (FIN DE LISTE 'OAB').
X100:    VAL         0
<
<
         WORD        IMAG
         WORD        LOC+'80
         WORD        BRANCH
IMAGE:   EQU         $
         LRP         K
         ADRI        -1,K
         PLR         C,L,W           < INITIALISATIONS DES 3 BASES.
         LAD         STACK-1
         LR          A,K             < INITIALISATION DE K SUR LA PILE
                                     < DE TRAVAIL STACK.
<
< DECOMPTAGE DES ENTREES :
<
         IC          KIN
         JG          GOGE            < KIN>0 , IL NE S'AGIT PAS DE
                                     < LA 1ERE ENTREE ; ON EST A LA
                                     < SUITE D'UN ALT-MODE.
<
< CAS DE LA 1ERE ENTREE :
<
< SAVE L'EN-TETE DE L'ITEM1 :
<
         LB          ASI1            < B=@ZONE DE SAVE.
         LA          I1              < A=@EN-TETE DE L'ITEM1.
         LXI         LNOM+1
         MOVE                        < SAVE L'EN-TETE DE L'ITEM1.
         IC          IS              < IS=1 : EN-TETE SAUVEGARDEE.
<
< ALLOCATION DE 8K MOTS :
<
         LAD         DEMMEM
         SVC         0
         IF          VTVG,,X100,
<
< INITIALISATION SEGMENT COURANT :
<
         IF          ZDC,X469,,X469
         LAD         DELGS
         SVC         0               < DELETE PREVENTIF DE ':GS'.
X469:    VAL         0
         IF          ZDC,,X469,
         LAD         STOGS
         SVC         0               < ENVOI D'UNE VALIDATION NULLE.
         DC          NOMSEG          < VALIDATION 1ER SEGMENT.
X469:    VAL         0
X100:    VAL         0
<
< ACCES A L'ACN DU DEMANDEUR :
<
         WORD        '1E25           < (A,B)=ACN DU DEMANDEUR.
         CP          ACNSYS          < EST-CE :SYS ???
         JNE         E3200           < NON.
         LR          B,A             < PEUT-ETRE ...
         CP          ACNSYS+1        < EST-CE :SYS ???
         JE          E3201           < OUI.
E3200:   EQU         $               < CAS OU L'ON N'EST PAS SOUS :SYS.
         IF          ORDI-"T",XWOR%,,XWOR%
         STZ         ASP3            < PAS DE STABILISATION DE L'IMAGE.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         IF          VTVG,X100,,X100
         STZ         ASP             < PAS DE SORTIE SON.
X100:    VAL         0
XWOR%:   VAL         0
E3201:   EQU         $               < CAS OU L'ON EST SOUS :SYS.
<
< ACCES ET VALIDATION DE L'IAMGE VIDEO :
<
         LAD         MNOM
         BSR         APRINT          < ENVOI D'UNE INVITATION.
         LAD         DEMIN
         SVC         0               < ENTREE DU NOM DE L'IMAGE VIDEO.
         LAI         '05
         STBY        SGN             < NVP DE LOAD SOUS <ACN>.
         LAD         SGN
         SVC         0               < TENTATIVE DE LOAD IMAGE.
         JE          E1000           < OK , ON A TROUVE L'2MAGE.
         LAI         '06
         STBY        SGN             < SINON , ON ESSAYE UN NVP DE
                                     < LOAD SOUS :SYS.
         LAD         SGN
         SVC         0               < TENTATIVE DE LOAD SOUS :SYS ...
         JE          E1000           < OK , ON A TROUVE L'IMAGE.
<
<        T R A I T E M E N T   D E S   E R R E U R S  :
<
E1100:   EQU         $
         LAD         MERR
         BSR         APRINT          < ENVOI D'UN MESSAGE D'ERREUR.
<
<        R E T O U R   A   ' G E '  :
<
GOGE:    EQU         $
         IF          VTVG,X100,,X100
         CPZ         ISON            < DU SON A-T'IL ETE GENERE ???
         JE          E1318           < NON RIEN A FAIRE ...
         LAD         DEMS
         SVC         0               < SI OUI , IL FAUT RENDRE CU1.
                                     < (CF. LE ALT-MODE DE PRESC).
E1318:   EQU         $
X100:    VAL         0
         LAD         CG
         SVC         0               < REMISE EVENTUELLE DE LA VISU
                                     < D'EMISSION EN APLHA-NUMERIQUE.
<
< RESTAURATION DE L'EN-TETE DE L'ITEM1 :
<
         CPZ         IS              < L'EN-TETE A-T'ELLE ETE
                                     < SAUVEGARDEE ???
         JE          NIS             < NON , RIEN A FAIRE ...
         LA          ASI1            < A=@ZONE DE SAVE.
         LB          I1              < B=@EN-TETE DE L'ITEM1.
         LXI         LNOM+1
         MOVE                        < RESTAURATION DE L'EN-TETE ITEM1.
NIS:     EQU         $
<
< RESTAURATION DE L'ESPACE MEMOIRE :
<
         LA          APILE
         LR          A,K             < REINITIALISATION DE K SUR
                                     < LA PILE DE SODOME.
         LAD         RELMEM
         SVC         0               < RETOUR A 4K MOTS.
<
< CHARGEMENT DE L'OVERLAY 'GE' :
<
         LA          NGE
         STA         0,W             < MISE EN PLACE DU NOM DE 'GE'
                                     < EN TETE DE LA BRANCHE.
         LAI         '06
         STBY        DEMSGN          < NVP DE LOAD SOUS :SYS.
E101:    EQU         $
         LAD         DEMSGN          < A=@DEMSGN ; W=@BRANCH.
         BSR         AOVL            < TENTATIVE D'OVERLAY.
         LAD         DEMCCI
         SVC         0               < SI OVERLAY IMPOSSIBLE , ON
                                     < FAIT UN RETOUR AU CCI.
         JMP         E101            < PUIS NOUVELLE TENTATIVE SI !GO.
<
<        I N I T I A L I S A T I O N  :
<
E1000:   EQU         $
<
< VALIDATION DE L'IMAGE VIDEO :
<
         LA          &ALONG
         CPI         -3
         JL          E1100           < ERREUR : PAS VIDEO !!!
         JAGE        E1100           < ERREUR : FLOPPY ....
         IF          ORDI-"S",XWOR%,,XWOR%
         LAD         STABIL          < VISUALISATION IMAGE VIDEO.
         SVC         0
XWOR%:   VAL         0
<
< QUE FAIRE DE L'IMAGE :
<
E1337:   EQU         $
         LAD         MINT
         BSR         APRINT          < ENVOI D'UNE INVITATION.
         LAD         DEMREP
         SVC         0               < ENTREE DE LA REPONSE.
<
<        REPONSES RECONNUES :
<                    F : RETOUR A GE ,
<                    G : CONVERSION VIDEO --> GRAPHIQUE DE L'IMAGE ,
<                    D : IDEM A 'G' ,
         IF          VTVG,X100,,X100
<                    S : RECONSTITUTION D'UN SON AYANT COMME
<                        REPRESENTATION L'IMAGE ENTREE.
X100:    VAL         0
<
         LBY         REP             < A=REPONSE DE L'UTILISATEUR.
         CPI         "F"
         JE          GOGE            < RETOUR IMMEDIAT A 'GE'.
         CPI         "G"
         JE          GRAPH           < CONVERSION VIDEO --> GRAPHIQUE.
         CPI         "D"
         JE          GRAPH           < CONVERSION VIDEO --> GRAPHQUE.
         IF          VTVG,X100,,X100
         CPI         "S"
         JE          SON             < DEMANDE DE CONVERSION SONORE.
X100:    VAL         0
E1301:   EQU         $
         LAD         MERR
         BSR         APRINT          < ENVOI D'UN MESSAGE D'ERREUR.
         JMP         E1337           < PUIS , ON RE-INTERROGE ...
         IF          VTVG,X100,,X100
<
<
<        E M I S S I O N   S O N  :
<
<
SON:     EQU         $
         IF          ORDI-"T",XWOR%,,XWOR%
         CPZ         ASP3            < EST-ON SOUS :SYS ???
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         CPZ         ASP             < EST-ON SOUS :SYS ???
XWOR%:   VAL         0
         JE          E1301           < NON , LE SON EST REFUSE ...
<
< CAS D'UNE DEMANDE SOUS :SYS :
<
         LAD         DEMCU1
         SVC         0               < ASSIGNATION DU CU1 AFIN DE LE
                                     < LOUER , BIEN QU'IL SOIT ATTEINT
                                     < DIRECTEMENT EN MODE MAITRE.
         JNE         E1301           < CU1 INACCESIBLE ...
         IC          ISON            < ON FAIT : ISON#0 !!!
         LA          ASP
E1319:   EQU         $
         WORD        '1EC5           < SI CU1 EST LOUE , ON LANCE UNE
                                     < ROUTINE MAITRE DE SORTIE DIRECTE
                                     < SUR LUI ...
         JMP         E1319           < ON RECOMMENCE ; LA SORTIE
                                     < DE CETTE BOUCLE SE FAIT PAR
                                     < ALT-MODE DE PRESC.
X100:    VAL         0
<
<
<        C O N V E R S I O N   G R A P H I Q U E  :
<
<
GRAPH:   EQU         $
<
< CHOIX DU FACTEUR DE REDUCTION :
<
         LA          AMRED
         BSR         APRINT          < ENVOI D'UNE INVITATION.
         LAD         DEMREP
         SVC         0               < LECTURE DU FACTEUR DE REDUCTION.
<
<        FACTEURS DE REDUCTION RECONNUS :
<                    0 : GRANDEUR REELLE ,
<                    1 : IMAGE/2 ,
<                    2 : IMAGE/4.
<
         LBY         REP             < A=CARACTERE LU.
         ADRI        -'30,A          < TRANSLATION NUMERIQUE.
         JAL         GRAPH           < ERREUR : CARACTERE NON RECONNU.
         CPI         DEDX+DEDY/2     < VALIDATION SUPERIEURE.
         JG          GRAPH           < ERREUR : CARACTERE NON RECONNU.
         NGR         A,A             < OK (0,1,2) : ON L'INVERSE.
         STA         REDUC           < MISE EN PLACE DU FACTEUR DE
                                     < REDUCTION.
<
< FAUT-IL TRANSFORMER L'IMAGE ???
<
         LA          AMTR
         BSR         ACARD           < ENVOI D'UN MESSAGE ET LECTURE
                                     < DE LA REPONSE (OUI=0).
         STB         INDTR           < SAVE L'INDICATEUR DE TRANSFO.
         JNE         E6001           < ET NON , ...
E6100:   EQU         $
<
< ACCES AU CURSEUR GRAPHIQUE DE LA VISU :
<
         LAD         OGT
         SVC         0               < OPEN GRAPHIQUE DE LA VISU '0B/'02
         JE          E6101           < OK.
         LAI         '02             < SI NON , CHANGEMENT DE NVP.
         STBY        OGT
         STBY        CU
         STBY        LG
         LAD         OGT             < TRY AGAIN , MAIS SANS REBOUCLAGE,
         SVC         0               < AU CAS OU ON SERAIT EN BATCH !!!
E6101:   EQU         $
         LAD         CU
         SVC         0               < MISE EN FONCTION DU CURSEUR
                                     < GRAPHIQUE.
         LAD         LG
         SVC         0               < ET LECTURE DE CELUI-CI.
         LBY         CURSOR          < A=CARACTERE DE DEBLOCAGE.
         LXI         10              < NE PAS L'UTILISER A PRIORI ('N'),
                                     < DONC 10 NBRES A ENTRER.
<        REPONSES RECONNUES :
<                    O : TX ET TY SONT DONNEES PAR LE CURSEUR GRAPHIQUE,
<                    N : TX ET TY SONT RENTRES AU CLAVIER.
         CPI         "N"             < FAUT-IL UTILISER LE CURSEUR ???
         JE          E6102           < NON , 10 NBRES A ENTRER.
         CPI         "O"             < EST-CE OUI ???
         JNE         E6100           < RIEN COMPRIS , REINTERROGATION.
         LA          CURSOR+1        < OUI : A=Y(CURSEUR) ,
         STA         TY              < CE QUI DONNE TRANSLATION SUR Y.
         LA          CURSOR+2        < A=X(CURSEUR) ,
         STA         TX              < CE QUI DONNE TRANSLATION SUR X.
         LXI         8               < IL N'Y A PLUS QUE LES 8
                                     < COEFFICIENTS DE LA MATRICE
                                     < A ENTRER.
E6102:   EQU         $
<
< ENTREE DE LA MATRICE DE TRANSFORMATION :
<
         IC          DEMSE+2         < POUR ENTRER 4 CARACTERES.
E6002:   EQU         $
         STX         SAVEX           < SAVE X (PAS DE PLACE DANS
                                     < LA PILE !!!)
         LA          &AMMAT          < RECUPERATION DU MESSAGE (X).
         BSR         AGETS           < ENVOI DU MESSAGE ET CONVERSION
                                     < DU COEFFICIENT CORRESPONDANT.
         LX          SAVEX           < RESTAURE X.
         STA         &AMAT           < ET SAVE LE COEFFICIENT.
         JDX         E6002           < AU SUIVANT.
<
< FAUT-IL PERMUTER LES COORDONNEES TRANSFORMEES X :
<
         LA          AMPERX
         BSR         ACARD           < ENVOI INTERROGATION ET LECTURE
                                     < DE LA REPONSE DANS B.
         STB         INDPEX          < SAVE LA REPONSE POUR X.
         JNE         E6300           < NON ...
<
< ENTREE DE LA MATRICE DE PERMUTATION DES BITS DE X TRANSFORMEE :
<
         LXI         16              < 1L COEFFICIENTS A ENTRER.
         LA          AP              < A=@1ER MESSAGE A EMETTRE.
E6301:   EQU         $
         STX         SAVEX           < SAVE LE DECOMPTEUR X.
         PSR         A               < SAVE L'@MESSAGE.
         BSR         AGETS           < ENVOI MESSAGE (A) ET ENTREE
                                     < D'UN COEFFICIENT.
         LX          SAVEX           < RESTAURE X.
         STA         &APERX          < SAVE LE COEFFICIENT.
         PLR         A               < RESTAURE L'@MESSAGE.
         ADRI        -LMESS,A        < PASSAGE AU MESSAGE PRECEDENT.
         JDX         E6301           < AU PRECEDENT ....
<
< FAUT-IL PERTMUTER LES BITS DES COORDONNEES Y TRANSFORMEES :
<
E6300:   EQU         $
         LA          AMPERY          < ENVOI INTERROGATION ET ENTREE
                                     < REPONSE DANS B.
         BSR         ACARD
         STB         INDPEY          < SAVE LA REPONSE.
         JNE         E6302           < NON ...
<
< ENTREE DE LA MATRICE DE PERMUTATION DES BITS DE Y TRANSFORMEE :
<
         LXI         16              < 1L COEFFICIENTS A ENTRER.
         LA          AP              < A=@1ER MESSAGE A EMETTRE.
E6303:   EQU         $
         STX         SAVEX           < SAVE X.
         PSR         A               < SAVE L'@MESSAGE.
         BSR         AGETS           < EDITION MESSAGE ET ENTREE
                                     < D'UN COEFFICIENT.
         LX          SAVEX           < RESTAURE X.
         STA         &APERY          < SAVE LE COEFFICIENT.
         PLR         A               < RESTAURE L'@MESSAGE.
         ADRI        -LMESS,A        < PASSAGE AU MESSAGE PRECDENT.
         JDX         E6303           < AU PRECEDENT ...
E6302:   EQU         $
         DC          DEMSE+2         < RETOUR A 3 CARACTERES.
         LA          AMTR
         BSR         ACARD           < FAUT-IL RERENTRER LES PARAMETRES?
         JE          E6100           < ET OUI , ON RECOMMENCE ...
E6001:   EQU         $
<
< CHOIS DE LA VITESSE :
<
E1011:   EQU         $
         STZ         POINTI          < TRACER LES POINTS ISOLES A
                                     < PRIORI , AU CAS OU LE RAPIDE
                                     < SERAIT DEMANDE.
         STZ         FAST            < FAST=0 : RAPIDE A PRIORI.
         LAD         MFAST
         BSR         APRINT          < ENVOI D'UNE INTERROGATION ...
         LAD         DEMREP
         SVC         0               < LECTURE DE LA REPONSE.
<
<        REPONSES RECONNUES :
<                    O : GRAPHIQUE GROSSIER ET RAPIDE ,
         IF          VTVG,X100,,X100
<                        OU SPECIAL POINT PLOT MODE DU 4014 ,
X100:    VAL         0
<                    N : GRAPHIQUE FIN ET LENT ,
<
         LBY         REP             < A=REPONSE UTILISATEUR.
         CPI         "O"
         IF          VTVG,X100,,X100
         JE          E3000           < DEMANDE DE GRAPHIQUE RAPIDE.
X100:    VAL         0
         IF          VTVG,,X100,
         JE          E1010           < VERS LA DEMANDE DES PAS
                                     < DE PARCOURS.
X100:    VAL         0
         IC          FAST            < FAST=1>0 : LENT A PRIORI.
         CPI         "N"
         JE          E1410           < DEMANDE GRAPHIQUE LENT.
         JNE         E1011           < VERS UNE NOUVELLE INTERROGATION.
         IF          VTVG,X100,,X100
<
< CAS DU GRAPHIQUE RAPIDE :
<
E3000:   EQU         $
         LAD         M4014
         BSR         ACARD           < DOIT-ON METTRE LE TERMINAL
                                     < EN SPECIAL POINT PLOT MODE
                                     < DANS LE CAS DU 4014 ????
         ADRI        -1,B            < B=-1 : OUI MODE 4014 ,
                                     < B=0 : NON , MODE 4010.
         STB         FAST            < FAST=0 : 4010 ,
                                     < FAST=-1 : 4014.
         CPZR        B               < TEST DU MODE : 4010 OU 4014 ???
         JE          E1010           < CAS 4010 : VERS LA DEMANDE
                                     < DES PAS DE PARCOURS.
<
< CAS 4014 :
<
E3020:   EQU         $
         LA          AMCONR
         BSR         APRINT          < ENVOI D'UNE INVITATION DEMAN-
                                     < DANT UN CHIFFRE DECIMAL (0-9).
         LAD         DEMREP
         SVC         0               < ENTREE D'UN CHIFFRE DECIMAL (???)
         LBY         REP             < A=CARACTERE RECU.
         ADRI        -'30,A          < CONVERSION BINAIRE.
         JAL         E3020           < ERREUR DE CHIFFRE DECIMAL.
         CPI         9               < VALIDATION SUPERIEURE.
         JG          E3020           < ERREUR DE CHIFFRE DECIMAL.
         STA         XCONTR          < MAJ DE XCONTR.
         JMP         E1411           < VERS L'INTERROGATION SUR
                                     < LES DIRECTIONS CARDINALES
                                     < ET LES SEUILS.
X100:    VAL         0
<
< FAUT-IL TRACER LES POINTS ISOLES ???
<
E1410:   EQU         $
         STZ         POINTI          < TRACER LES POINTS ISOLES A PRIORI
         LA          AMIS
         BSR         APRINT          < ENVOI D'UNE INTERROGATION.
         LAD         DEMREP
         SVC         0               < ENTREE DE LA REPONSE.
<
<
<        REPONSES RECONNUES :
<                    O : TRACER LES POINTS ISOLES ,
<                    N : IGNORER LES POINTS ISOLES.
<
         LBY         REP             < A=REPONSE UTILISATEUR.
         CPI         "O"
         JE          E1411           < POINTI=0 : TRACER LES POINTS
                                     < ISOLES.
         IC          POINTI          < POINTI=1 : NE PAS TRACER LES
                                     < POINTS ISOLES A PRIORI.
         CPI         "N"
         JNE         E1410           < VERS UNE NOUVELLE INTERROGATION.
<
< DANS LE CAS DU GRAPHIQUE LENT , ENTREE DES SEUILS :
<
E1411:   EQU         $
         LA          AMSE
         BSR         AGETS           < DEMANDE DU SEUIL DELTAX+DELTAY.
         LX          REDUC           < X=FACTEUR DE REDUCTION.
         SLLS        DEDX+DEDY/2,X
         STA         SEUIL
         LA          AMSEX
         BSR         AGETS           < DEMANDE DU SEUIL DE DELTAX.
         LX          REDUC           < X=FACTEUR DE REDUCTION.
         SLLS        DEDX,X
         STA         SEUILX
         LA          AMSEY
         BSR         AGETS           < DEMANDE DU SEUIL DE DELTAY.
         LX          REDUC           < X=FACTEUR DE REDUCTION.
         SLLS        DEDY,X
         STA         SEUILY
         CPZ         FAST
         JL          E7000           < DANS LE CAS OU LE SPECIAL
                                     < POINT PLOT MOD DU 4014 EST
                                     < DEMANDE , ON VA ENTRER DIRECTE-
                                     < MENT LES DIRECTIONS CARDINALES.
<
< REPRODUCTION NORMALE OU CONTOUR (PARAGLYPHE) ???
<
         LA          AMCONT
         BSR         ACARD           < ENVOI DU MESSAGE ET LECTURE
                                     < DE LA REPONSE.
         STB         CONTO           < SAVE LA REPONSE (0=OUI).
         JE          E1010           < OUI , PAS DE DIRECTION A
                                     < DEMANDER ...
         LAD         M4014
         BSR         ACARD           < VA-T'ON TRAVAILLER SUR UN 4014 ???
         JNE         E7000           < NON , VERS LES DIRECTIONS ...
         LA          AMINC
         BSR         ACARD           < DANS LE CAS D'UN 4014 , FAUT-IL
                                     < FAIRE DE L'INCREMENTAL ???
         JNE         E7000           < NON , VERS LES DIRECTIONS...
<
< MODE INCREMENTAL SUR 4014 :
<
         LAI         -1
         STA         CONTO           < ON LE MEMORISE PAR CONTO=-1.
E7001:   EQU         $
         LA          AMLIST
         BSR         ACARD           < FAUT-IL ENTRER UNE LISTE DE
                                     < GESTION DE L'INCREMENTAL ???
         JNE         E7002           < NON.
         LAD         MINT
         BSR         APRINT          < ET OUI , ENVOI D'UNE INVITATION.
         LAD         DEMINC
         SVC         0               < ENTREE DES 8 CARACTERES DE
                                     < LA LISTE DE GESTION.
E7002:   EQU         $
         LA          AMIC
         BSR         APRINT          < INVITATION D'ENTREE DU TYPE.
         LAD         DEMREP
         SVC         0               < ENTREE D'1N CARACTERE DE TYPE.
         LBY         REP             < A=TYPE DEMANDE.
<
<        DIVERS TYPES DE GESTION DE KPOINT :
<                    BIT15=0 (TYPE 0 ET 2) : KPOINT EST RAZE AVANT
<                                            CHAQUE TEST DE VOISINNAGE ,
<                    BIT14=1 (TYPE 2 ET 3) : KPOINT EST DECREMENTE
<                                            D'UNE UNITE SI LE POINT
<                                            COURANT EXISTE ET EST A 1.
<
TYPM:    VAL         3               < TYPE MAX RECONNU.
<
         ADRI        -'30,A          < DETRANSLATION.
         JAL         E7002           < ERREUR ...
         CPI         TYPM            < VALIDATION SUPERIEURE.
         JG          E7002           < ERREUR ...
         STA         IINC            < SAVE LE TYPE.
         JMP         E1010           < ON NE DEMANDE PAS LES DIRECTIONS.
<
< ENTREE DES DIRECTIONS CARDINALES DE PARCOURS :
<
E7000:   EQU         $
         LAD         MW
         BSR         ACARD
         STB         IW              < DIRECTION OUEST.
         LAD         MNW
         BSR         ACARD
         STB         INW             < DIRECTION NORD-OUEST.
         LAD         MN
         BSR         ACARD
         STB         IN              < DIRECTION NORD.
         LAD         MNE
         BSR         ACARD
         STB         INE             < DIRECTION NORD-EST.
<
< EPAISSISSEMENT DES TRAITS :
<
E1010X:  EQU         $
         LA          AMEPAI
         BSR         AGETS           < EDITION MESSAGE, ET ENTREE VALEUR,
         JALE        E1010X          < ERREUR...
         CPI         DX+DY/2
         JG          E1010X          < ERREUR...
         STA         KEPAIS          < OK...
E1010:   EQU         $
<
< DEMANDE DU PAS DE PARCOURS DES LIGNES ET DES COLONNES :
<
         IC          DEMSE+2         < AFIN DE DEMANDER 4 CARACTERES.
PAS2:    EQU         $               < CAS DES ERREURS DE PAS.
         LA          AMPAS
         BSR         AGETS           < ENVOI DU MESSAGE ET RENVOI
                                     < DANS A DES 2 PAS CONCATENES.
         LB          M101            < 2 PAS EGAUX A 1 A PRIPORI.
         JAE         PAS1            < SI LE RESULTAT EST NUL ON
                                     < PREND DES PAS UNITAIRES A PRIORI.
         SLRD        16              < SINON : B<--(A) , ET A=0.
PAS1:    EQU         $
         SCRD        8               < DECONCATENATION.
         SCLS        8               < CADRAGE CORRECT DE A.
         JAE         PAS2            < PAS DE COLONNE=0 : ERREUR.
         CPZR        B
         JE          PAS2            < PAS DE LIGNE=0 : ERREUR.
         STA         PCOL            < PAS DE PASSAGE D'UN POINT A
                                     < L'AUTRE D'UNE LIGNE.
         STB         PLIG            < PAS DE PASSAGE D'UNE LIGNE
                                     < A L'+UTRE.
<
< ENTREE DES PAS D'INCREMENTATION/DECREMENTATION DE X ET Y :
<
PAS4:    EQU         $
         LAD         MDEL
         BSR         AGETS           < ENVOI D'UN MESSAGE ET LECTURE DES
                                     < 2 CARACTERES REPONSES.
         LB          M101            < 2 PAS EGAUX A 1 A PRIORI.
         JAE         PAS3            < ET OUI =1 ...
         SLRD        16              < CADRAGE DANS B.
PAS3:    EQU         $
         SCRD        8               < ENTREE DE DELY DANS A.
         SCLS        8               < CADRAGE CORRECT DE DELY.
         JAE         PAS4            < ERREUR , DELY=0.
         CPZR        B               < VALIDATION DE DELX.
         JE          PAS4            < ERREUR , DELX=0.
         STA         DELY            < OK , MAJ DE DELY.
         STB         DELX            < OK , MAJ DE DELX.
         DC          DEMSE+2         < RESTAURATION DE CODEM=3.
         IF          VTVG,X100,,X100
<
< FAUT-IL EFFACER L'ECRAN DE LA VISU DE RECEPPTION :
<
         LA          AMEFFA
         BSR         ACARD           < B=0 S'IL FAUT EFFACER L'ECRAN.
X100:    VAL         0
         IF          VTVG,,X100,
<
< DOIT-ON SEPARER CHAQUE SEGMENT
< D'UN SEGMENT 'OAB' ??? SI OUI, UN
< PROGRAMME GRAPHIQUE SOUS 'GV' PEUT LES
< RECUPRER UN A UN ET INSERER ENTRE EUX
< D'AUTRES DESSINS, PAR L'INTERMEDIAIRE
< D'UNE BIBLIOTHEQUE CONTENANT UNE
< PRIMITIVE 'I' PAR EXEMPLE...
<
         LA          AMPASA
         BSR         ACARD
         STB         IPASA           < B=0 : OUI, B=1 : NON.
         LA          AMEFFA
         BSR         ACARD           < FAUT-IL EFFACER L'ECRAN ???
         JNE         NEFFAC          < NON.
         LAD         ERASE
         SVC         0               < OUI.
NEFFAC:  EQU         $
X100:    VAL         0
<
< CHOIX VISU D'EMISSION :
<
E1200:   EQU         $
         LAD         OG
         SVC         0               < TENTATIVE D'OPEN GRAPHIQUE.
         IF          VTVG,X100,,X100
         JE          E110            < OK.
<
< CHANGEMENT DE VISU D'EMISSION :
<
         LAI         '02             < ON REMPLACE NVP='0B PAR NVP='02.
         STBY        ERASE           < MAJ DE ERASE.
         STBY        OG              < MAJ DE OG.
         STBY        CG              < MAJ DE CG.
         STBY        WG              < MAJ DE WG.
         STBY        FS              < MAJ DE FS.
         STBY        SPPM            < MAJ DE SPPM.
         STBY        COPY            < MAJ DE COPY.
         JMP         E1200           < PUIS NOUVELLE TENTATIVE D'OG.
E110:    EQU         $
         CPZR        B               < FAUT-IL EFFACER L'ECRAN ???
         JNE         NEFFAC          < NON ...
         LAD         ERASE
         SVC         0               < OUI , EFFACEMENT DE L'ECRAN
                                     < DE LA VISU DE RECEPTION.
NEFFAC:  EQU         $
         LAD         OG
         SVC         0               < RE-OPEN GRAPHIQUE EVENTUEL ,
                                     < AU CAS OU UN ERASE AURAIT
                                     < ETE FAIT SUR LA VISU ...
         CPZ         CONTO           < TEST DU MODE DEMANDE ???
         JGE         E6070           < NORMAL OU PARAGLYPHE.
<
< INITIALISATION DU MODE INCREMENTAL :
<
         LA          TY
         STA         SEG
         LA          TX
         STA         SEG+1
         LAD         WG
         SVC         0               < ON ENVOIE A LA VISU LES COORDON-
                                     < -NEES DU POINT (TY,TX) AU CAS
                                     < OU LE MODE SERAIT LE MODE
                                     < INCREMENTAL ; LE POINT (TY,TX)
                                     < EST DONC LE POINT DE DEPART
                                     < DU TRACE INCREMENTAL.
                                     < (PLUS DES CARACTERES 'RS').
         LAI         2
         STA         WG+2            < CODEM(WG)=2 AU CAS OU LE MODE
                                     < SERAIT INCREMENTAL.
E6070:   EQU         $               < NORMAL OU PARAGLYPHE.
         CPZ         FAST            < TEST DU MODE DEMANDE.
         JGE         E3100           < CE N'EST PAS LE MODE 4014.
<
< CAS DU SPECIAL POINT PLOT MODE DU 4014 :
<
         LAD         FS
         SVC         0               < MISE DU 4014 EN SPECIAL POINT
                                     < PLOT MODE.
X100:    VAL         0
         IF          VTVG,,X100,
         JE          E3100           < OK , NVP='0B EST ASSIGNE.
         BR          AERR            < ABORT SI NVP='0B NON ASSIGNE.
X100:    VAL         0
E3100:   EQU         $
<
<        C O N V E R S I O N   V I D E O-
<        G R A P H I Q U E  :
<
         LX          NLIG            < INDEX DE BALYAGE VERTICAL.
<
< BOUCLE DE BALYAGE VERTICAL (Y) :
<
E1001:   EQU         $
         LR          X,Y             < Y=COORDONNEE Y DE BALYAGE.
         PSR         X               < SAVE LA COORDONEE Y (X !!!).
         LX          NPOINT          < INDEX DE BALYAGE HORIZONTAL :
<
< BOUCLE DE BALYAGE HORIZONTAL (X) :
<
E1002:   EQU         $
         PSR         X,Y             < SAVE LES COORDONNES X ET Y
                                     < DU POINT COURANT.
         CPZ         CONTO           < QUEL EST LE TYPE DU TRACE ???
         JL          INC4            < TYPE INCREMENTAL.
         BSR         ATEST           < TEST DU POINT (X,Y) ???
         JC          E6030           < 1 : ALLONS-Y ...
         BR          AE1003          < 0 : RIEN A FAIRE.
<
< REINITIALISATIONS :
<
E6030:   EQU         $
         LAI         SEG-ZERO
         STA         ASEG            < REINITIALISATION DU POINTEUR
                                     < DE LISTE DES SEGMENTS.
         STZ         WG+2            < RAZ DU CODEM DE WG.
         LAI         1
         STA         KPOINT          < INITIALISATION DU COMPTEUR DES
                                     < POINTS VOISINS A 1 A CAUSE DES
                                     < POINTS ISOLES
<
< GENERATION DE LA LISTE DES SEGMENTS :
<
         BSR         AXY             < INSERTION POINT (X,Y).
         CPZ         FAST            < TEST DU MODE DEMANDE ???
         JE          E1007           < CAS DU MODE RAPIDE : VERS
                                     < L'AFFICHAGE DIRECT (POINT
                                     < ISOLE).
<
< DISCRIMINATION MODE NORMAL/MODE CONTOUR :
<
         CPZ         CONTO
         JG          E5003           < CAS DU MODE NORMAL.
INC4:    EQU         $               < CAS DU MODE INCREMENTAL.
         BR          APARA           < MODE PARAGLYPHE.
<
<        T R A C E   N O R M A L  :
<
E5003:   EQU         $
<
< CAS D'1NE DEMANDE GRAPHIQUE FIN :
<
         STZ         MISOL           < POINT ISOLE A PRIORI.
<
< EXPLORATION 'OUEST' :
<
         CPZ         IW              < FAUT-IL ALLER VERS L'OUEST ???
         JNE         E500            < NON ...
         BSR         AINCX
         BSR         AEXIST          < TEST DU POINT (X+1,Y).
         BSR         AISOL           < TEST DES POINTS ISOLES ET B=-1.
         BSR         ADECX
         JAE         E500            < (X+1,Y) EXISTE ET EST A 1.
         PSR         X               < SAVE COORDONNEE X.
E501:    EQU         $
         ADRI        1,B             < COMPATGE SUR LA DIRECTION OUEST.
         BSR         ADECX           < DEPLACEMENT VERS L'OUEST.
         BSR         AEXIST          < TEST DE (X-I,Y).
         JAE         E501            < (X-I,Y)=1 : CONTINUE.
         CPZR        B               < ON ARRETE SUR LE 1ER POINT A
                                     < 0 OU INEXISTANT ; A-T'ON ALORS
                                     < TROUVE DES POINTS SUR L'OUEST ???
         JE          E502            < NON , RIEN A FAIRE ...
         BSR         AINCX           < SI OUI , RETOUR SUR L'AVANT-
                                     < DERNIER POINT.
         BSR         AXY1            < RE-INSERTION DU POINT ORIGINE.
         BSR         AXY             < INSERTION DU DERNIER POINT.
E502:    EQU         $
         PLR         X               < RESTAURE LA COORDONNE X.
<
< EXPLORATION 'NORD-OUEST' :
<
E500:    EQU         $
         CPZ         INW             < FAUT-IL ALLER NORD-OUEST ???
         JNE         E600            < NON ...
         BSR         AINCX
         BSR         AINCY
         BSR         AEXIST          < TEST DU POINT (X+1,Y+1).
         BSR         AISOL           < TEST DES POINTS ISOLES ET B=-1.
         BSR         ADECX
         BSR         ADECY
         JAE         E600            < (X+1,Y+1) EXISTE ET EST A 1.
         PSR         X,Y             < SAVE LES COORDONNEES X ET Y.
E601:    EQU         $
         ADRI        1,B             < COMPTAGE SUR LE NORD-OUEST.
         BSR         ADECX
         BSR         ADECY
         BSR         AEXIST          < TEST DE (X-I,Y-J) ???
         JAE         E601            < (X-I,Y+J)=1 : CONTINUE ...
         CPZR        B               < SINON , A-T'ON RENCONTRE DES
                                     < POINTS SUR LE NORD-OUEST ???
         JE          E602            < NON , RIEN A FAIRE ...
         BSR         AINCX           < SI OUI , RETOUR SUR L'AVANT -
         BSR         AINCY           < DERNIER POINT.
         BSR         AXY1            < REINSERTION DU POINT ORIGINE.
         BSR         AXY             < INSERTION DU DERNIER POINT.
E602:    EQU         $
         PLR         X,Y             < RESTORE COORDONNEES X ET Y.
<
< EXPLORATION 'NORD' :
<
E600:    EQU         $
         CPZ         IN              < FAUT-IL ALLER NORD ???
         JNE         E700            < NON ...
         BSR         AINCY
         BSR         AEXIST          < TEST DU POINT (X,Y+1).
         BSR         AISOL           < TEST DES POINTS ISOLES ET B=-1.
         BSR         ADECY
         JAE         E700            < (X,Y+1) EXISTE ET EST A 1.
         PSR         Y               < SAVE LA COORDONNEE Y.
E701:    EQU         $
         ADRI        1,B             < COMPTAGE DIRECTION NORD.
         BSR         ADECY
         BSR         AEXIST          < TEST DU POINT (X,Y-J).
         JAE         E701            < (X,Y-J)=1 : CONTINUE.
         CPZR        B               < SINON , A-T'ON RENCONTRE
                                     < DES POINTS SUR LE NORD ???
         JE          E702            < NON , RIEN A FAIRE ...
         BSR         AINCY           < SI OUI , RETOUR SUR L'AVANT-
                                     < DERNIER POINT.
         BSR         AXY1            < REINSERTION DU POINT ORIGINE.
         BSR         AXY             < INSERTION DU POINT COURANT.
E702:    EQU         $
         PLR         Y               < RESTAURATION DE LA COORDONNEE Y.
<
< EXPLORATION 'NORD-EST' :
<
E700:    EQU         $
         CPZ         INE             < FAUT-IL ALLER NORD-EST ???
         JNE         E800            < NON ....
         BSR         ADECX
         BSR         AINCY
         BSR         AEXIST          < TEST DU POINT (X-1,Y+1).
         BSR         AISOL           < TEST DES POINTS ISOLES ET B=-1.
         BSR         AINCX
         BSR         ADECY
         JAE         E800            < (X-1,Y+1) EXISTE ET EST A 1.
         PSR         X,Y             < SAVE LES COORDONNEES X ET Y.
E801:    EQU         $
         ADRI        1,B             < COMPTAGE SUR LE NORD-EST.
         BSR         AINCX
         BSR         ADECY
         BSR         AEXIST          < TEST DU POINT (X+I,Y-J).
         JAE         E801            < (X+I,Y-J)=1 : CONTINUE.
         CPZR        B               < A-T'ON RENCONTRE DES POINTS
                                     < SUR LE NORD-EST ???
         JE          E802            < NON RIEN A FAIRE ...
         BSR         ADECX           < SI OUI , RETOUR SUR L'AVANT-
         BSR         AINCY           < DERNIER POINT.
         BSR         AXY1            < REINSERTION DU POINT ORIGINE.
         BSR         AXY             < INSERTION DU POINT COURANT.
E802:    EQU         $
         PLR         X,Y             < RESTAURE LES COORDONNEES X ET Y.
E800:    EQU         $
         IF          VTVG,X100,,X100
         CPZ         FAST            < EST-ON EN MODE 4014 ???
         JL          E3002           < CAS DU SPECIAL POINT PLOT
                                     < MODE DU 4014.
X100:    VAL         0
<
< DETERMINATION DE L'ORIGINE DE LA LISTE DES SEGMENTS :
<
E1007:   EQU         $
         LAI         SEG-ZERO*2
         STA         WG+1            < INITILAISATION DE L'@OCTET DE
                                     < L'ORIGINE DE LA LISTE SEGMENTS.
         LA          WG+2            < TEST DU NBRE DE POINTS*4
                                     < INSERES DANS LA LISTE.
         CPI         4               < (X,Y) EST-IL UN POINT ISOLE ???
         JNE         E1008           < NON , ET ON A CODEM(WG)>8.
<
< CAS OU (X,Y) EST ISOLE :
<
         CPZ         MISOL           < EST-CE UN VRAI POINT ISOLE ???
         JNE         E1003           < NON , IL FAIT PARTIE D'UN SEGMENT
PARA5:   EQU         $               < CAS DES POINTS ISOLES DE 'PARA'.
         CPZ         POINTI          < FAUT-IL TRACER LES POINTS
                                     < ISOLES ???
         JNE         E1003           < NON , ON L'IGNORE DONC ...
         BSR         AXY1            < ON REINSERE (X,Y) AFIN DE
                                     < TRACER UN POINT , SOIT LE
                                     < SEGMENT ((X,Y),(X,Y)).
         JMP         E1009           < VERS LE TRACE.
<
< CAS OU (X,Y) N'EST PAS ISOLE :
<
E1008:   EQU         $
         BSR         AMS             < ON SUPPRIME LE POINT (X,Y) DE
                                     < L'ORIGINE DE LA LISTE CAR ON LE
                                     < RETROUVE DE NOUVEAU EN 2EME
                                     < POINT (CF. UN SEGMENT...)
         IF          VTVG,X100,,X100
         CPI         8               < N'Y-AT'IL QU'UN SEGMENT ???
         JE          E1009           < OUI , ON VA L'AFFICHER ...
         BSR         AMS             < S'IL Y A PLUS D'UN SEGMENT , ON
                                     < ON SUPPRIME DE NOUVEAU LE
                                     < POINT (X,Y) , CAR ON VA ENCORE
                                     < LE TROUVER EN 4EME POSITION...
X100:    VAL         0
<
< AFFICHAGE DE LA LISTE DES SEGMENTS :
<
E1009:   EQU         $
<
< TRANSFORMATION DE L'IMAGE GRAPHIQUE :
<
         LA          WG+2            < A=NBRE D'OCTETS A EMETTRE.
         SLRS        2               < DIVISION PAR 4.
         LR          A,X             < X=NBRE DE POINTS A AFFICHER.
         BSR         ATRF            < TRANSFORMATION DES COORDONNEES
                                     < SU CELA A ETE DEMANDE.
         IF          VTVG,,X100,
<
< INTERFACE D'INTERPOLATION :
<
         LA          WG+2
         SLRS        3
         LR          A,X             < X=NBRE DE SEGMENTS A TRANSMETTRE.
         LA          WG+1
         SLRD        1+16            < B=@MOT DE LA LISTE DES SEGMENTS.
INT1:    EQU         $
         PSR         X               < SAVE LE DECOMPTE DES SEGMENTS.
         LXI         4               < 1 SEGMENT OCCUPE 4 MOTS.
         LAD         SEGSGN          < A=@MOT DU SEGMENT COURANT.
         XR          A,B             < A=EMMETTEUR=@SEGMENT,
                                     < B=RECEPTEUR=@SEGMENT SGN.
         MOVE                        < RECUPERATION SEGMENT COOURANT.
         XR          A,B             < RESTAURE A ET B.
         ADRI        4,B             < PASSAGE A L'EVENTUEL SEGMENT
                                     < SUIVANT DE LA LISTE.
         BSR         ASTORE          < STORE SGN LE SEGMENT ':GS'.
         CPZ         IPASA           < TEST DU MODE ???
         JNE         NPASA           < CAS DU MODE CONTINU.
<
< EMISSION DE 'OAB' ENTRE CHAQUE SEGMENT :
<
         STZ         SEGSGN+0
         STZ         SEGSGN+1
         STZ         SEGSGN+2
         STZ         SEGSGN+3
         BSR         ASTORE          < EMISSION DE 'OAB'.
NPASA:   EQU         $
         PLR         X               < RESTAURE LE DECOMPTE DE SEGMENTS.
         JDX         INT1            < PASSAGE AU SUIVANT ...
X100:    VAL         0
<
< AFFICAHGE DE LA LISTE GRAPHIQUE (TRANSFORME OU PAS) :
<
         LX          KEPAIS          < X=FACTEUR D'EPAISSISSEMENT...
INC3X:   EQU         $
         PSR         X,W
         LAD         OG
         SVC         0               < DECHAINAGE...
         LAD         WG
         SVC         0               < EDITION DE LA LISTE...
         LA          WG+2
         SLRS        1
         LR          A,X             < X=NOMBRE DE COORDONNEES,
         LA          WG+1
         SLRS        1
         LR          A,W             < W=ADRESSE DE LA LISTE DES COORDONNEES.
INC3Y:   EQU         $
         IC          0,W             < EPAISSISSEMENT...
         ADRI        1,W
         JDX         INC3Y
         PLR         X,W
         JDX         INC3X
         JMP         E1003
INC3:    EQU         $               < ENTRY MODE INCREMENTAL.
         LAD         WG
         SVC         0               < (X EST INDIFFERENT !!!)
<
< CHANGEMENT DE POINT COURANT SUR LA LIGNE :
<
E1003:   EQU         $
         PLR         X,Y             < RESTAURE LE POINT (X,Y).
         LA          PCOL            < PAS DE PASSAGE D'UN POINT
                                     < A L'AUTRE.
         SBR         A,X             < BALAYAGE HORIZONTAL.
         CPZR        X               < EST-CE FINI ???
         JL          E6000           < OUI , CHANGEMENT DE LIGNE.
         BR          AE1002          < NON , ON CONTINUE A BALAYER.
E6000:   EQU         $
<
< CHANGEMENT DE LIGNE :
<
         PLR         X               < RESTAURE LE NUMERO DE LIGNE.
         LA          PLIG            < PAS DE PASSAGE D'UNE LIGNE
                                     < A L'AUTRE.
         SBR         A,X             < BALAYAGE VERTICAL.
         CPZR        X               < EST-CE FINI ???
         JL          FIN             < C'EST FINI ....
         BR          AE1001          < ET NON , ON CONTINUE A BALAYER.
FIN:     EQU         $
         IF          VTVG,X100,,X100
         BSR         ARCOPY          < HARD-COPIES ET TEMPORISATION ???
X100:    VAL         0
         IF          VTVG,,X100,
         LAD         CG
         SVC         0               < RETOUR EN ALPHA-NUMERIQUE.
         LA          AMFIN
         BSR         ACARD           < ENVOI MESSAGE ET LECTURE REPONSE.
         JNE         PAFIN           < NON, CE N'EST PAS FINI...
<
< FIN DE LISTE D'INTERPOLATION : TRANSMISSION D'UN SEGMENT REDUIT A O :
<
         STZ         SEGSGN+0
         STZ         SEGSGN+1
         STZ         SEGSGN+2
         STZ         SEGSGN+3
         BSR         ASTORE          < STORE SGN DU SEGMENT OO.
PAFIN:   EQU         $
X100:    VAL         0
         BR          AGOGE           < ET C'EST FINI ...
         IF          VTVG,X100,,X100
<
< CAS DU SPECIAL POINT PLOT MODE DU 4014 :
<
E3002:   EQU         $
         LA          KPOINT          < ACCES AU NBRE DE VOISINS ...
                                     < A NOTER QU'ETANT DONNE LA TAILLE
                                     < D'UNE IMAGE 256*256 , UN
                                     < POINT NE PEUT AVOIR PLUS DE
                                     < 1024 VOISINS !!!
         LX          XCONTR          < X=DECALAGE DE CONTRASTE.
         CPZR        X               < DECALAGE EFFECTIF ???
         JE          E3014           < NON , ON LE SAUTE.
         SLLS        0,X             < PRISE EN COMPTE DU CONTRASTE.
         JALE        E3016           < ON EST PLUS QU'AU MAX !!!
         JC          E3016           < LA AUSSI , ON EST AU MAX !!!
E3014:   EQU         $
         CPI         COEF/2          < EST-ON AU MAX ???
         JLE         E3010           < NON , TOUT JUSTE , OK.
E3016:   EQU         $               < CAS OU ON A PASSE LE MAX.
         LAI         127             < SI OUI , ON PREND L'INTENSITE
                                     < MAX ...
         JMP         E3012           < VERS L'EMIISSION MAX.
E3010:   EQU         $
         MP          KPOINT          < CALCUL DE KPOINT*KPOINT.
         DV          ACOEF           < A=-KPOINT*KPOINT/COEF.
         AD          KPOINT
         ADRI        63,A            < VALEUR DE L'INTENSITE :
                                     < A=-KPOINT*KPOINT/COEF+KPOINT+63.
E3012:   EQU         $
         STA         INTENS          < MISE EN PLACE DE L'INTENSITE.
         LXI         2               < 2 COORDONNEES A CONVERTIR (X,Y).
         BSR         ATRF            < TRANSFORMATION SI DEMANDEE.
<
< CONVERSION ASCI DES COORDONNEES :
<
         LYI         0               < Y CONTIENT UNE CONSTANTE DE
                                     < TRANSLATION DES COORDONNEES Y.
                                     < (DOIT DONC ETRE NUL POUR X).
         LXI         2               < 2 COORDONNEES A CONVERTIR.
                                     < (X PUIS Y)
E3102:   EQU         $
         LA          &ACONV          < A=UNE COORDONNEE X OU Y.
         LBI         0               < CLEAR B.
         SCRS        5
         SCLD        5               < EXTRACTION DES POIDS FAIBLES.
         SLRS        5               < QUE L'ON MET DANS B.
         ADRI        32,A            < A=1ER CARACTERE ASCI.
         ADRI        64,B            < B=2EME CARACTERE ASCI.
         SWBR        A,A             < LE 1ER CARACTERE EST MIS A GAUCHE
         ORR         B,A             < CONCATENATION DES 2 CARACTERES.
         ADR         Y,A             < CAS DE LA COORDONNEE Y (+32).
         LYI         32              < POUR TRANSLATER LA COORDONNEE Y.
         STA         &ACONV          < MISE DES 2 CARACTERES DANS LE
                                     < BUFFER (SEG).
         JDX         E3102           < A LA COORDONNEE Y.
         LAD         SPPM
         SVC         0               < ENVOI DU CARACTERE D'INTENSITE ,
                                     < ET DES COORDONNEES DU POINT
                                     < COURANT.
         JMP         E1003           < VERS LE CHANGEMENT DE POINT ...
X100:    VAL         0
<
<        T R A C E   P A R A G L Y P H E  :
<
PARA:    EQU         $
         JL          INC1            < EN FAIT C'EST LE MODE INCREMENTAL
         BSR         AINCX           < M(X+1,Y).
         BSR         AEXIST
         JANE        PARA1
         BSR         AXY             < INSERTION DE M(X+1,Y).
PARA1:   EQU         $
         BSR         ADECX
         BSR         ADECY           < M(X,Y-1).
         BSR         AEXIST
         JANE        PARA2
         BSR         AXY1            < REINSERTION DE M(X,Y).
         BSR         AXY             < INSERTION DE M(X,Y-1).
PARA2:   EQU         $
         BSR         ADECX
         BSR         AINCY           < M(X-1,Y).
         BSR         AEXIST
         JANE        PARA3
         BSR         AXY1            < REINSERTION DE M(X,Y).
         BSR         AXY             < INSERTION DE M(X-1,Y).
PARA3:   EQU         $
         BSR         AINCX
         BSR         AINCY           < M(X,Y+1).
         BSR         AEXIST
         JANE        PARA4
         BSR         AXY1            < REINSERTION DE M(X,Y).
         BSR         AXY             < INSERTION DE M(X,Y+1).
PARA4:   EQU         $
         BSR         ADECY           < RETOUR SUR M(X,Y).
<
< QUE FAIRE DU POINT COURANT :
<
         LA          KPOINT          < A=NBRE DE VOISINS+1.
         CPI         5
         JE          E1003           < LE POINT COURANT EST DANS UNE
                                     < TACHE SOMBRE , ON NE LE TRACE PAS
         CPI         1
         JNE         E6020           < M(X,Y) N'EST PAS ISOLE  ET EST
                                     < SUR UN CONTOUR , ON LE TRACE.
         BR          APARA5          < M(X,Y) EST ISOLE , FAUT-IL
                                     < LE TRACER ???
E6020:   EQU         $
         BR          AE1009          < TRACE DU POINT NON ISOLE.
<
<        T R A C E   I N C R E M E N T A L  :
<
INC1:    EQU         $
         LA          IINC            < TYPE DE GESTION DE KPOINT.
         TBT         15              < DOIT-ON LE RAZER ???
         JC          INC5            < NON , IL GARDE SA VALEUR ...
         STZ         KPOINT          < ET OUI ...
INC5:    EQU         $
<
< DETERMINATION DU NBRE DE VOISINS+1 DU POINT M(X,Y) :
<
         BSR         AINCX
         BSR         AEXIST
         BSR         ADECY
         BSR         AEXIST
         BSR         ADECX
         BSR         AEXIST
         BSR         ADECX
         BSR         AEXIST
         BSR         AINCY
         BSR         AEXIST
         BSR         AINCY
         BSR         AEXIST
         BSR         AINCX
         BSR         AEXIST
         BSR         AINCX
         BSR         AEXIST
         BSR         ADECX
         BSR         ADECY
         BSR         AEXIST          < TEST DU POINT M(X,Y).
<
< DETERMINATION DU PARCOURS INCREMENTAL :
<
         LBI         '20             < 'SPACE' : PEN UP A PRIORI.
         JANE        INC2            < OUI , LE POINT M(X,Y) N'EXISTE
                                     < PAS , ON FAIT DONC PEN UP ...
         LBI         '50             < PEN DOWN , CAR M(X,Y) EXISTE.
         LA          IINC            < TYPE DE GESTION DE KPOINT.
         TBT         14              < DOIT-ON LE DECREMENTER ???
         JNC         INC2            < NON.
         DC          KPOINT          < ON RETIRE LE POINT M(X,Y) DU
                                     < COMPTE DE VOISINS.
INC2:    EQU         $
         SWBR        B,B
         STB         SEG             < OCTET0(SEG)=PEN 'UP'/'DOWN'.
<
< CALCUL DE : M12=(M11/DM11)*M12+M21
<
         LA          M12
         MP          M11
         DV          DM11
         AD          M21
         STA         M12
<
< CALCUL DE : ((M22/DM22)*M12+DM21+KPOINT)MODULO 8
<
         MP          M22
         DV          DM22
         AD          DM21
         AD          KPOINT
         ANDI        '07             < ET CALCUL MODULO 8.
         LR          A,X             < X=FONCTION DU NBRE DE VOISINS.
         LBY         &ALINCR         < LA DIRECTION DE DEPLACEMENT
                                     < INCREMENTAL EST FONCTION DE (X).
         OR          SEG             < CONCATENATION AVEC LE PEN
                                     < 'UP'/'DOWN'.
         STA         SEG             < OCTET0(SEG)=PEN 'UP'/'DOWN' ,
                                     < OCTET1(SEG)=DIRECTION INCR.
<
<        NOTA :
<                      POUR NE RIEN FAIRE D'ALEATOIRE , ON
<                    PRENDRA :
<                                    M22=0 ,
<                                    DM22=1 ,
<                                    DM21=LE 'MODULO'.
<
         BR          AINC3           < VERS L'ECRITURE INCREMENTALE ...
<
<
<        M A T R I C E S   D E   P E R M U T A T I O N S
<        D E S   B I T S   D E   X   E T   Y  :
<
<
PERX:    EQU         $
PERY:    EQU         $+16
         IF          VTVG,X100,,X100
<
<        NOTA :
<                      CES 2 MATRICES SONT EN
<                    RECOUVREMENT DE LA ROUTINE
<                    D'EMISSION DU SON , MAIS CELA
<                    N'EST PAS DANGEREUX , CAR LORSQU'ON
<                    DEFINIT CES 2 MATRICES , ON SAIT DEJA
<                    QU'AUCUN SON NE SERA EMIS ...
<
X100:    VAL         0
         IF          VTVG,X100,,X100
         PAGE
<
<
<        C O N V E R S I O N   S O N  :
<
<
<        FONCTION :
<                      CETTE ROUTINE MAITRE PERMET DE SORTIR
<                    DIRECTEMENT SUR CU1 DES INFOS SUR
<                    UN CONVERTISSEUR DIGITAL-ANALOGIQUE ;
<                    L'IMAGE VIDEO EST ASSIMILE A UNE
<                    REPRESENTATION BI-DIMENSIONNELLE
<                    DU SON ; L'AXE DES X EST L'AXE DES
<                    TEMPS (FREQUENCE D'ECHANTILLONAGE) ,
<                    ET L'AXE DES Y (DESCENDANT) , CELUI
<                    DES AMPLITUDES ...
<
<
<        ARGUMENT :
<                    W=@DCT-ESCLAVE.
<
<
         LOCAL
LOC1:    EQU         $
NLIG2:   WORD        1024/DY         < NBRE DE LIGNES PAR ECRAN.
CU1:     WORD        WCUS            < ECRITURE SUR LE CU SON.
IMAG1:   WORD        IMAG            < @TRANSLATABLE DE L'IMAGE.
         PROG
         WORD        LOC1+'80
SP:      EQU         $
         LRP         L
         LA          -1,L            < A=@RELATIVE DU LOCAL.
         AD          10,W            < ABSOLUTISATION AVEC SLO.
         LR          A,L             < L=@ABSOLUE DU LOCAL.
<
< CONVERSION IMAGE ENTIERE :
<
         LA          IMAG1           < A=@RELATIVE DE L'IMAGE.
         AD          10,W            < ABSOLUTISATION AVEC LE SLO.
         LR          A,C             < C=@ABSOLUE DE L'IMAGE (RESIDENTE)
         LBI         CNMPL           < B=NBRE DE COLONNES DE 16 POINTS
                                     < CONTENUES DANS L'IMAGE.
<
< CONVERSION D'UNE COLONNE DE 16 BITS :
<
SP2:     EQU         $
         LXI         0               < X=INDEX DU BIT DANS LA COLONNE.
<
< CONVERSION D'UNE COLONNE DE 1 BIT :
<
SP1:     EQU         $
         LY          NLIG2           < Y=INDEX DE LA DERNIERE LIGNE+1.
         PSR         C               < SAVE LA BASE C DE LA COLONNE
                                     < DE 16 BITS COURANTE.
SP4:     EQU         $
         LA          0,C             < ACCES AU MOT COURANT DE LA
                                     < COLONNE DE RANG 16-(B).
         TBT         0,X             < TEST DU BIT COURANT (X).
         JNC         SP5             < BIT=0 : RIEN A FAIRE.
         NGR         Y,A             < BIT=1 : A RECOIT -LE NUMERO DE
                                     < LA LIGNE CONCERNEE , CE QUI
                                     < DONNE L'AMPLITUDE DU SIGNAL.
         SIO         CU1             < SORTIE DIRECTE SUR LE CU1.
SP5:     EQU         $
         ADRI        CNMPL,C         < PASSAGE A LA LIGNE SUIVANTE.
         ADRI        -1,Y            < DECOMPTE DES LIGNES.
         CPZR        Y               < LA COLONNE DE BITS COURANTE
                                     < EST-ELLE EXPLOREE ???
         JG          SP4             < NON , ON CONTINUE.
         PLR         C               < OUI , ON RESTAURE LA BASE DE
                                     < CELLE-CI.
         ADRI        1,X             < PASSAGE A LA COLONNE DE BITS
                                     < SUIVANTE.
         LAI         'F              < MASQUE DE 4 BITS.
         ANDR        X,A             < CALCUL DE (X) MODULO 16.
         JANE        SP1             < IL RESTE ENCORE AU MOINS UNE
                                     < COLONNE DE BITS DANS LA
                                     < COLONNE DE MOTS COURANTE.
         ADRI        1,C             < SINON , ON PASSE A LA
                                     < COLONNE DE MOTS SUIVANTE.
         ADRI        -1,B            < ET ON DECOMPTE CELLES-CI ...
         CPZR        B               < EST-CE FINI POUR L'IMAGE ???
         JG          SP2             < NON , ON CONTINUE ...
         RSR                         < SI OUI , ON S'EN RETOURNE ...
X100:    VAL         0
         PAGE
<
<
<        I M P L A N T A T I O N  :
<
<
X12:     EQU         ZERO+PILE-LTNI-LTNI
X10:     VAL         X12-$
ZEROV:   EQU         ZERO+X10        < ERREUR D'ASSEMBLEGE SI
                                     < MAUVAISE IMPLANTATION.
         DZS         X10+1
         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.