<        S I S   C M S 5   9
         PAGE
         PAGE
<
<
<        A R B R E   G E N E R A L
<        D U   S Y S T E M E  :
<
<
<        PRINCIPE :
<                      LE SYSTEME A A SA DISPOSITION NSTREE SECTEURS
<                    SUR DKF POUR Y ETENDRE UN ARBRE GENERAL
<                    DES NOMS DU SYSTEME ET DES UTILISATEURS.
<                      CET ARBRE EST GERE A L'AIDE DU LANGAGE
<                    INTERPRETATIF DECRIT PRECEDEMMENT, ET
<                    D'UN CERTAIN NBRE DE ROUTINES QUI VONT
<                    SUIVRE.
<                      LE FORMAT DES NUMEROS DE NOEUD EST
<                    LE SUIVANT :
<                            BIT0=K,
<                            BITS1-10=NUMERO DE SECTEUR (K A NSTREE-Z),
<                            BITS11-15=NUMERO DE NOEUD DANS LE
<                                      SECTEUR (K A 24).
<                    (VOIR A CE SUJET LA DEFINITION DE 'MKNE')
<                    A NOTER QUE L'@SECTEUR CORRESPONDANTE
<                    S'OBTIENT EN TRNASLATANT LE NUMERO
<                    DE SECTEUR AVEC LE NBRE DE SECTEURS
<                    UTILISES PAR L'ALLOCATEUR DISQUE ET LE SGF.
<
<
<        ALLOCATION DES NOEUDS :
<                      IL SE POSE LE PROBLEME DE L'ALLOCATION
<                    DES NOEUDS DANS CET ESPACE. ON DISPOSE A
<                    CET EFFET DES MOYENS SUIVANTS :
<
<                    1- LA TABLE TOSA1 : INDIQUE LES SECTEURS
<                    ENTIEREMENT LIBRES,
<
<                    2- LA TABLE TOSA2 INDIQUE LES SECTEURS
<                    ENTIEREMENT OCCUPES.
<
<                    3- EN TETE DE CHAQUE SECTEUR 3 MOTS SONT
<                    RESERVES :
<                    BITS0-24 (MOTS 0 & 1) : TABLE D'OCCUPATION
<                                                    DES 25 NOEUDS.
<                            MOT2=NBRE DE NOEUDS LIBRES DANS LE
<                                 SECTEUR (25 INITIALEMENT).
<
<
<        I M P O R T A N T  : LORSQU'UN SECTEUR EST DEMANDE, ALORS
<                    QU'IL EST COMPLETEMENT VIDE, ON L'INITIALISE
<                    EN MEMOIRE, ET ON NE CONSIDERE PAS CE FAIT
<                    COMME UNE ERREUR SYSTEME, A CAUSE DE
<                    L'INITIALISATION DU SYSTEME.
<
<
<        R A C I N E   D E   L ' A R B R E  :
<
<
ROOT::   VAL         K               < NUMERO DU SECTEUR CONTENANT
                                     < LA RACINE DE L'ARBRE.
<
<
<        NOTA :
<                      LA RACINE EST RECHARGEE A PRIORI
<                    A CHAQUE SORTIE DU HANDLER DE
<                    GESTION DE L'ARBRE.
<                    (CE PRE-CHARGEMENT EST FAIT EN
<                    PARALLELE, C'EST-A-DIRE QU'IL N'Y
<                    A PAS D'ATTENTE DE FIN D'E/S
<                    IMMEDIATE... )
<
<
         PAGE
<
<
<        F O R M A T   D E S   N O E U D S  :
<
<
<        FORMAT :
<                      LE FORMAT DES NOEUDS DE L'ARBRE
<                    DU SYSTEME VA ETRE DONNE PAR DES
<                    'VAL' ET NON PAR UNE 'DSEC' ;
<                    CHAQUE SYMBOLE AINSI DEFINI CORRES-
<                    POND A UN MOT DU NOEUD.
<
<
XNESER:: MOT         O               < CONTIENT LE CHAINAGE "SERIE",
XNEPAR:: MOT         XNESER+D        < CONTIENT LE CHAINAGE "PARALLELE",
XNEBAC:: MOT         XNEPAR+D        < CONTIENT LE CHAINAGE "ARRIERE",
XNEV0::  MOT         XNEBAC+D        < LONGUEUR, ET PREMIER OCTET(VALEUR),
XNEV1::  MOT         XNEV0+D         < SUITE DE LA VALEUR...
LOXNE::  VAL         XNEV1+P-XNESER  < LONGUEUR D'UN NOEUD.
<
<
<        F O R M A T   D ' U N   S E C T E U R  :
<
<
<        (MEME REMARQUE QUE CI-DESSUS...)
<
<
         NTRN
X26::    VAL         YY7/LOXNE       < X26=NOMBRE DE NOEUDS QUE PEUT CONTENIR
         TRN
                                     < UN BUFFER...
         NTRN
XLXSAN:: VAL         X26+NBITMO-E/NBITMO
         TRN
                                     < NOMBRE DE MOTS NECESSAIRES A IMPLANTER
                                     < UNE TABLE D'ALLOCATION DES NOEUDS EN BITS
XSAN::   MOT         O               < DEBUT DE LA TABLE D'ALLOCATION DU SECTEUR
                                     < COURANT,
XSNN::   MOT         XSAN+XLXSAN     < CONTIENT LE NOMBRE DE NOEUDS LIBRES
                                     < DANS LE SECTEUR COURANT ('X26' A
                                     < L'INITIALISATION).
XSLN::   MOT         XSNN+D          < PREMIER MOT DISPONIBLE POUR LES NOEUDS...
         IF          X26*LOXNE+XSLN-XSAN-YY7,,XEIF%,
         IF          ATTENTION : IL Y A TROP DE NOEUDS PAR SECTEUR !!!
XEIF%:   VAL         ENDIF
<
<
<        F O R M A T   D E S   A D R E S S E S   D E   N O E U D S  :
<
<
<        FORMAT :
<                      UN NUMERO DE NOEUD EST OBTENU
<                    PAR CONCATENATION D'UN NUMERO DE
<                    SECTEUR RELATIF A LA RACINE DE
<                    L'ARBRE, ET D'UN NUMERO DE NOEUD
<                    DANS LE SECTEUR ; CE DERNIER NUMERO
<                    SERA DEFINI A L'AIDE DU MASQUE 'MKNE'.
<
<
XWOR%2:  VAL         -S              < POUR FAIRE UN DECALAGE A DROITE.
XWOR%1:  VAL         X26             < NOMBRE DE NOEUDS PAR SECTEUR.
         DO          NBITMO
XWOR%1:  VAL         XWOR%1>XWOR%2=FCPUSH
XWOR%1:  VAL         I               < INITIALISATION DU COMPTAGE...
         DO          NBITMO
XWOR%1:  VAL         K=FCPULL=FCSIGN+XWOR%1
MKNE::   VAL         BIT>XWOR%1-N    < 'MKNE' EST LE PLUS PETIT MASQUE
                                     < CONTENANT 'X26'.
<
<
<        I N I T I A L I S A T I O N   D E   L A   T A B L E
<        D ' A L L O C A T I O N   D E S   N O E U D S
<                    D ' U N   S E C T E U R  :
<
<
         NTRN
XWOR%1:  VAL         X26/NBITMO(K=FCREST
         TRN
XINN1::  VAL         COSBT?XWOR%1-B=FMASK(K=FCINST-N)MFFFF
                                     < POUR INITIALISER LE MOT INCOMPLET,
XINN0::  VAL         MMOT            < POUR INITIALISER LE MOT COMPLET.
         PAGE
<
<
<        M E M O I R E   N E C E S S A I R E
<        A   L A   G E S T I O N   D E
<        L ' A R B R E   D U   S Y S T E M E  :
<
<
XWORK7:  VAL         NSTREE          < NOMBRE DE SECTEURS DE L'ARBRE.
X25::    VAL         NSTREE/NBITMO   < NOMBRE DE MOTS NECESSAIRES POUR
                                     < NSTREE SECTEURS A RAISON D'UN
                                     < BIT PAR SECTEUR.
<
<
<        T A B L E S   D ' O C C U P A T I O N   S E C T E U R S  :
<
<
         CALL        #SISP CMS5 DOL1#
         WORD        XWORK7          < PAR SYMETRIE AVEC 'TOSA2'.
TOSA1:   EQU         $
<
<
<        FORMAT :
<                    UN BIT PAR SECTEUR, TEL QUE :
<                    BIT(I)=1 : SECTEUR(I) ENTIEREMENT LIBRE,
<                           0 : SECTEUR(I) (PARTIELLEMENT) OCCUPE.
<
<
         CALL        #SISP CMS5 NBIT1#
         WORD        XWORK7          < POUR LES VALIDATIONS DE 'SOBT'...
TOSA2:   EQU         $
<
<
<        FORMAT :
<                    UN BIT PAR SECTEUR TEL QUE :
<                    BIT(I)=1 : SECTEUR(I) (PARTIELLEMENT) LIBRE,
<                          0 : SECTEUR(I) ENTIEREMENT OCCUPE.
<
<
         CALL        #SISP CMS5 NBIT1#
         PAGE
<
<
<        Z O N E   P E R M E T T A N T   U N   R E S T A R T
<        A   P A R T I R   D U   D I S Q U E   S A N S
<        P E R D R E   L ' E S P A C E   D I S Q U E  :
<
<
<        FONCTION :
<                      CETTE ZONE ACCESSIBLE PAR 'NSPSAV'
<                    CONTIENT UNE LISTE DES OBJETS
<                    VITAUX QUANT A L'OCCUPATION DE
<                    L'ESPACE DISQUE, ET A L'ARBRE
<                    GENERAL DU SYSTEME, MAIS :
<
<
<        A T T E N T I O N  :
<                      LES FICHIERS N'Y SONT PAS
<                    INCLUS ; AINSI LORS D'UNE SAUVEGARDE DISQUE
<                    IL FAUDRA FERMER TOUS LES FICHIERS !!!
<                    (AU PREALABLE)
<                      MALGRE TOUT, ON MEMORISE LA LISTE DES
<                    DESCRIPTEURS D'ENREGISTREMENT CE QUI
<                    PERMET A LA REINITIALISATION DE SAVOIR
<                    S'IL Y AVAIT DES ENREGISTREMENTS OUVERTS
<                    ET SI OUI, A QUELS FICHIERS ILS APPAR-
<                    TENAIENT (NOM INTERNE MEMORISE) ; ON
<                    PEUT DONC ALLER "BRICOLER" MANUELLEMENT...
<
<
<        NOTA :
<                      CETTE LISTE SERT AUSSI DANS 'TH0'
<                    A VALIDER LES ACCES DIRECTS MEMOIRE
<                    PAR 'ACTD' POUR LES UTILISATEURS D'<ACN>
<                    DIFFERENT DE ":SYS" ; AINSI, TOUTE
<                    ZONE MEMOIRE COPIABLE, EST ACCESSIBLE
<                    SANS EXCEPTION...
<
<
<        FORMAT DE LA LISTE :
<                      CHQUE ENTREE EST UN DOUBLE-MOT :
<                    (@INFORMATION,LONGUEUR(INFORMATION)),
<                      LA FIN DE LISTE EST INDIQUEE PAR (K,0).
XCOPAD:  VAL         XCOPAD          < MOT CONTENANT L'ADRESSE,
XCOPLO:  VAL         XCOPLO          < MOT CONTENANT LA LONGUEUR,
                                     < A T T E N T I O N  : CETTE LONGUEUR
                                     < PEUT ETRE NEGATIVE, AUQUEL CAS CELA
                                     < SIGNIFIE QUE CETTE INFORMATION NE DOIT
                                     < PAS ETRE VALIDEE LORS DU RESTART A
                                     < L'AIDE DES 2 COPIES EN BASCULE ; C'EST
                                     < PAR EXEMPLE LE CAS DE LA DATE...
XLCOPY:  VAL         XLCOPY          < LONGUEUR D'UNE ENTREE...
                                     < (VARIABLES DEFINIES AVEC LA
                                     < PREPARATION DE LA COPY...)
<
<
LZSAVE:  EQU         $
XWOR%1:  VAL         K               < INITIALISATION DU COMPTAGE DES MOTS
                                     < SAUVEGARDES.
<*******************************************************************************
         WORD        NUGBC;D         < NUMERO DU GRAND BLOC COURANT.
XWOR%1:  VAL         '0000000@@@@+XWOR%1
<*******************************************************************************
<*******************************************************************************
         WORD        TOGB+IJIJDX;YY7 < OCCUPATION DU GRAND BLOC COURANT.
XWOR%1:  VAL         '0000000@@@@+XWOR%1
<*******************************************************************************
<*******************************************************************************
         WORD        NSL;D           < NBRE TOTAL DE SECTEURS LIBRES.
XWOR%1:  VAL         '0000000@@@@+XWOR%1
<*******************************************************************************
<*******************************************************************************
         WORD        NSLGB+IJIJDX;NSTO < NBRE DE SECTEURS LIBRES DANS
XWOR%1:  VAL         '0000000@@@@+XWOR%1
                                     < CHAQUE GRANDS BLOCS.
<*******************************************************************************
<*******************************************************************************
         WORD        TOSA1;X25       < LIBERTE DES SECTEURS DE L'ARBRE.
XWOR%1:  VAL         '0000000@@@@+XWOR%1
<*******************************************************************************
<*******************************************************************************
         WORD        TOSA2;X25       < OCCUPATION SECTEURS DE L'ARBRE.
XWOR%1:  VAL         '0000000@@@@+XWOR%1
<*******************************************************************************
<*******************************************************************************
         WORD        TEDF+IJIJDX;LTEDF < TABLE D'ETAT DES FICHIERS.
XWOR%1:  VAL         '0000000@@@@+XWOR%1
<*******************************************************************************
<*******************************************************************************
         WORD        TADF;NMFILE/NBITMO < LISTE DES FICHIERS EN DELETE.
XWOR%1:  VAL         '0000000@@@@+XWOR%1
<*******************************************************************************
<*******************************************************************************
         WORD        STOCS+IJIJDX;MSTOCS < PILE DES SECTEURS SGF EN RESERVE.
XWOR%1:  VAL         '0000000@@@@+XWOR%1
<*******************************************************************************
<*******************************************************************************
         WORD        NSTOCS;D        < NBRE DE SECTEURS SGF EN RESERVE.
XWOR%1:  VAL         '0000000@@@@+XWOR%1
<*******************************************************************************
<*******************************************************************************
         WORD        TDE;UDE*NMDE    < DESCRIPTEURS D'ENREGISTREMENT 'SGF'.
XWOR%1:  VAL         '0000000@@@@+XWOR%1
<*******************************************************************************
<*******************************************************************************
         WORD        KQSHS;D         < NOMBRE DE Q-SECTEURS HORS-SERVICE.
XWOR%1:  VAL         '0000000@@@@+XWOR%1
<*******************************************************************************
XXTIME:: VAL         XWOR%1          < INDEX DE LA ZONE DE COPY DE LA DATE
                                     < DANS LE BUFFER 'BCOPY'.
<*******************************************************************************
         WORD        LTIME;-LOTIME   < HEURE/DATE, A NE PAS VALIDER !!!
XWOR%7:  VAL         '0000000@@@@
<*******************************************************************************
XWOR%7:  VAL         -XWOR%7         < CAR L'ENTREE PRECEDENTE EST NEGATIVE...
XWOR%1:  VAL         XWOR%7+XWOR%1
<*******************************************************************************
         WORD        PQSHS;XQSHS     < PILE DES Q-SECTEURS "HS"...
XWOR%1:  VAL         '0000000@@@@+XWOR%1
<*******************************************************************************
<*******************************************************************************
         WORD        ASTREE;D        < NOMBRE DE NOEUDS LIBRES DANS L'ARBRE.
XWOR%1:  VAL         '0000000@@@@+XWOR%1
<*******************************************************************************
         NTRN
XWOR%7:  VAL         NPVDKF+NOCMO-E/NOCMO
         TRN
<*******************************************************************************
         WORD        TVDKF+ZERBVP;XWOR%7 < VIRTUALISATION PARTIELLE DE 'DKF'.
XWOR%1:  VAL         '0000000@@@@+XWOR%1
<*******************************************************************************
         NTRN
XWOR%7:  VAL         GAXCYL+NOCMO-E/NOCMO
         TRN
<*******************************************************************************
         WORD        TVDKM;XWOR%7    < TABLE DE VIRTUALISATION DE 'DKM'.
XWOR%1:  VAL         '0000000@@@@+XWOR%1
<*******************************************************************************
<*******************************************************************************
         WORD        TVDKU;XWOR%7    < TABLE DE VIRTUALISATION DE 'DKU'.
XWOR%1:  VAL         '0000000@@@@+XWOR%1
<*******************************************************************************
<*******************************************************************************
         WORD        MCOLOR;XXCULM   < MEMOIRE DES COULEURS DE 'MEMTV'.
XWOR%1:  VAL         '0000000@@@@+XWOR%1
<*******************************************************************************
LOSDKM:: VAL         D               < LONGUEUR DE LA LISTE DES GROUPES DE
                                     < CYLINDRES APPROPRIES SUR 'DKM'.
<*******************************************************************************
         WORD        LSDKM;LOSDKM    < LISTE DES APPROPRIATIONS SUR 'DKM'.
XWOR%1:  VAL         '0000000@@@@+XWOR%1
<*******************************************************************************
         NTRN
XWOR%7:  VAL         NBGB+NOCMO-E/NOCMO
         TRN
<*******************************************************************************
         WORD        TLRUGB;XWOR%7   < TABLE DES 'GB' LES PLUS UTILISES...
XWOR%1:  VAL         '0000000@@@@+XWOR%1
<*******************************************************************************
<
< ICI, ZONE D'INSERTION DES NOUVEAUTES...
<
XWORK1:  VAL         XWOR%1          < LONGUEUR DU BUFFER DE COPY.
         WORD        NIL;NIL         < DOUBLET DE FIN DE LISTE.
XWOR%8:  VAL         2               < NOMBRE D'ENTREES DE PATCH,
         DZS         XLCOPY*XWOR%8   < ZONE PATCH DE LA LISTE.
         NTRN
         IF          $-LZSAVE/XLCOPY(K=FCREST,,XEIF%,
         IF          ATTENTION : 'XLCOPY' EST MAUVAISE, OU BIEN
         IF          LE CONTENU DE 'LZSAVE' EST MAL FORMATTE !!!
XEIF%:   VAL         ENDIF
         TRN
<
<
<        B U F F E R   D E   S A U V E G A R D E  :
<
<
         CALL        #SISP CMS5 DOL2#
XWOR%1:  VAL         $-ZERO          < SAUVEGARDE DU "$"...
         WORD        -1              < LE MOT PRECEDANT LE BUFFER DE COPY,
                                     < VAUT -1 TANT QUE LE 'SYSINI' N'EST
                                     < PAS TERMINE, ENSUITE IL VAUT 0 ; IL
                                     < S'AGIT DONC D'UN VERROU D'EXCLUSION
                                     < DU 'SYSINI' SUR LE PROCESSEUR MAITRE,
                                     < ET DU PROCESSEUR ESCLAVE...
BCOPY:   EQU         $               < ADRESSE MOT DU BUFFER DE COPY.
TCOPY:   EQU         BCOPY           < A CAUSE DE L'ASSEMBLEUR...
XWOR%2:  VAL         BCOPY-ZERO
         IF          XWOR%1-XWOR%2-SYNCOP,,XEIF%,
         IF          ATTENTION 'SYNCOP' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         DZS         XWORK1          < BUFFER.
CKCOPY:  WORD        K               < CHECKSUM DE LA COPY...
         IF          $-CKCOPY-D,,XEIF%,
         IF          ATTENTION : LE CHECKSUM EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         IF          CKCOPY-BCOPY-XWORK1,,XEIF%,
         IF          ATTENTION : LE CHECKSUM N'EST PAS AU BOUT DU BUFFER !!!
XEIF%:   VAL         ENDIF
XWORK1:  VAL         $-BCOPY         < POUR PRENDRE EN COMPTE LE CHECKSUM...
LCOPY1:  EQU         ZERO+XWORK1     < LONGUEUR EN MOTS DU BUFFER DE COPY.
XWORK1:  VAL         XWORK1*NOCMO
LCOPY2:  EQU         ZERO+XWORK1     < LONGUEUR EN OCTETS DU BUFFER DE COPY.
MCOPY2:  EQU         LCOPY2          < A CAUSE DE L'ASSEMBLEUR...
         CALL        #SISP CMS5 DOL1#
         NTRN
XWOR%1:  VAL         LCOPY1-ZERO+YY7-E/YY7
         TRN
                                     < NOMBRE DE SECTEURS NECESSAIRES A CHAQUE
                                     < ZONE DE 'COPY'...
         IF          XWOR%1-LCOPY3,XEIF%,XEIF%,
         IF          DANGER : LA CARTE D'IMPLANTATION DU DISQUE
         IF          'FHD' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
<
<
<        A D R E S S E S   A   C O N N A I T R E  :
<
<
BXTIME:  EQU         BCOPY+XXTIME    < HEURE/DATE, AFIN DE SAVOIR FACILEMENT
                                     < QUELLE EST DES 2 COPIES EN BASCULE LA
                                     < PLUS ANCIENNE LORS DU RESTART...
         PAGE
<
<
<        L I S T E   D E S   E S P A C E S
<        R E C U P E R A B L E S   D A N S
<        C M S 4   ( E V E N T U E L L E M E N T )
<
<
<        FONCTION :
<                      CETTE LISTE ACCESSIBLE PAR 'NSPFRE',
<                    DONNE LES ESPACES RECUPERABLES DANS CMS4
<                    EVENTUELLEMENT (ET EN PARTICULIER LE
<                    SYSTEME DE GESTION DE LIGNE FS7/TS7).
<
<
<        FORMAT : C'EST UNE LISTE DE MOTS DONT CHACUN
<        A LE FORMAT SUIVANT :
<                    BIT0=K : DONNE L'ADRESSE D'UN MOT
<                             CONTENANT LUI-MEME UNE ADRESSE
<                             A REMPLACER PAR 'DCTTSI' LORS
<                             DE LA RECUPERATION.
<                    BIT0=1 : ON TROUVE ALORS 2 MOTS
<                             CONSECUTIF1 TELS QUE BIT0=1,
<                             ET TELS QUE :
<                                    LE 1ER DONNE LE 1ER MOT
<                                    LIBRE RECUPERABLE,
<                                    ET LE 2EME, LE NOMBRE
<                                    DE MOTS RECUPERES.
<
<
LZFREE:  EQU         $
< FIN DE LISTE :
<
         WORD        NIL             < FIN DE LISTE.
LPFREE:: VAL         2               < LONGUEUR ARBITRAIRE DE LA ZONE DE PATCH.
         DZS         LPFREE          < ZONE PATCH DE LZFREE.
         PAGE
<
<
<        D C T   D E   G E S T I O N
<        D E S   A R B O R E S C E N C E S  :
<
<
DCTTRI:  EQU         $
PSTTRI:  WORD        K;K;K;K;COM+DEPCS;DCTTRI;NIL;PILTRI;HANDLR;SMST;SO;SE
       #@ASCI        " TRI"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR
         WORD        FILTRS
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0
         DZS         LSEM
         WORD        NIL             < TETE.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT.
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLRES          < HANDLER DE GESTION DES RESEAUX.
         WORD        NIL
         WORD        K;K             < ETAT : ETAT1=0.
         WORD        XBITS0          < BITSEM.
         WORD        XXNTRY;TRYVID   < NTRIES & FRTRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXDCTF          < 'DCT' NON CONNECTABLE...
         WORD        NOSOSE          < DCTFUP ("ALTITUDES" DES FONCTIONS).
                                     < 'HDLTRI' IGNORE LE NUMERO DE PAGE DE 32K
                                     < QUI LUI EST TRANSMIS, ET PREND SYSTEMA-
                                     < TIQUEMENT LA PAGE 0...
<
<
<        Z O N E   V A R I A B L E  :
<
<
VARTRI:  EQU         $
         IF          VARTRI-DCTTRI-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
<
< DONNEES DE L'INTERPRETATION :
<
         WORD        LTRI,X
ALTRI::  VAL         $-D-VARTRI      < RELAI VERS LE CODE DU LANGAGE
                                     < INTERPRETATIF DE GESTION
                                     < DES RESEAUX.
         WORD        YMOVT,X
MOVT::   VAL         $-D-VARTRI      < RELAI DES ROUTINES DE MOVE.
YMOVT:   EQU         $
         WORD        MOV0;MOV1;MOV2;MOV3
         WORD        ROOT            < RACINE DE L'ARBRE.
NC::     VAL         $-D-VARTRI      < NUMERO DU NOEUD COURANT.
         WORD        NILK
NT::     VAL         $-D-VARTRI      < NUMERO DU NOEUD DE TRAVAIL.
         WORD        NILK
CT::     VAL         $-D-VARTRI      < CONDITION D'EXECUTION DU
                                     < LANGAGE INTERPRETATIF (K SI OK).
         WORD        NILK
KWTRI::  VAL         $-D-VARTRI      < COMPTAGE DES MODIFS DANS LES N
                                     < NOEUDS, PERMET D'OPTIMISER
                                     < D'EVENTUELLES E/S DISQUES.
         WORD        INT,X
AINT::   VAL         $-D-VARTRI      < TABLE DES ADRESSES DES ROUTINES
                                     < D'INTERPRETATION.
         WORD        NILK
NUM::    VAL         $-D-VARTRI      < NUMERO D'1N NOEUD.
         WORD        YVALUE,X
VALUE::  VAL         $-D-VARTRI      < ZONE DE MANOEUVRE DES VALEURS
                                     < DES NOEUDS.
YVALUE:  EQU         $
XXNVAL:: VAL         2               < NOMBRE DE VALEURS STOCKEES.
         DZS         XNEV1-XNEV0+Z*XXNVAL
VALUE0:: VAL         YVALUE-VARTRI+XNEV0-XNEV0
VALUE1:: VAL         YVALUE-VARTRI+XNEV1-XNEV0
VALUE2:: VAL         VALUE0+XNEV1-XNEV0+Z
VALUE3:: VAL         VALUE1+XNEV1-XNEV0+Z
STRI::   VAL         $-VARTRI        < PILE DESTINE A L'EXECUTION
                                     < DES INSTRUCTIONS STACK/UNSTACK
                                     < DU LANGAGE INTERPRETATIF.
XWOR%1:  VAL         8               < VALEUR ARBITRAIRE...
         BYTE        XWOR%1;W
         DZS         XWOR%1          < PILE DE 6 MOTS : LE 1ER ET LE
                                     < DERNIER SONT INUTILISES ET
                                     < INUTILISABLES (CF. LA GESTION
                                     < DU POINTEUR DE PILE ET DU CARY).
<
< BLOC DE DEMANDE DE TRAVAIL :
<
DEMTRI:: VAL         $-VARTRI        < BLOC DE 8 MOTS RESERVES POUR
                                     < LES DEMANDES DE SERVICES.
         BYTE        NSPDKA;XDPRIO?XDSYM?XTYPAD
                                     < DEMANDE D'ACCES A 'DKA' EN ADRESSE-MOTS,
         WORD        NILK            < OPDEM.
         WORD        BSTCXX-ZERO     < ADRESSE-MOTS DU BUFFER-SECTEUR,
         WORD        YY8             < POUR UN SECTEUR...
         WORD        NILS            < ASDEM.
         WORD        NILK            < ETADEM.
         WORD        XXSEM0+I        < WEIO EST INITIALISE A 1 AFIN
                                     < QUE LORS DE LA 1ERE ENTREE
                                     < DANS LE HANDLER DE GESTION DE
                                     < L'ARBRE ON NE SE BLOQUE PAS
                                     < SUR L'ATTENTE DE PREC-CHARGEMENT.
         WORD        NIL             < NEXT.
<
< SOUS-PROGRAMMES DE
< GESTION DE L'ARBRE :
<
         WORD        ANTRI           < ACCES A UN NOEUD.
AN::     VAL         $-D-VARTRI      < ROUTINE SPECIFIQUE D'ACCES NOEUD.
         WORD        CNTRI           < CREATION D'UN NOEUD.
CN::     VAL         $-D-VARTRI      < ROUTINE SPECIFIQUE DE CREATION
                                     < NOEUD.
         WORD        DNTRI           < DELETE UN NOEUD.
DN::     VAL         $-D-VARTRI      < ROUTINE SPECIFIQUE DE DELETE NOEUD
         WORD        GETCAR          < ACCES A UNE VALEUR A PARTIR DU
                                     < CHEMIN.
GCH::    VAL         $-D-VARTRI      < ROUTINE SPECIFIQUE DE RECUPERATION
                                     < DU CHEMIN ARGUMENT.
         WORD        ABTRI
AINIT::  VAL         $-D-VARTRI      < ROUTINE D'INITIALISATION
                                     < SPECIFIQUE D'UN TRAVAIL SUR
                                     < L'ARBRE.
         WORD        RBTRI
ATERM::  VAL         $-D-VARTRI      < ROUTINE SPECIFIQUE A APPELER
                                     < AVANT DE SORTIR DU LANGAGE
                                     < INTERPRETATIF.
<
< DIFFERENTES VARIABLES :
<
         WORD        NILX
RCHE::   VAL         $-D-VARTRI      < RELAI INDIRECT INDEXE VERS
                                     < LE CHEMIN ARGUMENT.
         WORD        NILK
LCHE::   VAL         $-D-VARTRI      < LONGUEUR EN OCTETS DU CHEMIN
                                     < ARGUMENT.
         WORD        NILK
SAVREL:: VAL         $-D-VARTRI      < SAUVERGARDE DE LA NATURE
                                     < DE LA DERNIERE RELATION
                                     < B-1 (=S/P) TRAITEE PAR UN
                                     < CCHAIN,B.
         WORD        NILK
SAVDEM:: VAL         $-D-VARTRI      < CONTIENT L'ASDEM DE LA DEMANDE
                                     < ARGUMENT.
         WORD        NILK
NEXTSP:: VAL         $-D-VARTRI      < VALEUR DU NOEUD SUIVANT EN
                                     < SERIE OU EN PARALLELE.
         WORD        NILK
VALLON:: VAL         $-D-VARTRI      < INDICATEUR LONGUEUR VALEUR
                                     < =1  LA VALEUR DU NOEUD A 0/1 OCTET
                                     < =0  LA VALEUR DU NOEUD A 2 OCTETS OU PLUS
                                     < OU PLUS...
         WORD        TFREK,X
ATFREK:: VAL         $-D-VARTRI      < RELAI D'ACCES A LA TABLE DONNANT LE RANG
                                     < D'UN CARACTERE DONNE (INDEX DE LA TABLE)
                                     < DANS L'ALPHABET VIRTUEL UTILISE PAR
                                     < 'CTESTV' (CONTENU DU MOT INDEXE).
<
<
<        Z O N E   V A R I A B L E   D E   L A   Z O N E   V A R I A B L E  :
<                                    ( ? ? ! ! ! ? ? )
<
<
< RELAIS DE SOUS-PROGRAMMES :
<
         WORD        SP1
AASP1::  VAL         $-D-VARTRI      < CALCUL @SECTEUR D'UN NOEUD.
         WORD        SP2
ASP2::   VAL         $-D-VARTRI      < REECRITURE EVENTUELLE DU STC.
         WORD        SP3
ASP3::   VAL         $-D-VARTRI      < INTIALISATION SECTEUR EN MEMOIRE.
         WORD        SP4
ASP4::   VAL         $-D-VARTRI      < LECTURE SECTEUR.
         WORD        SP5
ASP5::   VAL         $-D-VARTRI      < TEST ENTIERE LIBERTE SECTEUR.
         WORD        SP30
ASP30::  VAL         $-D-VARTRI      < SOUS-PROGRAMME DE MISE A JOUR DE LA LISTE
                                     < DES SECTEURS DE L'ARBRE POSSEDANT UN
                                     < NOMBRE DE NOEUDS LIBRES NON NUL EGAL AU
                                     < RANG (X) DANS LA LISTE.
         WORD        SP31
ASP31::  VAL         $-D-VARTRI      < SOUS-PROGRAMME METTANT DANS 'A' ET 'W'
                                     < L'ADRESSE DU BUFFER DU SECTEUR COURANT.
         WORD        SP32
ASP32::  VAL         $-D-VARTRI      < SOUS-PROGRAMME DE RECHERCHE DU SECTEUR
                                     < COURANT DANS L'ENTREE COURANTE DE LA
                                     < LISTE 'LMAXSN'.
<
< RELAIS DE TABLES ET DE LISTES :
<
         WORD        BSTCXX          < ADRESSE-MOT DU BUFFER-SECTEUR
ABSTC::  VAL         $-D-VARTRI      < ADRESSE DU BUFFER DU SECTEUR COURANT.
         WORD        Q8000
         IF          Q8000-K,XEIF%,,
         IF          ATTENTION : LA VALEUR INITIALE DE 'STC' EST
         IF          INCOMPATIBLE AVEC LES TESTS SUR 'STC' !!!
XEIF%:   VAL         ENDIF
STC::    VAL         $-D-VARTRI      < ADRESSE DU SECTEUR COURANT.
         WORD        LMXSN1-IJIJDX,X
ALMXS1:: VAL         $-D-VARTRI      < 1ER RELAI D'ACCES A LA LISTE 'LMAXSN',
         WORD        LMXSN2-IJIJDX,X
ALMXS2:: VAL         $-D-VARTRI      < 2EME RELAI D'ACCES A LA LISTE 'LMAXSN'.
ASTREE:  WORD        NSTREE*X26
BSTREE:  EQU         ASTREE          < A CAUSE DE REFERENCES EN AVANT...
NTONSL:: VAL         $-D-VARTRI      < NOMBRE DE NOEUDS LIBRES DANS L'ARBRE.
         WORD        TOSA1-IJIJDX,X
ATOSA1:: VAL         $-D-VARTRI      < RELAI VERS TOSA1-1.
         WORD        TOSA2-IJIJDX,X
ATOSA2:: VAL         $-D-VARTRI      < RELAI VERS TOSA2-1.
         WORD        X25+IJIJDX      < (+IJIJDX A CAUSE DU PREMIER JDX QUE
                                     < L'ON FAIT SUR L'INDEX DE TOSA2).
XTOSA2:: VAL         $-D-VARTRI      < INDEX INITIAL COURANT DE LA
                                     < TABLE TOSA2 ; UN INDEX INITIAL
                                     < DYNAMIQUE PRESENTE LES AVANTAGES
                                     < SUIVANTS :
                                     < 1- UNIFORMISER L'UTILISATION
                                     < DES SECTEURS DE L'ARBRE ;
                                     < 2- ET SURTOUT NE PAS ALLOUER
                                     < A LA SUITE 2 SECTEURS CONSECU-
                                     < TIFS : AINSI ON PEUT ESPERER
                                     < MINIMISER LES TEMPS D'ATTENTE
                                     < ENTRE E/S SUR 2 SECTEURS CHAINES
                                     < S'ILS NE SONT PAS CONSECUTIFS ;
                                     < EN GENERAL ON GAGNERA UN TOUR
                                     < DE DISQUE...
<
< CONSTANTES DIVERSES :
<
         NTRN
XWOR%7:  VAL         X26/XXXMOY/XXXMOY/XXXMOY
                                     < EN FAIT VALEUR ASSEZ ARBITRAIRE...
         TRN
         IF          XWOR%7-K,,XEIF%,XEIF%
         IF          ATTENTION : LE PLANCHER NE PEUT ETRE NEGATIF !!!
XEIF%:   VAL         ENDIF
         WORD        XWOR%7
MINX26:: VAL         $-D-VARTRI      < SEUIL-PLANCHER DE NON INSERTION D'UN
                                     < SECTEUR DE L'ARBRE DANS 'LMAXSN'...
         WORD        XXTRI
TAS::    VAL         $-D-VARTRI      < DEPLACEMENT DE CONVERSION D'UN
                                     < NUMERO DE SECTEUR EN UNE @SECTEUR
<
< LISTE DES SECTEURS CONTENANT
< UN NOMBRE DE NOEUDS LIBRES NON
< NUL EGAL AU RANG DANS LA LISTE :
< (L'ELEMENT DE RANG (X) DONNE
< L'ADRESSE DES 2 DERNIERS SECTEURS
< REFERENCES POSSEDANT (X) NOEUDS
< LIBRES)
<
LMAXSN:  EQU         $
LMXSN1:  EQU         $               < PREMIERE PARTIE (LISTE DES MOT0) :
         DO          X26
         WORD        Q8000           < LISTE VIDE INITIALEMENT...
LMXSN2:  EQU         $               < DEUXIEME PARTIE (LISTE DES MOT1) :
         DO          X26
         WORD        Q8000           < LISTE VIDE INITIALEMENT...
XWOR%1:  VAL         $-LMAXSN        < LONGUEUR DE LA LISTE...
         IF          X26*DFLOT-XWOR%1,,XEIF%,
         IF          ATTENTION : LA LISTE 'LMAXSN' EST INACCESSIBLE
         IF          A L'AIDE DES INSTRUCTIONS 'FLD'/'FST' !!!
         IF          MAIS CELA N'A PLUS D'IMPORTANCE CAR ON
         IF          NE LES UTILISE PLUS CAR IL EST IMPOSSIBLE
         IF          D'UTILISER 'X' COMME UN INDEX DOUBLE-MOT
         IF          AVEC 'FST'/'FLD' ; ON LES DECOMPOSE DONC
         IF          EN DES 'STA''STB'/'LA''LB'...
XEIF%:   VAL         ENDIF
<
<
<        P I L E   D E   L ' A R B R E  :
<
<
XWPILE:  VAL         LPILEH+20
PILTRI:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        T A B L E   D E S   F R E Q U E N C E S   D E S   C A R A C T E R E S :
<
<
<        FONCTION :
<                      IL EST EVIDENT QUE TOUS LES
<                    CARACTERES NE SONT PAS UTILISES
<                    AVEC LA MEME FREQUENCE ; OR, SI
<                    L'ON UTILISE L'ORDRE ALPHABETIQUE
<                    CECI PEUT ETRE CATASTROPHIQUE, EN
<                    PARTICULIER SUR LES 2 OU 3 PRE-
<                    MIERS CARACTERES D'UN MOT : PAR
<                    EXEMPLE, LE "S" EST FREQUEMMENT
<                    UTILISE COMME PREMIER CARACTERE
<                    DES NOMS DE FICHIERS, OR, IL EST
<                    A LA FIN DE L'ALPHABET...
<                      CETTE TABLE, INDEXEE PAR LE
<                    CODE ASCI DES CARACTERES, DONNE
<                    LE RANG REEL DU CARACTERE POUR
<                    LES TESTS DE 'CTESTV'.
<
<
TFREK:   EQU         $
TFREK1:  EQU         TFREK           < A CAUSE DE L'ASSEMBLEUR...
<
< INITIALISATIONS :
<
XWOR%1:  VAL         K               < 'XWOR%1' EST UTILISE COMME ORDRE DU
                                     < CARACTERE COURANT DANS L'ALPHABET VIR-
                                     < TUEL UTILISE PAR LES TESTS DE 'CTESTV'.
<
< CARACTERE 'EON' :
<
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KEOT      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         IF          XWOR%1-K-I,,XEIF%,
         IF          ATTENTION : 'EOT' DOIT ETRE LE PREMIER CODE DE LA
         IF          LISTE DE L'ALPHABET VIRTUEL, ET CECI A CAUSE DE
         IF          CELUI QUI EST INSERE EN TETE DE L'ARBRE, AVANT
         IF          TOUT <ACN> AFIN D'INITIALISER L'ARBRE !!!
XEIF%:   VAL         ENDIF
         IF          KEOT-KEON,,XEIF%,
         IF          ATTENTION : C'EST EN FAIT 'KEON' QU'IL FAUT
         IF          METTRE EN TETE DE L'ALPHABET VIRTUEL !!!
XEIF%:   VAL         ENDIF
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
<
< CARACTERES DE CONTROLE :
< (A L'EXCEPTION DE 'EOT')
<
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KNUL      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KSOH      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KSTX      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KETX      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KENQ      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KACK      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KBEL      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KBS       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KHT       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KLF       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KVT       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KFF       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KCR       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KSO       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KSI       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KDLE      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KDC1      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KDC2      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KDC3      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KDC4      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KNAK      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KSYN      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KETB      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KCAN      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KEM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KSUB      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KESC      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KFS       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KGS       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KRS       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KUS       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
<
< CARACTERES SPECIAUX :
<
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KSP       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KPE       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KDQ       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KDIESE    < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KDOLAR    < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KPC       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KET       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KQUOTE    < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KPG       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KPD       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KSTAR     < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KPLUS     < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KVIR      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KMOINS    < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KPOINT    < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KSLASH    < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
<
< CHIFFRES DECIMAUX :
<
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KZERO     < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KUN       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KDEUX     < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KTROIS    < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KQUATR    < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KCINQ     < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KSIX      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KSEPT     < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KHUIT     < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KNEUF     < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
<
< CARACTERES SPECIAUX :
< (SUITE-1)
<
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KDP       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KPV       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KINF      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KEGAL     < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KSUP      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KPI       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KAROND    < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
<
< LETTRES MAJUSCULES :
<
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KA        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KB        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KC        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KD        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KE        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KF        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KG        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KH        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KI        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KJ        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KK        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KL        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KM        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KN        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KO        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KP        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KQ        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KR        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KS        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KT        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KU        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KV        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KW        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KX        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KY        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KZ        < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
<
< CARACTERES SPECIAUX :
< (SUITE-2)
<
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KCG       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KASLSH    < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KCD       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KCHAP     < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KSOUL     < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KAPO      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
<
< LETTRES MINUSCULES :
<
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KAM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KBM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KCM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KDM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KEMI      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KFM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KGM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KHM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KIM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KJM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KKM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KLM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KMM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KNM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KOM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KPM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KQM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KRM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KSM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KTM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KUM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KVM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KWM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KXM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KYM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KZM       < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
<
< CARACTERES SPECIAUX :
< (SUITE-3)
<
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KACCOG    < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KDPBIS    < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KACCOD    < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KSINUS    < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
XWOR%1:  VAL         XWOR%1+I        < PROGRESSION DE L'ORDRE DU CARACTERE.
         $EQU        TFREK+KDEL      < POSITIONNEMENT SUR LE CARACTERE COURANT,
         WORD        XWOR%1          < ET GENERATION DE SON ORDRE...
<
< VALIDATION DE FIN :
<
LTFREK:  EQU         ZERO+XWOR%1+I-I < LONGUEUR DE L'ALPHABET VIRTUEL REFERENCEE
                                     < EN AVANT PAR L'INSTRUCTION 'ACTD' DE
                                     < LECTURE ABSOLUE DE LA MEMOIRE (+I POUR
                                     < AVOIR LA LONGUEUR, ET -I PARCE QUE
                                     < 'XWOR%1' COMMENCE A 'I'...).
XWOR%2:  VAL         MOCD=K
XWOR%2:  VAL         -XWOR%2
XWOR%2:  VAL         MOCD>XWOR%2     < DERNIER CODE 'ASCI' AVEC PARITE...
XWOR%3:  VAL         CORBT?BITPAR=FMASK(K?XWOR%2=FCINST
                                     < DERNIER CODE 'ASCI' SANS PARITE...
         IF          XWOR%1-I-XWOR%3,,XEIF%,
         IF          ATTENTION : LA TABLE DES FREQUENCES EST TROP
         IF          LONGUE, OU TROP PETITE !!!
XEIF%:   VAL         ENDIF
<
< POSITIONNEMENT EN FIN DE TABLE :
<
         $EQU        TFREK+XWOR%1
         PAGE
<
<
<        D E F I N I T I O N   D E S   C O D E S   D U
<        L A N G A G E   I N T E R P R E T A T I F  :
<
<
<        F O R M A T   D U   C O D E  :
<
<
XMCO::   VAL         'F8             < CODE OPERATION SUR UN OCTET,
XMRZ::   VAL         '04             < INDICATEUR DE RAZ DES CONDITIONS
                                     < 'CT' SUR UN OCTET,
XMMOV::  VAL         '03             < DEFINITION DES MOVES DESIRES.
<
<
<        C O D E S - O P E R A T I O N  :
<
<
<        A T T E N T I O N  :
<                      LA VALEUR DES CODES OPERATION N'EST
<                    PAS CALCULEE A PARTIR DE LA TABLE 'INT',
<                    CE QUI EST FORT REGRETTABLE ; EN CONSE-
<                    QUENCE DE QUOI, UNE MODIFICATION DES CODES
<                    DEVRA S'ACCOMPAGNER D'UNE MODIFICATION DE
<                    LA TABLE 'INT' ET INVERSEMENT !!!
<
<
XWOR%1:  VAL         XMCO=K          < DECALAGE DE CADRAGE DES CODES-OPERA-
                                     < TIONS...
CCREAT:: VAL         '02>XWOR%1      < CREATION NOUVEAU NOEUD.
CDELET:: VAL         '04>XWOR%1      < DELETE UN NOEUD.
CNOP::   VAL         '00>XWOR%1      < NOP.
CTESTV:: VAL         '06>XWOR%1      < COMPARAISON VALUE ET VALEUR(NC).
CTESTR:: VAL         '0D>XWOR%1      < TEST EXISTENCE RELATION R EN NC.
CTEBM1:: VAL         '12>XWOR%1      < TEST DE LA NATURE (S/P) DE B-1.
CCONEC:: VAL         '01>XWOR%1      < CONNECT NC A NT PAR R.
CDISCO:: VAL         '03>XWOR%1      < DISCONNECT NC ET NT PAR R.
CCALL::  VAL         '05>XWOR%1      < APPEL ROUTINE SPECIFIQUE.
CGOTO::  VAL         '07>XWOR%1      < GOTO DANS LE LANGAGE INTERPRETATIF.
CJUMP::  VAL         '0F>XWOR%1      < JUMP DANS LE LANGAGE INTERPRETRATIF
CCHAIN:: VAL         '09>XWOR%1      < DEPLACEMENT DANS L'ARBRE PAR R.
CSTACK:: VAL         '08>XWOR%1      < EMPILEMENT NC.
CUSTAC:: VAL         '0A>XWOR%1      < DEPILEMENT NC.
CINIT::  VAL         '14>XWOR%1      < INITIALISATION D'UN TRAVAIL.
CSTART:: VAL         '0B>XWOR%1      < (RE-)INITIALISATION DE NC.
CTERM::  VAL         '16>XWOR%1      < ACTION SPECIFIQUE AVANT STOP.
CSTOP::  VAL         '0C>XWOR%1      < FIN D'INTERPRETATION.
CVALUE:: VAL         '0E>XWOR%1      < MISE DANS VALUE DE VALEUR(NC).
CGETCH:: VAL         '10>XWOR%1      < VALUE<--MORCEAU DU CHEMIN ARG.
CMODCT:: VAL         '11>XWOR%1      < MODIFICATION DE CT.
<
<
<        I N D I C A T E U R S  :
<
<
XWOR%1:  VAL         XMRZ=K          < POUR CADRER L'INDICATEUR...
RAZCT::  VAL         1>XWOR%1        < RAZ CT AVANT EXECUTION.
XWOR%1:  VAL         XMMOV=K         < POUR RIRE...
MCVT::   VAL         1>XWOR%1        < NT<--(NC), AVANT EXECUTION.
MTVC::   VAL         2>XWOR%1        < NC<--(NT), AVANT EXECUTION.
ETC::    VAL         3>XWOR%1        < (NC)<-->(NT), AVANT EXECUTION.
<
<
<        R E L A T I O N S  :
<
<
RELATS:: VAL         XNESER          < RELATION S.
RELATP:: VAL         XNEPAR          < RELATION P.
RELATB:: VAL         XNEBAC          < RELATION B.
XRELAT:: VAL         RELATB+I        < MAX DES RELATIONS...
NRELAT:: VAL         RELATS+RELATP+RELATB  < PAS DE RELATION DEMANDEE
                                           < (CF. MVVCT S/P).
RELBM1:: VAL         'FF             < RELATION B-1.
DVALN::  VAL         XNEV0-XNESER    < DEPLACEMENT VERS LA VALEUR NOEUD.
<
<
<        E T I Q U E T T E S  :
<
<
SEQUEN:: VAL         Q8000
<
<
<        C O D E S   D ' E R R E U R  :
<
<
ENFDI::  VAL         2               < FONCTION DEMANDEE INEXISTANTE,
ENDI::   VAL         4               < DELETE IMPOSSIBLE,
ENPC::   VAL         5               < PREMIER CARACTERE NON RECONNU LORS
                                     < D'UN INSERT/DELETE,
ENLN::   VAL         6               < CHEMIN DE LONGUEUR NULLE,
ENFSP::  VAL         Q8000           < FIN DE SERIE/PARALLELE RECONTREE
                                     < TROP TOT.
         PAGE
<
<
<        P R O G R A M M E   I N T E R P R E T A T I F
<        D E   G E S T I O N   D E S   A R B R E S  :
<
<
LTRI:    EQU         $-IJIJDX
<
<
<        E N T R E E   I N S E R T / D E L E T E  :
<
<
<
         IF          $-LTRI*NOCMO-FGID,,XEIF%,
         IF          ATTENTION : LA VALEUR PRESUMEE DE 'FGID' DANS LES
         IF          DEFINITIONS GENERALES EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         BYTE        CCALL;K         < (X)=2.
         WORD        CDITRI          < DISCRIMINATION INSERT/DELETE.
         BYTE        CJUMP;K
         WORD        DITRI
<
<
<        E N T R E E   T E S T  :
<
<
         IF          $-LTRI*NOCMO-FGT,,XEIF%,
         IF          ATTENTION : LA VALEUR PRESUMEE DE 'FGT' DANS LES
         IF          DEFINITIONS GENERALES EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         BYTE        CJUMP;K         < (X)='A.
         WORD        ELTRI
<
<
<        C H O I X   I N S E R T / D E L E T E  :
<
<
DITRI:   EQU         $
         BYTE        CGOTO;K
         WORD        ILTRI;DLTRI;SEQUEN
<
< ERREUR 1ER CARACTERE : ABANDON :
<
         BYTE        CMODCT;K
         WORD        ENPC            < CODE ERREUR.
         BYTE        CSTOP;K         < ABANDON.
<
<
<        D E L E T E   N O M  :
<
<
DLTRI:   EQU         $
         BYTE        CINIT;CSTART
         WORD        ROOT            < R A C I N E   D E   L ' A R B R E
<
< ACCES 1 CARACTERE DU NOM :
<
N1012:   EQU         $
         BYTE        CGETCH;CGOTO
         WORD        N1013;SEQUEN;N1013
<
< CAS OU ON N'EST PAS AU BOUT DU NOM :
<
N1014:   EQU         $
         BYTE        CTESTV;CGOTO
         WORD        N1016;SEQUEN;N1016
<
< CAS D'1NE COINCIDENCE ENTRE LE NOM ET NC :
<
         BYTE        CCHAIN;RELATS
         BYTE        CGOTO;K
         WORD        SEQUEN;N1012;SEQUEN
         BYTE        CGETCH;CGOTO
         WORD        N1013;SEQUEN;N1013
<
< CAS OU ON EST EN BOUT DE BRANCHE
< ALORS QUE LE NOM N'EST PAS TERMINE :
<
N1020:   EQU         $
         BYTE        CMODCT;K
         WORD        ENDI
<
< CAS D'UNE FIN DE SERIE :
<
N1015:   EQU         $
         BYTE        CTERM;CSTOP
<
< CAS D'UNE NON-COINCIDENCE ENTRE LE NOM ET NC :
<
N1016:   EQU         $
         BYTE        CCHAIN;RELATP
         BYTE        CGOTO;K
         WORD        N1015;N1014;N1015
<
< CAS OU ON EST AU BOUT DU NOM :
<
N1013:   EQU         $
         BYTE        CTESTR;RELATS
         BYTE        CGOTO;K
         WORD        SEQUEN;N1020;N1020
<
< CAS OU ON EST EN BOUT DE BRANCHE : DELETE NOM :
<
N1019:   EQU         $
         BYTE        CTESTR;RELATP
         BYTE        CGOTO;K
         WORD        SEQUEN;N1040;N1040
<
< CAS OU IL N'Y A PAS DE DIVERGENCE PARALLELE : DELETE NOEUD :
<
         BYTE        MCVT?CCHAIN;RELATB
         BYTE        CGOTO;K
         WORD        N1018;SEQUEN;SEQUEN
         BYTE        CDISCO;RELBM1
         BYTE        CDELET;CTEBM1
         BYTE        CGOTO;K
         WORD        SEQUEN;N1019;SEQUEN
<
< FIN DE DELETE :
<
N1018:   EQU         $
         BYTE        CTERM;RAZCT?CSTOP
<
< DELETE DERNIER CARACTERE POSSIBLE :
<
N1040:   EQU         $
         BYTE        MCVT?CCHAIN;RELATB
         BYTE        ETC?CSTACK;CCHAIN
         BYTE        RELATP;CCONEC
         BYTE        RELATB;ETC?CCONEC
         BYTE        RELBM1;CUSTAC
         BYTE        MCVT?CDELET;CJUMP
         WORD        N1018
<
<
<        I N S E R T I O N   N O M  :
<
<
ILTRI:   EQU         $
         BYTE        CINIT;CSTART
         WORD        ROOT            < R A C I N E   D E   L ' A R B R E
<
< ACCES A 1 CARACTERE DU NOM ARGUMENT :
<
N1004:   EQU         $
         BYTE        CGETCH;CGOTO
         WORD        N1005;SEQUEN;N1005
<
< CAS OU ON N'EST PAS AU BOUT DU NOM :
<
N1006:   EQU         $
         BYTE        CTESTV;CGOTO
         WORD        N1009;SEQUEN;N1007
<
< CAS D'UNE COINCIDENCE :
<
         BYTE        CCHAIN;RELATS   < PARCOURS SERIE DE L'ARBRE.
         BYTE        CGOTO;K
         WORD        N1011;N1004;N1011
<
< CAS D'UNE FIN DE SERIE :
< ON CONTINUE A INSERER EN SERIE...
<
N1010:   EQU         $
         BYTE        CCREAT;CCONEC
         BYTE        RELATS;ETC?CCONEC
         BYTE        RELATB;CNOP
N1011:   EQU         $
         BYTE        CGETCH;CGOTO
         WORD        SEQUEN;N1010;SEQUEN
<
< FIN D'INSERTION :
<
N1005:   EQU         $
         BYTE        CTERM;RAZCT?CSTOP
<
< CAS OU VALUE>VALEUR(NC) :
<
N1007:   EQU         $
         BYTE        CCHAIN;RELATP   < PARCOURS EN PARALLELE DE L'ARBRE.
         BYTE        CGOTO;K
         WORD        SEQUEN;N1006;SEQUEN
<
< CAS D'UNE FIN DE PARALLELE,  ON INSERE
< LE 1ER CARACTERE EN PARALLELE, LES SUIVANTS
< EN SERIE :
<
         BYTE        CCREAT;CCONEC
         BYTE        RELATP;ETC?CCONEC
         BYTE        RELATB;CNOP
N1008:   EQU         $
         BYTE        CGETCH;CGOTO
         WORD        N1005;SEQUEN;N1005
<
< POURSUITE SERIE D'UN PARALLELE :
<
         BYTE        CCREAT;CCONEC
         BYTE        RELATS;ETC?CCONEC
         BYTE        RELATB;CJUMP
         WORD        N1008
<
< INSERTION AU MILIEU D'UNE RELATION :
< CAS OU VALUE<VALEUR(NC) :
<
N1009:   EQU         $
         BYTE        CCREAT;CSTACK
         BYTE        ETC?CCONEC;RELATP
         BYTE        ETC?CCHAIN;RELATB
         BYTE        ETC?CCONEC;RELATB
         BYTE        ETC?CCONEC;RELBM1
         BYTE        CUSTAC;CCONEC
         BYTE        RELATB;MTVC?CJUMP
         WORD        N1008
<
<
<        E X I S T E N C E   D ' U N   N O M  :
<
<
ELTRI:   EQU         $
         BYTE        CINIT;CSTART
         WORD        ROOT            < R A C I N E   D E   L ' A R B R E
<
< ACCES A 1 CARACTERE DU NOM ARGUMENT :
<
N1001:   EQU         $
         BYTE        CGETCH;CGOTO
         WORD        N1017;SEQUEN;N1017
<
< CAS OU ON EST PAS AU BOUT DU NOM :
<
N1003:   EQU         $
         BYTE        CTESTV;CGOTO
         WORD        N1000;SEQUEN;N1000
<
< CAS D'UNE COINCIDENCE :
<
         BYTE        CCHAIN;RELATS   < PARCOURS EN SERIE DE L'ARBRE.
         BYTE        CGOTO;K
         WORD        SEQUEN;N1001;SEQUEN
<
< CAS D'UNE FIN DE SERIE :
< LE NOM EST-IL TERMINE ????
<
         BYTE        CGETCH;CGOTO
         WORD        N1021;SEQUEN;N1021
<
< CAS OU ON EST EN BOUT DE BRANCHE,
< ALORS QUE LE NOM N'EST PAS TERMINE :
<
         BYTE        CMODCT;K
         WORD        ENFSP           < CODE-ERREUR.
         BYTE        CTERM;CSTOP
<
< CAS OU ON EST EN BOUT DE BRANCHE, ET
< QUE LE NOM EST TERMINE :
< ON RENVOIE CT=K :
<
N1021:   EQU         $
         BYTE        CCHAIN;RELATP   < TEST EVENTUEL PARALLELE ???
         BYTE        CGOTO;K
         WORD        N1030;SEQUEN;N1030
<
< CAS OU UN PARALLELE PART DU NOEUD
< COURANT, ALLONS CALCULER SA VALEUR,
< ET EVENTUELLEMENT LA RENVOYER :
<
         BYTE        CVALUE;CCALL
         WORD        MVVCTP
<
< SORTIE OK :
<
N1030:   EQU         $
         BYTE        CTERM;RAZCT?CSTOP
<
< CAS OU LE NOM EXISTE, ET OU UN SUIVANT
< SERIE EXISTE (C'EST D'AILLEURS LE NOEUD
< COURANT ACTUEL) ; CALCUL DE SA VALEUR, ET
< RENVOI EVENTUEL :
<
N1017:   EQU         $
         BYTE        CVALUE;CCALL
         WORD        MVVCTS
         BYTE        CCHAIN;RELATB   < RETOUR SUR LE NOEUD CRRESPONADNT
                                     < AU DERNIER CARACTERE DU NOM.
         BYTE        CJUMP;K
         WORD        N1021           < VERS LE TEST D'EXISTENCE D'UN
                                     < PARALLELE SUR CE NOUVEAU
                                     < NOEUD COURANT.
<
< CAS D'UNE NON-COINCIDENCE :
<
N1000:   EQU         $
         BYTE        CCHAIN;RELATP   < PARCOURS EN PARALLELE DE L'ARBRE.
         BYTE        CGOTO;K
         WORD        SEQUEN;N1003;SEQUEN
         BYTE        CTERM;CSTOP     < ERREUR.
         PAGE
<
<
<        R O U T I N E   S P E C I F I Q U E   D E
<        M O U V E M E N T   D E   V A L U E 0
<                    V E R S   N E X T S P  :
<
<
<        FONCTION :
<                    NEXTSP<--(OCTET1(VALUE)/(OCTET2(VALUE))).
<                    VALLON=1 :  LA VALEUR A 0/1 OCTET
<                    VALLON=K : LA VALEUR A 2 OCTETS OU PLUS
<                               VALEUR EST DONC UN <RELAI-VALEUR>...
<
<
XBNV::   VAL         BITSIG          < BIT INDICATEUR DANS 'OPDEM' DE LA
                                     < PRESENCE DE LA VALEUR DANS 'ASDEM'.
XWOR%1:  VAL         XMDSLO=B        < AFIN DE PLACER 'XBNVL' DERRIERE (ET
                                     < NON PAS DANS) LE CHAMP 'XMDSLO'.
XBNVL::  VAL         NBITMO-XWOR%1+I < BIT VALANT 0 SI LA VALEUR FAIT 2
                                     < OCTETS, ET 1 SI 1...
<
<
         USE         L,DCT0
<
<        R E C U P E R A T I O N   V A L U E   S E R I E  :
<
MVVCTS:  EQU         $
         LA          VAR+SAVDEM      < RECUPERATION DE LA FONCTION
                                     < DEMANDEE.
         CPI         RELATS          < EST-CE LA DEMANDE DE RECUPERA-
                                     < TION DE VALUE SERIE ????
         JNE         Z46             < NON, RIEN A FAIRE.
         JMP         MVVCT           < OUI, VALUE SERIE.
<
<        R E C U P E R A T I O N   V A L U E   P A R A L L E L E  :
<
MVVCTP:  EQU         $
         LA          VAR+SAVDEM      < FONCTION DEMANDEE.
         CPI         RELATP          < DEMANDE VALUE PARALLELE ????
         JNE         Z46             < NON, RIEN A FAIRE...
<
<        R E C U P E R A T I O N   V A L U E   S E R I E  :
<
MVVCT:   EQU         $
         SBT         XBNV            < MEMORISONS QUE LA FONCTION
                                     < DEMANDEE EST EXECUTEE.
         STA         VAR+SAVDEM      < MAJ SAVDEM.
         LXI         K
         LA          &VAR+VALUE      < (A)=VALUE0.
         ADRI        I,X
         LB          &VAR+VALUE      < (B)=VALUE1.
         SLRD        MOCG=K
         STZ         VAR+VALLON      < INDIC LONGUEUR=K A PRIORI
         CPI         NOCMO           < ON A DANS A LA LONGUEUR EN
                                     < OCTETS DE LA VALUE.
         JGE         E995            < DANS LE CAS OU IL Y A 2 OU PLUS
                                     < DE 2 OCTETS, ON RENVOIE LES
                                     < 2 PREMIERS DANS CT (B).
         SWBR        B,B             < L'OCTET1 DE VALUE PASSE EN
                                     < OCTET DROIT DE B.
         JAE         E996            < LA LONGUEUR EST NULLE : (A)=K.
         LAI         MOCD            < LA LONGUEUR VAUT 1, METTONS UN
                                     < MASQUE DE RECUPERATION DE L'OCTET
                                     < DROIT DE B.
E996:    EQU         $
         ANDR        A,B             < (B)=K, OU (B)=OCTET1 DE VALUE.
         IC          VAR+VALLON      < INDIC LONGUEUR VALEUR=1
E995:    EQU         $
         STB         VAR+NEXTSP      < RETOUR PAR NEXTSP.
Z46:     EQU         $
         RSR
         PAGE
<
<
<        I N T E R P R E T E U R   D U   L A N G A G E
<        D E   D E S C R I P T I O N    E T   D E
<        G E S T I O N   D E S   R E S E A U X  :
<
<
<        PHILOSOPHIE :
<                      L'ETUDE DE BEAUCOUP DE PROBLEMES PEUT SE
<                    RAMENER A L'ETUDE D'UN ARBRE, ET COMME TOUT
<                    ARBRE PEUT SE RAMENER A UN ARBRE BINAIRE,
<                    IL A ETE CREE UN LANGAGE DE MANIPULATION DES
<                    ARBRES BINAIRES.
<
<
<        FORMAT D'UN NOEUD :
<                    MOT0 : NUMERO DU NOEUD CHAINE EN SERIE SUR
<                           CELUI-CI, OU Q8000, S'IL N'EXISTE PAS.
<                    MOT1 : NUMERO DU NOEUD CHAINE EN PARALLELE
<                           SUR CELUI-CI (OU Q8000).
<                    MOT2 : NUMERO DU NOEUD PRECEDANT CELUI-CI ;
<                           A NOTER QUE LE NOEUD PRECEDENT EST UNIQUE
<                           DANS UN ARBRE.
<                    MOT3 ET SUIVANTS : RESERVES A LA VALEUR
<                                       DU NOEUD, LE 1ER OCTET CONTE-
<                                       NANT LA LONGUEU OCTET DE CETTE
<                                       VALEUR.
<                                         CETTE VALEUR PEUT ETRE ABSENTE
<                                       (CF. LE CAS DES LISTES AUX
<                                       NOEUDS NON TERMINAUX...)
<
<
<        CONVENTIONS :
<                    NC : NOEUD COURANT DE L'ARBRE,
<                    NT : NOEUD DE TRAVAIL (SAVE NC, CHAINAGES,...)
<                    NUM : DESIGNE LE NUMERO D'UN NOEUD ARGUMENT
<                          OU RESULTAT D'UNE ROUTINE SPECIFIQUE.
<                    CT : CONTIENT L'ETAT D'EXECUTION DE L'INTERPRETEUR
<                         (OK, ERREUR,...)
<
<
<        L A N G A G E   I N T E R P R E T A T I F   D E
<        G E S T I O N   D E S   A R B R E S  :
<
<
<        1- FORMAT :
<                      LES INSTRUCTIONS SONT DE LONGUEUR
<                    VARIABLE, MAIS ON TROUVE SYSTEMATI-
<                    QUEMENT EN PREMIER OCTET LE CODE
<                    OPERATION AINSI QUE C'EST INDIQUE
<                    A LA SUITE :
<
<                    BITS0-4 : CODE OPERATION,
<                    BIT5 : 0=RIEN,
<                           1=RAZ DE LA CONDITION CT (OK).
<                    BITS6-7 : ACTION AVANT EXECUTION DE L'INSTRUCTION :
<                                    00 : RIEN,
<                                    01 : NT<--(NC),
<                                    10 : NC<--(NT),
<                                    11 : (NC)<-->(NT).
<                    NOTA : UN CODE OPERATION NUL EST UN 'NOP'.
<
<        2- REPRESENTATION DES RELATIONS :
<                    0 : RELATION SERIE (S),
<                    1 : RELATION PARALLELE (P),
<                    2 : RELATION BACK (B).
<
<        3- ZONE ARGUMENT :
<                      LA ZONE ARGUMENT D'UNE INSTRUCTION
<                    EST SITUEE DANS LES OCTETS QUI SUI-
<                    VENT CELUI QUI CONTIENT LE CODE
<                    OPERATION...
<
<
<        A T T E N T I O N  :
<                      LES ZONES ARGUMENTS CONTENANT DES ADRESSES
<                    DOIVENT SE TROUVER A DES FRONTIERES
<                    DE MOT !!!
<
<
<        4- LISTE DES INSTRUCTIONS DISPONIBLES :
<
<CODE :  PRIMITIVE : ARGUMENTS :     FONCTION(S) :
<
<'02     CREATE-NODE VALUE           CREATION D'UN NOEUD, ALLOCATION
<                                    DE SON ESPACE ET INITIALISATION
<                                    DE SES ZONE VALEURS ET RELATIONS
<                                    (A Q8000 TOUTES LES 3).
<
<'04     DELETE-NODE NT              DELETE LE NOEUD DE NUMERO (NT).
<
<'00     NOP
<
<'06     TEST-VALUE  VALUE           COMPARE VALUE A LA VALEUR DU
<                                    NOEUD COURANT, ET POSITIONNE CT
<                                    EN CONSEQUENCES.
<
<'0D     TEST-RELAT. NC,RELATION     TEST DE L'EXISTENCE D'UNE RELATION
<                                    R ISSUE DE NC ; POSITIONNE CT :
<                                    CT=Q8000 : R N'EXISTE PAS,
<                                    CT>=K : LA RELATION EXISTE.
<
<'12     TEST-BM1    B-1             TEST DE LA NATURE (S/P) DE B-1 :
<                                    CT=K SI B-1=S,
<                                    CT=1 SI B-1=P,
<                                    CT<0 SI B-1 N'EXISTE PAS.
<
<'01     CONNECT     NT,NC,RELATION  MEMORISE DANS NC LA RELATION
<                                    NC--(R)-->NT.
<
<'03     DISCONNECT  NT,NC,RELATION  ROMPT DANS NC LA CONNEXION
<                                    NC--(R)-->NT.
<
<'05     CALL        @ROUTINE        APPEL D'UNE ROUTINE SPECIALE
<                                    (INITIALISATION DE L'ESPACE DES
<                                    NOEUDS,...).
<
<'07     GOTO        <E1>,<E2>,<E3>  BRANCHEMENT DANS LE LANGAGE INTER-
<                                    PRETATIF A L'ADRESSE :
<                                    <E1> : SI (CT)<0,
<                                    <E2> : SI (CT)=K,
<                                    <E3> : SI (CT)>0.
<                                    NOTA : SI <E> ABSENTE (Q8000),
<                                    ON POURSUIT L'EXECUTION EN
<                                    SEQUENCE.
<
<'0F     JUMP        <E>             BRANCHEMENT INCONDITIONNEL
<                                    DANS LE LANGAGE INTERPRETATIF A
<                                    L'ADRESSE <E>.
<
<'09     CHAIN       RELATION        PARCOURS DE L'ARBRE PAR CHAINAGE :
<                                    NC<--R(NC) & CT=K SI POSSIBLE,
<                                    CT=Q8000 SI CHAINAGE IMPOSSIBLE.
<
<'08     STACK       NC              EMPILE NC.
<
<'0A     UNSTACK                     DEPILE NC.
<
<'14     INIT                        INITIALISATION SPECIFIQUE D'UN
<
<                                    TRAVAIL, FONCTION DE LA NATURE
<                                    DE L'ESPACE.
<
<'0B     START       NUMERO          NC<--NUMERO.
<                                    NOTA : NUMERO EST DANS LES 2
<                                    OCTETS SUIVANTS LE CODE-OPERATION.
<
<'16     TERMIN                      FIN SPECIFIQUE D'UN TRAVAIL,
<                                    FONCTION DE LA NATURE DE L'ESPACE.
<
<'0C     STOP                        ARRET DE L'INTERPRETATION.
<
<'0E     VALUE       NC              VALUE<--VALEUR(NC).
<
<'10     GET-CHEMIN  CHEMIN-ARG.     VALUE<--MORCEAU DU CHEMIN ARGUMENT.
<
<'11     MODIF.CT    NOMBRE          CT<--NOMBRE.
<
<
<        ARGUMENTS :
<                    (OPDEM) : INDEX DE LA 1ERE INSTRUCTION A
<                              EXECUTER DANS LE LANGAGE.
<                                      2 : INSERT/DELETE (MODE ECRITURE),
<                                      A : TEST EXISTENCE NOM (MODE
<                                          ECRITURE PUIS LECTURE).
FGID:    VAL         FGID            < FONCTIONS DEFINIES
FGT:     VAL         FGT             < EN TETE DU SYSTEME...
<                    (AMDEM) : ADRESSE-OCTET D'UN CHEMIN EN MEMOIRE.
<                    (CODEM) : LONGUEUR-OCTETS DU CHEMIN.
<                    (ASDEM)=RELATS : DEMANDE DE LA VALEUR DU NOEUD
<                                     SUIVANT EN SERIE,
<                           =RELATP : DEMANDE DE LA VALEUR DU NOEUD
<                                     SUIVANT EN PARALLELE.
<                           #RELATP/RELATS : PAS DE VALEUR DEMANDEE.
<
<
<        CODES DE RETOUR (ETADEM) :
<                    2       FONCTTION DEMANDEE INEXISTANTE.
<                    4       DELETE IMPOSSIBLE.
<                    5       1ER CARACTERE NON RECONNU EN INSERT/DELETE.
<                    6       CHEMIN DE LONGUEUR NULLE.
<                    Q8000   FIN DE SERIE/PARALLELE RENCONTREE
<                            TROP TOT.
<
<
<        RESULTAT :
<                    (ASDEM)=(OCTET1(VALUE)/(OCTET2(VALUE))), DANS
<                            LE CAS D'UN 'TEST', SI LE NOM EXISTE,
<                            ET SI AU MOINS UN NOEUD LE SUIT ; ASDEM
<                            EST ALORS LA 1ERE PARTIE DE SA VALEUR.
<                    BIT0(OPDEM)=1 DANS LE CAS OU ASDEM CONTIENT
<                                  LA VALEUR EVENTUELLEMENT DEMANDEE.
<                    BIT6(OPDEM)=K: LA VALEUR PLACEE EVENTUELLEMENT DANS
<                                    ASDEM FAIT 2 OCTETS
<                    BIT6(OPDEM)=1: CETTE VALEUR FAIT 1 OCTET
<                    (VOIR LES BITS 'XBNV' ET 'XBNVL')
<                    (BOX)=NOMBRE DE NOEUDS LIBRES DANS L'ARBRE ;
<                          CETTE VALEUR EST EXPLOITEE PAR 'HDLSTN',
<                          POUR SAVOIR S'IL PEUT RANGER LE <NOM>...
<
<
         USE         W,DEM0
         USE         L,DCT0
<
<        I N I T I A L I S A T I O N   S P E C I F I Q U E
<        D ' U N   T R A V A I L   S U R   A R B R E  :
<
<
I20:     EQU         $
         PSR         X               < PAR PRUDENCE.
         BSR         VAR+AINIT
         JMP         E998
<
<
<        F I N   S P E C I F I Q U E   D ' U N
<        T R A V A I L   S U R   A R B R E  :
<
<
T22:     EQU         $
         PSR         X               < PAR PRUDENCE.
         BSR         VAR+ATERM
         JMP         E998
<
<
<        R E C U P E R A T I O N   D U   C H E M I N
<        A R G U M E N T   P A R   M O R C E A U X  :
<
<
<        FONCTION :
<                      ON RECUPERE ICI DE MANIERE SPECIFIQUE
<                    A L'ESPACE UN MORCEAU DU CHEMIN
<                    ARGUMENT, QUE L'ON RANGE AVEC SA
<                    LONGUEUR DANS L'OCTET0 DANS
<                    VALUE.
<
<
CH16:    EQU         $
         PSR         X               < PAR PRUDENCE.
         BSR         VAR+GCH         < RECUPERATION SPECIFIQUE DU
                                     < CHEMIN ARGUMENT.
E998:    EQU         $
         PLR         X
         JMP         E965            < VERS LA BOUCLE INTERPRETEUR.
<
<
<        S T A C K   N C  :
<
<
<        NOTA : POUR POUVOIR FAIRE LES TEST DE PILE
<        PLEINE/VIDE AU BON MOMENT, ON LAISSE INUTILISE LES 1ER ET
<        DERNIER MOTS DE LA PILE.
<
<
ST8:     EQU         $
         LAD         VAR+STRI
         LR          A,Y             < (Y)=@DE LA PILE DE NC.
         LA          VAR+NC          < (A)=NUMERO DU NOEUD COURANT.
         PUSH                        < EMPILEMENT DE NC.
         JNC         E965            < OK, VERS LA BOUCLE DE
                                     < L'INTERPRETEUR.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      JE NE SAIS PAS, MAIS EN FAIT IMPOSSIBLE...
<
         JMP         E965            < VERS LA BOUCLE DE L'INTERPRETEUR.
<
<
<        U N S T A C K   N C  :
<
<
U10:     EQU         $
         LAD         VAR+STRI
         LR          A,Y             < (Y)=@PILE DE NC.
         PULL                        < DEPILEMENT DE NC.
         JNC         SYSR81          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      JE NE SAIS PAS, MAIS EN FAIT IMPOSSIBLE...
<
SYSR81:  EQU         $
         STA         VAR+NC          < RESTAURE NC APRES DEPILEMENT.
         JMP         E965            < VERS LA BOUCLE DE L'INTERPRETEUR.
<
<
<        T E S T   V A L E U R  :
<
<
<        FONCTION :
<                    COMPARE VALUE A VALEUR(NC).
<
<
TE6:     EQU         $
         PSR         X               < SAVE INDEX OCTET DU LANGAGE.
         LA          VAR+NC
         STA         VAR+NUM         < PREPARATION DU NUMERO DU
                                     < NOEUD COURANT.
         BSR         VAR+AN          < ACCES AU NOEUD COURANT.
<
<        ON A ICI :
<                    (W)=ADRESSE DU NC EN MEMOIRE.
<
         LBY         DVALN,W         < (A)=LONGUEUR OCTET DE LA VALEUR DU
                                     <     NOEUD COURANT.
         ADRI        W+NOCMO-E,A     < +W POUR LA LONGUEUR...
         SLRS        NOCMO=K         < CONVERSION EN NOMBRE DE MOTS.
         LR          A,Y             < (Y)=INDEX DERNIER MOT DE LA VALEUR
                                     <     DANS LE NOEUD COURANT.
         LXI         K               < (X)=INDEX D'ACCES AU 1ER MOT
                                     <     DU NOEUD COURANT.
E976:    EQU         $
<
< TEST DES VALEURS "CARACTERE" :
<
         LR          Y,A             < (A)=NOMBRE DE MOTS OCCUPES PAR LA
                                     <     VALEUR (Y COMPRIS SON OCTET DE
                                     <     LONGUEUR) :
         NTRN
         CPI         W+W+NOCMO-E/NOCMO
         TRN
                                     < EST-CE UNE VALEUR "CARACTERE" ???
         JNE         E976X1          < NON, IL Y A PLUS D'UN OCTET...
<
< CAS DES VALEURS "CARACTERE" :
< ON VA UTILISER UN ALPHABET
< VIRTUEL, DONT L'ORDRE EST
< FONCTION DE LA FREQUENCE
< D'UTILISATION DES CARACTERES...
<
XWOR%1:  VAL         MOCD=K
XWOR%1:  VAL         -XWOR%1
XWOR%2:  VAL         MOCD>XWOR%1
XWOR%3:  VAL         CORBT?BITPAR=FMASK(K?XWOR%2=FCINST
         PSR         B,X,Y           < SAUVEGARDES...
         LR          X,Y             < ET MISE TEMPORAIRE DE L'INDEX COURANT
                                     < DE 'VALUE' DANS 'Y'...
         LA          DVALN,W         < ACCES AU NOEUD COURANT,
         ANDI        XWOR%3          < ON ENLEVE LA LONGUEUR DE LA VALEUR,
                                     < (ET LA PARITE QUI N'Y EST PAS...)
         LR          A,X             < (X)=CODE DU CARACTERE CONTENU DANS LE
                                     <     NOEUD COURANT,
         LB          &VAR+ATFREK     < (B)=CODE VIRTUEL, FONCTION DE LA FRE-
                                     <     QUENCE DE (X)...
         LR          Y,X             < (X)=INDEX DU MOT COURANT DE 'VALUE',
         LA          &VAR+VALUE      < ACCES A 'VALUE',
         ANDI        XWOR%3          < ON ENLEVE LA LONGUEUR DE LA VALEUR,
                                     < (ET LA PARITE QUI N'Y EST PAS...)
         LR          A,X             < (X)=CODE DU CARACTERE COURANT,
         LA          &VAR+ATFREK     < (A)=CODE VIRTUEL, FONCTION DE LA FRE-
                                     <     QUENCE DE (X)...
         CPR         B,A             < COMPARAISON DU CARACTERE VIRTUEL COU-
                                     < RANT (A) ET DU CARACTERE VIRTUEL CON-
                                     < TENU DANS LE NOEUD COURANT (B)...
         PLR         B,X,Y           < RESTAURATIONS...
         JMP         E976X2          < VERS LES TESTS D'IDENTITE...
<
< CAS DES VALEURS CONTENANT
< PLUS D'UN OCTET :
<
E976X1:  EQU         $
<
<        NOTA :
<                      LA COMPARAISON SE FAIT MOT PAR MOT,
<                    FAUT DONC EVITER LES PROBLEMES DE
<                    FAUX NBRES NEGATIFS (CF. CARACTERE DONT
<                    LE BIT0 EST A 1, ET QUI SE TROUVE
<                    EN OCTET GAUCHE : ON A AINSI UN
<                    NBRE NEGATIF...).
<
         LA          &VAR+VALUE      < ACCES A UN MOT DE VALUE,
         CP          DVALN,W         < ET COMPARAISON A UN MOT DE LA
                                     < VALEUR DU NOEUD COURANT.
E976X2:  EQU         $               < CAS DES VALEURS "CARACTERE"...
         JNE         E977            < A LA 1ERE DIFFERENCE, ON
                                     < S'ARRETE...
<
< CAS DE L'EGALITE :
<
         ADRI        P,W             < ACCES AU MOT SUIVANT DE LA
                                     < VALEUR DU NOEUD COURANT.
         ADRI        I,X             < ACCES AU MOT SUIVANT DE VALUE.
         CPR         X,Y             < A-T'ON EXPLORE TOUTE LA VALEUR
                                     < DU NOEUD COURANT.
         JNE         E976            < NON, ON CONTINUE.
<
< CAS OU : VALUE=VALEUR(NC) :
<
         LAI         K               < EN VUE DU RAZ DE CT.
         JMP         E978
<
< CAS OU : VALUE#VALEUR(NC) :
<
E977:    EQU         $
         LAI         BIT
         SBCR        A
         ADR         A,A
         ADRI        -BIT,A
E978:    EQU         $
<
<        ON A ICI :
<                    (A)=-1 : VALUE<VALEUR(NC).
<                    (A)=0  : VALUE=VALEUR(NC),
<                    (A)=+1 : VALUE>VALEUR(NC),
<
         STA         VAR+CT          < NOUVELLE CT.
         PLR         X               < RESTAURE (X)=INDEX OCTET DU LANGAGE.
         JMP         E965            < VERS LA BOUCLE DE L'INTERPRETEUR.
<
<
<        T E S T   E X I S T E N C E   R E L A T I O N
<        R   I S S U E   D E   N C  :
<
<
<        FONCTION :
<                      CETTE FONCTION TESTE SI LA RELATION
<                    ARGUMENT EXISTE AU NOEUD NC ; ELLE
<                    PSITIONNE CT=Q8000 SI NC NE
<                    CHAINE AUCUN NOEUD PAR LA
<                    RELATION ARGUMENT.
<
<
TR13:    EQU         $
         LA          VAR+NC
         STA         VAR+NUM         < PREPARARTION DU NUMERO DE NC.
         BSR         VAR+AN          < ACCES NC.
<
<        ON A ICI :
<                    (W)=ADRESSE NC EN MEMOIRE.
<
         LBY         &VAR+ALTRI      < (A)=RELATION DONT ON TESTE
                                     <     L'EXISTENCE.
         CPI         XRELAT          < VALIDATION DE LA RELATION.
         JL          SYSR82          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ALLER VERIFIER QUE LE PROGRAMME
<                    INTERPRETATIF EST BIEN ACCEDE (BASE
<                    'L' ET SON RELAI 'ALTRI', PUIS
<                    VERIFIER QU'IL EST CORRECT...
<
SYSR82:  EQU         $
         ADR         A,W             < (W)=@MEMOIRE DE LA REALTION
                                     <     DANS NC.
         LA          O,W             < (A)=RELATION DONT ON TESTE L
                                     <     L'EXISTENCE.
         STA         VAR+CT          < (CT)=Q8000, SI LA RELATION N'EXISTE
                                     <      PAS,
                                     < (CT)=NUMERO DU NOEUD CHAINE PAR NC
                                     <      AVEC CETTE RELATION SINON.
                                     <      DONC >=K...
         JMP         E968            < FIN DES INSTRUCTIONS DE 2
                                     < OCTETS.
<
<
<        T E S T   N A T U R E   D E   B - 1  :
<
<
T18:     EQU         $
         LA          VAR+SAVREL      < RECUPERATION DE LA DERNIERE
                                     < RELATION S/P TRIATEE PAR UN
                                     < CCHAIN,B.
         STA         VAR+CT          < QUE L'ON MET DANS CT...
         JMP         E965            < VERS LA BOUCLE DE L'INTERPRETEUR.
<
<
<        T A B L E   D ' I N T E R P R E T A T I O N  :
<
<
<        NOTA :
<                      SI BIT0(ADRESSE)=1 (X), L'INSTRUCTION
<                    A UN ARGUMENT (OU DES...) DEVANT SE
<                    TROUVER A UNE FRONTIERE DE MOT.
<
<
INT:     EQU         $
         WORD        E965;CO1;CR2;DI3;DE4;CA5,X;TE6;GO7,X
         WORD        ST8;CH9;U10;S11,X;E966;TR13;V14
         WORD        J15,X;CH16
         WORD        M17,X
         WORD        T18
         WORD        E965;I20;E965;T22
LINT::   VAL         $-INT-D         < DERNIER CODE-OPERATION.
<
<
<        E N T R Y   H A N D L E R  :
<
<
HDLRES:  EQU         $
         LA          ARGDEM+AMDEM
         BSR         AMEM            < GENERATION D'UN RELAI INDEXE
                                     < INDIRECT VERS LE CHEMIN ARGUMENT.
<
<        ON A ICI :
<                    (A)=RELAI INDIRECT/INDEXE VERS LE CHEMIN.
<                    (X)=RANG DU 1ER CARACTERE DU CHEMIN.
<
         SWBR        X,Y
         ADR         Y,X             < (X)=NUMERO/NUMERO.
         STA         VAR+RCHE        < MISE EN PLACE DU RELAI.
         STA         VAR+SAVREL      < INITIALISATION VOLONTAIREMENT
                                     < ERRONNEE DE SAVREL, AFIN QUE SON
                                     < UTILISATION ERRONNEE ET ILLICITE
                                     < FASSE UN PLANTAGE !!!!
         LA          ARGDEM+CODEM
         JAE         E993            < ERREUR : CHEMIN DE LONGUEUR NULLE.
         ADR         X,A             < INITIALISATION DE LCHE :
                                     < OCTET0=RANG 1ER CARACTERE DU
                                     <        CHEMIN,
                                     < OCTET1=RANG DERNIER CARACTERE DU
                                     <        CHEMIN+1.
         STA         VAR+LCHE        < LONGUEUR DU CHEMIN.
         LA          ARGDEM+OPDEM
         ANDI        MKOPDM          < ON NE CONSERVE QUE LES 4
                                     < DERNIERS BITS DE L'OPDEM.
         CPI         FGT             < VALIDATION.
         JG          E979            < ERREUR.
         LR          A,X             < (X)=OPDEM=INDEX INITIAL DU
                                     <     LANGAGE INTERPRETATIF.
         JNE         E981            < OPDEM#'A.
<
< CAS DE L'OPDEM='A : LA DEMANDE DE TYPE 'ECRITURE' (2)
< SE TRANSFORMERA A LA FIN EN UNE LECTURE, CAR
< ELLE RENVOIE UN RESULTAT, D'OU LA MODIFICATION
< DE L'OPDEM DE LA DEMANDE (RAZ) :
<
         STZ         ARGDEM+OPDEM    < MISE EN LECTURE DE LA DEMANDE
                                     < ARGUMENT   A T T E N T I O N...
         LAI         FGID            < ????
E981:    EQU         $
         CPI         FGID            < VALIDATION (SUITE).
         JNE         E979            < ERREUR, FONCTION NON RECONNUE.
         LA          ARGDEM+ASDEM    < RECUPERATION ASDEM DEMANDE ARG.
         STA         VAR+SAVDEM      < &SAVE DANS DCT.
         PSR         W               < SAVE @DE LA DEMANDE ARGUMENT.
         STZ         VAR+CT          < INITIALISATION DE CT A 'OK'.
         STZ         VAR+NEXTSP      < INITIALISATION DE NEXTSP.
<
<
<        B O U C L E   D E   L ' I N T E R P R E T E U R  :
<
<
<        UTILISATION DES REGISTRES :
<                    (X)=INDEX DU LANGAGE (EQUIVAUT A UN COMPTEUR
<                      ORDINAL OCTET). IL DONNE EN PERMANENCE
<                      L'INSTRUCTION QUE L'ON EXECUTE.
<                    (Y)=INDEX MOT DU LANGAGE INTERPRETATIF (UTILISE
<                      PAR LES GOTO, CALL,...
<                    (W)=ADRESSE EN MEMOIRE DU NOEUD DE NUMERO (NUM).
<
<
E965:    EQU         $
         LBY         &VAR+ALTRI      < (A)=CODE OPERATION ET INDICATEUR
                                     <     DE MOVE AVANT EXECUTION.
<
< TEST DE L'INDICATEUR DE MODIFICATION DE CT :
<
XWOR%1:  VAL         XMRZ=K
         TBT         NBITOC-B-XWOR%1+NBITOC
         JNC         E982            < IL NE FAUT PAS TOUCHER A CT.
         STZ         VAR+CT          < BIT5=1 : IL FAUT RAZER CT (OK).
E982:    EQU         $
<
< TEST DES INDICATEURS DE MOVE :
<
         LBI         XMMOV
         ANDR        A,B             < (B)=INDICATEUR DE MOVE.
         SLRS        XMCO=K          < (A)=CODE OPERATION.
         CPI         LINT            < VALIDATION DU CODE-OPERATION.
         JLE         SYSR83
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ALLER VERIFIER QUE L'ACCES AU
<                    PROGRAMME EST BON ('L' ET 'ALTRI'),
<                    PUIS QUE LUI-MEME EST BON...
<
SYSR83:  EQU         $
         XR          B,X             < SAVE INDEX DU LANGAGE DANS B.
         BR          &VAR+MOVT       < BRANCHEMENT AU MODULE SPECIFI-
                                     < QUE DE MOVE AVANT EXECUTION.
<
<        M O D U L E S   D E   M O V E  :
<
MOV1:    EQU         $
         LY          VAR+NC
         STY         VAR+NT          < NT<--(NC).
         JMP         MOV0
MOV2:    EQU         $
         LY          VAR+NT
         STY         VAR+NC          < NC<--(NT).
         JMP         MOV0
MOV3:    EQU         $
         LX          VAR+NT
         LY          VAR+NC
         STY         VAR+NT          < NT<--(NC).
         STX         VAR+NC          < NC<--(NT).
MOV0:    EQU         $
         LR          B,X             < RESTAURE (X)=INDEX DU LANGAGE
                                     < INTERPRETATIF.
         XR          A,X             < (A)=INDEX DU LANGAGE,
                                     < (X)=CODE-OPERATION.
         LB          &VAR+AINT       < (B)=@MODULE SPECIFIQUE DE
                                     < L'INSTRUCTION QUE L'ON VIENT
                                     < DE DECODER (CODE (X)).
         TBT         NBITMO+BITX     < L'ARGUMENT DE CETTE INSTRUCTION
                                     < S'IL EXISTE, DOIT-IL ETRE A UNE
                                     < FRONTIERE DE MOT ???
         RBT         NBITMO+BITX     < A PRIORI, CONVERSION ADRESSE.
         PSR         B               < EMPILEMENT DE CETTE ADRESSE, EN
                                     < VUE DE FAIRE UN RSR DE BRANCHEMENT
         JNC         E985            < NON, EB0(ADRESSE)=K.
<
< CAS OU L'ARGUMENT DE L'INSTRUCTION DOIT
< ETRE A UNE FRONTIERE DE MOT :
<        BIT0(ADRESSE)=1.
<
         SBT         NBITMO-B        < L'INDEX OCTET DU LANGAGE (DANS A)
                                     < EST RENDU IMPAIR A PRIORI...,
                                     < AINSI L'OCTET SUIVANT SERA A UNE
                                     < FRONTIERE DE MOT...
E985:    EQU         $
         ADRI        I,A             < PROGRESSION DE L'INDEX DU
                                     < LANGAGE PAR PASSAGE A L'INSTRUC-
                                     < TION SUIVANTE.
         LR          A,X             < RESTAURE (X)=INDEX LANGAGE.
         SLRS        NOCMO=K         < CONVERSION EN UN INDEX MOT.
         LR          A,Y             < (Y)=INDEX MOT DU LANGAGE.
         RSR                         < BRANCHEMENT AU MODULE SPECIFIQUE
                                     < D'INTERPRETATION.
EE965:   JMP         E965            < RELAI VERS LA BOUCLE DE
                                     < L'INTERPRETEUR.
<
<        S O R T I E   D E   L ' I N T E R P R E T E U R  :
<
E966:    EQU         $
         PLR         W               < RESTAURE (W)=@DEMANDE.
         LX          VAR+NTONSL      < (X)=NOMBRE DE NOEUDS LIBRES DANS L'ARBRE,
         BSR         ASTBOX          < QUE L'ON RANGE DANS LA 'BOX' (POUR
                                     < 'HDLSTN' UNIQUEMENT...).
<
< RENVOI EVENTUEL DU RESULTAT DE TEST :
<
         LA          VAR+SAVDEM
         JAGE        Z49             < LA FONCTION EVENTUELLEMENT
                                     < DEMANDEE N'A PAS ETE EXECUTEE.
         LA          ARGDEM+OPDEM    < DANS LE CAS OU LA FONCTION
                                     < DEMANDEE A ETE EXECUTEE, ON
                                     < POSITIONNE LES BITS DE OPDEM QUI
                                     < VALIDENT ASDEM
         RBT         XBNVL           < BIT1(OPDEM)=K A PRIORI
         CPZ         VAR+VALLON      < TEST INDIC LONGUEUR VALEUR
         JE          E966XX          < LONGUEUR VALEUR=2 OCTETS OU PLUS
         SBT         XBNVL           < LONGUEUR VALEUR=1 OCTET
E966XX:  EQU         $
         SBT         XBNV            < BIT0(OPDEM)=1.
         STA         ARGDEM+OPDEM
         LA          VAR+NEXTSP      < RECUPERATION DE LA VALEUR
                                     < DEMANDEE.
         STA         ARGDEM+ASDEM    < RENVOI PAR L'ASDEM DE LA DEMANDE.
<
< RENVOI CONDITION FINALE :
<
Z49:     EQU         $
         LA          VAR+CT          < RECUPERATION DE LA CONDITION
                                     < FINALE, EN FIN D'INTERPRETATION.
E980:    EQU         $
         STA         ETAT0           < RENVOI DE CT DANS ETAT0.
         RSR                         < C'EST TOUT...
<
< ERREUR FONCTION INEXISTANTE :
<
E979:    EQU         $
         LAI         ENFDI           < CODE ERREUR 2.
         JMP         E980
<
< ERREUR CHEMIN DE LONGUEUR NULLE :
<
E993:    EQU         $
         LAI         ENLN            < CODE-ERREUR.
         JMP         E980            < ABORT.
         PAGE
<
<
<        E T A B L I S S E M E N T   C O N N E X I O N  :
<
<
<        FONCTION :
<                    ETABLIT DANS NC LA RELATION :
<                                    NC--(R)-->NT.
<
<
CO1:     EQU         $
         LY          VAR+NT          < (Y)=NUMERO DU NOEUD DE TRAVAIL.
E969:    EQU         $
<
<        ON A ICI :
<                    (Y)=NUMERO DE NT SI CO1,
<                        Q8000 SI DI3.
<
         LA          VAR+NC
         STA         VAR+NUM         < PREPARATION DU NUMERO DU NOEUD
                                     < COURANT.
         BSR         VAR+AN          < ACCES AU NOEUD DE NUMERO (NUM)
<
<        ON A ICI :
<                    (W)=ADRESSE DU NOEUD (NUM) EN MEMOIRE.
<
         LBY         &VAR+ALTRI      < ACCES A LA RELATION DANS A :
                                     < (A)=K : S,
                                     < (A)=1 : P,
                                     < (A)=2 : B.
                                     < (A)='FF : B-1.
         CPI         RELBM1          < EST-CE LA DEMANDE DE B-1.
         JNE         E988            < NON S/P/B.
         LA          VAR+SAVREL      < DANS LE CAS DE B-1, ON REPREND
                                     < LA DERNIERE S/P TRAITEE LORS D'UN
                                     < CCHAIN,B.
E988:    EQU         $
         CPI         XRELAT          < VALIDATION DE LA RELATION.
         JL          SYSR84          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ALLER VERIFIER L'ACCES AU PROGRAMME
<                    ('L' ET 'ALTRI'), PUIS LE PROGRAMME
<                    LUI-MEME...
<
SYSR84:  EQU         $
         ADR         A,W             < (W)=@DU CHAINAGE CONCERNANT CETTE
                                     <     RELATION DANS LE NOEUD COURANT.
         STY         O,W             < DANS LE CAS 'CO1', CHAINAGE
                                     < DE NC, VERS NT PAR LA RELATION,
                                     < DANS LE CAS  'DI3', DELETE DE
                                     < CETTE RELATION.
         IC          VAR+KWTRI       < ET UNE MODIF. DE PLUS...
<
<        ATTENTION : DANS LES 2 CAS (CO1 & DI3), ON NE VERIFIE
<                    PAS L'ETAT DU CHAINAGE AVANT L'OPERATION...
<
< CAS DES INSTRUCTIONS 2 OCTETS :
<
E968:    EQU         $
         ADRI        I,X             < ACCES INSTRUCTION SUIVANTE.
         JMP         E965            < VERS LA BOUCLE DE L'INTERPRETEUR.
<
<
<        D I S C O N N E X I O N   R E L A T I O N  :
<
<
<        FONCTION :
<                    ROMPT DANS NC LA RELATION :
<                                    NC--(R)-->NT.
<
<
DI3:     EQU         $
         LY          INFINI          < MEMORISATION DE RELATION
                                     < INEXISTANTE, A LA PLACE DU
                                     < NUMERO DU NOEUD DE TRAVAIL.
         JMP         E969            < TRAITEMENT IDENTIQUE A CELUI
                                     < DE L'ETABLISSEMENT D'UNE
                                     < CONNEXION.
<
<
<        C R E A T I O N   D ' U N   N O U V E A U   N O E U D   ( N T )
<
<
<        FONCTION :
<                    CREE LE NOEUD DE VALEUR 'VALUE' ET CE
<                    NOUVEAU NOEUD DEVIENT NT.
<
<
CR2:     EQU         $
         BSR         VAR+CN          < APPEL D'UNE ROUTINE SPECIFIQUE
                                     < DE CREATION D'UN NOEUD (ALLOCATION
                                     < D'ESPACE,...)
<
<        ON A ICI :
<                    (W)=ADRESSE DU NOEUD EN MEMOIRE.
<                    (NUM)=NUMERO ALLOUE AU NOEUD PAR LA ROUTINE,
<                    (CT)=CONDITION DE RETOUR.
<
         LA          VAR+CT          < TEST DES CONDITIONS DE RETOUR.
         JANE        E966            < ABORT INTERPRETATION.
<
< OK : MISE A JOUR DU NOEUD DE TRAVAIL :
<        NT<--(NUM).
<
         LA          VAR+NUM
         STA         VAR+NT
<
< INITIALISATION DU NOEUD :
<
         LY          INFINI          < AUCUNE RELATION N'EXISTE ENCORE.
         STY         RELATS,W        < RELATION S.
         STY         RELATP,W        < RELATION P.
         STY         RELATB,W        < RELATION B.
         STZ         XNEV0,W         < QUELLE PROPRETE !???!??!!!
         STZ         XNEV1,W
         IC          VAR+KWTRI       < ET UNE MODIF. DE PLUS...
         PSR         X               < SAVE INDEX DU LANGAGE.
<
< MISE EN PLACE DE LA VALEUR DU NOEUD :
<
         LXI         K
         LBY         &VAR+VALUE      < (A)=NBRE D'OCTETS OCCUPES PAR
                                     <     LA VALEUR DU NOEUD.
E974:    EQU         $
         ADRI        Z+NOCMO-E,A     < POUR Y INCLURE LA LONGUEUR
                                     < ELLE-MEME, ET ARRONDIR A LA
                                     < FRONTIERE DE MOT SUIVANTE.
         SLRS        NOCMO=K
         LR          A,X             < (X)=NBRE DE MOTS OCCUPES PAR LA
                                     <     VALEUR DU NOEUD.
         LR          W,B
         ADRI        DVALN,B         < (B)=@ OU METTRE LA VALEUR DANS
                                     <     LE NOEUD EN MEMOIRE.
         LA          VAR+VALUE
         RBT         BITX            < (A)=@VALUE (CF. DCTTRI).
         CPZR        Y               < DISTINCTION DES FONCTIONS 'CR2'
                                     < ET 'V14', CAR IL IL FAUT INVERSER
                                     < EMETTEUR ET RECEPTEUR.
         JL          E975            < OK, C'EST LA FONCTION 'CR2'.
         XR          A,B             < CAS DE 'V14', ON INVERSE
                                     < EMETTEUR ET RECEPTEUR.
E975:    EQU         $
         MOVE                        < DEPLACEMENT DE LA VALEUR DU
                                     < NOEUD (NUM).
         PLR         X               < RESTAURE (X)=INDEX DU LANGAGE.
         JMP         E965            < VERS LA BOUCLE DE L'INTERPRETEUR.
<
<
<        D E L E T E   N O E U D   N T  :
<
<
<        FONCTION :
<                    DELETE LE NOEUD NT.
<
<
DE4:     EQU         $
         LA          VAR+NT
         STA         VAR+NUM         < PREPARATION DU NUMERO DE NT,
                                     < EN VUE DE SON DELETE.
         BSR         VAR+DN          < DELETE DU NOEUD NUM, SOIT NT.
         IC          VAR+KWTRI       < ET UNE MODIF. DE PLUS...
         JMP         E965            < VERS LA BOUCLE DE L'INTERPRETEUR.
<
<
<        M O D I F I C A T I O N   D E   C T  :
<
<
M17:     EQU         $
         XR          X,Y             < (X)=INDEX MOT DU LANGAGE.
         LA          &VAR+ALTRI      < (A)=VALEUR A DONNER A CT.
         STA         VAR+CT          < MODIFICATION DE CT.
         LR          Y,X             < RESTAURE (X)=INDEX OCTET DU LANGAGE.
         JMP         E972            < FIN DES INSTRUCTIONS 3 OCTETS.
<
<
<        A P P E L   R O U T I N E   S P E C I F I Q U E  :
<
<
CA5:     EQU         $
<
<        A T T E N T I O N  :
<                      LA ROUTINE APPELEE EST RESPONSABLE
<                    DES SAVE/RESTORE DES REGISTRES.
<
         XR          X,Y             < (X)=INDEX MOT DU LANGAGE,
                                     < (Y)=INDEX OCTET DU LANGAGE.
         PSR         Y               < SAVE INDEX OCTET DU LANGAGE.
         LA          &VAR+ALTRI      < VALIDATION.
         JANE        SYSR85          < OK
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ALLER VERIFIER L'ACCES AU PROGRAMME
<                    ('L' ET 'ALTRI'), PUIS LE PROGRAMME
<                    LUI-MEME...
<
SYSR85:  EQU         $
         BSR         &VAR+ALTRI      < APPEL DE LA ROUTINE SPECIFIQUE.
         PLR         X               < RESTAURE (X)=INDEX OCTET DU LANGAGE.
<
< CAS DES INSTRUCTIONS DE 3 OCTETS DE LONG :
<
E972:    EQU         $
         ADRI        NOCMO,X         < ACCES A L'INSTTRUCTION SUIVANTE.
         JMP         E965            < VERS LA BOUCLE DE L'INTERPRETEUR.
<
<
<        J U M P   D A N S   L E   L A N G A G E
<        I N T E R P R E T A T I F  :
<
<
J15:     EQU         $
         XR          X,Y             < (Y)=INDEX OCTET DU LANGAGE.
                                     < (X)=INDEX MOT DU LANGAGE.
         LA          &VAR+ALTRI      < (A)=ADRESSE ABSOLUE DE JUMP.
         JAGE        E991            < VERS TRAITEMENT GOTO.
<
< CAS D'UN JUMP EN SEQUENCE (!!!?!?)
<
         LR          Y,X             < RESTAURE (X)=INDEX OCTET DU LANGAGE.
         JMP         E972            < VERS LE TRAITEMENT DES INSTRUCTIONS
                                     < DE 3 OCTETS DE LONG.
<
<
<        G O T O   D A N S   L E   L A N G A G E
<        I N T E R P R E T A T I F  :
<
<
GO7:     EQU         $
         LA          VAR+CT          < ACCES A LA CONDITION, LE
                                     < BRANCHEMENT ETANT CONDITIONNEL.
         XR          X,Y             < (X)=INDEX MOT DU LANGAGE,
                                     < (Y)=INDEX OCTET DU LANGAGE.
         JAL         E970            < CT<0 : GOTO <E1>.
         ADRI        I,X
         JAE         E970            < CT=K : GOTO <E2>.
         ADRI        I,X             < CT>0 : GOTO <E3>.
E970:    EQU         $
         LA          &VAR+ALTRI      < (A)=ADRESSE DE BRANCHEMENT DANS LE
                                     <     LANGAGE INTERPRETATIF.
         JAL         E971            < SI L'ADRESSE EST ABSENTE, ON
                                     < CONTINUE EN SEQUENCE.
<
< CAS D'UNE RUPTURE DE SEQUENCE :
<
E991:    EQU         $
         LB          VAR+ALTRI
         RBT         NBITMO+BITX     < (B)=BASE DU LANGAGE.
         SBR         B,A             < (A)=INDEX MOT DE L'INSTRUCTION
                                     <     SUIVANTE DANS LE LANGAGE.
         JAGE        SYSR86          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ALLER VERIFIER L'ACCES AU PROGRAMME
<                    ('L' ET 'ALTRI'), PUIS LE PROGRAMME
<                    LUI-MEME...
<
SYSR86:  EQU         $
         SLLS        NOCMO=K         < (A)=INDEX OCTET DE L'INSTRUCTION
                                     <     SUIVANTE.
         LR          A,X             < (X)=INDEX OCTET INSTRUCTION
                                     <     SUIVANTE.
         JMP         EE965           < VERS LA BOUCLE DE L'INTERPRETEUR.
<
< CAS D'UNE POURSUITE EN SEQUENCE :
<
E971:    EQU         $
         LR          Y,X             < RESTAURE (X)=INDEX OCTET DU LANGAGE
XWOR%3:  VAL         3               < CF. INSTRUCTIONS A 3 ADRESSES...
         ADRI        XWOR%3*NOCMO,X  < PASSAGE A L'INSTRUCTION
                                     < SUIVANTE EN SEQUENCE.
         JMP         EE965           < VERS LA BOUCLE DE L'INTERPRETEUR.
<
<
<        S T A R T   D A N S   L E   L A N G A G E  :
<
<
<        FONCTION :
<                    (RE-)INITIALISATION DE NC.
<
<
S11:     EQU         $
         XR          X,Y             < (Y)=INDEX OCTET DU LANGAGE.
         LA          &VAR+ALTRI      < (A)=ZONE ARGUMENT DU START.
         STA         VAR+NC          < CHANGEMENT DE NOEUD COURANT.
         LR          Y,X             < RESTAURE (X)=INDEX OCTET LANGAGE.
         JMP         E972            < VERS LA FIN DES INSTRUCTIONS
                                     < DE 3 OCTETS.
<
<
<        C H A I N A G E   D A N S   L ' A R B R E  :
<
<
<        FONCTION :
<                    PARCOURS LE CHAINAGE SUIVANT POUR LA RELATION R :
<                                    NC=R(NC).
<                                    (SI POSSIBLE...)
<
<
CH9:     EQU         $
         LA          VAR+NC
         STA         VAR+NUM         < PREPARATION DU NUMERO DE NC.
         BSR         VAR+AN          < ACCES AU NOEUD COURANT (NUM)=NC.
<
<        ON A ICI :
<                    (W)=ADRESSE DU NOEUD EN MEMOIRE.
<
         LBY         &VAR+ALTRI      < (A)=RELATION DEMANDEE POUR
                                     <     EFFECTUER LE CHAINAGE.
         CPI         RELBM1          < EST-CE LA DEMANDE DE B-1.
         JNE         E987            < NON S/P/B.
         LA          VAR+SAVREL      < DANS LE CAS DE B-1, ON
                                     < REPREND LA DERNIERE RELATION
                                     < S/P TRAITEE PAR UN CCHAIN,B.
E987:    EQU         $
         CPI         XRELAT          < VALIDATION DE LA RELATION.
         JL          SYSR87          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ALLER VERIFIER L'ACCES AU PROGRAMME
<                    ('L' ET 'ALTRI'), PUIS LE PROGRAMME
<                    LUI-MEME...
<
SYSR87:  EQU         $
         ADR         A,W             < (W)=ADRESSE EN MEMOIRE DU CHAINAGE
                                     <     DU NOEUD COURANT POUR LA
                                     <     RELATION DEMANDEE.
         LB          O,W             < (B)=NUMERO DU NOEUD SUIVANT DANS
                                     <     LA RELATION.
         IF          X26*NSTREE-K,,,XEIF%
         IF          ATTENTION : LES NUMEROS DES NOEUDS PEUVENT
         IF          ETRE NEGATIFS, ET IL Y A ALORS CONFUSION AVEC
         IF          'INFINI' QUI INDIQUE L'ABSENCE DE CHAINAGE !!!
XEIF%:   VAL         ENDIF
         CPZR        B               < CE NOEUD SUIVANT EXISTE-IL ???
         JL          E973            < NON, LE CHAINAGE N'EXISTE PAS.
<
< CAS OU LE NOEUD COURANT CHAINE UN AUTRE
< NOEUD DANS LA RELATION DEMANDEE :
<
         STZ         VAR+CT          < MEMORISATION CHAINAGE OK.
         CPI         RELATB          < EST-CE LA RELATION B.???
         JNE         E989            < NON.
<
< CAS D'UNE RELATION B DANS UN CCHAIN :
< ALORS ON MEMORISE SA RELATION INVERSE
< DITE B-1 (B MOINS 1), ET ON LA SAVE
< DANS SAVREL. A NOTER QUE B-1 NE PEUT ETRE
< QUE S OU P...
<
         STB         VAR+NUM         < MISE DANS NUM DU FUTUR NOEUD
                                     < COURANT.
         PSR         B               < PAR PRUDENCE.
         BSR         VAR+AN          < ACCES A L'ADRESSE MEMOIRE
                                     < DU FUTUR NOEUD COURANT.
         PLR         B
<
<        ON A ICI :
<                    (W)=ADRESSE MEMOIRE DU FUTUR NOEUD COURANT.
<
         LA          VAR+NC          < (A)=NOEUD COURANT ACTUEL.
         LYI         RELATS          < RELATION S A PRIORI.
         CP          RELATS,W        < LE NOEUD CHAINE EN SERIE PAR
                                     < LE FUTUR NOEUD COURANT EST-IL
                                     < LE NOEUD COURANT ACTUEL (A) ?????
         JE          E990            < OUI, DONC : B-1=S.
         LYI         RELATP          < NON, ESSAYONS LA RELATION P.
         CP          RELATP,W        < LE NOEUD CHAINE EN PARALLELE
                                     < PAR LE FUTUR NOEUD COURANT
                                     < EST-IL LE NOEUD COURANT ACTUEL ????
         JE          E990            < OUI, DONC : B-1=P.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      MYSTERE ET BOULES DE GOMME...
<                    PEUT-ETRE LA PAGE COURANTE DE
<                    L'ARBRE A-T'ELLE ETE MAL CHARGEE
<                    (ERREUR DISQUE...)...
<
E990:    EQU         $
         STY         VAR+SAVREL      < SAVE B-1 DANS SAVREL.
E989:    EQU         $
         STB         VAR+NC          < CHANGEMENT DE NOEUD COURANT.
                                     < NC=R(NC), AVEC : R=S/P/B.
         JMP         E968            < VERS LA FIN DES INSTRUCTIONS DE
                                     < 2 OCTETS DE LONG.
<
< CAS D'UN CHAINAGE INEXISTANT :
< (SOIT CHAINAGE=Q8000)
<
E973:    EQU         $
         STB         VAR+CT          < MEMORISATION DE CE CHAINAGE
                                     < INEXISTANT PAR : CT=Q8000.
         JMP         E968            < VERS LA FIN DES INSTRUCTIONS
                                     < DE 2 OCTETS DE LONG.
                                     < I M P O R T A N T  : NC NE CHANGE
                                     < PAS LORSQUE LE CHAINAGE N'EXISTE
                                     < PAS.
<
<
<        V A L E U R   D ' U N   N O E U D  :
<
<
<        FONCTION :
<                    FAIT VALUE=VALEUR(NC).
<
<
V14:     EQU         $
         LA          VAR+NC
         STA         VAR+NUM         < PREPARATION DU NUMERO DU NOEUD
                                     < COURANT.
         BSR         VAR+AN          < ACCES AU NOEUD COURANT (NC).
<
<        ON A ICI :
<                    (W)=ADRESSE DE NC EN MEMOIRE.
<
         LYI         K               < MEMORISONS PAR (Y)=K, QUE C'EST
                                     < LA FONCTION V14.
         PSR         X               < SAVE INDEX OCTET DU LANGAGE.
         LBY         DVALN,W         < (A)=LONGUEUR DE LA VALEUR
                                     <     DU NOEUD NC.
         JMP         E974            < VERS L'ACCES A LA VALEUR.
         PAGE
         CALL        #SISP CMS5 DOL2#
         CALL        #SISP CMS5 CHECK#
<
<
<        I N I T I A L I S A T I O N  :
<
<
<        FONCTION :
<                      CE MODULE PERMET DE METTRE LE
<                    HANDLER EN ATTENTE EVENTUELLE DE
<                    FIN DE PRE-CHARGEMENT DE LA RACINE
<                    DE L'ARBRE.
<
<
ABTRI:   EQU         $
         WAIT        VAR+DEMTRI+X18  < ATTENTE EVENTUELLE DE FIN
                                     < DE PRE-CHARGEMENT.
         RSR
<
<
<        F I N   D E   T R A V A I L  :
<
<
<        FONCTION :
<                      CE MODULE REECRIT LE SECTEUR
<                    COURANT (S'IL A ETE MODIFIE),
<                    PUIS FAIT UNE DEMANDE DE RE-CHARGEMENT
<                    DE LA RACINE DE L'ARBRE SANS
<                    ATENTE DE FIN D'E/S AFIN DE MAXIMISER
<                    LA MULTIPROGRAMMATION.
<
<
RBTRI:   EQU         $
         BSR         VAR+ASP2        < SAUVEGARDE EVENTUELLE DU SECTEUR
                                     < COURANT.
<
<        ON A ICI :
<                    BETA(WEIO(DEMTRI))=K,
<
<                    (W)=ADRESSE DEMTRI (E/S DISQUE).
         IC          WEIO            < BETA(WEIO) EST MIS A 1 AFIN
                                     < QUE SI LE PRE-CHARGEMENT DE
                                     < LA RACINE N'EST PAS LANCE, ON
                                     < NE BLOQUE PAS A L'ENTREE
                                     < SUIVANTE DANS LE HANDLER !!!
         LA          VAR+TAS         < (A)=@1ER SECTEUR DE L'ARBRE.
         IF          ROOT,,XEIF%,
         ADRI        ROOT,A          < (A)=@SECTEUR DE LA RACINE.
XEIF%:   VAL         ENDIF
         CP          VAR+STC         < LE SECTEUR COURANT SERAIT-IL
                                     < PAR HASARD LA RACINE DE L'ARBRE??
         JE          Z1100           < OUI, DONC RIEN A FAIRE !!!
<
< PRE-CHARGEMENT DE LA RACINE DE L'ARBRE :
<
         STA         ARGDEM+ASDEM    < MISE DE L'ADRESSE-SECTEUR
                                     < DE LA RACINE DANS DEMTRI.
         STZ         ARGDEM+OPDEM    < MISE DE DEMTRI EN LECTURE.
         BSR         ACHAND          < ENVOI DE LA DEMANDE DE PRE-
                                     < CHARGEMENT DE LA RACINE SANS
                                     < ATTENTE DE FIN D'OPERATION !!!
         STA         VAR+STC         < LA RACINE DE L'ARBRE DEVIENT
                                     < LE NOUVEAU SECTEUR COURANT.
Z1100:   EQU         $
         RSR
         PAGE
<
<
<        A C C E S   1 E R   C A R A C T E R E  :
<
<
<        RESULTAT :
<                    CT=-2 : INSERT ("+").
<                    CT=K : DELETE ("-").
<                    CT=1 : ERREUR.
<
<
XXCTP::  VAL         SPLUS-SMOINS    < "+",
XXCTM::  VAL         SMOINS-SMOINS   < "-",
XXCTE::  VAL         EXIST           < ERREUR...
         IF          XXCTP-XXCTE,XEIF%,,XEIF%
         IF          ATTENTION : 'XXCTP' ET 'XXCTE' DOIVENT DIFFERE !!!
XEIF%:   VAL         ENDIF
         IF          XXCTM-XXCTE,XEIF%,,XEIF%
         IF          ATTENTION : 'XXCTM' ET 'XXCTE' DOIVENT DIFFERER !!!
XEIF%:   VAL         ENDIF
<
<
CDITRI:  EQU         $
         LBY         VAR+LCHE        < ACCES A L'INDEX COURANT DU
                                     < CHEMIN ARGUMENT.
         LR          A,X
         LBY         &VAR+RCHE       < ACCES AU 1ER CARACTERE
                                     < DU CHEMIN.
         ADRI        -SMOINS,A       < ON RETRANCHE "-".
         JAE         E992            < C'ETAIT "-" CT=K : DELETE.
         CPI         XXCTP
         JE          E992            < C'ETAIT "+" CT<0 : INSERT.
         LAI         XXCTE           < ERREUR : CARACTERE DIFFERENT
                                     < DE "+" ET "-".
E992:    EQU         $
         STA         VAR+CT          < RENVOI DU CODE DE RECUPERA-
                                     < -TION DU 1ER CARACTERE DANS CT.
         LR          X,A
         ADRI        I,A             < PROGRESSION INDEX COURANT DU
                                     < CHEMIN ARGUMENT.
         STBY        VAR+LCHE        < & SAVE IT...
         RSR
         PAGE
<
<
<        A C C E S   A   U N   C A R A C T E R E
<                    D ' U N   M O T  :
<
<
<        A T T E N T I O N  :
<                      DANS LE CAS OU LE CARACTERE RECUPERE
<                    DANS LE CHEMIN EST NUL, ON INSERE COMME
<                    VALEUR DU NOEUD, LE CONTENU DE SAVDEM !!!
<                    (A LA PLACE DU '0').
<
<
<        A T T E N T I O N  :
<                      LE BIT 0 DE CHAQUE CARACTERE EST
<                    RAZE A PRIORI (PARITE) !!!!
<
<
GETCAR:  EQU         $
         LB          VAR+LCHE
<
<        NOTA :
<                    OCTET0(LCHE)=INDEX COURANT DU CHEMIN,
<                    OCTET1(LCHE)=LONGUEUR DU CHEMIN.
<                    (TOUT EN OCTETS).
<
         SWBR        B,A
         CPR         A,B
         JE          E984            < ON EST ARRIVE AU BOUT DU
                                     < CHEMIN.
<
< CAS OU ON N'EST PAS AU BOUT DU CHEMIN :
<
         ANDI        MOCD
         LR          A,X             < (X)=INDEX COURANT DU CHEMIN.
         STZ         VAR+VALUE1      < RAZ OCTET2 ET OCTET3 DE LA
                                     < VALEUR A PRIORI, AFIN DE NE PAS
                                     < CONSERVER UNE INFORMATION
                                     < ANTERIEURE NON SIGNIFICATIVE !!!
         LBY         &VAR+RCHE       < (A)=UN CARACTERE DU CHEMIN.
         JAE         Z16             < SI LE CARACTERE EST NUL, C'EST
                                     < UNE DEMANDE D'INSERTION DE
                                     < SAVDEM COMME VALEUR DU NOEUD.
<
< CAS GENERAL :
<
         RBT         BITPAR          < RAZ A PRIORI DU BIT DE PARITE.
XWOR%1:  VAL         MOCG=K
XWOR%1:  VAL         BIT>XWOR%1=K
         SBT         NBITMO-B-XWOR%1 < MISE EN PLACE D'UNE LONGUEUR
                                     < D'UN OCTET.
Z17:     EQU         $
         STA         VAR+VALUE0      < LONGUEUR VALEUR+OCTET0.
         ADRI        I,X             < PROGRESSION DE L'INDEX CHEMIN.
         LR          X,A
         STBY        VAR+LCHE        < & SAVE IT...
         STZ         VAR+CT          < MEMORISATION SORTIE OK.
E984XX:  EQU         $
         RSR
<
< CAS DU BOUT DU CHEMIN :
<
XXCTF::  VAL         XXCTE+W+W       < FIN DE CHEMIN...
E984:    EQU         $
         LAI         XXCTF           < CODE DE FIN DE CHEMIN.
         STA         VAR+CT          < MEMORISATION FIN ANORMALE.
         JMP         E984XX          < VERS LA SORTIE...
<
< MISE DE SAVDEM COMME VALEUR D'UN NOEUD :
<
Z16:     EQU         $
         LA          VAR+SAVDEM
         STBY        VAR+VALUE1      < RANGEMENT DE L'OCTET1 DE SAVDEM.
         SLRS        MOCG=K          < RECUPERATION OCTET0 DE SAVDEM.
XWOR%1:  VAL         MOCG=K
XWOR%1:  VAL         NBITMO-B-XWOR%1
XWOR%2:  VAL         NOCMO=K         < POUR INSERER UNE LONGUEUR DE "2"...
         SBT         XWOR%1-XWOR%2   < MISE EN PLACE D'UNE LONGUEUR
                                     < DE 2 OCTETS.
         JMP         Z17             < VERS LE RANGEMENT.
         PAGE
<
<
<        C A L C U L   D E   L ' A D R E S S E
<        S E C T E U R   D ' U N   N O E U D  :
<
<
<        ARGUMENT :
<                    NUM=NUMERO DU NOEUD.
<
<
<        RESULTAT :
<                    (X)=NUMERO DU SECTEUR (K A NSTREE-Z),
<                    (Y)=ADRESSE DU SECTEUR SUR 'DKF'.
<                    COMPARAISON ENTRE STC ET Y.
<
<
SP1:     EQU         $
         LA          VAR+NUM         < (A)=NUMERO DU NOEUD.
XWOR%1:  VAL         MKNE)MMOT=K     < POUR UN DECALAGE A GAUCHE,
XWOR%2:  VAL         -XWOR%1         < POUR UN DECALAGE A DROITE...
         IF          NSTREE>XWOR%1>XWOR%2-NSTREE,,XEIF%,
         IF          ATTENTION : LE NUMERO DE NOEUD OBTENU PAR
         IF          CONCATENATION D'UN NUMERO DE SECTEUR DANS
         IF          L'ARBRE ET D'UN NUMERO DE NOEUD DANS LE
         IF          SECTEUR NE TIENT PAS SUR UN MOT !!!
XEIF%:   VAL         ENDIF
         JAGE        SYSR88          < OK, LE NOEUD PARAIT CATHOLIQUE...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      D'ABORD VOIR D'OU VIENT CE NOEUD
<                    BIZARRE, PUIS ENSUITE SI L'ON RELANCE
<                    ETRE TRES PRUDENT !!!
<                      NE PAS OUBLIER QU'UN NUMERO DE NOEUD
<                    NE PEUT ETRE NEGATIF, DE PAR LES TESTS
<                    DE FIN DE CHAINAGE (PAR RAPPORT A
<                    'INFINI') QUE FAIT LE 'SGN'...
<
SYSR88:  EQU         $
         IF          NSTREE>XWOR%1-K,,,XEIF%
         IF          ATTENTION : IL VA Y AVOIR CONFUSION
         IF          LORS DES TESTS DE FIN DE CHAINAGE DANS
         IF          L'ARBRE DU 'SGN' (VOIR 'INFINI'...) !!!
XEIF%:   VAL         ENDIF
         SLRS        MKNE)MFFFF=K    < RECUPERATION DU NUMERO DE SECTEUR
         LR          A,X             < (X)=NUMERO DU SECTEUR DANS L'ARBRE
                                     < (ENTRE 0 ET NSTREE-Z).
         JAL         SP1X1           < BERK, POUAHHH, QUEL VILAIN NUMERO DE
                                     < SECTEUR DANS L'ARBRE...
         LRM         A
         WORD        NSTREE-Z        < (A)=PLUS GRAND NUMERO DE SECTEUR DANS
                                     <     L'ARBRE,
         CPR         A,X             < ALORS LE NUMERO DE SECTEUR QUE L'ON
                                     < VIENT DE CALCULER EST-IL BON ???
         JLE         SP1X2           < OUI, (X)<=(A)...
SP1X1:   EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT ON A PU
<                    TROUVER UN NUMERO DE SECTEUR
<                    QUI NE SOIT PAS DANS L'ARBRE !!!
<                      ATTENTION : FAIRE VACHEMENT
<                    GAFFE SI LE SYSTEME EST RELANCE !!!
<
SP1X2:   EQU         $
         LR          X,A             < RESTAURE :
                                     < (A)=NUMERO DU SECTEUR DANS L'ARBRE...
         AD          VAR+TAS         < TRANSLATION DUE A L'ALLOCATEUR
                                     < DISQUE ET AU SGF.
         LR          A,Y             < (Y)=@SECTEUR.
         CP          VAR+STC         < LE NOEUD APPARTIENT-IL AU
                                     < SECTEUR COURANT ????
         RSR                         < TEST EN RETOUR POSSIBLE.
         PAGE
<
<
<        R E E C R I T U R E   S E C T E U R    C O U R A N T  :
<
<
<        RESULTAT :
<                    (W)=ADRESSE DEMANDE D'E/S DISQUE.
<
<
SP2:     EQU         $
         LAD         VAR+DEMTRI
         LR          A,W             < (W)=@DEMANDE D'E/S SUR DISQUE.
         LA          VAR+KWTRI       < LE SECTEUR A-T'IL ETE MODIFIE
                                     < PENDANT SON SEJOUR EN MEMOIRE ????
         JAE         Z11             < NON, DON REECRITURE INUTILE.
<
< CAS OU LA REECRITURE DU SECTEUR COURANT
< EST NECESSAIRE, CAR IL A ETE MIS A JOUR :
<
         LAI         FGW
         STA         ARGDEM+OPDEM    < MISE EN ECRITURE DE DEMTRI.
         LA          VAR+STC
         JAG         SYSR89          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      IL FAUT RECALCULER A LA MAIN
<                    L'ADRESSE DU SECTEUR COURANT, A PARTIR
<                    DU NOEUD COURANT, ET ENSUITE...
<
SYSR89:  EQU         $
         STA         ARGDEM+ASDEM    < ASDEM=@SECTEUR COURANT.
         BSR         ACHAND          < ENVOI DE LA DEMANDE PRIORITAIRE
                                     < D'ECRITURE.
         STZ         VAR+KWTRI       < RAZ DU COMPTEUR DE MISE A JOUR.
         BSR         ACHANW          < ATTENTE DE FIN D'ECHANGE.
Z11:     EQU         $
         RSR
         PAGE
<
<
<        I N I T I A L I S A T I O N   S E C T E U R
<                    E N   M E M O I R E  :
<
<
<        ARGUMENT :
<                    (X)=NUMERO DU SECTEUR QUE L'ON INITIALISE.
<                    (A)=ADRESSE DU RELAI VERS TOSA1 (ATOSA1).
<
<
<        RESULTAT :
<                    (W)=ADRESSE DU BUFFER DU SECTEUR COURANT.
<
<
<        DETRUIT Y.
<
<
SP3:     EQU         $
         LYI         FONRB0          < FONCTION 'RESET A 0' ; EN
                                     < EFFET LE SECTEUR COURANT SERA
                                     < BIENTOT PARTIELLEMENT OCCUPE.
         BSR         ATMOBT          < DONNE :
                                     < (A)=ADRESSE DE 'TOSA1'.
         BSR         VAR+ASP31       < (A)=(W)=ADRESSE DU BUFFER DU SECTEUR
                                     <         COURANT.
<
< NETTOYAGE BRUTAL :
<
         PSR         A,X,W           < SAUVEGARDES...
         LA          INFINI          < (A)=VALEUR QUE L'ON VA METTRE DANS TOUT
                                     <     LE SECTEUR A PRIORI ('INFINI' ETANT
                                     <     BIEN CAR INDIQUE UNE FIN DE... ET
                                     <     DONC SI DES NOEUDS INEXISTANTS SONT
                                     <     UTILISES, ON POURRA PEUT-ETRE LE
                                     <     DETECTER PAR CE MOYEN...).
         LXI         YY7             < (X)=NOMBRE DE MOTS A NETTOYER...
SP3A1:   EQU         $
         STA         O,W             < NETTOYAGE,
         ADRI        D,W             < ET PASSAGE AU MOT SUIVANT,
         JDX         SP3A1           < S'IL EXISTE...
         PLR         A,X,W           < ET RESTAURATIONS...
<
< INITIALISATION DES "LIBERTES" :
<
         LAI         X26
         STA         XSNN,W          < INITIALISATION DU NOMBRE DE
                                     < NOEUDS LIBRES DANS LE SECTEUR.
         LAI         XINN0           < PREPARATION DE LA TABLE
                                     < D'OCCUPATION DES NOEUDS DU
                                     < SECTEUR.
         CPZR        X               < EST-CE LE SECTEUR DE LA RACINE.
         JNE         Z15             < NON.
         IF          ROOT-K,,XEIF%,
         IF          ATTENTION : CE QUI PRECEDE EST IDIOT !!!
XEIF%:   VAL         ENDIF
<
< CAS DU SECTEUR DE LA RACINE :
<
         DC          XSNN,W          < OCCUPATION A PRIORI DU NOEUD
                                     < DE LA RACINE.
<
< INITIALISATION DE LA RACINE :
<
         LB          INFINI
         STB         XSLN+XNESER,W   < RELATION S DE LA RACINE.
         STB         XSLN+XNEPAR,W   < RELATION P DE LA RACINE.
         STB         XSLN+XNEBAC,W   < RELATION B DE LA RACINE.
         LBI         EON             < LA RACINE GENERALE DE L'ARBRE
                                     < DU SYSTEME EST FAITE DU CARACTERE
                                     < <EON> !!!!
XWOR%1:  VAL         MOCG=K
XWOR%1:  VAL         NBITMO-B-XWOR%1
XWOR%2:  VAL         BIT=K           < POUR DISPOSER UNE LONGUEUR "1"...
         SBT         NBITMO+XWOR%1-XWOR%2 < MISE EN PLACE D'UNE LONGUEUR
                                     < DE 1 CARACTERE.
         STB         XSLN+XNEV0,W    < VALEUR DE LA RACINE.
         STZ         XSLN+XNEV1,W    < RAZ DE LA VALEUR DE LA RACINE.
         RBT         L               < OCCUPATION DU NOEUD DE LA RACINE.
Z15:     EQU         $
<
< INITIALISATION DE LA CARTE D'OCCUPATION
< DES NOEUDS DU SECTEUR :
<
         STA         XSAN+K,W
         LAI         XINN1
         STA         XSAN+XLXSAN-Z,W
         IF          XLXSAN-2,,XEIF%,
         IF          CE QUI PRECEDE EST IDIOT !!!
XEIF%:   VAL         ENDIF
         BSR         VAR+ASP30       < MISE A JOUR DE LA LISTE 'LMAXSN'...
         RSR                         < C'EST TOUT.
         PAGE
<
<
<        L E C T U R E   S E C T E U R  :
<
<
<        ARGUMENT :
<                    (Y)=ADRESSE SECTEUR,
<                    (W)=ADRESSE DEMANDE D'E/S DISQUE 'DKF'.
<
<
SP4:     EQU         $
<
< OPERATION DE LECTURE DU
< SECTEUR ARGUMENT (Y) :
<
         STY         ARGDEM+ASDEM    < ASDEM=@SECTEUR ARGUMENT (Y).
         STZ         ARGDEM+OPDEM    < MISE EN LECTURE DE DEMTRI.
         IF          FGR-K,,XEIF%,
         IF          ATTENTION : SI 'FGR' N'EST PAS NUL CE QUI PRECEDE,
         IF          EST STUPIDE (IL DOIT EN ETRE DE MEME AILLEURS) !!!
XEIF%:   VAL         ENDIF
SP4X4:   EQU         $               < ITERATION SUR ERREUR DE LECTURE NON
                                     < DETECTEE PAR 'ETADEM'...
         BSR         ACHAND          < ENVOI DE LA DEMANDE DE LECTURE
                                     < PRIORITAIRE.
         BSR         ACHANW          < ATTENTE DE FIN D'ECHANGE.
<
< VALIDATION DU SECTEUR LU :
<
         PSR         A,B,X,W         < SAUVEGARDES DIVERSES...
         BSR         VAR+ASP31       < RENVOIE :
                                     < (A)=(W)=ADRESSE DU BUFFER EN MEMOIRE,
         LA          XSAN+K,W        < (A,B)=LISTE D'OCCUPATION DES NOEUDS
         LB          XSAN+XLXSAN-Z,W <       DU SECTEUR COURANT,
         LX          XSNN,W
         LR          X,W             < (W)=NOMBRE DE NOEUDS LIBRES ; ON VA DONC
                                     <     VERIFIER QUE LE NOMBRE DE BITS A 1
                                     <     DANS (A,B) EST EGAL A (W)...
SP4X1:   EQU         $
         DBT                         < RECHERCHE DU NOEUD LIBRE COURANT :
         JC          SP4X2           < IL N'EXISTE PAS, ON ARRETE LE COMPTAGE...
         RBT         L,X             < IL EXISTE, ON L'EFFACE,
         ADRI        -I,W            < ET ON LE DECOMPTE...
         JMP         SP4X1           < ET AU SUIVANT...
SP4X2:   EQU         $
         CPZR        W               < A-T'ON TROUVE AUTANT DE BITS A 1 DANS
                                     < 'XSAN' QUE 'XSNN' L'INDIQUAIT ???
         PLR         A,B,X,W         < RESTAURATIONS...
         JE          SP4X3           < OUI, C'EST BON...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE :
<                      VERIFIER LE BUFFER COURANT, ET
<                    AUSSI LA PAGE DE MEMOIRE VIRTUELLE
<                    'DKA' ASSOCIEE ; VERIFIER QU'IL
<                    S'AGIT BIEN D'UN MORCEAU DE
<                    L'ARBRE... PUIS REITERER LA
<                    LECTURE !!!
<
         JMP         SP4X4           < ET ALLONS REFAIRE LA LECTURE...
                                     < (OU AUTRE CHOSE...)
SP4X3:   EQU         $
<
< GESTION DE 'LMAXSN' :
<
         BSR         VAR+ASP30       < MISE A JOUR DE LA LISTE 'LMAXSN'...
<
< ET RETOUR :
<
         RSR                         < ET RETOUR COMMUN A 'SP3' ET 'SP4'...
         PAGE
<
<
<        G E S T I O N   D E   L A   L I S T E   ' L M A X S N '  :
<
<
<        FONCTION :
<                      CETTE LISTE POSSEDE AUTANT D'ENTREES
<                    QU'IL EST POSSIBLE D'AVOIR DE NOEUDS
<                    LIBRES POUR UN SECTEUR NON SATURE ;
<                    DANS L'ENTREE DE RANG (X), ELLE MEMO-
<                    RISE LES 2 DERNIERS SECTEURS RENCONTRES
<                    POSSEDANT (X) NOEUDS LIBRES...
<                      ELLE EST MISE A JOUR APRES CHAQUE LECTURE
<                    OU INITIALISATION EN MEMOIRE D'UN
<                    SECTEUR, ET APRES CHAQUE MODIFICA-
<                    DU COMPTEUR 'XSNN' DU SECTEUR COURANT...
<
<
<        NOTA :
<                      LE SECTEUR COURANT LORSQU'IL
<                    EST PRESENT DANS LA LISTE 'LMAXSN',
<                    N'EST DEPLACE DE SA "CASE" COURANTE
<                    A L'UNE DES 2 VOISINNES (ANTERIEURE
<                    OU POSTERIEURE) QUE SI CELLES-CI
<                    DISPOSENT D'AU MOINS UNE ENTREE
<                    LIBRE ('INFINI'), ET CECI AFIN
<                    D'EVITER QUE LORS DE L'ALLOCATION
<                    DES NOEUDS D'UN NOM, UN MEME
<                    SECTEUR DESCENDE TOUT OU PARTIE
<                    DE 'LMAXSN', ECRASANT AINSI D'AUTRES
<                    SECTEURS QUI AURAIENT PU ETRE
<                    UTILES ULETERIEUREMENT. D'AUTRE
<                    PART, LE SECTEUR COURANT ETANT
<                    LE 'STC' ("LAPALISSADE"...),
<                    C'EST SON EXISTENCE QUE L'ON
<                    TESTE DANS 'CNTRI' AVANT DE
<                    CHERCHER UN NOUVEAU SECTEUR COURANT
<                    VIA 'LMAXSN', 'TOSA1', 'TOSA2'...
<                    CE N'EST DONC PAS GRAVE QU'IL NE
<                    SOIT PLUS DANS 'LMAXSN'...
<
<
<        ARGUMENT :
<                    (STC)=ADRESSE (ET NON PAS NUMERO RELATIF
<                          DANS L'ARBRE) DU SECTEUR COURANT.
<
<
<        RESULTATS :
<                      LES INDICATEURS SONT POSITIONNES PAR
<                    UN 'CPZ' SUR 'XSNN' AFIN D'ETRE COMPATI-
<                    BLE AVEC LE CODE SUIVANT LES 'IC'/'DC' SUR
<                    'XSNN'...
<
<
SP30:    EQU         $
         PSR         A,B,X,Y         < SAUVEGARDES ESSENTIELLES...
         PSR         W
         BSR         VAR+ASP31       < (A)=(W)=ADRESSE DU BUFFER DU SECTEUR
                                     <         COURANT EN MEMOIRE.
<
< RECHERCHE DU SECTEUR COURANT :
<
         LXI         X26             < (X)=INDEX DE 'LMAXSN',
                                     <    =NOMBRE DE NOEUDS LIBRES CONTENUS
                                     <     DANS LE SECTEUR DESIGNE PAR L'ENTREE
                                     <     COURANTE.
         LY          VAR+STC         < (Y)=ADRESSE DU SECTEUR COURANT,
SP301:   EQU         $
         BSR         VAR+ASP32       < A-T'ON TROUVE LE SECTEUR COURANT ???
         JE          SP302           < OUI, ALLONS LE RETIRER...
         JDX         SP301           < NON, AU PRECEDENT...
<
< INSERTION (SI PAS TROUVE CI-DESSUS),
< OU RE-INSERTION A LA BONNE PLACE S'IL
< FUT RENCONTRE PRECEDEMMENT :
<
SP303:   EQU         $
         LX          XSNN,W          < (X)=NOMBRE DE NOEUDS LIBRES DU SECTEUR
                                     <     COURANT ; IL VA SERVIR D'INDEX DE
                                     <     MISE A JOUR DE 'LMAXSN'...
         LR          X,A             < (A)=NOMBRE DE NOEUDS LIBRES COURANT...
         JAGE        SP305           < OK, CE NOMBRE EST VALIDE...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      VOIR COMMENT LE NOMBRE DE NOEUDS
<                    LIBRES PEUT ETRE NEGATIF !!!
<
         JMP         SP304           < ET ON SAUTE LA MISE A JOUR...
SP305:   EQU         $
         CP          VAR+MINX26      < LE SECTEUR COURANT EST-IL AU PLANCHER ???
         JLE         SP304           < OUI, ON NE L'INSERE PAS...
         LA          &VAR+ALMXS1     < (A,B)=ENTREE COURANTE DE LA LISTE,
         LB          &VAR+ALMXS2
         BSR         VAR+ASP32       < LE SECTEUR COURANT (Y) EST-IL LA ???
         JE          SP304           < OUI IL ETAIT DEJA LA (DANS 'A' OU DANS
                                     < 'B' MIS DANS 'A'...), DONC RIEN A FAIRE.
         JAL         SP308           < NON, LE SECTEUR COURANT N'ETAIT PAS LA,
                                     < ET 'A' EST LIBRE DANS L'ENTREE COURANTE.
         XR          A,B             < LE SECTEUR COURANT N'ETAIT PAS LA, ET
                                     < 'A' N'ETAIT PAS LIBRE, ET ON VA ALORS
                                     < EXAMINER 'B' :
         JAGE        SP304           < 'B' EST DEJA OCCUPE : ON N'INSERE DONC
                                     < PAS LE SECTEUR COURANT (Y) AFIN D'EVITER
                                     < QUE LORS DE L'INSERTION DES NOEUDS D'UN
                                     < NOM, UN MEME SECTEUR SE METTE A DESCEN-
                                     < DRE 'LMAXSN', ET AINSI ELIMINER TOUT
                                     < UN TAS D'AUTRES SECTEURS...
SP308:   EQU         $
         LR          Y,A             < LE SECTEUR COURANT (Y) EST MIS DANS 'A'
                                     < LIBRE, OU BIEN DANS L'ANCIEN 'B' LIBRE...
         STA         &VAR+ALMXS1     < ET ON MEMORISE AINSI LE DERNIER SECTEUR
         STB         &VAR+ALMXS2     < RENCONTRE POSSEDANT (X) NOEUDS LIBRES ;
                                     < A NOTER QUE C'EST L'ADRESSE ET NON LE
                                     < NUMERO DE SECTEURS QUI EST INSERE...
<
< RETOUR :
<
SP304:   EQU         $
         CPZ         XSNN,W          < POUR LA COMPATIBILITE AVEC LES EVENTUELS
                                     < 'IC'/'DC' QUI PRECEDENT L'APPEL A 'SP30'.
         PLR         W
         PLR         A,B,X,Y         < RESTAURATIONS,
         RSR                         < ET RETOUR...
<
< SUPPRESSION DU SECTEUR COURANT
< LORSQU'IL FIGURE ANTERIEUREMENT
< DANS 'LMAXSN' :
<
SP302:   EQU         $
         LA          INFINI          < EN EFFET, 'SP32' A TROUVE LE SECTEUR
                                     < COURANT (Y) SOIT DIRECTEMENT DANS 'A',
                                     < SOIT DANS 'B', ET ALORS A PERMUTE 'A'
                                     < ET 'B'...
         STA         &VAR+ALMXS1     < ET VOILA, ON MET A LA PLACE DU SECTEUR
         STB         &VAR+ALMXS2     < COURANT 'Q8000'...
         IF          Q8000-K,XEIF%,,
         IF          ATTENTION : LES TESTS QUI SERONT FAITS
         IF          SUR L'OCCUPATION DE 'LMAXSN' MERDERONT !!!
XEIF%:   VAL         ENDIF
<
< QUELQUES VALIDATIONS DE CETTE METHODE :
<
XWOR%1:  VAL         +I
XWOR%2:  VAL         -I
         IF          XWOR%1-XWOR%2/XXXMOY-XWOR%1,,XEIF%,
         IF          ATTENTION : LES TESTS SUIVANTS VONT MERDER !!!
XEIF%:   VAL         ENDIF
         IF          XWOR%1+XWOR%2/XXXMOY,,XEIF%,
         IF          ATTENTION : LES TESTS SUIVANTS VONT MERDER !!!
XEIF%:   VAL         ENDIF
         LA          XSNN,W          < (A)=NOMBRE DE NOEUDS LIBRES COURANTS,
         SBR         X,A             < (A)=VARIATION DU NOEUDS LIBRES COURANTS=
                                     <    =NOMBRE DE NOEUDS LIBRES COURANTS-
                                     <     NOMBRE DE NOEUDS LIBRES ANTERIEURS.
         CPI         XWOR%1          < VALIDATION SUPERIEURE...
         JG          SP306           < TROP GRANDE, ERREUR...
         CPI         XWOR%2          < VALIDATION INFERIEURE...
         JGE         SP307           < OK, (A)>=XWOR%2 OU (A)<=XWOR%1...
SP306:   EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ALLER VOIR LE SECTEUR COURANT ET
<                    SON BUFFER, VOIR SA VERSION COURANTE
<                    EN MEMOIRE VIRTUELLE 'DKA' ET SUR LE
<                    DISQUE 'DKF'...
<
SP307:   EQU         $
         JMP         SP303           < VERS LA RE-INSERTION DU SECTEUR COURANT
                                     < DANS L'ENTREE DE RANG 'XSNN' DE LA
                                     < LISTE 'LMAXSN'...
         PAGE
<
<
<        R E C H E R C H E   D U   S E C T E U R   C O U R A N T
<        D A N S   L ' E N T R E E   C O U R A N T E   D E   L A
<                    L I S T E   ' L M A X S N '  :
<
<
<        ARGUMENTS :
<                    (X)=INDEX COURANT DE LA LISTE,
<                    (Y)=SECTEUR COURANT 'STC'.
<
<
<        RESULTATS :
<                    (A,B)=ENTREE COURANTE DE LA LISTE 'LMAXSN'
<                          AVEC UNE PERMUTATION DES 2 MOTS SI
<                          LE PREMIER NE CONTENAIT PAS LE SECTEUR
<                          COURANT INITIALEMENT.
<                    LES INDICATEURS SONT POSITIONNES SUR 'JE TROUVE'...
<
<
SP32:    EQU         $
         LA          &VAR+ALMXS1     < (A,B)=ENTREE COURANTE,
         LB          &VAR+ALMXS2
         CPR         Y,A             < LE SECTEUR COURANT EST-IL DANS LE
                                     < PREMIER MOT ???
         JE          SP321           < OUI...
         XR          A,B             < NON, ON PERMUTE ALORS SYSTEMATIQUEMENT
                                     < LES 2 MOTS, QUELQUE SOIT LE RESULTAT DU
                                     < TEST SUIVANT...
         CPR         Y,A             < LE SECTEUR COURANT EST-IL DANS L'ANCIEN
                                     < DEUXIEME MOT ???
SP321:   EQU         $
         RSR                         < RETOUR, AVEC (A)=SECTEUR COURANT SI
                                     < L'UN DES 2 TESTS A ETE POSITIF...
         PAGE
<
<
<        R E C U P E R A T I O N   D E   L ' A D R E S S E
<        D U   B U F F E R   D U   S E C T E U R   C O U R A N T  :
<
<
<        RESULTAT :
<                    (A)=(W)=ADRESSE DU BUFFER DU SECTEUR COURANT.
<
<
SP31:    EQU         $
         LA          VAR+ABSTC       < (A)=ADRESSE DU BUFFER...
         LR          A,W             < (W)=ADRESSE DU BUFFER DU SECTEUR...
         RSR                         < FACILE ?!??!?!
         PAGE
<
<
<        T E S T   D ' E N T I E R E   L I B E R T E
<                    D ' U N   S E C T E U R  :
<
<
<        ARGUMENT :
<                    (X)=NUMERO DU SECTEUR (K A NSTREE-Z).
<
<
<        RESULTAT :
<                    CARY POUR JC/JNC.
<
<
SP5:     EQU         $
         PSR         Y
         LAD         VAR+ATOSA1      < (A)=@DU RELAI VERS TOSA1-1.
         LYI         FONTB           < FONCTION DE TEST BIT.
         BSR         ATMOBT          < TEST DE L'ETAT DU SECTEUR (X)
                                     < DANS TOSA1.
         PLR         Y
         RSR
         PAGE
<
<
<        D E L E T E   N O E U D  :
<
<
<        ARGUMENT :
<                    NUM=NUMERO DU NOEUD A DELETER.
<
<
DNTRI:   EQU         $
         PSR         X,Y
         BSR         VAR+AASP1
<
<        ON A ICI :
<                    (X)=NUMERO DU SECTEUR AUQUEL APPARTIENT LE NOEUD,
<                    (Y)=ADRESSE DE CE SECTEUR.
<
         JE          Z10             < LE SECTEUR AUQUEL APPARTIENT LE
                                     < NOEUD A DELETER EST LE SECTEUR
                                     < COURANT.
<
< CAS OU LE SECTEUR AUQUEL APPARTIENT LE NOEUD
< A DELETER N'EST PAS LE SECTEUR COURANT :
<
<
< REECRITURE EVENTUELLE DE STC :
<
         BSR         VAR+ASP2
<
<        ON A ICI :
<                    (W)=ADRESSE DEMANDE D'E/S SUR 'DKF'.
<
         STY         VAR+STC         < NOUVEAU SECTEUR COURANT (Y).
         BSR         VAR+ASP5        < TEST DE L'ETAT DU NOUVEAU SECTEUR
                                     < COURANT (DE NUMERO (X)).
         JNC         SYSR8A          < OK, IL EXISTE SUR DISQUE.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      JE NE SAIS PAS, MAIS ATTENTION,
<                    SI ON CONTINUE EN SEQUENCE, ON RISQUE
<                    DE LIRE UN SECTEUR N'APPARTENANT PAS
<                    A LA L'ARBRE, ET DONC DE SE PERDRE
<                    COMPLETEMENT...
<
SYSR8A:  EQU         $
<
< LECTURE DU NOUVEAU SECTEUR COURANT :
<
         BSR         VAR+ASP4
Z10:     EQU         $
         BSR         VAR+ASP31       < RENVOIE :
                                     < (A)=(W)=ADRESSE DU SECTEUR COURANT DANS
                                     <         SON BUFFER EN MEMOIRE.
         IC          XSNN,W          < ET UN NOEUD LIBRE DE PLUS.
         BSR         VAR+ASP30       < MISE A JOUR DE LA LISTE 'LMAXSN'...
         LYI         FONSB           < 'SET BIT A 1 SANS VERIF.'.
         LA          XSNN,W
         CPI         X26             < MAINTENANT, LE SECTEUR EST-IL
                                     < ENTIEREMENT LIBRE ????
         JL          Z12             < NON.
         JE          SYSR8B          < OUI.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ETRE PRUDENT...
<
SYSR8B:  EQU         $
<
< LIBERATION D'UN SECTEUR ENTIEREMENT LIBRE :
<
         LAD         VAR+ATOSA1
         BSR         ATMOBT
Z12:     EQU         $
<
< MEMORISONS QUE LE SECTEUR COURANT EST
< PARTIELLEMENT LIBRE :
<
         LAD         VAR+ATOSA2
<
<        ON A ICI :
<                    (Y)=5 : FONCTION 'SET BIT A 1 SANS VERIF.'.
<
         BSR         ATMOBT
<
< NETTOYAGE, ET LIBERATION
< DU NOEUD DANS LE SECTEUR :
<
         LA          VAR+NUM
         ANDI        MKNE            < (A)=NUMERO DU NOEUD DELETE DANS
                                     <     LE SECTEUR.
         CPI         X26             < VALIDATION.
         JL          SYSR8C          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ETRE PRUDENT...
<
SYSR8C:  EQU         $
         LR          A,X             < (X)=NUMERO DU NOEUD DANS LE SECTEUR.
         PSR         W               < SAUVEGARDES...
         ADRI        XSLN,W
         ADR         A,W
         ADR         A,A
         ADR         A,W
         ADR         A,W             < (W)=ADRESSE DU NOEUD EN MEMOIRE,
         IF          LOXNE-5,,XEIF%,
         IF          ATTENTION : LA SEQUENCE PRECEDENTE EST FAUSSE !!!
XEIF%:   VAL         ENDIF
         LA          INFINI          < 'INFINI' EST LA VALEUR DE NETTOYAGE...
         STA         RELATS,W        < CHAINAGE 'SERIE',
         STA         RELATP,W        < CHAINAGE 'PARALLELE',
         STA         RELATB,W        < CHAINAGE 'ARRIERE',
         STA         XNEV0,W         < ET CHAINE
         STA         XNEV1,W         <           DE CARACTERES...
         PLR         W               < ET RESTAURATIONS...
         LA          XSAN+K,W
         LB          XSAN+XLXSAN-Z,W < (A,B)=TABLE D'OCCUPATION DES
                                     <       NOEUDS DU SECTEUR.
         TBT         L,X             < VALIDATION DE L'OPERATION...
         JNC         SYSR8D          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ETRE PRUDENT...
<
SYSR8D:  EQU         $
         SBT         L,X             < LIBERATION DU NOEUD DANS LE
                                     < SECTEUR COURANT.
         STA         XSAN+K,W
         STB         XSAN+XLXSAN-Z,W < MAJ DE LA TABLE D'OCCUPATION
                                     < DU SECTEUR COURANT.
         IF          XLXSAN-2,,XEIF%,
         IF          ATTENTION : CE QUI PRECEDE EST IDIOT !!!
XEIF%:   VAL         ENDIF
         IC          VAR+NTONSL      < ET UN NOEUD LIBRE DE PLUS...
         PLR         X,Y
         STZ         VAR+CT          < RETOUR OK.
         RSR
         PAGE
<
<
<        A C C E S   N O E U D  :
<
<
<        ARGUMENT :
<                    NUM=NUMERO DU NOEUD.
<
<
<        RESULTAT :
<                    (W)=ADRESSE NOEUD EN MEMOIRE.
<
<
ANTRI:   EQU         $
         PSR         X,Y
         BSR         VAR+AASP1
<
<        ON A ICI :
<                    (X)=NUMERO DU SECTEUR AUQUEL APPARTIENT LE NOEUD
<                        A ACCEDER,
<                    (Y)=ADRESSE DE CE SECTEUR.
<
         JE          Z1              < LE SECTEUR AUQUEL APPARTIENT LE
                                     < NOEUD DEMANDE EST LE SECTEUR
                                     < COURANT.
<
< CAS OU LE SECTEUR AUQUEL APPARTIENT LE NOEUD
< DEMANDE N'EST PAS LE SECTEUR COURANT :
<
         BSR         VAR+ASP2        < REECRITURE EVENTUELLE DU
                                     < SECTEUR COURANT.
<
<        ON A ICI :
<                    (W)=ADRESSE DEMANDE D'E/S SUR 'DKF'.
<
         STY         VAR+STC         < NOUVEAU SECTEUR COURANT (Y).
         BSR         VAR+ASP5        < TEST DE L'ETAT DU NOUVEAU
                                     < SECTEUR COURANT.
         JC          Z3              < LE NOUVEAU SECTEUR COURANT
                                     < N'EXISTE PAS SUR DISQUE,
                                     < ALLONS L'INITIALISER EN MEMOIRE.
         BSR         VAR+ASP4        < LECTURE DU SECTEUR COURANT,
                                     < LORSQU'IL EXISTE SUR DK (CAS
                                     < GENERAL).
<
< CALCUL DE L'@MEMOIRE DU NOEUD :
<
Z1:      EQU         $
         BSR         VAR+ASP31       < RENVOIE :
                                     < (A)=(W)=ADRESSE DU BUFFER DU SECTEUR
                                     <         COURANT EN MEMOIRE.
Z14:     EQU         $
         LA          VAR+NUM         < (A)=NUMERO DU NOEUD DEMANDE.
         ANDI        MKNE            < (A)=NUMERO DU NOEUD DEMANDE
                                     <     DANS LE SECTEUR COURANT.
         CPI         X26             < VALIDATION DE CE NUMERO.
         JL          SYSR8E          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ETRE PRUDENT, CAR ON RISQUE AVEC
<                    UN MAUVAIS NUMERO DE SE PERDRE...
<
SYSR8E:  EQU         $
         LR          A,X             < (X)=NUMERO DU NOEUD DEMANDE
                                     <     DANS LE SECTEUR COURANT.
         LA          XSAN+K,W
         LB          XSAN+XLXSAN-Z,W < (A,B)=TABLE D'OCCUPATION DES
                                     <       NOEUDS DU SECTEUR COURANT.
         TBT         L,X             < TEST DU NOEUD DEMANDE.
         JNC         SYSR8F          < OK, IL EST OCCUPE.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ETRE PRUDENT, CAR ON RISQUE
<                    SI ON CONTINUE EN SEQUENCE D'ACCEDER
<                    A UN NOEUD INEXISTANT, ET DONC A DE
<                    MAUVAIS CHAINAGES...
<
SYSR8F:  EQU         $
Z9:      EQU         $
         ADRI        XSLN,W          < (W)=@DU 1ER NOEUD DU SECTEUR
                                     <     COURANT EN MEMOIRE.
         ADR         X,W             < (W)=W+NUMERO.
         ADR         X,X             < (X)=2*NUMERO.
         ADR         X,W             < (W)=W+3*NUMERO.
         ADR         X,W             < (W)=W+5*NUMERO=@DU NOEUD
                                     <     DEMANDE EN MEMOIRE.
         IF          LOXNE-5,,XEIF%,
         IF          ATTENTION : LES 'ADR' QUI PRECEDENT SONT FAUX !!!
XEIF%:   VAL         ENDIF
         PLR         X,Y
         STZ         VAR+CT          < RETOUR OK.
         RSR
<
< INITIALISATION EN MEMOIRE D'UN SECTEUR INEXISTANT :
< (CAS DE LA RACINE, OU D'UN SECTEUR
< ENTIEREMENT LIBRE).
<
Z3:      EQU         $
<
<        ON A ICI :
<                    (A)=ADRESSE DE 'ATOSA1'.
<
         BSR         VAR+ASP3        < INITIALISATION.
         JMP         Z14             < VERS LE CALCUL DE L'@MEMOIRE DU
                                     < NOEUD DEMANDE.
         PAGE
<
<
<        C R E A T I O N   D ' U N   N O E U D  :
<
<
<        RESULTAT :
<                    NUM=NUMERO DU NOEUD CREE,
<                    (W)=ADRESSE EN MEMOIRE DU NOEUD CREE.
<
<
CNTRI:   EQU         $
         PSR         X,Y
         DC          VAR+NTONSL      < ET UN NOEUD LIBRE DE MOINS...
         JNE         Z6XX            < OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      VOIR POURQUOI ON EST ARRIVE LA,
<                    ALORS QUE 'HDLSTN' TESTE LE NOMBRE
<                    DE NOEUDS LIBRES, ET POSSEDE UN SEUIL !!!
<
Z6XX:    EQU         $
         BSR         VAR+ASP31       < RENVOIE :
                                     < (A)=(W)=ADRESSE DU BUFFER DU SECTEUR
                                     <         COURANT.
         LA          VAR+STC         < (A)=@SECTEUR COURANT.
         IF          Q8000-K,XEIF%,,
         IF          ATTENTION : LA VALEUR INITIALE DE 'STC' EST
         IF          INCOMPATIBLE AVEC LE TEST 'JAL' !!!
XEIF%:   VAL         ENDIF
         JAL         Z6              < LE SECTEUR COURANT N'EXISTE PAS :
                                     < INITIALISATION DU SYSTEME.
<
< CAS OU IL Y A UN SECTEUR COURANT :
<
         LR          A,Y             < (Y)=@SECTEUR COURANT SUR DISQUE.
                                     < A T T E N T I O N  : JE LAISSE CE 'LR'
                                     < PARCE QUE JE N'OSE PAS L'ENLEVER, MAIS IL
                                     < ME SEMBLE QU'IL NE SERT A RIEN !!!
         SB          VAR+TAS
         JAGE        SYSR8G          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ETRE PRUDENT, CAR ON RISQUE DE
<                    SE PERDRE COMPLETEMENT...
<
SYSR8G:  EQU         $
         LR          A,X             < (X)=NUMERO DU SECTEUR COURANT.
<
< TEST DE L'ETAT DU SECTEUR COURANT :
<
         LA          XSNN,W          < (A)=NBRE DE NOEUDS LIBRES DANS LE
                                     <     SECTEUR COURANT.
         JANE        Z53             < IL RESTE DE LA PLACE DANS LE
                                     < SECTEUR COURANT.
<
< CAS OU LE SECTEUR COURANT EST PLEIN :
<
         LYI         FONRB           < FONCTION 'RESET A 0 SANS VERIF.'
                                     < A T T E N T I O N  : DESTRUCTION
                                     < DE (Y)=@SECTEUR COURANT.
         LAD         VAR+ATOSA2
         BSR         ATMOBT          < MEMORISONS QUE LE SECTEUR
                                     < COURANT DE NUMERO (X) EST
                                     < ENTIEREMENT OCCUPE.
<
< REECRITURE EVENTUELLE DU SECTEUR COURANT :
<
         BSR         VAR+ASP2        < REECRITURE EVENTUELLE DU
                                     < SECTEUR COURANT.
<
<        ON A ICI :
<                    (W)=ADRESSE DEMANDE D'E/S SUR 'DKF'.
<
<
<        E X P L O R A T I O N   D E   ' L M A X S N '  :
<
         LXI         X26             < (X)=INDEX DE 'LMAXSN',
                                     <    =NOMBRE DE NOEUDS LIBRES CONTENUS
                                     <     DANS LE SECTEUR DESIGNE PAR L'ENTREE
                                     <     DE RANG (X)...
Z6X1:    EQU         $
         PSR         B               < ON N'EST JAMAIS ASSEZ PRUDENT...
         LA          &VAR+ALMXS1     < (A,B)=ADRESSE D'AU PLUS 2 SECTEURS CON-
         LB          &VAR+ALMXS2     <       TENANT (X) NOEUDS LIBRES, EN COMMEN
                                     <       CANT PAR CEUX QUI EN ONT LE PLUS...
         JAGE        Z6X2            < OK, LE PREMIER MOT CONTIENT UN SECTEUR
                                     < INTERESSANT...
         LR          B,A             < LE PREMIER MOT ETANT LIBRE, EXAMINONS
                                     < LE SECOND :
Z6X2:    EQU         $
         PLR         B               < (RESTAURONS 'B' AU PREALABLE...)
         JAGE        Z1092A          < ON S'ARRETE SUR LE PREMIER RENCONTRE...
                                     < (PREMIER MOT, OU BIEN LE DEUXIEME
                                     < PERMUTE AVEC LE PREMIER...).
         JDX         Z6X1            < PROGRESSONS VERS CEUX QUI EN ONT DE
                                     < MOINS EN MOINS...
<
<        R E C H E R C H E   D ' U N   S E C T E U R
<        ( P A R T I E L L E M E N T )   L I B R E  :
<
Z6:      EQU         $
         LX          VAR+XTOSA2      < (X)=INDEX INITIAL COURANT DE TOSA2.
         JDX         Z1091           < DECREMENTATION ET TEST DE
                                     < L'2NDEX INITIAL DE TOSA2.
<
< REINITIALISATION DE L'INDEX INITIAL COURANT DE TOSA2 :
<
Z1090:   EQU         $
         LXI         X25             < VALEUR INITIALE DE L'INDEX
                                     < INITIAL DE TOSA2.
<
< RECHERCHE D'UN SECTEUR :
<
Z1091:   EQU         $
         STX         VAR+XTOSA2      < MAJ DE L'INDEX INITIAL COURANT.
         LAD         VAR+ATOSA2      < (A)=@REALI INDEXE VERS TOSA2.
         BSR         ASOBT           < RECHERCHE D'1N SECTEUR PARTIEL-
                                     < LEMENT LIBRE DANS TOSA2, ET
                                     < A T T E N T I O N  : RAZ DU
                                     < BIT CORRESPONDANT A CE SECTEUR
                                     < DANS TOSA2 (SI CE SECTEUR
                                     < EXISTE !!!) ; CE NUMERO DE SECTEUR EST
                                     < RENVOYE DANS 'A'...
         JNE         Z1092           < OK, SECTEUR TROUVE !!!
<
< CAS OU L'ON N'A PAS TROUVE DE SECTEUR :
<
         LA          VAR+XTOSA2      < POUR TEST DE XTOSA2.
         CPI         X25             < LA TABLE TOSA2 VIENT-ELLE
                                     < D'ETRE PARCOURUE EN ENTIER ???
         JL          Z1090           < NON, IL FAUT DONC REPRENDRE
                                     < LA RECHERCHE SUR LA TABLE
                                     < ENTIERE (EN REINITIALISANT
                                     < L'INDEX INITIAL XTOSA2).
         BSR         ASYSER          < P L U S   D E   P L A C E !??!??!???
                                     < D A N S   L ' A R B R E   !!!!
<
<        QUE FAIRE ???
<                      PAS GRAND CHOSE, PUISQUE L'ARBRE
<                    EST SATURE ; A NOTER QUE LA SITUATION
<                    EST CRITIQUE... IL FAUT DONC REUSSIR
<                    A SORTIR EN ERREUR DE 'HDLTRI', DELETER
<                    DES NOMS DANS L'ARBRE, PUIS MODIFIER
<                    LE SYSTEME, POUR AUGMENTER SA CAPACITE
<                    CE QUI PEUT-ETRE DELICAT ETANT DONNE
<                    LA CAPACITE LIMITEE DE 'DKF'...
<
<
< CAS OU ON A TROUVE UN SECTEUR DE NUMERO (A) :
<
Z1092:   EQU         $
<
<        ON A ICI :
<                    (A)=NUMERO DU SECTEUR PARTIELLEMENT LIBRE TROUVE.
<
         LR          A,X             < (X)=NUMERO DU SECTEUR TROUVE.
         AD          VAR+TAS
         LR          A,Y             < (Y)=@SECTEUR TROUVE.
         STA         VAR+STC         < @NOUVEAU SECTEUR COURANT.
         BSR         VAR+ASP5        < TEST DE L'ETAT DU NOUVEAU
                                     < SECTEUR COURANT.
         JC          Z7              < IL EST ENTIEREMENT LIBRE,
                                     < ALLONS L'INITIALISER EN MEMOIRE.
<
< LECTURE DU NOUVEAU SECTEUR COURANT :
<
         BSR         VAR+ASP4
         BSR         VAR+ASP31       < RENVOIE :
                                     < (A)=(W)=ADRESSE DU BUFFER DU SECTEUR
                                     <         COURANT EN MEMOIRE.
Z13:     EQU         $
         DC          XSNN,W          < ET UN NOEUD LIBRE DE MOINS
                                     < DANS LE SECTEUR COURANT.
         BSR         VAR+ASP30       < GESTION DE LA LISTE 'LMAXSN'...
         JE          Z8              < IL N'Y A PLUS DE NOEUDS LIBRES
                                     < DANS LE SECTEUR COURANT, ON
                                     < LAISSE DONC LE BIT CORRESPONDANT
                                     < DE TOSA2 A 0.
         JG          Z45X            < OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      EN FAIT CE CAS PEUT SE RENCONTRER A LA SUITE
<                    D'UNE ERREUR DE LECTURE SUR 'DKF', AUQUEL CAS
<                    LE BUFFER A ETE FORCE A Q8000 ; IL FAUT DONC
<                    VERIFIER QU'ON SE TROUVE BIEN DANS CETTE SITUATION...
<
         LAD         VAR+DEMTRI
         LR          A,W             < REINITIALISATION DE 'W' SUR LA DEMANDE
                                     < D'ENTREE-SORTIE DISQUE 'DKA'...
         JMP         Z6              < ET ON VA CHERCHER UN NOUVEAU SECTEUR ;
                                     < A NOTER QUE CELUI QUI VIENT D'ETRE DECOU-
                                     < VERT EN ERREUR, RESTE A 0 DANS 'TOSA2'
                                     < CE QUI EST TRES BIEN, AINSI ON NE
                                     < L'ALLOUERA PLUS !!!
<
< CAS OU ON A TROUVE UN SECTEUR
< A UTILISER PAR 'LMAXSN' ET NON
< PAS PAR 'TOSA2' :
<
Z1092A:  EQU         $
         SB          VAR+TAS         < PAR COMPATIBILITE AVEC LA GESTION PAR
                                     < 'TOSA2', ON CONVERTIT L'ADRESSE SECTEUR
                                     < EN UN NUMERO DE SECTEUR RELATIF A LA
                                     < RACINE DE L'ARBRE DANS 'A',
         PSR         A,X,Y
         LR          A,X             < (X)=NUMERO DU SECTEUR TROUVE,
         LYI         FONRB           < (Y)=FONCTION 'RESET BIT SANS VERIF',
         LAD         VAR+ATOSA2      < (A)=ADRESSE DU RELAI VERS 'TOSA2',
         BSR         ATMOBT          < ET ON ETABLIT LA COMPATIBILITE AVEC LA
                                     < RECHERCHE PAR 'TOSA2' EN CLEARANT LE
                                     < BIT CORRESPONDANT AU SECTEUR TROUVE
                                     < COMME L'AURAIT FAIT 'SOBT'...
         PLR         A,X,Y
         JMP         Z1092           < ET ON FAIT COMME SI ON L'AVAIT TROUVE
                                     < PAR EXPLOITATION DE 'TOS2'...
Z45X:    EQU         $
<
< CAS OU LE SECTEUR COURANT N'EST PAS PLEIN
< APRES CETTE ALLOCATION, ON REMET A 1
< LE BIT CORRESPONDANT DE TOSA2 :
<
Z45:     EQU         $
         LYI         FONSB           < FONCTION 'SET BIT A 1
                                     < SANS VERIF', MAIS ATTENTION
                                     < DESTRUCTION DE Y.
Z54:     EQU         $
         LAD         VAR+ATOSA2
         BSR         ATMOBT          < LE SECTEUR COURANT EST PARTIEL-
                                     < LEMENT LIBRE OU ENTIEREMENT
                                     < OCCUPE.!!??!?!!..
Z8:      EQU         $
         LR          X,Y             < (Y)=NUMERO DU SECTEUR COURANT.
         LA          XSAN+K,W
         LB          XSAN+XLXSAN-Z,W < (A,B)=TABLE D'OCCUPATION DU
         IF          XSNN-XSAN-2,,XEIF%,
         IF          ATTENTION : LA TABLE D'OCCUPATION TIENT
         IF          BIZARREMENT DANS (A,B) !!!
XEIF%:   VAL         ENDIF
                                     < SECTEUR COURANT.
         DBT                         < RECHERCHE DU 1ER NOEUD LIBRE (X).
         JNC         SYSR8H          < OK, IL EXISTE.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ATTENTION, CAR SI ON CONTINUE EN
<                    SEQUENCE, ON VA ALLOUER UN NOEUD
<                    INEXISTANT... IL FAUT DONC COMPRENDRE
<                    LES RAISONS DE CETTE SITUATION...
<
SYSR8H:  EQU         $
         RBT         L,X             < OCCUPATION DU NOEUD (X).
         STA         XSAN+K,W
         STB         XSAN+XLXSAN-Z,W < MAJ DE LA TABLE D'OCCUPATION
                                     < DU SECTEUR COURANT.
         LR          X,A
         CPI         X26             < VALIDATION DU NUMERO DU NOEUD.
         JL          SYSR8I          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      MEME REMARQUE QU'A LA 'SYSER' PRECEDENTE...
<
SYSR8I:  EQU         $
<
< GENERATION DU NUMERO DU NOEUD COURANT :
<
         LR          Y,A             < (A)=NUMERO DU SECTEUR.
         SLLS        MKNE)MFFFF=K    < CADRAGE CORRECT.
         ADR         X,A             < (X)=NUMERO DU NOEUD DANS LE SECTEUR.
         STA         VAR+NUM         < RENVOI DU NUMERO DU NOEUD.
         JMP         Z9              < VERS LE CALCUL DE L'@ DU
                                     < NOEUD CREE EN MEMOIRE.
<
< CAS OU LE SECTEUR COURANT EST ENTIEREMENT
< LIBRE : INITIALISATION EN MEMOIRE :
<
Z7:      EQU         $
<
<        ON A ICI :
<                    (A)=ADRESSE DE 'ATOSA1'.
<
         BSR         VAR+ASP3        < INITIALISATION EN MEMOIRE DU
                                     < SECTEUR COURANT.
         JMP         Z13
<
< CAS OU LE SECTEUR COURANT N'ETAIT PAS
< PLEIN A L'ENTREE DE 'CNTRI' :
<
Z53:     EQU         $
         DC          XSNN,W          < ET UN NOEUD DE MOINS !!!!
         BSR         VAR+ASP30       < GESTION DE LA LISTE 'LMAXSN'...
         JNE         Z45             < IL EN RESTE AU MOINS 1, PAR
                                     < PRUDENCE ON REMET LE BIT
                                     < ASSOCIE DANS TOSA2 A 1.
         LYI         FONRB           < DANS LE CAS, OU ON A PRIS LE
                                     < DERNIER NOEUD LIBRE, ON MET
                                     < LE BIT ASSOCIE DE TOSA2 A 0,
                                     < POUR MEMORISER L'ENTIERE
                                     < OCCUPATION DU SECTEUR COURANT.
         JMP         Z54             < VERS L'ENTIERE OCCUPATION...
         CALL        #SISP CMS5 CHECK#
         CALL        #SISP CMS5 DOL1#
         PAGE
<
<
<        F O R M A T   1 E R   S E C T E U R  :
<        S E C T E U R - M A P  :
<
<
         DSEC        SECMAP
MSVAL:   EQU         $               < ORIGINE DU SECTEUR-MAP.
<
< BLOC DE CONTROLE DU SECTEUR-MAP :
<
MSIND:   EQU         $               < ORIGINE DU BLOC DE CONTROLE.
SIND::   MOT         $-MSVAL         < ORIGINE DU BLOC DE CONTROLE.
SINDL::  MOT         $-MSIND         < LONGUEUR EN OCTETS DE LA VALEUR ;
                                     < CE MOT EST MODIFIABLE PAR LES
                                     < HANDLERS DU SGN LORS D'UNE
                                     < DEMANDE SERVICE ; IL PEUT ETRE
                                     < RAMENE A LA LONGUEUR DEMANDEE,
                                     < SI CELLE-CI EST INFERIEURE A
                                     < LA LONGUEUR REELLE.
         WORD        NILK            < LONGUEUR OCTETS DE LA VALEUR.
                                     < (MODIFIABLE !!!)
SINDLS:: MOT         $-MSIND         < NBRE DE SECTEURS OCCUPES PAR
                                     < LA VALEUR, Y COMPRIS LE
                                     < SECTEUR-MAP.
         WORD        NILK            < NBRE DE SECTEURS OCCUPES
                                     < PAR LA VALEUR.
SINDLO:: MOT         $-MSIND         < LONGUEUR EN OCTETS REELLEMENT
                                     < OCCUPEES PAR LA VALEUR ; A LA
                                     < DIFFERENCE DE 'SINDL', CE MOT
                                     < EST INVIOLABLE PAR LES HANDLERS
                                     < DU SGN, ET PERMET DONC LE
                                     < RENVOI PAR L'EVENTUELLE BOX
                                     < DE LA DEMANDE COURANTE DE LA
                                     < LONGUEUR REELLE DE LA VALEUR
                                     < DEMANDEE !!!
         WORD        NILK            < LONGUEUR OCTETS REELLE DE LA
                                     < VALEUR (INVIOLABLE !!!).
SINDPI:: MOT         $-MSIND         < FRONTIERE OCTET DE LA VALEUR :
         WORD        NILK            < PAIRE OU IMPAIRE ???
                                     < CE MOT EST POSITIONNE LORS D'UN 'STORE'
                                     < AVEC LES INDICATEURS SUIVANTS :
                                     < OCTET0    : 'AA,
                                     < BITS 8-14 : 0...0,
                                     < BIT 15    : 0, SI FRONTIERE PAIRE,
                                     <           : 1, SI FRONTIERE IMPAIRE.
                                     < LORS D'UN 'LOAD', ON VA DONC RECONTRER
                                     < 4 (2*2) CAS DIFFERENTS :
                                     <
                                     < 1 - PAIRE AU 'STORE' ET PAIRE AU 'LOAD' :
                                     < PAS DE PROBLEMES, OK...
                                     <
                                     < 2 - IMPAIRE AU 'STORE' ET IMPAIRE AU
                                     < 'LOAD' : PAS DE PROBLEMES, OK...
                                     <
                                     < 3 - IMPAIRE AU 'STORE' ET PAIRE AU
                                     < 'LOAD' : IL CONVIENT ALORS DE DECALER
                                     < D'UN OCTET A GAUCHE LA DEUXIEME PARTIE
                                     < DE LA VALEUR (CELLE QUI N'EST PAS DANS
                                     < LE <SECTEUR-MAP>) AVANT DE PLACER LA
                                     < PREMIERE PARTIE DANS LE BUFFER UTILI-
                                     < SATEUR...
                                     <
                                     < 4 - PAIRE AU 'STORE' ET IMPAIRE AU
                                     < 'LOAD' : IL CONVIENT DE DECALER D'UN
                                     < OCTET A DROITE LA DEUXIEME PARTIE DE LA
                                     < VALEUR AVANT DE PLACER LA PREMIERE
                                     < PARTIE...
                                     <
                                     < NOTA : LE MASQUE 'AA00 EST CONSERVE
                                     < POUR DES RAISONS HISTORIQUES ; IL AVAIT
                                     < ETE CREE POUR DISTINGUER ENTRE DES
                                     < "VIEUX" ET DES "NOUVEAUX" ITEMS...
<
< DATE DE CREATION DE LA VALEUR :
<
SDATAM:: MOT         $-MSIND         < ANNEE/MOIS (EN BINAIRE ; DE PLUS POUR
                                     < L'ANNEE ON TROUVE 'XY' AU LIEU DE
                                     < '19XY', C'EST MESQUIN...).
         WORD        NILK
SDATJH:: MOT         $-MSIND         < JOUR/HEURE.
         WORD        NILK
SDATMS:: MOT         $-MSIND         < MINUTES/SECONDES.
         WORD        NILK
<
< DISTINCTION "ITEM NORMAL" ET "ITEM SGF" :
<
SXSGF::  MOT         $-MSIND         < MOT POUVANT AVOIR PLUSIEURS VALEURS,
                                     < ET QUI PERMET DE DISTINGUER UN "ITEM
                                     < NORMAL" D'UN "ITEM SGF" :
<*******************************************************************************
SXSGFN:: VAL         K-I             < ITEM TYPE "NORMAL" (ET DONC ACCESSIBLE
                                     < AUX UTILISATEURS),
SXSGFA:: VAL         '0@@@@+I        < ITEM TYPE "ANCIEN" PERMETTANT DE PASSER
                                     < DE L'ANCIENNE A LA NOUVELLE VERSION
                                     < DE CMS5,
SXSGFF:: VAL         '0@@@@+I        < ITEM TYPE "SGF" ACCESSIBLE UNIQUEMENT
                                     < AU SYSTEME...
<*******************************************************************************
         WORD        NILK
<
< DONNEES UTILISEES LORS DES GESTIONS
< DE VOLUME AVEC EXTENSION D'ADRESSE
< SUR LE DISQUE D'EXTENSION 'NSPDKG' :
< (CES DONNEES SONT NULLES LORSQU'IL
< N'Y A PAS DE VOLUME MONTE...)
<
SVALNU:: MOT         $-MSIND         < NUMERO DU VOLUME CONTENANT LE BLOC DE
                                     < DONNEES ETENDANT L'ITEM COURANT.
         WORD        NILK
SVALAD:: MOT         $-MSIND         < ADRESSE DE CE BLOC DE DONNEE SUR LE
                                     < DISQUE D'EXTENSION.
         WORD        NILS
<
< ZONE DE PATCH :
<
PATMAP:: MOT         $-MSIND         < ZONE DE PATCH DU SECTEUR-MAP.
XPATMA:: VAL         4               < LONGUEUR DE LA ZONE DE PATCH...
         DZS         XPATMA          < C'EST PEU, MAIS CELA SUFFIT...
<
< CARTE D'OCCUPATION DE LA VALEUR :
<
SMAP::   MOT         $-MSVAL         < CARTE D'IMPLANTATION DE LA
                                     < VALEUR SUR LE DISQUE, Y COMPRIS
                                     < LE SECTEUR-MAP ; ON TROUVE AINSI
                                     < LA LISTE DES SECTEURS UTILISES.
         NTRN
         DZS         TZSWAP-TZSCRA+QUANTA-E/QUANTA
         TRN
<
< PREMIERE PARTIE DE LA VALEUR :
<
SVAL::   MOT         $-MSVAL
TZVAL::  VAL         YY7*QUANTA-SVAL < NOMBRE DE MOTS DISPONIBLES POUR
                                     < LA PREMIERE PARTIE DE LA VALEUR.
         DZS         TZVAL           < PREMIERE PARTIE DE LA VALEUR.
FSECMA:: VAL         $-MSVAL         < FIN DU SECTEUR MAP.
         IF          YY7*QUANTA-FSECMA,,XEIF%,
         IF          A T T E N T I O N  : LE FORMAT DU SECTEUR
         IF          MAP EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         PROG
         PAGE
<
<
<        E X T E N S I O N   D E   L A   C A P A C I T E   D E
<        S T O C K A G E   S U R   L E S   D I S Q U E S  :
<
<
<        PHILOSOPHIE :
<                      ON DISPOSE DES TROIS COMMANDES
<                    SUIVANTES AU 'CCI' :
<
<                    !ASSIGN <NVP>=DKU,
<                    !DKU M <NVP>=<NUMERO DE VOLUME>,
<                    !DKU INITIALISATION <NVP>=<NUMERO DE VOLUME>.
<
<                      LA PREMIERE PERMET DE S'APPROPRIER
<                    'DKU' QUI EST LE DISQUE D'EXTENSION
<                    TANDIS QUE LA SUIVANTE Y PERMET
<                    LE MONTAGE D'UN VOLUME DONT ON
<                    SE DONNE LE NUMERO, ENFIN LA DERNIERE
<                    FAIT L'INITIALISATION DU VOLUME ET
<                    SON MONTAGE.
<                      UN VOLUME EST DONC UN DISK-PACK,
<                    ATTACHE A UN <ACN> UNIQUE (!!!),
<                    QUI POSSEDE ENTRE AUTRES CHOSES
<                    UNE TABLE D'ALLOCATION PAR BLOCS
<                    SUFFISANTS POUR CONTENIR UNE IMAGE
<                    COULEUR TOUT EN OPTIMISANT LES
<                    TRANSFERTS (CF. 'LVOLIM').
<                      LORS DES ACCES 'SGN' PAR 'LON',
<                    'STN' ET 'DLN', ON PEUT ATTEINDRE
<                    DES VALEURS RESIDANT SUR LE DISQUE
<                    D'EXTENSION ; LORSQUE CELA EST
<                    DEMANDE (VOIR LE FORMAT ALORS
<                    PARTICULIER DE 'ASDEM'), LA VALEUR
<                    D'UNE LONGUEUR OBLIGATOIRE DE
<                    'LVALU' MOTS CONTIENT :
<                    1 - POUR 'STN' : LE NUMERO DU VOLUME,
<                    ET L'ADRESSE DISQUE SUR 'NSPDKG' A
<                    PARTIR DE LAQUELLE ON SOUHAITE QUE
<                    L'ALLOCATION SOIT FAITE (POUR AINSI
<                    FAVORISER LES ALLOCATIONS DE BLOCS
<                    CONTIGUS),
<                    2 - POUR 'LON' ET 'DLN' RIEN EN
<                    TANT QU'ARGUMENT.
<                      LA <VALEUR> DU <NOM> EST DONC DANS
<                    CE CAS, UN CHAINAGE VERS UN VOLUME,
<                    ET A L'INTERIEUR DE CELUI-CI, UNE
<                    ADRESSE PHYSIQUE DE BLOC (TYPE "IMAGE").
<                      ENFIN, AU DEBUT DU VOLUME UNE ZONE
<                    DE 'SECVOL' Q-SECTEURS EST LAISSEE
<                    LIBRE POUR USAGES SPECIFIQUES...
<                      APRES UN 'STN', ON CONNAIT SI
<                    TOUT S'EST BIEN PASSE L'ADRESSE D'IMPLAN-
<                    TATION DU BLOC SUR LE DISQUE ; CE BLOC
<                    PEUT DONC ETRE RELU, SOIT EN SPECIFIANT
<                    SON <NOM> ET L'ENVOYANT A 'LON', SOIT
<                    EN ENVOYANT DIRECTEMENT A 'DKU' UNE
<                    DEMANDE DE TRANSFERT RAPIDE 'DKU' <--> 'MEMTV'.
<                      POUR TERMINER, IL CONVIENT DE DIRE
<                    QUE LE BLOC TYPE "IMAGE" EST SYSTEMATI-
<                    QUEMENT, LORS DES ACCES AUX VOLUMES
<                    LU OU ECRIT A PARTIR DE 'MEMTV'...
<
<
<        Q - S E C T E U R   D E   D E F I N I T I O N   D ' U N
<                    V O L U M E  :
<
<
LVOL::   VAL         YY7             < LONGUEUR MAX PREVUE POUR LA DEFINITION
                                     < D'UN VOLUME ; A NOTER QU'ON N'UTILISE
                                     < PAS LE Q-SECTEUR EN ENTIER...
ELVOL:   EQU         ZERO+LVOL       < POUR UNE REFERENCE EN AVANT DANS LA
                                     < LISTE DES BLOCS MEMOIRE AUTORISES EN
                                     < ACCES DIRECT...
VOL0::   MOT         O               < DEBUT DU Q-SECTEUR...
VOLNUM:: MOT         VOL0            < NUMERO DU VOLUME ; A NOTER QUE CELUI-CI
                                     < NE PEUT ETRE NUL, CAR LA NULLITE INDI-
                                     < L'ABSENCE DE VOLUME MONTE (ET CECI, BIEN
                                     < SUR DANS LE BUFFER RESIDENT QUI LE CON-
                                     < TIENDRA...).
VOLNSP:: MOT         VOLNUM+D        < 'NSP' DU DISQUE D'EXTENSION, LORS DE
                                     < L'INITIALISATION DU VOLUME (...).
VOLACN:: MOT         VOLNSP+D        < <ACN> DU DEMANDEUR LORS DE L'INITIALISA-
                                     < TION ; A NOTER QUE C'EST LUI SEUL QUI
                                     < POURRA L'ATTEINDRE, VIA LE 'SGN' ULTE-
                                     < RIEUREMENT (MAIS NE PAS OUBLIER LA COM-
                                     < MANDE "!L" SOUS ":SYS"...
VOLCLE:: MOT         VOLACN+XXACN    < PREMIERE CLEF DE VALIDATION :
XWOR%1:  VAL         MOCG=K
CLEVOL:: VAL         XXK2>XWOR%1?XXK3  < DONT VOICI LA VALEUR...
VOL23::  MOT         VOLCLE+D        < DEUXIEME CLEF DE VALIDATION : ELLE CON-
                                     < TIENT 'LVOLIM', ET ON FAIT CELA CAR
                                     < IL EST SOUVENT NECESSAIRE DE FAIRE
                                     < DES DIVISIONS ET DES MULTIPLICATIONS
                                     < PAR 'LVOLIM', ET QUE JE NE SAVAIS PAS
                                     < OU LE METTRE...
VOLNIM:: MOT         VOL23+D         < NOMBRE DE BLOCS LIBRES ('NVOLIM' INI-
                                     < TIALEMENT).
LVOPAT:: VAL         2               < LONGUEUR DE LA ZONE DE PATCH...
VOLPAT:: MOT         VOLNIM+D        < ZONE DE PATCH DU DESCRIPTEUR DE
                                     < VOLUME...
VOLTAB:: MOT         VOLPAT+LVOPAT   < DEBUT DE LA TABLE D'ALLOCATION DES
                                     < BLOCS, ET QUI EST LA DERNIERE INFOR-
                                     < MATION SIGNIFICATIVE DU Q-SECTEUR...
LVOLTA:: VAL         LVOL-VOLTAB     < LONGUEUR POSSIBLE DE LA TABLE D'ALLO-
                                     < CATION DES BLOCS.
<
< INSTRUCTIONS REFERENCEES EN AVANT,
< ET UTILISANT DES SYMBOLES ICI DEFINIS :
<
ESGNX1:  EQU         $               < SAUVEGARDE DU "$"...
<*******************************************************************************
         STZ         VOLNUM,L        < "PAS DE VOLUME MONTE"...
XWOR%1:  VAL         '0000000@@@@    < RECUPERATION DU CODE GENERE,
<*******************************************************************************
STZNUM:  EQU         ZERO+XWOR%1     < "PAS DE VOLUME MONTE".
<*******************************************************************************
         STA         VOLNSP,L        < "PAS DE VOLUME MONTE"...
XWOR%1:  VAL         '0000000@@@@    < RECUPERATION DU CODE GENERE,
<*******************************************************************************
STANSP:  EQU         ZERO+XWOR%1     < "PAS DE VOLUME MONTE".
         $EQU        ESGNX1          < PUIS ANNULATION DU CODE GENERE...
<
<
<        F O R M A T   D U   V O L U M E  :
<
<
SECVOL:: VAL         '0800           < NUMERO DU Q-SECTEUR CONTENANT LE
                                     < DESCRIPTEUR DU VOLUME.
         NTRN
LSECVO:: VAL         LVOL+YY7Q-E/YY7Q  < NOMBRE DE Q-SECTEUR OCCUPE PAR
                                       < DESCRIPTEUR DU VOLUME.
         TRN
VOLSE0:: VAL         SECVOL+LSECVO   < NUMERO DU PREMIER Q-SECTEUR ALLOUABLE.
LVOLIM:: VAL         '23             < NOMBRE DE Q-SECTEURS FORMANT UN BLOC ;
                                     < EN FAIT UN BLOC EST UNE IMAGE DE
                                     < TELEVISION COULEUR, ET '23 EST UN
                                     < PEU TROP ; MAIS CE "GAP" EST VOLONTAIRE
                                     < ET CONSTITUE UN MOYEN DE MAXIMISER LE
                                     < TAUX DE TRANSFERT DES ANIMATIONS ; EN
                                     < EFFET LA DUREE DE GAP, EST SUFFISANTE
                                     < POUR PERMETTRE SIMULTANEMENT LE DEPLA-
                                     < CEMENT DES TETES D'UNE PISTE A L'AUTRE...
                                     < LES BLOCS SONT DONC DEPHASES LES UNS
                                     < PAR RAPPORT AUX AUTRES...
XWOR%1:  VAL         TVLIMA*LK*XNCOOL/YY7Q
                                     < NOMBRE DE Q-SECTEURS NECESSAIRES POUR
                                     < STOCKER UNE IMAGE COULEUR ; A NOTER QUE
                                     < LA DIVISION DOIT TOMBER JUSTE CAR PAR
                                     < UN HEUREUX HASARD : 'QUANTA'='XNCOOL'.
         IF          LVOLIM-XWOR%1,,,XEIF%
         IF          ATTENTION : LA TAILLE D'UN BLOC D'ALLOCATION
         IF          EST TROP PETITE POUR CONTENIR UNE IMAGE COULEUR !!!
XEIF%:   VAL         ENDIF
<
<
<        N O M B R E   D E   B L O C S   A L L O U A B L E S  :
<
<
XWOR%1:  VAL         TDKM-VOLSE0     < NOMBRE DE Q-SECTEURS DISPONIBLES.
XWOR%2:  VAL         XXXMOY=K        < ON EST OBLIGE DE FAIRE CELA PARCEQUE
                                     < 'TDKM' EST REPRESENTE PAR UN NOMBRE
                                     < NEGATIF...
XWOR%3:  VAL         -XWOR%2
         NTRN
XWOR%4:  VAL         XWOR%1>XWOR%3/LVOLIM>XWOR%2
                                     < NOMBRE DE BLOCS QUE L'ON POURRAIT RANGER
                                     < AU MAXIMUM,
XWOR%5:  VAL         XWOR%4/NBITMO*NBITMO
                                     < MAIS LA TABLE D'ALLOCATION A UN FORMAT
                                     < DE MOTS, DONC ON ARRONDIT INFERIEUREMENT
                                     < EN MULTIPLES DE 'NBITMO'...
         TRN
NVOLIM:: VAL         XWOR%5          < NOMBRE DE BLOCS ALLOUABLES.
MVOLIM:: VAL         NVOLIM/NBITMO   < NOMBRE DE MOTS NECESSAIRES A LA TABLE
                                     < D'ALLOCATION DES BLOCS.
         IF          MVOLIM-LVOLTA,XEIF%,XEIF%,
         IF          ATTENTION : LA TAILLE PREVUE POUR LE DESCRIPTEUR
         IF          DE VOLUME (ET LA TABLE D'ALLOCATION) EST INSUFFISANTE !!!
XEIF%:   VAL         ENDIF
<
<
<        I N D I C A T E U R S   ' S G N '   D ' A C C E S
<                    A U   ' D K U '  :
<
<
SGNU0::  VAL         NEXIST          < L'ACCES 'DKU' N'A PAS ETE DEMANDE POUR
                                     < CE HANDLER, MAIS CELUI-CI EST LEGAL...
SGNU1::  VAL         NSPDKG          < L'ACCES 'DKU' A ETE DEMANDE.
SGNUI::  VAL         SGNU0-I         < L'ACCES 'DKU' POUR EXTENSION EST FORMEL-
                                     < LEMENT INTERDIT...
         IF          SGNUI-K,XEIF%,,
         IF          ATTENTION : 'SGNUI' DOIT ETRE NEGATIF
         IF          A CAUSE DES TESTS QUI SUIVRONT !!!
XEIF%:   VAL         ENDIF
         IF          SGNU1-K,,,XEIF%
         IF          ATTENTION : 'SGNU1' DOIT ETRE POSITIF !!!
XEIF%:   VAL         ENDIF
         IF          SGNU0-K,,XEIF%,
         IF          ATTENTION : 'SGNU0' DOIT ETRE NUL !!!
XEIF%:   VAL         ENDIF
<
<
<        F O R M A T   D E   L A   < V A L E U R >   L O R S
<        D E   D E M A N D E S   D ' E X T E N S I O N  :
<
<
VALUNU:: MOT         O               < NUMERO DU VOLUME SUPPORT DE LA <VALEUR>
                                     < ETENDUE CHAINEE PAR LA <VALEUR> NORMALE.
VALUAD:: MOT         VALUNU+D        < ADRESSE DISQUE EXPRIMEE EN Q-SECTEUR
                                     < DE L'EXTENSION DE VALEUR. A NOTER QUE
                                     < CES 2 VALEURS 'VALUNU' ET 'VALUAD' SE
                                     < RETROUVENT DANS LE SECTEUR-MAP (ET CECI
                                     < POUR FACILITER LE TRAVAIL DE 'LON' ET
                                     < 'DLN'...).
LVALU::  VAL         VALUAD+D        < NOMBRE DE MOTS OCCUPES OBLIGATOIREMENT
                                     < PAR LA <VALEUR> DE CHAINAGE D'UNE
                                     < <VALEUR> EXTENSION.
         PAGE
<
<
<        B U F F E R S   P E R M A N E N T S   S G N  :
<
<
         CALL        #SISP CMS5 DOL2#
BUFSTN:  EQU         $
         DZS         YY7*QUANTA
BUFLON:  EQU         $
         DZS         YY7*QUANTA
BUFLNS:  EQU         $
         DZS         YY7*QUANTA
BUFLNU:  EQU         $
         DZS         YY7*QUANTA
BUFDLN:  EQU         $
         DZS         YY7*QUANTA
<
<        NOTA :
<                      'BUFNXP' ET 'BUFNXS' PARAISSANT
<                    INUTILE, ILS SONT SUPPRIMES ; C'EST
<                    POURQUOI LE SOUS-PROGRAMME 'SP14' A
<                    ETE INTRODUIT ; IL VALIDE L'ADRESSE
<                    DU BUFFER STATIQUE 'BUFSAV'...
<
         CALL        #SISP CMS5 DOL1#
         PAGE
<
<
<        C O N S T A N T E S   D I V E R S E S  :
<
<
XYSGN1:: VAL         W-I             < CAS D'UN CHAMP A DEPLACER,
XYSGN2:: VAL         XYSGN1+I        < CAS DE 2 CHAMPS A DEPLACER.
XXSGN1:: VAL         COSBT?BITSIG=FMASK(K=FCINST?XYSGN2
                                     < FUTUR VALEUR DE 'ETAT1' LORSQU'IL
                                     < FAUT CALCULER LE NOMBRE DE CHAMPS...
XXSGN2:: VAL         XXACN           < LONGUEUR DES <ACN>.
XXSGN3:: VAL         22              < INCREMENT DES LONGUEURS DE PILE.
XWOR%1:  VAL         32              < NOMBRE ARBITRAIRE FIXANT UNE LIMITE
                                     < SUPERIEURE AU NOMBRE DE BLOCS 'DKM'
                                     < ('QUANTA'-SECTEURS) QUE L'ON PEUT
                                     < GROUPER, LORSQUE CELA EST POSSIBLE
                                     < LORS DES ECHANGES DE VALEURS ('SP11').
XWOR%2:  VAL         YY8Q            < NOMBRE D'OCTETS CONSTITUANT L'UNITE
                                     < D'ALLOCATION DE 'DKM'.
XXSGN9:: VAL         XWOR%1*XWOR%2   < NOMBRE MAXIMUM D'OCTETS QUE L'ON
                                     < PUISSE GROUPER, LORSQUE CELA EST
                                     < POSSIBLE, DANS 'SP11'.
         IF          XXSGN9,,,XEIF%
         IF          ATTENTION : VUS LES TESTS QUI SUIVRONT,
         IF          'XXSGN9' DOIT ETRE STRICTEMENT POSITIF !!!
XEIF%:   VAL         ENDIF
XXSGNS:: VAL         64              < SEUIL ARBITRAIRE ; SI LE NOMBRE DE
                                     < NOEUDS LIBRES EST INFERIEUR A CE
                                     < SEUIL, 'HDLSTN' REFUSE DE TRAVAILLER...
XXSGNT:: VAL         128             < SEUIL ARBITRAIRE ; SI LE NOMBRE DE
                                     < Q-SECTEURS LIBRES SUR 'DKM' EST INFE-
                                     < RIEUR A CE SEUIL, 'HDLSTN' REFUSERA
                                     < DE TRAVAILLER !!!
         NTRN
         IF          Q8000-E/YY8Q+E-XXSGNT,XEIF%,,
         IF          ATTENTION : 'XXSGNT' DOIT ETRE AU MOINS SUPERIEUR
         IF          A LA LONGUEUR MAXIMALE D'UNE VALEUR EXPRIMEE
         IF          EN NOMBRE DE SECTEURS !!!
XEIF%:   VAL         ENDIF
         TRN
SGNFUP:: VAL         NOSOSE          < A PRIORI, TOUTES LES FONCTIONS 'SGN'
                                     < DOIVENT SE DEROULER EN BAS...
                                     < ON LUI FAIT DONC PRENDRE SYSTEMATIQUE-
                                     < MENT LA PAGE 0, SAUF...
         IF          SGNFUP-NOSOSE,,XEIF%,
         IF          ATTENTION : TOUTES LES FONCTIONS DE 'DLN', 'STN',
         IF          'LON', 'LNS' ET 'LNU' DOIVENT SE DEROULER EN BAS
         IF          AFIN QUE LA TRANSMISSION DE LA 'CDA' COURANTE DE
         IF          L'UTILISATEUR LORS DES ACCES AUX VOLUMES D'EXTENSION
         IF          DANS 'HDLSVC' FONCTIONNE CORRECTEMENT !!!
XEIF%:   VAL         ENDIF
XWOR%1:  VAL         K
XWOR%1:  VAL         COSBT?FGSGN=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FGSGNA=FMASK(K?XWOR%1=FCINST
SGNFUQ:: VAL         XWOR%1          < POUR 'NXS' ET 'NXP', LES FONCTIONS
                                     < D'ACCES PEUVENT SE DEROULER EN MEMOIRE
                                     < HAUTE...
         PAGE
<
<
<        D C T   S T O R E - N O M  :
<
<
DCTSTN:  EQU         $
PSTSTN:  WORD        K;K;K;K;COM+DEPCS;DCTSTN;NIL;PILSTN;HANDLR;SMST;SO;SE
       #@ASCI        " STN"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR
         WORD        FILTRS
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC.
         DZS         LSEM
         WORD        NIL             < TETE.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT.
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLSAV          < HANDLER GENERAL DE GESTION
                                     < DES NOMS,VALEURS.
         WORD        HDLSTN          < HANDLER SPECIFIQUE 'STORE NOM'.
         WORD        K;XXSGN1        < ETAT: ETAT1='8001 AFIN
                                     < DE CALCULER LE NOMBRE DE CHAMPS
                                     < A DEPLACER EN FONCTION DE
                                     < L'OPDEM D'APPEL.
                                     < N=K SI OPDEM=2,N=1 SI OPDEM=A
         WORD        XBITS0          < BITSEM.
         WORD        XXNTRY;TRYVID
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXDCTF          < 'DCT' NON CONNECTABLE...
         WORD        SGNFUP          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
<
<        Z O N E   V A R I A B L E  :
<
<
VARSAV:  EQU         $
VARSTN:  EQU         $
         IF          VARSTN-DCTSTN-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
<
< <NOM-SYSTEME> :
<
         WORD        STNNOM,X
ANOMS::  VAL         $-D-VARSAV      < RELAI VERS LE NOM SYSTEME.
NOMS::   VAL         $-VARSAV        < NOM SYSTEME.
STNNOM:  EQU         $
         WORD        NILK            < POUR USAGE SPECIFIQUE LORS DES
                                     < INSERT/DELETE DANS LES ARBRES.
NOMSX1:: VAL         $-VARSAV        < <ACN> PROPREMENT DIT...
         DZS         XXSGN2          < DESTINE A RECEVOIR L'ACN
                                     < DU DEMANDEUR.
         BYTE        EON;K           < EON POUR L'ACN.
         DZS         LNOMS/NOCMO     < NOM ARGUMENT.
         IF          XXSGN2*NOCMO+LNOMS-XXSGNS,XEIF%,,
         IF          ATTENTION : 'XXSGNS' DOIT ETRE AU MOINS SUPERIEURE
         IF          A LA LONGUEUR MAXIMALE D'UN <NOM-SYSTEME> !!!
XEIF%:   VAL         ENDIF
         WORD        NIL             < RELAI VALEUR EVENTUEL.
<
< BUFFER ET DEMANDE :
<
         WORD        BUFSTN
BUFSAV:: VAL         $-D-VARSAV      < ADRESSE MOT DU BUFFER DE TRAVAIL
                                     < ALLOUE AUX HANDLERS.
         WORD        NILX
ANOM::   VAL         $-D-VARSAV      < RELAI VERS LE NOM ARGUMENT.
DEMSAV:: VAL         $-VARSAV        < BLOC DESTINE AUX DEMANDES.
         DZS         LDEM0B
         WORD        NILK
IVAL::   VAL         $-D-VARSAV      < INDEX 1ER OCTET DE LA VALEUR.
<
< RELAIS DE SOUS-PROGRAMMES :
<
         WORD        SP6
ASP6::   VAL         $-D-VARSAV      < REMISE A ZERO DU BUFFER.
         WORD        SP7
ASP7::   VAL         $-D-VARSAV      < GET/RELEASE SECTEURS.
         WORD        SP8
ASP8::   VAL         $-D-VARSAV      < INITIT. DE W AVEC L'@DU BUFFER.
         WORD        SP9
ASP9::   VAL         $-D-VARSAV      < MOVE 1ERE PARTIE DE LA VALEUR.
         WORD        SP10
ASP10::  VAL         $-D-VARSAV      < E/S DK.
         WORD        SP11
ASP11::  VAL         $-D-VARSAV      < E/S DE LA VALEUR SUR DK.
         WORD        SP12
ASP12::  VAL         $-D-VARSAV      < INSERT/DELETE NOM.
         WORD        SP13
ASP13::  VAL         $-D-VARSAV      < E/S DK AVEC COMME SEUL ARGUMENT
                                     < L'ADRESSE SECTEUR (B).
         WORD        SP14
ASP14::  VAL         $-D-VARSAV      < SOUS-PROGRAMME RIDICULE SE CONTENTANT
                                     < DE METTRE L'ADRESSE DU BUFFER STATIQUE
                                     < 'BUFSAV' DANS 'A'... ET DE VALIDER
                                     < BIEN SUR !!!
         WORD        SP20
ASP20::  VAL         $-D-VARSAV      < SOUS-PROGRAMME DE LECTURE DU DESCRIPTEUR
                                     < D'UN VOLUME D'EXTENSION...
         WORD        SP21
ASP21::  VAL         $-D-VARSAV      < SOUS-PROGRAMME DE RE-ECRITURE DU DES-
                                     < CRIPTEUR D'UN VOLUME D'EXTENSION...
         WORD        SP40
ASP40::  VAL         $-D-VARSAV      < SOUS-PROGRAMME POSITIONNANT (SLO,SLE)
                                     < SUR 'MEMTV', PUIS ENVOYANT LA DEMANDE
                                     < COURANTE A 'CHAND'...
<
< RELAIS D'ADDRESSES (A CAUSE DE
< CES MAUDITS SAUTS SUPERIEURS
< A 128 MOTS...) :
<
         WORD        Z23
RAZ23::  VAL         $-D-VARSAV      < FONCTION NON RECONNUE,
         WORD        Z28
RAZ28::  VAL         $-D-VARSAV      < ENVOI DE LA DEMANDE COURANTE,
         WORD        Z36
RAZ36::  VAL         $-D-VARSAV      < SORTIE OK, AVEC 'BOX',
         WORD        Z51
RAZ51::  VAL         $-D-VARSAV      < SORTIE OK,
         WORD        Z36XY2
RAZ362:: VAL         $-D-VARSAV      < TEST D'EXTENSION DE VOLUME,
         WORD        Z26
RAZ26::  VAL         $-D-VARSAV      < ERREUR DE <NOM>.
         WORD        Z26XX
RAZ26X:: VAL         $-D-VARSAV      < ERREUR "SATURATION D'UN ESPACE"...
<
< INDICATEURS :
<
         WORD        NRELAT          < PAS DE DEMANDE DE VALEUR.
TENEXT:: VAL         $-D-VARSAV      < POUR L'INITIALISATION DE
                                     < L'ASDEM DE LA DEMANDE A HDLTRI.
         WORD        NIL
AOVAL::  VAL         $-D-VARSAV      < ADRESSE OCTET DU 1ER OCTET
                                     < DE LA VALEUR DANS LE BUFFER
                                     < UTILISATEUR
                                     < CE MOT EST UTILISE PAR SP11
                                     < ET EST UTILISABLE DANS BEAUCOUP
                                     < DE CAS COMME MOT DE TRAVAIL OU
                                     < DE PATCH!
         WORD        NILK
ASTRAV:: VAL         $-D-VARSAV      < MOT DE TRAVAIL POUR SP11
         WORD        XXSGN9
VGROUP:: VAL         $-D-VARSAV      < NOMBRE MAXIMUM D'OCTETS QUE L'ON
                                     < PUISSE GROUPER, LORSQUE CELA EST
                                     < POSSIBLE, DANS 'SP11'.
SXSGF0:: VAL         SXSGFA          < VALEUR INITIALE DE 'SGNSGF' POUR LES
                                     < HANDLERS TESTANT LA NATURE "SGF" DES
                                     < ITEMS.
         WORD        SXSGF0
SGNSGF:: VAL         $-D-VARSAV      < INDICATEUR MEMORISANT LA VALEUR DU BIT
                                     < 'XXXSGF' DE L'OPDEM ARGUMENT (VOIR LES
                                     < VALEURS 'SXSGF' A CE PROPOS...).
         WORD        SGNU0
ISGNUV:: VAL         $-D-VARSAV      < INDICATEUR D'AUTORISATION ET DE DEMANDE
                                     < D'ACCES A 'DKU' : 3 VALEURS SONT LICITES:
                                     < 'SGNU0' : ACCES POSSIBLE A 'DKU', MAIS
                                     <           NON DEMANDE,
                                     < 'SGNUI' : ACCES INTERDIT A 'DKU',
                                     < 'SGNU1' : ACCES DEMANDE A 'DKU' POUR LA
                                     <           DEMANDE COURANTE.
                                     < (VOI DE PLUS LES VALEURS POSSIBLES DE
                                     < 'ASGNU' ET EN PARTICULIER 'ISGNPV'...)
ISGNPV:: VAL         NIL-ZERO        < VALEUR QUE PREND 'ASGNU' LORSQU'IL N'Y
                                     < A PAS DE VOLUME MONTE.
         WORD        NIL
ASGNU::  VAL         $-D-VARSAV      < MEMORISATION DE L'ADRESSE DU BUFFER COU-
                                     < RANT DU DESCRIPTEUR DU VOLUME COURANT,
                                     < OU 'ISGNPV' S'IL N'Y A PAS DE VOLUME
                                     < MONTE, ALORS QUE LE DEMANDEUR DEMANDE
                                     < L'EXTENSION SUR VOLUME...
         WORD        MONT0
NVSGNU:: VAL         $-D-VARSAV      < MEMORISATION DU NUMERO DE VOLUME COURANT
                                     < A L'ENTREE DES HANDLERS 'SGN' LORSQUE
                                     < L'ACCES A L'EXTENSION SUR VOLUME A ETE
                                     < DEMANDE.
         WORD        NILK
SGNCDA:: VAL         $-D-VARSAV      < NUMERO DE LA PREMIERE PAGE DE 32K DE
                                     < LA 'CDA' UTILISEE LORS DES EXTENSIONS
                                     < SUR VOLUME.
<
<
<        P I L E  :
<
<
XWPILE:  VAL         LPILEH+XXSGN3
PILSTN:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        D C T   L O A D - N O M  :
<
<
DCTLON:  EQU         $
PSTLON:  WORD        K;K;K;K;COM+DEPCS;DCTLON;NIL;PILLON;HANDLR;SMST;SO;SE
       #@ASCI        " LON"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR
         WORD        FILTRS
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC.
         DZS         LSEM
         WORD        NIL             < TETE.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT.
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLSAV          < HANDLER GENERAL.
         WORD        HDLLON          < HANDLER SPECIFIQUE 'LOAD-NOM'.
         WORD        K;XXSGN1        < ETAT: ETAT1='8001 AFIN
                                     < DE CALCULER LE NOMBRE DE CHAMPS
                                     < A DEPLACER EN FONCTION DE
                                     < L'OPDEM D'APPEL
                                     < N=K SI OPDEM=2,N=1 SI OPDEM='A
         WORD        XBITS0          < BITSEM.
         WORD        XXNTRY;TRYVID
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXDCTF          < 'DCT' NON CONNECTABLE...
         WORD        SGNFUP          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE :
<
VARLON:  EQU         $
         IF          VARLON-DCTLON-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        LONNOM,X        < RELAI NOM SYSTEME.
LONNOM:  EQU         $
         WORD        NILK            < 1ER MOT DU NOM SYSTEME.
         DZS         XXSGN2          < ACN DU DEMANDEUR.
         BYTE        EON;K
         DZS         LNOMS/NOCMO     < NOM ARGUMENT.
         WORD        NIL             < RELAI-VALEUR.
         WORD        BUFLON          < ADRESSE MOT DU BUFFER DE TRAVAIL.
         WORD        NILX            < RELAI VERS LE NOM ARGUMENT.
         DZS         LDEM0B          < BLOC DE DEMANDE.
         WORD        NILK            < INDEX 1ER OCTET DE LA VALEUR.
         WORD        SP6             < CLEAR BUFFER DE TRAVAIL.
         WORD        SP7             < GET/RELEASE SECTEURS DK.
         WORD        SP8             < INIT. DE W AVEC @BUFFER.
         WORD        SP9             < MOVE VALEUR.
         WORD        SP10            < E/S DK (1SECTEUR).
         WORD        SP11            < E/S VALEUR SUR DK.
         WORD        SP12            < INSERT/DELETE NOM.
         WORD        SP13            < E/S DK AVEC ARG=@SECTEUR.
         WORD        SP14            < A <-- (BUFSAV).
         WORD        SP20            < LECTURE DU DESCRIPTEUR DE VOLUME,
         WORD        SP21            < REECRITURE DU DESCRIPTEUR DE VOLUME.
         WORD        SP40            < (SLO,SLE) <-- 'MEMTV', PUIS 'CHAND'...
         WORD        Z23             < FONCTION NON RECONNUE,
         WORD        Z28             < ENVOI DE LA DEMANDE COURANTE,
         WORD        Z36             < SORTIE OK, AVEC 'BOX',
         WORD        Z51             < SORTIE OK,
         WORD        Z36XY2          < TEST D'EXTENSION DE VOLUME,
         WORD        Z26             < ERREUR DE <NOM>.
         WORD        Z26XX           < ERREUR "SATURATION D'UN ESPACE"...
         WORD        RELATS          < DEMANDE DU SUIVANT SERIE.
         WORD        NIL             < AOVAL
         WORD        NILK            < ASTRAV
         WORD        XXSGN9          < VGROUP.
         WORD        SXSGF0          < SGNSGF.
         WORD        SGNU0           < ISGNU.
         WORD        NIL             < ASGNU.
         WORD        MONT0           < NVSGNU.
         WORD        NILK            < SGNCDA.
<
< PILE :
<
XWPILE:  VAL         LPILEH+XXSGN3
PILLON:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        D C T   L O A D - N O M   S O U S   : S Y S  :
<
<
DCTLNS:  EQU         $
PSTLNS:  WORD        K;K;K;K;COM+DEPCS;DCTLNS;NIL;PILLNS;HANDLR;SMST;SO;SE
       #@ASCI        " LNS"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR
         WORD        FILTRS
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0
         DZS         LSEM
         WORD        NIL             < TETE.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT.
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLSVS          < HANDLER GENERAL.
         WORD        HDLLON          < HANDLER SPECIFIQUE.
         WORD        K;XYSGN1        < ETAT : ETAT1=0.
         WORD        XBITS0          < BITSEM.
         WORD        XXNTRY;TRYVID
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXDCTF          < 'DCT' NON CONNECTABLE...
         WORD        SGNFUP          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE :
<
VARLNS:  EQU         $
         IF          VARLNS-DCTLNS-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        LNSNOM,X        < RELAI NOM-SYSTEME.
LNSNOM:  EQU         $
         WORD        NILK            < 1ER MOT DU NOM-SYSTEME.
         DZS         XXSGN2          < ACN.
         BYTE        EON;K
         DZS         LNOMS/NOCMO     < NOM ARGUMENT.
         WORD        NIL             < RELAI VALEUR.
         WORD        BUFLNS          < ADRESSE MOT DU BUFFER DE TRAVAIL.
         WORD        NILX            < RELAI NOM ARGUMENT.
         DZS         LDEM0B          < BLOC DE DEMANDE.
         WORD        NILK            < INDEX 1ER OCTET DE LA VALEUR.
         WORD        SP6             < CLEAR BUFFER DE TRAVAIL.
         WORD        SP7             < GET/RELEASE SECTEURS DK.
         WORD        SP8             < INIT. W AVEC @BUFFER ALLOUE.
         WORD        SP9             < MOVE VALEUR.
         WORD        SP10            < E/S DK 1 SECETEUR.
         WORD        SP11            < E/S DK VALEUR ENTIERE.
         WORD        SP12            < INSERT/DELETE NOM.
         WORD        SP13            < E/S DK AVEC ARG=@SECTEUR.
         WORD        SP14            < A <-- (BUFSAV).
         WORD        SP20
         WORD        SP21
         WORD        SP40
         WORD        Z23             < FONCTION NON RECONNUE,
         WORD        Z28             < ENVOI DE LA DEMANDE COURANTE,
         WORD        Z36             < SORTIE OK, AVEC 'BOX',
         WORD        Z51             < SORTIE OK,
         WORD        Z36XY2          < TEST D'EXTENSION DE VOLUME,
         WORD        Z26             < ERREUR DE <NOM>.
         WORD        Z26XX           < ERREUR "SATURATION D'UN ESPACE"...
         WORD        RELATS          < DEMANDE SUIVANT-SERIE.
         WORD        NIL             < AOVAL
         WORD        NILK            < ASTRAV
         WORD        XXSGN9          < VGROUP.
         WORD        SXSGFN          < SGNSGF.
         WORD        SGNUI           < ISGNU ('DKU' INTERDIT POUR 'LNS').
         WORD        NIL             < ASGNU.
         WORD        MONT0           < NVSGNU.
         WORD        NILK            < SGNCDA.
<
< PILE :
<
XWPILE:  VAL         LPILEH+XXSGN3
PILLNS:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        D C T   L O A D - N O M   S O U S   < A C N >  :
<
<
DCTLNU:  EQU         $
PSTLNU:  WORD        K;K;K;K;COM+DEPCS;DCTLNU;NIL;PILLNU;HANDLR;SMST;SO;SE
       #@ASCI        " LNU"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR
         WORD        FILTRS
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0
         DZS         LSEM
         WORD        NIL             < TETE.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT.
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLSVU          < HANDLER GENERAL.
         WORD        HDLLON          < HANDLER SPECIFIQUE.
         WORD        K;XYSGN2        < ETAT : ETAT1=1, IL Y A EN EFFET
                                     < 2 CHAMPS A RECUPERE DANS LE
                                     < NOM ARGUMENT <ACN> ET <NOM>.
         WORD        XBITS0          < BITSEM.
         WORD        XXNTRY;TRYVID
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXDCTF          < 'DCT' NON CONNECTABLE...
         WORD        SGNFUP          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE :
<
VARLNU:  EQU         $
         IF          VARLNU-DCTLNU-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        LNUNOM,X        < RELAI NOM-SYSTEME.
LNUNOM:  EQU         $
         WORD        NILK            < 1ER MOT DU NOM-SYSTEME.
         DZS         XXSGN2          < ACN.
         BYTE        EON;K
         DZS         LNOMS/NOCMO     < NOM ARGUMENT.
         WORD        NIL             < RELAI VALEUR.
         WORD        BUFLNU          < ADRESSE MOT DU BUFFER DE TRAVAIL.
         WORD        NILX            < RELAI NOM ARGUMENT.
         DZS         LDEM0B          < BLOC DE DEMANDE.
         WORD        NILK            < INDEX 1ER OCTET DE LA VALEUR.
         WORD        SP6             < CLEAR BUFFER DE TRAVAIL.
         WORD        SP7             < GET/RELEASE SECTEUR DK.
         WORD        SP8             < INIT. W AVEC @BUFFER ALLOUE.
         WORD        SP9             < MOVE VALEUR.
         WORD        SP10            < E/S DK 1 SECTEUR.
         WORD        SP11            < E/S DK VALEUR ENTIERE.
         WORD        SP12            < INSERT/DELETE NOM.
         WORD        SP13            < E/S DK AVEC ARG=@SECTEUR.
         WORD        SP14            < A <-- (BUFSAV).
         WORD        SP20
         WORD        SP21
         WORD        SP40
         WORD        Z23             < FONCTION NON RECONNUE,
         WORD        Z28             < ENVOI DE LA DEMANDE COURANTE,
         WORD        Z36             < SORTIE OK, AVEC 'BOX',
         WORD        Z51             < SORTIE OK,
         WORD        Z36XY2          < TEST D'EXTENSION DE VOLUME,
         WORD        Z26             < ERREUR DE <NOM>.
         WORD        Z26XX           < ERREUR "SATURATION D'UN ESPACE"...
         WORD        RELATS          < DEMANDE SUIVANT-SERIE.
         WORD        NIL             < AOVAL
         WORD        NILK            < ASTRAV
         WORD        XXSGN9          < VGROUP.
         WORD        SXSGFN          < SGNSGF.
         WORD        SGNUI           < ISGNU ('DKU' INTERDIT POUR 'LNU').
         WORD        NIL             < ASGNU.
         WORD        MONT0           < NVSGNU.
         WORD        NILK            < SGNCDA.
<
< PILE :
<
XWPILE:  VAL         LPILEH+XXSGN3
PILLNU:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        D C T   D E L E T E - N O M  :
<
<
DCTDLN:  EQU         $
PSTDLN:  WORD        K;K;K;K;COM+DEPCS;DCTDLN;NIL;PILDLN;HANDLR;SMST;SO;SE
       #@ASCI        " DLN"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR
         WORD        FILTRS
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC.
         DZS         LSEM
         WORD        NIL             < TETE.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT.
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLSAV          < HANDLER GENERAL.
         WORD        HDLDLN          < HANDLER SPECIFIQUE DELETE-NOM.
         WORD        K;XXSGN1        < ETAT : ETAT1='8001 AFIN
                                     < DE CALCULER LE NOMBRE DE CHAMPS
                                     < A DEPLACER EN FONCTION DE
                                     < L'OPDEM D'APPEL
                                     < N=K SI OPDEM=2,N=1 SI OPDEM='A
         WORD        XBITS0          < BITSEM.
         WORD        XXNTRY;TRYVID
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXDCTF          < 'DCT' NON CONNECTABLE...
         WORD        SGNFUP          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE :
<
VARDLN:  EQU         $
         IF          VARDLN-DCTDLN-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        DLNNOM,X        < RELAI NOM SYSTEME.
DLNNOM:  EQU         $
         WORD        NILK            < 1ER MOT DU NOM SYSTEME.
         DZS         XXSGN2          < DESTINES A L'ACN DU DEMANDEUR.
         BYTE        EON;K
         DZS         LNOMS/NOCMO     < NOM ARGUMENT.
         WORD        NIL             < RELAI-VALEUR.
         WORD        BUFDLN          < ADRESSE MOT DU BUFFER DE TRAVAIL.
         WORD        NILX            < RELAI VERS LE NOM ARGUMENT.
         DZS         LDEM0B          < BLOC DE DEMANDE.
         WORD        NILK            < INDEX 1ER OCTET DE LA VALEUR.
         WORD        SP6             < CLEAR BUFFER DE TRAVAIL.
         WORD        SP7             < GET/RELEASE SECTEURS DK.
         WORD        SP8             < INIT. DE W AVEC @BUFFER.
         WORD        SP9             < MOVE VALEUR.
         WORD        SP10            < E/S DK (1SECTEUR).
         WORD        SP11            < E/S VALEUR SUR DK.
         WORD        SP12            < INSERT/DELETE NOM.
         WORD        SP13            < E/S DK AVEC ARG=@SECTEUR.
         WORD        SP14            < A <-- (BUFSAV).
         WORD        SP20            < LECTURE DU DESCRIPTEUR DE VOLUME,
         WORD        SP21            < REECRITURE DU DESCRIPTEUR DE VOLUME.
         WORD        SP40
         WORD        Z23             < FONCTION NON RECONNUE,
         WORD        Z28             < ENVOI DE LA DEMANDE COURANTE,
         WORD        Z36             < SORTIE OK, AVEC 'BOX',
         WORD        Z51             < SORTIE OK,
         WORD        Z36XY2          < TEST D'EXTENSION DE VOLUME,
         WORD        Z26             < ERREUR DE <NOM>.
         WORD        Z26XX           < ERREUR "SATURATION D'UN ESPACE"...
         WORD        RELATS          < DEMANDE DE LA VALEUR SUIVANTE
                                     < EN SERIE LORS DU TEST PRECEDANT
                                     < LE DELETE.
         WORD        NIL             < AOVAL
         WORD        NILK            < ASTRAV
         WORD        XXSGN9          < VGROUP.
         WORD        SXSGF0          < SGNSGF.
         WORD        SGNU0           < ISGNU.
         WORD        NIL             < ASGNU.
         WORD        MONT0           < NVSGNU.
         WORD        NILK            < SGNCDA.
<
< PILE :
<
XWPILE:  VAL         LPILEH+XXSGN3-2
PILDLN:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        D C T   S U I V A N T   S E R I E  :
<
<
DCTNXS:  EQU         $
PSTNXS:  WORD        K;K;K;K;COM+DEPCS;DCTNXS;NIL;PILNXS;HANDLR;SMST;SO;SE
       #@ASCI        " NXS"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR
         WORD        FILTRS
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0
         DZS         LSEM
         WORD        NIL             < TETE.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT.
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLSAV
         WORD        HDLNXT          < HANDLER SPECIFIQUE NEXT.
         WORD        K;XYSGN1        < ETAT : ETAT1=0.
         WORD        XBITS0          < BITSEM.
         WORD        XXNTRY;TRYVID
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXDCTF          < 'DCT' NON CONNECTABLE...
         WORD        SGNFUQ          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE :
<
VARNXS:  EQU         $
         IF          VARNXS-DCTNXS-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        NXSNOM,X        < RELAI NOM-SYSTEME.
NXSNOM:  EQU         $
         WORD        K
         DZS         XXSGN2          < ACN DEMANDEUR.
         BYTE        EON;K
         DZS         LNOMS/NOCMO     < NOM ARGUMENT.
         WORD        K
         WORD        NIL             < ADRESSE MOT DU BUFFER DE TRAVAIL !!!
         WORD        NILX            < RELAI NOM-ARGUMENT.
         DZS         LDEM0B          < BLOC DE DEMANDE.
         WORD        K
         WORD        SP6
         WORD        SP7
         WORD        SP8
         WORD        SP9
         WORD        SP10
         WORD        SP11
         WORD        SP12
         WORD        SP13
         WORD        SP14            < INUTILE, J'ESPERE !!!
         WORD        SP20
         WORD        SP21
         WORD        SP40
         WORD        Z23             < FONCTION NON RECONNUE,
         WORD        Z28             < ENVOI DE LA DEMANDE COURANTE,
         WORD        Z36             < SORTIE OK, AVEC 'BOX',
         WORD        Z51             < SORTIE OK,
         WORD        Z36XY2          < TEST D'EXTENSION DE VOLUME,
         WORD        Z26             < ERREUR DE <NOM>.
         WORD        Z26XX           < ERREUR "SATURATION D'UN ESPACE"...
         WORD        RELATS          < DEMANDE DE LA VALEUR DU NOEUD
                                     < SUIVANT EN SERIE.
         WORD        NIL             < AOVAL
         WORD        NILK            < ASTRAV
         WORD        XXSGN9          < VGROUP.
         WORD        SXSGFN          < SGNSGF.
         WORD        SGNUI           < ISGNU ('DKU' INTERDIT A 'NXS').
         WORD        NIL             < ASGNU.
         WORD        MONT0           < NVSGNU.
         WORD        K
<
< PILE :
<
XWPILE:  VAL         LPILEH+XXSGN3-2
PILNXS:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        D C T   S U I V A N T   P A R A L L E L E  :
<
<
DCTNXP:  EQU         $
PSTNXP:  WORD        K;K;K;K;COM+DEPCS;DCTNXP;NIL;PILNXP;HANDLR;SMST;SO;SE
       #@ASCI        " NXP"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR
         WORD        FILTRS
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0
         DZS         LSEM
         WORD        NIL             < TETE.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT.
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLSAV
         WORD        HDLNXT          < HANDLER SPECIFIQUE NEXT.
         WORD        K;XYSGN1        < ETAT : ETAT1=0.
         WORD        XBITS0          < BITSEM.
         WORD        XXNTRY;TRYVID
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXDCTF          < 'DCT' NON CONNECTABLE...
         WORD        SGNFUQ          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE :
<
VARNXP:  EQU         $
         IF          VARNXP-DCTNXP-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        NXPNOM,X        < RELAI NOM-SYSTEME.
NXPNOM:  EQU         $
         WORD        K
         DZS         XXSGN2          < ACN DEMANDEUR.
         BYTE        EON;K
         DZS         LNOMS/NOCMO     < NOM-ARGUMENT.
         WORD        K
         WORD        NIL             < ADRESSE MOT DU BUFFER DE TRAVAIL !!!
         WORD        NILX            < RELAI NOM-ARGUMENT.
         DZS         LDEM0B          < BLOC DE DEMANDE.
         WORD        K
         WORD        SP6
         WORD        SP7
         WORD        SP8
         WORD        SP9
         WORD        SP10
         WORD        SP11
         WORD        SP12
         WORD        SP13
         WORD        SP14            < INUTILE, J'ESPERE !!!
         WORD        SP20
         WORD        SP21
         WORD        SP40
         WORD        Z23             < FONCTION NON RECONNUE,
         WORD        Z28             < ENVOI DE LA DEMANDE COURANTE,
         WORD        Z36             < SORTIE OK, AVEC 'BOX',
         WORD        Z51             < SORTIE OK,
         WORD        Z36XY2          < TEST D'EXTENSION DE VOLUME,
         WORD        Z26             < ERREUR DE <NOM>.
         WORD        Z26XX           < ERREUR "SATURATION D'UN ESPACE"...
         WORD        RELATP          < DEMANDE DE LA VALEUR DU NOEUD
                                     < SUIVANT PARALLELE.
         WORD        NIL             < AOVAL
         WORD        NILK            < ASTRAV
         WORD        XXSGN9          < VGROUP.
         WORD        SXSGFN          < SGNSGF.
         WORD        SGNUI           < ISGNU ('DKU' INTERDIT A 'NXP').
         WORD        NIL             < ASGNU.
         WORD        MONT0           < NVSGNU.
         WORD        K
<
< PILE :
<
         CALL        #SISP CMS5 DOL2#
PILNXP:  EQU         $-DEPILE
XWPILE:  VAL         LPILEH+XXSGN3-2
         CALL        #SISP CMS5 GENPIL2#
         CALL        #SISP CMS5 CHECK#
         PAGE
<
<
<        H A N D L E R   G E N E R A L   D E
<        G E S T I O N   D E S   ( N O M S , V A L E U R S )  :
<
<
<        PHILOSOPHIE DES NOMS :
<                      SOIT UN <NOM> AUQUEL UN DEMANDEUR
<                    VEUT ASSOCIER UNE CERTAINE VALEUR. <NOM>
<                    VA ETRE RANGE DANS L'ARBRE GENERAL DU
<                    SYSTEME. POUR EVITER LES CONFLITS DE NOM ENTRE
<                    UTILISATEURS (...), L'ESPIONNAGE (...),
<                    ON ASSOCIE A CHAQUE DEMANDEUR UN NUMERO
<                    DE COMPTE OU <ACN>. LE SYSTEME A UN NUMERO
<                    DE COMPTE COMMUN A TOUS SES MODULES :SYS.
<                      FINALEMENT UN <NOM> DEMANDEUR DEVIENT
<                    POUR LE SYSTEME UN <NOM-SYSTEME>, TEL QUE :
<
<                    <NOM-SYSTEME>::=<ACN><EON><NOM><EON>.
<
<                    (<EON> DESIGNE UN CARACTERE SPECIAL DE FIN
<                    DE NOM RENDU NECESSAIRE PAR LES NOMS QUI
<                    POSSEDENT DES RACINES COMMUNES TELS QUE
<                    'DEBUT' ET 'DEBUTANT'...)
<
<
<        EXTENSION D'ADRESSAGE PAR VOLUME :
<                      SOUS CERTAINES CONDITIONS, LA <VALEUR>
<                    ATTACHEE A UN <NOM> PEUT ETRE EN FAIT UN
<                    CHAINAGE VERS UN BLOC DE TYPE "IMAGE"
<                    SITUE A UNE CERTAINE ADRESSE, SUR UN
<                    CERTAIN VOLUME. CET ACCES A DES VOLUMES
<                    MONTABLES N'EST AUTORISE QUE POUR 'LON',
<                    'STN' ET 'DLN', CE QUI FAIT QUE LES
<                    VOLUMES SONT PRIVES (ATTACHES A UN
<                    SEUL <ACN>), MAIS CE N'EST PAS UNE
<                    CONTRAINTE AU NIVEAU SYSTEME, IL
<                    SUFFIT DE SE SOUVENIR DE LA COMMANDE
<                    "!L" SOUS ":SYS"...
<                      ON NOTERA ENFIN QUE POUR 'LON' ET
<                    'STN' LE BLOC DE TYPE "IMAGE" EST
<                    ECHANGE DIRECTEMENT ENTRE 'DKU'
<                    ET 'MEMTV'.
<
<
<        NOTA :
<                      LORSQUE L'EXTENSION SUR VOLUME
<                    EST DEMANDEE (VOIR 'ASDEM'), ALORS
<                    QU'IL N'Y A PAS DE VOLUME REEL-
<                    LEMENT MONTE (VOIR 'BOX'), ALORS
<                    TOUT EST REALISE, SAUF L'ACCES AU
<                    VOLUME 'NSPDKG' (A SAVOIR L'ALLO-
<                    CATION OU LE RELEAASE DE BLOCS,
<                    LA MISE A JOUR DU DESCRIPTEUR
<                    DU VOLUME,...) ET LES TRANSFERTS
<                    ENTRE 'MEMTV' ET LE VOLUME ; CELA
<                    PERMET DES REDEMARRAGES A "FROID"
<                    DU SYSTEME...
<
<
<        UTILISATION DE ETAT1 ET NBCCH :
<                    (ETAT1)=VALEUR INITIALE DE NBCCH AVANT CHAQUE
<                            RECUPERATION DE <NOM>(/<ACN>).
<                            SI ETAT1='8001 (<  0), SON DERNIER
<                            BIT EST UN MASQUE APPLIQUE A Y (=2 OU 7 :
<                            INDEX DU <NOM-SYSTEME> PERMETTANT DE
<                            CALCULER NBCCH EN FONCTION DE L'OPDEM
<                            D'APPEL (NBCCH=K SI OPDEM=2, ET
<                            NBCCH=1 SI OPDEM=A)).
<                    (NBCCH)=NBRE COURANT DE CHAMPS A RECUPERER MOINS 1.
<
<        A T T E N T I O N  :
<                      'NBCCH' N'EST PAS UNE ZONE ; IL
<                    EST MANIPULE DANS UN REGISTRE (CF.
<                    LA BOUCLE DE RECUPERATION DE <ACN><NOM>) !!!
<
<
<        ARGUMENT :
<                    (AMDEM)=ADRESSE-OCTET D'UNE ZONE MEMOIRE
<                            CONTENANT :
<                              <NOM><EON><VALEUR>.
<                              (<VALEUR> EST LA VALEUR A ASSOCIER
<                              A <NOM>).
<                    (CODEM)=LONGUEUR OCTET DE CETTE ZONE ; DANS LE CAS
<                            DES EXTENSIONS SUR VOLUME, ON A ALORS :
<                                      MOCG(CODEM)=NUMERO DE LA PREMIERE PAGE
<                                                  DE 32K DE LA 'CDA' UTILISEE,
<                                      MOCD(CODEM)=LVALU*NOCMO IMPERATIVEMENT.
<                    (ASDEM) : SI <0 : LA VALEUR SUIT IMMEDIATEMENT
<                                      LE NOM, MAIS ATTENTION, POUR
<                                      'LON', 'STN' ET 'DLN', LE
<                                      CHAMP 'MSGNU', S'IL CONTIENT
<                                      LA VALEUR 'ISGNU', PRECISE
<                                      QU'IL S'AGIT D'UNE EXTENSION
<                                      SUR VOLUME AMOVIBLE, LA VALEUR
<                                      REELLE DU DEPLACEMENT ETANT
<                                      DANS 'MSGNU')'MMOT'... LE 'CODEM'
<                                      DONNE ALORS LA LONGUEUR NON
<                                      COMPRIS LE BLOC DE TYPE "IMAGE".
<                              SI >=K: ASDEM DONNE LE DEPLACEMENT DE LA
<                                      VALEUR PAR RAPPORT A L'ORIGINE
<                                      DU NOM, C'EST-A-DIRE AMDEM.
<                                      (DEPLACEMENT EN OCTETS !!!!)
<                    (OPDEM)='2 : ON CONCATENERA <ACN> DEVANT <NOM>,
<                            'A : ON NE FERA PAS CETTE CONCATENATION ; CE
<                                 MODE RESERVE AU NUMERO DE COMPTE :SYS,
<                                 ET AU SYSTEME PERMET DE TRAVAILLER
<                                 DIRECTEMENT SUR LE CATALOGUE PRIMAIRE
<                                 DES NUMEROS DE COMPTE.
<                    (A NOTER QUE CES 2 CODES SONT DES CODES D'ECRITURE
<                    A CAUSE DES SWAPPINGS EVENTUELS...)
<                                 NOTA : LE BIT 'XXXSGF' PERMET DANS LE
<                                 CAS DE 'LON', 'STN' ET 'DLN' DE DISCRI-
<                                 MINER LES APPELS PROVENANT DU 'SGF' VIA
<                                 LE CCI DES AUTRES ; AINSI, ON PEUT ESPERER
<                                 QUE LES UTILISATEURS NE POURRONT PAS
<                                 CREER D'ITEMS RESSEMBLANT A DES FICHIERS
<                                 LORSQUE LE BIT 'OTODLN' DE 'ETASYS' EST A 0.
<                    (BOX) : TRANSMET, LORSQU'ELLE EST VALIDE
<                            S'IL Y A UN VOLUME MONTE POUR LE
<                            DEMANDEUR :
<                            =+NSPDKG : UN VOLUME EST MONTE,
<                            =-NSPDKG : IL N'Y A PAS DE VOLUME MONTE.
<
<
FGSGNA:  VAL         FGSGNA          < VOIR LES DEFINITIONS
FGSGN:   VAL         FGSGN           < DU SYSTEME...
<
<
<        ENTRY DU HANDLER :
<                    HDLSAV : ENTREE NUMERO DE COMPTE IMPLICITE : CELUI
<                             CONTENU DANS LA DCT DANS LE CAS D'UN
<                             UTILISATEUR, OU :SYS SINON.
<                    HDLSVS : ENTREE AVEC LE NUMERO DE COMPTE :SYS
<                             IMPLICITE.
<                    HDLSVU : ENTREE AVEC NUMERO DE COMPTE PRECISE
<                             DEVANT LE NOM ARGUMENT.
<
<
<                    CODES-ERREUR :
<                                    1 : <NOM> ERRONE,
<                                    2 : ARGUMENTS ERRONNES.
<                                    3 : LE NOM EXISTE DEJA POUR
<                                        UN STORE,
<                                    4 : LE NOM N'EXISTE PAS POUR
<                                        UN LOAD/DELETE.
<                                        OU BIEN IL S'AGIT D'UN ITEM
<                                        DE CONNEXION AU SGF, POUR
<                                        LEQUEL LE FICHIER EXISTTE ENCORE.
<                                    5 : EN MODE NEXT (SERIE OU PARAL-
<                                        LELE) LE SUIVANT DEMANDE
<                                        N'EXISTE PAS.
<                                    8 : PLUS DE PLACE DANS L'ARBRE, OU
<                                        BIEN DANS L'ESPACE 'DKM'...
<                                    10: UN ACCES 'DKU' A ETE DEMANDE SUR UN
<                                        HANDLER POUR LEQUEL CELA EST INTERDIT.
<                                    11: LORS D'UN ACCES 'DKU' LA LONGUEUR DE
<                                        LA <VALEUR> DIFFERE DE LVALU*NOCMO(=4).
<                                    12: LE DESCRIPTEUR DU VOLUME EST MAUVAIS.
<                                    13: LE VOLUME DEMANDE N'EST PAS LE VOLUME
<                                        MONTE.
<
<
<*******************************************************************************
ENNE::   VAL         1               < NOM ERRONE,
ENAE::   VAL         '0@@@@+I        < ARGUMENTS ERRONES,
ENNES::  VAL         '0@@@@+I        < LE NOM EXISTE DEJA POUR UN STORE,
ENNX::   VAL         '0@@@@+I        < LE NOM N'EXISTE PAS POUR LOAD/DELETE,
ENSX::   VAL         '0@@@@+I        < LE SUIVANT N'EXISTE PAS EN NEXT.
ENPDP::  VAL         '0@@@@+I+I+I    < PLUS DE PLACE DANS L'ARBRE, OU
                                     < BIEN SUR 'DKM'...
ENDKUS:: VAL         '0@@@@+I+I+I+I+I+I+I+I
                                     < UN ACCES 'DKU' A ETE DEMANDE, ALORS
                                     < QUE CELA EST INTERDIT SUR CE HANDLER.
ENDKUL:: VAL         '0@@@@+I        < UN ACCES 'DKU' A ETE DEMANDE, ET LA
                                     < LONGUEUR DE <VALEUR> EST MAUVAISE.
ENDKUV:: VAL         '0@@@@+I        < LE DESCRIPTEUR DU VOLUME EST MAUVAIS.
ENDKUW:: VAL         '0@@@@+I        < LE VOLUME DEMANDE N'EST PAS LE VOLUME
                                     < MONTE.
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         ENNES
ENNES:  @VAL         '0@@@@          < ERREUR : NOM PRE-EXISTANT POUR UN 'STN'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         ENNX
ENNX:   @VAL         '0@@@@          < ERREUR : NOM INEXISTANT POUR 'LON'/'DLN'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         ENSX
ENSX:   @VAL         '0@@@@          < ERREUR : SUIVANT INEXISTANT EN 'NXP/NXS'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
         USE         W,DEM0
         USE         L,DCT0
RZ23:    EQU         $
         BR          VAR+RAZ23       < FONCTION NON RECONNUE...
<
<
<        E N T R Y   : S Y S   I M P L I C I T E  :
<
<
HDLSVS:  EQU         $
         LA          ACNSYS
         LB          ACNSYS+U        < RECUPERATION (A,B)=':SYS'.
         STA         VAR+NOMSX1
         STB         VAR+NOMSX1+U    < ON FORCE ':SYS' DEVANT LE
         IF          U-1,,XEIF%,
         IF          TOUT CELA EST IDIOT !!!
XEIF%:   VAL         ENDIF
                                     < NOM ARGUMENT.
         LXI         FGSGNA          < BIEN QUE L'ON AIT FORCE ':SYS'
                                     < ON FAIT COMME SI CE N'ETAIT PAS
                                     < :SYS, EN EFFET, L'ACN DU
                                     < DEMANDEUR N'EST PAS OBLIGATOI-
                                     < REMENT CELUI DU SYSTEME, ET
                                     < AINSI ON BLOQUE LA FONCTION 'A.
         JMP         Z66
<
<
<        E N T R Y   A C N   P R E C I S E  :
<
<
HDLSVU:  EQU         $
         LA          ARGDEM+OPDEM    < VALIDATION DE LA FONCTION
                                     < DEMANDEE.
         CPI         FGSGNA          < SEULE '2 EST AUTORISEE.
         JMP         Z91             < VERS UN TRAITEMENT IDENTIQUE
                                     < A LA FONCTION 'A SUR HDLSAV.
<
<
<        E N T R Y   A C N   I M P L I C I T E  :
<
<
HDLSAV:  EQU         $
<
< DISCRIMINATION DES APPELS "NORMAUX"
< DES APPELS POUR LE "SGF" (CAS DE
< 'HDLSTN', 'HDLLON' ET 'HDLDLN') :
<
         LBI         SXSGFN          < (B)=APPEL NORMAL A PRIORI...
         LA          ARGDEM+OPDEM
         TBT         XXXSGF          < ALORS ???
         JNC         Z18XX           < OUI, "ITEM NORMAL"...
         RBT         XXXSGF          < NON, "ITEM SGF",
         STA         ARGDEM+OPDEM    < ON EFFACE 'XXXSGF',
         LBI         SXSGFF          < ET (B)=APPEL SGF...
Z18XX:   EQU         $
         STB         VAR+SGNSGF      < ET MEMORISATION DE LA NATURE DE L'APPEL.
<
< RECUPERATION DE L'<ACN> DU DEMANDEUR :
<
         LA          ARGDEM+ETADEM   < (A)=NSP DU DEMANDEUR.
         CPI         NSPACT          < EST-CE LE NIVEAU ESCLAVE, PAR
                                     < L'INTERMEDIAIRE D'UN NIVEAU
                                     < DE SERVICE ????
         JNE         Z18             < NON, C'EST LE SYSTEME.
<
< CAS D'UNE DEMANDE ESCLAVE ; ALORS W QUI
< CONTIENT L'ADRESSE DE LA DEMANDE DEMESC,
< DONNE AUSSI A UNE TRANSLATION PRES
< L'ADRESSE DE L'ACN DE L'ESCLAVE DEMANDEUR :
<
         LA          ACNESC-DEMESC,W
         LB          ACNESC-DEMESC+U,W
         JMP         Z19             < (A,B)=ACN DE L'ESCLAVE DEMANDEUR.
<
< CAS DU SYSTEME DEMANDEUR :
<
Z18:     EQU         $
         LA          ACNSYS
         LB          ACNSYS+U        < (A,B)=<ACN> DU SYSTEME.
Z19:     EQU         $               < (A,B)=<ACN> DEMANDEUR.
         STA         VAR+NOMSX1      < GENERATION DU <NOM-SYSTEME>.
         STB         VAR+NOMSX1+U
<
< VALIDATION DE LA FONCTION DEMANDEE (EN
< TENANT COMPTE DU NUMERO DE COMPTE DU
< DEMANDEUR) :
<
<
<        ON A ICI :
<                    (A,B)=<ACN> DEMANDEUR.
<
         LXI         FGSGNA          < INITIALISATION A PRIORI, LE
                                     < DEMANDEUR N'EST PAS :SYS.
         CP          ACNSYS
         JNE         Z66             < CE N'EST PAS :SYS (X=2).
         LR          B,A
         CP          ACNSYS+U
         JNE         Z66             < CE N'EST PAS :SYS (X=2).
         LXI         FGSGN           < C'EST :SYS (X='A).
Z66:     EQU         $
XXSGN5:: VAL         NOMSX1-NOMS*NOCMO < RANG DU PREMIER CARACTERE DU <NOM-
                                     < SYSTEME LORSQU'IL N'Y PAS CONCATENATION
                                     < AUTOMATIQUE <ACN> ET <NOM>.
XXSGN4:: VAL         XXSGN2*NOCMO+W+XXSGN5
                                     < (+1 A CAUSE DE 'EON') IDEM, LORSQU'IL
                                     < Y A CONCATENATION...
         IF          XXSGN4-XVACN7,,XEIF%,
         IF          ATTENTION : LA VALEUR ANTICIPEE DE 'XXSGN4' EST FOLLE !!!
XEIF%:   VAL         ENDIF
         IF          XXSGN4-XXSGN5-XVACN5,,XEIF%,
         IF          ATTENTION : LA VALEUR ANTICIPEE DE 'XXSGN5' EST FOLLE !!!
XEIF%:   VAL         ENDIF
         LYI         XXSGN4          < A PRIORI, (Y)=RANG DU PREMIER
                                     < CARACTERE DE <NOM> DANS
                                     < <NOM-SYSTEME>. (CONCATENATION
                                     < DEMANDEE <ACN> ET <NOM>).
         LA          ARGDEM+OPDEM    < (A)=FONCTION DEMANDEE.
         CPI         FGSGNA
         JE          Z68             < OK, FONCTION 'AVEC CONCATENATION'
                                     < DE <ACN> ET <NOM>.
         CPR         A,X             < TEST DES AUTRES FONCTIONS
                                     < EN TENANT COMPTE DE L'<ACN>
                                     < DEMANDEUR.
Z91:     EQU         $               < ENTRY POUR HDLSVU.
         JNE         RZ23            < ERREUR : FONCTION NON RECONNUE,
                                     < OU FONCTION 'A DEMANDEE PAR
                                     < UN <ACN> DIFFERENT DE :SYS.
         LYI         XXSGN5          < (Y)=RANG DU PREMIER CARACTERE DU <NOM>
                                     <     LORSQUE LA CONCATENATION N'EST
                                     <     PAS DEMANDEE.
Z68:     EQU         $
         TBT         XXXSGF          < VALIDATION DE L'ORIGINE DE L'APPEL,
         JNC         Z68XX           < ARRIVE ICI, 'XXXSGF' NE PEUT ETRE QUE
                                     < NUL DANS L'OPDEM...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE POURQUOI JE ME SUIS TROMPE !!!
<
Z68XX:   EQU         $
<
<
<        T E S T   D E   L ' E X T E N S I O N   S U R   V O L U M E  :
<
<
         IF          SGNUI-K,XEIF%,,
         IF          ATTENTION : LE 'CPZ' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         CPZ         VAR+ISGNUV      < L'EXTENSION EST-ELLE VALIDE ???
         JL          Z68XX9          < NON, 'ISGNUV' RESTE INTACT,
         IF          SGNU0-K,,XEIF%,
         IF          ATTENTION : LE 'STZ' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         STZ         VAR+ISGNUV      < OUI, ON L'INHIBE A PRIORI...
Z68XX9:  EQU         $
         LA          ARGDEM+ASDEM    < (A)='ASDEM' DE LA DEMANDE :
XWOR%1:  VAL         MSGNU=K
         SLRD        XWOR%1          < ET ACCES AU DISCRIMINATEUR DES ACCES
                                     < AUX EXTENSIONS SUR VOLUME...
                                     < (B)=RESIDU DE 'ASDEM'...
XWOR%1:  VAL         -XWOR%1
XWOR%2:  VAL         CODBT=FMASK(K?MSGNU=FCINST)MSGNU
         IF          XWOR%2-L,,XEIF%,
         ANDI        MSGNU>XWOR%1    < EXTRACTION DU CHAMP 'MSGNU'.
XEIF%:   VAL         ENDIF
         IF          XWOR%2-BSGNU,,XEIF%,
         IF          ATTENTION : 'BSGNU' EST BIZARRE !!!
XEIF%:   VAL         ENDIF
         CPI         ISGNU           < ALORS, EST-CE L'EXTENSION VOLUME ???
         JNE         Z68XX1          < NON...
<
< CAS OU L'ACCES VOLUME EST DEMANDE :
<
         RBT         MSGNU=BSGNU     < ON SUPPRIME LE BIT DE DISCRIMINATION,
                                     < CE QUI DONNE :
                                     < (A)='NSP' D'ACCES AU DISQUE DE SUPPORT
                                     <     DU VOLUME D'EXTENSION.
         IF          SGNUI-K,XEIF%,,
         IF          ATTENTION : LE 'CPZ' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         CPZ         VAR+ISGNUV      < OUI, MAIS L'ACCES AU VOLUME EST-IL
                                     < AUTORISE SUR CE HANDLER ???
         JL          Z68XX2          < NON, ERREUR !!!
<
< CAS OU L'ACCES VOLUME EST LICITE :
<
         PSR         A
         LA          NSPTYP          < (A)='NPSTYP' DE LA DEMANDE INCIDENTE :
         TBT         VBOX            < LA 'BOX' EST-ELLE VALIDE ???
         PLR         A
         JNC         Z68XX5          < NON, ON LAISSE 'A' INCHANGE...
         LA          BOX             < OUI, (A)='BOX'...
Z68XX5:  EQU         $
<
<        ON A ICI :
<                    (A)='NSP' DU DISQUE TRANSMIS PAR 'BOX' SI CELLE-CI EST
<                        VALIDEE (CE 'NSP' EST EN POSITIF OU EN
<                        NEGATIF SUIVANT QUE LE VOLUME EST MONTE
<                        OU PAS),
<                       ='NSP' DU DISQUE D'EXTENSION TRANSMIS PAR 'ASDEM'
<                        SINON.
<
         IF          ISGNPV-K,,XEIF%,
         IF          ATTENTION : LE 'STZ' EST IDIOT !!!
XEIF%:   VAL         ENDIF
         STZ         VAR+ASGNU       < A PRIORI, ON FAIT COMME SI LE VOLUME
                                     < N'ETAIT PAS MONTE...
<
< TEST DU VOLUME COURANT :
<
         JAG         Z68XX7          < (A)>0 : IL Y A UN VOLUME DE MONTE...
         NGR         A,A             < (A)<0 : IL N'Y A PAS DE VOLUME MONTE
                                     <         POUR CET UTILISATEUR, MAIS ON
                                     <         CONNAIT QUAND MEME LE 'NSP' DU
                                     <         DISQUE SUPPORT...
         JAG         Z68XX8          < OK,LE 'NVP' EST VALIDE...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT ON PEUT SE
<                    RETROUVER EN PRESENCE D'UN 'NVP'
<                    DE DISQUE SUPPORT D'EXTENSION NUL !!!
<
Z68XX8:  EQU         $
         JMP         Z68XX6          < ON VA TRAITER LA DEMANDE D'EXTENSION
                                     < LICITE, MAIS SANS FAIRE LES OPERATIONS
                                     < QUI ACCEDE REELLEMENT AU DISQUE ; POUR
                                     < CE FAIRE, ON A :
                                     < (ASGNU)='ISGNPV'...
<
< CAS OU L'OPERATION EST LICITE,
< ET QU'IL Y A UN VOLUME MONTE :
<
Z68XX7:  EQU         $
         PSR         A,X,L,W         < SAUVEGARDE EN PARTICULIER DE LA BASE
                                     < DE LA 'DCT' COURANTE ET DU 'NSP' DU
                                     < DU DISQUE D'EXTENSION 'A'.
         LR          L,W             < QUE L'ON MET TEMPORAIREMENT DANS 'W'...
         LR          A,X             < (X)='NSP' DU SUPPORT DU VOLUME,
         LA          ETASYS          < (A)=LISTE DES INDICATEURS SYSTEME,
         TBT         NBITAB+NBITAB-NSPDK,X
                                     < ALORS, LE DISQUE DEMANDE EST-IL LA ???
         JC          Z68XXU          < OK, 'DKU' EST LA...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT LA DEMANDE DE
<                    MONTAGE A PU ETRE ACCEPTEE, ALORS
<                    QUE 'DKU' EST ABSENT, ET QUE LE
<                    'CCI' LE DETECTE ; PEUT-ETRE 'ETASYS'
<                    A-T'IL ETE MODIFIE DEPUIS A LA MAIN !!!
<
         JMP         Z68XXV          < ET ON FAIT COMME S'IL N'Y AVAIT PAS DE
                                     < VOLUME DE DEMANDE...
Z68XXU:  EQU         $
         BSR         ACADCT          < (A)=(L)=ADRESSE DE LA 'DCT' DU SUPPORT
                                     <         DU VOLUME D'EXTENSION.
         WORD        LAVOLV          < INSTRUCTION 'LA VAR+ABVOLU', QUI DONNE :
                                     < (A)=ADRESSE DU BUFFER DE DESCRIPTION
                                     <     DU VOLUME COURANT,
         LR          A,L             < (L)=ADRESSE DU DESCRIPTEUR DE VOLUME.
         STA         VAR-DCT0+ASGNU,W  < QUE L'ON SAUVEGARDE DANS LA 'DCT'
                                       < DU HANDLER COURANT DU 'SGN' (A NOTER
                                       < L'USAGE DE 'W' A LA PLACE DE 'L').
         IF          MONT0-K,,XEIF%,
         IF          ATTENTION : LES VALIDATIONS QUI SUIVENT SONT IDIOTES !!!
XEIF%:   VAL         ENDIF
         IF          NSPVID-K,,XEIF%,
         IF          ATTENTION : LES VALIDATIONS QUI SUIVENT SONT IDIOTES !!!
XEIF%:   VAL         ENDIF
         LA          VOLNSP,L        < (A)='NSP' D'INITIALISATION DU VOLUME,
         JALE        Z68XX3          < OU BIEN IL N'Y A PAS DE VOLUME MONTE,
                                     < OU BIEN LE DISK-PACK EN PLACE N'EST
                                     < PAS UN VOLUME...
         LA          VOLNUM,L        < (A)=NUMERO DU VOLUME COURANT :
         JANE        Z68XX4          < OK, LE VOLUME PARAIT BON (DU MOINS, IL
                                     < Y EN A UN DE MONTE...).
Z68XX3:  EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE : CELA PEUT SE PRODUIRE
<                    DANS LE CAS OU LE DISK-PACK AURAIT ETE
<                    CHANGE DISCRETEMENT ENTRE LE MOMENT DU
<                    MONTAGE ET MAINTENANT !!!
<
Z68XXV:  EQU         $
         PLR         A,X,L,W
         JMP         Z68XXW          < ET ON FAIT COMME SI L'ACCES 'DKU' N'AVAIT
                                     < PAS ETE DEMANDE...
<
< CAS D'UN ACCES 'DKU' DEMANDE,
< ALORS QUE L'ACCES EST POSSIBLE,
< ET LE VOLUME APPAREMMENT BON :
<
Z68XX4:  EQU         $
         STA         VAR-DCT0+NVSGNU,W
                                     < ON MEMORISE LE NUMERO DE VOLUME COURANT,
                                     < CAR ON EN AURA BESOIN DANS 'DLN' ET 'LON'
                                     < POUR COMPARER LE NUMERO DE VOLUME SUPPORT
                                     < DE L'ITEM ET LE NUMERO DU VOLUME MONTE.
         PLR         A,X,L,W
Z68XX6:  EQU         $
         STA         VAR+ISGNUV      < ET ON POSITIONNE L'INDICATEUR 'ACCES
                                     < A 'DKU' DEMANDE ET LICITE', AVEC
                                     < LE 'NSP' D'ACCES AU DISQUE...
                                     < NE PAS OUBLIER 'ASGNU' !!!
Z68XXW:  EQU         $
         SLLD        NBITMO          < RECUPERATION DU RESIDU DE 'ASDEM',
                                     < DANS 'B'...
XWOR%1:  VAL         MSGNU=K
         SARS        NBITMO-XWOR%1   < DONT ON ETEND LE SIGNE, CAR EN EFFET
                                     < LE DEPLACEMENT <NOM>-<VALEUR> DANS LE
                                     < CAS DES EXTENSIONS SUR VOLUME TIENT
                                     < DANS LE CHAMP 'MSGNU')'MMOT'.
         STA         ARGDEM+ASDEM    < ET ON FAIT COMME SI DE RIEN N'ETAIT (ON
                                     < FAIT EN SORTE QU'A PARTIR D'ICI 'ASDEM'
                                     < QUE L'EXTENSION SUR VOLUME SOIT
                                     < DEMANDEE OU PAS, 'ASDEM' SOIT LE MEME...)
         IF          PAGSGN-MOCG,,XEIF%,
         IF          ATTENTION : LES INSTRUCTIONS SUR OCTET SONT INVALIDES !!!
XEIF%:   VAL         ENDIF
         LBY         ARGDEM+CODEM    < (A)=NUMERO DE LA PREMIERE PAGE DE 32K
                                     <     DE LA 'CDA' UTILISEE PAR CETTE EX-
                                     <     TENSION SUR VOLUME,
         CPI         XNDSLO          < EST-ELLE VALIDE ???
         JG          Z68YX1          < NON, CELA SIGNIFIE QUE LE 'CODEM' NE
                                     < VALAIT PAR 'LVALU*NOCMO' LORSQUE LE
                                     < 'HDLSVC' A RECU CETTE DEMANDE, DONC,
                                     < EN CAS D'ERREUR ON NE FAIT RIEN...
         STA         VAR+SGNCDA      < OK, ON LE MEMORISE EN VUE DE SON UTILI-
                                     < SATION PAR 'SP40'...
         LAI         K
         STBY        ARGDEM+CODEM    < PUIS ON CLEAR LE MOCG(CODEM), AFIN QU'ON
                                     < FASSE COMME SI DE RIEN N'ETAIT...
Z68YX1:  EQU         $
<
<
<        A C C E S   A   < N O M >  :
<
<
Z68XX1:  EQU         $
         LA          ARGDEM+ASDEM    < VALIDATION DE ASDEM.
         CP          ARGDEM+CODEM    < TEST DE SORTIE DE LA VALEUR DE
                                     < L'ESPACE REPRESENTE PAR AMDEM
                                     < ET CODEM.
         JGE         RZ23            < ERREUR : ASDEM>=CODEM.
<
< RECUPERATION DU <NOM> ARGUMENT :
<
         LA          ARGDEM+AMDEM    < (A)=@OCTET DE LA ZONE MEMOIRE
                                     <     NOM+VALEUR.
         BSR         AMEM            < GENERATION D'1N RELAI D'ACCES
                                     < AU <NOM>.
         STA         VAR+ANOM        < RELAI D'ACCES AU <NOM> DANS A.
<
<        ON A ICI :
<                    (X)=RANG DU 1ER CARACTERE DE <NOM>.
<
         LB          ARGDEM+CODEM    < (B)=CODEM ARG.
         CPZR        B               < VALIDATION.
         JLE         RZ23            < ERREUR.
XWOR%1:  VAL         MOCG=K
XWOR%1:  VAL         -XWOR%1
         IF          MOCG>XWOR%1+N-YY8,,XEIF%,
         IF          ATTENTION : LE 'LBY' EST IDIOT !!!
XEIF%:   VAL         ENDIF
         LBY         ARGDEM+CODEM    < (A)=NOMBRE DE SECTEURS PAR DEFAUT
                                     <     NECESSAIRES A LA VALEUR ; CE
                                     <     NOMBRE EST APPROXIMATIF, CAR
                                     <     LE CODEM CONTIENT LE <NOM>
                                     <     EN PLUS DE LA <VALEUR>...
         NTRN
         CPI         TZSWAP-TZSCRA+QUANTA-E/QUANTA*QUANTA-E
         TRN
                                     < VALIDATION DU NOMBRE DE SECTEURS PAR
                                     < RAPPORT A LA CAPACITE DE LA MAP.
                                     < (CALCULEE A L'AIDE DE LA TAILLE DE
                                     < L'ESPACE DE SWAPPING...).
         JGE         RZ23            < ERREUR : <VALEUR> TROP GRANDE.
         ADR         X,B             < (B)=RANG DU DERNIER OCTET DE
                                     <     LA ZONE MEMOIRE NOM+VALEUR.
         LAI         EON
         STBY        VAR+NOMSX1+XXSGN2 < RESTAURATION A PRIORI DE <EON>
                                     < DERRIERE L'<ACN>, AU CAS OU
                                     < UN APPEL A 'HDLSVU' AVEC UN
                                     < <ACN> DE LONGUEUR ERRONNEE
                                     < AURAIT PRECEDE...
<
< DETERMINATION DU NOMBRE DE CHAMPS A DEPLACER :
<
         LA          ETAT1           < RECUPERATION DE ETAT1.
         JAGE        Z1020           < ETAT>=0 : ETAT1 DONNE
                                     < DIRECTEMENT LE NBRE DE CHAMPS
                                     < A DEPLACER -1.
         ANDR        Y,A             < SINON, ETAT1 EST UN MASQUE :
                                     < (A)=1 SI (Y)=7 (OPDEM=2),
                                     < (A)=K SI (Y)=2 (OPDEM=A).
         EORI        XYSGN2          < INVERSION DU BIT15 DE A :
                                     < (A)=K SI OPDEM=2 (1 CHAMP A MOVER),
                                     < (A)=1 SI OPDEM=A (2 CHAMPS).
<
< VALIDATION DE L'INDEX DU <NOM-SYSTEME>
< AVANT CHQUE CHAMP A DEPLACER :
<
Z1020:   EQU         $
         PSR         A               < SAUVEGARDE DU NOMBRE DE CHAMPS
                                     < RESTANT A DEPLACER
         LR          Y,A             < POUR VALIDATION DE (Y).
         CPI         XXSGN4          < (Y) NE PEUT VALOIR QUE 2 OU 7 !!!
         JG          Z25             < ERREUR : ON DEPLACE 2 CHAMPS,
                                     < ET L'<ACN> DONNE EN ARGUMENT
                                     < EST ERRONE...
<
< BOUCLE DE RECUPERATION DE <NOM> :
< (OU <ACN>)
<
Z20:     EQU         $
<
<        ON A ICI :
<                    (X)=INDEX <NOM>,
<                    (Y)=INDEX <NOM-SYSTEME>.
<
<*******************************************************************************
         BSR         ASIMUL          < SIMULATION DE L'INSTRUCTION SUIVANTE :
         LBY         &VAR+ANOM       < (A)=UN CARACTERE DE <NOM>.
<*******************************************************************************
         RBT         BITPAR          < RAZ DU BIT DE PARITE, POUR EVITER PAR
                                     < EXEMPLE DE CREER DES NOMS CONTENANT DES
                                     < 'EOT' INTRODUITS ICI AVEC LA PARITE...
         JAE         Z25             < LES CARACTERES 'NULL' SONT
                                     < INTERDITS (CF. L'USAGE SPECIAL
                                     < QUI EN EST FAIT DANS L'AR-
                                     < BORICULTEUR).
         XR          X,Y             < ECHANGE INDEX.
         STBY        &VAR+ANOMS      < GENERATION <NOM-SYSTEME>.
         XR          X,Y             < RE-ECHANGE DES INDEX.
         ADRI        I,X             < PROGRESSION INDEX <NOM>.
         ADRI        I,Y             < PROGRESSION INDEX <NOM-SYSTEME>.
         CPI         EON             < LE CARACTERE TRANSFERE ETAIT-IL
                                     < LE CARACTERE <EON> ????
         JE          Z21             < OUI, DONC LE TRANSFERT EST TERMINE.
         LR          Y,A
         CPI         LNOMS+XXSGN4    < VALIDATION INDEX <NOM-SYSTEME>.
         JGE         Z25             < ERREUR, LE CARACTERE <EON>
                                     < MANQUE...
         CPR         B,X
         JNE         Z20             < OK, ACCES CARACTERE SUIVANT DE
                                     < <NOM>.
<
< CAS OU ARRIVE A L'EXPIRATION DU COMPTE
< D'OCTETS, ON N'A PAS RENCONTRE L'<EON> :
<
         BSR         ACANSP          < CANSP RENVOIE : (A)=NSP DU HANDLER
                                     < QUI UTILISE ACTUELLEMENT HDLSAV.
         CPI         NSPNXP          < EST-CE 'HDLNXP' ???
         JE          Z21             < L'ABSENCE DE <EON> EST DONC
                                     < NORMALE (CF. LES RECONSTI-
                                     < TUTIONS DE CATALOGUES).
         CPI         NSPNXS          < EST-CE 'HDLNXS' ??
         JNE         Z25             < NON, LE HANDLER COURANT,
                                     < N'ETANT NI 'HDLNXP', NI
                                     < 'HDLNXS', L'ABSENCE DE <EON>,
                                     < EST UNE ERREUR 'NOM-ERRONNE'.
<
< FIN DE BOUCLE DE RECUPERATION :
<
Z21:     EQU         $
         PLR         A               < RECUPERATION ET
         ADRI        -I,A            < DECREMENTATION DU
                                     < NOMBRE DE CHAMPS A DEPLACER
         JAGE        Z1020           < IL Y A ENCORE DES CHAMPS
                                     < DU TYPE <ACN>, <NOM> A
                                     < DEPLACER.
<
< DETERMINATION DE LA POSITION DE LA VALEUR :
<
         LA          ARGDEM+ASDEM
FOLLOW:: VAL         FGSGNN          < VALEUR STANDARD A DONNER A 'ASDEM' POUR
                                     < INDIQUER UNE VALEUR QUI SUIT IMMEDIATE-
                                     < MENT UN NOM...
<*******************************************************************************
XWOR%F:  VAL         FOLLOW
FOLLOW: @VAL         '0@@@@          < 'ASDEM' SI <VALEUR> SUIT <NOM>.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
         IF          FOLLOW-K,XEIF%,,
         IF          ATTENTION : LE 'JAL' QUI SUIT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JAL         Z92             < ASDEM<0 : LA VALEUR SUIT
                                     < IMMEDIATEMENT LE NOM, D'OU :
                                     < IVAL=X.
         LR          A,X             < DANS LE CAS OU ASDEM>=K, ON A :
                                     < IVAL=ASDEM.
Z92:     EQU         $
         STX         VAR+IVAL        < SAUVEGARDE DANS IVAL DE
                                     < L'INDEX DU 1ER OCTET DE LA
                                     < VALEUR DU <NOM>.
<
< TEST D'UN ACCES AUX EXTENSIONS SUR VOLUME :
<
         CPZ         VAR+ISGNUV      < UN ACCES AUX VOLUMES EST-IL DEMANDE ???
         JLE         Z92X1           < NON, OU BIEN IL EST ILLICITE...
<
< CAS D'UN ACCES EXTENSIONS DEMANDE :
<
         LR          B,A             < (A)='CODEM' ARGUMENT=INDEX DU PREMIER
                                     <     OCTET N'APPARTENANT PLUS A LA
                                     <     <VALEUR>,
         SBR         X,A             < (A)=LONGUEUR EN OCTETS DE <VALEUR>,
         CPI         LVALU*NOCMO     < CETTE LONGUEUR EST-ELLE BIEN CELLE QUI
                                     < EST IMPOSEE LORS DES EXTENSIONS SUR
                                     < VOLUME ???
XWOR%1:  VAL         PAGSGN)MMOT     < MASQUE DU 'CODEM' REEL...
         IF          LVALU*NOCMO-XWOR%1,XEIF%,XEIF%,
         IF          ATTENTION : LA MISE DU NUMERO DE LA PREMIERE PAGE
         IF          DE 32K DE LA 'CDA' UTILISEE LORS DES EXTENSIONS SUR
         IF          VOLUME DANS PAGSGN(CODEM) EST IMPOSSIBLE !!!
XEIF%:   VAL         ENDIF
         JNE         Z92X2           < NON, ALORS LA DEMANDE EST REFUSEE...
Z92X1:   EQU         $
<
<
<        T E S T   D E   L ' E X I S T E N C E   D E   < N O M >  :
<
<
<
< GENERATION D'UNE DEMANDE AU GESTIONNAIRE DES ARBRES :
< (L'ARBORICULTEUR ?????)
<
         LA          VAR+TENEXT      < INITIALISATION DE L'ASDEM VERS
                                     < LE HANDLER HDLTRI.
         STA         VAR+DEMSAV+T+ASDEM
         LRM         A
         BYTE        NSPTRI;COSBT?VBOX=FMASK(K=FCINST
                                     < VALIDATION DE LA 'BOX'...
         STA         VAR+DEMSAV+XXNSP      < NSPTYP DE LA DEMANDE.
         LAI         FGT             < FONCTION DE TEST.
         STA         VAR+DEMSAV+T+OPDEM
         LAD         VAR+NOMSX1      < @MOT DU <NOM-SYSTEME>.
         SLLS        NOCMO=K         < @OCTET DU <NOM-SYSTEME>.
         STA         VAR+DEMSAV+T+AMDEM
         ADRI        -XXSGN5,Y       < (Y)=NBRE DE CARACTERES DU
                                     < <NOM-SYSTEME>.
         STY         VAR+DEMSAV+T+CODEM
         LAD         VAR+DEMSAV
         XR          A,W             < (W)=@DEMANDE A L'ARBORICULTEUR,
                                     < (A)=@DEMANDE ARGUMENT DE HDLSAV.
         BSR         ACHAND          < ENVOI DE LA DEMANDE DE TEST
                                     < DU <NOM-SYSTEME>.
         WAIT        WEIO            < ATTENTE DE FIN DE TEST.
<
<        NOTA :
<                      LES CONDITIONS DE RETOUR DE HDLTRI
<                    (ETADEM) NE SERONT TESTEES QUE DANS LES
<                    HANDLERS SPECIFIQUES, PUISQUE
<                    L'INTERPRETATION DIFFERE SUIVANT LA
<                    FONCTION QUI EST DEMANDEE.
<
         LR          A,W             < RESTAURE (W)=@DEMANDE A HDLSAV.
         LA          VAR+DEMSAV+T+ETADEM
<
<        ON A ICI :
<                    (A)=CONDITION DE RETOUR DE L'ARBORICULTEUR,
<                    (X)=RANG DU 1ER OCTET DE LA VALEUR.
<                    (B)=RANG DERNIER OCTET DE LA VALEUR.
<
         BSR         ARIT            < APPEL DU HANDLER SPECIFIQUE.
         IF          XBNV-BITSIG,,XEIF%,
         IF          ATTENTION : DES TESTS MERDERONT !!!
XEIF%:   VAL         ENDIF
<
<
<        A T T E N T I O N  :
<                      'ETAT0' DES HDLSAV DOIT ETRE POSITIONNE
<                    PAR LES HANDLERS SPECIFIQUES...
<
<
<
<
<        S O R T I E S   D U   H A N D L E R  :
<
<
Z22:     EQU         $
         RSR
<
< ERREUR : <NOM> TROP LONG :
<
Z25:     EQU         $
         PLR         A               < CAR ON AVAIT EMPILER LE
                                     < NOMBRE DE CHAMPS A DEPLACER
         LAI         ENNE            < CODE-ERREUR.
Z24:     EQU         $
         STA         ETAT0           < RENVOI DU CODE-ERREUR DANS ETAT0.
         JMP         Z22             < VERS LA SORTIE.
<
< ERREUR : ARGUMENT DE LA DEMANDE ERRONNES :
<
Z23:     EQU         $
         LAI         ENAE            < CODE ERREUR.
         JMP         Z24             < VERS LE RENVOI DU CODE ERREUR
                                     < AU DEMANDEUR.
<
< ERREUR : DEMANDE D'EXTENSION SUR
< VOLUME A UN HANDLER 'SGN' POUR
< LEQUEL CELA EST ILLICITE :
<
Z68XX2:  EQU         $
         LAI         ENDKUS          < CODE D'ERREUR,
         JMP         Z24             < VERS SON RENVOI AU DEMANDEUR...
<
< ERREUR : LA LONGUEUR DE <VALEUR>
< EST MAUVAISE (DIFFERENTE DE
< LVALU*NOCMO) LORS D'UNE EXTEN-
< SION SUR VOLUME) :
<
Z92X2:   EQU         $
         LAI         ENDKUL          < CODE D'ERREUR,
         JMP         Z24             < VERS SON RENVOI AU DEMANDEUR...
         PAGE
<
<
<        C L E A R   B U F F E R   D E   T R A V A I L  :
<
<
<        FONCTION :
<                      CETTE VERSION DE 'SP6' REMPLACE
<                    LA VERSION QUI AVAIT A SA CHARGE
<                    D'ALLOUER ET RELEASER DES BUFFERS
<                    ALLOUES DYNAMIQUEMENT ; AUJOURD'HUI,
<                    LES CHOSES ONT CHANGE, LE BUFFER
<                    EST LIE STATIQUEMENT AU HANDLER, ET
<                    ON SE CONTENTE DE LE RAZER...
<
<
SP6:     EQU         $
         PSR         A,X,W
         LRM         X
         WORD        YY7*QUANTA      < (X)=NOMBRE DE MOTS A RAZER.
         BSR         VAR+ASP14       < A <-- (BUFSAV).
         LR          A,W             < (W)=ADRESSE DU BUFFER.
         IF          MONT0-K,,XEIF%,
         IF          ATTENTION : LE 'STZ' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         IF          NSPVID-K,,XEIF%,
         IF          ATTENTION : LE 'STZ' DE CLEAR DU BUFFER EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
SP6X:    EQU         $
         STZ         O,W             < RAZ DU BUFFER MOT A MOT...
         ADRI        P,W             < AU MOT SUIVANT...
         JDX         SP6X            < S'IL EXISTE...
         PLR         A,X,W
         RSR
         PAGE
<
<
<        G E T / R E L E A S E   S E C T E U R S  :
<
<
<        ARGUMENTS :
<                    (A)=NSPGET/NSPREL, SUIVANT LA FONCTION DEMANDEE,
<                    (B)=NBRE DE SECTEURS CONCERNES.
<
<
SP7:     EQU         $
         SWBR        A,A
         STA         VAR+DEMSAV+XXNSP      < GENERATION DU NSPTYP DE LA
                                     < DEMANDE.
         BSR         VAR+ASP14       < (A)=ADRESSE MOT DU BUFFER STATIQUE.
         ADRI        SMAP,A          < (A)=@MOT DE LA LISTE DE SECTEURS.
         STA         VAR+DEMSAV+T+AMDEM
         STB         VAR+DEMSAV+T+CODEM
         STZ         VAR+DEMSAV+T+OPDEM
         BR          VAR+RAZ28       < VERS L'ENVOI DE LA DEMANDE.
         PAGE
<
<
<        I N I T I A L I S A T I O N   D E   W  :
<
<
<        RESULTAT :
<                    (W)=ADRESSE MOT DU BUFFER STATIQUE.
<                    (A)=(W) AVANT L'APPEL.
<
<
SP8:     EQU         $
         BSR         VAR+ASP14       < (A)=ADRESSE MOT DU BUFFER STATIQUE.
         XR          A,W             < INITIALISATION DE W.
         RSR
         PAGE
<
<
<        A   <--   ( B U F S A V )
<        E T   V A L I D A T I O N  :
<
<
SP14:    EQU         $
         LA          VAR+BUFSAV      < A <-- (BUFSAV),
         JAL         SP14X           < OK, (BUFSAV) DOIT ETRE UNE ADRESSE
                                     < DANS L'ESPACE 'DOL2'...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ETRE TRES PRUDENT, ET VERIFIER SI
<                    ON EST DANS 'NXP' OU 'NXS', AUQUEL
<                    CAS, CELA SIGNIFIERAIT QUE LES
<                    BUFFERS 'BUFNXP' ET 'BUFNXS' ETAIENT
<                    UTILES !!!
<                      ATTENTION, METTRE QUELQUE CHOSE
<                    DANS 'A'...
<
SP14X:   EQU         $
         RSR
         PAGE
<
<
<        D E P L A C E M E N T   V A L E U R  :
<
<
<        FONCTION :
<                      CETTE ROUTINE EST CHARGEE DES
<                    TRANSFERTS ENTRE LE BUFFER DU
<                    SECTEUR-MAP, ET LA 1ERE PARTIE DE LA VALEUR
<                    (2*SIND OCTETS AU MAX).
<
<
<        ARGUMENTS :
<                    (W)=ADRESSE BUFFER,
<                    (A)=ADRESSE OCTET DU RECEPTEUR (ZONE ARG, OU BUFFER),
<                    (B)=ADRESSE OCTET DE L'EMETTEUR (BUFFER OU ZONE ARG).
<                    SI (A) OU (B) EST NUL (MAIS PAS LES 2...),
<                    IL EST ALORS REMPLACE PAR L'ADRESSE MOT
<                    DE LA PREMIERE PARTIE DE LA VALEUR DANS
<                    LE BUFFER STATIQUE !!!
<
<
SP9:     EQU         $
         STZ         VAR+DEMSAV+T+OPDEM < MISE EN LECTURE.
         JANE        Z27X            < (A) EST UNE ADRESSE OCTET...
         BSR         VAR+ASP14       < A <-- (BUFSAV).
         ADRI        SVAL,A          < (A)=ADRESSE MOT DE LA PREMIERE PARTIE
                                     <     DE LA VALEUR : AMDEM EST UNE ADRESSE
                                     <     MOT : BIT15(OPDEM)=K.
Z27X:    EQU         $
         STA         VAR+DEMSAV+T+AMDEM
         CPZR        B
         JNE         Z27XX           < (B) EST UNE ADRESSE OCTET...
         BSR         VAR+ASP14
         LR          A,B             < B <-- (BUFSAV).
         ADRI        SVAL,B          < (B)=ADRESSE MOT DE LA PREMIERE PARTIE
                                     <     DE LA VALEUR : ASDEM EST UNE ADRESSE
                                     <     MOT : BIT15(OPDEM)=1 :
         IC          VAR+DEMSAV+T+OPDEM
         IF          WHOMEM-NBITMO+B,,XEIF%,
         IF          ATTENTION : LE 'IC' PRECEDENT EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
Z27XX:   EQU         $
         STB         VAR+DEMSAV+T+ASDEM
         LAI         NSPMEM
         SWBR        A,A
         SBT         TYPAD           < UNE DES 2 ADRESSES EST UNE ADRESSE
                                     < DE MOT (SUPERIEURE A 32K).
         STA         VAR+DEMSAV+XXNSP < GENERATION D'UN NSPTYP VERS
                                     < LE HANDLER HDLMEM.
<
< CALCUL DU NBRE D'OCTETS A DEPLACER :
<
         LA          SIND+SINDL,W    < (A)=LONGUEUR OCTETS DE LA VALEUR.
         JAE         Z40             < RIEN A FAIRE, LE COMPTE
                                     < D'OCTETS EST NUL.
         JAG         SYSR8J          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ALLER VERIFIER LE CONTENU DU
<                    BUFFER STATIQUE, POUR VOIR SI
<                    ON A BIEN CHARGE UN SECTEUR-MAP...
<
         JMP         Z40             < ET ON NE FAIT RIEN...
SYSR8J:  EQU         $
         LRM         B
         WORD        NOCMO*TZVAL     < (B)=NOMBRE D'OCTETS MAX QUE L'ON PEUT
                                     <     RANGER DANS LE SECTEUR MAP.
         CPR         B,A             < LA VALEUR TIENT-ELLE ENTIEREMENT
                                     < DANS LE SECTEUR MAP ???
         JLE         Z27             < A<=B : (A) EST BON, TOUTE LA
                                     < VALEUR TIENT DANS LE SECTEUR-MAP...
         LR          B,A             < A>B : ON NE VA DONC METTRE QUE
                                     < LES (B) PREMIERS OCTETS DE LA
                                     < VALEUR (2*TZVAL) DANS LE SECTEUR-MAP.
Z27:     EQU         $
         STA         VAR+DEMSAV+T+CODEM
<
< PARTIE COMMUNE A TOUTES LES ROUTINES
< D'APPEL DE HANDLERS :
<
Z28:     EQU         $
         LAD         VAR+DEMSAV
         XR          A,W             < (W)=@DEMSAV,
                                     < (A)=SAVE W.
         BSR         ACHAND          < ENVOI DE LA DEMANDE (W).
         BSR         ACHANW          < ATTENTE DE FIN DE SERVICE.
         LR          A,W             < RESTAURE W.
Z40:     EQU         $
         RSR                         < GO BACK...
         PAGE
<
<
<        L E C T U R E / E C R I T U R E
<                    1   S E C T E U R  :
<
<
<        ARGUMENTS :
<        1- SP10 :
<                    (A)=ADRESSE OCTET DU BUFFER.
<                      OU '0000 S'IL S'AGIT DU BUFFER STATIQUE (BUFSAV).
<                    (B)=ADRESSE SECTEUR SUR 'DKM',
<                    (X)=COMPTE OCTETS DE L'ECHANGE,
<                    (Y)=K SI LECTURE, 2 SI ECRITURE.
<        2- SP13 : LA DEMANDE DEMSAV EST DEJA GENEREE SAUF EN CE QUI
<                  CONCERNE L'ADRESSE SECTEUR ASDEM :
<                    (B)=ADRESSE SECTEUR SUR 'DKM'.
<
<
XXSP10:: VAL         ZERO-ZERO       < INDICATEUR 'BUFFER STATIQUE'...
SP10:    EQU         $
         STY         VAR+DEMSAV+T+OPDEM
         STA         VAR+DEMSAV+T+AMDEM
         STX         VAR+DEMSAV+T+CODEM
SP13:    EQU         $
         LR          B,A
         CP          INFINI          < VALIDATION ADRESSE SECTEUR
         JNE         SYSR8K
         BSR         ASYSER
<
<        QUE FAIRE ???
<                      DIEU SEUL LE SAIT, COMMENT EN
<                    EST-ON ARRIVE LA...
<
SYSR8K:  EQU         $
         CPZ         VAR+DEMSAV+T+AMDEM
         JNE         Z28REM          < CE N'EST PAS LE BUFFER STATIQUE...
         IF          XXSP10-K,,XEIF%,
         IF          LE TEST PRECEDENT EST IDIOT...
XEIF%:   VAL         ENDIF
         BSR         VAR+ASP14       < (A)=ADRESSE MOT DU BUFFER STATIQUE.
         STA         VAR+DEMSAV+T+AMDEM
Z28REM:  EQU         $
         LAI         K
         JNE         Z28REN          < CE N'EST PAS LE BUFFER STATIQUE...
         SBT         TYPAD           < DANS LE CAS DU BUFFER STATIQUE, ON
                                     < INDIQUE QU'IL S'AGIT D'UNE ADRESSE
                                     < MOT (AU-DELA DE 32K).
Z28REN:  EQU         $
         STA         VAR+DEMSAV+XXNSP < 'NSPTYP'.
         LAI         NSPDKB          < ACCES A LA MEMOIRE VIRTUELLE,
                                     < QUI SERA PEUT-ETRE INEFFECTIF...
         STBY        VAR+DEMSAV+XXNSP < NSP DU NSPTYP (NSPDKM OU NSPDKB).
         STB         VAR+DEMSAV+T+ASDEM < ADRESSE SECTEUR
         BR          VAR+RAZ28       < VERS L'ENVOI DE LA DEMANDE.
         PAGE
<
<
<        E / S   O P T I M I S E E   D ' U N E
<        V A L E U R   S U R   D I S Q U E  :
<
<
<        OPTIMISATION :
<                      ELLE PORTE SUR LES REGROUPEMENTS DES
<                    SECTEURS CONTIGUS; EN EFFET LORS D'UNE ALLOCATION DE
<                    SECTEURS, IL A Y A PAS MAL DE CHANCES POUR
<                    QU'UN CERTAIN NBRE DE SECTEURS SOIENT
<                    ALLOUES DE MANIERE CONTIGUE. IL EST DONC
<                    SOUHAITABLE LORS DES E/S DE LES REGROUPER POUR
<                    MINIMISER LE NBRE DE TRANSFERT !!!!!
<
<
<        ARGUMENTS :
<                    (Y)=K : UN ECHANGE DK-->VALEUR EST DEMANDE,
<                        =2 : UN ECHANGE VALEUR-->DK EST DEMANDE.
<                    (W)=ADRESSE DU BUFFER.
<
<
<        A T T E N T I O N  : DETRUIT W !!!
<
<
SP11:    EQU         $
         LA          SIND+SINDL,W    < (A)=COMPTE OCTETS DE LA VALEUR,
                                     <     OU Q8000 S'IL S'AGIT DE LA LECTURE
                                     <     DU SECTEUR-MAP DE LA VALEUR,
                                     <     EN EFFET, ON NE CONNAIT PAS
                                     <     LA LONGUEUR REELLE.
         PSR         A               < SAVE COMPTE OCTETS DE LA VALEUR.
         LRM         B,X
         WORD        NOCMO*TZVAL     < (B)=VALEUR DE TRANSLATION DES ADRESSES
                                     <     OCTET DES BUFFERS, ET DE DECOMPTE
                                     <     DES OCTETS RESTANT A ECHANGER.
         WORD        YY8Q            < (X)=TAILLE EN OCTETS D'UN QUANTUM.
         LA          VAR+ANOM        < (A)=@OCTET DE LA VALEUR.
         TBT         NBITMO-B        < CETTE @OCTET EST-ELLE IMPAIRE ???
         SBCR        B               < SI OUI, ON DECREMENTE D'UNE
                                     < UNITE LA VALEUR DE TRANSLATION
                                     < DES ADRESSES, AFIN QUE POUR LES
                                     < EVENTUELS MORCEAUX SUIVANTS DE
                                     < DE LA VALEUR, ON SE TROUVE A
                                     < DES FRONTIERES DE MOT, AFIN
                                     < DE NE PAS CONTRARIER LES
                                     < HANDLERS DISQUES...
         STA         VAR+AOVAL       < SAVE ADR OCTET DE LA VALEUR
                                     < (FRONTIERE DE MOT OU D'OCTET)
<
<        ON A DONC ICI :
<                    (B)=2*TZVAL OU 2*TZVAL-1 :
<                    (B)=VALEUR DE TRANSLATION DE 'ANOM' ET DE
<                      DECOMPTE DU COMPTE D'OCTETS RESIDULES,
<                      TEL QUE LES'ANOM' SUIVANTS SOIENT
<                      TOUS A UNE FRONTIERE DE MOTS. POUR LE 1ER
<                      CELA N'A PAS D'IMPORTANCE, CAR IL EST
<                      RAMENE A UNE FRONTIERE DE MOTS PAR HDLMEM.
<
XXSGN6:: VAL         -2              < INDICATEUR 'PROCHAINE E/S PORTE
                                     < SUR LE SECTEUR-MAP'.
XXSGN7:: VAL         -1              < INDICATEUR 'LE PROCHAIN SECTEUR A
                                     < LIRE SUIT LE SECTEUR-MAP'.
         LAI         XXSGN6
         STA         VAR+ASTRAV      < ASTRAV=-2 : MEMORISATION
                                     < DU FAIT QUE LA PROCHAINE
                                     < E/S PORTERA SUR LE SECTEUR
                                     < MAP DE LA VALEUR.
         BSR         VAR+ASP14       < (A)=ADRESSE MOT DU BUFFER A UTILISER
                                     < LA PREMIERE FOIS, MAIS SI JE NE ME
                                     < TROMPE PAS, CETTE VALEUR N'EST PAS
                                     < UTILISEE, CAR AVANT L'APPEL DE 'SP10',
                                     < ON FAIT : A <-- 0.
                                     < LA 1ERE FOIS.
<
< BOUCLE D'ECHANGE DES SECTEURS :
<
Z29:     EQU         $
<
< UTILISATION DE ASTRAV ET ETADEM:
<        ASTRAV=-2: LA PROCHAINE E/S PORTERA SUR LE
<                    SECTEUR-MAP
<        ASTRAV=-1: LA PROCHAINE E/S PORTERA SUR LE 1ER
<                    SECTEUR SUIVANT LE SECTEUR-MAP
<        ASTRAV=K : ALORS, ASDEM CONTIENT L'ADRESSE DU SECTEUR
<                    PRECEDENT
<        ETADEM=1ER SECTEUR D'UN GROUPE DE SECTEURS CONSECUTIFS
<                    LORSQUE ASTRAV=K
<
<
<        A T T E N T I O N  :
<                      LES ADRESSES DE BUFFER PEUVENT ETRE
<                    DES ADRESSES DE MOT (CAS DU BUFFER
<                    STATIQUE BUFSAV) OU DES ADRESSES D'
<                    OCTET (DANS LA VALEUR) !!!
<
<
         PSR         B               < SAVE LA VALEUR DE TRANSLATION.
         LB          SMAP,W          < (B)=@SECTEUR COURANT, ET
                                     < (A)=@OCTET BUFFER COURANT !!!!
<
< PRISE EN COMPTE DU SECTEUR (B) :
<
         PSR         A,B             < SAVE (A)=@OCTET DU BUFFER,
                                     < ET (B)=@SECTEUR.
         LA          VAR+ASTRAV      < RECUPERATION DE L'INDICATEUR ASTRAV
         CPI         XXSGN6          < LA PROCHAINE E/S DOIT-ELLE
                                     < PORTER SUR LE SECTEUR-MAP
                                     < DE LA VALEUR ???
         JE          Z990            < OUI : SECTEUR-MAP.
         JAL         Z993            < NON,ASTRAV=-1 DONC IL S'AGIT
                                     < DU 1ER SECT SUIVANT LE SECT-MAP
                                     < DE LA VALEUR
         LA          VAR+DEMSAV+T+ASDEM < ADRESSSE SECTEUR PRECEDENT
<
< CAS DES SECTEURS SUIVANTS LE SECTEUR-MAP
< ET LE 1ER SECTEUR DE LA VALEUR :
<
         SBR         B,A             < FORMONS LA DIFFERENCE ENTRE
                                     < A (@SECTEUR PRECEDENT) ET B
                                     < (@SECTEUR COURANT).
         CPI         -P              < LES 2 SECTEURS SONT-ILS CONSE-
                                     < CUTIFS ??? (C'EST-A-DIRE :
                                     < LE SECTEUR COURANT SUIT-IL D'UNE
                                     < UNITE LE SECTEUR PRECEDENT ???).
         JNE         Z991            < NON, IL FAUT FAIRE UNE E/S SUR
                                     < SUR LE GROUPE PRECEDENT DE
                                     < SECTEURS CONSECUTIFS...
<
< CAS DES SECTEURS CONSECUTIFS :
<
         LA          VAR+DEMSAV+T+CODEM
         ADR         X,A             < ON FAIT PROGRESSER LA LONGUEUR
                                     < COURANTE DU GROUPE DE SECTEURS
                                     < CONSECUTIFS.
         CP          VAR+VGROUP      < A-T'ON ATTEINT LE MAXIMUM DU NOMBRE
                                     < D'OCTETS GROUPABLES ???
         JG          Z991            < OUI, ON L'A DEPASSE, DONC ON VA
                                     < REALISER L'ECHANGE EN ATTENTE (EN
                                     < EXCLUANT DONT LE SECTEUR COURANT (B).
         STA         VAR+DEMSAV+T+CODEM
         PLR         A,B             < RESTAURE : (A)=@OCTET DU BUFFER,
                                     < ET (B)=@SECTEUR COURANT.
         JMP         Z992            < VERS LA MEMORISATION DU NOUVEAU
                                     < SECTEUR PRECEDENT.
<
< CAS DES SECTEURS NON CONSECUTIFS :
<
Z991:    EQU         $
         LB          VAR+DEMSAV+T+ETADEM
                                     < RECUPERATION DANS B DE L'ADRESSE
                                     < DU 1ER SECTEUR DU GROUPE DE
                                     < SECTEURS CONSECUTIFS QUE L'ON
                                     < A REPERE.
         BSR         VAR+ASP13       < E/S PORTANT SUR LE GROUPE DE
                                     < SECTEURS CONSECUTIFS DONT LE
                                     < 1ER EST A L'ADRESSE (B) ;
                                     < L'AMDEM ET LE CODEM DE DEMSAV
                                     < SONT DEJA POSITIONNES.
                                     < (AINSI QUE L'OPDEM...)
<
< INITIALISATION D'UN NOUVEAU GROUPE DE
< SECTEURS CONSECUTIFS (CAS DU 1ER SECTEUR
< APRES LE SECTEUR-MAP (ASDEM=-1) OU
< CAS DE 2 SECTEURS NON CONSECUTIFS).
<
Z993:    EQU         $
         PLR         A,B             < RESTAURE (A)=@OCTET DU BUFFER
                                     < COURANT ET RELATIF AU SECTEUR
                                     < DONT L'ADRESSE EST DANS B.
         STA         VAR+DEMSAV+T+AMDEM  < AMDEM(DEMSAV).
         STX         VAR+DEMSAV+T+CODEM  < CODEM(DEMSAV)).
         STB         VAR+DEMSAV+T+ETADEM < MEMORISATION DU 1ER SECTEUR
                                         < DU NOUVEAU GROUPE.
         STZ         VAR+ASTRAV      < POUR INDIQUER QUE ASDEM VA CONTE
                                     < NIR L'ADR DU SECT PRECEDENT
         JMP         Z992            < VERS LE CHANGEMENT DE SECTEUR
                                     < PRECEDENT.
<
< CAS DU SECTEUR-MAP DE LA VALEUR :
<
Z990:    EQU         $
         PLR         A,B             < RESTAURE (A)=@OCTET DU BUFFER DU
                                     < SECTEUR MAP ET (B)=@SECTEUR-MAP.
         LAI         XXSP10          < ON INDIQUE AINSI QUE L'ECHANGE
                                     < PORTE SUR LE BUFFER STATIQUE BUFSAV.
         BSR         VAR+ASP10       < ECHANGE DU SECTEUR-MAP D'ADRESSE
                                     < (B) DANS LE SENS (Y) ; A NOTER
                                     < AU PASSAGE QU'ON INITIALISE
                                     < AINSI L'OPDEM DE DEMSAV AVEC
                                     < (Y) POUR LES FUTURS APPELS DE
                                     < SP13.
         LBI         XXSGN7          < (B)=INDICATEUR QUE LE PROCHAIN
                                     < SECTEUR EST LE 1ER SECTEUR
                                     < APRES LE SECTEUR-MAP.
         STB         VAR+ASTRAV      < POUR INDIQUER QUE LA PROCHAINE
                                     < E/S PORTERA SUR LE 1ER SECT SUIVANT
                                     < LE SECTEUR-MAP
<
< CHANGEMENT DE SECTEUR PRECEDENT (ASDEM) :
<
Z992:    EQU         $
         STB         VAR+DEMSAV+T+ASDEM
<
< PROGRESSION DANS L'ECHANGE :
<
         PLR         B               < RESTAURE (B)=VALEUR DE TRANSLATION.
         PLR         A               < RESTAURE (A)=LONGUEUR OCTETS DE
                                     < LA VALEUR.
<
< TRAITEMENT DU CAS DE LA LECTURE DU SECTEUR-MAP :
<
         CP          INFINI          < SI (A)=Q8000, C'EST QU'ON VIENT
                                     < DE LIRE LE SECTEUR-MAP DE
                                     < LA VALEUR, ON EST DONC MAINTENANT
                                     < EN MESURE DE DETERMINER LA
                                     < VRAIE LONGUEUR DE LA VALEUR.
         JNE         Z37             < NON, CE N'EST PAS LA
                                     < LECTURE DU SECTEUR-MAP.
         LA          SIND+SINDL,W    < SI OUI, ON ACCEDE A LA LONGUEUR
                                     < REELLE.
                                     < A T T E N T I O N  : ON PEUT
                                     < UTILISER W, CAR IL N'A PAS ENCORE
                                     < ETE MODIFIE PAR UN ADRI 1,W.
         JAGE        Z992X           < OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ALLER VOIR LE BUFFER POINTE PAR (W), ET
<                    VERIFIER QU'IL CONTIENT L'INFINI, SIGNE D'UNE
<                    ERREUR 'DKM'...
<
         JMP         Z995            < ET ON ABANDONNE...
Z992X:   EQU         $
         CP          VAR+NOMS        < COMPARAISON A LA LONGUEUR
                                     < DEMANDEE.
                                     < (EN TRANSIT TEMPORAIRE DANS NOMS)
         JLE         Z993Y           < OK, ON EN DEMANDE PLUS OU
                                     < LA MEME LONGUEUR.
         LA          VAR+NOMS        < DANS LE CAS OU ON EN
                                     < DEMANDE MOINS, C'EST LA
                                     < LONGUEUR DEMANDEE QUI
                                     < L'EMPORTE...
         STA         SIND+SINDL,W    < LA LONGUEUR DEMANDEE REMPLACE
                                     < LA LONGUEUR REELLE DE LA VALEUR,
                                     < C'EST BEAUCOUP PLUS PRUDENT.
<
<
<        NOTA IMPORTANT :
<                      SI ON PASSE ICI, C'EST QUE LA MAP
<                    VIENT D'ETRE LUE ; IL S'AGIT DONC
<                    D'UNE OPERATION DE 'LOAD'. SI CE 'LOAD'
<                    EST A UNE ADRESSE-OCTET PAIRE,
<                    ET SI LE 'STORE' DE LA VALEUR QUE
<                    L'ON RECUPERE ETAIT A UNE ADRESSE-
<                    OCTET IMPAIRE, ON SAIT QU'ALORS
<                    LE DERNIER OCTET RANGE DANS LE
<                    SECTEUR-MAP EST DUPLIQUE AU DEBUT
<                    DE LA SUITE DE LA VALEUR ; ON A
<                    DONC UN OCTET EN TROP, IL FAUT
<                    DONC ALORS INCREMENTER D'UNE UNITE
<                    LE NOMBRE D'OCTETS DEMANDE DANS
<                    LA DEMANDE UTILISATEUR. DE PLUS
<                    LISANT UN OCTET DE TROP, LA VALEUR
<                    MISE EN MEMOIRE RISQUE D'ECRASER
<                    QUELQUE CHOSE (SOIT DANS L'ESPACE
<                    UTILISATEUR, SOIT EN DEHORS...),
<                    C'EST POURQUOI ON VA LIRE LA DEUXIEME
<                    PARTIE DE LA VALEUR (AVANT LA PREMIERE
<                    PARTIE INCLUSE DANS LA MAP RAPPELONS-LE)
<                    UN MOT PLUS BAS DANS LA MEMOIRE, D'OU
<                    UNE DECREMENTATION DE 2 UNITES DE
<                    SON ADRESSE OCTET. ENFIN, LE DECALAGE
<                    DE LA VALEUR SERA FAIT (LORSQUE NECESSAIRE)
<                    SYSTEMATIQUEMENT VERS LA DROITE (LE CODE
<                    'ZLEFT' EST CONSERVE, CAR ON NE SAIT
<                    JAMAIS...).
<
<
Z993Y:   EQU         $
         LA          SIND+SINDPI,W   < COMMENT FUT LE 'STORE' ???
         TBT         NBITMO-B        < PAIR OU IMPAIR ???
         JNC         Z993X           < 'STORE' PAIR, OK...
         LA          VAR+AOVAL       < COMMENT EST LE 'LOAD' ???
         TBT         NBITMO-B        < PAIR OU IMPAIR ???
         JC          Z993X           < 'LOAD' IMPAIR, OK...
         DC          VAR+ANOM        < DANS LE CAS D'UN 'STORE'
         DC          VAR+ANOM        < IMPAIR, ET D'UN 'LOAD' PAIR, ON
         DC          VAR+AOVAL       < NOUVELLE ADRESSE OCTET
         DC          VAR+AOVAL       < DE LA VALEUR...
         IC          SIND+SINDL,W    < LIT UN OCTET DE PLUS, 2 OCTETS
                                     < PLUS BAS DANS LA MEMOIRE...
Z993X:   EQU         $
         LA          SIND+SINDL,W    < (A)=NOMBRE D'OCTETS A RECUPERER...
Z37:     EQU         $
         SBR         B,A             < CALCUL DANS A DU COMPTE
                                     < D'OCTETS RESIDUELS.
         JALE        Z30             < C'EST FINI...
         IF          Q8000,XEIF%,,
         IF          ATTENTION : 'Q8000' DOIT ETRE NEGATIF !!!
XEIF%:   VAL         ENDIF
<
< CAS OU IL RESTE DES OCTETS :
<
         CPR         A,X             < REGARDONS SI LES OCTETS
                                     < RESIDUELS TIENNENT DANS UN
                                     < SECTEUR ????
         JLE         Z31             < ET NON.
         LR          A,X             < SI OUI, LA LONGUEUR D'ECHANGE
                                     < DEVIENT LE NBRE D'OCTETS RESIDUELS.
Z31:     EQU         $
         PSR         A               < SAVE LE COMPTE D'OCTETS ENCORE
                                     < A ECHANGER.
         ADRI        P,W             < POUR ACCES A L'ADRESSE DU
                                     < SECTEUR SUIVANT.
         LA          VAR+ANOM        < (A)=@OCTET DU 1ER OCTET A
                                     <     ECHANGER.
         ADR         B,A             < PROGRESSION DE L'@OCTET COURANTE
                                     < DE LA VALEUR.
         STA         VAR+ANOM        < & SAVE.
         LR          X,B             < NOUVELLE VALEUR DE TRANSALTION.
         JMP         Z29             < VERS L'ECHANGE SUIVANT.
<
< CAS OU IL N'Y A PLUS D'OCTETS A ECHANGER :
<
Z30:     EQU         $
         BSR         VAR+ASP8        < RESTAURATION DE 'W' SUR 'BUFSAV' ;
                                     < NOTONS QU'IL SERA SUREMENT ENCORE
                                     < DETRUIT...
         CPZ         VAR+ASTRAV
         JL          Z995            < ASTRAV=-1: LA VALEUR TENAIT
                                     < EN ENTIER DANS LE SECTEUR-MAP,
                                     < IL N'Y A DONC PLUS RIEN A FAIRE...
         LB          VAR+DEMSAV+T+ETADEM < SINON, RECUPERATION DANS
                                         < B DE L'ADRESSE DU 1ER
                                         < SECTEUR DU GROUPE COURANT.
         BSR         VAR+ASP13       < E/S SUR LE GROUPE COURANT DE
                                     < SECTEURS CONSECUTIFS.
         CPZR        Y               < LECTURE OU ECRITURE?
         JNE         Z995X1          < ECRITURE NE RIEN FAIRE
                                     < LECTURE: ALORS IL FAUT PEUT-ETRE
                                     < DECALER D'UN OCTET A DROITE OU
                                     < A GAUCHE LA
                                     < 2NDE PARTIE DE LA VALEUR QUE L'
                                     < ON VIENT DE LIRE
XXSGN8:: VAL         'AA             < MASQUE DE VALIDATION...
         LAI         XXSGN8
         SWBR        A,A             < A(BITS 0-14)= MASQUE DE VALIDATION
                                     < DERNIER BIT SIND+SINDPI
         EOR         SIND+SINDPI,W
         RBT         NBITMO-B        < MASQUE SUR BITS 0-14
         JAE         Z995X2          < OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      REGARDER SI ON EST BIEN EN PRESENCE
<                    D'UN SECTEUR-MAP DANS 'BUFSAV'...
<
         JMP         Z995            < ET ON ABANDONNE...
Z995X2:  EQU         $
         LA          SIND+SINDPI,W   < A(BIT 15)=FRONTIERE AU STORE
         EOR         VAR+AOVAL       < ADRESSE OCTET AU LOAD
         TBT         NBITMO-B        < MEMES FRONTIERES (SURES ET
                                     < RECONNUES...) AU LOAD ET AU
                                     < STORE?
         JNC         Z995            < OUI, DONC PAS DE RECADRAGE
                                     < NON,DONC RECADRAGE GAUCHE OU
                                     < DROIT DE LA 2NDE PARTIE DE LA VALEUR
         LRM         A,B
         WORD        -NOCMO*TZVAL    < POUR CALCULER LA LONGUEUR DE LA 2EME
                                     < PARTIE DE LA VALEUR DANS X.
         WORD        NOCMO*TZVAL     < (B)=POUR TRANSLATER L'ADRESSE OCTET
                                     <     DE LA VALEUR POUR CONNAITRE CELLE
                                     <     DE LA DEUXIEME PARTIE.
         AD          SIND+SINDL,W    < (A)=LONGUEUR DE LA 2EME PARTIE DE LA VALE
         LR          A,X             < QUE L'ON MET DANS X...
         LA          VAR+AOVAL
         TBT         NBITMO-B        < TEST FRONTIERE AU LOAD
         SBCR        B               < (B)=VALEUR DE TRANSLATION EN CONSE
                                     < QUENCE:
                                     < (B)=2*SIND SI FRONTIERE PAIRE
                                     < (B)=2*SIND-1 SINON
<
<        RAPPEL :
<                      COMME ANNONCE PRECEDEMMENT, ON
<                    VA FAIRE SYSTEMATIQUEMENT UN DECA-
<                    LAGE A DROITE, ON SUPPRIME DONC
<                    LE CODE SUIVANT :
<<<<     TBT         NBITMO-B
<<<<     JNC         ZLEFT
<
ZRIGHT:  EQU         $               < MOVE RIGHT
         ADR         B,A             < (A)=RELAI POUR INDEXATION ULTERIEURE
         LR          X,B
         ADRI        -Z,B            < (B)=INDEX DU MOVE,SUR DERNIER OCTET
                                     <     DE LA VALEUR
         LYI         -I              < (Y)=PAS DU MOVE (DE DROITE A
                                     < GAUCHE)
         JMP         ZRGLF
<
<        RAPPEL :
<                      COMME ANNONCE PRECEDEMMENT, BIEN
<                    QU'IL N'Y AIT PLUS QUE DES DECALAGES
<                    A DROITE, ON CONSERVE LE CODE 'ZLEFT',
<                    CAR ON NE SAIT JAMAIS !!!
<
ZLEFT:   EQU         $               < MOVE LEFT
         ADR         B,A             < (A)=RELAI POUR INDEXATION ULTERIEURE
         LBI         I               < (B)=INDEX DU MOVE,SUR 2ND OCTET
                                     <     DU 1ER SECTEUR
         LYI         I               < (Y)=PAS DU MOVE (DE GAUCHE A DROITE)
<
< BOUCLE DE DECALAGE DE LA DEUXIEME PARTIE DE LA VALEUR :
<
ZRGLF:   EQU         $
         SLRS        NOCMO=K         < (A)=RELAI MOT...
         SBT         BITX            < ...INDEXE
         STA         VAR+AOVAL       < EN MOT DE TRAVAIL
ZLOOP:   EQU         $               < BOUCLE DE MOVE D'UN OCTET
                                     < A DROITE OU A GAUCHE DE LA
                                     < SECONDE PARTIE DE LA VALEUR
         LR          X,W             < SAUVEGARDE COUNT
         LR          B,X             < INDEX OCTET
         LBY         &VAR+AOVAL
         SBR         Y,X
         STBY        &VAR+AOVAL
         ADR         Y,B             < PROGRESSION INDEX
         LR          W,X             < RESTAURATION COUNT
         JDX         ZLOOP
<
< DISCRIMINATION 'LOAD'/'STORE' :
<
         LYI         FGR             < RESTAURATION Y (LECTURE)
Z995:    EQU         $
         BSR         VAR+ASP8        < RESTAURE (W)=ADRESSE DU BUFFER ; MIEUX
                                     < VAUT LE FAIRE TROP QUE PAS ASSEZ...
         IF          FGR-K,,XEIF%,
         IF          ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         CPZR        Y               < EST-CE UN LOAD OU UN STORE ???
         JNE         Z995X1          < UN STORE ('FGW')...
<
< CAS DES 'LOADS' :
<
         LA          SIND+SINDPI,W
         TBT         NBITMO-B        < Y-A-T'IL EU 'STORE' IMPAIR ???
         JNC         Z995X1          < NON...
         LA          VAR+AOVAL
         TBT         NBITMO-B        < EST-CE UN 'LOAD' PAIR ???
         JC          Z995X1          < NON...
         DC          SIND+SINDL,W    < OUI, IL FAUT RETABLIR LA BONNE VALEUR
                                     < DE 'SINDL' QUE L'ON AVAIT INCREMENTEE,
                                     < CAR EN EFET LORS DU 'LOAD', A LA SUITE
                                     < DE 'SP11', ON APPELLE 'SP9', ET SI PAR
                                     < MALHEUR LA LONGUEUR DE LA VALEUR DEMAN-
                                     < DEE TIENT DANS LE SECTEUR-MAP, ON VA SE
                                     < RECUPERER UN OCTET DE TROP !!!
Z995X1:  EQU         $
         RSR
         PAGE
<
<
<        I N S E R T / D E L E T E   N O M  :
<
<
<        ARGUMENTS :
<                    (Y)=LONGUEUR <NOM-SYSTEME> SEUL,
<                    (A)=CARACTERE DE FONCTION ("+" OU "-"),
<                    (B)=ADRESSE DU SECTEUR-MAP.
<
<
SP12:    EQU         $
         STA         VAR+NOMS        < LE CARACTERE DE FONCTION EST
                                     < MIS DEVANT LE <NOM-SYSTEME>.
         ADRI        XXSGN5,Y        < (Y)=LONGUEUR DU <NOM-SYSTEME>
                                     <     POUR L'OPERATION DEMANDEE.
         LR          Y,X             < (X)=INDEX 1ER CARACTERE DERRIERE
                                     <     LE <NOM-SYSTEME>.
         LAI         KNUL
         STBY        &VAR+ANOMS      < MISE DE '0 EN DERNIER CARACTERE
                                     < DU <NOM-SYSTEME> AFIN QUE
                                     < L'ARBORICULTEUR Y INSERE
                                     < L'ADRESSE DU SECTEUR-MAP.
         STB         VAR+DEMSAV+T+ASDEM  < TRANSMISSION DE L'ADRESSE
                                         < DU SECTEUR-MAP PAR L'ASDEM.
         LAI         NSPTRI
         SWBR        A,A
         STA         VAR+DEMSAV+XXNSP    < NSPTYP VERS L'ARBORICULTEUR.
         LAI         FGID            < FONCTION INSERT/DELETE.
         STA         VAR+DEMSAV+T+OPDEM
         LAD         VAR+NOMS
         SLLS        NOCMO=K
         ADRI        NOCMO-E,A       < (A)=@OCTET DU CARACTERE DE FONCTION
                                     < ("+" OU "-") PRECEDANT LE
                                     < <NOM-SYSTEME>.
         STA         VAR+DEMSAV+T+AMDEM
         STY         VAR+DEMSAV+T+CODEM
         BR          VAR+RAZ28       < VERS L'EXECUTION DE L'INSERT/
                                     < DELETE DU NOM.
         PAGE
<
<
<        L E C T U R E   D U   D E S C R I P T E U R
<        D U   V O L U M E   C O U R A N T  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME LIT SUR
<                    LE DISQUE SUPPORT DES EXTENSIONS
<                    DE VOLUME LE DESCRIPTEUR DU
<                    VOLUME COURANT. ENSUITE, IL
<                    VERIFIE QUE CE DESCRIPTEUR EST
<                    BON, ET QUE DONC LE VOLUME
<                    COURANT EST BON...
<
<
<        ARGUMENTS :
<                    (A)='NSP' DU DISQUE SUPPORT DE VOLUME.
<
<
<        RESULTATS :
<                    (A)=ADRESSE DU BUFFER CONTENANT LE
<                        DESCRIPTEUR DU VOLUME COURANT.
<                        LES INDICATEURS SONT POSITIONNES
<                        TELS QU'ON PEUT FAIRE UN 'JE' SI
<                        LE DESCRIPTEUR EST BON, OU S'IL N'Y
<                        A PAS DE VOLUME MONTE...
<
<
SP20:    EQU         $
         PSR         X,W
         LR          A,X             < (X)='NSP' DU DISQUE SUPPORT DE
                                     <     L'EXTENSION DE VOLUME,
         LAD         VAR+DEMSAV
         LR          A,W             < (W)=ADRESSE DE LA DEMANDE QUE L'ON VA
                                     <     GENERER POUR ATTEINDRE LE DISQUE.
         LA          VAR+ASGNU
         STA         ARGDEM+AMDEM    < MISE EN PLACE DE L'ADRESSE-MOT DU
                                     < BUFFER,
         CPI         ISGNPV          < ALORS, Y-A-T'IL UN VOLUME MONTE ???
         JE          SP20C           < NON, ON SORT IMMEDIATEMENT ; A NOTER
                                     < QUE LES INDICATEURS SONT POSITIONNES
                                     < POUR UN 'JE'...
         SWBR        X,A             < POSITIONNEMENT DU 'NSP',
         ORI         XDSYM?XTYPAD    < GENERATION D'UNE DEMANDE EN MODE SYMBOLI-
                                     < QUE AVEC ADRESSE DE MOTS ET NON D'OCTETS,
         STA         NSPTYP          < GENERATION DU 'NSPTYP',
         LRM         A,X
         WORD        LVOL*NOCMO      < (A)=LONGUEUR EN OCTETS DU BUFFER
                                     <     CONTENANT LE DESCRIPTEUR,
         WORD        SECVOL          < (X)=ADRESSE DU Q-SECTEUR SUPPORT DU
                                     <     DESCRIPTEUR DE VOLUME,
         STA         ARGDEM+CODEM    < MISE EN PLACE DE LA LONGUEUR DE L'ECHANGE
         STX         ARGDEM+ASDEM    < ET L'ADRESSE DISQUE DE L'ECHANGE.
         LAI         FGR             < (A)=FONCTION DE LECTURE...
<
< PARTIE COMMUNE LECTURE/ECRITURE :
<
SP20A:   EQU         $
         STA         ARGDEM+OPDEM    < MISE EN PLACE DE LA FONCTION,
         BSR         ACHAND          < ENVOI DE LA DEMANDE D'ADRESSE (W),
         BSR         ACHANW          < ET TEST DE FIN D'ECHANGE...
<
< VALIDATION DU DESCRIPTEUR :
<
         LA          ARGDEM+AMDEM    < RECUPERATION DE L'ADRESSE-MOT DE
                                     < L'ECHANGE,
         LR          A,W             < (W)=ADRESSE DU DESCRIPTEUR,
         LAI         LVOLIM
         CP          VOL23,W         < VALIDATION DE LA PREMIERE CLEF,
         JNE         SP20B           < MAUVAISE, LES INDICATEURS SONT POSITION-
                                     < POUR UN TEST EN RETOUR...
         LRM         A
         WORD        CLEVOL
         CP          VOLCLE,W        < VALIDATION DE LA DEUXIEME CLEF...
<
< RETOUR :
<
SP20B:   EQU         $               < ICI, LES INDICATEURS SONT POSITIONNES
                                     < POUR UN TEST EN RETOUR SUR LA COHERENCE
                                     < DU DESCRIPTEUR...
         LR          W,A             < (A)=ADRESSE DU DESCRIPTEUR DE VOLUME...
SP20C:   EQU         $               < CAS OU IL N'Y A PAS DE VOLUME MONTE...
         PLR         X,W
         RSR
<
<
<        R E E C R I T U R E   D U   D E S C R I P T E U R
<                    D E   V O L U M E  :
<
<
<        FONCTION :
<                      CONTRAIREMENT AUX AUTRES TABLES
<                    DU SYSTEME LES DESCRIPTEURS DE
<                    VOLUME SONT REECRITS SYSTEMATIQUE-
<                    MENT AFIN D'ASSURER LEUR INTEGRITE ;
<                    AINSI, ON N'OPTIMISE NI LES 'STN',
<                    NI LES 'DLN' RELATIFS A DES <VALEURS>
<                    SUR VOLUME, MAIS AU MOINS LE VOLUME
<                    EST TOUJOURS BON, QUELQUE SOIT LE
<                    FONCTIONNEMENT DU SYSTEME (SAUF
<                    EXCEPTION BIEN ENTENDU...).
<
<
<        ARGUMENTS :
<                    AUCUN, CAR ON SUPPOSE QUE 'SP20'
<                    EST PASSE AVANT...
<
<
<        RESULTATS :
<                    (A)=ADRESSE DU BUFFER CONTENANT LE
<                      DESCRIPTEUR DU VOLUME.
<
<
SP21:    EQU         $
         PSR         X,W
         LAD         VAR+DEMSAV
         LR          A,W             < (W)=ADRESSE DE LA DEMANDE A ENVOYER,
         IF          ISGNPV-K,,XEIF%,
         IF          ATTENTION : LE 'CPZ' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         CPZ         ARGDEM+AMDEM    < ALORS, Y-A-T'IL UN VOLUME DE MONTE ???
         JNE         SP21A           < OUI, ALLLONS REECRIRE LE DESCRIPTEUR...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT IL PEUT SE
<                    FAIRE QUE 'SP21' SOIT APPELE,
<                    ALORS QU'IL N'Y A PAS DE VOLUME
<                    MONTE !!!
<
         CPZ         ARGDEM+AMDEM    < ET ON REPOSITIONNE LES INDICATEURS...
         JMP         SP20C           < ET ON SORT IMMEDIATEMENT...
SP21A:   EQU         $
         LAI         FGW             < (A)=FONCTION D'ECRITURE,
         JMP         SP20A           < VERS L'ENVOI DE LA DEMANDE DE REECRITURE
                                     < DU DESCRIPTEUR DE VOLUME...
         PAGE
<
<
<        S T O R E   N O M   E T   V A L U E  :
<
<
<        FONCTION :
<                      CE HANDLER SPECIFIQUE, RANGE LA
<                    VALEUR SUR DISUQE, PUIS INSERE LE
<                    NOM ASSOCIE DANS L'ARBRE DU
<                    SYSTEME.
<
<
<        ARGUMENT :
<                    (A)=CODE DE RETOUR DU TEST DE L'ARBORICULTEUR,
<                    (B)=RANG DU DERNIER CARACTERE DE LA VALEUR,
<                    (X)=RANG DU 1ER CARACTERE DE LA VALEUR.
<                    (Y)=LONGUEUR <NOM-SYSTEME>.
<
<
<        RESULTAT :
<                      SI LA BOX DE LA DEMANDE COURANTE EST
<                    VALIDE, CELLE-CI RECOIT LE NBRE D'OCTETS
<                    REELLEMENT RANGES, AVEC DE PLUS UN
<                    INDICATEUR DISANT SI LA <VALEUR> EST
<                    EST UNE EXTENSION SUR VOLUME (UTILE
<                    POUR 'LON'...) :
IVALEX:: VAL         BITSIG          < BIT POSITIONNE DANS LA LONGUEUR DE LA
                                     < <VALEUR> TRANSMISE DANS 'BOX' POUR
                                     < INDIQUER SI CELLE-CI EST EN REALITE
                                     < UNE VALEUR D'EXTENSION SUR VOLUME.
<
<
         CALL        #SISP CMS5 CHECK#
AZ26:    EQU         $
         BR          VAR+RAZ26       < ERREUR : NOM PRE-EXISTANT...
HDLSTN:  EQU         $
         JAE         AZ26            < ERREUR : LE NOM EXISTE DEJA...
XWOR%9:  VAL         BOX-NSPTYP
         LA          VAR+DEMSAV+XWOR%9 < (A)=NOMBRE DE NOEUDS LIBRES,
         CPI         XXSGNS          < Y-EN-A T'IL ASSEZ ???
         JL          AZ26XX          < NON, PAS DE 'STORE' !!!
         IF          NSTREE*X26,,,XEIF%
         IF          ATTENTION : CE QUI PRECEDE EST IDIOT !!!
XEIF%:   VAL         ENDIF
         LA          NSL             < (A)=NOMBRE DE Q-SECTEURS LIBRES SUR 'DKM'
         SLRS        S               < ON DECALE, CAR EN EFFET 'NSL' EST
                                     < SOUVENT UN NOMBRE DE 16 BITS !!!
XWOR%9:  VAL         -S
         CPI         XXSGNT>XWOR%9   < CELA SUFFIT-IL ???
AZ26XX:  JL          BZ26XX          < NON, PAS DE 'STORE' !!!
<
< OK, LE NOM N'EXISTE PAS ENCORE :
<
         BR          VAR+RAZ362      < VERS LE TEST DES <VALEURS> SUR VOLUMES.
                                     < (ON FAIT AINSI A CAUSE DES MERVEILLEUX
                                     < SAUTS SUPERIEURS A 128 MOTS, MERCI LA
                                     < SEMS...)
Z36XY3:  EQU         $               < RETOUR DU DEBRANCHEMENT...
<
< ALLOCATION DE L'ESPACE-DISQUE DE LA VALEUR :
<
         SBR         X,B
         STB         SIND+SINDL,W    < MISE DE LA LONGUEUR OCTETS DE
                                     < LA VALEUR DANS LE BUFFER (SINDL).
         STB         SIND+SINDLO,W   < DE MEME SINDLO CONTIENT LA
                                     < LONGUEUR OCTETS DE LA VALEUR...
         LA          VAR+SGNSGF      < ON MET DANS LA MAP DE L'ITEM SA
         STA         SIND+SXSGF,W    < NATURE "NORMAL" OU "SGF", SACHANT
                                     < QU'IL EXISTE UNE NATURE "ANCIEN"...
         LRM         A
         WORD        YY7*QUANTA+SVAL*NOCMO-E
         ADR         A,B             < (B)=NOMBRE D'OCTETS NECESSAIRES EXPRIMES
                                     <     EN MULTIPLES DE YY8.
         LRM         A
         WORD        YY8Q
         STA         SIND+SINDLS,W   < PROVISOIRE, POUR FAIRE UNE DIVISION...
         LAI         K
         DV          SIND+SINDLS,W
         LR          A,B             < (B)=NOMBRE DE QUANTA NECESSAIRES.
         STB         SIND+SINDLS,W   < SAVE NBRE DE SECTEURS OCCUPES
                                     < PAR LA VALEUR Y COMPRIS LE
                                     < SECTEUR-MAP.
         LAI         NSPGET
         BSR         VAR+ASP7        < ALLOCATION (B) SECTEURS.
<
< DATE DE CREATION DE LA VALEUR :
<
XWOR%1:  VAL         XXMAXT=K        < POUR RECUPERER LA VALEUR COURANTE DES
                                     < COMPOSANTES DE LA DATE...
         PSR         X,L
         LXI         NSPDAT
         BSR         ACADCT          < (L)=ADRESSE DE LA LISTE DES COMPOSANTES
                                     < DE LA DATE.
         LB          XXHANE,L        < (B)=ANNEE,
         LA          XXHMOI,L        < (A)=MOIS,
         SLLS        XWOR%1
         SCRD        XWOR%1
         STA         SIND+SDATAM,W   < ANNEE/MOIS.
         LB          XXHJOU,L        < (B)=JOUR,
         LA          XXHHEU,L        < (A)=HEURE,
         SLLS        XWOR%1
         SCRD        XWOR%1
         STA         SIND+SDATJH,W   < JOUR/HEURE.
         LB          XXHMIN,L        < (B)=MINUTES,
         LA          XXHSEC,L        < (A)=SECONDES,
         SLLS        XWOR%1
         SCRD        XWOR%1
         STA         SIND+SDATMS,W   < MINUTES/SECONDES.
         PLR         X,L
<
< TRANSFERT DE LA 1ERE PARTIE DE LA VALEUR
< DANS LE BUFFER ALLOUE :
<
         LA          VAR+ANOM
         SLLS        NOCMO=K         < (A)=@OCTET DE <NOM> A UNE
                                     < FRONTIERE DE MOTS.
         AD          VAR+IVAL        < (A)=@OCTET DE LA VALEUR.
         STA         VAR+ANOM        < ANOM=@OCTET DU 1ER OCTET
                                     < DE LA VALEUR.
                                     < POSITIONNEMENT DE SIND+SINDPI
                                     < EN SECTEUR-MAP :
                                     < ='AA00 SI ADRESSE OCTET PAIRE,
                                     < ='AA01 SI ADRESSE OCTET IMPAIRE.
         LBI         XXSGN8
         SWBR        B,B
         TBT         NBITMO-B        < TEST PAIRE/IMPAIRE ???
         JNC         Z36XX
         SBT         NBITAB-B
Z36XX:   EQU         $
         STB         SIND+SINDPI,W
<
<
<        T E N T A T I V E   D E   C O M P R E S S I O N  :
<
<
<        FONCTION :
<                      LE PROBLEME DE COMPRIMER LES ITEMS EST
<                    TRES DELICATS ; EN EFFET S'IL EST POSSIBLE
<                    DE COMPACTER EN CONFONDANT ZONE EMETTRICE
<                    ET ZONE RECEPTRICE (EN FAISANT QUE CETTE
<                    DERNIERE PRECEDE LA PREMIERE DE 2 OCTETS
<                    DANS LE CAS OU LES COMPTEURS SONT SUR UN
<                    MOT), IL EST IMPOSSIBLE DE LE FAIRE LORS
<                    DU DECOMPACTAGE DAUTANT PLUS QU'IL EST
<                    POSSIBLE DE DEMANDER MOINS D'OCTETS QUE
<                    N'EN CONTIENT LA VALEUR...
<                      DE PLUS TOUS CES ALGORITHMES IMPLIQUENT
<                    UNE MODIFICATION RADICALE DU 'SGN' ; LA
<                    MEDIOCRE SOLUTION PROPOSEE CONSISTE A
<                    DETECTER DES SOUS-ENSEMBLES DU BUFFER
<                    INITIAL CONFONDUS A L'ECRITURE SUR 'DKM'
<                    AVEC UN Q-SECTEUR, ET CONTENANT LE MEME
<                    OCTET REPETE ; DANS CES CONDITIONS, ON CREE
<                    UN Q-SECTEUR INEXISTANT SUR 'DKM' CORRESPON-
<                    DANT A CET OCTET, ET C'EST 'HDLDKM' QUI SE
<                    CHARGE DU BUFFER SANS ENTREE-SORTIE...
<
<
<        NOTA :
<                      LA COMPRESSION PEUT ETRE INHIBE
<                    EN MODIFIANT L'INSTRUCTION 'DCOMPR' ;
<                    INHIBER LA COMPRESSION A POUR EFFET
<                    DE PERDRE DE L'ESPACE DISQUE, MAIS
<                    EN REVANCHE, ON GAGNE DU TEMPS, CAR
<                    EN GENERAL, LES <VALEUR>S SERONT
<                    CHARGEES EN PEU D'ENTREES/SORTIES.
<
<
         LRM         A,B,Y
         WORD        -NOCMO*TZVAL    < (A)=-LONGUEUR EN OCTETS DE LA
         WORD        NOCMO*TZVAL     < PREMIERE PARTIE DE LA VALEUR=-(B).
         WORD        YY7Q            < (Y)=LONGUEUR EN MOTS D'UN Q-SECTEUR.
         AD          SIND+SINDL,W    < (A)=NOMBRE D'OCTETS A RANGER AILLEURS
                                     < QUE DANS LE SECTEUR-MAP,
         JALE        Z36XX1          < IL N'Y EN A PAS... PAS DE COMPACTAGE...
         LR          A,X             < (X)=NOMBRE D'OCTETS SUR LESQUELS TENTER
                                     < UN PETIT COMPACTAGE...
         BSR         VAR+ASP14       < A <-- (BUFSAV).
         PSR         A,W             < SAUVEGARDE DE (A)=(BUFSAV), CAR EN
                                     < EFFET, ON VA LE TRUANDER A CAUSE
                                     < DE 'SP7' LORS DU RELEASE INDIVIDUEL
                                     < DE SECTEURS... ET (W)=ADRESSE DU BUFFER.
         IC          VAR+BUFSAV      < AFIN DE POINTER A 'SMAP' MOTS PRES
                                     < LE PREMIER SECTEUR SUIVANT LE SECTEUR-
                                     < MAP.
         LA          VAR+ANOM
         TBT         NBITMO-B        < EST-CE UNE ADRESSE PAIRE ???
         SBCR        B               < REGRESSION EVENTUELLE DE L'ADRESSE...
         TBT         NBITMO-B        < EST-CE UNE ADRESSE PAIRE ???
         ADCR        X               < PROGRESSION EVENTUELLE DU COMPTE
                                     < D'OCTETS...
         ADR         B,A
         SLRS        NOCMO=K
         LR          A,W             < (W)=ADRESSE MOT DANS LA VALEUR DU
                                     <     PREMIER MOT TOMBANT A UNE FRONTIERE
                                     <     DE Q-SECTEUR.
<
< BOUCLE DE TRAITEMENT DU Q-SECTEUR COURANT :
<
Z36XX2:  EQU         $
         PSR         Y,W             < SAUVEGARDE DE LA LONGUEUR D'UN Q-SECTEUR,
                                     < ET DE L'ADRESSE DE LA TRANCHE COURANTE
                                     < DE LA VALEUR.
XXCPR::  VAL         K               < VALEUR AUTORISANT LA COMPRESSION DES
                                     < ITEMS,
XXNCPR:: VAL         XXCPR)BIT       < VALEUR INIHIBANT LA COMPRESSION DES
                                     < ITEMS...
DCOMPR:  LAI         XXCPR           < INSTRUCTION VARIABLE ACCESSIBLE PAR UN
                                     < 'NSP', ET PERMETTANT D'AUTORISER OU
                                     < D'INHIBER LA COMPRESSION DES ITEMS (VOIR
                                     < 'XXCPR' ET 'XXNCPR').
                                     < NOTA : CETTE INSTRUCTION EST MODIFIABLE
                                     <        DYNAMIQUEMENT PAR LES COMMANDES
                                     <        "!SGN C ON" ET "!SGN C OFF" DU
                                     <        'CCI'...
         EOR         O,W             < (A)=MOT COURANT (ON TRAVAILLE EN MOTS
                                     <     PAR COMPATIBILITE AVEC 'DKM'),
         SWBR        A,A             < AFIN DE COMPARER LA PREMIERE FOIS
                                     < L'OCTET DROIT ET CELUI DE GAUCHE...
Z36XX3:  EQU         $
         CP          O,W             < LES MOTS SONT-ILS IDENTIQUES (ET LES
                                     < 2 PREMIERS OCTETS LA PREMIERE FOIS...).
         JNE         Z36XX5          < NON, PAS DE COMPACTAGE POSSIBLE...
         ADRI        P,W             < OUI, PASSONS AU MOT SUIVANT...
         ADRI        -I*NOCMO,X      < DECOMPTE DES OCTETS TRAITES,
         ADRI        -I,Y            < DECOMPTE DES MOTS TRAITES DANS LE
                                     < Q-SECTEUR COURANT,
         CPZR        X               < A-T'ON EPUISE LES OCTETS RESIDUELS ???
         JLE         Z36XX4          < OUI, C'EST FINI...
         CPZR        Y               < EST-ON AU BOUT DU Q-SECTEUR COURANT ???
         JNE         Z36XX3          < NON, ON CONTINUE...
<
< CAS OU UNE SEQUENCE REPETITIVE A ETE DETECTEE :
<
Z36XX4:  EQU         $
         LAI         NSPREL          < AFIN DE FAIRE DU RELEASE,
         LBI         W               < D'UN SEUL SECTEUR...
         BSR         VAR+ASP7        < RELEASE DU SECTEUR COURANT.
         LA          -P,W            < (A)=MOT REPETE,
         LB          VAR+DEMSAV+T+AMDEM
         LR          B,W             < (W)=ADRESSE MEMOIRE OU EST RANGEE
                                     <     L'ADRESSE DU Q-SECTEUR QUE L'ON
                                     <     VIENT DE RENDRE...
DKMINX:: VAL         MOCG            < ADRESSE DU PREMIER Q-SECTEUR INEXISTANT,
                                     < UTILISE PAR 'DKM' POIR INITIALISER
                                     < LES BUFFERS...
         IF          DKMINX)MMOT(TDKM,,XEIF%,
         IF          ATTENTION : 'DKMINX' EST EN FAIT UN SECTEUR EXISTANT !!!
XEIF%:   VAL         ENDIF
XWOR%1:  VAL         DKMINX=K
XWOR%1:  VAL         -XWOR%1
XWOR%2:  VAL         TDKM>XWOR%1+I   < +I A CAUSE DU GROUPAGE DES Q-SECTEURS
                                     < DANS 'SP11'...
XWOR%3:  VAL         DKMINX>XWOR%1
         IF          XWOR%2-XWOR%3,XEIF%,,
         IF          ATTENTION : 'DKMINX' EST EN FAIT UN SECTEUR EXISTANT !!!
XEIF%:   VAL         ENDIF
         IF          DKMINX)MMOT-MOCD,,XEIF%,
         IF          ATTENTION : 'DKMINX' DOIT CORRESPONDRE A UN MASQUE
         IF          D'OCTET ET POUR LES INSTRUCTIONS QUI LE MANIPULE
         IF          ET POUR L'ALGORITHME DE COMPACTAGE !!!
XEIF%:   VAL         ENDIF
         STA         O,W             < MISE EN PLACE EN PARTICULIER DANS L'OCTET
                                     < DE DROITE DE L'OCTET REPETE.
         LAI         XWOR%3
         STBY        O,W             < REMPLACEMENT DU SECTEUR RELEASE
                                     < PAR UN SECTEUR INEXISTANT, DONT
                                     < L'ADRESSE DONNE L'OCTET REPETE...
<
< PASSAGE AU Q-SECTEUR SUIVANT :
<
Z36XX5:  EQU         $
         IC          VAR+BUFSAV      < TOUJOURS A CAUSE DE 'SP7' !!!
         LR          Y,A
         SLLS        NOCMO=K         < (A)=NOMBRE D'OCTETS QUI RESTAIENT
                                     <     A TRAITER DANS LE Q-SECTEUR COURANT,
         SBR         A,X             < ACTUALISATION DU DECOMPTE DES OCTETS
                                     < TRAITES...
         PLR         Y,W             < RESTAURE :
                                     < (Y)=LONGUEUR EN MOT D'UN Q-SECTEUR,
                                     < (W)=ADRESSE DE LA VALEUR A UNE FRONTIERE
                                     <     DE Q-SECTEUR.
         ADR         Y,W             < PASSAGE AU QSECTEUR SUIVANT,
         CPZR        X               < MAIS EST-CE NECESSAIRE ???
         JG          Z36XX2          < OUI...
         PLR         A,W             < NON, ON RESTAURE
         STA         VAR+BUFSAV      < CE QUE L'ON A DETRUIT...
Z36XX1:  EQU         $
<
<
<        R A N G E M E N T   D E   L A   V A L E U R  :
<
<
         LAI         XXSP10          < AFIN QUE LE RECEPTEUR SOIT PRIS
                                     < DANS LE BUFFER STATIQUE :
                                     < (A)=RECEPTEUR=@BUFFER STATIQUE,
         LB          VAR+ANOM        < (B)=EMETTEUR=@VALEUR.
         BSR         VAR+ASP9        < MOVE 1ERE PARTIE DE LA VALEUR.
<
< ENVOI DE LA VALEUR SUR DISQUE :
< LA 1ERE PARTIE+MAP EST ENVOYEE A PARTIR
< DU BUFFER, ALORS QUE LA SUITE EVENTUELLE
< EST ENVOYEE DIRECTEMENT A PARTIR
< DE LA VALEUR ARGUMENT :
<
         LYI         FGW             < FONCTION ECRITURE.
         BSR         VAR+ASP11
         BSR         VAR+ASP8        < RESTAURE (W)=@BUFFER.
<
< INSERTION DE <NOM-SYSTEME> DANS  L'ARBRE
< DU SYSTEME :
<
         LAI         SPLUS           < CODE D'INSERTION.
         LB          SMAP,W          < (B)=RELAI VALEUR (@SECTEUR-MAP).
         PLR         Y               < RESTAURE (Y)=LONGUEUR <NOM-SYSTEME>
         BSR         VAR+ASP12       < INSERTION DU NOM.
         LA          VAR+DEMSAV+T+ETADEM
         JAE         SYSR8L          < CONDITION DE RETOUR OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      SORTIR EN ERREUR, MAIS ATTENTION,
<                    IL FAUT FAIRE UN 'PLR W' AVANT...
<
SYSR8L:  EQU         $
Z36:     EQU         $
         LA          SIND+SINDLO,W   < (A)=NOMBRE D'OCTETS REELLEMENT
                                     <     OCCUPES PAR LA VALEUR (CE NBRE
                                     <     PEUT EVIDEMMENT ETRE DIFFERENT
                                     <     DE CELUI QUI A ETE TRAITE (CF.
                                     <     LES CAS DE LOAD...)
                                     <     (ON A ENCORE : (W)=@BUFFER).
         IF          MONT0-K,,XEIF%,
         IF          ATTENTION : LE 'CPZ' QUI SUIT EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         JAGE        Z36XYF          < OK, LA LONGUEUR EST BONNE...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT LA LONGUEUR
<                    PEUT ETRE SI GRANDE QU'ELLE SOIT
<                    REPRESENTEE PAR UN NOMBRE NEGATIF !!!
<
Z36XYF:  EQU         $
         CPZ         SIND+SVALNU,W   < <VALEUR> EST-ELLE EN FAIT UNE EXTENSION ?
         JE          Z36XYE          < NON, 'SVALNU' NE CONTIENT PAS DE NUMERO
                                     < DE VOLUME...
         PSR         A               < OUI, IL Y A EU EXTENSION,
         BSR         ACANSP          < (A)='NSP' DU HANDLER 'SGN' COURANT :
         CPI         NSPSTN          < EST-CE LE 'STORE' ???
         PLR         A
         JNE         Z36XYM          < NON, IL S'AGIT DONC DE 'LON' OU 'DLN',
                                     < ON VA DONC RENVOYER DANS 'BOX' LA LON-
                                     < GUEUR DISCRIMINEE PAR 'IVALEX', CE QUI
                                     < PERMETTRA AU DEMANDEUR DE SAVOIR QU'IL
                                     < S'AGIT D'UNE VALEUR EXTENSION...
         PLR         W               < DANS LE CAS DE 'STN', 'BOX' A DEJA ETE
                                     < POSITIONNE AVEC LE NOMBRE DE BLOCS
                                     < ENCORE LIBRE, SAUF S'IL N'Y AVAIT PAS
                                     < DE VOLUME MONTE, AUQUEL CAS 'BOX' DEMEURE
                                     < APPAREMMENT INCHANGEE...
         JMP         Z36XY1          < VERS LA SORTIE...
BZ26XX:  JMP         Z26XX           < RELAI...
<
< TRANSMISSION DE 'BOX' :
<
Z36XYM:  EQU         $
         IF          IVALEX-BITSIG,,XEIF%,
         IF          ATTENTION : L'INDICATEUR 'IVALEX' EST MAL PLACE !!!
XEIF%:   VAL         ENDIF
         SBT         IVALEX          < OUI, ON LE DIT AU DEMANDEUR, AFIN QU'IL
                                     < PUISSE EVENTUELLEMENT MEMORISER CE FAIT..
Z36XYE:  EQU         $
         LR          A,X             < (X)=NOMBRE D'OCTETS REELLEMENT ECHANGES,
                                     <     AVEC L'INDICATEUR "VALEUR EXTENSION".
         PLR         W               < RESTAURE (W)=@DEMANDE ARG.
         BSR         ASTBOX          < NON, ALORS SI LA DEMANDE COURANTE (W)
Z36XY1:  EQU         $
                                     < A UNE BOX, (CF. DEMESC),
                                     < CELLE-CI RECOIT LE NBRE D'OCTETS
                                     < REELLEMENT OCCUPES PAR
                                     < LA VALEUR COURANTE.
Z51:     EQU         $
         STZ         ETAT0           < RETOUR OK.
<
< SORTIE DU HANDLER SPECIFIQUE :
<
Z32:     EQU         $
         RSR
A36XY3:  JMP         Z36XY3          < RELAI...
<
< TRAITEMENT DES ERREURS DE PARCOURS :
<
Z26XX:   EQU         $               < CAS OU IL N'Y A PLUS DE PLACE SOIT
                                     < DANS L'ARBRE, SOIT SUR 'DKM' ; CE
                                     < N'EST PAS TRES ELEGANT,MAIS AU
                                     < MOINS, CELA EVITE DES INTER-BLOCAGES...
         LAI         ENPDP           < CODE D'ERREUR...
         JMP         Z33             < VERS LA SORTIE EN ERREUR...
Z26:     EQU         $
         LAI         ENNES           < ERREUR : NOM EXISTE DEJA DANS
                                     < UN INSERT.
Z33:     EQU         $
         STA         ETAT0           < RENVOI DES CONDITIONS DANS ETAT0.
         JMP         Z32
         CALL        #SISP CMS5 CHECK#
         PAGE
<
<
<        ' S T N '   S U R   V O L U M E   D ' E X T E N S I O N  :
<
<
<        NOTA :
<                      CE MODULE EST MIS ICI A CAUSE DES
<                    FABULEUX SAUTS SUPERIEURS A 128 MOTS
<                    QUE J'ETAIS SUR DE RENCONTRER...
<
<
<
< ERREUR : VOLUME NON "FORMATTE" :
<
Z36XY7:  EQU         $
         LAI         ENDKUV          < CODE D'ERREUR,
ABZ33:   JMP         Z33             < VERS SON RENVOI...
                                     < (ET ENCORE UN RELAI...)
<
< POINT D'ENTREE ET DE SORTIE :
<
Z36XY9:  JMP         A36XY3          < RELAI...
Z36XY2:  EQU         $
<
< TEST D'UN ACCES AU VOLUME COURANT :
<
Z36XYK:  EQU         $               < POINT DE REBOUCLAGE SUR ERREUR PHYSIQUE
                                     < DISQUE LORS DE LA RELECTURE DE LA
                                     < VALEUR ECRITE...
         LA          VAR+ISGNUV      < ALORS L'ACCES AU VOLUME COURANT EST-IL
                                     < DEMANDE ???
         JALE        Z36XY4          < NON...
<
< CAS D'UN ACCES AU VOLUME COURANT,
< LECTURE DU DESCRIPTEUR ET VALIDATION :
<
         BSR         VAR+ASP20       < LECTURE DU DESCRIPTEUR DU VOLUME COURANT
                                     < SUPPORTE PAR LE DISQUE DE 'NSP' (A).
         JNE         Z36XY7          < ERREUR, LE VOLUME EST MAUVAIS (MAUVAISE
                                     < CLEF DE VALIDATION : CE CAS PEUT SE
                                     < RENCONTRER SI LE VOLUME A ETE CHANGE
                                     < "MANUELLEMENT" ENTRE LE MONTAGE ET
                                     < MAINTENANT...).
         PSR         B,X,Y,W         < SAUVEGARDES DIVERSES...
         LR          A,W             < (W)=ADRESSE DU BUFFER DU DESCRIPTEUR DU
                                     <     VOLUME COURANT.
         IF          ISGNPV-K,,XEIF%,
         IF          ATTENTION : LE 'CPZR' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         CPZR        W               < Y-A-T'IL UN VOLUME MONTE ???
         JE          Z36XYG          < NON, ON NE VALIDE DONC PAS LE VOLUME...
         LA          VOLACN,W
         CP          VAR+NOMSX1      < LE NUMERO DE COMPTE DU VOLUME EST-IL
                                     < CELUI DU DEMANDEUR ???
         JNE         Z36XY6          < NON, ERREUR...
         LA          VOLACN+U,W
         CP          VAR+NOMSX1+U    < ???
         JNE         Z36XY6          < NON, TOUJOURS PAS...
         CPZ         VOLNIM,W        < RESTE-T'IL DE LA PLACE ???
         JE          Z36XY5          < NON, ERREUR...
         JG          Z36XYA          < OUI, ON Y VA...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE, MAIS CELA POURRAIT
<                    SE RENCONTRER SI LA VALIDATION DES
<                    2 CLEFS ETAIT INSUFFISANTE !!!
<
         JMP         Z36XY5          < ET ON SORT EN ERREUR...
Z36XYA:  EQU         $
<
< RECUPERATION DE LA <VALEUR> ARGUMENT :
<
Z36XYG:  EQU         $               < CAS OU IL N'Y A PAS DE VOLUME MONTE,
                                     < ON RECUPERE QUAND MEME <VALEUR> AFIN
                                     < DE GENERER CORRECTEMENT 'SVALNU'
                                     < ET 'SVALAD'...
<
<        ON A ICI :
<                    (X)=INDEX INITIAL DE <VALEUR>.
<
XWOR%1:  VAL         CODBT=FMASK(K?MOCG=FCINST)MOCG/NBITOC
                                     < RANG DE L'OCTET GAUCHE,
XWOR%2:  VAL         CODBT=FMASK(K?MOCD=FCINST)MOCD/NBITOC
                                     < RANG DE L'OCTET DROIT.
         ADRI        VALUNU*NOCMO+XWOR%2,X
         LBY         &VAR+ANOM       < (A)=2EME OCTET DU NUMERO DE VOLUME,
         SLRD        NBITOC          < QUE L'ON MET DANS 'B',
         ADRI        XWOR%1-XWOR%2,X
         LBY         &VAR+ANOM       < (A)=1ER OCTET DU NUMERO DE VOLUME,
         SLLD        NBITOC          < (A)=NUMERO DE VOLUME DEMANDE (OU 'MONT0'
                                     <     SI ON NE VEUT PAS LE PRECISER EN
                                     <     UTILISANT CELUI DU MONTAGE).
         PSR         A               < ET ON LE SAUVEGARDE...
         ADRI        -VALUNU+VALUAD*NOCMO-XWOR%1+XWOR%2,X
         LBY         &VAR+ANOM       < (A)=2EME OCTET DE L'ADRESSE DISQUE,
         SLRD        NBITOC          < QUE L'ON MET DANS 'B',
         ADRI        XWOR%1-XWOR%2,X
         LBY         &VAR+ANOM       < (A)=1ER OCTET DE L'ADRESSE DISQUE,
         SLRD        NBITOC          < (B)=ADRESSE DISQUE DEMANDEE A PARTIR DE
                                     <     LAQUELLE ON RECHERCHERA UN BLOC
                                     <     LIBRE...
         PLR         A               < (A)=NUMERO DU VOLUME,
         JAE         Z36XY6          < LE NUMERO DE VOLUME EST NUL, CE QUI
                                     < EST UNE ERREUR...
         IF          MONT0-K,,XEIF%,
         IF          ATTENTION : LE 'JAE' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         CPZR        W               < Y-A-T'IL UN VOLUME DE MONTE ???
         JNE         Z36XYH          < OUI...
<
< CAS OU IL N'Y A PAS DE VOLUME DE MONTE :
<
         STB         VAR+DEMSAV+T+ASDEM
                                     < ON TRANSMET L'ADRESSE DISQUE DU BLOC
                                     < CONTENUE DANS 'B' PAR 'ASDEM' DE LA
                                     < DEMANDE 'DEMSAV',
         STA         VAR+DEMSAV+T+AMDEM
                                     < ET LE NUMERO DE VOLUME CONTENU DANS 'A'
                                     < PAR 'AMDEM' DE 'DEMSAV'...
         PLR         B,X,Y,W         < RESTAURATIONS,
         JMP         Z36XY4          < ET ON NE TOUCHE ABSOLUMENT PAS AU DES-
                                     < CRIPTEUR DE VOLUME PUISQU'IL N'Y EN
                                     < A PAS...
<
< CAS OU IL Y A UN VOLUME MONTE :
<
Z36XYH:  EQU         $
         CP          VOLNUM,W        < OUI, ALORS EST-CE LE VOLUME
                                     < DEMANDE QUI EST MONTE ???
         JNE         Z36XY6          < NON, ERREUR...
<
< RECHERCHE D'UN BLOC LIBRE :
<
         LRM         A,Y
         WORD        VOLSE0          < (A)=ADRESSE ABSOLUE DU PREMIER BLOC
                                     <     LIBRE SUR UN VOLUME,
         WORD        NVOLIM          < (Y)=NUMERO DU PREMIER BLOC INEXISTANT
                                     <     SUR UN VOLUME.
         CPZR        B               < A-T'ON SPECIFIE UN NUMERO DE BLOC INI-
                                     < TIAL POUR LA RECHERCHE D'UN BLOC LIBRE ??
         JNE         Z36XYN          < OUI...
         LR          A,B             < NON, DONC ON VA PARTIR SUR LE PREMIER,
                                     < DONT ON MET L'ADRESSE DANS 'B'...
Z36XYN:  EQU         $
         SBR         A,B             < (B)=ADRESSE DISQUE RELATIVE A 'VOLSE0'
                                     <     A PARTIR DE LAQUELLE FAIRE UNE
                                     <     RECHERCHE DE BLOC LIBRE...
         LAI         K               < CLEAR 'K',
         DV          VOL23,W         < ON CONVERTIT L'ADRESSE DISQUE EN UN
                                     < NUMERO DE BLOC,
         LR          A,X             < (X)=NUMERO DU PREMIER BLOC A TESTER
                                     <     DANS LA TABLE D'ALLOCATION.
         LR          A,B             < (B)=SAUVEGARDE DU NUMERO DE PREMIER
                                     <     BLOC A TESTER.
         LAD         VOLTAB,W        < (A)=ADRESSE DE LA TABLE D'ALLOCATION
                                     <     DANS LE DESCRIPTEUR COURANT,
         DRBM
                                     < RECHERCHE DANS 'X' DU NUMERO DU PREMIER
                                     < BLOC LIBRE ; A NOTER QU'ON NE VALIDE PAS
                                     < (X) PAR RAPPORT A 'Y' CAR L'INS-
                                     < TRUCTION "DRBM" LE FAIT...
         JNC         Z36XYC          < OK, (X)=NUMERO DU BLOC ALLOUE...
         CPZR        B               < ON N'A RIEN TROUVE ; ALORS LA RECHERCHE
                                     < A-T'ELLE EU LIEU A PARTIR DU DEBUT ???
         JNE         Z36XY5          < NON, ET BIEN IL N'Y A PAS DE BLOCS LIBRES
                                     < LIBRE, CE QUI N'EST PAS EN CONTRA-
                                     < DICTION AVEC LE FAIT QUE 'VOLNIM'
                                     < N'EST PAS NUL, CAR LA RECHERCHE
                                     < N' A PAS ETE FAITE A PARTIR DU DEBUT
                                     < DE LA TABLE D'ALLOCATION...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE, CAR 'VOLNIM' N'EST
<                    PAS NUL, ET LA TABLE D'ALLOCATION
<                    EST VIDE !!!
<
         JMP         Z36XY5          < VERS LA SORTIE EN ERREUR...
Z36XYC:  EQU         $
         DC          VOLNIM,W        < ET UN BLOC DE MOINS...
<
< MISE A JOUR DU DESCRIPTEUR :
< (MAINTENANT QU'ON Y TOUCHERA PLUS)
<
         BSR         VAR+ASP21       < REECITURE DU DESCRIPTEUR (NE PAS OUBLIER
                                     < QUE LA DEMANDE A ETE INITIALISE PAR LE
                                     < SOUS-PROGRAMME 'SP20'...).
         LR          X,A             < (A)=NUMERO DU BLOC ALLOUE,
         MP          VOL23,W         < QUE L'ON CONVERTIT EN UN NUMERO DE
                                     < Q-SECTEUR,
         LRM         A
         WORD        VOLSE0          < (A)=ADRESSE DU PREMIER Q-SECTEUR DISPO-
                                     <     NIBLE POUR L'ALLOCATION,
         ADR         B,A             < (A)=ADRESSE DISQUE DU BLOC ALLOUE,
         STA         VAR+DEMSAV+T+ASDEM
                                     < QUE L'ON MET DANS LA DEMANDE D'ACCES AU
                                     < DISQUE...
         LA          VOLNIM,W        < (A)=NOMBRE DE BLOCS ENCORE DISPONIBLES
                                     <     SUR LE VOLUME COURANT...
         PLR         B,X,Y,W
<
< ENVOI DE LA DEMANDE 'MEMTV' --> 'DKU' :
<
         PSR         B,X,W
         XR          A,X             < (X)=NOMBRE DE BLOCS ENCORE LIBRES APRES
                                     <     ALLOCATION, ET
                                     < (A)=SAUVEGARDE DE L'INDEX INITIAL DE
                                     <     LA <VALEUR>.
         BSR         ASTBOX          < QUE L'ON RENVOIE DANS LA 'BOX'...
         LR          A,X             < (X)=INDEX INITIAL DE LA <VALEUR>.
         LAD         VAR+DEMSAV
         LR          A,W             < (W)=ADRESSE DE LA DEMANDE...
         LA          NSPTYP          < RECUPERATION DU 'NSPTYP' D'ACCES A
                                     < 'NSPDKG', QUI A DEJA ETE GENERE LORS
                                     < DE L'APPEL A 'SP20'...
         IF          NSPDKG-NSPDKU,,XEIF%,
         IF          ATTENTION : L'ACCES A LA TELEVISION NUMERIQUE
         IF          'MEMTV' <--> 'DKU' PASSE PAR 'DKU' !!!
XEIF%:   VAL         ENDIF
         RBT         TYPAD           < LA DEMANDE EST REMISE EN OCTETS...
         STA         NSPTYP          < GENERATION DU 'NSPTYP' D'ACCES A LA
                                     < TELEVISION NUMERIQUE...
         WORD        LAFTVW          < (A)='FONTVW' (INSTRUCTION EN AVANT...),
         STA         ARGDEM+OPDEM    < FONCTION : 'MEMTV' --> 'DKU'.
         IF          TVAR0-O,,XEIF%,
         IF          ATTENTION : LE 'STZ' QUI SUIT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         STZ         ARGDEM+AMDEM    < POUR ATTEINDRE 'MEMTV' DEPUIS L'ORIGINE,
         LRM         A
         WORD        TVLIMA*LK*XNCOOL*NOCMO
         STA         ARGDEM+CODEM    < ET EN ENTIER...
         BSR         VAR+ASP40       < ENVOI DE LA DEMANDE DE TRANSFERT
                                     < DIRECT 'MEMTV' --> 'DKU',
         BSR         ACHANW          < ET ATTENTE DE FIN...
<
< RENVOI DE L'ADRESSE D'IMPLANTATION
< REELLE EXPRIMEE EN Q-SECTEURS DU
< BLOC, ADRESSE QUI EST EXPLOITABLE
< POUR UN ACCES DIRECT, SANS PASSER
< PAR LE 'SGN' :
<
         LA          ARGDEM+ASDEM    < (A)=ADRESSE DU BLOC,
         SLRD        NBITOC          < DECONCATENATION DES 2 OCTETS,
XWOR%1:  VAL         CODBT=FMASK(K?MOCG=FCINST)MOCG/NBITOC
                                     < INDEX DE L'OCTET GAUCHE,
XWOR%2:  VAL         CODBT=FMASK(K?MOCD=FCINST)MOCD/NBITOC
                                     < INDEX DE L'OCTET DROIT.
         ADRI        VALUAD*NOCMO+XWOR%1,X
         STBY        &VAR+ANOM       < RENVOI DU PREMIER OCTET,
         LAI         K               < CLEAR DE 'A',
         SLLD        NBITOC
         ADRI        XWOR%2-XWOR%1,X
         STBY        &VAR+ANOM       < ET RENVOI DU DEUXIEME OCTET DE L'ADRESSE
                                     < DISQUE DU BLOC ALLOUE.
<
< RELECTURE DU BLOC ECRIT
< POUR VERIFICATION :
<
         LRM         A,B
         WORD        STNRET          < (A)=ADRESSE DE RETOUR DU MODULE DE
                                     <     VALIDATION,
         WORD        STNVAL          < (B)=ADRESSE DU MODULE DE VALIDATION.
         PSR         A,B             < AINSI, ON EMPILE L'ADRESSE DE RETOUR
                                     < ICI, PUIS L'ADRESSE DU MODULE DE VALIDA-
                                     < TION...
         RSR                         < CE 'RSR' EST DONC EQUIVALENT A UN
                                     < 'JMP STNVAL' MAIS QUE L'ON NE PEUT
                                     < REALISER AINSI FAUTE DE PLACE (SANS
                                     < COMPTER LES PROBLEMES DES SAUTS SUPERIEUR
                                     < A 128 MOTS...).
STNRET:  EQU         $               < ET VOICI LE POINT DE RETOUR DE 'STNVAL'.
         PLR         B,X,W
         JNE         Z36XYK          < ERREUR LORS DE LA RELECTURE DE LA VALEUR
                                     < SUR LE VOLUME AMOVIBLE ; ON REBOUCLE
                                     < SUR L'ALLOCATION D'UN BLOC, EN LAISSANT
                                     < ALLOUE LE BLOC EN DEFAUT ; IL EST DONC
                                     < PERDU A JAMAIS...
<
< RETOUR DU MODULE D'EXTENSION SUR VOLUME,
< ET PARTIE COMMUNE AU 'STN' NORMAL :
<
Z36XY4:  EQU         $
<
< PREPARATION DU BUFFER STATIQUE
< POUR LE <SECTEUR-MAP> :
<
         BSR         VAR+ASP6        < CLEAR DU BUFFER STATIQUE.
         PSR         W               < SAUVEGARDE DE L'ADRESSE DE LA DEMANDE
                                     < A 'HDLSTN',
         PSR         Y               < SAVE LONGUEUR DU <NOM-SYSTEME>.
         BSR         VAR+ASP8        < (W)=ADRESSE DU BUFFER DU <SECTEUR MAP>.
<
< DANS LE CAS DE L'EXTENSION DE
< VOLUME, MISE DES INFORMATIONS
< DE CHAINAGE DANS LE <SECTEUR-MAP> :
<
         LA          VAR+ISGNUV      < Y-A-T'IL EU EXTENSION ???
         JALE        Z36XYD          < NON...
         PSR         B,X,L           < OUI :
         LB          VAR+DEMSAV+T+AMDEM
                                     < AU CAS OU IL N'Y AURAIT PAS DE VOLUME
                                     < MONTE, ON RECUPERE 'AMDEM' DE 'DEMSAV',
         LX          VAR+DEMSAV+T+ASDEM
                                     < (X)=ADRESSE EN Q-SECTEURS,
         LA          VAR+ASGNU
         LR          A,L             < (L)=ADRESSE DU BUFFER DU DESCRIPTEUR DU
                                     <     VOLUME COURANT, ET
                                     < (W)=ADRESSE DU <SECTEUR-MAP>,
         CPZR        L               < ALORS, Y-A-T'IL UN VOLUME DE MONTE ???
         JE          Z36XYI          < NON, 'A' DONNE DIRECTEMENT LE NUMERO
                                     < DE VOLUME...
         LB          VOLNUM,L        < OUI, C'EST DONC LE DESCRIPTEUR DE VOLUME
                                     < QUI LE DONNE...
Z36XYI:  EQU         $
         STB         SIND+SVALNU,W   < TRANSMISSION DU NUMERO DE VOLUME,
         STX         SIND+SVALAD,W   < ET DE L'ADRESSE DU BLOC EN Q-SECTEURS.
         PLR         B,X,L
<
< FIN DU MODULE :
<
Z36XYD:  EQU         $
         JMP         Z36XY9          < VERS LE DEROULEMENT NORMAL DE 'STN'...
<
< ERREUR : VOLUME DIFFERENT DE CELUI DEMANDE :
<
Z36XY6:  EQU         $
         PLR         B,X,Y,W
         LAI         ENDKUW          < CODE D'ERREUR,
AAZ33:   JMP         ABZ33           < VERS SON RENVOI...
<
< ERREUR : PLUS DE PLACE :
<
Z36XY5:  EQU         $
         LA          VOLNIM,W        < (A)=NOMBRE DE BLOCS ENCORE DISPONIBLES
                                     <     QUI PEUT ETRE NON NUL, PUISQUE LA
                                     <     RECHERCHE D'UN BLOC LIBRE NE COMMENCE
                                     <     PAS FORCEMENT SUR LE PREMIER...
         PLR         B,X,Y,W
         LR          A,X             < (X)=NOMBRE DE BLOCS ENCORE LIBRES,
         BSR         ASTBOX          < VERS LE RENVOI DE CE NOMBRE DANS LA
                                     < 'BOX' DE LA DEMANDE AFIN QUE L'ON PUISSE
                                     < DISCRIMINER LES VRAIES (PLUS DE PLACE
                                     < DEPUIS LE DEBUT : 'VOLNIM'=K) DES
                                     < AUTRES (PAS DE PLACE A PARTIR DU BLOC
                                     < DEMANDE).
         BR          VAR+RAZ26X      < VERS L'ENVOI D'UN CODE D'ERREUR...
         PAGE
<
<
<        L O A D   V A L E U R  :
<
<
<        FONCTION :
<                      RECUPERE ET RENVOIE LA VALEUR
<                    ASSOCIEE A UN NOM. LORSQUE LA
<                    LONGUEUR DEMANDEE EST INFERIEURE
<                    A LA VALEUR REELLEMENT ASSOCIEE
<                    AU NOM, ON NE RENVOIE QUE CE
<                    QUI EST DEMANDE.
<
<
<        ARGUMENTS :
<                    (A)=CODE DE RETOUR DE L'ARBORICULTEUR,
<                    (B)=RANG DERNIER CARACTERE DE LA VALEUR,
<                    (X)=RANG 1ER CARACTERE DE LA VALEUR.
<
<
<        RESULTAT :
<                      SI LA BOX DE LA DEMANDE COURANTE
<                    EST VALIDE, CELLE-CI RECOIT LE NBRE
<                    D'OCTETS REELLEMENT OCCUPES PAR LA
<                    VALEUR QUE L'ON VIENT DE CHARGER ET CECI
<                    PEUT ETRE PARTIELLEMENT ; ON PEUT DONC
<                    AINSI CONNAITRE LA LONGUEUR REELLE
<                    D'UNE VALEUR PAR UN LOAD NE PORTANT PAS
<                    OBLIGATOIREMENT SUR LE COMPTE D'OCTETS MAX !!!
<
<
HDLLON:  EQU         $
         JANE        Z34             < ERREUR : LE NOM N'EXISTE PAS.
         LA          VAR+DEMSAV+T+OPDEM
         IF          XBNV-BITSIG,,XEIF%,
         IF          ATTENTION : LE TEST QUI SUIT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JAGE        Z34             < ERREUR, LE SUIVANT SERIE DU
                                     < NOM N'EXISTE PAS.
<
< OK, LE NOM EXISTE DEJA :
<
         STZ         ARGDEM+OPDEM    < MISE EN LECTURE DE LA DEMANDE A
                                     < HDLSAV.
         TBT         XBNVL           < TEST INDICATEUR LONGUEUR-VALEUR
         LA          VAR+DEMSAV+T+ASDEM
         JC          Z34             < BIT1(OPDEM)=1: CE N'EST DONC
                                     < PAS UN RELAI-VALEUR, ET ON
                                     < CONSIDERE QUE LE NOM N'EXISTE
                                     < PAS.
         LR          A,Y             < OK, C'EST UN RELAI VALEUR...
<
<        ON A ICI :
<                    (Y)=RELAI VALEUR (@SECTEUR-MAP).
<
         BSR         VAR+ASP6        < CLEAR LE BUFFER STATIQUE.
         PSR         W               < SAVE @DEMANDE ARG.
         BSR         VAR+ASP8        < (W)=@BUFFER ALLOUE.
<
< SAUVEGARDE DE LA LONGUEUR DEMANDEE POUR LA VALEUR :
<
         SBR         X,B
         STB         VAR+NOMS        < SAUVEGARDE TEMPORAIRE DE LA
                                     < LONGUEUR DEMANDEE DANS 'NOMS'.
<
< ACCES A LA VALEUR :
<
         STY         SMAP,W          < RANGEMENT DU RELAI-VALEUR.
                                     < (@SECTEUR-MAP).
         LA          INFINI
         STA         SIND+SINDL,W    < MEMORISONS AINSI QUE LA LONGUEUR
                                     < REELLE DE LA VALEUR N'EST PAS
                                     < ENCORE CONNUE, ET QU'ELLE NE
                                     < LE SERA QUE APRES LA LECTURE
                                     < DU SECTEUR-MAP.
         LA          VAR+ANOM        < (A)=RELAI D'ACCES A <NOM>.
         SLLS        NOCMO=K         < (A)=@OCTET DE <NOM> A UNE
                                     <     FRONTIERE DE MOT.
         AD          VAR+IVAL        < (A)=@OCTET DE LA VALEUR DEMANDEE.
         STA         VAR+ANOM        < (ANOM)=ADRESSE-OCTET DU PREMIER OCTET
                                     <        DE LA VALEUR.
         PSR         A               < SAVE @OCTET 1ER OCTET VALEUR.
         LYI         FGR             < FONCTION DE LECTURE.
         BSR         VAR+ASP11       < RECUPERATION DE LA VALEUR SUR DK.
         BSR         VAR+ASP8        < RESTAURE (W)=@MOT DU BUFFER
                                     < ALLOUE (CA MARCHERA MIEUX !!!)
<
< RENVOI DE LA 1ERE PARTIE DE LA VALEUR
< (CONTENUE DANS LE SECTEUR-MAP) AU
< DEMANDEUR :
<
         PLR         A               < RESTAURE (A)=@OCTET 1ER OCTET
                                     < DE LA VALEUR.
         LBI         XXSP10          < AFIN QUE L'EMETTEUR SOIT PRIS
                                     < DANS LE BUFFER STATIQUE.
         BSR         VAR+ASP9        < MOVE 1ERE PARTIE DE LA VALEUR.
<
< DISCRIMATION DES ITEMS "NORMAUX" ET "SGF" :
<
         LA          ETASYS
         TBT         OTODLN          < EST-CE A FAIRE ???
         JC          Z36X3           < NON...
         IF          SXSGFN-K,XEIF%,,
         IF          ATTENTION : 'SXSGFN' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         IF          SXSGFF-K,,,XEIF%
         IF          ATTENTION : 'SXSGFF' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         CPZ         VAR+SGNSGF      < OUI, QUELLE EST LA NATURE DE L'ITEM
                                     < ATTENDU ???
         JL          Z36X3           < "NORMAL" ; ON NE VERIFIE PAS SI L'ITEM
                                     < RECUPERE EST "NORMAL" OU "SGF" AFIN
                                     < QUE LES PROGRAMMES UTILISATEURS DE
                                     < LISTAGE EN PARTICULIER CONTINUENT A
                                     < FONCTIONNER...
         JG          Z36X4           < "SGF", ALLONS VALIDER...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT PEUT-ON AVOIR (SGNSGF)=0 !!!
<
         JMP         Z36X3           < VERS LE RETOUR...
Z36X4:   EQU         $
         CPZ         SIND+SXSGF,W    < ON ATTENDAIT UN "SGF" ; ALORS A-T'ON
                                     < BIEN RECUPERE UN ITEM "SGF" ???
         JL          Z34X            < NON, ON ABORTE ; IL PEUT S'AGIR D'UN
                                     < FAUX FICHIER CREER PAR UN UTILISATEUR
                                     < VICIEUX COMME IL PEUT EN EXISTER...

<
< TEST DES EXTENSIONS SUR VOLUME :
<
Z36X3:   EQU         $
         LA          VAR+ISGNUV      < Y-A-T'IL EU EXTENSION ???
         JALE        Z36X3A          < NON...
         IF          ISGNPV-K,,XEIF%,
         IF          ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         CPZ         VAR+ASGNU       < Y-A-T'IL UN VOLUME MONTE ???
         JE          Z36X3B          < NON...
<
< CAS OU UN ACCES LICITE A
< UN VOLUME MONTE A EU LIEU :
<
         PSR         X,W             < OUI :
         LR          A,X             < (X)='NSP' DU DISQUE D'EXTENSION.
         IF          MONT0-K,,XEIF%,
         IF          ATTENTION : LE 'JAE' EST IDIOT !!!
XEIF%:   VAL         ENDIF
         LA          SIND+SVALNU,W   < MAIS AU FAIT, EST-CE BIEN UN ITEM
                                     < D'EXTENSION SUR VOLUME ???
         JAE         Z36X3P          < NON, DONC PAS D'ACCES AU VOLUME, SACHANT
                                     < QUE LA VALEUR DE 'BOX' PERMETTRA DE FAIRE
                                     < LA DIFFERENCE PAR LE BIT 'IVALEX'...
         CP          VAR+NVSGNU      < OUI, MAIS LE NUMERO DE VOLUME CONTENANT
                                     < LE BLOC RELAYE PAR L'ITEM COURANT (A)
                                     < EST-IL LE VOLUME COURANT ???
         JNE         Z36X3P          < NON, DONC ON FAIT COMME S'IL N'Y AVAIT
                                     < PAS EU D'EXTENSION...
         LA          SIND+SVALAD,W   < (A)=ADRESSE DU BLOC SUR LE DISQUE,
         STA         VAR+DEMSAV+T+ASDEM
                                     < QUE L'ON MET DANS LA DEMANDE,
         LAD         VAR+DEMSAV
         LR          A,W             < (W)=ADRESSE DE LA DEMANDE.
         IF          NSPDKU-NSPDKG,,XEIF%,
         IF          ATTENTION : IL FAUT POUVOIR ATTEINDRE LA
         IF          TELEVISION NUMERIQUE, DONC IL FAUT 'DKU' !!!
XEIF%:   VAL         ENDIF
         SWBR        X,A             < MISE EN PLACE DU 'NSP',
         STA         NSPTYP          < ET GENERATION DU 'NSPTYP'.
         WORD        L2FTVR          < (A)='FONTVR' (INSTRUCTION EN AVANT...),
         STA         ARGDEM+OPDEM    < MISE EN MODE FONCTION TRANSFERT
                                     < RAPIDE : 'DKU' --> 'MEMTV'.
         IF          TVAR0-O,,XEIF%,
         IF          ATTENTION : LE 'STZ' EST IDIOT !!!
XEIF%:   VAL         ENDIF
         STZ         ARGDEM+AMDEM    < AFIN D'ATTEINDRE 'MEMTV' DEPUIS SON
                                     < ORIGINE,
         LRM         A
         WORD        TVLIMA*LK*XNCOOL*NOCMO
         STA         ARGDEM+CODEM    < ET EN ENTIER...
         BSR         VAR+ASP40       < ENVOI DE LA DEMANDE DE TRANSFERT
                                     < RAPIDE : 'DKU' --> 'MEMTV',
         BSR         ACHANW          < ET ATTENTE...
Z36X3P:  EQU         $               < CAS OU IL N'Y A PAS COINCIDENCE ENTRE
                                     < LE NUMERO DE VOLUME COURANT ET LE NUMERO
                                     < DE VOLUME DE L'ITEM...
         PLR         X,W
Z36X3B:  EQU         $
<
< VERS LE RETOUR :
<
Z36X3A:  EQU         $
         BR          VAR+RAZ36       < VERS LE RETOUR...
<
< TRAITEMENT DES ERREURS DE PARCOURS :
<
Z34X:    EQU         $
         PLR         W               < RESTAURE L'ADRESSE DE LA DEMANDE...
Z34:     EQU         $
         LAI         ENNX            < ERREUR : NOM INEXISTANT LORS D'UN
                                     < LOAD/DELETE.
AZ33:    JMP         AAZ33           < VERS LE RENVOI DU CODE AU
                                     < DEMANDEUR.
                                     < (ET RELAI...)
         PAGE
<
<
<        D E L E T E   V A L U E  :
<
<
<        FONCTION :
<                      DELETE LE NOM, ET REND L'ESPACE
<                    DISQUE OCCUPE PAR LA VALEUR.
<                    MAIS ATTENTION, S'IL S'AGIT D'UN
<                    ITEM DE CONNEXION AU SGF, ON REGARDE
<                    SI LE FICHIER CORRESPONADNT EXISTE
<                    TOUJOURS, ET SI OUI, ON REFUSE
<                    LE DELETE...
<
<
<        ARGUMENTS :
<                    (A)=CONDITION DE RETOUR DE L'ARBORICULTEUR.
<                    (Y)=LONGUEUR <NOM-SYSTEME>.
<
<
<        RESULTAT :
<                      SI LA BOX DE LA DEMANDE COURANTE EST
<                    VALIDE, CELLE-CI RECOIT LE NBRE
<                    D'OCTETS DELETES.
<
<
HDLDLN:  EQU         $
         JANE        Z34             < ERREUR : LE NOM A DELETER
                                     < N'EXISTE PAS.
         LR          Y,A             < (A)=LONGUEUR <NOM-SYSTEME>.
         CPI         XXSGN4-Z        < CE NOM QUI EXISTE PUISQU'ON
                                     < EST ICI, EST-IL VIDE ????
                                     < (EST-CE L'EOT' DE TETE DU SOUS
                                     < ABRE UTILISATEUR ???? ).
         JE          Z34             < OUI, FAISONS DONC COMME SI
                                     < CELUI-CI N'EXISTAIT PAS, IL
                                     < N'EST PAS QUESTION DE LE DELETER.
         LB          VAR+DEMSAV+T+OPDEM
         TBT         NBITMO+XBNVL    < VALIDATION DU RELAI-VALEUR
                                     < PRESUME
         JC          Z34             < BIT1(OPDEM)=1: CE N'EST DONC
                                     < PAS UN RELAI-VALEUR, ET ON
                                     < CONSIDERE QUE LE NOM N'EXISTE
                                     < PAS !!!
         LB          VAR+DEMSAV+T+ASDEM < CHARGEMENT RELAI-VALEUR
         PSR         B               < SAVE (B)=RELAI-VALEUR=@SECTEUR-MAP.
         PSR         B,X,Y,W
         PSR         Y               < SAVE LA LONGUEUR NOM-SYSTEME.
         BSR         VAR+ASP6        < CLEAR LE BUFFER STATIQUE.
         BSR         VAR+ASP8        < (W)=ADRESSE MOT DU BUFFER.
         LYI         FGR             < (Y)=K=FONCTION DE LECTURE
         LAI         XXSP10          < (A)=K, AFIN D'ATTEINDRE LE BUFFER
                                     <     STATIQUE.
         LRM         X
         WORD        YY8Q            < (X)=LONGUEUR D'UN ENREGISTREMENT.
         BSR         VAR+ASP10       < LECTURE DU SECTEUR-MPA (B).
         PLR         Y               < RESTAURE (Y)=LONGUEUR NOM-SYSTEME.
         LA          ETASYS
         TBT         OTODLN          < DOIT-ON TESTER S'IL S'AGIT D'UN
                                     < NOM DE FICHIER EXISTANT ???
         JC          ZZ34            < NON...
         CPZ         SIND+SXSGF,W    < OUI, ALORS L'ITEM RECUPERE EST-IL DE
                                     < TYPE "SGF" ???
         JL          ZZ34            < "NORMAL", ON VA LE DELETER...
<
< CAS D'UN ITEM DE TYPE "SGF"
< OU BIEN DE TYPE "ANCIEN",
< ALLONS FAIRE LES VERIFICATIONS
< D'USAGE :
<
         IF          SXSGFN-K,XEIF%,,
         IF          ATTENTION : 'SXSGFN' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         IF          SXSGFA-K,,XEIF%,
         IF          ATTENTION : 'SXSGFA' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         IF          SXSGFF-K,,,XEIF%
         IF          ATTENTION : 'SXSGFF' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         NTRN
         IF          XLPASS/NOCMO(K=FCREST,,XEIF%,
         IF          ATTENTION : CE QUI SUIT RISQUE DE NE PAS MARCHER !!!
XEIF%:   VAL         ENDIF
         TRN
XWOR%7:  VAL         BUFESC-DCTESC   < DEPLACEMENT D'ACCES A 'BUFESC'.
         NTRN
XWOR%7:  VAL         XLPASS+NOCMO-E/NOCMO+XWOR%7
         TRN
                                     < AFIN DE PRENDRE EN COMPTE LE NOMBRE
                                     < DE MOTS OCCUPES PAR "!ASSIGN N=X,"
XWOR%3:  VAL         NOCMO+NOCMO-E   < NOMBRE D'OCTETS DE VALIDATION...
         NTRN
XWOR%5:  VAL         XWOR%3+NOCMO-E/NOCMO < SOIT EN MOTS...
         TRN
XWOR%7:  VAL         YY7-XWOR%5-XWOR%7
XWOR%7:  VAL         XWOR%7*NOCMO    < AFIN D'AVOIR UN NOMBRE D'OCTETS.
XWOR%7:  VAL         XWOR%7+NOCMO-Z  < POUR COMMENCER SUR L'OCTET
                                     < DROIT D'UN MOT (CF. NSPSTN+X123X).
XWOR%7:  VAL         XXSGN2*NOCMO+NOCMO-E+XWOR%7
                                     < POUR AJOUTER LA LONGUEUR DE <EOT>...
XWOR%7:  VAL         XWOR%7+XWOR%3   < CAR IL Y A 3 OCTETS DE VALIDATIONS
                                     < 'SGF' :
                                     < 1 : NSPSTN+X123X,
                                     < 2 : NOM INTERNE DU FICHIER.
         LXI         XWOR%7
         SBR         Y,X             < (X)=LONGUEUR DE L'ITEN S'IL S'AGIT
                                     <     D'UN ITEM DE CONNEXION 'SGF'.
         LA          SIND+SINDLO,W   < LONGUEUR REELLE DE L'ITEM,
         CPR         X,A             < EST-CE LA LONGUEUR PREVUE POUR 'SGF' ???
         JL          ZZ35XS          < ET BIEN NON, CE N'EST PAS CELA...
         ADRI        NOCMO*SVAL-XWOR%3,X < PEUT-ETRE, ALORS ALLONS TESTER
                                     < LES 3 OCTETS FATIDIQUES DANS LA
                                     < 1ERE PARTIE DE LA VALEUR...
         BSR         AGETOC
         CPI         NSPSTN+X123X    < EST-CE LA VALIDATION ???
         JNE         ZZ35XS          < NON, CE N'EST PAS UN FICHIER...
         ADRI        I,X             < A L'OCTET SUIVANT...
         BSR         AGETOC
XWOR%1:  VAL         MOCG=K
XWOR%1:  VAL         -XWOR%1         < POUR UN DECALAGE A DROITE DE 8.
         CPI         NMFILE>XWOR%1   < EST-CE UN DEBUT DE NOM INTERNE ???
         JGE         ZZ35XS          < NON, CE N'EST PAS UN FICHIER...
         LBI         K               < CLEAR B,
         SLRD        -XWOR%1         < SAUVEGARDE DU DEBUT DU NOM INTERNE.
         ADRI        I,X             < A L'OCTET SUIVANT.
         BSR         AGETOC
         ORR         B,A             < (A)=NOM INTERNE PRESUME...
         LR          A,X             < (X)=NOM INTERNE,
         LAD         ATADF           < (A)=ADRESSE DU RELAI VERS 'TADF'.
         LYI         FONTB           < (Y)=FONCTION DE TEST DU BIT DONT LE
                                     < RANG EST DANS X (=NOM INTERNE).
         BSR         ATMOBT          < COMMENT EST LE FICHIER ???
         JC          ZZ34            < OK, IL EST EN COURS DE DELETE, OU
                                     < BIEN EN ATTENTE DE DELETE ; ON PEUT
                                     < DONC DELETER SON NOM EXTERNE...
         LAI         MTSGF           < MASQUE='0, ETAT='0.
         BSR         AMTEDF          < RECHERCHE DE L'ETAT DU FICHIER DE
                                     < NOM INTERNE (X).
         JAE         ZZ34            < LE FICHIER CORRESPONDANT EST INEXISTANT,
                                     < JAMAIS OUVERT... OK ON PEUT DELETER...
         IF          XEFX-K,,XEIF%,
         IF          ATTENTION : LE 'JAE' QUI PRECEDE EST IDIOT !!!
XEIF%:   VAL         ENDIF
         CPI         XEFF            < LE FICHIER EST-IL EXISTANT ET FERME ???
         JE          ZZ35            < OUI, ON REFUSE LE DELETE...
         CPI         XEFO            < LE FICHIER EST-IL EXISTANT ET OUVERT ???
         JE          ZZ35            < OUI, ON REFUSE LE DELETE...
         CPI         XEF1            < EST-CE UN FICHIER INEXISTANT OUVERT
                                     < AU MOJSN UNE FOIS ???
         JE          ZZ34            < OUI, ALLONS DELETER...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      EN FAIT IL NE S'AGIT PAS VRAIMENT
<                    D'UNE ERREUR SYSTEME ; CE CAS PEUT
<                    SE RENCONTRER JE CROIS LORSQU'UN
<                    FICHIER <NOM>-<NOM INTERNE> EST
<                    EN COURS DE DELETE PAR UN "!ASSIGN..." ;
<                    APRES LE CLOSE RELEASE DU <NOM
<                    INTERNE> LORSQUE LE DELETE DE
<                    L'ESPACE DISQUE (PAR LA TACHE IDLE
<                    DE DELETE) EST TERMINE LE <NOM INTERNE>
<                    REDEVIENT DISPONIBLE POUR L'OPEN
<                    NEW D'UN NOUVEAU FICHIER ; SI PAR
<                    MALHEUR UN AUTRE UTILISATEUR DE-
<                    MANDE DONC UN OPEN NEW, ALORS
<                    QUE CELUI QUI A CAUSE LA 'SYSER'
<                    EST ENTRE LA LIBERATION DE SON
<                    <NOM INTERNE> ET LA DESTRUCTION
<                    DU <NOM> DU FICHIER (POUR DES
<                    RAISONS DE PRIORITE ET SI DE
<                    PLUS LE FICHIER DELETE ETAIT
<                    PETIT OU VIDE...), DONC LORS
<                    DU 'DLN' DE <NOM> ON TROUVE QUE
<                    LE FICHIER <NOM INTERNE> EXISTE
<                    ENCORE, ALORS QUE CE N'EST PLUS
<                    LE MEME...
<                      DONC ON ACCEPTE LE DELETE DU
<                    <NOM>...
<
ZZ34:    EQU         $
         PLR         B,X,Y,W
<
< DELETE <NOM-SYSTEM> DANS L'ARBRE DU SYSTEME :
<
         LAI         SMOINS          < CARACTERE DE FONCTION-DELETE.
<
<        ON A ICI :
<                    (B)=RELAI-VALEUR=ADRESSE DU SECTEUR-MAP,
<                    (Y)=LONGUEUR <NOM-SYSTEME>.
<
         BSR         VAR+ASP12       < DELETE <NOM-SYSTEME>.
         LA          VAR+DEMSAV+T+ETADEM
         JAE         SYSR8M          < DELETE OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      SORTIR EN ERREUR, MAIS ATTENTION,
<                    IL FAUT FAIRE UN 'PLR B', PUIS
<                    FAIRE UN 'JMP Z26' PAR EXEMPLE...
<
SYSR8M:  EQU         $
         PLR         B               < RESTAURE (B)=@SECTEUR-MAP.
         PSR         W               < SAVE @DEMANDE ARG.
         BSR         VAR+ASP8        < (W)=@MOT DU BUFFER ALLOUE.
<
< RELEASE DE L'ESPACE DISQUE DE LA VALEUR :
<
         LB          SIND+SINDLS,W   < RECUPERATION (B)=NBRE DE SECTEURS
                                     < OCCUPES PAR LA VALEUR.
         CPZR        B
         JG          ZZ35X           < OK,...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ALLER VOIR LE BUFFER POINTE PAR (W), ET
<                    VERIFIER QU'IL CONTIENT L'INFINI, SIGNE
<                    D'UNE ERREUR 'DKM' !!!
<
         BR          VAR+RAZ36       < ET ON ABANDONNE...
ZZ35X:   EQU         $
         LAI         NSPREL
         BSR         VAR+ASP7        < RELEASE SECTEURS.
<
< TEST DES EXTENSIONS SUR VOLUME :
<
         LA          VAR+ISGNUV      < Y-A-T'IL EU UNE EXTENSION DEMANDEE ???
         JALE        ZZ35X1          < NON...
         IF          MONT0-K,,XEIF%,
         IF          ATTENTION : LE 'JAE' EST IDIOT !!!
XEIF%:   VAL         ENDIF
         LA          SIND+SVALNU,W   < MAIS AU FAIT, EST-CE UN ITEM SUR VOLUME ?
         JAE         ZZ35X1          < NON, DONC RIEN A FAIRE, 'BOX' FERA LA
                                     < DIFFERENCE PAR 'IVALEX'...
         CP          VAR+NVSGNU      < OUI, MAIS ALORS EST-IL SUR LE VOLUME
                                     < COURANT ???
         JNE         ZZ35X1          < NON, DANS CES CONDITIONS, ON NE FAIT RIEN
                                     < SUR LE VOLUME COURANT, MAIS BIEN ENTENDU
                                     < LE <NOM> A ETE DELETE...
         LA          VAR+ISGNUV      < RESTAURE :
                                     < (A)='NSP' DU DISQUE SUPPORT,
         BSR         VAR+ASP20       < OUI, ON LIT LE DESCRIPTEUR DU VOLUME,
                                     < (A)=ADRESSE DU BUFFER DU DESCRIPTEUR
                                     <     DU VOLUME COURANT.
         JAE         ZZ35X1          < (A)=0 : L'ADRESSE RENVOYEE ETANT NULLE,
                                     <         CELA SIGNIFIE QU'IL N'Y A PAS
                                     <         DE VOLUME MONTE...
         JNE         ZZ35X7          < BERKKK, LE VOLUME N'EST PAS FORMATTE...
         PSR         B,X,Y,W
         LB          SIND+SVALAD,W   < (B)=ADRESSE DU BLOC SUR LE VOLUME,
         LR          A,W             < (W)=ADRESSE DU BUFFER CONTENANT LE
                                     <     DESCRIPTEUR DU VOLUME.
         LRM         A,Y
         WORD        VOLSE0          < (A)=ADRESSE DU PREMIER BLOC DISPONIBLE,
         WORD        NVOLIM          < (Y)=NUMERO DU PREMIER BLOC INEXISTANT.
         SBR         A,B             < (B)=CONVERSION DE L'ADRESSE ABSOLUE EN
                                     <     UNE ADRESSE RELATIVE AU PREMIER BLOC
                                     <     DISPONIBLE...
         LAI         K               < CLEAR 'A',
         DV          VOL23,W         < ET CONVERSION DE L'ADRESSE EN UN
                                     < NUMERO DE BLOC.
         LR          A,B             < (B)=NUMERO DU BLOC QUE L'ON LIBERE,
         IF          NVOLIM-K,,,XEIF%
         IF          ATTENTION : LE TEST SUR LE NUMERO DE BLOC
         IF          ARGUMENT EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         JAL         ZZ35X5          < L'ADRESSE DISQUE EST MAUVAISE !!!
         CPR         Y,B             < VALIDATION DU NUMERO DE BLOC CALCULE :
         JL          ZZ35X9          < OK : (B)<(Y), LE NUMERO DU BLOC EXISTE...
ZZ35X5:  EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT 'SVALAD' PEUT ETRE
<                    MAUVAIS, ALORS QU'IL VIENT DU <SECTEUR-MAP> !!!
<
         JMP         ZZ35X8          < ET ON SORT....
ZZ35X9:  EQU         $
<
< RESTITUTION DU BLOC :
<
         LAD         VOLTAB,W        < (A)=ADRESSE DE LA TABLE D'ALLOCATION,
         LR          B,X             < (X)=NUMERO DU BLOC RELEASE,
         DRBM
                                     < RECHERCHE DU PREMIER BLOC A PARTIR
                                     < DU BLOC RELEASE, QUI DOIT ETRE DIFFE-
                                     < RENT DE CELUI QU'ON REND, SINON, CELA
                                     < SIGNIFIE QUE LE BLOC RELEASE ETAIT DEJA
                                     < LIBRE...
         JC          ZZ35X2          < OK, ON N'A RIEN TROUVE...
         SBTM        L,X             < ON A TROUVE UN BLOC LIBRE, ON L'A OCCUPE
                                     < IL FAUT LE RENDRE (C'EST QUAND MEME
                                     < MALHEUREUX QU'IL N'EXISTE PAS UNE
                                     < INSTRUCTION 'TBTM', ENCORE MERCI LA
                                     < SEMS...).
         CPR         B,X             < LE PREMIER BLOC TROUVE LIBRE, NE SERAI-IL
                                     < PAS CELUI QUE L'ON REND ???
         JNE         ZZ35XA          < NON, C'EST HEUREUX...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT LE <SECTEUR-MAP>
<                    PEUT CONTENIR DES COCHONNERIES !!!
<                      A NOTER QUE CELA PEUT SE PRODUIRE
<                    AVEC LE MODE 'STN' SUR VOLUME D'EXTENSION
<                    LORSQU'IL N'Y A PAS DE VOLUME MONTE,
<                    CE QUI PERMET DE CREER DES VALEURS
<                    BIDONS CORRESPONDANT A DES BLOCS NON ALLOUES...
<
         JMP         ZZ35X8          < ET ON SORT...
ZZ35XA:  EQU         $
ZZ35X2:  EQU         $
         LR          B,X             < (X)=NUMERO DU BLOC A LIBERER...
         SBTM        L,X             < ET ON LE LIBERE...
         IC          VOLNIM,W        < ET UN BLOC LIBRE DE PLUS...
         BSR         VAR+ASP21       < REECRITURE DU DESCRIPTEUR DU VOLUME...
ZZ35X8:  EQU         $
         PLR         B,X,Y,W
<
< RETOUR :
<
ZZ35X1:  EQU         $
         BR          VAR+RAZ36       < VERS LE RETOUR...
<
< ERREURS SUR UN ITEM
< DE TYPE "SGF" :
<
ZZ35XS:  EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      VOIR QUELLE EST LA CAUSE
<                    QUI AMENE ICI, PUIS COMPRENDRE
<                    COMMENT UN ITEM DE TYPE "SGF"
<                    PEUT NE PAS AVOIR LES BONNES
<                    DIMENSIONS ET UN FORMAT COR-
<                    RECT !!!
<
<
< ERREUR : DELETE REFUSE POUR
< UN ITEM DE TYPE "SGF" ASSO-
< CIE A UN FICHIER EXISTANT
< OUVERT OU FERME :
<
ZZ35:    EQU         $
         PLR         B,X,Y,W
         PLR         B
         JMP         Z34             < DELETE REFUSE SI FICHIER PRESUME
                                     < EXISTANT...
<
< ERREUR : VOLUME NON FORMATTE :
<
ZZ35X7:  EQU         $
         LAI         ENDKUV          < CODE D'ERREUR,
         PLR         W
AAAZ33:  JMP         AZ33            < VERS SON RENVOI...
                                     < (ET RELAI...)
         PAGE
<
<
<        P A R C O U R S   I N C R E M E N T A L
<        D ' U N   A R B R E  :
<
<
<        FONCTION :
<                      CES HANDLERS SPECIFIQUES PERMETTENT
<                    DE RECUPERER LES SUIVANTS
<                    SEERIE OU PARALLELE D'UN NOM
<                    DONNE EN ARGUMENT. CE CARACTERE SUIVANT
<                    EST RENVOYE DERRIERE LE NOM,
<                    OU UN CODE ERREUR (5) S'IL
<                    N'EXISTE PAS.
<                      ON PEUT DONC AINSI PARCOURIR UN
<                    ARBRE QUE L'ON NE CONNAIT PAS (MIS
<                    A PART SA RACINE!!!!).
<
<
<        ARGUMENTS :
<                    (A)=CODE DE RETOUR DE L'ARBORICULTEUR.
<                    (X)=RANG 1ER CARACTERE DERRIERE LE NOM.
<
<
HDLNXT:  EQU         $
         JANE        Z34             < ERREEUR LE NOM DEMANDE N'EXISTE
                                     < PAS.
         LA          VAR+DEMSAV+T+OPDEM
         IF          XBNV-BITSIG,,XEIF%,
         IF          ATTENTION : DES TESTS MERDERONT !!!
XEIF%:   VAL         ENDIF
         JAGE        Z50             < ERREUR, LE NOEUD SUIVANT
                                     < DEMANDE N'EXISTE PAS.
         LR          X,A             < (A)=RANG DU 1ER CARACTERE
                                     < DERRIERE LE NOM.
         CP          ARGDEM+CODEM    < CE TEST EST DESTINE A DEPISTER
                                     < LES NOMS ARGUMENTS QUI CON-
                                     < TIENDRAIENT UN OU PLUSIEURS
                                     < 'EOT' DANS LA CHAINE DE CARAC-
                                     < TERES QUI LES COMPOSENT.
         JL          Z50             < ERREUR : LA LONGUEUR ARGUMENT
                                     < EST SUPERIEURE AU RANG TROUVE ;
                                     < IL Y A PROBABLEMENT UN 'EOT'
                                     < QUI TRAINE QUELQUE PART...
<
< CAS OU LE NOM EXISTE ET QU'IL POSSEDE
< LE SUIVANT SERIE OU PARALLELE DEMANDE :
<
         LA          VAR+DEMSAV+T+OPDEM
         TBT         XBNVL           < TEST INDICATEUR LONGUEUR-VALEUR
         JNC         Z50             < ERREUR! C'EST UN RELAI-VALEUR
         LA          VAR+DEMSAV+T+ASDEM < RECUPERATION CARACTERE SUIVANT
<*******************************************************************************
         BSR         ASIMUL          < SIMULATION DE L'INSTRUCTION SUIVANTE :
         STBY        &VAR+ANOM       < ON LE RAJOUTE DERRIERE LE NOM.
<*******************************************************************************
                                     < (L'OCTET1 CONTIENT LE CARACTERE
                                     < QUE VALIDE LE BIT0=1)
         IC          ARGDEM+CODEM    < LE NOM FAIT MAINATENANT UN
                                     < CARACTERE DE PLUS.
         STZ         ARGDEM+OPDEM    < MISE EN LECTURE DE LA DEMANDE
                                     < A HDLSAV.
         BR          VAR+RAZ51       < RETOUR OK.
<
< CAS OU LE NOM EXISTE, MAIS OU LE SUIVANT
< DEMANDE N'EXISTE PAS :
<
Z50:     EQU         $
         LAI         ENSX            < CODE-ERREUR.
         JMP         AAAZ33          < VERS LE RENVOI DU CODE AU
                                     < DEMANDEUR.
         PAGE
<
<
<        A U T O R I S A T I O N / I N H I B I T I O N
<        D E   L A   C O M P R E S S I O N   ' S T N '  :
<
<
<        FONCTION :
<                      CES 2 MODULES SONT REFERENCES
<                    PAR LA GRAMMAIRE DU 'CCI' SUITE
<                    A LA RECONNAISSANCE DES COMMANDES
<                    "!SGN C ON" ET "!SGN C OFF" ;
<                    ILS ONT POUR EFFET DE MODIFIER
<                    L'INSTRUCTION DYNAMIQUE SITUEE
<                    EN 'DCOMPR'.
<
<
PSGNON:  EQU         $               < COMMANDE "!SGN C ON" :
         PSR         W
         LRM         A,W
         LAI         XXCPR           < (A)=INSTRUCTION D'AUTORISATION,
         WORD        DCOMPR          < (W)=ADRESSE DE CETTE INSTRUCTION.
         JMP         PSGN1           < VERS LA MISE EN PLACE...
PSGNOF:  EQU         $               < COMMANDE "!SGN C OFF" :
         LA          MEMV            < (A)=LISTE DES INDICATEURS 'MEMV' :
         TBT         MEMXXX          < LA FONCTION EST-ELLE AUTORISEE ???
         JNC         PSGN2           < NON, ERREUR...
         PSR         W               < OUI :
         LRM         A,W
         LAI         XXNCPR          < (A)=INSTRUCTION D'INHIBITION,
         WORD        DCOMPR          < (W)=ADRESSE DE CETTE INSTRUCTION.
<
< MISE EN PLACE DE L'INSTRUCTION
< D'INHIBITION/AUTORISATION DE
< LA COMPRESSION 'STN' :
<
PSGN1:   EQU         $
         STA         O,W             < ET VOILA...
         PLR         W
<
< RETOUR :
<
PSGN3:   EQU         $
         RSR
<
< SORTIE EN ERREUR :
<
PSGN2:   EQU         $
         ADRI        XCCIER,X        < RETOUR EN ERREUR AU 'CCI'...
         JMP         PSGN3           < ET ON SORT...
         PAGE
<
<
<        V A L I D A T I O N   D ' U N   B L O C   E C R I T
<        S U R   V O L U M E   A M O V I B L E  :
<
<
<        FONCTION :
<                      CE MODULE MIS ICI POUR DES
<                    RAISONS LIEES AU MANQUE DE
<                    PLACE (SAUTS SUPERIEURS A
<                    128 MOTS) ET DONC L'ACCES EST
<                    VACHEMENT TARABISCOTTE... EST
<                    CHARGE DE RELIRE LE BLOC QUE
<                    L'ON VIENT D'ECRIRE ; POUR
<                    PREVENIR UNE DETERIOTATION DE
<                    'MEMTV' SUR ERREUR DISQUE, CETTE
<                    RELECTURE SE FAIT EN MODE "!DK S",
<                    SACHANT QUE LA COMMANDE 'CCI'
<                    EQUIVALENTE "!DK S" NE PEUT ETRE
<                    EMISE SIMULTAEMENT PAR UN AUTRE
<                    UTILISATEUR PUISQUU'ELLE EST
<                    DORENAVANT RESERVEE A CELUI QUI
<                    AURA FAIT UN "!ASSIGN N=DKU" AU
<                    PREALABLE...
<
<
<        NOTA IMPORTANT :
<                      CETTE VERIFICATION PAR RELECTURE
<                    N'EST PAS FAITE SI LA 'CDA' UTILISEE
<                    POUR L'EXTENSION SUR VOLUME EST LA
<                    'CDAJ+PAGEIJ', CAR EN EFFET, LA MEMOIRE
<                    HAUTE (CF. 'AMEMTW') RELATIVE A L'ORI-
<                    GINE DE LA 'CDA' EST EN RECOUVREMENT AVEC
<                    LES REGISTRES 68000...
<
<
<        RESULTAT :
<                    LES CODES DE CONDITIONS SONT POSITIONNES
<                    PAR TEST DE 'ETADEM' APRES LA RELECTURE...
<
<
STNVAL:  EQU         $
<
< DISCRIMINATION DES 'CDA' :
<
         STZ         ARGDEM+ETADEM   < AFIN DE FAIRE A PRIORI UN RETOUR OK...
XWOR%1:  VAL         LK>DADR*TMCDAJ=K
XWOR%2:  VAL         BIT>XWOR%1*PAGEIJ
XWOR%3:  VAL         -XSLO32
XWOR%4:  VAL         MCDAJO+XWOR%2>XWOR%3
         LA          VAR+SGNCDA      < (A)=NUMERO DE LA PREMIERE PAGE DE LA
                                     <     'CDA' COURANTE :
         CPI         XWOR%4          < EST-CE 'CDAJ+4' ???
         JE          STNVAN          < OUI, ON NE PEUT VALIDER L'ECRITURE...
<
< SIMULATION DE "!DK S" :
<
         PSR         W               < SAUVEGARDE DE L'ADRESSE DE LA DEMANDE
                                     < COURANTE...
         CALL        #SISP CMS5 W ZERO#
         LRM         A
         WORD        AMEMTW          < (A)=DECALAGE DE L'ADRESSE MEMOIRE,
         XM          TVENTR-ZERO,W   < ET ON SIMULE UNE COMMANDE "!DK S", TOUT
                                     < EN SAUVEGARDANT L'ETAT ANTERIEUR DANS
                                     < LE REGISTRE 'A'...
         PLR         W               < (W)=ADRESSE DE LA DEMANDE COURANTE.
         PSR         A               < SAUVEGARDE DU MOT 'TVENTR' DE LA MEMOIRE
                                     < DEBANALISEE AVANT 'STNVAL'.
<
< RELECTURE DU BLOC :
<
         WORD        L1FTVR          < (A)='FONTVR' (INSTRUCTION EN AVANT...),
         STA         ARGDEM+OPDEM    < LA DEMANDE EST MISE EN MODE DE RELECTURE
                                     < DE LA VALEUR INSCRITE PRECEDEMMENT SUR
                                     < LE VOLUME AMOVIBLE,
         BSR         VAR+ASP40       < ET RELECTURE DE LA VALEUR,
         WAIT        WEIO            < ET ATTENTE DE FIN DE RELECTURE...
<
< RETOUR A "!DK S"/"!DK F" ANTERIEUR :
<
         PLR         A               < (A)=VALEUR ANTERIEURE DE 'TVENTR',
         PSR         W               < SAUVEGARDE DE L'ADRESSE DE LA DEMANDE
                                     < COURANTE...
         CALL        #SISP CMS5 W ZERO#
         STA         TVENTR-ZERO,W   < ET RESTAURATION DE L'ETAT ANTERIEUR
                                     < "!DK S" OU "!DK S"...
                                     < RAPPELONS QU'IL N'Y A PAS DE
                                     < PHASE CRITIQUE D'ACCES A 'TVENTR'
                                     < PUISQU'ON NE PEUT Y ACCEDER
                                     < QU'APRES AVOIR FAIT UN "!ASSIGN"
                                     < SUR LE DISQUE (OBLIGATOIRE
                                     < AUSSI POUR L'ACCES AUX VOLUMES
                                     < D'EXTENSION...).
         PLR         W               < (W)=ADRESSE DE LA DEMANDE COURANTE,
<
< RETOUR DU MODULE :
<
STNVAN:  EQU         $               < CAS DE 'CDAJ+4'...
         CPZ         ARGDEM+ETADEM   < ALORS COMMENT S'EST PASSE LE RELECTURE
                                     < DU BLOC PRECEDEMMENT ECRIT SUR LE
                                     < VOLUME AMOVIBLE ???
         RSR                         < ET 'JMP STNRET'...
         PAGE
<
<
<        P O S I T I O N N E M E N T   S U R   ' M E M T V '
<        E T   E N V O I   D E   L A   D E M A N D E   C O U R A N T E  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME RENDU
<                    NECESSAIRE PAR LES MULTI-ACCES
<                    DE 'HDLDKU' AUX DIVERSES 'CDA',
<                    POSITIONNE SUR LA 'CDAI', ET
<                    ENVOI LA DEMANDE COURANTE A
<                    'CHAND'...
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DE LA DEMANDE COURANTE.
<
<
SP40:    EQU         $
         PSR         A,B             < SAUVEGARDES...
         CALL        #SISP CMS5 PSRSLO#
<
< PASSAGE SUR LA 'CDA' COURANTE DE
< L'UTILISATEUR OU SUR 'CDAI' DANS
< LES AUTRES CAS :
<
         LA          VAR+SGNCDA      < (A)=NUMERO DE LA PREMIERE PAGE DE 32K,
         JAG         SP401           < OK, BON NUMERO DE PAGE...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE D'OU VIENT CE NUMERO
<                    DE PAGE DE 32K COMPLETEMENT IDIOT !!!
<
XWOR%1:  VAL         -XSLO32
         IF          MEMTV0>XWOR%1>XSLO32-MEMTV0,,XEIF%,
         IF          ATTENTION : LA 'CDAI' N'EST PAS A UNE FRONTIERE DE 32K !!!
XEIF%:   VAL         ENDIF
         LAI         MEMTV0>XWOR%1   < ET ON SE MET SUR LA 'CDAI'...
SP401:   EQU         $
         LR          A,B
         ADRI        ASLO32,B        < (B)=NUMERO DE LA PREMIERE PAGE SUIVANT
                                     <     CET ESPACE DE 64K,
         SLLD        XSLO32          < ET CONVERSION EN DES FADR-ADRESSES...
         ADRI        -Z,B            < AINSI, (A,B) ENCADRE UN ESPACE MAXIMAL
                                     < DE 64K...
         WOE                         < (SLO,SLE) ENCADRE LA 'CDAI'...
<
< ENVOI DE LA DEMANDE COURANTE :
<
         BSR         ACHAND          < ENVOI DE LA DEMANDE D'ADRESSE (W)...
<
< RESTAURATIONS ET SORTIE :
<
         CALL        #SISP CMS5 PLRSLO#
         PLR         A,B
         RSR



Copyright (c) Jean-François Colonna, 2011-2019.
Copyright (c) CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2011-2019.