NLS
         IDP         "SIP VECTEUR 512"
<        V E C T E U R   5 1 2  :
XXVEC1:  VAL         1               < XXXVEC=1 : DEFINITION DES CONSTANTES.
XXVEC2:  VAL         2               < XXXVEC=2 : DEFINITION DU LOCAL (OU DU
                                     <            COMMON).
XXVEC3:  VAL         3               < XXXVEC=3 : DEFINITION DES SOUS-PROGRAMMES
                                     <            NECESSAIRES.
XXXIMA:  VAL         -1              < POUR NE DEFINIR QUE 'XXIMA'...
         CALL        #SIP IMAGE 512#
         IF          XXXVEC-XXVEC1,XWOR%9,,XWOR%9
         LST
         PAGE
<
<
<        C O N S T A N T E S   D I V E R S E S  :
<
<
         PROG
EDBT:    DBT
CODBT:   VAL         '0000000@@@@
         $EQU        EDBT
ERBT:    RBT         0,X
CORBT:   VAL         '0000000@@@@
         $EQU        ERBT
         PAGE
XXXIMA:  VAL         XXIMA1
         EOT         #SIP IMAGE 512#
YYYIMA:: VAL         YYYIM1          < POUR RANGER LES POINTS PAR 3 DIALOGUES
                                     < AU 68000...
<
< CONVERSION GRAPHIQUE --> 512*512 :
<
XXVD4::  VAL         LK              < TAILLE DE L'ESPACE GRAPHIQUE...
XWOR%1:  VAL         XMAX+I
XXDEDX:: VAL         XXVD4/XWOR%1=K  < DECALAGE DE PASSAGE 1024-->512,
XWOR%1:  VAL         YMAX+I
XXDEDY:: VAL         XXVD4/XWOR%1=K  < IDEM...
         NLS
XWOR%9:  VAL         ENDIF
         IF          XXXVEC-XXVEC2,XWOR%9,,XWOR%9
         LST
<
<
<        A R G U M E N T S  :
<
<
VECTCO:  WORD        0               < POUR LE BLOC FLOTTANT...
VECTNI:  WORD        0               < NIVEAU DE GRIS MAX DU TRACE (ON DIT
                                     < "MAX", CAR LORS D'UN TRACE ANTI-ALIASING,
                                     < ON PRECISE AUSSI UN NIVEAU "MIN"...).
VECTRS:  WORD        0               < MODE TRACE ('SBT',... 'FLOU',...).
VEDECA:  WORD        0               < DECALAGE A APPORTER AU NIVEAU.
VEPOIN:  WORD        MMOT            < PATTERN DE POINTILLES SUR 16 BITS ;
                                     < CELLE-CI SUBIT UN DECALAGE CIRCULAIRE
                                     < A CHAQUE PASSAGE DANS 'VECTP2'.
VECANT:  WORD        0               < INDICATEUR DE TRACE ANTI-ALIASING PAR
                                     < 'BANTI', ET NIVEAU "MIN" DE TRACE...
BANTI::  VAL         BITSIG          < INDICATEUR DE TRACE ANTI-ALIASING...
VECTY1:  WORD        0               < COORDONNEE Y1,
VECTC:   EQU         VECTY1          < LISTE DES COORDONNEES (FORMAT 'TV').
VECTX1:  WORD        0               < COORDONNEE X1 DU PREMIER POINT,
VECTY2:  WORD        0               < COORDONNEE Y2,
VECTX2:  WORD        0               < COORDONNEE X2 DU DEUXIEME POINT.
VECGY1:  WORD        0               < COORDONNEE Y1,
VECGC:   EQU         VECGY1          < LISTE DES COORDONNEES (FORMAT 'VISU').
VECGX1:  WORD        0               < COORDONNEE X1 DU PREMIER POINT,
VECGY2:  WORD        0               < COORDONNEE Y2,
VECGX2:  WORD        0               < COORDONNEE X2 DU DEUXIEME POINT.
XXXIMA:  VAL         XXIMA2
         EOT         #SIP IMAGE 512#
XXXIMA:  VAL         XXIMA4
         EOT         #SIP IMAGE 512#
<
< SUITE DES CONSTANTES DIVERSES :
<
NEXIST:  VAL         K
EXIST:   VAL         NEXIST+I
M000F:   VAL         '000F
M007F:   VAL         '007F
B:       VAL         BIT
L:       VAL         K               < PREMIER BIT D'UN MOT...
W:       VAL         I               < ELEMENT UNIQUE...
D:       VAL         I               < LONGUEUR D'UN MOT...
         PAGE
<
<
<        S E G M E N T   A   T R A C E R  :
<
<
INFINI:  WORD        '8000
<
< DONNEES DE L'INTERPOLATION ((X1,Y1),(X2,Y2)) :
<
VECTDX:  WORD        0               < DELTAX=ABS(X2-X1).
VECTDY:  WORD        0               < DELTAY=ABS(Y2-Y1).
VECTDF:  FLOAT       0               < DELTAX EXPRIME EN FLOTTANT...
VECTA:   FLOAT       0               < COEFFICIENT 'A' DE LA DROITE PORTANT
                                     < LE SEGMENT A TRACER.
VECTB:   FLOAT       0               < COEFFICIENT 'B' DE LA DROITE PORTANT
                                     < LE SEGMENT A TRACER.
VECTN:   FLOAT       0               < NOMBRE DE PAS POUR TRACER LE SEGMENT,
                                     < SOIT MAX(ABS(DELTAX,DELTAY)).
VECTX:   FLOAT       0               < COORDONNEE X DU POINT COURANT,
VECTY:   FLOAT       0               < COORDONNEE Y DU POINT COURANT.
VECT05:  FLOAT       0.5             < CONSTANTE D'EXCES OU DE DEFAUT...
VENIVO:  WORD        0               < CONTIENT UN NIVEAU DE GRIS DE 0
                                     < A NIV256-I.
NIVMIN:  FLOAT       0               < NIVEAU "MIN" A UTILISER LORS D'UN
                                     < TRACE ANTI-ALIASING,
NIVMAX:  FLOAT       0               < ET DIFFERENCE "MAX"-"MIN" LORS DU
                                     < MEME TRACE...
VEPTC:   WORD        0               < PATTERN COURANTE DE POINTILLES EN ROTA-
                                     < TION...
<
< VARIABLES DE MANOEUVRE :
<
FWORK8:  FLOAT       0
FWORK9:  FLOAT       0
<
< DONNEES DE FRUSTRATION :
<
XWOR%1:  VAL         BIT>XXDEDX-I    < POUR LES DIVISIONS PAR EXCES SUR 'X',
XWOR%2:  VAL         BIT>XXDEDY-I    < POUR LES DIVISIONS PAR EXCES SUR 'Y'.
         IF          XWOR%1-XWOR%2,,XEIF%,
         IF          ATTENTION : LA MISE DE L'INCREMENT DANS 'W' EST
         IF          MAUVAISE, IL FAUT DEUX REGISTRES !!!
XEIF%:   VAL         ENDIF
CFRUST:  WORD        XWOR%1?XWOR%2(K < CONSTANTE DE GESTION DE LA FRUSTRATION :
                                     < =0 : LES PENTES NE VONT PAS ETRE RES-
                                     <      PECTEES EN PASSANT DU GRAPHIQUE
                                     <      A LA 'TV' BASSE-DEFINITION (DANS
                                     <      CERTAINS CAS : LORSQUE LES COORDON-
                                     <      NEES NE SONT PAS EXACTEMENT DIVISI-
                                     <      BLES...),
                                     < #0 : UN MEME POINT GRAPHIQUE RISQUE DE
                                     <      DONNER NAISSANCE A PLUSIEURS POINTS
                                     <      'TV' (LORSQUE LES COORDONNEES NE
                                     <      SONT PAS EXACTEMENT DIVISIBLES...),
                                     <      VOIR PAR EXEMPLE UN CARRE...
<
< DONNEES SPECIALES "ANTI-ALIASING" :
<
FPENTE:  FLOAT       0               < COEFFICIENT DE PONDERATION (COMPRIS
                                     < ENTRE 0 ET 1) PERMETTANT DE CALCULER
                                     < LE NIVEAU DES 2 POINTS VOISINS DU POINT
                                     < DIT "CENTRAL"...
APENTE:  WORD        0               < REPRESENTATION ENTIERE DE LA VALEUR
                                     < ABSOLUE (SAUF EXCEPTION) DE LA PENTE
                                     < 'A' DE LA DROITE ; VAUT :
                                     < =0 : FAIBLE PENTE (ANGLE < PI/4),
                                     < >0 : FORTE PENTE (ANGLE > PI/4),
                                     < <0 : DROITE VERTICALE.
VPTISO:  WORD        0               < INDICATEUR DE POINT ISOLE :
                                     < =0 : POINT D'UN VECTEUR,
                                     < #0 : POINT ISOLE.
<
< SOUS-PROGRAMMES NECESSAIRES :
<
VECTA1:  WORD        VECTP1          < TRACE D'UN POINT DONNE PAR SES
                                     < COORDONNEES ENTIERES,
VECTA2:  WORD        VECTP2          < TRACE DU POINT COURANT DONNE PAR
                                     < SES COORDONNEES FLOTTANTES.
VECTA4:  WORD        VECTP4          < SOUS-PROGRAMME DE CHOIX DU NIVEAU DE
                                     < GRIS D'UN POINT, ET DE SON TRACE.
VECTA3:  WORD        VECTP3          < "ARRONDI" D'UN NOMBRE FLOTTANT...
AVE512:  WORD        VEC512          < TRACE D'UN VECTEUR...
<
< TAILLE DE L'IMAGE :
<
VECTNC:  WORD        XMAX            < POUR VALIDER LES ABSCISSES,
VECTNL:  WORD        YMAX            < POUR VALIDER LES ORDONNEES.
<
< MODE DE TRACE :
<
VECTSB:: VAL         EXIST           < MODE 'SBT',
VECTRB:: VAL         NEXIST          < MODE 'RBT'.
VECTIB:: VAL         -VECTRB-VECTSB  < MODE 'IBT'.
         IF          BANTI-BITSIG,,XWOR%,
         IF          ATTENTION : LES TESTS D'ANTI-ALIASING VONT MERDER !!!
XWOR%:   VAL         ENDIF
<
< DISCRIMINATION LOGIQUE FLOUE
< ET LOGIQUE BINAIRE :
<
XWOR%1:  VAL         MMOT=K
XWOR%2:  VAL         NBITMO-B-XWOR%1 < DERNIER BIT DU CHAMP 'VECSRI',
VELOGD:: VAL         XWOR%2-I        < BIT ARGUMENT DISCRIMINATEUR DE LA LOGIQUE
                                     < FLOUE ET DE LA LOGIQUE BINAIRE.
VELOGF:: VAL         VELOGD-I        < BIT DONNANT LA VALEUR DE 'VELOGD' DANS
                                     < LE CAS DE LA LOGIQUE FLOUE ; DONC :
                                     < 'VELOGD'='VELOGF' ==> LOGIQUE FLOUE,
                                     < 'VELOGD'#'VELOGF' ==> LOGIQUE BINAIRE.
VELODD:: VAL         VELOGD+XWOR%1   < IDEM A 'VELOGD', MAIS 'VECSRI' ETANT
                                     < CADRE A DROITE,
VELODF:: VAL         VELOGF+XWOR%1   < DE MEME POUR 'VELOGF'...
XWOR%3:  VAL         VECTSB=K
XWOR%3:  VAL         NBITMO-B-XWOR%3 < DERNIER BIT DE 'VECTSB'...
         IF          XWOR%3-VELODD,,,XEIF%
         IF          ATTENTION : LA POSITION DE 'VELOGD' EST MAUVAISE
         IF          SI L'ON VEUT UNE COMPATIBILTE AVEC LES VERSIONS
         IF          ANTERIEURES DE CMS5 ET DES PROGRAMMES !!!
XEIF%:   VAL         ENDIF
         IF          XWOR%3-VELODF,,,XEIF%
         IF          ATTENTION : IDEM, 'VELOGF' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         NLS
XWOR%9:  VAL         ENDIF
         IF          XXXVEC-XXVEC3,XWOR%9,,XWOR%9
         LST
XXXIMA:  VAL         XXIMA3
         EOT         #SIP IMAGE 512#
XXXIMA:  VAL         XXIMA5
         EOT         #SIP IMAGE 512#
         PAGE
<
<
<        T R A C E   D U   P O I N T   ( X 1 , Y 1 )  :
<
<
<        ARGUMENT :
<                    VECTX1,VECTY1=COORDONNEES ENTIERES DU POINT A TRACER.
<
<
VECTP1:  EQU         $
         PSR         A,B,X,Y         < SAUVEGARDES.
<
< LE POINT (X1,Y1) EST-IL DANS L'ECRAN ???
<
         LA          VECTX1          < COORDONNEE X1 :
         JAL         AKMTV9          < HORS-ECRAN...
         CP          VECTNC          < ???
         JG          AKMTV9          < HORS-ECRAN...
         LA          VECTY1          < COORDONNEE Y1 :
         JAL         AKMTV9          < HORS-ECRAN...
         CP          VECTNL          < ???
         JG          AKMTV9          < HORS-ECRAN...
<
< CAS OU LE POINT (X1,Y1) EST VISIBLE :
<
         LX          VECTX1          < (X)=COORDONNEE 'X',
         LY          VECTY1          < (Y)=COORDONNEE 'Y'.
<
< DETERMINATION DU NIVEAU COURANT DU POINT :
<
         BSR         ALOADP          < (A)='NC'...
<
< TEST DU NIVEAU ANTERIEUR 'NC' :
<
         PSR         X
         LX          VEDECA          < X=DECALAGE A APPLIQUER AU NIVEAU 'NC',
         SLRS        L,X             < ON DECALE LE NIVEAU COURANT DU POINT
                                     < COURANT, QUITTE A LE FAIRE DISPARAITRE...
                                     < (NC) DECALE EST ENCORE APPELE 'NC'...
         PLR         X
         LB          VENIVO          < B=NIVEAU DEMANDE,
                                     < SOIT : B=N.
<
< DISCRIMINATION ENTRE LES 2 LOGIQUES :
<
         PSR         A,X
         LA          VECTRS          < (A)=MODE DEMANDE :
         LXI         K               < (X)=DISCRIMINATEUR DES LOGIQUES,
         TBT         VELODD
         ADCR        X
         TBT         VELODF
         SBCR        X               < (X)=0 : 'VELODD'='VELODF' ==> LOGIQUE
                                     <         FLOUE...
                                     < (X)#0 : 'VELODD'#'VELODF' ==> LOGIQUE
                                     <         BINAIRE...
         CPZR        X               < ALORS QUELLE EST LA LOGIQUE DEMANDEE ???
                                     < (A NOTER QUE 'VELOGD'='VELOGF' EST
                                     < COMPATIBLE AVEC L'ANCIENNE VERSION...)
         PLR         A,X
         JE          VECTZ1          < CAS DE LA LOGIQUE FLOUE...
<
<
<        L O G I Q U E   B I N A I R E  :
<
<
         PSR         A               < SAUVEGARDE DU NIVEAU ANTERIEUR...
         LA          VECTRS          < (A)=MODE DEMANDE EN LOGIQUE BINAIRE,
         IBT         VELODD          < ET ON SE RAMENE AU FLOU...
         CPI         NEXIST          < ALORS QUEL EST L'OPERATEUR ???
         PLR         A               < (A)=NIVEAU ANTERIEUR...
         IF          VECTSB-K,,,XEIF%
         IF          ATTENTION : 'VECTSB' DOIT ETRE POSITIF !!!
XEIF%:   VAL         ENDIF
         IF          VECTRB-K,,XEIF%,
         IF          ATTENTION : 'VECTRB' DOIT ETRE NUL !!!
XEIF%:   VAL         ENDIF
         IF          VECTIB-K,XEIF%,,
         IF          ATTENTION : 'VECTIB' DOIT ETRE NEGATIF !!!
XEIF%:   VAL         ENDIF
         IF          NEXIST-K,,XEIF%,
         IF          ATTENTION : LES BRANCHEMENTS QUI SUIVENT SON IDIOTS !!!
XEIF%:   VAL         ENDIF
         JG          VECTZ7          < CAS DE .OR. LOGIQUE...
         JE          VECTZ6          < CAS DE .AND. LOGIQUE...
<
< .EOR. LOGIQUE :
<
         EORR        B,A             < (A)=A.EOR.B,
         JMP         VECTWD          < VERS L'ECRITURE DANS L'IMAGE...
<
< .OR. LOGIQUE :
<
VECTZ7:  EQU         $
         ORR         B,A             < (A)=A.OR.B,
         JMP         VECTWD          < VERS L'ECRITURE DANS L'IMAGE...
<
< .AND. LOGIQUE :
<
VECTZ6:  EQU         $
         ANDR        B,A             < (A)=A.AND.B,
         JMP         VECTWD          < VERS L'ECRITURE DANS L'IMAGE...
<
<
<        L O G I Q U E   F L O U E  :
<
<
VECTZ1:  EQU         $
         CPZ         VECTRS          < QUEL EST LE MODE DU TRACE ???
         JG          VECTW7          < 'SBT' : C'EST L'OPERATEUR .OR.
         JE          VECTW6          < 'RBT' : C'EST L'OPERATEUR .AND.
<
< 'IBT' FLOU : C'EST L'OPERATEUR .EOR. FLOU :
<
         PSR         X,Y
         LXI         NIV256-I
         SBR         A,X             < X=.NOT.(A)=.NOT.(NC), QUE L'ON VA
                                     < NOTER NA...
         LYI         NIV256-I
         SBR         B,Y             < Y=.NOT.(B)=.NOT.(N), QUE L'ON VA
                                     < NOTER NB...
         CPR         A,Y             < CALCUL DE A.AND.NB :
         JGE         VECTWI          < 'A' EST DEJA LE 'MIN'...
         LR          Y,A             < C'EST 'Y' LE MIN...
VECTWI:  EQU         $
         CPR         B,X             < CALCUL DE B.AND.NA :
         JGE         VECTWJ          < 'B' EST DEJA LE 'MIN'...
         LR          X,B             < C'EST 'X' LE MIN...
VECTWJ:  EQU         $
         PLR         X,Y
         JMP         VECTW7          < MAINTENANT, ON VA CALCULER :
                                     < (A.AND.NB).OR.(NA.AND.B), C'EST-A-DIRE
                                     < QUE L'ON EQUIVAUT MAINTENANT A 'SBT'...
<
< 'RBT' : C'EST L'OPERATEUR .AND. FLOU :
<
VECTW6:  EQU         $
         CPR         A,B             < CALCUL DE A.AND.B :
         JGE         VECTWD          < 'A' EST DEJA LE 'MIN'...
         JMP         VECTWH          < C'EST 'B' LE 'MIN'...
<
< 'SBT' : C'EST L'OPERATEUR .OR. FLOU :
<
VECTW7:  EQU         $
         CPR         A,B             < CALCUL DE A.OR.B :
         JLE         VECTWD          < 'A' EST DEJA LE 'MAX'...
VECTWH:  EQU         $
         LR          B,A             < C'EST 'B' LE 'MAX'...
<
< MISE EN PLACE DU NOUVEAU NIVEAU DU POINT COURANT :
<
VECTWD:  EQU         $
         BSR         ASTORP          < (X,Y) <-- (A).
VECTWL:  EQU         $
AKMTV9:  EQU         $
VECTV9:  EQU         $               < CAS DES OVER-SCREEN...
         PLR         A,B,X,Y         < RESTAURATIONS.
         RSR
         PAGE
<
<
<        C A L C U L   D U   N I V E A U   D E   G R I S
<        E T   T R A C E   D U   P O I N T  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME CALCULE LA DISTANCE
<                    DU POINT ENTIER COURANT (X,Y)
<                    AU POINT FLOTTANT COURANT (VECTX,VECTY)
<                    SUIVANT LA NORME EUCLIDIENNE ;
<                    A PARTIR DE CETTE DISTANCE, ON EN DEDUIT
<                    UN NIVEAU DE GRIS : PLUS LE POINT ENTIER
<                    EST PRES DU POINT FLOTTANT, PLUS IL EST
<                    LUMINEUX...
<
<
<        ARGUMENTS :
<                    (VECTX,VECTY)=COORDONNEES DU POINT FLOTTANT,
<                    (X,Y)=COORDONNEES DU POINT ENTIER.
<                    (FPENTE)=COEFFICIENT (ENTRE 0 ET 1) DE PONDE-
<                             RATION DES NIVEAUX...
<
<
VECTP4:  EQU         $
         PSR         A,B
         STX         VECTX1          < ARGUMENT 'X' DE 'VECTP1',
         STY         VECTY1          < ARGUMENT 'Y' DE 'VECTP1'.
         FLD         FPENTE          < (A,B)=COEFFICIENT DE CALCUL DU NIVEAU
                                     <       DU POINT COURANT...
         FMP         NIVMAX          < ET ON SE RAMENE
         FAD         NIVMIN          <                 DANS ("MIN","MAX")...
         FCMZ        NIVMIN          < LE MINIMUM DEMANDE ETAIT-IL NUL ???
         JNE         VECTWK          < NON, DONC ON CONSERVE L'INTERPOLATION
                                     < QUI A ETE FAITE DANS ("MIN","MAX") ;
         FST         FWORK9          < OUI, ON FAIT ON VA ALORS REMPLACER LE
                                     < NIVEAU MINIMUM PAR LE NIVEAU ANTERIEUR
                                     < DU POINT COURANT, SOIT "NA", ET INTER-
                                     < POLER DANS ("NA","MAX") :
                                     < FWORK9=FPENTE*NIVMAX (PUISQUE NIVMIN=0).
         BSR         VECTA3          < (A)=NIVEAU QUE PRENDRAIT LE POINT SI
                                     <     ON INTERPOLAIT ENTRE LE NOIR ET
                                     <     LE MAX,
         PSR         A               < ET SAUVEGARDE...
         LAI         I
         FLT
         FSB         FPENTE          < 1-FPENTE,
         FST         FWORK8          < FWORK8=1-FPENTE,
         BSR         ALOADP          < (A)=NIVEAU ANTERIEUR(X,Y), SOIT "NA"...
         PLR         B               < (B)=VALEUR DE 'A' EMPILEE CI-DESSUS,
         CPR         A,B             < LA VALEUR ANTERIEURE EST-ELLE EGALE A
                                     < LA VALEUR QU'ON OBTIENDRAIT ENTRE LE
                                     < NOIR ET LE MAX ???
         JNE         VECTWN          < NON, ON VA INTERPOLER ENTRE 'NA' ET
                                     < 'NIVMAX'...
         LAI         XXNOIR          < OUI, C'EST NIVMAX*FPENTE QU'ON PREND...
                                     < (ET CECI A CAUSE DU PROBLEME DES TRAITS
                                     < QUI SE REPASSE DESSUS AU MOINS 2 FOIS
                                     < DE SUITE)
VECTWN:  EQU         $
         FLT
         FMP         FWORK8          < NA*(1-FPENTE),
         FAD         FWORK9          < NA*(1-FPENTE)+NIVMAX*FPENTE, SOIT
                                     < DONC UNE VALEUR INTERPOLEE DANS LE
                                     < SEGMENT ("NA","MAX")...
VECTWK:  EQU         $
         BSR         VECTA3          < A=NIVEAU A ATTRIBUER AU POINT (X,Y).
         JAL         VECTWA          < ERREUR...
         CPI         NIV256-I        < VALIDATION, SUITE...
         JLE         VECTW3          < OK...
VECTWA:  EQU         $
         QUIT        1               < E R R E U R   P R O G R A M M E...
VECTW3:  EQU         $
         STA         VENIVO          < MEMORISATION DU NIVEAU...
         BSR         VECTA1          < ET TRACE DU POINT (VECTX1,VECTY1)
                                     < AVEC LE NIVEAU 'VENIVO'...
         PLR         A,B
         RSR
         PAGE
<
<
<        T R A C E   D U   P O I N T   C O U R A N T   ( X , Y )  :
<
<
<        ARGUMENT :
<                    VECTX,VECTY=COORDONNEES DU POINT A TRACER EN FLOTTANT.
<
<
VECTP2:  EQU         $
         PSR         A,B,X,Y
<
< GESTION DES POINTILLES :
<
         LA          VEPTC           < LE MOMENT EST-IL VENU ???
         TBT         BITSIG          < ???
         JNC         VEKT42          < NON, ON NE TRACE RIEN...
         LX          VECTX1          < SAUVER 'VECTX1' ...
         LY          VECTY1          < ... ET 'VECTY1'.
         LA          VECTNI          < OUI,
         CPZ         VECANT          < EST-CE L'ANTI-ALIASING ???
         JGE         VECTVD          < NON, IL S'AGIT BIEN D'UN NIVEAU DE GRIS..
<
< CAS D'UN TRACE ANTI-ALIASING :
<
         PSR         X,Y
         LA          INFINI
         STA         APENTE          < DROITE VERTICALE A PRIORI...
         FLD         VECT05
         FST         FPENTE          < A PRIORI, ON SUPPOSE QU'IL S'AGIT DE
                                     < DROITES VERTICALES OU HORIZONTALES, OU
                                     < DE POINTS ISOLES OU D'EXTREMITES.
         FLD         VECTA           < (A,B)=PENTE FLOTTANTE,
         FABS                        < DONT ON PREND LA VALEUR ABSOLUE,
         FIX                         < PUIS LA VALEUR ENTIERE :
         JV          VECTZK          < DEBORDEMENT, ON CONSIDERE LA DROITE
                                     < VERTICALE...
         STA         APENTE          < OK, CET INDICATEUR PRECISE :
                                     < =0 : FAIBLE PENTE,
                                     < >0 : FORTE PENTE,
                                     < <0 : DROITE VERTICALE.
VECTZK:  EQU         $
PENT45:: VAL         W/W             < DEFINITION D'UNE PENTE A 45 DEGRE...
                                     < NOTA IMPORTANT : ETANT DONNE L'INVER-
                                     < SION DE L'AXE 'OY', LE REFERENTIEL
                                     < N'EST PAS DIRECT : IL Y A SYMETRIE PAR
                                     < RAPPORT A 'OX', ET ALORS TOUTES LES
                                     < REFERENCES A 'PENT45' SERONT INVERSEES...
         IF          PENT45-K-I,,XEIF%,
         IF          ATTENTION : SI 'PENT45' NE VAUT PAS 1,
         IF          ON NE PEUT PAS DISTINGUER LES PENTES
         IF          FAIBLES (ANGLE INFERIEUR A PI/4) PAR
         IF          UN TEST DE NULLITE !!!
XEIF%:   VAL         ENDIF
         FLD         VECTX
         FCAZ
         JL          VECTWC          < HORS-ECRAN : ON EVITE DE PLUS UN
                                     < MECHANT PROBLEME LIE A L'INSTRUCTION
                                     < 'FIX' QUI TRONQUE PAR EXCES LES
                                     < NOMBRES NEGATIFS...
         CPZ         APENTE          < COMMENT EST-LA PENTE DE LA DROITE ???
         JE          VECTZG          < FAIBLE...
         FIX                         < FORTE : LA COORDONNEE 'X' EST DONC LA
                                     < PARTIE ENTIERE PAR DEFAUT DE LA
                                     < VALEUR FLOTTANTE 'VECTX'.
         JMP         VECTZH
VECTZG:  EQU         $
         BSR         VECTA3          < FAIBLE : LA COORDONNEE 'X' EST OBTENUE
                                     < PAR LA PLUS PROCHE VALEUR ENTIERE DE
                                     < 'VECTX' AFIN D'EVITER DES TROUS DANS
                                     < LE TRACE...
VECTZH:  EQU         $
         LR          A,X             < (X)=COORDONNEE DU PREMIER POINT ENTIER.
                                     <     (DIT "POINT CENTRAL")
         FLD         VECTY
         FCAZ
         JL          VECTWC          < HORS-ECRAN...
         CPZ         APENTE          < COMMENT EST LA PENTE DE LA DROITE ???
         JNE         VECTZI          < FORTE (>0) OU VERTICALE (<0)...
         FIX                         < FAIBLE : LA COORDONNEE 'Y' EST LA
                                     < VALEUR ENTIERE PAR DEFAUT DE LA VALEUR
                                     < FLOTTANTE 'VECTY'.
         JMP         VECTZJ
VECTZI:  EQU         $
         BSR         VECTA3          < FORTE : LA COORDONNEE 'Y' EST LA VALEUR
                                     < ENTIERE LA PLUS PROCHE DE LA VALEUR
                                     < FLOTTANTE 'VECTY' AFIN D'EVITER DES
                                     < TROUS...
VECTZJ:  EQU         $
         LR          A,Y             < (Y)=COORDONNEE DU PREMIER POINT ENTIER.
                                     <     (DIT "POINT CENTRAL")
         LA          VECTNI
         STA         VENIVO
         STX         VECTX1
         STY         VECTY1
         BSR         VECTA1          < TRACE DU "POINT CENTRAL" (X,Y), AVEC
                                     < LE NIVEAU MAXIMAL 'NIVMAX'...
<
< DISCRIMINATION SUIVANT LA
< PENTE DE LA DROITE :
<
         FCMZ        VECTA           < COMMENT EST LA DROITE ???
         JE          VECTZO          < HORIZONTALE, ON A DEJA : (FPENTE)=F05...
         CPZ         APENTE          < ALORS, QUELLE FAMILLE ???
         JL          VECTZO          < VERTICALE, ON A DEJA : (FPENTE)=F05...
         JG          VECTZQ          < LA DROITE A UNE FORTE PENTE SANS ETRE
                                     < VERTICALE...
<
< CAS DES DROITES DE FAIBLE
< PENTE NON HORIZONTALE :
<
         LR          Y,A
         FLT
         FSB         VECTY
         FABS
         FST         FPENTE          < LA PENTE EST FAIBLE EN VALEUR ABSOLUE,
                                     < ET ALORS :
                                     < FPENTE=ABS(VECTY-Y), C'EST-A-DIRE LA
                                     < MESURE EN VALEUR ABSOLUE SUR L'AXE
                                     < DES 'Y' DE LA DISTANCE DU POINT FLOTTANT
                                     < AU POINT ENTIER...
         JMP         VECTZO
<
< CAS DES DROITES DE FORTE
< PENTE NON VERTICALE :
<
VECTZQ:  EQU         $
         LR          X,A
         FLT
         FSB         VECTX
         FABS
         FST         FPENTE          < A PRIORI, ON SUPPOSE QUE LA PENTE DE
                                     < DROITE VA ETRE FORTE EN VALEUR ABSOLUE,
                                     < ET ALORS :
                                     < FPENTE=ABS(VECTX-X), C'EST-A-DIRE LA
                                     < MESURE EN VALEUR ABSOLUE SUR L'AXE
                                     < DES 'X' DE LA DISTANCE DU POINT FLOTTANT
                                     < AU POINT ENTIER...
VECTZO:  EQU         $
         CPZ         VPTISO          < EST-CE UN POINT ISOLE ???
         JE          VECTZN          < NON...
<
< CAS DES POINTS ISOLES :
<
         ADRI        I,Y
         BSR         VECTA4          < (X,Y+1) <-- NIVMAX/2,
         ADRI        -I,X
         BSR         VECTA4          < (X-1,Y+1) <-- NIVMAX/2,
         ADRI        -I,Y
         BSR         VECTA4          < (X-1,Y) <-- NIVMAX/2,
         ADRI        -I,Y
         BSR         VECTA4          < (X-1,Y-1) <-- NIVMAX/2,
         ADRI        I,X
         BSR         VECTA4          < (X,Y-1) <-- NIVMAX/2,
         ADRI        I,X
         BSR         VECTA4          < (X+1,Y-1) <-- NIVMAX/2,
         ADRI        I,Y
         BSR         VECTA4          < (X+1,Y) <-- NIVMAX/2,
         ADRI        I,Y
         JMP         VECTZM          < POUR :
                                     < (X+1,Y+1) <-- NIVMAX/2.
<
< DISCRIMINATION DES PENTES :
<
VECTZN:  EQU         $
         IF          PENT45-K-I,,XEIF%,
         IF          ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         CPZ         APENTE          < COMMENT EST LA PENTE DE LA DROITE ???
         JNE         VECTZC          < FORTE (>0), OU VERTICALE (<0)....
<
< CAS DES FAIBLES PENTES :
<
         ADRI        I,Y
         BSR         VECTA4          < (X,Y+1) <-- NIVMAX*FPENTE,
         ADRI        -I-I,Y
         JMP         VECTZE          < (X,Y-1) <-- NIVMAX*(1-FPENTE).
<
< CAS DES FORTES PENTES :
<
VECTZC:  EQU         $
         ADRI        I,X
         BSR         VECTA4          < (X+1,Y) <-- NIVMAX*FPENTE,
         ADRI        -I-I,X          < POUR :
                                     < (X-1,Y) <-- NIVMAX*(1-FPENTE).
<
< TRACE DU DEUXIEME POINT :
<
VECTZE:  EQU         $
         LAI         I               < PAS DE PASSAGE D'UN POINT A L'AUTRE...
         FLT
         FSB         FPENTE
         FST         FPENTE          < FPENTE=1-FPENTE...
VECTZM:  EQU         $
         BSR         VECTA4          < ET MARQUAGE DU DEUXIEME POINT SUIVANT
                                     < LE CONTENU DES REGISTRES 'X' ET 'Y', ET
                                     < AVEC LE NIVEAU NIVMAX*(1-FPENTE)...
VECTWC:  EQU         $
         PLR         X,Y
         JMP         VECTW8          < VERS LA SORTIE...
<
< CAS D'UN TRACE AVEC NIVEAU DE GRIS :
<
VECTVD:  EQU         $
         STA         VENIVO          < ON MEMORISE LE NIVEAU DE GRIS DEMANDE ;
                                     < CETTE OPERATION EST D'AILLEURS SUREMENT
                                     < INUTILE, PUISQUE REALISEE AU DEBUT DE LA
                                     < PHASE D'INTERPOLATION, MAIS...
<
< TRACE SANS NIVEAU DE GRIS :
<
VECTW9:  EQU         $
         FLD         VECTX           < X COURANT FLOTTANT.
         BSR         VECTA3
         STA         VECTX1          < X COURANT EN FIXE.
         FLD         VECTY           < Y COURANT FLOTTANT.
         BSR         VECTA3
         STA         VECTY1          < Y COURANT EN FIXE.
         BSR         VECTA1          < TRACE POINT.
VECTW8:  EQU         $
         STX         VECTX1          < RESTAURATION 'VECTX1' ...
         STY         VECTY1          < ... ET 'VECTY1'.
<
< GESTION DES POINTILLES, ET SORTIE :
<
VEKT42:  EQU         $
         LA          VEPTC
         SCLS        BIT             < ET ON ROTATE...
         STA         VEPTC
         PLR         A,B,X,Y
         RSR
         PAGE
<
<
<        A R R O N D I   D ' U N   N O M B R E   F L O T T A N T  :
<
<
<        ARGUMENT :
<                    (A,B)=NOMBRE FLOTTANT.
<
<
<        RESULTAT :
<                    A=NOMBRE FLOTTANT ARGUMENT CONVERTI EN
<                      ENTIER PAR EXCES OU PAR DEFAUT SUIVANT
<                      LES CAS...
<
<
VECTP3:  EQU         $
         FCAZ                        < LE NOMBRE EST-IL POSITIF OU NEGATIF ???
         JL          VECTWE          < NEGATIF...
         FAD         VECT05          < POSITIF : ARRONDI PAR ADDITION DE 0.5...
         JMP         VECTWF          < VERS LA CONVERSION ENTIERE...
VECTWE:  EQU         $
         FSB         VECT05          < NEGATIF : ARRONDI PAR SOUSTRACTION...
VECTWF:  EQU         $
         FIX                         < CONVERSION ENTIERE...
         RSR
         PAGE
<
<
<        T R A C E   D U   S E G M E N T   ( ( X 1 , Y 1 ) , ( X 2 , Y 2 ) )  :
<
<
<        FONCTION :
<                      CE MODULE EST CHARGE DE L'INTERPOLATION
<                    GRAPHIQUE ENTRE 2 POINTS ARGUMENTS (X1,Y1)
<                    ET (X2,Y2), SUIVANT LE MODE 'SBT'/'RBT' PRECISE
<                    PAR L'ARGUMENT 'VECTNI'.
<
<
<        ARGUMENTS :
<                    VECTNI=NIVEAU PRINCIPAL OU "MAX" (DE 0 A 255),
<                    VECANT=INDICATEUR D'ANTI-ALIASING (BIT 'BANTI'=0),
<                           ET CADRE A DROITE LE NIVEAU "MIN",
<                    VEPOIN=PATTERN SUR 16 BITS DE POINTILLE,
<                    VEDECA=DECALAGE DU NIVEAU,
<                    VECTRS=MODE DU TRACE :
<                                    0001="OR" FLOU,
<                                    0000="AND" FLOU,
<                                    FFFF="EOR" FLOU,
<                                    0003="OR" BINAIRE,
<                                    0002="AND" BINAIRE,
<                                    FFFD="EOR" BINAIRE.
<
<
VEC512:  EQU         $               < POINT D'ENTREE...
         PSR         A,B,X,Y
         PSR         W
         LAD         VECTC
         LR          A,W             < (W)=BASE DE LA LISTE DES SEGMENTS AU
                                     <     CAS OU LE SEGMENT COURANT SERAIT
                                     <     HORIZONTAL OU VERTICAL...
<
< TRAITEMENT DES ARGUMENTS :
<
         LA          VECTNI          < (A)=NIVEAU "MAX"...
         STA         VENIVO          < INITIALISATION DE 'VENIVO', AU CAS OU
                                     < L'ON TOMBERAIT SUR UNE HORIZONTALE OU
                                     < UNE VERTICALE...
         LA          VECANT
         TBT         BANTI           < L'ANTI-ALIASING EST-IL DEMANDE ???
         JNC         VECTVE          < NON...
         RBT         BANTI           < OUI : RECUPERATION DU NIVEAU "MIN",
         ANDI        NIV256-I        < CALCUL MODULO 'NIVMAX' ; EN EFFET, PAR
                                     < EXEMPLE 'G5' PEUT CALCULER 'NIVMIN' ET
                                     < 'NIVMAX' PAR ITERATION...
XWOR%1:  VAL         NIV256=K
         IF          BIT>XWOR%1-NIV256,,XEIF%,
         IF          ATTENTION : 'NIV256' DOIT ETRE UNE PUISSANCE DE 2
         IF          POUR QUE LE CALCUL MODULO FONCTIONNE CORRECTEMENT !!!
XEIF%:   VAL         ENDIF
         FLT
         FST         NIVMIN          < NIVEAU MINIMUM ANTI-ALIASING,
         LA          VENIVO          < RECUPERATION DU "MAX" :
         ANDI        NIV256-I        < ET CALCUL MODULO 'NIVMAX'...
         FLT
         FSB         NIVMIN
         FST         NIVMAX          < RANGEMENT DE "MAX"-"MIN"...
VECTVE:  EQU         $
         LA          VEPOIN
         STA         VEPTC           < INITIALISATION DU GENERATEUR DE POINTIL-
                                     < LES...
         LA          VECTRS          < MEMORISATION DU MODE DE TRACE DEMANDE ;
                                     < ON LE FAIT AVANT LA VALIDATION AFIN
                                     < D'INCLURE LA NOUVELLE LOGIQUE BINAIRE...
         RBT         VELODD          < METTONS NOUS A PRIORI EN LOGIQUE FLOUE
                                     < (OU EN MODE 'SBT'/'RBT'/'IBT'), ET CECI
                                     < AFIN DE NE PAS INTRODUIRE DE NOUVELLES
                                     < FONCTIONS (AUTRES QUE 'VECTSB', 'VECTRB'
                                     < ET 'VECTIB'),
         TBT         VELODF          < ON DUPLIQUE LE BIT 'VELOGF' SUR 'VELOGD'
                                     < AFIN DE SE METTRE EN FLOU...
         JNC         VECTVM          < CAS DE 'VECTSB' OU 'VECTRB'...
         SBT         VELODD          < CAS DE 'VECTIB'...
VECTVM:  EQU         $
         CPI         VECTSB          < ???
         JE          VECTV7          < OK...
         CPI         VECTRB          < ???
         JE          VECTV7          < OK...
         CPI         VECTIB          < ???
         JNE         VEKT8           < NON, SORTIE EN ERREUR...
VECTV7:  EQU         $
<
< REDUCTION DES COORDONNEES (PASSAGE
< DE L'ECHELLE GRAPHIQUE A L'ECHELLE TV) :
<
<        NOTA SUR LA "FRUSTRATION DES PIXELS" :
<                      RAISONNONS A UNE DIMENSION,
<                    SUR L'AXE DES 'X' PAR EXEMPLE :
<                    IMAGINONS 3 POINTS 'A', 'M' ET
<                    'B' TELS QUE :
<
<                                    X(A)='100,
<                                    X(M)='1FF,
<                                    X(B)='2FE,
<                    ON A :
<                                    X(M)=(X(A)+X(B))/2,
<                    ET :
<                                    X(M)-X(A)=X(B)-X(M)='FF,
<                    LE POINT 'M' EST AU MILIEU DU
<                    SEGMENT GRAPHIQUE 'AB' :
<
<                                    AM=MB.
<                      APPLIQUONS LA REDUCTION 'TV',
<                    C'EST-A-DIRE DIVISONS LES COOR-
<                    DONNEES PAR 4 :
<
<                                    XT(A)='100/4='40,
<                                    XT(M)='1FF/4='7F,
<                                    XT(B)='2FE/4='BF,
<                    ON A MAINTENANT :
<                                    XT(M)-XT(A)='3F,
<                                    XT(B)-XT(M)='40,
<                    LE POINT 'M' EN FORMAT 'TV' N'EST
<                    PLUS AU MILIEU DU SEGMENT 'AB' !!!
<                      IL Y A AINSI FRUSTRATION DU
<                    POINT 'M', ET SUIVANT LA METHODE DE
<                    CORRECTION APPLIQUEE, 'M' SE RAP-
<                    PROCHERA DE 'A' (CAS DES DIVISIONS
<                    PAR DEFAUT CI-DESSUS), OU DE 'B'
<                    (DIVISION PAR EXCES) ; ETENDU A
<                    DEUX DIMENSIONS, ON VOIT QU'AINSI
<                    LES PENTES DES VECTEURS RISQUENT
<                    DE NE PAS ETRE CONSERVEE LORS DU
<                    PASSAGE GRAPHIQUE-TV...
<                      DE PLUS, UNE METHODE DE CORRECTION
<                    "CONTEXTUELLE" (C'EST-A-DIRE TENANT
<                    COMPTE DU SEGMENT ENTIER POUR CORRIGER
<                    LES COORDONNEES INDIVIDUELLES DES
<                    EXTREMITES) FAIT QU'UN MEME POINT
<                    APPARTENANT A DEUX SEGMENTS DIFFERENTS
<                    (VOIR PAR EXEMPLE LES SOMMETS D'UN
<                    CARRE) RISQUE DE DONNER NAISSANCE A
<                    DEUX POINTS DIFFERENTS EN 'TV'...
<
         LA          VECGX1          < COORDONNEE X1 :
         CP          VECGX2
         JGE         VEKT45          < X1 >= X2...
         AD          CFRUST          < X1 < X2...
VEKT45:  EQU         $
         SARS        XXDEDX          < CONVERSION EN MODE 'TV',
         LR          A,X             < ET STOCKAGE TEMPORAIRE : X=X1.
         LA          VECGY1          < COORDONNEE Y1 :
         CP          VECGY2
         JGE         VEKT46          < Y1 >= Y2...
         AD          CFRUST          < Y1 < Y2...
VEKT46:  EQU         $
         SARS        XXDEDY          < CONVERSION EN MODE 'TV',
         LR          A,Y             < ET STOCKAGE TEMPORAIRE : Y=Y1.
         LA          VECGX2          < COORDONNEE X2 :
         CP          VECGX1
         JGE         VEKT47          < X2 >= X1...
         AD          CFRUST          < X2 < X1...
VEKT47:  EQU         $
         SARS        XXDEDX          < CONVERSION EN MODE 'TV,
         LR          A,B             < ET STOCKAGE TEMPORAIRE : B=X2.
         LA          VECGY2          < COORDONNEE Y2 :
         CP          VECGY1
         JGE         VEKT48          < Y2 >= Y1...
         AD          CFRUST          < Y2 < Y1...
VEKT48:  EQU         $
         SARS        XXDEDY          < CONVERSION EN MODE 'TV'.
                                     < A T T E N T I O N  : LES COMMENTAIRES
                                     < QUI SUIVENT N'ONT PLUS DE VALEUR :
         STA         VECTY2          < A=Y2 SI (X1)<=(X2), A=Y1 SINON,
         STB         VECTX2          < B=X2 SI (X1)<=(X2), B=X1 SINON,
         STY         VECTY1          < Y=Y1 SI (X1)<=(X2), Y=Y2 SINON,
         STX         VECTX1          < X=X1 SI (X1)<=(X2), X=X2 SINON.
<
< CALCUL DELTAX ET DELTAY.
<
         STZ         VPTISO          < A PRIORI, IL NE S'AGIT PAS D'UN POINT
                                     < ISOLE...
         LA          VECTX2
         SB          VECTX1
         STA         VECTDX          < DELTAX=X2-X1.
         FLT
         FST         VECTDF          < DELTAX FLOTTANT.
         LA          VECTY2
         SB          VECTY1
         STA         VECTDY          < DELTAY=Y2-Y1.
         JAE         VEKT1
         CPZ         VECTDX
         JNE         VEKT2
<
< ICI, DELTAX = 0 ET DELTAY # 0 : LIGNE VERTICALE.
<
         IF          VECTY1-VECTC-D,XEIF%,,XEIF%
         ADRI        D,W             < POUR FAIRE VARIER Y DANS LA BOUCLE.
XEIF%:   VAL         ENDIF
         LX          VECTDY
         LA          INFINI          < (A)=PENTE D'UNE DROITE VERTICALE...
VEKT3:   EQU         $
         FLT
         FST         VECTA           < MISE EN PLACE DE LA PENTE DES DROITES
                                     < VERTICALES (INFINI) ET HORIZONTALE
                                     < (NULLE)...
         LAI         I               < PAS DE VARIATION = 1 A PRIORI.
         CPZR        X
         JGE         VEKT32
         NGR         A,A             < PAS DE VARIATION = -1.
         NGR         X,X             < COUNT POSITIF.
VEKT32:  EQU         $
         ADRI        I,X             < AFIN DE TRACER LE POINT EXTREME (X2,Y2).
VEKT31:  EQU         $
         PSR         A               < SAUVEGARDE DU PAS...
         LA          VECTX1
         FLT
         FST         VECTX           < FLOTTAGE
         LA          VECTY1
         FLT
         FST         VECTY           <          DES COORDONNEES...
         PLR         A               < RESTAURATION DU PAS...
         BSR         VECTA2          < ET TRACE DU POINT COURANT (X1,Y1)...
         XM          K,W
         AD          K,W             < INCREMENTATION +/- 1.
         XM          K,W
         JDX         VEKT31          < POINT SUIVANT.
         JMP         VEKT40          < C'EST FINI.
VEKT8:   JMP         VECTV8          < RELAI...
<
< ICI, DELTAY=0 : LIGNE HORIZONTALE (OU POINT
< ISOLE SI DELTAX=0) :
<
VEKT1:   EQU         $
         CPZ         VECTDX          < EST-CE UN POINT ISOLE ???
                                     < (DELTAX)=(DELTAY)=0...
         JNE         VEKT1A          < NON (ON A DEJA : (VPTISO)=0)...
         IC          VPTISO          < OUI, ON LE MEMORISE...
VEKT1A:  EQU         $
         IF          VECTX1-VECTC-D,XEIF%,,XEIF%
         ADRI        D,W             < POUR FAIRE VARIER X DANS LA BOUCLE.
XEIF%:   VAL         ENDIF
         LX          VECTDX
         LAI         K               < (A)=PENTE D'UNE DROITE HORIZONTALE...
         JMP         VEKT3           < ET VOILA.
VEKT2:   EQU         $
<
< ICI, DELTAX # 0 ET DELTAY # 0 : IL FAUT DONC CALCULER L'EQUATION
< DE LA DROITE.
<
         FLD         VECTDF          < DELTAX FLOTTANT.
         FST         VECTA
         LA          VECTDY
         FLT
         FDV         VECTA
         FST         VECTA           < A = DELTAY / DELTAX.
         LA          VECTX1
         FLT
         FMP         VECTA
         FST         VECTB
         LA          VECTY1
         FLT
         FSB         VECTB
         FST         VECTB           < B = Y1 - AX1.
<
< TRACE DU SEGMENT A L'AIDE DE 'N' POINTS
< TEL QUE N=MAX(ABS(DELTAX,DELTAY)) :
<
         LA          VECTDX          < DELTAX.
         JAGE        VEKT11
         NGR         A,A             < VALEUR ABSOLUE.
VEKT11:  EQU         $
         LR          A,Y
         LA          VECTDY
         JAGE        VEKT12
         NGR         A,A
VEKT12:  EQU         $
         CPR         Y,A
         JGE         VEKT13
         LR          Y,A
VEKT13:  EQU         $
         LR          A,X             < 'A'='X'=MAX(DELTAX,DELTAY) EN
                                     < VALEUR ABSOLUE.
         FLT
         FST         VECTN           < NOMBRE DE PAS EN FLOTTANT.
         LYI         K               < 'Y' = NUMERO DE PAS (DE 0 A N).
VEKT5:   EQU         $
         LR          Y,A             < NUMERO DU PAS COURANT.
         FLT
         FMP         VECTDF
         FDV         VECTN
         FST         VECTX           < (NUMERO PAS * DELTAX)/NB PAS.
         LA          VECTX1
         FLT
         FAD         VECTX
         FST         VECTX           < X COURANT FLOTTANT.
         FMP         VECTA
         FAD         VECTB
         FST         VECTY           < Y COURANT = A X + B.
         BSR         VECTA2          < TRACE POINT.
         ADRI        I,Y             < PAS SUIVANT.
         CPR         X,Y
         JLE         VEKT5           < POINT SUIVANT.
<
< SORTIE NORMALE :
<
VEKT40:  EQU         $
         PLR         W
         PLR         A,B,X,Y
         RSR                         < ET RETOUR...
<
< SORTIES EN ERREUR :
<
VECTV8:  EQU         $
         JMP         VEKT40          < VERS LA SORTIE EN ERREUR DU HANDLER...
         NLS
XWOR%9:  VAL         ENDIF
         LST



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.