NMPROC:  VAL         "ST"            < NOM DU PROCESSEUR.
         IDP         "ST - RELEASE 01/06/1979"
         IDP         "JOHN F. COLONNA"
         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
DEDX:    VAL         0
DEDY:    VAL         0
MAXRED:  VAL         10              < FACTEUR DE REDUCTION MAX.
         PAGE
<
<
<        L O C A L  :
<
<
<
< CARTES DE CONTROLE SGF :
<
MAC:     ASCI        "!ASSIGN A="
         BYTE        "S";'04
MAO:     ASCI        "!ASSIGN A=N,"
LNFIC:   VAL         10              < NBRE DE MOTS MAX D'UN NOM SGF.
NMAO:    DZS         LNFIC
         BYTE        '04;0           < PAR PRUDENCE...
<
< BUFFER SGF :
<
BUFSGF:  DZS         128
MAXBUF:  VAL         128-4/4*4
         LOCAL
LOC:     EQU         $
<
< 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
SEG:     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.
AMFIC:   WORD        MFIC
AMPROG:  WORD        MPROG
AMEPS:   WORD        MEPS
MERR:    BYTE        3;'6D;"?";"?"
M4014:   BYTE        6;'6D
         ASCI        "4014? "
MSGF:    BYTE        5;'6D
         ASCI        "SGF?"
<
< CONSTANTES DE CALCUL DES TETAS DES SEGMENTS :
<
SEGP:    EQU         $               < SEGMENT CUMULE PRECEDENT.
         DO          4
         WORD        -1              < N'EXISTE PAS INITIALEMENT.
ARG:     DZS         6               < ARGUMENT/RESULTAT DE 'TETA'.
FX:      EQU         ARG+0           < COORDONNEE X FLOTTANTE,
FY:      EQU         ARG+2           < COORDONNEE Y FLOTTANTE,
FTETA:   EQU         ARG+4           < FTETA=ARCTG(FY/FX).
TETAC:   DZS         2               < TETA DE SEGP...
EPS:     FLOAT       0.4
NSEG:    WORD        0               < NBRE DE SEGMENTS CONCATENES
                                     < DANS SEGP.
EPS1:    DZS         2               < EPS1=EPS/NSEG.
DEUXPI:  FLOAT       6.2832
<
< 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.
DEMOB:   WORD        '0B02           < POUR TESTER LA NATURE DE
         WORD        0               < L'ASSIGNATION '0B.
         WORD        0               < CODEM=0...
WG:      WORD        '0B0A           < AFFICHAGE SEGMENT COURANT.
         WORD        SEG-ZERO*2
         WORD        8
WGP:     WORD        '0B0A           < AFFICHAGE SEGMENT CUMULE.
         WORD        SEGP-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.
POINTI:  WORD        '0B07           < MISE EN MODE POINTILLE SI 41014.
         BYTE        '1D;'1B;'61;'04 < GS,ESC,A MINUSCULE.
CONTI:   WORD        '0B07           < REMISE EN CONTINU SI 4014.
         BYTE        '1D;'1B;'60;'04
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
DEMNOM:  WORD        '0101           < ENTREE NOM DE FICHIER.
         WORD        NMAO-ZERO*2
         WORD        LNFIC*2
CCII:    WORD        '0002           < ACCES CCI INTERPRETATIF.
         WORD        0
         WORD        80
SGFO:    WORD        '0A04           < OPEN NEW DE LA CLEF 1.0.
         WORD        1;0
SGFC:    WORD        '0A07           < CLOSE SAVE LA CLEF 1.0.
SGFW:    WORD        '0A02           < ECRITURE 1 ENREGISTREMENT.
         WORD        BUFSGF-ZERO*2
         WORD        128*2
         WORD        0
<
< RELAIS DIVERS :
<
AGOGE:   WORD        GOGE            < RETOUR A 'GE'.
AERR:    WORD        E1100           < MESSAGE D'ERREUR, ET GOGE...
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.
ASEG:    WORD        SEG             < POINTEUR COURANT DE LA LISTE
                                     < DES SEGMENTS.
ATETA:   WORD        TETA            < CACCUL DE ARCTG(FTY/FTX).
ASTSEG:  WORD        STSEG           < ENVOI D'UN SEGMENT AU SGF.
AREP:    WORD        REP,X           < POUR CONVERSION DES SEUILS.
ACCIN:   WORD        CCIN            < ACCES CCI INTERPRETATIF.
ABUFS:   WORD        BUFSGF+1,X      < ACCES BUFFER SGF.
ASGF:    EQU         ABUFS
ASTBUF:  WORD        STBUF           < MISE DE (X,Y) DANS LE FICHIER.
AMAC:    WORD        MAC             < CARTE !ASSIGN A=C.
AMAO:    WORD        MAO             < CARTE !ASSIGN A=O,...
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'.
ISGF:    WORD        0               < 0=ACCES AU SGF, 1=NON.
ACNSYS:  ASCI        ":SYS"
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.
F256:    FLOAT       256
<
< 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.
IBUF:    WORD        0               < INDEX COURANT BUFFER SGF.
<
< 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) :
<
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? "
MFIC:    BYTE        9;'6D
         ASCI        "FICHIER="
MEPS:    BYTE        9;'6D
         ASCI        "EPS*256="
         PROG
         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         &ASEG           < INSERTION DANS LA LISTE.
         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
<
<
<        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
<
<
<        A C C E S   S G F  :
<
<
<        ARGUMENT :
<                    X,Y = COORDONNEES DU POINT A INSERER
<                          DANS LE FICHIER '0A.
<
<
STBUF:   EQU         $
         CPZ         ISGF            < ACCES SGF ???
         JNE         STBUF6          < NON...
         PSR         A,X
         LR          X,A             < A=COORDONNEE X.
         LX          IBUF            < X=INDEX COURANT BUFFER SGF.
         STA         &ASGF           < COORDONNEE X.
         ADRI        1,X             < PROGRESSION INDEX BUFFER.
         STY         &ASGF           < COORDONNEE Y.
         ADRI        1,X             < PROGRESSION INDEX BUFFER.
         LR          X,A             < VALIDATION INDEX BUFFER.
         CPI         MAXBUF          < PLEIN ???
         JL          STBUF1          < NON.
         LAD         SGFW            < OUI,
         SVC         0               < ECRITURE DE L'ENREGISTREMENT.
         LAI         0               < RAZ DE L'INDEX COURANT.
STBUF1:  EQU         $
         STA         IBUF            < MAJ INDEX BUFFER SGF.
         PLR         A,X
STBUF6:  EQU         $
         RSR
<
<
<        E N V O I   D ' U N   S E G M E N T   A U   S G F  :
<
<
STSEG:   EQU         $
         CPZ         NSEG            < EST-CE UN 'OAB' INITIAL ???
         JE          ETI3            < OUI, RIEN A FAIRE...
<
< ENVOI DE L'ORIGINE DE 'SEGP' :
<
         LX          SEGP+0+X
         LY          SEGP+0+Y
         BSR         ASTBUF
<
< ENVOI DE L'EXTREMITE DE 'SEGP' :
<
         LX          SEGP+2+X
         LY          SEGP+2+Y
         BSR         ASTBUF
<
< EDITION GRAPHIQUE DE SEGP :
<
         LAD         POINTI
         SVC         0               < OG+(POINTILLE).
         LAD         WGP
         SVC         0               < AFFICHAGE SEGP.
         LAD         CONTI
         SVC         0               < OG+(CONTINU).
ETI3:    EQU         $
         RSR
         PAGE
<
<
<        A C C E S   C C I   I N T E R P R E T A T I F  :
<
<
<        ARGUMENT :
<                    A=@MOT DE LA CARTE.
<
<
<        RESULTAT :
<                    CODES DE CONDITION.
<
<
CCIN:    EQU         $
         SLLS        1               < A=@OCTET DE LA CARTE.
         STA         CCII+1
         LAD         CCII
         SVC         0               < ENVOI DE LA CARTE CONTROLE.
         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         $
<
< 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...
<                    ET IL ESSAYE D'EN EXTRAIRE DE PLUS LES
<                    GRANDES LIGNES EN RECHERCHANT LES
<                    VARIATIONS DE PENTE...
<
<
<
<
         WORD        0
         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         $
         CPZ         ISGF            < ACCES SGF ???
         JNE         ETI20           < NON...
<
< FERMETURE DU FICHIER '0A :
<
         LXI         -1
         LYI         -1
         BSR         ASTBUF          < INSERTION DE 2
         BSR         ASTBUF          < COUPLE (-1,-1); ON EN MET 2
                                     < AU CAS OU UN ALT-MODE AURAIT
                                     < INTERROMPU L'INSERTION D'UN
                                     < SEGMENT.
         CPZ         IBUF            < LE BUFFER EST-IL VIDE ???
         JE          SGF2            < OUI, RIEN A FAIRE.
         LAD         SGFW            < NON,
         SVC         0               < ECRITURE DERNIER ENREGISTREMENT.
SGF2:    EQU         $
         LAD         SGFC
         SVC         0               < CLOSE SAVE LA CLEF 1.0.
         LA          AMAC
         BSR         ACCIN           < SAVE LE FICHIER '0A.
ETI20:   EQU         $
         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         $
<
< EST-ON SUR UN 4014 ???
<
         LAD         M4014
         BSR         ACARD           < ALORD ???
         JE          ETI10           < IL SEMBLE QUE OUI ...
         LAI         '0B             < NVP='0B
         SWBR        A,A
         ORI         '03             < ON VA GENERER DES 'OG'...
         STA         POINTI
         STA         CONTI
ETI10:   EQU         $
<
< ACCES AU SGF ???
<
         LAD         MSGF
         BSR         ACARD           < INTEROGATION ???
         STB         ISGF            < SAVE LA REPONSE....
         JNE         FRED            < NON, PAS DE DEMANDE DE NOM !!!
<
<        CAS 4010 : TOUS LES TRACES SONT CONTINUS,
<        CAS 4014 : LES TRACES DE CONCATENATION (SEGP) SONT POINTILLES.
<
GRAPH:   EQU         $
<
< OUVERTURE DU FICHIER :
<
SGF1:    EQU         $
         LA          AMAC
         BSR         ACCIN           < CLOSE SAVE '0A.
         LA          AMFIC
         BSR         APRINT
         LAD         DEMNOM
         SVC         0               < ENTREE DU NOM DU FICHIER.
         LA          AMAO
         BSR         ACCIN           < ESSAI D'OUVERTURE NEW.
         JNE         SGF1            < ERREUR, ON REDEMANDE....
         LAD         SGFO
         SVC         0               < OK, OUVERTURE DE LA CLEF 1.0.
<
< 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' ???
         JE          PRO3            < OK, TYPE 'P'...
         BR          AERR            < NON, ABORT..
PRO3:    EQU         $
<
< ENTREE DE EPS :
<
ETI6:    EQU         $
         LA          AMEPS
         BSR         AGETS           < A=EPS*256.
         JAL         ETI6            < ERREUR EPS<0...
         FLT
         FDV         F256            < CALCUL DE EPS.
         FST         EPS
<
< 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
<
< 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         DEMOB
         SVC         0               < TEST DE L'ASSIGNATION '0B.
         LR          X,A             < CODE DE RETOUR...
         CPI         '84             < EST-CE 'CODEM=0' ???
         JE          E110            < OK, '0B EST ASSIGNE MAIS
                                     < PAS AU NVP 'DUMMY'...
<
< CHANGEMENT DE VISU D'EMISSION :
<
E1613:   EQU         $
         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        WGP             < MAJ DE WGP.
         STBY        COPY            < MAJ DE COPY.
         STBY        POINTI          < MAJ DE POINTI.
         STBY        CONTI           < MAJ DE CONTI.
         STBY        DEMOB           < MAJ DE DEMOB.
         JMP         E1200           < PUIS NOUVELLE TENTATIVE D'OG.
E110:    EQU         $
         LAD         OG
         SVC         0               < OPEN GRAPHIQUE...
         JNE         E1613           < GLUPSSSS..???!!!?!!?
         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         SEG-ZERO
         STA         ASEG            < 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         ASTSEG          < ENVOI DU DERNIER SEGMENT...
         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          SEG+2+X
         STA         SAVEXT+X        < SAVE L'EXTREMITE DU
         LA          SEG+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.
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 DES SEGMENTS DE TROP
                                     < PETITES NORMES : LE CODEM DE
                                     < WG EST NUL... : LE CODEM DE
NGRAPH:  EQU         $
<
< TEST DE CHAINGE DE SEG ET SEGP :
<
         LA          SEGP+2+X        < EXTREMITE DE SEGP,
         CP          SEG+0+X         < ORIGINE DE SEG.
         JNE         ETI1            < SEG ET SEGP NON CHAINES...
         LA          SEGP+2+Y        < EXTREMITE DE SEGP,
         CP          SEG+0+Y         < ORIGINE DE SEG.
         JNE         ETI1            < SEG ET SEGP NON CHAINES...
<
< CAS OU SEG ET SEGP SONT CHAINES :
<
ETI4:    EQU         $
         LA          SEG+2+X
         SB          SEGP+0+X
         FLT
         FST         FX              < EXT(SEG)-ORG(SEGP).
         LA          SEG+2+Y
         SB          SEGP+0+Y
         FLT
         FST         FY              < EXT(SEG)-ORG(SEGP).
         LAD         ARG             < A=@ZONE DES ARGUMENTS.
         BSR         ATETA           < CALCUL DU TETA DU SEGMENT
                                     < OBTENU PAR CONCATENATION
                                     < DE SEG A SEGP.
         CPZ         NSEG            < EST-CE UNE RE-INITIALISATION ???
         JE          ETI5            < OUI....
         FLD         TETAC           < TETA DE SEGP,
         FSB         FTETA           < CALCUL DE LA VARIATION DE TETA,
                                     < EN PASSANT DE SEGP A SEG/SEGP.
         FABS                        < CALCUL DE LA VALEUR ABSOLUE
                                     < DE CETTE VARIATION.
         FCAM        EPS1            < CETTE VARIATION EST-ELLE
                                     < SIGNIFICATIVE ???
         JLE         ETI5            < NON, ABS(DELTA(TETA))<=EPS1.
         FSB         DEUXPI          < OUI, MAIS CE N'EST PEUT-ETRE
                                     < QU'UNE APPARENCE; ON EST
                                     < PEUT-ETRE AU VOISINNAGE DE 0, DONC
                                     < DE 2*PI...
         FABS
         FCAM        EPS1            < EST-CE SIGNIFICATIF ???
         JG          ETI2            < OUI, DEFINITIVEMENT !!!
<
< CAS D'UNE VARIATION NON SIGNIFICATIVE :
<
ETI5:    EQU         $
         FLD         FTETA           < LE TETA DE SEG/SEGP DEVIENT
         FST         TETAC           < LE TETA COURANT.
         LX          SEG+2+X         < L'EXTREMITE DE SEG
         LY          SEG+2+Y
         STX         SEGP+2+X        < DEVIENT L'EXTREMITE DE SEGP.
         STY         SEGP+2+Y
         IC          NSEG            < COMPTAGE DES SEG.
         LA          NSEG
         FLT
         FST         EPS1
         FLD         EPS
         FDV         EPS1
         FST         EPS1            < EPS1=EPS/NSEG.
         JMP         E1001           < VERS L'ACCES AU SEGMENT SUIVANT.
<
< CAS SEGMENTS SEG ET SEGP DECHAINES, OU 1ERE FOIS :
<
ETI1:    EQU         $
<
< CAS OU LA VARIATION DE TETA EST SIGNIFICATIVE :
<
ETI2:    EQU         $
         BSR         ASTSEG          < ENVOI DE SEGP AU SGF.
         STZ         NSEG            < NSEG <-- 0.
         LX          SEG+0+X
         LY          SEG+0+Y         < L'ORIGINE DE SEG
         STX         SEGP+0+X        < DEVIENT L'ORIGINE
         STY         SEGP+0+Y        < DE SEGP.
         JMP         ETI4            < VERS LA SUITE DES RE-INITIALISATIONS.
         PAGE
<
<
<        C A L C U L   D E   L ' A R C T G  :
<
<
<        ARGUMENT :
<                    W=@TABLE D'ARGUMENT, DONT
<                    MOT0,MOT1=DELTA(X),
<                    MOT2,MOT3=DELTA(Y).
<
<
<        RESULTAT :
<                    MOT4,MOT5=TETA=ARCTG(Y/X).
<
<
         LOCAL
ZZZ040:  EQU         $
ZZZ043:  DZS         2               < NB EN FLOTTANT
ZZZ044:  DZS         2
Z100:    DZS         2
DPI:     FLOAT       6.2832
PI:      FLOAT       3.1416
PIS2:    FLOAT       1.5708
UN:      FLOAT       1
PPIS2:   FLOAT       1E-2
TC0:     WORD        '5100;'F3A7     < CSTES POUR ARCTG
TC1:     WORD        '6CFF;'4920
TC2:     WORD        '6CFB;'6B37
TC3:     WORD        '5100;'F3AB
TC4:     WORD        '5100;'74D5
TC5:     WORD        '71FD;'7E2D
         WORD        ZZZ040+'80      < RELAI VERS LE LOCAL
         PROG
TETA:    EQU         $
         PSR         A,B,X,Y,L,W
         LRP         L               < INIT. DE LA BASE L
         LB          -2,L
         LR          B,L
         LR          A,W             < @ TABLE PARAM.
         FCMZ        0,W             < TEST DU DIVISEUR (DELTA(X)) ???
         JE          Z0010           < IL EST NUL, OVERFLOW !!!
         FLD         2,W             < CALCUL DE DELTA(Y)/DELTA(X).
         FDV         0,W
         JNV         Z001
Z0010:   EQU         $
         FLD         PIS2
         FCMZ        2,W
         JGE         Z002
         FAD         PI
Z002:    EQU         $
         FST         4,W             < RENVOI DU RESULTAT...
         PLR         A,B,X,Y,L,W
         RSR
Z001:    EQU         $
         FST         ZZZ043
         LYI         0
         LXI         0
         FCAZ
         JNE         Z003
         LAI         0
         FLT
         FCMZ        0,W
         JGE         Z002
         FLD         PI
         JMP         Z002
Z003:    EQU         $
         JG          Z004
         LYI         1
         FNEG
         FST         ZZZ043
Z004:    EQU         $
         FCAM        UN
         JLE         Z005
         FLD         UN
         FDV         ZZZ043
         FST         ZZZ043
         LXI         1
         FCAM        PPIS2
         JL          Z009
Z005:    EQU         $
         FMP         ZZZ043
         FST         ZZZ044
         FMP         TC5
         FAD         TC4
         FMP         ZZZ044
         FAD         TC3
         FST         Z100
         FLD         ZZZ044
         FMP         TC2
         FAD         TC1
         FMP         ZZZ044
         FAD         TC0
         FMP         ZZZ043
         FDV         Z100
Z009:    EQU         $
         CPZR        X
         JE          Z006
         FSB         PIS2
         ADRI        -1,Y
Z006:    EQU         $
         CPZR        Y
         JE          Z007
         FNEG
Z007:    EQU         $
         FCMZ        0,W
         JGE         Z008
         FAD         PI
         JMP         Z002
Z008:    EQU         $
         FCMZ        2,W
         JGE         Z002
         FAD         DPI
         JMP         Z002
         PAGE
<
<
<        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
         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.