NMPROC:  VAL         "GG"            < NOM DU PROCESSEUR.
         IDP         "GG - RELEASE 05/03/1980"
         IDP         "JOHN F. COLONNA"
         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.
ITEM2:   EQU         ZERO+PILE-LTNI-LTNI
MAXRED:  VAL         10              < FACTEUR DE REDUCTION MAX.
         EOT         #SIP IMAGE 256#
NOM:     EQU         ZERO+PILE+5-LNOM-2  < NOM DE L'IMAGE VIDEO.
IMAG:    EQU         NOM+LNOM+2      < IMAGE VIDEO PROPREMENT DITE.
         IF          ORDI-"S",XWOR%,,XWOR%
ENTIM:   EQU         IMAG-LENTIM     < EN-TETE DE L'IMAGE (INTERPOLATION
                                     < VIDEO CMS5-SOLAR).
XWOR%:   VAL         0
<
< VALIDATION DU FORMAT DE L'IMAGE (CARREE) :
<
X20:     VAL         1024/DY         < NBRE DE LIGNES/IMAGE.
X21:     VAL         CNMPL*16        < NBRE DE POINTS/LIGNE.
         IF          X20-X21,,X100,
         IF          ATTENTION : L'IMAGE N'EST PAS CARREE !!!
X100:    VAL         0
         PAGE
<
<
<        L O C A L  :
<
<
         LOCAL
LOC:     EQU         $
<
< RELAIS A METTRE IMPERATIVEMENT EN TETE DU LOCAL :
< (AFIN D'ETRE AISEMENT APPELABLE PAR LES ROUTINES
< DE TRANSFORMATIONS CONTENUES DANS L'ITEM2)
<
<        RESET       '80 (00)
ARESET:  WORD        RESET           < MISE D'UN POINT A 0.
<        SET         '81 (01)
ASET:    WORD        SET             < MISE D'UN POINT A 1.
         IF          ORDI-"S",XWOR%,,XWOR%
APOINT:  EQU         ASET
XWOR%:   VAL         0
<        INVER       '82 (10)
AINVER:  WORD        INVER           < INVERSION D'UN POINT.
<        TEST        '83 (11)
ATEST:   WORD        TEST            < TEST D'UN POINT.
<
< BUFFER ET MESSAGES :
<
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).
NOMSEG:  WORD        0               < SEGMENT INVALIDE INITIALEMENT.
SEGSGN:  DZS         4               < SEGMENT GRAPHIQUE COURANT.
LONSEG:  VAL         $-NOMSEG*2
CEG:     EQU         $
         DO          4
         WORD        -1              < N'EXISTE PAS INITIALEMENT.
SEGORG:  EQU         SEGSGN+0
SEGEXT:  EQU         SEGSGN+2
SAVEXT:  DZS         2               < SAUVEGARDE DE L'EXTREMITE DU
                                     < SEGMENT PRECEDENT.
X:       VAL         1
Y:       VAL         0
MINT:    BYTE        2;'6D;">";0
REP:     WORD        0               < REPONSE DE REDUCTION.
         WORD        0               < POUR LES ENTREES DE SEUILS.
AMRED:   WORD        MRED
AMEFFA:  WORD        MEFFAC
AMCOPY:  WORD        MCOPY
AMTR:    WORD        MTR
AMMAT:   WORD        MMAT-1,X
MDEL:    BYTE        7;'6D
         ASCI        "DX/DY="
AMSE:    WORD        MSE
AMSEX:   WORD        MSEX
AMSEY:   WORD        MSEY
AMPERX:  WORD        MPERX
AMPERY:  WORD        MPERY
AP:      WORD        MF              < MESSAGES DE PERMUTATION BITS X/Y.
AMGR:    WORD        MGR
AMVID:   WORD        MVID
AMRAZ:   WORD        MRAZ
AMPROG:  WORD        MPROG
MERR:    BYTE        3;'6D;"?";"?"
<
< DEMANDES A CMS4 :
<
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        CEG-ZERO*2
         WORD        8
DEMGS:   WORD        '0008           < ACCES A LA ZDC.
         WORD        NOMSEG-ZERO*2
         WORD        LONSEG
         WORD        'FFC0
DELGS:   WORD        '000A           < ECRITURE DANS LA ZDC.
         WORD        NOMSEG-ZERO*2
         WORD        SEGSGN-NOMSEG*2
         WORD        'C000
COPY:    WORD        '0B07           < ECRITURE DIRECTE HARD-COPY.
         BYTE        '1B;'17;'8D;'04 < ESC,CTRL-W,R/C.
DEMCCI:  WORD        '0001           < DEMANDE DE RETOUR AU CCI.
SLEEP:   WORD        '0005           < DEMANDE MISE EN SOMMEIL.
         WORD        0
         WORD        15              < POUR 15 SECONDES.
DEMSGN:  WORD        '0402           < DEMANDE SGN OVERLAY.
         WORD        BRANCH-ZERO*2
         WORD        ZERO-BRANCH+PILE-LTNI-LTNI*2
         WORD        -1
DEMMEM:  WORD        '0004           < ALLOCATION 8K MOTS.
RELMEM:  WORD        '0004           < RETOUR A 4K MOTS.
         WORD        '4000
         WORD        '2000
         IF          ORDI-"S",XWOR%,,XWOR%
STABIL:  WORD        '8A01           < STABILISATION VIDEO SOLAR.
         WORD        IMAG-ZERO*2
         WORD        LIMAG*2
         WORD        0
XWOR%:   VAL         0
<
< RELAIS DIVERS :
<
         IF          ORDI-"S",XWOR%,,XWOR%
ASEG:    WORD        SEG             < TRACE D'UN SEGMENT VIDEO.
XWOR%:   VAL         0
AGOGE:   WORD        GOGE            < RETOUR A 'GE'.
AOVL:    WORD        OVL             < CHARGEMENT DES OVERLAYS.
APRINT:  WORD        PRINT           < EDITION D'UN MESSAGE.
ARCOPY:  WORD        RCOPY           < ROUTINE DE HARD-COPY EVENTUEL
                                     < ET TEMPORISATION ASSOCIEE.
AGETS:   WORD        GETS            < RECUPERATION DES SEUILS.
ACARD:   WORD        CARD            < ROUTINE DIRECTIONS CARDINALES.
AMS:     WORD        MS              < MODIFICATION DE L'ORIGINE DE
                                     < LA LISTE DES SEGMENTS.
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.
ACEG:    WORD        CEG             < POINTEUR COURANT DE LA LISTE
                                     < DES SEGMENTS.
AREP:    WORD        REP,X           < POUR CONVERSION DES SEUILS.
AIMAG:   WORD        IMAG-1,X        < POUR RAZER L'IMAGE VIDEO.
         IF          ORDI-"T",XWOR%,,XWOR%
ADICO:   WORD        DICO            < PARCOURS DICHOTOMIQUE SEGMENT.
XWOR%:   VAL         0
AMESS:   WORD        0               < SAVE L'ADRESSE DU MESSAGE A
                                     < L'ENTREE DE GETS EN VUE DES
                                     < ERREURS DE SYNTAXE ...
ATYP:    WORD        ITEM2+IINDIC    < TYPE EVENTUEL DE L'ITEM2.
AITEM2:  WORD        ITEM2+LTN       < RELAI VERS L'ADRESSE DU
                                     < POINT D'ENTREE DE L'ITEM2.
<
< CONSTANTES :
<
KIN:     WORD        -1              < COMPTEUR DES ENTREES DANS 'VG'.
REDUC:   WORD        0               < FACTEUR DE REDUCTION=0/-1/-2.
NGE:     WORD        "GE"            < NOM DE L'OVERLAY 'GE'.
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.
IGR:     WORD        0               < 0=EDITION GRAPHIQUE.
IVID:    WORD        0               < 0=EDITION VIDEO.
<
< 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
<
< 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.
<
< CONSTANTES DICHOTOMIQUES :
<
ALIMAG:  WORD        LIMAG           < LONGUEUR IMAGE VIDEO.
NMPL:    WORD        CNMPL           < NBRE DE MOTS DE 16 BITS/LIGNE.
NLIG:    WORD        1024/RDY-1      < NBRE DE LIGNES-1 D'UNE IMAGE.
DICOX:   WORD        0               < X DU POINT VIDEO COURANT M.
DICOY:   WORD        0               < Y DU POINT VIDEO COURANT M.
DICOX1:  WORD        0               < X DE L'ORIGINE VIDEO COURANTE M1.
DICOY1:  WORD        0               < Y DE L'ORIGINE VIDEO COURANTE M1.
DICOX2:  WORD        0               < X EXTREMITE VIDEO COURANTE M2.
DICOY2:  WORD        0               < Y EXTREMITE VIDEO COURANTE M2.
         IF          ORDI-"S",XWOR%,,XWOR%
X1:      EQU         DICOX1
Y1:      EQU         DICOY1
X2:      EQU         DICOX2
Y2:      EQU         DICOY2
XWOR%:   VAL         0
<
< PILES DE TRAVAIL :
<
APILE:   WORD        PILE-1          < PILE DE SODOME.
STACK:   DZS         10              < PILE DE TRAVAIL.
         IF          ORDI-"T",XWOR%,,XWOR%
         DZS         30              < POUR LA DICHOTOMIE....
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         DZS         100             < POUR LA DICHOTOMIE...
XWOR%:   VAL         0
<
< SUITE DES MESSAGES (ICI A CAUSE DE SEG-ZERO UTILISEE DANS UN CPI) :
<
MSE:     BYTE        7;'6D
         ASCI        "SEUIL="
MSEX:    BYTE        4;'6D
         ASCI        "SX= "
MSEY:    BYTE        4;'6D
         ASCI        "SY= "
MEFFAC:  BYTE        7;'6D
         ASCI        "ERASE?"
MCOPY:   BYTE        6;'6D
         ASCI        "COPY? "
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
MRED:    BYTE        7;'6D
         ASCI        "REDUC="
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? "
MPROG:   BYTE        20;'6D
         ASCI        "PROGRAMME DE TRANS? "
MGR:     BYTE        11;'6D
         ASCI        "GRAPHIQUE?"
MVID:    BYTE        7;'6D
         ASCI        "VIDEO?"
MRAZ:    BYTE        5;'6D
         ASCI        "RAZ?"
         PROG
         PAGE
         IF          ORDI-"T",XWOR%,,XWOR%
<
<
<        T R A C E   D I C H O T O M I Q U E   D ' U N   S E G M E N T  :
<
<
DICO:    EQU         $
         LA          DICOX1          < A=X1.
         AD          DICOX2          < A=X1+X2.
         SLRS        1               < A=(X1+X2)/2.
         STA         DICOX           < X DU MILIEU DE M1M2.
         LA          DICOY1          < A=Y1.
         AD          DICOY2          < A=Y1+Y2.
         SLRS        1               < A=(Y1+Y2)/2.
         STA         DICOY           < Y DU MILIEU DE M1M2.
<
< POSITION DE M PAR RAPPORT A M1 :
<
         SB          DICOY1          < A=Y-Y1.
         JANE        DICO31          < M#M1.
         LA          DICOX           < A=X.
         SB          DICOX1          < A=X-X1.
         JAE         DICO32          < M=M1.
<
< POSITION DE M PAR RAPPORT A M2 :
<
DICO31:  EQU         $
         LA          DICOY           < A=Y.
         SB          DICOY2          < A=Y-Y2.
         JANE        DICO30          < M#M2 ET M#M1.
         LA          DICOX           < A=X.
         SB          DICOX2          < A=X-X2.
         JANE        DICO30          < M#M2 ET M#M1.
<
< CAS OU M=M1 OU M=M2 :
<
DICO32:  EQU         $
         LX          DICOX
         LY          DICOY
         BSR         ASET            < AFFICHAGE DU POINT M=(M1+M2)/2.
         RSR                         < ARRET PROVISOIRE DE LA DICHOTOMIE
                                     < DESCENDANTE.
<
< CAS OU M#M1 ET M#M2 :
<
DICO30:  EQU         $
         LA          DICOX2          < A=X2.
         LB          DICOY2          < B=Y2.
         PSR         A,B             < SAVE LE POINT M2 COURANT.
         LA          DICOX           < A=X.
         STA         DICOX2          < X2<--X.
         LA          DICOY           < A=Y.
         STA         DICOY2          < Y2<--Y.
         BSR         ADICO           < DICHOTOMIE SUR LE SEGMENT M1M.
         LX          DICOX2          < X=X2.
         LY          DICOY2          < Y=Y2.
         BSR         ASET            < AFFICHAGE DU POINT M2
         STX         DICOX1          < X1<--X2.
         STY         DICOY1          < Y1<--Y2.
         PLR         A,B             < RESTAURATION DU POINT M2 APRES
                                     < LE CHANGEMENT DU POINT M1.
         STA         DICOX2          < RESTAURE X2.
         STB         DICOY2          < RESTUARE Y2.
         JMP         DICO            < VERS LA POURSUITE DE LA DICHOTOMIE.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
<
<        T R A C E   V I D E O   D ' U N   S E G M E N T   E N   S O L A R.
<
<        (C'EST LE SYSTEME CMS5 QUI SE CHARGERA DE L'INTERPOLATION !).
<
SEG:     EQU         $
<
< PROLOGUE: SAUVEGARDE DES REGISTRES UTILISES ET SAUVEGARDE DANS LA PILE
< (QUI EST GRANDE !) DE LA ZONE QU'ON VA UTILISER POUR CONSTRUIRE L'EN-TETE
< DE L'IMAGE.
<
         PSR         A,B,X,W
<
         LR          K,B
         ADRI        1,B             < ZONE RECEPTRICE.
         LRM         A,X,W
         WORD        ENTIM           < ZONE EMETTRICE (A SAUVER DANS LA PILE).
         WORD        LENTIM          < LONGUEUR EN-TETE IMAGE.
         WORD        ENTIM           < POUR BASER L'EN-TETE.
         MOVE
         ADRI        LENTIM,K        < MISE A JOUR DE 'K'.
<
< ICI, ON A SAUVEGARDE LA ZONE DE CONSTRUCTION DE L'EN-TETE DANS LA PILE,
< ON VA CONSTRUIRE L'EN-TETE ET FAIRE LA DEMANDE D'INTERPOLATION VIDEO.
<
         LRM         A,B,X
         WORD        SEGSGN          < ZONE EMETTRICE: COORDONNEES (Y1,X1),
                                     < (Y2,X2) SEGMENT COURANT. CE SONT DES
                                     < COORDONNEES GRAPHIQUES.
         WORD        ENTIM+DEPY1     < ZONE RECEPTRICE.
         WORD        4               < LONGUEUR.
         MOVE
         STZ         DEPMOD,W
         IC          DEPMOD,W        < MODE TRACE 'SBT'.
         LRM         A,X
         WORD        ENTIM-ZERO*2    < ADRESSE OCTET EN-TETE IMAGE.
         WORD        LENTIM+LIMAG*2  < LONGUEUR OCTETS EN-TETE + IMAGE.
         STA         STABIL+1
         STX         STABIL+2
         LAD         STABIL          < DEMANDE INTERPOLATION ET AFFICHAGE.
         SVC         0
         LRM         A,X
         WORD        IMAG-ZERO*2     < RESTAURATION ADRESSE ET
         WORD        LIMAG*2         < LONGUEUR IMAGE DANS LA DEMANDE.
         STA         STABIL+1
         STX         STABIL+2
<
< EPILOGUE (FAIRE COMME SI ON N'AVAIT RIEN TOUCHE...).
<
         ADRI        -LENTIM,K       < RESTAURATION DE 'K'.
         LR          K,A
         ADRI        1,A             < ZONE EMETTRICE.
         LRM         B,X
         WORD        ENTIM           < ZONE RECEPTRICE (A RESTAURER).
         WORD        LENTIM          < LONGUEUR.
         MOVE
<
         PLR         A,B,X,W
         RSR
XWOR%:   VAL         0
         PAGE
<
<
<        M I S E   D ' U N   P O I N T   A   1  :
<
<
<        ARGUMENTS :
<                    X ET Y CONTIENNENT L'X ET L'Y DU POINT.
<                    C=@IMAG.
<
<
SET:     EQU         $
         PSR         B,X,C
         LR          Y,A
         MP          NMPL            < CONVERSION DE L'Y DU POINT EN
                                     < NUMERO DE MOT.
         ADR         B,C
         LR          X,A
         SLRS        4
         ADR         A,C             < C=@MOT CONTENANT LE POINT (X,Y).
         LAI         'F
         ANDR        A,X             < CALCUL DE X MODULO 16.
                                     < X=NUMERO DU BIT DANS LE MOT.
         LA          0,C             < A=MOT CONTENANT LE POINT (X,Y).
         SBT         0,X             < MISE DU POINT A 1.
         STA         0,C             < MISE A JOUR DE CE MOT.
         PLR         B,X,C
         RSR
<
<
<        E F F A C E M E N T   D ' U N   P O I N T  :
<
<
<        ARGUMENTS : VOIR 'SET'.
<
<
RESET:   EQU         $
         PSR         B,X,C
         LR          Y,A
         MP          NMPL
         ADR         B,C
         LR          X,A
         SLRS        4
         ADR         A,C             < C=@MOT CONTENANT LE POINT (X,Y).
         LAI         'F
         ANDR        A,X             < X=NUMERO DU BIT REPRESENTANT
                                     < LE POINT DANS LE MOT ((C)).
         LA          0,C
         RBT         0,X             < EFFACEMENT DU POINT (X,Y).
         STA         0,C             < MISE A JOUR DE L'IMAGE.
         PLR         B,X,C
         RSR
<
<
<        I N V E R S I O N   V I D E O   D ' U N   P O I N T  :
<
<
<        ARGUMENTS : VOIR 'SET'.
<
<
INVER:   EQU         $
         PSR         B,X,C
         LR          Y,A
         MP          NMPL
         ADR         B,C
         LR          X,A
         SLRS        4
         ADR         A,C
         LAI         'F
         ANDR        A,X
         LA          0,C
         IBT         0,X             < INVERSION VIDEO DU POINT (X,Y).
         STA         0,C
         PLR         B,X,C
         RSR
<
<
<        T E S T   D ' U N   P O I N T  :
<
<
<        ARGUMENTS : VOIR 'SET'.
<
<
<        RESULTAT :
<                    CARRY POSITIONNE PAR LE POINT (0/1).
<
<
TEST:    EQU         $
         PSR         B,X,C
         LR          Y,A
         MP          NMPL
         ADR         B,C
         LR          X,A
         SLRS        4
         ADR         A,C
         LAI         'F
         ANDR        A,X
         LA          0,C
         TBT         0,X             < TEST DU POINT (X,Y).
         PLR         B,X,C
         RSR
         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,A             < A=X(POINT COURANT).
         PSR         X               < SAVE LA COORDONNEE X.
         LX          REDUC           < X=FACTEUR DE REDUCTION.
         SLRD        16,X            < B=X REDUIT.
         LR          Y,A             < A=Y(POINT COURANT).
         SLRS        0,X             < A=Y REDUIT.
         STA         &ACEG           < INSERTION DANS LA LISTE.
         PLR         X               < RESTAURE LA COORDONNEE X.
         LA          ACEG            < ACCES AU POINTEUR COURANT.
         CPI         CEG-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          &ACEG           < Y.
         SB          CEG             < 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          CEG+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          ACEG            < PROGRESSION POINTEUR DE LISTE.
         STB         &ACEG           < INSERTION DE LA COORDONNEE X.
         IC          ACEG            < 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          ACEG            < SUPPRESSION DE L'ENTREE
         DC          ACEG            < 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          CEG             < A=Y(1ER PINT).
         LB          CEG+1           < B=X(1ER POINT).
         STA         &ACEG           < 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
<
<
<        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         ACEG            < REINITIALISATION DU POINTEUR
                                     < DE LISTE GRAPHIQUE.
<
< APPLICATION DE LA TRANSFORMATION A 1 POINT :
<
TR:      EQU         $
         LA          &ACEG           < Y.
         MP          M12
         DV          DM12
         PSR         A               < SAVE A=M12*Y.
         IC          ACEG
         LA          &ACEG           < 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          &ACEG           < X.
         MP          M21
         DV          DM21
         PSR         A               < SAVE A=M21*X.
         DC          ACEG
         LA          &ACEG           < 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         &ACEG           < SAVE L'Y TRANSFORME.
         IC          ACEG            < 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         &ACEG           < SAVE L'X TRANSFORME.
         IC          ACEG            < PASSAGE A 6HENTREE SUIVANTE.
         JDX         TR              < PASSAGE AU POINT SUIVANT.
E6010:   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.
         RSR
         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         $
         CPZ         IGR             < EDITION GRAPHIQUE ???
         JNE         NCOPY           < NON, DONC PAS DE COPY...
<
< 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
         PAGE
<
<
<        C O N V E R T I S S E U R
<        G R A P H I Q U E - G R A P H I Q U E  :
<
<
<        FONCTION :
<                      CE PROCESSEUR RECOIT DES SEGMENTS PAR
<                    LA ZDC, LES TRANSFORME EVENTUELLEMENT,
<                    PUIS, LES AFFICHE...
<
<
<
<
         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 :
<
         JMP         E1000           < VERS LES INITIALISATIONS.
<
<        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         $
         LAD         RELMEM
         SVC         0               < RETOUR 4K MOTS A PRIORI.
         CPZ         IGR             < EDITION GRAPHIQUE ???
         JNE         E4611           < NON...
         LAD         CG
         SVC         0               < REMISE EVENTUELLE DE LA VISU
                                     < D'EMISSION EN APLHA-NUMERIQUE.
E4611:   EQU         $
         LA          APILE
         LR          A,K             < REINITIALISATION DE K SUR
                                     < LA PILE DE SODOME.
<
< 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         $
GRAPH:   EQU         $
<
< EDITION GRAPHIQUE ???
<
         LA          AMGR
         BSR         ACARD
         STB         IGR             < 0=OUI, 1=NON.
<
< EDITION VIDEO ???
<
         IF          ORDI-"S",XWOR%,,XWOR%
< EN SOLAR ON A LE CHOIX ENTRE PAS DE VISUALISATION, VISUALISATION SURMENT.
< ROUGE, VERT, BLEU, (REPONDRE RESPECTIVEMENT 0,1,2,3). SI L'ON REPOND OUI
< VERT EST CHOISI AUTOMATIQUEMENT POUR VISUALISER.
VIDEO2:  EQU         $
         STZ         IVID
         IC          IVID            < VIDEO = NON A PRIORI.
         LA          AMVID           < MESSAGE...
         BSR         APRINT
         LAD         DEMREP          < DEMANDE REPONSE.
         SVC         0
         LBY         REP
         CPI         "N"
         JE          NVID            < PAS DE VIDEO.
         CPI         "O"
         JNE         VIDEO1
         LAI         "2"             < OUI --> VERT.
VIDEO1:  EQU         $
         ADRI        -'30,A
         JAL         VIDEO2          < REPONSE INCORRECTE.
         CPI         3
         JG          VIDEO2          < REPONSE INCORRECTE
         STA         STABIL+3        < COULEUR DANS LA DEMANDE VIDEO.
         STZ         IVID            < VIDEO = OUI.
         JMP         VIDEO
E1100X:  JMP         E1100           < DEPLACEMENT > 128 !
XWOR%:   VAL         0
         IF          ORDI-"T",XWOR%,,XWOR%
         LA          AMVID
         BSR         ACARD
         STB         IVID            < 0=OUI, 1=NON.
         JNE         NVID            < GRAPHIQUE.
XWOR%:   VAL         0
VIDEO:   EQU         $
         LAD         DEMMEM
         SVC         0               < SI VIDEO : 8K MOTS...
         LA          AMRAZ
         BSR         ACARD           < RAZ IMAGE VIDEO ???
         JNE         NVID            < NON.
         LX          ALIMAG          < OUI, X=NBRE DE MOTS A RAZER.
RAZ:     EQU         $
         STZ         &AIMAG          < RAZ IMAGE VIDEO.
         JDX         RAZ
NVID:    EQU         $
<
< CHOIX DU FACTEUR DE REDUCTION :
<
FRED:    EQU         $
         LA          AMRED
         BSR         APRINT          < ENVOI D'UNE INVITATION.
         LAD         DEMREP
         SVC         0               < LECTURE DU FACTEUR DE REDUCTION.
         LBY         REP             < A=CARACTERE LU.
         ADRI        -'30,A          < TRANSLATION NUMERIQUE.
         JAL         FRED            < ERREUR : CARACTERE NON RECONNU.
         CPI         MAXRED          < VALIDATION FACTEUR DE REDUCTION.
         JG          FRED            < ERREUR : CARACTERE NON RECONNU.
         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         $
<
< DOIT-ON UTILISER L'ITEM2 POUR TRANSFORMER ???
<
         LA          AMPROG
         BSR         ACARD           < ENVOI D'UN MESSAGE ET LECTURE
                                     < DE LA REPONSE (O/N).
         JE          PRO2            < OUI.
         STZ         AITEM2          < NON, RAZ DU RELAI AITEM2.
         JMP         PRO3
PRO2:    EQU         $
         LBY         &ATYP           < SI OUI, ON VALIDE L'ITEM2.
         CPI         "P"             < EST-CE LE TYPE 'P' ???
         IF          ORDI-"T",XWOR%,,XWOR%
         JNE         E1100           < NON, ABORT...
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         JNE         E1100X          < NON, ABORT... (SAUT > 128 !).
XWOR%:   VAL         0
PRO3:    EQU         $
<
< 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         IGR             < EDITION GRAPHIQUE ???
         JNE         E1001           < NON, RIEN A FAIRE...
<
< FAUT-IL EFFACER L'ECRAN DE LA VISU DE RECEPPTION :
<
         LA          AMEFFA
         BSR         ACARD           < FAUT-IL EFFACER L'ECRAN ???
<
< CHOIX VISU D'EMISSION :
<
E1200:   EQU         $
         LAD         OG
         SVC         0               < TENTATIVE D'OPEN GRAPHIQUE.
         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        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 ...
         PAGE
<
<
<        C O N V E R S I O N   G R A P H - G R A P H  :
<
<
E1001:   EQU         $
<
< REINITIALISATIONS :
<
E6030:   EQU         $
         LAI         CEG-ZERO
         STA         ACEG            < REINITIALISATION DU POINTEUR
                                     < DE LISTE DES SEGMENTS.
         ADR         A,A
         STA         WG+1
         STZ         WG+2
<
< ACCES AU SEGMENT COURANT :
<
SEG1:    EQU         $
         LAD         DEMGS
         SVC         0               < ACCES AU SEGMENT COURANT.
         CPZ         NOMSEG          < EST-IL VALIDE ???
         JE          SEG1            < NON, ON ATTEND.
         STZ         NOMSEG          < OUI, ON L'ACQUITTE.
         LAD         DELGS
         SVC         0
<
< TEST DE FIN DE LISTE :
<
         LA          SEGORG+X
         OR          SEGORG+Y
         OR          SEGEXT+X
         OR          SEGEXT+Y
         JANE        SEG2            < OK, ENCORE DU TRAVAIL...
         BSR         ARCOPY          < C'EST LA FIN,
         BR          AGOGE           < ON S'EN VA...
<
< TRAITEMENT DU SEGMENT COURANT :
<
SEG2:    EQU         $
         CPZ         AITEM2          < TRANSFORME-T'ON PAR ITEM2 ???
         JE          NPROG           < NON...
         LBI         1               < OUI, B=1, PAR COMPATIBILITE
                                     < AVEC 'TA'.
         LAD         SEGORG          < A=@SEGMENT COURANT...
         PSR         L,W
         BSR         &AITEM2         < APPEL DE L'OVERLAY ITEM2.
         PLR         L,W
NPROG:   EQU         $
         LA          CEG+2+X
         STA         SAVEXT+X        < SAVE L'EXTREMITE DU
         LA          CEG+2+Y
         STA         SAVEXT+Y        < SEGMENT PRECEDENT.
         LX          SEGORG+X
         LY          SEGORG+Y
         BSR         AXY             < INSERTION ORIGINE.
         LX          SEGEXT+X
         LY          SEGEXT+Y
         BSR         AXY             < INSERTION EXTREMITE.
<
< 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.
         CPZ         IGR             < EDITION GRAPHIQUE ???
         JNE         NGRAPH          < NON...
         LA          CEG+X
         CP          SAVEXT+X        < LA NOUVELLE ORIGINE, ET
                                     < L'EXTREMITE PRECEDENTE
                                     < SONT-ELLES CONFONDUES ???
         JNE         DIFF1           < NON...
         LA          CEG+Y
         CP          SAVEXT+Y        < MEME QUESTION ???
         JNE         DIFF1           < NON...
         LXI         4               < 4 OCTETS DE MOINS A SORTIR.
         LA          WG+1
         ADR         X,A             < PROGRESSION DE L'AMDEM.
         STA         WG+1
         LA          WG+2
         SBR         X,A             < REGRESSION DU CODEM.
         STA         WG+2
         JMP         INC3            < ET PAS D'OPEN GRAPHIQUE...
DIFF1:   EQU         $
<
< AFFICAHGE DE LA LISTE GRAPHIQUE (TRANSFORME OU PAS) :
<
         LAD         OG              < OPEN GRAPHIQUE.
         SVC         0               < POUR DECHAINER LES SEGMENTS.
INC3:    EQU         $               < ENTRY MODE INCREMENTAL.
         LAD         WG
         SVC         0               < (X EST INDIFFERENT !!!)
         JNE         E1001           < CAS DE SEGMENTS DE PETITES
                                     < NORME, LE CODEM DE WG=0...
NGRAPH:  EQU         $
         CPZ         IVID            < CONVERSION VIDEO DEMANDEE ???
         JNE         E1001           < NON, VERS LE SEGMENT SUIVANT.
<
< CONVERSION GRAPHIQUE--> VIDEO :
<
         PSR         X,Y
<
< CALCUL DES EXTREMITES M1 ET M2 DU SEGMENT VIDEO :
<
         LA          SEGORG+X        < A=X(ORIGINE GRAPHIQUE).
         SLRS        DEDX            < REDUCTION VIDEO.
         STA         DICOX1          < RANGEMENT DE X1.
         LA          SEGORG+Y        < A=Y(ORIGINE GRAPHIQUE).
         SLRS        DEDY            < REDUCTION VIDEO.
         NGR         A,A
         AD          NLIG            < INVERSION DUE AU FAIT QUE LES
                                     < AXES Y VIDEO ET GRAPHIQUE SONT
                                     < INVERSES.
         STA         DICOY1          < RANGEMENT Y1.
         LA          SEGEXT+X        < A=X(EXTREMITE GRAPHIQUE).
         SLRS        DEDX            < REDUCTION VIDEO.
         STA         DICOX2          < RANGEMENT DE X2.
         LA          SEGEXT+Y        < A=Y(EXTREMITE GRAPHIQUE).
         SLRS        DEDY            < REDUCTION VIDEO.
         NGR         A,A
         AD          NLIG            < INVERSION DES AXES Y.
         STA         DICOY2          < RANGEMENT DE Y2.
<
< TRACE DICHOTOMIQUE DU SEGMENT :
<
         IF          ORDI-"T",XWOR%,,XWOR%
         LX          DICOX1          < X=X1.
         LY          DICOY1          < Y=Y1.
         BSR         ASET            < AFFICHAGE DU POINT M1.
         BSR         ADICO           < TRACE DU SEGMENT M1M2.
         LX          DICOX2          < X=X2.
         LY          DICOY2          < Y=Y2.
         BSR         ASET            < AFFICHAGE DU POINT M2.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         BSR         ASEG
XWOR%:   VAL         0
         PLR         X,Y
         JMP         E1001           < VERS L'ACCES AU SEGMENT SUIVANT...
<
<
<        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         PERX+16
         $EQU        PERY+16
         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.