<        S I S   C M S 5   4
         PAGE
         PAGE
<
<
<        D C T   H A N D L E R   V I D E  :
<
<
         CALL        #SISP CMS5 CHECK#
         CALL        #SISP CMS5 DOL1#
DCTVID:  EQU         $
PSTVID:  WORD        K;K;K;K;COM+DEPCS;DCTVID;NIL;PILVID;HANDLR;SMST;SO;SE
       #@ASCI        " VID"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR          < FILTRE.
         WORD        FILTRS          < S-FILTRE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC.
         DZS         LSEM
         WORD        NIL             < TETE.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT (INUTILISE).
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLVID
         WORD        HDLVID          < LA ROUTINE D'INTERRUPTION DE
                                     < HDLVID EST AUSSI VIDE QUE
                                     < HDLVID LUI-MEME...
         WORD        K;K             < ETAT.
         WORD        XBITS0          < BITSEM.
         WORD        XXNTRY;TRYVID   < NTRIES & FRTRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XADCTF          < TOUTES LES FONCTIONS SONT RECONNUES.
         WORD        XFONBA          < ET TOUTES DOIVENT SE DEROULER EN BAS,
                                     < AFIN D'ASSURER UN MAXIMUM DE COMPATI-
                                     < BILITE...
<
< ZONE VARIABLE ET INEXISTANTE...
<
VARVID:  EQU         $
         IF          VARVID-DCTVID-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
<
< PILE :
<
         CALL        #SISP CMS5 DOL2#
PILVID:  EQU         $-DEPILE
XWPILE:  VAL         LPILEH+0
         CALL        #SISP CMS5 GENPIL2#
         CALL        #SISP CMS5 CHECK#
         PAGE
<
<
<        H A N D L E R   V I D E  :
<
<
<        FONCTION :
<                      COMME SON NOM L'INDIQUE, CE
<                    HANDLER NE FAIR RIEN DU TOUT ;
<                    C'EST LA FONCTION "VIDE". BIEN
<                    QUE JE PENSE QU'IL NE SOIT JAMAIS
<                    UTILISE, ON POURRAIT L'UTILISER
<                    POUR PAR EXEMPLE LANCER DES DEMAN-
<                    DONT ON NE VOUDRAIT PAS QU'ELLES
<                    S'EXECUTENT (PAR EXEMPLE POUR
<                    FAIRE LES "!ASSIGN" VIDES...).
<
<
         USE         L,DCT0
         USE         W,DEM0
HDLVID:  EQU         $
         RSR                         < NOTA : ETAT0=K...
         PAGE
<
<
<        A L L O C A T I O N   D E   L ' E S P A C E   M E M O I R E  :
<
<
<        PHILOSOPHIE :
<                      LA MEMOIRE MAITRE ALLOUABLE EST
<                    DECOUPEE EN "PAGES", OU "BUFFERS"
<                    (OU ENCORE "SECTEURS") DE 'YY7'
<                    MOTS (SOIT LA TAILLE D'UN SECTEUR
<                    REEL DISQUE).
<                      LE "BUFFER" EST L'UNITE PRIMAIRE
<                    DE L'ALLOCATION MEMOIRE ; LES BLOCS
<                    ALLOUES DE TAILLES SUPERIEURES
<                    SERONT COMPOSES D'UN NOMBRE ENTIER
<                    DE BUFFERS ; ON TROUVERA TROIS TYPES
<                    D'ALLOCATION (EN PLUS DE CELLE DES
<                    "BUFFERS") :
<
<                                    'B1' : TAILLE=1K MOTS,
<                                    'B2' : TAILLE=2K MOTS,
<                                    'B4' : TAILLE=4K, 8K, 10K, 12K, 16K MOTS.
<
<
<        PRIORITES :
<                      A CHAQUE UNITE D'ALLOCATION
<                    ("BUFFERS", 'B1', 'B2', 'B4')
<                    CORRESPOND UNE TACHE, DE MEME
<                    QUE POUR LA DESALLOCATION (OU
<                    'RELEASE') ; ON RESPECTERA LES
<                    REGLES SUIVANTES :
<
<                                    PRIORITE(RELEASE) > PRIORITE(ALLOCATION),
<                                    PRIORITE(BUFFER)  > PRIORITE(B1),
<                                    PRIORITE(B1)      > PRIORITE(B2),
<                                    PRIORITE(B2)      > PRIORITE(B4).
<
<                      CES REGLES SIGNIFIENT, QU'IL
<                    EST TOUJOURS PLUS URGENT DE RENDRE
<                    QUE D'EMPRUNTER, ET QUE LES PETITES
<                    DEMANDES SONT PLUS FACILES A SATIS-
<                    FAIRE (DE PLUS LES GROSSES ONT TEN-
<                    DANCE A ETRE BLOQUANTES...).
<
<
<        TABLE D'ALLOCATION 'TOM' :
<                      L'ALLOCATION MEMOIRE SE FAIT A
<                    L'AIDE D'UNE TABLE DE BITS, CHAQUE
<                    BITS ETANT ASSOCIE A UN "BUFFER",
<                    DONC :
<
<                                    1 BIT  =UN BUFFER,
<                                    1 OCTET=UN 'B1',
<                                    1 MOT  =UN 'B2,...
<
<
         PAGE
<
<
<        D C T   A L L O C A T E U R   B U F F E R  :
<
<
         CALL        #SISP CMS5 CHECK#
         CALL        #SISP CMS5 DOL1#
DCTALB:  EQU         $
PSTALB:  WORD        K;K;K;K;COM+DEPCS;DCTALB;NIL;PILALB;HANDLR;SMST;SO;SE
       #@ASCI        " ALB"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR          < FILTRE.
         WORD        FILTRS          < S-FILTRE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC
         DZS         LSEM
         WORD        NIL             < TETE DE LA FILE D'ATTENTE DES DEMANDES DE
                                     < DEMANDES DE BUFFER (YY7 MOTS).
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID
         DZS         LSEM
         WORD        XXSIT0          < SIT (INUTILISE).
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        MALOC           < ADRESSE DE LA ROUTINE COMMUNE A
                                     < TOUS LES ALLOCATEURS.
         WORD        MALOCB          < DANS 'RIT' ON TROUVE L'ADRESSSE
                                     < D'UNE ROUTINE SPECIFIQUE A
                                     < LA TAILLE TRAITEE.
         WORD        K;K             < ETAT.
XBITS9:: VAL         '0009           < SEUIL POUR 'ALB' :
         WORD        XBITS9          < BITSEM.
         WORD        XXNTRY;TRYVID   < NTRIES & FRTRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXDCTF          < 'DCT' NON CONNECTABLE...
         WORD        XFONBA          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< DEFINITION DE LA ZONE VARIABLE :
<
VARALB:  EQU         $
         IF          VARALB-DCTALB-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        NIL
AZONA::  VAL         $-D-VARALB      < ADRESSE DE LA ZONE OU METTRE LES
                                     < ADRESSES OCTETS DES BLOBCS MEMOIRE
                                     < ALLOUES. CE SYMBOLE N'EST DEFINIT
                                     < QU'AVEC 'DCTALB', IL A LA
                                     < MEME VALEUR DANS LES AUTRES DCT
                                     < D'ALLOCATEURS.
<
< PILE DE 'ALB' :
<
XWPILE:  VAL         LPILEH+8
PILALB:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        D C T   A L L O C A T E U R   B 1 :
<
<
DCTAL1:  EQU         $
PSTAL1:  WORD        K;K;K;K;COM+DEPCS;DCTAL1;NIL;PILAL1;HANDLR;SMST;SO;SE
       #@ASCI        " AL1"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR
         WORD        FILTRS          < S-FILTRE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC
         DZS         LSEM
         WORD        NIL             < TETE DE LA FILE D'ATTENTE DES
                                     < DEMANDES DE BLOC D'1K.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID
         DZS         LSEM
         WORD        XXSIT0          < SIT (INUTILISE)
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        MALOC
         WORD        MALOC1          < ROUTINE SPECIFIQUE D'ALLOCATION
                                     < DE BLOC TYPE B1.
         WORD        K;K             < ETAT.
XBITS4:: VAL         '0004           < SEUIL POUR 'AL1' :
         WORD        XBITS4          < BITSEM.
         WORD        XXNTRY;TRYVID   < NTRIES & FRTRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXDCTF          < 'DCT' NON CONNECTABLE...
         WORD        XFONBA          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< DE FINITION DE LA ZONE VARIABLE :
<
VARAL1:  EQU         $
         IF          VARAL1-DCTAL1-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        NIL
<
< PILE DE 'AL1' :
<
XWPILE:  VAL         LPILEH+3
PILAL1:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        D C T   A L L O C A T E U R   B 2  :
<
<
DCTAL2:  EQU         $
PSTAL2:  WORD        K;K;K;K;COM+DEPCS;DCTAL2;NIL;PILAL2;HANDLR;SMST;SO;SE
       #@ASCI        " AL2"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR
         WORD        FILTRS          < S-FILTRE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC
         DZS         LSEM
         WORD        NIL             < TETE DE LA FILE D'ATTENTE DES BLOCS MEMOI
                                     < MEMOIRE DE TYPE B2.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID
         DZS         LSEM
         WORD        XXSIT0          < SIT (INUTILISE).
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        MALOC
         WORD        MALOC2          < ROUTINE SPECIFIQUE D'ALLOCATION
                                     < DE TYPE B2.
         WORD        K;K             < ETAT.
XBITS3:: VAL         '0003           < SEUIL POUR 'AL2' :
         WORD        XBITS3          < BITSEM.
         WORD        XXNTRY;TRYVID   < NTRIES & FRTRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXDCTF          < 'DCT' NON CONNECTABLE...
         WORD        XFONBA          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< DEFINITION DE LA ZONE VARIABLE :
<
VARAL2:  EQU         $
         IF          VARAL2-DCTAL2-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        NIL
<
< PILE DE 'AL2' :
<
XWPILE:  VAL         LPILEH+3
PILAL2:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        D C T   A L L O C A T E U R   B 4 :
<
<
DCTAL4:  EQU         $
PSTAL4:  WORD        K;K;K;K;COM+DEPCS;DCTAL4;NIL;PILAL4;HANDLR;SMST;SO;SE
       #@ASCI        " AL4"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR
         WORD        FILTRS          < S-FILTRE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC
         DZS         LSEM
         WORD        NIL             < TETE DE LA FILE D'ATTENTE DES
                                     < DEMANDES DE BLOCS MEMOIRE B4.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID
         DZS         LSEM
         WORD        XXSIT0          < SIT (INUTILISE).
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        MALOC
         WORD        MALOC4          < ROUTINE SPECIFIQUE D'ALLOCATIOM
                                     < DE TYPE B4.
         WORD        K;K             < ETAT.
XBITS2:: VAL         '0002           < SEUIL POUR 'AL4' :
         WORD        XBITS2          < BITSEM.
         WORD        XXNTRY;TRYVID   < NTRIES & FRTRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXDCTF          < 'DCT' NON CONNECTABLE...
         WORD        XFONBA          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< DEFINITION DE LA ZONE VARIABLE :
<
VARAL4:  EQU         $
         IF          VARAL4-DCTAL4-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        NIL
<
< PILE DE 'AL4' :
<
         CALL        #SISP CMS5 DOL2#
PILAL4:  EQU         $-DEPILE
XWPILE:  VAL         LPILEH+3
         CALL        #SISP CMS5 GENPIL2#
         CALL        #SISP CMS5 CHECK#
         PAGE
<
<
<        H A N D L E R   G E N E R A L   D ' A L L O C A T I O N
<                    M E M O I R E  :
<
<
<        ARGUMENTS :
<                    (L)=ADRESSE DE LA 'DCT' DE L'ALLOCATEUR DEMANDE,
<                    (W)=ADRESSE DE LA DEMANDE ARGUMENT, AVEC :
<                    (AMDEM)=ADRESSE-MOT DE LA ZONE OU STOCKER LES
<                            ADRESSES-OCTETS DU OU DES BLOCS ALLOUES.
<                    (CODEM)=NOMBRE DE BLOCS DE MEME TYPE A ALLOUER.
<                    (ASDEM)=UNIQUEMENT POUR 'AL4' : NOMBRE DE K-MOTS
<                            DEMANDES DIVISE PAR 2 :
<
<                                    =2 : 4K-MOTS,
<                                    =3 : 6K-MOTS,
<                                    =4 : 8K-MOTS,
<                                    =5 : 10K-MOTS,
<                                    =6 : 12K-MOTS,
<                                    =7 : 14K-MOTS,
<                                    =8 : 16K-MOTS.
<
<
<        RESULTATS :
<                    (ETAT0)=NOMBRE DE BLOCS ENCORE A ALLOUER,
<                    ((AMDEM))=LISTE DES ADRESSES-OCTETS DES
<                              BLOCS DE MEME TYPE ALLOUES.
<
<
<        A T T E N T I O N  :
<                      LES UNITES UTILISEES SONT
<                    UN PETIT PEU INCOHERENTES, ON
<                    TROUVE AINSI :
<
<                                    (AMDEM)=ADRESSE-MOT,
<                                    (CODEM)=NOMBRE DE BLOCS,
<                                    ((AMDEM))=LISTE D'ADRESSES-OCTETS.
<
<
         USE         L,DCT0
         USE         W,DEM0
MALOC:   EQU         $
         LA          ARGDEM+AMDEM    < A <-- ADRESSE MOT DE LA LISTE.
         LX          ARGDEM+CODEM    < X <-- NOMBRE D'UNITES DESIREES.
                                     < (A)=@ZONE DE RANGEMENT,
                                     < (X)=NBRE DE BLOCS DEMANDES DANS
                                     <     DANS LE TYPE.
         STA         VAR+AZONA       < CONSTITUTION DU RELAI D'INDIRECTION.
E100:    EQU         $
         PSR         X               < SAVE LE NBRE DE BLOCS ENCORE
                                     < A ALLOUER.
         RQST        &ASEXAR         <<<<PHASE CRITIQUE ENTRE TOUS LES
                                     < ALLOCATEURS/RELEASEURS DE MEMOIRE.
         BSR         ARIT            < APPEL DE LA ROUTINE SPECIFIQUE
                                     < DU TYPE DE BLOC DEMANDE.
<        ON A AU RETOUR :
<                    - SI (X)#0 : (A)=ADRESSE-OCTET DU BLOC ALLOUE,
<                    - SI (X)=K : ALLOCATION IMPOSSIBLE.
         PSR         A
         LAD         &ASEXAR
         BSR         ARLSE           <<<< PHASE CRITIQUE ENTRE TOUS LES
         PLR         A
         CPZR        X               < TEST DU RESULTAT DE L'ALLOCATION
                                     < SPECIFIQUE...
         PLR         X               < RESTAURE NBRE DE BLOCS ENCORE
                                     < A ALLOUER+1.
         JE          E101            < CAS OU L'ALLOCATION DEMANDEE
                                     < EST IMPOSSIBLE.
<
< CAS D'UNE ALLOCATION POSSIBLE :
<
         STA         &VAR+AZONA      < RANGEMENT CHEZ LE DEMANDEUR
                                     < DE L'ADRESSE OCTET DU BLOC ALLOUE.
         IC          VAR+AZONA       < POUR RANGER L'EVENTUEL BLOC
                                     < SUIVANT...
         JDX         E100            < ALLOCATION BLOC SUIVANT (EVENTUEL).
E166:    EQU         $
         STX         ETAT0           < ON RENVOIE DANS ETAT0, LE
                                     < NBRE DE BLOCS ENCORE A
                                     < ALLOUER (K SI OK...)
         RSR                         < C'EST TOUT...
<
< CAS D'UNE ALLOCATION IMPOSSIBLE :
<
<        PHILOSOPHIE : DANS LE CAS D'UNE ALLOCATION IMPOSSIBLE,
<        UN ALLOCATEUR SE BLOQUE SUR UN SEMAPHORE COMMUN A TOUS
<        LES ALLOCATEURS/RELEASEURS. DES QU'UN RELEASE SERA FAIT (QUEL-
<        QUE SOIT LE TYPE DES/DU BLOC RELEASE, ON REVEILLERA TOUS
<        LES ALLOCATEURS EN ATTENTE PAR ORDRE DE LEURS PRIORITE...CE QUI
<        EST EXCELLENT AU POINT DE VUE POLITIQUE DU SYSTEME.
<
E101:    EQU         $
HWAIT:   EQU         $               < NOTA :
                                     < LE CODE QUI SUIT, DE 'PSR' A 'PLR',
                                     < SUIVIT PAR UN 'RSR' MANQUANT CORRES-
                                     < POND A L'ANCIEN SOUS-PROGRAMME APPELE
                                     < 'HWAIT', ET SUPPRIME POUR GAGNER UN
                                     < MOT DANS LE 'COMMON'...
         PSR         A
         LA          ARGDEM+OPDEM    < ACCES A L'OPERANDE DE LA
                                     < DEMANDE.
         TBT         WAITB           < TEST DU BIT D'ATTENTE.
         PLR         A
         JC          E166            < NON, LE DEMANDEUR PREFERE NE
                                     < PAS ETRE SATISFAIT QUE
                                     < D'ATTENDRE.
         RQST        &ASMMEM         < ATTENTE D'UN RELEASE QUELCONQUE.
         JMP         E100            < UN RELEASE VIENT D'ETRE FAIT,
                                     < TRY AGAIN.
         PAGE
<
<
<        H A N D L E R S   S P E C I F I Q U E S
<        D ' A L L O C A T I O N   M E M O I R E  :
<
<
<        ARGUMENTS :
<                    NEANT...
<
<
<        RESULTATS :
<                    (X)=0 : ALLOCATION IMPOSSIBLE,
<                       #0 : L'ALLOCATION A ETE REALISEE, ET :
<                    (A)=ADRESSE-OCTET DU BLOC ALLOUE (A UNE
<                        FRONTIERE DE "BUFFER").
<
<
<        A T T E N T I O N  :
<                      L'EXCLUSION DES PHASES
<                    CRITIQUES ENTRE LES DIFFE-
<                    RENTS ALLOCATEURS ET RELEA-
<                    SEURS EST REALISEE PAR 'MALOC'
<                    ET 'MREL', QUI A LEUR TOUR
<                    APPELLENT LES MODULES SPECI-
<                    FIQUES...
<
<
<        A T T E N T I O N :
<                      LES MODULES SPECIFIQUES
<                    DETRUISENT LES REGISTRES
<                    'A', 'B' ET 'X' !!!
<
<
         PAGE
<
<
<        H A N D L E R   A L L O C A T I O N   B U F F E R  :
<
<
<        PHILOSOPHIE :
<                      CONTRAIREMENT AUX AUTRES ALLOCATEURS
<                    MEMOIRE, L'ALLOCATEUR DE BUFFERS PARCOURT
<                    LA TABLE D'OCCUPATION MEMOIRE (TOM) PAR
<                    ADRESSES CROISSANTES, ET CHERCHE LE BLOC
<                    DE 2K-MOTS LE PLUS OCCUPE POUR Y PRENDRE
<                    UN BUFFER. SI 2 OU PLUS, ONT LE MEME NBRE
<                    MINI DE BUFFERS LIBRES ON PREND CELUI
<                    DONT L'ADRESSE EST LA PLUS BASSE. AINSI
<                    ON RECUPERE LA MEMOIRE LIBRE DERRIERE LE
<                    SYSTEME, ET ON NE CONTRARIE PAS LE FONC-
<                    TIONNEMENT DES 3 AUTRES ALLOCATEURS !!!!
<
<
<        RESULTAT :
<                    - SI (X)#0 : (A)=ADRESSE OCTET DU BUFFER ALLOUE.
<                    - DE PLUS, SI (X)#0, LA TABLE 'TOMP' EST MISE A JOUR,
<                      INVALIDANT LE BLOC DE 'PLK' K-MOTS AUQUEL APPARTIENT
<                      LE BUFFER ALLOUE.
<
<
MALOCB:  EQU         $
         LXI         IJIJDX          < DEPART SUR LE MOT0 DE TOM.
         LBI         IJIJDX-I        < INITIALISATION FARFELUE DU
                                     < NUMERO DU MOT DE TOM CONTENANT
                                     < LE BUFFER CHERCHE.
         LAI         NBITMO+Z        < INITIALISATION FARFELUE DU COMPTE
                                     < MINI DE BUFFERS LIBRES DANS
                                     < LE MOT TROUVE DANS TOM.
Z200:    EQU         $
         PSR         A,B,X
         LYI         K               < INITIALISATION A 0 DU COMPTEUR
                                     < DE BUFFER LIBRE DANS LE MOT
                                     < COURANT (X) DE TOM.
         LA          BUINT
         TBT         NBITAB-B,X      < LE BLOC DE 2K DE RANG (X) EST-
                                     < IL AUTORISE POUR L'IMPLANTATION
                                     < DE BUFFERS ?????
         JNC         Z202            < NON, ON L'IGNORE (Y=K).
         LA          &ATOM           < ACCES A UN MOT DE TOM.
Z201:    EQU         $
         JAE         Z202            < ON A EXPLORE TOUS LES BUFFERS
                                     < LIBRES DU MOT COURANT DE TOM(X).
         DBT                         < RECHERCHE D'UN BUFFER LIBRE.
         RBT         L,X             < OCCUPATION FACTICE POUR COMPTAGE.
         ADRI        I,Y             < COMPTE DES BUFFERS LIBRES DNAS
                                     < LE MOT COURANT TOM(X).
         JMP         Z201            < AU SUIVANT...
Z202:    EQU         $
         PLR         A,B,X           < RESTAURE LE MIN COURANT,
                                     < LE NUMERO DE TOM CHERCHE ET
                                     < LE NUMERO DU MOT COURANT DE TOM.
         CPZR        Y
         JE          Z203            < LE MOT COURANT DE TOM N'AVAIT
                                     < AUCUN BUFFERS DE LIBRES,
                                     < ON L'IGNORE DONC.
         CPR         A,Y
         JGE         Z203            < LE NBRE DE BUFFERS LIBRES
                                     < DANS LE MOT COURANT EST SUPERIEUR
                                     < OU EGAL AU MIN COURANT,
                                     < TOM(X) EST DONC IGORE.
<
< CAS OU LE NBRE DE BUFFERS LIBRES DANS TOM(X)
< EST STRICTEMENT INFERIEUR AU MIN COURANT,
< MAIS POSITIF : IL DEVIENT LE MIN COURANT :
<
         LR          Y,A             < NOUVEAU MIN.
         LR          X,B             < NUMERO DU MIN COURANT.
Z203:    EQU         $
         ADRI        I,X             < NUMERO DU MOT SUIVANT DE TOM.
         XR          X,A
         CPI         MEMORY/YY7/NBITMO*UMEM
         XR          X,A
         JLE         Z200            < ACCES AU MOT SUIVANT DE TOM.
<
< FIN DE RECHERCHE DU MIN :
<
         LR          B,X             < (X)=NUMERO DU MIN (>0) OU 0 S'IL
                                     <     N'EXISTE PAS.
         CPZR        X               < TEST D'EXISTENCE DU MIN.
         JE          Z204            < IL N'Y A PAS DE BUFFER LIBRE,
                                     < RETOUR AVEC (X)=K.
<
< CAS OU ON A TROUVE UN BUFFER LIBRE : OCCUPATION :
<
         LAD         ATOM            < (A)=ADRESSE DU RELAI VERS 'TOM' PAR
                                     <     RAPPORT A 1.
         BSR         ASOBT           < OCCUPATION PAR SOBT ; A NOTER
                                     < A NOTER QUE L'INDEX (X) INITIAL
                                     < DE RECHERCHE EST LE NUMERO DU
                                     < MIN, ON S'ARRETERA DONC EN FAIT
                                     < DES LE 1ER TOUR...
         SLLS        YY8=K           < CONVERSION DU NUMERO DU BUFFER
                                     < ALLOUE EN UNE ADRESSE OCTET.
         PSR         A,X
         SLRS        PLK*NOCMO=K
         LR          A,X             < (X)=NUMERO PAR RAPPORT A 0 DU BLOC DE
                                     <     'PLK' K-MOTS AUQUEL APPARTIENT LE
                                     <     BUFFER TROUVE.
         LAI         XXTOMP
         STA         &ATOMP          < ET INVALIDATION DE CELUI-CI (PLUS DE
                                     < PROPRIETAIRE 'UTILISATEUR'...).
         PLR         A,X
Z204:    EQU         $
         RSR                         < RETOUR (X)=K OU #0 SI BUFFER ALLOUE.
         PAGE
<
<
<        H A N D L E R   A L L O C A T I O N   1 K  :
<
<
<        RESULTAT :
<                    - SI (X)#0 : (A)=ADRESSE OCTET DU 'B1' ALLOUE.
<
<
MALOC1:  EQU         $
         LXI         MEMORY/YY7/NBITOC*UMEM < PARCOURS OCTET DE 'TOM'.
         LB          K2INT           < ACCES A LA LISTE DES BLOCS
                                     < DE 2K INTERDITS A L'ALLOCATION.
E114:    EQU         $
         CPZR        X               < A-T'ON PARCOURU TOUTE TOM.
         JE          E115            < OUI, L'ALLOCATION EST DONC
                                     < IMPOSSIBLE.
         ADRI        -I,X            < ACCES OCTET SUIVANT
<
<        NOTA :
<                      UN OCTET DE 'TOM' REPRE-
<                    SENTE L'OCCUPATION D'UN
<                    'B1'.
<
         LR          X,A             < (X)=INDEX DU BLOC 1K=A.
         SLRS        UMEM2K=K
         XR          A,X             < (A)=SAVE (X)=INDEX 1K, (X)=INDEX 2K.
         TBT         NBITMO+L,X      < LE BLOC DE 2K CONTENANT LE BLOC
                                     < COURANT DE 1K EST-IL AUTORISE ???
         LR          A,X             < RESTAURE (X)=INDEX 1K.
         JNC         E114            < LE BLOC DE 1K EST INTERDIT !!!
         LBY         &ATOMB          < PARCOURS PAR OCTET.
         CPI         MOCD            < TOUS LES BUFFERS DE CE B1 SONT
                                     < ILS LIBRES...
         JNE         E114            < ET NON PASSONS AU B1 SUIVANT.
<
< CAS OU ON A TROUVE UN B1 LIBRE :
<
         LA          NSMGB           < NSMGB N'A RIEN A VOIR AVEC L'ALLOCATION M
                                     < MEMOIRE, MAIS SA VALEUR EST-ELLE
                                     < QU'ELLE REMET A 0 LES BITS8-15,
                                     < TOUT EN LAISSANT A (FUTUR X) #0...
         STBY        &ATOMB          < MAJ DE TOM PAR OCCUPATION DU B1.
         XR          X,A             < (A)=NUMERO DU B1,
                                     < (X)#0 (ASTUCE...)
         SLLS        YY8*NBITOC=K    < CONVERSION DU NUMERO DE B1
                                     < EN UNE ADRESSE D'OCTET.
E115:    EQU         $
         RSR
         PAGE
<
<
<        H A N D L E R   A L L O C A T I O N   2 K  :
<
<
<        RESULTAT :
<                    - SI (X)#0 : (A)=ADRESSE OCTET DU B2 ALLOUE.
<
<
MALOC2:  EQU         $
         LXI         MEMORY/YY7/NBITMO*UMEM < PARCOURS MOT DE 'TOM'.
         LB          K2INT           < ACCES A LA LISTE DES BLOCS
                                     < DE 2K INTERDITS A L'ALLOCATION.
E116:    EQU         $
         TBT         NBITMO-B,X      < LE BLOC COURANT DE 2K EST-IL
                                     < AUTORISE ???
         JNC         Z1990           < NON...
         LA          &ATOM           < ACCES A UN MOT DE TOM. A NOTER
                                     < QU'UN MOT DE TOM REPRESENTE L'ETAT
                                     < D'OCCUPATION EN BUFFER D'UN B2.
         CPI         MMOT            < TOUS LES BUFFERS DE CE B2 SONT-
                                     < ILS LIBRES...
         JE          E117            < OUI, ON A DONC TROUVE UN B2 LIBRE.
Z1990:   EQU         $
         JDX         E116            < NON PASSGE AU B2 SUIVANR.
<
< CAS OU L'ON A TROUVE AUCUN B2 LIBRE : (X)=K.
<
E118:    EQU         $
         RSR
<
< CAS OU ON A TROUVE UN B2 LIBRE :
<
E117:    EQU         $
         STZ         &ATOM           < OCCUPATION DU B2.
         LR          X,A
         ADRI        -IJIJDX,A       < (A)=NUMERO DU B2 ALLOUE.
         SLLS        YY8*NBITMO=K    < CONVERSION EN ADRESSE D'OCTETS.
         JMP         E118            < PAR ICI LA SORTIE.
         IF          UMEM2K-2,,XEIF%,
         IF          ATTENTION : L'ALLOCATION 2K, 4K,... EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         PAGE
<
<
<        H A N D L E R   A L L O C A T I O N
<        4 K , 6 K , 8 K , 1 0 K , 1 2 K  :
<                    1 4 K , 1 6 K  :
<
<
<        FONCTION :
<                      CE HANDLER EST CHARGE D'ALLOUER
<                    LES TAILLES MEMOIRES SUPERIEURES
<                    OU EGALES A 4K SANS PRIORITES
<                    RELATIVES.
<
<
<        ARGUMENT :
<                    (ASDEM)=2 : 4K DEMANDES,
<                           =3 : 6K,
<                           =4 : 8K.
<                           =5 : 10K,
<                           =6 : 12K.
<                           =7 : 14K,
<                           =8 : 16K.
<
<
<        RESULTAT :
<                    - SI (X)#0 : (A)=ADRESSE OCTET DU BLOC ALLOUE.
<                                 OPMEM4(OPDEM)=MASQUE DESTINE AU RELEASE,
<                                 ET INDIQUANT LA POSITION DES BLOCS
<                                 DE 2K COMPOSANT L'ESPACE ALLOUE
<                                 DANS LA MEMOIRE.
<                    - SI (X)=K : ALLOCATION IMPOSSIBLE.
<
<
MALOC4:  EQU         $
E120X:   EQU         $
         LA          ARGDEM+CODEM    < VALIDATION DU CODEM.
         CPI         W               < DANS LE CAS DE MALOC4,
                                     < L'ALLOCATION NE PEUT PORTER
                                     < QUE SUR UN BLOC !!!!
                                     < (A CAUSE DU POSITIONNEMENT
                                     < DE ASDEM)
         JE          SYSR21          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      PEUT-ETRE RESSAYE AU CAS OU
<                    'OPDEM' AURAIT ETE MODIFIE A
<                    LA MAIN ; FAIRE ALORS 'JMP E120X'...
<
SYSR21:  EQU         $
<
< GENERATION D'UNE TABLE D'OCCUPATION
< DES BLOCS DE 2K-MOTS (REGISTRE B) :
<
         LBI         K               < CLEAR TABLE D'OCCUPATION
                                     < DES BLOCS DE 2K-MOTS.
         LXI         MEMORY/YY7/NBITMO*UMEM < POUR UN PARCOURS MOT DE 'TOM'.
E120:    EQU         $
         LA          K2INT           < ACCES A LA LISTE DES BLOCS
                                     < DE 2K INTERDITS A L'ALLOCATION.
         TBT         NBITAB-B,X      < LE BLOC COURANT DE 2K EST-IL
                                     < AUTORISE ???
         JNC         E121            < NON...
         LA          &ATOM           < ACCES A L'OCCUPATION D'UN BLOC
                                     < DE 2K-MOTS.
         CPI         MMOT            < EST-IL ENTIEREMENT LIBRE ????
         JNE         E121            < NON, IGNORE.
         SBT         NBITMO-B,X      < OUI, ON LE MEMORISE DANS B.
E121:    EQU         $
         JDX         E120            < ENTREE PRECEDENTE DE TOM.
<
< RECHERCHE DE N BLOCS CONTIGUS DE 2K-MOTS
< DANS LA MEMOIRE A L'AIDE DE LA TABLE
< D'OCCUPATION (REGISTRE B) :
< (N=(ASDEM))
<
         LX          ARGDEM+ASDEM    < (X)=2, 3, 4,...
                                     < ((X)=NBRE DE BLOCS DE 2K CONTIGUS)
         LAI         BIT             < (A)=1.
         SLLS        L,X             < (A)=4, 8, 16,..., SOIT :
                                     < (A)=2 PUISSANCE (ASDEM).
         ADRI        -N,A            < (A)=3, 7, 15,..., SOIT :
                                     < (A)=MASQUE CONTENANT AUTANT
                                     <     DE BITS A 1, QUE L'ON DEMANDE
                                     <     DE BLOCS DE 2K-MOTS CONTIGUS.
         ADRI        -MEMORY/YY7/NBITMO*UMEM,X
                                     < (X)=-14, -13, -12,... SOIT :
                                     < -(X)=NBRE DE TESTS MAXIMUM
                                     <      A EFFECTUER POUR L'ALLOCATION.
E122:    EQU         $
         LR          A,Y             < (Y)=MASQUE COURANT.
         ANDR        B,Y             < REGARDONS SI L'ON PEUT TROUVER
                                     < A L'EMPLACEMENT COURANT LES
                                     < N BLOCS CONTIGUS DE 2K-MOTS.
         CPR         A,Y             < A-T'ON TROUVE LES N BLOCS
                                     < CONTIGUS DE 2K-MOTS ???
         JE          E123            < ET OUI... C'EST FINI...
         SLLS        S               < DANS LE CAS OU L'ON N'A PAS
                                     < TROUVE, ON DEPLACE LE MASQUE
                                     < D'UN BIT A GAUCE, SOIT DE 2K
                                     < DANS LA TABLE D'OCCUPATION DES
                                     < BLOCS DE 2K-MOTS (REGISTRE B).
         JIX         E122            < ET ON RECOMMENCE...
<
< SORTIE DU HANDLER :
<
E124:    EQU         $
<
<        ON A ICI :
<                    (X)=K : LA RECHERCHE A ECHOUEE (CF. 'JIX'),
<                    (X)#0 : LA RECHERCHE A ABOUTI.
<
         RSR
<
< CAS OU ON A TROUVE SON BONHEUR :
<
E123:    EQU         $
         STA         ARGDEM+OPDEM    < MEMORISONS L'ETAT DU MASQUE
                                     < COURANT EN VUE DE RELEASE.
<
< BOUCLE D'OCCUPATION DES BLOCS DE 2K :
<
Z741:    EQU         $
         JAE         Z740            < FIN DE L'OCCUPATION.
         DBT                         < RECHERCHE D'UN BLOC DE 2K-MOTS
                                     < A OCCUPER.
         RBT         L,X             < MEMORISONS QU'ON L'A OCCUPE.
         STZ         &ATOMB          < ET MAJ DE TOM (INDEXE A
                                     < PARTIR DE 0).
         JMP         Z741            < BLOC DE 2K SUIVANT.
<
< CALCUL DE L'ADRESSE-OCTET DU BLOC ALLOUE :
<
Z740:    EQU         $
         LR          Y,A             < RESTAURE (A)=MASQUE COURANT.
         DBT                         < RECHERCHE DU NUMERO DU 1ER
                                     < BLOC DE 2K COMPOSANT LE
                                     < BLOC ALLOUE (NUMERO A PARTIR
                                     < DE 0).
         XR          X,A             < (A)=NUMERO DU 1ER BLOC DE 2K,
                                     < ET (X)#0 (!!!!).
         SLLS        YY8*NBITMO=K    < CONVERSION EN UNE ADRESSE-OCTET.
         JMP         E124            < VERS LA SORTIE...
         PAGE
<
<
<        D C T   R E L E A S E U R   B U F F E R  :
<
<
         CALL        #SISP CMS5 CHECK#
         CALL        #SISP CMS5 DOL1#
DCTRLB:  EQU         $
PSTRLB:  WORD        K;K;K;K;COM+DEPCS;DCTRLB;NIL;PILRLB;HANDLR;SMST;SO;SE
       #@ASCI        " RLB"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR
         WORD        FILTRS          < S-FILTRE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC
         DZS         LSEM
         WORD        NIL             < TETE DE LA FILE D'ATTENTE DES
                                     < DEMANDES DE RELEASE DE BUFFER.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT (INUTILISE).
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        MREL            < ADRESSE DE LA ROUTINE COMMUNE
                                     < A TOUS LES RELEASEURS MEMOIRE.
         WORD        MRELB           < ROUTINE SPECIFIQUE AU RELEASE
                                     < D'UN TYPE DONNE (ICI BUFFER).
         WORD        K;K             < ETAT.
         WORD        XBITS0          < BITSEM.
         WORD        XXNTRY;TRYVID   < NTRIES & FRTRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXDCTF          < 'DCT' NON CONNECTABLE...
         WORD        XFONBA          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< DEFINITION DE LA ZONE VARIABLE :
<
VARRLB:  EQU         $
         IF          VARRLB-DCTRLB-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        NILX
AZONR::  VAL         $-D-VARRLB      < RELAI D'INDIRECTION VERS LA
                                     < ZONE OU LE DEMANDEUR A MIS
                                     < LA LISTE DE BLOCS A RELEASER. CE
                                     < SYMBOLE N'EST DEFINI QUE DANS
                                     < LA DCTRLB, IL AURA LA MEME
                                     < VALEUR DANS LES AUTRES DCT RELEASEURS.
<
< PILE DE 'RLB' :
<
XWPILE:  VAL         LPILEH+3
PILRLB:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        D C T   R E L E A S E U R   B 1  :
<
<
DCTRL1:  EQU         $
PSTRL1:  WORD        K;K;K;K;COM+DEPCS;DCTRL1;NIL;PILRL1;HANDLR;SMST;SO;SE
       #@ASCI        " RL1"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR
         WORD        FILTRS          < S-FILTRE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC
         DZS         LSEM
         WORD        NIL             < TETE.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT (INUTILISE).
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        MREL
         WORD        MREL1           < ADRESSE DE LA ROUTINE SPECIFIQUE
                                     < DES RELEASES DE B1.
         WORD        K;K             < ETAT.
         WORD        XBITS0          < BITSEM.
         WORD        XXNTRY;TRYVID   < NTRIES & FRTRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXDCTF          < 'DCT' NON CONNECTABLE...
         WORD        XFONBA          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< DEFINITION DE LA ZONE VARIABLE :
<
VARRL1:  EQU         $
         IF          VARRL1-DCTRL1-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        NILX
<
< PILE DE 'RL1' :
<
XWPILE:  VAL         LPILEH+3
PILRL1:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        D C T   R E L E A S E U R   B 2  :
<
<
DCTRL2:  EQU         $
PSTRL2:  WORD        K;K;K;K;COM+DEPCS;DCTRL2;NIL;PILRL2;HANDLR;SMST;SO;SE
       #@ASCI        " RL2"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR
         WORD        FILTRS          < S-FILTRE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC
         DZS         LSEM
         WORD        NIL             < TETE.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT (INUTILISE).
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        MREL
         WORD        MREL2           < ROUTINE SPECIFIQUE DES RELEASES
                                     < DE TYPE B2.
         WORD        K;K             < ETAT.
         WORD        XBITS0          < BITSEM.
         WORD        XXNTRY;TRYVID   < NTRIES & FRTRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXDCTF          < 'DCT' NON CONNECTABLE...
         WORD        XFONBA          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< DEFINITION DE LA ZONE VARIABLE :
<
VARRL2:  EQU         $
         IF          VARRL2-DCTRL2-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        NILX
<
< PILE DE 'RL2' :
<
XWPILE:  VAL         LPILEH+3
PILRL2:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        D C T   R E L E A S E U R   B 4  :
<
<
DCTRL4:  EQU         $
PSTRL4:  WORD        K;K;K;K;COM+DEPCS;DCTRL4;NIL;PILRL4;HANDLR;SMST;SO;SE
       #@ASCI        " RL4"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR
         WORD        FILTRS          < S-FILTRE.
         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        MREL
         WORD        MREL4           < ROUTINE SPECIFIQUE DES RELEASES
                                     < DE TYPE B4.
         WORD        K;K             < ETAT.
         WORD        XBITS0          < BITSEM.
         WORD        XXNTRY;TRYVID   < NTRIES & FRTRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXDCTF          < 'DCT' NON CONNECTABLE...
         WORD        XFONBA          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< DEFINITION DE LA ZONE VARIABLE :
<
VARRL4:  EQU         $
         IF          VARRL4-DCTRL4-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        NILX
<
< PILE DE 'RL4' :
<
         CALL        #SISP CMS5 DOL2#
PILRL4:  EQU         $-DEPILE
XWPILE:  VAL         LPILEH+4
         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
<        R E L E A S E   M E M O I R E  :
<
<
<        ARGUMENTS :
<                    (L)=ADRESSE DE LA 'DCT' DE DESALLOCATION CORRESPONDANTE,
<                    (W)=ADRESSE DE LA DEMANDE COURANTE, AVEC :
<                    (AMDEM)=ADRESSE DE LA LISTE DES ADRESSES-MOTS
<                            DES BLOCS A DESALLOUER,
<                    (CODEM)=LONGUEUR DE LA LISTE PRECEDENTE (NOMBRE
<                            DE BLOCS DE MEME TYPE),
<                    (OPMEM4(OPDEM))=UNIQUEMENT POUR 'RL4', DONNE UN
<                                    MASQUE DEFINISSANT LES BLOCS DE
<                                    2K A RENDRE.
<
<
<        A T T E N T I O N  :
<                      (AMDEM) DONNE UNE ADRESSE-
<                    MOT, (CODEM) UN NOMBRE DE BLOCS,
<                    ET ((AMDEM)) UNE SUITE D'ADRES-
<                    SES-OCTETS !!!
<
<
         USE         L,DCT0
         USE         W,DEM0
MREL:    EQU         $
         LA          ARGDEM+AMDEM    < A <-- ADRESSE MOT DE LA LISTE.
         LX          ARGDEM+CODEM    < X <-- NOMBRE D'UNITES A RENDRE.
                                     < (A)=ADRESSE-MOT DE LA LISTE,
                                     < (X)=NBRE DE BLOCS A RELEASER.
         STA         VAR+AZONR       < GENERATION DU RELAI D'INDIRECTION.
E104:    EQU         $
         PSR         X               < SAVE NBRE DE BLOCS ENCORE A RE-
                                     < LEASER.
         RQST        &ASEXAR         <<<<PHASE CRITIQUE AVEC LES ALLO-
                                     < CATEURS/RELEASEURS DE MEMOIRE.
         LA          &VAR+AZONR      < ACCES A L'ADRESSE OCTE DE LA 1ERE
                                     < BLOC A RELEASER.
         BSR         ARIT            < APPEL DE LA ROUTINE SPECIFIQUE
                                     < DU RELEASE DDMANDE.
         LAD         &ASEXAR
         BSR         ARLSE
<
< TEST DE DEBLOCAGE D'ALLOCATEUR EN ATTENTE DE MEMOIRE :
<
E105:    EQU         $
<
< TEST DU 'BETA' DE 'SEMMEM' :
<
         LA          &ASMMEM         < TEST DU 'BETA' DE 'SEMMEM' :
         JAE         E106            < 'BETA'=K.
         TBT         XMBETA          < TEST BIT DE SIGNE DE 'BETA'.
         JC          E106            < 'BETA'<0.
                                     < ON CONSIDERE QUE S'IL EST NEGATIF
                                     < OU NUL, IL Y A AU MOINS UN
                                     < ALLOCATEUR EN ATTENTE.
<
< CAS OU IL N'Y A PAS OU PLUS D'ALLOCATEUR EN ATTENTE :
<
         PLR         X               < RESTAURE NBRE DE BLOCS ENCORE A
                                     < RELESAER+1.
         IC          VAR+AZONR       < POUR RECUPERER L'EVENTUEL
                                     < BLOC SUIVANT.
         JDX         E104            < RELEASE SUIVANT (EVENTUEL).
         RSR                         < C'EST TOUT...
<
<        PHILOSOPHIE DU DEBLOCAGE DES ALLOCATEURS :
<                      ILS SONT DEBLOQUES PAR ORDRE DE PRIORITE
<                    DECROISSANTE, DONC LA PLUS PETITE DEMANDE
<                    SERA LA 1ERE SERVIE (CF. ALLOCATION MEMOIRE ET
<                    PHILOSOPHIE PAR LE MEME AUTEUR...)
<
<        NOTA :
<          ON FAIT UN RLSE MEME SI 'BETA'=K, CAR ON PEUT SE TROUVER
<        A LA SUITE D'UNE MALENCONTREUSE INTERRUPTION, ENTRE
<        L'INSTANT OU UNE ALLOCATION A ETE REFUSEE A 'MALOC', ET
<        L'INSTANT OU IL VA FAIRE SON RQST. (VOIR LE JEU DES
<        PRIORITES MALOC/MREL).
<
E106:    EQU         $
         LAD         &ASMMEM
         BSR         ARLSE           < DEBLOCAGE DE L'ALLOCATEUR DE PLUS
                                     < HAUTE PRIORITE EN ATTENTE.
<
<        REMARQUE : CE DEBLOCAGE PEUT TRES BIEN NE MENER A RIEN : IL SE
<        PEUT TRES BIEN QUE L'ALLOCATEUR NE TROUVE PAS SON BONHEUR AVEC
<        CE QUI VIENT D'ETRE RELEASE.
<
         JMP         E105            < ALLOCATEUR SUIVANT (EVENTUEL).
         PAGE
<
<
<        M O D U L E S   S P E C I F I Q U E S
<        D E   R E L E A S E - M E M O I R E  :
<
<
<        ARGUMENTS :
<                    - (A)=ADRESSE OCTET DU BLOC MEMOIRE A RENDRE.
<
<
<        RESULTATS :
<                    NEANT...
<
<
<        A T T E N T I O N  :
<                      LES EXCLUSIONS DE PHASES CRI-
<                    TIQUES SONT A LA CHARGE DE 'MALOC'
<                    ET 'MREL' ET NON PAS DES MODULES
<                    SPECIFIQUES !!!
<
<
<        A T T E N T I O N  :
<                      LES MODULES SPECIFIQUES
<                    DETRUISENT LES REGISTRES
<                    'A', 'B' ET 'X' !!!
<
<
         PAGE
<
<
<        H A N D L E R   R E L E A S E   B U F F E R  :
<
<
<        ARGUMENT :
<                    - (A)=ADRESSE OCTET DU BUFFER A RELEASER.
<
<
<        N O T A  :
<                      ON NE VERIFIE PAS LORS DU 'RELB'
<                    LA TABLE 'BUINT' ; CECI PERMET DONC UNE
<                    MODIFICATION DYNAMIQUE DE CELLE-CI.
<
<
MRELB:   EQU         $
         LBI         K               < NETTOYAGE DE B.
         SCLD        NBITMO=K        < (B)=NUMERO DU B2 PAR RAPPORT A 0
                                     < AUQUEL APPARTIENT LE BUFFER.
         ADRI        IJIJDX,B        < CONVERSION EN UN NUMERO DE B2.
XWOR%1:  VAL         YY8=K           < DECALAGE D'ACCES A UN NUMERO BUFFER.
         SLRS        NBITMO=K+XWOR%1 < (A)=NUMERO DE BUFFER DANS B2.
         LR          B,X             < (X)=NUMERO DU B2.
         LB          &ATOM           < ACCES A LA TABLE D'OCCUPATION
                                     < DU B2.
         XR          A,X             < (X)=NUMERO DU BUFFER DANS B2.
         TBT         NBITMO+L,X      < TEST DU BUFFER RENDU...
         JNC         SYSR22          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
SYSR22:  EQU         $
         SBT         NBITMO+L,X      < RELEASE DU BUFFER.
         XR          A,X             < (X)=NUMERO DU B2.
         STB         &ATOM           < MAJ DE TOM.
         RSR
         PAGE
<
<
<        H A N D L E R   R E L E A S E   1 K  :
<
<
<        ARGUMENT :
<                    - (A)=ADRESSE OCTET DU B1 A RELEASER,
<
<
MREL1:   EQU         $
XWOR%1:  VAL         YY8=K           < POUR LES ADRESSES OCTETS...
         SLRS        NBITOC=K+XWOR%1 < CONVERSION EN UN NUMERO DE
                                     < B1 PAR RAPPORT A 0.
         LR          A,X             < (X)=NUMERO DE B1/0.
         LBY         &ATOMB          < TEST DU B1 RENDU...
         JAE         SYSR23          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      JE NE SAIS PAS, MAIS EN TOUT
<                    CAS IL FAUT ETRE PRUDENT AFIN
<                    DE NE PAS RENDRE DES BUFFERS
<                    OCCUPES EN CONTINUANT EN SEQUENCE...
<
SYSR23:  EQU         $
         LAI         MOCD
         STBY        &ATOMB          < RELEASE DU B1.
         RSR
         PAGE
<
<
<        H A N D L E R   R E L E A S E   2 K  :
<
<
<        ARGUMENT :
<                    - (A)=ADRESSE OCTET DU B2 A RELEASER.
<
<
MREL2:   EQU         $
XWOR%1:  VAL         YY8=K           < POUR LES ADRESSES OCTETS...
         SLRS        NBITMO=K+XWOR%1 < CONVERSION EN UN NUMERO DE B2 PAR
                                     < RAPPORT A 0.
         ADRI        IJIJDX,A        < CONVERSION EN UN NUMERO DE B2.
         LR          A,X             < (X)=NUMERO DU B2 A RELEASER.
         LA          &ATOM           < TEST DU B2 RENDU...
         JAE         SYSR24          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      JE NE SAIS PAS, MAIS EN TOUT
<                    CAS, IL FAUT ETRE TRES PRUDENT,
<                    AFIN DE PAS RENDRE DE LA MEMOIRE
<                    OCCUPEE, CE QUI SE PASSERA SI L'ON
<                    CONTINUE EN SEQUENCE...
<
SYSR24:  EQU         $
         LBI         MMOT            < TOUS BUFFERS DE B2 RELEASES.
         STB         &ATOM           < MAJ DE TOM.
         RSR
         PAGE
<
<
<        H A N D L E R   R E L E A S E
<        4 K , 6 K , 8 K , 1 0 K , 1 2 K  :
<                    1 4 K , 1 6 K  :
<
<
<        ARGUMENT :
<                    (OPDEM)=MASQUE INDIQUANT LES BLOCS DE 2K-MOTS
<                            COMPOSANT L'ESPACE MEMOIRE A RELEASER.
<
<
MREL4:   EQU         $
         LA          ARGDEM+CODEM    < VALIDATION DU CODEM.
         CPI         W               < DANS LE CAS DE MREL4, ET PAR
                                     < SYMETRIE AVEC MALOC4, ON NE
                                     < PEUT QUE RELEASER QU'1N BLOC !!!
         JNE         Z744            < E R R E U R   S Y S T E M E ...
         LBI         MMOT            < INDICATEUR 'BLOC DE 2K LIBRE'.
         LA          ARGDEM+OPDEM    < RECUPERATION DU MASQUE GENERE
                                     < PAR MALOC4, ET INDIQUANT LES
                                     < BLOCS DE 2K COMPOSANT L'ESPACE
                                     < A RELEASER.
<
< BOUCLE DE RELEASE :
<
Z742:    EQU         $
         JANE        Z743            < IL RESTE AU MOINS UN BLOC DE 2K
                                     < A RELEASER.
         RSR                         < SINON, RETOUR.
Z743:    EQU         $
         DBT                         < RECHERCHE D'1N BLOC DE 2K.
         RBT         L,X             < MEMORISATION DE LA DESOCCUPATION
                                     < DU BLOC DE 2K (X).
         CPZ         &ATOMB          < VALIDATION DU RELEASE.
         JE          SYSR25          < OK.
Z744:    EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      JE NE SAIS PAS, MAIS LA PLUS
<                    GRANDE PRUDENCE S'IMPOSE, CAR SI
<                    ON CONTINUE EN SEQUENCE, ON RISQUE
<                    DE RENDRE DE LA MEMOIRE OCCUPEE...
<
SYSR25:  EQU         $
         STB         &ATOMB          < LIBERATION DU BLOC DE 2K.
         JMP         Z742            < VERS LA LIBERATION DE L'EVENTUEL
                                     < BLOC DE 2K SUIVANT.
         PAGE
<
<
<        D C T   M E M O I R E  :
<
<
         CALL        #SISP CMS5 CHECK#
         CALL        #SISP CMS5 DOL1#
DCTMEM:  EQU         $
PSTMEM:  WORD        K;K;K;K;COM+DEPCS;DCTMEM;NIL;PILMEM;HANDLR;SMST;SO;SE
       #@ASCI        " MEM"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR
         WORD        FILTRS          < S-FILTRE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC
         DZS         LSEM
         WORD        NIL             < TETE DE LA FILE D'ATTENTE DES
                                     < DEMANDES SUR LEPERIPHERIQUE
                                     < MEMOIRE...
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT (INUTILISE).
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLMEM          < ADRESSE DU HANDLER MEMOIRE.
         WORD        NIL             < PAS DE RIT.
         WORD        K;K             < ETAT.
         WORD        XBITS0          < BITSEM.
         WORD        XXNTRY;TRYVID   < NTRIES & FRTRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXDCTF          < 'DCT' NON CONNECTABLE...
         WORD        XFONBA          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE DE LA DCT :
<
VARMEM:  EQU         $
         IF          VARMEM-DCTMEM-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        NILX
EMEMEM:: VAL         $-D-VARMEM      < RELAI INDIRECT VERS LA
                                     < ZONE EMETTRICE.
         WORD        NILX
RECMEM:: VAL         $-D-VARMEM      < RELAI INDIRECT VERS LA
                                     < ZONE RECEPTRICE.
<
< PILE DE 'MEM' :
<
         CALL        #SISP CMS5 DOL2#
PILMEM:  EQU         $-DEPILE
XWPILE:  VAL         LPILEH+2
         CALL        #SISP CMS5 GENPIL2#
         CALL        #SISP CMS5 CHECK#
         PAGE
<
<
<        H A N D L E R   M E M O I R E  :
<
<
<        FONCTION :
<                      CETTE TACHE SIMULE UN PERI-
<                    PHERIQUE QUI EST EN FAIT LA
<                    MEMOIRE MAITRE DU SYSTEME ;
<                    IL PERMET DONC DE FAIRE DES
<                    MOUVEMENTS DE MEMOIRE A ME-
<                    MOIRE, L'UNE DES ZONES MEMOI-
<                    RE SIMULANT UN PERIPHERIQUE...
<
<
<        ARGUMENTS :
<                    - (L)=ADRESSE DCT,
<                    - (W)=ADRESSE DEMANDE.
<                    - (AMDEM)=ADRESSE OCTET DU BUFFER,
<                    - (ASDEM)=ADRESSE OCTET DU PERIPHERIQUE,
<                    - (CODEM)=NBRE D'OCTETS A TRANSFERE.
<
<
<        NOTA IMPORTANT :
<                      LE PASSAGE DU SYSTEME AU-DELA DE 32K
<                    IMPLIQUE QUELQUES MODIFICATIONS, AINSI :
<
<                    SI TYPAD(NSPTYP)=1, ALORS UNE DES 2 ADRESSES
<                    AMDEM OU ASDEM EST UNE ADRESSE DE MOT, ET PEUT
<                    DONC ETRE SUPERIEURE A 32K, MAIS NE PEUT PAS
<                    POINTER SUR UN OCTET DE RANG IMPAIR... LA
<                    DISCRIMINATION AMDEM/ASDEM SE FAIT PAR LE
<                    WHOMEM(OPDEM) :
WHOMEM:: VAL         NBITMO-B        < BIT DISCRIMINANT AMDEM ET ASDEM.
<                    BIT15=K : AMDEM=ADRESSE DE MOT,
<                              ASDEM=ADRESSE D'OCTET.
<                    BIT15=1 : AMDEM=ADRESSE D'OCTET,
<                              ASDEM=ADRESSE DE MOT.
<
<
<        FONCTIONNEMENT DU PERIPHERIQUE MEMOIRE :
<
<                    - EN LECTURE (K): L'EMETTEUR EST ASDEM,
<                                      LE RECEPTEUR EST LE BUFFER AMDEM :
<                                      (ASDEM) --> (AMDEM).
<
<                    - EN ECRITURE (1):L'EMETTEUR EST LE BUFFER AMDEM,
<                                      LE RECEPTEUR EST ASDEM :
<                                      (AMDEM) --> (ASDEM).
<
<
<        A T T E N T I O N  :
<                      LE HANDLER MEMOIRE, POUR ETRE UTILISE
<                    A LA PLACE DE N'IMPORTE QUEL AUTRE HANDLER
<                    PERIPHERIQUE NE TESTE PAS LES SENS
<                    INEXISTANTS.
<                    (ETAT0 TOUJOURS A 0).
<
<
         USE         L,DCT0
         USE         W,DEM0
HDLMEM:  EQU         $
         TBT         TYPAD           < Y-A-T'IL UNE ADRESSE DE MOT ???
         JC          MEM10           < ET OUI...
<
<
<        C A S   D E   2   A D R E S S E S   D ' O C T E T  :
<
<
         LA          ARGDEM+CODEM
         JAE         Z41             < RIEN A FAIRE, LE COMPTE D'OCTETS
                                     < EST NUL.
<
< ACCES AUX OPERANDES DU TRANSFERT :
<
<
< TEST LECTURE/ECRITURE :
<
         LA          ARGDEM+OPDEM    < ARGUMENT DE LA DEMANDE.
XWOR%1:  VAL         FGW=K           < ACCES A LA FONCTION 'ECRITURE'.
         TBT         NBITMO-B-XWOR%1 < TEST DU BIT LECTURE/ECRITURE.
         LA          ARGDEM+AMDEM    < (A)=@BUFFER CLASSIQUE.
         LB          ARGDEM+ASDEM    < (B)=@PERIPH. CLASSIQUE.
         JNC         E140            < IL S'AGIT D'UNE LECTURE 0
                                     < (PERIPHERIQUE VERS BUFFER),
                                     < L'EMETTEUR EST DONC LE PERIPH. B,
                                     < ET LE RECEPTEUR EST LE BUFFER A.
<
< CAS D'UNE ECRITURE 1 (BUFFER VERS PERIPHERIQUE). L'EMETTEUR EST
< LE BUFFER A, ET LE RECEPTEUR EST LE PERIPH. B.
<
         XR          A,B
E140:    EQU         $
<
<        ON A DONC ICI :
<                    - (A)=ADRESSE DU RECEPTEUR,
<                    - (B)=ADRESSE DE L'EMETTEUR.
<
         PSR         B               < SAVE EMETTEUR
         BSR         AMEM
         STA         VAR+RECMEM      < GENERATION DU RELAI INDIRECT
                                     < INDEXE VERS LE RECEPTEUR.
         LR          X,Y             < (Y)=INDEX INITIAL RECEPTEUR.
         PLR         A               < RESTAURE EMETTEUR DANS A.
         BSR         AMEM
         STA         VAR+EMEMEM      < GENERATION DU RELAI INDIRECT
                                     < VERS LA ZONE EMETTRICE.
         LB          ARGDEM+CODEM    < ACCES AU COMPTE D'OCTETS A TRASFERER.
<
<        ON A DONC ICI :
<                    - (X)=INDEX EMETTEUR INITIAL,
<                    - (Y)=INDEX RECEPTEUR INITIAL,
<                    - (B)=COMPTE D'OCTETS A TRANSFERE.
<
E130:    EQU         $
         LBY         &VAR+EMEMEM     < ACCES A UN OCTET A EMETTRE.
         XR          X,Y             < ACCES A L'INDEX DU RECEPTEUR.
         STBY        &VAR+RECMEM     < RANGEMENT DE L'OCTET DANS
                                     < LE RECEPTEUR.
         XR          X,Y             < RESTAURE INDEX EMETTEUR.
         ADRI        I,X             < PROGRESSION INDEX EMETTEUR.
         ADRI        I,Y             < PROGRESSION INDEX RECEPTEUR.
         ADRI        -I,B            < DECOMPTE DES OCTETS A TRANSFERER.
         CPZR        B               < TEST D'ARRET SUR COMPTE
                                     < D'OCTETS NUL.
         JG          E130            < IL Y A ENCORE DES OCTETS
                                     < A TRANSFERE.
Z41:     EQU         $
         RSR
<
<
<        C A S   O U   I L   Y   A   U N E   A D R E S S E - M O T  :
<
<
MEM10:   EQU         $
         LA          ARGDEM+CODEM    < (A)=NOMBRE D'OCTETS A DEPLACER.
         JAE         Z41             < IL EST NUL, RIEN A FAIRE...
         PSR         W               < SAUVEGARDE DE L'ADRESSE DE LA DEMANDE.
         LA          ARGDEM+OPDEM
         TBT         WHOMEM          < QUI EST MOT : ASDEM OU AMDEM ???
         LA          ARGDEM+AMDEM
         LB          ARGDEM+ASDEM
         LXI         K               < INDEX DE AMDEM,
         LYI         K               < INDEX DE ASDEM.
         JC          MEM11           < AMDEM EST UNE ADRESSE D'OCTET.
<
< CAS OU ASDEM EST UNE ADRESSE D'OCTET :
<
         XR          A,B
         SLRS        NOCMO=K         < CONVERSION EN UNE ADRESSE DE MOT,
         ADCR        Y               < ET MISE A JOUR DE L'INDEX.
         XR          A,B
         JMP         MEM12
<
< CAS OU AMDEM EST UNE ADRESSE DE MOT :
<
MEM11:   EQU         $
         SLRS        NOCMO=K         < CONVERSION EN UNE ADRESSE DE MOT,
         ADCR        X               < ET MISE A JOUR DE L'INDEX.
<
< CHOIX DU SENS DE L'OPERATION :
<
MEM12:   EQU         $
         PSR         A
         LA          ARGDEM+OPDEM    < ACCES A LA FONCTION DEMANDEE ???
XWOR%1:  VAL         FGW=K           < ACCES A LA FONCTION 'ECRITURE'...
         TBT         NBITMO-B-XWOR%1 < LECTURE OU ECRITURE ???
         PLR         A
         JNC         MEM13           < 0 : LECTURE (ASDEM --> AMDEM).
         XR          A,B             < 1 : ECRITURE (AMDEM --> ASDEM),
         XR          X,Y             < ET ON PERMUTE...
MEM13:   EQU         $
         STA         VAR+RECMEM      < DEFINITION DE L'EMETTEUR,
         STB         VAR+EMEMEM      < ET DU RECEPTEUR.
         LB          ARGDEM+CODEM    < (B)=NOMBRE D'OCTETS A DEPLACER...
<
< BOUCLE D'ECHANGE DES OCTETS :
<
MEM14:   EQU         $
         PSR         B               < SAUVEGARDE DU DECOMPTE...
         LA          VAR+EMEMEM
         LR          A,W             < (W)=ADRESSE MOT DE L'EMETTEUR.
         LR          Y,A             < INDEX DE L'EMETTEUR,
         TBT         NBITMO-B        < EST-CE UN OCTET PAIR ???
         JC          MEM15           < NON, IMPAIR...
         LBY         O,W             < ACCES DIRECT A UN OCTET PAIR.
         JMP         MEM16
MEM15:   EQU         $
         IC          VAR+EMEMEM      < PROGRESSION DE L'ADRESSE DE L'EMETTEUR
                                     < LORSQU'ON PASSE SUR UN OCTET IMPAIR.
         LA          O,W
         ANDI        MOCD            < (A)=OCTET DEMANDE.
MEM16:   EQU         $
         LB          VAR+RECMEM
         LR          B,W             < (W)=ADRESSE MOT DU RECEPTEUR.
         LR          X,B             < INDEX DU RECEPTEUR,
         TBT         NBITAB-B        < EST-CE UN OCTET PAIR ???
         JC          MEM17           < NON, IMPAIR...
         STBY        O,W             < FACILE POUR LES OCTETS PAIRS...
         JMP         MEM18
MEM17:   EQU         $
         IC          VAR+RECMEM      < LORSQU'ON PASSE SUR UN OCTET IMPAIR,
                                     < ON FAIT PROGRESSER L'ADRESSE
                                     < DU RECEPTEUR...
         LR          A,B             < SAUVEGARDE DE L'OCTET DANS B.
         LA          O,W
         ANDI        MOCG            < NETTOYAGE PRELIMINAIRE...
         ORR         B,A             < ET INSERTION DE L'OCTET,
         STA         O,W             < PUIS RANGEMENT...
<
< PASSAGE A L'OCTET SUIVANT :
<
MEM18:   EQU         $
         ADRI        I,X
         ADRI        I,Y
         PLR         B               < RESTAURE LE DECOMPTE...
         ADRI        -I,B            < DECOMPTE DES OCTETS...
         CPZR        B               < EN RESTE-T'IL ???
         JG          MEM14           < OUI...
         PLR         W               < RESTAURE L'ADRESSE DE LA DEMANDE.
         JMP         Z41             < ET NON...
         PAGE
<
<
<        G E N E R A T I O N   D ' U N   R E L A I - M E M O I R E  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME DONNE A
<                    PARTIR D'UNE ADRESSE-OCTET
<                    UN RELAI-MOT INDEXE VERS LA
<                    ZONE MEMOIRE CORRESPONDANTE,
<                    AINSI QUE LE NUMERO (0 OU 1)
<                    DU PREMIER OCTET SIGNIFICA-
<                    TIF.
<
<
<        ARGUMENTS :
<                    - (A)=ADRESSE OCTET DU BUFFER.
<
<
<        RESULTATS :
<                    - (A)=RELAI INDIRECT & INDEXE EN MOT DU BUFFER,
<                    - (X)=K SI LE 1ER OCTET EST A GAUCHE,
<                    - (X)=1 SI LE 1ER OCTET EST A DROITE.
<
<
MEM:     EQU         $
         SCRS        NOCMO=K         < CONVERSION EN UNE ADRESSE DE
                                     < MOT ET MISE DU NUMERO DU 1ER
                                     < OCTET EN BIT0 DE A.
                                     < NUMERO DU 1ER OCTET DE L'ECHANGE.
                                     < BIT0=K SI OCTET GAUCHE,
                                     < BIT0=1, SI OCTET DROIT.
         LXI         K               < INITIALISATION DE X.
         ADCR        X               < ON A DONC AINSI DANS X LE
                                     < NUMERO DU 1ER CARACTERE A ECHANGER
                                     < DANS LE BUFFER DONT L'ADRESSE
                                     < DE MOT EST DANS A.
         SBT         BITX            < L'ADRESSE DU BUFFER EST TRANSFORMEE EN
                                     < UN RELAI INDEXE.
         RSR
         PAGE
<
<
<        D C T   D E   T R A I T E M E N T   D E S   S V C  :
<
<
         CALL        #SISP CMS5 CHECK#
         CALL        #SISP CMS5 DOL1#
DCTSVC:  EQU         $
PSTSVC:  WORD        K;K;K;K;COM+DEPCS;DCTSVC;XXDISW;PILSVC;DISPAT;SMST;SO;SE
       #@ASCI        " SVC"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR          < FILTRE.
         WORD        FILTRS          < S-FILTRE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC.
         DZS         LSEM
         WORD        NIL
         WORD        NIL
         WORD        XXCHV0
         DZS         LSEM
         WORD        XXSIT0          < SIT.
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        RUNSVC          < ES.
         WORD        NIL
         WORD        K;K             < ETAT.
         WORD        XBITS0          < BITSEM.
         WORD        XXNTRY;TRYVID
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXDCTF          < 'DCT' NON CONNECTABLE...
XWOR%1:  VAL         XFONBA          < INITIALISATION DE L'ALTITUDE D'EXECU-
                                     < TION DES SERVICES IMMEDIATS...
         WORD        XWOR%1          < DCTFUP (POUR LES SERVICES IMMEDIATS).
<
<
<        Z O N E   V A R I A B L E  :
<
<
VARSVC:  EQU         $
         IF          VARSVC-DCTSVC-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
<
< RELAIS DIVERS :
<
         WORD        TXQUIT,X
AXQUIT:: VAL         $-D-VARSVC      < RELAI VERS LA TABLE D'EXECUTION
                                     < DES QUIT (DE '1E06 A '1EF6).
         WORD        DCTEJ+LSIT
SEJ::    VAL         $-D-VARSVC      < SYNCHRONISATION DE RUN-SVC ET
                                     < DE END JOB, LORS D'UNE DEMANDE
                                     < END JOB.
         WORD        E741X
AE741X:: VAL         $-D-VARSVC      < RELAI D'ACCES AU MODULE DU HANDLER TRAI-
                                     < TANT LA DISCRIMINATION DE LA MEMOIRE
                                     < HAUTE/BASSE, ET L'ALLOCATION DU NIVEAU
                                     < DE SERVICE.
         WORD        SVCDKU
ASVCDK:: VAL         $-D-VARSVC      < MODULE MIS EN SOUS-PROGRAMME A CAUSE DE
                                     < CES MAUDITS SAUTS SUPERIEURS A 128 MOTS,
                                     < DESTINE A GENERER LE 'NSPTYP' DE LA
                                     < DEMANDE COURANTE, DE PLUS IL EST
                                     < DESTINE A PRENDRE EN COMPTE LES DEMANDES
                                     < A 'DKU' ET AU 'SGN' LORSQU'IL Y A UN
                                     < VOLUME POUR CET UTILISATEUR...
         WORD        PSVC1
APSVC1:: VAL         $-D-VARSVC      < MODULE MIS EN SOUS-PROGRAMME A CAUSE
                                     < DES SAUTS SUPERIEURS A 128 MOTS, ET
                                     < DESTINE A VERIFIER EXAUSTIVEMENT LE
                                     < 'COESC' ET 'AMESC' DE LA DEMANDE
                                     < ARGUMENT...
<
< DEMANDE ARGUMENT DE L'ESCLAVE :
<
DESCAR:: VAL         $-VARSVC
         DZS         LFDESC          < ZONE DE RECOPIE DE LA DEMANDE ARGUMENT DE
                                     < L'ESCLAVE ; ON PREPARE AINSI L'ACCES A
                                     < DEMANDES DANS LES ESPACES DE SWAPPING...
<
< LISTE DES AUTOMATES DE SERVICES IMMEDIATS :
<
         WORD        NIL
OTOACT:  EQU         $-D             < CAS D'UN SERVICE IMMEDIAT (SANS
                                     < NSP) ; IL Y AURA JUSTE UNE
                                     < DEMANDE DE REACTIVATION.
OTOAMF:: VAL         $-D-VARSVC      < MEMOIRE FREE
EOTO1:   WORD        SWAPO;RLMESC;RUNO;ALMESC;SWAPI;ISLOE;EOTO1-$
OTOAMO:: VAL         $-D-VARSVC      < MEMOIRE OCCUPEE
<
< LISTE DES AUTOMATES DE SERVICES ESCLAVES NON SWAPPABLES :
<
EOTO2:   WORD        SERESC;EOTO2-$
OTOSNP:  EQU         $-D             < SERVICE DE NSP>=(HINSP).
OTOMF::  VAL         $-D-VARSVC      < AUTOMATE 'MEMOIRE FREE'.
EOTO3:   WORD        SERESC;SWAPO;RLMESC;RUNO;ALMESC;SWAPI;ISLOE;EOTO3-$
OTOMO::  VAL         $-D-VARSVC      < AUTOMATE 'MEMOIRE OCCUPEE'.
<
< LISTE DES AUTOMATES DE SERVICES ESCLAVES SWAPPABLES :
<
EOTO4:   WORD        OMOV1;SWAPO;RLMESC;SERESC;ALMESC
         WORD        SWAPI;ISLOE;OMOV2;EOTO4-$
OTOSP:   EQU         $-D             < SERVICE DE NSP<(HINSP).
<
< LISTE DES AUTOMATES D'ACCES AU CCI :
<
EOTO6:   WORD        SWAPOP;RLMESC;RUNCCI;ALMESC;SWAPI;ISLOE;EOTO6-$
CCISP:   EQU         $-D             < DEMANDE DE CCI AVEC :
                                     < MIN(NSPIN,NSPOUT)<(HINSP).
CCISNP:  EQU         CCISP           < QUELQUE SOIT LE NSPIN DE
                                     < L'ESCLAVE, ON SWAPPERA OUT
                                     < AVANT LE RUNCCI.
<
< LISTE DE LA LISTE DES AUTOMATES :
<
LOTO::   VAL         $-VARSVC        < RELAI DES AUTOMATES DE SERVICE.
         WORD        LLOTO,X
LLOTO:   EQU         $               < DEBUT DE LA LISTE DES AUTOMATES :
XOTIM::  VAL         $-LLOTO         < 'SERVICES IMMEDIAT'.
         WORD        OTOACT
XOTNP::  VAL         $-LLOTO         < 'SERVICE NON PRIORITAIRE'.
         WORD        OTOSNP
XOTP::   VAL         $-LLOTO         < 'SERVICE PRIORITAIRE'.
         WORD        OTOSP
XOTCNP:: VAL         $-LLOTO         < 'CCI NON PRIORITAIRE'.
         WORD        CCISNP
XOTCP::  VAL         $-LLOTO         < 'CCI PRIORITAIRE'.
         WORD        CCISP
         IF          XOTP-XOTNP-BIT,,XEIF%,
         IF          ATTENTION : IL FAUT XOTP=XOTNP+CARY !!!
XEIF%:   VAL         ENDIF
         IF          XOTCP-XOTCNP-BIT,,XEIF%,
         IF          ATTENTION : IL FAUT XOTCP=XOTCNP+CARY !!!
XEIF%:   VAL         ENDIF
<
< DONNEES DE VALIDATION
< DE 'COESC' ET 'AMESC' :
<
         WORD        NILK
ADINEX:: VAL         $-D-VARSVC      < ADRESSE DU PREMIER OCTET AU-DELA DE
                                     < L'ESPACE UTILISATEUR...
<
< POUR GERER LES EXTENSIONS
< 'CDA' DE 'DKU' :
<
         WORD        OCDA
SVCDO::  VAL         $-D-VARSVC      < PSEUDO-REGISTRE DONNANT L'ORIGINE DE
                                     < LA 'CDA' COURANTE,
         WORD        ECDA
SVCDE::  VAL         $-D-VARSVC      < PSEUDO-REGISTRE DONNANT LA FIN DE
                                     < LA 'CDA' COURANTE.
         WORD        MEMTV0
SVCDIO:: VAL         $-D-VARSVC      < ORIGINE DE LA 'CDAI',
         WORD        MEMTVR-Z
SVCDIE:: VAL         $-D-VARSVC      < FIN DE LA 'CDAI'.
XWOR%4:  VAL         LK>DADR*IMCDAJ=K
XWOR%4:  VAL         PAGEIJ>XWOR%4   < DEPLACEMENT D'ACCES A LA PAGE D'EMULATION
                                     < DE LA 'CDAI' DANS LA 'CDAJ' LORSQU'IL Y
                                     < A UNE COMMANDE "!CDAI=J" ACTIVE...
         WORD        MCDAJO+XWOR%4
SVCDJO:: VAL         $-D-VARSVC      < ORIGINE DE LA 'CDAJ+4',
         WORD        MCDAJE+XWOR%4
SVCDJE:: VAL         $-D-VARSVC      < FIN DE LA 'CDAJ+4'.
<
<
<        P I L E   D E   ' H D L S V C '  :
<
<
XWPILE:  VAL         LPILED+20
PILSVC:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        T A B L E   D E S   F O N C T I O N S   I M M E D I A T E S
<        O U   P S E U D O - I M M E D I A T E S   D U   S V C  :
<
<
TRSIM:   EQU         $               < TABLE DES RELAIS DES FONCTIONS.
         WORD        E743            < END-JOB INACCESSIBLE DIRECTEMENT
                                     < MEME SOUS :SYS !!!!!!
FONEJ::  VAL         $-D-TRSIM
         WORD        SVCCCI          < APPEL CCI.
FONCCI:: VAL         $-D-TRSIM
         WORD        SVCCIM          < APPEL CCI NON INTERACTIF : LE
                                     < MESSAGE A ANLYSER EST ARGUMENT
                                     < DU SVC.
FOCCIM:: VAL         $-D-TRSIM       < FOCCIM DOIT ETRE UN CODE
                                     < DE FAUX SERVICE IMMEDIAT ET
                                     < ECRITURE ('02), AFIN QU'UN
                                     < OMOV1 DEPLACE LE MESSAGE A
                                     < ANALYSER VERS BUFESC.
         WORD        SVCNSP          < CONNEXION DE :SYS A UN NSP.
FONNSP:: VAL         $-D-TRSIM
         WORD        SVCMEM          < CHANGEMENT DE LA TAILLE DE
                                     < L'ESPACE MEMOIRE D'UN ESCLAVE.
FONMEM:: VAL         $-D-TRSIM
         WORD        SVCDOR          < MISE EN SOMMEIL D'UN ESCLAVE
                                     < POUR UN TEMPS DETERMINE, SANS
                                     < REVEIL POSSIBLE.
FONDOR:: VAL         $-D-TRSIM
         WORD        Z67
FONSCH:: VAL         $-D-TRSIM       < FONCTION DE PASSAGE DE MAIN
                                     < D'UN ESCLAVE.
         WORD        E743            < 7 : FONCTION INEXISTANTE.
         WORD        SVCZDC
FONFR::  VAL         $-D-TRSIM       < FAUSSE LECTURE A PARTIR DE BUFESC
                                     < (ET ACCES EVENTUEL A ZDC)
         WORD        E743            < 9 : FONCTION INEXISTANTE.
         WORD        SVCZDC
FONFW::  VAL         $-D-TRSIM       < FAUSSE ECRITURE DANS BUFESC.
                                     < (ET MAJ EVENTUELLE DE ZDC)
<
<
<        A T T E N T I O N  :
<                    IL FAUT FONMEM>2 & #'A, A CAUSE DES
<                    TESTS FAITS EN 'E744' SUR LA NATURE DE
<                    L'OPERATION DEMANDEE.
<                    DE MEME FONDOR>2 & #'A.
<
<                    IL FAUT FOCCIM=2 : C-A-D UN CODE D'ECRITURE...
<                    IL FAUT FONFR=8 : C-A-D UN CODE DE LECTURE...
<                    IL FAUT FONFW=A : C-A-D UN CODE D'ECRITURE...
<
<
XWOR%1:  VAL         MKESEF+N        < BIT DISCRIMINANT CERTAINES E/S.
         IF          FONMEM-FGX,,,XEIF%
         IF          ATTENTION : 'FONMEM' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         IF          FONMEM-FGX-XWOR%1,XEIF%,,XEIF%
         IF          ATTENTION : 'FONMEM' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         IF          FONDOR-FGX,,,XEIF%
         IF          ATTENTION : 'FONDOR' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         IF          FONDOR-FGX-XWOR%1,XEIF%,,XEIF%
         IF          ATTENTION : 'FONDOR' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         IF          FOCCIM-FGX,,XEIF%,
         IF          ATTENTION : 'FOCCIM' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         IF          FONFR-FGR-XWOR%1,,XEIF%,
         IF          ATTENTION : 'FONFR' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         IF          FONFW-FGX-XWOR%1,,XEIF%,
         IF          ATTENTION : 'FONFW' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
NFON::   VAL         $-TRSIM         < LONGUEUR DE LA TABLE = NBRE DE
                                     < FONCTIONS IMMEDIATES.
         WORD        E741X8
FONHAU:: VAL         $-D-TRSIM       < FAUSSE FONCTION IMMEDIATE UTILISEE
                                     < LORSQU'UN ESCLAVE DOIT PASSER DE LA
                                     < MEMOIRE HAUTE A LA MEMOIRE BASSE POUR
                                     < SERVICE IMMEDIAT...
<*******************************************************************************
XWOR%F:  VAL         FONCCI
FONCCI: @VAL         '0@@@@          < FONCTION D'APPEL DU 'CCI' PAR 'SVC'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FOCCIM
FOCCIM: @VAL         '0@@@@          < FONCTION D'APPEL DU 'CCI' INTERPRETATIF.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FONMEM
FONMEM: @VAL         '0@@@@          < FONCTION CHANGEMENT DE LA TAILLE MEMOIRE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FONDOR
FONDOR: @VAL         '0@@@@          < FONCTION MISE EN SOMMEIL DE L'ESCLAVE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
         PAGE
<
<
<        T A C H E   D E   P R E - T R A I T E M E N T
<                    D E S   S V C   E S C L A V E S  :
<
<
<        FONCTION :
<                      CETTE TACHE SYNCHRONISE PAR 'SVCESC' EST
<                    CHARGEE DE RECUPERER LES ARGUMENTS DE
<                    LA SVC ESCLAVE, DE TRANSFORMER
<                    CES ARGUMENTS DANS LE FORMAT
<                    COMPATIBLE AVEC CHAND, DE CHOISIR
<                    L'AUTOMATE DE SERVICE (EN FONCTION
<                    DE LA POSITION DU NSPXXX DEMANDE
<                    PAR RAPPORT A HINSP), ET ENFIN DE
<                    DEMANDER L'ALLOCATION D'UN HANDLER DE
<                    SERVICE...
<
<
<        N O T A  :
<                      POUR SAVOIR SI UN NVP EST ASSIGNE OU PAS,
<                    IL SUUFIT D'ENVOYER UNE FONCTION INEXISTANTE
<                    SUR LUI (PAR EXEMPLE 'F), ET DE TESTER
<                    LE CODE ERREUR AU RETOUR :
<                    - '81 : LE NVP N'EST PAS ASSIGNE,
<                    - '83 : LE NVP EST ASSIGNE.
<
<
         CALL        #SISP CMS5 DOL2#
         CALL        #SISP CMS5 CHECK#
RUNSVC:  EQU         $
<
<
<        R E C U P E R A T I O N   D E   L ' E S C L A V E  :
<
<
         LR          L,Y             < (Y)=@DCT-SVC
         LXI         NSPACT          < NSP DU NIVEAU ESCLAVE.
         BSR         ACADCT          < (L)=@DCT-ESCLAVE.
         STZ         &ADCTSY         < CE RAZ EST DESTINE A HDLHOR.
         IC          COMPT0-DCTESC,L < COMPTABILISATION DES SVC.
                                     < (EXECUTES PAR CET ESCLAVE)
         LA          PSTESC-DCTESC+RSLO,L < (A)=(SLO),
         LB          PSTESC-DCTESC+RSLE,L < (B)=(SLE).
         WOE                         < WRITE SLO,LE
<
<
<        P R E P A R A T I O N   D E S   T E S T S
<        D E   V I O L A T I O N   M E M O I R E  :
<
<
         LA          DEMSWP-DCTESC+T+CODEM,L
         ADRI        -SLOESC*NOCMO,A < (A)=TAILLE EN OCTETS DE L'ESPACE MEMOIRE
                                     <     REEL DE L'UTILISATEUR ; NE PAS OU-
                                     <     BLIER QU'IL DIFFERE DE L'ESPACE
                                     <     SWAPPE PAR 'SLOESC'...
         XR          Y,L             < POUR ATTEINDRE 'DCTSVC',
         STA         VAR+ADINEX      < ON MEMORISE AINSI L'ADRESSE DU PREMIER
                                     < OCTET INACCESSIBLE LORS D'UNE ENTREE-
                                     < SORTIE ; CETTE VALEUR SERA DECREMENTEE
                                     < D'UNE UNITE DANS LE CAS DE 'NSPNXS' ET
                                     < DE 'NSPNXP'...
         XR          Y,L             < RESTAURATIONS...
         JAG         Z1960E          < OK, CETTE ADRESSE EST CORRECTE...
XWOR%1:  VAL         SLOESC*NOCMO
         IF          MXMEME-XWOR%1-K,,,XEIF%
         IF          ATTENTION : LE TEST PRECEDENT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT ON A PU
<                    CALCULER UNE ADRESSE NEGATIVE !!!
<                    IL FAUDRA CORRIGER 'ADINEX' A LA
<                    MAIN...
<
Z1960E:  EQU         $
<
<
<        P R I S E   E N   C O M P T E   D E   L ' E T A T
<        D ' A L L O C A T I O N   M E M O I R E  :
<
<
<        FONCTION :
<                      CE MODULE EST EXECUTE SYSTEMATIQUEMENT
<                    LORSQU'ON RENTRE EN 'RUNSVC'; IL TESTE
<                    LE NOMBRE D'ALLOCATEUR MEMOIRE EN
<                    ATTENTE DE MEMOIRE, ET S'IL Y EN A TROP,
<                    ON CHANGE L'AUTOMATE DES SERVICES NON
<                    IMMEDIATS, EN FORCANT ALORS DU SWAPP OU.
<
<
         LA          OTOSM           < (A)=(OTOSM), AFIN DE FORCER L'EXECUTION
                                     <     DU 'JGE Z1960', AU CAS OU (HORESC)>0.
         DC          HORESC-DCTESC,L < DECREMENTATION DE L'HORLOGE...
         XR          Y,L             < (L)=ADRESSE DCT-SVC, (Y)=SAVE DCTESC.
         JG          Z1960A          < (HORESC)>0 : MEMOIRE 'FREE'...
         JE          Z1960B          < PASSAGE A 0 DE 'HORESC'.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
Z1960B:  EQU         $
         XR          Y,L             < (L)=ADRESSE DCTESC, (Y)=SAVE DCT-SVC.
         LBY         DEMSWP-DCTESC+T+CODEM,L
XWOR%1:  VAL         LK*NOCMO=K-NBITOC
         SLRS        NOCMO=XWOR%1    < NOMBRE DE K-MOTS OCCUPES PAR L'ESCLAVE
         LR          A,X             < DECALE D'UNE POSITION A DROITE.
         LA          IDDESC-DCTESC,L
         TBT         IDESC6          < EST-CE LA PRIORITE NORMALE OU LA
                                     < PRIORITE INFERIEURE ???
         LAI         W               < INFERIEURE A PRIORI (ON INITIALISE 'A'
                                     < AINSI, AFIN DE FAIRE LE SWAPPING OUT
                                     < SYSTEMATIQUEMENT...).
         JC          Z1960D          < INFERIEURE... ('A'=1)
         LA          &ATHESC         < SUPERIEURE : (X) DONNE LA VALEUR INITIALE
Z1960D:  EQU         $
         STA         HORESC-DCTESC,L < DE L'HORLOGE ESCLAVE.
         XR          Y,L             < (L)=ADRESSE DCT-SVC, (Y)=SAVE DCTESC.
         LA          &ASMMEM
         BSR         ABETA           < RENVOIE :
<                                    < (A)=BETA(SEMMEM),
                                     <    ON A DONC AINSI, LE NOMBRE D'ALLO-
                                     <     CATEURS MEMOIRE EN ATTENTE.
Z1960A:  EQU         $
         CP          OTOSM           < COMPARAISON PAR RAPPORT AU SEUIL.
         LAD         VAR+OTOAMF
         LR          A,B             < (B)=ADRESSE AUTOMATE DE REACTIVATION
                                     <     SANS SWAP A PRIORI
         LAD         VAR+OTOMF       < (A)=@AUTOMATE SANS SWAPPING
                                     <     A PRIORI (MEMOIRE 'FREE').
         JGE         Z1960           < EFFECTIVEMENT, IL Y A PEU OU
                                     < PAS D'ALLOCATEUR EN ATTENTE...
         LAD         VAR+OTOAMO
         LR          A,B             < ADRESSE AUTOMATE DE REACTIVATION
                                     < AVEC SWAP
         LAD         VAR+OTOMO       < C'EST TRES MAUVAIS, ON PREND :
                                     < (A)=@AUTOMATE AVEC SWAPPING.
                                     <     (MEMOIRE 'OCCUPEE')
Z1960:   EQU         $
         LXI         XOTNP           < (X)=INDEX DES SERVICES NON IMME-
                                     <     DIATS : NSP>=(HINSP).
         STA         &VAR+LOTO       < CHANGEMENT DE LA LISTE DES
                                     < AUTOMATES DE SERVICE...
         LXI         XOTIM
         STB         &VAR+LOTO
         XR          Y,L             < (L)=ADRESSE DCTESC, (Y)=SAVE DCT-SVC.
<
< DISCRIMINATION DES APPELS PAR QUIT DE CEUX PAR SVC :
<
         CPZ         PSTESC-DCTESC+RS,L  < TEST DU REGISTRE S(ESCLAVE) :
                                     < MAITRE : APPEL PAR SVC,
                                     < ESCLAVE : APPEL PAR QUIT.
         JL          Z863            < L'ESCLAVE ETANT EN MODE MAITRE,
                                     < L'APPEL A EU LIEU PAR 'SVC'...
<
<
<        P R E - T R A I T E M E N T   D E S   Q U I T  :
<
<
         PSR         Y               < SAUVEGARDE DE L'ADRESSE DE 'DCTSVC'.
         LY          PSTESC-DCTESC+RP,L
         ADRI        -D,Y            < (Y)=ADRESSE RELATIVE A 'SLO' DE L'INSTRUC
                                     <     TION 'QUIT',
         LAR                         < QUE L'ON RECUPERE DANS 'A'...
         PLR         Y               < RESTAURATION DE (Y)=ADRESSE DE 'DCTSVC'.
XXZOP::  VAL         '00F0           < MASQUE D'ACCES A L'ARGUMENT DE CERTAINES
                                     < "PSEUDO-INSTRUCTIONS" ACCESSIBLES AUX
                                     < UTILISATEURS.
XWOR%1:  VAL         XXZOP           < ZONE OPERANDE DU 'QUIT'.
         ANDI        XWOR%1          < (A)=OPERANDE DU QUIT.
         SLRS        XWOR%1=K
         LR          A,X             < (X)=NATURE DU QUIT (DE '0
                                     < A 'F).
         XR          Y,L             < (L)=@DCT-HDLSVC.
         LA          &VAR+AXQUIT     < ACCES A LA TABLE D'EXECUTION
                                     < DES QUIT.
         XR          Y,L             < (L)=@DCT-ESCLAVE.
         JAE         Z861            < LE QUIT EST ASSIMILE
                                     < A UN VRAI 'SVC'.
         JAG         Z864            < LE QUIT EST UN 'SVC' SIMULE.
                                     < ((A)=ADRESSE ABSOLUE DE LA TABLE DES
                                     <      ARGUMENTS).
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
Z863:    EQU         $
<
<
<        A P P E L   P A R   ' S V C '   O U   P A R
<        ' Q U I T '   A S S I M I L E  :
<
<
Z861:    EQU         $
<
< RECUPERATION DE L'ADRESSE DES ARGUMENTS ESCLAVE :
<
         LA          RA+XXPSTD,L     < (A)=ADRESSE TRANSLATABLE DES ARGUMENTS,
         JAL         Z100Z           < ERREUR, ELLE EST NEGATIVE...
         LA          RSLE+XXPSTD,L   < (A)=(SLE),
         SB          RSLO+XXPSTD,L   < (A)=(SLE)-(SLO),
         SLLS        -DADR           < QUE L'ON CONVERTIT EN UNE LONGUEUR-MOTS.
XWOR%1:  VAL         LFDESC-Z        < POUR PRENDRE EN COMPTE LA LONGUEUR
                                     < MAXIMALE D'UNE DEMANDE ESCLAVE.
XWOR%2:  VAL         FADR-Z          < POUR PRENDRE EN COMPTE EN FAIT QUE 'SLE'
                                     < NE DONNE QU'A FADR-MOTS PRES L'ADRESSE
                                     < DU DERNIER MOT ACCESSIBLE...
         ADRI        -XWOR%1+XWOR%2,A
                                     < (A)=ADRESSE MAXIMALE POSSIBLE POUR LE
                                     <     PREMIER MOT D'UNE DEMANDE ESCLAVE,
         CP          RA+XXPSTD,L     < ALORS Y-A-T'IL VIOLATION ???
         JL          Z100Z           < LES 'LFDESC' MOTS MAX D'UNE DEMANDE SONT
                                     < A CHEVAL SUR 'SLE', ERREUR...
                                     < NOTA : CE TEST BRUTAL EST FAIT MEME SI
                                     <        LA DEMANDE FAIT MOINS DE 'LFDESC'
                                     <        MOTS !!!
         PSR         B,X
         LA          RA+XXPSTD,L     < (A)=RELATIVE A 'SLO' DES ARGUMENTS,
         LRM         B
         WORD        VARSVC+DESCAR   < (B)=ADRESSE ABSOLUE OU STOCKER LES 'LFDES
                                     <     MOTS A PRIORI DE LA DEMANDE,
         LXI         LFDESC          < (X)=NOMBRE DE MOTS MAX D'UNE DEMANDE
                                     <     EMANANT D'UN ESCLAVE...
         MVTM                        < DUPLICATION DE LA DEMANDE DE L'ESCLAVE
                                     < DANS L'ESPACE MAITRE DU SYSTEME ; ON
                                     < PEUT AINSI L'ATTEINDRE OU QU'ELLE SOIT...
         LR          B,A             < (A)=ADRESSE ABSOLUE DE LA DEMANDE DE
                                     <     CE PAUVRE ESCLAVE...
         PLR         B,X
Z864:    EQU         $               < CAS DES QUIT DE SIMULATION
                                     < DE SVC.
         LR          A,W             < (W)=@ABSOLUE DES ARGUMENTS ESCLAVE.
<
<        ON A ICI :
<                    (L)=ADRESSE DCT(ESCLAVE).
<                    (W)=ADRESSE ABSOLUE DES ARGUMENTS ESCLAVE.
<                    (Y)=ADRESSE DCT(SVC).
<
         PAGE
<
<
<        P R E - T R A I T E M E N T  :
<        R E C U P E R A T I O N   E T   V A L I D A T I O N
<                    D E   L A   D E M A N D E  :
<
<
         USE         W,NVPFON
<
< NETTOYAGE DE 'DEMESC' :
<
         STZ         DEMESC-DCTESC+LDEM0-Z,L
                                     < RAZ DU DERNIER MOT DE DEMESC.
         LAD         DEMESC-DCTESC+XXNSP,L
         LR          A,B             < (B)=ADRESSE('DEMESC')=RECEPTEUR,
         ADRI        D,A             < (A)=ADRESSE('DEMESC')+D=EMETTEUR,
         LXI         LDEM0-Z         < (X)=NOMBRE DE MOTS RESTANT A RAZER...
         MOVE                        < RAZ DE DEMESC.
<
< ACCES AU NVP DEMANDE :
<
         LBY         NVPFON
         TBT         XASSIM+NBITOC   < DISCRIMINATION DES ASSIGN
                                     < EXPLICITES (K) / IMPLICITES (1).
XWOR%1:  VAL         -NBITOC         < POUR UN DECALAGE A DROITE...
XWOR%2:  VAL         MASSIM>XWOR%1   < A CAUSE DU 'LBY' DE CHARGEMENT.
         ANDI        XWOR%2          < (A)=NVP REFERENCE DANS LA DEMANDE.
         IF          LIMPAS-XWOR%2,XEIF%,XEIF%,
         IF          LA VALEUR DE 'LIMPAS' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         IF          NVPSER-K,,XEIF%,
         IF          ATTENTION : LE 'JAE' SUIVANT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JAE         SERVIN          < DANS TOUS LES CAS : NVP=K
                                     < REFERENCE LES SERVICES IMMEDIATS.
         JNC         Z1940           < BIT0=K : ASSIGN EXPLICITES.
<
<        A S S I G N   I M P L I C I T E S  :
<
         CPI         LIMPAS-I        < VALIDATION SUPERIEURE DU NVP.
         JG          EE742           < ERREUR : NVP INEXISTANT.
         LR          A,X             < OK,
         LA          &IMPASS         < (A)=ENTREE COURANTE DE 'TIMPASS' :
         ANDI        XXPAS1          < (A)='NSP'/'NVP' ASSIGNE AU 'NVP',
         IF          XYPAS1-K,,XEIF%,
         SLRS        XYPAS1
XEIF%:   VAL         ENDIF
         TBT         XYPASI          < DISCRIMINATION 'NSP'/'NVP' :
         JNC         Z1941           < CAS DES 'NSP',
         RBT         XYPASI          < CAS DES 'NVP',
         JMP         Z1940           < ON Y VA...
SERVIN:  JMP         SERVIM          < RELAI...
Z100Z:   JMP         Z100            < RELAI VERS 'Z100'...
<
<        A S S I G N   E X P L I C I T E S  :
<
Z1940:   EQU         $
         CPI         NOCMO*LTASGN    < VALIDATION DU NVP.
EE742:   JG          E742            < NVP INVALIDE.
                                     < (ET RELAI VERS 'E742')
         JL          Z962            < OK, NVP ASSIGNE.
<
<
<        N V P = 2 * L T A S G N  :
<        A C C E S   D I R E C T   A U   D K S  :
<
<
<        FONCTION :
<                      LE NVP=2*LTASGN PERMET D'ATTEINDRE
<                    EN ADRESSAGE DIRECT-RELATIF LE
<                    DISQUE DE SWAPPING; A CET EFFET
<                    TZSCRA SECTEURS SONT RESERVES DERRIERE
<                    LA ZONE DE SWAPPING DE CHAQUE ESCLAVE.
<
<
<        ARGUMENT :
<                    (AMESC)=ADRESSE OCTET DU BUFFER,
<                    (COESC)=COMPTE D'OCTETS A ECHANGER:
<                            DOIT ETRE INFERIEUR OU EGAL
<                            A ('QUANTA' * TAILLE OCTETS SECTEUR)
<                    (ARGESC)=NUMERO DU SECTEUR DESIRE:
<                             DOIT ETRE SUPERIEUR OU EGAL A 0  ET
<                             INFERIEUR OU EGAL A ('TZSCRA' - 'QUANTA')
<                             POUR EVITER UNE VIOLATION DISQUE
<
<
<        NOTA :
<                      LES FONCTIONS 0/1 (LECTURE)
<                    ET 2 (ECRITURE) SONT AUTORI-
<                    SEES.
<
<
         LA          AMESC           < (A)=ADRESSE-OCTET DE L'ECHANGE :
         TBT         NBITMO-B        < EST-ELLE PAIRE (ADRESSE DE MOTS) ???
         JC          AE745           < NON, ERREUR...
XWOR%2:  VAL         MSPTYP=K
XWOR%1:  VAL         NSPDKS>XWOR%2
XWOR%1:  VAL         COSBT?VBOX=FMASK(K?XWOR%1=FCINST
         LRM         A
         WORD        XWOR%1          < 'NSPTYP' POUR L'ACCES A 'DKS' EN MODE
                                     < SYMBOLIAUQE, ET VALIDATION SYSTEMATI-
                                     < DE LA 'BOX' DE 'DEMESC'.
         STA         DEMESC-DCTESC+XXNSP,L < MISE EN PLACE DU NSPTYP D'ACCES
                                     < AU DISQUE DE SWAPPING.
         LRM         A               < COMPTE D'OCTETS MAXIMUM ECHANGEABLES
         WORD        YY8Q
         CP          COESC           < VALIDATION COMPTE D'OCTETS DEMANDE
         JL          AE745           < ERREUR : COMPTE D'OCTETS TROP GRAND
         LB          COESC           < (B)=CODEM(DEMESC) : NE PAS DETRUIRE.
         STB         DEMESC-DCTESC+T+CODEM,L
         LA          NVPFON
         ANDI        MASSFO          < (A)=FONCTION DEMANDEE.
         CPI         FGX             < VALIDATION DE LA FONCTION.
         JG          E743            < FONCTION INEXISTANTE POUR
                                     < L'ACCES DIRECT AU DISQUE.
         STA         DEMESC-DCTESC+T+OPDEM,L
         LA          ARGESC          < (A)=NUMERO RELATIF DU SECTEUR.
         JAL         AE745           < ERREUR : SECTEUR DE NUMERO<0 !!!
         CPI         TZSCRA-QUANTA   < LE SECTEUR DEMANDE EST-IL ADMISSIBLE
                                     < COMPTE TENU DU FAIT QU'ON PEUT
                                     < ECHANGER 'QUANTA' SECTEURS ?
         JG          AE745           < NON, ERREUR : VIOLATION DISQUE !
XWOR%2:  VAL         XXXMOY
XWOR%1:  VAL         TZSWAP-TZSCRA/XWOR%2
         IF          XWOR%1*XWOR%2-TZSWAP+TZSCRA,,XEIF%,
         IF          ATTENTION : TZSWAP-TZSCRA NON DIVISIBLE PAR 2 !!!
XEIF%:   VAL         ENDIF
         DO          XWOR%2
         ADRI        XWOR%1,A        < ACCES AL AZONE DE SCRATCH RELA-
                                     < TIVEMENT A L'ESPACE UTILISATEUR.
         AD          DEMSWP-DCTESC+T+ASDEM,L
                                     < (A)=ADRESSE ABSOLUE DU SECTEUR SCRATCH
                                     <     DEMANDE.
         STA         DEMESC-DCTESC+T+ASDEM,L
         LA          AMESC           < (A)=@OCTET DU BUFFER.
<
<        ON A ICI :
<                    (A)=ADRESSE OCTET DU BUFFER.
<                    (B)=COMPTE D'OCTETS.
<
         JMP         Z1213           < VERS LA SUITE DE LA VALIDATION
                                     < DES ARGUMENTS.
<
<
<        C A S   D E S   N V P   A S S I G N E S  :
<
<
Z962:    EQU         $               < ENTRY POUR LES NVP ASSIGNES
                                     < A PHIN OU PHOUT PAR !ASSIGN I/O.
         LR          A,X             < (X)=NVP.
<
< ACCES AU NSP ASSIGNE AU NVP :
<
         LBY         &TASSGN-DCTESC,L
Z1941:   EQU         $               < TRONC COMMUN ASSIGN IMPLICITES
                                     < ET ASSIGN EXPLICITES.
         JAE         E739            < ERREUR : LE NVP N'EST PAS
                                     < ASSIGNE.
XWOR%1:  VAL         PHOUT           < MAXIMUM A PRIORI...
         IF          PHIN-PHOUT,XEIF%,XEIF%,
XWOR%1:  VAL         PHIN            < ET NON, C'ETAIT LUI...
XEIF%:   VAL         ENDIF
         IF          PHIN-PHOUT,XEIF%,,XEIF%
         IF          ATTENTION : PHIN=PHOUT !!!
XEIF%:   VAL         ENDIF
         CPI         XWOR%1          < LE NVP EST-IL ASSIGNE A I/O ???
         JLE         Z962            < OUI, ON RECUPERE LE NVP REEL
                                     < AU 2EME NIVEAU (PAR PHIN/PHOUT).
<
< OK : ON A DANS A LE NSP ASSIGNE AU NVP
<
         ANDI        XNVPF)MOCD
         JAE         E740            < NSP=NSPDUM ; LE NVP EST ASSIGNE
                                     < AU NSP DUMMY ; ON FAIT DONC UNE
                                     < SORTIE IMMEDIATE ; A NOTER QUE
                                     < L'ON A (A)=K : LA SORTIE EST
                                     < DONC OK !!!
         XR          Y,L             < (L)=ADRESSE DE 'DCTSVC',
                                     < (Y)=ADRESSE DE 'DCTESC'.
         BSR         VAR+ASVCDK      < GENERATION DU 'NSPTYP' DE LA DEMANDE ET
                                     < TRAITEMENT PARTICULIER DES DEMANDES A
                                     < 'DKU' ET AU 'SGN' LORSQU'IL Y A UN
                                     < VOLUME POUR CET UTILISATEUR,
                                     < AU RETOUR, ON A :
                                     < (L)=ADRESSE DE 'DCTESC', ET
                                     < (Y)=ADRESSE DE 'DCTSVC'...
<
<
<        F O N C T I O N S   R E C O N N U E S  :
<
<
<        0000        LECTURE,
<        0001        LECTURE AVEC ECHO, OU CONTROLE (DK),
<        0010        ECRITURE,
<        0011        OPEN NEXT RECORD, OU OPEN GRAPHIQUE,
<        0100        OPEN NEW RECORD, OU CLOSE GRAPHIQUE,
<        0101        OPEN OLD RECORD, OU ERASE SCREEN,
<        0110        CLOSE-RELEASE RECORD, OU CURSEUR GRAPHIQUE,
<        0111        CLOSE-SAVE RECORD, OU ECRITURE DIRECTE,
<        1000        LECTURE RECORD, OU LECTURE CURSEUR ALPHA-NUMERIQUE,
<        1001        LECTURE-DELETE RECORD, OU LECTURE GRAPHIQUE,
<        1010        ECRITURE GRAPHIQUE.
<                                    (EN 2 : LES VISUS).
<
<
<        NOTA :
<                      EN FORMANT (FONCTION).AND.'MASSFF',
<                    ET EN TESTANT LA POSITION DU RESULTAT
<                    OBTENU PAR RAPPORT A 'FGX', ON PEUT
<                    SAVOIR S'IL S'AGIT D'UNE ENTREE-SORTIE
<                    EFFECTIVE OU PAS...
<
<
<        RAPPEL :
<                    (OPDEM).AND.'MASSFF < FGX : OPERATION DE LECTURE,
<                                        = FGX : OPERATION D'ECRITURE,
<                                        > FGX : IL NE S'AGIT PAS D'UNE ENTREE-
<                                                SORTIE EFFECTIVE.
<
<
<        NOTA :
<                      IL EXISTE DES OPERATIONS SUR 'DKU' QUI
<                    SE FAISANT DIRECTEMENT ENTRE 'DKU' ET LA
<                    MEMOIRE 'MEMTV' ('FONTVR' ET 'FONTVW') NE
<                    SONT PAS CONSIDEREES COMME E/S EFFECTIVES,
<                    AFIN DE NE PAS VALIDER SOUS 'SVC' L'ARGUMENT
<                    'AMDEM'...
<
<
<
< RECUPERATION DE LA FONCTION DEMANDEE :
<
         LA          NVPFON
         ANDI        MASSFO          < (A)=FONCTION DEMANDEE SUR CE NVP.
         CPI         FINEX           < VALIDATION ???
         JGE         E743            < ERREUR, LA FONCTION N'EXISTE PAS...
<
<        E N T R Y   F A U X   S E R V I C E S   I M M E D I A T S  :
<
Z61:     EQU         $
<
< DANS LE CAS OU LA FONCTION EST VALIDEE ON LA MET EN
< OPDEM DE DEMESC :
<
         STA         DEMESC-DCTESC+T+OPDEM,L
<
< TRANSMISSION A PRIORI ET SANS VALIDATION DE ARGESC :
<
         LB          ARGESC          < TRANSMISSION A PRIORI.
         STB         DEMESC-DCTESC+T+ASDEM,L
<
< PRISE EN COMPTE DE COESC ET AMESC :
<
         LB          COESC
         STB         DEMESC-DCTESC+T+CODEM,L
<
<        ON A ICI :
<                    (A)=FONCTION DEMANDEE.
<                    (B)=COESC.
<                    (X)=NVP. A NOTER QUE (X) EST DIFFERENT
<                      DE 0, PUISQUE LE SERVICE N'EST PAS
<                      IMMEDIAT (UTILISER PAR LA SUITE POUR
<                      DETERMINER LES CONDITIONS DE SWAP).
<                     ='FONCTION' DANS LE CAS DES 'SVC'
<                      MEMOIRE OU BIEN DODO (ENFIN TOUT
<                      CEUX QUI ARRIVENT EN 'Z61'...).
<
<
<        NOTA :
<                      LA FONCTION DEMANDEE PERMET
<                    DE SAVOIR SI (AMESC) DONNE UNE
<                    ADRESSE MEMOIRE OU PAS...
<
<
< TEST DE LA NATURE DE LA FONCTION :
<
         ANDI        MASSFF          < (A)=BITS13-15 DE LA FONCTION
                                     <     DEMANDEE.
         CPI         FGX             < LA FONCTION DEMANDEE EST-ELLE
                                     < UNE E/S EFFECTIVE...
         LA          AMESC           < MISE DANS A DE AMESC...
         JG          E744            < CE N'EST PAS UNE E/S EFFECTIVE,
                                     < AMESC N'A PAS A ETRE TRANSLATEE.
<
< CAS D'UNE E/S EFFECTIVE : VALIDATION ET TRANSLATION
< DE AMESC ET VALIDATION DE COESC :
<
Z1213:   EQU         $               < ENTRY 'ACCES DIRECT A DKS1'.
         XR          Y,L             < POUR ATTEINDRE 'DCTSVC'...
         BSR         VAR+APSVC1      < VALIDATION DE :
                                     < (A)='AMESC',
                                     < (B)='COESC'.
                                     < A NOTER QU'AU RETOUR ON A :
                                     < (L)=ADRESSE DE 'DCTESC', ET
                                     < (Y)=SAUVEGARDE DE L'ADRESSE DE 'DCTSVC'.
         JNE         E745            < ET BIEN VOILA, C'EST TRES MAUVAIS :
                                     < SOIT 'AMESC', SOIT 'COESC', SOIT ENFIN
                                     < LEUR COMBINAISON SONT MAUVAISES !!!
         LXI         K               < MEMORISONS QUE L'E/S EST
                                     < EFFECTIVE PAR (X)=K. DANS LE
                                     < CAS CONTRAIRE, RAPPELONS
                                     < QUE L'ON A : (X)=NVP#0 !!!!
<
<        ON A ICI :
<                    (A)=ADRESSE OCTET TRANSLATABLE DU BUFFER ESCLAVE.
<                    (B)=COMPTE D'OCTETS.
<                    (X)=K.
<
         PSR         B
         PSR         A
         LA          RSLO+XXPSTD,L   < (A)=SLO
XWOR%3:  VAL         FADR*NOCMO=K    < POUR CONVERTIR UNE FADR-ADRESSE, EN UNE
                                     < ADRESSE D'OCTETS...
XWOR%4:  VAL         NBITMO-XWOR%3
         IF          XSLO32-XWOR%4,,XEIF%,
         IF          ATTENTION : LE CALCUL DES ADRESSES DITES ABSOLUES
         IF          DES BUFFERS ESCLAVES EST INCOMPATIBLE AVEC LA TAILLE
         IF          DES PAGES D'APPARTENANCE DES 'SLO' !!!
XEIF%:   VAL         ENDIF
         SLLS        XWOR%3          < (A)=SLO EN ADRESSE OCTETS
         LR          A,B             < (B)=SLO EN ADRESSE OCTETS
         PLR         A
         ADR         B,A             < (A)=ADRESSE OCTETS ABSOLUE
                                     <     DU BUFFER ESCLAVE ; MAIS ATTENTION !!
                                     <     C'EST ADRESSE N'EST QU'ABSOLUE RELA-
                                     <     TIVEMENT A DES PAGES DE 32K MOTS (CF.
                                     <     'XSLO32') AUXQUELLES APPARTIENNENT LE
                                     <     'SLO' DE L'ESCLAVE.
                                     < AINSI ON DECOUPE 'SLO' EN 2 PARTIES :
                                     < SLO32=NUMERO DE PAGE DE 32K,
                                     < SLOD=DEPLACEMENT DANS CETTE PAGE ;
                                     < 'SLO32' EST TRANSMIS VIA 'HDLSER', A LA
                                     < TACHE DEMANDEE PAR LE MOYEN DU COUPLE
                                     < 'XMDSLO'/'SLO' (VOIR 'CHAND' ET 'HANDLR')
                                     < 'SLOD' EST UTILISE POUR TRANSLATER
                                     < L'ADRESSE DU BUFFER QUI DEVIENT ABSOLUE
                                     < DANS UNE PAGE DE 32K (OUF...).
         PLR         B
         XR          A,B             < (A)=COMPTE OCTETS DE L'ECHANGE.
                                     < (B)=@OCTET DE DEBUT DU BUFFER.
         JMP         Z1213Y          < POUR SAUTER UN RELAI...
AE745:   JMP         E745            < RELAI VERS 'E745'...
Z1213Y:  EQU         $
         ADRI        -NOCMO+E,A      < POUR ADRESSER LE DERNIER OCTET,
         ADR         B,A             < (A)=ADRESSE-OCTET DE FIN DU BUFFER.
         JC          E746            < LE RESULTAT EST EN DEBORDEMENT,
                                     < L'ADRESSE OCTET OBTENUE EST
                                     < DONC REPASEE PAR LE 0, ET ON
                                     < EST RENTRE DANS LE SYSTEME !!!!
                                     < D'OU L'ABORT POUR VIOLATION
                                     < MEMOIRE (DEPASSEMENT DE SLE).
<
< LE CODE SUIVANT EST APPAREMMENT
< INUTILE (D'OU LA 'SYSER' IMPLANTEE
< A LA SUITE DE 'E746'...) :
<
         PSR         B               < SAUVEGARDE DE L'ADRESSE ABSOLUE (DANS
                                     < UNE PAGE DE 32K) DU DEBUT DU BUFFER (IL
                                     < S'AGIT DE PLUS D'UNE ADRESSE-OCTETS).
XWOR%1:  VAL         NOCMO=K
         SLRD        NBITMO+XWOR%1   < QUE L'ON CONVERTIT EN UNE ADRESSE-MOTS :
                                     < (B)=ADRESSE-MOTS DU DERNIER MOT DU BUFFER
                                     <     (DANS UNE PAGE DE 32K...)
         LA          RSLO+XXPSTD,L   < (A)=(SLO),
         SLLS        XWOR%3          < ET CONVERSION EN UNE ADRESSE-OCTET.
         ADRI        -SLOESC-Z*NOCMO,A
         AD          DEMSWP-DCTESC+T+CODEM,L
         SLRS        XWOR%1          < (A)=ADRESSE DU DERNIER MOT DE L'ESPACE
                                     <     UTILISATEUR (DANS UNE PAGE DE 32K).
         JNC         E744X1          < OK, IL S'AGIT D'UN NOMBRE ENTIER DE MOTS.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT LA LONGUEUR
<                    D'UN SWAPPING PEUT ETRE UN NOMBRE
<                    IMPAIR D'OCTETS !!!
<
E744X1:  EQU         $
         CPR         A,B             < ALORS, Y-A-T'IL VIOLATION ???
                                     < (A)=ADRESSE-MOT DU DERNIER MOT DE
                                     <     L'ESPACE MEMOIRE UTILISATEUR,
                                     < (B)=ADRESSE-MOT DU DERNIER MOT DU
                                     <     BUFFER ARGUMENT.
         PLR         B               < RESTAURATION DE (B)=ADRESSE OCTETS ABSO-
                                     < LUE RELATIVEMENT A UNE PAGE DE 32K DU
                                     < BUFFER UTILISATEUR...
         JG          E746            < ET OUI, IL Y A VIOL (OH...) : ERREUR !!!
         LR          B,A             < (A)=ADRESSE OCTETS ABSOLUE (RELATIVEMENT
                                     <     A UNE PAGE DES 32K) DU BUFFER DE L'UT
                                     <     LISATEUR...
<
< POURSUITE DE LA GENERATION DE 'DEMESC' :
<
E744:    EQU         $
         STA         DEMESC-DCTESC+T+AMDEM,L
         LA          DEMESC-DCTESC+T+CODEM,L
         CPI         NOCMO*LBUFES+NOCMO-Z < CARY=1 SI CODEM<"CONSTANTE"...
<
< RESTAURATION DANS A DU NSP DU SERVICE DEMANDE :
<
         LBY         DEMESC-DCTESC+XXNSP,L
<
< SUPPRESSION DU SWAPPING POUR LES DEMANDES
< ESCLAVES PORTANT SUR DES LONGUEURS
< D'ECHANGES SUPERIEURES A LA LONGUEUR
< DU BUFFER DE DCTESC :
<
         JC          Z44             < NSP INCHANGE SI CODEM<2*LBUFES+1.
         CPZR        X               < L'E/S ETAIT-ELLE EFFECTIVE ???
         JNE         Z44             < NON, DONC LA VALEUR DU
                                     < CODEM EST IGNORE !!!
<
< CAS D'UNE E/S EFFECTIVE AVEC CODEM>2*LBUFES :
<
         CPI         NSPVIN+E        < EST-ON SUR UN TERMINAL DE TYPE
                                     < VISU, ET DONC INTERACTIF ???
         JL          E745            < DANS LE CAS NSP<HINSP, ON LIMITE
                                     < LES COMPTES D'OCTETS A 2*LBUFES...
XWOR%1:  VAL         NSPDUM=K
         SBT         NBITMO-B-XWOR%1 < DANS LE CAS CODEM>2*LBUFES,
                                     < ON MAJORE LE NSP DEMANDE TEL
                                     < QUE NSP>HINSP, ET QU'AINSI,
                                     < IL N'Y AIT PAS DE SWAPPING.
Z44:     EQU         $
<
<
<        D I S C R I M I N A T I O N   D E   L A   M E M O I R E
<        H A U T E   E T   D E   L A   M E M O I R E   B A S S E ,
<        E T   C H O I X   D ' U N   N I V E A U   D E   S E R V I C E  :
<
<
<        NOTA :
<                    (A)=NSP DU SERVICE DEMANDE,
<                    OU NEGATIF SI LE SERVICE EST IMMEDIAT
<                    OU S'EST TERMINE IMMEDIATEMENT
<                    POUR CAUSE D'ERREUR...
<
<
E741:    EQU         $
         XR          Y,L             < AFIN DE POUVOIR FAIRE LE 'BR' QUI SUIT...
         BR          VAR+AE741X      < LE MODULE CORRESPONDANT EST PLUS LOIN
                                     < A CAUSE DES SAUTS RELATIFS SUPERIEURS
                                     < A 128 MOTS !!!
         PAGE
<
<
<        T R A I T E M E N T   D E S   S E R V I C E S
<                    I M M E D I A T S  :
<
<
<        F O N C T I O N S   I M M E D I A T E S  :
<
<
<                    FONCTION 0 : END-JOB,
<                                 (INACCESSIBLE DIRECTEMENT MEME
<                                 SOUS :SYS !!!).
<                    FONCTION 1 : APPEL DU CCI INTERACTIF,
<                    FONCTION 2 : APPEL DU CCI NON INTERACTIF,
<                    FONCTION 3 : CONNEXION A UN NSP (RESERVE A :SYS),
<                    FONCTION 4 : CHANGEMENT DE LA TAILLE DE
<                                 L'ESPACE MEMOIRE UTILOSATEUR,
<                    FONCTION 5 : MISE EN SOMMEIL DE L'ESCLAVE,
<                    FONCTION 6 : CETTE FONCTION EST VIDE, ET SE
<                                 CONTENTE DE DEMANDER AU SCHEDULER
<                                 UNE REACTIVATION DE L'ESCLAVE ; ELLE
<                                 PERMET DONC A UN ESCLAVE DE PASSER
<                                 LA MAIN PERIODIQUEMENT LORS DE
<                                 CALCULS LONGS ET PERIODIQUES !!!
<                    FONCTION 8 : FAUSSE LECTURE ; PERMET DONC DE
<                                 RECUPERE LE CONTENU DE BUFESC, AVEC
<                                 ACCES EVENTUEL AU PREALABLE A LA ZONE
<                                 DE DONNEES COMMUNES ZDC.
<                    FONCTION A : FAUSSE ECRITURE ; PERMET DONC DE
<                                 DE METTRE DE L'INFORMATION DANS
<                                 BUFESC, SUIVI D'UNE MISE A JOUR
<                                 EVENTUELLE DE LA ZDC.
<
<
SERVIM:  EQU         $
         LA          NVPFON          < RECUPERATION DE LA FONCTION.
         ANDI        MASSFO
         CPI         NFON            < VALIDATION DE LA FONCTION.
         JGE         E743            < FONCTION ERRONNEE.
         LR          A,X             < (X)=FONCTION DEMANDEE.
         PSR         A,L
         LR          Y,L             < (L)=ADRESSE DE 'DCTSVC' :
         LA          DCTFUP          < (A)=LISTE DES ALTITUDES DES FONCTIONS
                                     <     IMMEDIATES :
         TBT         L,X             < LA FONCTION (X) PEUT-ELLE S'EXECUTER
                                     < EN MEMOIRE HAUTE ???
         PLR         A,L             < RESTAURATION DE :
                                     < (A)=FONCTION DEMANDEE, ET
                                     < (L)=ADRESSE DE 'DCTESC'.
         JC          SERVIP          < ET OUI, LA FONCTION (X) PEUT S'EXECUTER
                                     < EN MEMOIRE HAUTE, ALLONS-Y...
         BSR         ADOWN           < ET BIEN NON, IL FAUT FAIRE DESCENDRE
                                     < L'UTILISATEUR :
         JNE         SERVIP          < OK, IL EST DEJA EN BAS...
         LXI         FONHAU          < NON, IL FAUT ATTENDRE QU'IL SOIT EN
                                     < MEMOIRE BASSE, POUR CELA ON PREND UNE
                                     < FAUSSE FONCTION IMMEDIATE QUI SE CONTEN-
                                     < TE DE FAIRE SORTIR DE 'HDLSVC' EN RESTAU-
                                     < RANT 'L'...
SERVIP:  EQU         $
<
<        ON A ICI :
<                    (L)=ADRESSE DCT(ESCLAVE),
<                    (W)=ADRESSE ABSOLUE DES ARGUMENTS ESCLAVE.
<                    (Y)=ADRESSE DCT(SVC).
<                    (A)=(X)=FONCTION ((A) EST UTILISE LORS DES FONCTIONS
<                            FONFR ET FONFW QUI VONT DIRECTEMENT
<                            EN Z69).
<
         BR          &ARSIM          < EXECUTION SPECIFIQUE DES FONCTIONS.
                                     < ON NOTERA INTELLIGEMMENT QUE LA BASE
                                     < 'L' EST INDISPONIBLE POUR 'DCTSVC',
                                     < ET QUE DONC AINSI, LE RELAI 'ARSIM'
                                     < DOIT ETRE DANS LE COMMON...
<
<
<        A T T E N T I O N  :
<                      EN GENERAL, UNE FONCTION SE
<                    TERMINERA PAR UN 'JMP E740',
<                    AVEC :
<
<                    (A)=CONDITION DE L'EXECUTION DU SERVICE IMMEDIAT.
<
<
<        E R R E U R S   I M M E D I A T E S  :
<
<
<        CODE ERREURS IMMEDIATS :
<
<        '81 : NVP NON ASSIGNE,
<        '82 : NVP INEXISTANT,
<        '83 : FONCTION INEXISTANTE,
<        '84 : 'COESC', 'AMESC' OU LES DEUX SONT MAUVAIS,
<              CE PEUT ETRE AUSSI L'ADRESSE SECTEUR SUR 'DKS1' MAUVAISE...
<        '85 : ERREUR NE POUVANT PLUS SE PRODUIRE ?!??!?!
<        '86 : ADRESSE DES ARGUMENTS ERRONNE (<0 OU >SLE).
<
<
<*******************************************************************************
ESNNA::  VAL         '81             < NVP NON ASSIGNE,
ESNI::   VAL         '0@@@@+I        < NVP INEXISTANT,
ESFI::   VAL         '0@@@@+I        < FONCTION INEXISTANTE,
ESCOE::  VAL         '0@@@@+I        < 'AMESC', 'COESC' OU LES 2 ERRONNES,
ESVM::   VAL         '0@@@@+I        < ERREUR BIZARRE !??!?!?!
ESAAE::  VAL         '0@@@@+I        < ADRESSE DES ARGUMENTS ERONEE.
<*******************************************************************************
<
<
Z100:    EQU         $
         LAI         ESAAE           < @ARGUMENTS ERRONNEE.
         JMP         E740
E739:    EQU         $
         LAI         ESNNA           < NVP NON ASSIGNE.
         JMP         E740
E742:    EQU         $
         LAI         ESNI            < NVP INEXISTANT.
         JMP         E740
E743:    EQU         $
         LAI         ESFI            < FONCTION INEXISTANTE.
         JMP         E740
E745:    EQU         $
         LAI         ESCOE           < 'AMESC', 'COESC' OU ADRESSE SECTEUR
                                     < SUR 'DKS1' MAUVAISES...
         JMP         E740
E746:    EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      THEORIQUEMENT, CETTE ERREUR
<                    NE PEUT PLUS SE PRODUIRE, IL
<                    FAUT DONC CORRIGER EN CONSEQUENCES !!!
<
         LAI         ESVM            < VIOLATION DE SLE.
                                     < (ET DE SLO PAR LA MEME OCCASION)
         JMP         E740
<
<
<        N S P   D U M M Y  ,   O U
<        F I N   D ' A C T I O N   I M M E D I A T E
<        E T   R E N V O I   D E S   C O N D I T I O N S
<        D ' E X E C U T I O N   A   L ' E S C L A V E   D A N S   X  :
<
<
<        ON A ICI :
<                    (A)=CONDITION D'EXECUTION IMMEDIATE.
<
E740:    EQU         $
<*******************************************************************************
         BSR         ASTXES          < EXECUTION DU STORE X(ESCLAVE) SUIVANT :
         STA         RX+XXPSTD,L     < LES CONDITIONS DE RETOUR SONT
<*******************************************************************************
                                     < MISES DANS LE REGISTRE 'X' DE
                                     < L'ESCLAVE.
         LAI         NSPVID-I        < AFIN DE N'ACCEDER QU'A L'AUTOMATE
                                     < DE RE-ACTIVATION.
         JMP         E741            < ALLONS REACTIVER L'ESCLAVE...
ZZ61:    JMP         Z61             < RELAI D'ACCES A Z61...
                                     < (UTILISE PAR 'SVCMEM')
         PAGE
<
<
<        F O N C T I O N   D ' A P P E L   D E   C C I  :
<
<
<        FONCTION :
<                      CE 'SVC' RECUPERE LES DEMANDES
<                    ESCLAVE DESTINEE AU 'CCI' ; SON
<                    SEUL TRAVAIL EST DE DETERMINER
<                    L'AUTOMATE QUI REALISERA LE MIEUX
<                    POSSIBLE CET APPEL, A MOINS QU'UN
<                    'LOGOUT' N'AIT ETE DEMANDE, AUQUEL
<                    CAS, IL PASSE LA MAIN A 'EJ'...
<
<
         USE         L,DCTESC
SVCCCI:  EQU         $
         LAI         LCCI
         STA         DEMESC-DCTESC+T+CODEM,L
                                     < MISE EN PLACE DE LA LONGUEUR MAXIMALE
                                     < DES MESSAGES AU 'CCI', EN VUE DE SA
                                     < MISE DANS 'MBUFGR' POUR 'CARAC'...
<
< TEST D'UN EVENTUEL LOG-OUT DEMANDE A L'APPEL PRECEDENT :
<
         LA          RECOTO          < ACCES A L'INDEX COURANT DE
                                     < LA GRAMMAIRE DU CCI POUR CET
                                     < ESCLAVE.
         CP          INFINI
         JE          SVCEJ           < EFFECTIVEMENT, UN LOG-OUT
                                     < EST DEMANDE.
<
< CAS D'UN APPEL STANDARD AU CCI :
<
         CPZ         RS+XXPSTD,L     < DISCRIMINATION DE L'APPEL :
                                     < 1- PAR SVC : S(ESCLAVE) MAITRE,
                                     < 2- PAR QUIT : S(ESCLAVE) ESCLAVE.
         JL          Z840            < L'ESCLAVE EST EN MODE MAITRE,
                                     < L'APPEL A DONC EU LIEU PAR SVC.
<
< CAS D'UN ESCLAVE EN MODE ESCLAVE ;
< L'APPEL A DONC EU LIEU PAR QUIT :
<
         DC          RP+XXPSTD,L     < ON DECREMENTE DIRECTEMENT LE
                                     < REGISTRE P DE L'ESCLAVE, AFIN
                                     < DE BOUCLER SUR L'APPEL AU CCI.
         JMP         Z841
<
< CAS D'UN ESCLAVE EN MODE MAITRE ;
< L'APPEL A DONC EU LIEU PAR SVC :
<
Z840:    EQU         $
                                     < LE REGISTRE P(ESCLAVE) DE RETOUR
                                     < EST DECREMENTE D'1 AFIN DE
                                     < BOUCLER SUR LE SVC CCI ; CE
                                     < BOUCLAGE A POUR EFFET DE LIBERER
                                     < A CHAQUE FOIS LE HANDLER DE SERVICE.
         PSR         Y               < SAUVEGARDE DE L'ADRESSE DE 'DCTSVC'...
         LY          RK+XXPSTD,L     < (Y)=POINTEUR DE PILE RELATIF,
         LAR                         < (A)=CONTENU DU SOMMET DE LA PILE, C'EST-
                                     <     A-DIRE 'P' DE RETOUR D'UN 'SVC'
                                     <     "NORMAL"...
         ADRI        -D,A            < AFIN DE BOUCLER SUR LE 'SVC' DU 'CCI'...
         STAR                        < ET MODIFICATION DE LA PILE 'K'...
         PLR         Y               < (Y)=ADRESSE DE 'DCTSVC'...
Z841:    EQU         $
         LXI         PHIN
         LBY         &TASSGN         < ACCES A NSPIN DANS TASSGN.
         LR          A,B             < (B)=NSPIN DE L'ESCLAVE.
         LXI         PHOUT
         LBY         &TASSGN         < (A)=NSPOUT DE L'ESCLAVE.
         LXI         XOTCNP          < PREPARATION DE L'INDEX D'ACCES
                                     < A LA TABLE DES AUTOMATES DE SVC.
<
< RECHERCHE DE MIN(NSPIN,NSPOUT) ; EN EFFET C'EST CE
< MIN QUI DECIDE DU SWAPPING OUT A PRIORI DE L'ESCLAVE
< DEMANDEUR DE CCI. SI NSPIN ET NSPOUT SONT SUPERIEURS OU EGAUX
< A HINSP, IL N'EST PAS NECESSAIRE DE SWAPPER, PAR
< CONTRE SI UN UN SEUL DES 2 EST INFERIEUR A HINSP,
< IL FAUT SWAPPER A PRIORI.
<
         CPR         B,A
         JLE         AE776           < OK : (A)=NSPOUT=MIN(NSPIN,NSPOUT).
         XR          A,B             < (A)=NSPIN=MIN(NSPIN,NSPOUT).
         JMP         AE776           < ALLONS SELECTER LE BON AUTOMATE.
         PAGE
<
<
<        F O N C T I O N   E N D - J O B  :
<
<
<        FONCTION :
<                      CE 'SVC' SYNCHRONISE LE
<                    DISPATCHER 'EJ' ; L'ADRESSE
<                    DE LA 'DCTESC' A RELEASER EST
<                    TRANSMISE PAR L'INTERMEDIAIRE
<                    DE LA TABLE 'TBU' : L'ENTREE
<                    CORRESPONDANTE VOIT SON BIT
<                    'BITX' MIS A 1...
<
<
<        ARGUMENT :
<                    (L)=ADRESSE DCT(ESCLAVE).
<
<
         USE         L,DCTESC
SVCEJ:   EQU         $
         LX          IDESC
         LAI         MKIDES
         ANDR        A,X             < (X)=ID. ESCLAVE.
         LA          &ATBU           < ACCES A L'ENTREE (ID) DE TBU.
         CPR         A,L             < VERIFICATION...
         JE          SYSR26          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      JE NE SAIS PAS, MAIS ATTENTION,
<                    DANS LE CODE QUI SUIT, IL Y A
<                    UNE RESTAURATION DE LA BASE 'L'
<                    PAR LE REGISTRE 'Y' QU'IL NE FAUDRAIT
<                    PAS MANQUER !!!
<
SYSR26:  EQU         $
         SBT         BITX            < POSITIONNEMENT DU BIT0 DE
                                     < TBU(ID) POUR HDLEJ.
         STA         &ATBU           < MAJ DE TBU.
         XR          Y,L             < RESTAURE (L)=ADRESSE DE 'DCTSVC'.
         USE         L,DCT0
         PSR         A
         LAD         &VAR+SEJ
         BSR         ARLSE           < SYNCHRONISATION DE HDLEJ
         PLR         A
         JMP         AE762           < ET C'EST TOUT. A T T E N T I O N
                                     < DANS LE CAS DE END-JOB, ON N'
                                     < N'ALLOUE PAS DE HANDLER DE SERVICE
                                     < A L'ESCLAVE DANS RUN-SVC, ET
                                     < SURTOUT, ON NE LE RACTIVE PAS...
         PAGE
<
<
<        C H A N G E M E N T   D E   L A   T A I L L E
<        D E   L ' E S P A C E   M E M O I R E   D E
<                    L ' E S C L A V E  :
<
<
<        FONCTION :
<                      CE SVC EST EN GENERAL UN FAUX SERVICE
<                    IMMEDIAT. IL RECOIT LES DEMANDES
<                    DE CHANGEMENT DE TAILLE DE L'ESPACE
<                    MEMOIRE ESCLAVE.  C'EST UN FAUX SERVICE
<                    IMMEDIAT, CAR ON NE PEUT CHANGER LA TAILLE
<                    DE L'ESPACE MEMOIRE ESCLAVE, QU'APRES
<                    QUE CET ESPACE AIT ETE RELEASE (SINON
<                    GARE AU RECOVERY), C'EST A DIRE APRES QUE
<                    LE SWAPPING OUT AIT ETE FAIT. LE SEUL
<                    ENDROIT RAISONNABLE OU REALISER CE
<                    CHANGEMENT EST DANS 'SERESC'.
<                    DONC, LORSQUE SERESC RECONNAITRA UN
<                    FAUX SERVICE IMMEDAIT (NSP DEMANDE
<                    NUL), ELLE EXECUTERA ELLE-MEME CE
<                    SERVICE ; L'OPDEM INDIQUE ALORS LE
<                    SERVICE DEMANDE.
<
<
<        ARGUMENTS :
<                    (COESC)=TAILLE EN OCTETS DEMANDEE,
<                    (L)=ADRESSE DCT(ESCLAVE).
<
<
SVCMEM:  EQU         $
         LA          COESC           < (A)=NBRE D'OCTETS DEMANDES.
         CP          DEMSWP-DCTESC+T+CODEM,L
         JE          Z67             < ON LES POSSEDE DEJA, RIEN A
                                     < FAIRE.
<
< VALIDATION DE LA TAILLE DEMANDEE :
<
XWOR%6:  VAL         LK*NOCMO=K      < LK*NOCMO EST LA TAILLE OCTET MINIMALE
                                     < DISPONIBLE POUR L'UTILISATEUR.
         SCLS        NBITMO-B-XWOR%6
         CP          INFINI          < EST-CE UNE DEMANDE '800 OCTETS ??
         JE          Z745            < OUI, OK.
         JAE         E745            < ERREUR... A NOTER QU'ON FAIT D'ABORD
                                     < UN 'JAE', PUIS UN 'JAL' ET NON PAS
                                     < UN 'JALE', AFIN QUE LE 'JAL' QUI SUIT
                                     < PUISSE SERVIR DE RELAI !!!
JAL745:  JAL         E745            < ERREUR... ET RELAI !!!
         WORD        CPIMEM          < VALIDATION DU COESC...
         JG          E745            < ERREUR ; SEULES SONT AUTORISEES
                                     < LES TAILLES DE :
                                     < -'800 OCTETS (1K MOT),
                                     < -'1000 OCTETS (2K MOTS),
                                     < -'2000 OCTETS (4K MOTS).
                                     < -'3000 OCTETS (6K MOTS),
                                     < -'4000 OCTETS (8K MOTS).
                                     < -'5000 OCTETS (10K MOTS),
                                     < -'6000 OCTETS (12K MOTS).
                                     < -'7000 OCTETS (14K MOTS),
                                     < -Q8000 OCTETS (16K MOTS).
Z745:    EQU         $
         LA          COESC
         SLRS        NOCMO=K         < CONVERSION EN UNE TAILLE-MOT.
         CPZ         PSTESC-DCTESC+RS,L < DISCRIMINATION DES APPELS
                                       < PAR SVC, DES APPELS PAR QUIT.
         JL          Z850            < L'ESCLAVE EST EN MODE MAITRE,
                                     < L'APPEL A DONC EU LIEU PAR SVC,
                                     < ET L'ADRESSE DE RETOUR EST DANS
                                     < LA PILE K.
<
< CAS D'UN ESCLAVE EN MODE ESCLAVE : L'APPEL
< A EU LIEU PAR QUIT, ET LE P DE RETOUR
< EST LE P DU CONTEXTE ESCLAVE :
<
         CP          PSTESC-DCTESC+RP,L
         JMP         Z851            < VERS L'ERREUR EVENTUELLE.
<
< ESCLAVE EN MODE MAITRE:APPEL PAR SVC,
< PSTESC CONTIENT LE 'P' DE RETOUR
<
Z850:    EQU         $
         PSR         A,B,Y
         LR          A,B             < (B)=TAILLE MEMOIRE DEMANDEE
         LY          PSTESC-DCTESC+RK,L < Y RECOIT LE 'K' DE
                                     < L'ESCLAVE, RELATIF AU 'SLO'
                                     < DE L'ESCLAVE.
         LAR                         < 'SLO' EST BON
         CPR         A,B             < VALIDATION DE 'K'
         PLR         A,B,Y
<
< BRANCHEMENT EN VIOLATION MEMOIRE EVENTUELLE :
<
Z851:    EQU         $
         JLE         E745            < LA TAILLE DEMANDEE EST INFERIEURE
                                     < AU REGISTRE P DE RETOUR, ON
                                     < COURT VERS UNE VIOLATION
                                     < MEMOIRE : ALLOCATION REFUSEE.
<
< OK, CAS OU COESC EST BON :
<
         LAI         FONMEM          < (A)=FONCTION DEMANDEE, EN VUE DE
                                     <     SA MISE EN PLACE EN OPDEM DE
                                     <     DEMESC (POUR SERESC).
<
<        F I N   1 E R E   P A R T I E   D ' U N
<        F A U X   S E R V I C E   I M M E D I A T  :
<
Z69:     EQU         $
<
<        ON A ICI :
<                    (A)=FONCTION DEMANDEE.
<
         STZ         DEMESC-DCTESC+XXNSP,L < MISE EN PLACE D'UN NSPTYP NUL
                                     < A DESTINATION DE SERESC.
         JMP         ZZ61            < FAISONS COMME SI LE SERVICE
                                     < N'ETAIT PAS IMMEDIAT.
<
<        A T T E N T I O N  :
<                    ICI, ON A (X)#0 (=NUMERO DE BIT : 2,3,4). CECI
<                    EST PARFAIT A CAUSE DES TESTS QUI VONT
<                    SUIVRE EN E754 (BLOCAGE SWAPPING A EVITER
<                    DE TOUTE EVIDENCE!!!!).
<
         PAGE
<
<
<        C O N N E X I O N   A   U N   N S P  :
<
<
<        FONCTION :
<                      CE SVC PERMET, LORSQU'UN ESCLAVE
<                    TRAVAILLE SOUS :SYS DE MODIFIER EN
<                    COURS D'EXECUTION LA TABLE DES AS-
<                    SIGNATIONS ('TASSGN') SANS VERIFICATION
<                    D'ASSIGNATION PREALABLE ; ON PEUT
<                    DONC AINSI FAIRE UNE DESASSIGNATION...
<                      SI LE 'NSP' DEMANDE EST SUPERIEUR
<                    A 'NSPINI', ALORS LA CONNEXION NE
<                    SE FAIT PAS (ERREUR '83), ET DE PLUS
<                    BOXESC <-- 'NSP' ASSIGNE AU 'NVP'
<                    DEMANDE ; ON PEUT AINSI TESTER L'ETAT
<                    DES ASSIGNATIONS...
<
<
<        ARGUMENT :
<                    (L)=ADRESSE DCT(ESCLAVE),
<                    (Y)=ADRESSE DCT(SVC).
<
<
         USE         L,DCT0
SVCNSP:  EQU         $
         XR          Y,L             < (L)=@DCT-SVC.
         LA          ACNSYS          < MOT0 DE L'ACN DU SYSTEME.
         LB          ACNSYS+U        < MOT1 DE L'ACN DU SYSTEME.
         XR          Y,L             < RESTAURE (L)=@DCT-ESCLAVE.
<
< VALIDATION DU DEMANDEUR :
<
         CP          ACNESC-DCTESC,L
         JNE         E743            < ACN NON AUTORISE.
         LR          B,A
         CP          ACNESC-DCTESC+U,L
         JNE         E743            < ACN NON AUTORISE.
         LA          MEMV
         TBT         MEMXXX          < CE 'SVC' N'EST-IL PAS INHIBE ???
         JNC         E743            < ET OUI...
<
< OK, LE DEMANDEUR TRAVAILLE SOUS :SYS :
<
<
<        FORMAT AMESC :
<                    OCTET0(AMESC)=NUMERO DE L'ENTREE DESIREE DANS
<                                  LA TABLE TASSGN (=NVP).
<                    OCTET1(AMESC)=NSP DEMANDE, SOIT :
<                                  '00 : DISCONNEXION,
<                                  PHIN/PHOUT : !ASSIGN I/O,
<                                  DE PHIN+PHOUT+1/2+1 A NSPNINI :
<                                    !ASSIGN <NVP>=<NSP>.
<
<
         LBY         AMESC           < (A)=NUMERO DE L'ENTREE DE TASSGN.
         JAE         E742            < ERREUR : NVP INEXISTANT.
         CPI         NOCMO*LTASGN    < VALIDATION.
         JGE         E742            < ERREUR : NVP INEXISTANT.
         LR          A,X             < (X)=NUMERO DE L'ENTREE DANS TASSGN.
         LA          AMESC
         ANDI        MOCD            < (A)='NSP' DEMANDE ; A NOTER QUE
                                     <     LE NSP DEMANDE PEUT ETRE NUL,
                                     <     ON FAIT DONC ALORS UNE DISCON-
                                     <     NEXION !!!!
         CPI         NSPINI          < VALIDATION NSP DEMANDE.
         JG          E743XY          < ERREUR, RENVOYONS LE 'NSP' ASSIGNE
                                     < DEJA AU 'NVP' DEMANDE.
         JAE         Z67X            < CAS D'UNE DECONNEXION...
         PSR         A,X,L
         LR          A,X
         BSR         ACADCT          < (A)=L=ADRESSE DCT(X).
         LA          DCTFON          < ACCES A LA LISTE DES FONCTIONS
                                     < ACCESSIBLES...
         CPI         XXDCTF          < EST-CE UNE 'DCT' INACCESSIBLE ???
         PLR         A,X,L
         JE          E742            < OUI, CONNEXION REFUSEE !!!
Z67X:    EQU         $
         LR          A,B             < SAUVEGARDE DU 'NSP' DEMANDE DANS 'B'...
         LBY         &TASSGN-DCTESC,L
                                     < (A)='NSP' ANTERIEUR EVENTUEL,
                                     < (B)='NSP' DEMANDE...
         XR          A,B             < RESTAURE :
                                     < (A)='NSP' DEMANDE,
                                     < (B)='NSP' ANTERIEUR EVENTUEL...
         CPZR        B               < Y-AVAIT'IL UN 'NSP' ANTERIEUR ???
                                     < A NOTER QU'ON FAIT CE TEST SUR 'B'
                                     < ET NON PAS AVANT LE 'XR' SUR 'A'
                                     < AFIN QUE LES REGISTRES SOIENT RETABLIS
                                     < AVANT L'EVENTUELLE 'SYSER'...
         JE          Z67Y            < OK, LE 'NVP' DEMANDE (X) N'ETAIT PAS
                                     < ASSIGNE...
         BSR         ASYSER          < A V E R T I S S E M E N T ...
<
<        QUE FAIRE ???
<                      EXAMINER LE 'NSP' ANTERIEUR DANS
<                    LE REGISTRE 'B' ; SI CELUI-CI EST
<                    PAR EXEMPLE 'DKF', ON PEUT L'ECRA-
<                    SER SANS PROBLEME, MAIS S'IL S'AGIT
<                    D'UNE UNITE ASSIGNABLE PAR "!ASSIGN",
<                    OU PIRE D'UN FICHIER, IL FAUT FAIRE
<                    ATTENTION : ON POURRA PAR EXEMPLE
<                    SAUTER EN 'Z67' POUR UN RETOUR OK,
<                    OU EN 'E743XY' POUR UN RETOUR EN
<                    ERREUR !!!
<
Z67Y:    EQU         $
<
< OK, MODIFICATION DE TASSGN :
<
         STBY        &TASSGN-DCTESC,L
<
<        F I N   S E R V I C E   I M M E D I A T   O K   ,
<        O U   P A S S A G E   D E   M A I N    D E
<                    L ' E S C L A V E  :
<
Z67:     EQU         $
         LAI         K               < RETOUR OK D'UN SERVICE IMMEDIAT.
         JMP         E740
<
< RENVOI DE L'ETAT D'UNE ASSIGNATION 'NVP' -->...
<
E743XY:  EQU         $
         LBY         &TASSGN-DCTESC,L
         STA         BOXESC-DCTESC,L < ON RENVOIE LE 'NSP' ASSIGNE AU
                                     < 'NVP' ARGUMENT DANS 'BOXESC'.
         JMP         E743            < VERS L'ERREUR 'NSP' INEXISTANT...
         PAGE
<
<
<        A P P E L   D U   C C I   E N
<        M O D E   N O N   I N T E R A C T I F  :
<
<
<        FONCTION :
<                      CE SVC PERMET A UN PROGRAMME DE FAIRE
<                    ANALYSER DES COMMANDES DESTINEE
<                    A CCI QU'IL DONNE EN ARGUMENT DU SVC.
<                    ON PEUT AINSI DANS UN PROGRAMME FAIRE DES
<                    ASSIGN DYNAMIQUES, DU LANCEMENT DE JOB
<                    PARALLELES...
<
<
<        ARGUMENTS :
<                    (AMESC)=ADRESSE OCTET DE LA CARTE A ANALYSER,
<                    (COESC)=LONGUEUR DE LA CARTE A ANALYSER.
<                    (L)=ADRESSE DCT(ESCLAVE).
<
<
<        A T T E N T I O N  :
<                      CE 'SVC' EST EN FAIT UN FAUX SERVICE
<                    IMMEDIAT. IL NECESSITE L'APPEL DE 'OMOV1'
<                    AFIN DE TRANSPORTER LA CARTE
<                    A ANLYSER DANS BUFESC. DONC LE CODE
<                    DE SVC DOIT ETRE UNE ECRITURE ('02).
<
<
SVCCIM:  EQU         $
         LA          RECOTO-DCTESC,L < TEST D'UN LOGOUT DEMANDE A
                                     < L'APPEL PRECEDENT.
         CP          INFINI
         JE          SVCEJ           < OUI, DISCONNECT (END-JOB).
<
< VALIDATION PRIMAIRE DU COESC :
< (AFIN QU'ON FASSE UN OMOV1)
<
         LA          COESC
         CPI         LCCINT          < VALIDATION...
         IF          LBUFES*NOCMO-LCCINT,,XEIF%,XEIF%
         IF          ATTENTION : IL RISQUE D'Y AVOIR DEBORDEMENT
         IF          DES "CARTES" AU 'CCI' INTERPRETATIF AU-DELA
         IF          DU BUFFER 'BUFESC' DE L'UTILISATEUR' !!!
XEIF%:   VAL         ENDIF
JGE745:  JG          E745            < ERREUR : COESC TROP GRAND.
                                     < (ET RELAI...)
<
< OK, MEMORISATION DE L'ETAT CCI NON INTERACTIF :
<
         BSR         ASMMK           <<<< MASK IT
         LA          IDESC-DCTESC,L
         TBT         IDESCI          < VALIDATION IDESC.
         JNC         SYSR27          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ....
SYSR27:  EQU         $
         SBT         IDESCI          < MODE CCI NON INTERACTIF.
         STA         IDESC-DCTESC,L  < MAJ IDESC.
         BSR         ASMDK           <<<< DEMASK IT
         LAI         FOCCIM          < (A)=FONCTION DEMANDEE, EN VUE DE
                                     <     SA MISE EN PLACE EN OPDEM DE
                                     <     DEMESC (POUR SERESC).
         JMP         Z69             < VERS LA FIN DE LA 1ERE PARTIE
                                     < D'UN FAUX SERVICE IMMEDIAT.
         PAGE
<
<
<        M I S E   E N   S O M M E I L   P O U R   U N   T E M P S
<        D O N N E   D ' U N   E S C L A V E  :
<
<
<        FONCTION :
<                      1 - 1<=(COESC)<=60 :
<                      CE FAUX SERVICE IMMEDIAT MET EN SOMMEIL
<                    L'ESCLAVE POUR UN TEMPS DETERMINE (DE 1 A 60
<                    SECONDES), SANS REVEIL POSSIBLE ; EN EFFET L'ALT
<                    MODE SERA SANS EFFET (MAIS MEMORISE) JUSQU'A CE QUE
<                    LE TEMPS SE SOIT ECOULE (CF. DODO).
<                      2 - (COESC)=0 :
<                      CE FAUX SERVICE IMMEDIAT MET
<                    L'UTILISATEUR EN ATTENTE DE SYN-
<                    CHRONISATION SUR LE MOT 'CDAG0'
<                    DE LA 'CDAG'.
<
<
<        ARGUMENT :
<                    (COESC)=TEMPS EN SECONDES (1 A 60 SECONDES).
<
<
SVCDOR:  EQU         $
DODCDA:: VAL         K               < VALEUR DE 'COESC' PERMETTANT DE DEMANDER
                                     < LA SYNCHRONISATION SUR 'CDAG0'...
         LA          COESC           < VALIDATION DE LA DUREE DE
                                     < SOMMEIL DEMANDEE.
         IF          DODCDA-K,,XEIF%,
         IF          ATTENTION : LA VALEUR DE 'DODCDA' EST INCOM-
         IF          PATIBLE AVEC LE TEST CI-DESSOUS, ET AVEC
         IF          LES DUREES AUTORISEES DE SOMMEIL (DE 1 A 60) !!!
XEIF%:   VAL         ENDIF
         JAL         JAL745          < ERREUR (<0) !!!
         CPI         MINUTE
         JG          JGE745          < ERREUR PLUS DE 60 SECONDES
                                     < DEMANDEES...
<
< CAS OU LA DUREE DEMANDEE EST BONNE (1 A 60 SECONDES) :
<
         LAI         FONDOR          < (A)=FONCTION DEMANDEE, EN VUE DE SA
                                     <     MISE EN OPDEM DE DEMESC, POUR
                                     <     SERESC.
         JMP         Z69             < VERS LA FIN DE LA 1ERE PARTIE
                                     < D'UN FAUX SERVICE IMMEDIAT.
         PAGE
<
<
<        F A U S S E S   L E C T U R E S / E C R I T U R E S  :
<
<
<        FONCTION :
<                    1- LA FONCTION '08, OU FAUSSE LECTURE PERMET
<                    DE MODIFIER EVENTUELLEMENT QUELQUES UNS DES
<                    15 PREMIERS OCTETS DE BUFESC, A PARTIR DE CEUX
<                    DE MEME RANG DE ZDC, PUIS DE RENVOYER BUFESC A
<                    L'UTILISATEUR;
<                    2- LA FONCTION '0A OU FAUSSE ECRITURE PERMET A
<                    L'UTILISATEUR DE POSITIONNER BUFESC, PUIS
<                    EVENTUELLEMENT DE MODIFIER QUELQUES UNS DES
<                    15 PREMIERS OCTETS DE ZDC A PARTIR DE CEUX DE
<                    MEME RANG DE BUFESC.
<                      POUR LES 2 FONCTIONS, IL EST POSSIBLE
<                    D'ETRE MIS EN ATTENTE 2 SECONDES AVANT
<                    L'EXECUTION DE LA FONCTION ; C'EST TRES
<                    UTILE POUR LES PROGRAMMES QUI COOPERENT
<                    PAR CE MOYEN...
<
<
<        ARGUMENTS :
<                    (W)=ADRESSE DEMANDE ESCLAVE.
<                    (L)=ADRESSE DCT(ESCLAVE).
<                    ARGESC(DEMANDE DE L'EDCLAVE)=
<                                    BITS 0-14 : LISTE DE BITS VALIDANT
<                                                LES OCTETS DE MEME RANG (X)
<                                                DE LA 'ZDC' ET DE 'BUFESC' ;
<                                    BIT 15 :    INDICATEUR D'ATTENTE PREALABLE.
<
<
<        RESULTAT :
<                    (A)=FONFR/FONFW.
<
<
SVCZDC:  EQU         $
         LB          ARGESC          < ACCES A LA LISTE DE VALIDATION
                                     < DES 15 PREMIERS OCTETS DE BUFESC
                                     < ET DE LA ZONE COMMUNE ZDC ET DE L'INDI-
                                     < CATEUR DE PRE-ATTENTE.
         STB         ARGUM-DCTESC,L  < ET TRANSMISSION A 'SERESC' PAR
                                     < LE MOT VARIABLE 'ARGUM' DE DCTESC
         JMP         Z69             < VERS LA FIN DES FAUX SERVICES
                                     < IMMEDIATS.
         PAGE
<
<
<        O U   E S T   L ' E S C L A V E ,   E T
<        E N V O I   D E   L A   D E M A N D E
<                    D E   S E R V I C E  :
<
<
<        NOTA :
<                      CE MODULE EST PLACE ICI,
<                    MAINTENANT, PARCEQUE J'AI
<                    DES PROBLEMES DE SAUTS RE-
<                    LATIFS SUPERIEURS A 128 MOTS !!!
<
<
AE776:   JMP         E776            < POINT DE PASSAGE DU 'CCI' INTERACTIF.
AE762:   JMP         E762            < EN HAUT, IL FAUT LE FAIRE REDESCENDRE...
                                     < (ET RELAI POUR LE 'END-JOB'...).
<
< AUTRES CAS (QUE 'CCI'
< INTERACTIF ET 'END-JOB') :
<
E741X:   EQU         $
         XR          Y,L             < RESTAURE (Y)=ADRESSE DE 'DCTSVC', ET
                                     < (L)=ADRESSE DE 'DCTESC'.
<
<
<        P O S I T I O N   D E   L ' E S C L A V E  :
<
<
         PSR         A               < SAUVEGARDE DU 'NSP' DU SERVICE DEMANDE,
                                     < OU BIEN D'UNE VALEUR NEGATIVE SI LE
                                     < SERVICE DEMANDE EST IMMEDIAT...
         LRM         A
         WORD        SLOM1N          < (A)=PLUS PETIT 'SLO' POSSIBLE EN MEMOIRE
                                     <     DE SWAPPING,
         CP          PSTESC-DCTESC+RSLO,L
                                     < ALORS L'ESCLAVE EST-IL EN MEMOIRE BASSE,
                                     < OU EN MEMOIRE HAUTE (C'EST-A-DIRE DE
                                     < SWAPPING) ???
         PLR         A               < RESTAURE : (A)=IDENTIFICATEUR ('NSP',...)
                                     < DU SERVICE DEMANDE...
         JG          E741X5          < L'ESCLAVE EST EN BAS, ON PEUT ENVOYER LA
                                     < DEMANDE DE SERVICE IMMEDIATEMENT...
<
< CAS OU L'ESCLAVE EST EN HAUT :
<
         PSR         A               < SAUVEGARDE DE L'IDENTIFICATEUR ('NSP',
                                     < ...) DU SERVICE DEMANDE.
         JAGE        E741X1          < ET OUI, C'EST UN 'NSP'...
         LAI         NSPSVC          < LORSQU'IL S'AGIT D'UN SERVICE IMMEDIAT,
                                     < C'EST DIRECTEMENT 'DCTSVC' QUI VA DONNER
                                     < LA LISTE DES "ALTITUDES" 'DCTFUP'...
E741X1:  EQU         $
         ANDI        XNVPF)MOCD      < A CAUSE DES 'NSPSGF'...
         LR          A,X             < (X)='NSP' DU SERVICE DEMANDE (OU 'NSPSVC'
                                     <     DANS LE CAS D'UN SERVICE IMMEDIAT).
         PSR         L               < SAUVEGARDE DE L'ADRESSE DE 'DCTESC'...
         BSR         ACADCT          < RENVOIE : (A)=(L)=ADRESSE DE DCT(X)...
         LA          NVPFON
         ANDI        MASSFO          < RECALCUL DE (A)=FONCTION DEMANDEE,
         LR          A,X             < (X)=FONCTION DEMANDEE,
         LA          DCTFUP          < (A)=LISTE DES "ALTITUDES" DES FONCTIONS
                                     <     ASSOCIEES AU SERVICE DEMANDE,
         PLR         L               < RESTAURE : (L)=ADRESSE DE 'DCTESC',
         TBT         L,X             < ALORS, LA FONCTION (X) DEMANDEE PEUT-ELLE
                                     < S'EXECUTER EN HAUT ???
         JNC         E741X2          < ET BIEN NON, LA FONCTION DEMANDEE DOIT
                                     < IMPERATIVEMENT ETRE EXECUTEE EN MEMOIRE
                                     < BASSE (C'EST DOMMAGE...).
<
< CAS D'UNE FONCTION POUVANT S'EXECUTER EN HAUT :
<
         LA          IDDESC-DCTESC,L < ACCES A LA LISTE DES INDICATEURS :
         TBT         IDESC7          < VALIDATION ???
         JNC         E741X6          < OK, IDESC7=0...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE POURQUOI IDESC7=1,
<                    ALORS QU'IL EST REMIS A 0 DANS
<                    'RUNO' !!!
<
E741X6:  EQU         $
         SBT         IDESC7
         STA         IDDESC-DCTESC,L < ON INDIQUE AINSI A 'DOWN' QU'EN FAIT
                                     < IL NE FAUT PAS REDESCENDRE L'ESCLAVE,
                                     < ET FAIRE UN 'SERESC'...
<
< CAS D'UNE FONCTION NE POUVANT QUE S'EXECUTER EN BAS :
<
E741X2:  EQU         $
         BSR         ADOWN           < REVEIL DU NIVEAU DE SERVICE AUQUEL CET
                                     < ESCLAVE EST DEJA ATTACHE, AFIN DE :
                                     < - SOIT (SI IDESC7=0) FAIRE
                                     < DESCENDRE CET ESCLAVE EN MEMOIRE BASSE,
                                     < QUI EST MALHEUREUSEMENT SI RESTREINTE...
                                     < DE PLUS, 'DOWN' A PREPARE L'ITERATION
                                     < DE CETTE DEMANDE DE SERVICE ESCLAVE, AFIN
                                     < QU'ELLE SOIT REITERER ET DONC RECUE ALORS
                                     < QU'IL SERA EN MEMOIRE BASSE...
                                     < - SOIT (SI IDESC7=1) FAIRE UN 'SERESC'.
         PLR         A               < RESTAURE L'IDENTIFICATEUR ('NSP',...) DU
                                     < SERVICE DEMANDE...
         JE          E741X8          < OK, L'ESCLAVE EST BIEN EN MEMOIRE HAUTE..
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE POURQUOI L'ESCLAVE A ETE
<                    PRECEDEMMENT DETECTE EN MEMOIRE HAUTE,
<                    ET QU'ON LE TROUVE MAINTENANT EN BAS !!!
<
<
< CAS D'UN ESCLAVE SE TROUVANT EN MEMOIRE BASSE :
<
E741X5:  EQU         $
<
<
<        A L L O C A T I O N   D U   N I V E A U   D E   S E R V I C E  :
<
<
         LXI         XOTIM           < SERVICE IMMEDIAT A PRIORI...
         JAL         E738            < EFFECTIVEMENT...
         LXI         XOTNP           < NON, ON A DANS 'A' UN 'NSP'
E776:    EQU         $               < SORTIE RESERVEE AUX 'SVC CCI'.
         CPI         HINSP           < EST-CE UN NSP PRIORAITAIRE...
         ADCR        X               < ON A ICI :
                                     < (X)=1,3 : NSP>=(HINSP) : NON
                                     <     PRIORITAIRE,
                                     < (X)=2,4 : NSP<(HINSP) : NSP
                                     <     PRIORITAIRE.
E738:    EQU         $
<
< VALIDATION DE L'ESCLAVE :
<
         LRM         A
         WORD        SLOM2N          < (A)=PLUS PETIT 'SLO' POSSIBLE EN MEMOIRE
                                     <     HAUTE,
         CP          PSTESC-DCTESC+RSLO,L
                                     < ALORS OU EST L'ESCLAVE ???
         JG          E741X7          < OK, IL EST EN BAS...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT ON ARRIVE ICI
<                    AVEC UN UTILISATEUR EN MEMOIRE HAUTE ;
<                    C'EST CERTAINEMENT, UN MODULE QUI SE
<                    BRANCHE ICI DIRECTEMENT (CF. 'CCI') !!!
<
         BSR         ADOWN           < ET BIEN FAISONS LE DESCENDRE...
         JE          E741X8          < OK, IL ETAIT BIEN EN HAUT, ON RESSORT
                                     < DE 'HDLSVC'...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE QU'EST-CE QUE C'EST
<                    QUE CE BORDEL !!!
<
E741X7:  EQU         $
<
< TEST D'UN ACCES A 'DKU' :
< (NOTA IMPORTANT : IL NE
< FAUT PAS OUBLIER QUE L'
< UTILISATEUR EST EN BAS,
< ET QUE LES FONCTIONS
< 'FONTV', 'FONTVR' ET
< 'FONTVW' NE PEUVENT QUE
< S'EFFECTUER EN BAS; EN
< EFFET DANS LE CAS CONTRAI-
< RE, LE HANDLER DE SERVICE
< DEJA ALLOUE A L'UTILISA-
< TEUR NE PEUT RECEVOIR LES
< REFERENCES DE LA 'CDA' COU-
< RANTE PAR 'OPDEM'...)
<
         LBY         DEMESC-DCTESC+XXNSP,L
                                     < (A)='NSP' DE LA DEMANDE UTILISATEUR
                                     <     COURANTE,
         IF          NSPSG0-NSPDKU,XEIF%,,
         IF          ATTENTION : 'DKU' NE DOIT PAS ETRE AVANT LE
         IF          'SGN' SI L'ON VEUT QUE LA SUITE MARCHE BIEN !!!
XEIF%:   VAL         ENDIF
         CPI         NSPSG0          < EST-CE LE 'SGN' ???
         JL          E741XA          < NON, ET DONC ENCORE MOINS 'DKU'...
XWOR%1:  VAL         NSPNXS
XWOR%2:  VAL         NSPNXP
XWOR%3:  VAL         XWOR%1          < MIN(NXP,NXS) A PRIORI,
XWOR%4:  VAL         XWOR%2          < MAX(NXP,NXS) A PRIORI.
         IF          XWOR%2-XWOR%1,,XEIF%,XEIF%
XWOR%3:  VAL         XWOR%2          < MIN(NXP,NXS),
XWOR%4:  VAL         XWOR%1          < MAX(NXP,NXS).
XEIF%:   VAL         ENDIF
         IF          XWOR%4-XWOR%3-I,,XEIF%,
         IF          ATTENTION : 'NXP' ET 'NXS' DOIVENT ETRE CONTIGUS !!!
XEIF%:   VAL         ENDIF
         IF          NSPSGN-XWOR%4,,XEIF%,
         IF          ATTENTION : POUR QUE LES TESTS QUI SUIVENT
         IF          FONCTIONNENT CORRECTEMENT, 'NXP' ET 'NXS'
         IF          DOIVENT ETRE LES DERNIERS HANDLERS DU 'SGN' !!!
XEIF%:   VAL         ENDIF
         CPI         XWOR%3          < ALORS, EST-CE LE 'SGN' ???
         JL          E741XE          < OUI, C'EST 'DLN', 'STN', 'LON', 'LNS'
                                     < OU 'LNU'...
         IF          XWOR%4-NSPDKU,XEIF%,,
         IF          ATTENTION : 'DKU' NE DOIT PAS ETRE AU MILIEU DU 'SGN' !!!
XEIF%:   VAL         ENDIF
         CPI         NSPDKU          < EST-CE 'DKU' ???
         JNE         E741XA          < NON...
         LA          DEMESC-DCTESC+T+OPDEM,L
                                     < OUI :
         ANDI        MKOPDM          < (A)=FONCTION DEMANDEE,
         CPI         FONTV           < EST-CE L'INTERPOLATION BASSE DEFINITION ?
         JE          E741XB          < OUI...
         RBT         XBITQ           < SUPPRESSION DE LA DISCRIMINATION DES
                                     < QUANTA...
         WORD        CPFTVW          < EST-CE LE TRANSFERT : 'MEMTV' --> 'DKU' ?
         JE          E741XB          < OUI...
         WORD        CPFTVR          < EST-CE LE TRANSFERT : 'DKU' --> 'MEMTV' ?
         JNE         E741XA          < NON, IL NE S'AGIT NI DE 'FONTV', NI
                                     < DE 'FONTVW', NI DE 'FONTVR', ON LAISSE
                                     < DONC (SLO,SLE) INCHANGES...
E741XB:  EQU         $
E741XE:  EQU         $
         IF          NSPSVC-NSPSCH,XEIF%,,
         IF          ATTENTION : POUR QUE LA RECUPERATION DE LA
         IF          'CDA' DE L'UTILISATEUR COURANT PAR LES MOTS
         IF          'OCDA' ET 'ECDA' FONCTIONNE CORRECTEMENT,
         IF          FAUT QUE 'SVC' SOIT PLUS PRIORITAIRE QUE
         IF          'SCH', AFIN QUE 'SCH' N'AILLE PAS LES MODI-
         IF          FIER POUR LE COMPTE D'UN AUTRE UTILISATEUR
         IF          AVANT QU'ON NE LES AIT RECUPERES ICI !!!
XEIF%:   VAL         ENDIF
         XR          Y,L             < (L)=ADRESSE DE 'DCTSVC',
                                     < (Y)=ADRESSE DE 'DCTESC'.
         LA          &VAR+SVCDO      < (A)=ORIGINE DE LA 'CDA' COURANTE DE
                                     <     L'UTILISATEUR COURANT :
         LR          A,B             < QUE L'ON SAUVEGARDE DANS 'B',
         SLRS        XSLO32          < QUE L'ON RAMENE PAR DEFAUT A LA
         SLLS        XSLO32          < PAGE DE 32K LA PLUS PROCHE...
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
         IF          MCDAJO>XWOR%1>XSLO32-MCDAJO,,XEIF%,
         IF          ATTENTION : LA 'CDAJ' N'EST PAS A UNE FRONTIERE DE 32K !!!
XEIF%:   VAL         ENDIF
         CPR         A,B             < LA 'CDA' COURANTE EST-ELLE A UNE FRON-
                                     < TIERE DE 32K ???
         JNE         E741XC          < NON, DONC ON NE PEUT UTILISER LE MECA-
                                     < NISME DEFINI DANS 'CHAND' ET 'HANDLR'
                                     < POUR TRANSMETTRE LA 'CDA' COURANTE,
                                     < PUISQUE CE SONT DES NUMEROS DE PAGE
                                     < DE 32K QUI SONT TRANSMIS...
         LB          &VAR+SVCDE      < (B)=FIN DE LA 'CDA' COURANTE DE
                                     <     L'UTILISATEUR COURANT, ET
                                     < (A)=ADRESSE DE DEBUT DE LA 'CDA'...
         CP          VAR+SVCDIO      < EST-CE LA 'CDAI' ???
         JE          E741XD          < OUI...
                                     < NOTONS QUE SI LE TEST EST NEGATIF, CE
                                     < PEUT ETRE QUAND MEME LA 'CDAI', MAIS
                                     < ASSIGNEE A QUELQU'UN D'AUTRE, ET L'ON
                                     < SAIT QU'ALORS 'SCH' PERMUTE L'ORIGINE
                                     < ET L'EXTREMITE POUR PROVOQUER DES
                                     < TRAPPES...
         TBT         BMCDAJ          < EST-CE LA 'CDAJ' ???
         JC          E741XD          < OUI...
                                     < (MEME REMARQUE QUE POUR LA 'CDAI' EN
                                     < CAS DE TEST NEGATIF...)
E741XC:  EQU         $               < CAS DES 'CDA' NON SITUEES A DES FRON-
                                     < TIERES DE 32K, OU BIEN DES 'CDA' QUI NE
                                     < SONT PAS 'CDAI' OU 'CDAJ', OU BIEN QUI
                                     < SONT 'CDAI' OU 'CDAJ' MAIS ASSIGNEES
                                     < A UN AUTRE UTILISATEUR...
                                     < A NOTER QUE LE TEST DE FRONTIERE EST
                                     < ACTUELLEMENT INUTILE ET REDONDANT, MAIS
                                     < IL EST LA POUR LES EXTENSIONS FUTURES...
                                     < DANS CES CAS LA, ON VA FORCER L'UNE
                                     < DES 'CDA' D'IMAGE : 'CDAJ', OU 'CDAI'
                                     < SUIVANT QU'IL Y A OU PAS UN "!CDAI=J"
                                     < EN COURS...
         XR          Y,L             < POUR UN ACCES TEMPORAIRE A 'DCTESC'...
         LA          IDDESC-DCTESC,L < (A)=LISTE 'IDDESC' D'INDICATEUR :
         TBT         IDESCJ          < Y-A-T'IL UN "!CDAI=J" EN COURS ???
         XR          Y,L             < RESTAURE 'Y' ET 'L'...
         JNC         E741XI          < NON, ON VA FORCER LA 'CDAI'...
         LA          VAR+SVCDJO      < OUI, ON FORCE
         LB          VAR+SVCDJE      <               LA 'CDAJ+0'...
         JMP         E741XD          < VERS LA MISE EN PLACE DE LA 'CDA'...
E741XI:  EQU         $
         LA          VAR+SVCDIO      < DANS CE CAS,
         LB          VAR+SVCDIE      <              ON FORCE LA 'CDAI'...
E741XD:  EQU         $
         XR          Y,L             < RESTAURE :
                                     < (L)=ADRESSE DE 'DCTESC',
                                     < (Y)=ADRESSE DE 'DCTSVC'.
         PSR         A               < SAUVEGARDE DE L'ORIGINE DE LA 'CDA'
                                     < CHOISIE...
         LBY         DEMESC-DCTESC+XXNSP,L
                                     < (A)='NSP' DE LA DEMANDE COURANTE :
         CPI         NSPDKU          < ALORS, EST-CE 'DKU' OU LE 'SGN' ???
         JE          E741XF          < 'DKU'...
<
< DEFINITION DES MOYENS DE
< TRANSMISSION DES EXTENSIONS
< SUR VOLUME POUR LE 'SGN' :
<
MSGNU::  VAL         MOCG            < MASQUE POUR 'ASDEM' DE LA DEMANDE PER-
                                     < METTANT DE DISCRIMINER LES DEMANDES
                                     < DE TYPE CONVENTIONNEL, DES DEMANDES DE
                                     < TYPE EXTENSION...
BSGNU::  VAL         BITSIG          < BIT DE DISCRIMINATION DANS 'MSGNU'.
XWOR%1:  VAL         MSGNU=BSGNU
ISGNU::  VAL         COSBT?XWOR%1=FMASK(K?NSPDKG=FCINST
                                     < INDICATEUR QUE L'ON DOIT TROUVER DANS
                                     < LE CHAMP 'MSGNU' DE 'ASDEM' POUR LES
                                     < DEMANDES D'EXTENSION...
XWOR%2:  VAL         MSGNU=K
XWOR%3:  VAL         ISGNU>XWOR%2
         IF          XWOR%3-K,XEIF%,,
         IF          ATTENTION : LE CHAMP DISCRIMINATEUR DOIT DONNER
         IF          NAISSANCE A UN 'ASDEM' NEGATIF POUR EVITER DES
         IF          CONFUSIONS ENTRE DES GRANDS DEPLACEMENT ENTRE
         IF          <NOM> ET <VALEUR> ET DES DEMANDES D'EXTENSION !!!
XEIF%:   VAL         ENDIF
<
< CAS DU 'SGN' (EN CAS D'ACCES
< AUX VOLUMES D'EXTENSION, IL FAUT
< TRANSMETTRE LA 'CDA' COURANTE) :
<
         LA          DEMESC-DCTESC+T+ASDEM,L
                                     < (A)='ASDEM' DE LA DEMANDE :
XWOR%1:  VAL         MSGNU=K
         SLRS        XWOR%1          < ET ACCES AU DISCRIMINATEUR DES ACCES
                                     < AUX EXTENSIONS SUR VOLUME...
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         E741XG          < ET BIEN NON, IL N'Y A PAS D'EXTENSION...
         PLR         A               < IL Y A EXTENSION :
                                     < (A)=ADRESSE DE LA 'CDA' COURANTE DE
                                     <     L'UTILISATEUR, OU DE LA 'CDAI' DANS
                                     <     LES AUTRES CAS,
         SLRS        XSLO32          < ET CONVERSION EN UN NUMERO DE PAGE
                                     < DE 32K,
         PSR         A               < QUE L'ON SAUVEGARDE...
PAGSGN:: VAL         MOCG            < ON VA UTILISER MOCG(CODEM) POUR TRANS-
                                     < METTRE LE NUMERO DE LA PREMIERE PAGE
                                     < DE 32K DE LA 'CDA'...
         LA          DEMESC-DCTESC+T+CODEM,L
                                     < PUISQU'ON UTILISE UNE PARTIE DU 'CODEM'
                                     < POUR TRANSMETTRE CE NUMERO DE PAGE,
                                     < VALIDONS-LE AU PREALABLE :
         CPI         PAGSGN)MMOT     < LORS DES ACCES AUX VOLUMES EXTENSION,
                                     < UNE SEULE VALEUR DE 'CODEM' EST AUTO-
                                     < RISEE...
         PLR         A               < (A)=NUMERO DE LA PREMIERE PAGE DE 32K
                                     <     DE LA 'CDA'...
         JLE         E741XH          < OK, 'CODEM' EST BON...
         LAI         XNDSLO+I        < IL EST MAUVAIS, ON VA FORCER UN NUMERO
                                     < DE PAGE INEXISTANT (LA PREMIERE PAGE
                                     < INEXISTANTE).
E741XH:  EQU         $
         IF          PAGSGN-MOCG,,XEIF%,
         IF          ATTENTION : LES INSTRUCTIONS SUR OCTET SONT INVALIDES !!!
XEIF%:   VAL         ENDIF
         STBY        DEMESC-DCTESC+T+CODEM,L
                                     < LE NUMERO DE LA PREMIERE PAGE DE 32K
                                     < DE LA 'CDA' DE L'UTILISATEUR (OU DE
                                     < LA 'CDAI') EST TRANSMISE AU 'SGN' DANS
                                     < L'OCTET GAUCHE DU 'CODEM'...
         JMP         E741XA          < VERS L'ALLOCATION DU 'HDLSER'...
E741XG:  EQU         $
         PLR         A
         JMP         E741XA          < LORSQU'IL N'Y A PAS D'EXTENSION
                                     < SION SUR VOLUME DU 'SGN', ON NE
                                     < FAIT RIEN...
<
< CAS DE 'DKU' (ON VA TRANSMETTRE
< LORS DES ACCES A LA 'TV' BASSE-
< DEFINITION LA 'CDA' COURANTE
< DE L'UTILISATEUR, OU LA 'CDAI') :
<
E741XF:  EQU         $
         PLR         A               < RESTAURE :
                                     < (A)=ADRESSE DE DEBUT DE LA 'CDA'...
         WOE                         < DANS LE CAS DE L'UNE DE3 3 FONCTIONS 'TV'
                                     < ON SE POSITIONNE SUR LA 'CDA' COURANTE,
                                     < AFIN QUE 'HDLDKU' AILLE Y TRAVAILLER...
E741XA:  EQU         $
<
< ALLOCATION DU NIVEAU DE SERVICE :
<
         XR          Y,L             < RESTAURE (L)=ADRESSE 'DCTSVC'.
         LB          &VAR+LOTO       < ACCES A L'ADRESSE DE L'AUTOMATE
                                     < DE SERVICE.
         XR          Y,L             < RESTAURE (L)=ADRESSE DE 'DCTESC'.
         STZ         DEMESC-DCTESC+T+ETADEM,L
                                     < RAZ DE L'ETADEM DE DEMESC.
         BSR         AALOHS          < ALLOCATION D'UN HANDLER DE SERVICE,
                                     < ET EXECUTION DU SERVICE, A
                                     < L'AIDE DE L'AUTOMATE (B).
<
<
<        S O R T I E   D E   ' H D L S V C '  :
<
<
E741X8:  EQU         $               < SORTIE AVEC RESTAURATION DE 'L'...
         XR          Y,L             < RESTAURE (L)=ADRESSE DE 'DCTSVC'.
E762:    EQU         $               < SORTIE RESERVEE A END-JOB,
E741X4:  EQU         $               < CAS D'UNE FONCTION DEMANDEE EN MEMOIRE
                                     < HAUTE (SUIVANT 'IDESC7' ELLE Y SERA OU
                                     < PAS, EXECUTEE...).
         IF          E741X4-E762-K,,XEIF%,
         IF          ATTENTION : LES POINTS DE PASSAGE DU 'CCI'
         IF          INTERACTIF ET DE 'END-JOB' EN 'AE776' ET
         IF          'AE762' SONT MAUVAIS !!!
XEIF%:   VAL         ENDIF
         RSR
         PAGE
<
<
<        G E N E R A T I O N   D U   ' N S P T Y P '
<        D E   L A   D E M A N D E   C O U R A N T E  :
<
<
<        FONCTION :
<                      CE MODULE, IMPLANTE ICI SOUS
<                    LA FORME D'UN SOUS-PROGRAMME A
<                    CAUSE DE CES MAUDITS SAUTS SU-
<                    PERIEURS A 128 MOTS, GENERE LA
<                    'NSPTYP' DE LA DEMANDE UTILISA-
<                    TEUR COURANTE, ET DANS LE CAS
<                    DES DEMANDES A 'DKU', OU BIEN
<                    DES DEMANDES AU "SGN" LORSQU'IL
<                    Y A UN VOLUME MONTE POUR CET
<                    UTILISATEUR, TRANSMET A LA
<                    TACHE DEMANDEE, VIA LA 'BOX',
<                    SOIT LA LISTE DES GROUPES DE
<                    CYLINDRES POSSEDES PAR CET UTI-
<                    LISATEUR, SOIT L'EXISTENCE, OU
<                    LA NON-EXISTENCE D'UN VOLUME
<                    MONTE POUR CE DERNIER...
<
<
<        ARGUMENTS :
<                    (A)='NSP' DE LA TACHE DEMANDEE,
<                    (Y)=ADRESSE DE 'DCTESC',
<                    (L)=ADRESSE DE 'DCTSVC'.
<
<
<        RESULTATS :
<                    (Y)=ADRESSE DE 'DCTSVC',
<                    (L)=ADRESSE DE 'DCTESC',
<                    'NSPTYP' DE LA DEMANDE GENERE, ET
<                    'BOX' EVENTUELLEMENT.
<
<
SVCDKU:  EQU         $
         XR          Y,L             < TOUT DE SUITE :
                                     < (L)=ADRESSE DE 'DCTESC', ET
                                     < (Y)=ADRESSE DE 'DCTSVC'.
<
< TEST D'UNE DEMANDE A 'DKU' OU AU "SGN" :
<
         PSR         X,W             < SAUVEGARDE DU 'NSP' DEMANDE, ET DE
                                     < L'ADRESSE DES ARGUMENTS ESCLAVE...
         PSR         A               < SAUVEGARDE DU 'NSP'...
         LX          LUDKU-DCTESC,L  < (X)=LISTE DES GROUPES DE CYLINDRES POS-
                                     <     SEDES PAR CET UTILISATEUR, A PRIORI..
         IF          NSPDKU-NSPDKG,,XEIF%,
         IF          ATTENTION : LE 'CPI' QUI SUIVRA, ENTRE AUTRES,
         IF          N'A PAS BEAUCOUP DE SENS !!!
XEIF%:   VAL         ENDIF
         CPI         NSPSG0          < EST-CE UN ACCES "SGN" ???
         JL          Z1941B          < NON...
         CPI         NSPSGN          < EST-CE UN ACCES "SGN" ???
         JG          Z1941B          < NON...
<
< CAS D'UNE DEMANDE ADRESSEE AU "SGN" :
<
         CPI         NSPNXS          < EST-CE 'SUIVANT-SERIE' ???
         JE          Z1941E          < OUI, MODIFICATION DE 'ADINEX'...
         CPI         NSPNXP          < EST-CE 'SUIVANT-PARALLELE' ???
         JE          Z1941E          < OUI, MODIFICATION DE 'ADINEX'...
Z1941F:  EQU         $
         LA          IDDESC-DCTESC,L < (A)=LISTE DES INDICATEURS D'ETAT DE
                                     <     L'UTILISATEUR :
         TBT         IDESC8          < A-T'IL UN VOLUME MONTE ???
         LXI         NSPDKG          < (X)='NSPDKG' : OUI A PRIORI...
         JC          Z1941C          < ET OUI, L'UTILISATEUR A UN VOLUME MONTE,
         NGR         X,X             < DANS LE CAS OU IL N'Y A PAS DE VOLUME
                                     < MONTE, ON INVERSE 'X'...
Z1941C:  EQU         $
         LR          X,A             < DANS LE CAS D'UNE DEMANDE AU "SGN", ON
                                     < A ICI, EN POSITIF OU NEGATIF, LE 'NSP'
                                     < DU DISQUE SUPPORT DE VOLUME...
         JAGE        Z1941D          < ON PREND
         NGR         A,A             <          LA VALEUR ABSOLUE DE 'NSPDKG'.
Z1941D:  EQU         $
<
< ALORS EST-CE 'DKU'/"SGN" OU LE RESTE ???
<
Z1941B:  EQU         $
         CPI         NSPDKU          < ON TESTE ICI 'NSPDKU' (QUI EST AUSSI
                                     < 'NSPDKG' !!!), C'EST-A-DIRE QU'ON REGAR-
                                     < AINSI SI LA DEMANDE S'ADRESSE A 'DKU'
                                     < OU AU "SGN", OU PAS...
<
< GENERATION DU 'NSPTYP' :
<
         PLR         A               < RESTAURE :
                                     < (A)='NSP' DE LA TACHE DEMANDEE...
         SWBR        A,A             < GENERATION D'UN NSPTYP COMPA-
                                     < TIBLE AVEC CHAND.
XWOR%7:  VAL         K
XWOR%7:  VAL         COSBT?VBOX=FMASK(K?XWOR%7=FCINST
         ORI         XWOR%7          < MISE DE 'DEMESC' EN MODE SYMBOLIQUE, ET
                                     < VALIDATION DE SA 'BOX'...
         STA         DEMESC-DCTESC+XXNSP,L < MISE EN PLACE DU NSPTYP DE DEMESC.
         JNE         Z1941A          < CE N'EST PAS 'DKU', NI LE "SGN"...
<
< CAS DE 'DKU' (IL FAUT LUI TRANSMETTRE
< LA LISTE DES GROUPES DE CYLINDRE POSSEDE
< PAR L'UTILISATEUR) OU DU "SGN" (IL FAUT
< LUI TRANSMETTRE S'IL Y A UN VOLUME MONTE) :
<
         LR          L,W             < (W)=ADRESSE DE LA 'DCTESC',
         ADRI        DEMESC-DCTESC,W < (W)=ADRESSE DE LA DEMANDE A 'DKU',
         BSR         ASTBOX          < ON TRANSMET (X) A LA TACHE DEMANDEE,
                                     < A SAVOIR :
                                     < (X)=LISTE DES GROUPES DE CYLINDRES POS-
                                     <     SEDES PAR CET UTILISATEUR POUR 'DKU',
                                     < (X)=+NSPDKG, POUR LE "SGN" S'IL Y A UN
                                     <     VOLUME DE MONTE,
                                     < (X)=-NSPDKG, POUR LE "SGN" S'IL N'Y A
                                     <     PAS DE VOLUME MONTE...
<
< RETOUR DU MODULE :
<
Z1941A:  EQU         $
         PLR         X,W             < RESTAURE :
                                     < (X)='NSP' DEMANDE, ET
                                     < (W)=ADRESSE DES ARGUMENTS ESCLAVE...
         RSR
<
< TRAITEMENT PARTICULIER DES
< DEMANDES A 'NSPNXS' ET 'NSPNXP' :
<
Z1941E:  EQU         $
         XR          Y,L             < AFIN D'ATTEINDRE 'DCTSVC' PAR (L)...
         DC          VAR+ADINEX      < EN EFFET, 'NSPNXS' ET 'NSPNXP' RAJOUTE
                                     < LORSQUE CELA EST POSSIBLE UN OCTET EN
                                     < BOUT DE BUFFER, IL FAUT DONC ABAISSER
                                     < D'UNE UNITE L'ADRESSE DU PREMIER OCTET
                                     < INACESSIBLE...
         XR          Y,L             < RESTAURATIONS...
         JG          Z1941F          < OK, 'ADINEX' EST BON...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT 'ADINEX'
<                    A PU DEVENIR NEGATIF OU NUL !!!
<
         JMP         Z1941F          < ET RETOUR A LA GENERATION DE 'DEMESC'...
         PAGE
<
<
<        V A L I D A T I O N   D E   ' A M E S C '   E T   ' C O E S C '  :
<
<
<        FONCTION :
<                      CE MODULE, MIS ICI POUR LES
<                    RAISONS HABITUELLES (SAUT SUPE-
<                    RIEUR A 128 MOTS...), EST RESPON-
<                    SABLE DE VALIDER 'AMESC' ET 'COESC'
<                    PAR RAPPORT A L'ESPACE MEMOIRE ALLOUE
<                    A L'UTILISATEUR...
<
<
<        ARGUMENTS :
<                    (A)='AMESC' (ADRESSE OCTET RELATIVE),
<                    (B)='COESC' (LONGUEUR OCTET DE L'ECHANGE),
<                    (Y)=ADRESSE DE 'DCTESC',
<                    (L)=ADRESSE DE 'DCTSVC'.
<
<
<        RESULTATS :
<                    'A' ET 'B' INCHANGES,
<                    (Y)=ADRESSE DE 'DCTSVC',
<                    (L)=ADRESSE DE 'DCTESC',
<                    INDICATEURS POSITIONNES POUR FAIRE UN 'JNE' SI LES
<                                ARGUMENTS SONT MAUVAIS.
<
<
PSVC1:   EQU         $
         PSR         A,B             < SAUVEGARDE DES ARGUMENTS...
         JAL         PSVC11          < ERREUR : (AMESC)<0...
XWOR%1:  VAL         SLOESC*NOCMO
         IF          MXMEME-XWOR%1-K,,,XEIF%
         IF          ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%:   VAL         ENDIF
         CP          VAR+ADINEX
         JGE         PSVC11          < ERREUR : (AMESC)>='ADINEX'...
         XR          A,B             < PERMUTONS 'AMESC' ET 'COESC' :
         JALE        PSVC11          < ERREUR : (COESC)<=0...
         CP          VAR+ADINEX
         JG          PSVC11          < ERREUR : (COESC)>'ADINEX'...
         ADR         B,A             < FORMONS :
                                     < (A)='AMESC'+'COESC'=ADRESSE DU PREMIER
                                     <     OCTET SUIVANT LE BUFFER :
         JALE        PSVC11          < ERREUR : (AMESC)+(COESC)<=0...
         CP          VAR+ADINEX
         JG          PSVC11          < ERREUR : (AMESC)+(COESC)>'ADINEX'...
<
< OK, 'AMESC' ET 'COESC'
< PARAISSENT VALIDES :
<
         LAI         EXIST           < (A)=CODE OK...
<
< RETOUR :
<
PSVC12:  EQU         $
         CPI         EXIST           < POSITIONNEMENT DES INDICATEURS PERMETTANT
                                     < DE FAIRE UN 'JNE' SI LES ARGUMENTS SONT
                                     < INVALIDES...
         PLR         A,B             < RESTAURATIONS DE :
                                     < (A)='AMESC',
                                     < (B)='COESC'.
         XR          Y,L             < ET POSITIONNEMENT DES "BASES" :
                                     < (Y)=SAUVEGARDE DE 'DCTSVC',
                                     < (L)=ADRESSE DE 'DCTESC'.
         RSR                         < ET VOILA...
<
< TRAITEMENT DES ERREURS :
<
PSVC11:  EQU         $
         LAI         NEXIST          < (A)=CODE D'ERREUR...
         JMP         PSVC12          < VERS LA SORTIE...
         PAGE
<
<
<        E X E C U T I O N   D E S   Q U I T  :
<
<
<        FONCTION :
<                      LE FORMAT D'UN 'QUIT' EST '1EX6 ;
<                    LA VALEUR DE 'X' DETERMINE L'ACTION A
<                    ENTREPRENDRE A LA SUITE DU QUIT :
<                    X=0 : LE 'QUIT' EST ASSIMILE A UN 'SVC',
<                          DONT LES ARGUMENTS SONT
<                          RELAYES PAR LE REGISTRE 'A'
<                          EN ADRESSAGE RELATIF.
<                    X=1 A 'F : LE 'QUIT' EST UN 'SVC' SIMULE,
<                               DONT LES ARGUMENTS SONT
<                               IMPLICITES ET RELAYES
<                               PAR LA TABLE QUI SUIT EN
<                               ADRESSAGE ABSOLU :
<
<                                    X=1 : APPEL DIRECT DU 'CCI', PERMETTANT
<                                          DONC LA POSE DE 'BREAK-POINTS'...
<
<
         CALL        #SISP CMS5 DOL1#
TXQUIT:  EQU         $
         WORD        NIL             < 1E06 : 'QUIT'='SVC'.
         WORD        SIMCCI          < 1E16 : APPEL DIRECT DU 'CCI'.
         IF          $-TXQUIT-D-XXQUIT,,XEIF%,
         IF          ATTENTION : 'SIMCCI' EST MAL PLACEE !!!
XEIF%:   VAL         ENDIF
         WORD        SIMERR          < 1E26 : 'QUIT' NON RECONNU.
         WORD        SIMERR          < 1E36 : 'QUIT' NON RECONNU.
         WORD        SIMERR          < 1E46 : 'QUIT' NON RECONNU.
         WORD        SIMERR          < 1E56 : 'QUIT' NON RECONNU.
         WORD        SIMERR          < 1E66 : 'QUIT' NON RECONNU.
         WORD        SIMERR          < 1E76 : 'QUIT' NON RECONNU.
         WORD        SIMERR          < 1E86 : 'QUIT' NON RECONNU.
         WORD        SIMERR          < 1E96 : 'QUIT' NON RECONNU.
         WORD        SIMERR          < 1EA6 : 'QUIT' NON RECONNU.
         WORD        SIMERR          < 1EB6 : 'QUIT' NON RECONNU.
         WORD        SIMERR          < 1EC6 : 'QUIT' NON RECONNU.
         WORD        SIMERR          < 1ED6 : 'QUIT' NON RECONNU.
         WORD        SIMERR          < 1EE6 : 'QUIT' NON RECONNU.
         WORD        SIMERR          < 1EF6 : 'QUIT' NON RECONNU.
<
<
<        A R G U M E N T S   I M P L I C I T E S  :
<
<
<        NOTA :
<                      ON TROUVE CI-DESSOUS UN
<                    CERTAIN NOMBRE DE DEMANDES
<                    TYPE (EN ADRESSAGE ABSOLU)
<                    CORRESPONDANT A CE QUE L'ES-
<                    CLAVE AURAIT PU LUI-MEME
<                    ENVOYER...
<
<
SIMCCI:  BYTE        K;FONCCI        < APPEL DU 'CCI' SANS TOUCHER
                                     < NI AU REGISTRE 'A', NI AU
                                     < REGISTRE 'X', NI AU REGISTRE 'K'...
SIMERR:  BYTE        K;NFON          < FONCTION INEXISTANTE POUR LES
                                     < 'QUIT' NON RECONNUS.
         PAGE
<
<
<        C O N V E R S I O N   E N   U N E   A D R E S S E
<                    M O T   D E   ' S L O '  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME EST RAJOUTE AVEC
<                    LE RUN EN MEMOIRE HAUTE, AFIN D'ETRE
<                    SUR QUE LORSQU'ON UTILISE 'SLO' ET
<                    'SLE' EN MEMOIRE BASSE, IL S'AGISSE
<                    BIEN EFFECTIVEMENT D'ADRESSE BASSE
<                    DONC CONVERTIBLE EN MOT...
<
<
<        ARGUMENT :
<                    (A)=ADRESSE SUPPOSE EN DADR-MOTS
<                        ET EN MEMOIRE BASSE.
<
<
<        RESULTAT :
<                    (A)=ARGUMENT CONVERTI EN ADRESSE DE MOTS.
<
<
         CALL        #SISP CMS5 DOL2#
PDADR:   EQU         $
         PSR         B
XWOR%1:  VAL         FADR/UMEM=K
XWOR%1:  VAL         -XWOR%1
XWOR%2:  VAL         -SLOESC/UMEM+MEMORY>XWOR%1
         LRM         B
         WORD        XWOR%2          < (B)=VALEUR QUE NE PEUT DEPASSER (A).
         CPR         A,B             < Y-A-T'IL VIOLATION ???
         JGE         PDADR1          < (B)>=(A), DONC L'ARGUMENT EST BON...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      MODIFIER LE SYSTEME CAR VISIBLEMENT
<                    ON UTILISE UN (SLO,SLE) DE MEMOIRE HAUTE !!!
<
PDADR1:  EQU         $
         SLLS        -DADR           < CONVERSION DE 'A' EN UNE ADRESSE
                                     < DE MOTS...
         PLR         B
         RSR
         CALL        #SISP CMS5 CHECK#
         CALL        #SISP CMS5 DOL1#



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