<
<
<
<        CE PROGRAMME PERMET D'AVOIR DES VUES STEREOSCOPIQUES
<        DE DESSINS DECRITS EN GEOMETRIE DESCRIPTIVE.
<        IL GENERE A VOLONTE DES IMAGES GRAPHIQUES OEIL DROIT
<        ET OEIL GAUCHE DONT ON PEUT PRECISER LA DISTANCE
<        POUR CHAQUE POINT DE VUE.
<        A CHAQUE POINT DE VUE, ON PEUT DEMANDER UN CERTAIN
<        NOMBRE DE COPIES(COPIEUR, CAMERA, ETC...) EN FIXANT
<        LA TEMPORISATION POUR CHAQUE COPIE.
<        ON PEUT EGALEMENT GENERER DES IMAGES VIDEO AUXQUELLES
<        ON DONNE UN NOM AU FUR ET A MESURE ( SI ON NE DONNE
<        PAS DE NOM, L'IMAGE N'EST PAS CONSERVEE)
<        ON PEUT ENFIN FIXER L'ECHELLE DE DESSIN
<
<
<        LE DESSIN DOIT COMPORTER L'ORIGINE DE LA DESCRIPTIVE
<        SUIVI D'UN OAB
<        ON DOIT ENSUITE AVOIR LE DESSIN VUE DE FACE SUIVI D'UN OAB
<        PUIS LE DESSIN VU DE DESSUS SUIVI D'UN OAB
<        ET ENFIN UNE SERIE DE TROIS DONNEES FINIE PAR UN OAB
<        CHAQUE TROIS DONNEE COMPREND LA POSITION OEIL DROIT,
<        LA POSITION OEIL GAUCHE, ET UN VECTEUR DONNANT LA
<        DIRECTION DU REGARD
<
<
<
         PAGE
         REF         SQRT
         TABLE
ZERO:    EQU         $
         EOT         #SI CTE CMS#
NMPROC:  VAL         "XX"
         EOT         #SI CTE ITEM#
         EOT         #SI IMA VI#
NOM:     EQU         ZERO+PILE+5-LNOM-2  < NOM DE L'IMAGE VIDEO.
IMAG:    EQU         NOM+LNOM+2      < IMAGE VIDEO PROPREMENT DITE.
         PAGE
<
<
< INTERFACE AVEC 'CMS4'
<
<
         DZS         '10
         WORD        DEBUT
<
<
< POINT D'ENTREE
<
<
         WORD        STEREO
         PROG
DEBUT:   EQU         $
         LRP         L
         BR          -1,L
         PAGE
<
<
< BUFFERS
<
<
BUF1:    DZS         128
BUF2:    DZS         128
BUF3:    DZS         128
BUF4:    DZS         128
         PAGE
         LOCAL
ADLOC:   EQU         $+'80
<
< RELAIS A METTRE IMPERATIVEMENT EN TETE DU LOCAL :
< (AFIN D'ETRE AISEMENT APPELABLE PAR LES ROUTINES
< DE TRANSFORMATIONS CONTENUES DANS L'ITEM2)
<
<        SET         '81 (01)
ASET:    WORD        SET             < MISE D'UN POINT A 1.
<
ASET1:   WORD        SET1            < SET 1 PT SI NON HORS ECRAN
<
< CONSTANTES ET RELAIS :
<
X:       VAL         1               < COORDONNEE X D'UN POINT,
Y:       VAL         0               < COORDONNEE Y D'UN POINT.
SEGORG:  DZS         2               < ORIGINE D'UN SEGMENT.
SEGEXT:  DZS         2               < EXTREMITE D'UN SEGMENT.
AIMAG1:  WORD        IMAG-1,X        < RELAI IMAGE PAR RAPPORT A 1.
AIMAG0:  WORD        IMAG            < @IMAGE PAR RAPPORT A 0.
ADICO:   WORD        DICO            < DICHOTOMIE D'UN SEGMENT.
ATRACE:  WORD        TRACE           < TRACE DICHOTOMIQUE D'UN
                                     < SEGMENT VIDEO.
ANOM:    WORD        NOM             < NOM DE L'IMAGE
ALONG:   WORD        NOM+LNOM+1      < RELAI VERS INDIC IMAGE
<
< CONSTANTES DICHOTOMIQUES :
<
ALIMAG:  WORD        LIMAG           < LONGUEUR IMAGE VIDEO.
NMPL:    WORD        CNMPL           < NBRE DE MOTS DE 16 BITS/LIGNE.
NLIG:    WORD        1024/RDY-1      < NBRE DE LIGNES-1 D'UNE IMAGE.
DICOX:   WORD        0               < X DU POINT VIDEO COURANT M.
DICOY:   WORD        0               < Y DU POINT VIDEO COURANT M.
DICOX1:  WORD        0               < X DE L'ORIGINE VIDEO COURANTE M1.
DICOY1:  WORD        0               < Y DE L'ORIGINE VIDEO COURANTE M1.
DICOX2:  WORD        0               < X EXTREMITE VIDEO COURANTE M2.
DICOY2:  WORD        0               < Y EXTREMITE VIDEO COURANTE M2.
         PAGE
<
< RESERVATIONS POUR LES MESSAGES
<
QGRA:    BYTE        11;'6D
         ASCI        "GRAPHIQUE?"
QNCOP:   BYTE        15;'6D
         ASCI        "NB DE COPIES ="
QTEMP:   BYTE        8;'6D
         ASCI        "TEMPO ="
QEFF:    BYTE        9;'6D
         ASCI        "EFFACER?"
DISTDG:  BYTE        13;'6D
         ASCI        "DIST. VUES ="
QVID:    BYTE        7;'6D
         ASCI        "VIDEO?"
QNOM:    BYTE        '6D;"N"
         ASCI        "OM ="
DISECR:  BYTE        14;'6D
         ASCI        "DIST. ECRAN ="
ECHMUL:  BYTE        10;'6D
         ASCI        "ECHELLE ="
ECHDIV:  BYTE        3;" "
         ASCI        "/ "
QPERSP:  BYTE        13;'6D
         ASCI        "PERSPECTIVE?"
Q2VUE:   BYTE        11;'6D
         ASCI        "DEUX VUES?"
QUEST:   WORD        '0202
         DZS         2
NMIMG:   DZS         10              < NOM IMAGE
         BYTE        0;'04
LECNOM:  WORD        '0101
         WORD        NMIMG-ZERO*2
         WORD        21
DEMNOM:  WORD        '0202
         WORD        QNOM-ZERO*2
         WORD        6
<
< MESSAGES D'ERREURS
<
ERRPD:   BYTE        9;'6D
         ASCI        "CYCLOPE"
ERRVEC:  BYTE        9;'6D
         ASCI        "VERS OU?"
ERRLIN:  BYTE        12;'6D
         ASCI        "SUR LE COTE"
ERROAB:  BYTE        11;'6D
         ASCI        "PAS FINI??"
ERRX:    BYTE        13;'6D
         ASCI        "X DIFFERENTS"
         PAGE
<
< ASSIGNATIONS
<
ASSN:    ASCI        "!ASSIGN "      < ASSIGN NEW
NASSN:   BYTE        0;"="
         ASCI        "N,??STER"
NFICN:   BYTE        0;"?"
IDE1:    BYTE        0;'04
ASSO:    ASCI        "!ASSIGN 7=O,??STER"  <ASSIGN OLD
NFICO:   BYTE        0;"?"
IDE2:    BYTE        0;'04
ASSR:    ASCI        "!ASSIGN 7="    < ASSIGN RELEASE
         BYTE        "R";'04
ASSS:    ASCI        "!ASSIGN "      < ASSIGN SAVE
NASSS:   BYTE        0;"="
         BYTE        "S";'04
         PAGE
<
<
< COMMON
<
<
         COMMON
ACOM:    EQU         $
CCI:     WORD        '0001           < RETOUR AU CCI
NOMSEG:  WORD        0               < ZONE DE LECTURE DE ZDC
SEG:     DZS         4
LONSEG:  VAL         $-NOMSEG*2
Y1:      EQU         SEG
X1:      EQU         SEG+1
Y2:      EQU         SEG+2
X2:      EQU         SEG+3
YSAV:    DZS         1               < POUR EVITER TRACAGE INUTILE
XSAV:    DZS         1
DEMSEG:  WORD        '0008           < ACCES AU SEGMENT COURANT DE ZDC
         WORD        NOMSEG-ZERO*2
         WORD        LONSEG
         WORD        'FFC0           < VALIDATION DES OCTETS DE ZDC
DELSEG:  WORD        '000A           < INVALIDATION DU SEGMENT ACQUIS
         WORD        NOMSEG-ZERO*2
         WORD        SEG-NOMSEG*2
         WORD        'C000           < VALIDATION DES OCTETS DE ZDC
         IF          ORDI-"S",XWOR%,,XWOR%
STABIL:  WORD        '8A01           < DEMANDE DE DIFFUSION IMAGE
         WORD        IMAG-ZERO*2
         WORD        LIMAG*2
         DZS         1
XWOR%:   VAL         0
SEGM:    WORD        RESEGM          < SP D'ACQUISITION D'UN SEGMENT
CORCAR:  WORD        CARTE           < SP D'ACQUISITION EN CARTESIEN
RAC:     WORD        SQRT            < SP DE RACINE CARREE
MESS:    WORD        SPIMP           < SP D'IMPRESSION DES MESSAGES
SPCCI:   WORD        MESCCI          < SP D'APPEL AU CCI INTERPRETATIF
SEGT:    WORD        TSEG            < ACQUISITION ET TRACE D'UN SEGMENT
OAB:     WORD        SPOAB           < SP POUR SAVOIR SI OAB
OPN:     WORD        SPOPN           < SP D'OPEN NEW D'UN FICHIER
OPO:     WORD        SPOPO           < SP D'OPEN OLD
CLS:     WORD        SPCLS           < SP DE CLOSE SAVE
MATP:    WORD        SPMATP          < SP DE CHGT DE REPERE
HEX:     WORD        SPHEX           < SP DE LECTURE EN HEXA
PROJ:    WORD        SPPROJ          < SP DE CALCUL DE PROJECTION
FECH:    WORD        SPFECH          < APPLICATION DE L'ECHELLE
DIST2:   WORD        SPDIS2          < DISTANCE**2 ENTRE 2 POINTS
DIST:    WORD        SPDIST          < DISTANCE
         IF          ORDI-"T",XWOR%,,XWOR%
LESC:    WORD        SPLESC          < SP DE LECTURE-ECRITURE EN SCRATCH
XWOR%:   VAL         0
DLEI:    WORD        SPDLEI          < SP DE DEL-LEC-ECR D'UNE IMAGE
DLFC:    WORD        SPDLFC          < SP DE DELETE DES FICHIERS
DLFP:    WORD        AUTDEL          < DELETE FICHIERS PARTIEL
LCON:    WORD        SPLCON          < SP DE LECTURE OUI/NON
DBEC:    WORD        SPDBEC          < SP DE CALCUL DE DEBORDEMENT
INVER:   WORD        SPINVE          < SP D'INVERSION DE POINTS
         IF          ORDI-"T",XWOR%,,XWOR%
ETIM:    WORD        SPET            < SP DE ET IMAGE ET SCRATCH
OUIM:    WORD        SPOU            < SP DE OU IMAGE ET SCRRATCH
XWOR%:   VAL         0
DEB:     WORD        SPDEB           < SP DE DEBORDEMENT D'UN POINT
DIFF:    WORD        SPDIFF          < SP DE DIFF. PRODUIT DE COORD.
DIFC:    WORD        SPDIFC          < DIFFERENCE DE COORDONNEES
INCO:    WORD        SPINCO          < SP D'INVERSION DE COORDONNEES
X0:      DZS         1               < ORIGINE DE LA DESCRIPTIVE
Y0:      DZS         1
XC1:     DZS         2               < OEIL DROIT
YC1:     DZS         2
ZC1:     DZS         2
XC2:     DZS         2               < OEIL GAUCHE
YC2:     DZS         2
ZC2:     DZS         2
XV:      DZS         2               < VECTEUR PROJECTIF
YV:      DZS         2
ZV:      DZS         2
XO1:     DZS         2               < ORIGINE REFERENTIEL OEIL DROIT
YO1:     DZS         2
ZO1:     DZS         2
XO2:     DZS         2               < ORIGINE REFERENTIEL OEIL GAUCHE
YO2:     DZS         2
ZO2:     DZS         2
PD:      DZS         2               < DISTANCE ENTRE-Z'YEUX
PDS2:    DZS         1               < IDEM/2
GD:      DZS         2               < DISTANCE DES YEUX A L'ECRAN
PGD:     DZS         2               < PRODUIT DES DEUX
GD1:     DZS         1               < DISTANCE OEIL DROIT-ECRAN
GD2:     DZS         1               < DISTANCE OEIL GAUCHE-ECRAN
T11:     EQU         XC1             < MATRICE DE PASSAGE AU NOUVEAU
T12:     EQU         YC1             < REFERENTIEL
T13:     EQU         ZC1
T21:     EQU         XC2
T22:     EQU         YC2
T23:     EQU         ZC2
T31:     EQU         XV
T32:     EQU         YV
T33:     EQU         ZV
XX1:     DZS         2               < COORDONNEES DE TRAVAIL
YY1:     DZS         2
ZZ1:     DZS         2
XX2:     DZS         2
YY2:     DZS         2
ZZ2:     DZS         2
MULT1:   DZS         1               < DISTANCE ECRAN
MULTI:   DZS         1               < MULTIPLICATEUR ECHELLE
DIVIS:   DZS         1               < DIVISEUR ECHELLE
DIV:     DZS         2               < DIVISEUR POUR CHMT DE REPERE
DVUE:    DZS         1               < DISTANCE ENTRE LES VUES
ORG:     DZS         1               < ORIGINE D'UNE VUE
C12:     WORD        512             < MILIEU DE L'ECRAN
DEPY:    WORD        -128            < DEPL. Y SUR ECRAN
NBPTCM:  WORD        50              < NB DE POINTS PAR CM
PT5:     FLOAT       .5
PROX:    FLOAT       1E-3
DIV1:    DZS         1               < DIVISEUR DE TRAVAIL
LIST:    EQU         $               < TABLE D'APPEL DE SQRT
PARAM:   DZS         2
RESUL:   DZS         2
         DZS         1
M23:     WORD        1023            < MAX ECRAN
DELTAX:  DZS         1               < POUR POINTS INVISIBLES
DELTAY:  DZS         1
DELTAZ:  DZS         1
NBSEG:   DZS         1               < NB DE SEGMENTS DU DESSIN
NBOEIL:  DZS         1               < NB DE POINTS DE VUE
FLT1:    DZS         2               < POUR CALCUL FLOTTANT
FLT2:    DZS         2
FUN:     FLOAT       1
FDEUX:   FLOAT       2
ECRERR:  WORD        '0202           < ECRITURE DES MESSAGES D'ERREUR
         DZS         2
DONNEE:  DZS         2               < POUR LECTURE EN HEXA
LECDON:  WORD        '0101
         WORD        DONNEE-ZERO*2
         WORD        4
ADON:    WORD        DONNEE+2,X
LECON:   WORD        '0101           < LECTURE OUI/NON
         WORD        DONNEE-ZERO*2
         WORD        1
GRAPH:   DZS         1               < GRAPHIQUE DEMANDE
VIDEO:   DZS         1               < VIDEO DEMANDEE
NCOP:    DZS         1               < NB DE COPIE
TEMP:    WORD        '0005           < TEMPO POUR COPIE
         WORD        0
TEMPO:   DZS         1
EFFMT:   DZS         1               < EFFACEMENT DEMANDE
PERSP:   DZS         1               < PERSPECTIVE
D2VUE:   DZS         1               < DEUX VUES
DEMCOP:  WORD        '0B07           < DEMANDE DE COPIE
         WORD        '1B17
         WORD        '8D04
OPENO:   WORD        '0005           < OPEN OLD
         WORD        1
         WORD        0
OPENN:   WORD        '0004           < OPEN NEW
         WORD        1
         WORD        0
CLOSS:   WORD        '0007           < CLOSE SAVE
         WORD        1
         WORD        0
CCII:    WORD        '0002           < CCI INTERPRETATIF
         WORD        0
         WORD        80
LEC:     WORD        '0008           < LECTURE-ECRITURE SUR FICHIER
         WORD        BUF1-ZERO*2
         WORD        256
ECR1:    WORD        '0002
         WORD        BUF1-ZERO*2
         WORD        256
ECR2:    WORD        '0002
         WORD        BUF2-ZERO*2
         WORD        256
ECR3:    WORD        '0002
         WORD        BUF3-ZERO*2
         WORD        256
LEC4:    WORD        '0008
         WORD        BUF4-ZERO*2
         WORD        256
DEMDEL:  WORD        '8302           < DEMANDE DE DELETE DE FICHIER
         WORD        ASSO-ZERO+6*2
         WORD        10
         WORD        -1
DEMMEM:  WORD        '0004           < DEMANDE 8K POUR IMAGE
REDMEM:  WORD        '0004           < RETOUR A 4K
         WORD        '4000
         WORD        '2000
SGN:     WORD        '0002           < DEMANDE AU SGN POUR IMAGES
         WORD        NOM-ZERO*2
         WORD        LIMAG+LNOM+2*2
         WORD        2*LNOM
         IF          ORDI-"T",XWOR%,,XWOR%
NMIBD:   ASCI        "??STERSTER"    < NOM IMAGE INTERMEDIAIRE
         BYTE        '04;0
GRG:     ASCI        "GR"            < NOM DES GRILLES
         BYTE        '04;0
GBL:     ASCI        "GB"
         BYTE        '04;0
TNMGR:   WORD        GBL             < RELAIS VERS CES NOMS
         WORD        GRG
ANMGR:   WORD        TNMGR-1,X
ECRSCR:  WORD        '0C00           < LECTURE-ECRITURE EN SCRATCH
         WORD        0
         WORD        256
         WORD        0
AOBF3:   WORD        BUF3-ZERO*2     < @ OCTET BUFFER SCRATCH
AXBF3:   WORD        BUF3-1,X        < RELAI
XWOR%:   VAL         0
ALPGRA:  WORD        '0B03           < PASSAGE ALPHA-GRAPHIQUE
GRAALP:  WORD        '0B04           < PASSAGE GRAPHIQUE-ALPHA
EFFAC:   WORD        '0B05           < EFFACEMENT
TRAC1:   WORD        '0B0A           < ORIGINE D'UN SEGMENT
         WORD        Y1-ZERO*2
         WORD        8
TRAC2:   WORD        '0B0A           < EXTREMITE D'UN SEGMENT
         WORD        Y2-ZERO*2
         WORD        4
ABF1:    WORD        BUF1+1+126,X    < RELAIS
ABF2:    WORD        BUF2+1+126,X
ABF3:    WORD        BUF3+1+126,X
ABF4:    WORD        BUF4+1+126,X
AREV:    WORD        REVOIR
AREVDS:  WORD        REVVUE
AVUEG:   WORD        REDESS
RELLOC:  WORD        ADLOC           < RELAI VERS LE LOCAL
AREL4:   WORD        REL4
AATDES:  WORD        AUTDES
KSTORE:  DZS         40              < PILE DE TRAVAIL
         PAGE
<
<
< PROGRAMME
<
<
         WORD        ACOM+'80
         PROG
STEREO:  EQU         $
         LRP         C               < INITIALISATION DE C
         LA          -1,C
         LR          A,C
         LA          RELLOC          < INITIALISATION DE L
         LR          A,L
REVOIR:  EQU         $
         LAD         KSTORE-1        < INITIALISATION DE K
         LR          A,K
         PAGE
<
< PERIODE DE QUESTIONS-REPONSES
<
         LAD         QGRA            < GRAPHIQUE?
         BSR         LCON
         STA         GRAPH
         JANE        VVIDEO
         LAD         Q2VUE           < DEUX VUES?
         BSR         LCON
         STA         D2VUE
         JANE        RENCOP
REDIST:  EQU         $
         LAD         DISTDG          < DISTANCE VUES
         BSR         HEX
         JAL         REDIST
         MP          NBPTCM
         STB         DVUE
RENCOP:  EQU         $
         LAD         QNCOP           < NB DE COPIES
         BSR         HEX
         JAL         RENCOP
         STA         NCOP
         JAE         PASCOP
RETEMP:  EQU         $
         LAD         QTEMP           < TEMPO
         BSR         HEX
         JALE        RETEMP
         STA         TEMPO
PASCOP:  EQU         $
         LAD         QEFF            < EFFACEMENT
         BSR         LCON
         STA         EFFMT
VVIDEO:  EQU         $
         LAD         QVID            < VIDEO?
         BSR         LCON
         STA         VIDEO
         AND         GRAPH           < RIEN A FAIRE?
         JAE         CONTI
         LAD         CCI
         SVC         0
         BR          AREV
CONTI:   EQU         $
         CPZ         GRAPH           < SI PAS DE GRAPHIQUE,
         JE          VUGRAP
         LAD         Q2VUE           < DEUX VUES?
         BSR         LCON
         STA         D2VUE
VUGRAP:  EQU         $
         LAD         QPERSP          < PERSPECTIVE?
         BSR         LCON
         STA         PERSP
         JANE        RELMUL
REDIEC:  EQU         $
         LAD         DISECR          < DISTANCE ECRAN
         BSR         HEX
         JALE        REDIEC
         MP          NBPTCM
         SLRD        1
         STB         MULT1
RELMUL:  EQU         $
         LAD         ECHMUL          < ECHELLE
         BSR         HEX
         JALE        RELMUL
         STA         MULTI
RELDIV:  EQU         $
         LAD         ECHDIV
         BSR         HEX
         JALE        RELDIV
         STA         DIVIS
<
< RELEVER IDESC
<
         WORD        '1E45
         ORI         '30
         STBY        IDE1
         STBY        IDE2
<
< DETRUIRE LES FICHIERS
<
         BSR         DLFC
<
< ORIGINE DE LA DESCRIPTIVE
<
         BSR         SEGM
         LA          X1
         STA         X0
         LA          Y1
         STA         Y0
<
< VERIFIER LA FIN DE DEFINITION
<
         BSR         SEGM
         BSR         OAB
         JAE         BONOAB
         LAD         ERROAB          < ERREUR SINON
         BR          MESS
BONOAB:  EQU         $
<
< EFFACER L'ECRAN
<
         LAD         EFFAC
         SVC         0
<
< INITIALISER LES VALEURS RETENUES
<
         LAI         -1
         STA         XSAV
         STA         YSAV
         LAD         ALPGRA          < PASSER AU MODE GRAPHIQUE
         SVC         0
<
< OUVRIR LE FICHIER 6 ET INITIALISER L'ECRITURE
<
         LAI         6
         BSR         OPN
         LAI         6
         STBY        ECR1
         LXI         -126            < PT SUR BUFFER
         LAI         0               < W=NB SEGMENTS
         LR          A,W
<
< RECEVOIR LE 1ER DESSIN JUSQU'A OAB
<
REL1:    EQU         $
         PSR         X
         BSR         SEGT            < LE TRACER EN MEME TEMPS
         PLR         X
         CPZR        X               < RESTE-T-IL DE LA PLACE DANS BUFFER
         JL          PLAC1           < OUI
         LAD         ECR1            < NON - L'ECRIRE
         SVC         0
         LXI         -126
PLAC1:   EQU         $
         BSR         OAB             < RELEVER OAB EVENTUEL
         LR          A,Y
         LA          X1              < TRANSFERER LE SEGMENT
         STA         &ABF1
         ADRI        1,X
         LA          Y1
         STA         &ABF1
         ADRI        2,X
         LA          X2
         STA         &ABF1
         ADRI        1,X
         LA          Y2
         STA         &ABF1
         ADRI        2,X
         ADRI        1,W             < INCREMENTER LE NB DE SEGMENTS
         CPZR        Y               < SI PAS OAB, CONTINUER
         JNE         REL1
         LAD         ECR1            < C'EST LA FIN
         SVC         0               < ECRIRE LE DERNIER BUFFER
         LAI         6               < FERMER LE FICHIER
         BSR         CLS
<
< RECEPTION DU DEUXIEME DESSIN
<
         LAI         6               < OUVRIR LE FICHIER 6 OLD
         BSR         OPO
         LAI         6
         STBY        LEC
         LAI         4               < OUVRIR LE FICHIER 4 NEW
         BSR         OPN
         LAI         4
         STBY        ECR1
         LR          W,A             < SAUVER LE NB DE SEGMENTS
         STA         NBSEG
         LAD         LEC             < LIRE LE 1ER BUFFER
         SVC         0
         LXI         -126
REL2:    EQU         $
         PSR         X
         BSR         SEGT            < TRACER LE SEGMENT RECU
         PLR         X
         CPZR        X               < EST-ON A LA FIN DU BUFFER?
         JL          PLAC2
         LAD         ECR1            < OUI - ECRIRE LE COURANT
         SVC         0
         LAD         LEC             < LIRE LE PROCHAIN
         SVC         0
         LXI         -126
PLAC2:   EQU         $
         BSR         OAB             < PRELEVER OAB EVENTUEL
         LR          A,Y
<
< TRAITEMENT DE LA PREMIERE COORDONNEE
<
         LA          X1              < VOIR SI LES X SONT EGAUX
         CP          &ABF1
         JE          BONX1
         LAD         ERRX            < SINON ERREUR
         BR          MESS
BONX1:   EQU         $
         SB          X0              < CALCUL DU X
         STA         &ABF1
         ADRI        1,X
         LA          Y0              < CALCUL DU Y
         SB          Y1
         LB          &ABF1
         STA         &ABF1
         LR          B,A             < CALCUL DU Z
         SB          Y0
         ADRI        1,X
         STA         &ABF1
         ADRI        1,X
<
< TRAITEMENT DE LA DEUXIEME COORDONNEE
<
         LA          X2              < VERIFICATION DE L'EGALITE DES X
         CP          &ABF1
         JE          BONX2
         LAD         ERRX            < ERREUR SINON
         BR          MESS
BONX2:   EQU         $
         SB          X0              < CALCUL DU X
         STA         &ABF1
         ADRI        1,X
         LA          Y0              < CALCUL DU Y
         SB          Y2
         LB          &ABF1
         STA         &ABF1
         LR          B,A             < CALCUL DU Z
         SB          Y0
         ADRI        1,X
         STA         &ABF1
         ADRI        1,X
         ADRI        -1,W            < DECOMPTE DU NB DE SEGMENTS
         CPZR        W               < ON DOIT AVOIR UN OAB SUR
         JE          FIN1            < LE DEUXIEME DESSIN EN MEME
         CPZR        Y               < QUE LA FIN DU PREMIER DESSIN
         JNE         REL2
ERRF:    EQU         $
         LAD         ERROAB          < ERREUR SINON
         BR          MESS
FIN1:    EQU         $
         CPZR        Y
         JNE         ERRF
<
< ECRIRE LE DERNIER BUFFER ET FERMER LES FICHIERS
<
         LAD         ECR1
         SVC         0
         LAI         6
         BSR         CLS
         LAI         4
         BSR         CLS
         DC          NBSEG
         LAD         GRAALP
         SVC         0
<
< DETRUIRE LE FICHIER 6
<
         LYI         1
         BSR         DLFP
<
< OUVRIR LE FICHIER POINT DE VUE
<
         LAI         3
         BSR         OPN
         LAI         3
         STBY        ECR1
         LXI         -126
         STZ         NBOEIL
<
< RECEVOIR LES POINTS DE VUE
<
NEWPOS:  EQU         $
         CPZR        X               <PLACE DANS LE BUFFER?
         JL          PLAC5
         LAD         ECR1            < NON - L'ECRIRE
         SVC         0
         LXI         -126
PLAC5:   EQU         $
         PSR         X               < OEIL DROIT
         LAD         &ABF1
         BSR         CORCAR
         PLR         X
         BSR         OAB             < FIN?
         JAE         FINPOS
         ADRI        3,X             < OEIL GAUCHE
         PSR         X
         LAD         &ABF1
         BSR         CORCAR
         PLR         X
         ADRI        3,X             < VECTEUR PROJECTEUR
         PSR         X
         LAD         &ABF1
         BSR         CORCAR
         PLR         X
         ADRI        3,X
         IC          NBOEIL
         JMP         NEWPOS
<
< FERMER LE FICHIER
<
FINPOS:  EQU         $
         LAD         ECR1
         SVC         0
         LAI         3
         BSR         CLS
<
< ROUVRIR LE FICHIER EN LECTURE
<
         LAD         EFFAC
         SVC         0
         LAI         3
         BSR         OPO
         LAI         3
         STBY        LEC4
         LXI         0               < OBLIGER LA LECTURE
<
< TRAITEMENT POUR UNE VISION
<
REVVUE:  EQU         $
         CPZ         NBOEIL          < RESTE-T-IL DES DONNEES?
         JG          AUTOEL
         LAI         3               < NON - FIN
         BSR         CLS
         BSR         DLFC
         LAD         CCI
         SVC         0
         BR          AREV
AUTOEL:  EQU         $
<
< LIRE UN POINT DE VUE
<
         CPZR        X               < EN RESTE-T-IL DANS LE BUFFER?
         JL          PLAC6
         LAD         LEC4            < NON - LIRE
         SVC         0
         LXI         -126
PLAC6:   EQU         $
         LAD         XC1             < TRANSFERER
         LR          A,W
         LYI         9
RETRAN:  EQU         $
         LA          &ABF4
         FLT
         FST         0,W
         ADRI        1,X
         ADRI        2,W
         ADRI        -1,Y
         CPZR        Y
         JG          RETRAN
         PSR         X
<
< CALCUL DE LA DISTANCE ENTRE LES YEUX
<
< DY=SQRT((XC1-XC2)**2+(YC1-YC2)**2+(ZC1-ZC2)**2)
<
         PSR         L
         LAD         XC1
         LR          A,L
         LAD         XC2
         LR          A,W
         LAD         XX1
         LR          A,Y
         BSR         DIFC
         LAD         XX1
         LR          A,L
         LR          A,W
         BSR         DIST
         FCAZ                        < ELLE DOIT ETRE NON NULLE
         JNE         BONPD
         PLR         L
         LAD         ERRPD           < ERREUR SINON
         BR          MESS
BONPD:   EQU         $
         FST         GD              < SERT DE DISTANCE A ECRAN
<
< VERIFIER LA NON-COLINEARITE DES YEUX ET DU VECTEUR PROJECTIF
<
< COLINEARITE EXISTE SI:
< XV(YC1-YC2)-YV(XC1-XC2)=0 ET
< YV(ZC1-ZC2)-ZV(YC1-YC2)=0 ET
< ZV(XC1-XC2)-XV(ZC1-ZC2)=0
<
         LAD         XX1
         LR          A,W
         LAD         XV
         LR          A,L
         BSR         DIFF
         FCAZ
         JNE         COL2
         ADRI        1,W
         ADRI        1,L
         BSR         DIFF
         FCAZ
         JNE         COL2
         BSR         INCO
         BSR         DIFF
         FCAZ
         JNE         COL1
         PLR         L
         LAD         ERRLIN
         BR          MESS            < ERREUR
COL1:    EQU         $
         BSR         INCO
COL2:    EQU         $
<
< CALCUL DE LA LONGUEUR DU VECTEUR PROJECTIF
<
< LV=SQRT(XV**2+YV**2+ZV**2)
<
         LAD         XV
         LR          A,L
         LR          A,W
         BSR         DIST
         FCAZ                        < ELLE DOIT ETRE NON NULLE
         JNE         BONGD
         PLR         L
         LAD         ERRVEC          < ERREUR SINON
         BR          MESS
BONGD:   EQU         $
         FST         FLT1
<
< NOUVEAU VECTEUR PROJECTIF
<
< XV=XV*DY/LV, YV=YV*DY/LV, ZV=ZV*DY/LV
<
         FLD         XV
         FMP         GD
         FDV         FLT1
         FST         XV
         FLD         YV
         FMP         GD
         FDV         FLT1
         FST         YV
         FLD         ZV
         FMP         GD
         FDV         FLT1
         FST         ZV
<
< CALCUL DES ORIGINES DES REFERENTIELS PAR OEIL
<
< CA SE COMPLIQUE. SUIVEZ BIEN CE QUI SUIT.
<
< EQUATION DE LA DROITE PASSANT PAR LES YEUX
< X=XC1+(XC1-XC2)T, Y=YC1+(YC1-YC2)T, Z=ZC1+(ZC1-ZC2)T
<
< EQUATION DU PLAN PERPENDICULAIRE AU VECTEUR PROJECTIF
< XV*X+YV*Y+ZV*Z=D
< IL PASSE PAR L'EXTREMITE DU VECTEUR PROJECTIF,
< DONT LES COORDONNEES SONT:
< XV+(XC1+XC2)/2, YV+(YC1+YC2)/2, ZV+(ZC1+ZC2)/2
< CAR LE VECTEUR A POUR ORIGINE LE MILIEU DES YEUX
<
< D=XV(XV+(XC1+XC2)/2)+YV(YV+(YC1+YC2)/2)+ZV(ZV+(ZC1+ZC2)/2)
<
< LE POINT P D'INTERSECTION DE LA DROITE ET DU PLAN EST DONC
< XV(XC1+(XC1-XC2)T)+YV(YC1+(YC1-YC2)T)+ZV(ZC1+(ZC1-ZC2)T)=D
<
< D'OU
<    XV(XV+(XC2-XC1)/2)+YV(YV+(YC2-YC1)/2)+ZV(ZV+(ZC2-ZC1)/2)
< T= --------------------------------------------------------
<              XV(XC1-XC2)+YV(YC1-YC2)+ZV(ZC1-ZC2)
<
< SI LE DENOMINATEUR EST NUL, PRENDRE M=N=1 ET ALLER EN (2)
<
< LE VECTEUR JOIGNANT C1 ET P VAUT DONC
< (XC1-XC2)T, (YC1-YC2)T, (ZC1-ZC2)T
< DONT LA LONGUEUR EST
< B=SQRT(((XC1-XC2)T)**2+((YC1-YC2)T)**2+((ZC1-ZC2)T)**2)
<
< LA DISTANCE DE L'ORIGINE DU VECTEUR PROJECTIF A UN OEIL EST
< A=GD/2
<
< CALCULONS MAINTENANT M ET N QUI SONT LES RAPPORT D'HOMOTHETIE
< A APPLIQUER SUR LE VECTEUR PROJECTIF POUR OBTENIR LES VECTEURS
< OEIL-ORIGINE (OUF...ON APPROCHE DE LA FIN)
<
< SI T EST POSITIF, P EST DU COTE DE C1. DONC
< M=B/(B+A), N=(B+2*A)/(B+A)
< SI T EST NEGATIF, INVERSER M ET N
<
< (2)
<
< DONC.............
< O1=(XC1+XV*M,YC1+YV*M,ZC1+ZV*M)
< O2=(XC2+XV*N,YC2+YV*N,ZC2+ZV*N)
<
< ET C'EST FINI. MAIS OUI!!!!!!!!
<
         LAD         XV              < DENOMINATEUR DE T
         LR          A,L
         LAD         XX1
         LR          A,W
         BSR         DIST2
         FST         FLT2
         FABS
         FCAM        PROX
         JG          PASPAR
         LAI         1               < LE VECTEUR PROJECTIF EST
         FLT                         < PERPENDICULAIRE A LA
         FST         XX1             < DIRECTION DES YEUX
         FST         YY1
         JMP         BONT
PASPAR:  EQU         $
         FLD         XX1             < CALCUL DE T
         FNEG
         FDV         FDEUX
         FAD         XV
         FST         XX2
         FLD         YY1
         FNEG
         FDV         FDEUX
         FAD         YV
         FST         YY2
         FLD         ZZ1
         FNEG
         FDV         FDEUX
         FAD         ZV
         FST         ZZ2
         LAD         XV
         LR          A,L
         LAD         XX2
         LR          A,W
         BSR         DIST2
         FDV         FLT2
         FST         PD
         FMP         XX1             < CALCUL DE B
         FST         XX2
         FLD         PD
         FMP         YY1
         FST         YY2
         FLD         PD
         FMP         ZZ1
         FST         ZZ2
         LAD         XX2
         LR          A,L
         LR          A,W
         BSR         DIST
         FST         FLT1
         FLD         GD              < CALCUL DE A
         FDV         FDEUX
         FST         FLT2
         FAD         FLT1            < CALCUL DE M ET N
         FST         YY1
         FLD         FLT1
         FDV         YY1
         FST         XX1
         FLD         FLT1
         FAD         GD
         FDV         YY1
         FST         YY1
         FCMZ        PD              < INVERSER M ET N SI T<0
         JGE         BONT
         FLD         XX1
         FST         ZZ1
         FLD         YY1
         FST         XX1
         FLD         ZZ1
         FST         YY1
BONT:    EQU         $
         FLD         XV              < CALCUL DES ORIGINES
         FMP         XX1
         FAD         XC1
         FST         XO1
         FLD         YV
         FMP         XX1
         FAD         YC1
         FST         YO1
         FLD         ZV
         FMP         XX1
         FAD         ZC1
         FST         ZO1
         FLD         XV
         FMP         YY1
         FAD         XC2
         FST         XO2
         FLD         YV
         FMP         YY1
         FAD         YC2
         FST         YO2
         FLD         ZV
         FMP         YY1
         FAD         ZC2
         FST         ZO2
<
< CALCUL DES DISTANCES YEUX-ORIGINES
<
< GD1=SQRT((XC1-XO1)**2+(YC1-YO1)**2+(ZC1-ZO1)**2)
< GD2=SQRT((XC2-XO2)**2+(YC2-YO2)**2+(ZC2-ZO2)**2)
<
         LAD         XC1
         LR          A,L
         LAD         XO1
         LR          A,W
         LAD         XX1
         LR          A,Y
         BSR         DIFC
         LAD         XC2
         LR          A,L
         LAD         XO2
         LR          A,W
         LAD         XX2
         LR          A,Y
         BSR         DIFC
         LAD         XX1
         LR          A,L
         LR          A,W
         BSR         DIST
         FAD         PT5
         FIX
         STA         GD1
         LAD         XX2
         LR          A,L
         LR          A,W
         BSR         DIST
         FAD         PT5
         FIX
         STA         GD2
<
< DISTANCE ENTRE LES ORIGINES
<
< DO=SQRT((XO1-XO2)**2+(YO1-YO2)**2+(ZO1-ZO2)**2)
<
         LAD         XO1
         LR          A,L
         LAD         XO2
         LR          A,W
         LAD         XC1
         LR          A,Y
         BSR         DIFC
         LAD         XC1
         LR          A,L
         LR          A,W
         BSR         DIST
         FST         PD
         FIX
         SLRS        1
         STA         PDS2
<
< CALCUL DES COEFFICIENTS DE LA MATRICE DE TRANSFORMATION
< SANS LES FACTEURS DIVISEURS
<
< XC1/PD                 YC1/PD                 ZC1/PD
< (ZC1*YV-YC1*ZV)/PD.GD  (XC1*ZV-ZC1*XV)/PD.GD  (YC1*XV-XC1*YV)/PD.GD
< XV/GD                  YV/GD                  ZV/GD
<
         FLD         T12
         FMP         ZV
         FST         FLT1
         FLD         T13
         FMP         YV
         FSB         FLT1
         FST         T21
         FLD         T13
         FMP         XV
         FST         FLT1
         FLD         T11
         FMP         ZV
         FSB         FLT1
         FST         T22
         FLD         T11
         FMP         YV
         FST         FLT1
         FLD         T12
         FMP         XV
         FSB         FLT1
         FST         T23
         FLD         PD
         FMP         GD
         FST         PGD
<
< VOIR SI ON REGARDE PAR EN-DESSOUS
<
         LAD         XO1             < CALCUL DE L'ORIGINE DU REPERE
         LR          A,L             < OEIL DROIT EXPRIME DANS
         LAD         XO2             < LE REPERE OEIL GAUCHE
         LR          A,W
         LAD         XX1
         LR          A,Y
         BSR         DIFC
         LAD         XX1
         LR          A,L
         LAD         T11
         LR          A,W
         BSR         DIST2
         FCAZ
         JGE         VUENOR
         LAD         T11             < REGARD PAR EN-DESSOUS,
         LR          A,W             < INVERSER LES COEFS SUR X ET Y
         LYI         6
REINXY:  EQU         $
         FLD         0,W
         FNEG
         FST         0,W
         ADRI        2,W
         ADRI        -1,Y
         CPZR        Y
         JG          REINXY
VUENOR:  EQU         $
         PLR         L
<
< PASSAGE A 8K SI NECESSAIRE
<
         CPZ         VIDEO
         JNE         NVID10
         LAD         DEMMEM
         SVC         0
NVID10:  EQU         $
<
< OUVRIR LE FICHIER COORDONNEE ET LES FICHIERS OEIL
<
         LAI         4
         BSR         OPO
         LAI         4
         STBY        LEC
         LAI         5
         BSR         OPN
         LAI         5
         STBY        ECR2
         LAI         6
         BSR         OPN
         LAI         6
         STBY        ECR3
<
< NB DE POINT DU DESSIN
<
         LA          NBSEG
         LR          A,W
         ADR         W,W
         LAD         LEC             < LIRE LE 1ER BUFFER
         SVC         0
         LXI         -126
<
< APPLIQUER LES DEPLACEMENTS D'ORIGINES POUR UN POINT
<
REL3:    EQU         $
         CPZR        X               < CHANGER DE BUFFER
         JL          PLAC3           < SI NECESSAIRE
         LAD         ECR2            < ECRIRE LES PLEINS
         SVC         0
         LAD         ECR3
         SVC         0
         LAD         LEC             < LIRE
         SVC         0
         LXI         -126
PLAC3:   EQU         $
         LA          &ABF1
         FLT
         FST         XX1
         FST         XX2
         ADRI        1,X
         LA          &ABF1
         FLT
         FST         YY1
         FST         YY2
         ADRI        1,X
         LA          &ABF1
         FLT
         FST         ZZ1
         FST         ZZ2
         PSR         L,W
         LAD         XX1
         LR          A,L
         LAD         XO1
         LR          A,W
         LR          L,Y
         BSR         DIFC
         LAD         XX2
         LR          A,L
         LAD         XO2
         LR          A,W
         LR          L,Y
         BSR         DIFC
         ADRI        -2,X
<
< APPLIQUER LE CHANGEMENT DE REPERE
<
         FLD         PD              < DIVISEUR 1ERE LIGNE
         FST         DIV
         LAD         XX1             < INITIALISATION DES ADRESSES
         LR          A,W
         LAD         T11
         LR          A,L
         BSR         MATP            < CALCUL NOUVELLE COORDONNEE
         STA         &ABF2
         ADRI        6,W
         BSR         MATP            < CALCUL POUR L'AUTRE OEIL
         STA         &ABF3
         ADRI        1,X             < COUPLE DE COORDONNEES SUIVANTES
         ADRI        -6,W
         ADRI        6,L
         FLD         PGD
         FST         DIV
         BSR         MATP
         STA         &ABF2
         ADRI        6,W
         BSR         MATP
         STA         &ABF3
         ADRI        1,X             < DERNIERES COORDONNEES
         ADRI        -6,W
         ADRI        6,L
         FLD         GD
         FST         DIV
         BSR         MATP
         STA         &ABF2
         ADRI        6,W
         BSR         MATP
         STA         &ABF3
         ADRI        1,X
         PLR         L,W
<
< PASSER AU SEGMENT SUIVANT
<
         ADRI        -1,W
         CPZR        W
         JG          REL3
<
< FERMETURE DES FICHIERS
<
         LAD         ECR2            < ECRIRE DERNIERS BUFFERS
         SVC         0
         LAD         ECR3
         SVC         0
         LAI         4
         BSR         CLS
         LAI         5
         BSR         CLS
         LAI         6
         BSR         CLS
<
< TRAITEMENT VUE PAR VUE
< OUVRIR LE FICHIER
<
         LAI         5
         BSR         OPO
         LAI         5
         STBY        LEC
<
< EFFACER L'ECRAN SI NECESSAIRE
<
         CPZ         EFFMT
         JNE         PASEF
         LAD         EFFAC
         SVC         0
PASEF:   EQU         $
<
< CALCUL DE L'ORIGINE DE TRACAGE
<
         LA          DVUE
         SLRS        1
         STA         ORG
<
< TRAITEMENT DU FICHIER
<
         LAI         2
         PSR         A
REDESS:  EQU         $
         LAD         ALPGRA          < PASSER EN GRAPHIQUE
         SVC         0
         LAI         -1              < INIT. VALEURS RETENUES
         STA         XSAV
         STA         YSAV
         CPZ         VIDEO
         JNE         NVID1
         LX          ALIMAG          < RAZ DE L'IMAGE
         STZ         &AIMAG1
         JDX         $-1
         IF          ORDI-"S",XWOR%,,XWOR%
         LAI         TVPR            < EFFACEMENT DES 3 COMPOSANTES
         STA         STABIL+3
         LAD         STABIL
         SVC         0
         LAI         TVPV
         STA         STABIL+3
         LAD         STABIL
         SVC         0
         LAI         TVPB
         STA         STABIL+3
         LAD         STABIL
         SVC         0
XWOR%:   VAL         0
NVID1:   EQU         $
         LA          NBSEG
         LR          A,W
         LXI         0
REL4:    EQU         $
         CPZR        W               < RESTE-T-IL DES SEGMENTS?
         JG          SEGSUI
         BR          AATDES
SEGSUI:  EQU         $
         CPZR        X               < OUI-BUFFER VIDE?
         JL          PLAC4
         LAD         LEC             < OUI-RELIRE
         SVC         0
         LXI         -126
PLAC4:   EQU         $
         LYI         -1              < INDIC. 1ER PASSAGE
REPTVS:  EQU         $
         LBI         0               < PAS DE PT INVISIBLE A PRIORI
         ADRI        2,X             < RELEVER LE Z
         CPZ         &ABF1           < PT 1 VISIBLE?
         JL          ZDIFD1
         LBI         1               < PT 1 INVISIBLE
ZDIFD1:  EQU         $
         ADRI        3,X
         LA          &ABF1           < PT 2 VISIBLE?
         ADRI        -5,X
         JAL         ZDIFD2
         ADRI        2,B             < PT 2 INVISIBLE
ZDIFD2:  EQU         $
         CPZR        Y               < 1ER PASSAGE?
         JGE         DEJVU
         LR          B,Y             < OUI - RELEVER POSITION POINTS
DEJVU:   EQU         $
         CPZR        B
         JE          PTVIS2          < DEUX PTS VISIBLES
         LR          B,A
         CPI         3
         JNE         PT12VS
         ADRI        6,X             < DEUX PTS INVISIBLES
         JMP         VIS0
PT12VS:  EQU         $
         LA          &ABF1           < CALCUL DU DELTAX
         ADRI        3,X
         SB          &ABF1
         SARS        1
         STA         DELTAX
         ADRI        -2,X            < CALCUL DU DELTAY
         LA          &ABF1
         ADRI        3,X
         SB          &ABF1
         SARS        1
         STA         DELTAY
         ADRI        -2,X            < CALCUL DU DELTAZ
         LA          &ABF1
         ADRI        3,X
         SB          &ABF1
         SARS        1
         STA         DELTAZ
         ADRI        -5,X            < POSITIONNEMENT SUR PT INVISIBLE
         LR          B,A
         CPI         1
         JE          UNINV1
         ADRI        3,X
         LA          DELTAX          < INVERSER LES DELTA
         NGR         A
         STA         DELTAX
         LA          DELTAY
         NGR         A
         STA         DELTAY
         LA          DELTAZ
         NGR         A
         STA         DELTAZ
UNINV1:  EQU         $
         LA          DELTAX          < INVISIBLE SI DIST. ECRAN=1
         OR          DELTAY
         OR          DELTAZ
         JANE        TJSVIS
         LYI         3
         JMP         VIS0
TJSVIS:  EQU         $
         LA          &ABF1           < RENDRE LE POINT VISIBLE
         SB          DELTAX
         STA         &ABF1
         ADRI        1,X
         LA          &ABF1
         SB          DELTAY
         STA         &ABF1
         ADRI        1,X
         LA          &ABF1
         SB          DELTAZ
         STA         &ABF1
         ADRI        -2,X            < REVOIR SI LE PT EST VISIBLE
         LR          B,A
         CPI         1
         JE          REPTVS
         ADRI        -3,X
         JMP         REPTVS
PTVIS2:  EQU         $
         PSR         Y
         ADRI        2,X             < PROJECTION 1ER POINT
         LA          &ABF1
         ADRI        -2,X
         SB          GD1
         NGR         A
         STA         DIV1
         LYI         0
         BSR         PROJ
         STA         SEGORG+X
         CPZ         D2VUE
         JNE         D2VUE1
         AD          ORG
D2VUE1:  EQU         $
         STA         X1
         ADRI        1,X
         LYI         1
         BSR         PROJ
         STA         SEGORG+Y
         AD          DEPY
         STA         Y1
         ADRI        4,X             < PROJECTION 2EME POINT
         LA          &ABF1
         ADRI        -2,X
         SB          GD1
         NGR         A
         STA         DIV1
         LYI         0
         BSR         PROJ
         STA         SEGEXT+X
         CPZ         D2VUE
         JNE         D2VUE2
         AD          ORG
D2VUE2:  EQU         $
         STA         X2
         ADRI        1,X
         LYI         1
         BSR         PROJ
         STA         SEGEXT+Y
         AD          DEPY
         STA         Y2
         ADRI        2,X
         PLR         Y
<
< TRAITER LES POINTS INVISIBLES
<
VIS0:    EQU         $
         LR          Y,A
         JAE         DEBORD          < PTS VISIBLES
         CPI         3
         JE          NVID2           < PTS INVISIBLES
         CPI         2
         JNE         VIS1            < POINT 1 INVISIBLE
         PSR         L,W             < POINT 2 INVISIBLE
         LAD         SEGORG          < INVERSER LES POINTS
         LR          A,W
         LAD         SEGEXT
         LR          A,L
         BSR         INVER
         PLR         L,W
VIS1:    EQU         $
         LA          SEGORG+X        < CALCUL DE DELTA X ET DELTA Y
         SB          SEGEXT+X
         STA         DELTAX
         LA          SEGORG+Y
         SB          SEGEXT+Y
         STA         DELTAY
VIS2:    EQU         $
         LA          SEGORG+X        < POINT INVISIBLE DEBORDE?
         OR          SEGORG+Y
         BSR         DEB
         JE          VIS3
         LA          SEGORG+X        < NON - LE FORCER A DEBORDER
         AD          DELTAX
         STA         SEGORG+X
         LA          SEGORG+Y
         AD          DELTAY
         STA         SEGORG+Y
         JMP         VIS2
VIS3:    EQU         $
         LR          Y,A             < A-T-ON INVERSER LES POINTS
         CPI         2
         JNE         VIS4
         PSR         L,W             < OUI - LES RETABLIR
         LAD         SEGORG
         LR          A,W
         LAD         SEGEXT
         LR          A,L
         BSR         INVER
         PLR         L,W
VIS4:    EQU         $
         LA          SEGORG+X        < RECALCULER POUR VISU
         AD          ORG
         STA         X1
         LA          SEGORG+Y
         AD          DEPY
         STA         Y1
         LA          SEGEXT+X
         AD          ORG
         STA         X2
         LA          SEGEXT+Y
         AD          DEPY
         STA         Y2
<
< TRAITEMENT DU DEBORDEMENT ET TRACAGE DU SEGMENT
<
DEBORD:  EQU         $
         CPZ         GRAPH           < GRAPHIQUE
         JNE         NGRA1
         PSR         W
         LAD         SEG
         LR          A,W
         BSR         DBEC
         PLR         W
         JNE         NGRA1
         PSR         X               < TRACAGE
         LA          XSAV            < VOIR SI ON ENVOIT LE 1ER PT
         CP          X1
         JNE         ENTSEG
         LA          YSAV
         CP          Y1
         JNE         ENTSEG
         LAD         TRAC2           < 2EME UNIQUEMENT
         SVC         0
         JMP         RELPT2
ENTSEG:  EQU         $
         LAD         ALPGRA
         SVC         0
         LAD         TRAC1           < LES DEUX POINTS
         SVC         0
RELPT2:  EQU         $
         LA          X2              < RELEVER DERNIER POINT
         STA         XSAV
         LA          Y2
         STA         YSAV
         PLR         X
NGRA1:   EQU         $
         CPZ         VIDEO           < VIDEO
         JNE         NVID2
         PSR         W
         LAD         SEGORG
         LR          A,W
         BSR         DBEC
         PLR         W
         JNE         NVID2
         BSR         ATRACE          < TRACAGE
NVID2:   EQU         $
         ADRI        -1,W            < SEGMENT SUIVANT
         BR          AREL4
AUTDES:  EQU         $
         LA          PDS2
         NGR         A
         STA         PDS2
         LAD         GRAALP
         SVC         0
         CPZ         D2VUE
         JNE         NVID3
         CPZ         VIDEO
         JNE         NVID3
         IF          ORDI-"T",XWOR%,,XWOR%
<
< ECRIRE L'IMAGE EN SCRATCH
<
         LAI         2
         BSR         LESC
<
< LIRE LA GRILLE CORRESPONDANTE
<
         PLR         X               < NUMERO DE LA GRILLE
         PSR         X
         LA          &ANMGR          < NOM DE LA GRILLE
         LBI         '85             < LECTURE
         BSR         DLEI
<
< FAIRE UN ET DE L'IMAGE ET DE LA GRILLE
<
         BSR         ETIM
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
<
< VISUALISATION DE LA COMPOSANTE CORRESPONDANTE
<
         PLR         A
         PSR         A
         LBI         TVPR
         CPI         2
         JE          CPROUG
         LBI         TVPB
CPROUG:  EQU         $
         STB         STABIL+3
         LAD         STABIL
         SVC         0
<
< GENERATION DE L'IMAGE
<
         LAD         DEMNOM          < DEMANDE DU NOM
         SVC         0
         LAD         LECNOM
         SVC         0
         WORD        '1E35           < SI LE NOM EST VIDE,
         ADRI        -1,B
         CPZR        B
         JLE         NVID5           < ON NE CREE PAS L'IMAGE
         LAD         NMIMG           < DESTRUCTION DE L'IMAGE
         LBI         '83
         BSR         DLEI
         LAD         NMIMG           < ET RECREATION
         LBI         '84
         BSR         DLEI
NVID5:   EQU         $
XWOR%:   VAL         0
NVID3:   EQU         $
<
< DESSIN SUIVANT
<
         PLR         X
         CPZ         D2VUE
         JNE         UNEIMG
         JDX         NEWDES
         JMP         DESFIN
NEWDES:  EQU         $
         PSR         X
         LAI         5               < FERMER FICHIER
         BSR         CLS
         IF          ORDI-"T",XWOR%,,XWOR%
<
< GENERER LA PREMIERE IMAGE
<
         CPZ         VIDEO
         JNE         NVID4
         LAD         NMIBD           < LA DETRUIRE
         LBI         '83
         BSR         DLEI
         LAD         NMIBD           < LA RECREER
         LBI         '84
         BSR         DLEI
NVID4:   EQU         $
XWOR%:   VAL         0
<
< PASSER A L'AUTRE OEIL
<
         LA          GD1
         LY          GD2
         STY         GD1
         STA         GD2
         LAI         6
         BSR         OPO             < OUVRIR LE FICHIER
         LAI         6
         STBY        LEC
         LA          DVUE            < NOUVELLE ORIGINE
         SLRS        1
         NGR         A
         STA         ORG
         BR          AVUEG
<
< UNE SEULE IMAGE
<
UNEIMG:  EQU         $
         IF          ORDI-"T",XWOR%,,XWOR%
         CPZ         VIDEO
         JNE         NVID5
         LAI         'FF             < CODE COULEUR
         JMP         CODCOL
XWOR%:   VAL         0
<
< FIN DU TRAITEMENT
<
DESFIN:  EQU         $
         IF          ORDI-"T",XWOR%,,XWOR%
<
< ECRIRE LA DEUXIEME IMAGE EN SCRATCH
<
         CPZ         VIDEO
         JNE         NVID5
         LAI         2
         BSR         LESC
<
< RELIRE LA PREMIERE
<
         LAD         NMIBD
         LBI         '85
         BSR         DLEI
<
< LA DETRUIRE
<
         LAD         NMIBD
         LBI         '83
         BSR         DLEI
<
< FAIRE UN OU AVEC L'IMAGE PRECEDENTE
<
         BSR         OUIM
<
< METTRE LE CODE DE COULEUR
<
         LAI         '80
CODCOL:  EQU         $
         SWBR        A
         ORI         '80
         LXI         0
         STA         &AIMAG0
<
< GENERER L'IMAGE VIDEO
<
         LAD         DEMNOM
         SVC         0
         LAD         LECNOM
         SVC         0
         WORD        '1E35           < SI NOM VIDE,NE PAS GENERER
         ADRI        -1,B
         CPZR        B
         JLE         NVID5
         LAD         NMIMG           < LA DETRUIRE
         LBI         '83
         BSR         DLEI
         LAD         NMIMG           < LA RECREER
         LBI         '84
         BSR         DLEI
NVID5:   EQU         $
XWOR%:   VAL         0
<
< COPIES EVENTUELLES
<
         CPZ         GRAPH
         JNE         FINCOP
         LB          NCOP
NEWCOP:  EQU         $
         CPZR        B
         JLE         FINCOP
         LAD         DEMCOP
         SVC         0
         LAD         TEMP
         SVC         0
         ADRI        -1,B
         JMP         NEWCOP
FINCOP:  EQU         $
<
< DETRUIRE LES FICHIERS
<
         LAI         6
         BSR         CLS
         LYI         2               < DESTRUCTION PARTIELLE
         BSR         DLFP
         LAD         REDMEM          < RENDRE LA MEMOIRE
         SVC         0
<
< PASSER A UN AUTRE POINT DE VUE
<
         DC          NBOEIL
         PLR         X
         BR          AREVDS
         PAGE
<
< SP DE LECTURE D'UN SEGMENT DANS ZDC
<
RESEGM:  EQU         $
         LAD         DEMSEG          < DEMANDE DU SEGMENT
         SVC         0
         CPZ         NOMSEG          < BOUCLER SI NON-VALIDE
         JE          RESEGM
         STZ         NOMSEG          < LIBERER LA ZDC
         LAD         DELSEG
         SVC         0
         RSR
<
< SP DE PASSAGE DE COORDONNEES DESCRIPTIVES EN COORDONNEES CARTESIENNES
<
CARTE:   EQU         $
         LR          A,W             < @ ZONE RECEPTRICE
         BSR         SEGM            < LIRE LES DEUX POINTS
         LA          X1              < EGALITE DES X?
         CP          X2
         JE          VUX
         LAD         ERRX            < ERREUR SINON
         BR          MESS
VUX:     EQU         $
         SB          X0              < CALCUL DU X
         STA         0,W
         LA          Y0
         SB          Y2              < DU Y
         STA         1,W
         LA          Y1
         SB          Y0              < ET DU Z
         STA         2,W
         RSR
         PAGE
<
< SP D'IMPRESSION D'UN MESSAGE D'ERREUR
<
SPIMP:   EQU         $
         LR          A,W
         LAD         GRAALP          < REVENIR EN ALPHA
         SVC         0
         LBY         0,W             < NB CARACTERES
         STA         ECRERR+2
         LR          W,A
         ADR         A,A             < @ MESSAGE OCTETS
         ADRI        1,A
         STA         ECRERR+1
         LAD         ECRERR          < ECRITURE DU MESSAGE
         SVC         0
         LAD         CCI             < RETOUR AU CCI
         SVC         0
         BR          AREV
<
< SP D'APPEL AU CCI INTERPRETATIF
<
MESCCI:  EQU         $
         SLLS        1               < @ MESSAGE
         STA         CCII+1
         LAD         CCII
         SVC         0
         RSR
         PAGE
<
< SP DE LECTURE ET TRACAGE D'UN SEGMENT
<
TSEG:    EQU         $
         BSR         SEGM            < LIRE LE SEGMENT
         LA          XSAV            < TRACER
         CP          X1
         JNE         TSEG1
         LA          YSAV
         CP          Y1
         JNE         TSEG1
         LAD         TRAC2
         SVC         0
         JMP         TSEG2
TSEG1:   EQU         $
         LAD         ALPGRA
         SVC         0
         LAD         TRAC1
         SVC         0
TSEG2:   EQU         $
         LA          X2
         STA         XSAV
         LA          Y2
         STA         YSAV
         RSR
<
< SP DE CALCUL DE OAB EVENTUEL
<
SPOAB:   EQU         $
         LA          X1
         OR          X2
         OR          Y1
         OR          Y2
         RSR
         PAGE
<
< SP D'OPEN NEW
<
SPOPN:   EQU         $
         STBY        OPENN
         ORI         '30             < FAIRE LE ASSIGN
         STBY        NASSN
         STBY        NFICN
         STBY        NASSS
         LAD         ASSS
         BSR         SPCCI
         LAD         ASSN
         BSR         SPCCI
         LAD         OPENN           < OPEN
         SVC         0
         RSR
<
< SP D'OPEN OLD
<
SPOPO:   EQU         $
         STBY        OPENO
         LAD         OPENO
         SVC         0
         RSR
<
< SP DE CLOSE SAVE
<
SPCLS:   EQU         $
         STBY        CLOSS
         LAD         CLOSS
         SVC         0
         RSR
         PAGE
<
< SP DE DISTANCE OU DE PRODUIT DE VECTEUR
<
SPDIS2:  EQU         $
         FLD         0,W
         FMP         0,L
         FST         FLT1
         FLD         2,W
         FMP         2,L
         FAD         FLT1
         FST         FLT1
         FLD         4,W
         FMP         4,L
         FAD         FLT1
         RSR
<
< SP DE CALCUL DE DISTANCE
<
SPDIST:  EQU         $
         BSR         DIST2
         FST         PARAM
         LAD         PARAM
         BSR         RAC
         FLD         RESUL
         RSR
<
< SP DE PRODUIT DE VECTEURS POUR LE CHANGEMENT DE REPERE
<
SPMATP:  EQU         $
         BSR         DIST2
         FDV         DIV
         FIX
         RSR
<
< SP DE LECTURE ET CONVERSION D'UN NOMBRE HEXADECIMAL
<
SPHEX:   EQU         $
         LR          A,W
HEX3:    EQU         $
         LBY         0,W             < LONGUEUR DU MESSAGE
         STA         QUEST+2
         LR          W,A             < @ MESSAGE
         ADR         A,A
         ADRI        1,A
         STA         QUEST+1
         LAD         QUEST           < QUESTION
         SVC         0
         LAD         LECDON
         SVC         0
         LXI         -4
         LBI         0               < RESULTAT=0
HEX0:    EQU         $
         LBY         &ADON           < FIN?
         CPI         '0D
         JE          HEX2
         CPI         '04
         JE          HEX2
         ADRI        -'30,A          < CONVERSION
         JAL         HEX3
         CPI         9
         JLE         HEX1
         CPI         17
         JL          HEX3
         ADRI        -7,A
         CPI         'F
         JG          HEX3
HEX1:    EQU         $
         SLLS        12
         SCLD        4
         JIX         HEX0
HEX2:    EQU         $
         LR          B,A
         RSR
<
< SP DE CALCUL DE PROJECTION
<
SPPROJ:  EQU         $
         CPZ         PERSP
         JE          PROJ1
         LA          &ABF1           < PAS DE PROJECTION
         FLT
         FST         FLT1
         CPZR        Y               < X OU Y?
         JNE         PROJ0
         CPZ         D2VUE
         JNE         PROJ0
         LA          PDS2            < X. DECALER LES VUES
         SLLS        1
         FLT
         FAD         FLT1
         FST         FLT1
PROJ0:   EQU         $
         BSR         FECH
         JMP         PROJ3
PROJ1:   EQU         $
         LA          &ABF1           < FAIRE LA PROJECTION
         FLT
         FST         FLT1
         LA          GD1
         FLT
         FMP         FLT1
         FST         FLT1
         LA          DIV1
         FLT
         FST         FLT2
         FLD         FLT1
         FDV         FLT2
         FST         FLT1
         BSR         FECH
         CPZR        Y               < X OU Y?
         JNE         PROJ2
         LA          PDS2            < X. DECALER LES VUES
         SARS        2
         FLT
         FAD         FLT1
         FST         FLT1
PROJ2:   EQU         $
         LA          MULT1
         FLT
         FMP         FLT1
         FST         FLT1
PROJ3:   EQU         $
         FIX
         AD          C12
         RSR
<
< APPLIQUER L'ECHELLE
<
SPFECH:  EQU         $
         LA          MULTI
         FLT
         FMP         FLT1
         FST         FLT1
         LA          DIVIS
         FLT
         FST         FLT2
         FLD         FLT1
         FDV         FLT2
         FST         FLT1
         RSR
         PAGE
         IF          ORDI-"T",XWOR%,,XWOR%
<
< SP DE LECTURE-ECRITURE D'UNE IMAGE EN SCRATCH
<
SPLESC:  EQU         $
         LR          A,B             < POSITIONNER EN LECTURE OU ECRITURE
         LBY         ECRSCR
         SWBR        A
         ORR         B,A
         STA         ECRSCR
         LAI         31              < @ SECTEUR(DERNIER)
         STA         ECRSCR+3
AUTSCR:  EQU         $
         SLLS        7               < @ PARTIE IMAGE A LIRE-ECRIRE
         AD          AIMAG0
         SLLS        1               < EN OCTETS
         STA         ECRSCR+1
         LAD         ECRSCR          < FAIRE L'OPERATION
         SVC         0
         DC          ECRSCR+3        < SECTEUR SUIVANT
         LA          ECRSCR+3
         JAGE        AUTSCR
         RSR
XWOR%:   VAL         0
<
< SP DE DELETE-LECTURE-ECRITURE D'UNE IMAGE
<
SPDLEI:  EQU         $
         XR          A,B             < PLACER L'OPERATION
         STBY        SGN
         LR          B,A             < PLACER LE NOM
         LB          ANOM
         LXI         11
         MOVE
         LAI         -3              < PLACER L'INDICATEUR
         STA         &ALONG
         LAD         SGN             < FAIRE L'OPERATION
         SVC         0
         RSR
<
< SP DE DELETE DES FICHIERS
<
SPDLFC:  EQU         $
         LYI         4               < NB DE FICHIERS
AUTDEL:  EQU         $
         LAI         '37             < !ASSIGN 7=S
         STBY        NASSS
         LAD         ASSS
         BSR         SPCCI
         LR          Y,A             < NUMERO DU FICHIER
         NGR         A
         ADRI        '37,A
         STBY        NFICO
         STBY        NASSS
         LAD         ASSS
         BSR         SPCCI
         LAD         ASSO            < !ASSIGN X=O,
         BSR         SPCCI
         LAD         ASSR            < !ASSIGN X=R
         BSR         SPCCI
         LAD         DEMDEL          < DELETE
         SVC         0
         ADRI        -1,Y            < FICHIER SUIVANT
         CPZR        Y
         JG          AUTDEL
         RSR
<
< SP DE LECTURE DE REPONSE OUI/NON
<
SPLCON:  EQU         $
         LR          A,W
         LBI         0
RELCON:  EQU         $
         LBY         0,W             < POSER LA QUESTION
         STA         QUEST+2
         LR          W,A
         ADR         A,A
         ADRI        1,A
         STA         QUEST+1
         LAD         QUEST
         SVC         0
         LAD         LECON           <LIRE LA REPONSE
         SVC         0
         LBY         DONNEE
         CPI         "O"
         JE          LCON1
         CPI         "N"
         JNE         RELCON
         LBI         1
LCON1:   EQU         $
         LR          B,A
         RSR
         PAGE
<
< SP DE CALCUL DE DEBORDEMENT DE L'ECRAN
<
SPDBEC:  EQU         $
         PSR         Y
DB1:     EQU         $
         LYI         0               < INDICATEUR INVERSION POINTS
         LA          X,W             < (X1,Y1) DEBORDE?
         OR          Y,W
         BSR         DEB
         JE          DB2
         LA          X+2,W           < NON - (X2,Y2) DEBORDE?
         OR          Y+2,W
         BSR         DEB
         JNE         DB8
         LYI         1               < CAS OU (X1,Y1) DANS L'ECRAN ET
         BSR         INVER           < (X2,Y2) DEBORDE. INVERSER LES POINTS
DB2:     EQU         $
         LA          Y,W             < CAS (X1,Y1) DEBORDE
         SB          Y+2,W           < CALCULER LA PENTE DU SEGMENT
         FLT                         < ET SON INVERSE
         FST         FLT1
         LA          X,W
         SB          X+2,W
         FLT
         FDV         FLT1
         FST         FLT2
         FLD         FUN
         FDV         FLT2
         FST         FLT1
         CPZ         Y,W
         JGE         DB3
         LA          Y+2,W           < CALCUL DU POINT DE
         NGR         A               < DEBORDEMENT SUR Y=0
         FLT
         FMP         FLT2
         FIX
         AD          X+2,W
         BSR         DEB
         JE          DB3
         STA         X,W             < POINT TROUVE BON
         STZ         Y,W
         JMP         DB7
DB3:     EQU         $
         CPZ         X,W
         JGE         DB4
         LA          X+2,W           < CALCUL DU POINT DE
         NGR         A               < DEBORDEMENT SUR X=0
         FLT
         FMP         FLT1
         FIX
         AD          Y+2,W
         BSR         DEB
         JE          DB4
         STA         Y,W             < POINT BON
         STZ         X,W
         JMP         DB7
DB4:     EQU         $
         LA          Y,W
         CP          M23
         JLE         DB5
         LA          M23             < CALCUL DU POINT DE
         SB          Y+2,W           < DEBORDEMENT SUR Y=1023
         FLT
         FMP         FLT2
         FIX
         AD          X+2,W
         BSR         DEB
         JE          DB5
         STA         X,W             < POINT BON
         LA          M23
         STA         Y,W
         JMP         DB7
DB5:     EQU         $
         LA          M23             < CALCUL DU POINT DE
         SB          X+2,W           < DEBORDEMENT SUR X=1023
         FLT
         FMP         FLT1
         FIX
         AD          Y+2,W
         BSR         DEB
         JNE         DB6
         LYI         1               < INTRACABLE
         JMP         DB8
DB6:     EQU         $
         STA         Y,W             < POINT BON
         LA          M23
         STA         X,W
DB7:     EQU         $
         CPZR        Y               < POINTS INVERSES?
         JE          DB1
         BSR         INVER           < OUI - LES RETABLIR
         JMP         DB1
DB8:     EQU         $
         CPZR        Y               < POSITIONNER LE CODE DE CONDITION
         PLR         Y
         RSR
<
< SP D'INVERSION DE POINTS
<
SPINVE:  EQU         $
         LA          X,W
         LB          X+2,W
         STA         X+2,W
         STB         X,W
         LA          Y,W
         LB          Y+2,W
         STA         Y+2,W
         STB         Y,W
         RSR
         PAGE
         IF          ORDI-"T",XWOR%,,XWOR%
<
< SP DE ET ET DE OU DE L'IMAGE RESIDENTE ET DE L'IMAGE SCRATCH
<
SPET:    EQU         $
         PSR         Y
         LYI         1
         JMP         ETOU
SPOU:    EQU         $
         PSR         Y
         LYI         0
ETOU:    EQU         $
         LBY         ECRSCR          < POSITIONNER EN LECTURE
         SWBR        A
         STA         ECRSCR
         LA          AOBF3           < @ BUFFER
         STA         ECRSCR+1
         LAI         31              < @ SECTEUR
         STA         ECRSCR+3
REASEC:  EQU         $
         LAD         ECRSCR
         SVC         0
         LA          ECRSCR+3        < @ FIN PARTIE IMAGE
         ADRI        1,A
         SLLS        7
         LR          A,X
         LAD         &AIMAG1
         LR          A,W
         LXI         128             < NB MOTS
REAMOT:  EQU         $
         LA          0,W
         CPZR        Y               < OPERATION?
         JNE         CESET
         OR          &AXBF3
         JMP         ETOU1
CESET:   EQU         $
         AND         &AXBF3
ETOU1:   EQU         $
         STA         0,W
         ADRI        -1,W
         JDX         REAMOT
         DC          ECRSCR+3        < SECTEUR SUIVANT
         JGE         REASEC
         PLR         Y
         RSR
XWOR%:   VAL         0
<
< SP DE TEST SI VALEUR DE A ENTRE 0 ET 1023
<
SPDEB:   EQU         $
         LBI         0               < DEBORDEMENT A PRIORI
         JAL         SPDB1
         CP          M23
         JG          SPDB1
         LBI         1               < POINT BON
SPDB1:   EQU         $
         CPZR        B               < POSITIONNEMENT DU CODE DE COND.
         RSR
<
< SP DE CALCUL DE LA DIFFERENCE DES PRODUITS DE COORDONNEES
<
SPDIFF:  EQU         $
         FLD         0,W
         FMP         2,L
         FST         FLT1
         FLD         2,W
         FMP         0,L
         FSB         FLT1
         RSR
<
< SP DE CALCUL DE DIFFERENCE ENTRE DEUX POINTS
<
SPDIFC:  EQU         $
         FLD         0,L
         FSB         0,W
         XR          Y,W
         FST         0,W
         XR          Y,W
         FLD         2,L
         FSB         2,W
         XR          Y,W
         FST         2,W
         XR          Y,W
         FLD         4,L
         FSB         4,W
         XR          Y,W
         FST         4,W
         XR          Y,W
         RSR
<
< SP D'INVERSION DE COORDONNEES
<
SPINCO:  EQU         $
         FLD         XV
         FST         FLT1
         FLD         YV
         FST         XV
         FLD         FLT1
         FST         YV
         FLD         XX1
         FST         FLT1
         FLD         YY1
         FST         XX1
         FLD         FLT1
         FST         YY1
         RSR
         PAGE
         USE         L,ADLOC
<
<
<        T R A C E   D I C H O T O M I Q U E   D ' U N   S E G M E N T  :
<
<
DICO:    EQU         $
         LA          DICOX1          < A=X1.
         AD          DICOX2          < A=X1+X2.
         SLRS        1               < A=(X1+X2)/2.
         STA         DICOX           < X DU MILIEU DE M1M2.
         LA          DICOY1          < A=Y1.
         AD          DICOY2          < A=Y1+Y2.
         SLRS        1               < A=(Y1+Y2)/2.
         STA         DICOY           < Y DU MILIEU DE M1M2.
<
< POSITION DE M PAR RAPPORT A M1 :
<
         SB          DICOY1          < A=Y-Y1.
         JANE        DICO31          < M#M1.
         LA          DICOX           < A=X.
         SB          DICOX1          < A=X-X1.
         JAE         DICO32          < M=M1.
<
< POSITION DE M PAR RAPPORT A M2 :
<
DICO31:  EQU         $
         LA          DICOY           < A=Y.
         SB          DICOY2          < A=Y-Y2.
         JANE        DICO30          < M#M2 ET M#M1.
         LA          DICOX           < A=X.
         SB          DICOX2          < A=X-X2.
         JANE        DICO30          < M#M2 ET M#M1.
<
< CAS OU M=M1 OU M=M2 :
<
DICO32:  EQU         $
         LX          DICOX
         LY          DICOY
         BSR         ASET            < AFFICHAGE DU POINT M=(M1+M2)/2.
         RSR                         < ARRET PROVISOIRE DE LA DICHOTOMIE
                                     < DESCENDANTE.
<
< CAS OU M#M1 ET M#M2 :
<
DICO30:  EQU         $
         LA          DICOX2          < A=X2.
         LB          DICOY2          < B=Y2.
         PSR         A,B             < SAVE LE POINT M2 COURANT.
         LA          DICOX           < A=X.
         STA         DICOX2          < X2<--X.
         LA          DICOY           < A=Y.
         STA         DICOY2          < Y2<--Y.
         BSR         ADICO           < DICHOTOMIE SUR LE SEGMENT M1M.
         LX          DICOX2          < X=X2.
         LY          DICOY2          < Y=Y2.
         BSR         ASET            < AFFICHAGE DU POINT M2
         STX         DICOX1          < X1<--X2.
         STY         DICOY1          < Y1<--Y2.
         PLR         A,B             < RESTAURATION DU POINT M2 APRES
                                     < LE CHANGEMENT DU POINT M1.
         STA         DICOX2          < RESTAURE X2.
         STB         DICOY2          < RESTUARE Y2.
         JMP         DICO            < VERS LA POURSUITE DE LA DICHOTOMIE.
         PAGE
<
<
<        M I S E   D ' U N   P O I N T   A   1  :
<        ET DE CES VOISINS IMMEDIATS(SAUF SI HORS IMAGE)
<
<        ARGUMENTS :
<                    X ET Y CONTIENNENT L'X ET L'Y DU POINT.
<                    C=@IMAG.
<
<
SET:     EQU         $
         PSR         B
         LBI         3               < LIGNE PRECEDENTE ET SUIVANTE
         ADRI        -1,Y
NEWLGP:  EQU         $
         ADRI        -1,X            < POINT VOISINS
         BSR         ASET1
         ADRI        1,X
         BSR         ASET1
         ADRI        1,X
         BSR         ASET1
         ADRI        -1,X
         ADRI        1,Y             < LIGNE SUIVANTE
         ADRI        -1,B
         CPZR        B
         JG          NEWLGP
         ADRI        -2,Y
         PLR         B
         RSR
<
<
<        MISE D'UN SEUL POINT A UN EN VERIFIANT LE DEBORDEMENT
<
<
SET1:    EQU         $
         PSR         B,X,C
         LR          Y,A
         JAL         RETSET          < DEBORDEMENT EN LIGNE
         CP          NLIG
         JG          RETSET
         MP          NMPL            < CONVERSION DE L'Y DU POINT EN
                                     < NUMERO DE MOT.
         ADR         B,C
         LR          X,A
         JAL         RETSET          < DEBORDEMENT EN POINT
         CP          NLIG
         JG          RETSET
         SLRS        4
         ADR         A,C             < C=@MOT CONTENANT LE POINT (X,Y).
         LAI         'F
         ANDR        A,X             < CALCUL DE X MODULO 16.
                                     < X=NUMERO DU BIT DANS LE MOT.
         LA          0,C             < A=MOT CONTENANT LE POINT (X,Y).
         SBT         0,X             < MISE DU POINT A 1.
         STA         0,C             < MISE A JOUR DE CE MOT.
RETSET:  EQU         $
         PLR         B,X,C
         RSR
         PAGE
<
<
<        T R A C E   D ' U N   S E G M E N T   V I D E O  :
<
<
TRACE:   EQU         $
         PSR         A,X,Y,C
         LA          AIMAG0
         LR          A,C             < C=@IMAGE VIDEO.
<
< CALCUL DES EXTREMITES M1 ET M2 DU SEGMENT VIDEO :
<
         LA          SEGORG+X        < A=X(ORIGINE GRAPHIQUE).
         SLRS        DEDX            < REDUCTION VIDEO.
         STA         DICOX1          < RANGEMENT DE X1.
         LA          SEGORG+Y        < A=Y(ORIGINE GRAPHIQUE).
         SLRS        DEDY            < REDUCTION VIDEO.
         NGR         A,A
         AD          NLIG            < INVERSION DUE AU FAIT QUE LES
                                     < AXES Y VIDEO ET GRAPHIQUE SONT
                                     < INVERSES.
         STA         DICOY1          < RANGEMENT Y1.
         LA          SEGEXT+X        < A=X(EXTREMITE GRAPHIQUE).
         SLRS        DEDX            < REDUCTION VIDEO.
         STA         DICOX2          < RANGEMENT DE X2.
         LA          SEGEXT+Y        < A=Y(EXTREMITE GRAPHIQUE).
         SLRS        DEDY            < REDUCTION VIDEO.
         NGR         A,A
         AD          NLIG            < INVERSION DES AXES Y.
         STA         DICOY2          < RANGEMENT DE Y2.
<
< TRACE DICHOTOMIQUE DU SEGMENT :
<
         LX          DICOX1          < X=X1.
         LY          DICOY1          < Y=Y1.
         BSR         ASET            < AFFICHAGE DU POINT M1.
         BSR         ADICO           < TRACE DU SEGMENT M1M2.
         LX          DICOX2          < X=X2.
         LY          DICOY2          < Y=Y2.
         BSR         ASET            < AFFICHAGE DU POINT M2.
         PLR         A,X,Y,C
         RSR
         END



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.