<
<
<        A S S E M B L A G E   G R / G T  :
<
<
<        VIDEO=1     IF VIDEO,,X100, ASSEMBLAGE GR,
<        VIDEO=0     IF VIDEO,,,X100 ASSEMBLAGE GT.
<
<
         IF          VIDEO,,,X100
NMPROC:  VAL         "GT"            < NOM DU PROCESSEUR.
         IDP         "GT - RELEASE 20/02/80"
X100:    VAL         0
         IF          VIDEO,,X100,
NMPROC:  VAL         "GR"            < NOM DU PROCESSEUR.
         IDP         "GR - RELEASE 01/06/79"
X100:    VAL         0
         IDP         "JOHN F. COLONNA"
<
<        D I M E N S I O N   E S P A C E  :
<
DIM:     VAL         3
<
<        T A I L L E   E C R A N  :
<
SIZE:    VAL         1024
         EOT         #SIP DEF PROCESSEUR#
         PROG
         WORD        GRAPH           < ADRESSE DE DEPART DU PROCESSEUR.
         WORD        0               < POUR FAIRE $=$+1.
PGRAPH:  EQU         $               < P DE LANCEMENT DE GRAPHIQUE2
                                     < LORS D'UN APPEL PAR !GE.
                                     < (A NOTER : P='12).
         LRP         L
         BR          -2,L            < ENTREE DANS LE PROCESSEUR.
         PAGE
         EOT         #SIP DEFINITION ITEM#
         PROG        P16
         EOT         #SIP DEFINITION CMS5#
         IF          VIDEO,,,X100
         EOT         #SIP IMAGE 256#
NOM:     EQU         ZERO+PILE+5-LNOM-2
IMAG:    EQU         NOM+LNOM+2
         IF          ORDI-"S",XWOR%,,XWOR%
ENTIM:   EQU         IMAG-LENTIM     < EN-TETE DE L'IMAGE (INTERPOLATION
                                     < VIDEO PAR CMS5).
XWOR%:   VAL         0
X100:    VAL         0
         IF          VIDEO,,X100,
LIMAG:   VAL         0               < POUR GR, LIMAG=0 !!!
X100:    VAL         0
         PAGE
<
<
<        P I L E   D E   R E C U R S I V I T E  :
<
<
<        FONCTION :
<                      CETTE PILE PERMET LA RECURSIVITE
<                    DU LANGAGE GRAPHIQUE : IMBRICATION
<                    DES APPELS DE PROGRAMMES , IMBRICATION
<                    DES BOUCLES DE REPETITIONS.
<
<
<        FORMAT :
<                      ELLE EST FAITE D'ENTREES
<                    DE DOUBLE-MOTS QUE L'ON EMPILE
<                    ET DEPILE SUIVANT LES BESOINS.
<
<
IR:      VAL         0               < MOT0 D'UNE ENTREE : CONTIENT
                                     < LA CAUSE DE L'EMPILEMENT ET
                                     < L'INDEX DE RETOUR AU DEPILEMENT.
                                     < BIT0=1 : MODE INTERACTIF DE GR ,
                                     < BIT1=1 : PUSH POUR REPETITIONS ,
                                     < BIT2=1 : PUSH POUR APPEL PROG.
                                     < BIT3=1 : PUSH POUR SAUT-PROGRAMME
CODREP:  VAL         '40             < PUSH POUR REPETITIONS.
BITREP:  VAL         1               < NUMERO DU BIT DE REPETITIONS.
CODPRO:  VAL         '20             < PUSH POUR APPEL PROGRAMME.
BITPRO:  VAL         2               < NUMERO DU BIT D'APPEL PROGRAMME.
                                     < A T T E N T I O N  : BITPRO
                                     < UTILISE AVEC BITDEF SIGNIFIE
                                     < QU'ON APPELLE UN PROGRAMME
                                     < AVEC CHANGEMENT D'ITEM COURANT.
CODDEF:  VAL         '10             < PUSH POUR DEFINITION PROGRAMME.
BITDEF:  VAL         3               < NUMERO DU BIT DE SAUT DEFINITION.
                                     < A T T E N T I O N  : BITDEF ,
                                     < UTILISE AVEC BITPRO , SIGNIFIE
                                     < Q'ON APPELLE UN PROGRAMME AVEC
                                     < CHANGEMENT DE L'ITEM COURANT.
CDCP:    VAL         1               < MOT1 D'UNE ENTREE : CONTIENT
                                     < LE COMPTE DES DO , ET LE COMPTE
                                     < ALGEBRIQUE DES PARENTHESES.
CD:      VAL         2*CDCP+0        < OCTET0(MOT1)=NBRE DE REPETITIONS
                                     < (DO) RESTANT A FAIRE (INDEX
                                     < DE TYPE OCTET).
CP:      VAL         2*CDCP+1        < OCTET1(MOT1)=COMPTE ALGEBRIQUE
                                     < DES PARENTHESES RENCONTREES
                                     < SOUS CE NIVEAU :
                                     < '(' : +1 ,
                                     < ')' : -1.
LEPR:    VAL         2               < NBRE DE MOTS OCCUPES PAR UNE
                                     < ENTREE DE LA PILE PIR.
LPR:     VAL         30              < NOMBRE D'ENTREES DE LA PILE
                                     < RECURSIVITE.
         PAGE
<
<        T R A N S F O R M A T I O N S   E L E M E N T A I R E S  :
<
TRP:     VAL         1               < ROTATION TRIGO. DE +15 DEGRE.
TRM:     VAL         2               < ROTATION ANTITRIGO DE -15 DEGRE.
TR1:     VAL         3               < ROTATION DE +PI/2.
TR3:     VAL         4               < ROTATION DE +3*PI/2 (-PI/2).
TSO:     VAL         5               < SYMETRIE PAR RAPPORT A L'ORIGINE.
TSX:     VAL         6               < SYMETRIE PAR RAPPORT A OX.
TSY:     VAL         7               < SYMETRIE PAR RAPPORT A OY.
TS1:     VAL         8               < SYMETRIE 1ERE BISSECTRICE.
TA:      VAL         9               < DESORTHOGONALISATION AIGUE.
TO:      VAL         10              < DESORTHOGONALISATION OBTUE.
TH:      VAL         11              < DESORTHOGONALISATION HAUTE.
TB:      VAL         12              < DESORTHOGONALISATION BASSE.
NT:      VAL         12              < NBRE DE TRANSFORMATIONS
                                     < ELEMENTAIRES RECONNUES.
         PAGE
<
<
<        L O C A L  :
<
<
         TABLE
DEMIN:   WORD        '0100           < ENTREE ALPHA-NUMERIQUE SANS ECHO.
         WORD        ABUFIN
         WORD        1
         IF          VIDEO,,,X100
         IF          ORDI-"S",XWOR%,,XWOR%
STABIL:  WORD        '8A01           < STABILISATION IMAGE VIDEO.
         WORD        IMAG-ZERO*2
         WORD        LIMAG*2
         WORD        0               < PAS DE COULEUR A L'INITIALISATION...
XWOR%:   VAL         0
X100:    VAL         0
         LOCAL       LOCGR
LOC:     EQU         $
<
<        S E G M E N T   C O U R A N T  :
<
SEG:     EQU         $
         DZS         2*DIM
SEGORG:  EQU         SEG
SEGEXT:  EQU         SEG+DIM
         IF          VIDEO,,X100,
NOMSEG:  WORD        0               < MOT DE VALIDATION DE L'INFORMA-
                                     < TION EN ZDC.
LONSEG:  VAL         $-NOMSEG+4*2    < NBRE D'OCTETS EN ZDC.
X100:    VAL         0
SEG2:    EQU         $               < PROJECTION PLANNE DE SEGC.
<
<        NOTA :
<                      LES 4 PREMIERS MOTS DE SEG2
<                    CONTIENNENT M1 ET M2 , ET LES
<                    4 DERNIERS N1 ET N2.
<
         DO          4
         DZS         2               < COUPLE (Z,X).
         DZS         2               < TAMPON DE PRUDENCE (CF. LE CAS
                                     < OU 2 POINTS NON OVERCREEN
                                     < ONT ETE DECOUVERTS ; LORS DE
                                     < LA RECHERCHE DU POINT D'INTER-
                                     < SECTION SUIVANT , W POINTE A LA
                                     < SUITE DE 'INTER' .....)
SEGOR2:  EQU         SEG2            < PROJECTION DE L'ORIGINE
                                     < DU SEGMENT COURANT.
SEGEX2:  EQU         SEG2+2          < PROJECTION DE L'EXTREMITE DU
                                     < SEGMENT COURANT.
SEGT:    EQU         $
         DZS         2               < DESTINE AU BON POSITIONNEMENT
                                     < DES TEXTES ALPHA-NUMERIQUES.
<
< EXTREMITES M1 ET M2 DU SEGMENT COURANT PROJETE :
<
NZ:      VAL         0               < COORDONNEE VERTICALE DE M1/M2.
NX:      VAL         1               < COORDONNEE HORIZONTALE DE M1/M2.
X1:      EQU         SEGOR2+NX       < X(M1).
Z1:      EQU         SEGOR2+NZ       < Z(M1).
X2:      EQU         SEGEX2+NX       < X(M2).
Z2:      EQU         SEGEX2+NZ       < Z(M2).
<
< EQUATION DE LA DROITE SUPPORT DU SEGMENT
< COURANT PROJETE SUR L'ECRAN :
<
P1:      WORD        0               < P1=Z2-Z1.
MP1:     WORD        0               < MP1=-P1.
P2:      WORD        0               < P2=X2-X1.
P3:      DZS         2               < P3=X2*Z1-X1*Z2.
                                     < (DOUBLE PRECISION).
<
< DEFINITION DES POINTS M1,M2,N1,N2 :
< (DANS LA ZONE SEG2)
<
M1:      VAL         0
M2:      VAL         2
PN1:     VAL         4
PN2:     VAL         6
<
< POINTS D'INTERSECTION DE LA DROITE M1M2 AVEC L'ECRAN :
<
INTER:   EQU         SEG2+PN1        < SOIENT N1 ET N2 CES 2 POINTS.
                                     < S'ILS EXISTENT.
<
<        C O N S T A N T E S  :
<
Y:       VAL         0               < CORRDONNEE Y D'UN POINT.
X:       VAL         1               < COORDONNEE X D'UN POINT.
WHOS:    WORD        0               < LISTE DES CONSTANTES A PUSHER/
                                     < PULLER DANS STACK.
<
< DEBUT DE LA LISTE DES CONSTANTES 'STACKABLES' :
<
CTTE:    WORD        1               < CONSTANTE DE GENERATION
                                     < GRAPHIQUE (1 INITIALEMENT).
SCALE:   EQU         CTTE
CV:      DZS         2               < COORDONNEES Y ET X DU CURSEUR
                                     < GRAPHIQUE VIRTUEL.
CVG:     EQU         CV
DY1:     WORD        1               < PAS D'INCREMENTATION/DECRE-
                                     < MENTATION DE Y(CURSEUR VIRTUEL).
DX1:     WORD        1               < PAS D'INCREMENTATION/DECRE-
                                     < MENTATION DE X(CURSEUR VIRTUEL).
ARGF:    WORD        -1              < INDEX DE LA 1ERE PRIMITIVE
                                     < DE L'ARGUMENT FORMEL COURANT.
TRANS:   WORD        0               < MEMORISATION DES TRANSFORMATIONS
                                     < ELEMENTAIRES CONSTITUANT LA
                                     < TRANSFORMATION COURANTE PAR BITS :
                                     < BIT1 : PRESENCE DE 'RP' ,
                                     < BIT2 : PRESENCE DE 'RM' ,....
                                     < ......
                                     < BIT9 : PRESENCE DE 'S2'.
TTRANS:  DZS         NT+1/2+1        < COMPTE DES REPETITIONS DES
                                     < TRANSFORAMTIONS ELEMENTAIRES A
                                     < RAISON D'UN OCTET PAR TRANS-
                                     < FORMATION.
NSTACK:  VAL         $-WHOS-1        < NBRE DE CONSTANTES STACKABLES.
<
< FIN DE LA LISTE DES CONSTANTES 'STACKABLES' :
<
<
<        3 - C U R S E U R  :
<
X3:      VAL         0               < X(3-CURSEUR).
Y3:      VAL         1               < Y(3-CURSEUR).
Z3:      VAL         2               < Z(3-CURSEUR).
D3:      VAL         3               < EMPLACEMENT DU 1ER DELTA (DX3).
CV3:     DZS         DIM             < CONTIENT RESPECTIVEMENT :
                                     < X3,Y3,Z3,DX3,DY3,DZ3 DU 3-CURSEUR
         DO          DIM
         WORD        1               < LES PAS SONT INITIALISES A 1.
C1:      WORD        CV3+Y3,X        < RELAI INDEXE VERS LA COORDONNEE
                                     < DU 3-CURSEUR CONTENUE DANS CV+Y.
                                     < (INITIALISE SUR Y3).
C2:      WORD        CV3+X3,X        < RELAI VERS LA COORDONNEE DU
                                     < 3-CURSEUR CONTENUE DANS CV+X.
                                     < (INITIALISE SUR X3).
<
<        S A U V E G A R D E   D E   L A   T R A N S F O R M A T I O N
<                    C O U R A N T E  :
<
SAVET:   EQU         $
         DO          DIM
         DZS         NT+1/2+1+1      < UNE ZONE PAR PLAN DE COORDONNEES.
AT:      WORD        SAVET           < ADRESSE DE LA ZONE DE SAUVEGARDE
                                     < DES TRANSFORMATIONS DANS LE
                                     < PLAN COURANT.
<
<        L O N G U E U R   D U   C O N T E X T E  :
<
LCON:    VAL         $-WHOS-1        < LONGUEUR MOTS DU CONTEXTE.
<
<        C O N S T A N T E S  :
<
WORK:    WORD        0               < CONSTANTE MEMORISANT LE TYPE
                                     < DE BIBLIOTHEQUE :
                                     < =-1 : BIBLI EN BASCULE,
                                     < =0  : OVERLAY DE PROGRAMME,
                                     < =1  : BIBLI AU DELA DES 4K.
RETSVC:  WORD        0               < CONDITIONS DE RETOURS DES SVC.
IEG:     WORD        0               < INDEX COURANT DU PROGRAMME
                                     < GRAPHIQUE : DONNE L'INSTRUCTION
                                     < GRAPHIQUE COURANTE , OU LA
                                     < SUIVANTE A EXECUTER (SUIVANT
                                     < L'INSTANT OU L'ON SE PLACE).
ACCEB:   WORD        LTNI            < CONSTANTE UTILISEE POUR LES
                                     < CHANGEMENTS D'ITEM , ET LE
                                     < PASSAGE D'UN ITEM A L'AUTRE :
                                     < ACCEB>0 : ITEM COURANT=ITEM1 ,
                                     < ACCEB<0 : ITEM COURANT=ITEM2.
                                     < (TRANSLATION DE TYPE MOT).
ALTNI2:  WORD        2*LTNI          < LONGUEUR MAX TOTALE D'UN
                                     < ITEM (EN-TETE+CORPS).
F3:      WORD        0               < FONCTION DE CODAGE DES <NOM>.
                                     < ET @ITEM DE RECHERCHE LORS DE
                                     < LA RECHERCHE DES PROGRAMMES.
                                     < CONTIENT AUSSI LA VARIABLE
                                     < TRANST UTILISEE LORS DES
                                     < DEPLACEMENTS DU CV.
ADXDY:   EQU         F3              < RELAI TEMPORAIRE VERS DX OU DY.
NCP:     WORD        NBCAR*NBLIG     < NBRE DE CARACTERES DANS L'ITEM.
NCALL:   WORD        LCALL,X         < NOM DES BRANCHES D'OVERLAY.
                                     < DE RETOUR DE 'GR'.
AGON1:   WORD        N1              < NOEUD D'ACCES A LA PRIMITIVE
                                     < SUIVANTE LORS DE L'ANALYSE
                                     < SYNTAXIQUE DU LANGAGE.
AGON22:  WORD        N22             < NOEUD DE BRANCHEMENT LORS DE
                                     < LA RENCONTRE DE CARACTERES
                                     < HORS-LA PAGE (GET CARACTER).
KIN:     WORD        -1              < COMPTEUR DES ENTRIES DANS GR.
         IF          VIDEO,,X100,
ITEXTE:  WORD        0               < 0 : APPELS IMPLICITES VALIDES,
                                     < 1 : LES APPELS IMPLICITES SONT
                                     <     REMPLACES PAR UNE EDITION
                                     <     ALPHANUMERIQUE DU TEXTE.
X100:    VAL         0
         IF          VIDEO,,,X100
<
< STABILISATION VIDEO :
<
AVIS:    WORD        VIS             < ROUTINE ESCLAVE,
         IF          ORDI-"T",XWOR%,,XWOR%
ASP3:    WORD        SP3             < ROUTINE MAITRE OU 0, SI L'ON
                                     < N'EST PAS SOUS :SYS...
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
MODEV:   WORD        0               < MOT DE CONTROLE DU MODE DE TRACE DIRECT
                                     < DANS LA MEMOIRE 'MEMTV'.
AVSEG:   WORD        VSEG            < DICHOTOMIE D'UN SEGMENT VIDEO.
ASTAB:   WORD        STABIL          < DEMANDE DE STABILISATION VIDEO.
ASTAB3:  WORD        STABIL+3
XWOR%:   VAL         0
X100:    VAL         0
<
< CONSTANTES D'ECHELLE GENERALE :
<
SCAL:    VAL         3*4             < ECHELLE GENERALE INITIALE :
                                     < ON PREND UN MULTIPLE DE 3 ET DE 4
                                     < POUR SIMPLIFIER LES PROBLEMES D'ECRAN
                                     < DE TV ET VISU...
ECH:     BYTE        SCAL;SCAL       < ECHELLE GENERALE COURANTE (EX/EY).
ECH0:    WORD        SCAL            < ECHELLE GENERALE INITIALE.
                                     < FACTEUR REEL APPLIQUE EST :
                                     < ECH/ECH0.
<
< CONSTANTES TRI-DIMENSIONNELLES :
<
ACV3:    WORD        CV3,X           < DONNE L'ADDRESSE INDEXEE DE CV3.
         IF          ORDI-"T",XWOR%,,XWOR%
MPROJ:   WORD        7;4;-3;3;4      < MATRICE DE PROJECTION.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
MPROJ:   WORD        2;1;-1;1;1      < MATRICE DE PROJECTION : DEUX CAS :
                                     < 'DIV'>0 (=2) : PROJECTION PAR SIN(TETA)
                                     <                ET COS(TETA),
                                     < 'DIV'<0      : PROJECTION PERSPECTIVE
                                     <                AVEC : P=ABS(DIV).
XWOR%:   VAL         0
         IF          VIDEO,,,X100
<
< CONSTANTES VIDEO :
<
WORKS:   WORD        '0000           < COULEUR A DONNER A L'IMAGE
                                     < LORS DES ERASES ('0000/'FFFF).
NMPL:    WORD        CNMPL           < NBRE DE MOTS DE 16 BITS PAR LIGNE.
NLIG:    WORD        SIZE/RDY-1      < NBRE DE LIGNES-1 PAR ECRAN.
AIMAG:   WORD        IMAG            < @MOT DE L'IMAGE.
ALI:     WORD        LIMAG           < LONGUEUR MOT DE L'IMAGE.
AAI:     WORD        IMAG-1,X        < RELAI DE RAZ DE L'IMAGE.
ACNSYS:  ASCI        ":SYS"          < NE SERT QU'A L'INITIALISATION DE GT...
DICOX:   EQU         ACNSYS+0        < X(POINT COURANT),
DICOY:   EQU         ACNSYS+1        < Y(POINT COURANT).
DICOX1:  WORD        0               < X(ORIGINE COURANTE),
DICOY1:  WORD        0               < Y(ORIGINE COURANTE).
DICOX2:  WORD        0               < X(EXTREMITE COURANTE),
DICOY2:  WORD        0               < Y(EXTREMITE COURANTE).
APOINT:  WORD        POINT           < @INSTRUCTION VARIABLE SBT/RBT.
         IF          ORDI-"T",XWOR%,,XWOR%
ADICO:   WORD        DICO            < ROUTINE RECURSIVE DE DICHOTOMIE.
ASET:    WORD        SET             < ROUTINE DE MARQUAGE DE (X,Y) A 0/1.
XWOR%:   VAL         0
X100:    VAL         0
<
<        F O R M A T   D E S   M A T R I C E S
<        D E   T R A N S F O R M A T I O N  :
<
DIV:     VAL         0               < MOT0 : CONTIENT UN DIVISEUR
                                     < COMMUN A TOUS LES COEFFICIENTS ;
                                     < ON PEUT DONC AINSI REPPRESENTER
                                     < LES COEFFICIENTS EN NBRE ENTIERS;
                                     < SI CE DIVISEUR EST EGAL A
                                     < L'UNITE (1) , ON PEUT LE
                                     < REMPLACER PAR 0 ....
                                     < OU TOUT NOMBRE NEGATIF , ET
                                     < PAR EXEMPLE DES RELAIS INDEXES !!!
A11:     VAL         1
A12:     VAL         2
A21:     VAL         3
A22:     VAL         4
NEUTRE:  VAL         5               < 'NEUTRE' DONNE LA PUISSANCE A
                                     < LAQUELLE IL FAUT ELEVER LA
                                     < MATRICE POUR OBTENIR L'OPERATEUR
                                     < NEUTRE (1,0,0,1).
<        ON A :
<                           (A11  A12)
<                    M=1/DIV(        )
<                           (A21  A22)
<
<        T R A N S F O R M A T I O N S   E L E M E N T A I R E S  :
<
MRP:     WORD        25;24;-7;7;24;22
MRM:     WORD        25;24;7;-7;24;22
MR1:     EQU         $
ATCOM:   WORD        TCOM-'20,X      < TABLE DES PRIMITIVES EN ACCES
                                     < DIRECT , TRANSLATEE PAR 'SPACE'.
         WORD        0;-1;1;0;4
MR3:     EQU         $
LWHOSI:  WORD        WHOS+NSTACK+1,X < REALI VERS LES CONSTANTES
                                     < STACKABLES AU 'PUSH'  IN STACK.
         WORD        0;1;-1;0;4
MSO:     EQU         $
LWHOSO:  WORD        WHOS,X          < RELAI VERS LES CONSTANTES
                                     < STACKABLES AU 'PUL'' IN STACK.
         WORD        -1;0;0;-1;2
MSX:     EQU         $
NTRANS:  WORD        TTRANS,X        < NBRE DE FOIS QUE LA TRANSFORMA-
                                     < TION ELEMENTAIRE DOIT ETRE
                                     < REPETE (UN OCTET PAR TRANS-
                                     < FORMATION).
         WORD        1;0;0;-1;2
MSY:     EQU         $
APRC:    WORD        PIR,X           < ENTREE COURANTE DANS LA PILE
                                     < DE RECURSIVITE.
         WORD        -1;0;0;1;2
MS1:     EQU         $
AI1:     WORD        ZERO+PILE-LTNI+LTN,X
                                     < RELAI VERS L'ITEM1 A PRIORI , POUR
                                     < METTRE LE TYPE 'D'.
         WORD        0;1;1;0;2
MA:      WORD        25;25;7;0;24
C1023:   WORD        SIZE-1          < NBRE DE POINTS-1 SUR UN AXE,
                                     < ET DEGRE D'IDEMPOTENCE DE MA.
BORNE:   EQU         C1023
MO:      WORD        25;25;-7;0;24
C1024:   WORD        SIZE            < NBRE DE POINTS SUR UN AXE,
                                     < ET DEGRE D'IDEMPOTENCE DE MO.
MH:      WORD        25;24;0;7;25
C100:    WORD        '100            < DEGRE D'IDEMPOTENCE DE MH ,
                                     < AINSI QUE CONSTANTE DE DECONCA-
                                     < TENATION DES PRIMITIVES DANS
                                     < L'INTERPRETEUR.
MB:      WORD        25;24;0;-7;25
CFFF:    WORD        '0FFF           < POUR RAZ DES BITS 0,1,2,3.
                                     < ET DEGRE D'IDEMPOTENCE DE 'MB'.
<
<        R E L A I   D E S   T A B L E S  :
<
AIC:     WORD        ZERO+PILE-LTNI+LTN,X
                                     < RELAI VERS L'ITEM COURANT.
AIR:     WORD        ZERO+PILE-LTNI+LTN,X
                                     < RELAI VERS L'ITEM DANS LEQUEL
                                     < ON RECHERCHE LA DEFINITION
                                     < D'UN PROGRAMME.
AI2:     WORD        ZERO+PILE-LTNI+LTN-LTNI,X
                                     < RELAI VERS L'ITEM2.
CBTR:    WORD        LIMAG+'1000-PILE+LTNI-LTN+LTNI+LTN
                                     < CTTE DE PASSAGE DE ITEM2
                                     < AU DELA DE L'IMAGE VIDEO...
XX1:     VAL         LEPR*LPR-LEPR   < NBRE DE MOTS DE PIR-LEPR.
BPR:     WORD        PIR             < BASE DE LA PILE DE RECURSIVITE.
TPR:     WORD        PIR+XX1         < TOP DE LA PILE DE RECURSIVITE.
LSTACK:  VAL         30              < LONGUEUR DE 'STACK'.
ASTACK:  WORD        STACK           < RELAI POINTEUR DE 'STACK'.
ARACI:   WORD        RACB            < @BRANCHE D'OVERLAY.
APILD:   WORD        PILD            < PILE DE BONNE TAILLE.
APILDR:  WORD        PILE-1          < PILE DE SMC.
<
<        R E L A I   D E S   R O U T I N E S  :
<
AGOGER:  WORD        GOGER           < ADRESSE DE RETOUR SI ALT-MODE.
ASVC:    WORD        RSVC            < ROUTINE D'EXECUTION DES SVC.
AOVL:    WORD        OVL             < CHAGEMENT DES OVERLAYS.
ADIV:    WORD        DIVENT          < DIVISION ENTIERE PAR EXCES
                                     < OU PAR DEFAUT , SUIVANT LES CAS.
AEXECS:  WORD        EXECS           < PRIMITIVE 'S'.
AOVS:    WORD        OVS             < TEST D'OVERSCREEN.
ACALX:   WORD        CALX            < RESOLUTION EQUATION EN X.
ACALZ:   WORD        CALZ            < RESOLUTION EQUATION EN Z.
AGTCAR:  WORD        GETCAR          < ACCES A UN CARACTERE DANS
                                     < LA RECHERCHE DES PROGRAMMES.
AGTK:    WORD        GTK             < ACCES A UN CARACTERE A CODER.
ASELDX:  WORD        SELDX           < POUR SELECTION INTERACTIVE DE DX.
ASELDY:  WORD        SELDY           < POUR SELECTION INTERACTIVE DE DY.
AFECH:   WORD        FECH            < APPLICATION ECHELLE GENERALE.
ALOOPB:  WORD        LOOPB           < RETOUR DE L'INTERPRETEUR.
AE111:   WORD        E111            < RETOUR DE PRIMGI VERS PRIMG.
AGOGE:   WORD        GOGE            < RETOUR OK A 'GE' : L'ITEM
                                     < COURANT RECOIT LE TYPE 'D'.
ACHGTI:  WORD        CHGTI           < CHANGEMENT D'ITEM COURANT.
APROJ:   WORD        PROJET          < ROUTINE DE PROJECTION PLANE.
ASPDXY:  WORD        SPDXY           < RESTAURATION DE 2 DES 3 PAS
                                     < A PARTIR DE DX ET DY.
<
<        D E M A N D E S   A   C M S 4  :
<
DEMBAC:  WORD        '0602           < DEMANDE DE 'LOAD SOUS :SYS' ,
                                     < AFIN DE FAIRE LE RETOUR A
                                     < L'APPELANT DE G3.
         WORD        BRANCH-ZERO*2
LOVL:    WORD        ZERO-BRANCH+PILE-LTNI-LTNI*2
                                     < LONGUEUR EN OCTETS DES BRANCHES
                                     < D'OVERLAY.
         WORD        -1
DEMSGN:  WORD        '0402           < DEMANDE AU SGN , INITIALISEE
                                     < EN STORE , AFIN DE GENERER
                                     < LORS DE !LOAD LA BRANCHE 'GR    '
         WORD        BRANCH-ZERO*2
         WORD        ZERO-BRANCH+PILE-LTNI-LTNI*2
         WORD        -1              < LA VALEUR SUIT LE NOM.
TAILMM:  VAL         '4000           < 8K MOTS NECESSAIRES POUR 'GR'.
         IF          VIDEO,,,X100
TAILMM:  VAL         LIMAG*1+TAILMM  < 2K SUPPLEMENTAIRES POUR 'GT'.
         IF          ORDI-"S",XWOR%,,XWOR%
TAILMM:  VAL         TAILMM+'1000    < ET PLUS ENCORE SUR SOLAR...
XWOR%:   VAL         0
X100:    VAL         0
DEMMEM:  WORD        '0004           < DEMANDE D'ALLOCATION DE 8K/12K MOTS.
RELMEM:  WORD        '0004           < DEMANDE DE RETOUR A 4K MOTS.
         WORD        TAILMM
         WORD        '2000           < 4K MOTS='2000 OCTETS.
DEMLOD:  WORD        '0602           < CHARGEMENT OVERLAY ' R'.
         WORD        XWOR%A
         WORD        XWOR%B
         WORD        -1
<
< NOTA : UN APPEL DE BIBLIOTHEQUE VIDE ($;),
< FAIT PASSER DE LA VISU '02 A LA VISU '0B ...
<
WG:      WORD        '020A           < DEMANDE D'ECRITURE GRAPHIQUE.
         WORD        SEGOR2-ZERO*2   < @OCTET DU BUFFER GRAPHIQUE.
         WORD        8               < COMPTE OCTETS.
WGT:     WORD        '020A           < DESTINE AU POSITIONNEMENT CORRECT
         WORD        SEGT-ZERO*2     < DES TEXTES ALPHA-NUMERIQUES.
         WORD        4               < ENVOI COORDONNEES 1 POINT.
OG:      WORD        '0203           < OPEN GRAPHIQUE DE LA VISU.
CG:      WORD        '0204           < RETOUR EN ALPHA-NUMERIQUE.
DERASE:  WORD        '0205           < EFFACEMENT DE L'ECRAN.
ADEMIN:  WORD        DEMIN           < ADRESSE DE DEMIN.
DEMOUT:  WORD        '0202           < DEMANDE D'ECRITURE SUR NSPOUT.
         WORD        0               < @OCTET DU MESSAGE.
BUFIN:   WORD        0               < LONGUEUR DU MESSAGE.
XBUFIN:  VAL         BUFIN-ZERO*2
ABUFIN:  EQU         ZERO+XBUFIN
DIRECT:  WORD        '0207           < COMMANDE DIRECTE DU 4014.
         BYTE        '1B;0           < 'ESC'-<COMMANDE>.
         BYTE        '04;0
COPY:    WORD        '0207           < ECRITURE DIRECTE SUR LA VISU
                                     < EN VUE DE FAIRE UN HARD-COPY.
         BYTE        '1B;'17;'8D;'1D < CTRL-SHIFT-K, CTRL-W, R/C, GS.
                                     < AVEC LE BIT0=1 DESTINE AUX
                                     < FIN DE MESSAGE DES EMISSIONS SUR
                                     < LES LIGNES BOUCLEES VI1/VI2.
DEMDK:   WORD        '0C02           < ACCES DIRECT AU DISQUE DE
                                     < SWAPPING INITIALISE EN 'WRITE'.
         WORD        WHOS-ZERO+1*2   < @BUFFER=@LISTE DES CONSTANTES
                                     < STACKABLES.
         WORD        LCON*2
SAVE:    WORD        0               < ZONE DE SAUVEGARDE TEMPORAIRE ,
                                     < ET NUMERO RELATIF DU SECTEUR
                                     < A ECHANGER.
SLEEP:   WORD        '0005           < DEMANDE DE TEMPORISATION POUR
                                     < FAIRE UNE COPY.
ASAUT:   WORD        N1616           < ADRESSE DE TRAITEMENT DES
                                     < PRIMITIVES INHIBEES.
         WORD        15              < 15 SECONDES DE TEMPORISATION
                                     < POUR FAIRE UN HARD-COPY.
C5:      EQU         SLEEP           < CONSTANTE MULTIPLICATIVE 5.
DEMCCI:  EQU         MR1+3           < DEMANDE DE RETOUR AU CCI.
         IF          VIDEO,,X100,
DEMSEG:  WORD        '0008           < ACCES SEGMENT EN ZDC.
         WORD        NOMSEG-ZERO*2
         WORD        LONSEG
         WORD        'FFC0
DELSEG:  WORD        '000A           < ENVOI DE L'ACQUITTEMENT ZDC.
         WORD        NOMSEG-ZERO*2
         WORD        SEG2-NOMSEG*2
         WORD        'C000
STOGS:   WORD        '000A           < ENVOI SEGMENT EN ZDC.
         WORD        NOMSEG-ZERO*2
         WORD        LONSEG
         WORD        'FFC0
GETGS:   WORD        '0008           < ACCES A L'ACQUIITEMENT ZDC.
         WORD        NOMSEG-ZERO*2
         WORD        SEG2-NOMSEG*2
         WORD        'C000
INDZDC:  WORD        0               < BIT15=0 : NE PAS EMETTRE EN ZDC.
X100:    VAL         0
         PAGE
<
<        D E F I N I T I O N   D U
<        R E F E R E N T I E L   C O U R A N T  :
<
TRANST:  EQU         F3              < VALEUR TEMPORAIRE DE TRANS LORS
                                     < DES CALCULS DE CHANGEMENT DE
                                     < REFERENTIEL (CF. 1,2,3,4).
DV:      DZS         2               < VECTEURS DES DEPLACEMENTS EN X
                                     < ET EN Y SUR LE REFERENTIEL LOCAL.
DVX:     EQU         DV+0            < AXE DES X.
DVY:     EQU         DV+1            < AXE DES Y.
MTRANS:  WORD        $+1,X           < RELAIS VERS LES MATRICES DES
                                     < TRANSFORMATIONS ELEMENTAIRES.
ICALLI:  BYTE        3;MRP-ZERO      < L'OCTET0 CONTIENT DE PLUS
                                     < SEUIL D'APPELS IMPLICITES DES
                                     < PROGRAMMES POUR LES COMPTES DE
                                     < PARENTHESES.
         BYTE        MRM-ZERO;MR1-ZERO
         BYTE        MR3-ZERO;MSO-ZERO
         BYTE        MSX-ZERO;MSY-ZERO
         BYTE        MS1-ZERO;MA-ZERO
         BYTE        MO-ZERO;MH-ZERO
         BYTE        MB-ZERO;0
<
<        L I S T E   O V E R L A Y S   D E   R E T O U R  :
<
LCALL:   EQU         $
         WORD        "GE";"EI"
         PAGE
<
<
<        E X E C U T I O N   D E S   S V C  :
<
<
<        ARGUMENT :
<                    A=@DEMANDE A CMS4.
<
<
<        RESULTATS :
<                    RETSVC=CONDITIONS DE RETOUR DE CMS4 ,
<                    INDICATEURS POSITIONNES EN FONCTION DES ERREURS.
<
<
         PROG
RSVC:    EQU         $
         PSR         X               < SAVE X.
         SVC         0               < ENVOI DE LA DEMANDE (A) A CMS4.
         STX         RETSVC          < SAVE LES CONDITIONS DE RETOUR.
         PLR         X               < RESTAURE X.
         RSR
         PAGE
         IF          VIDEO,,,X100
         IF          ORDI-"T",XWOR%,,XWOR%
TIMAG:   WORD        IMAG            < @RELATIVE IMAGE VIDEO.
         EOT         #SIP SP3#
XWOR%:   VAL         0
<
< ENTRY MODE ESCLAVE :
<
VIS:     EQU         $
         IF          ORDI-"T",XWOR%,,XWOR%
         LA          ASP3            < ACCES A L'ADRESSE DU S/P
                                     < MAITRE, ET VALIDATION ACN...
         JAE         VIS1            < ON N'EST PAS SOUS :SYS !!!
         WORD        '1EC5           < OK, :SYS : STABILISATION...
VIS1:    EQU         $
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LA          ASTAB           < DEMANDE DE STABILISATION.
         BSR         ASVC
         LA          &ASTAB3         < FORCER EN ECRITURE.
XWOR%C:  VAL         TVIN=0
         RBT         NBITMO-1-XWOR%C
         STA         &ASTAB3
XWOR%:   VAL         0
         RSR
X100:    VAL         0
         PAGE
<
<
<        S O R T I E S   D E   G R A P H I Q U E 2  :
<
<
<        R E T O U R   A U   C C I  :
<
<
GOCCI:   EQU         $
<        ON A ICI :
<                    Y=CARACTERE COURANT NON RECONNU , ET
<                      D'INDEX (IEG)-1.
<                      (EN CAS D'EREUR DU PROGRAMME !!!)
<
< TRONC COMMUN CCI,!GE,ERREUR :
<
E10:     EQU         $
         LAD         DEMCCI
E11:     EQU         $               < ENTRY 'ERASE'.
         BSR         ASVC            < RETOUR AU CCI DE CMS4.
                                     < (OU EFFACEMENT ECRAN....)
<
< CAS D'UN RETOUR PAR !GO :
<
         LAD         OG
E965:    EQU         $               < ENTRY MAKE-COPY.
         BSR         ASVC            < RE-MISE EN GRAPHIQUE DE LA VISU.
         RSR                         < RETOUR A L'INTERPRETEUR ; A
                                     < NOTER QUE X EST POSITIONNE ...
<
<
<        R E T O U R   A   L ' A P P E L A N T   ( G E , E I )  :
<
<
<        CONDITIONS DE RETOUR :
<        (POUR LES APPELS PAR 'EI'/'GO')
<                    CDRET=0 : DESSIN AFFICHE ENTIEREMENT ,
<                    CDRET=2 : DESSIN ABORTE PAR CTRL-X-OFF.
<
<
GOGE:    EQU         $
<
< MAJ DU TYPE DE L'ITEM :
<
         LXI         IINDIC-LTN*2    < INDEX D'OCTET !!!
         LAI         "D"             < TYPE 'DESSIN'.
         STBY        &AI1            < (POUR L'ITEM1 !!!).
<
<        R E T O U R   E N   E R R E U R   A
<        L ' A P P E L A N T  :
<
GOGER:   EQU         $
         LA          APILDR
         LR          A,K             < PILE DE SMC.
         LAD         RELMEM
         SVC         0               < RETOUR A 4K MOTS.
         LX          RETSVC          < X=CONDITIONS DE RETOUR DU
                                     < SVC PRECEDENT.
<
< TRANSMISSION DES ARGUMENTS :
<
         LAI         BRANCH-ZERO
         LR          A,W             < REINITIALISATION DE W=@BRANCH.
         LA          MODCAL,W        < A=0 SI 'GE' , A=1 SI 'EI'.
         ADR         A,A             < A=0 SI 'GE' , A=2 SI 'EI'.
         ANDR        X,A             < A=0 , SI RETOUR PRECEDENT OK ,
                                     < A=2 SI RETOUR CTRL-X-OFF.
         STA         CDRET,W         < RENVOI DES CONDITIONS DE RETOUR.
         LX          MODCAL,W        < X=IDENTIFICATEUR DE L'APPELANT :
                                     < X=0 : APPEL PAR !GE ,
                                     <  =1 : APPEL PAR 'EI'.
         STZ         MODCAL,W        < REINITIALISATION DE MODCAL.
         LA          &NCALL          < RECUPERATION DU NOM DE LA
                                     < BRANCHE D'OVERLAY DE RETOUR,
                                     < QUI EST D'AILLEURS CELLE D'APPEL.
GOB:     EQU         $
         STA         0,W             < LE NOM DE LA BRANCHE D'OVERLAY
                                     < A APPELER EST 'GE'/'EI'.
<
< RETOUR A L'APPELANT :
<
         LAD         CG
         BSR         ASVC            < RETOUR EN ALPHA-NUMERIQUE DE
                                     < LA VISU.
         LAD         DEMBAC          < A=@DEMBAC.
<        A NOTER :
<                    (C)#0 : AINSI , SI LE PROCESSEUR 'EI' REPREND
<                            LA MAIN , IL NE CONFOND PAS CETTE
<                            ENTRY AVEC UNE GENERATION DE 'GO'.
         BSR         AOVL            < TENTATIVE DE CHARGEMENT DE LA
                                     < BRANCHE D'OVERLAY !GE.
<
< RETOUR EN ERREUR : ON SAIT QUE
< SI L'ON REVIENT ICI , C'EST QUE
< LE CHARGEMENT DE !GE N'A PU SE
< REALISER CORRECTEMENT , ON VA
< DONC REDONNER LA MAIN AU CCI , CAR
< CERATINEMENT !SGN MANQUE :
<
         JMP         E10             < VERS LE CCI.
<
<
<        E R R E U R S   A   L ' E X E C U T I O N
<        D U   P R O G R A M M E   G R A P H I Q U E  :
<
<
ERREUR:  EQU         GOCCI
         PAGE
<
<
<        T R A I T E M E N T   D E S   E R R E U R S
<                    D ' E X E C U T I O N  :
<
<
<        FONCTION :
<                      CETTE ROUTINE MET SI CELA EST
<                    POSSIBLE LE CARACTERE COURANT
<                    AIC(IEG) EN POSITION HAUTE PAR
<                    POSITIONNEMENT DE SONT BIT0 A 1.
<
<
<        RETOUR TOUJOURS EN ERREUR.
<
<
CARUP:   EQU         $
         LA          IEG             < ACCES A L'INDEX COURANT.
                                     < D'EXECUTION.
         LR          A,X             < NOTER : X=(IEG)#0 !!!
         CP          NCP             < EST-IL HORS-LA PAGE ???
         JGE         E510            < OUI , ON NE FAIT RIEN.
         ADRI        -1,X            < SINON : X=INDEX DU CARACTERE
                                     < EN ERREUR (IEG-1).
         LBY         &AIC            < ACCES AU CARACTERE COURANT.
         ORI         '80             < POSITIONNEMENT DE SON BIT0.
         STBY        &AIC            < ET REMISE DANS L'ITEM COURANT.
E510:    EQU         $
         RSR                         < RETOUR INDIFFERENT CAR APPELE
                                     < PAR UNE PRIMITIVE 'PCS'.
         PAGE
         IF          VIDEO,,X100,
<
<
<        A C C E S   A   L A   Z D C  :
<
<
<        FONCTION :
<                      INVERSE LA VALIDATION D'ACCES
<                    A LA ZDC.
<
<
INTGS:   EQU         $
         LA          INDZDC
         IBT         15              < INVERSION VALIDATION,
         STA         INDZDC
         RSR                         < ET C'EST TOUT !!!
X100:    VAL         0
         PAGE
<
<
<        E F F A C E M E N T   E C R A N  :
<
<
ERASE:   EQU         $
         IF          VIDEO,,,X100
<
< INITIALISATION IMAGE VIDEO :
<
         LX          ALI             < X=INDEX D'INITIALISATION.
         LA          WORKS           < A=VALEUR INITIALIE IMAGE.
ERAS1:   EQU         $
         STA         &AAI            < INITIALISATION MOT A
         JDX         ERAS1           < MOT DE L'IMAGE.
X100:    VAL         0
<
< EFFACEMENT DE L'ECRAN :
<
         LAD         DERASE
         JMP         E11             < VERS L'EFFACEMENT DE L'ECRAN ,
                                     < PUIS LE RETOUR EN GRAPHIQUE.
         PAGE
<
<
<        M A K E   C O P Y  :
<
<
<        FONCTION :
<                      LA COMMANDE 'H' PERMET DE FAIRE
<                    UN HARD-COPY AVEC SA TEMPORISATION.
<
<
HCOPY:   EQU         $
         LAD         COPY
         BSR         ASVC            < ENVOI DE LA COMMANDE HARD-COPY.
         LAD         SLEEP
         JMP         E965            < VERS LA TEMPORISATION DE 1K
                                     < SECONDES.
         PAGE
         IF          VIDEO,,X100,
<
<
<        A U T O R I S A T I O N  /  I N H I B I T I O N
<        D E S   A P P E L S   I M P L I C I T E S  :
<
<
INVTEX:  EQU         $
         LA          ITEXTE
         IBT         15              < ITEXTE=0 : APPELS IMPLICITES
                                     <            VALIDES,
                                     < ITEXTE=1 : ILS SONT REMPLACES
                                     <            PAR UNE EDITION ALPHA-
                                     <            NUMERIQUE DU TEXTE.
         STA         ITEXTE
         RSR
<
<
<        T E S T   D U   M O D E  :
<
<
<        RESULTAT :
<                    X=ITEXTE.
<
<
TESTEX:  EQU         $
         LX          ITEXTE
         RSR                         < FACILE, NON ???
X100:    VAL         0
         PAGE
<
<
<        D E M A N D E S   D E   R E P E T I T I O N S  :
<
<
<        R E C U P E R A T I O N   D U   N O M B R E
<        D E   R E P E T I T I O N S  :
<        O U   D ' U N E   C O N S T A N T E  :
<
<
<        ARGUMENT :
<                    Y=CARACTERE COURANT ; SI Y='@' , LA
<                      CONSTANTE CALCULLE SERA 'CTTE'.
<
<
<        RESULTAT :
<                    SAVE=NBRE DE REPETITIONS , SI X=0 (OK) ,
<                    X#0 : COMPTE ERRONNE.
<
<
REPET1:  EQU         $
         LXI         1               < ERREUR A PRIORI.
         LR          Y,A             < A=CARACTERE COURANT.
         ADRI        -'30,A          < CONVERSION EN BINAIRE.
         JALE        E17             < CARACTERE NON RECONNU.
         CPI         9               < EST-CE UN CHIFFRE DE 1 A 9 ???
         JLE         E18             < OUI , OK.
         ADRI        -'41+'39+1,A    < TRANSLATION PAR RAPPORT AU 'A'.
         CPI         9               < EST-CE UN CARACTERE ENTRE '9'
                                     < ET 'A'.
         JL          E17             < OUI , ERREUR.
         JG          E308            < NON , OK.
<
< CAS DU CARACTERE '@' :
<
         LA          CTTE            < LA CONSTANTE RESULTANTE EST CTTE.
E308:    EQU         $
<
< NBRE DE REPETITIONS CORRECT :
<
E18:     EQU         $
         STA         SAVE            < SAVE=NBRE DE REPETITIONS
                                     < DEMANDEES (DE 1 A 35).
REPET0:  EQU         $               < CAS OU SAVE>0.
         LXI         0               < RETOUR OK.
<
< SORTIE DE LA ROUTINE :
<
E17:     EQU         $
         RSR                         < RETOUR AVEC (X).
<
<
<        V A L I D A T I O N   D U   N O M B R E
<        D E   R E P E T I O N S  :
<
<
<        RESULTAT :
<                    X=0 SI SAVE>0,
<                    X=1 (ERREUR) SI SAVE<=0.
<
<
REPETV:  EQU         $
         CPZ         SAVE            < TEST DU SIGNE DE SAVE,
         JG          REPET0          < OK, SAVE>0.
         LXI         1               < NON, SAVE<=0.
         JMP         E17             < VERS LA SORTIE.
<
<
<        T R A N S M I S S I O N   D U   N O M B R E
<        D E   R E P E T I T I O N S  :
<
<
<        ARGUMENT :
<                    SAVE=NBRE DE REPETITIONS DEMANDEES.
<
<
<        RESULTAT :
<                    Y=NBRE DE REPETITIONS DEMANDEES.
<
<
REPET2:  EQU         $
         LY          SAVE            < FACILE ???
         RSR                         < X N'EST PAS POSITIONNE , CAR
                                     < CETTE ROUTINE EST APPELEE
                                     < EN MODE SEQUENTIEL.
         PAGE
<
<
<        M O D I F I C A T I O N   D E   L A   C O N S T A N T E
<        D E   G E N E R A T I O N   G R A P H I Q U E  :
<
<
<        ARGUMENT :
<                    SAVE=NOUVELLE VALEUR DE LA CONSTANTE.
<
<
<        RESULTAT :
<                    CTTE=(SAVE) ,
<                    X INDIFFERENT.
<
<
SCTTE:   EQU         $
         LA          SAVE            < RECUPERATION DE LA NOUVELLE
                                     < VALEUR A DONNER A CTTE.
         STA         CTTE            < MAJ DE CTTE.
         RSR                         < RETOUR INDIFFERENT (QUELQUE
                                     < SOIT X).
         PAGE
<
<
<        M O D I F I C A T I O N   D E   ' I C A L L I '
<        E T   D E   L A   T E M P O   D U   ' H '  :
<
<
<        FONCTION :
<                      G<CTTE> : LORSQUE <CTTE> EST STRICTEMENT
<                    INFERIEURE A 10, ALORS 'ICALLI' RECOIT CETTE
<                    VALEUR, SINON, <CTTE> DIMINUEE DE 9 DONNE
<                    LA TEMPORISATION SUIVANT UN 'H'.
<
<
MODIS:   EQU         $
         LA          SAVE
         CPI         9
         JLE         MODIS1          < CAS DE 'ICALLI'.
         ADRI        -9,A            < CAS DE 'H'.
         STA         SLEEP+2
         JMP         MODIS2
MODIS1:  EQU         $
         STBY        ICALLI
MODIS2:  EQU         $
         RSR
         PAGE
<
<
<        M O D I F I C A T I O N   D E
<        D X   E T / O U   D Y  :
<
<
<        S E L E C T I O N   D X   O U   D Y  :
<
<
<        FONCTION :
<                      METTRE DANS ADXDY L'ADRESSE
<                    DE DX OU CELLE DE DY.
<
<
<        RETOUR TOUJOURS EN ERREUR.
<
<
SELDX:   EQU         $
         LAD         DX1             < A=@DX.
         JMP         E26
SELDY:   EQU         $
         LAD         DY1             < A=@DY.
E26:     EQU         $
         STA         ADXDY           < MISE EN PLACE DU RELAI
                                     < TEMPORAIRE VERS DX OU DY.
<
< SORTIE TOUJOURS EN ERREUR DE 'SEL' ET 'EXEC' :
<
E520:    EQU         $
         LXI         1
         RSR                         < RETOUR EN ERREUR : X#0.
<
<
<        M O D I F I C A T I O N   D E   D X   O U   D Y  :
<
<
<        FONCTION :
<                      CES ROUTINES MODIFIENT LES VALEURS
<                    COURANTES DU D (DX OU DY) DONT
<                    L'ADRESSE EST DANS ADXDY.
<                    PAR LA SUITE LE 'D' SERA APPELE
<                    DELTA , LA CONSTANTE DONNEE EVENTUELLEMENT
<                    EN ARGUMENT SERA ALPHA , ET LA
<                    CONSTANTE COURANTE SERA CTTE.
<
<
<        RESULTAT :
<                      LE RETOUR EST TOUJOURS EN ERREUR.
<
<
<        D E L T A <---- ( D E L T A ) + C T T E  :
<
<
EXECP:   EQU         $
         LA          &ADXDY          < A=DELTA COURANT.
         AD          CTTE            < A=(DELTA)+CTTE.
         JMP         E23             < VERS LA VAILDATION.
<
<
<        D E L T A <---- ( D E L T A ) - C T T E  :
<
<
EXECM:   EQU         $
         LA          &ADXDY          < A=DELTA COURANT.
         SB          CTTE            < A=(DELTA)-CTTE.
         JMP         E23             < VERS LA VALIDATION.
<
<
<        D E L T A <---- C T T E * A L P H A  :
<
<
EXECK:   EQU         $
         LA          SAVE            < RECUPERATION DE LA CONSTANTE
                                     < DONNEE EN ARGUMENT (ALPHA)
                                     < DANS A A PARTIR DE (SAVE).
E24:     EQU         $               < ENTRY POUR EXECMU.
         MP          CTTE
         LR          B,A             < B=CTTE*(A PRECEDENT).
         JMP         E23             < VERS LA VALIDATION.
<
<
<        D E L T A <---- ( D E L T A ) * C T T E  :
<
<
EXECMU:  EQU         $
         LA          &ADXDY          < A=DELTA COURANT.
         JMP         E24             < VERS LA MULTIPLICATION PAR CTTE.
<
<
<        D E L T A <---- ( D E L T A ) / C T T E  :
<
<
EXECD:   EQU         $
         LAI         0               < INITIALISATION DE A.
         LB          &ADXDY          < B=DELTA COURANT.
         DV          CTTE            < DIVISION PAR CTTE ; A
                                     < CONTIENT LE NOUVEAU DELTA
                                     < (QUOTIENT).
E23:     EQU         $
<
< MODIFICATION DU DELTA COURANT :
<
E29:     EQU         $
         STA         &ADXDY
         JMP         E520            < VERS UN RETOUR EN ERREUR.
         PAGE
<
<
<        D E P L A C E M E N T   D U   C U R S E U R
<                    V I R T U E L  :
<
<
<        PHILOSOPHIE :
<                      ON DISPOSE A L'EMPLACEMENT COURANT
<                    DU CURSEUR VIRTUEL D'UN REFERENTIEL
<                    LOCAL L(OX,OY) . LES DEPLACEMENTS DE TYPE
<                    '1','2','3','4' SONT ECRITS DANS
<                    L(OX,OY) . LE DEPLACEMENT REEL DU
<                    CURSEUR VIRTUEL RESULTANT , EST CALCULE
<                    A L'AIDE DE LA MATRICE DE TRANSFORMATION
<                    COURANTE 'T' , COMPOSEE PAR UN
<                    PRODUIT DE TRANSFORMATIONS ELEMENTAIRES :
<                    A(OX,OY)=T*L(OX,OY) , SOIT POUR
<                    LE CURSEUR VIRTUEL :
<                    A(DX,DY)=T*L(DX,DY) , CELUI-CI
<                    SE TROUVANT DEPLACER DU VECTEUR A(DX,DY).
<                    (ON A : DV=L(DX,DY)).
<
<
<        ARGUMENT :
<                    B=0 : DEPLACEMENTS '1' ET '2' ,
<                     =1#0 : DEPLACEMENTS '3' ET '4'.
<
<
<        RESULTAT :
<                    RETOUR INDIFFERENT.
<
<
<        D E P L A C E M E N T S   ' 1 '   E T   ' 3 '  :
<
<
EXEC13:  EQU         $
         LA          DX1
         LYI         0
         JMP         E50             < VERS LE CALCUL DE DV.
<
<
<        D E P L A C E M E N T S   ' 2 '   E T   ' 4 '  :
<
<
EXEC24:  EQU         $
         LAI         0
         LY          DY1
<
< TRONC COMMUN A TOUS LES DEPLACEMENTS :
<
<        ON A ICI :
<                    (A,Y)=DV INITIAL ; UNE DES
<                          2 COORDONNEES EST NULLE ,
<                          PUISQU'ON SE DEPLACE SUR L'UN
<                          DES AXES LOCAUX.
E50:     EQU         $
         CPZR        B               < TEST SUR L'INVERSION DU VECTEUR
                                     < (A,Y) INITIAL.
         JE          E51             < PAS D'INVERSION : CAS 1 ET 2.
         NGR         A,A             < CAS 3 ET 4.
         NGR         Y,Y             < CAS 3 ET 4.
<
< INITIALISATION DU VECTEUR DV :
<
E51:     EQU         $
         STA         DVX
         STY         DVY
<
< CALCUL DU PRODUIT MATRICIEL T*DV :
<
         LA          TRANS           < INDICATEUR DE PRESENCE DES
                                     < DIFFERENTES TRANSFORMATIONS
                                     < ELEMENTAIRES.
E41:     EQU         $
         JAE         E40             < LA TRANSFORMATION 'T' EST
                                     < L'ELEMENT NEUTRE , OU A ETE
                                     < ENTIEREMENT CALCULEE.
<
< RECUPERATION D'UNE TRANSFORMATION ELEMENTAIRE :
<
         DBT                         < X=TRANSFORMATION A EXECUTER.
         RBT         0,X             < MEMORISATION DE SON EXECUTION.
         STA         TRANST          < SAVE L'INDICATEUR DE PRESENCE
                                     < DES TRANSFORMATIONS ELEMENTAIRES.
<
< EXECUTION DE LA TRANSFORMATION
< ELEMENTAIRE DE NUMERO (X) :
<
         LBY         &MTRANS
         LR          A,W             < W=@DE LA MATRICE DE LA
                                     < TRANSFORMATION (X).
         LBY         &NTRANS
         LR          A,X             < X=NBRE DE FOIS QUE CETTE
                                     < TRANSFORMATION DOIT ETRE
                                     < ITEREE.
<
< BOUCLE D'ITERATION D'UNE TRANSFORMATION ELEMENTAIRE :
<
E42:     EQU         $
         LA          A11,W
         MP          DVX             < B=A11*DVX.
         LR          B,Y             < Y=A11*DVX.
         LA          A12,W
         MP          DVY             < B=A12*DVY.
         ADR         B,Y             < Y=A11*DVX+A12*DVY.
         LA          A21,W
         MP          DVX             < B=A21*DVX.
         PSR         B               < SAVE A21*DVX.
         LA          A22,W
         MP          DVY             < B=A22*DVY.
         PLR         A               < A=A21*DVX.
         ADR         A,B             < B=A21*DVX+A22*DVY.
         CPZ         DIV,W           < Y-A-T'IL UN DIVISEUR COMMUN
                                     < DIFFERENT DE 1 ???
         JLE         E44             < NON , RIEN A FAIRE.
         BSR         ADIV            < B=(A21*DVX+A22*DVY)/DIV.
         XR          Y,B             < Y=(A21*DVX+A22*DVY)/DIV ,
                                     < B=A11*DVX+A12*DVY.
         BSR         ADIV            < B=(A11*DVX+A12*DVY)/DIV.
         XR          Y,B             < Y=NOUVEAU DVX , ET B=NOUVEAU DVY.
<
< MISE A JOUR ITERATIVE DE DV :
<
E44:     EQU         $
         STY         DVX             < DVX=(A11*DVX+A12*DVY)/DIV.
         STB         DVY             < DVY=(A21*DVX+A22*DVY)/DIV.
         JDX         E42             < ITERATION EVENTUELLE DE LA
                                     < TRANSFORMATION ELEMENTAIRE
                                     < COURANTE.
         LA          TRANST          < RESTAURE L'INDICATEUR DES
                                     < TRANSFORMATIONS ELEMNTAIRES
                                     < PRESENTES.
         JMP         E41             < VERS L'EXECUTION DE LA SUIVANTE
                                     < EVENTUELLE.
<
< FIN DU CALCUL DE DV :
<
E40:     EQU         $
         LXI         0               < INDEX D'ACCES AU 3-CURSEUR.
<
< DEPLACEMENT DU CURSEUR VIRTUEL :
< (X,Y)<--(X,Y)+(DVX,DVY).
<
         LA          CV+X            < A=X(CURSEUR VIRTUEL).
         AD          DVX             < X<--(X)+(DVX).
         STA         CV+X            < X(CURSEUR VIRTUEL).
         STA         &C2             < MAJ DU 3-CURSEUR, FONCTION DU
                                     < PLAN DANS LEQUEL ON SE TROUVE.
         LA          CV+Y            < A=Y(CURSEUR VIRTUEL).
         AD          DVY             < Y<--(Y)+(DVY).
         STA         CV+Y            < Y(CURSEUR VIRTUEL).
         STA         &C1             < MAJ DU 3-CURSEUR (SUITE).
         RSR                         < RETOUR INDIFFERENT.
<
<
<        M I S E   A   L ' O R I G I N E  :
<
<
ORIGIN:  EQU         $
         STZ         CV+X            < LE CURSEUR VIRTUEL EST MIS
         STZ         CV+Y            < A L'ORIGINE DE L'ECRAN (0,0).
         STZ         &C1             < RAZ UNE PARTIE DU 3-CURSEUR,
         STZ         &C2             < RAZ UNE PARTIE DU 3-CURSEUR.
         RSR                         < RETOUR INDIFFERENT.
         PAGE
<
<
<        D E F I N I T I O N   D E   L A
<        T R A N S F O R M A T I O N   C O U R A N T E  :
<
<
<        I N I T I A L I S A T I O N  :
<
<
<        FONCTION :
<                      CETTE ROUTINE REINITIALISE LA
<                    TRANSFORMATION COURANTE.
<                                    T=O (ELEMENT NEUTRE).
<
<
<        RESULTAT :
<                    X=0 (RETOUR OK).
<
<
ITRANS:  EQU         $
         STZ         TRANS           < RAZ LA PRESENCE DE TOUTES LES
                                     < TRANSFORMATIONS ELEMENTAIRES.
<
< RAZ DE LA TABLE DES COMPTES DE PRESENCE :
<
         LXI         NT              < X=NBRE DE TRANSFORMATIONS
                                     < ELEMENTAIRES RECONNUES.
         LAI         0
E60:     EQU         $
         STBY        &NTRANS         < RAZ DU NBRE D'OCCURENCE DE LA
                                     < TRANSFORMATION (X).
         JDX         E60
         RSR                         < RETOUR AVEC X=0 (OK).
<
<
<        M A J   T R A N S F O R M A T I O N   C O U R A N T E  :
<
<
<        FONCTION :
<                      CETTE ROUTINE EFFECTUE LE
<                    PRODUIT FONCTIONNEL DE LA TRANSFORMATION
<                    COURANTE 'T' , AVEC LA TRANSFORMATION
<                    ELEMENTAIRE T(B) DONNEE EN ARGUMENT :
<                                    T=T*T(B).
<
<
<        NOTA :
<                      POUR SUPPRIMER UNE TRANSFORMATION
<                    ELEMENTAIRE , IL SUFFIT DE MULTIPLIER
<                    'T' PAR SON INVERSE :
<                                    RP-1=RM ,
<                                    RM-1=RP ,
<                                    R1-1=R3 ,
<                                    R3-1=R1 ,
<                                    SO-1=SO ,
<                                    SX-1=SX ,
<                                    SY-1=SY ,
<                                    S1-1=S1 ,
<                      ON REMARQUERA DE PLUS LES RELATIONS :
<                                    SX=SO*SY ,
<                                    SY=SO*SX ,
<                                    S1=SO*S2 ,
<                                    S2=SO*S1 ....
<                                    (S2 DESIGNANT LA SYMETRIE PAR
<                                    RAPPORT A LA 2EME BISSECTRICE).
<
<
<        ARGUMENT :
<                    B=NUMERO DE LA TRANSFORMATION ELEMENTAIRE
<                      QUI VA MULTIUPLER 'T' (A NOTER B#0 TOUJOURS !!!!).
<
<
<        RESULTAT :
<                    X#0 TOUJOURS (AFIN DE MINIMISER L'OCCUPATION
<                        DE LA GRAMMAIRE).
<
<
UTRANS:  EQU         $
         LR          B,X             < X=NUMERO DE LA TRANSFORMATION
                                     < ELEMENTAIRE ; A NOTER X#0 !!!!
         LBY         &MTRANS
         LR          A,W             < W=@DE LA MATRICE DE LA
                                     < TRANSFORMATION T(X).
         LBY         &NTRANS
         ADRI        1,A             < ET UNE ITERATION DE PLUS.
         SARD        16              < LE NBRE D'ITERATIONS SUR T(X)
                                     < EST ETENDU SUR 32 BITS.
         DV          NEUTRE,W        < ON CALCULE LE NBRE D'ITERATION
                                     < MODULO LA PUISSANCE QUI DONNE
                                     < L'OPERATION NEUTRE.
         LR          B,A             < A=RESTE DE LA DIVISION.
         STBY        &NTRANS         < NBRE D'ITERATIONS DE T(X).
                                     < (RESTE DE LA DIVISION).
         LA          TRANS           < ACCES A L'INDICATEUR DE PRESENCE
                                     < DES TRANSFORMATIONS ELEMENTAIRES.
         SBT         0,X             < T(X) PRESENTE A PRIORI.
         CPZR        B               < DOIT-ELLE ETRE ITEREE AU
                                     < MOINS UNE FOIS ???
         JNE         E410            < OUI , DONC ELLE EST PRESENTE.
         RBT         0,X             < SINON , ON LA REND ABSENTE.
E410:    EQU         $
         STA         TRANS           < MAJ DE L'INDICATEUR DE PRESENCE
                                     < DES TRANSFORMATIONS ELEMENTAIRES.
         RSR                         < RETOUR AVEC X#0.
         PAGE
<
<
<        A C C E S   D I R E C T   A U   D K  :
<
<
<        FONCTION :
<                      CE MODULE PERMET DE SAUVEGARDER ET
<                    DE RESTAURER 31 CONTEXTES DIFFERENTS
<                    CONSTITUES PAR LA LISTE DES CONSTANTES
<                    STACKABLES.
<
<
<        S A V E   O U   R E S T O R E  ? ? :
<
<
<        ARGUMENT :
<                    B=SENS (0/2) DE L'OPERATION.
<
<
ADSEC:   EQU         $
         STB         DEMDK           < MISE EN PLACE DE LA FONCTION.
         LAI         'C              < A=NVP D'ACCES DIRECT AU DKS.
         STBY        DEMDK           < MISE EN PLACE DU NVP D'ACCES.
         RSR
<
<
<        S A V E / R E S T O R E   C O N T E X T E  :
<
<
RWDK:    EQU         $
         LAD         DEMDK
         SVC         0               < EXECUTION DE LA DEMANDE.
         RSR                         < RETOUR AVEC LES CONDITIONS DE
                                     < RETOUR DE CMS4 DANS X.
         PAGE
<
<
<        S T A C K A G E   D E S   C O N S T A N T E S  :
<
<
<        PHILOSOPHIE :
<                      ON DISPOSE D'UNE PILE 'STACK' ,
<                    DANS LA QUELLE ON PUEUT EMPILER/
<                    DEPILER LES CONSTANTES , SOIT
<                    POUR LES SAUVEGARDER POUR RESTAURATION
<                    ULTERIEURE , SOIT POUR LES ECHANGER
<                    (CF. PUSH X , PUIS PULL Y ).
<                      SONT STACKABLES LES CONSTANTES
<                    SUIVANTES :
<                    1- CTTE : APPELEE 'K' POUR L'OCCASION ,
<                    2- CV : APPELE 'C' ,
<                    3- DY : APPELE 'Y' ,
<                    4- DX : APPELE 'X'.
<                    5- LA TRANSFORMATION COURANTE : APPELEE 'T'.
<                    6- L'ARGUMENT FORMEL : APPELE 'A'.
<
<
<        I N I T I A L I S A T I O N  :
<
<
<        ARGUMENT :
<                    B=0 : IL S'AGIT D'UN 'PULL' ,
<                     =1 : IL S'AGIT D'UN PUSH.
<
<
<        RESULTAT :
<                    SAVE=0 : 'PULL' ,
<                        =1 : 'PUSH'.
<
<
SWHOS:   EQU         $
         STB         SAVE            < MEMORISATION DU SENS DE
                                     < L'OPERATION SUR 'STACK'.
         STZ         WHOS            < RAZ DE LA LISTE DES CONSTANTES
                                     < ATRAITER.
         RSR
<
<
<        I N S E R T I O N   C O N S T A N T E S
<        D A N S   L A   L I S T E  :
<
<
<        ARGUMENT :
<                    B=NUMERO DE LA CONSTANTE A INSERER
<                    DANS LA LISTE 'WHOS' ; DANS LE CAS OU
<                    B EST NUL C'EST QUE L'OPERATION PORTE
<                    SUR LA TRANSFORMATION COURANTE.
<
<
<        RESULTAT :
<                    X#0 (TOUJOURS RETOUR EN ERREUR).
<
<
RWHOS:   EQU         $
         LXI         1               < LE STACKAGE PORTE SUR UN
                                     < SEUL MOT A PRIORI (CAS B#0).
         LR          B,Y             < Y=NUMERO DE LA CONSTANTE
                                     < EN CAUSE.
         CPZR        B               < EST-CE UNE OPERATION SUR 'T' ???
         JNE         E440            < NON , C'EST BON.
<
< CAS D'UNE OPERATION SUR 'T' :
<
         LXI         NT+1/2+1+1      < X=NBRE DE MOTS A EDPLACER
                                     < DANS LE CAS DE 'T'.
         LYI         TRANS-WHOS      < INDICE DU 1ER MOT A DEPLACER
                                     < POUR LA TRANSFORMATION 'T'.
<
< MISE A JOUR DE LA LISTE 'WHOS' :
<
E440:    EQU         $
         LA          WHOS            < ACCES A LA LISTE.
E441:    EQU         $
         XR          X,Y
         SBT         0,X             < MEMORISATION DE LA CONSTANTE.
                                     < (BIT(X)=1).
         XR          X,Y
         ADRI        1,Y             < PROGRESSION DU NUMERO DE LA
                                     < CONSTANTE (Y).
         JDX         E441            < CONSTANTE SUIVANTE.
         STA         WHOS            < MAJ DE LA LISTE.
         LXI         1               < POUR FAIRE UN RETOUR EN ERREUR.
         RSR                         < RETOUR EN ERREUR (TOUJOURS).
<
<
<        O P E R A T I O N   S U R   S T A C K  :
<
<
<        ARGUMENT :
<                    SAVE=SENS DE L'OPERATION :
<                        =0 : 'PULL' ,
<                        =1 : 'PUSH'.
<
<
<        RESULTAT :
<                    ERREUR SI L'OPERATION EST IMPOSSIBLE.
<
<
ESTACK:  EQU         $
         LY          ASTACK          < Y=@STACK.
         LB          WHOS            < B=LISTE DES CONSTANTES A TRAITER.
         CPZ         SAVE            < TEST DU SENS DE L'OPERATION.
         JE          E300            < CAS DES 'PULL'.
<
<        P U S H   I N   S T A C K  :
<
         LXI         -NSTACK
<
< BOUCLE DE 'PUSH' PAR CONSTANTE :
<
E301:    EQU         $
         TBT         16+NSTACK+1,X   < LA CONSTANTE(X) EST-ELLE
                                     < CONCERNEE ???
         JNC         E302            < NON.
         LA          &LWHOSI         < SI OUI , ACCES A LA CONSTANTE(X+
                                     < NSTACK+1).
         PUSH                        < ET EMPILEMENT DANS 'STACK'.
         JC          E303            < DEBORDEMENT DE 'STACK' PAR
                                     < LE HAUT ; ABORT AVEC AU
                                     < PEALABLE UNE DECREMENTATION DU
                                     < POINTEUR DE STACK !!!!??
E302:    EQU         $
         JIX         E301            < CONSTANTE SUIVANTE.
<        A NOTER :
<                    X=0 : RETOUR OK ...
<
< SORTIE DE LA ROUTINE :
<
E306:    EQU         $
         RSR
<
< DEBORDEMENT DE STACK PAR LE HAUT :
<
E303:    EQU         $
         DC          &ASTACK         < ON DECREMENTE LE POINTEUR
                                     < DE 'STACK' , CAR CETTE ANDOUILLE
                                     < DE MICRO-MACHINE L'A QUAND
                                     < MEME FAIT PROGRESSER !!?!?
         JMP         E306            < VERS LA SORTIE : A NOTER : X#0 !!
<
<        P U L L   I N   S T A C K  :
<
E300:    EQU         $
         LXI         NSTACK
<
< BOUCLE DE DESEMPILEMENT DES CONSTANTES : (A REBROUSSE POIL...)
<
E304:    EQU         $
         TBT         16,X            < LA CONSTANTE(X) EST-ELLE
                                     < CONCERNEE ???
         JNC         E305            < NON.
         PULL                        < SI OUI , ON LA DEPILE.
         JC          E307            < ERREUR : DEBORDEMENT PAR LE
                                     < BAS ; ON ABORTE , MAIS AU
                                     < PREALABLE , ON VA INCREMENTER
                                     < LE POINTEUR DE 'STACK'.
         STA         &LWHOSO         < SI OK , ON RESTAURE CONSTANTE(X).
E305:    EQU         $
         JDX         E304            < CONSTANTE SUIVANTE.
<
< RESTAURATION EVENTUELLE DU 3-CURSEUR,
< ET DE 2 DES 3 PAS SUR X, Y, Z :
<
         LA          CV+Y
         STA         &C1             < A NOTER QUE X=0.
         LA          CV+X
         STA         &C2
         BSR         ASPDXY          < RESTAURATION DE 2 DES 3 PAS.
         LXI         0               < X=0 POUR UN RETOUR OK.
         JMP         E306            < RETOUR OK , CAR X=0 !!!!
<
< DEBORDEMENT DE 'STACK' PAR LE BAS :
<
E307:    EQU         $
         IC          &ASTACK         < IL FAUT RATTRAPPER LES BETISES
                                     < DE LA MICRO-MACHINE !?!?!
         JMP         E306            < VERS UNE SORTIE EN ERREUR (X#0).
         PAGE
<
<
<        A P P E L   P R O G R A M M E  :
<
<
<        S A V E   N O M   C H E R C H E  :
<
<
<        RESULTAT :
<                    SAVE=INDEX DU 1ER CARACTERE DU NOM CHERCHE ,
<                    X#0 (TOUJOURS ERREUR : CF APPEL BIBLI).
<
<
SAVNOM:  EQU         $
         ADRI        -1,B            < TRANSLATION ARGUMENT (B)
                                     < DANS LE CAS DES APPELS BIBLI.
         STB         WORK            < -1, 0, +1 SUIVANT BIBLI EN
                                     < BASCULE, OVERLAY OU AU
                                     < DELA DES 4K.
         LA          IEG             < IEG=INDEX 1ER CARACTERE DU NOM
                                     < DU PROGRAMME APPELE.
         STA         SAVE
         LXI         1               < X#0.
         RSR                         < RETOUR TOUJOURS EN ERREUR.
<
<
<        L A N C E M E N T   P R O G R A M M E  :
<
<
<        FONCTION :
<                      CETTE ROUTINE PASSE LA MAIN
<                    AU PROGRAMME QUI A ETE APPELE.
<
<
<        ARGUMENT :
<                    SAVE=INDEX DE LA 1ERE COMMANDE DU PROGRAMME ( LA
<                         1ERE COMMANDE SUIT LA '(').
<
<
<        RESULTAT :
<                    X#0 : TOUJOURS RETOUR EN ERREUR.
<
<
START:   EQU         $
         LX          SAVE            < RECUPERATION DE L'INDEX DE
                                     < DEPART QUI EST IL FAUT LE
                                     < NOTER DIFFERENT DE 0 , DONC X#0.
         STX         IEG             < MISE EN PLACE DE L'INDEX DE LA
                                     < PROCHAINE COMMANDE A EXECUTER.
         RSR                         < RETOUR AVEC X#0 !!!
<
<
<        A C C E S   A   U N   C A R A C T E R E  :
<
<
<        FONCTION :
<                      CETTE ROUTINE RECUPERE UN CARACTERE
<                    DE RANG (X) SOIT DANS LE NOM CHERCHE ,
<                    SOIT DANS UN NOM DEFINI . SI L'INDEX
<                    DEMANDE EST HORS LA PAGE , LA ROUTINE
<                    RETOURNE DIRECTEMENT A UNE ADRESSE
<                    D'ERREUR DANS LA ROUTINE LOOKP , QUI
<                    SEULE L'APPELLE.
<                      LA RECHERCHE S'EFFECTUE , SOIT
<                    DANS L'ITEM COURANT DANS LE CAS
<                    DE LOOKP , SOIT DANS L'AUTRE ITEM
<                    DANS LE CAS DE LOOKPB (RECHERCHE
<                    EN BIBLIOTHEQUE).
<
<
<        ARGUMENT :
<                    X=INDEX DU CARACTERE DEMANDE.
<
<
<        RESULTAT :
<                    A=CARACTERE SI OK ,
<                    X<--(X)+1 , SI OK (A NOTER QUE C'EST LE X ARGUMENT
<                                      QUI EST VALIDE , ET NON PAS
<                                      LE X RESULTAT).
<                    RETOUR DIRECT EN E81 , SI HORS-LA PAGE , ET
<                    ALORS X#0 ....
<
<
GETCAR:  EQU         $
         LR          X,A
         CP          NCP             < VALIDATION DE L'INDEX ARGUMENT.
         JE          E80             < SORTIE EN ERREUR ; A NOTER
                                     < QUE (X)>NCP N'EST PAS UNE ERREUR,
                                     < IL S'AGIT EN FAIT DU SAUT D'UN
                                     < ITEM A L'AUTRE POUR ACCEDER
                                     < AU NOM RECHERCHE.
<
< CAS D'UN INDEX VALIDE :
<
         LBY         &AIR            < A=CARACTERE DEMANDE.
         ADRI        1,X             < PROGRESSION DE L'INDEX
                                     < COURANT DES CARACTERES DE CE TYPE
                                     < (SOIT DU NOM CHERCHE , SOIT
                                     < D'UN NOM DEFINI).
         RSR                         < RETOUR.
<
< SORTIE EN ERREUR :
<
E80:     EQU         $
         ADRI        -1,K            < POUR SAUTER LE BSR D'APPEL.
         JMP         E81             < RETOUR DIRECT A LOOKP , AVEC
                                     < IL FAUT LE NOTER : X#0 !!!!
<
<
<        R E C H E R C H E   D ' U N   P R O G R A M M E  :
<
<
<        FONCTION :
<                      CETTE ROUTINE RECHERCHE LE NOM
<                    D'UN PROGRAMME APPELE , DANS L'ITEM
<                    COURANT OU DANS L'AUTRE ITEM (BIBLIOTHEQUE).
<                    NOM CHERCHE : &<NOM>;....
<                    NOM DEFINI : ><NOM>(....
<
<
<        ARGUMENT :
<                    SAVE=INDEX DU 1ER CARACTERE DU NOM CHERCHE ,
<                         C'EST-A-DIRE LE 1ER QUI SUIT '&'.
<
<
<        RESULTAT :
<                    X#0 : LE PROGRAMME CHERCHE N'EXISTE PAS ,
<                    X=0 , LE PROGRAMME CHERCHE EXISTE , ET ALORS :
<                    SAVE=INDEX DE LA 1ERE COMMANDE DU PROGRAMME ,
<                         (C'EST-A-DIRE , LA 1ERE QUI SUIT '(').
<
<
<
<        R E C H E R C H E   E N   B I B L I O T H E Q U E  :
<
LOOKPB:  EQU         $
         LXI         1               < ERREUR A PRIORI...
         LA          AIC
         SB          CBTR
         CP          AI2             < EST-ON AU DELA DES 4K ???
         JE          E81             < REFERENCE EN BIBLI INTERDITE
                                     < LORSQU'ON EST AU DELA DES 4K !!!
<
< RECHERCHE EN BIBLIOTHEQUE (MODE GLOBAL) :
<
         LA          SAVE
         AD          ACCEB           < L'INDEX D'ACCES AU NOM RECHERCHE,
                                     < EST TRANSLATE DE FACON A ETRE
                                     < ACCESSIBLE A PARTIR DE L'AUTRE
                                     < ITEM (CF. AIR).
         AD          ACCEB           < (TRANSLATION OCTET).
         STA         SAVE
         LA          AIC
         SB          ACCEB           < L'ITEM DE RECHERCHE N'EST PAS
                                     < L'ITEM COURANT.
         JMP         E200            < VERS LA RECHERCHE.
<
<        R E C H E R C H E   D A N S   L ' I T E M   C O U R A N T  :
<
LOOKP:   EQU         $
         LA          AIC             < LA RECHERCHE SE FAIT DANS L'ITEM
                                     < COURANT.
E200:    EQU         $
<        ON A ICI :
<                    A=RELAI VERS L'ITEM QUI SERA UTILISE
<                      DANS LA RECHERCHE.
         STA         AIR             < MISE EN PLACE DU RELAI VERS
                                     < L'ITEM DE RECHERCHE.
         RBT         0               < RAZ DU BIT INDEX.
         STA         F3              < SAVE TEMPORAIRE DE L'@ITEM DE
                                     < RECHERCHE DANS F3.
         LXI         0               < INITIALISATION DE L'INDEX ITEM.
<        ON A ICI :
<                    X=INDEX DE DEBUT DE NIVEAU (EVENTUELLEMENT
<                      0 DANS LE CAS D'UNE RECHERCHE GLOBALE ,
<                      OU D'1NE RECHERCHE LOCALE OU IL N'Y
<                      AURAIT PAS DE '(' PRECEDENTE.
<
< BOUCLE DE RECHERCHE :
<
E71:     EQU         $
         LAI         ">"             < A=OCTET RECHERCHE (DEFINITION
                                     < D'UN PROGRAMME GRAPHIQUE.
         LB          F3              < B=@ZONE DE RECHERCHE.
         LY          NCP             < Y=NBRE D'OCTETS DANS LA ZONE.
         SBS                         < RECHERCHE DE '>' ???
         JC          E81             < '>' NON TROUVE : RETOUR ERREUR.
         ADRI        1,X             < OK , ON A TROUVE '>' , ON
                                     < LE DEPASSE ...
E422:    EQU         $
<
< CAS OU ON TROUVE LA DEFINITION D'UN PROGRAMME :
<
<        ON A ICI :
<                    X=INDEX DU 1ER CARACTERE DU NOM DEFINI.
         LY          SAVE            < Y=INDEX DU 1ER CARACTERE
                                     < DU NOM CHERCHE.
<
< COMPARAISON DU NOM DEFINI (X) ,
< ET DU NOM CHERCHE (Y) :
<
E72:     EQU         $
         BSR         AGTCAR          < ACCES A UN CARACTERE DE L'ITEM.
         LR          A,B             < B=CARACTERE (X) DE LA DEFINITION.
         XR          X,Y
         BSR         AGTCAR          < A=CARACTERE (X) DU NOM CHERCHE.
         XR          X,Y
         CPR         A,B             < TEST DE COINCIDENCE DES 2 NOMS ???
         JE          E72             < OK , POURSUIVONS LA COMPARAISON.
<
< CAS D'UNE NON-COINCIDENCE :
<
         CPI         ";"             < EST-ON SUR LA FIN DU NOM CHERCHE?
         JNE         E71             < NON , PASSONS AU CARACTERE
                                     < SUIVANT DE L'ITEM (X).
<
< CAS DE LA FIN DU NOM CHERCHE :
<
         LR          B,A
         CPI         "("             < EST-ON AUSSI SUR LA FIN DU
                                     < NOM QUI EST DEFINI ???
         JNE         E71             < NON , PASSONS AU CARACTERE
                                     < SUIVANT DE L'ITEM (X).
<
< CAS OU ON TROUVE LA DEFINITION DU NOM CHERCHE :
<
E987:    EQU         $               < ENTRY 'APPEL DE L'ARGUMENT
                                     < FORMEL COURANT'.
         STX         SAVE            < SAVE=INDEX 1ERE COMMANDE DE LA
                                     < DEFINITION.
         LXI         0               < RETOUR OK (NOM TROUVE) ...
<
< SORTIE DE LA ROUTINE :
<
E81:     EQU         $               < ENTRY 'HORS-LA PAGE'.
         RSR                         < RETOUR AVEC (X) ....
         PAGE
<
<
<        A P P E L   D E   L ' A R G U M E N T   F O R M E L
<                    C O U R A N T  :
<
<
CARGF:   EQU         $
         LX          ARGF            < X=INDEX PRESUME DE LA 1ERE
                                     < PRIMITIVE DE L'ARGUMENT FORMEL
                                     < COURANT SI CELUI-CI EXISTE ...
         CPZR        X               < EXISTE-T'IL ???
         JL          E81             < NON , ERREUR ....
         JMP         E987            < OUI , ON LE TRAITE COMME LA
                                     < RENCONTRE DE LA DEFINITION
                                     < D'UN PROGRAMME CHERCHE.
<
<
<        R E N C O N T R E   D E   L ' A R G U M E N T
<        F O R M E L   C O U R A N T  :
<
<
DARGF:   EQU         $
         LX          IEG             < X=INDEX DE LA 1ERE PRIMITIVE
                                     < DE L'ARGUMENT FORMEL COURANT.
         STX         ARGF            < QUE L'ON SAUVEGARDE D'UNE
                                     < MANIERE NON RECURSIVE DANS
                                     < ARGF.
         RSR                         < RETOUR AVEC X#0.
         PAGE
<
<
<        I N I T I A L I S A T I O N   D E   Y  :
<
<
<        FONCTION :
<                      PEMET D'INITIALISER Y POUR
<                    EXECUTION D'UN PUSH PAR LA SUITE.
<                    Y CONTIENT ALORS LE NBRE DE REPETITIONS
<                    A FAIRE SOUS LE NIVEAU DE RECURSIVITE
<                    CREE PAR LE PUSH.
<
<
<        ARGUMENT :
<                    B=VALEUR INITIALE DE Y.
<
<
<        RESULTAT :
<                    Y=VALEUR.
<                    X INDIFFERENT (APPEL EN SEQUENTIEL).
<
<
SETY:    EQU         $
         LR          B,Y             < Y=VALEUR INITIALE.
         RSR                         < RETOUR INDIFFERENT.
         PAGE
<
<
<        V A L I D A T I O N   D U   P R O G R A M M E  :
<
<
<        RESULTAT :
<                    X=0 : L'ITEM COURANT EST DE TYPE 'TEXTE' ,
<                          OU DE TYPE 'DESSIN' ,
<                     #0 : L'ITEM N'EST NI DE TYPE 'DESSIN' ,
<                          NI DE TYPE 'TEXTE'.
<
<
<
<        V A L I D A T I O N   B I B L I O T H E Q U E  :
<
CHECKB:  EQU         $
         LA          ACCEB
         NGR         A,A
         ADRI        IINDIC-LTN,A    < INDEX MOT D'ACCES AU TYPE.
         CPZ         WORK            < VA-T'ON AU-DELA DE 4K ???
         JLE         E205X1          < NON...
         AD          CBTR            < OUI, ON TRANSLATE...
E205X1:  EQU         $
         LR          A,X             < (X)=INDEX MOT D'ACCES AU TYPE...
         ADR         X,X             < CONVERSION EN INDEX OCTET.
         JMP         E205            < VERS LA VALIDATION.
<
<        V A L I D A T I O N   P R O G R A M M E   I N I T I A L  :
<
CHECKT:  EQU         $
         LXI         IINDIC-LTN*2    < (INDEX OCTETS)
E205:    EQU         $
<        ON A ICI :
<                    X=INDEX D'ACCES AU TYPE A PARTIR DE L'ITEM COURANT.
         LBY         &AIC            < ACCES AU TYPE DE L'ITEM COURANT.
         ORI         '10             < ON FORCE LE BIT10 , AFIN DE
                                     < TESTER SIMULTANEMENT 'D' ET 'T' ,
                                     < DONT LES CODES NE DIFFERENT QUE
                                     < PAR CE BIT ('44 ET '54).
         LXI         "T"             < X=TYPE ATTENDU ('TEXTE').
         SBR         A,X             < X=0 SI LE TYPE DE L'ITEM COURANT
                                     < EST 'TEXTE' OU 'DESSIN'.
         RSR                         < RETOUR AVEC (X).
         PAGE
<
<
<        I N V E R S I O N   D E S   I N H I B I T I O N S
<                    D E   P R I M I T I V E S  :
<
<
<        FONCTION :
<                      SOIT LA COMMANDE :
<                    :<PRIMITIVE>
<                    ELLE A POUR EFFET D'INVERSER LE
<                    BIT0 DE L'ENTREE DE TCOM ASSOCIEE
<                    A <PRIMITIVE> . LORSQUE LE BIT0
<                    EST A 1 , ON FAIT UN SAUT IMPLICITE
<                    DANS LA GRAMMAIRE EN N1616 , QUI
<                    PERMET DE SIMULER UN SAUT DE DEFINITION
<                    DE SOUS-PROGRAMME ...
<                    (DANS LA MESURE OU UN '(' SUIT...)
<                      SOIT LA COMMANDE :
<                    "<PRIMITIVE>
<                    ELLE A POUR EFFET D'AUTORISER
<                    A PRIORI LA PRIMITIVE <PRIMITIVE> ,
<                    PAR MISE A 0 DU BIT0 DE SON ENTREE
<                    DANS TCOM.
<
<
<        ARGUMENT :
<                    Y=<PRIMITIVE>.
<                    B=0 : INVERSION DE <PRIMITIVE> ,
<                     =1 : AUTORISATION DE <PRIMITIVE>.
<
<
INVERS:  EQU         $
         LR          Y,X             < X=<PRIMITIVE> A INVERSER.
         LA          &ATCOM          < A=ENTREE DE TCOM POUR LA
                                     < <PRIMITIVE>.
         IBT         0               < INVERSION DU BIT0 A PRIORI.
         CPZR        B               < EST-CE EN FAIT UNE AUTORISATION ?
         JE          E988            < NON , UNE INVERSION.
         RBT         0               < ET OUI , AUTORISONS ....
E988:    EQU         $
         STA         &ATCOM          < MISE A JOUR DE TCOM.
         RSR                         < ET C'EST TOUT ...
         PAGE
<
<
<        E D I T E U R   G R A P H I Q U E  :
<
<
<        PHILOSOPHIE :
<                      CET EDITEUR GRAPHIQUE , PERMET A
<                    PARTIR D'UN PROGRAMME CREE SOUS 'ED'
<                    DE FAIRE DES DESSINS SUR LA VISU.
<                    LES MANIPULATIONS SUR CE DESSIN ,
<                    DU TYPE : EFFACER UNE PARTIE DU
<                    DESSIN , FAIRE SUBIR UNE TRANDSFORMATION
<                    A UNE PARTIE DU DESSIN , ... SONT
<                    FAITES AU NIVEAU DU TEXTE DU
<                    PROGRAMME.
<                      LE LANGAGE DE PROGRAMMATION EST
<                    LANGAGE RECURSIF A STRUCTURE DE
<                    BLOCS (STYLE ALGOL) : LES BLOCS
<                    SONT DELIMITES DANS LE LANAGE
<                    PAR DES COUPLES DE PARENTHESES
<                    '(' ET ')'.
<                      CETTE STRUCTURE DE BLOCS EST
<                    REALISEE A L'AIDE DE LA PILE
<                    DE RECURSIVITE 'PIR'.
<
<
         PROG
<
<
<        I N I T I A L I S A T I O N   D U   P R O C E S S E U R  :
<
<
<        FONCTION :
<                      CETTE ENTREE EST CELLE UTILISEE LORS
<                    DES APPELS PAR !GE.
<
<
APILE:   WORD        PILE-1          < POUR INITIALISER LE REGISTRE K.
         WORD        COM0            < INITIALISATION DE LA BASE C.
         WORD        LOC+'80         < INITIALOSATION DE LA BASE L.
GRAPH:   EQU         $
         LRP         K
         PLR         B,C,L,W         < INITIALISATION DE B , C , L , W.
                                     < W='LRP K' , FARFELUE!!!
         LR          B,K             < INITIALISATION DE K.
         IC          KIN             < COMPTAGE DES ENTRIES.
         JLE         NALTM           < C'EST LA 1ERE.
         LAI         '13
         STA         RETSVC          < LES ALT-MODES SONT ASSIMILES
                                     < A DES CTRL-X-OFF.
         BR          AGOGER          < ABORT.
NALTM:   EQU         $
         LAD         DEMMEM
         SVC         0               < DEMANDE D'ALLOCATION 6K.
<
<        I N I T I A L I S A T I O N   D E   ' G R '  :
<
E976:    EQU         $
<
<        C H A R G E M E N T   O V E R L A Y  :
<
         IF          VIDEO,,X100,
NOMBR:   VAL         "R"             < NOM DE LA BRANCHE DE GR.
NOMOV1:  VAL         " R"            < NOM DE L'VERLAY.
X100:    VAL         0
         IF          VIDEO,,,X100
NOMBR:   VAL         "T"             < NOM DE LA BRANCHE.
NOMOV1:  VAL         " T"            < NOM DE L'OVERLAY.
X100:    VAL         0
         LAI         NOMBR
         SBT         2
         STA         &ARACI          < MISE EN PLACE DE ' R'.
         LAI         " "
         SBT         2
         IC          ARACI
         STA         &ARACI          < MISE EN PLACE DE '  '.
         IC          ARACI
         STA         &ARACI          < MISE EN PLACE DE '  '.
         IC          ARACI
         LAI         '04
         STBY        &ARACI          < MISE EN PLACE D'UN 'EOT'.
         LAD         DEMLOD
E975:    EQU         $
         BSR         ASVC            < TENTATIVE DE CHARGEMENT.
         CPZ         RETSVC          < OK ???
         JNE         E975            < NON, TRY AGAIN...
         LA          APILD
         LR          A,K             < OUI, CHANGEMENT DE PILE.
         IF          VIDEO,,,X100
<
< PREPARATION DE LA STABILISATION VIDEO :
<
         IF          ORDI-"T",XWOR%,,XWOR%
         WORD        '1E25           < RENVOIE : A,B=<ACNESC>.
         CP          ACNSYS          < EST-CE :SYS ???
         JNE         ACN1            < NON.
         LR          B,A             < PEUT-ETRE...
         CP          ACNSYS+1        < EST-CE :SYS ???
         JE          ACN2            < OUI.
ACN1:    EQU         $               < ON N'EST PAS SOUS :SYS !!!
         STZ         ASP3            < RAZ DU RELAI MAITRE...
ACN2:    EQU         $
XWOR%:   VAL         0
         BSR         AVIS            < 1ERE STABILISATION VIDEO...
X100:    VAL         0
         JMP         LOOP            < ET C'EST PARTI...
         PAGE
<
<
<        P R I M I T I V E   ' G E T   C A R A C T E R '  :
<
<
<        FONCTION :
<                      SUIVANT LE MODE DE FONCTIONNEMENT
<                    COURANT DE GR , CETTE ROUTINE
<                    RECUPERE LE CARACTERE COURANT :
<                    1- DANS ITEM1 EN MODE PROGRAMME (BIT0(PIR)=0) ,
<                    2- PAR LECTURE DU CURSEUR GRAPHIQUE EN MODE
<                       INTERACTIF (BIT0(PIR)=1).
<                       (ET DE PLUS ELLE RANGE LE CARACTERE DE
<                       DEBLOCAGE DE LA VISU EN CARACTERE COURANT
<                       DE ITEM1).
<
<
<        ARGUMENT :
<                    B=0 : NE PAS TESTER LES CARACTERES 'A'/'B'/'S' ,
<                     #0 : TESTER LES CARACTERES D'EXTREMITE ('A'/
<                          'B'/'S') ET S'ILS SONT PRESENTS , LES
<                          INTERPRETER.
<
<
<        RESULTAT :
<                    Y=CARACTERE COURANT (IEG) DE L'ITEM COURANT.
<
<
PRIMG:   EQU         $
<
< VALIDATION DE IEG :
<
         LX          IEG             < X=INDEX D'EXECUTION DU PROGRAMME
                                     < GRAPHIQUE DAN SL'ITEM COURANT.
         LR          X,A
         CP          NCP             < VALIADTION DE L'INDEX IEG.
         LA          AGON22          < A=@NOEUD DE BRANCHEMENT SI
                                     < CARACTERE HORS-LA PAGE A PRIORI.
         JGE         E962            < ET OUI , HORS-LA PAGE ...
<
< ACCES AU CARACTERE COURANT (IEG) :
<
         LBY         &AIC            < A=CARACTERE COURANT.
E111:    EQU         $
         IC          IEG             < PREPARATION DE L'ACCES AU
                                     < CARACTERE SUIVANT.
F241:    EQU         $               < CAS DES "<" RENCONTRES ALORS
                                     < QUE ITEXTE=1...
         CPI         "Z"             < VALIDATION SUPERIEURE DU
                                     < CARACTERE COURANT (ET CECI
                                     < A CAUSE DE ':').
         LR          A,Y             < Y=CARACTERE COURANT (IEG) DE
                                     < L'ITEM COURANT.
         JG          E979            < ERREUR : CARACTERE NON RECONNU...
         IF          VIDEO,,X100,
<
< RECHERCHE DES ')' CORESPONDANTES AUX '('
< REMPLACEES PAR '<' LORS DES APPELS IMPLICITES
< INVALIDES :
<
         CPZ         ITEXTE          < APPEL IMPLICITE VALIDE ???
         JE          PRIMA           < OUI, OK...
         CPI         "<"             < EST-CE UN "<" REEL ???
         JNE         F240            < NON...
         LAI         "Z"+1           < OUI, ON LE REMPLACE PAR UN CODE
         JMP         F241            < SUPERIEUR A "Z", AFIN DE CREER
                                     < UNE ERREUR SUR "<" !!!!
F240:    EQU         $
         CPI         ")"             < NON, RECHERCHE DES ")"...
         JNE         PRIMA           < NON PAS ")"...
         LXI         CP              < OUI, C'EST ")", ALORS EST-ON
         LBY         &APRC           < SOUS LE BON NIVEAU DE
         ADRI        -1,A            < DESCENTE D'UN NIVEAU.
         CPBY        ICALLI          < RECURSIVITE ???
         JNE         PRIMA           < NON...
         STBY        &APRC           < RECURSIVITE...
         LYI         "!"             < OUI, ALORS ")" DEVIENT LE
                                     < CARACTERE DE FIN DE TEXTE
                                     < A EDITER "!" (INTRODUIT
                                     < PAR "<").
X100:    VAL         0
         JMP         PRIMA           < VERS UN RETOUR OK A LOOPB.
         PAGE
<
<
<        S Y N T A X E  :
<
<
<        <NOM>::=<CARACTERE DIFFERENT DE ';' ET DE '!'>
<        <NOM>::=<NOM><CARACTERE DIFFERENT DE ';' ET DE '!'>
<        <COMMENTAIRE>::=<<NOM>;
<        <TEXTE A EDITER>::=<<NOM>!
<        A::=<ORIGINE VECTEUR>
<        B::=<EXTREMITE SEQUENTIELLE VECTEUR>
<        S::=<EXTREMITE ETOILEE VECTEUR>
         IF          VIDEO,,,X100
<        <MISE A BLANC EN VIDEO>::=.
<        <BLANC SI NOIR/NOIR SI BLANC>::=,
X100:    VAL         0
         IF          VIDEO,,X100,
<        D::=<INVERSION ACCES ZDC>
<        I::=<ACCES 1 SEGMENT EN ZDC>
<        <COMMANDE>::=I
X100:    VAL         0
<        <ORIGINE>::=O
<        E::=<ECHELLE GENERALE>
<        K::=<CONSTANTE ECHELLE>
<        V::=<ECHANGE VISU '02-'0B>
<        <COMMANDE>::=D
<        U::=<COMMANDE DIRECTE DU 4014>
<        <COMMANDE>::=U<ARGUMENT>
         IF          ORDI-"S",XWOR%,,XWOR%
<        <ACCES DIRECT 'MEMTV'>::=L<MODE 'MEMTV'><COULEUR>
<        <COULEUR>::=0/1/2/3/4/5/6/7
<        <MODE 'MEMTV'>::=0/1/2/3
<        <COMMANDE>::=<ACCES DIRECT 'MEMTV'>
XWOR%:   VAL         0
         IF          VIDEO,,X100,
<        J::=INVERSION APPELS IMPLICITES/EDITION ALPHA-NUMERIQUE
<        <COMMANDE>::=J
X100:    VAL         0
<        Z::=<EFFACEMENT ECRAN>
<        F::=<RETOUR A GE>
<        C::=<RETOUR AU CCI>
<        RP::=<ROTATION +TETA>
<        RM::=<ROTATION -TETA>
<        R1::=<ROTATION +PI/2>
<        R3::=<ROTATION -PI/2>
<        SO::=<SYMETRIE ORIGINE>
<        SX::=<SYMETRIE OX>
<        SY::=<SYMETRIE OY>
<        S1::=<SYMETRIE B1>
<        A::=<DESORTHOGONALISATION AIGUE>
<        O::=<DESORTHOGONALISATION OBTUE>
<        H::=<DESORTHOGONALISATION HAUTE>
<        B::=<DESORTHOGONALISATION BASSE>
<        T::=<OPERATEUR MATRICIEL D'ORIENTATION>
<        <TRANSFORMATION ELEMENTAIRE>::=RP/RM/R1/R3/SO/SX/SY/S1/A/O/H/B
<        T::=<TRANSFORMATION ELEMENTAIRE>
<        T::=T<TRANSFORMATION ELEMENTAIRE>
<        <DEFINITION TRANSFORMATION>::=T=<TRANSFORMATION ELEMENTAIRE>...
<                                      ...<TRANSFORMATION ELEMENTAIRE>;
<        <MODIFICATION TRANSFORMATION>::=T<TRANSFORMATION ELEMENTAIRE>...
<                                        ..<TRANSFORMATION ELEMENTAIRE>;
<        <DEFINITION PROGRAMME>::=><NOM>(<COMMANDE>..<COMMANDE>)
<        <APPEL GLOBAL PROGRAMME>::=&<NOM>;
<        <APPEL GLOBAL PROGRAMME BIBLIOTHEQUE>::=?<NOM>;
<        <APPEL PROGRAMME>::=<APPEL GLOBAL PROGRAMME>
<        <APPEL PROGRAMME>::=<APPEL GLOBAL PROGRAMME BIBLIOTHEQUE>
<        <ARGUMENT FORMEL>::==(<COMMANDE>...<COMMANDE>)
<        <APPEL ARGUMENT FORMEL>::='
<        <APPEL ARGUMENT FORMEL DE L'AUTRE ITEM>::=0
<        <CHARGEMENT BIBLIOTHEQUE BASCULE>::=$<NOM>;
<        <CHARGEMENT OVERLAY>::=#<NOM>;
<        <CHARGEMENT BIBLIOTHEQUE AU DELA DE 4K>::=@<NOM>;
<        <Y(CURSEUR)>::=2
<        <X(CURSEUR)>::=1
<        <CURSEUR>::=<X(CURSEUR)>
<        <CURSEUR>::=<Y(CURSEUR)>
<        <CURSEUR>::=C
<        <NOM INTRINSEQUE>::=K/<CURSEUR>/Y/X/A/T
<        <PUSH>::=MI<NOM INTRINSEQUE>...<NOM INTRINSEQUE>;
<        <PULL>::=MO<NOM INTRINSEQUE>...<NOM INTRINSEQUE>;
<        <SAVE CONTEXTE>::=W<ARGUMENT>
<        <RESTAURE CONTEXTE>::=R<ARGUMENT>
<        <REPETITION>::=%<ARGUMENT>(<COMMANDE>...<COMMANDE>)
<        <ARGUMENT>::=1/2/.../9/A/B/.../X/Y/Z
<        <COMMANDE>::=Z/F/C
<        <MAKE COPY>::=H
<        <COMMANDE>::=<MAKE COPY>
<        <COMMANDE>::=A/B/S/+/-/*/// /;
<        <COMMANDE>::=X+/X-/X*/X//Y+/Y-/Y*/Y//
<        <COMMANDE>::=E<ARGUMENT>
<        <COMMANDE>::=K<ARGUMENT>
<        <COMMANDE>::=X<ARGUMENT>/Y<ARGUMENT>
<        <COMMANDE>::=<PUSH>/<PULL>
<        <COMMANDE>::=<APPEL PROGRAMME>
<        <COMMANDE>::=<CHARGEMENT BIBLIOTHEQUE>
<        <COMMANDE>::=<REPETITION>
<        <COMMANDE>::=<DEFINITION PROGRAMME>
<        <COMMANDE>::=<DEFINITION TRANSFORMATION>
<        <COMMANDE>::=<MODIFICATION TRANSFORMATION>
<        Q1::=<CHOIX PLAN (X3,Y3)>
<        Q2::=<CHOIX PLAN (Y3,Z3)>
<        Q3::=<CHOIX PLAN (Z3,X3)>
<        <COMMANDE>::=Q1/Q2/Q3
<        <COMMANDE>::=1/2/3/4
<        <COMMANDE>::=<ORIGINE>
<        <COMMANDE>::=K<ARGUMENT>
<        <COMMANDE>::=<COMMENTAIRE>
<        X+::=<DX:=(DX)+<CONSTANTE ECHELLE>>
<        X-::=<DX:=(DX)-<CONSTANTE ECHELLE>>
<        Y+::=<DY:=(DY)+<CONSTANTE ECHELLE>>
<        Y-::=<DY:=(DY)-<CONSTANTE ECHELLE>>
<        K<ARGUMENT>::=<<CONSTANTE ECHELLE>:=<ARGUMENT>>
<        X<ARGUMENT>::=<DX:=<CONSTANTE ECHELLE>*<ARGUMENT>>
<        Y<ARGUMENT>::=<DY:=<CONSTANTE ECHELLE>*<ARGUMENT>>
<        X*::=<DX:=(DX)*<CONSTANTE ECHELLE>>
<        X/::=<DX:=(DX)/<CONSTANTE ECHELLE>>
<        Y*::=<DY:=(DY)*<CONSTANTE ECHELLE>>
<        Y/::=<DY:=(DY)/<CONSTANTE ECHELLE>>
<        1::=<DX,0>
<        2::=<0,DY>
<        3::=<-DX,0>
<        4::=<0,-DY>
<        <DEPLACEMENT CURSEUR>:=T*1/2/3/4
<        +::=<X+><Y+>
<        -::=<X-><Y->
<        *::=<X*><Y*>
<        /::=<X/><Y/>
<        <INVERSION PRIMITIVE>::=:<PRIMITIVE>
<        <AUTORISATION PRIMITIVE>::="<PRIMITIVE>
<        <BRANCHEMENT : IEG<--(SAVE)>::=!
<        <PROGRAMME>::=<COMMANDE>....<COMMANDE>
<
< DEPLACEMENTS DANS L'ESPACE : ON ECRIRA LES
< PROGRAMMES SUIVANTS POUR SE DEPLACER
< SUR LES 3 DIMENSIONS D'ESPACE (X,Y,Z) :
<
<        1- X>0 :    >UP(Q1 1)
<        2- X<0 :    >UM(Q1 3)
<        3- Y>0 :    >VP(Q2 1)
<        4- Y<0 :    >VM(Q2 3)
<        5- Z>0 :    >WP(Q3 1)
<        6- Z<0 :    >WM(Q3 3)
<
<
<        <CARACTERE> A ENVOYER AU 4014 :
<        (LORS DE <COMMANDE>)
<
<        @           NORMAL Z AXIS AND NORMAL VECTORS OR ALPHA
<        A           NORMAL Z AXIS AND DOTTED LINE VECTORS
<        B           NORMAL Z AXIS AND DOT-DASHED VECTORS
<        C           NORMAL Z AXIS AND SHORT-DASHED VECTORS
<        D           NORMAL Z AXIS AND LONG-DASHED VECTORS
<        G           NORMAL Z AXIS
<        H           DEFOCUSED Z AXIS AND NORMAL VECTORS OR ALPHA
<        I           DEFOCUSED Z AXIS AND DOTTED VECTORS
<        J           DEFOCUSED Z AXIS AND DOT-DASHED VECTORS
<        K           DEFOCUSED Z AXIS AND SHORT-DASHED VECTORS
<        L           DEFOCUSED Z AXIS AND LONG-DASHED VECTORS
<        O           DEFOCUSED Z AXIS
<        P           WRITE-THRU MODE AND NORMAL VECTORS OR ALPHA
<        Q           WRITE-THRU MODE AND DOTTED VECTORS
<        R           WRITE-THRU MODE AND DOT-DASHED VECTORS
<        S           WRITE-THRU MODE AND SHORT-DASHED VECTORS
<        T           WRITE-THRU MODE ANS LONG-DASHED VECTORS
<        W           WRITE-THRU MODE
<        8           GRANDE TAILLE DE CARACTERES ALPHA-NUMERIQUES
<        9           MOYENNE TAILLE
<        :           PETITE TAILLE
<        ;           TRES PETITE TAILLE
<
<
<
         IF          VIDEO,,,X100
         IF          ORDI-"S",XWOR%,,XWOR%
<
<
<          LES COMMANDES "U0" A "U7" ENVOIENT LES CODES CORRESPONDANTS
<        SUR LA VISU ET NE FONT RIEN, MEME SUR LA 4014.
<          ELLES SERVENT POUR LA TELEVISION COMME SUIT :
<                    - "U0" : PROVOQUE L'ARRET DE LA VISUALISATION.
<                    - "U1" : PROVOQUE LA VISUALISATION SUR LE ROUGE.
<                    - "U2" : PROVOQUE LA VISUALISATION SUR LE BLEU.
<                    - "U3" : PROVOQUE LA VISUALISATION SUR LE VERT.
<                    - "U4" : EQUIVALENT A "U0".
<                    - "U5" : PROVOQUE LA LECTURE DE L'IMAGE VISUALISEE
<                             SUR LE ROUGE ET DEVIENT EQUIVALENT A "U1".
<                    - "U6" : PROVOQUE LA LECTURE DE L'IMAGE VISUALISEE
<                             SUR LE BLEU ET DEVIENT EQUIVALENT A "U2".
<                    - "U7" : PROVOQUE LA LECTURE DE L'IMAGE VISUALISEE
<                             SUR LE VERT ET DEVIENT EQUIVALENT A "U3".
<          CHACUNE DE CES COMMANDES RESTE EFFECTIVE JUSQU'A RENCONTRE
<        DE LA SUIVANTE.
<
<
XWOR%:   VAL         0
X100:    VAL         0
         PAGE
<
<
<        I N T E R P R E T E U R   D E S
<        P R O G R A M M E S   G R A P H I Q U E S  :
<
<
<        F O R M A T   D E S   P R I M I T I V E S  :
<
<                    OCTET0=FONCTION (NOM DE LA PRIMITIVE) ,
<                          BIT0=1 (TOUJOURS) ,
<                          BIT1=0 : MOT2 (ET EVENTUELLEMENT MOT3)
<                                   PRESENT(S).
<                              =1 : L'EXECUTION EST SEQUENTIELLE
<                                   (ON PASSE A LA PRIMITIVE SUIVANTE
<                                   EN FAISANT +2 SUR LA BASE C).
<                          BIT2=1 : ARG2 ABSENT.
<                          BIT3=1 : LE NOEUD SUIVANT EST N1 (QUELQUE
<                                   SOIENT LES CONDITIONS DE RETOUR).
<                    OCTET1=ARGUMENT1 ,
<                    MOT1=ARGUMENT2 ,
<                    MOT2=@PRIMITIVE SUIVANTE EN CAS D'ERREUR (IL
<                         FAUT BIT1(MOT0)=0) ,
<                    MOT3=@PRIMITIVE SUIVANTE SI OK (IL FAUT :
<                         BIT1(MOT0)=0).
<
<
PR:      VAL         0               < NOM DE LA PRIMITIVE+ARGUMENT1.
BSEQ:    VAL         1               < BIT INDICATEUR DE PRIMITIVE
                                     < SEQUENTIELLE (1).
PBSEQ:   VAL         '40             < POUR POSITIONNER LE BIT 'BSEQ'.
LPRIM:   VAL         2               < LPRIM=1 : ARG2 EST ABSENT.
PLPRIM:  VAL         '20             < POUR POSITIONNER LE BIT 'LPRIM'.
GON1:    VAL         3               < BIT INDIQUANT QUE LE NOEUD
                                     < SUIVANT EST LE NOEUD N1 (1).
PGON1:   VAL         '10             < POUR POSITIONNER LE BIT 'GON1'.
ARG2:    VAL         1               < ARGUMENT2.
ADER:    VAL         2               < @PRIMITIVE SUIVANTE SI ERREUR.
ADOK:    VAL         3               < @PRIMITIVE SUIVANTE SI OK.
<
<
<        FONCTION    ARGUMENT1       ARGUMENT2
<
<        PC          (???)           @ROUTINE    CALL.
<-----------------------------------------------------------------------
<        PCI         (???)           @NOEUD      CALL ROUTINE RELAYEE
<                                                PAR LE NOEUD D'@ ARG2.
<-----------------------------------------------------------------------
<        PT          CARACTERE-ASCI              TEST-CARACTERE.
<-----------------------------------------------------------------------
<        PUSH                                    EMPILEMENT DANS PR.
<-----------------------------------------------------------------------
<        PULL                                    DEPILEMENT DE PR.
<-----------------------------------------------------------------------
<        PG                                      ACCES AU CARACTERE
<                                                COURANT DE L'ITEM1.
<-----------------------------------------------------------------------
<        PTD                                     TEST DIRECT DES
<                                                CARACTERES DE 'SPACE'
<                                                A 'Z' ; ON TROUVE
<                                                LA LISTE DES @NOEUDS
<                                                OU SE BRANCHER PAR
<                                                INDEXATION.
<
<
<        UTILISATION DES REGISTRES :
<                    B=ARGUMENT1.
<                    X=NOM PRIMITIVE , ET CONDITIONS D'EXECUTION
<                      EN RETOUR DES PRIMITIVES (0 SI OK) ,
<                    Y=EN GENERAL LE CARACTERE COURANT (IEG) DE
<                      L'ITEM COURANT.
<                    C=@PRIMITIVE COURANTE ,
<                    W=@BRANCH.
<
<
<        P R I M I T I V E S   A   A D R E S S E ( S )  :
<
PC:      VAL         1+'80           < PRIMITIVE 'CALL'.
PCI:     VAL         2+'80           < PRIMITIVE 'CALL INDIECT'.
PUSH:    VAL         3+'80+PLPRIM    < EMPILEMENT DANS PIR SANS ARG2.
PULL:    VAL         4+'80+PLPRIM    < DEPILEMENT DE PIR SANS ARG2.
PG:      VAL         5+'80+PLPRIM    < GET CARACTERE SANS ARG2.
PTD:     VAL         6+'80+PLPRIM    < TEST DIRECT DE CARACTERE.
PT:      VAL         7+'80           < PRIMITIVE 'TEST'.
<
<        A T T E N T I O N  :
<                      PRIMT DOIT ETRE LA DERNIERE PRIMITIVE
<                    A CAUSE DE LA TABLE D'AIGUILLAGE DE
<                    L'INTERPRETEUR.
<
PTM:     VAL         PT+PLPRIM       < PRIMITIVE 'TEST' SANS ARG2.
<
<        P R I M I T I V E S   S E Q U E N T I E L L E S  :
<
PCS:     VAL         PC+PBSEQ        < 'CALL' SEQUENTIEL.
PUSHS:   VAL         PUSH+PBSEQ      < 'PUSH' SEQUENTIEL.
PULLS:   VAL         PULL+PBSEQ      < 'PULL' SEQUENTIEL.
PGS:     VAL         PG+PBSEQ        < 'GET CARACT' SEQUENTIEL.
<
<
<        P R I M I T I V E   ' C A L L '  :
<
<
PRIMCI:  EQU         $
         LA          ARG2,C          < A=@NOEUD DE RELAI DE LA ROUTINE.
         LR          A,C             < C=@NOUVEAU NOEUD.
PRIMC:   EQU         $
         BSR         ARG2,C          < APPEL DE LA ROUTINE DONT
                                     < L'ADRESSE EST DONNEE PAR ARG2.
         JMP         LOOPB           < VERS LE RETOUR DES PRIMITIVES ,
                                     < X AYNAT ETE EVENTUELLEMENT
                                     < POSITIONNE PAR LA ROUTINE (ARG2).
<
<
<        T E S T   D I R E C T   C A R A C T E R E  :
<
<
PRIMTD:  EQU         $
         LXI         CP
         LBY         &APRC           < A=COMPTE COURANT DES PARENTHESES
                                     < SOUS CE NIVEAU DE RECURSIVITE.
         CPBY        ICALLI          < TEST PAR RAPPORT AU SEUIL ...
         LR          Y,A             < A=CARACTERE COURANT A PRIORI.
         JL          E979            < LORSQUE LE COMPTE COURANT EST
                                     < STRICTEMENT INFERIEUR A 4 ,
                                     < ON CONSERVE LE MODE NORMAL DES
                                     < PRIMITIVES ....
<
< CAS OU LE COMPTE DE PARENTHESES SOUS CE
< NIVEAU EST SUPERIEUR OU EGAL A (ICALLI) ,
< ON PROCEDE A L'APPEL IMPLICITE DE
< PROGRAMMES DE BIBLIOTHEQUE ...
< LE FORMAT DE LA BIBLIOTHEQUE DOIT ALORS
< ETRE SPECIAL , ET ETRE COMPOSEE EN TETE
< DE BLOCS DE 5 CARACTERES DU TYPE '&X; )' ,
< CLASSE PAR ORDRE CROISSANT DES VALEURS DES
< CARACTERES.
<
         IF          VIDEO,,X100,
<
< DE PLUS, SI ITEXTE#0, CET APPEL IMPLICITE,
< EST REMPLACE PAR UNE EDITION ALPHA-NUMERIQUE
< DU TEXTE CORRESPONDANT :
<
         CPZ         ITEXTE          < QUE FAIRE ???
         JE          F200            < UN APPEL IMPLICITE...
<
< CAS DE L'EDITION ALPHA-NUMERIQUE :
<
<        NOTA :
<                      ")" EST TESTEE DIRECTEMENT PAR LA
<                    GRAMMAIRE D'EMISSION DES TEXTES, PUISQU'
<                    ELLE EST MODIFIEE ")" <--> "!" LORS
<                    DE LA COMMANDE "J".
<
         CPI         "("
         JNE         E979            < LES CARACTERES DIFFERENTS
                                     < DE "(" ET ")" SONT CONSERVES.
         LBY         &APRC
         ADRI        1,A             < ET ON MONTE DANS
         STBY        &APRC           < LA RECURSIVITE...
         LAI         "<"             < "(" EST REMPLACEE PAR "<",
                                     < QUI EST LA COMMANDE D'EDITION
                                     < DE TEXTE.
         JMP         E979
<
< CAS DES APPELS IMPLICITES :
<
< ROLE DE "@" : LORSQUE CE CARACTERE EST RENCONTRE,
< IL PROVOQUE LA LECTURE ALPHA-NUMERIQUE D'UN
< CARACTERE SUR LA VISU '01 QUI DEVIENT LE
< NOUVEAU CARACTERE D'APPEL IMPLICITE...
<
F200:    EQU         $
X100:    VAL         0
         CPI         ")"             < EST-CE UNE FERMANTE ???
         JE          E979            < OUI , ON LA CONSERVE.
         CPI         "("             < EST-CE UNE OUVRANTE ????
         JE          E979            < OUI , ON LA CONSERVE ...
         CPI         "@"             < CARACTERE D'ENTREE ???
         JNE         G240            < NON...
G241:    EQU         $
         LAD         CG
         SVC         0               < OUI, RETOUR EN ALPHA-NUMERIQUE.
         LA          ADEMIN
         SVC         0               < ENTREE D'UN CARACTERE.
         LAD         OG
         SVC         0
         LBY         BUFIN           < A=CARACTERE ENTRE...
         CPI         " "             < VALIDATION...
         JL          G241            < ERREUR, ON RECOMMENCE...
         CPI         "Z"             < VALIDATION...
         JG          G241            < ERREUR, ON RECOMMENCE...
G240:    EQU         $               < A=NOM D'APPEL IMPLICITE.
         ADRI        -'20,A          < LES AUTRES CARACTERES SONT
                                     < TRANSLATES PAR RAPPORT A 'SPACE'.
         MP          C5              < ON MULTIPLIE PAR LA LONGUEUR
                                     < DES BLOCS D'EN-TETE DE LA
                                     < BIBLIOTHEQUE.
         STB         SAVE            < QUE L'ON MET DANS SAVE COMME
                                     < FUTUR POINT D'ENTREE D'UN
                                     < SOUS-PROGRAMME A APPEL IMPLICITE.
<
< ATTENTION : LORSQU'ON EST DANS L'ITEM2, LES APPELS
< IMPLICITES SONT ENVOYES AUTOMATIQUEMENT AU DELA DES
< 4K (VOIR LES BIBLIOTHEQUES @<NOM>;).
<
         LA          AIC
         CP          AI2             < EST-ON DANS ITEM2 ???
         JNE         E7615           < NON...
         AD          CBTR            < OUI, PASSAGE AU DELA DE 4K MOTS.
         AD          ACCEB           < AFIN D'ANNULER LE 'CHGTI'...
         STA         AIC
E7615:   EQU         $
         LAI         "!"             < ET LE CARACTERE COURANT EST
                                     < REMPLACE PAR LE CARACTERE DE
                                     < BRANCHEMENT '!'.
E979:    EQU         $               < CARACTERE NON RECONNU LORS
                                     < DE GET-CARACTERE.
         LXI         1               < RETOUR EN ERREUR A PRIORI.
         CPI         "Z"             < VALIDATION SUPERIEURE DE (A).
         JG          LOOPB           < ERREUR : CARACTERE NON RECONNU.
         ADRI        -'20,A          < TRANSLATION PAR RAPPORT A 'SPACE'
         JAL         LOOPB           < ERREUR : CARACTERE NON RECONNU.
         LXI         0               < RETOUR OK (PAR PROPRETE).
         ADR         A,C             < SI LE CARACTERE EST DANS
                                     < LE SEGMENT ('SPACE','Z') IL
                                     < RECONNU , ET SERT D'INCREMENT
                                     < A LA BASE C POUR ATTEINDRE SON
                                     < NOEUD DE TRAITEMENT ; RETOUR OK.
         LA          ADER,C          < ACCES A L'ADRESSE DE TRAITEMENT
                                     < DE LA PRIMITIVE (Y).
         JAGE        E962            < OK , PRIMITIVE NON INHIBEE.
         LA          ASAUT           < LORSQUE LA PRIMITIVE EST INHIBEE ,
                                     < ON FAIT UN SUAT IMPLICITE DANS
                                     < LA GRAMMAIRE EN N1616.
         JMP         E962            < VERS LA BOUCLE DE L'INTERPRETEUR.
<
<
<        P R I M I T I V E   ' G O T O '  :
<
<
PRIMA:   EQU         $
         LXI         0               < IL SUFFIT DE FAIRE UN RETOUR OK.
<
<
<        R E T O U R   D E S   P R I M I TI V E S  :
<
<
LOOPB:   EQU         $
<        ON A ICI :
<                    B=QUELQUE CHOSE (ARG1,....) ,
<                    X=CONDITION DE RETOUR DE LA PRIMITIVE (0 : OK).
         LA          PR,C            < POUR TESTER LES BITS 0 & 1
                                     < DE LA PRIMITIVE QUE L'ON VIENT
                                     < D'EXECUTER.
         TBT         GON1            < DOIT-ON ALLER AU NOEUD 'N1' ???
         JNC         E961            < NON.
         LA          AGON1           < OUI : A=@NOEUD N1.
         JMP         E962            < VERS LE SAUT EN N1.
E961:    EQU         $
         TBT         LPRIM           < ARG2 EST-IL ABSENT ????
         SBCR        C               < SI OUI , IL FAUT DECREMENTER
                                     < LA BASE C D'UNE UNITE.
         ADRI        ADER-PR,C       < CAS PRIMITIVE SEQUENTIELLE
                                     < A PRIORI.
         TBT         BSEQ            < TEST DU BIT 'SEQUENTIEL'.
         JC          LOOP            < EN EFFET LA PRIMITIVE QUE L'ON
                                     < VIENT D'EXECUTER EST DE TYPE
                                     < SEQUENTIELLE , (C) EST BONNE.
<
< CAS DES PRIMITIVES A ADRESSE(S) :
<
         CPZR        X               < COMMENT CELA S'EST-L PASSE ???
         JNE         E2              < MAL , ET VOUS ??? RETOUR
                                     < EN ERREUR PAR 'ADER'.
         ADRI        ADOK-ADER,C     < BIEN , RETOUR PAR 'ADOK'.
E2:      EQU         $
         LA          0,C             < ACCES A L'@PRIMITIVE SUIVANTE.
         JAL         LOOP            < EN FAIT CE QUE L'ON VIENT
                                     < D'ACCEDER EST LA PRIMITIVE
                                     < SUIVANTE ELLE-MEME (CF. BIT0=1).
                                     < (ET (C) EST DONC BON).
E962:    EQU         $               < CAS DES SAUTS IMPLICITES EN N1.
         LR          A,C             < SINON ON SE 'BRANCHE' SUR LA
                                     < PRIMITIVE SUIVANTE.
<
<
<        B O U C L E   D E   L ' I N T E R P R E T E U R
<                    G R A P H I Q U E  :
<
<
LOOP:    EQU         $
         LAI         0               < NETTOYAGE DE A.
         LB          PR,C            < ACCES A LA PRIMITIVE COURANTE.
         DV          C100            < DECONCATENATION : B=ARGUMENT1.
         ANDI        'F              < A=NOM DE LA PRIMITIVE (C).
         ADRP        A               < GOTO L'EXECUTION SPECIFIQUE.
<
<        T A B L E   D ' A I G U I L L A G E  :
<
         JMP         PRIMC           < PRIMITIVE 'CALL'.
         JMP         PRIMCI          < PRIMITIVE 'CALL INDIRECT'.
         JMP         PRIMPS          < PUSH.
         JMP         PRIMPL          < PULL.
         JMP         PRIMG           < PRIMITIVE 'GET CARACTERE'.
         JMP         PRIMTD          < PRIMITIVE 'TEST DIRECT CARACTERE'
<
<
<        P R I M I T I V E   ' T E S T   C A R A C T E R E '  :
<
<
<        ARGUMENT :
<                    Y=CARACTERE COURANT (IEG) DE L'ITEM COURANT ,
<                    B=CARACTERE ATTENDU.
<
<
<        RESULTAT :
<                    X=0 : (B)=(Y) ,
<                    X#0 : (B)#(Y).
<
<
PRIMT:   EQU         $
         LXI         1               < CARACTERE (B) NON RECONNU A
                                     < PRIORI ; IL EST A NOTER QUE LA
                                     < NON RECONNAISSANCE A LIEU PLUS
                                     < SOUVENT QUE LA RECONNAISSANCE
                                     < EN ANALYSE SYNTAXIQUE , C'EST
                                     < POURQUOI ON CHOISIT L'ERREUR
                                     < A PRIORI.
         CPR         Y,B             < TEST DE ECONNAISSANCE.
         JNE         LOOPB           < CARACTERE RECONNU , RETOUR
                                     < EN ERREUR A LOOPB.
<
< CAS OU LA RECONNAISSANCE A EU LIEU :
<
         JMP         PRIMA           < VERS UN RETOUR OK A LOOPB.
<
<
<         P U S H   P I L E   D E   R E C U R S I V I T E  :
<
<
<        ARGUMENT :
<                    B=0 : UNIQUEMENT COMPTER LES PARENTHESES '(' ,
<                    B=CAUSE DU PUSH#0 : EMPILEMENT REEL DANS PIR.
<                     ='40 : PUSH POUR REPEAT ,
<                     ='20 : PUSH POUR APPEL PROGRAMME.
<                     ='10 : PUSH POUR SAUT DE DEFINITION DE PROGRAMME.
<                     ='20+'10 : PUSH POUR APPEL PROGRAMME , AVEC
<                                CHANGEMENT D'ITEM COURANT.
<                    Y=NBRE DE REPETITIONS A FAIRE SOUS CE NIVEAU.
<                      (SIGNIFICATIF UNIQUEMENT SI B#0).
<
<
<        RESULTAT :
<                    X#0 : SI L'OPERATION DEMANDEE EST ILLICITE.
<
<
PRIMPS:  EQU         $
         CPZR        B               < EST-CE UN VRAI PUSH ????
         JE          E15             < NON , COMPTE DES '('.
<
< CAS DES PUSH VERITABLES :
<
         LA          APRC            < ACCES AU RELAI COURANT VERS PIR.
         RBT         0               < A=@ENTREE COURANTE DANS PIR.
         LXI         CDCP            < A PRIORI X=1#0 (RETOUR EN
                                     < ERREUR).
         CP          TPR             < EST-ON DEJA UA SOMMET DE PIR ???
         JGE         LOOPB           < OUI , RETOUR EN ERREUR ,
                                     < ON NE PEUT EMPILER : X=1#0 !!!
<
< CAS OU ON PEUT EMPILER :
<
         LA          APRC
         ADRI        LEPR,A          < PASSAGE SUR L'ENTREE SUIVANTE
                                     < DE PIR.
         STA         APRC
<
< INITIALISATION DE LA NOUVELLE ENTREE :
<
         SWBR        Y,A             < CD=(Y) (COMPTE DE REPETITIONS).
         ANDI        'FF00           < CLEAR L'OCTET 1 DE A.
         ORI         1               < CP=1 (COMPTE DE PARENTHESES).
         STA         &APRC           < MISE DANS LE MOT1 DE L'ENTREE
                                     < COURANTE DE PIR.
         LXI         IR              < RETOUR OK (X=IR=0).
         SWBR        B,A             < MISE DE LA CAUSE DU PUSH EN
                                     < OCTET0 DE A.
         AD          IEG             < RECUPERATION DE L'INDEX COURANT.
         TBT         BITREP          < EST-CE UN PUSH POUR REPETITIONS??
         SBCR        A               < SI OUI , RETOUR SUR '('.
         STA         &APRC           < MISE EN MOT0 DE LA NOUVELLE
                                     < ENTREE COURANTE DE PIR.
<
< TEST D'UN CHANGEMENT D'ITEM :
<
         TBT         BITPRO
         JNC         PRIMA           < CE N'EST PAS L'APPEL D'UN
                                     < PROGRAMME : RETOUR OK A LOOPB.
         TBT         BITDEF          < CAS D'UN APPEL PROGRAMME ,
                                     < Y-A-T'IL DE PLUS UN CHANGEMENT
                                     < D'ITEM COURANT ???
         JNC         PRIMA           < NON , RETOUR OK A LOOPB.
         BSR         ACHGTI          < CHANGEMENT D'ITEM COURANT.
E201:    EQU         $
<        ON A ICI :
<                    MOT0(ENTREE COURANTE PIR)=CAUSE-PUSH/INDEX-'(' ,
<                    OCTET2(ENTREE COURANTE PIR)=NBRE DE REPETITIONS ,
<                    OCTET3(ENTREE COURANTE PIR)=1 (COMPTE PARENTHESES).
         JMP         PRIMA           < VERS UN RETOUR OK A LOOPB.
<
< COMPTE DES '(' :
<
E15:     EQU         $
         LXI         CP
         LBY         &APRC           < ACCES AU COMPTE ALGEBRIQUE
                                     < DES PARENTHESES.
         ADRI        1,A             < ET UNE '(' DE PLUS.
         TBT         7               < CE COMPTE TIENT-IL DANS
                                     < UN OCTET ????
         JC          LOOPB           < NON , ERREUR : X=CP#0.
         STBY        &APRC           < SI LE COMPTE EST VALIDE , ON
                                     < MET A JOUR CP.
         JMP         PRIMA           < RETOUR OK A LOOPB.
<
<
<        P U L L    P I L E   D E   R E C U R S I V I T E  :
<
<
<        FONCTION :
<                      CE MODULE GERE POUR CHAQUE ENTREE
<                    COURANTE DE PIR , LES COMPTES DE
<                    BOUCLE DE REPETITIONS , ET LE COMPTE
<                    ALGEBRIQUE DES PARENTHESES (+1 POUR '(' ,
<                    -1 POUR ')') . LORSQUE LE COMPTE DE
<                    PARENTHESES PASSE PAR 0 , IL
<                    REGARDE SI IL Y A UNE REPETITION
<                    A FAIRE (C-A-D SI LE COMPTE DE
<                    REPETITIONS RESTANT A FAIRE EST #0).
<                    S'IL N'Y A PLUS DE REPETITIONS
<                    A FAIRE , IL Y A UN PULL VERITABLE
<                    D'EFFECTUER SUR PIR.
<
<
<        ARGUMENT :
<                    B#0 : PULL VERITABLE ,
<                    B=0 : FAIRE UNIQUEMENT -1 SUR LE CP COURANT.
<                          (PERMET DE COMPTER LES ')' ).
<
<
<        RESULTAT :
<                    X#0 : SI L'OPERATION DEMANDEE EST ILLICITE.
<                          OU SI CP=0 DANS LE CAS B=0.
<
<
PRIMPL:  EQU         $
<
< DECOMPTE DES PARENTHESES :
<
         LXI         CP
         LBY         &APRC           < ACCES AU COMPTE COURANT DES
                                     < PARENTHESES SOUS CE NIVEAU DE PIR
         JAE         LOOPB           < ERREUR : TROP DE ')' , A NOTER
                                     < QU'ON A : X=CP#0.
         ADRI        -1,A
         STBY        &APRC           < SINON , MAJ DU CP COURANT.
         JANE        PRIMA           < RETOUR OK SANS DEPILEMENT
                                     < SI LE CP NE PASSE PAR 0.
<
< CAS D'UN COMPTE DE PARENTHESES NUL :
<
         CPZR        B               < TEST DU MODE D'APPEL ???
         JE          LOOPB           < CAS B=0 : ON FAIT UN RETOUR
                                     < EN ERREUR (X#0) POUR ANNULATION
                                     < DU CP COURANT.
E101:    EQU         $
<
< DECOMPTE DES REPETITIONS :
<
         LXI         CD
         LBY         &APRC
         JAE         PRIMA           < CAS DE LA 1ERE ENTREE DE LA PILE,
                                     < IL NE FAUT SURTOUT PAS DEPILER ,
                                     < CAR ON TOMBERAIT EN ERREUR.
         ADRI        -1,A            < A=NBRE DE REPETITIONS RESTANT
                                     < A FAIRE SOUS CE NIVEAU DE PIR.
         JANE        E14             < IL RESTE AU MOINS UNE REPETITION
                                     < A FAIRE , ALLONS Y ....
<
< CAS OU IL N'Y A PLUS DE REPETITIONS
< A FAIRE , ON FAIT UN PULL VERITABLE SUR
< PIR ; A NOTER QUE L'INDEX IEG A
< LA VALEUR QUI LUI CONVIENT POUR
< PERMETTRE L'ACCES AU CARACTERE SUIVANT
< LA ')' :
<
         LA          APRC
         RBT         0               < ACCES A L'ADRESSE DE L'ENTREE
                                     < COURANTE DE PIR.
         LXI         1               < ERREUR A PRIORI.
         CP          BPR             < EST-ON DEJA A LA BASE DE LA PIR ?
         JLE         LOOPB           < OUI , RETOUR EN ERREUR : ON NE
                                     < PEUT ALLER PLUS BAS !!! (X=1).
<
< CAS OU ON PEUT DEPILER :
<
E90:     EQU         $               < ENTRY POUR RETOUR PROGRAMME.
         LA          APRC
         ADRI        -LEPR,A         < RETOUR SUR L'ENTREE PRECEDENTE
                                     < DE PIR.
         STA         APRC
         JMP         PRIMA           < VERS UN RETOUR OK A LOOPB.
<
< CAS OU IL RESTE AU MOINS UNE REPETITION :
<
E14:     EQU         $
         STBY        &APRC           < MAJ DU CD COURANT.
         LXI         IR
         LA          &APRC
         LR          A,B             < B=ENTREE 'IR' DE PIR.
         TBT         BITPRO          < EST-CE UN RETOUR DE PROGRAMME ???
         AND         CFFF            < RAZ DES BITS 0,1,2 ET 3.
         STA         IEG             < RETOUR AU DEBUT DE LA REPETITION.
         JNC         LOOPB           < CE N'EST PAS UN RETOUR DE
                                     < PROGRAMME , FAISON DONC UN
                                     < RETOUR OK ; A NOTER : X=IR=0 (OK)
<
< CAS D'UN RETOUR DE PROGRAMME :
<
         TBT         16+BITDEF
         JNC         E90             < C'EST UN RETOUR SANS CHANGEMENT
                                     < D'ITEM COURANT ; ALLONS DEPILER
                                     < LA RECURSIVITE PIR.
         LA          AIC
         SB          CBTR            < EST-CE UN RETOUR D'AU DELA
                                     < DES 4K ???
         CP          AI2             < ALORS ???
         JNE         E7616           < NON.
         AD          ACCEB           < AFIN D'ANNULER LE 'CHGTI'...
         STA         AIC             < OUI, ON REVIENT DANS LES 4K.
E7616:   EQU         $
         BSR         ACHGTI          < CHANGEMENT D'ITEM COURANT.
         JMP         E90             < VERS LE DEPILEMENT DE LA
                                     < RECURSIVITE PIR.
         PAGE
<
<
<        C H A N G E M E N T   D ' I T E M   C O U R A N T  :
<
<
CHGTI:   EQU         $
         LA          ACCEB
         NGR         A,A             < LA CONSTANTE DE TRANSLATION
                                     < EST INVERSEE.
         STA         ACCEB
         AD          AIC
         STA         AIC             < TRANSLATION DE L'ITEM COURANT
                                     < (CETTE TRANSLATION EST POSITIVE ,
                                     < OU NEGATIVE).
         RSR
         PAGE
<
<
<        P R O G R A M M E   I N T E R P R E T A T I F
<        D ' I N T E R P R E T A T I O N   D E S
<        P R O G R A M M E S   G R A P H I Q U E S  :
<
<
<
<        R E T O U R   A U   C C I  :
<
N23:     BYTE        PC+PGON1;0
         WORD        GOCCI           < RETOUR CCI , PUIS RETOUR A GE.
<
<        E R R E U R S   D ' E X E C U T I O N   O U
<        C O M M A N D E   N O N   R E C O N N U E  :
<
N24:     EQU         $
N25:     EQU         $
N27:     EQU         $
         BYTE        PC+PGON1;0
         WORD        CARUP           < MISE EN POSITION HAUTE DU
                                     < CARACTERE ERRONNE EVENTUELLEMENT.
<
<        P R I M I T I V E S   N O N   R E C O N N U E S  :
<
N610:    EQU         N27             < CAS DES PRIMITIVES NON RECONNUES.
<
<        R E T O U R   E N   E R R E U R
<        A   L ' A P P E L A N T  :
<
N700:    BYTE        PCS;0
         WORD        GOGER           < RETOUR A L'APPELANT SANS TOUCHER
                                     < AU TYPE DE L'ITEM1.
<
<        R E T O U R   A   ! G E  :
<
N22:     BYTE        PCS;0
         WORD        GOGE            < TENTATIVE DE CHARGEMENT DE
                                     < L'OVERLAY !GE ; SI CE N'EST PAS
                                     < UNE REUSSITE , ON REND LA MAIN
                                     < AU CCI.
<
<        E C H A N G E   V I S U S   ' 0 2   E T   ' 0 B  :
<
N10001:  BYTE        PC+PGON1;0
         WORD        CHVISU
<
<        I N V E R S I O N   D E S   I N H I B I T I O N S  :
<
N940:    BYTE        PGS;0           < Y=<PRIMITIVE> A INVERSER.
         BYTE        PC+PGON1;0
         WORD        INVERS          < INVERSION DE LA PRIMITIVE
<
<        A U T O R I S A T I O N   P R I M I T I V E  :
<
N945:    BYTE        PGS;0           < Y=<PRIMITIVE> A AUTORISER.
         BYTE        PC+PGON1;1      < B=1 : AUTORISATION PRIMITIVE.
         WORD        INVERS          < AUTORISATION DE LA PRIMITIVE (Y).
<
<        T R A I T E M E N T   D E S   I N H I B I T I O N S  :
<
N1616:   EQU         $
         BYTE        PGS;1           < 1 AFIN DE POUVOIR RENTRER
                                     < CORRECTEMENT DANS LA BOUCLE
                                     < D'ANALYSE PRINCIPALE MEME
                                     < EN MODE INTERACTIF.
         BYTE        PTM;"("         < EST-CE UNE OUVRANTE ???
         WORD        N1617           < NON , ACCES A LA PRIMITIVE
                                     < SUIVANTE (Y).
         WORD        N1000           < DANS LE CAS D'UNE OUVRANTE ,
                                     < ON VA SAUTER TOUT CE QUI EST
                                     < ENTRE L'OUVRANTE ET LA FERMANTE.
<
<        E F F A C E M E N T   E C R A N  :
<
N21:     BYTE        PC+PGON1;0
         WORD        ERASE           < EFFACEMENT ECRAN.
<
<        H A R D - C O P Y  :
<
N750:    BYTE        PC+PGON1;0
         WORD        HCOPY           < HARD-COPY ET TEMPORISATION.
<
<        C O M M A N D E   D I R E C T E   4 0 1 4  :
<
N10002:  BYTE        PGS;0           < Y=COMMANDE POUR LE 4014.
         BYTE        PC+PGON1;0
         WORD        COMAND          < ENVOI AU 4014 SI EXISTE !!!
<
<        T R A I T E M E N T   D E S   ' ( '   S I M P L E S  :
<
N14:     BYTE        PUSH;0          < UNIQUEMENT POUR FAIRE +1 SUR CP.
         WORD        N27             < TROP DE '(' : ABORT ...
         WORD        N1              < OK , GO ON ...
<
<        T R A I T E M E N T   D E S   ' ) '  :
<
N15:     BYTE        PULL;1          < PULL VERITABLE.
         WORD        N27             < TROP DE ')' : ABORT.
         WORD        N1              < OK.
<
<        D E F I N I T I O N   A R G U M E N T   F O R M E L  :
<
N1001:   EQU         $
         BYTE        PGS;0           < ACCES AU CARACTERE COURANT (Y).
         BYTE        PTM;"("         < UNE '(' SUIT-ELLE LE SIGNE '=' ???
         WORD        N27             < NON , MISSING '(' ....
         BYTE        PC;0            < OUI , OK.
         WORD        DARGF           < SAVE DANS ARGF L'INDEX DE
                                     < LA 1ERE PRIMITIVE DE L'ARGUMENT
                                     < FORMEL COURANT.
         WORD        N1000           < RETOUR EN ERREUR DE DARGF POUR
                                     < ALLER VERS LE SAUT DE LA DEFINITION
                                     < D'UN PROGRAMME.
<
<        A P P E L   A R G U M E N T   F O R M E L  :
<
N941:    EQU         $
         BYTE        PC;0
         WORD        CARGF           < MISE DANS SAVE DE L'INDEX DE
                                     < LA 1ERE PRIMITIVE DE L'ARGUMENT
                                     < FORMEL (AFIN D'ASSIMILER DET
                                     < APPEL A L'APPEL D'UN PROGRAMME).
         WORD        N27             < ERREUR : PAS D'ARGUMENT FORMEL
                                     < COURANT !!!
         WORD        N942            < OK , ON FAIT COMME SI ON AVIT
                                     < TROUVE LA DEFINITION D'UN
                                     < PROGRAMME CHERCHE ...
<
<        A P P E L   A R G U M E N T   F O R M E L
<        D E   L ' A U T R E   I T E M  :
<
N9410:   EQU         $
         BYTE        PC;0
         WORD        CARGF           < MISE DANS SAVE DE L'INDEX DE LA
                                     < 1ERE PRIMITIVE DE L'ARGUMENT
                                     < FORMEL COURANT , S'IL EXISTE ....
         WORD        N27             < ERREUR , N'EXISTE PAS ...
         WORD        NCDIR           < OK , ON L'ASSIMILE A L'APPEL
                                     < D'UN PROGRAMME DE BIBLIOTHEQUE.
<
<        D E M A N D E   D E   R E P E T I T I O N S  :
<
N8:      BYTE        PGS;0           < ACCES AU CARACTERE COURANT (Y).
         BYTE        PC;0
         WORD        REPET1          < SAVREP=NBRE DE REPETITIONS
                                     < DEMANDEES.
         WORD        N27             < ERREUR : NBRE ERRONE.
         BYTE        PC;0            < EXAMEN DU NBRE D'ITERATIONS
                                     < DEMANDE.
         WORD        REPETV
         WORD        N16             < DANS LE CAS OU LE NBRE EST
                                     < NEGATIF OU NUL, ON ASSIMILE
                                     < CETTE ITERATION A UN SAUT DE
                                     < DEFINITION DE PROGRAMME; LA
                                     < BOUCLE EST DONC SAUTEE...
N30:     BYTE        PGS;0           < ACCES AU CARACTERE COURANT (Y).
         BYTE        PTM;"("         < EST-CE UNE '(' ???
         WORD        N27             < ERREUR : MISSING '(' ...
         BYTE        PCS;0
         WORD        REPET2          < Y=NBRE DE REPETITIONS DEMANDEES.
         BYTE        PUSH;CODREP     < EMPILEMENT DE LA RECURSIVITE.
                                     < (Y=NBRE DE REPETITIONS).
         WORD        N27             < PUSH IMPOSSIBLE.
         WORD        N1              < ET LA BOUCLE EST LANCEE.
<
<        M O D I F I C A T I O N   C T T E  :
<
N31:     BYTE        PGS;0           < ACCES AU CARACTERE COURANT (Y).
         BYTE        PC;0
         WORD        REPET1          < RECUPERATION DE CTTE DANS
                                     < SAVE A PARTIR DE Y.
         WORD        N27             < ERREUR : CTTE ILLEGALE.
         BYTE        PC+PGON1;0
         WORD        SCTTE           < OK , MAJ DE CTTE.
<
<        M O D I F I C A T I O N   ' I C A L L I '   &   ' S L E E P '  :
<
N31X:    BYTE        PGS;0           < ACCES AU CARACTERE COURANT...
         BYTE        PC;0
         WORD        REPET1          < SAVE <-- CONSTANTE COURANTE...
         WORD        N27             < MAUVAISE CONSTANTE...
         BYTE        PC+PGON1;0
         WORD        MODIS           < MODIFICATION ICALLI/SLEEP.
<
<        M O D I F I C A T I O N   E C H E L L E  :
<
N1237:   BYTE        PGS;0           < ACCES CARACTERE COURANT (Y).
         BYTE        PC;0
         WORD        REPET1          < SAVE <-- (Y).
         WORD        N27             < ERREUR : CONSTANTE ILLEGALE.
         BYTE        PC+PGON1;0
         WORD        DEFECH          < MAJ DE L'ECHELLE GENERALE.
<
<        C H A N G E M E N T   D E   P L A N  :
<
N600:    BYTE        PGS;0           < ACCES AU NUMERO DU PLAN.
         BYTE        PTM;"1"         < EST-CE LE PLAN 1 ???
         BYTE        PT;"2"          < EST-CE LE PLAN 2 ???
         WORD        N601            < SELECTION DU PLAN 1 (X3,Y3).
         BYTE        PT;"3"          < EST-CE LE PLAN 3 ???
         WORD        N602            < SELECTION DU PLAN 2 (Y3,Z3).
         WORD        N27             < ERREUR : PLAN NON RECONNU.
N603:    BYTE        PC+PGON1;2      < SELECTION DU PLAN (Z3,X3).
         WORD        CHPLAN
N601:    BYTE        PC+PGON1;4      < SELECTION DU PLAN (X3,Y3).
         WORD        CHPLAN
N602:    BYTE        PC+PGON1;9      < SELECTION DU PLAN (Y3,Z3).
         WORD        CHPLAN
<
<        C H O I X   D U   M O D E   D E   P R O J E C T I O N  :
<
N600X1:  BYTE        PGS;0           < ENTREE DU CARACTERE COURANT.
         BYTE        PC;0
         WORD        REPET1          < RECUPERATION DANS 'SAVE' VIA 'Y'...
         WORD        N27             < ERREUR, ELLE EST ILLEGALE...
         BYTE        PC+PGON1;0
         WORD        DEFPR           < DEFINITION DU MODE DE PROJECTION.
<
<        E N T R Y   I N T E R P R E T A T I V E  :
<
COM0:    EQU         $
         BYTE        PC;0
         WORD        CHECKT          < VALIDATION DU TYPE DE L'ITEM
                                     < COURANT.
         WORD        N700            < ERREUR : IL N'A PAS LE TYPE
                                     < 'TEXTE'/'DESSIN' : RETOUR
                                     < A L'APPELANT (EI/GO/GE).
<
<        O R I G I N E   S E G M E N T   C O U R A N T   ' A '  :
<
N4:      BYTE        PC+PGON1;4      < A NOTER : B=4 !!!
         WORD        EXECA           < MISE EN PLACE DE L'ORIGINE
                                     < DU SEGMENT COURANT.
<
<        E X T R E M I T E   S E G M E N T   C O U R E N T   ' B '  :
<
N5:      BYTE        PC+PGON1;4      < A NOTER : B=4 !!!
         WORD        EXECB           < MISE EN PLACE DE L'EXTREMITE DU
                                     < SEGMENT COURANT , AFFICHAGE
                                     < DU SEGMENT COURANT , ET
                                     < MODIFICATION DEE SON ORIGINE.
<
<        E X T R E M I T E   S E G M E N T   C O U R A N T  ' S '  :
<
N6:      BYTE        PC+PGON1;8      < A NOTER : B=8 !!!
         WORD        EXECS           < MISE EN PLACE DE L'EXTREMITE DU
                                     < SEGMENT COURANT , ET AFFICHAGE
                                     < DE CELUI-CI.
         IF          VIDEO,,X100,
<
<        A C C E S   U N   S E G M E N T   Z D C  :
<
N9340:   BYTE        PC+PGON1;0
         WORD        SEGIN
<
<        I N V E R S I O N   A C C E S   Z D C  :
<
N5612:   BYTE        PC+PGON1;0
         WORD        INTGS           < INVERSION DE LA VALIDATION ZDC.
X100:    VAL         0
         IF          VIDEO,,,X100
<
<        M I S E   A   B L A N C   E N   V I D E O  :
<
N2000:   BYTE        PC+PGON1;'40    < B='40.
         WORD        COLOR
<
<        B L A N C   S I   N O I R / N O I R   S I   B L A N C  :
<
N2001:   BYTE        PC+PGON1;'00    < B='00.
         WORD        COLOR
X100:    VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
<
<        A C C E S   D I R E C T   A   ' M E M T V '  :
<
N30000:  BYTE        PGS;0           < ACCES AU MODE DU TRACE :
         BYTE        PC;0
         WORD        VIDEOM          < PRISE EN COMPTE DU MODE DE TRACE (Y).
         WORD        N27             < ERREUR...
         BYTE        PGS;0           < ACCES A LA COULEUR DU TRACE :
         BYTE        PC;0
         WORD        VIDEOC          < ACCES A LA COULEUR DU TRACE (Y).
         WORD        N27             < ERREUR...
         WORD        N1              < OK.
         IF          VIDEO,,,X100
<
<        E N V O I   D ' U N E   S Y N C H R O   ' Z D C '  :
<
N37001:  BYTE        PC+PGON1;0
         WORD        SENZDC          < ENVOI D'UNE SYNCHRO EN 'ZDC'...
X100:    VAL         0
XWOR%:   VAL         0
<
<        M O D I F I C A T I O N   D E   D X   O U   D Y  :
<
N2:      BYTE        PC;0
         WORD        SELDX           < SELECTION DX.
         WORD        N32             < VERS LA MODIFICATION DE DX.
N3:      BYTE        PCS;0
         WORD        SELDY           < SELECTION DE DY.
N32:     BYTE        PGS;0           < ACCES AU CARACTERE COURANT POUR
                                     < IDENTIFIER LA MODIFICATION
                                     < DEMANDEE SUR DX OU DY.
         PROG        P12
         BYTE        PTM;"+"         < EST-CE UNE INCREMENTATION ???
         BYTE        PT;"-"          < EST-CE UNE DECREMENTATION ??
         WORD        N33             < INCREMENTATION DE DX OU DY.
         BYTE        PT;"*"          < EST-CE UNE MULTIPLICATION ???
         WORD        N34             < DECREMENTATION DE DX OU DY.
         BYTE        PT;"/"          < EST-CE UNE DIVISION ???
         WORD        N35             < MULTIPLICATION DE DX OU DY.
         WORD        N36             < PAS DE FONCTION RECONNUE ,
                                     < ALLONS TENTER L'INITIALISATION
                                     < DE DX OU DY.
<
<        D I V I S I O N   D E   D X   O U   D Y  :
<
N37:     BYTE        PC+PGON1;0      < DIVISION DE DX OU DY :
                                     < DX OU DY<--(DX OU DY)/CTTE.
         WORD        EXECD
<
<        I N I T I A L I S A T I O N   D E   D X   O U   D Y  :
<
N36:     BYTE        PC;0            < EST-CE L'INITIALISATION DE DX
                                     < OU DE DY ???
         WORD        REPET1          < TENTATIVE DE RECUPERATION DE
                                     < LA CONSTANTE DONNEE EN ARGU-
                                     < MENT (APPELEE ALPHA).
         WORD        N27             < ERREUR : MAUVAISE CONSTANTE.
         BYTE        PC+PGON1;0
         WORD        EXECK           < INITIALISATION DE DX OU DY :
                                     < DX OU DY<--CTTE*ALPHA.
<
<        I N C R E M E N T A T I O N   D E   D X   O U   D Y  :
<
N33:     BYTE        PC+PGON1;0      < INCREMENTATION DE DX OU DY :
                                     < DX OU DY<--(DX OU DY)+CTTE.
         WORD        EXECP
<
<        D E C R E M E N T A T I O N   D E   D X   O U   D Y  :
<
N34:     BYTE        PC+PGON1;0      < DECREMENTATION DE DX OU DY :
                                     < DX OU DY<--(DX OU DY)-CTTE.
         WORD        EXECM
<
<        M U L T I P L I C A T I O N   D E   D X   O U   D Y  :
<
N35:     BYTE        PC+PGON1;0      < MULTIPLICATION DE DX OU DY :
                                     < DX OU DY<--(DX OU DY)*CTTE.
         WORD        EXECMU
<
<        I N C R E M E N T A T I O N   D E   D X   E T   D Y  :
<
N17:     BYTE        PCS;0
         WORD        SELDX           < SELECTION DE DX.
         BYTE        PCS;0
         WORD        EXECP           < INCREMENTATION DE DX :
                                     < DX<--(DX)+CTTE.
         BYTE        PC;0
         WORD        SELDY           < SELECTION DE DY.
         WORD        N33             < VERS L'INCREMENTATION DE DY :
                                     < DY<--(DY)+CTTE.
<
<        D E C R E M E N T A T I O N   D E   D X   E T   D Y  :
<
N18:     BYTE        PCS;0
         WORD        SELDX           < SELECTION DE DX.
         BYTE        PCS;0
         WORD        EXECM           < DECREMENTATION DE DX :
                                     < DX<--(DX)-CTTE.
         BYTE        PC;0
         WORD        SELDY           < SELECTION DE DY.
         WORD        N34             < VERS LA DECREMENTATION DE DY :
                                     < DY<--(DY)-CTTE.
<
<        M U L T I P L I C A T I O N   D E   D X   E T   D Y  :
<
N19:     BYTE        PCS;0
         WORD        SELDX           < SELECTION DE DX.
         BYTE        PCS;0
         WORD        EXECMU          < MULTIPLICATION DE DX :
                                     < DX<--(DX)*CTTE.
         BYTE        PC;0
         WORD        SELDY           < SELECTION DE DY.
         WORD        N35             < VERS LA MULTIPLICATION DE DY :
                                     < DY<--(DY)*CTTE.
<
<        D I V I S I O N   D E   D X   E T   D Y  :
<
N20:     BYTE        PCS;0
         WORD        SELDX           < SELECTION DE DX.
         BYTE        PCS;0
         WORD        EXECD           < DIVISION DE DX :
                                     < DX<--(DX)/CTTE.
         BYTE        PC;0
         WORD        SELDY           < SELECTION DE DY.
         WORD        N37             < VERS LA DIVISION DE DY :
                                     < DY<--(DY)/CTTE.
<
<        D E P L A C E M E N T   1   E S T  :
<
N9:      BYTE        PC+PGON1;0      < A NOTER : B=0.
         WORD        EXEC13
<
<        D E P L A C E M E N T   2   N O R D  :
<
N10:     BYTE        PC+PGON1;0      < A NOTER : B=0.
         WORD        EXEC24
<
<        D E P L A C E M E N T   3   O U E S T  :
<
N11:     BYTE        PC+PGON1;1      < A NOTER : B=1#0.
         WORD        EXEC13
<
<        D E P L A C E M E N T   4   S U D  :
<
N12:     BYTE        PC+PGON1;1      < A NOTER : B=1#0.
         WORD        EXEC24
<
<        M I S E   A   L ' O R I G I N E   D E   C V  :
<
N400:    BYTE        PC+PGON1;0
         WORD        ORIGIN
<
<        T R A N S F O R M A T I O N   C O U R A N T E   ' T '  :
<
N13:     BYTE        PGS;0           < ACCES AU CARACTERE COURANT (Y).
         BYTE        PTM;"="         < EST-CE UNE REINITIALISATION
                                     < DE LA TRANSFORMATION COURANTE T.
         WORD        N70             < NON , ESSAYONS UN PRODUIT
                                     < FONCTIONNEL.
<
<        I N I T I A L I S A T I O N   D E   T  :
<
         BYTE        PCS;0
         WORD        ITRANS          < ON FAIT : T=O.
N51:     BYTE        PGS;0           < ACCES AU CARACTERE COURANT (Y).
N70:     BYTE        PTM;" "         < EST-CE L'ELEMENT NEUTRE ???
         BYTE        PT;"R"          < EST UNE ROTATION ???
         WORD        N51             < CAS DE L'ELEMENT NEUTRE ' '.
         BYTE        PT;"S"          < EST-CE UNE SYMETRIE ???
         WORD        N52             < CAS DES ROTATIONS.
         BYTE        PT;"A"          < DESORTHOGONALISATION AIGUE ???
         WORD        N53             < CAS DES SYMETRIES.
         BYTE        PT;"O"          < DESORTHOGONALISATION OBTUE ???
         WORD        N500            < DESORTHOGONALISATION AIGUE.
         BYTE        PT;"H"          < DESORTHOGONALISATION HAUTE ???
         WORD        N501            < DESORTHOGONALISATION OBTUE.
         BYTE        PT;"B"          < DESORTHOGONALISATION BASSE ???
         WORD        N502            < DESORTHOGONALISATION HAUTE.
         BYTE        PT;";"          < EST-CE LA FIN DE LA MODIFICATION?
         WORD        N503            < DESORTHOGONALISATION BASSE.
         WORD        N25             < ERREUR : CARACTERE NON RECONNU.
         WORD        N1              < CAS DU ';' : C'EST LA FIN DE
                                     < MODIFICATION : VERS L'ACCES
                                     < A LA COMMANDE SUIVANTE.
<
<        C A S   D E S   R O T A T I O N S  :
<
N52:     BYTE        PGS;0           < ACCES AU CARACTERE COURANT (Y).
         BYTE        PTM;"P"         < EST-CE UNE ROTATION +TETA ???
         BYTE        PT;"M"          < EST-CE UNE ROTATION -TETA ??
         WORD        N54             < CAS DES ROTATIONS +TETA.
         BYTE        PT;"1"          < EST-CE UNE ROTATION +PI/2 ???
         WORD        N55             < CAS DES ROTATIONS -TETA.
         BYTE        PT;"3"          < EST-CE UNE ROTATION -PI/2 ????
         WORD        N56             < CAS DES ROTATIONS +PI/2.
         WORD        N25             < ERREUR : CARACTERE NON RECONNU.
N57:     BYTE        PC;TR3          < ROTATION -PI/2.
         WORD        UTRANS
         WORD        N51             < OK , VERS LA SUIVANTE.
N54:     BYTE        PCI;TRP         < ROTATION +TETA.
         WORD        N57
N55:     BYTE        PCI;TRM         < ROTATION -TETA.
         WORD        N57
N56:     BYTE        PCI;TR1         < ROTATION +PI/2.
         WORD        N57
<
<        C A S   D E S   S Y M E T R I E S  :
<
N53:     BYTE        PGS;0           < ACCES AU CARACTERE COURANT (Y).
         BYTE        PTM;"O"         < EST-CE UNE SYMETRIE ORIGINE ???
         BYTE        PT;"X"          < EST-CE UNE SYMETRIE OX ???
         WORD        N58             < CAS DES SYMETRIES ORIGINE.
         BYTE        PT;"Y"          < EST-CE UNE SYMETRIE OY ???
         WORD        N59             < CAS DES SYMETRIES OX.
         BYTE        PT;"1"          < EST-CE UNE SYMETRIE B1 ???
         WORD        N60             < CAS DES SYMETRIES OY.
         WORD        N25             < ERREUR : CARACTERE NON RECONNU.
N61:     BYTE        PCI;TS1         < SYMETRIE 1ERE BISSECTRICE.
         WORD        N57
N58:     BYTE        PCI;TSO         < SYMETRIE ORIGINE.
         WORD        N57
N59:     BYTE        PCI;TSX         < SYMETRIE OX.
         WORD        N57
N60:     BYTE        PCI;TSY         < SYMETRIE OY.
         WORD        N57
<
<        D E S O R T H O G O N A L I S A T I O N   D E S
<                    A X E S   L O C A U X  :
<
N500:    BYTE        PCI;TA          < MODE AIGU.
         WORD        N57
N501:    BYTE        PCI;TO          < MODE OBTU.
         WORD        N57
N502:    BYTE        PCI;TH          < MODE HAUT.
         WORD        N57
N503:    BYTE        PCI;TB          < MODE BAS.
         WORD        N57
<
<        S A U T   D E F I N I T I O N   P R O G R A M M E  :
<
N16:     BYTE        PGS;0           < ACCES AU CARACTERE COURANT (Y).
         BYTE        PTM;"("         < RECHERCHE DE LA 1ERE '('.
         WORD        N16             < BOUCLAGE JUSQU'A TROUVER
                                     < LA 1ERE '('.
N1000:   EQU         $               < ENTRY POUR LE SAUT D'UN ARGUMENT
                                     < FORMLE COURANT.
         BYTE        PCS;1           < A NOTER : B=1 !!!
         WORD        SETY            < POUR FAIRE CD=1 LORS DU PUSH
                                     < QUI VA SUIVRE (Y=1).
         BYTE        PUSH;CODDEF     < EMPILEMENT DE LA RECURSIVITE
                                     < LORS DE LA RENCONTRE DE
                                     < LA 1ERE '('.
         WORD        N27             < PUSH IMPOSSIBLE.
N63:     BYTE        PGS;0           < ACCES AU CARACTERE COURANT (Y).
         BYTE        PTM;"("         < EST-CE UNE '(' ???
         BYTE        PT;")"          < EST-CE UNE ')' ???
         WORD        N64             < CAS DES '('.
         WORD        N63             < ON BOUCLE POUR LES CARACTERES
                                     < DIFFERENTS DE '(' ET ')'.
         BYTE        PULL;0          < -1 SUR CP POUR ')'.
         WORD        N65             < RETOUR POUR CP=0 : C'EST LA
                                     < FIN DE LA DEFINITION DU PROGRAMME
         WORD        N63             < CE N'EST PAS ENCORE LA ')'
                                     < DE FIN DE DEFINITION.
N64:     BYTE        PUSH;0          < +1 SUR CP POUR '('.
         WORD        N25             < PUSH IMPOSSIBLE ???
         WORD        N63             < OK ...
N65:     BYTE        PUSHS;0         < REMISE DE CP=1 LORS DE LA
                                     < RENCONTRE DE LA FIN DE
                                     < DEFINITION.
         BYTE        PULL;1          < PULL VERITABLE DE DEPILEMENT
                                     < DE LA RECURSIVITE.
         WORD        N25             < PULL IMPOSSIBLE ???
         WORD        N1              < OK , ACCES A LA COMMANDE SUIVANTE
<
<        A P P E L   P R O G R A M M E  :
<
N7:      EQU         $
N411:    BYTE        PCS;0
         WORD        SAVNOM          < SAVE=INDEX 1ER CARACTERE DU
                                     < NOM CHERCHE.
N80:     BYTE        PGS;0           < ACCES AU CARACTERE COURANT (Y).
         BYTE        PTM;";"         < EST-CE LA FIN DU PROGRAMME
                                     < CHERCHE ';' ???
         WORD        N80             < NON , ON CONTINUE LE PARCOURS.
         BYTE        PC;0
         WORD        LOOKP           < RECHERCHE DE LA DEFINITION DU
                                     < PROGRAMME APPELE.
                                     < (SI OK : SAVE=INDEX 1ERE
                                     < COMMANDE DU PROGRAMME).
         WORD        N300            < LE PROGRAMME N'EXISTE PAS
                                     < DANS L'ITEM COURANT.
N942:    EQU         $               < ENTRY POUR APPEL ARGUMENT FORMEL.
         BYTE        PCS;2           < A NOTER : B=2 !!!
         WORD        SETY            < FAIT : Y=2 , POUR LE PUSH
                                     < QUI VA SUIVRE.
         BYTE        PUSH;CODPRO     < EMPILEMENT DE LA RECURSUIVITE ,
                                     < AVEC CD=2 , ET IEG=INDEX DE
                                     < RETOUR (SUIT IMMEDIATEMENT ';').
                                     < AINSI LORS DU PULL DE FIN DE
                                     < PROGRAMME , PUISQUE CD=2 , ON
                                     < FERA UNE FAUSSE REPETITION ,
                                     < AVEC COMME INDEX DE BOUCLAGE ,
                                     < L'INDEX DE RETOUR (A LA SUITE
                                     < DE ';' ....
         WORD        N27             < ERREUR : PUSH IMPOSSIBLE.
N301:    BYTE        PC+PGON1;0
         WORD        START           < LANCEMENT DU PROGRAMME APPELE
                                     < A L'INDEX CONTENU DANS SAVE.
<
<        A P P E L   D I R E C T   D ' U N   P R O G R A M M E
<        E N   B I B L I O T H E Q U E  :
<
N860:    BYTE        PCS;0
         WORD        SAVNOM          < SAVE=INDEX DU 1ER CARACTERE
                                     < DU NOM CHERCHE.
N861:    BYTE        PGS;0           < ACCES AU CARACTERE COURANT (Y).
         BYTE        PTM;";"         < EST-CE LA FIN DU NOM CHERCHE ???
         WORD        N861            < NON , ON CONTINUE LE PARCOURS ...
<
<        R E C H E R C H E   E N   B I B L I O T H E Q U E  :
<
N300:    BYTE        PC;0
         WORD        CHECKB          < VALIDATION DE L'ITEM CONTENANT
                                     < LA BIBLIOTHEQUE PRESUMEE.
         WORD        N25             < LE TYPE N'EST PAS ACCEPTABLE ,
                                     < LE PROGRAMME N'EXISTE DONC PAS.
         BYTE        PC;0
         WORD        LOOKPB          < SINON , ON FAIT UNE RECHERCHE
                                     < DANS LA BIBLIOTHEQUE.
         WORD        N25             < LE PROGRAMME N'EXISTE VRAIMENT
                                     < PAS , ERREUR.
NCDIR:   EQU         $               < NOEUD D'APPEL IMPLICITE DES
                                     < PROGRAMMES DE BIBLIOTHEQUES
                                     < SPECIALES.
         BYTE        PCS;2
         WORD        SETY            < Y=2.
         BYTE        PUSH;CODPRO+CODDEF
                                     < ON FAIT UN PUSH POUR APPEL
                                     < PROGRAMME , AVEC CHANGEMENT
                                     < D'ITEM COURANT.
         WORD        N27             < ERREUR : PUSH IMPOSSIBLE.
         WORD        N301            < OK , START DANS LE PROGRAMME.
<
<        O V E R L A Y   D E   P R O G R A M M E  :
<
N8300:   BYTE        PC;1            < B=1.
         WORD        SAVNOM          < RETOUR EN ERREUR.
         WORD        N303            < VERS LA RECHERCHE DU NOM.
<
<        B I B L I O T H E Q U E   A U   D E L A   D E S   4 K  :
<
N8400:   BYTE        PC;2            < B=2.
         WORD        SAVNOM          < RETOUR EN ERREUR.
         WORD        N303            < VERS LA RECHERCHE DU NOM.
<
<        B I B L I O T H E Q U E   E N   B A S C U L E  :
<
N302:    BYTE        PCS;0
         WORD        SAVNOM          < SAUVEGARDE DANS 'SAVE' DE
                                     < L'INDEX DU 1ER CARACTERE DU
                                     < <NOM-BIBLIOTHEQUE>.
N303:    BYTE        PGS;0           < RECUPERATION DU <NOM> PAR
                                     < CARACTERE.
         BYTE        PTM;";"         < EST-CE LA FIN DE <NOM> ???
         WORD        N303            < ON BOUCLE SUR LA RECUPERATION
                                     < DU <NOM> JUSQU'A TROUVER UN ';'.
         BYTE        PC;0            < A NOTER : B=0 !!!
         WORD        LOADB           < TENTATIVE DE CHARGEMENT DE
                                     < LA BIBLIOTHEQUE.
         WORD        N25             < ERREUR : ELLE N'EXISTE PAS.
         BYTE        PC;0
         WORD        CHECKB          < DANS LE CAS OU ELLE EXISTE ,
                                     < ON VERIFIE SON TYPE 'T' OU 'D'.
         WORD        N25             < ERREUR : MAUVAIS TYPE.
         WORD        N1              < OK , VERS L'ACCES A LA
                                     < COMMANDE SUIVANTE.
<
<        O P E R A T I O N S   S U R   ' S T A C K '  :
<
N310:    BYTE        PGS;0           < ACCES AU CARACTERE COURANT (Y).
         BYTE        PTM;"I"         < EST-CE UN 'PUSH' (IN).
         BYTE        PT;"O"          < EST-CE UN 'PULL' (OUT).
         WORD        N311            < CAS DES MOVE IN STACK (PUSH).
         WORD        N27             < ERREUR : COMMANDE NON RECONNUE.
<
<        M O V E   O U T   ' P U L L '  :
<
         BYTE        PCI;0           < A NOTER : B=0.
         WORD        N311            < VERS LA MEMORISATION DU SENS.
<
<        M O V E   I N   ' P U S H '  :
<
N311:    BYTE        PCS;1           < A NOTER : B=1.
         WORD        SWHOS           < MEMORISATION DU SENS.
<
< RECUPEARTION DE LA LISTE DES CONSTANTES :
<
N312:    BYTE        PGS;0           < ACCES AU CARACTERE COURANT (Y).
         BYTE        PTM;"K"         < EST-CE 'K' ???
         BYTE        PT;"Y"          < EST-CE 'Y' ??
         WORD        N313            < INSERTION DE 'K' DANS LA LISTE.
         BYTE        PT;"X"          < EST-CE 'X' ??
         WORD        N314            < INSERTION DE 'Y' DANS LA LISTE.
         BYTE        PT;"T"          < EST-CE 'T' ??
         WORD        N315            < INSERTION DE 'X' DANS LA LISTE.
         BYTE        PT;"2"          < EST-CE Y(CURSEUR> ???
         WORD        N430            < INSERTION DE 'T' DANS LA LISTE.
         BYTE        PT;"1"          < EST-CE X(CURSEUR) ???
         WORD        N1010           < C'EST Y(CURSEUR).
         BYTE        PT;"A"          < EST-CE 'A' ???
         WORD        N1011           < C'EST X(CURSEUR).
         BYTE        PT;";"          < EST-CE LA FIN DE LISTE.
         WORD        N1002           < INSERTION DE 'A' DANS LA LISTE.
         BYTE        PT;"C"          < EST-CE 'C' ??
         WORD        N316            < FIN DE LISTE.
         WORD        N27             < ERREUR : ELEMENT NON RECONNU ...
<
< INSERTION DU CURSEUR DANS LA LISTE :
<
         BYTE        PCS;CV-WHOS+Y   < INSERTION Y(CURSEUR).
         WORD        RWHOS
N1011:   EQU         $               < INSERTION DE X(CURSEUR)
                                     < DANS LA LISTE.
         BYTE        PCI;CV-WHOS+X   < INSERYION X(CURSEUR).
         WORD        N313
<
< INSERTION DE Y(CURSEUR) DANS LA LISTE :
<
N1010:   BYTE        PCI;CV-WHOS+Y   < INSERTION DE Y(CURSEUR).
         WORD        N313
<
< INSERTION DE 'K' DANS LA LISTE :
<
N313:    BYTE        PC;CTTE-WHOS
         WORD        RWHOS
         WORD        N312            < ACCES A L'LEMENT SUIVANT (LE
                                     < RETOUR DE RWHOS EST TOUJOURS
                                     < EN ERREUR).
<
< INSERTION DE Y DANS LA LISTE :
<
N314:    BYTE        PCI;DY1-WHOS
         WORD        N313
<
< INSERTION DE 'X' DANS LA LISTE :
<
N315:    BYTE        PCI;DX1-WHOS
         WORD        N313
<
< INSERTION DE 'A' DANS LA LISTE :
<
N1002:   BYTE        PCI;ARGF-WHOS
         WORD        N313
<
< INSERTION DE 'T' DANS LA LISTE :
<
N430:    BYTE        PCI;0           < A NOTER : B=0 !!!! (CAS 'T').
         WORD        N313
<
< FIN DE LISTE :
<
N316:    BYTE        PC;0
         WORD        ESTACK          < EXECUTION DE L'OPERATION.
         WORD        N27             < ABORT : OPERATION IMPOSSIBLE.
         WORD        N1              < OK , ACCES COMMANDE SUIVANTE.
<
<        S A V E / R E S T A U R E   C O N T E X T E S  :
<
N920:    BYTE        PCI;0           < B=0=LECTURE (RESTAURATION).
         WORD        N921            < VERS LA PREPARATION DE DEMDK.
N921:    BYTE        PCS;2           < B=2=ECRITURE (SAUVEGARDE).
         WORD        ADSEC           < PREPARATION DE LA DEMANDE.
N922:    BYTE        PGS;0           < ACCES AU CARACTERE COURANT QUI
                                     < DONNE LE NUMERO DU CONTEXTE.
         BYTE        PC;0
         WORD        REPET1          < CALCUL DU NUMERO DU CONTEXTE
                                     < DANS SAVE (=DEMDK+3).
         WORD        N27             < ERREUR : ARGUMENT ERRONE.
         BYTE        PC;0
         WORD        RWDK            < SAVE/RESTAURE LE CONTEXTE.
         WORD        N27             < EREUR ...
         WORD        N1              < OK ....
<
<        C O M M E N T A I R E   E T   T E X T E   A   E D I T E R  :
<
N340:    BYTE        PCS;0           < SAVE L'INDEX 1ER CARACTERE.
         WORD        SAVNOM
N800:    BYTE        PGS;0           < ACCES AU CARACTERE COURANT (Y).
         IF          VIDEO,,X100,
         BYTE        PC;0
         WORD        TESTEX          < TEST DU MODE DE FONCTIONNEMENT.
         WORD        N9323           < ITEXTE=1 : PAS D'APPELS IMPLICITES,
                                     < IL FAUT DONC COMPTABILISER
                                     < LES "(" ET LES ")",
         WORD        N9322           < ITEXTE=0 : IL NE FAUT PAS
                                     < PERTURBER <XXXX...XX!
N9323:   EQU         $
         BYTE        PTM;"("         < EST-CE "(" ???
         WORD        N9321           < NON...
         BYTE        PUSH;0          < OUI, COMPTAGE DE "(".
         WORD        N27             < DEBORDEMENT DE "(" !!!
         WORD        N800            < OK, AU CARACTERE SUIVANT.
N9321:   BYTE        PTM;")"         < EST-CE ")" ???
         WORD        N9322           < NON...
         BYTE        PULL;1          < OUI, PULL ")".
         WORD        N27             < ???
         WORD        N800            < OK, AU CARACTERE SUIVANT...
X100:    VAL         0
N9322:   BYTE        PTM;";"         < EST-CE UNE FIN DE COMMENTAIRE ???
         BYTE        PT;"!"          < NON, EST-CE LA FIN D'UN TEXTE
                                     < A EDITER ???
         WORD        N1              < FIN D'UN COMMENTAIRE : VERS
                                     < L'ACCES A LA PRIMITIVE SUIVANTE.
         WORD        N800            < NIN '!' , NI ';' , VERS L'ACCES
                                     < AU CARACTERE SUIVANT.
         BYTE        PC+PGON1;1      < EDITION DU TEXTE RENCONTRE ; A
                                     < NOTER : B=1#0 !!!
         WORD        TEXTE           < VERS N22 SI CTRL-X-OFF.
         IF          VIDEO,,X100,
<
<        I N V E R S I O N   A P P E L S   I M P L I C I T E S  :
<
N9320:   BYTE        PC+PGON1;0
         WORD        INVTEX
X100:    VAL         0
<
<        A C C E S   C O M M A N D E   C O U R A N T E  :
<
N1:      BYTE        PGS;1           < ACCES AU CARACTERE COURANT ; A
                                     < NOTER B#0 (!!!!) , AFIN DE
                                     < TESTER 'A'/'B'/'S' DANS LE
                                     < CAS DU MODE INTERACTIF ...
<
<        A N A L Y S E   D E   L A   C O M M A N D E  :
<
N1617:   EQU         $               < ENTRY SUITE A UNE PRIMITIVE
                                     < INHIBEE NON SUIVIE DE '('.
         BYTE        PTD;0           < TEST DIRECT DU CARACTERE COURANT.
         WORD        N27             < CAS DES PRIMITIVES HORS LE
                                     < SEGMENT ('>PACE','Z').
TCOM:    EQU         $               < LISTE DES PRIMITIVES A
                                     < A ACCES DIRECT.
         WORD        N1              < 'SPACE' ELEMENT NEUTRE
         WORD        NCDIR           < ! BRANCHEMENT : IEG<--(SAVE)
         WORD        N945            < " AUTORISATION PRIMITIVE
         WORD        N8300           < # OVERLAY DE PROGRAMME
         WORD        N302            < $ APPEL BIBLIOTHEQUE
         WORD        N8              < % BOUCLE DE REPETITIONS
         WORD        N7              < & APPEL GLOBAL DE PROGRAMME
         WORD        N941            < ' APPEL ARGUMENT FORMEL COURANT
         WORD        N14             < ( OPEN RECURSIVITE
         WORD        N15             < ) CLOSE RECURSIVITE
         WORD        N19             < * MULTIPLICATION D(X) ET D(Y)
         WORD        N17             < + INCREMENTATION D(X) ET D(Y)
         WORD        N2001           < , BLANC SI NOIR/NOIR SI BLANC
         WORD        N18             < - DECREMENTATION D(X) ET D(Y)
         WORD        N2000           < . MISE A BLANC EN VIDEO.
         WORD        N20             < / DIVISION D(X) ET D(Y)
         WORD        N9410           < 0 APPEL ARGUMENT FORMEL DE
                                     <   L'AUTRE ITEM
         WORD        N9              < 1 DEPLACEMENT EST
         WORD        N10             < 2 DEPLACEMENT NORD
         WORD        N11             < 3 DEPLACEMENT OUEST
         WORD        N12             < 4 DEPLACEMENT SUD
         WORD        N1              < 5 IF5
         WORD        N1              < 6 IF6
         WORD        N1              < 7 IF7
         WORD        N1              < 8 IF8
         WORD        N1              < 9 IF9
         WORD        N940            < : INVERSION DES INHIBITIONS
         WORD        N1              < ; ELEMENT NEUTRE
         WORD        N340            < < COMMENTAIRE OU TEXTE A EDITER
         WORD        N1001           < = DEFINITION ARGUMENT FORMEL
         WORD        N16             < > DEFINITION DE PROGRAMME
         WORD        N860            < ? APPEL DIRECT PROGRAMME BIBLIO.
         WORD        N8400           < @ BIBLI AU DELA DES 4K
         WORD        N4              < A ORIGINE D'UN SEGMENT
         WORD        N5              < B EXTREMITE SEQUENTIELLE
         WORD        N23             < C RETOUR AU CCI
         WORD        N5612           < D NEUTRE (GT) OU ZDC (GR)
         WORD        N1237           < E MODIFICATION ECHELLE GENERALE
         WORD        N22             < F RETOUR A L'APPELANT
         WORD        N31X            < G MODIFICATION ICALLI/SLEEP
         WORD        N750            < H MAKE COPY
         IF          VIDEO,,X100,
         WORD        N9340           < I ACCES 1 SEGMENT ZDC
         WORD        N9320           < J INVERSION APELS IMPLICITES
X100:    VAL         0
         IF          VIDEO,,,X100
         WORD        N37001          < I ENVOI D'UNE SYNCHRO EN 'ZDC'
         WORD        N610            < J
X100:    VAL         0
         WORD        N31             < K MODIFICATION DE LA CTTE K
         IF          ORDI-"S",XWOR%,,XWOR%
         WORD        N30000          < L : ACCES DIRECT A 'MEMTV'
XWOR%:   VAL         0
         IF          ORDI-"T",XWOR%,,XWOR%
         WORD        N610            < L
XWOR%:   VAL         0
         WORD        N310            < M OPERATIONS SUR STACK
         WORD        N600X1          < N DEFINITION DU MODE DE PROJECTION
         WORD        N400            < O MISE A L'ORIGINE DE CV
         WORD        N1              < P ELEMENT NEUTRE
         WORD        N600            < Q CHANGEMENT DE PLAN
         WORD        N920            < R RESTAURE CONTEXTE DKS
         WORD        N6              < S EXTREMITE ETOILEE D'UN SEGMENT
         WORD        N13             < T TRANSFORMATION COURANTE
         WORD        N10002          < U COMMANDE DIRECTE 4014
         WORD        N10001          < V ECHANGE DES VISUS '02 ET '0B
         WORD        N921            < W SAVE CONTEXTE DKS
         WORD        N2              < X MODIFICATION D(X)
         WORD        N3              < Y MODIFICATION D(Y)
         WORD        N21             < Z EFFACEMENT DE L'ECRAN
<
<        E L E M E N T S   N E U T R E S  :
<
         IF          VIDEO,,X100,
N2000:   EQU         N1              < POUR ASSURER LA COMPATIBILITE
N2001:   EQU         N1              < AVEC GT (. ET ,).
X100:    VAL         0
         IF          VIDEO,,,X100
N5612:   EQU         N1              < POUR COMPATIBILITE AVEC GR (D).
X100:    VAL         0
         PAGE
<
<
<        V A L I D A T I O N   D E   L ' I M P L A N T A T I O N  :
<
<
X12:     EQU         ZERO+PILE-LTNI-LTNI
X10:     VAL         X12-$           < NBRE DE MOTS LIBRES JUSQU'A
                                     < L'ITEM2.
ZEROV:   EQU         ZERO+X10        < ERREUR VOLONTAIRE D'ASSEMBLAGE
                                     < SI X10<0.
         DZS         X10+1           < RAZ JUSQU'A ITEM2.
<
<
<        D E F I N I T I O N   O V E R L A Y  :
<
<
RACB:    EQU         ZERO+LIMAG+'1000+LTNI
                                     < L'OVERLAY EST SITUE A LA
                                     < SUITE DE L'IAMGE ET DES BIBLI
                                     < DE TYPE 2.
XWOR%:   VAL         RACB-ZERO*2
XWOR%A:  EQU         ZERO+XWOR%
XWOR%:   VAL         TAILMM-'22-XWOR%
XWOR%B:  EQU         ZERO+XWOR%
DEBOV1:  EQU         $
RACB1:   EQU         $               < COMPTEUR D'ASSEMBLAGE.
         BYTE        " ";NOMBR       < NOM DE L'OVERLAY DE 'GR'.
         ASCI        "    "
         BYTE        '04;'D0
         PAGE
<
<
<        P I L E   D E S   C O N S T A N T E S  :
<
<
<        NOTA :
<                      CETTE PILE GEREE PAR LES INSTRUCTIONS
<                    PUSH/PULL MICRO-PROGRAMMEES ,
<                    CONTIENT INITIALEMENT LE 1ER MOT
<                    ET LE DERNIER MOT BLOQUES , AFIN
<                    DE DETECTER LES DEBORDEMENTS PAR LE
<                    HAUT ET PAR LE BAS AVANT QU'ILS N'
<                    AIENT DES CONSEQUENCES DESASTREUSES ...
<
<
X101:    VAL         $-RACB1
STACK:   EQU         RACB+X101
         BYTE        LSTACK-1;1
         DZS         LSTACK
         PAGE
<
<
<        C H A R G E M E N T   B I B L I O T H E Q U E  :
<
<
<        FONCTION :
<                      CE MODULE APPELE SUITE A LA COMMANDE
<                    '$' , RECUPERE LE <NOM-BIBLIOTHEQUE> ,
<                    LE CODE SUR 6 CARACTERES SUIVANT LES
<                    NORMES EN VIGUEUR DANS 'GE' , ET ENFIN
<                    TENTE LE CHARGEMENT DE L'ITEM DE <NOMC> ,
<                    DANS L'ITEM QUI N'EST PAS L'ITEM COURANT.
<
<
<        ARGUMENT :
<                    B=0.
<                    IEG=INDEX 1ER CARACTERE <NOM-BIBLIOTHEQUE>.
<                    WORK=-1 : BIBLI EN BASCULE ($),
<                         =0  : CHARGEMENT OVERLAY (#),
<                         =+1 : BIBLI AU DELA DES 4K.
<
<
<        TYPES DES BIBLIOTHEQUES :
<                    $ : CHARGEE EN BASCULE DE L'ITEM COURANT
<                        (COMPATIBLE AVEC G2/G3/GV),
<                    # : OVERLAY CHARGE EN RECOUVREMENT
<                        DE L'ITEM COURANT, ET REMISE A 0
<                        DU POINTEUR COURANT 'IEG',
<                    @ : BIBLI CHARGEE AU DELA DES 4K :
<                        CELLE-CI NE PEUT ETRE REFERENCEE
<                        QUE PAR DES APPELS IMPLICITES ((ABCD...))
<                        FAIT A PARTIR DE L'ITEM2 ...
<
<
<        CAS DES CARACTERES 'QUOTE' :
<                      LORSQU'UN CARACTERE 'QUOTE' EST
<                    RENCONTRE DANS UN NOM DE BIBLIOTHEQUE
<                    IL EST REMPLACE PAR L'<IDESC> DE CET
<                    UTILISATEUR CODE EN ASCI ('0', '1',...).
<
<
<        RESULTAT :
<                    X=0 : LA BIBLIOTHEQUE EST CHAGREE , ET
<                          EST DE TYPE ITEM.
<                    X#0 : LA BIBLIOTHEQUE N'EXISTE PAS , OU N'EST
<                          PAS DE TYPE ITEM.
<
<
X101:    VAL         $-RACB1
LOADB:   EQU         RACB+X101
<
<        C O D A G E   D E   L A   B I B L I O T H E Q U E  :
<
<
< INITIALISATION DES RELAIS :
<
         LA          AIC             < A=@MOT DE L'ITEM COURANT.
         CPZ         WORK            < TEST DU TYPE DE BIBLI ???
         JE          E7610           < CAS DES OVERLAYS : RECOUVREMENT.
         JL          E7611           < CAS DES BASCULES.
         LA          AI2             < CAS AU DELA DES 4K : A=@ITEM2.
         AD          CBTR            < A=@AU DELA DES 4K.
         JMP         E7610
E7611:   EQU         $
         SB          ACCEB           < PASSAGE A L'AUTRE ITEM.
E7610:   EQU         $
         ADRI        -LTN,A          < A=@MOT DE L'EN-TETE DE L'AUTRE
                                     < ITEM.
         STA         AIR             < AIR SERA LE RELAI DE L'EN-TETE
                                     < DE L'AUTRE ITEM.
         SLLS        1               < A=@OCTET DE L'EN-TETE DE
                                     < L'AUTRE ITEM.
         STA         DEMSGN+1        < MAJ DE L'@OCTET DE DEMSGN.
<
< INITIALISATION DU CODEUR :
<
         STZ         F3              < RAZ DE LA FONCTION F3.
         LYI         3               < 2*3 CARACTERES A METTRE A 'SPACE'
         LXI         0               < INDEX DE MISE A 'SPACE'.
         LAI         '20
         SBT         2               < A='SPACE''SPACE'.
E211:    EQU         $
         STA         &AIR            < MISE DU <NOMC> A 'SPACE'.
         ADRI        1,X             < INDEX DE RAZ.
         CPR         X,Y
         JNE         E211            < NEXT ....
         LYI         -1              < Y=INDEX DE <NOMC> , PUIS
                                     < LONGUEUR COURANTE DE <NOM>.
<        ON A ICI :
<                    B=0 (ARGUMENT) ,
<                    Y=-1 : LONGUEUR COURANTE DE <NOM> ,
<
< RECUPERATION DES 3 PREMIERS CARACTERES DE <NOM> :
<
E500:    EQU         $
         BSR         AGTK            < A=K(SAVE).
         JE          E212            < RENCONTRE DE ';'.
         STBY        &AIR            < C(X)=K(SAVE).
         LR          Y,A
         CPI         2
         JL          E500            < RECUPERATION DE C(1),C(2),C(3).
<
< CODAGE DES CARACTERES K(4),...,K(L) :
<
E213:    EQU         $
         BSR         AGTK            < A=K(I) , I=4,...,L (L DESIGNANT
                                     < LA LONGUEUR DE <NOM>.
         JE          E214            < ARRET DUR LE ';' RENCONTRE.
         ADR         Y,A             < LE CARACTERE COURANT (A) EST
                                     < 'PONDERE' PAR SA POSITION
                                     < (Y) DANS <NOM>.
                                     < (K(I)=K(I)+I).
         EORR        A,B             < CALCUL DE F2 :
                                     < F2=EOR(F2,K(I)).
         ADR         A,B             < F2=F2+K(I).
         EOR         F3              < CALCUL DE F3 :
                                     < F3=EOR(F3,K(I)).
         SCLS        1
         STA         F3              < F3=SCLS(F3,1).
         JMP         E213            < CODAGE DU CARACTERE SUIVANT.
<
< MISE SOUS FORMA ASCI DES FONCTIONS F2 & F3 :
<
E214:    EQU         $
         LBY         F3              < A=OCTET0(F3).
         AD          F3              < A=F3+OCTET0(F3).
         ANDI        '7F             < A=OCTET0(F3)+OCTET1(F3).
                                     < (MODULO 128).
         CPI         "Z"
         JLE         E215
         ADRI        -'30,A          < F3 EST MIS SOUS LA FORME D'UN
                                     < CARACTERE INFERIEUR AU 'Z'.
E215:    EQU         $
         CPI         " "
         JG          E216
         ADRI        '30,A
E216:    EQU         $
<        ON A ICI :
<                    F3=CARACTERE ASCI VARIABLE DE '!' (='21) ,
<                       A 'Z' (='5A) , ET CONTENU DANS A.
         XR          A,B             < B=F3 , A=F2.
         ANDI        '7F             < F2 EST RAMENE A 7 BITS.
         CPI         "Z"
         JLE         E217
         ADRI        -'30,A          < F2 EST RAMENEE A UN CODE
                                     < INFERIEUR A CELUI DU 'Z'.
E217:    EQU         $
         CPI         "0"
         JGE         E218
         ADRI        '20,A           < ON TENTE DE RAMENER F2 A UN
                                     < CODE SUPERIEUR A CELUI DU '0'.
         JMP         E217            < POURSUITE DE LA TENTATIVE.
E218:    EQU         $
<        ON A ICI :
<                    F2=CARACTERE ASCI VARIABLE DE '0' (='30) ,
<                       A 'Z' (='5A).
         SWBR        A,A
         ORR         B,A             < A=F2.F3.
         LXI         2
         STA         &AIR            < STORE : C(5)=F2 ET C(6)=F3.
<
< CODAGE DE LA LONGUEUR DE <NOM> :
<
E212:    EQU         $
<        ON A ICI :
<                    Y=LONGUEUR DE <NOM> (NON COMPRIS ';').
         LR          Y,A
E2000:   EQU         $
         ADRI        '30,A           < LA LONGUEUR EST MISE SOUS FORME
                                     < D'UN CARACTERE ASCI (A PARTIR
                                     < DE '0' ,...).
         LXI         3
         STBY        &AIR            < STORE : C4=F1 (LONGUEUR).
         LXI         6
         LAI         '04
         STBY        &AIR            < STORE : C(7)='EOT'.
<
<        C H A R G E M E N T   D E   L A   B I B L I O T H E Q U E  :
<
         LA          ALTNI2          < LONGUEUR MAX EN OCTETS D'UN
                                     < ITEM.
         STA         DEMSGN+2        < MAJ DU COMPTE OCTETS DE DEMSGN.
         LYI         1               < DECOMPTEUR DE TENTATIVES.
         LAI         5               < ON COMMENCE PAR UN 'LOAD VALUE
                                     < SOUS <ACN>'.
<
< BOUCLE DE TENTATIVES :
<
E206:    EQU         $
<        ON A ICI :
<                    A=NVP D'ACCES A SGN ,
<                    Y=DECOMPTEUR DE TENTATIVES.
         STBY        DEMSGN          < MISE EN PLACE DU NVP DE DEMSGN.
         LAD         DEMSGN
         SVC         0               < ENVOI DE LA DEMANDE AU SGN.
         JE          E220            < OK LOAD SUCCESSFUL.
<
< CAS DES RETOURS EN ERREUR :
<
         ADRI        -1,Y            < DECOMPTE DES TENTATIVES.
         CPZR        Y
         JL          E207            < C'ETAIT LA 2EME , ON FAIT
                                     < DONC UN RETOUR EN ERREUR (X#0).
         LAI         6               < SINON , ON VA FAIRE UNE TENTA-
                                     < TIVE AVEC UN 'LOAD SOUS :SYS'.
         JMP         E206            < VERS LA 2EME TENTATIVE.
<
< CAS OU LA BIBLIOTHEQUE A ETE CHAGREE : IL
< FAUT EN VALIDER LE TYPE-ITEM :
<
E220:    EQU         $
         LXI         7
         LBY         &AIR            < A=TYPE DE CE QUE L'ON VIENT
                                     < DE CHARGER.
         LXI         'C9             < X='I'+'80 (TYPE ATTENDU=
                                     < TYPE-ITEM 'I').
         SBR         A,X             < SI LE TYPE EST 'ITEM' , ON
                                     < AURA : X=0 (ET UN RETOUR OK).
<
< TRAITEMENT DES OVERLAYS :
<
         LR          X,A             < A=CONDITIONS DE RETOUR,
         OR          WORK            < A=0 SI RETOUR OK, ET
                                     < SI OVERLAY DEMANDE.
         JANE        E7612           < RIEN A FAIRE.
         STZ         IEG             < CAS DES OVERLAYS CORRECTEMENT
                                     < CHARGES : ON REVIENT EN DEBUT
                                     < D'ITEM.
E7612:   EQU         $
<
< SORTIE DE LA ROUTINE :
<
E207:    EQU         $
         RSR
         PAGE
<
<
<        A C C E S   C A R A C T E R E   A   C O D E R  :
<
<
<        FONCTION :
<                      CETTE ROUTINE RECUPERE UN CARACTERE
<                    DU <NOM-BIBLIOTHEQUE> ; ELLE
<                    FAIT PROGRESSER SAVE ET TESTE LA RENCONTRE
<                    DU CARACTERE DE FIN DE NOM ';'.
<                      DE PLUS , ELLE FAIT PROGRESSER LA
<                    LONGUEUR COURANTE DE <NOM>.
<
<
<        CAS DES CARACTERES 'QUOTE' :
<                      LORSQU'UN CARACTERE 'QUOTE' EST
<                    RECONNU, IL EST REMPLACE PAR L'<IDESC>
<                    DE CET UTILISATEUR CODE EN ASCI ('0',
<                    '1',...).
<
<
<        ARGUMENT :
<                    Y=LONGUEUR COURANTE DE <NOM> ,
<                    SAVE=INDEX DU CARACTERE COURANT.
<
<
<        RESULTAT :
<                    SAVE<--(SAVE)+1 ,
<                    A=CARACTERE COURANT ,
<                    Y<--(Y)+1 ,
<                    X<--(Y) ,
<                    INDICATEURS POSITIONNES EN FONCTION D'UN
<                    TEST SUR LA PRESENCE DE ';'.
<
<
X101:    VAL         $-RACB1
GTK:     EQU         RACB+X101
         ADRI        1,Y             < PROGRESSION DE LA LONGUEUR
                                     < COURANTE DE <NOM>.
<
< ACCES AU CARACTERE COURANT :
<
         LX          SAVE            < X=INDEX DU CARACTERE COURANT.
         IC          SAVE            < PREPARATION DE L'ACCES AU
                                     < CARACTERE SUIVANT.
         LBY         &AIC            < A=CARACTERE COURANT DE <NOM> ,
                                     < RECUPERE DANS L'ITEM COURANT.
         CPI         "'"             < EST-CE UN CARACTERE 'QUOTE' ???
         JNE         GTKNQ           < NON...
         WORD        '1E45           < A=IDESC.
         ADRI        "0",A           < A=IDESC CODE EN ASCI.
GTKNQ:   EQU         $
         CPI         ";"             < TEST DE FIN DE NOM.
         LR          Y,X             < X=INDEX DE RANGEMENT DANS LE
                                     < CAS DES 3 PREMIERS CARACTERES.
<
< SORTIE DE LA ROUTINE :
<
         RSR
         PAGE
<
<
<        E C H A N G E   D E S   V I S U S   ' 0 2   E T   ' 0 B  :
<
<
X101:    VAL         $-RACB1
CHVISU:  EQU         RACB+X101
         LAD         CG
         SVC         0               < RETOUR DE LA VISU COURANTE
                                     < EN ALPHA-NUMERIQUE.
         LBY         CG
         IBT         12              < ECHANGE DES VISUS
         IBT         15              < '02 ET '0B.
         STBY        CG
         STBY        WG
         STBY        WGT
         STBY        OG
         STBY        DERASE
         STBY        DEMOUT
         STBY        COPY
         STBY        DIRECT
         RSR
         PAGE
<
<
<        D I V I S I O N   E N T I E R E  :
<
<
<        FONCTION :
<                      REALISER UNE DIVISION ENTIERE APR
<                    (DIV,W) PAR EXCES OU PAR DEFAUT
<                    SUIVANT LA NECESSITE , C'EST-A-DIRE
<                    SUIVANT LA POSITION DU DOUBLE DU
<                    RESTE PAR RAPPORT A (DIV,W).
<
<
<        ARGUMENT :
<                    B=DIVIDENDE ,
<                    W=@MATRICE DE TRANSFORMATION.
<
<
<        RESULTAT :
<                    B=QUOTIENT.
<
<
X101:    VAL         $-RACB1
DIVENT:  EQU         RACB+X101
         LR          B,A
         SARD        16              < ON MET LE DIVIDENDE SUR 32 BITS.
         DV          DIV,W           < EXECUTION DE LA DIVISION.
         ADR         B,B             < ON DOUBLE LE RESTE , SOIT 2*R.
         XR          A,B             < ON MET LE QUOTIENT DANS B.
                                     < (ET 2*R DANS A).
         JAGE        E70             < OK , ON : 2*R>=0.
         NGR         A,A             < SINON , ON LE REND POSITIF.
E70:     EQU         $
         CP          DIV,W           < TESTE DE LA POSITION DE 2*R
                                     < PAR RAPPORT AU DIVISEUR (DIV,W).
         JL          E45             < DANS LE CAS OU 2*R<DIVISEUR ,
                                     < ON FAIT UNE DIVISION PAR DEFAUT.
         CPZR        B               < TEST DU SIGNE DU QUOTIENT.
         JGE         E320            < QUOTIENT>=0 : ON FAIT B<--(B)+1.
         ADRI        -2,B            < QUOTIENT<0 : ON FAIT B<--(B)-1.
E320:    EQU         $
         ADRI        1,B             < DANS LE CAS OU 2*R>=DIVISEUR ,
                                     < ON FAIT UNE DIVISION PAR EXCES.
E45:     EQU         $
         RSR
         PAGE
<
<
<        C O M M A N D E   D U   4 0 1 4  :
<
<
<        ARGUMENT :
<                    Y=COMMANDE A ENVOYER.
<
<
X101:    VAL         $-RACB1
COMAND:  EQU         RACB+X101
         LR          Y,A
         CPI         "@"             < SUPERIEUR OU INFERIEUR A "@" ???
         JL          F206            < INFERIEUR, IL RESTE TEL QUEL...
         ADRI        '20,Y           < TRANSLATION DE LA COMMANDE
                                     < DANS LA GAME DES MINUSCULES.
F206:    EQU         $
         IF          VIDEO,,,X100
         IF          ORDI-"S",X100,,X100
         LR          Y,A             < SI C'EST UNE COMMANDE "U0" A "U7"
         ADRI        -"0",A          < PLACER LE CODE 0 A 7 DANS
         JAL         F206C           < LA DEMANDE DE STABILISATION.
         CPI         7
         JG          F206C
         CPI         4               < SI C'EST UNE COMMANDE DE LECTURE,
         JL          F206D
         RBT         13              < TRANSPORTER LE BIT 13 EN BIT 9.
         SBT         NBITMO-1-XWOR%C
F206D:   EQU         $
         STA         &ASTAB3
         BSR         AVIS            < ET STABILISATION.
         JMP         F206B
F206C:   EQU         $
X100:    VAL         0
         LA          DIRECT+1
         ANDI        'FF00
         ORR         Y,A             < LA COMMANDE EST MISE A
         STA         DIRECT+1        < LA SUITE DE 'ESC'.
         LAD         DIRECT
         BSR         ASVC            < ENVOI DE LA COMMANDE.
F206B:   EQU         $
         RSR                         < ET C'EST TOUT...
         PAGE
<
<
<        D E F I N I T I O N   E T   A P P L I C A T I O N
<        D E   L ' E C H E L L E   G E N E R A L E  :
<
<
<        ARGUMENT :
<                    SAVE=NOUVELLE VALEUR DE L'ECHELLE GENERALE.
<
<
X101:    VAL         $-RACB1
DEFECH:  EQU         RACB+X101
         LA          SAVE
         MP          DX1
         SWBR        B,B
         PSR         B
         LA          SAVE
         MP          DY1
         PLR         A
         ORR         B,A             < L'ECHELLE COURANTE GENERALE EST DONC DE
                                     < LA FORME :
                                     < DX1*SAVE,DY1*SAVE.
         STA         ECH             < MISE A JOUR DE ECH.
         RSR                         < RETOUR INDIFFERENT.
<
<
<        ARGUMENT :
<                    X,Y=COORDONNEES AVANT ECHELLE.
<
<
<        RESULTAT :
<                    X,Y=COORDONNEES APRES ECHELLE.
<
<
X101:    VAL         $-RACB1
FECH:    EQU         RACB+X101
         PSR         A,B             < SAVE A ET B.
         LA          ECH
         ANDI        '00FF
         STA         WORK            < ECHELLE GENERALE SUR OY.
         LR          Y,A             < Y :
         MP          WORK
         DV          ECH0
         LR          A,Y             < Y=Y*ECHY/ECH0.
         LBY         ECH
         STA         WORK            < ECHELLE GENERALE SUR OX.
         LR          X,A             < X :
         MP          WORK
         DV          ECH0
         LR          A,X             < X=X=ECHX/ECH0
         PLR         A,B             < RESTAURE A ET B.
         RSR
         PAGE
<
<
<        P R O J E C T I O N   D E   L ' E S P A C E  :
<
<
<        FONCTION :
<                      CETTE ROUTINE PROJETTE L'ESPACE
<                    (X3,Y3,Z3) SUR LE PLAN (X3,Y3)
<                    SUIVANT LA FORMULE :
<                                    X2=X3+R*Z3*COS(ALPHA) ,
<                                    Y2=Y3+R*Z3*SIN(ALPHA) ,
<                    OU R EST UN RAPPORT DE REDUCTION , ET ALPHA ,
<                    UN ANGLE DE PROJECTION.
<
<
<        ARGUMENT :
<                    CV3 CONTIENT (X3,Y3,Z3).
<
<
<        RESULTAT :
<                    X=X2(POINT PROJETE) ,
<                    Y=Y2(POINT PROJETE).
<
<
X101:    VAL         $-RACB1
FWORK:   EQU         RACB+X101
         FLOAT       0               < VARIABLE FLOTTANTE DE MANOEUVRE...
X101:    VAL         $-RACB1
PROJET:  EQU         RACB+X101
         PSR         B
         LAD         MPROJ
         LR          A,W             < W=@MATRICE DE PROJECTION.
         LA          DIV,W           < CHOIX DU MODE :
         JAG         PROJE1          < PAR SIN(TETA)/COS(TETA)...
<
< PROJECTION PERSPECTIVE :
<
         PSR         W               < PAR PRUDENCE...
         LRM         W
         WORD        FWORK           < (W)=BASE DE LA VARIABLE FLOTTANTE...
         FLT
         FST         0,W             < FWORK=DIV(MPROJ)=-COEFFICIENT 'P' DES
                                     <       FORMULES DE PROJECTION.
         LA          CV3+Z3          < Z,
         FLT
         FDV         0,W
         FST         0,W             < FWORK=-Z/P,
         LAI         1
         FLT
         FAD         0,W
         FST         0,W             < FWORK=1-Z/P,
         LA          CV3+X3          < X,
         FLT
         FDV         0,W
         FIX
         LR          A,X             < (X)=X(PROJETE)=X3/(1-Z3/P).
         LA          CV3+Y3          < Y,
         FLT
         FDV         0,W
         FIX
         LR          A,Y             < (Y)=Y(PROJETE)=Y3/(1-Z3/P).
         PLR         W               < ON RESTAURE...
         JMP         PROJE2          < VERS LA SORTIE...
<
< PROJECTION PAR SIN(TETA)/COS(TETA) :
<
PROJE1:  EQU         $
         LA          CV3+Z3          < ACCES A Z3(POINT PROJETE).
         MP          A11,W
         BSR         ADIV            < B=Z3*COS(TETA).
         LR          B,A             < A=Z3*COS(TETA).
         AD          CV3+X3          < A=X3+Z3*COS(TETA).
         LR          A,X             < X=X2=X3+Z3*COS(TETA).
         LA          CV3+Z3          < ACCES A Z3(POINT PROJETE).
         MP          A21,W
         BSR         ADIV            < B=Z3*SIN(TETA).
         LR          B,A             < A=Z3*SIN(TETA).
         AD          CV3+Y3          < A=Y3+Z3*SIN(TETA).
         LR          A,Y             < Y=Y2=Y3+Z3*SIN(TETA).
<
< SORTIE :
<
PROJE2:  EQU         $
         PLR         B
         RSR
         PAGE
<
<
<        C H O I X   D U   M O D E   D E   P R O J E C T I O N  :
<
<
<        FONCTION :
<                      DEUX CAS SE RENCONTRENT SUIVANT
<                    LA VALEUR DE DIV(MPROJ) QUE L'ON
<                    DEFINIT ICI :
<
<                    1 - SAVE=1 : DIV(MPROJ) <--2, ET ALORS ON FAIT
<                                 LA PROJECTION PAR SIN(TETA) ET COS(TETA) ;
<                    2 - SAVE>1 : DIV(MPROJ) <-- 1-(SAVE), ET LA PROJECTION
<                                 EST PERPECTIVE EN 1/(1-Z/P), OU :
<                                 P=ABS(DIV(MPROJ)).
<
<
X101:    VAL         $-RACB1
DEFPR:   EQU         RACB+X101
         LA          SAVE            < (A)=TYPE DE PROJECTION SOUHAITEE :
                                     <     0 OU 1-Z...
         ADRI        -1,A
         LBI         2               < (B)=2 A PRIORI (SIN/COS),
         JAE         DEFPR1          < ET OUI, PROJECTION PAR SIN/COS...
         MP          CTTE            < ET NON, PERSPECTIVE :
         NGR         B,B             < ON CALCULE : -K*(SAVE-1),
DEFPR1:  EQU         $
         STB         MPROJ           < ET ON MET SOIT 2, SOIT -K*(SAVE-1)
                                     < DANS DIV(MPROJ)...
         RSR                         < ET C'EST TOUT...
         PAGE
<
<
<        P L A N   D E   P R O J E C T I O N  :
<
<
<        FONCTION :
<                      CETTE ROUTINE SELECTIONNE LE
<                    PLAN DE PROJECTION ET DE TRAVAIL
<                    CHOISIT PARMI LES 3 POSSIBLES :
<                    1- (X3,Y3)
<                    2- (Y3,Z3) ,
<                    3- (Z3,X3).
<                      LE 1ER AXE NOMME PEUT ETRE
<                    PARCOURU A L'AIDE DES COMMANDES
<                    '1' ET '3' , ALORS QUE LE 2EME
<                    PEUT L'ETRE A L'AIDE DE '2' ET '4'.
<                      POUR CE FAIRE , ELLE MEMORISE
<                    LA CONNEXION EXISTANT APRES LE
<                    CHOIX , ENTRE LES COORDONNEES X ET Y
<                    DU CURSEUR VIRTUEL , ET 2 DES 3
<                    COORDONNEES DU 3-CURSEUR CHOISIES
<                    PARMI (Y3,X3) , (Z3,Y3) , (X3,Z3).
<                      DE PLUS ELLE SAVE/RESTORE LES
<                    PAS SUR LES AXES ASSOCIES.
<
<
<        ARGUMENT :
<                    B=4 : CHOIX DE (X3,Y3) ,
<                     =9 : CHOIX DE (Y3,Z3) ,
<                     =2 : CHOIX DE (Z3,X3).
<
<
<        RESULTAT :
<                    RETOUR INDIFFERENT.
<
<
X101:    VAL         $-RACB1
CHPLAN:  EQU         RACB+X101
<
< SAUVEGARDE DE LA TRANSFORMATION COURANTE :
<
         PSR         B
         LAD         TRANS           < A=@EMETTEUR=@TRANSFORMATION
                                     < COURANTE.
         LB          AT              < B=@ZONE DE SAUVEGARDE RELATIVE
                                     < AU PLAN COURANT.
         LXI         NT+1/2+1+1      < X=NBRE DE MOTS A DEPLACER.
         MOVE                        < SAUVEGARDE.
         PLR         B
<
< SAUVEGARDE DU DX ET DY COURANT :
<
         BSR         ASPDXY
<
< CHANGEMENT DE PLAN :
<
         LR          B,A             < RECUPERATION DE L'ARGUMENT.
         SLRS        2               < A=NUMERO DE LA COORDONNEE DU
                                     < 3-CURSEUR CONTENUE DANS CV+Y.
         AD          ACV3
         STA         C1              < MISE EN PLACE DU RELAI D'ACCES
                                     < A LA COORDONNEE DU 3 CURSEUR
                                     < CONTENUE DANS CV+Y.
         LR          B,A             < RE-RECUPERATION DE L'ARGUMENT.
         ANDI        '03             < A=NUMERO DE LA COORDONNEE DU
                                     < 3-CURSEUR CONTENUE DANS CV+X.
         LR          A,Y             < Y=NUMERO DU PLAN SELECTIONNE :
                                     < Y=0 : Q1 ,
                                     < Y=1 : Q2 ,
                                     < Y=2 : Q3.
         AD          ACV3
         STA         C2              < MISE EN PLACE DU RELAI D'ACCES
                                     < A LA COORDONNEE DU 3-CURSEUR
                                     < CONTENUE DANS CV+X.
<
< INITIALISATIONS DES PAS DU CV :
< (A NOTER QU'ON A :
<        X=D3).
<
         LA          &C1
         STA         DY1             < NOUVEAU PAS DY.
         LA          &C2
         STA         DX1             < NOUVEAU PAS DX.
<
< RESTAURATION DE LA TRANSSFORMATION COURANTE
< RELATIVE AU PLAN (Y) :
<
         LBI         TRANS-ZERO      < B=@RECEPTEUR=@TRANSFORMATION
                                     < COURANTE.
         LAD         SAVET           < A=@ZONE DE SAUVEGARDE DES
                                     < 3 PLANS.
E700:    EQU         $
         CPZR        Y               < TEST SUR LE NUMERO DU PLAN.
         JE          E701            < OK , A CONTIENT L'ADRESSE
                                     < DE LA ZONE DE SAUVEGARDE
                                     < DU PLAN (Y).
         ADRI        NT+1/2+1+1,A    < SINON , PROGRESSION DE L'ADRESSE
                                     < DANS LA ZONE DE SAUVEGARDE.
         ADRI        -1,Y            < DECREMENTATION DU NUMERO DU PLAN.
         JMP         E700
E701:    EQU         $
         STA         AT              < SAVE L'@ DE LA ZONE DE SAUVE-
                                     < GARDE DU PLAN (Y).
                                     < A=@EMETTEUR ....
         LXI         NT+1/2+1+1      < X=NBRE DE MOTS A DEPLACER.
         MOVE                        < RESTAURATION DE LA TRANSFOR-
                                     < MATION COURANTE , ANOTER X=0 !!!!!
<
< MISE EN PLACE DES COORDONNEES DU CV :
< (ON A :
<        X=0)
<
         LA          &C1
         STA         CV+Y            < NOUVELLE COORDONNEE Y DU CV.
         LA          &C2
         STA         CV+X            < NOUVELLE COORDONNEE X DU CV.
         RSR                         < RETOUR EN ERREUR.
<
<
<        R E S T A U R A T I O N   D E   2   D E S   3   P A S  :
<
<
<        FONCTION :
<                      RESTAURE 2 DES 3 PAS DES AXES (X,Y,Z)
<                    A PARTIR DE DX,DY.
<
<
<        RESULTAT :
<                    X=D3.
<
<
X101:    VAL         $-RACB1
SPDXY:   EQU         RACB+X101
         LXI         D3              < X=INDEX D'ACCES A LA ZONE DES
                                     < PAS DX3,DY3,DZ3 DANS CV3.
         LA          DY1
         STA         &C1             < SAUVEGARDE DE DY.
         LA          DX1
         STA         &C2             < SAUVEGARDE DE DX.
         RSR
         PAGE
<
<
<        R E S O L U T I O N   D ' U N E   E Q U A T I O N
<        L I N E A I R E   E N   X   O U   Z  :
<
<
<        ARGUMENT :
<                    A=LA DONNE INITIALE (X OU Z) ,
<                    X=COMPTE COURANT DES OVERSCREEN ,
<                    W=@POINT D'INTERSECTION COURANT ('INTER').
<
<
<        RESULTAT :
<                    X<--(X)+1 , SI LA SOLUTION DE L'EQUATION
<                                PROPOSEE EST OVERSCREEN ,
<                    SINON : LE POINT D'INTERSECTION COURANT
<                            RECOIT LA SOLUTION (X,Z) DE L'EQUATION ,
<                            ET : W<--(W)+2.
<
<
<        C A L C U L   D E   X   ,   Z   E T A N T   D O N N E  :
<
<
X101:    VAL         $-RACB1
CALX:    EQU         RACB+X101
         STA         NZ,W            < SAVE A PRIORI LA DONNEE
                                     < INITIALE (Z).
         CPZ         P1              < LA RESOLUTION DE L'EQUATION
                                     < EST-ELLE POSSIBLE ?????
         JNE         EE30            < OUI, OK.
<
< CAS D'UNE RESOLUTION IMPOSSIBLE (DIVISION PAR 0) :
<
EE32:    EQU         $
         ADRI        1,X             < ET UN OVERCREEN DE PLUS ....
<
< RETOUR DES 2 ROUTINES :
<
EE31:    EQU         $
         RSR
<
< CAS D'UNE RESOLUTION EN 'X' POSSIBLE :
<
EE30:    EQU         $
         NGR         A,A             < A=-Z.
         MP          P2              < A,B=-Z*P2.
         LY          P3+1            < AFIN DE FAIRE UN CALCUL
                                     < DOUBLE-PRECISION.
         ADR         Y,B             < TOTALISATION PARTIELLE DE -Z*P2
                                     < ET DE P3.
         ADCR        A               < PROPAGATION DE LA RETENUE.
         AD          P3              < A,B=-Z*P2+P3.
         PSR         A               < SAVE LE SIGNE DU DIVIDENDE...
         DV          MP1             < A=QUOTIENT PAR DEFAUT DE :
                                     < (-Z*P2+P3)/(-P1).
         PLR         B               < RESTAURE LE SIGNE DU DIVIDENDE,
         JNV         EE30X1          < OK, DIVISION POSSIBLE...
         LRM         A               < NON,
XYMAX::  VAL         '7FFF
         WORD        XYMAX           < A=ABS(MAX(X,Y)).
         CPZR        B               < SIGNE DU DIVIDENDE ???
         JGE         EE30X1          < OK, POSITIF...
         NGR         A,A             < ET BIEN NON, NEGATIF...
EE30X1:  EQU         $
         STA         NX,W            < RANGEMENT DU X DE LA SOLUTION
                                     < A PRIORI.
<
< TEST D'OVERSCREEN :
<
EE33:    EQU         $
         JAL         EE32            < SOLUTION NEGATIVE REFUSEE.
         CP          BORNE
         JG          EE32            < SOLUTION SUPERIEURE A BORNE.
                                     < REFUSEE.
         PSR         L
         LB          P2              < (B)=P2, AFIN DE SAVOIR SI LA DROITE EST
                                     <     VERTICALE (NOTA : 'L' VA CHANGER...),
         LY          P1              < (Y)=P1, AFIN DE SAVOIR SI LA DROITE EST
                                     <     HORIZONTALE.
         LAD         INTER
         LR          A,L             < L=BASE LA LISTE COURANTE DE POINTS.
E33X:    EQU         $
         CPR         W,L             < TOUTE EXPLOREE ???
         JE          E33Y            < OUI, FINI...
         LA          NX,L            < NON, (W) EST-IL UN POINT DOUBLE ???
         CP          NX,W
         JNE         E33X2           < NON...
         CPZR        B               < PEUT-ETRE, MAIS ALORS LA DROITE EST-ELLE
                                     < VERTICALE ???
         JNE         E33X1           < NON, LE POINT EST ELIMINE...
         LA          NZ,L            < OUI, COMPARONS LES 'Z'...
         CP          NZ,W
         JNE         E33Z            < NON...
E33X1:   EQU         $               < CAS DES DROITES VERTICALES/HORIZONTALES..
         PLR         L               < OUI, DONC IL FAUT L'ELIMINER...
         JMP         EE32
E33X2:   EQU         $
         LA          NZ,L            < LES 'X' N'ETANT PAS CONFONDUS, REGARDONS
                                     < LES 'Z' :
         CP          NZ,W            < SONT-ILS CONFONDUS ???
         JNE         E33Z            < NON, LE POINT COURANT EST GARDE POUR LE
                                     < MOMENT...
         CPZR        Y               < OUI : LA DROITE EST HORIZONTALE ???
         JNE         E33X1           < NON, ON ELIMINE LE POINT...
E33Z:    EQU         $
         ADRI        2,L             < AU POINT SUIVANT...
         JMP         E33X
E33Y:    EQU         $
         PLR         L
         ADRI        2,W             < LORSQUE LA SOLUTION EST DANS
                                     < L'ECRAN , ELLE DEVIENT UN POINT
                                     < D'INTERSECTION ADMIS.
         JMP         EE31            < OK, RETOUR.
<
<
<        C A L C U L   D E   Z   ,   X   E T A N T   D O N N E  :
<
<
X101:    VAL         $-RACB1
CALZ:    EQU         RACB+X101
         STA         NX,W            < SAVE LA DONNEE INITIALE
                                     < (X) A PRIORI.
         CPZ         P2              < LA RESOLUTION DE L'EQUATION
                                     < PROPOSEE EST-ELLE POSSIBLE ????
         JE          EE32            < NON, OVERFLOW.
<
< CAS D'UNE RESOLUTION POSSIBLE :
<
         MP          P1              < A,B=X*P1.
         LY          P3+1            < POUR UN CALCUL DOUBLE-PRECISION.
         ADR         Y,B             < TOTALISATION PARTIELLE DE
                                     < X*P1 ET DE P3.
         ADCR        A               < PROPAGATION DE LA RETENUE.
         AD          P3              < SUITE DE LA TOTALISATION.
         PSR         A               < SAVE LE SIGNE DU DIVIDENDE...
         DV          P2              < A=QUOTIENT PAR DEFAUT DE
                                     < X*P1/P2.
         PLR         B               < RESTAURE LE SIGNE DU DIVIDENDE,
         JNV         EE30X2          < OK, DIVISION POSSIBLE...
         LRM         A               < NON,
         WORD        XYMAX           < A=ABS(MAX(X,Y)).
         CPZR        B               < SIGNE DI DIVIDENDE ???
         JGE         EE30X2          < OK, POSITIF...
         NGR         A,A             < ET BIEN NON, NEGATIF...
EE30X2:  EQU         $
         STA         NZ,W            < SAVE A PRIORI LA SOLUTION Z.
         JMP         EE33            < VERS LE TEST D'OVERSCREEN DE
                                     < LA SOLUTION Z OBTENUE.
         PAGE
<
<
<        O R I G I N E   D U   S E G M E N T   C O U R A N T  :
<
<
<        FONCTION :
<                      CETTE ROUTINE FIXE L'ORIGINE DU
<                    SEGMENT COURANT A 6'EMPLACEMENT DU
<                    CURSEUR VIRTUEL GLOBAL.
<
<
X101:    VAL         $-RACB1
EXECA:   EQU         RACB+X101
         BSR         APROJ           < PROJECTION DE L'ESPACE (X3,Y3,Z3)
                                     < SUR LE PLAN (X3,Y3).
         STX         SEGORG+X
         STY         SEGORG+Y
         RSR
         PAGE
<
<
<        E D I T I O N   D ' U N   M E S S A G E  :
<
<
<        FONCTION :
<                      CE MODULE EDITE UN MESSAGE
<                    ALPHA-NUMERIQUE DONT LE 1ER
<                    CARACTERE EST A L'INDEX (SAVE) ,
<                    ET LE DERNIER A L'INDEX (IEG)-1.
<
<
X101:    VAL         $-RACB1
TEXTE:   EQU         RACB+X101
         BSR         APROJ           < PROJECTION DU 3-CURSEUR.
         BSR         AFECH           < APPLICATION ECHELLE GENERALE.
         LR          X,A             < VALIDATION DE X3.
         JAL         TEXT2           < 3-CV INVISIBLE.
         CP          BORNE
         JG          TEXT2           < 3-CV INVISIBLE.
         LR          Y,A             < VALIDATION DE Y3.
         JAL         TEXT2           < 3-CV INVISIBLE.
         CP          BORNE
         JG          TEXT2           < 3-CV INVISIBLE.
         STX         SEGT+X          < DEFINITION DE L'ORIGINE
         STY         SEGT+Y          < DU TEXTE A EDITER.
         LAD         OG
         BSR         ASVC            < DECHAINAGE DES SEGMENTS.
         JNE         TEXT1           < CTRL-X-OFF ???
         LAD         WGT
         BSR         ASVC            < POSITIONNEMENT TEXTE.
         JNE         TEXT1           < CTRL-X-OFF ???
         LA          IEG             < INDEX CARACTERE COURANT.
         ADRI        -1,A            < RETOUR SUR LE '!'.
         SB          SAVE            < A=LONGUEUR DU MESSAGE.
         STA         DEMOUT+2        < MAJ DE DEMOUT.
         LA          AIC
         SLLS        1               < A=@OCTET DE L'ITEM COURANT.
         AD          SAVE            < A=@OCTET DU MESSAGE.
         STA         DEMOUT+1        < MAJ DE DEMOUT.
         LAD         CG
         BSR         ASVC            < RETOUR EN ALPHA-NUMERIQUE
                                     < DE LA VISU.
         JNE         TEXT1           < RETOUR EN ERREUR (CTRL-X-OFF ???)
         LAD         DEMOUT
         BSR         ASVC            < EDITION DU MESSAGE EN ALPHA.
         JNE         TEXT1           < CTRL-X-OFF ???
         LAD         OG
         BSR         ASVC            < REMISE EN GRAPHIQUE.
         JNE         TEXT1           < CTRL-X-OFF ???
TEXT2:   EQU         $               < CAS DES 3-CV INVISIBLES.
         RSR                         < RETOUR...
TEXT1:   EQU         $
         ADRI        -1,K            < ANNULATION DU BSR.
         BR          AGOGE           < RETOUR EN ERREUR A GE.
         PAGE
         IF          VIDEO,,X100,
<
<
<        E N T R E E   D ' U N   S E G M E N T   Z D C  :
<
<
<        FONCTION :
<                      CETTE ROUTINE ENTRE LE SEGMENT CORANT
<                    DE LA ZDC, ET LE MET EN (SEGORG,SEGEXT)
<                    POUR UTILISATION ULTERIEURE.
<
<
X101:    VAL         $-RACB1
SEGIN:   EQU         RACB+X101
         LAD         DEMSEG
<
< BOUCLE D'ATTENTE D'UN SEGMENT VALIDE :
<
SEGIN1:  EQU         $
         SVC         0               < ACCES SEGMENT COURANT ZDC.
         CPZ         NOMSEG          < EST-IL VALIDE ???
         JE          SEGIN1          < NON, ON ATTEND...
<
< ACQUITTEMENT DU SEGMENT COURANT :
<
         STZ         NOMSEG
         LAD         DELSEG
         SVC         0               < ACQUITTEMENT EN ZDC.
<
< MISE A JOUR DU SEGORG,SEGEXT :
<
         LA          SEGOR2+X
         LB          SEGOR2+Y
         STB         SEGORG+Y
         STA         SEGORG+X
         LA          SEGEX2+X
         LB          SEGEX2+Y
         STB         SEGEXT+Y
         STA         SEGEXT+X
         LXI         0               < INDEX D'ACCES AU 3-CURSEUR.
         STB         &C1
         STA         &C2
         STB         CV+Y
         STA         CV+X
         RSR                         < ET C'EST TOUT...
X100:    VAL         0
         PAGE
         IF          VIDEO,,,X100
<
<
<        C H O I X   N O I R / B L A N C   V I D E O  :
<
<
<        ARGUMENT :
<                    B='40 : MISE A BLANC,
<                      '00 : BLANC SI NOIR/NOIR SI BLANC.
<
<
X101:    VAL         $-RACB1
COLOR:   EQU         RACB+X101
         LA          &APOINT         < ACCES INSTRUCTION COURANTE.
         ORR         B,A
         IBT         9+16
         EORR        B,A
         STA         &APOINT         < MISE A JOUR DE L'INSTRUCTION
                                     < VARIABLE SBT/RBT.
         TBT         9               < SBT : BIT9=1 : MISE A '0000,
                                     < RBT : BIT9=0 : MISE A 'FFFF.
         STZ         WORKS           < WORKS='0000 A PRIORI,
         JC          COLOR1          < OUI, SBT ==> WORKS='0000,
         DC          WORKS           < NON, RBT ==> WORKS='FFFF.
COLOR1:  EQU         $
         RSR
         IF          ORDI-"T",XWOR%,,XWOR%
<
<
<        A F F I C H A G E   D ' U N   P O I N T  :
<
<
<        ARGUMENTS :
<                    X ET Y CONTIENNENT L'X ET L'Y DU
<                    POINT A METTRE A 0/1.
<                    C=@IMAGE VIDEO.
<
<
X101:    VAL         $-RACB1
SET:     EQU         RACB+X101
         PSR         B,X,C
         LR          Y,A             < A=Y(POINT COURANT).
         MP          NMPL
         ADR         B,C
         LR          X,A             < A=X(POINT COURANT).
         SLRS        4               < RECUPERATION D'UN NUMERO DE MOT.
         ADR         A,C             < C=@MOT CONTENANT LE POINT M.
         LAI         'F              < MASQUE DE CALCUL MODULO 16.
         ANDR        A,X             < X=NUMERO DU BIT DANS LE MOT.
         LA          0,C             < A=MOT CONTENANT LE POINT M.
POINTS:  SBT         0,X             < POSITIONNEMENT DU POINT A 0/1.
X101:    VAL         POINTS-RACB1
POINT:   EQU         RACB+X101       < ADRESSE DE L'INSTRUCTION
                                     < VARIABLE SBT/RBT LORSQUE LA
                                     < BRANCHE 'V' EST RESIDENTE.
         STA         0,C             < MISE A JOUR DE L'IMAGE.
         PLR         B,X,C
         RSR
XWOR%:   VAL         0
X100:    VAL         0
         PAGE
<
<
<        E X T R E M I T E   S   D U   S E G M E N T   C O U R A N T  :
<
<
<        FONCTION :
<                      CETTE PRIMITIVE FIXE L'EXTREMITE DU
<                    SEGMENT COURANT A L'EMPLACEMENT DU CURSEUR
<                    VIRTUEL GLOBAL , PUIS PROJETTE LE SEGEMENT COURANT
<                    SUR LE PLAN DE LA VISU ; ET ENFIN AVANT
<                    LA VISUALISATION , ELLE CALCULE LES INTERSECTIONS
<                    AVEC LES BORDS DE L'ECRAN.
<
<
<        NOTA :
<                      LA PRIMITIVE 'S' SERA UTILISEE
<                    PAR LA PRIMITIVE 'B'.
<
<
X101:    VAL         $-RACB1
EXECS:   EQU         RACB+X101
         PSR         A,B,X,Y         < QUELLE PRUDENCE !!!!
         BSR         APROJ           < PROJECTION (X3,Y3,Z3) --> (X3,Y3).
         STX         SEGEXT+X
         STY         SEGEXT+Y
<
< PROJECTION DE L'EXTREMITE DU SEGEMENT COURANT :
<
         BSR         AFECH           < ECCHELLE GENERALE.
         STX         X2              < COORDONNEE X2 DU POINT M2.
         STY         Z2              < COORDONNE Z2 DU POINT M2.
<
< PROJECTION DE L'ORIGINE DU SEGMENT COURANT :
<
         LX          SEGORG+X
         LY          SEGORG+Y
         BSR         AFECH           < ECHELLE GENERALE.
         STX         X1              < COORDONNEE X1 DU POINT M1.
         STY         Z1              < COORDONNEE Z1 DU POINT M1.
<
< TEST D'INCLUSION DE M1M2 DANS L'ECRAN :
<
         LA          X1
         BSR         AOVS            < TEST D'OVERSCREEN X1.
         LA          Z1
         BSR         AOVS            < TEST D'OVERSCREE DE Z1.
         LA          X2
         BSR         AOVS            < TEST D'OVERCREEN DE X2.
         LA          Z2
         BSR         AOVS            < TEST D'OVERSCREEN DE Z2.
         JMP         EE41            < LORSQU'ON ARRIVE ICI, C('EST
                                     < QU'AUCUNE DES COORDONNEES X1,
                                     < Z1,X2,Z2 N'EST OVERSCREEN.
<
< ROUTINE DE TEST D'OVERSCREEN :
<
X101:    VAL         $-RACB1
OVS:     EQU         RACB+X101
         JAL         EE42            < UNE COORDONNEE NEGATIVE EST
                                     < OVERSCREEN.
         CP          BORNE
         JG          EE42            < UNE COORDONNEE SUPERIEURE A
                                     < BORNE EST OVERCREEN.
         RSR                         < LE RETOUR A LIEU LORSQUE LA
                                     < COORDONNEE EST DANS L'ECRAN.
<
< CAS OU AU MOINS UNE COORDONNEE EST OVERSCREEN :
<
EE42:    EQU         $               < CAS OU UN OVERSCREEN EST SUR.
         ADRI        -1,K            < RATTRAPAGE DE LA PILE K ,
                                     < LORSQU'1N RSR N'A PAS ETE FAIT.
<
< CALCUL DES PARAMETRES DE LA DROITE M1M2 :
<
<        L'EQUATION DE LA DROITE EST : X*MP1+Z*P2=P3,
<        AVEC :
<        P1=Z2-Z1 ,
<        P2=X2-X1 ,
<        P3=X2*Z1-X1*Z2.
<        DE PLUS :
<        A X DONNE : Z=(X*P1+P3)/P2 SI P2#0 ,
<        A Z DONNE : X=(-Z*P2+P3)/MP1 SI P1#0.
<
         LA          Z2
         SB          Z1
         STA         P1              < P1=Z2-Z1.
         NGR         A,A
         STA         MP1             < MP1=-P1.
         LA          X2
         SB          X1
         STA         P2              < P2=X2-X1.
         LA          X2
         MP          Z1              < A,B=X2*Z1.
         STA         P3
         STB         P3+1            < RANGEMENT TEMPORAIRE.
         LA          X1
         NGR         A,A
         MP          Z2              < A,B=-X1*Z2.
         LY          P3+1            < POUR UN CALCUL EN DOUBLE-
                                     < PRECISION.
         ADR         Y,B             < TOTALISATION PARTIELLE.
         ADCR        A               < PROPAGATION DE LA RETENUE.
         STB         P3+1
         AD          P3              < POURSUITE DU CUMUL.
         STA         P3              < P3=X2*Z1-X1*Z2 , EN DOUBLE-
                                     < PRECISION.
<
< CALCUL DE L'INTERSECTION DE M1M2 AVEC L'ECRAN :
<
         LAD         INTER
         LR          A,W             < INITIALISATION DE W SUR LE 1ER
                                     < POINT D'INTERSECTION.
         LXI         0               < RAZ DU COMPTE DES OVERSCREEN.
         LAI         0
         BSR         ACALZ           < CALCUL DE Z POUR X=0.
         LA          BORNE
         BSR         ACALZ           < CALCUL DE Z POUR X=BORNE.
         LAI         0
         BSR         ACALX           < CALCUL DE X POUR Z=0.
         LA          BORNE
         BSR         ACALX           < CALCUL DE X POUR Z=BORNE.
<
< TEST DE L'OVERSCREEN COMPLET DE LA DROITE M1M2 :
<
         LR          X,A             < A=COMPTE DE OVERSCREEN RENCONTRES.
         CPI         2
         JG          EE40            < SI LE NOMBRE D'OVERSCREEN EST
                                     < SUPERIEUR A 2, ON ADMET QUE
                                     < LA DROITE M1M2 EST INVISIBLE ....
<
< CALCUL DE (N1,N2).INTER.(M1,M2)
< (N1 ET N2 ETANT LES 2 POINTS D'INTERSECTION
< NON OVERSCREEN).
<
<
< PREPARATION DU TRI DES POINTS M1,M2,N1,N2 :
<
         LAD         SEG2+NZ
         LR          A,W             < W=@DES COORDONNEES DE M1.
         LXI         NX-NZ
         LA          P1              < A=P1.
         JAGE        EE69            < P1>=0.
         NGR         A,A             < A=-P1 ; ON MET DONC DANS A
                                     < LA VALEUR ABSOLUE DE P1.
EE69:    EQU         $
         CP          SCALE           < LA DROITE M1M2 EST-ELLE
                                     < HORIZONTALE ????
                                     < (AUX ERREURS DE CALCUL PRES...)
         JGE         EE60            < NON, LE TRI VA ETRE FAIT SUR Z.
         ADRI        NX-NZ,W         < OUI , LE TRI VA ETRE FAIT SUR X.
         LXI         NZ-NX           < POUR LES PERMUTATIONS DE
                                     < 2EME COORDONNEES.
EE60:    EQU         $
         LYI         0               < Y MEMORISE LES PERMUTATIONS
                                     < QUI VONT ETRE OPEREES.
<
< TRI DE M1 ET M2 AFIN D'OBTENIR LA RELATION M1<M2 :
<
         LA          M1,W
         LB          M2,W
         CPR         A,B
         JGE         EE61            < RIEN A FAIRE, ON A DEJA : M1<M2.
         STA         M2,W            < SINON , ON ECHANGE M1 ET M2.
         STB         M1,W
         ADRI        1,Y             < BIT15(Y) : PERMUTATION M1,M2.
EE61:    EQU         $
<
< TRI DE N1 ET N2 AFIN D'OBTENIR : N1<N2 :
<
         LA          PN1,W
         LB          PN2,W
         CPR         A,B
         JGE         EE62            < RIEN A FAIRE, ON A DEJA N1<N2.
         STA         PN2,W           < SINON, ON ECHANGE N1 ET N2.
         STB         PN1,W
         ADRI        2,Y             < BIT14(Y) : PERMUTATION N1,N2.
EE62:    EQU         $
<
< ELIMINATION DES CAS IMPOSSIBLES OU INVISIBLES :
<
         LA          M1,W
         CP          PN2,W
         JGE         EE40            < M1>N2 : M1M2 EST INVISIBLE.
         LA          M2,W
         CP          PN1,W
         JLE         EE40            < M2<N1 : M1M2 EST INVISIBLE.
<
< CHOIX DU 'PLUS GRAND' PARMI M1 ET N1 :
<
         LA          PN1,W
         CP          M1,W
         JLE         EE63            < N1<M1 : ON GARDE M1.
         STA         M1,W            < SINON N1 DEVIENT M1.
         ADRI        4,Y             < BIT15(Y) : PERMUTATION M1,N1.
EE63:    EQU         $
<
< CHOIX DU 'PLUS PETIT' PARMI M2 ET N2 :
<
         LA          PN2,W
         CP          M2,W
         JGE         EE64            < M2<N2 : ON GARDE M2.
         STA         M2,W            < SINON , N2 DEVIENT M2.
         ADRI        8,Y             < BIT12(Y) : PERMUTATION M2,N2.
EE64:    EQU         $
<
< PERMUTATION DES 2EMES COORDONNEES DES POINTS M1, M2, N1, N2 :
<
         LR          Y,A             < A=INDICATEUR DES PERMUTATIONS.
         ADR         X,W             < POSITIONNEMENT DE W SUR LA
                                     < COORDONNEE (X OU Z) NON ENCORE
                                     < PERMUTEE.
<
< PERMUTATION M1,M2 :
<
         TBT         15
         JNC         EE65            < M1 ET M2 SONT INCHANGES.
         LB          M1,W
         LY          M2,W
         STY         M1,W
         STB         M2,W
EE65:    EQU         $
<
< PERMUTATION DE N1,N2 :
<
         TBT         14
         JNC         EE66            < N1 ET N2 SONT INCHANGES.
         LB          PN1,W
         LY          PN2,W
         STY         PN1,W
         STB         PN2,W
EE66:    EQU         $
<
< PERMUTATION DE M1,N1 :
<
         TBT         13
         JNC         EE67            < M1 ET N1 SONT INCHANGES.
         LB          M1,W
         LY          PN1,W
         STY         M1,W
         STB         PN1,W
EE67:    EQU         $
<
< PERMUTATION DE M2,N2 :
<
         TBT         12
         JNC         EE68            < M2 ET N2 SONT INCHANGES.
         LB          M2,W
         LY          PN2,W
         STY         M2,W
         STB         PN2,W
EE68:    EQU         $
<
<
<        C O R R E C T I O N   D ' E R R E U R S   D E   C A L C U L  :
<
<
<        FONCTION :
<                      DES ERREURS DE CALCUL (DIVISION ENTIERE) ,
<                    FONT QUE DES POINTS D'UNE MEMEME DROITE ,
<                    AYANT UNE COORDONNEE IDENTIQUE (X OU Z) ,
<                    ONT LEURS AUTRES COORDONNEES (Z OU X)
<                    DIFFERENTES . ON RETABLIT ICI LES
<                    COINCIDENCES.
<
<
         LAD         SEG2+NZ
         LR          A,W             < W POINTE SUR LA 1ERE COORDONNEE
                                     < DU POINT M1.
         LXI         2*2             < ON VA VERIFIER LES 2 COORDONNEES
                                     < DES 2 POINTS M1 ET M2.
<
< BOUCLE DE VERIFICATION :
<
EE602:   EQU         $
         LA          0,W             < A=UNE COORDONNEE Z/X DE M1/M2.
         JAGE        EE600
         LAI         0               < SI L'ARGUMENT EST NEGATIF , ON
                                     < LE REND NUL.
EE600:   EQU         $
         CP          BORNE           < TEST OVERSCREEN POSITIF.
         JLE         EE601           < OK, ARGUMENT DANS L'ECRAN.
         LA          BORNE           < SI L'ARGUMENT EST HORS L'ECRAN
                                     < POSITIF , ON LUI DONNE LA
                                     < VALEUR 'BORNE'.
EE601:   EQU         $
         STA         0,W             < MISE A JOUR EVENTUELLE D'UNE
                                     < COORDONNEE Z/X DE M1/M2.
         ADRI        1,W             < PASSAGE A LA COORDONNEE
         JDX         EE602           < SUIVANTE.
<
<
<        A F F I C H A G E   D U   S E G M E N T
<        C O U R A N T   P R O J E T E  :
<
<
EE41:    EQU         $
                                     < TOUT ENTIER DANS L'ECRAN.
         LAD         OG              < PASSAGE AU MODE GRAPHIQUE.
         BSR         ASVC
         JNE         EE450           < CAS DES CTRL-X-OFF.
         LAD         WG              < AFFICHAGE DU SEGMENT COURANT.
         BSR         ASVC
         JNE         EE450           < CAS DES CTRL-X-OFF.
         IF          VIDEO,,X100,
<
<        E N V O I   E V E N T U E L   E N   Z D C  :
<
         LA          INDZDC          < ACCES A LA VALIDATION COURANTE.
         TBT         15              < ACCES VALIDE ???
         JNC         EE40            < NON...
         LAD         GETGS           < OUI...
INTER1:  EQU         $
         SVC         0               < ACCES A L'ACQUITEMENT DU
                                     < SEGMENT PRECEDENT.
         CPZ         NOMSEG          < A-T'IL ETE ACQUITTE ???
         JNE         INTER1          < NON, ON ATTEND...
         DC          NOMSEG          < OUI, NOMSEG=-1,
         LAD         STOGS
         SVC         0               < ENVOI DU SEGMENT COURANT EN ZDC.
X100:    VAL         0
         IF          VIDEO,,,X100
<
<        C O N V E R S I O N   V I D E O  :
<
         PSR         C
         LA          AIMAG
         LR          A,C             < C=@IMAGE VIDEO.
<
< CALCUL DES EXTREMITES M1 ET M2 DU SEGMENT VIDEO :
<
         LA          SEGOR2+X        < A=X(ORIGINE GRAPHIQUE).
         SLRS        DEDX            < REDUCTION VIDEO.
         STA         DICOX1          < RANGEMENT DE X1.
         LA          SEGOR2+Y        < A=Y(ORIGINE GRAPHIQUE).
         SLRS        DEDY            < REDUCTION VIDEO.
         NGR         A,A
         AD          NLIG            < INVERSION DUE AU FAIT QUE LES
                                     < AXES Y VIDEOS ET GRAPHIQUES
                                     < SONT INVERSES.
         STA         DICOY1          < RANGEMENT DE Y1.
         LA          SEGEX2+X        < A=X(EXTREMITE GRAPHIQUE).
         SLRS        DEDX            < REDUCTION VIDEO.
         STA         DICOX2          < RANGEMENT DE X2.
         LA          SEGEX2+Y        < A=Y(EXTREMITE GRAPHIQUE).
         SLRS        DEDY            < REDUCTION VIDEO.
         NGR         A,A
         AD          NLIG            < INVERSION DES AXES Y.
         STA         DICOY2          < RANGEMENT DE Y2.
<
< TRACE DICHOTOMIQUE DU SEGMENT :
<
         IF          ORDI-"T",XWOR%,,XWOR%
         LX          DICOX1          < X=X1.
         LY          DICOY1          < Y=Y1.
         BSR         ASET            < AFFICHAGE DU POINT M1.
         BSR         ADICO           < TRACE DES POINTS DE M1 A M2.
         LX          DICOX2          < X=X2.
         LY          DICOY2          < Y=Y2.
         BSR         ASET            < AFFICHAGE DU POINT M2.
         BSR         AVIS            < STABILISATION IMAGE SI :SYS...
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         BSR         AVSEG           < TRACE DU SEGMENT VIDEO ET VISUALISATIO
                                     < EVENTUELLE.
XWOR%:   VAL         0
<
< RETOUR DE LA CONVERSION :
<
         PLR         C
X100:    VAL         0
EE40:    EQU         $               < COMPLETEMENT EN DEHORS DE
                                     < L'ECRAN !!!
         PLR         A,B,X,Y
         RSR
<
< CAS DES CTRL-X-OFF : ON ABORTE LE
< DESSIN ET ON FAIT UN RETOUR A 'GE' :
<
EE450:   EQU         $
         ADRI        -5,K            < RATRAPAGE BSR ET PSR.
         BR          AGOGE           < RETOUR EN ERREUR A GE.
         PAGE
         IF          VIDEO,,,X100
         IF          ORDI-"T",XWOR%,,XWOR%
<
<
<        P A R C O U R S   D I C H O T O M I Q U E   D ' U N
<                    S E G M E N T   M 1   M 2  :
<
<
X101:    VAL         $-RACB1
DICO:    EQU         RACB+X101
DICOB:   EQU         $
         LA          DICOX1          < A=X1.
         AD          DICOX2          < A=X1+X2.
         SLRS        1               < A=(X1+X2)/2.
         STA         DICOX           < X D U MILIEUR DE M1M2.
         LA          DICOY1          < A=Y1.
         AD          DICOY2          < A=Y1+Y2.
         SLRS        1               < A=(Y1+Y2)/2.
         STA         DICOY           < Y DU MILIEU M 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
                                     < CHANGEMENT DE POINT M1.
         STA         DICOX2          < RESTAURE X2.
         STB         DICOY2          < RESTAURE Y2.
         JMP         DICOB           < VERS LA POURSUITE DE LA DICHO.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         PAGE
<
<
<        T R A C E   D U   S E G M E N T   ( M 1 , M 2 )  :
<
<
<        FONCTION :
<                      CETTE ROUTINE TRACE LE SEGMENT
<                    M1M2 , TEL QUE :
<                                    M1(DICOX1,DICOY1),
<                                    M2(DICOX2,DICOY2).
<
<        (C'EST LE SYSTEME CMS5 QUI SE CHARGERA DE L'INTERPOLATION !).
<
X101:    VAL         $-RACB1
VSEG:    EQU         RACB+X101
<
< PROLOGUE: SAUVEGARDE DES REGISTRES UTILISES ET SAUVEGARDE DANS LA PILE
< (QUI EST GRANDE !) DE LA ZONE QU'ON VA UTILISER POUR CONSTRUIRE L'EN-TETE
< DE L'IMAGE.
<
         PSR         A,B,X,W
<
         LR          K,B
         ADRI        1,B             < ZONE RECEPTRICE.
         LRM         A,X,W
         WORD        ENTIM           < ZONE EMETTRICE (A SAUVER DANS LA PILE).
         WORD        LENTIM          < LONGUEUR EN-TETE IMAGE.
         WORD        ENTIM           < POUR BASER L'EN-TETE.
         MOVE
         ADRI        LENTIM,K        < MISE A JOUR DE 'K'.
<
< ICI, ON A SAUVEGARDE LA ZONE DE CONSTRUCTION DE L'EN-TETE DANS LA PILE,
< ON VA CONSTRUIRE L'EN-TETE ET FAIRE LA DEMANDE D'INTERPOLATION VIDEO.
<
         LRM         A,B,X
         WORD        SEGOR2+Y        < ZONE EMETTRICE: COORDONNEES (Y1,X1),
                                     < (Y2,X2) SEGMENT COURANT. CE SONT DES
                                     < COORDONNEES GRAPHIQUES.
         WORD        ENTIM+DEPY1     < ZONE RECEPTRICE.
         WORD        4               < LONGUEUR.
         MOVE
         STZ         DEPMOD,W        < MDE TRACE = 'RBT' A PRIORI.
         CPZ         WORKS
         JNE         VSEG1           < MODE TRACE 'RBT'.
         IC          DEPMOD,W        < MODE TRACE 'SBT'.
VSEG1:   EQU         $
         LA          ASTAB
MEMOBA:  VAL         8               < BIT DISCRIMINANT 'MEMTV' DE LA
                                     < MEMOIRE UTILISATEUR...
         LB          MODEV
         TBT         16+MEMOBA       < ALORS, OU TRACER ???
         JNC         VSEG2           < DANS LA MEMOIRE UTILISATEUR...
         STB         DEPMOD,W        < NON, DIRECTEMENT DANS 'MEMTV'...
         LRM         B
         WORD        '7F00
         STB         DEPSPA,W        < ON INHIBE TOUTES LES COULEURS, SAUF
                                     < LE NOIR BIEN ENTENDU...
         LR          A,W             < W=BASE LA DEMANDE D'INTERPOLATION,
         LRM         A,X
         WORD        ENTIM-ZERO*2
         WORD        LENTIM*2        < LONGUEUR DE L'EN-TETE...
         JMP         VSEG3           < VERS LA MISE A JOUR DE LA DEMANDE...
VSEG2:   EQU         $
         LR          A,W             < 'W' BASE LA DEMANDE DE STABILISATION.
         LRM         A,X
         WORD        ENTIM-ZERO*2    < ADRESSE OCTET EN-TETE IMAGE.
         WORD        LENTIM+LIMAG*2  < LONGUEUR OCTETS EN-TETE + IMAGE.
VSEG3:   EQU         $
         STA         1,W
         STX         2,W
         BSR         AVIS            < INTERPOLATION VIDEO ET STABILISATION
                                     < EVENTUELLE.
         LRM         A,X
         WORD        IMAG-ZERO*2     < RESTAURATION ADRESSE ET
         WORD        LIMAG*2         < LONGUEUR IMAGE DANS LA DEMANDE.
         STA         1,W
         STX         2,W
<
< EPILOGUE (FAIRE COMME SI ON N'AVAIT RIEN TOUCHE...).
<
         ADRI        -LENTIM,K       < RESTAURATION DE 'K'.
         LR          K,A
         ADRI        1,A             < ZONE EMETTRICE.
         LRM         B,X
         WORD        ENTIM           < ZONE RECEPTRICE (A RESTAURER).
         WORD        LENTIM          < LONGUEUR.
         MOVE
<
         PLR         A,B,X,W
         RSR
<
< MODE DE TRACE.
<
POINTS:  SBT         0,X             < SET BIT.
X101:    VAL         POINTS-RACB1
POINT:   EQU         RACB+X101       < INSTRUCTION VARIABLE 'SBT'...
         PAGE
<
<
<        L I S T E   D E S   M O D E S  :
<
<
X101:    VAL         $-RACB1
VIDEOL:  EQU         RACB+X101
EVIDEO:  EQU         $
         WORD        '0000           < "OFF",
         WORD        '0180           < "OR" FLOU,
         WORD        '0080           < "AND" FLOU,
         WORD        'FF80           < "EOR" FLOU,
         WORD        '01B0           < "FORCAGE NIVEAU",
         WORD        '01F0           < "NE TRACER QUE SUR LE NOIR",
         WORD        '0380           < "OR" BINAIRE,
         WORD        '0280           < "AND" BINAIRE,
         WORD        'FD80           < "EOR" BINAIRE.
LVIDEO:: VAL         $-EVIDEO-1
<
<
<        G E S T I O N   D E   L ' A C C E S   D I R E C T
<                    A   ' M E M T V '  :
<
<
<        M O D E   D E   T R A C E  :
<
<
<        ARGUMENT :
<                    Y="0" : MISE OFF,
<                      "1" : TRACE PAR 'OR' FLOU ,
<                      "2" : TRACE PAR 'AND' FLOU ,
<                      "3" : TRACE PAR 'EOR' FLOU ,
<                      "4" : FORCAGE,
<                      "5" : ON NE TRACERA QUE SUR LE NOIR,
<                      "6" : TRACE PAR 'OR' BINAIRE,
<                      "7" : TRACE PAR 'AND' BINAIRE,
<                      "8" : TRACE PAR 'EOR' BINAIRE.
<
<
X101:    VAL         $-RACB1
VIDEOM:  EQU         RACB+X101
         LXI         1               < ERREUR A PRIORI...
         LR          Y,A
         ADRI        -"0",A          < A=MODE DEMANDE,
         JAL         VIDEO1          < ERREUR...
         CPI         LVIDEO
         JG          VIDEO1          < ERREUR...
         PSR         W
         LRM         W
         WORD        VIDEOL
         ADR         A,W
         LA          0,W             < A=FORMAT DU MOT DE COMMANDE...
         PLR         W
         STA         MODEV           < INITIALISATION DE 'MODEV'.
         STZ         &ASTAB3         < ET SUPPRESSION DE L'AUTRE MODE...
VIDEO2:  EQU         $
         LXI         0               < RETOUR OK...
VIDEO1:  EQU         $
         RSR
<
<
<        C O U L E U R   D U   T R A C E  :
<
<
<        ARGUMENT :
<                    Y="8" : MODE ANTI-ALIASING,
<                      "0" A "7" : DANS LA COULEUR INDIQUEE.
<
<
X101:    VAL         $-RACB1
VIDEOC:  EQU         RACB+X101
         LXI         1               < RETOUR EN ERREUR A PRIORI...
         LR          Y,A
         ADRI        -"0",A          < A=COULEUR DEMANDEE,
         JAL         VIDEO1          < ERREUR...
NCOOL:   VAL         3               < NOMBRE DE PROCESSEURS DE COULEUR.
         CPI         1>NCOOL-1+1
         JG          VIDEO1          < ERREUR...
         OR          MODEV
         STA         MODEV           < ET MISE A JOUR DE 'MODEV'...
         JMP         VIDEO2
XWOR%:   VAL         0
X100:    VAL         0
         IF          VIDEO,,X100,
         IF          ORDI-"S",XWOR%,,XWOR%
X101:    VAL         $-RACB1
VIDEOM:  EQU         RACB+X101
VIDEOC:  EQU         RACB+X101
         LXI         0               < RETOUR OK...
         RSR
XWOR%:   VAL         0
X100:    VAL         0
         PAGE
         IF          VIDEO,,,X100
<
<
<        E N V O I   D ' U N E   S Y N C H R O   E N   ' Z D C '  :
<
<
<
< ENVOI EN ZDC :
<
X101:    VAL         $-RACB1
VALZDC:  EQU         RACB+X101
VALZDD:  WORD        0               < MOT DE SYNCHRONISATION...
LONZDC:: VAL         $-VALZDD*2
X101:    VAL         $-RACB1
STOGS:   EQU         RACB+X101
         WORD        '000A           < ENVOI DE LA SYNCHRONISATION...
         WORD        VALZDC-ZERO*2
         WORD        LONZDC
         WORD        'C000
X101:    VAL         $-RACB1
GETGS:   EQU         RACB+X101
         WORD        '0008           < ACCES A L'ACQUIITEMENT ZDC.
         WORD        VALZDC-ZERO*2
         WORD        LONZDC
         WORD        'C001
<
< ACCES A LA ZDC :
<
X101:    VAL         $-RACB1
SENZDC:  EQU         RACB+X101
         PSR         W
         LRM         W
         WORD        VALZDC          < (W)=BASE DES DEMANDES 'ZDC'...
<
< ATTENTE DE LIBERTE DE LA ZDC :
<
         LAD         GETGS-VALZDC,W
STOZ2:   EQU         $
         SVC         0               < LECTURE DE 'VALZDC' :
         CPZ         VALZDC-VALZDC,W < ALORS ???
         JNE         STOZ2           < PAS LIBRE...
<
< ENVOI EN ZDC :
<
         DC          VALZDC-VALZDC,W < VALEUR DE SYNCHRONISATION,
         LAD         STOGS-VALZDC,W
         SVC         0               < ET ENVOI...
         PLR         W
         RSR
X100:    VAL         0
         PAGE
<
<
<        E X T R E M I T E   B   D U   S E G M E N T   C O U R A N T  :
<
<
<        FONCTION :
<                      FONCTION IDENTIQUE A LA PRIMITIVE 'PS' ,
<                    MAIS A LA FIN DU TRAVAIL , L'EXTREMITE DU
<                    SEGMENT COURANT DEVIENT LA NOUVELLE
<                    ORIGINE DE CELUI-CI.
<
<
X101:    VAL         $-RACB1
EXECB:   EQU         RACB+X101
         BSR         AEXECS          < EXECUTION DE LA PRIMITIVE 'S'.
<
< CHANGEMENT DE L'ORIGINE DU SEGMENT COURANT :
<
         PSR         A,B,X           < PAR PRUDENCE ...
         LAD         SEGORG
         LR          A,B             < B=@SEGORG=@RECEPTEUR.
         ADRI        SEGEXT-SEGORG,A < A=@SEGEXT=@EMETTEUR.
         LXI         DIM             < X=NBRE DE COORDONEES A DEPLACER.
         MOVE                        < CHANGEMENT D'ORIGINE.
         PLR         A,B,X
         RSR
         PAGE
<
<
<        P I L E   D E   T R A V A I L  :
<
<
X101:    VAL         $-RACB1
PILD:    EQU         RACB+X101
         DZS         64              < ENORME, POUR LA DICHOTOMIE...
<
<
<        P I L E   D E   R E C U R S I V I T E  :
<
<
X101:    VAL         $-RACB1
PIR:     EQU         RACB+X101
         WORD        0;0             < PREMIERE ENTREE : INITIALISEE
                                     < AVEC CD=CP=0.
         DZS         XX1             < ENTREES SUIVANTES.
<
<
<        T A I L L E   D E   L A   B R A N C H E  :
<
<
SBB:     VAL         $-RACB1*2
<
<
<        V A L I D A T I O N   I M P L A N T A T I O N  :
<
<
X101:    VAL         $-RACB1
X13:     EQU         RACB+X101
X10:     VAL         X13-ZERO
X10:     VAL         -'000*VIDEO+'1FC0+LIMAG-X10
         IF          X10,,,XWOR%
         IF          PAS ASSEZ DE MEMOIRE !!!
XWOR%:   VAL         0
         EOT         #SIP GEN PROCESSEUR#



Copyright © Jean-François Colonna, 2022-2022.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2022.