<        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         <<<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         <<<=(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 NSP2*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 =.
<
<
         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           ET  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-2013.
Copyright (c) CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2011-2013.