NMPROC:  VAL         "GF"            < NOM DU PROCESSEUR.
         IDP         "GF - RELEASE 01/06/1979"
         IDP         "JOHN F. COLONNA"
         EOT         #SIP DEFINITION CMS5#
QUANTA:  VAL         1               < DEFINITION DU QUANTA DISQUE
         IF          ORDI-"S",XWOR%,,XWOR% < SUIVANT L'ORDINATEUR.
QUANTA:  VAL         1
XWOR%:   VAL         0
         EOT         #SIP DEF PROCESSEUR#
         PROG
         WORD        IMAGE           < ENTRY POINT DU GENERATEUR.
         WORD        0
PIMAGE:  EQU         $               < P='12 !!!
         LRP         L
         BR          -2,L            < 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*QUANTA
         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
SEGMS0:  WORD        SEG-ZERO        < ADRESSE ABSOLUE DE SEG.
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
MERR:    BYTE        3;'6D;"?";"?"
MK:      BYTE        3;'6D
         ASCI        "K="
MX:      BYTE        3;'6D
         ASCI        "X="
MY:      BYTE        3;'6D
         ASCI        "Y="
MSGF:    BYTE        5;'6D
         ASCI        "SGF?"
<
< 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.
DEMOB:   WORD        '0B02           < EMISSION MESSAGE SUR '0B.
         WORD        0
         WORD        0
ERASE:   WORD        '0B05           < EFFACEMENT ECRAN VISU.
OG:      WORD        '0B03           < OPEN GRAPHIQUE VISU EMISSION.
CG:      WORD        '0B04           < CLOSE GRAPHIQUE VISU EMISSION.
WG:      WORD        '0B0A           < AFFICHAGE SEGMENT COURANT.
         WORD        SEG-ZERO*2
         WORD        8
WGT:     WORD        '0B0A           < AFFICHAGE SEGMENT EN ZDC.
         WORD        SEGSGN-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
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*QUANTA
         WORD        0
<
< RELAIS DIVERS :
<
AGOGE:   WORD        GOGE            < RETOUR A 'GE'.
AOVL:    WORD        OVL             < CHARGEMENT DES OVERLAYS.
APRINT:  WORD        PRINT           < EDITION D'UN MESSAGE.
APRINB:  WORD        PRINTB          < EDITION MESSAGE SUR '0B.
ADRAW:   WORD        DRAW            < AFFICHAGE SEGMENT COURANT ZDC.
AOPEN1:  WORD        OPEN1           < OPEN GRAPHIQUE+CHOIX VISU.
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.
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.
ACLOSF:  WORD        CLOSEF          < FERMETURE DU 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.
AGETGS:  WORD        GETGS           < ACCES AU SEGMENT COURANT ZDC.
AINTER:  WORD        INTER           < INTERROGATION PRIMAIRE.
AGRAVE:  WORD        GRAVE           < CALCULS DIVERS SUR LE DESSIN.
ASQRT:   WORD        SQRT            < EXTRACTION RACINE CARREE.
AENTC:   WORD        ENTC            < ENTREE D'UNE CONSTANTE 1-9,A-Z.
ADIVIS:  WORD        DIVIS           < DIVISION EXCES/DEFAUT.
<
< CONSTANTES :
<
KIN:     WORD        -1              < COMPTEUR DES ENTREES DANS 'VG'.
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.
ISGF:    WORD        0               < 0 : PAS D'OPERATIONS SGF EN COURS.
INSGF:   WORD        0               < 0 : OPERATIONS SGF VALIDEES.
MAXBUF:  WORD        128*QUANTA-4/4*4 < LONGUEUR MAXIMUM UTILE D'UN
                                      < BUFFER SGF.
<
< CONSTANTES DE CALCULS SUR LE DESSIN :
<
TEMPO:   EQU         $               < ZONE EN RECOUVREMENT AVEC PERX/PERY.
GX:      WORD        0               < X(G) ENTIERE,
FGX:     DZS         2               < X(G) FLOTTANTE.
GY:      WORD        0               < Y(G) ENTIERE,
FGY:     DZS         2               < Y(G) FLOTTANTE.
FX:      DZS         2               < X(POINT COURANT).
FY:      DZS         2               < Y(POINT COURANT).
IXX:     DZS         2               < MOMENT D'INERTIE XX,
IYY:     DZS         2               < MOMENT D'INERTIE YY,
IXY:     DZS         2               < MOMENT D'INERTIE XY (=YX).
IYX:     EQU         IXY
NPT:     WORD        0               < NBRE DE SEGMENTS EN ENTIER,
FNPT:    DZS         2               < IDEM EN FLOTTANT.
DELTA:   DZS         4               < DELTA,DELTA+1=DISCRIMINANT DE
                                     < L'EQUATION AUX VALEURS PROPRES
                                     < DE LA MATRICE D'INERTIE.
                                     < DELTA+2,DELTA+3=RACINE
                                     < CARRE DU DELTA.
UN:      DZS         2               < RESULTAT DE SQRT.
V1:      DZS         2               < 1ER VECTEUR PROPRE,
V2:      DZS         2               < 2EME VECTEUR PROPRE.
LTEMPO:  VAL         $-TEMPO-1       < LONGUEUR DE LA ZONE TEMPO.
XTEMPO:  VAL         32-LTEMPO       < DOIT ETRE POSITIF....
TTEMPO:  EQU         ZERO+XTEMPO     < ERREUR, SI MAUVAIS RECOUVREMENT.
ARG:     DZS         2               < ARGUMENT DE SQRT, ET DIVIS.
KK:      WORD        0               < CONSTANTE K,
KX:      WORD        0               < CONSTANTE X,
KY:      WORD        0               < CONSTANTE Y.
DEUX:    FLOAT       2
DIX:     FLOAT       0.1
FFACT:   FLOAT       2048
FTX:     FLOAT       512
FTY:     FLOAT       512
MG:      BYTE        1;"G"
<
< MATRICES DE PERMUTATION :
<
PERX:    EQU         TEMPO
PERY:    EQU         TEMPO+16
<
< 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="
         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         $
         PSR         Y               < SAVE Y.
         LR          X,A
         LY          KX
         BSR         ADIVIS
         LR          B,X             < X <-- (X/KX)*KX
         PLR         A               < RESTAURE Y.
         LY          KY
         BSR         ADIVIS
         LR          B,Y             < Y <-- (Y/KY)*KY
         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.
         CP          SEGMS0          < 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
<
<
<        A C C E S   S E G M E N T   Z D C  :
<
<
<        RESULTAT :
<                    SEG,
<                    A=0 SI FIN DE LISTE ('OAB').
<
<
GETGS:   EQU         $
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
         RSR
<
<
<        S E G M E N T   C O U R A N T   Z D C  :
<
<
DRAW:    EQU         $
         LAD         OG
         SVC         0               < DECHAINAGE DES SEGMENTS.
         LAD         WGT
         SVC         0               < TRACE GRAPHIQUE...
         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
<
<
<        E N T R E E   C O N S T A N T E  :
<
<
<        ARGUMENT :
<                    A=@MESSAGE.
<
<
<        RESULTAT :
<                    A=CONSTANTE.
<
<
ENTC1:   EQU         $
         LR          Y,A             < RESTAURE A=@MESSAGE.
ENTC:    EQU         $
         LR          A,Y             < SAVE Y=@MESSAGE.
         BSR         APRINT          < EMISSION MESSAGE (A).
         PSR         X
         LAD         DEMREP
         SVC         0               < ENTREE DE LA CONSTANTE.
         PLR         X
         LBY         REP             < A=CARACTERE REPONDU.
         CPI         "Z"             < VALIDATION SUPERIEURE.
         JG          ENTC1           < ERREUR DE SYNTAXE...
         ADRI        -"0",A          < CONVERSION BINAIRE.
         JALE        ENTC1           < ERREUR DE SYNTAXE...
         CPI         9               < EST-CE UN CHIFFRE ???
         JLE         ENTC2           < OUI, DE 1 A 9.
         ADRI        -"A"+"9"+1,A    < CONVERSION SUITE.
         CPI         9               < EST-CE DE A A Z ???
         JLE         ENTC1           < NON, ERREUR...
ENTC2:   EQU         $
         RSR
         PAGE
<
<
<        D I V I S I O N   E X C E S / D E F A U T  :
<
<
<        ARGUMENT :
<                    A=DIVIDENDE,
<                    Y=DIVISEUR.
<
<
<        RESULTAT :
<                    B=QUOTIENT, PAR EXCES OU PAR DEFAUT.
<
<
DIVIS:   EQU         $
         STY         ARG             < SAVE LE DIVISEUR.
         SARD        16              < EXTENSION 32 BITS...
         DV          ARG
         ADR         B,B             < ON DOUBLE LE RESTE.
         CPR         Y,B             < EXCES OU DEFAUT ???
         JL          DIVIS3          < DEFAUT...
         ADRI        1,A             < EXCES...
DIVIS3:  EQU         $
         MP          ARG             < CALCUL DU DIVIDENDE EN TANT
                                     < QUE MULTIPLE DU DIVISEUR.
         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         INSGF           < ACCES SGF VALIDE ???
         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.
         CP          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
         PAGE
<
<
<        F E R M E T U R E   D U   F I C H I E R  :
<
<
CLOSEF:  EQU         $
         CPZ         INSGF           < ACCES SGF VALIDE ???
         JNE         SGF5            < NON...
         CPZ         ISGF            < Y-A-T'IL EU DES OPERATION SGF ???
         JE          SGF5            < NON, RIEN A FAIRE...
         STZ         ISGF            < OUI, IL FAUT CLOSER...
<
< 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          SGF3            < OUI, RIEN A FAIRE.
         LAD         SGFW            < NON,
         SVC         0               < ECRITURE DERNIER ENREGISTREMENT.
SGF3:    EQU         $
         LAD         SGFC
         SVC         0               < CLOSE SAVE LA CLEF 1.0.
         LA          AMAC
         BSR         ACCIN           < SAVE LE FICHIER '0A.
SGF5:    EQU         $
         LAD         CG
         SVC         0               < REMISE EVENTUELLE DE LA VISU
                                     < D'EMISSION EN APLHA-NUMERIQUE.
SGF4:    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         CG
         SVC         0               < CLOSE GRAPHIQUE A PRIORI.
         LAD         DEMOUT
         SVC         0               < EMISSION MESSAGE.
         PLR         C               < RESTAURE C=@IMAGE VIDEO.
         RSR
<
<
<        E M I S S I O N   M E S S A G E   S U R   ' 0 B  :
<
<
PRINTB:  EQU         $
         PSR         C
         LR          A,C
         ADR         A,A
         ADRI        1,A             < A=@OCTET DU MESSAGE.
         STA         DEMOB+1
         LBY         0,C
         STA         DEMOB+2         < LONGUEUR DU MESSAGE.
         LAD         CG
         SVC         0               < RETOUR EN ALPHA...
         LAD         DEMOB
         SVC         0               < AFFICHAGE TEXTE.
         PLR         C
         RSR
<
<
<         T E N T A T I V E   D ' O G  :
<
<
OPEN1:   EQU         $
E1200:   EQU         $
         STZ         DEMOB+2         < MISE EN PLACE D'UN CODEM=0.
         LAD         DEMOB
         SVC         0               < ENVOI DE DEMOB.
         LR          X,A             < POUR TEST DU CODE DE RETOUR.
         CPI         '84             < EST-CE 'CODEM=0' ???
         JE          E110            < OUI, LE NVP 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        WGT             < MAJ DE WGT.
         STBY        COPY            < MAJ DE COPY.
         STBY        DEMOB
         JMP         E1200           < PUIS NOUVELLE TENTATIVE D'OG.
E110:    EQU         $
         LAD         OG
         SVC         0               < OPEN GRAPHIQUE..
         JNE         E1613           < GLUPSSS .??!!?
         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 LES MET EN FICHIERS COMPATI-
<                    BLES AVEC 'LP'.
<
<
<
<
         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.
<
<
<        R E T O U R   T E M P O R A I R E   A U   C C I  :
<
<
GOCCI:   EQU         $
         LAD         DEMCCI
         SVC         0
         BR          AINTER          < VERS L'INTERROGATION...
<
<        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         $
         LA          APILE
         LR          A,K             < REINITIALISATION DE K SUR
                                     < LA PILE DE SODOME.
         BSR         ACLOSF          < CLOSE LE FICHIER....
<
< 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 T E R R O G A T I O N   P R I M A I R E  :
<
<
E1000:   EQU         $
GRAPH:   EQU         $
INTER:   EQU         $
         LAD         MINT
         BSR         APRINT          < ENVOI D'UN MESSAGE.
         LAD         DEMREP
         SVC         0               < ENTREE DE LA REPONSE.
         LBY         REP             < A=REPONSE UTILISATEUR.
<
<        REPONSES RECONNUES :
<                    G : CALCUL CENTRE DE GRAVITE, ET AXES D'INERTIE.
<                    F : RETOUR A GE,
<                    W : RETOUR TEMPORAIRE AU CCI,
<                    S : SAUVEGARDE SGF DU DESSIN EN ZDC.
<
         CPI         "F"
         JE          GOGE            < RETOUR A GE.
         CPI         "W"
         JE          GOCCI           < RETOUR TEMPORAIRE AU CCI.
         CPI         "S"
         JE          FILE            < OPERATION SGF SUR LE DESSIN.
         CPI         "G"
         JE          GRAVE1          < CALCULS DIVERS SUR LE DESSIN.
         LAD         MERR
         BSR         APRINT          < RIEN COMPRIS, ERREUR !!!
         JMP         INTER           < INTERROGATION...
<
<
<        C A L C U L   C E N T R E   D E   G R A V I T E
<                    E T   A X E S   D ' I N E R T I E  :
<
<
GRAVE1:  EQU         $
         BR          AGRAVE          < VERS LE MODULE SPECIFIQUE...
<
<
<        O P E R A T I O N S   S G F  :
<
<
FILE:    EQU         $
<
< FAUT-IL ACCEDER AU SGF ???
<
         LAD         MSGF
         BSR         ACARD           < ENTREE DE LA REPONSE...
         STB         INSGF           < SAVE LA REPONSE...
         JNE         FRED            < ET BIEN NON, PAS DE SGF...
         IC          ISGF            < ISGF <-- 1 : OPERATIONS
                                     < SGF EN COURS !!!
<
< 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.
         STZ         IBUF            < IBUF <-- 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            < OUI, OK.
         LAD         MERR
         BSR         APRINT          < NON, ERREUR...
         JMP         CLOSE           < VERS LA FERMETURE DU FICHIER..
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
<
< ENTREE DES CONSTANTES K, X, Y :
<
         LAD         MK
         BSR         AENTC
         STA         KK              < K
         LAD         MX
         BSR         AENTC
         MP          KK
         STB         KX              < X
         LAD         MY
         BSR         AENTC
         MP          KK
         STB         KY              < Y
<
< FAUT-IL EFFACER L'ECRAN DE LA VISU DE RECEPPTION :
<
         LA          AMEFFA
         BSR         ACARD           < FAUT-IL EFFACER L'ECRAN ???
<
< CHOIX VISU D'EMISSION :
<
         BSR         AOPEN1          < OPEN GRAPHIQUE+CHOIX VISU.
         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         $
         LA          SEGMS0
         STA         ASEG            < REINITIALISATION DU POINTEUR
                                     < DE LISTE DES SEGMENTS.
         ADR         A,A
         STA         WG+1
         STZ         WG+2
<
< ACCES AU SEGMENT COURANT :
<
         BSR         AGETGS          < ACCES A LA ZDC, ET TEST
                                     < DE FIN DE LISTE...
         JANE        SEG2            < OK, ENCORE DU TRAVAIL...
         BSR         ARCOPY          < C'EST LA FIN,
<
< FERMETURE DU FICHIER '0A :
<
CLOSE:   EQU         $
         BSR         ACLOSF
         BR          AINTER          < VERS L'INTERROGATION...
<
< 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.
         LA          SEG+X
         CP          SAVEXT+X        < LA NOUVELLE ORIGINE, ET
                                     < L'EXTREMITE PRECEDENTE
                                     < SONT-ELLES CONFONDUES ???
         JNE         DIFF1           < NON...
         LA          SEG+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 DES SEGMENTS DE TROP
                                     < PETITES NORMES : LE CODEM DE
                                     < WG EST NUL... : LE CODEM DE
NGRAPH:  EQU         $
<
< SAUVEGARDE SGF DU SEGMENT COURANT :
<
         LX          SEG+0+X
         LY          SEG+0+Y
         BSR         ASTBUF          < ORIGINE DU SEGMENT.
         LX          SEG+2+X
         LY          SEG+2+Y
         BSR         ASTBUF          < EXTREMITE DU SEGMENT.
         JMP         E1001           < VERS L'ACCES AU SEGMENT SUIVANT...
         PAGE
<
<
<        C A L C U L   D U   C E N T R E   D E
<        G R A V I T E   E T   A U T R E S
<        C O N S T A N T E S   D U   D E S S I N  :
<
<
GRAVE:   EQU         $
<
< INITIALISATIONS :
<
         STZ         NPT             < RAZ DU NBRE DE SEGMENTS.
         LAI         0
         FLT
         FST         FGX
         FST         FGY
         FST         IXX
         FST         IYY
         FST         IXY
         BSR         AOPEN1          < OPEN GRAPHIQUE+CHOIX VISU.
GRAVE2:  EQU         $
<
< RECUPERATION DU SEGMENT COURANT :
<
         BSR         AGETGS          < ACCES ZDC.
         JAE         GRAVE3          < FIN DE LISTE...
         BSR         ADRAW           < AFFICHAGE SEGMENT COURANT.
<
< CUMUL DU SEGMENT COURANT :
<
         IC          NPT             < COMPTE DU SEGMENT COURANT.
         LA          SEGORG+X
         AD          SEGEXT+X
         SLRS        1               < X(MILIEU SEGMENT).
         FLT
         FSB         FTX             < TRANSLATION SUR X.
         FST         FX              < X(MILIEUR SEGMENT).
         LA          SEGORG+Y
         AD          SEGEXT+Y
         SLRS        1               < X(MILIEU SEGMENT).
         FLT
         FSB         FTY             < TRANSLATION SUR Y.
         FST         FY              < Y(MILIEU SEGMENT).
<
< CUMUL CENTRE DE GRAVITE :
<
         FAD         FGY
         FST         FGY             < FGY <-- (FGY)+(FY).
         FLD         FX
         FAD         FGX
         FST         FGX             < FGX <-- (FGX)+(FX).
<
< CUMUL MOMENTS D'INERTIE :
<
         FLD         FY
         FMP         FY
         FAD         IYY
         FST         IYY             < IYY <-- (IYY)+(FY)*(FY).
         FLD         FX
         FMP         FX
         FAD         IXX
         FST         IXX             < IXX <-- (IXX)+(FX)*(FX).
         FLD         FX
         FMP         FY
         FAD         IXY
         FST         IXY             < IXY <-- (IXY)+(FX)*(FY).
         JMP         GRAVE2          < VERS LE SEGMENT SUIVANT...
<
< FIN DE LISTE :
<
GRAVE3:  EQU         $
         LA          NPT
         JANE        GRAVE4          < OK, AU MOINS 1 SEGMENT...
GRAVE5:  EQU         $
         LAD         CG
         SVC         0               < RETOUR EN ALPHA...
         BR          AINTER          < VERS L'INTERROGATION.
GRAVE4:  EQU         $
         FLT
         FST         FNPT            < NBRE DE SEGMENTS RENCONTRES.
<
< REDUCTION DES MOMENTS D'INERTIE :
<
         FLD         FNPT
         FMP         FFACT
         FST         ARG             < ARG=NPT*FACT.
         FLD         IXX
         FDV         ARG
         FST         IXX             < IXX
         FLD         IYY
         FDV         ARG
         FST         IYY             < IYY
         FLD         IXY
         FDV         ARG
         FST         IXY             < IXY
<
< VISUALISATION DU CENTRE DE GRAVITE :
<
         FLD         FGX
         FDV         FNPT
         FAD         FTX             < TRANSLATION SUR X.
         FST         FGX
         FIX
         STA         GX              < X(CENTRE DE GRAVITE).
         STA         SEGORG+X
         STA         SEGEXT+X
         FLD         FGY
         FDV         FNPT
         FAD         FTY             < TRANSLATION SUR Y.
         FST         FGY
         FIX
         STA         GY              < Y(CENTRE DE GRAVITE).
         STA         SEGORG+Y
         STA         SEGEXT+Y
         BSR         ADRAW           < VISUALISATION DE G.
         LAD         MG
         BSR         APRINB          < ET AFFICHAGE 'G'...
<
< EQUATION AUX VALEURS PROPRES :
<        S*S-S*(IXX+IYY)+IXX*IYY-IXY*IXY=0
<
         FLD         IXX
         FSB         IYY
         FST         FX              < SAVE : FX=IXX-IYY.
         FMP         FX
         FST         FY              < SAVE : FY=FX*FX.
         FLD         IXY
         FMP         IXY
         FMP         DEUX
         FMP         DEUX            < 4*IXY*IXY
         FAD         FY
         FST         DELTA           < DELTA=(IXX-IYY)*(IXX-IYY)+4*IXY*IXY
         BSR         ASQRT           < CALCUL DE SQRT(DELTA) DANS DELTA+2.
         FST         DELTA+2
<
< CALCUL DES VECTEURS PROPRES :
<        V1=((IXX-IYY+SQRT(DELTA))/2,IXY)
<        V2=((IXX-IYY-SQRT(DELTA))/2,IXY)
<
         FLD         FX              < IXX-IYY
         FAD         DELTA+2         < IXX-IYY+SQRT(DELTA)
         FDV         DEUX
         FIX
         STA         V1+X
         FLD         FX              < IXX-IYY
         FSB         DELTA+2         < IXX-IYY-SQRT(DELTA)
         FDV         DEUX
         FIX
         STA         V2+X
         FLD         IXY
         FIX
         STA         V1+Y
         STA         V2+Y
<
< TRACE DES VECTEURS PROPRES :
< (ORG EST DEJA POSITIONNEE SUR G)
<
         LA          GX
         AD          V1+X
         STA         SEGEXT+X
         LA          GY
         AD          V1+Y
         STA         SEGEXT+Y
         BSR         ADRAW           < TRACE DE V1.
         LA          GX
         AD          V2+X
         STA         SEGEXT+X
         LA          GY
         AD          V2+Y
         STA         SEGEXT+Y
         BSR         ADRAW           < TRACE DE V2.
         BR          AINTER          < RETOUR A L'INTERROGATION.
         PAGE
<
<
<        R A C I N E   C A R R E  :
<
<
<        ARGUMENT : A,B.
<
<
<        RESULTAT : A,B.
<
<
SQRT:    EQU         $
         FCAZ
         JE          SQRT2           < SQRT(0)=0.
         FST         ARG             < ARGUMENT
         LAI         1
         FLT
         FST         UN              < INITIALISATION DE LA SUITE 'U'.
                                     < U0=1.
SQRT1:   EQU         $
         FLD         ARG             < ARGUMENT
         FDV         UN              < ARGUMENT/UN
         FAD         UN              < UN+ARGUMENT/UN
         FDV         DEUX            < (UN+ARGUMENT/UN)/2
         FST         UN              < UN1 <-- (UN+ARGUMENT/UN)/2
                                     < (UN ET UN1 SIGNIFIANT 'U'
                                     < INDICE N ET INDICE N+1)
         FMP         UN              < UN1*UN1
         FSB         ARG             < UN1*UN1-ARGUMENT
         FABS                        < ABS(UN1*UN1-ARGUMENT)
         FCAM        DIX             < POSITION PAR RAPPORT A 1/10 ???
         JG          SQRT1           < PAS ASSEZ PRECIS...
         FLD         UN              < UN1 EST LE RESULTAT.
SQRT2:   EQU         $
         RSR
         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.