<        S I S   C M S 5   1
         PAGE
<
<
<        P R E P A R A T I O N   D U   F I C H I E R   D E S
<        D E F I N I T I O N S   R E L A T I V E S   A   C M S 5
<        U T I L I S E   P A R   L E S   P R O C E S S E U R S  :
<
<
<        FONCTION :
<                      PENDANT L'ASSEMBLAGE DE
<                    'CMS5', ON CONSTRUIT UN FICHIER
<                    DE DEFINITIONS BAPTISES
<                    'SIP DEFINITION CMS5', ET
<                    UTILISES PAR DIFFERENTS PRO-
<                    CESSEURS ; POUR SAVOIR SI
<                    CELUI-CI A ETE MODIFIE PAR
<                    RAPPORT A L'ASSEMBLAGE PRE-
<                    CEDENT, LA VERSION ANTERIEURE
<                    DE 'SIP DEFINITION CMS5' EST
<                    COPIEE DANS LE FICHIER DE
<                    NOM 'SVP DEFINITION CMS5' ;
<                    APRES CET ASSEMBLAGE, EN COM-
<                    PARANT 'SIP...' ET 'SVP...',
<                    ON VERRA LES EVOLUTIONS...
<
<
<        NOTA :
<                      LES SYMBOLES INSERES DANS LE
<                    FICHIER 'SIP DEFINITION CMS5' LE
<                    SONT SOUS LA FORME 'XXX: VAL...'
<                    ET NON PAS 'XXX:: VAL...' AFIN QUE
<                    DES PROGRAMMES UTILISATEURS LES AYANT
<                    DEJA DEFINIS, NE COMMETTENT PAS
<                    D'ERREURS D'ASSEMBLAGE !!!
<
<
ORDI::   VAL                     "@" < IDENTIFICATION DE L'ORDINATEUR SUPPORT
                                     < DE 'CMS5' LE MAGNIFIQUE...
;DF     @'SVP DEFINITION CMS5';:F;
         EE
;CO     @'SIP DEFINITION CMS5''SVP DEFINITION CMS5';:F;
         EE
;DF     @'SIP DEFINITION CMS5';:F;
         EE
;ED     @'SIP DEFINITION CMS5';IF;         IDP         "SIP DEF. CMS5";:F;:F;:F;
         EE
         PAGE
<
<
<        P R E P A R A T I O N   D U   F I C H I E R   D E S
<        C O N S T A N T E S   G E N E R A L E S
<        U T I L I S E   P A R   L E S   P R O C E S S E U R S  :
<
<
<        FONCTION :
<                      PENDANT L'ASSEMBLAGE DE
<                    'CMS5', ON CONSTRUIT UN FICHIER
<                    DE DEFINITIONS BAPTISES
<                    'SIP DEFINITION CTTE', ET
<                    UTILISES PAR DIFFERENTS PRO-
<                    CESSEURS ; POUR SAVOIR SI
<                    CELUI-CI A ETE MODIFIE PAR
<                    RAPPORT A L'ASSEMBLAGE PRE-
<                    CEDENT, LA VERSION ANTERIEURE
<                    DE 'SIP DEFINITION CTTE' EST
<                    COPIEE DANS LE FICHIER DE
<                    NOM 'SVP DEFINITION CTTE' ;
<                    APRES CET ASSEMBLAGE, EN COM-
<                    PARANT 'SIP...' ET 'SVP...',
<                    ON VERRA LES EVOLUTIONS...
<
<
<        NOTA :
<                      LES SYMBOLES INSERES DANS LE
<                    FICHIER 'SIP DEFINITION CTTE' LE
<                    SONT SOUS LA FORME 'XXX: VAL...'
<                    ET NON PAS 'XXX:: VAL...' AFIN QUE
<                    DES PROGRAMMES UTILISATEURS LES AYANT
<                    DEJA DEFINIS, NE COMMETTENT PAS
<                    D'ERREURS D'ASSEMBLAGE !!!
<
<
;DF     @'SVP DEFINITION CTTE';:F;
         EE
;CO     @'SIP DEFINITION CTTE''SVP DEFINITION CTTE';:F;
         EE
;DF     @'SIP DEFINITION CTTE';:F;
         EE
;ED     @'SIP DEFINITION CTTE';IF;         IDP         "SIP DEF. CTTE";:F;:F;:F;
         EE
         PAGE
         IDP         "CMS5 - VERSION SOLAR 16.75"
         IDP         "J'AI CHERCHE,"
         IDP         " J'AI TROUVE,"
         IDP         "  J'AI PUNCHE..."
         IDP         "JOHN F. COLONNA"
         TRN
<
<
<
<        U N I V E R S A L   C O N T R O L
<        P R O G R A M   F O R   R E S O U R C E S
<                    S H A R I N G
<
<        C O L O N N A   M O N I T O R   S Y S T E M   5
<
<
<
<        PHILOSOPHIE :
<
<                      LE MONITEUR CMS5 EST CHARGE DE RENDRE
<                    UN CERTAIN NOMBRE DE SERVICES. LES SERVICES
<                    (ENTRETIEN D'ECHANGES,INITIALISATION D'ECHANGES,
<                    ALLOCATION MEMOIRE,ALLOCATION DISQUE,GESTION DE
<                    FICHIERS,...) SONT DES ACTIONS INDEPENDANTES,
<                    DONC ASYNCHRONES, MAIS ETANT PARFOIS EN RELATION
<                    (CF. L'ALLOCATION DISQUE FAIT DES E/S DISQUES).
<                    C'EST POURQUOI CMS5 A ETE DECOMPOSE EN AUTANT DE
<                    TACHES QU'IL Y DE SERVICES A RENDRE. CES TACHES
<                    SONT APPELEES HANDLERS OU 'STATION-SERVICE'.
<                      L'ACCES A UN HANDLER SE FAIT PAR L'INTERMEDIAIRE
<                    D'UNE FILE D'ATTENTE QUI LUI EST PROPRE A GESTION
<                    FIFO, AVEC LA POSSIBILITE DE DEMANDES PRIORITAIRES
<                    ET DE FILTRER LES DEMANDES.
<                      UNE TELLE STRUCTURE POSSEDE DE NOMBREUX
<                    AVANTAGES :
<                    - INDEPENDANCE DES FONCTIONS, D'OU LA POSSIBILITE
<                    DE CREER DES TACHES PARALLELES : C'EST DE LA
<                    MULTIPROGRAMMATION, MAIS C'EST AUSSI DU TRAVAIL
<                    PARALLELE, UNE MEME TACHE MERE POUVANT DEMANDER
<                    'SIMULTANEMENT' AUTANT DE SERVICES QU'ELLE LE
<                    DESIRE.
<                    - TRANSPORTABILITE SUR UNE MACHINE A PLUSIEURS
<                    UNITES CENTRALES : C'EST DU MULTIPROCCESING,
<                    AVEC ENCORE UNE FOIS LA POSSIBILITE DE CREER DES
<                    TACHES FILLES PARALLELEES.
<
<
<        CONSEQUENCES :
<
<                      UNE TELLE STRUCTURE ASSURE UNE
<                    SIMULTANEITE MAXIMALE ENTRE LES
<                    DIFFERENTS SERVICES...
<
<
<
<
<                    AUTHOR : JOHN F. COLONNA
         PAGE
<
<
<        V A R I A B L E S   D E   T R A V A I L  :
<
<
XWORK:   VAL         0               < VARIABLE DE TRAVAIL A L'ASSEMBLAGE.
XWOR%:   VAL         XWORK           < V A R I A B L E   D E
                                     < T R A V A I L   A
                                     < L ' A S S E M B L A G E
                                     < ELLE EST APPELEE AUSSI PARFOIS
                                     < 'XWORK'; ICI, ELLE EST GENEREE
                                     < PAR 'XWOR' SUIVI DU CARACTERE
                                     < "POUR-CENT"...
XWOR6:   VAL         XWORK           < IDEM...
XWORK1:  VAL         XWORK           < DE MEME QUE 'XWORK'.
XWORK2:  VAL         XWORK           < DE MEME QUE 'XWORK'.
XWORK3:  VAL         XWORK           < DE MEME QUE 'XWORK'.
XWORK4:  VAL         XWORK           < DE MEME QUE 'XWORK'.
XWORK7:  VAL         XWORK           < DE MEME QUE 'XWORK'.
XWOR61:  VAL         XWORK
XWOR62:  VAL         XWORK
XWOR63:  VAL         XWORK
XWOR64:  VAL         XWORK
XWOR65:  VAL         XWORK
XWOR66:  VAL         XWORK
XWOR67:  VAL         XWORK
XWOR68:  VAL         XWORK
XWOR69:  VAL         XWORK
XMASK:   VAL         XWORK
XEIF6:   VAL         XWORK           < INITIALISATION DES 'XEIF' "POUR-CENT"...
XEIF61:  VAL         XWORK
XEIF62:  VAL         XWORK
XEIF68:  VAL         XWORK
XEIF69:  VAL         XWORK
         PAGE
<
<
<        C O N S T A N T E S   D E   B A S E   D E   C M S 4  :
<
<
<        NOTA :
<                      SONT DEFINIES ICI DES CONSTANTES
<                    QUI N'ONT AUCUNE RAISON DE CHANGER,
<                    MAIS DONT LE BESOIN EST EVIDENT...
<
<
         PROG
ZERO:    EQU         $
NIL:     EQU         ZERO            < ELEMENT INDIQUANT UNE ADRESSE VIDE.
                                     < (PAR EXEMPLE CHAINAGE DE FILE D'ATTENTE
                                     < 'TETE' ET 'QUEUE' VIDE,...).
NILX:    EQU         NIL             < POUR LES RELAIS INDEXES CALCULES...
NILS:    EQU         NIL             < POUR LES ADRESSES DISQUES CALCULEES...
K::      VAL         '0000           < POUR CLEARER, RAZER...
NILK::   VAL         K               < POUR GENERER DES MOTS DONT LA VALEUR
                                     < N'EST PAS CONNUE LORS DE L'ASSEMBLAGE...
ENDIF::  VAL         K               < POUR INDIQUER UNE FIN DE 'IF'...
         IF          NIL-ZERO,,XEIF%,
         IF          ATTENTION : TOUS LES 'STZ' ET AUTRES CONCERNANT
         IF          DES ELEMENTS VIDES VONT MERDER !!!
XEIF%:   VAL         ENDIF
NOCMO::  VAL         2               < NOMBRE D'OCTETS PAR MOT.
NBITOC:: VAL         8               < NOMBRE DE BITS DANS UN OCTET,
NBITMO:: VAL         NBITOC*NOCMO    < NOMBRE DE BITS DANS UN MOT.
NBITAB:: VAL         NBITMO+NBITMO   < NOMBRE DE BITS DANS LE REGISTRE (A,B)...
BIT::    VAL         1
<*******************************************************************************
ZERO1:   WORD        K
D::      VAL         $-ZERO1         < LONGUEUR D'UN MOT !!!
<*******************************************************************************
         $EQU        ZERO1           < ANNULATION DU CODE GENERE...
<*******************************************************************************
ZERO2:   FLOAT       <K<K<K
DFLOT::  VAL         $-ZERO2         < LONGUEUR D'UN "MOT" FLOTTANT !!!
<*******************************************************************************
         $EQU        ZERO2           < ANNULATION DU CODE GENERE...
P::      VAL         D               < PASSAGE A UN ELEMENT PRECEDENT.
Z::      VAL         1               < POUR CE QUI COMMENCE A 0...
B::      VAL         Z               < PARCEQUE LE PREMIER BIT D'UN MOT
                                     < A LE RANG 0...
I::      VAL         1               < POUR LES INCREMENTATIONS/DECREMENTATIONS.
E::      VAL         1               < POUR LES DIVISIONS PAR EXCES (Y+X-E/X).
S::      VAL         BIT             < POUR LES DECALAGES D'UN CRAN.
L::      VAL         0               < RANG DU BIT DE GAUCHE ('LEFT') D'UN MOT.
O::      VAL         ZERO-ZERO       < ELEMENT COURANT,...
W::      VAL         1               < ELEMENT UNIQUE...
XXXMOY:: VAL         W+W             < POUR FAIRE UNE MOYENNE...
J::      VAL         0               < VARIABLE DE TRAVAIL...
XWOR%1:  VAL         NOCMO=K
         IF          BIT>XWOR%1-NOCMO,,XEIF%,
         IF          ATTENTION : 'NOCMO' DOIT ETRE UNE PUISSANCE
         IF          DE 2 (A CAUSE DES DECALAGES...) !!!
XEIF%:   VAL         ENDIF
YY7::    VAL         BIT>7           < TAILLE DES SECTEURS DISQUES, DES
                                     < BUFFERS ET DE DIVERSES AUTRES CHOSES...
YY8::    VAL         YY7*NOCMO       < IDEM, MAIS EXPRIMEE EN OCTETS.
YM7::    VAL         YY7-D
BITSIG:: VAL         L               < RANG DU BIT DE SIGNE...
XWOR%1:  VAL         NBITMO-B-BITSIG
Q8000::  VAL         BIT>XWOR%1      < BIT0=1, UTILISE POUR L'INFINI...
LSEM::   VAL         5               < A T T E N T I O N  ::
                                     < ON DOIT AVOIR : LSEM=LSEMR.
LDEM1::  VAL         8               < LONGUEUR PRESUMEE DES BLOCS DE DEMANDE :
                                     < A T T E N T I O N  : ON DOIT AVOIR :
                                     < LDEM1=LDEM0 !!!
XWPILE:  VAL         XWORK           < DECLRE EN TETE POUR FACILITER
                                     < L'ASSEMBLAGE
LPILTH:: VAL         38              < LONGUEUR MINIMALE DES PILES
                                     < DE TACHES HARD
LPILEH:: VAL         20              < LONGUEUR MINIMALE DES PILES
                                     < DES HANDLERS ; ELLE EST DUE AU
                                     < MODULE 'HANDLR...
LPILED:: VAL         8               < LONGUEUR MINIMALE DES PILES
                                     < DES DISPATCHERS.
BMOT0::  VAL         BITSIG          < BIT DE DISCRIMINATION DES 'SVC'/'QUIT'.
         IF          BMOT0-BITSIG,,XEIF%,
         IF          ATTENTION : DES TESTS SUR 'MOT0' VONT MERDER !!!
XEIF%:   VAL         ENDIF
XWOR%1:  VAL         NBITMO-B-BMOT0
XWOR%2:  VAL         BIT>XWOR%1      < MASQUE CORRESPONDANT A 'BMOT0'.
XXQUIT:: VAL         1               < CODE DU 'QUIT' D'APPEL DIRECT 'CCI'.
<*******************************************************************************
         QUIT        XXQUIT
CMOT0::  VAL         '0000000@@@@?XWOR%2
                                     < PLACE EN DERNIERE POSITION,
                                     < PERMET DE GENERER UN QUIT
                                     < D'APPEL DIRECT AU CCI. A NOTER :
                                     < BIT0(MOT0)=1.
<*******************************************************************************
<*******************************************************************************
         SVC
CMOT0:   VAL         '0000000@@@@    < PLACE EN DERNIERE POSITION,
                                     < PERMET DE GENERER EN MOT0 DE
                                     < L'ESPACE MEMOIRE ESCLAVE UN
                                     < 'SVC CCI'. A NOTER :
                                     < BIT0(MOT0)=K.
<*******************************************************************************
         $EQU        ZERO            < ANNULATION DU CODE GENERE...
DGNS::   VAL         8               < DECALAGE DE GENERATION DE CERTAINS
                                     < NOMS DU SYSTEME : 'TH', 'IC',...
SECTSY:: VAL         '800            < PSEUDO-ADRESSE DU PREMIER SECTEUR DU
                                     < SYSTEME SUR LE DISQUE 'DKF'.
QUANTA:: VAL         3               < DEFINITION DE L'UNITE D'ALLOCATION
                                     < SUR LE DISQUE 'DKM' :
                                     < 1 QUANTUM=3 SECTEURS.
YY7Q::   VAL         YY7*QUANTA      < NOMBRE DE MOTS DANS UN Q-SECTEUR.
YY8Q::   VAL         YY8*QUANTA      < NOMBRE D'OCTETS CONTENUS DANS
                                     < UN Q-SECTEUR.
         PAGE
<
<
<        C O N S T A N T E S   L I E E S   A U X
<        U N I T E S   C E N T R A L E S  :
<
<
YENA::   VAL         '31             < A T T E N T I O N  : ON DEFINIT
                                     < ICI UNE ADRESSE CORRESPONDANT AUX
                                     < CHANGEMENTS DE CONTEXTES PARTIELS
                                     < DANS LE MICRO-PROGRAMME DE LA
                                     < MACHINE ; TOUTE MODIFICATION DU
                                     < PROCESSEUR DEVRA ETRE FAITE EN
                                     < S'ASSURANT QUE CETTE ADRESSE NE
                                     < CHANGE PAS...
ISPIE::  VAL         '7F1            < ADRESSE DU MICRO-PROGRAMME D'INITIA-
                                     < LISATION DES CANAUX 'HDC'.
ALIPI::  VAL         '10             < ADRESSE DU MICRO-PROGRAMME DE
                                     < TRAITEMENT DES 'IPI'.
         PAGE
<
<
<        D E F I N I T I O N S   G E N E R A L E S  :
<
<
<
<
<        PROVERBE SHADOKK :
<
<        "POURQUOI FAIRE SIMPLE, QUAND ON PEUT FAIRE COMPLIQUE ???!!?
<
<                      EN EFFET, CERTAINS TROUVERONT CERTAINES
<                    DEFINITIONS LUXUEUSES, MAIS J'AI ESSAYE
<                    ICI, DE NE JAMAIS FAIRE APPARAITRE DE
<                    CONSTANTES, OU D'OBJETS DONT LA DEFINITION
<                    N'AIT ETE FAITE AVEC LE PLUS DE RIGUEUR
<                    POSSIBLE; DE PLUS, A CHAQUE FOIS QUE
<                    CELA EST POSSIBLE, DES VERIFICATIONS "CONTEX-
<                    TUELLES" ONT ETE INTRODUITES (PAR EXEMPLE,
<                    DE NON RECOUVREMENT DE MASQUES).
<                      AINSI, J'ESPERE QUE LE RESTE DU SYSTEME
<                    NE DEPENDRA QUE DE CES DEFINITIONS, ET QUE
<                    LEUR MODIFICATION SE FERA DANS LA CONTINUITE...
<
<
         PAGE
<
<
<        C O N S T A N T E S   G E N E R A L E S
<                    D E   M A S Q U E  :
<
<
MFFFF::  VAL         -1              < -1='FFFF : UTILISE POUR COMPLEMENT.
N::      VAL         -MFFFF          < POUR CALCULER DES MASQUES A PARTIR
                                     < DE CONSTANTES QUI SONT DES PUISSAN-
                                     < CES DE 2.
         PAGE
<
<
<        C O N S T A N T E S   G E N E R A L E S
<                D E   N O M B R E  :
<
<
BITX::   VAL         L               < RANG DU BIT D'INDEXATION.
BASE10:: VAL         10              < BASE DECIMALE,
BASE16:: VAL         16              < BASE HEXA-DECIMALE.
MBAS16:: VAL         BASE16-N        < POUR LE CODAGE DE LA LONGUEUR DE MESSAGES
                                     < EN ASCI...
NBITCX:: VAL         BASE16=K        < NOMBRE DE BITS CONTENUS DANS
                                     < UN CHIFFRE HEXA-DECIMAL.
LK::     VAL         BIT>BASE10      < VALEUR DU FACTEUR MULTIPLICATIF 'K'.
UMEM::   VAL         2               < LES TAILLES MEMOIRES SONT EXPRIMEES
                                     < EN UNITE DE DOUBLE-MOTS (2).
XWOR%1:  VAL         LK/UMEM         < 1K DANS CETTE UNITE...
XLSTAC:: VAL         32              < TAILLE DES STACKS MEMOIRE UTILISES
                                     < EN K-MOTS.
XKMEMX:: VAL         512+256+32+4+4  < TAILLE EN K-MOTS DE LA MEMOIRE DE TYPE
                                     < 'SOLAR', C'EST-A-DIRE EXCLUANT CELLE
                                     < QUI EST EN FAIT LE SYSTEME DE TELE-
                                     < VISION MOYENNE DEFINITION...
MEMORK:: VAL         32              < TAILLE EN K-MOTS DE LA MEMOIRE
                                     < ALLOUABLE.
MEMORY:: VAL         MEMORK          < LA MEMOIRE ALLOUABLE FAIT 32K,
MEMORY:  VAL         MEMORY*XWOR%1   < SOIT (...) DOUBLE-MOTS.
                                     < LA MEMOIRE.
XX64K::  VAL         64              < LONGUEUR DE LA MEMOIRE ACCESSIBLE EN
                                     < ADRESSAGE DIRECT, ET PAR LA MEME, DONNE
                                     < LA TAILLE DU SYSTEME...
PLK::    VAL         LK              < LONGUEUR DU PLUS PETIT ESPACE MEMOIRE
                                     < ALLOUABLE A UN UTILISATEUR.
<
<
<        P A R T I T I O N   D E   L A   M E M O I R E  :
<
<
DOLA1::  VAL         ZERO-ZERO       < '$' INITIAL DE LA MEMOIRE BASSE.
XWOR%1:  VAL         UMEM=K          < POUR AVOIR UNE ADRESSE-MOT,
DOLA2::  VAL         MEMORY>XWOR%1   < '$' INITIAL DE LA MEMOIRE HAUTE.
DOLAR1:  VAL         DOLA1           < INITIALISATION DU '$' BAS COURANT,
DOLAR2:  VAL         DOLA2           < INITIALISATION DU '$' HAUT COURANT.
         PAGE
<
<
<        C O N S T A N T E S   G E N E R A L E S
<                D U   S Y S T E M E  :
<
<
IJIJDX:: VAL         I               < TRANSLATION DES INDEX LORS
                                     < DE L'UTILISATION DES INSTRUCTIONS
                                     < 'JIX' ET 'JDX'.
DEPILE:: VAL         D               < TRANSLATION NEGATIVE A DONNER
                                     < AUX ADRESSES DE PILE AFIN DE PRENDRE
                                     < EN COMPTE LA GESTION QUI EST FAITE
                                     < PAR LES INSTRUCTIONS 'PSR' ET 'PLR'.
NMBUSM:: VAL         8               < NOMBRE MAXIMUM DE BUS MEMOIRE.
NMPROB:: VAL         4               < NOMBRE MAXIMUM DE PROCESSEURS
                                     < PAR BUS MEMOIRE (UN PROCESSEUR
                                     < POUVANT ETRE UN SOLAR-40, UN
                                     < SOLAR-65, UN IOP, OU ENFIN
                                     < UN CBM-P.
NMPROC:: VAL         NMBUSM*NMPROB   < NOMBRE MAXIMUM DE PROCESSEURS.
NMTS::   VAL         128             < NOMBRE MAXIMUM DE TACHES
                                     < SOFTWARES DANS LE SYSTEME.
NMTH::   VAL         16              < NOMBRE MAXIMUM DE TACHES
                                     < HARDWARES DANS LE SYSTEME,
                                     < NON COMPRIS LE DEFAUT SECTEUR !!!
NTS0::   VAL         K               < NUMERO DE LA PREMIERE TACHE SOFT,
NTH0::   VAL         K               < NUMERO DE LA PREMIERE TACHE HARD.
         IF          NBITAB-NMPROC,,XEIF%,XEIF%
         IF          A T T E N T I O N  : IL Y A TROP DE
         IF          PROCESSEURS POUR QUE LEUR LISTE
         IF          TIENNE SUR 2 MOTS (OU DANS LES 2
         IF          REGISTRES 'A' ET 'B') !!!
XEIF%:   VAL         ENDIF
NMSVC::  VAL         BIT>NBITOC      < NOMBRE MAXIMUM DE 'SVC'.
NMSVCM:: VAL         NMSVC           < NOMBRE MAXIMUM DE 'SVC' EXECUTABLES
                                     < EN MODE MAITRE.
NMSVCS:: VAL         NMSVC           < NOMBRE MAXIMUM DE 'SVC' EXECUTABLES
                                     < EN MODE ESCLAVE.
         PAGE
<
<
<        C O N V E N T I O N S   G E N E R A L E S  :
<
<
NEXIST:: VAL         NIL-ZERO        < EXPRIME LA NON EXISTENCE,...
EXIST::  VAL         BIT)NEXIST      < EXPRIME L'EXISTENCE...
         PAGE
<
<
<        C O N S T A N T E S   G E N E R A L E S
<                D E   M A S Q U E S  :
<
<
M1FFF::  VAL         '1FFF
M0FFF::  VAL         '0FFF
M7FFF::  VAL         '7FFF
M007F::  VAL         '007F
M000F::  VAL         '000F
M0001::  VAL         '0001
ME000::  VAL         'E000
XWOR%1:  VAL         K               < MASQUE D'ACCES A L'OCTET DROIT
                                     < D'UN MOT.
         DO          NBITOC
XWOR%1:  VAL         XWOR%1>BIT?BIT  < GENERATION BIT A BIT DE 'MOCD'.
MOCD::   VAL         XWOR%1          < MASQUE D'ACCES A L'OCTET DROIT...
MOCG::   VAL         MOCD>NBITOC     < MASQUE D'ACCES A L'OCTET
                                     < GAUCHE D'UN MOT.
M00FF::  VAL         MOCD
MFF00::  VAL         MOCG
XWOR%1:  VAL         K               < MASQUE RECOUVRANT UN MOT.
         DO          NBITMO
XWOR%1:  VAL         XWOR%1>BIT?BIT  < GENERATION BIT A BIT DE 'MMOT'.
MMOT::   VAL         XWOR%1          < MASQUE D'ACCES AU MOT...
         IF          MMOT-MFFFF,,XEIF%,
         IF          ATTENTION : IL VA SE PASSER DES CHOSES !!!
XEIF%:   VAL         ENDIF
         PAGE
<
<
<        D E F I N I T I O N   D E S
<        C O D E S   A S C I I  :
<
<
KNUL::   VAL         '00             < CONTROL-SHIFT-P.
KSOH::   VAL         '01             < CONTROL-A.
KSTX::   VAL         '02             < CONTROL-B.
KETX::   VAL         '03             < CONTROL-C.
KEOT::   VAL         '04             < CONTROL-D.
KENQ::   VAL         '05             < CONTROL-E.
KACK::   VAL         '06             < CONTROL-F.
KBEL::   VAL         '07             < CONTROL-G.
KBS::    VAL         '08             < CONTROL-H (BACK-SPACE).
KHT::    VAL         '09             < CONTROL-I (TAB).
KLF::    VAL         '0A             < CONTROL-J (LINE-FEED).
KVT::    VAL         '0B             < CONTROL-K.
KFF::    VAL         '0C             < CONTROL-L.
KCR::    VAL         '0D             < CONTROL-M (RETURN).
KSO::    VAL         '0E             < CONTROL-N.
KSI::    VAL         '0F             < CONTROL-O.
KDLE::   VAL         '10             < CONTROL-P.
KDC1::   VAL         '11             < CONTROL-Q.
KDC2::   VAL         '12             < CONTROL-R.
KDC3::   VAL         '13             < CONTROL-S.
KDC4::   VAL         '14             < CONTROL-T.
KNAK::   VAL         '15             < CONTROL-U.
KSYN::   VAL         '16             < CONTROL-V.
KETB::   VAL         '17             < CONTROL-W.
KCAN::   VAL         '18             < CONTROL-X.
KEM::    VAL         '19             < CONTROL-Y.
KSUB::   VAL         '1A             < CONTROL-Z.
KESC::   VAL         '1B             < CONTROL-SHIFT-K.
KFS::    VAL         '1C             < CONTROL-SHIFT-L.
KGS::    VAL         '1D             < CONTROL-SHIFT-M.
KRS::    VAL         '1E             < CONTROL-SHIFT-M.
KUS::    VAL         '1F             < CONTROL-SHIFT-O.
KSP::    VAL         " "             < SPACE.
KPE::    VAL         "!"             < !
KDQ::    VAL         '22             < "
KDIESE:: VAL         "#"             < #
KDOLAR:: VAL         "$"             < $
KPC::    VAL         '25             < POUR-CENT.
KET::    VAL         "&"             < &
KQUOTE:: VAL         "'"             < '
KPG::    VAL         "("             < (
KPD::    VAL         ")"             < )
KSTAR::  VAL         "*"             < *
KPLUS::  VAL         "+"             < +
KVIR::   VAL         ","             < ,
KMOINS:: VAL         "-"             < -
KPOINT:: VAL         "."             <.
KSLASH:: VAL         "/"             < /
KZERO::  VAL         "0"             < 0
KUN::    VAL         "1"             < 1
KDEUX::  VAL         "2"             < 2
KTROIS:: VAL         "3"             < 3
KQUATR:: VAL         "4"             < 4
KCINQ::  VAL         "5"             < 5
KSIX::   VAL         "6"             < 6
KSEPT::  VAL         "7"             < 7
KHUIT::  VAL         "8"             < 8
KNEUF::  VAL         "9"             < 9
KDP::    VAL         ":"             < ::
KPV::    VAL         ";"             < ;
KINF::   VAL         "<"             < <
KEGAL::  VAL         "="             < =
KSUP::   VAL         ">"             < >
KPI::    VAL         "?"             < ?
KAROND:: VAL         '40             < @
KA::     VAL         "A"             < A
KB::     VAL         "B"             < B
KC::     VAL         "C"             < C
KD::     VAL         "D"             < D
KE::     VAL         "E"             < E
KF::     VAL         "F"             < F
KG::     VAL         "G"             < G
KH::     VAL         "H"             < H
KI::     VAL         "I"             < I
KJ::     VAL         "J"             < J
KK::     VAL         "K"             < K
KL::     VAL         "L"             < L
KM::     VAL         "M"             < M
KN::     VAL         "N"             < N
KO::     VAL         "O"             < O
KP::     VAL         "P"             < P
KQ::     VAL         "Q"             < Q
KR::     VAL         "R"             < R
KS::     VAL         "S"             < S
KT::     VAL         "T"             < T
KU::     VAL         "U"             < U
KV::     VAL         "V"             < V
KW::     VAL         "W"             < W
KX::     VAL         "X"             < X
KY::     VAL         "Y"             < Y
KZ::     VAL         "Z"             < Z
KCG::    VAL         "["             < [
KASLSH:: VAL         "\"             < \
KCD::    VAL         "]"             < ]
KCHAP::  VAL         "^"             < ^
KSOUL::  VAL         "_"             < _
KAPO::   VAL         '60             < APOSTROPHE.
KMINUS:: VAL         '20             < CONSTANTE DE PASSAGE DES
                                     < MAJUSCULES AUX MINUSCULES.
KAM::    VAL         KA+KMINUS       < A
KBM::    VAL         KB+KMINUS       < B
KCM::    VAL         KC+KMINUS       < C
KDM::    VAL         KD+KMINUS       < D
KEMI::   VAL         KE+KMINUS       < E
KFM::    VAL         KF+KMINUS       < F
KGM::    VAL         KG+KMINUS       < G
KHM::    VAL         KH+KMINUS       < H
KIM::    VAL         KI+KMINUS       < I
KJM::    VAL         KJ+KMINUS       < J
KKM::    VAL         KK+KMINUS       < K
KLM::    VAL         KL+KMINUS       < L
KMM::    VAL         KM+KMINUS       < M
KNM::    VAL         KN+KMINUS       < N
KOM::    VAL         KO+KMINUS       < O
KPM::    VAL         KP+KMINUS       < P
KQM::    VAL         KQ+KMINUS       < Q
KRM::    VAL         KR+KMINUS       < R
KSM::    VAL         KS+KMINUS       < S
KTM::    VAL         KT+KMINUS       < T
KUM::    VAL         KU+KMINUS       < U
KVM::    VAL         KV+KMINUS       < V
KWM::    VAL         KW+KMINUS       < W
KXM::    VAL         KX+KMINUS       < X
KYM::    VAL         KY+KMINUS       < Y
KZM::    VAL         KZ+KMINUS       < Z
KACCOG:: VAL         '7B             < ACCOLADE GAUCHE.
KDPBIS:: VAL         '7C             < 'DEUX POINTS' BIZARRES...
KACCOD:: VAL         '7D             < ACCOLADE DROITE.
KALTM::  VAL         KACCOD          < FABULEUX ALT-MODE !!!
ALTMAX:: VAL         KZ              < CODE MAXIMUM DU CARACTERE POUVANT
                                     < REMPLACER LE ALT-MODE LORS DE L'UTILI-
                                     < SATION DES FONCTIONS '1EX5...
KINTER:: VAL         KAM             < CARACTERE REMPLACANT TOUT CARACTERE
                                     < EN ENTREE SUR UNE VISU INTERDITE
                                     < PAR 'VINTER'...
         IF          ALTMAX-KINTER,XEIF%,,
         IF          ATTENTION : IL NE FAUT PAS QUE LE ALT-MODE PUISSE
         IF          ETRE REMPLACE PAR LE CARACTERE 'KINTER' ; EN EFFET
         IF          SI 'KINTER' REMPLACE PAR '1EX5 LE ALT-MODE, PUIS QUE
         IF          L'ON INTERDISE CETTE VISU PAR 'VINTER', POUR CHAQUE
         IF          CARACTERE FRAPPE, ON FERA AINSI UN ALT-MODE !!!
XEIF%:   VAL         ENDIF
KSINUS:: VAL         '7E             < PETIT BOUT DE SINUSOIDE...
KDEL::   VAL         '7F             < RUBOUT.
KRUBOU:: VAL         KDEL            < RUBOUT.
K6D::    VAL         '6D             < EXTENSION CR+LF...
KINEX::  VAL         'FF             < CARACTERE INEXISTANT.
KEON::   VAL         KEOT            < CARACTERE DE FIN DE NOM...
KCCI::   VAL         KPE             < CARACTERE D'INTRODUCTION DES COMMANDES
                                     < ENVOYEES AU CCI.
KBREAK:: VAL         KNUL            < LE CODE DU 'BREAK' EST CELUI DU 'NULL'.
         IF          KBREAK-K,,XEIF%,
         IF          ATTENTION : IL Y A DES TAS DE TESTS DANS
         IF          'HDLVIS' QUI NE VONT PAS MARCHER ('JAE',...) !!!
XEIF%:   VAL         ENDIF
         PAGE
<
<
<        N U M E R O   D E   C O M P T E
<          D U   S Y S T E M E  :
<
<
XK1::    VAL         KDP             < LE NUMERO DE COMPTE
XK2::    VAL         KS              < DU SYSTEME
XK3::    VAL         KY              < EST DEFINI
XK4::    VAL         KS              < PAR 4 CARACTERES.
<
<
<        M O N    N U M E R O   D E   C O M P T E  :
<
<
XXK1::   VAL         KDP
XXK2::   VAL         KJ
XXK3::   VAL         KF
XXK4::   VAL         KC
<
<
<        N U M E R O   D E   C O M P T E   D E   S I M U L A T I O N  :
<
<
XXXK1::  VAL         KDP
XXXK2::  VAL         KS
XXXK3::  VAL         KI
XXXK4::  VAL         KM
         PAGE
<
<
<        G E N E R A T I O N   D Y N A M I Q U E
<                    D E   C A R T E S  :
<
<
<        FONCTION :
<                      LES CONSTANTES SUIVANTES PERMET-
<                    TENT LA GENERATION DYNAMIQUE DE CAR-
<                    TES EN DEFINISSANT LE FORMAT DES
<                    CARTES STANDARD (0, 9, 21, 37) AINSI
<                    QUE LES DEUXIEMES OPERANDES DE L'OPE-
<                    RATEUR '='.
<
<
<
< DEFINITION DES FONCTIONS DISPONIBLES
< EN TANT QUE DEUXIEME OPERANDE DE '=' :
<
KOLGET:: VAL         'F1             < DEUXIEME OPERANDE DE L'OPERATEUR '='
                                     < DEMANDANT L'ACCES AU CARACTERE COURANT
                                     < DE LA CARTE "DYNAMIQUE" DONT L'INDEX
                                     < EST LE PREMIER OPERANDE.
KOLSTO:: VAL         'F2             < DEUXIEME OPERANDE DE L'OPERATEUR '='
                                     < DEMANDANT DE METTRE DANS LA CARTE
                                     < "DYNAMIQUE" LE CARACTERE CONTENU DANS
                                     < L'OCTET LIBRE DE CE DEUXIEME OPERANDE
                                     < A L'INDEX DONNE PAR LE PREMIER
                                     < OPERANDE (VOIR LE MASQUE 'KOLC' POUR LA
                                     < DEFINITION DU CARACTERE A INSERER).
KOLMOV:: VAL         'F3             < FONCTION PERMETTANT DE DEPLACER
                                     < UNE CHAINE DE CARACTERES D'INDEX
                                     < INITIAL DEFINI PAR 'KOLMOE' VERS
                                     < L'INDEX FINAL DEFINI PAR 'KOLMOR'
                                     < DANS LE PREMIER OPERANDE DE '=',
                                     < ET SUR UNE LONGUEUR DEFINI PAR
                                     < PAR 'KOLMOL' DANS LE DEUXIEME
                                     < OPERANDE.
KOLTES:: VAL         'F4             < FONCTION PERMETTANT DE RECHERCHER
                                     < LE CARACTERE DEFINI PAR LE MASQUE 'KOLC'
                                     < DANS LA CHAINE DEFINIE PAR SON
                                     < INDEX DE PREMIER CARACTERE (MASQUE
                                     < 'KOLTED' DU PREMIER OPERANDE), ET
                                     < PAR LE PREMIER CARACTERE NE LUI
                                     < APPARTENANT PAS MASQUE 'KOLTEF' DU
                                     < PREMIER OPERANDE) ; LE RESULTAT EST
                                     < L'INDEX DE LA PREMIERE OCCURENCE DU
                                     < CARACTERE, OU BIEN L'INDEX DE FIN DANS
                                     < LES AUTRES CAS...
<
< DEFINITION DES MASQUES DU PREMIER OPERANDE :
<
KOLMOE:: VAL         MFF00           < DEFINITION DE L'EMETTEUR LORS
                                     < D'UN DEPLACEMENT DE CHAINE PAR
                                     < LA FONCTION 'KOLMOV'.
KOLMOR:: VAL         M00FF           < DEFINITION DU RECEPTEUR LORS
                                     < D'UN DEPLACEMENT DE CHAINE PAR
                                     < LA FONCTION 'KOLMOV'.
KOLTED:: VAL         MFF00           < DEFINITION DE L'INDEX DU PREMIER
                                     < CARACTERE D'UNE CHAINE DANS LA
                                     < FONCTION 'KOLTES'.
KOLTEF:: VAL         M00FF           < DEFINITION DE L'INDEX DU PREMIER
                                     < CARACTERE N'APPARTENANT PLUS A UNE
                                     < CHAINE DANS LA FONCTION 'KOLTES'.
<
< DEFINITION DES MASQUES DE DEUXIEME OPERANDE :
<
KOLF::   VAL         MFF00           < DEFINITION DE LA FONCTION DEMANDEE ::
                                     < PAR EXEMPLE : 'KOLGET', 'KOLSTO' OU
                                     < BIEN 'KOLMOV'...
KOLMOL:: VAL         M00FF           < DEFINITION DU NOMBRE DE CARACTERES A
                                     < DEPLACER PAR LA FONCTION 'KOLMOV'.
KOLC::   VAL         M00FF           < DEFINITION DU CARACTERE A INSERER
                                     < DANS LA CARTE DYNAMIQUE PAR LA
                                     < FONCTION 'KOLSTO', AINSI QUE DU CARAC-
                                     < TERE A TESTER LORS DE LA FONCTION
                                     < 'KOLTES'.
         PAGE
<
<
<        D E F I N I T I O N   D E S   C H A M P S  :
<
<
<        DEFINITION :
<                      UN 'CHAMP' EST UNE ZONE DE UN
<                    OU PLUSIEURS BITS CONTENUE DANS
<                    UN MOT MACHINE ; UN CHAMP SERA
<                    TOUJOURS DEFINI PAR UN MASQUE,
<                    ET SON POSITIONNEMENT SE FERA
<                    TOUJOURS A L'AIDE D'UNE VALEUR
<                    CADREE A DROITE DANS LE MOT
<                    MACHINE.
<
<
<        GENERATION :
<                      PAR LES FONCTIONS 'FMASK' ET
<                    'FVAL' DE L'ASSEMBLEUR LA PRE-
<                    MIERE PERMET DE DEFINIR UN MASQUE
<                    COURANT (PREMIER OPERANDE DE '='),
<                    LA SECONDE, DONNE LA VALEUR A INSE-
<                    RER DANS LE MASQUE COURANT (PREMIER
<                    OPERANDE DE '='), PUIS FAIT UN CUMUL
<                    (PAR UN 'OU') SUR UNE VALEUR COURANTE,
<                    QUI EST ENSUITE AFFECTEE A L'EXPRESSION
<                    COURANTE...
<
<
FOMASK:: VAL         'F5             < FONCTION DE DEFINITION DU MASQUE
                                     < COURANT : CELUI-CI SERA LA PARTIE
                                     < GAUCHE DE L'OPERATEUR '='.
FOVAL::  VAL         'F6             < FONCTION D'INSERTION DE LA VALEUR
                                     < DANS LE MASQUE COURANT, ET DE CUMUL ;
                                     < LA VALEUR EST L'OPERANDE GAUCHE DE
                                     < L'OPERATEUR '='.
<
< GENERATION DES OPERANDES DROITS DE '=' :
<
XWOR%1:  VAL         KOLF=K          < POUR CADRER LA FONCTION :
FMASK::  VAL         FOMASK>XWOR%1   < 'DEFINITION D'UN MASQUE'.
FVAL::   VAL         FOVAL>XWOR%1    < 'CADRAGE D'UNE VALEUR SUIVANT UN MASQUE'.
         PAGE
<
<
<        F O N C T I O N S    C O M P L E T E S   D E
<        G E N E R A T I O N    D E   C A R T E S  :
<
<
<        NOTA :
<                      CES FONCTIONS 'FCXXX' S'UTILISERONT
<                    POUR GENERER D'AUTRES FONCTIONS AVEC
<                    CETTE FOIS DES ARGUMENTS, ET CECI DE
<                    LA FACON SUIVANTE :
<
<XXX:    VAL         <EXPRESSION AVEC 'FMASK', 'FVAL',...>?FCXXX
<
<
FCGET::  VAL         KOLF=FMASK+KOLGET=FVAL
                                     < ACCES A UN OCTET.
FCSTO::  VAL         KOLF=FMASK+KOLSTO=FVAL
                                     < RANGEMENT D'UN OCTET.
FCMOV::  VAL         KOLF=FMASK+KOLMOV=FVAL
                                     < MOUVEMENT D'UNE CHAINE D'OCTETS.
FCTES::  VAL         KOLF=FMASK+KOLTES=FVAL
                                     < RECHERCHE D'UN OCTET DANS UNE CHAINE.
         PAGE
<
<
<        D E F I N I T I O N   D ' U N E   C A R T E  :
<
<
0       @1           2               3                                         L
XWOR%1:  VAL         K               < DEBUT PRESUME D'UNE CARTE,
XWOR%2:  VAL         80              < FIN PRESUMEE D'UNE CARTE...
XWOR%3:  VAL         KOLTED=FMASK+XWOR%1=FVAL+KOLTEF=FMASK+XWOR%2=FVAL
XWOR%4:  VAL         KOLC=FMASK+KZERO=FVAL?FCTES
KOL0::   VAL         XWOR%3=XWOR%4   < DEFINITION DE LA ZONE 'ETIQUETTE' DES
                                     < LIGNES A ASSEMBLER.
XWOR%4:  VAL         KOLC=FMASK+KUN=FVAL?FCTES
KOL1::   VAL         XWOR%3=XWOR%4   < DEFINITION DE LA ZONE 'COMMANDE'.
XWOR%4:  VAL         KOLC=FMASK+KDEUX=FVAL?FCTES
KOL2::   VAL         XWOR%3=XWOR%4   < DEFINITION DE LA ZONE 'ARGUMENT'.
XWOR%4:  VAL         KOLC=FMASK+KTROIS=FVAL?FCTES
KOL3::   VAL         XWOR%3=XWOR%4   < DEFINITION DE LA ZONE 'COMMENTAIRE'.
XWOR%4:  VAL         KOLC=FMASK+KL=FVAL?FCTES
KOLON::  VAL         XWOR%3=XWOR%4+1 < LONGUEUR D'UNE CARTE A ASSEMBLER.
         IF          XWOR%1-KOL0,XEIF%,XEIF%,
         IF          ATTENTION : ARGUMENTS DE BASE MAUVAIS !!!
XEIF%:   VAL         ENDIF
         IF          XWOR%2-KOL0-KOLON,,XEIF%,XEIF%
         IF          ATTENTION : ARGUMENTS DE BASE MAUVAIS !!!
XEIF%:   VAL         ENDIF
NCDYN::  VAL         3               < NOMBRE DE CARTES DYNAMIQUES,
CODGEN:: VAL         KOLON*NCDYN     < INDEX D'ACCES A LA PILE COURANTE DU
                                     < CODE GENERE...
LCODG::  VAL         YY8-CODGEN      < NOMBRE D'OCTETS DE LA PILE DU CODE
                                     < GENERE...
         PAGE
<
<
<        Q U E L Q U E S   C O N S T A N T E S   D A N S
<        L E   F I C H I E R   D E   D E F I N I T I O N S  :
<
<
<        NOTA :
<                      IL FALLAIT ATTENDRE QUE 'KOLON',
<                    'KOL0', 'FCMOV',... SOIENT DEFINIS
<                    POUR COMMENCER A APPELER LA PROCE-
<                    DURE #SISP CMS5 GEN DEF# POUR INSE-
<                    RER 'NBITMO',...
<
<
<*******************************************************************************
XWOR%F:  VAL         ORDI
ORDI:   @VAL         '0@@@@          < TYPE DE L'ORDINATEUR HOTE DE 'CMS5'...
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         NBITMO
NBITMO: @VAL         '0@@@@          < NOMBRE DE BITS PAR MOT-MACHINE...
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         SECTSY
SECTSY: @VAL         '0@@@@          < PSEUDO-ADRESSE 'DKF' DE 'CMS5'.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
         PAGE
<
<
<        I N D E X   D ' I T E R A T I O N  :
<
<
KOLDO::  VAL         'F8             < CETTE FONCTION PERMET DE RECUPERER
                                     < L'INDEX COURANT D'UNE ITERATION
                                     < PORTANT SUR TOUTE INSTRUCTION
                                     < AUTRE QU'UN 'EOT' ; SI UN 'DO N'
                                     < A ETE EXECUTE, ELLE RENVERRA LES
                                     < VALEURS N-1, N-2,..., 2, 1, 0
                                     < AUXQUELLES AURONT ETE AJOUTEES
                                     < LA PARTIE GAUCHE DE L'OPERATEUR "=",
                                     < AINSI QUE L'OCTET QUI SUIT LA
                                     < FONCTION ELLE-MEME.
KOLDOF:: VAL         'F9             < CETTE FONCTION EST IDENTIQUE A LA
                                     < FONCTION 'KOLDO', MAIS PORTE SUR
                                     < LES ITERATIONS INTERRESSANTS LES
                                     < INSTRUCTIONS 'EOT'...
<
< DEFINITION DES FONCTIONS COMPLETES (SI NECESSAIRE) :
<
FCDO::   VAL         KOLF=FMASK+KOLDO=FVAL
                                     < AJOUTE A LA VALEUR DE L'EXPRESSION
                                     < SITUEE A GAUCHE DE "=" L'INDEX COURANT
                                     < DES ITERATIONS SUR INSTRUCTIONS DIF-
                                     < FERENTES DE 'EOT'.
FCDOF::  VAL         KOLF=FMASK+KOLDOF=FVAL
                                     < AJOUTE A LA VALEUR DE L'EXPRESSION
                                     < SITUEE A GAUCHE DE "=" L'INDEX COURANT
                                     < DES ITERATIONS SUR 'EOT'.
         PAGE
<
<
<        D E F I N I T I O N   D E S   F O N C T I O N S
<        D E   T E S T   D E S   S Y M B O L E S  :
<
<
<        FONCTION :
<                      CETTE FONCTION DE L'ASSEMBLEUR 'FOSYMB'
<                    PERMET, LUI TRANSMETTANT UN SYMBOLE PAR
<                    L'INTERMEDIAIRE D'UNE CARTE DYNAMIQUE,
<                    DE SAVOIR SI CE SYMBOLE EXISTE, ET SI
<                    OUI, DE QUEL TYPE IL EST, ET QUEL EST
<                    SON MODE DE REFERENCE.
<                      DE PLUS, LES SOUS-FONCTIONS RECEMMENT
<                    INTRODUITES ('FSXXXX') PERMETTENT DE
<                    CHANGER LE DESCRIPTEUR D'UN SYMBOLE,
<                    AUTORISANT PAR EXEMPLE LA MISE A
<                    L'ETAT 'INDEFINI' D'UN SYMBOLE TRANS-
<                    LATABLE DEJA DEFINI, ET DONC AINSI
<                    SA REDEFINITION ULTERIEURE ; CETTE
<                    APPLICATION S'ECRIRA PAR EXEMPLE :
<
<XXX:    VAL         MSYMBN?MSYMBM=FMASK+MSYMBN=FVAL(K?YYY=FOSYMM
<                    (OU 'YYY' DESIGNE UNE VARIABLE DEFINIE
<                    A L'AIDE DES MASQUES 'MSYMBI' ET 'MSYMBL'
<                    PRECISANT LA POSITION DU SYMBOLE DANS LA
<                    CARTE DYNAMIQUE COURANTE)
<
<                      AUTRE EXEMPLE: ON POURRA RENDRE
<                    UN SYMBOLE QUELCONQUE EQUIVALENT AU
<                    COMPTEUR D'ASSEMBLAGE "$" EN ECRIVANT :
<XXX:    VAL         MSYMBM=FMASK(K?YYY=FOSYMM
<                    (OU 'YYY' A LE MEME SENS QUE CI DESSUS,
<                    ET CONCERNE LE SYMBOLE A RENDRE
<                    EQUIVALENT AU "$").
<
<
<        NOTA IMPORTANT :
<                      BIEN EVIDEMMENT, LA PLUS GRANDE
<                    PRUDENCE SERA REQUISE LORS DE L'UTI-
<                    LISATION DE CES FONCTIONS !!!
<
<
FOSYMB:: VAL         'F7             < FONCTION DE GESTION D'UN SYMBOLE.
<
< DEFINITION DES SOUS-FONCTIONS :
<
FSSYMT:: VAL         '00             < PERMET DE TESTER L'ETAT DU SYMBOLE.
FSSYMM:: VAL         '01             < PERMET DE MODIFIER L'ETAT D'UN
                                     < SYMBOLE ARGUMENT (CARTE DYNAMIQUE).
<
< DEFINITION DES MASQUES DE DEUXIEME OPERANDE DE "=" :
<
KOLSYM:: VAL         M00FF           < DEFINITION DE LA SOUS-FONCTION.
<
< DEFINITION DES FONCTIONS COMPLETES :
<
XWOR%1:  VAL         KOLF=FMASK+FOSYMB=FVAL
FOSYMT:: VAL         KOLSYM=FMASK+FSSYMT=FVAL?XWOR%1
                                     < FONCTION DE TEST DE L'ETAT
                                     < DU SYMBOLE ARGUMENT.
FOSYMM:: VAL         KOLSYM=FMASK+FSSYMM=FVAL?XWOR%1
                                     < FONCTION DE MODIFICATION DE L'ETAT
                                     < DU SYMBOLE ARGUMENT.
FCSYMT:: VAL         FOSYMT          < DEFINITION DES
FCSYMM:: VAL         FOSYMM          < FONCTIONS-SYNONYMES.
<
< DEFINTION DES MASQUES DU PREMIER OPERANDE DE "=" :
<
MSYMBI:: VAL         MFF00           < DEFINITION DE L'INDEX DU PREMIER CARAC-
                                     < TERE DU SYMBOLE DANS LA ZONE DYNAMIQUE.
MSYMBL:: VAL         M00FF           < DEFINITION DU NOMBRE DE CARACTERES
                                     < DU SYMBOLE.
<
< RESULTAT : LA VALEUR RENVOYEE (A LAQUELLE A ETE
< AJOUTEE L'OCTET SUIVANT LA FONCTION 'FOSYMB'
< DANS LE DEUXIEME OPERANDE DE "=") EST LA
< SUPERPOSITION D'UN CERTAIN NOMBRE DE MASQUES
< DEFINIS CI-APRES ; ON NOTERA ENFIN QU'UNE
< VALEUR NULLE CORRESPOND A UN SYMBOLE INEXISTANT...
<
MSYMBX:: VAL         '8000           < CE MASQUE INDIQUE QU'UNE INDEXATION A
                                     < ETE DEMANDEE SUR CE SYMBOLE ALORS
                                     < QU'IL N'EST PAS ENCORE DEFINI.
MSYMB1:: VAL         '4000           < CE MASQUE, LORSQU'IL EST PRESENT
                                     < INDIQUE QUE LE SYMBOLE N'A ETE
                                     < REFERENCE EN AVANT QU'UNE SEULE
                                     < FOIS ; POUR LES REFERENCES EN
                                     < AVANT SUIVANTES, IL EST ABSENT,
                                     < AINSI QU'APRES SA DEFINITION.
MSYMBS:: VAL         '3F00           < CE MASQUE DONNE LE NUMERO DE SECTION
                                     < LORSQUE LE SYMBOLE EXISTE (DEFINI), ET
                                     < EST TRANSLATABLE ; UN NUMERO NUL
                                     < EST RENVOYE DANS LES AUTRES CAS...
MSYMBN:: VAL         '0080           < CE MASQUE SIGNIFIE QUE LE SYMBOLE
                                     < A ETE REFERENCE SANS ETRE ENCORE
                                     < DEFINI (IL SERA DONC TRANSLATABLE).
MSYMBA:: VAL         '0040           < CE MASQUE INDIQUE QUE LE SYMBOLE A
                                     < ETE DEFINI DE MANIERE ABSOLUE (DONC
                                     < PAR UNE DIRECTIVE 'VAL').
MSYMBR:: VAL         '0020           < CE MASQUE INDIQUE QUE LE SYMBOLE
                                     < A ETE REFERENCE PAR UNE DIREC-
                                     < TIVE 'REF'.
MSYMBD:: VAL         '0010           < CE MASQUE INDIQUE QUE LE SYMBOLE
                                     < EST TRANSLATABLE, ET DEJA DEFINI
                                     < DANS UNE 'DSEC'.
MSYMBC:: VAL         '0008           < CE MASQUE INDIQUE QUE LE SYMBOLE EST
                                     < DEJA CHAINE (IL EST RENCONTRE ASSOCIE
                                     < AU MASQUE 'MSYMBN').
MSYMBF:: VAL         '0004           < CE MASQUE INDIQUE QUE LE SYMBOLE A
                                     < ETE REFERENCE DANS UNE DIRECTIVE 'DEF'.
                                     < (QU'IL SOIT DEFINI, OU REFERENCE
                                     < EN AVANT).
MSYMBM:: VAL         '0003           < CE MASQUE DONNE LE NOMBRE DE MOTS
                                     < UTILISES POUR RANGER LE NOM DU
                                     < SYMBOLE ; BIEN QU'INUTILE, CE MASQUE
                                     < DEVRA TOUJOURS ETRE UTILISE LORS
                                     < DES DEFINITIONS DES MASQUES DE MODI-
                                     < FICATION DES ETATS DE SYMBOLES, PUISQU'
                                     < EN EFFET, LES FONCTIONS 'FMASK' ET 'FVAL'
                                     < PROVOQUENT UN CADRAGE A GAUCHE DE LA
                                     < VALEUR FONCTION DE LA POSITION DU
                                     < MASQUE DONNE.
         IF          MSYMBM=K-K,,XEIF%,
         IF          A T T E N T I O N  : LE MASQUE
         IF          'MSYMBM' DOIT ETRE CADRE A DROITE !!!
XEIF%:   VAL         ENDIF
SYMBX::  VAL         K               < CETTE VALEUR EST RENVOYEE LORSQUE LE
                                     < SYMBOLE EST INEXISTANT (NI DEFINI,
                                     < NI REFERENCE...).
         PAGE
<
<
<        D E F I N I T I O N   D E S   F O N C T I O N S
<        D E   C O N V E R S I O N S   H E X A - D E C I M A L E S  :
<
<
<        FONCTION :
<                      CES FONCTIONS DE L'ASSEMBLEUR,
<                    PERMETTENT DE CONVERTIR UN CHIFFRE
<                    ASCI HEXA-DECIMAL EN BINAIRE ('FOCAB'),
<                    OU BIEN UN OU DEUX CHIFFRES BINAIRES EN
<                    DEUX CARACTERES ASCI HEXA-DECIMAUX.
<                      DE PLUS, ELLES PERMETTENT DORENAVANT
<                    LA CONVERSION D'EXPRESSIONS ABSOLUES
<                    EN EXPRESSIONS TRANSLATABLES, ET
<                    INVERSEMENT...
<
<
FOCONV:: VAL         'FA             < FONCTION DE CONVERSION.
<
< DEFINITION DES SOUS-FONCTIONS :
<
FSBA::   VAL         '00             < CONVERSION DE UN OU DEUX CHIFFRES
                                     < BINAIRE EN DEUX CARACTERES ASCI.
FSAB::   VAL         '01             < CONVERSION D'UN CARACTERE ASCI HEXA-
                                     < DECIMAL EN BINAIRE.
FSTA::   VAL         '02             < CONVERSION TRANSLATABLE --> ABSOLU,
FSAT::   VAL         '03             < CONVERSION ABSOLU --> TRANSLATABLE.
<
< MASQUE DE SOUS-FONCTION :
<
KOLCON:: VAL         M00FF           < DEFINITION DU MASQUE DE SOUS-FONCTION
                                     < DANS L'OPERANDE DROIT DE "=".
<
< DEFINITION DES FONCTIONS COMPLETES :
<
XWOR%1:  VAL         KOLF=FMASK+FOCONV=FVAL
FOCBA::  VAL         KOLCON=FMASK+FSBA=FVAL?XWOR%1
                                     < CONVERSION DE UN OU DEUX CHIFFRES
                                     < BINAIRES EN DEUX CARACTERES ASCI.
FOCAB::  VAL         KOLCON=FMASK+FSAB=FVAL?XWOR%1
                                     < CONVERSION DE UN CARACTERE ASCI
                                     < EN UN NOMBRE BINAIRE.
FCBA::   VAL         FOCBA           < DEFINITION DES
FCAB::   VAL         FOCAB           < FONCTIONS-SYNONYMES.
FCTA::   VAL         KOLCON=FMASK+FSTA=FVAL?XWOR%1
                                     < FONCTION COMPLETE DE CONVERSION
                                     < TRANSLATABLE --> ABSOLU.
FCAT::   VAL         KOLCON=FMASK+FSAT=FVAL?XWOR%1
                                     < FONCTION COMPLETE DE CONVERSION
                                     < ABSOLU --> TRANSLATABLE.
         PAGE
<
<
<        V A L I D A T I O N   D E   ' Z E R O '  :
<
<
         IF          ZERO=FCTA-K,,XEIF%,
         IF          ATTENTION : TOUT VA MERDER LAMENTABLEMENT !!!
XEIF%:   VAL         ENDIF
         PAGE
<
<
<        F O N C T I O N   D E   R E F E R E N C E
<        A   U N E   I N S T R U C T I O N  :
<
<
<        FONCTION :
<                      CETTE FABULEUSE FONCTION PERMET
<                    D'APPLIQUER A UNE VALEUR CALCULEE
<                    UNE INSTRUCTION QUELCONQUE DU LANGAGE
<                    MACHINE.
<                      ON NOTERA QUE LES REGISTRES DE L'ASSEMBLEUR
<                    AVANT L'EXECUTION DE CETTE INSTRUCTION
<                    SONT AINSI POSITIONNES :
<                    'A' <-- L'OPERANDE GAUCHE DE "=",
<                    'B' <-- 0,
<                    'X' <-- 0,
<                    'Y' <-- L'OCTET SUIVANT LA FONCTION 'FOINST.
<                      L'INSTRUCTION A EXECUTER AURA ETE DEFINIE
<                    PAR SA VALEUR, DANS LA MEME EXPRESSION
<                    PAR LA FONCTION 'FMASK' (ET OUI !?!?!??).
<                      APRES EXECUTION, L'ASSEMBLEUR EFFECTUERA
<                    LES OPERATIONS SUIVANTES :
<                    'A' <-- ('A').EOR.('B'),
<                    'A' <-- ('A').EOR.('X'),
<                    PERMETTANT SI L'INSTRUCTION EXECUTEE NE
<                    MODIFIE QUE L'UN DES 3 REGISTRES 'A',
<                    'B' OU 'X' DE RECUPERER CE RESULTAT DANS
<                    LE REGISTRE 'A', PUIS DANS L'EXPRESSION
<                    COURANTE EN FAISANT EVENTUELLEMENT UN
<                    'EOR' PERMETTANT DE RE-SEPARER LE BON
<                    RESULTAT.
<
<
FOINST:: VAL         'FB             < FONCTION D'EXECUTION DE L'INSTRUCTION
                                     < DONT LE CODE EST DONNE PAR L'OPERANDE
                                     < GAUCHE DE L'OPERATEUR "=".
KOLY::   VAL         M00FF           < DEFINITION DU MASQUE PERMETTANT
                                     < DE DONNER L'OCTET A METTRE AU PREALABLE
                                     < DANS LE REGISTRE 'Y'.
<
< DEFINITION DE LA FONCTION COMPLETE (SI NECESSAIRE) :
<
FCINST:: VAL         KOLF=FMASK+FOINST=FVAL
                                     < EXECUTION DE L'INSTRUCTION DONT LE
                                     < CODE EST DONNE PAR L'OPERANDE GAUCHE
                                     < DE "=", AVEC 'Y' <-- 0.
<
<
<        Q U E L Q U E S   I N S T R U C T I O N S
<                    U T I L E S  :
<
<
<        NOTA :
<                      LES INSTRUCTIONS DEFINIES CI-DESSOUS
<                    TRANSFORMENT LE CONTENU DU REGISTRE 'A'
<                    EN GENERAL ; ON NOTERA POUR 'COSBT',
<                    'CORBT' ET 'COIBT', POUR ATTEINDRE
<                    UN BIT DE RANG DIFFERENT DE '0', IL
<                    SUFFIT D'AJOUTER CE RANG AU CODE
<                    DE L'INSTRUCTION...
<
<
         PROG
XWOR%1:  VAL         $-ZERO          < SAUVEGARDE DU "$", EN EFFET ON VA
                                     < GENERER DU CODE INUTILE...
<*******************************************************************************
         SCLS        K
COSCLS:: VAL         '0000000@@@@    < DECALAGE CIRCULAIRE A GAUCHE SIMPLE.
<*******************************************************************************
<*******************************************************************************
         SARS        K
COSARS:: VAL         '0000000@@@@    < DECALAGE ARITHMETIQUE A DROITE SIMPLE.
<*******************************************************************************
<*******************************************************************************
         WORD        '1E45
COIDES:: VAL         '0000000@@@@    < RECUPERATION DE L'IDENTIFICATEUR
                                     < SYSTEME A L'ASSEMBLAGE ('IDESC').
<*******************************************************************************
<*******************************************************************************
         WORD        '1E15
COGETM:: VAL         '0000000@@@@    < ACCES ABSOLU A LA MEMOIRE, 'BITX'
                                     < PERMETTANT DE DISCRIMINER LES 'NSP'
                                     < DES ADRESSES MEMOIRE ABSOLUES.
<*******************************************************************************
<*******************************************************************************
         SWBR        A,A
COSWBR:: VAL         '0000000@@@@    < PERMUTATION DES OCTETS DE 'A'.
<*******************************************************************************
<*******************************************************************************
         SBT         L
COSBT::  VAL         '0000000@@@@    < MISE A '1' DU BIT '0' DE 'A'.
<*******************************************************************************
<*******************************************************************************
         RBT         L
CORBT::  VAL         '0000000@@@@    < MISE A '0' DU BIT '0' DE 'A'.
<*******************************************************************************
<*******************************************************************************
         IBT         L
COIBT::  VAL         '0000000@@@@    < INVERSION DU BIT '0' DE 'A'.
<*******************************************************************************
<*******************************************************************************
         DBT
CODBT::  VAL         '0000000@@@@    < MISE DANS LE REGISTRE 'X', DU NUMERO
                                     < DU PREMIER BIT A '1' DANS 'A'.
<*******************************************************************************
<
< ANNULATION DU CODE GENERE :
<
XWOR%2:  VAL         $-ZERO
XWOR%2:  VAL         XWOR%2-XWOR%1   < LONGUEUR DU CODE GENERE...
         $EQU        ZERO+XWOR%1
         DZS         XWOR%2          < ON LE REMET A '0000, ET ON RECULE :
         $EQU        ZERO+XWOR%1     < ET VOILA...
<
< MASQUE IMPORTANT :
<
M8000::  VAL         COSBT?BITSIG=FMASK(K=FCINST
         PAGE
<
<
<        F O N C T I O N S   D E   ' T M O B T '  :
<
<
<        NOTA :
<                      'TMOBT' EST UN SOUS-PROGRAMME
<                    D'ACTION SUR 1 BIT PARMI UN
<                    CHAMP DONNE ; IL RECOIT DANS
<                    LE REGISTRE 'Y' LA FONCTION
<                    'FONXXX' A EXECUTER, CHOISIE
<                    PARMI LES SUIVANTES :
<
<
<*******************************************************************************
FONTB::  VAL         K               < TEST BIT,
FONSB1:: VAL         '0@@@@+I        < SET BIT AVEC VERIFICATION,
FONRB0:: VAL         '0@@@@+I        < RESET BIT AVEC VERIFICATION,
FONIB::  VAL         '0@@@@+I        < INVERSION BIT,
FONRB::  VAL         '0@@@@+I        < RESET BIT,
FONSB::  VAL         '0@@@@+I        < SET BIT.
<*******************************************************************************
         PAGE
<
<
<        F O N C T I O N   D ' E X E C U T I O N
<        D ' U N   S O U S - P R O G R A M M E
<        G E N E R E   D Y N A M I Q U E M E N T  :
<
<
<        FONCTION :
<                      CETTE FONCTION AUX POSSIBILITES
<                    INSOUPCONNEES, PERMET D'EXECUTER
<                    UN SOUS-PROGRAMME GENERE EN LANGAGE
<                    BINAIRE DANS LA CARTE DYNAMIQUE ;
<                    CETTE GENERATION AURA ETE FAITE
<                    AU PREALABLE A L'AIDE D'APPLICA-
<                    TIONS DE LA FONCTION 'KOLSTO' QUI
<                    PERMET DE METTRE UN OCTET QUELCONQUE
<                    EN UN ENDROIT QUELCONQUE DU CODE
<                    DE L'ASSEMBLEUR (ET EN PARTICULIER
<                    DANS LA CARTE DYNAMIQUE).
<                      CE SOUS-PROGRAMME EST APPELE PAR
<                    UN 'BSR' EXECUTE PAR L'ASSEMBLEUR,
<                    L'ADRESSE DU SOUS-PROGRAMME ETANT
<                    EGALE A L'ADRESSE DE LA CARTE DYNA-
<                    MIQUE TRANSLATEE DE LA VALEUR DE
<                    L'OCTET SUIVANT LA FONCTION 'FOEXSP'
<                    (TOUTES ADRESSES EXPRIMEES EN MOTS).
<                      DE PLUS, CE SOUS-PROGRAMME RECOIT
<                    COMME ARGUMENT DANS LE REGISTRE 'A'
<                    L'OPERANDE GAUCHE DE "=". AU RETOUR
<                    L'ASSEMBLEUR SUPPOSE QUE LE REGISTRE
<                    'A' CONTIENT LE RESULTAT QU'IL AFFECTERA
<                    A L'EXPRESSION COURANTE.
<                      BIEN ENTENDU, CE SOUS-PROGRAMME
<                    DOIT SE TERMINER PAR UN 'RSR'...
<
<
FOEXSP:: VAL         'FC             < FONCTION D'EXECUTION D'UN SOUS-
                                     < PROGRAMME DYNAMIQUE.
KOLSP::  VAL         M00FF           < DEFINITION DU MASQUE PERMETTANT DE
                                     < DONNER LA TRANSLATION A OPERER SUR
                                     < L'ADRESSE DE LA CARTE DYNAMIQUE POUR
                                     < OBTENIR LE POINT D'ENTREE DU SOUS-
                                     < PROGRAMME.
<
< DEFINITION DE LA FONCTION COMPLETE (SI NECESSAIRE) :
<
FCEXSP:: VAL         KOLF=FMASK+FOEXSP=FVAL
         PAGE
<
<
<        P U S H / P U L L  :
<
<
<        FONCTION :
<                      CES 2 FONCTIONS COMPLETES PERMETTENT
<                    D'ATTEINDRE LES FONCTIONS D'EMPILEMENT
<                    ('PUSH')/DEPILEMENT ('PULL') DE L'ASSEM-
<                    BLEUR ; LE 'PUSH' PERMET DE SAUVEGARDER
<                    LA VALEUR DE L'EXPRESSION SITUEE A
<                    GAUCHE DE "=", ALORS QUE 'PULL' AJOUTE
<                    A L'EXPRESSION COURANTE L'ENTREE COURANTE
<                    DE LA PILE (ON NOTERA QUE POUR FAIRE UN
<                    DEPILEMENT SANS ADDITION, IL SUFFIT QUE
<                    L'OPERANDE GAUCHE DE "=" AIT UNE VALEUR
<                    NULLE).
<
<
FOPILE:: VAL         'FE             < FONCTION GENERALE D'EMPILEMENT
                                     < ET DE DEPILEMENT.
<
< SOUS-FONCTIONS :
<
FSPUSH:: VAL         '00             < EMPILEMENT DE LA PARTIE GAUCHE DE "=".
FSPULL:: VAL         '01             < DEPILEMENT, ET ADDITION A LA PARTIE
                                     < GAUCHE DE "=".
FSPEXU:: VAL         '02             < DEPILEMENT ; L'OPERANDE GAUCHE DE
                                     < L'OPERATEUR "=" SUBSISTE, ALORS
                                     < QUE LA PARTIE IMMEDIATEMENT A DROITE
                                     < (C'EST-A-DIRE LA FONCTION 'FCPEXU')
                                     < EST REMPLACEE PAR LA VALEUR DEPILEE ;
                                     < L'OPERATEUR "=" EST ENSUITE REINTER-
                                     < PRETE ; AINSI ON 'EXECUTE' LA VALEUR
                                     < DEPILEE...
<
< MASQUE DE SOUS-FONCTION :
<
KOLPIL:: VAL         M00FF           < LA SOUS-FONCTION EST DONNEE A LA SUITE
                                     < DE LA FONCTION.
<
< DEFINITION DES FONCTIONS COMPLETES :
<
XWOR%1:  VAL         KOLF=FMASK+FOPILE=FVAL
FOPUSH:: VAL         KOLPIL=FMASK+FSPUSH=FVAL?XWOR%1
                                     < EMPILEMENT DE LA PARTIE GAUCHE DE "=".
FOPULL:: VAL         KOLPIL=FMASK+FSPULL=FVAL?XWOR%1
                                     < DEPILEMENT, ET ADDITION A LA PARTIE
                                     < GAUCHE DE "=".
FOPEXU:: VAL         KOLPIL=FMASK+FSPEXU=FVAL?XWOR%1
                                     < DEPILEMENT, PUIS RE-EXECUTION DE "=",
                                     < AVEC COMME OPERANDE DROIT LA VALEUR
                                     < DEPILEE.
FCPUSH:: VAL         FOPUSH          < DEFINITION DES
FCPULL:: VAL         FOPULL          < FONCTIONS-SYNONYMES.
FCPEXU:: VAL         FOPEXU
         PAGE
<
<
<        R E S T E   D ' U N E   D I V I S I O N  :
<
<
<        FONCTION :
<                      CETTE FONCTION PERMET DE RECU-
<                    PERER LE RESTE DE LA DERNIERE
<                    DIVISION ENTIERE EFFECTUEE DANS
<                    L'EXPRESSION COURANTE, OU BIEN
<                    UNE VALEUR NULLE S'IL N'Y A PAS
<                    EU DE DIVISION ; CE RESTE EST
<                    AJOUTE A LA PARTIE GAUCHE DE "=",
<                    AINSI QU'A L'OCTET SUIVANT L'OCTET
<                    DE FONCTION.
<
<
FOREST:: VAL         'FD             < RESTE D'UNE DIVISION ENTIERE.
<
< DEFINITION DE LA FONCTION COMPLETE (SI NECESSAIRE) :
<
FCREST:: VAL         KOLF=FMASK+FOREST=FVAL
         PAGE
<
<
<        S I G N E   D ' U N E   E X P R E S S I O N  :
<
<
<        FONCTION :
<                      CETTE FONCTION PERMET DE CALCULER
<                    LE SIGNE DE L'EXPRESSION FIGURANT A
<                    GAUCHE DE "=" ; CE SIGNE EST DONNE
<                    PAR UNE VALEUR NUMERIQUE ('SIGN.'),
<                    AUQUEL EST AJOUTE L'OCTET SUIVANT
<                    L'OCTET DE FONCTION.
<
<
FOSIGN:: VAL         'FF             < SIGNE DE LA PARTIE GAUCHE DE "=".
<
< DEFINITION DE LA FONCTION COMPLETE (SI NECESSAIRE) :
<
FCSIGN:: VAL         KOLF=FMASK+FOSIGN=FVAL
<
< DEFINITION NUMERIQUE DU SIGNE :
<
SIGN0::  VAL         K               < CETTE EXPRESSION EST NULLE.
SIGNM::  VAL         SIGN0-I         < L'EXPRESSION FIGURANT A GAUCHE DE "="
                                     < EST NEGATIVE (STRICTEMENT).
SIGNP::  VAL         SIGN0+I         < CETTE EXPRESSION EST STRICTEMENT
                                     < POSITIVE.
         PAGE
<
<
<        C A R A C T E R E S   H E X A - D E C I M A U X  :
<
<
HZERO::  VAL         0=FCBA(MOCD        < 0,
HNEUF::  VAL         BASE10-Z=FCBA(MOCD < 9,
HA::     VAL         BASE10=FCBA(MOCD   < A,
HF::     VAL         BASE16-Z=FCBA(MOCD < F.
         PAGE
<
<
<        D E F I N I T I O N   D ' U N E   P I L E
<                    " P U S H " / " P U L L "  :
<
<
XLMPIL:: VAL         MOCG            < DONNE LA LONGUEUR MAXIMALE EN MOTS DE
                                     < LA PILE (NON COMPRIS LE POINTEUR QUE
                                     < L'ON DECRIT ICI).
XLCPIL:: VAL         MOCD            < DONNE LA LONGUEUR COURANTE DE LA PILE ;
                                     < ELLE EST EN GENERAL NULLE INITIALEMENT.
         PAGE
<
<
<        D E F I N I T I O N   D E   C H E C K - S U M S
<        S U R   L E   C O D E   D U   S Y S T E M E  :
<
<
<        FONCTION :
<                      ON VA DISTINGUER LES
<                    PARTIES MODIFIABLES DE
<                    'CMS5' (OU "RAM") DES
<                    PARTIES NON MODIFIABLES
<                    (OU "ROM") ; LE SYSTEME
<                    EST DONC DECOUPE EN BLOCS
<                    DE TYPE "ROM" ALTERNANT
<                    AVEC DES BLOCS DE TYPE "RAM"
<                    REPERES AVEC DES CHAINAGES,
<                    DONT LE FORMAT EST :
<
<
CHAINA:: MOT         O               < CHAINAGE ARRIERE VERS LE BLOC PRECEDENT
                                     < QUI EST FORCEMENT DE L'AUTRE TYPE QUE
                                     < LE BLOC COURANT.
CHAINX:: MOT         CHAINA+D        < CHECK-SUM ('EOR') DU BLOC COURANT ; CE
                                     < MOT N'EST LA QUE POUR LES BLOCS DE
                                     < TYPE "RAM".
<
<
<                      LE FORMAT DU SYSTEME EST
<                    DONC DORENAVANT, SACHANT
<                    QUE L'ON COMMENCE ET QUE
<                    L'ON FINIT SUR <ROM> :
<
<        CHAINA                      < FIN DE CHAINE.
<                    <ROM>
<        CHAINA
<        CHAINX                      < CHECK-SUM DE <ROM> CI-DESSUS.
<                    <RAM>
<        CHAINA
<                    <ROM>
<        CHAINA
<        CHAINX                      < CHECK-SUM DE <ROM> CI-DESSUS.
<                    <RAM>
<        CHAINA
<                    <ROM>
<        CHAINA                      < DEBUT DE CHAINE.
<        CHAINX                      < CHECK-SUM DE <ROM> CI-DESSUS.
<
<
<        NOTA :
<                      ENFIN, POUR SIMPLIFIER
<                    LES CHOSES, SEULES LA
<                    PARTIE HAUTE ('DOL2') DE
<                    LA MEMOIRE EST SOUMISE A
<                    CE CONTROLE...
<
<
ICHAIN:: VAL         EXIST           < INDICATEUR EN BASCULE PERMETTANT
                                     < DE GENERER <CHAINA>, OU BIEN
                                     < <CHAINA><CHAINX> POUR LA VALEUR
                                     < OPPOSEE...
         IF          ICHAIN-K,XEIF%,,XEIF%
         IF          ATTENTION : LA VALEUR INITIALE DE
         IF          'ICHAIN' EST INCOMPATIBLE AVEC UNE BASCULE !!!
XEIF%:   VAL         ENDIF
         PAGE
         CALL        #SISP CMS5 DSEC#
         PAGE
<
<
<        D E F I N I T I O N   D E S   R E G I S T R E S
<                    E M P I L A B L E S  :
<
<
RA::     VAL         SA-PSTS         < REGISTRE 'A'.
RB::     VAL         SB-PSTS         < REGISTRE 'B'.
RX::     VAL         SX-PSTS         < REGISTRE 'X'.
RY::     VAL         SY-PSTS         < REGISTRE 'Y'.
RC::     VAL         SC-PSTS         < REGISTRE 'C'.
RL::     VAL         SL-PSTS         < REGISTRE 'L'.
RW::     VAL         SW-PSTS         < REGISTRE 'W'.
RK::     VAL         SK-PSTS         < REGISTRE 'K'.
<
<
<        R E G I S T R E S   N O N   E M P I L A B L E S  :
<
<
RP::     VAL         SP-PSTS         < REGISTRE 'P'.
RS::     VAL         SS-PSTS         < REGISTRE 'S'.
RSLO::   VAL         SSLO-PSTS       < REGISTRE 'SLO'.
RSLE::   VAL         SSLE-PSTS       < REGISTRE 'SLE'.
<
<
<        N O M S   D E S   R E G I S T R E S  :
<
<
KRA::    VAL         KA              < REGISTRE 'A',
KRB::    VAL         KB              < REGISTRE 'B',
KRX::    VAL         KX              < REGISTRE 'X',
KRY::    VAL         KY              < REGISTRE 'Y',
KRC::    VAL         KC              < REGISTRE 'C',
KRL::    VAL         KL              < REGISTRE 'L',
KRW::    VAL         KW              < REGISTRE 'W',
KRK::    VAL         KK              < REGISTRE 'K',
KRP::    VAL         KP              < REGISTRE 'P',
KRSTAT:: VAL         KS              < REGISTRE 'S'.
         PAGE
<
<
<        D E F I N I T I O N   D E   L A   P R O T E C T I O N
<                        M E M O I R E  :
<
<
LSPACE:: VAL         XX64K           < L'ESPACE MEMOIRE DELIMITE PAR
                                     < UN COUPLE (SLO,SLE) NE DOIT
                                     < PAS EXCEDER 'LSPACE' K-MOTS.
XWOR%4:  VAL         4               < LES ADRESSES CONTENUES DANS LES REGISTRES
                                     < 'SLO' ET 'SLE' SONT EN FAIT DECALEES
                                     < DE 'DADR' PAR LE HARDWARE...
FADR::   VAL         BIT>XWOR%4      < CES ADRESSES SONT DONC DES ADRESSES
                                     < DE FADR-MOTS...
<*******************************************************************************
DADR::   VAL         -XWOR%4         < POUR FAIRE DES DECALAGES A DROITE...
DADR:   @VAL         '0@@@@          < POUR CONVERTIR DES ADRESSES 16-MOTS.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
<
< DEFINITION DU COUPLE (SLO,SLE) IMPLICITE :
<
SO::     VAL         ZERO-ZERO>DADR
SE::     VAL         LSPACE>DADR*LK-Z
                                     < NOTA : AVEC CE COUPLE (SO,SE), ON COUVRE
                                     < TOUTE LA MEMOIRE MAITRE...
         PAGE
<
<
<        D E P L A C E M E N T   D E S   B A S E S  :
<
<
DEPBAS:: VAL         128             < PORTEE DES BASES...
DEPCH::  VAL         DEPBAS          < BASE 'C' DANS LES TACHES HARDWARES.
DEPCS::  VAL         DEPBAS          < BASE 'C' DANS LES TACHES SOFTWARES'.
         PAGE
<
<
<        L I S T E   E T   A T T R I B U T S   D E S
<        P R O C E S S E U R S   D U   S Y S T E M E  :
<
<
<
<        M A S Q U E S   A S S O C I E S  :
<
MNUPRO:: VAL         '0003           < NUMERO D'UN PROCESSEUR SUR UN
                                     < BUS MEMOIRE DE NUMERO DONNE
                                     < PAR 'MNUBUS' (DONNE PAR 'RDSI'
                                     < DANS A).
MNUBUS:: VAL         '001C           < NUMERO D'UN BUS MEMOIRE DANS
                                     < LE SYSTEME (DONNE PAR 'RDSI'
                                     < DANS A).
         IF          MNUPRO(MNUBUS-K,,XEIF%,
         IF          ATTENTION : RECOUVREMENT DES 2 MASQUES !!!
XEIF%:   VAL         ENDIF
         IF          MNUBUS?MNUPRO=K-K,,XEIF%,
         IF          ATTENTION : ETANT DONNEES LES OPERATIONS
         IF          REALISEES SUR LES NUMEROS DE PROCESSEUR,
         IF          IL FAUT QUE CE MASQUE SOIT CADRE A DROITE !!!
XEIF%:   VAL         ENDIF
MSBOOT:: VAL         '00E0           < POSITION DU SELECTEUR DE
                                     < BOOTSTRAP (DONNE PAR 'RDSI'
                                     < DANS A), SOIENT LES VALEURS POSSIBLES :
<*******************************************************************************
XXBTTY:: VAL         K               < 'TTY',
XXBPTR:: VAL         '0@@@@+I        < 'PTR',
XXBCDR:: VAL         '0@@@@+I        < 'CDR',
XXBMTU:: VAL         '0@@@@+I        < 'MTU',
XXBROM:: VAL         '0@@@@+I        < 'ROM',
XXBFLD:: VAL         '0@@@@+I        < 'FLD',
XXBMHD:: VAL         '0@@@@+I        < 'MHD',
XXBFHD:: VAL         '0@@@@+I        < 'FHD'.
XWOR%2:  VAL         '0@@@@          < VALEUR MAXIMALE ATTEINTE...
<*******************************************************************************
XWOR%3:  VAL         MSBOOT=K
XWOR%3:  VAL         -XWOR%3
XWOR%4:  VAL         MSBOOT>XWOR%3   < VALEUR MAXIMALE POSSIBLE...
         IF          XWOR%2-XWOR%4,XEIF%,XEIF%,
         IF          ATTENTION : ON A DEFINI TROP DE POSITIONS
         IF          POUR LE SELECTEUR DE BOOTSTRAP !!!
XEIF%:   VAL         ENDIF
MTYPRO:: VAL         '0300           < TYPE DU PROCESSEUR (DONNE PAR
                                     < 'RDSI' DANS 'A').
         IF          MNUPRO?MNUBUS=K-K,,XEIF%,
         IF          ATTENTION : IL CONVIENT DE PROCEDER A UN
         IF          DECALAGE A DROITE DES INFORMATIONS DONNEES
         IF          PAR LES 'RDSI' POUR CONNAITRE LE NUMERO D'UN
         IF          PROCESSEUR !!!
XEIF%:   VAL         ENDIF
         PAGE
<
<
<        D E F I N I T I O N   D E S   E N T R E E S - S O R T I E S  :
<
<
<        F O N C T I O N S  :
<
<
FGR::    VAL         0               < FONCTION DE LECTURE,
FGW::    VAL         2               < FONCTION D'ECRITURE.
FAVW::   VAL         FGW             < FONCTION D'APPEL ECRITURE ALPHA-NUMERIQUE
                                     < SUR VISU,
FAVWG::  VAL         10              < FONCTION D'APPEL ECRITURE GRAPHIQUE
                                     < SUR VISU.
FGX::    VAL         FGW             < FGX=MAX(FGW,FGR) INITIALISE A PRIORI...
         IF          FGX-FGR,,XEIF%,XEIF%
FGX:     VAL         FGR             < ET BIEN NON...
XEIF%:   VAL         ENDIF
XBITQ::  VAL         12              < BIT INDIQUANT POUR LE 'DKM' LA
                                     < VALEUR A DONNER A 'QUANTA' :
                                     < =1 POUR 1, =3 POUR 0.
FGRQ::   VAL         COSBT?XBITQ=FMASK(K?FGR=FCINST
                                     < LECTURE 'DKM' AVEC QUANTA=1.
FGWQ::   VAL         COSBT?XBITQ=FMASK(K?FGW=FCINST
                                     < ECRITURE 'DKM' AVEC QUANTA=1.
FGSGNA:: VAL         '2              < FONCTION COMMUNE A TOUS LES HANDLERS
                                     < 'SGN' LORSQUE LES <ACN> DOIVENT
                                     < ETRE CONCATENES AUX <NOMS>.
FGSGN::  VAL         'A              < FONCTION COMMUNE A TOUS LES HANDLERS
                                     < 'SGN' LORSQU'IL N'Y A PAS DE CONCA-
                                     < TENATION AUTOMATIQUE.
FGSGNN:: VAL         -1              < 'ASDEM' D'ACCES AU 'SGN' LORSQUE
                                     < LA <VALEUR> SUIT IMMEDIATEMENT
                                     < LE <NOM>.
FGID::   VAL         '2              < FONCTION D'INSERT/DELETE DE 'HDLTRI'.
FGT::    VAL         'A              < FONCTION DE TEST DE 'HDLTRI'.
<
<
<        P A R A M E T R E S  :
<
<
<*******************************************************************************
TYPITN:: VAL         K               < INDICATEUR 'INTERRUPTION NORMALE'.
TYPITX:: VAL         '0@@@@+I        < INDICATEUR 'INTERRUPTION EXCEPTION'.
<*******************************************************************************
<
< CARACTERE DANS UN MOT :
<
XWOR%1:  VAL         MOCD)MMOT=K     < UN CARACTERE EST CONTENU DANS L'OCTET
                                     < D'UN MOT.
XWOR%1:  VAL         NBITMO-B-XWOR%1+I
BITPAR:: VAL         XWOR%1          < BIT DE PARITE CARACTERE DANS UN MOT.
         PAGE
<
<
<        D E F I N I T I O N   D E S   ' C C B '  :
<
<
CCBMO0:: MOT         O               < MOT0 : IL EST COMPOSE DES CHAMPS (BITS
                                     <        ET MASQUES) SUIVANTS :
BCCBIP:: VAL         0               < BIT DE MOT0 DISCRIMINANT LES 'IPI'
                                     < CANAUX DES 'IPI' INTER-PROCESSEURS.
BCCBCR:: VAL         4               < BIT(MOT0) D'ENTREE DU COMPTE-RENDU.
BCCBBM:: VAL         7               < BIT(MOT0) DISCRIMINANT LES CANAUX
                                     < MOTS(K) DES CANAUX OCTETS(1).
CCBDF::  VAL         1               < BIT SPECIAL "DEFAUT-SECTEUR".
CCBDKM:: VAL         6               < BIT SPECIAL "DISQUE AMOVIBLE".
CCBMAE:: VAL         M000F           < ZONE RESERVEE DANS LE MOT0 AUX
                                     < EXTENSIONS D'ADRESSES...
CCBMO1:: MOT         CCBMO0+D        < MOT1 : IL EST COMPOSE DES CHAMPS
                                     <        SUIVANTS :
CCBCAN:: VAL         'C000           < TYPE DU CANAL (LDC/MDC/HDC) :
CCBHDC:: VAL         '80             < CODE INDICATEUR D'UN CANAL "HDC".
CCBMDC:: VAL         'C0             < CODE INDICATEUR D'UN CANAL "MDC".
CCBLDC:: VAL         '00             < CODE INDICATEUR D'UN CANAL "LDC".
XWOR%1:  VAL         MOCG=K
XWOR%1:  VAL         -XWOR%1
XWOR%2:  VAL         CCBCAN>XWOR%1
         IF          CCBHDC(XWOR%2-CCBHDC,,XEIF%,
         IF          ATTENTION : 'CCBHDC' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         IF          CCBMDC(XWOR%2-CCBMDC,,XEIF%,
         IF          ATTENTION : 'CCBMDC' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         IF          CCBLDC(XWOR%2-CCBLDC,,XEIF%,
         IF          ATTENTION : 'CCBLDC' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
CCBITN:: VAL         '3F00           < NUMERO D'INTERRUPTION NORMALE,
XWOR%1:  VAL         CCBITN=K
XWOR%2:  VAL         MOCG=K
         IF          XWOR%1-XWOR%2,,XEIF%,
         IF          ATTENTION : LA GENERATION DES 'CCB' PAR DES
         IF          'BYTE' POUR 'CCBITN' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
CCBCCN:: VAL         '001F           < NUMERO DE REGISTRES-CANAUX DANS LE
                                     < CAS D'UN CANAL 'HDC',
MTRHDC:: VAL         CCBCCN)MMOT     < MASQUE D'EFFACEMENT DU NUMERO DE
                                     < REGISTRES 'HDC'.
CCBMO2:: MOT         CCBMO1+D        < MOT2 (16 PREMIERS BITS DE L'ADRESSE
                                     < MEMOIRE DE L'ECHANGE),
CCBMO3:: MOT         CCBMO2+D        < MOT3 (COMPTE DE MOTS/OCTETS, ET COMPTE-
                                     < RENDU) :
BCCBDC:: VAL         1               < BIT DEFSEC/CLEAR DU COMPTE-RENDU.
BCCBME:: VAL         0               < BIT DEFAUT MEMOIRE DU COMPTE-RENDU.
CCBMO4:: MOT         CCBMO3+D        < MOT4 (ADRESSE DU COUPLEUR).
CCBMO5:: MOT         CCBMO4+D        < MOT5 (UTILISE SEULEMENT PAR LES DIS-
                                     < AMOVIBLES 'DKM' ET 'DKU'...).
<
<
<        E X T E N S I O N   ' C C B '  :
<
<
<        FONCTION :
<                      CETTE EXTENSION EST UTILISE PAR LE
<                    'SVC' MAITRE 'SVCM6' ET PERMET LA
<                    REINITIALISATION CORRECTE DES MOT0
<                    ET MOT2 DU 'CCB'...
<                      ELLE FACILITE AINSI L'ITERATION
<                    D'UN ECHANGE CANAL A LA SUITE
<                    D'UN DEFAUT...
<
<
CCBMR2:: MOT         CCBMO0-D        < POUR L'INITIALISATION DE 'CCBMO2',
CCBMR0:: MOT         CCBMR2-D        < ET DE 'CCBMO0'...
         PAGE
<
<
<        R E G I S T R E   D ' E T A T   D ' U N
<                    C O U P L E U R  :
<
<
<        DEFINITION :
<                      LE REGISTRE D'ETAT D'UN COUPLEUR
<                    EST UN REGISTRE ACCESSIBLE A L'AIDE
<                    D'UNE 'SIO' D'ENTREE ETAT ; LES BITS
<                    QU'IL CONTIENT SONT DES INDICATEURS
<                    DE L'ETAT DU COUPLEUR.
<
<
ETADEF:: VAL         0               < SOMME DES INDICATEURS DE DEFAUTS
                                     < REELS (EXCLUE DONC LA FIN D'ECHANGE).
ETACAD:: VAL         1               < ERREUR DE CADENCE EN ENTREE
                                     < COMME EN SORTIE.
ETAPAR:: VAL         2               < INFORMATION INCORRECTE (PARITE,
                                     < CHECKSUM,...).
ETAVIO:: VAL         3               < TENTATIVE DE VIOL (OH,... PROTECTION
                                     < D'ECRITURE,... AH BON...).
ETADOG:: VAL         5               < CHIEN DE GARDE (OUAH, OUAH...) ;
                                     < HEUREUSEMENT, IL EST PAS MECHANT...
ETABRK:: VAL         6               < APPEL OPERATEUR (BREAK,...).
ETAFBS:: VAL         7               < FIN DE BLOC EN SORTIE POUR LES VOIES
                                     < FULL DUPLEX UNIQUEMENT.
ETARIL:: VAL         8               < LE REGISTRE D'INFORMATION EST LIBRE
                                     < EN SORTIE, IL PEUT RECEVOIR LA DONNEE
                                     < SUIVANTE : NE VAUT QUE POUR LES LIGNES
                                     < FULL DUPLEX.
ETAS0::  VAL         11              < UTILISE POUR DKM/DKU POUR LES
                                     < SYNCHRONISATIONS SUR SECTEUR 0...
ETAPIV:: VAL         12              < INFORMATION VALIDE LORS DE L'UTILI-
                                     < SATION DU PUPITRE !!!
ETAFBK:: VAL         13              < FIN DE BLOC EN ENTREE COMME EN SORTIE ;
                                     < MAIS FIN DE BLOC EN ENTREE UNIQUEMENT
                                     < POUR LES LIGNES FULL DUPLEX.
ETANXT:: VAL         14              < EN ENTREE, LE REGISTRE INFORMATION
                                     < CONTIENT LA DONNEE SUIVANTE, ALORS
                                     < QU'EN SORTIE, IL PEUT RECEVOIR LA
                                     < SUIVANTE (LA SIGNIFICATION 'EN
                                     < SORTIE' N'A PAS DE SENS POUR LES
                                     < LIGNES FULL DUPLEX.
ETAOPE:: VAL         15              < LE COUPLEUR EST OPERATIONNEL : IL EST
                                     < PRESENT, SOUS TENSION ET TOUT
                                     < ET TOUT...
PUPLOC:: VAL         ETAOPE          < LORSQUE CE BIT EST A 1 DANS LE
                                     < MOT D'ETAT DU PUPITRE, CELA SIGNIFIE
                                     < QUE LE PUPITRE EST 'UNLOCK'...
PUSTEP:: VAL         ETAFBS          < BIT INDIQUANT DANS LE MOT D'ETAT DU
                                     < PUPITRE QU'UNE ACTION SUR 'STEP' A EU
                                     < LIEU.
<
< DEFINITION DES MASQUES ASSOCIES :
<
XWOR%:   VAL         NBITMO-B-ETADEF
MTADEF:: VAL         BIT>XWOR%       < MASQUE ASSOCIE A 'ETADEF'.
XWOR%:   VAL         NBITMO-B-ETACAD
MTACAD:: VAL         BIT>XWOR%       < MASQUE ASSOCIE A 'ETACAD'.
XWOR%:   VAL         NBITMO-B-ETAPAR
MTAPAR:: VAL         BIT>XWOR%       < MASQUE ASSOCIE A 'ETAPAR'.
XWOR%:   VAL         NBITMO-B-ETAVIO
MTAVIO:: VAL         BIT>XWOR%       < MASQUE ASSOCIE A 'ETAVIO'.
XWOR%:   VAL         NBITMO-B-ETADOG
MTADOG:: VAL         BIT>XWOR%       < MASQUE ASSOCIE A 'ETADOG'.
XWOR%:   VAL         NBITMO-B-ETABRK
MTABRK:: VAL         BIT>XWOR%       < MASQUE ASSOCIE A 'ETABRK'.
XWOR%:   VAL         NBITMO-B-ETAFBS
MTAFBS:: VAL         BIT>XWOR%       < MASQUE ASSOCIE A 'ETAFBS'.
XWOR%:   VAL         NBITMO-B-ETARIL
MTARIL:: VAL         BIT>XWOR%       < MASQUE ASSOCIE A 'ETARIL'.
XWOR%:   VAL         NBITMO-B-ETAFBK
MTAFBK:: VAL         BIT>XWOR%       < MASQUE ASSOCIE A 'ETAFBK'.
XWOR%:   VAL         NBITMO-B-ETANXT
MTANXT:: VAL         BIT>XWOR%       < MASQUE ASSOCIE A 'ETANXT'.
XWOR%:   VAL         NBITMO-B-ETAOPE
MTAOPE:: VAL         BIT>XWOR%       < MASQUE ASSOCIE A 'ETAOPE'.
<
<
<        R E G I S T R E   D E   C O M M A N D E
<              D ' U N   C O U P L E U R  :
<
<
<        DEFINITION :
<                      LE REGISTRE DE COMMANDE D'UN COUPLEUR
<                    EST ACCESSIBLE PAR UNE 'SIO' DE SORTIE
<                    DE COMMANDE, ET PERMET DE REALISER AVEC
<                    LE COUPLEUR LES OPERATIONS N'IMPLIQUANT
<                    PAS DE TRANSFERT DE DONNEES.
<
<
COM8::   VAL         8               < UTILISE PAR 'CR' ET 'DKM'...
COM10::  VAL         10              < UTILISE PAR 'DKM'...
COMRW::  VAL         9               < INDIQUE LE SENS D'UN TRANSFERT DE
                                     < DONNEES :
                                     < COMRW=COMR=K : LECTURE D'INFORMATIONS,
                                     < COMRW=COMW=1 : ECRITURE D'INFORMATIONS.
COMR::   VAL         0               < LECTURE D'INFORMATIONS,
COMW::   VAL         1               < ECRITURE D'INFORMATIONS.
COMINI:: VAL         11              < DEMANDE D'INITIALISATION D'UN COUPLEUR.
COMFBK:: VAL         12              < DEMANDE DE FIN DE BLOC.
COMSTR:: VAL         13              < DEMANDE DE LANCEMENT D'UN ECHANGE.
                                     < ('START')
COMTST:: VAL         14              < MISE DU COUPLEUR EN MODE TEST.
COMINT:: VAL         15              < DEMANDE DE VALIDATION DES INTERRUPTIONS.
<
< MASQUES ASSOCIES AUX BITS DU REGISTRE DE COMMANDE :
<
XWOR%:   VAL         NBITMO-B-COM8
MOM8::   VAL         BIT>XWOR%       < MASQUE ASSOCIE A 'COM8'.
XWOR%:   VAL         NBITMO-B-COM10
MOM10::  VAL         BIT>XWOR%       < MASQUE ASSOCIE A 'COM10'.
XWOR%:   VAL         NBITMO-B-COMRW
MOMRW::  VAL         BIT>XWOR%       < MASQUE ASSOCIE A 'COMRW'.
XWOR%:   VAL         NBITMO-B-COMINI
MOMINI:: VAL         BIT>XWOR%       < MASQUE ASSOCIE A 'COMINI'.
XWOR%:   VAL         NBITMO-B-COMFBK
MOMFBK:: VAL         BIT>XWOR%       < MASQUE ASSOCIE A 'COMFBK'.
XWOR%:   VAL         NBITMO-B-COMSTR
MOMSTR:: VAL         BIT>XWOR%       < MASQUE ASSOCIE A 'COMSTR'.
XWOR%:   VAL         NBITMO-B-COMTST
MOMTST:: VAL         BIT>XWOR%       < MASQUE ASSOCIE A 'COMTST'.
XWOR%:   VAL         NBITMO-B-COMINT
MOMINT:: VAL         BIT>XWOR%       < MASQUE ASSOCIE A 'COMINT'.
         PAGE
<
<
<        C O N S T A N T E S   G E N E R A L E S   D U
<        S Y S T E M E   D ' I N T E R R U P T I O N  :
<
<
NMSNN::  VAL         16              < NOMBRE MAXIMUM DE SOUS-NIVEAUX
                                     < NORMAUX (DE 0 A NMSNN-1) POUR
                                     < UN NIVEAU D'INTERRUPTION DONNE.
                                     < RAPPELONS QU'ALORS : V=1 LORS
                                     < D'UN 'ACK'.
NMSNE::  VAL         3*NMSNN         < NOMBRE MAXIMUM DE SOUS-NIVEAUX
                                     < D'EXCEPTION (DE 0 A NMSNE-1) POUR
                                     < UN NIVEAU D'INTERRUPTION DONNE.
                                     < RAPPELONS QU'ALORS : C=1 LORS
                                     < D'UN 'ACK'.
         PAGE
<
<
<        C O N S T A N T E S   G E N E R A L E S
<                    D I V E R S E S  :
<
<
THALT::  VAL         2               < PERIODE EXPRIMEE EN MICRO-SECONDES
                                     < DE DECOMPTAGE SUR LE REGISTRE X
                                     < PAR L'INSTRUCTION 'HALT'.
MINUTE:: VAL         60              < DUREE EN SECONDES D'UNE MINUTE.
         PAGE
<
<
<        D E F I N I T I O N   D E S   S E M A P H O R E S  :
<
<
<        DEFINITION :
<                      LES SEMAPHORES DITS D'"EXCLUSION"
<                    SONT DES STRUCTURES DE DONNEES CON-
<                    NUES DE LA MICRO-MACHINE, ET QUI
<                    PERMETTENT, VIA LES INSTRUCTIONS
<                    'RQST' ET 'RLSE' D'ASSURER DES FONC-
<                    TIONS D'EXCLUSION ET DE SYNCHRONI-
<                    SATION (EVENTUELLEMENT) ENTRE PLU-
<                    SIEURS TACHES.
<
<
         DSEC
SEMBET:  EQU         $
<
< DEFINITION DU "COMPTEUR" :
<
         BYTE        K;K             < L'OCTET 'MBETA' CONTIENT LE COMPTEUR
                                     < DU SEMAPHORE.
MBETA::  VAL         MOCD            < COMPTEUR (OU BETA) DU SEMAPHORE.
XMBETA:: VAL         MBETA)MMOT=K
XMBETA:  VAL         NBITMO-XMBETA   < DECALAGE POUR ALLER ETENDRE LE BIT
                                     < DE SIGNE DU BETA (A GAUCHE).
MAXBET:: VAL         '70             < VALEUR AU DELA DE LA QUELLE IL FAUT
                                     < S'INQUIETER...
         IF          MAXBET>S-MBETA,XEIF%,,
         IF          MAXBET EST INCOMPATIBLE AVEC MBETA !!!
XEIF%:   VAL         ENDIF
<
< DEFINITION DE LA "FILE D'ATTENTE" :
<
SEMWQ:   EQU         $               < FILE D'ATTENTE SI LE SEMAPHORE
XXLSEM:: VAL         SEMWQ-SEMBET    < TRANSLATION D'ACCES A LA LISTE DES
                                     < TACHES EN ATTENTE.
         DZS         LSEM            < EST DIT D'EXCLUSION...
SPHEX0:: VAL         W               < VALEUR INITIALE D'UN SEMAPHORE
                                     < D'EXCLUSION.
XXSEM0:: VAL         K               < VALEUR INITIALE D'UN SEMAPHORE
                                     < QUELCONQUE...
         IF          XXSEM0-K,,XEIF%,
         IF          ATTENTION : 'XXSEM0' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
XXSIT0:: VAL         XXSEM0          < VALEUR INITIALE D'UN SIT.
         IF          XXSIT0-K,,XEIF%,
         IF          ATTENTION : 'XXSIT0' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
XXCHV0:: VAL         XXSEM0          < VALEUR INITIALE D'UN 'SCHVID'.
         IF          XXCHV0-K,,XEIF%,
         IF          ATTENTION : 'XXCHV0' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
XXLOC0:: VAL         XXSEM0          < VALEUR INITIALE D'UN 'SEMLOC'.
         IF          XXLOC0-K,,XEIF%,
         IF          ATTENTION : 'XXLOC0' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         PAGE
<
<
<        S Y N C H R O N I S A T I O N   S U R   L E   M O T
<        ' C D A G 0 '   D E   L A   ' C D A G '  :
<
<
<        FONCTION :
<                      LE MOT 'CDAG0' DE LA 'CDAG'
<                    PEUT ETRE TESTE PAR UNE ATTENTE
<                    PASSIVE DES UTILISATEURS (VIA
<                    LE SEMAPHORE 'SEMCDA' ET LES
<                    'HDLSER'). POUR CE FAIRE LE
<                    SYSTEME PAR 'IDLE' TESTE LES
<                    VALEURS POSITIVES DE 'CDAG0' ;
<                    LORSQU'IL EN DETECTE, ET SI DES
<                    UTILISATEURS L'ATTENDENT, IL LES
<                    DEBLOQUE... POUR EVITER DES BLO-
<                    CAGES INDEFINIS, L'HORLOGE A
<                    CHAQUE CHANGEMENT DE MINUTE EN
<                    FAIT AUTANT...
<                      ELLE S'ATTEINT PAR LE 'SVC'
<                    'FONDOR' AVEC UNE DUREE DE SOM-
<                    MEIL DEMANDEE NULLE...
<
<
<        NOTA :
<                      1 - CETTE FONCTION (CF. 'FONDOR')
<                    EST ACCESSIBLE QUELQUE SOIT L'ETAT
<                    D'APPROPRIATION DE LA 'CDAG' ; ON PEUT
<                    DONC TOUJOURS TESTER 'CDAG0', MAIS
<                    PAS OBLIGATOIREMENT CONNAITRE SA
<                    VALEUR PRECISE (UNIQUEMENT SON SIGNE).
<                      2 - LA FREQUENCE DES TESTS REALISES
<                    PAR 'IDLE' PEUT ETRE TRES DIFFERENTE
<                    DE CELLE DES MISES A JOUR DU MOT
<                    'CDAG0' PAR UN AUTRE PROCESSUS ; ON
<                    PEUT DONC RATER DE TELS CHANGEMENTS ;
<                    MAIS N'OUBLIONS PAS QUE CELA SERA
<                    UTILISE AVEC UN MECANISME DU TYPE
<                    PRODUCTEUR-CONSOMMATEUR, CE QUI
<                    IMPLIQUE 2 FREQUENCES IDENTIQUES...
<
<
CDAG0::  MOT         O               < MOT DE LA 'CDAG' QUI PERMET UNE SYNCHRO-
                                     < NISATION INTER-UTILISATEURS (ET MEME
                                     < INTER-SYSTEMES...).
XCDAG0:: VAL         K               < LE SYSTEME TESTERA LES VALEURS
                                     < NEGATIVES/NULLES ET POSITIVES...
         PAGE
<
<
<        C O N F I G U R A T I O N   P E R I P H E R I Q U E  :
<
<
XXBRAC:: VAL         4               < INDICATEUR DES ARGUMENTS DE 'SIO' INDI-
                                     < QUANT QUE LE COUPLEUR CORRESPONDANT
                                     < EST IN (0) / HORS (1) RACK...
XWOR%9:  VAL         COSBT           < HORS-RACK A PRIORI...
INRACK: @
<
< TESTONS L'EXISTENCE DU SYMBOLE 'INRACK' ???
< S'IL EXISTE, ON ADMET QUE LES COUPLEURS SONT
< IN-RACK, SINON, HORS-RACK :
<
XWOR%1:  VAL         KOLF=FMASK+KOLTES=FVAL
XWOR%1:  VAL         KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2:  VAL         KOLTED=FMASK+KOL0=FVAL
XWOR%2:  VAL         KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3:  VAL         XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE 'INRACK'...
XWOR%4:  VAL         MSYMBI=FMASK+KOL0=FVAL
XWOR%4:  VAL         MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
         IF          XWOR%4=FCSYMT-SYMBX,,XEIF%,
XWOR%9:  VAL         CORBT           < ET BIEN NON, 'IN-RACK'...
XEIF%:   VAL         ENDIF
XXRACK:: VAL         XWOR%9          < 'COSBT'/'CORBT' POUR OUT-RACK/IN-RACK...
OFFRAC:: VAL         XXRACK?XXBRAC=FMASK(K=FCINST
                                     < GENERATION DE L'INDICATEUR IN/HORS-RACK,
                                     < SUIVANT QUE LE SYMBOLE 'INRACK' EXISTE
                                     < OU PAS...
<
<
<        L I S T E   D E S   C O U P L E U R S   P R E S E N T S  :
<
<
ACPUP::  VAL         '17F0           < PUPITRE.
ACCBM::  VAL         '00D0           < 'CBM' D'ACCES A LA 'CDAI' ; A NOTER
                                     < LA CORRESPONDANCE : "M" --> "I"...
ACCBJ::  VAL         '00C8           < 'CBM' D'ACCES A LA 'CDAJ' ; A NOTER
                                     < LA CORRESPONDANCE : "J" --> "J"...
ACLP1::  VAL         '40             < IMPRIMANTE RAPIDE 1.
ACLP1:   VAL         ACLP1?OFFRAC
ACCR1::  VAL         '10             < LECTEUR DE CARTES 1.
ACCR1:   VAL         ACCR1?OFFRAC
ACCR2::  VAL         '28             < LECTEUR DE CARTES 2.
ACCR2:   VAL         ACCR2?OFFRAC
ACHOR::  VAL         '17FC           < HORLOGE.
ACDKF::  VAL         '38             < DISQUE A TETES FIXES.
ACDKF:   VAL         ACDKF?OFFRAC
ACDKM::  VAL         '20             < DISQUE A TETES MOBILES.
                                     < A T T E N T I O N  : 'DKM' N'EST PLUS
                                     < SITUEE A L'ADRESSE DEBANALISEE RECONNUE
                                     < PAR LE MICRO-PROGRAMME DE BOOT-STRAP...
                                     < POUR BOOT-STRAPER A PARTIR DE 'DKM'
                                     < DANS LE CAS D'UN EXPLOITATION REDUITE
                                     < (SANS 'DKF'), IL FAUDRA EN FAIT BOOT-
                                     < STRAPER A PARTIR DE 'DKU', EN AYANT
                                     < PERMUTER LES 2 DISPACKS...
ACDKM:   VAL         ACDKM?OFFRAC
ACDKU::  VAL         '30             < DISQUE A TETES MOBILES UTILISATEUR.
                                     < A T T E N T I O N  : 'DKU' DEVIENT LE
                                     < DISQUE DEBANALISE A PARTIR DUQUEL
                                     < ON PEUT BOOT-STRAPER... DONC, NE PAS
                                     < OUBLIER DE PERMUTER LES DISPACKS...
ACDKU:   VAL         ACDKU?OFFRAC
ACTTY1:: VAL         '17F8           < TELETYPE DE SERVICE.
ACMU1::  VAL         '110C           < MULTIPLEXEUR DES VISUS
ACMU1:   VAL         ACMU1?OFFRAC
XWOR%8:  VAL         4               < DECALAGE DES NUMEROS DE VISU.
XXVI1::  VAL         '0>XWOR%8       < VISU 1 D'UN COUPLEUR 4 VOIES,
XXVI2::  VAL         '1>XWOR%8       < VISU 2 D'UN COUPLEUR 4 VOIES,
XXVI3::  VAL         '2>XWOR%8       < VISU 3 D'UN COUPLEUR 4 VOIES,
XXVI4::  VAL         '3>XWOR%8       < VISU 4 D'UN COUPLEUR 4 VOIES.
ACVI1::  VAL         ACMU1?XXVI1     < PSEUDO-COUPLEUR VISU1.
ACVI2::  VAL         ACMU1?XXVI2     < PSEUDO-COUPLEUR VISU2.
ACVI3::  VAL         ACMU1?XXVI3     < PSEUDO-COUPLEUR VISU3.
ACVI4::  VAL         ACMU1?XXVI4     < PSEUDO-COUPLEUR VISU4.
ACMU2::  VAL         '1104           < MULTIPLEXEUR DES VISUS
ACMU2:   VAL         ACMU2?OFFRAC
ACVI5::  VAL         ACMU2?XXVI1     < PSEUDO-COUPLEUR VISU5.
ACVI6::  VAL         ACMU2?XXVI2     < PSEUDO-COUPLEUR VISU6.
ACVI7::  VAL         ACMU2?XXVI3     < PSEUDO-COUPLEUR VISU7.
ACVI8::  VAL         ACMU2?XXVI4     < PSEUDO-COUPLEUR VISU8.
ACCU1::  VAL         '0000           < COUPLEUR UNIVERSEL 1
ACCU1:   VAL         ACCU1?OFFRAC
ACCU2::  VAL         '0008           < COUPLEUR UNIVERSEL 2.
ACCU2:   VAL         ACCU2?OFFRAC
ACCU3::  VAL         '0048           < COUPLEUR UNIVERSEL 3.
ACCU3:   VAL         ACCU3?OFFRAC
ACMT1::  VAL         '18             < DEROULEUR DE BANDES MAGNETIQUES 1.
ACMT1:   VAL         ACMT1?OFFRAC
<
<
<        POUR CHANGER LA CONFIGURATION, IL FAUT :
<
<                    1- MODFIER LA LISTE CI-DESSUS ;
<                    2- PATCHER LA TABLE 'DCTIT' (NIVEAUX D'IT) ;
<                    3- PATCHER LA TABLE 'TPER' (NOM DES NIVEAUX IT).
<
<
<        F O N C T I O N   P E R I P H E R I Q U E S  :
<
<
FPHIN::  VAL         '0              < ENTREE INFORMATION.
FPHOUT:: VAL         '1              < SORTIE INFORMATION.
FPHETA:: VAL         '2              < ENTREE ETAT.
FPHCMD:: VAL         '3              < SORTIE COMMANDE.
FPHDUM:: VAL         '4
FPHSAD:: VAL         '5              < SORTIE ADRESSE DISQUE...
FPHETB:: VAL         '6              < ENTREE MOT D'ETAT B.
FPHCME:: VAL         '7              < SORTIE COMMANDE...
         PAGE
<
<
<        M E M O I R E   B A N A L I S E E  :
<
<
<        DEFINITION :
<                      LA MEMOIRE BANALISEE CORRESPOND
<                    AUX PREMIERES ADRESSES DE LA MEMOIRE
<                    BASSE (DITE ENCORE "MEMOIRE MAITRE",
<                    PARCE QUE CORRESPONDANT A L'IMPLANTA-
<                    TION DU SYSTEME) ; ON Y TROUVE UN
<                    CERTAIN NOMBRE D'INFORMATIONS UTI-
<                    LISEES PAR LA MICRO-MACHINE...
         PROG
<
<
<        P O I N T E U R S   G E N E R A U X  :
<
<
XXNS:    WORD        XINI            < NS INITIAL
XXNL:    WORD        K               < NL.
ALPSTH:  WORD        PSTH00          < ADRESSE DES 'PSTH'.
         WORD        PSTS00
         WORD        SVCMTR          < ENTREE SVC MAITRE.
         WORD        SVCESC          < ENTREE SVC ESCLAVE.
         WORD        PSTH10          < 'PSTH' DU DEFAUT SECTEUR.
         WORD        RECOV           < LE MOT7 DE LA MEMOIRE CONTIENT
                                     < LA VALEUR DE REINITIALISATION DU
                                     < REGISTRE P DU RECOVERY LORS
                                     < DES DEFAUTS SECTEURS.
INICMS:  WORD        RESTAR          < ADRESSE D'INITIALISATION.
         WORD        ASMST           < FAUX REGISTRE S INITIALISE
                                     < EN MODE MAITRE, AU CAS OU
                                     < LA MEMOIRE BASSE ('0)  SERAIT
                                     < PRISE POUR UNE DCT (CAS OU
                                     < @DCT=K !!!) ; ALORS ON IRAIT SE
                                     < BRANCHER DANS LE RESTART, D'OU
                                     < UN ACTD ; UNE ANALYSE DU CONTENU
                                     < DES REGISTRES DE LA TACHE,
                                     < DISCRIMINERAIT UN VRAI RESTART
                                     < D'UN FAUX...
<
<
<        C O N T R O L E   P R O C E S S E U R   T V
<        B A S S E - D E F I N I T I O N  :
<
<        ( P R E M I E R E   P A R T I E )
<
<
TVENTR:  WORD        AMEMTV          < DONNE LA TRANSLATION A APPORTER DANS
                                     < 'MEMTV' LORS DES OPERATIONS DE LECTURE
                                     < A PARTIR DE 'DKU' (FONCTION 'FONTVR').
                                     < C'EST CETTE CONSTANTE QUI EST UTILISEE
                                     < POUR ENTRELACER LES TROIS COMPOSANTES
                                     < LORS DES TRANSFERTS RAPIDES...
                                     < ETAT INITIAL : MODE 'FAST', C'EST-A-DIRE
                                     < NON ENTRELACE...
XMEMXT:: VAL         EXIST           < VALEUR DU MOT 'MEMINX' OBLIGEANT TH0/TH2
                                     < A TRAITER LES ALARMES "MEMOIRE INEXIS-
                                     < TANTE" DE L'UTILISATEUR.
XMEMXI:: VAL         NEXIST          < VALEUR DE 'MEMINX' PERMETTANT A TH0/TH2
                                     < D'IGNORER LES ALARMES "MEMOIRE INEXIS-
                                     < TANTE" DES UTILISATEURS ; CELA EST TRES
                                     < UTILE, CAR EN EFFET, CE TYPE D'ALARME NE
                                     < PEUT SE PRODUIRE AVEC LES UTILISATEURS,
                                     < SAUF AVEC LA 'CDAJ', TANT QUE CELLE-CI
                                     < MERDERA...
         IF          XMEMXT-XMEMXI,XEIF%,,XEIF%
         IF          ATTENTION : TEST DISCRIMINATOIRE IMPOSSIBLE !!!
XEIF%:   VAL         ENDIF
MEMINX:  WORD        XMEMXI          < MOT PERMETTANT A 'TH0' DE SAVOIR S'IL
                                     < DOIT TRAITER OU IGNORER LES ALARMES
                                     < "MEMOIRE INEXISTANTE" DES UTILISATEURS.
XX256::  VAL         256             < FORMAT D'UNE TRAME NUMERIQUE DE FAIBLE
                                     < DEFINITION.
XL256::  VAL         XX256           < NOMBRE DE LIGNES D'UNE IMAGE,
XC256::  VAL         XX256           < NOMBRE DE COLONNES D'UNE IMAGE.
TVLIMA:: VAL         XC256/NBITMO*XL256/LK
                                     < LONGUEUR EN K-MOTS D'UNE TRAME DE
                                     < FAIBLE DEFINITION...
XXTVI::  VAL         TVLIMA*LK       < 'XXTVI' DEFINIT LE NOMBRE DE DEPLACE-
                                     < MENT MEMOIRE A FAIRE POUR SIMULER LA
                                     < VISUALISATION D'UNE TRAME EN TYPE
                                     < "T1600"...
XXXTVI:: VAL         XXTVI           < NOMBRE DE MOTS DEPLACES EN UN SEUL
                                     < 'MVTS' OU 'MVTM'.
<*******************************************************************************
TVNITE:  WORD        XXTVI/XXXTVI    < DONNE LE NOMBRE D'ITERATIONS DES 'MVTS'
                                     < EN SIMULATION DE VISUALISATION ; CE
                                     < MOT EST MIS LA PARCE QU'ON NE PEUT PAS
                                     < LE METTRE AILLEURS !!!
TVNITE: @MOT         '0@@@@          < MOT CONTENANT LE NOMBRE D'ITERATIONS.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
<
<
<        P U P I T R E S   E T   E N T R E E S - S O R T I E S  :
<
<
VINTER:  WORD        WINTER          < DONNE LA LISTE DES VISUS ACCESSIBLES
                                     < EN ENTREE...
                                     < (MIS ICI AFIN DE NE JAMAIS CHANGER SON
                                     < ADRESSE !!!)
ABOX:    WORD        BOXIPI          < RELAI VERS LA BOITE AUX LETTRES...
WSCHED:  WORD        NILK            < MEMOIRE DU MICRO-SCHEDULER.
         WORD        NILK            < MEMOIRE DU PUPITRE 0.
         WORD        NILK            < MEMOIRE DU PUPITRE 1.
         WORD        NILK            < MEMOIRE DU PUPITRE 2.
         WORD        NILK            < MEMOIRE DU PUPITRE 3.
         WORD        LDC0            < CONTEXTES LDC0.
         WORD        LDC1            < CONTEXTES LDC1.
         WORD        LDC2            < CONTEXTES LDC2.
         WORD        LDC3            < CONTEXTES LDC3.
<
<
<        D E F I N I T O N   D E   L A   Z O N E   ' C D A '   A C T I V E  :
<
<
OCDA:    WORD        AOCDA           < DEBUT DE LA ZONE 'CDA',
ECDA:    WORD        AECDA           < FIN DE LA ZONE 'CDA'
<
<
<        D E F I N I T I O N   D U   R E G I S T R E   ' I M '  :
<
<
RIMMST:  WORD        NILK            < MOT CONTENANT EN PERMANENCE LA VALEUR
                                     < A DONNER AU REGISTRE 'IM' DU PROCESSEUR
                                     < MAITRE ; ELLE EST INITIALISEE DANS LA
                                     < PHASE D'INITIALISATION DU SYSTEME ; LE
                                     < REGISTRE 'IM' EST MIS A JOUR EN PERMA-
                                     < NENCE PAR 'IDLE', CE QUI PERMET DE LE
                                     < MODIFIER PAR LE 'DEBUG ABSOLU'...
                                     < (NOTA : CE MOT EST THEORIQUEMENT DESTINE
                                     < A L'OPERATEUR 'VSS')
         PAGE
<
<
<        C O N T R O L E   P R O C E S S E U R   T V
<        D E   B A S S E - D E F I N I T I O N  :
<
<        ( D E U X I E M E   P A R T I E )
<
<
FONTV::  VAL         '01             < FONCTION ADRESSABLE A 'DKU' MEME
                                     < S'IL N'EXISTE PAS, ET QUI PERMET
                                     < DE FAIRE EXECUTER UN 'SVCM3' DE
                                     < VISUALISATION EN TELEVISION
                                     < NUMERIQUE.
<*******************************************************************************
TVCTRL:  WORD        NILK            < MOT DE CONTROLE DU PROCESSEUR TV :
                                     < CELUI-CI EST 'OFF' LORSQUE LE MOT
                                     < DE CONTROLE EST NUL ; LES DIFFERENTS
                                     < CHAMPS QU'IL CONTIENT SONT LES
                                     < SUIVANTS :
TVCTRL: @MOT         '0@@@@          < MOT DE CONTROLE TV BASSE DEFINITION.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
TVRR::   VAL         'E000           < INUTILISE, MAIS...
TVRV::   VAL         '1C00           < INUTILISE, MAIS...
TVRB::   VAL         '0380           < INUTILISE, MAIS...
<*******************************************************************************
TVIN::   VAL         '0040           < 1=IN (SINON OUT).
TVIN:   @VAL         '0@@@@          < BIT DISCRIMINANT TV IN/OUT...
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
TVIMAG:: VAL         '0020           < VOIR LE NOTA PLUS LOIN...
TVRVB::  VAL         '0010           < INUTILISE, MAIS...
TV512::  VAL         '0008           < INUTILISE, MAIS...
TVMODE:: VAL         TVIN?TVIMAG?TVRVB?TV512
                                     < INUTILISE, MAIS...
TVINV::  VAL         '0004           < INUTILISE, MAIS...
XNCOOL:: VAL         3               < NOMBRE DE COULEURS DANS LE SYSTEME
                                     < DE TELEVISION R-V-B...
XWOR%2:  VAL         -S              < POUR UN DECALAGE A DROITE.
XWOR%1:  VAL         XNCOOL          < CONSTANTE DONT ON CHERCHE LE MASQUE
                                     < MINIMAL L'ENGLOBANT.
         DO          NBITMO
XWOR%1:  VAL         XWOR%1>XWOR%2=FCPUSH
XWOR%1:  VAL         I               < INITIALISATION DU DECOMPTE,
         DO          NBITMO
XWOR%1:  VAL         K=FCPULL=FCSIGN+XWOR%1
<*******************************************************************************
TVSIMU:: VAL         BIT>XWOR%1-N    < 00=MODE NORMAL,
                                     < XX=MODE SIMULATION DE LA VISUALISATION
                                     < DYNAMIQUE DE TYPE "T1600", AVEC LES
                                     < MOUVEMENTS MEMOIRE SUIVANTS, FONCTION
                                     < DE 'XX' :
                                     < 01 : (TVMEME) --> (TVMEM1),
                                     < 10 : (TVMEME) --> (TVMEM2),
                                     < 11 : (TVMEME) --> (TVMEM3).
TVSIMU: @VAL         '0@@@@          < MASQUE DE SELECTION DES COMPOSANTES.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
<*******************************************************************************
TVPOFF:: VAL         K               < INITIALISATION DU GENERATEUR DES
                                     < NUMEROS DE PROCESSEURS COULEUR.
                                     < ('TVPOFF' SIGNIFIE L'ABSENCE DE
                                     < VISUALISATION...)
TVPR::   VAL         '0@@@@+I        < NUMERO DU PROCESSEUR 'ROUGE',
TVPV::   VAL         '0@@@@+I        < NUMERO DU PROCESSEUR 'VERT',
TVPB::   VAL         '0@@@@+I        < NUMERO DU PROCESSEUR 'BLEU'.
XWOR%2:  VAL         '0@@@@          < NUMERO DU DERNIER PROCESSEUR
                                     < COULEUR DEFINI...
<*******************************************************************************
         IF          XWOR%2-XNCOOL,,XEIF%,
         IF          BIZARRE : LE NOMBRE DE PROCESSEURS N'EGALE
         IF          PAS LE NOMBRE DE COULEURS !!!
XEIF%:   VAL         ENDIF
<*******************************************************************************
XWOR%F:  VAL         TVPR
TVPR:   @VAL         '0@@@@          < NUMERO DU PROCESSEUR ROUGE.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         TVPV
TVPV:   @VAL         '0@@@@          < NUMERO DU PROCESSEUR VERT.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         TVPB
TVPB:   @VAL         '0@@@@          < NUMERO DU PROCESSEUR BLEU.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
XWOR%1:  VAL         TVSIMU=K
XWOR%1:  VAL         -XWOR%1         < POUR UN DECALAGE A DROITE...
         IF          TVSIMU>XWOR%1-XWOR%2,,XEIF%,XEIF%
         IF          ATTENTION : TROP DE PROCESSEURS COULEUR DEFINIS !!!
XEIF%:   VAL         ENDIF
MEMTV0:: VAL         '3000           < ADRESSE 16-MOTS DU PREMIER STACK
                                     < MEMOIRE RAPIDE UTILISE PAR LE
                                     < SYSTEME DE TELEVISION NUMERIQUE.
TVAR0::  VAL         O               < ADRESSE RELATIVE DU PREMIER MOT
                                     < VIUALISE DANS 'MEMTV'.
STLIMA:: VAL         TVLIMA          < LONGUEUR EN K-MOTS DES STACKS MEMOIRE
                                     < UTILISES POUR STOCKER CHAQUE COMPO-
                                     < SANTE D'UNE IMAGE.
XWOR%3:  VAL         STLIMA*LK>DADR  < LONGUEUR EN 16-MOTS D'UN STACK.
XWOR%4:  VAL         TVSIMU>XWOR%1-Z*XWOR%3+MEMTV0
                                     < ADRESSE 16-MOTS DU DERNIER STACK
                                     < MEMOIRE RAPIDE UTILISE.
XWOR%2:  VAL         IJIJDX
<*******************************************************************************
TVMEM:   EQU         $-XWOR%2
TVMEM:  @MOT         '0@@@@          < ADRESSE-1 DE L'ADRESSE COMPOSANTE 'R'.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
<*******************************************************************************
         DO          XNCOOL
         WORD        K=FCDO*XWOR%3)MFFFF+N+XWOR%4
MEMTVE:: VAL         '0000000@@@@+XWOR%3
                                     < ADRESSE 16-MOTS DU PREMIER STACK
                                     < INACCESSIBLE A LA TELEVISION...
<*******************************************************************************
TVMEM1:  EQU         TVMEM+XWOR%2    < ON GARANTIT AINSI, LA CONTIGUITE
TVMEM2:  EQU         TVMEM1+XWOR%2   < DE 'TVMEM1', 'TVMEM2'
TVMEM3:  EQU         TVMEM2+XWOR%2   < ET DE 'TVMEM3'...
                                     < (ET CECI, AFIN QUE 'IDLE' FONCTIONNE
                                     < CORRECTEMENT...)
RTLIMA:: VAL         64              < TAILLE EN K-MOTS DE LA MEMOIRE REELLE-
                                     < MENT DISPONIBLE POUR LA TELEVISION
                                     < NUMERIQUE...
         IF          RTLIMA-LSPACE,XEIF%,XEIF%,
         IF          ATTENTION : LA 'CDAI' NE PEUT EXCEDER 64 K-MOTS !!!
XEIF%:   VAL         ENDIF
         IF          STLIMA*XNCOOL-RTLIMA,XEIF%,XEIF%,
         IF          LA MEMOIRE DISPONIBLE POUR LA TELEVISION
         IF          NUMERIQUE EST INSUFFISANTE !!!
XEIF%:   VAL         ENDIF
XWOR%1:  VAL         LK=K+DADR
XWOR%1:  VAL         RTLIMA>XWOR%1   < TAILLE EN DADR-MOTS DE 'RTLIMA'.
MEMTVR:: VAL         MEMTV0+XWOR%1   < ADRESSE DU PREMIER DADR-MOT INACCES-
                                     < SIBLE DANS LA MEMOIRE DE 'TV'.
XWOR%1:  VAL         -DADR           < POUR CONVERTIR UNE DADR-ADRESSE EN UNE
                                     < ADRESSE DE MOTS.
XWOR%2:  VAL         MEMTV0>XWOR%1   < ADRESSE-MOT RELATIVE A 'MEMTV' DU DE-
                                     < BUT DE LA ZONE VISUALISEE.
AMEMTV:  EQU         ZERO+XWOR%2     < DEPLACEMENT EN MOTS DANS 'MEMTV' POUR
                                     < FAIRE LES LECTURE RAPIDES 'DKU' -->
                                     < 'MEMTV' SANS ENTRELACEMENT.
XXLTV::  VAL         MEMTVE-MEMTV0   < LONGUEUR EN DADR-MOTS DE LA ZONE NECES-
                                     < SAIRE A L'ENTRELACAGE DES IMAGES.
XWOR%2:  VAL         MEMTVR-XXLTV>XWOR%1
                                     < ADRESSE-MOTS RELATIVE A 'MEMTV' DU
                                     < FOND DE LA MEMOIRE ALLOUEE A LA CDAI' ;
                                     < ON PLACE LA ZONE D'ENTRELACAGE TOUT AU
                                     < BOUT DE LA MEMOIRE ('MEMTVR') AFIN DE NE
                                     < PAS PERTUBER LE FONCTIONNEMENT DE PRO-
                                     < GRAMMES QUI UTILISENT LES MOTS SUIVANTS
                                     < 'MEMTV0' POUR DES MASQUES OU DES
                                     < Z-BUFFERS, OU AUTRES...
AMEMTW:  EQU         ZERO+XWOR%2     < DEPLACEMENT EN MOTS DANS 'MEMTV' POUR
                                     < FAIRE LES LECTURES RAPIDES 'DKU' -->
                                     < 'MEMTV' AVEC ENTRELACEMENT.
         IF          TVLIMA+TVLIMA*XNCOOL-RTLIMA,XEIF%,XEIF%,
         IF          ATTENTION : 'MEMTV' EST TROP PETITE POUR
         IF          FAIRE LES LECTURES RAPIDES 'DKU' --> 'MEMTV'
         IF          AVEC ENTRELACEMENT !!!
XEIF%:   VAL         ENDIF
<
<        NOTA :
<                    TVMEM1 : CONTIENT L'ADRESSE DE L'IMAGE A VISUALISER
<                             SI TVIMAG=1 ; SINON, CONTIENT L'ADRESSE
<                             DE LA PREMIERE COMPOSANTE, ET DE PLUS
<                             L'ADRESSE DU RECEPTEUR DE 'TVMEME'
<                             SI TVSIMU=01.
<                    TVMEM2 : CONTIENT L'ADRESSE DE LA DEUXIEME COMPOSANTE
<                             SI TVIMAG=0, ET DE PLUS L'ADRESSE DU RECEPTEUR
<                             DE 'TVMEME' SI TVSIMU=10.
<                    TVMEM3 : CONTIENT L'ADRESSE DE LA TROISIEME
<                             COMPOSANTE SI TVIMAG=0, ET DE PLUS
<                             L'ADRESSE DU RECEPTEUR DE 'TVMEME'
<                             SI TVSIMU=11.
<
<
<
<        A T T E N T I O N  :
<                      LES ADRESSES CONTENUES DANS 'TVMEM1', 'TVMEM2'
<                    ET 'TVMEM3' SONT DES ADRESSES 16-MOTS !!!
<
<
<*******************************************************************************
TVMEME:  WORD        NIL             < ADRESSE-MOT DE LA ZONE DONT ON VEUT
                                     < SIMULER LA VISUALISATION DYNAMIQUE ;
                                     < CETTE ADRESSE EST VALIDEE SOFTWAREMENT
                                     < PAR LA TACHE 'IDLE' PAR LE BIT 'TVSIMU'.
                                     < A T T E N T I O N  : IL CONVIENT D'Y
                                     < ASSOCIER AUSSI LE MOT 'TVNITE' MIS
                                     < AVANT POUR DES RAISONS D'OCCUPATION
                                     < DE LA MEMOIRE DEBANALISEE.
TVMEME: @MOT         '0@@@@          < ADRESSE DE LA ZONE VISUALISEE.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
         PAGE
<
<
<        D E F I N I T I O N   D E   L ' I M A G E U R
<        D E   M O Y E N N E - D E F I N I T I O N  :
<
<
<        NOTA :
<                      CET IMAGEUR EST ASSIMILE A
<                    LA 'CDA' DITE 'CDAJ', QUI EST
<                    DECOUPEE EN PAGE DE 64K, LE
<                    PAS DE PASSAGE DE L'UNE A
<                    L'AUTRE ETANT DE 64K.
<                      ON NE PEUT MALHEUREUSEMENT
<                    PLUS UTILISER DES PAGES DE
<                    64K AVEC PAS DE PASSAGE DE 32K,
<                    CAR EN EFFET, LE RECOUVREMENT DES
<                    PAGES DE 64K IMPLIQUE QU'UNE PAGE
<                    SUR 2 EST A CHEVAL SUR UNE FRONTIERE
<                    DE 64K, CE QUI N'EST PAS TOLERE PAR
<                    LA MICRO-MACHINE !!!
<
<
BMCDAJ:: VAL         BITSIG          < LA 'CDAJ' EST DEFINIE PAR UNE CARAC-
                                     < TERISTIQUE DES ADRESSES QU'ELLE CONTIENT;
                                     < TOUTE DADR-ADRESSE CONTENANT LE BIT
                                     < 'BMCDAJ' A 1 EST DANS 'CDAJ'.
TMCDAJ:: VAL         LSPACE          < LONGUEUR D'UNE PAGE EN K-MOTS,
IMCDAJ:: VAL         LSPACE          < INCREMENT EN K-MOTS DE PASSAGE D'UNE
                                     < PAGE A SES VOISINNES.
MCDAJO:: VAL         COSBT?BMCDAJ=FMASK(K=FCINST
                                     < ADRESSE EN DADR-MOTS DE LA PREMIERE
                                     < PAGE DE 'CDAJ',
XWOR%1:  VAL         LK>DADR*TMCDAJ=K
MCDAJE:: VAL         BIT>XWOR%1-Z+MCDAJO
                                     < ADRESSE EN DADR-MOTS DE LA FIN DE LA
                                     < PREMIERE PAGE DE 'CDAJ'.
<
< DEFINITION DES REGISTRES
< D'ACCES A L'IMAGEUR :
<
TEMP68:: VAL         '08*W           < UNE PETITE TEMPORISATION EST NECESSAIRE
                                     < APRES L'ECRITURE DE CHACUN DES REGIS-
                                     < TRES...
                                     < (*W SI NECESSAIRE, *K DANS LE CAS
                                     < CONTRAIRE...)
XLINV::  VAL         MMOT            < CAR A CERTAINS ENDROITS DE L'IMAGEUR
                                     < MOYENNE DEFINITION, LA LOGIQUE EST
                                     < INVERSEE...
PAGE68:: VAL         4               < NUMERO DE LA PAGE DE 'TMCDAJ' K-MOTS CON-
                                     < NANT LES REGISTRES DE PROGRAMMATION DE
                                     < L'IMAGEUR MOYENNE DEFINITION :
XRCMD::  MOT         'F800           < REGISTRE DE COMMANDE, DONT L'UNE D'ELLE
                                     < EST :
XPVECT:: VAL         8               < MISE EN FORMAT "PETITS VECTEURS"...
XRASTR:: VAL         COSBT?XPVECT=FMASK(K=FCINST)XLINV(MOCD
                                     < COMMANDE A ENVOYER A 'RCMD' POUR TRACER
                                     < EN MODE RASTER (POINT A POINT).
XRXH::   MOT         'F810           < REGISTRE "HIGH-X",
XRXL::   MOT         'F812           < REGISTRE "LOW-X",
XRYH::   MOT         'F814           < REGISTRE "HIGH-Y",
XRYL::   MOT         'F816           < REGISTRE "LOW-Y".
XRNIVO:: MOT         'F820           < REGISTRE CONTENANT LE NIVEAU DE GRIS A
                                     < ATTRIBUER A UN POINT, ET CE ENTRE LES
                                     < LIMITES SUIVANTES :
XXNOIR:: VAL         K               < NIVEAU MINIMAL,
XXN255:: VAL         256-Z           < NIVEAU MAXIMAL...
<
< DEFINITION DE L'EQUIVALENCE
< ENTRE 'CDAI' ET 'CDAJ+4' :
<
PAGEIJ:: VAL         PAGE68          < NUMERO DE LA PAGE DE 'TMCDAJ' K-MOTS
                                     < SUPPORTANT L'EMULATION DE LA 'CDAI'
                                     < LORSQUE LA COMMANDE "!CDAI=J" EST
                                     < ACTIVE...
<
< DIMENSIONS DE L'IMAGEUR :
<
XC512::  VAL         512             < IL Y A 512 COLONNES, ET
XL512::  VAL         512             < 512 LIGNES...
         PAGE
<
<
<        F O N C T I O N S   D E   C O L O R I A G E   D U
<        P R O C E S S E U R   T V   B A S S E - D E F I N I T I O N  :
<
<
<        NOTA :
<                      LORSQUE LE 'CU3' EST UTILISE POUR
<                    ACCEDER AUX COULEURS DE LA TELEVISION
<                    NUMERIQUE, L'ARGUMENT ENVOYE PAR LE
<                    MOT2 A LE FORMAT SUIVANT (EN BITS
<                    OU EN MASQUES) :
<
<
XXCUC0:: VAL         'F000           < ZONE DEVANT ETRE A '0 POUR QUE LA
                                     < SELECTION DES COULEURS SOIT ACTIVEE.
XXCUSC:: VAL         4               < BIT DE SELECTION DU BANK DE REGISTRES
                                     < EN DIFFUSION ; SA VALEUR EST INDIF-
                                     < FERENTE...
XXCUCR:: VAL         7               < BIT A POSITIONNER POUR DIFFUSER SUR
                                     < LE CANAL ROUGE,
XXCUCV:: VAL         6               < DE MEME SUR LE CANAL VERT,
XXCUCB:: VAL         5               < DE MEME ENFIN SUR LE BLEU.
XXCUAD:: VAL         '00F0           < ADRESSE DES MEMOIRES DANS LESQUELLES
                                     < IL FAUT ECRIRE : LE PREMIER BIT SELEC-
                                     < TIONNE LE JEU, LES SUIVANTS CORRESPON-
                                     < DENT AUX CONFIGURATIONS DE 3 BITS.
XXCUNI:: VAL         '000F           < DONNE LE NIVEAU A ECRIRE A L'ADRESSE
                                     < DEFINIE PAR 'XXCUAD' DANS 0, 1, 2 OU 3
                                     < DES CANAUX DE SORTIE.
<
<
<        D E F I N I T I O N   D E   L A   M E M O I R E
<                    D E S   C O U L E U R S  :
<
<
XWOR%1:  VAL         XXCUAD=K
XWOR%1:  VAL         -XWOR%1
XXCULM:: VAL         XXCUAD>XWOR%1+N < LONGUEUR DE LA MEMOIRE EN MOTS.
XXCUMR:: VAL         '000F           < DEFINITION DU CANAL ROUGE,
XXCUMV:: VAL         '00F0           < DEFINITION DU CANAL VERT,
XXCUMB:: VAL         '0F00           < DEFINITION DU CANAL BLEU.
XWOR%1:  VAL         XXCUMR?XXCUMV?XXCUMB
XWOR%2:  VAL         XXCUMR)XXCUMV)XXCUMB
         IF          XWOR%1-XWOR%2,,XEIF%,
         IF          ATTENTION : IL Y A DES RECOUVREMENTS DANS
         IF          LES MASQUES 'XXCUM' !!!
XEIF%:   VAL         ENDIF
         PAGE
<
<
<        F I L E S   D U   M I C R O - S C H E D U L E R  :
<
<
FDMS:    EQU         $
LOFDMS:: VAL         NMTS/NBITMO     < LONGUEUR EN MOTS DE TOUTES LES FILES
                                     < DE BITS DU MICRO-SCHEDULER.
<
<        A S T F  :
<
ASTF:    EQU         $
         IF          ASTF-ZERO-'20,,XEIF%,
         IF          CELA M'APPRENDRA A TROP PARAMETRER !!!
XEIF%:   VAL         ENDIF
         DO          LOFDMS
         WORD        K
<
<        E S T F  :
<
ESTF:    EQU         $
         DO          LOFDMS
         WORD        MMOT
<
<        R S T F  :
<
RSTF:    EQU         $
         DO          LOFDMS
         WORD        MMOT
         PAGE
<
<
<        R E C H A R G E M E N T   D E   C M S 5  :
<
<
<        FONCTION :
<                      CE MODULE PERMET EN FAISANT P <-- 'BOOTIN',
<                    DE RECHARGER 'CMS5' A PARTIR DU DISQUE 'DKF'
<                    AUTOMATIQUEMENT ; POUR 'DKM' IL FAUDRA PROCEDER
<                    "MANUELLEMENT", EN SE BRANCHANT A LA MAIN VERS
<                    LE BOOTSTRAP CORRESPONDANT...
<
<
BOOTIN:  EQU         $
         LRM         C
         WORD        BOOTAD          < ASTUCE...?!???!
         BR          O,C             < ET ON Y VA...
BOOTAD:  WORD        BTFHDR          < POINT D'ENTREE DU BOOTSTRAP DE LECTURE
                                     < SUR LE DISQUE 'DKF'.
         PAGE
<
<
<        F O R M A T   D C T  :
<
<
<        FONCTION :
<                      ON APPELLE 'DCT' ("DEVICE
<                    CONTROL TABLE" POUR DES RAISONS
<                    HISTORIQUES...) LE CONTEXTE DE
<                    CHAQUE TACHE DU SYSTEME ; CELLES-
<                    CIS SONT DECOUPEES EN 2 PARTIES :
<
<                    1 - LA PREMIERE, FIXE, POSSEDE UN
<                    FORMAT COMMUN A TOUTES LES TACHES ;
<                    ON Y TROUVE PAR EXEMPLE L'ENSEM-
<                    BLE DES REGISTRES, DES SEMAPHORES,
<                    UNE FILE D'ATTENTE,... ON PEUT
<                    DIRE QU'ON TROUVE LA TOUTES LES
<                    INFORMATIONS NECESSAIRES A LA NO-
<                    TION DE "PROLOGUE"-"EPILOGUE" QUI
<                    CARACTERISE L'ENSEMBLE DES TACHES
<                    (VOIR A CE PROPOS 'CHAND').
<
<                    2 - LE DEUXIEME, VARIABLE, CONTIENT
<                    LES DONNEES SPECIFIQUES A CHAQUE
<                    TACHE, ET QUI NE RENTRENT DONC PAS
<                    DANS LE CADRE GENERAL DEFINI CI-
<                    DESSUS...
<
<
         DSEC        DCT
XXDEF0:: VAL         'DEF0           < VALEUR GENEREE DANS LES MOTS DE PILES
                                     < RESERVES A UN TRAITEMENT EN CATAS-
                                     < TROPHE DU DEFAUT SECTEUR ; ON NOTERA
                                     < L'ASTUCE DE "DEF"...
XXPILJ:: VAL         6               < VALEUR PRESUMEE DE 'XXPILI'...
XXBAC0:: VAL         'BAC0           < VALEUR GENERE DANS LE DERNIER MOT
                                     < DE CHAQUE PILE...
DCT0:    EQU         $
<
<
<        P S T   D E   L A   T A C H E  :
<
<
<        NOTA IMPORTANT :
<                      'DISPAT' REMPLACE 'HANDLR'
<                    COMME VALEUR INITIALE DU
<                    REGISTRE 'P' POUR LES TACHES
<                    APPELEES "DISPATCHERS"...
<
<
PST:     WORD        K;K;K;K;COM+DEPCS;DCT0;NIL;PILE;HANDLR;SMST;SO;SE
XXDISW:  EQU         NIL+D           < VALEUR A DONNER AU REGISTRE 'W' DES
                                     < DISPATCHERS AFIN QU'IL NE SOIT PAS NUL,
                                     < POUR QUE LA TRACE SE PASSE BIEN...
         IF          XXDISW-ZERO,,,XEIF%
         IF          ATTENTION : LA TRACE DES 'DISPAT' SERA MAUVAISE !!!
XEIF%:   VAL         ENDIF
XXPSTD:: VAL         PST-DCT0        < DEPLACEMENT DE 'DCT0' VERS 'PST'...
         IF          XXPSTD-K,,XEIF%,
         IF          ATTENTION : LES 'PST' DOIVENT ETRE TOUJOURS EN
         IF          TETE DES 'DCT' A CAUSE DE 'DCTSY' QUI EST AUSSI
         IF          LA LISTE DES 'PST' POUR LE MICRO-SCHEDULER !!!
XEIF%:   VAL         ENDIF
         IF          $-PST-XLPSTS,,XEIF%,
         IF          ATTENTION : LA LONGUEUR DE 'PST' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
<
<
<        P A R T I E   F I X E   D E S   D C T  :
<
<
<        N O M   E T   I N D I C A T E U R S  :
<
<
HNAME:   EQU         $
       #@ASCI        " NOM"          < #SISP CMS5 ASCI#
LHNAME:: VAL         $-HNAME         < LONGUEUR DU 'NAME'.
IOID:    BYTE        K;K             < FORMAT DE IOID :
                                     < BIT0-7=K OU NSPXXX ASSOCIEE
                                     < DANS UNE CORRESPONDANCE DU TYPE :
                                     < NSPIN-->NSPOUT, ('80 POUR
                                     < UN FICHIER),
                                     < BIT8=K SI AUCUN ESCLAVE N'EST
                                     <        ATTACHE A CETTE DCT,
                                     <     =1 SI UN ESCLAVE EST ATTACHE,
                                     <        OU EN COURS D'ATTACHE-
                                     <        MENT PAR JOB-ENTRY,
                                     < BIT9-15=ID DE CET ESCLAVE (S'IL
                                     <         EXISTE...
XIOID0:: VAL         K               < VALEUR INITIALE, OU POUR CEUX QUI NE
                                     < L'UTILISE PAS...
IOIDX::  VAL         8               < BIT D'ATTACHEMENT D'ESCLAVE,
IOIDM::  VAL         '7F             < MASQUE D'IDENTIFICATEUR D'ESCLAVE.
NOUSER:: VAL         CORBT?IOIDX=FMASK(K=FCINST
                                     < VALEUR DU CHAMP IOIDX?IOIDM LORSQU'AUCUN
                                     < UTILISATEUR N'EST ATTACHE A UN PERIPHERI-
                                     < QUE DE TYPE 'IN'...
FILTRE:  WORD        NIL             < ADRESSE D'UNE ROUTINE INDIQUANT
                                     < SI LA DEMANDE DOIT ETRE FILTREE.
SFLITR:  WORD        NIL             < ADRESSE D'UNE ROUTINE INDIQUANT
                                     < S'IL FAUT SUPPRIMER, LEVER OU
                                     < METTRE LE FILTRAGE.
<
<
<        S Y S T E M E   D E   L O C A T I O N   D E   L A   ' D C T '  :
<
<
<        FONCTION :
<                      IL EST POSSIBLE A UNE
<                    TACHE T(I) DE LOUER (OU
<                    S'APPROPRIER) UNE TACHE
<                    T(J) VIA LA DCT(T(J)) ;
<                    ON RETROUVERA CECI, EN
<                    PARTICULIER AVEC LA NO-
<                    TION DE CARTE "!ASSIGN...".
<
<
XTALOC:: VAL         K               < SIGNIFIE 'DCT LIBRE ET LOUABLE'.
ETALOC:  WORD        XTALOC          < MOT INDIQUANT L'ETAT DE LA
                                     < LOCATION DE LA DCT :
                                     < SI ETALOC>0 : LA DCT N'EST PAS
                                     <               LOUABLE, ET EST
                                     <               DONC CONSIDEREEE
                                     <               COMME TOUJOURS
                                     <               PARTAGEABLE.
                                     < SINON :
                                     < BIT0=1 (DCT LOUEE), 0 (DCT LIBRE).
                                     < BIT8-15=NUMERO DE LA TACHE
                                     < LOCATAIRE.
XETLOC:: VAL         BITSIG          < BIT DE LOCATION DE LA DCT.
XXDCTP:: VAL         XTALOC)BIT      < VALEUR DE 'ETALOC' POUR UNE 'DCT'
                                     < NON LOUABLE, ET DONC PARTAGEABLE.
         IF          XXDCTP,,,XEIF%
         IF          ATTENTION : LA VALEUR DE 'XXDCTP' EST
         IF          EN CONTRADICTION AVEC LES DEFINITIONS.
XEIF%:   VAL         ENDIF
         IF          XTALOC-K,,XEIF%,
         IF          ATTENTION : DES TAS DE CHOSES VONT MERDER !!!
XEIF%:   VAL         ENDIF
         IF          XTALOC-XXDCTP,XEIF%,,XEIF%
         IF          ATTENTION : CA VA MERDER !!!
XEIF%:   VAL         ENDIF
         IF          XETLOC-BITSIG,,XEIF%,
         IF          ATTENTION : LES TESTS FAITS SUR LES LOCATIONS
         IF          DE 'DCT' SONT MAUVAIS !!!
XEIF%:   VAL         ENDIF
SEMLOC:  WORD        XXLOC0          < SEMAPHORE D'ATTENTE DE
                                     < LOCATION.
         DZS         LSEM
<
<
<        F I L E   D ' A T T E N T E   D E S   D E M A N D E S
<        D E   S E R V I C E S   A   L A   T A C H E   A S S O C I E E  :
<
<
<*******************************************************************************
TETE:    WORD        NIL             < TETE DE LA FILE D'ATTENTE SUR CE
                                     < PERIPHERIQUE.
TETE:   @MOT         '0@@@@          < TETE FILE D'ATTENTE DANS UNE 'DCT'.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
QUEUE:   WORD        NIL             < QUEUE DE CETTE FILE D'ATTEBTE.
SCHVID:  WORD        XXCHV0          < SEMAPHORE D'ATTENTE SUR FILE
                                     < D'ATTENTE VIDE.
                                     < "OCTET 0 (SCHVID)" EST TOUJOURS
                                     < NUL (VERSION SOLAR). L'INFORMATION
                                     < SE TROUVE MAINTENANT DANS OCTET1(BITSEM).
         DZS         LSEM
<
<
<        S Y N C H R O N I S A T I O N   E T   E X C L U S I O N
<                    I N T E R - T A C H E S  :
<
<
<*******************************************************************************
SIT:     WORD        XXSIT0          < SEMAPHORE D'ATTENTE D'IT.
                                     < "OCTET 0 (SIT)" EST TOUJOURS NUL
                                     < (VERSION SOLAR). L'INFORMATION SE TROUVE
                                     < MAINTENANT DANS 'BITSEM', BITS:
                                     < 'B0SIT', 'B1SIT', 'M57SIT'.
SIT:    @MOT         '0@@@@          < SEMAPHORE D'INTERRUPTION D'UNE 'DCT'.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
         DZS         LSEM
LSIT::   VAL         SIT-DCT0        < DEPLACEMENT PERMETTANT AUX HANDLERS.
                                     < N'UTILISANT PAS SIT, DE TRAVAILLER
                                     < EN RECOUVREMENT DESSUS.
TFONCE:: MOT         LSEM-XXLSEM     < MOT UTILISE DANS 'SIT' PAR
                                     < CERTAINS HANDLERS (CF. HDLVIS),
                                     < POUR INDIQUER L'EQUIVALENCE
                                     < DE CERTAINES FONCTIONS AVEC
                                     < DES ECRITURES ; ON TROUVE PAR
                                     < GROUPE DE 2 BITS LE NBRE DE
                                     < CARACTERES ECRITS ; SI CELUI-CI
                                     < EST NUL, ON FAIT COMME SI LA
                                     < FONCTION N'ETAIT PAS UNE E/S
                                     < EFFECTIVE.
                                     < ON A :
                                     < BITS2-3 : FONCTION '04,
                                     < BITS0-1 : FONCTION '03,
                                     < BITS4-5 : FONCTION '05,
                                     < BITS6-7 : FONCTION '06,
                                     < BITS8-9 : FONCTION '07.
TFONCF:: MOT         TFONCE+D        < (VOIR 'TIMOUT').
SPHEX:   WORD        SPHEX0          < SEMAPHORE D'EXCLUSION DES PHASES
                                     < CRITIQUES.
                                     < "OCTET 0 (SPHEX)" EST TOUJOURS NUL
                                     < (VERSION SOLAR). L'INFORMATION SE TROUVE
                                     < MAINTENANT DANS 'BITSEM': BIT 'B0SPHEX'
         DZS         LSEM
<
<
<        R E L A I S   ( P O U R   S E R V I C E
<        E T   I N T E R R U P T I O N )  :
<
<
ES:      WORD        NIL             < ADRESSE D'UNE ROUTINE D'EXECUTION
                                     < DE LA DEMANDE SPECIFIQUE AU PERIPHERIQUE
                                     < CONCERNE.
ARIT:    WORD        NIL             < ADRESSE D'UNE ROUTINE SPECIFIQUE
                                     < A APPELER LORS DE L'IT CORRESPONDANTE.
<
<
<        E T A T   E T   I N D I C A T E U R S  :
<
<
ETAT:    WORD        K;K             < DOUBLE-MOT D'INDICATEURS CORRESPONDANT
                                     < PAR EXEMPLE AUX MOTS D'ETAT D'UN COU-
                                     < PLEUR DE PERIPHERIQUE...
<*******************************************************************************
XWOR%F:  VAL         ETAT-DCT0
ETAT:   @MOT         '0@@@@          < MOTS D'ETAT DANS UNE 'DCT'.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
ETAT0:   EQU         ETAT+O
ETAT1:   EQU         ETAT+D
XBITS0:: VAL         K               < VALEUR INITIALE DE 'BITSEM' :
BITSEM:  WORD        K               < BITS CONSTITUANT DANS LA VERSION
                                     < 'T1600' LES "ALPHA" DE 'SIT','SPHEX'
                                     < ET 'SCHVID'. EN VERSION SOLAR CES
                                     < INFORMATIONS SONT DANS 'BITSEM'.
B0SIT::  VAL         L               < A '1' IL SIGNIFIE :
                                     < SI LE BETA(SIT) EST < 0, ET S'IL
                                     < Y A EU UN DEFSEC, ALORS IL FAUT DEBLOQUER
                                     < LE HANDLER CORRESPONDANT.
B1SIT::  VAL         B0SIT+BIT       < A '1' IL SIGNIFIE :
                                     < UN DEFSEC A EU LIEU, ET LE HANDLER
                                     < CORRESPONDANT N'A PAS
                                     < CORRESPONDANT NE L'A PAS ENCORE ACQUITTE.
M57SIT:: VAL         '0700           < CONSTANTE PERMETTANT LES CALCULS
                                     < D'EQUIVALENCE DE DUREE D'E/S :
                                     < CES 3 BITS PERMETTENT LE CALCUL
                                     < EVENTUEL DE LA DUREE D'UNE E/S SUR CETTE
                                     < DCT, CONNAISSANT LE COMPTE D'OCTETS
                                     < (CF. SWAPO). (EN FAIT C'EST UNE AMPLITUDE
                                     < DE DECALAGE A FAIRE SUR CODEM).
B0SPHX:: VAL         B1SIT+BIT       < A '0' IL SIGNIFIE : FONCTIONNEMENT NORMAL
                                     <                     DU HANDLER.
                                     < A '1' IL SIGNIFIE: LE HANDLER DOIT ETRE
                                     <                    DESARME A SON POINT
                                     < D'ENTREE, C-A-D AVANT TOUTE OPERATION
                                     < FAISANT INTERVENIR SON NIVEAU !!
BISOSE:: VAL         B0SPHX+BIT      < =0 : TRANSMETTRE NORMALEMENT UN NUMERO
                                     <      DE PAGE DE 32K (POUR (SLO,SLE))
                                     <      DANS 'CHAND',
                                     < =1 : TRANSMETTRE SYSTEMATIQUEMENT LA
                                     <      PAGE 0 (CECI EST UTILISE PAR LE
                                     <      'SGF' SAUF LORSQU'IL S'AGIT DES
                                     <      ENREGISTREMENTS D'UN FICHIER.
BSEUIL:: VAL         MOCD            < MASQUE DE DEFINITION DU SEUIL :
                                     < BITS 8-15: CET OCTET CONTIENT
                                     < DANS CERTAINS CAS UN SEUIL QUI,
                                     < LORSQU'IL EST DEPASSE PAR LE BETA(SCHVID)
                                     < IMPLIQUE UNE CERTAINE ACTION.
XWOR%1:  VAL         COSBT?B0SIT=FMASK(K=FCINST
XWOR%2:  VAL         COSBT?B1SIT=FMASK(K=FCINST
XWOR%3:  VAL         COSBT?B0SPHX=FMASK(K=FCINST
XWOR%4:  VAL         COSBT?BISOSE=FMASK(K=FCINST
XWOR%5:  VAL         XWOR%1?XWOR%2?XWOR%3?XWOR%4?M57SIT?BSEUIL
XWOR%6:  VAL         XWOR%1)XWOR%2)XWOR%3)XWOR%4)M57SIT)BSEUIL
         IF          XWOR%5-XWOR%6,,XEIF%,
         IF          ATTENTION : FACHEUX RECOUVREMENT !!!
XEIF%:   VAL         ENDIF
<
<
<        S Y S T E M E   D E   ' R E T R Y '   C ' E S T - A - D I R E
<        D ' I T E R A T I O N   S U R   S E R V I C E   A Y A N T
<                    E C H O U E   O U   E T E   A B O R T E  :
<
<
XXNTRY:: VAL         IJIJDX          < VALEUR DE 'NTRIES' POUR NE FAIRE
                                     < QU'UNE SEULE TENTATIVE...
NTRIES:  WORD        XXNTRY          < NBRE D'ESSAIS MAX SUR CE
                                     < HANDLER POUR UNE DEMANDE.
                                     < N O T A  : SI NTRIES=K, LE
                                     < SERVICE EST INHIBE, ET LE
                                     < HANDLER PAS APPELE.
                                     < (DE MEME POUR UN DISPATCHER).
<*******************************************************************************
FRETRY:  WORD        TRYVID          < ADRESSE D'UNE ROUTINE SPECIFIQUE
                                     < TESTANT LE BESOIN DE FAIRE UN
                                     < NOUVEL ESSAI.
FRETRY: @MOT         '0@@@@          < ROUTINE D'ITERATION D'UN SERVICE.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
<
<
<        S T A T I S T I Q U E S  :
<
<
HSTATS:  WORD        K               < COMPTEUR MODULO '10000 DES ACCES A CE
                                     < HANDLER ; CETTE COMPTABILITE EST FAITE
                                     < A CHAQUE PASSAGE DANS 'CHAND' LE REFE-
                                     < RENCANT.
<
<
<        T E S T S   D E   T I M E - O U T  :
<
<
<        NOTA :
<                      CES TESTS DE TIME-OUT FAITS PAR L'HORLOGE
<                    PERIODIQUEMENT NE CONCERNENT QUE LES TACHES
<                    DE 'NSP' ALLANT DE 1 A 'NSPPER'.
<
<
TESTO:   WORD        XTESTO          < =0 : NE PAS FAIRE DE TEST DE TIME-OUT
                                     <      SUR CE HANDLER,
                                     < #0 : FAIRE DES TESTS DE TIME-OUT SUR
                                     <      CE HANDLER ; 'TESTO' DONNE ALORS
                                     <      LA FREQUENCE DE CES TESTS EXPRIMEE
                                     <      EN L'UNITE 'IFRETO' ; POUR ETRE
                                     <      SUR DE CETTE DUREE, ON AURA INTE-
                                     <      RET A PRENDRE TEST>1 !!!
                                     < NOTA : 'TESTO' PEUT PRENDRE UNE VALEUR
                                     < NEGATIVE : IL FAUT D'ABORD QUE LE BIT
                                     < 'XBTOVI' DE 'MEMV' SOIT A 1, PUIS QU'IL
                                     < S'AGISSE D'UNE 'DCTVIS', PUIS QUE 'CHAND'
                                     < METTE UNE DEMANDE DANS UNE FILE CONTE-
                                     < NANT UNE DEMANDE DE TETE POUR LAQUELLE
                                     < 'ACTIF'=0 ALORS QUE (TESTO)=0 : 'CHAND'
                                     < POSTIONNE 'TESTO' AVEC -'XXTOVI' QUI
                                     < METTRA EN PLACE ULTERIEUREMENT LE DETEC-
                                     < TEUR DE TIME-OUT AVEC LA VALEUR 'XXTOVI',
                                     < VALEUR QUI ETANT NEGATIVE SERA RAZEE
                                     < LORSQUE 'HANDLR' DECHAINERA CETTE FAMEUSE
                                     < DEMANDE DE TETE...
XTESTO:: VAL         K               < VALEUR DE 'TESTO' POUR NE PAS FAIRE
                                     < DE TEST DE TIME-OUT.
         IF          XTESTO-K,,XEIF%,
         IF          ATTENTION : DE NOMBREUX TESTS NE MARCHERONT PAS !!!
XEIF%:   VAL         ENDIF
TIMOUT:  EQU         SIT+TFONCF      < VALEUR COURANTE DU DECOMPTEUR DES TIME-
                                     < OUT SUR CE HANDLER.
<
<
<        L I S T E   D E S   F O N C T I O N S   R E C O N N U E S
<        E T   " A L T I T U D E "   P O S S I B L E   P O U R
<                    L E U R   E X E C U T I O N  :
<
<
XADCTF:: VAL         MMOT            < TOUTES LES FONCTIONS POSSIBLES SONT
                                     < RECONNUES : CF. PAR EXEMPLE 'NSPVID'...
XXDCTF:: VAL         K               < AUCUN TEST DE VALIDITE SUR LES FONCTIONS
                                     < INCIDENTES NE SERA FAIT ; DE PLUS, LE
                                     < 'SVC' DE CONNEXION' NE PEUT PORTER SUR
                                     < CE TYPE DE 'DCT'.
XDDCTF:: VAL         XXDCTF          < VALEUR BIDON RESERVEE AUX 'DISPAT'...
DCTFON:  WORD        XADCTF          < LISTE DES FONCTIONS ACCESSIBLES : UN
                                     < CERTAIN NOMBRE DE VALEURS PARTICULIERES
                                     < SONT DONNEES CI-DESSUS...
XLDCTF:: VAL         $-DCTFON*NBITMO < NOMBRE DE FONCTIONS POSSIBLES.
                                     < A T T E N T I O N  : LA DERNIERE (VOIR
                                     < 'FINEX' N'EXISTE PAS, ET JOUE UN ROLE
                                     < SPECIAL A L'ENTREE DE 'HANDLR' DANS
                                     < L'INITIALISATION DE (SLO,SLE).
DCTFUP:  DZS         XLDCTF/NBITMO   < ON CONSACRE UN BIT PAR FONCTION :
                                     < DCTFUP(I)=0 : LA FONCTION 'I' DOIT
                                     <               ABSOLUMENT SE DEROULER DANS
                                     <               LA MEMOIRE BASSE...
                                     < DCTFUP(I)=1 : LA FONCTION 'I' PEUT SE
                                     <               DEROULER EN HAUT...
         IF          XLDCTF/NBITMO-D,,XEIF%,
         IF          ATTENTION : LES INITIALISATIONS DE 'DCTFUP'
         IF          SUR UN MOT SONT MAUVAISES !!!
XEIF%:   VAL         ENDIF
XFONBA:: VAL         K               < LORSQUE TOUT DOIT SE DEROULER EN BAS...
<
<
<        Z O N E   V A R I A B L E   E T   S P E C I F I Q U E  :
<
<
<*******************************************************************************
VAR:     EQU         $               < ZONE DE LONGUEUR VARIABLE DEPENDANT
                                     < DU PERIPHERIQUE.
VAR:    @VAL         '0@@@@          < ACCES A LA ZONE VARIABLE DES 'DCT'.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
DCTFIX:: VAL         VAR-DCT0        < LONGUEUR DE LA PARTIE FIXE DES 'DCT'...
XWOR%1:  VAL         DCTFIX          < ESPACE DEJA CONSOMME DANS LA 'DCT'.
XWOR%2:  VAL         DEPBAS-XWOR%1   < ESPACE ENCORE ADRESSABLE DANS LA 'DCT'.
XWOR%3:  VAL         100             < MAJORATION...
         DZS         XWOR%2+XWOR%3   < POUR EVITER LES ENNUIS...
<
<
<        P I L E  :
<
<
<        NOTA :
<                      LA PILE N'EST DONNEE
<                    QU'A TITRE INDICATIF ;
<                    DE PLUS, BIEN QUE SON
<                    ASSEMBLAGE SUIVE CELUI
<                    DE LA 'DCT', ELLE EST EN
<                    GENERAL ASSEMBLEE EN ME-
<                    MOIRE HAUTE...
<
<
PILE:    EQU         $-DEPILE
XWPILE:  VAL         LPILEH+100      < PILE DU HANDLER (OU DU DIS-
                                     < PATCHER, AVEC 'LPILED+35').
         CALL        #SISP CMS5 GENPIL2#
         PAGE
<
<
<        F O R M A T   D E S   D C T   D E
<        G E S T I O N   D E   F I C H I E R S   :
<
<
<        DEFINITION :
<                      LE SYSTEME VA CONTENIR UN
<                    "POOL" DE TACHES DITES DE
<                    "GESTION DE FICHIERS" AUX-
<                    QUELLES SERONT ATTACHES TEM-
<                    PORAIREMENT LES FICHIERS
<                    OUVERTS. ON VA DEFINIR ICI LE
<                    FORMAT DE LA ZONE SPECIFIQUE
<                    DE LEURS 'DCT'.
<
<
         DSEC        DCTF
DCTF0:   EQU         $
<
<
<        Z O N E   F I X E   D E S   ' D C T '  :
<
<
PSTFIL:  WORD        K;K;K;K;COM+DEPCS;DCTF0;NIL;PILFIL;HANDLR;SMST;SO;SE
         IF          PSTFIL-DCTF0-XXPSTD,,XEIF%,
         IF          BIZARRE !!!
XEIF%:   VAL         ENDIF
         IF          $-PSTFIL-XLPSTS,,XEIF%,
         IF          ATTENTION : LA LONGUEUR DE 'PSTFIL' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
       #@ASCI        " FNM"          < #SISP CMS5 ASCI#
XLNSGF:: VAL         XLASCI          < LONGUEUR DU NOM DU HANDLER 'SGF'...
         IF          LHNAME*NOCMO-W-XLNSGF,,XEIF%,
         IF          BIZARRE !!!
XEIF%:   VAL         ENDIF
         WORD        XIOID0          < IOID.
         WORD        FFILTR          < ROUTINE DE FILTRAGE.
         WORD        FSFILT          < ROUTINE DE S-FILTRAGE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC.
         DZS         LSEM
         WORD        NIL             < TETE DE LA FILE D'ATTENTE.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT (INUTILISE).
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLFIL          < HANDLER FICHIER.
         WORD        NIL             < PAS DE RIT.
         WORD        K;K;XBITS0      < ETAT
         WORD        XXNTRY;TRYVID   < NTRIES & FRTRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XSGFON          < LISTE DES FONCTIONS DU 'SGF'.
         WORD        XSGFUP          < ET LEUR "ALTITUDE" D'EXECUTION...
<
<
<        Z O N E   V A R I A B L E  :
<
<
VARFIL:  EQU         $
         IF          VARFIL-DCTF0-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
DFILDK:: VAL         $-VARFIL        < DEMANDE D'ENTREE-SORTIE
                                     < SUR DISQUE.
                                     < ATTENTION : 'AFILDK' EST DEFINI DANS
                                     < LA DSEC 'DEM'...
         DZS         LDEM1
DFILS::  VAL         $-VARFIL        < DEMANDE D'ALLOCATION/RELEASE
                                     < DE SECTEUR(S)/BUFFER.
                                     < ATTENTION : 'AFILS' EST DEFINI DANS
                                     < LA DSEC 'DEM'...
         DZS         LDEM1
CLEFS::  VAL         $-VARFIL        < SAVE (PEK,PDK).
<*******************************************************************************
XWOR%1:  VAL         -D              < INITIALISATION...
CLEFSE:: MOT         '0@@@@+D        < PARTIE ENTIERE 'PEK' D'UNE CLEF,
CLEFSD:: MOT         '0@@@@+D        < PARTIE DECIMALE 'PDK' D'UNE CLEF,
CLEFSL:: MOT         '0@@@@+D        < LONGUEUR D'UNE CLEF.
<*******************************************************************************
         DZS         CLEFSL
         WORD        NIL
BFILDE:: VAL         $-D-VARFIL      < BUFFER DE DELETE...
         WORD        NILS
NFILR::  VAL         $-D-VARFIL      < ADREESE DU PROCHAIN SECTEUR
                                     < A LIRE.
         WORD        NILS
NFILW::  VAL         $-D-VARFIL      < ADRESSE DU PROCHAIN SECTEUR
                                     < A ECRIRE.
         WORD        NILS
AFILT::  VAL         $-D-VARFIL      < ADRESSE DE LA TETE DE L'ENREGIS-
                                     < TREMENT LOGIQUE.
         WORD        NILS
AFILQ::  VAL         $-D-VARFIL      < ADRESSE DE LA QUEUE DE L'ENREGISTREMENT
                                     < LOGIQUE.
         WORD        NILK
NSPF::   VAL         $-D-VARFIL      < NSP DE LA DCT.
         WORD        NILK
FILNOM:: VAL         $-D-VARFIL      < NOM DIRECT DU FICHIER.
         WORD        NILK
NSPDDR:: VAL         $-D-VARFIL      < NSP DU DEMANDEUR
         WORD        YAPILS,X
APILS::  VAL         $-D-VARFIL      < POINTEUR DE LA PILE DES SECTEURS
                                     < A LIBERER.
DAPILS:: VAL         $-D-DCTF0       < DEPLACEMENT DU POINTEUR DE LA
                                     < PILE DES SECTEURS A LIBERER
                                     < DANS LA DCTF.
LLPILS:: VAL         BIT>XXXMOY      < LONGUEUR DE LA PILE DE BLOCAGE DES
                                     < SECTEURS A LIBERER; ELLE DOIT ETRE
                                     < UNE PUISSANCE DE 2.
XWOR%1:  VAL         LLPILS=K
         IF          BIT>XWOR%1-LLPILS,,XEIF%,
         IF          ATTENTION : 'LLPILS' DOIT ETRE UNE PUISSANCE DE 2 !!!
XEIF%:   VAL         ENDIF
YAPILS:  EQU         $
         DZS         LLPILS          < PILE DES SECTEURS A LIBERER.
<
<
<        P I L E  :
<
<
PFIL::   VAL         $-DEPILE-DCTF0  < DEPLACEMENT DE LA PILE
                                     < HANDLER SGF DANS LA DCTF.
PILFIL:  EQU         $-DEPILE
XWOR%1:  VAL         $-DCTF0
XWOR%1:  VAL         YY7-XWOR%1
XWOR%1:  VAL         XWOR%1-LPILEH-XXPILJ
XXPFIL:: VAL         XWOR%1          < INCREMENT DES PILES 'SGF'.
XWPILE:  VAL         LPILEH+XXPFIL
         CALL        #SISP CMS5 GENPIL2#
<
<
<        L O N G U E U R   D E   ' D C T F '  :
<
<
LDCTF::  VAL         $-DCTF0         < LONGUEUR D'UNE DCTF.
         IF          LDCTF-YY7,XEIF%,XEIF%,
         IF          ATTENTION : 'DCTF' EST TROP LONGUE, ET
         IF          NE TIENT PAS DANS UN BUFFER !!!
XEIF%:   VAL         ENDIF
         PAGE
<
<
<        F O R M A T   D C T   D E S   H A N D L E R S
<                    D E   S E R V I C E  :
<
<
<        DEFINITION :
<                      LORSQU'UN UTILISATEUR
<                    DEMANDERA UN SERVICE AU
<                    SYSTEME 'CMS5', VIA L'INS-
<                    TRUCTION 'SVC' PAR EXEMPLE,
<                    ON LUI ATTRIBUERA TEMPO-
<                    RAIREMENT UNE TACHE DITE DE
<                    "SERVICE" QUI GERERA L'EXE-
<                    CUTION DU SERVICE DEMANDE,
<                    ET CECI, AFIN QUE CELUI-CI
<                    NE SE DEROULE PAS SOUS LE
<                    NIVEAU UTILISATEUR, ET AINSI
<                    NE LE BLOQUE PAS...
<
<
         DSEC        DCTSE
<
<
<        Z O N E   F I X E  :
<
<
DCTSER:  EQU         $
PSTSER:  WORD        K;K;K;K;COM+DEPCS;DCTSER;NIL;PILSER;HANDLR;SMST;SO;SE
         IF          PSTSER-DCTSER-XXPSTD,,XEIF%,
         IF          BIZARRE !!!
XEIF%:   VAL         ENDIF
         IF          $-PSTSER-XLPSTS,,XEIF%,
         IF          ATTENTION : LA LONGUEUR DE 'PSTSER' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
       #@ASCI        " SNM"          < #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.
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLSER          < ES.
         WORD        ITSERV          < ARIT.
         WORD        K;K;XBITS0      < ETAT.
         WORD        XXNTRY;TRYVID   < NTRIES & FRTRY.
         WORD        K               < STATS.
         WORD        XTESTO          < TESTO.
         WORD        XXDCTF          < 'DCT' NON CONNECTABLE...
XSERUP:: VAL         XFONBA          < PAS DE FONCTIONS, DONC PAS D'ALTITUDE...
         WORD        XSERUP
<
<
<        Z O N E   V A R I A B L E  :
<
<
VARSER:  EQU         $
         IF          VARSER-DCTSER-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        NILX
OTOMAT:: VAL         $-D-VARSER      < RELAI VERS L'AUTOMATE DE
                                     < SERVICE.
XOTOMA:: VAL         K               < INDEX DE L'AUTOMATE PERMETTANT D'ACCEDER
                                     < A LA LONGUEUR DE CELUI-CI.
DEMCCI:: VAL         $-VARSER        < BLOC DE 8 MOTS DESTINES A
                                     < CCI POUR QU'IL PUISSE ADRESSER
                                     < DES DEMANDES AU SYSTEME.
         DZS         LDEM1
         WORD        NILK
XBUFGR:: VAL         $-D-VARSER      < INDEX COURANT DE BUFESC, LORSUE
                                     < LA GRAMMAIRE DU CCI EST EXPLOREE.
         WORD        NILK
MBUFGR:: VAL         $-D-VARSER      < VALEUR MAXIMALE AUTORISEE DE (XBUFGR)+1 ;
                                     < ELLE VAUT EN GENERAL 'LCCI' (ACCES AU
                                     < 'CCI' INTERACTIF), OU SINON, LE 'CODEM'
                                     < DE 'DEMESC' (LORS DES APPELS AU 'CCI'
                                     < INTERPRETATIF).
         WORD        NILX
ABUFGR:: VAL         $-D-VARSER      < RELAI INDEXE INDIRECT VERS
                                     < BUFESC UTILISE LORS DE L'EXPLORA-
                                     < TION DE LA GRAMMAIRE DU CCI.
         WORD        SERESC
ASERES:: VAL         $-D-VARSER      < POUR ATTEINDRE 'SERESC' DANS 'RUNO' LORS
                                     < DE L'EXECUTION EN MEMOIRE HAUTE DE
                                     < CERTAINS SERVICES...
<
< FIN DE LA 'DCT' DE SERVICE :
<
LDCTSN:: VAL         $-DCTSER
<
<
<        P I L E  :
<
<
PILSER:  EQU         $-DEPILE
XWPILE:  VAL         LPILEH+100      < LONGUEUR ARBITRAIRE...
         CALL        #SISP CMS5 GENPIL2#
         PAGE
<
<
<        F O R M A T   D ' U N E   D E M A N D E  :
<
<
<        DEFINITION :
<                      ON APPELLE "DEMANDE" LE
<                    MESSAGE QUI EST ENVOYE PAR
<                    UNE TACHE T(I), DEMANDEUSE
<                    DE SERVICE, A UNE TACHE T(J) ;
<                    CETTE DEMANDE SERA MISE EN
<                    FILE D'ATTENTE DANS DCT(T(J)).
<
<
         DSEC        DEMAND
DEM0:    EQU         $
<
<
<        D E F I N I T I O N   D U   D E S T I N A T A I R E
<                    E T   I N D I C A T E U R S  :
<
<
NSPTYP:  BYTE        NILK;NILK       < MOT CONTENANT 2 OCTETS :
                                     < NSP ; QUI EST LE NUMERO
                                     < 'SYMBOLIQUE DU PERIPHERIQUE,
                                     < - TYP : QUI CONTIENT LE TYPE ET
                                     < L'ETAT DE LA DEMANDE.
XXNSP::  VAL         NSPTYP-DEM0     < DEPLACEMENT D'ACCES A 'NSPTYP'...
MSPTYP:: VAL         MOCG            < MASQUE DE DEFINITION DU 'NSP'.
BINNSP:: VAL         BITSIG          < BIT DE 'NSPTYP' PERMETTANT L'INHIBI-
                                     < TION DE LA DEMANDE...
MSKNSP:: VAL         CORBT?BINNSP=FMASK(K?MSPTYP=FCINST
                                     < MASQUE DEFINISSANT LE 'NSP' STRICTEMENT..
<
<
<        A R G U M E N T S   D E   L A   D E M A N D E  :
<
<
LARGDM:: VAL         5               < NOMBRE DE MOTS DE 'ARGDEM'.
ARGDEM:  DZS         LARGDM          < CONTIENT LES ARGUMENTS DE LA DEMANDE
                                     < - SOIT DES ARGUMENTS 'SYMBOLIQUES'
                                     < - SOIT UN PROGRAMME CANAL TOUT
                                     < PREPARE.
         IF          ARGDEM-DEM0-D,,XEIF%,
         IF          E R R E U R  !!!
         IF          SI ARGDEM-DEM0 # 1 !!!
XEIF%:   VAL         ENDIF
T::      VAL         ARGDEM-NSPTYP   < DEPLACEMENT...
<
< SUITE DE LA DEFINITION DES 'DCTSGF' :
<
AFILDK:: VAL         DFILDK+T        < ARGUMENTS DE LA DEMANDE 'DFILDK'.
AFILS::  VAL         DFILS+T         < ARGUMENTS DE LA DEMANDE 'DFILS'.
<
<        F O N C T I O N   D E M A N D E E  :
<
OPDEM::  MOT         O               < LE 1ER MOT DE LA DEMANDE EST
                                     < LA FONCTION DEMANDEE :
                                     < - SIGNIFICATION DES BITS 14 & 15 :
                                     < (EN GENERAL)
                                     < 0 0 = LECTURE,
                                     < 0 1 = LECTURE DE CONTROLE (DK),
                                     < 1 0 = ECRITURE,
                                     < 1 1 = DEMANDE INEFFECTIVE.
                                     < PLUS UN CERTAINS NBRE DE
                                     < FONCTIONS SPECIFIQUES...
<*******************************************************************************
XWOR%F:  VAL         T+OPDEM
OPDEM:  @MOT         '0@@@@          < 'OPDEM' D'UNE DEMANDE.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
MKOPDM:: VAL         M000F           < MASQUE DE LA FONCTION DESIREE.
XWOR%1:  VAL         MKOPDM=K
XWOR%1:  VAL         -XWOR%1
XWOR%2:  VAL         MKOPDM>XWOR%1
         IF          NBITMO-XWOR%2,,,XEIF%
         IF          ATTENTION : ON A PREVU TROP DE FONCTIONS POUR
         IF          POUVOIR FAIRE DES LISTES SUR UN MOT !!!
XEIF%:   VAL         ENDIF
MKESEF:: VAL         '0007           < MASQUE PERMETTANT DE SAVOIR A PARTIR
                                     < DE LA FONCTION DEFINIE PAR 'MKOPDM'
                                     < SI CETTE DERNIERE EST UNE VERITABLE
                                     < ENTREE-SORTIE (ALORS, SA VALEUR LIMITEE
                                     < A 'MKESEF' EST INFERIEURE OU EGALE
                                     < A 'FGW').
         IF          MKOPDM?MKESEF-MKOPDM,,XEIF%,
         IF          ATTENTION : 'MKESEF' DOIT ETRE INCLUS DANS 'MKOPDM' !!!
XEIF%:   VAL         ENDIF
WAITB::  VAL         L               < BIT INDIQUANT SI EN CAS DE
                                     < NON SATISFACTION D'UN SERVICE
                                     < PAR UN HANDLER, CE HANDLER DOIT ATTENDRE
                                     < ATTENDRE DE POUVOIR LE SATISFAIRE.
                                     < SIGNIFICATION DE CE BIT :
                                     < 1 : LE HANDLER N'ATTENDRA PAS,
                                     < 0 : LE HANDLER ATTENDRA.
ZBTOVI:: VAL         WAITB           < BIT UTILISE PAR 'HDLVIS' POUR SPECIFIER
                                     < QUE L'ECHANGE COURANT EST DEMANDE AVEC
                                     < UN TIME-OUT...
EOF::    VAL         WAITB           < BIT INDICATEUR DE DERNIER
                                     < ECHANGE (UTILISE PAR LES FICHIERS
                                     < SEQUENTIELS).
FINEX::  VAL         XLDCTF-Z        < FONCTION SPECIALE N'EXISTANT PAS, ET
                                     < ETANT UTILISEE DANS 'DCTFUP' POUR INDI-
                                     < QUER (LORSQU'ELLE EST SEULE), QUE LE
                                     < HANDLER CORRESPONDANT EN 'HANDLR' NE
                                     < POSITIONNE PAS (SLO,SLE)...
         IF          FINEX-XWOR%2,XEIF%,XEIF%,
         IF          'FINEX' EST TROP GRANDE !!!
XEIF%:   VAL         ENDIF
NOSOSE:: VAL         COSBT?FINEX=FMASK(K?XFONBA=FCINST
                                     < VALEUR DE 'DCTFUP' CORRESPONDANTE...
<
< ZONE SPECIFIQUE A 'AL4'/'REL4' :
<
OPMEM4:: VAL         '03FF           < ZONE DESTINEE A TRANSMETTRE DE 'AL4'
                                     < VERS 'REL4' LA LISTE DES BLOCS DE 2K
                                     < ALLOUES ET A RENDRE...
         IF          OPMEM4?MKOPDM-OPMEM4,,XEIF%,
         IF          ATTENTION : 'MKOPDM' DOIT ETRE INCLUS DANS 'OPMEM4' !!!
XEIF%:   VAL         ENDIF
<
< TRANSMISSION DE LA PAGE
< DE 32K A LAQUELLE APPARTIENT
< LE 'SLO' DE L'APPELANT :
<
XWOR%1:  VAL         COSBT?EOF=FMASK(K=FCINST
XWOR%1:  VAL         COSBT?ZBTOVI=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?WAITB=FMASK(K?XWOR%1=FCINST
         IF          XWOR%1(MKOPDM-K,,XEIF%,
         IF          ATTENTION : FACHEUX RECOUVREMENT ENTRE 'MKOPDM',
         IF          'EOF' ET 'WAITB' !!!
XEIF%:   VAL         ENDIF
XMDSLO:: VAL         XWOR%1?OPMEM4)MMOT
                                     < CHAMP DE 'OPDEM' DESTINE A TRANSMETTRE
                                     < LE NUMERO DE PAGE DE 32K D'APPARTENANCE
                                     < D'UN 'SLO'...
         IF          XMDSLO(MKOPDM-K,,XEIF%,
         IF          ATTENTION : FACHEUX RECOUVREMENT ENTRE
         IF          'XMDSLO' ET 'MKOPDM' !!!
XEIF%:   VAL         ENDIF
XDDSLO:: VAL         XMDSLO=K        < DECALAGE D'ACCES AU NUMERO DE PAGE DE
                                     < 32K DANS 'XMDSLO'...
XWOR%2:  VAL         -XDDSLO
XNDSLO:: VAL         XMDSLO>XWOR%2   < NOMBRE MAX DE PAGE DE 32K SUPPORTABLES
                                     < PAR LE SYSTEME 'CMS5'...
                                     < NOTA : L'ESPACE EST DECOUPE EN PAGES
                                     < DE 32K-MOTS (ET NON PAS DE 64) CAR LES
                                     < ADRESSES OCTETS NE PEUVENT DEPASSER
                                     < 2*32=64K-OCTETS...
XPESC::  VAL         XX64K/NOCMO     < TAILLE EN 'K' D'UNE PAGE...
XSLO32:: VAL         XPESC>DADR*LK=K < DECALAGE PERMETTANT DE VOIR A QUELLE
                                     < PAGE DE 32K APPARTIENT UN 'SLO'...
ASLO32:: VAL         W+E             < AFIN DE CALCUL UN 'SLE' A PARTIR D'UN
                                     < 'SLO' DE DEBUT DE PAGE DE 32K (+E
                                     < AFIN QU'UN 'SLO' REEL EN BOUT DE PAGE
                                     < DE 32K NE POSE PAS DE PROBLEMES...).
<
<        D E S C R I P T I O N   D ' U N   E N R E G I S T R E M E N T
<        P O U R   U N E   E N T R E E - S O R T I E  :
<
AMDEM::  MOT         OPDEM+D         < DANS LE CAS D'UNE DEMANDE EFFECTIVE,
                                     < CONTIENT L'ADRESSE OCTETS EN
                                     < MEMOIRE DU BUFFER.
                                     < A T T E N T I O N  : SAUF POUR
                                     < L'ALLOCATION MEMOIRE, ET
                                     < L'ALLOCATION DK, OU IL S'AGIT
                                     < D'ADRESSES-MOTS !!!!!!
CODEM::  MOT         AMDEM+D         < CONTIENT LE NBRE D'OCTETS A ECHANGER.
<*******************************************************************************
XWOR%F:  VAL         T+CODEM
CODEM:  @MOT         '0@@@@          < 'CODEM' D'UNE DEMANDE.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
ASDEM::  MOT         CODEM+D         < CONTIENT DANS LE CAS D'UNE
                                     < DEMANDE SUR DK L'ADRESSE DU
                                     < 1ER SECTEUR A ECHANGER.
<
<        E T A T   I N S T A N T A N E   E T
<        C O N D I T I O N S   D E   R E T O U R  :
<
ETADEM:: MOT         ASDEM+D         < MOT DE ARGDEM, RENVOYANT
                                     < AU DEMANDEUR LES CONDITIONS
                                     < D'EXECUTION.
         IF          ETADEM+P-OPDEM-LARGDM,,XEIF%,
         IF          ATTENTION : 'LARGDM' EST MAL INITIALISE !!!
XEIF%:   VAL         ENDIF
<
<        S Y N C H R O N I S A T I O N  :
<
WEIO:    WORD        XXSEM0          < SEMAPHORE D'ATTENTE DE FIN
                                     < DE REALISATION POUR LE
                                     < DEMANDEUR.
X18::    VAL         WEIO-DEM0
<
<        C H A I N A G E   D A N S   U N E   F I L E   D ' A T T E N T E  :
<
NEXT:    WORD        NIL             < MAILLON DANS LA FILE D'ATTENTE
                                     < DU SERVICE DEMANDE.
<
<        L O N G U E U R   D ' U N E   D E M A N D E  :
<
LDEM0::  VAL         $-DEM0          < NBRE DE MOTS OCCUPES PAR
                                     < UN BLOC DE DEMANDE.
         IF          LDEM1-LDEM0,,XEIF%,
         IF          A T T E N T I O N  : IL FAUT AVOIR LDEM1=LDEM0 !!!
XEIF%:   VAL         ENDIF
<
<
<        I N D I C A T E U R S   D E   N S P T Y P  :
<
<
XWOR%1:  VAL         MSPTYP=K
XWOR%1:  VAL         NBITMO-XWOR%1   < PREMIER BIT LIBRE DERRIERE LE 'NSP'.
PRIO::   VAL         L+XWOR%1        < 1=LA DEMANDE EST PRIORITAIRE,
                                     < 0=LA DEMANDE N'EST PAS PRIORITAIRE.
XDPRIO:: VAL         COSBT?PRIO=FMASK(K=FCINST
ACTIF::  VAL         PRIO+BIT        < 1=LA DEMANDE EST ACTIVE (TRAITEE PAR
                                     <   PAR LE HANDLER,
                                     < 0=LA DEMANDE N'EST PAS ENCORE TRAITEE
                                     <   PAR LE HANDLER.
XBABOR:: VAL         ACTIF+BIT       < BIT INDICATEUR D'UNE DEMANDE D'ABORT DE
                                     < LA DEMANDE COURANTE (CE BIT N'EST AC-
                                     < TUELLEMENT UTILISE QUE DANS 'DEMESC'),
                                     < IL VAUT :
                                     < 0 : ETAT NORMAL (FORCE SYSTEMATIQUEMENT
                                     <     EN SORTIE DE 'HDLSER' POUR 'DEMESC'),
                                     < 1 : APRES UN PASSAGE DANS 'SFSERV' POUR
                                     <     'DEMESC'...
                                     < NOTA : 'XBABOR' A PRIS LA PLACE DE
                                     <        L'ANCIEN 'SYMCAN' INUTILE...
XDSYM::  VAL         K               < ON A CONSERVE 'XDSYM' (EN LE RENDANT
                                     < NUL) AFIN DE NE PAS FAIRE TROP D'UPDA-
                                     < TES ; IL CORRESPONDAIT AUTREFOIS A
                                     < UN MASQUE DE 'SYMCAN'...
         IF          XDSYM-K,,XEIF%,
         IF          ATTENTION : TOUTES LES REFERENCES A 'XDSYM'
         IF          VONT CREER DES PROBLEMES !!!
XEIF%:   VAL         ENDIF
TERMIN:: VAL         XBABOR+BIT      < 1=LE HANDLER A TERMINE L'EXECUTION
                                     <   DE CETTE DEMANDE,
                                     < 0=LE HANDLER N'A PAS ENCORE TERMINE.
ENFILE:: VAL         TERMIN+BIT      < 0=LA DEMANDE N'EST PAS EN FILE,
                                     < 1=LA DEMANDE EST EN FILE.
BACT::   VAL         ENFILE+BIT      < 0=FAIRE L'ACT DE FIN DE SERVICE,
                                     < 1=NE PAS FAIRE L'ACT DE FIN DE
                                     < SERVICE ; ON LAISSE DONC AINSI
                                     < EVENTUELLEMENT LE DEMANDEUR
                                     < EN ATTENTE (CF. HANDLR).
VBOX::   VAL         BACT+BIT        < 1=VALIDE LA PRESENCE D'UN MOT
                                     < FACULTATIF ('BOX') A LA SUITE
                                     < DU CORPS DE LA DEMANDE ; CE MOT
                                     < LORSQU'IL EST PRESENT, EST
                                     < D'UN USAGE ABSOLUMENT LIBRE ;
                                     < IL PERMET PAR EXEMPLE A 2 HANDLER
                                     < D'ECHANGER DE L'INFORMATION (CF.
                                     < PAR EXEMPLE LE RENVOI DES LON-
                                     < GUEURS REELLEMENT ECHANGEES
                                     < DANS LE 'SGN'). LA ROUTINE
                                     < 'STBOX' PERMET DE REMPLIR
                                     < LA BOX EVENTUELLE D'UNE DEMANDE.
TYPAD::  VAL         VBOX+BIT        < 0 : AMDEM CONTIENT, S'IL S'AGIT D'UNE
                                     <     ENTREE-SORTIE, UNE ADRESSE OCTET,
                                     < 1 : AMDEM CONTIENT, S'IL S'AGIT D'UNE
                                     <     ENTREE-SORTIE, UNE ADRESSE MOT,
                                     <     ET PERMET D'ALLER AU-DELA DE 32K.
XTYPAD:: VAL         COSBT?TYPAD=FMASK(K=FCINST
<
<
<        M O T   F A C U L T A T I F   D ' U N E   D E M A N D E  :
<                    ( B O X )
<
<
BOX:     WORD        NILK            < BOX FACULTATIF D'UNE DEMANDE ;
                                     < POUR PLUS DE DETAILS, CF. LE BIT
                                     < VBOX DECRIT CI-DESSUS...
XBOX::   VAL         BOX-DEM0        < DEPLACEMENT D'ACCES A LA BOX
                                     < D'UNE DEMANDE A PARTIR DE
                                     < SON NSPTYP.
LDEM0B:: VAL         $-DEM0          < LONGUEUR D'UNE DEMANDE DE SERVICE AVEC
                                     < UNE 'BOX'.
         TABLE
         PAGE
<
<
<        C O N S T A N T E S   G E N E R A L E S
<        E T   D E F I N I T I O N   ' P S T '  :
<
<
TYPTS::  VAL         K               < TYPE 'TACHE SOFTWARE'.
TYPTH::  VAL         TYPTS+I         < TYPE 'TACHE HARDWARE'.
TH0::    VAL         NTH0            < NIVEAU DE LA TACHE HARDWARE 0.
         IF          TH0-K,,XEIF%,
         IF          ATTENTION : SI TH0#0, ALORS ON RISQUE DE GROS
         IF          ENNUIS,... VOIR EN PARTICULIER DES TESTS QUI
         IF          SONT FAITS SUR (A) DANS 'SI CMS5 IREST' !!!
XEIF%:   VAL         ENDIF
NUMDEF:: VAL         NMTH            < NIVEAU DE LA TACHE DU DEFAUT SECTEUR
                                     < ON NOTERA QU'ELLE EST CONSIDEREE
                                     < COMME LA MOINS PRIORITAIRE, ALORS
                                     < QUE C'EST TOUT LE CONTRAIRE !!!
CICSAV:: VAL         XICSA0          < VALEUR INITIALE DE L'INDICATEUR
                                     < DE SAUVEGARDE DES REGISTRES DE LA
                                     < TACHE INTERROMPUE PAR UNE TACHE
                                     < HARDWARE.
DOLARC:: VAL         DOLA2           < PREMIERE ADRESSE INACCESSIBLE DE
                                     < LA MEMOIRE.
<
<
<        D E F I N I T I O N   D U   R E G I S T R E   ' S T '  :
<
<
<
<
<        D E F I N I T I O N   D U   R E G I S T R E   ' S '  :
<        ( R E G I S T R E   E T A T   D E   T A C H E )
<
<
<        FONCTION :
<                      LE REGISTE 'S' (APPELE 'SS' DANS 'PSTS',
<                    ET 'HS' DANS 'PSTH') EST UN SOUS-ENSEMBLE
<                    DU REGISTRE 'ST' D'ETAT DU PROCESSEUR; A
<                    LA DIFFERENCE DE 'ST', 'S' APPARTIENT A LA
<                    'PST' D'UNE TACHE ('PSTIJ' OU 'PSTH').
<                      'S' VA ETRE DEFINI BIT A BIT :
<
<
MS::     VAL         0               < BIT DE MODE D'EXECUTION DE LA
                                     < TACHE :
                                     < MS=K : MODE ESCLAVE,
                                     <   =1 : MODE MAITRE.
MODMST:: VAL         1               < 'MODE MAITRE' (CF. 'MS').
MODESC:: VAL         0               < 'MODE ESCLAVE' (CF. 'MS').
SVCS::   VAL         1               < SVCS EST MIS A 1 LORSQU'UN 'SVC'
                                     < EST EXECUTE EN MODE ESCLAVE, ET
                                     < EST REMIS A 0 LORSQU'UN 'RSV'
                                     < EST EXECUTE; SVCS S'IL EST A 1
                                     < EN MODE MAITRE PERMET L'ACTIVA-
                                     < TION DE 'DRPS' LORS DE L'EXECUTION
                                     < DES INSTRUCTIONS 'PSR', 'PLR',
                                     < 'BSR', 'RSR', 'SVC' ET 'RSV'.
V::      VAL         6               < V=1 : - S'IL Y A DEBORDEMENT LORS
                                     <       D'INSTRUCTIONS ARITHMETIQUES
                                     <       SUR DES ENTIERS ALGEBRIQUES
                                     <       (DE -32768 A +32767),
                                     <       - SI 2 QUANTITES SONT EGALES
                                     <       APRES UNE INSTRUCTION DE
                                     <       COMPARAISON,
                                     <       - LORS D'UN PASSAGE A '0000
                                     <       PAR 'IC' OU 'DC'.
C::      VAL         7               < C=1 : - S'IL Y A REPORT LORS D'INS-
                                     <       TRUCTIONS ARITHMETIQUES
                                     <       SUR DES ENTIERS POSITIFS
                                     <       (DE 0 A +65535),
                                     <       - SI LE PREMIER TERME D'UNE
                                     <       COMPARAISON EST ALGEBRIQUE-
                                     <       MENT INFERIEUR AU SECOND (LE
                                     <       BIT0 ETANT ALORS LE BIT
                                     <       DE SIGNE).
SMST::   VAL         COSBT?MS=FMASK(K=FCINST
                                     < REGISTRE 'S' EN MODE MAITRE...
ASMST:   EQU         ZERO+SMST       < POUR UNE REFERENCE EN AVANT...
<
<
<        C A S   D E   L A   T A C H E   A L A R M E  :
<
<
MALARM:: VAL         MOCD            < LE CHAMP 'MALARM' DE LA 'PSTH'
                                     < DE LA TACHE ALARME (TACHE HARWARE 0)
                                     < CONTIENT LE NUMERO DE L'ALARME
                                     < EN CAUSE :
ALMX::   VAL         K               < MEMOIRE INEXISTANTE.
ALPRO::  VAL         ALMX+I          < PROTECTION 'DRPS' OU 'CDA'.
ALPAR::  VAL         ALPRO+I         < ERREUR DE PARITE HORS DU
                                     < MODE 'DEBUG'.
ALIX::   VAL         ALPAR+I         < INSTRUCTION INEXISTANTE.
ALIP::   VAL         ALIX+I          < INSTRUCTION PRIVILEGIEE EN
                                     < MODE ESCLAVE.
ALSCH::  VAL         ALIP+I          < 'RQST', 'WAIT' OU 'QUIT' EXECUTEE
                                     < SOUS NIVEAU HARDWARE.
ALIPIX:: VAL         ALSCH+I         < RECEPTION D'UN 'IPI' DE REVEIL
                                     < INTER-PROCESSEUR.
ALSTEP:: VAL         ALIPIX+I        < 'STEP'.
ALARR::  VAL         ALSTEP+I        < POINT D'ARRET EN MODE 'DEBUG'.
ALACTD:: VAL         ALARR+I         < 'ACTD'.
<
< FAUSSES ALARMES (INVENTEES
< PAR QUI VOUS SAVEZ POUR
< SIMPLIFIER LE TRAVAIL DE
< LA ROUTINE 'DOWN') :
<
ALASTA:: VAL         ALACTD+I        < INSTRUCTION 'STAR'.
<
< FAUX CODE D'ALARME
< CORRESPONDANT A UNE
< MEMOIRE INEXISTANTE
< DU 'CBJ' TRANSFORMEE
< EN UNE VIOLATION MEMOIRE
< PAR LA TACHE D'INTER-
< RUPTION DU 'CBJ' :
<
ALACBJ:: VAL         ALASTA+I        < MEMOIRE INEXISTANTE SUR 'CBJ'.
<
<
<        D E F I N I T I O N   D U   R E G I S T R E   S T  :
<        ( R E G I S T R E   E T A T   P R O C E S S E U R )
<
<
<        NOTA IMPORTANT :
<                      LE REGISTRE 'ST' NE PARTICIPE PAS
<                    GLOBALEMENT AUX CHANGEMENTS DE CONTEXTES
<                    GLOBAUX OU PARTIELS; SEULS SES SOUS-
<                    ENSEMBLES 'SS' ET 'ST' Y PARTICIPENT !!!
<
<
<                      'ST' VA ETRE DEFINI BIT A BIT :
<
<
MS:      VAL         MS              < VOIR LE REGISTRE 'S'.
MODMST:  VAL         MODMST          < VOIR LE REGISTRE 'S'.
MODESC:  VAL         MODESC          < VOIR LE REGISTRE 'S'.
SVCS:    VAL         SVCS            < VOIR LE REGISTRE 'S'.
                                     < A T T E N T I O N  : DANS CERTAINS
                                     < CAS, 'SVCS' SERA APPELE 'SAUV'
                                     < DANS LE REGISTRE 'ST' : VOIR A
                                     < CE SUJET LA DEFINITION DE 'SCHED' !!!
MYSTR2:: VAL         2               < BIT DONT LA SIGNIFICATION M'ECHAPPE,
                                     < MAIS COMME IL PEUT SERVIR, ON PARAMETRE..
V:       VAL         V               < VOIR LE REGISTRE 'S'.
C:       VAL         C               < VOIR LE REGISTRE 'S'.
LCM::    VAL         3               < LCM=1 : LES INTERRUPTIONS
                                     <         DU CANAL 'LDC' SONT
                                     <         MASQUEES.
IPM::    VAL         4               < IPM=1 : LES INTERRUPTIONS
                                     <         INTERPROCESSEURS (PAR
                                     <         'IPI') SONT MASQUEES.
IOM::    VAL         5               < IOM=1 : TOUTES LES INTERRUPTIONS
                                     <         SONT MASQUEES Y COM-
                                     <         PRIS LE DEFAUT SECTEUR,
                                     <         MAIS A L'EXCEPTION
                                     <         DES 'IPI' !!!
DEBUG::  VAL         8               < DEBUG=1 : LES ERREURS DE
                                     <           PARITE MEMOIRE SONT
                                     <           INTERPRETEES COMME DES
                                     <           POINTS D'ARRET.
MAINT::  VAL         10              < MAINT=1 : LES ERREURS DE PARITE
                                     <           SONT IGNOREES...
SCHED::  VAL         11              < SCHED=1 : LE PROCESSEUR A ETE
                                     <           INTERROMPU DANS LE
                                     <           MICRO-SCHEDULER, ET
                                     <           ALORS 'SVCS' SIGNIFIE :
                                     < SVCS=1 : LA SAUVEGARDE DU CONTEXTE
                                     <          DE LA TACHE SOFTWARE
                                     <          ABANDONNEE N'A PAS ETE
                                     <          FAITE (ENCORE DANS LES
                                     <          REGISTRES ET DANS LE
                                     <          CONTEXTE PARTIEL DE LA
                                     <          TACHE HARD COURANTE,
                                     <     =0 : LA SAUVEGARDE A ETE
                                     <          FAITE;
                                     < NOTA : A CETTE OCCASION, ON
                                     < APPELLERA 'SVCS' : 'SAUV' ==>
SAUV::   VAL         SVCS            < VOIR CE QUI PRECEDE !!!
STOP::   VAL         12              < STOP=1 : LE PROCESSEUR EST A
                                     <          L'ETAT ARRET PROGRAMME.
WARNG::  VAL         13              < WARNG=1 : UN DEFAUT SECTEUR EST EN
                                     <           COURS DE TRAITEMENT.
POP::    VAL         14              < IL FAUT QUE DEBUG=1; ALORS ::
                                     < POP=1 : LES POINTS D'ARRET
                                     <         PROVOQUENT L'ARRET DU
                                     <         PROCESSEUR (MISE AU POINT
                                     <         PUPITRE),
                                     <    =0 : LES POINTS D'ARRET
                                     <         PROVOQUENT DES ALARMES
                                     <         (MISE AU POINT PROGRAMME).
XWOR%:   VAL         NBITMO-B-IOM
MIOM::   VAL         BIT>XWOR%       < MASQUE DU BIT 'IOM'.
XWOR%:   VAL         NBITMO-B-IPM
MIPM::   VAL         BIT>XWOR%       < MASQUE DU BIT 'IPM'.
XWOR%:   VAL         NBITMO-B-SVCS
MSVCS::  VAL         BIT>XWOR%       < MASQUE DU BIT 'SVCS'.
<
<
<        I N I T I A L I S A T I O N   P R O C E S S E U R  :
<
<
<                    A L'INITIALISATION D'UN PROCESSEUR, ON A
<
<                                    MS=1,
<                                    LCM=IPM=IOM=1,
<                                    STOP=1,
<                                    AUTRES INDICATEURS=K.
<
<
         PAGE
<
<
<        P H I L O S O P H I E   D E S   E S C L A V E S  :
<
<
<        DEFINITION :
<                      LE SYSTEME CONTIENT UN CERTAIN
<                    NOMBRE DE TACHES ESCLAVES UTILI-
<                    SATRICES ; CES TACHES TRAVAILLENT
<                    EN "TIME-SHARING", ET A CETTE FIN,
<                    SE PARTAGENT LE MEME NIVEAU D'EXECU-
<                    TION 'NSPACT'. LORS D'UNE DEMANDE
<                    DE SERVICE, ON LEUR ALLOUE UN NIVEAU
<                    PRIVE (DIT DE "SERVICE") PRIS DANS
<                    UN POOL DYNAMIQUE ; CETTE ALLOCATION
<                    DYNAMIQUE FAIT QU'AUCUN UTILISATEUR
<                    N'EST PRIVILEGIE PAR RAPPORT AUX
<                    AUTRES VIS A VIS DES PRIORITES
<                    RELATIVES DES TACHES.
<                      SEULES LES TACHES ESCLAVES (OU
<                    UTILISATEURS) SONT SUSCEPTIBLES
<                    D'ETRE SWAPPEES.
<                      LES TACHES DE SERVICE FORMANT
<                    LE POOL D'ALLOCATION DYNAMIQUE
<                    OCCUPENT LES 'NSP', DE 'NSPSER'
<                    A 'NSPSER+NESCLA-Z'.
<                      A L'ENTREE DANS LE SYSTEME, UN
<                    UTILISATEUR SE VOIT ATTRIBUER PAR
<                    LE "JOB-ENTRY" ('HDLJE') UN IDEN-
<                    TIFICATEUR (OU 'ID') QUI SERT A LA
<                    FOIS D'INDEX D'ACCES A LA TABLE 'TBU',
<                    ET DE NUMERO DE ZONE DE SWAPPING
<                    SUR LE PERIPHERIQUE DE SWAPPING
<                    COURANT.
<
<
<        NOTA :
<                      LES 'ID' COMMENCENT A 0...
<
<
NMESCL:: VAL         12              < NBRE MAX D'ESCLAVES DANS LE
                                     < SYSTEME ; IL S'AGIT DE LA BORNE
                                     < SUPERIEURE DE NESCLA.
NESCLA:: VAL         9               < NOMBRE D'ESCLAVES AUTORISES
                                     < DANS LE SYSTEME.
         IF          NMESCL-NESCLA,,XEIF%,XEIF%
         IF          E R R E U R  !!!
XEIF%:   VAL         ENDIF
X30::    VAL         2               < NBRE DE BLOCS DE SWAPPING
                                     < RESERVES AUX PROCESSEURS DE
                                     < BASE DU SYSTEME.
M::      VAL         1               < INCREMENT DU A LA PRESENCE DU SYSTEME.
X20::    VAL         NESCLA+M+X30    < NBRE TOTAL DE BLOCS DE SWAPPING
                                     < SUR LE DISQUE DE SWAPPING ;
                                     < LE DEPLACEMENT DE +1 EST DU A
                                     < LA PRESENCE DU SYSTEME LUI-MEME
                                     < EN TETE DE CHAQUE DISQUE DE SWAPPING
<
<
<        E N - T E T E   D E   L ' E S P A C E   U T I L I S A T E U R  :
<
<
XWOR%1:  VAL         W               < CONSTANTE MULTIPLICATIVE ARBITRAIRE...
SLOESC:: VAL         XWOR%1*FADR     < TAILLE DE L'EN-TETE DE L'ESPACE
                                     < MEMOIRE DES ESCLAVES : UTILISEE
                                     < LORS DES TRAPPES POUR SAUVE-
                                     < GARDER LES REGISTRES COURANTS.
<
<
<        F O R M A T   D E   L ' E N - T E T E  :
<
<
<        MOT0        AT              (SLO)-SLOESC+0,
<        MOT1        BT              (SLO)-SLOESC+1,
<        MOT2        XT              (SLO)-SLOESC+2,
<        MOT3        YT              (SLO)-SLOESC+3,
<        MOT4        CT              (SLO)-SLOESC+4,
<        MOT5        LT              (SLO)-SLOESC+5,
<        MOT6        WT              (SLO)-SLOESC+6,
<        MOT7        KT              (SLO)-SLOESC+7,
<        MOT8        PT              (SLO)-SLOESC+8,
<        MOT9        ST              (SLO)-SLOESC+9,
<        MOT10       @, OU P DE     (SLO)-SLOESC+10,
<                    RETOUR SI ST<MODE-MAITRE>.
<        MOT11       M =(ADRESSE)    (SLO)-SLOESC+11,
<        MOT12       O =TRANSLATION(@) SOUS LA FORME D'UN 'SLO' EN DEBUG
<                       ABSOLU,
<        MOT13       MOT0 DE L'ESPACE MEMOIRE AVANT 'IMEMY',
<        MOT14       MOT1,
<        MOT15       MOT2...
<
<        (<NOM>T DESIGNE UN REGISTRE COURANT AU MOMENT
<        D'UNE TRAPPE OU D'UN ALT-MODE).
<
<
RAT::    MOT         RA              < REGISTRE 'A' DE TRAPPE,
RBT::    MOT         RB              < REGISTRE 'B' DE TRAPPE,
RXT::    MOT         RX              < REGISTRE 'X' DE TRAPPE,
RYT::    MOT         RY              < REGISTRE 'Y' DE TRAPPE,
RCT::    MOT         RC              < REGISTRE 'C' DE TRAPPE,
RLT::    MOT         RL              < REGISTRE 'L' DE TRAPPE,
RWT::    MOT         RW              < REGISTRE 'W' DE TRAPPE,
RKT::    MOT         RK              < REGISTRE 'K' DE TRAPPE,
RPT::    MOT         RP              < REGISTRE 'P' DE TRAPPE,
RST::    MOT         RS              < REGISTRE 'S' DE TRAPPE,
BALT2::  VAL         MYSTR2          < CE BIT DU REGISTRE 'RST' EST UTILISE
                                     < POUR MEMORISER QU'UN DOUBLE ALT-MODE
                                     < A ETE FRAPPE ; AINSI, LA COMMANDE "G"
                                     < DU 'DEBUG' PERMET DE RELANCER CORREC-
                                     < TEMENT LE PROGRAMME MEME INTERROMPU
                                     < PAR UN DOUBLE ALT-MODE LORS D'UNE SORTIE.
                                     < A T T E N T I O N  : ON PREND 'MYSTR2'
                                     < CAR C'EST UN BIT NON UTILISE PAR LE
                                     < SOFTWARE, ET QU'IL N'Y A PAS AINSI DE
                                     < RISQUES D'INTERFERENCES...
XWOR%2:  VAL         MALARM)MMOT=K
XWOR%2:  VAL         NBITMO-B-XWOR%2 < DERNIER POSSIBLE POUR 'BALT2' DANS 'S'
                                     < SI L'ON SOUHAITE EVITER DES INTERFE-
                                     < RENCES AVEC 'TH0'...
         IF          BALT2-XWOR%2,XEIF%,XEIF%,
         IF          ATTENTION : 'BALT2' SE TROUVE DANS LE CHAMP 'MALARM'
         IF          POSITIONNE DANS 'ST' PAR 'TH0' !!!
XEIF%:   VAL         ENDIF
RAD::    MOT         RSLO            < REGISTRE 'P' DE RETOUR LORS D'UNE
                                     < TRAPPE APPARAISSANT A LA SUITE D'UN
                                     < DOUBLE ALT-MODE ALORS QU'ON EST
                                     < EN 'SVC', OU ADRESSE COURANTE SOUS
                                     < !DEBUG.
RM::     MOT         RSLE            < REGISTRE MEMOIRE : ((RAD))=(RM).
RSLOT::  MOT         RM+D            < REGISTRE CONTENANT UNE TRANSLATION A
                                     < APPLIQUER A 'RAD' SOUS DEBUG ABSOLU ;
                                     < CETTE TRANSLATION EST DONNEE SOUS LA
                                     < FORME D'UNE DADR-ADRESSE, AFIN DE POU-
                                     < VOIR ATTEINDRE TOUTE LA MEMOIRE...
RMOT0::  MOT         RSLOT+D         < MOT0 DE L'ESPACE MEMOIRE UTILISATEUR
                                     < AVANT 'IMEMY',
RMOT1::  MOT         RMOT0+D         < DE MEME LE MOT1,
RMOT2::  MOT         RMOT1+D         < ET ENFIN LE MOT 2...
RMOTN::  MOT         RMOT2+D         < PREMIER EMPLACEMENT LIBRE...
XLRMOT:: VAL         RMOTN-RMOT0     < NOMBRE DE MOTS UTILISES DANS L'EN-TETE
                                     < DE L'ESPACE MEMOIRE UTILISATEUR...
         IF          RMOTN-O-SLOESC,XEIF%,XEIF%,
         IF          ATTENTION : L'EN-TETE DE L'ESPACE MEMOIRE UTILISATEUR
         IF          'SLOESC' EST INSUFFISANTE !!!
XEIF%:   VAL         ENDIF
<
< NOMS DES REGISTRES "VIRTUELS" :
<
KRAD::   VAL         KAROND          < REGISTRE 'ADRESSE COURANTE',
KRMEM::  VAL         KM              < REGISTRE 'MEMOIRE',
KRT::    VAL         KT              < INDICATEUR DE 'TRAPPE',
KRSLOT:: VAL         KO              < REGISTRE DE TRANSLATION ABSOLUE,
KRMOT0:: VAL         KZERO           < MOT0 DE LA MEMOIRE,
KRMOT1:: VAL         KUN             < MOT1 DE LA MEMOIRE,
KRMOT2:: VAL         KDEUX           < MOT2 DE LA MEMOIRE.
<
<
<        T A B L E   D ' A L L O C A T I O N
<        D E S   B L O C S   E S C L A V E S  :
<
<
<
<
<        NOTA :
<                      LA TABLE TBU DONNANT L'ADRESSE DES
<                    DCT-ESCLAVES EST IMPLANTEE DERRIERE DCTSY
<                    AFIN D'ETRE ACCESSIBLE PAR LA FONCTION
<                    '1E15 DU RECOVERY !!!
<                      TBU EST UNE TABLE INDEXXE PAR
<                    L'IDESC, A PARTIR DE 0.
<
<
<        A L L O C A T I O N   D E S   H A N D L E R S
<                    D E   S E R V I C E  :
<
<
XWORK7:  VAL         NESCLA          < NOMBRE D'ESCLAVES...
         WORD        XWORK7          < POUR LES VALIDATIONS DE 'SOBT'.
TOHDS:   EQU         $-IJIJDX        < TABLE D'OCCUPATION DES
                                     < HANDLERS DE SERVICE.
X12::    VAL         NESCLA+NBITMO-E
         CALL        #SISP CMS5 NBIT1#
<
<
<        A L L O C A T I O N   D E S   ' I D '  :
<
<
         WORD        XWORK7          < POUR LES VALIDATIONS DE 'SOBT'.
TOESC:   EQU         $-IJIJDX
         CALL        #SISP CMS5 NBIT1#
<
<
<        NOTE IMPORTANTE :
<                      IL Y A AUTANT DE HANDLERS DE SERVICE
<                    QU'IL Y A D'ESCLAVES, CE QUI EXPLIQUE
<                    L'ABSENCE DE SEMAPHORE D'ALLOCATION.
<
<
<        A T T E N T I O N  :
<                      IL EST OBLIGATOIRE QU'IL Y AIT AUTANT
<                    DE HANDLERS DE SERVICE QUE D'ESCLAVES,
<                    VOIR EN PARTICULIER LE CAS OU TOUS LES
<                    UTILISATEURS SE METTENT EN ATTENTE DE
<                    LECTURE ('CCI' PAR EXEMPLE...) !!!
<
<
         PAGE
<
<
<        T A B L E   D E S   S T A T I O N S - S E R V I C E
<        A C C E S I B L E S   P A R   C H A N D  :
<
<
<        DEFINITION :
<                      LA TABLE 'DCTSY' QUI SUIT
<                    DONNE LA LISTE DES TACHES
<                    ACCESSIBLES VIA 'CHAND' ET
<                    CECI PAR ODRE DE PRIORITE
<                    DECROISSANTE ; ON Y TROUVE
<                    L'ADRESSE DE LA 'DCT' ASSO-
<                    CIEE.
<
<
<        PHILOSOPHIE DU CHOIX DES 'NSP' :
<                      LE 'NSP' EST A UNE CONSTANTE
<                    DE TRANSLATION PRES LA PRIORI-
<                    DE LA TACHE ASSOCIEE (LES PETITS
<                    NUMEROS CORRESPONDANT AUX FORTES
<                    PRIORITES). ON UTILISE LES CON-
<                    VENTIONS SUIVANTES :
<
<                    1 - LES SERVICES LENTS (PAR EXEM-
<                    PLE CEUX ASSOCIES A DES PERIPHE-
<                    IQUES LENTS : VISUS,...) SONT PLUS
<                    PRIORITAIRES QUE LES SERVICES RAPIDES
<                    ET SURTOUT FREQUENTS QUI RISQUERAIENT
<                    DANS LE CAS CONTRAIRE DE BLOQUER LE
<                    SYSTEME.
<
<                    2 - SI LA TACHE T(I) APPELLE LA
<                    TACHE T(J), ON TENTERA DE RENDRE
<                    T(J) PLUS PRIORITAIRE QUE T(J),
<                    ET CE AFIN DE FAVORISER LE PARAL-
<                    LELISME :
<
<                                    (T(I) --> T(J)) ==> (I > J).
<
<
<        ACCES A CETTE TABLE :
<                    1 - PAR LE SYSTEME : IL UTILISE 'BSR ACADCT'.
<                    2 - PAR LES UTILISATEURS : A L'AIDE DE LA
<                    FONCTION '1E15.
<
<
         TABLE
<
<
<        T A C H E S   I N A C C E S S I B L E S  :
<
<
E963:    EQU         $
         WORD        DCTCHK          < DCT DU TRACEUR DE CHANGEMENT
                                     < DE CONTEXTES.
         WORD        DCTBOT          < DCT DU NIVEAU INITIAL.
NSNSP0:: VAL         $-E963          < NIVEAU DE LA TACHE DE NSP=K.
<
<
<        T A C H E S   A C C E S S I B L E S  :
<
<
DCTSY:   EQU         $
         WORD        DCTVID
NSPVID:: VAL         $-D-DCTSY
         IF          NSPVID-K,,XEIF%,
         IF          ATTENTION : 'NSPVID' DOIT ETRE NUL !!!
XEIF%:   VAL         ENDIF
         WORD        DCTTSI
NSPTSI:: VAL         $-D-DCTSY
         WORD        DCTMUL
NSPMUL:: VAL         $-D-DCTSY
         WORD        DCTPR1
NSPPR1:: VAL         $-D-DCTSY       < NSP DE LA TACHE DE DIALOGUE ENTRE
                                     < LE PROCESSEUR MAITRE ET LE PRO-
                                     < CESSEUR ESCLAVE 'PR1'.
         WORD        DCTTYS
NSPTYS:: VAL         $-D-DCTSY
         WORD        DCTSUR
NSPSUR:: VAL         $-D-DCTSY
NSPVI0:: VAL         $-DCTSY         < 'NSP' DE LA PREMIERE VISU.
         WORD        DCTVI1
<*******************************************************************************
NSPVI1:: VAL         $-D-DCTSY
NSPVI1: @VAL         '0@@@@          < 'NSP' DE LA PREMIERE VISU.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
         WORD        DCTVI2
NSPVI2:: VAL         $-D-DCTSY
         WORD        DCTVI3
NSPVI3:: VAL         $-D-DCTSY
         WORD        DCTVI4
NSPVI4:: VAL         $-D-DCTSY
         WORD        DCTVI5
NSPVI5:: VAL         $-D-DCTSY
         WORD        DCTVI6
NSPVI6:: VAL         $-D-DCTSY
         WORD        DCTVI7
NSPVI7:: VAL         $-D-DCTSY
         WORD        DCTVI8
NSPVI8:: VAL         $-D-DCTSY
<
<        Z O N E   D ' I N S E R T I O N   D E S   V I S U S  :
<
<*******************************************************************************
NSPVIN:: VAL         $-D-DCTSY       < 'NSP' DE LA DERNIERE VISU.
NSPVIN: @VAL         '0@@@@          < 'NSP' DE LA DERNIERE VISU.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
<
<        A U T R E S   P E R I P H E R I Q U E S  :
<
         WORD        DCTCR2
NSPCR2:: VAL         $-D-DCTSY
         WORD        DCTCR1
NSPCR1:: VAL         $-D-DCTSY
         WORD        DCTLP1
NSPLP1:: VAL         $-D-DCTSY
<
<
<        A T T E N T I O N  :
<                      NSPNP1 DOIT ABSOLUMENT SE TROUVER DERRIERE
<                    TOUS LES NSP DU TYPE IN & OUT UTILISES
<                    LORS DU RUNCCI, EN EFFET SINON LORS DE
<                    L'APPEL D'UN PROCESSEUR (DANS RUNCCI), ON
<                    ECRASE LE CODEM(DEMSWP) SANS QUE LE
<                    RELEASE MEMOIRE DE CETTE ZONE AIT ETE
<                    FAIT ; D'OU LA PERTE D'UNE ZONE MEMOIRE !!!!!
<
<
NSPNP1:: VAL         $-D-DCTSY       < 1ER NSP NON PRIORITAIRE.
         IF          NSPNP1-NSPCR1,,,XEIF%
         IF          E R R E U R  !!!
XEIF%:   VAL         ENDIF
<
<        ' S G N '  :
<
         WORD        DCTTRI
NSPTRI:: VAL         $-D-DCTSY
<
<
<        A T T E N T I O N  :
<                    DCTDLN,DCTSTN,DCTLON,DCTLNS,DCTLNU,
<                    DCTNXP,DCTNXS FORMENT UN TOUT INSEPARABLE.
<                    (CF. L'ASSIGNATION 'SGN').
<
<
NSPSG0:: VAL         $-DCTSY         < PREMIER 'NSP' DU "SGN"...
         WORD        DCTDLN
NSPDLN:: VAL         $-D-DCTSY
         WORD        DCTSTN
NSPSTN:: VAL         $-D-DCTSY
X123X::  VAL         '15-NSPSTN      < POUR NOUVELLES VERSIONS
                                     < LE 08/05/78
         WORD        DCTLON
NSPLON:: VAL         $-D-DCTSY
         WORD        DCTLNS
NSPLNS:: VAL         $-D-DCTSY
         WORD        DCTLNU
NSPLNU:: VAL         $-D-DCTSY
         WORD        DCTNXP
NSPNXP:: VAL         $-D-DCTSY
         WORD        DCTNXS
<*******************************************************************************
NSPNXS:: VAL         $-D-DCTSY
NSPNXS: @VAL         '0@@@@          < 'NSP' DU NEXT-SERIE DU 'SGN'.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
NSPSGN:: VAL         $-D-DCTSY       < DERNIER 'NSP' DU "SGN"...
<
<        A L L O C A T I O N   M E M O I R E   C E N T R A L E  :
<
         WORD        DCTRLB
NSPRLB:: VAL         $-D-DCTSY
         WORD        DCTRL1
NSPRL1:: VAL         $-D-DCTSY
         WORD        DCTRL2
NSPRL2:: VAL         $-D-DCTSY
         WORD        DCTRL4
NSPRL4:: VAL         $-D-DCTSY
         WORD        DCTALB
NSPALB:: VAL         $-D-DCTSY
         WORD        DCTAL1
NSPAL1:: VAL         $-D-DCTSY
         WORD        DCTAL2
NSPAL2:: VAL         $-D-DCTSY
         WORD        DCTAL4
NSPAL4:: VAL         $-D-DCTSY
<
<        D I S Q U E S   R E E L S   E T   V I R T U E L S  :
<
         WORD        DCTDKB
NSPDKB:: VAL         $-D-DCTSY
         IF          NSPDKB-NSPNP1,,,XEIF%
         IF          JE LAISSE CETTE VALIDATION, MAIS EN FAIT ELLE
         IF          N'EST UTILE QUE POUR 'DKU' !!!
XEIF%:   VAL         ENDIF
         WORD        DCTDKA
NSPDKA:: VAL         $-D-DCTSY
DKCMS4:: VAL         $-D-DCTSY+Z
         DO          '23-DKCMS4      < POUR NE PAS AVOIR A MODIFIER DE
         WORD        ZERO            < NOMBREUX PROGRAMMES SYSTEME...
DKCMS4:  VAL         $-D-DCTSY
NSPDK::  VAL         $-D-DCTSY       < NSP DU PREMIER DISQUE SUR 'CMS4'
         WORD        DCTDKU
NSPDKU:: VAL         $-D-DCTSY
<*******************************************************************************
NSPDK1:: VAL         $-D-DCTSY
NSPDK1: @VAL         '0@@@@          < 'NSP' DU PREMIER DISQUE DE 'CMS5'.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
         IF          NSPDKU-NSPNP1,,,XEIF%
         IF          ATTENTION : 'DKU' EST UTILISE POUR LA TELEVISION
         IF          NUMERIQUE AVEC UNE FONCTION UNIQUE 'FONTV' POUR
         IF          LES ENTREES ET LES SORTIES ; AFIN DE NE PAS TROUBLER
         IF          'OMOV1' ET 'OMOV2', IL FAUT NSPDKU>NSPNP1 !!!
XEIF%:   VAL         ENDIF
         WORD        DCTDKM
NSPDKM:: VAL         $-D-DCTSY       < DISQUE A TETES MOBILES.
         WORD        DCTDKF
NSPDKF:: VAL         $-D-DCTSY       < DISQUE A TETES FIXES.
NSPDKS:: VAL         NSPDKF          < DISQUE DE SWAPPING.
DKCMS4:  VAL         $-D-DCTSY-DKCMS4  < NBRE DE DISQUES ATTENDUS PAR
                                       < LE MONITEUR CMS4.
<
<        A L L O C A T I O N   M E M O I R E   D I S Q U E  :
<
         WORD        DCTREL
NSPREL:: VAL         $-D-DCTSY
         WORD        DCTGET
NSPGET:: VAL         $-D-DCTSY
<
<        P E R I P H E R I Q U E S   D I V E R S  :
<
         WORD        DCTMEM
NSPMEM:: VAL         $-D-DCTSY
         WORD        DCTHOR
<*******************************************************************************
NSPHOR:: VAL         $-D-DCTSY
NSPHOR: @VAL         '0@@@@          < 'NSP' DE L'HORLOGE DE 'CMS5'.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
         WORD        DCTCU1
NSPCU1:: VAL         $-D-DCTSY
         WORD        DCTCU2
NSPCU2:: VAL         $-D-DCTSY
         WORD        DCTCU3
NSPCU3:: VAL         $-D-DCTSY
         WORD        DCTMT1
NSPMT1:: VAL         $-D-DCTSY
NSPPER:: VAL         $-D-DCTSY       < DERNIER HANDLER A TESTER EN CAS
                                     < DE DEFSEC. (CF. BIT0 DE SIT).
<
< VALIDATION DE TFONCE RELATIVEMENT A NSPPER :
<
         IF          TFONCE-XXLSEM*NBITMO-NSNSP0-Z-NSPPER,,XEIF%,XEIF%
         IF          E R R E U R  : LA FILE D'ATTENTE DE CERTAINS
         IF          SEMAPHORES 'SIT' (CEUX DES DERNIERS PERIPHERIQUES)
         IF          EST EN RECOUVREMENT AVEC LE MOT 'TFONCE' !!!
XEIF%:   VAL         ENDIF
<
<        ' S G F '  :
<
         WORD        NIL
NSPFIL:: VAL         $-D-DCTSY       < NSP DE LA 1ERE DCTF.
NDCTF::  VAL         15              < NBRE DE DCT FICHIERS.
                                     < NOTA : ON PASSE DE 16 A 15 AFIN DE
                                     < RAJOUTER 'NSPMT1', SANS DEPLACER LE
                                     < RESTE DE LA LISTE 'DCTSY'...
         DO          NDCTF-D
         WORD        NIL
<
<        T A C H E S   D E   S E R V I C E  :
<
         WORD        DCTS1
NSPSER:: VAL         $-D-DCTSY       < NSP DU 1ER HANDLER DE SERVICE DES
                                     < ESCLAVES.
         WORD        DCTS2
         WORD        DCTS3
         WORD        DCTS4
         WORD        DCTS5
         WORD        DCTS6
         WORD        DCTS7
         WORD        DCTS8
         WORD        DCTS9
<
<        G E S T I O N   D E S   U T I L I S A T E U R S  :
<
         WORD        DCTEJ
NSPEJ::  VAL         $-D-DCTSY       < NSP DE END-JOB.
         WORD        DCTJE
NSPJE::  VAL         $-D-DCTSY       < NSP DU JOB ENTRY.
         WORD        DCTRUN
NSPRUN:: VAL         $-D-DCTSY
         WORD        NIL
NSPACT:: VAL         $-D-DCTSY       < NSP D'EXECUTION DES ESCLAVES
         WORD        DCTSVC
NSPSVC:: VAL         $-D-DCTSY
         WORD        DCTRCF          < DCT DU RELEASEUR DES CLEFS D'UN
                                     < FICHIER A DELETER.
NSPRCF:: VAL         $-D-DCTSY       < NSP DU RELEASEUR DES CLEFS
                                     < D'UN FICHIER DELETE.
         WORD        DCTSCH
NSPSCH:: VAL         $-D-DCTSY       < NSP DU SCHEDULER DES ESCLAVES.
         IF          NSPRUN-NSPACT,XEIF%,,
         IF          ATTENTION : IL FAUT QUE LA PRIORITE DE
         IF          'RUN' SOIT SUPERIEURE A CELLE DE 'ACT' !!!
XEIF%:   VAL         ENDIF
         IF          NSPACT-NSPSVC,XEIF%,,
         IF          ATTENTION : IL FAUT QUE LA PRIORITE DE
         IF          'ACT' SOIT SUPERIEURE A CELLE DE 'SVC' !!!
XEIF%:   VAL         ENDIF
         IF          NSPSVC-NSPSCH,XEIF%,,
         IF          ATTENTION : IL FAUT QUE LA PRIORITE DE
         IF          'SVC' SOIT SUPERIEURE A CELLE DE 'SCH' !!!
XEIF%:   VAL         ENDIF
<
<
<        L O N G U E U R   D E S   F I L E S   D ' A T T E N T E
<        D E S   4   S E M A P H O R E S   D E S   D C T  :
<
<
X10::    VAL         $-D-DCTSY+NBITMO-E+NSNSP0
         NTRN
LSEMR::  VAL         X10/NBITMO      < LONGUEUR EN MOTS DES FILES
         TRN
                                     < D'ATTENTE DES SEMAPHORES
                                     < D'EXCLUSION. C'EST LA VALEUR
                                     < A DONNER A 'LSEM'.
         IF          LSEM-LSEMR,,XEIF%,
         IF          E R R E U R  !!!
         IF          LSEM#LSEMR !!!
XEIF%:   VAL         ENDIF
<
<
<        T A C H E S   S P E C I A L E S  :
<
<
<                      LES TACHES SITUEES APRES LE CALCUL
<                    DE 'LSEMR' ONT UN STATUT SPECIAL ; EN
<                    EFFET LES FILES D'ATTENTE DES SEMAPHORES
<                    DES DCT NE POURRONT PAS EN GENERAL
<                    LES CONTENIR (CECI EST FAIT AFIN DE
<                    MINIMISER LA LONGUEUR DE CELLES-CI...)
<                      EN CONSEQUENCES, CES TACHES (IDLE
<                    ET INI) DEVRONT :
<                    1- NE PAS SE METTRE EN ATTENTE SUR UN SIT,
<                    2- NE PAS SE METTRE EN ATTENTE SUR UN
<                       SCHVID (CE NE SONT PAS DES HANDLERS),
<                    3- NE PAS LOUER D'AUTRES DCT (PAS
<                       D'ATTENTE SUR UN SEMLOC),
<                    4- ENFIN N'UTILISER 'CHAND' QU'AVEC
<                       PRUDENCE AFIN DE NE PAS AVOIR DE
<                       PROBLEMES AVEC LES SEMAPHORES
<                       D'EXCLUSION DE PHASES CRITIQUES
<                       (SPHEX).
<                      A NOTER D'AILLEURS QUE CES TACHES
<                    N'ONT PAS A PROPREMENT PARLER DE
<                    DCT. DE PLUS INI QUI UTILISE CHAND
<                    SIMULE LES ATTENTES DE FIN DE SERVICE
<                    EN TESTANT LES BETA(WEIO), CE
<                    QU'IL PEUT FAIRE SANS RISQUE PUISQU'IL
<                    EST LA TACHE LA MOINS PRIORITAIRE !!!
<
<
         WORD        DCTIDL
NSPIDL:: VAL         $-D-DCTSY       < NSP DE LA TACHE IDLE.
         WORD        DCTINI
NSPINI:: VAL         $-D-DCTSY       < INITIALISATION DU SYSTEME.
NSPIDS:: VAL         NSPINI          < NSP DE LA TACHE DE "SUPER-IDLE"...
         IF          NSPIDS-NSPIDL,,,XEIF%
         IF          ATTENTION : IL EST IMPERATIF QUE LA TACHE DE
         IF          "SUPER-IDLE" SOIT MOINS PRIORITAIRE QUE LA
         IF          TACHE D'IDLE !!!
XEIF%:   VAL         ENDIF
<
<        A C T I V A T I O N   D E   ' S Y S I N I '  :
<
XWOR%:   VAL         $-ZERO          < SAUVEGARDE DU '$'.
XWOR%1:  VAL         NSPINI+NSNSP0   < 'NS' DU 'SYSINI'.
XWOR%2:  VAL         XWOR%1/NBITMO   < RANG DU MOT DE 'ASTF' LE CONTENANT.
XWOR%3:  VAL         XWOR%2*NBITMO-XWOR%1+NBITMO-B
         $EQU        ASTF+XWOR%2
         WORD        BIT>XWOR%3      < ACTIVATION DU 'SYSINI'.
         $EQU        ZERO+XWOR%
<
<
<        V A R I A B L E S   D E   B A S E   D E   C M S 5  :
<
<
         WORD        TBU
NSPTBU:: VAL         $-D-DCTSY       < 'NSP' D'ACCES A LA LISTE DES UTILISATEURS
                                     < PRESENTS DANS LE SYSTEME.
         WORD        UPDATE
<*******************************************************************************
NSPUPD:: VAL         $-D-DCTSY       < 'NSP' D'ACCES AU NUMERO DU RELEASE
                                     < COURANT DU SYSTEME...
NSPUPD: @VAL         '0@@@@          < 'NSP' D'ACCES AU NUMERO D'UPDATE...
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
         WORD        MCOLOR
<*******************************************************************************
NSPCOL:: VAL         $-D-DCTSY       < 'NSP' D'ACCES A LA MEMOIRE DES
                                     < COULEURS ACTIVES DU SYSTEME DE
                                     < TELEVISION NUMERIQUE...
NSPCOL: @VAL         '0@@@@          < 'NSP' D'ACCES AUX COULEURS BASSE DEF.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
         WORD        TEMPO1
NSPT1::  VAL         $-D-DCTSY       < NSP D'ACCES A LA TEMPORISATION INTER-
                                     < TEST DE SERVICE DU PROCESSEUR
                                     < ESCLAVE 'PR1'; LA DUREE DE CETTE TEMPO-
                                     < RISATION EST EXPRIMEE EN NEGATIF.
         WORD        LPRO
NSPPRO:: VAL         $-D-DCTSY       < NSP D'ACCES A LA LISTE DESCRIPTIVE
                                     < DES PROCESSEURS DU SYSTEME.
         WORD        THESC
NSPHES:: VAL         $-D-DCTSY       < NSP D'ACCES A LA TABLE D'INITIALISATION
                                     < DES "HORLOGES" DE SWAPPING ESCLAVES.
         WORD        TOIDLE
NSPTOI:: VAL         $-D-DCTSY       < NSP D'ACCES AU DETECTEUR DE TIME-OUT
                                     < DE LA TACHE 'IDLE'.
         WORD        ITERSE
NSPXSE:: VAL         $-D-DCTSY       < NSP D'ACCES A L'INSTRUCTION DE POSITION-
                                     < NEMENT DU NOMBRE D'ITERATIONS DE 'HDLSER'
                                     < PERMETTANT LE RALENTISSEMENT DU SYSTEME
                                     < DANS LE RAPPORT 'NITERS'...
<
<        C O M P A T I B I L I T E   ' C M S 4 '  :
<
XWOR%1:  VAL         $-DCTSY
XWOR%2:  VAL         '57             < 'NSP' PRESUME DE 'NSPESC'...
         DO          XWOR%2-XWOR%1
         WORD        ZERO            < POUR LA COMPATIBILITE PROGRAMMES...
<
<
<        L I S T E   D E S   D C T - E S C L A V E S  :
<
<
TBU:     EQU         $
         WORD        NIL
<*******************************************************************************
NSPESC:: VAL         $-D-DCTSY       < NSP D'ACCES A L'ESCLAVE ID=K.
NSPESC: @VAL         '0@@@@          < 'NSP' D'ACCES A LA LISTE UTILISATEURS.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
         IF          XWOR%2-NSPESC,,XEIF%,
         IF          ATTENTION : INCOMPATIBILITE CMS4 !!!
XEIF%:   VAL         ENDIF
         DO          NESCLA-D
         WORD        NIL             < ESCLAVES D'ID=1 A ID=NESCLA-1.
         WORD        ASTREE
NSPAST:: VAL         $-D-DCTSY       < NSP D'ACCES AU NOMBRE DE NOEUDS LIBRES
                                     < CONTENU DANS L'ARBRE DU SYSTEME.
<
<
<        V A R I A B L E S   D E   B A S E   D E   C M S 5  :
<                    ( S U I T E )
<
<
         WORD        NUSERA
<*******************************************************************************
NSPUSE:: VAL         $-D-DCTSY       < NSP D'ACCES AU NBRE D'USERS
                                     < ACTIFS, C'EST-A-DIRE ENTRE
                                     < !LOGIN ET !F/!BYE, ET N'AYANT
                                     < PAS FRAPPE !W.
NSPUSE: @VAL         '0@@@@          < 'NSP' D'ACCES AU NOMBRE D'UTILISATEURS.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
         WORD        ANSPS
NSPSWS:: VAL         $-D-DCTSY       < NSP D'ACCES AU 'DKS'.
         WORD        BVOLU
NSPVLU:: VAL         $-D-DCTSY       < NSP D'ACCES AU VOLUME COURANT MONTE
                                     < SUR 'DKU'.
         WORD        MATX
NSPCM::  VAL         $-D-DCTSY       < NSP D'ACCES AU 1ER MOT DE LA
                                     < MATRICE DES CONNEXIONS !CM.
         WORD        TEDF+IJIJDX
NSPEDF:: VAL         $-D-DCTSY       < NSP D'ACCES A LA TABLE DES ETATS
                                     < DES FICHIERS POTENTIELS ET AUTRES...
                                     < (ACCES AU MOT0...)
XWOR%1:  VAL         $-DCTSY
XWOR%2:  VAL         '66             < 'NSPNSL' PRESUME...
         DO          XWOR%2-XWOR%1
         WORD        ZERO            < POUR COMPATIBILITE CMS4.
         WORD        NSL
NSPNSL:: VAL         $-D-DCTSY       < NSP D'ACCES AU NBRE DE SECTEURS
                                     < LIBRES SUR LES DISQUES.
         IF          XWOR%2-NSPNSL,,XEIF%,
         IF          ATTENTION : INCOMPATIBILITE CMS4 !!!
XEIF%:   VAL         ENDIF
         WORD        TFREQ+NMESCL+Z
NSPSOC:: VAL         $-D-DCTSY       < NSP D'ACCES A LA TABLE D'
                                     < INITIALISATION DES PATTERNS DE
                                     < SWAPPING OUT CYCLIQUES.
         WORD        AMAIL
NSPTT::  VAL         $-D-DCTSY       < NSP D'ACCES AU NOEUD DE LA
                                     < GRAMMAIRE DU CCI A PARTIR DU
                                     < QUEL ON EMET LE MESSAGE
                                     < VARIABLE 'MAIL' AUX ESCLAVES A
                                     < CHAQUE INTERROGATION DU CCI ('?')
                                     < SON OCTET0 CONTIENT LA LONGUEUR
                                     < REELLE DU MESSAGE, ET LE
                                     < MOT1 L'ADRESSE OU METTRE LE
                                     < MESSAGE VARIABLE.
         NLS
         WORD        CTRLC
NSPASS:: VAL         $-D-DCTSY       < ACCES AU 1ER CARACTERE DU MOT
                                     < DE PASSE DU NUMERO DE COMPTE
                                     < DU SYSTEME (:SYS).
         LST
         WORD        LTIME
<*******************************************************************************
NSPDAT:: VAL         $-D-DCTSY       < NSP D'ACCES A LA DATE COURANTE,
                                     < MOT0=ANNEE,
                                     < MOT1=MOIS,
                                     < MOT2=JOUR,
                                     < MOT3=HEURE,
                                     < MOT4=MINUTE,
                                     < MOT5=SECONDE ;
                                     < NSPDAT DONNE ACCES AU MOT0 ; LES
                                     < AUTRES MOTS S'OBTIENNENT PAR
                                     < INCREMENETATION...
NSPDAT: @VAL         '0@@@@          < 'NSP' D'ACCES A LA DATE A/M/J/H/M/S.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
         WORD        LZSAVE
<*******************************************************************************
NSPSAV:: VAL         $-D-DCTSY       < NSP D'ACCES A LA LISTE DES
                                     < INFORMATIONS VITALES A SAUVEGAR-
                                     < DER/RESTAURER LORS DES RESTARTS
                                     < DU DISQUE, ET CONCERNANT L'
                                     < ALLOCATION DISQUE, ET L'ARBRE
                                     < GENERAL DU SYSTEME (SGN).
                                     < IL S'AGIT D'UNE LISTE DE DOUBLE-
                                     < MOTS DU TYPE (@INFORMATION,
                                     < LONGUEUR-MOT DE CETTE
                                     < INFORMATION) ; LA FIN DE LISTE
                                     < EST INDIQUEE PAR UN DOUBLET (K,0)
NSPSAV: @VAL         '0@@@@          < 'NSP' D'ACCES A LA LISTE DE COPY.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
         WORD        COM+DEPCS
NSPCOM:: VAL         $-D-DCTSY       < NSP D'ACCES A LA VALEUR DE LA
                                     < BASE C DE CMS4.
         WORD        AZPTCH
NSPAZP:: VAL         $-D-DCTSY       < NSP D'ACCES A LA 1ERE ADRESSE
                                     < LIBRE COURANTE DE LA ZONE DE
                                     < PATCH DU DEBUG SOUS RECOVERY.
         WORD        LZPTCH
NSPLZP:: VAL         $-D-DCTSY       < ADRESSE LIMITE SUPERIEURE DE
                                     < CETTE ZONE DE PATCH.
         WORD        TFREK
NSPALP:: VAL         $-D-DCTSY       < NSP D'ACCES A L'ALPHABET VIRTUEL UTILISE
                                     < DANS LE 'SGN' POUR ORDONNANCER LES
                                     < CARACTERES DE L'ARBRE.
NSPALP: @VAL         '0@@@@          < 'NSP' D'ACCES A L'ALPHABET VIRTUEL SGN.
         CALL        #SISP CMS5 GEN DEF#
         WORD        DCTIT
NSPIT::  VAL         $-D-DCTSY       < NSP D'ACCES A LA LISTE DES
                                     < CORRESPONDANCES NIVEAU
                                     < D'INTERRUPTION --> DCT.
         WORD        TOM+IJIJDX
NSPTOM:: VAL         $-D-DCTSY       < NSP D'ACCES AU MOT0
                                     < DE LA TABLE D'ALLOCATION
                                     < MEMOIRE DE CMS4.
         WORD        BUINT
NSP2K::  VAL         $-D-DCTSY       < NSP D'ACCES AUX LISTES 'BUINT'
                                     < ET 'K2INT' INDIQUANT LES BLOCS
                                     < DE 2K INTERDITS LORS DE L'ALLO-
                                     < CATION MEMOIRE.
         WORD        SAVEX
NSPTRA:: VAL         $-D-DCTSY       < ACCES A L'INDICATEUR DE TRACE.
         WORD        ETASYS
NSPETA:: VAL         $-D-DCTSY       < ACCES A L'ETAT DU SYSTEME.
         WORD        MEMV
NSPMV::  VAL         $-D-DCTSY       < ACCES AUX PARAMETRES DE CONTROLE
                                     < DE LA MEMOIRE VIRTUELLE DKB.
         WORD        TVCTRL
NSPTVC:: VAL         $-D-DCTSY       < NSP D'ACCES AU MOT DE CONTROLE TV.
         WORD        TVMEM1
NSPTV1:: VAL         $-D-DCTSY       < NSP D'ACCES A L'ADRESSE 1ERE IMAGE.
         WORD        TVMEM2
NSPTV2:: VAL         $-D-DCTSY       < NSP D'ACCES A L'ADRESSE 2EME IMAGE.
         WORD        TVMEM3
NSPTV3:: VAL         $-D-DCTSY       < NSP D'ACCES A L'ADRESSE 3EME IMAGE.
         WORD        TVMEME
NSPTVE:: VAL         $-D-DCTSY       < NSP D'ACCES A LA TRAME SIMULEE...
         WORD        TVNITE
NSPTVI:: VAL         $-D-DCTSY       < NSP D'ACCES AU NOMBRE D'ITERATIONS
                                     < NECESSAIRES A LA SIMULATION...
         WORD        ALBKTV
NSPTVK:: VAL         $-D-DCTSY       < NSP D'ACCES A LA LONGUEUR DES BLOCS
                                     < DE MOTS INSEPARABLES UTILISES LORS
                                     < DES TRANSFERTS ENTRELACES VERS LA
                                     < MEMOIRE 'MEMTV'.
<
<
<        Z O N E   D E   P A T C H   D E   D C T S Y  :
<
<
<        NOTA :
<                      SI CETTE ZONE DE PATCH EST PLEINE, ON
<                    SE SOUVIENDRA QUE CERTAINES ENTREES DE
<                    'DCTSY' SONT PEUT-ETRE VIDES, ET QU'IL
<                    EST PEUT-ETRE ALORS POSSIBLES DE LES
<                    COMBLER...
<
<
NSPPAT:: VAL         $-DCTSY         < NSP D'ACCES A LA ZONE DE PATCH.
         DO          NMTS-NSPPAT-NSNSP0
         WORD        NIL             < ZONE DE PATCH...
NSPLST:: VAL         $-D-DCTSY       < DERNIER 'NSP' ; ON LE CALCULE AINSI,
                                     < AFIN QUE LA TABLE 'PSTS00' NE DEPASSE
                                     < PAS 'NMTS' MOTS...
<
<
<        R E L A I   D E S   T A C H E S   S O F T  :
<
<
PSTS00:  EQU         DCTSY-NSNSP0
<
<
<        N S P   D U M M Y  :
<
<
NSPDUM:: VAL         NMTS            < CE NSP 'DUMMY' EST DESTINE
                                     < AUX !ASSIGN <DUMMY>.
XWOR%1:  VAL         MSKNSP=K
XWOR%1:  VAL         -XWOR%1         < POUR UN DECALAGE A DROITE...
         IF          MSKNSP>XWOR%1-NSPDUM+N,,XEIF%,
         IF          ATTENTION : IL Y A INCOMPATIBILITE ENTRE
         IF          CE MASQUE ET LA VALEUR DE 'NSPDUM' !!!
XEIF%:   VAL         ENDIF
<
<
<        M I S E   E N   P L A C E   D ' U N E   F A U S S E
<        ' D C T S Y '   E N   T E T E   D E   L A
<        M E M O I R E   H A U T E   A F I N   D ' A S S U R E R
<        L A   C O M P A T I B I L I T E   A V E C   L A
<                    F O N C T I O N   ' 1 E 1 5  :
<
<
         CALL        #SISP CMS5 DOL2#
         IF          DOLAR2-Q8000,,XEIF%,
         IF          ATTENTION : ON DOIT ETRE EN Q8000 !!!
XEIF%:   VAL         ENDIF
         DZS         NSPLST+D        < ON BLOQUE UN ESPACE IDENTIQUE
                                     < A CELUI DE 'DCTSY'...
         CALL        #SISP CMS5 DOL1#
         PAGE
<
<
<        F O R M A T   D C T - E S C L A V E  :
<
<
<        DEFINITION :
<                      LA 'DCT-ESCLAVE' A UN
<                    FORMAT TRES DIFFERENT DES
<                    AUTRES 'DCT' ; CHAQUE UTILI-
<                    SATEUR EN POSSEDE UNE ; ON Y
<                    TROUVE D'ABORD SES REGISTRES
<                    DE TRAVAIL, DES INDICATEURS,
<                    UNE SERIE DE DEMANDES PRE-GENE-
<                    REES ET PERMETTANT PAR EXEMPLE
<                    L'ALOCATION MEMOIRE, LE SWAP-
<                    PING,... ET ENFIN UN BUFFER
<                    (DIT "RESIDENT") ASSURANT
<                    LE TRANSIT DES ENTREES-SORTIES
<                    LENTES.
<
<
<        NOTA :
<                      LES DCT-ESCLAVE SONT IMPLANTEES DANS UN
<                    BUFFER DE YY7 MOTS ALLOUE A CHAQUE ESCLAVE
<                    LORS DE SON ENTREE DANS LE SYSTEME.
<
<
         DSEC        DCTE
DCTESC:  EQU         $
DCTESK:: VAL         DCTESC-ZERO
<
<
<        P S T   D E   L ' E S C L A V E  :
<
<
PSTESC:  DZS         XLPSTS          < PST DE L'ESCLAVE.
         IF          PSTESC-DCTESC-XXPSTD,,XEIF%,
         IF          BIZARRE !!!
XEIF%:   VAL         ENDIF
<
<
<        I N D I C A T E U R S   D I V E R S  :
<
<
<*******************************************************************************
IDESC:   WORD        NILK            < IDENTIFICATEUR DE L'ESCLAVE.
IDESC:  @MOT         '0@@@@          < IDENTIFICATEUR DE L'UTILISATEUR.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
<
IDESCS:: VAL         L
                                     < SI BIT0=1 : LE SWAPPING NE DOIT
                                     < PAS ETRE BLOQUE LORS D'UN
                                     < 'ALT-MODE' (PERMET DONC LES
                                     < PATCHES MEMOIRE).
IDESCW:: VAL         IDESCS+BIT
                                     < SI BIT1=1 : L'ESCLAVE EST
                                     < SUSPENDU DANS CCI PAR SON
                                     < HANDLER DE SERVICE.
IDESCA:: VAL         IDESCW+BIT
                                     < SI BIT2=1 : LA FONCTION DU
                                     < 'ALT-MODE' EST INHIBE.
IDESCI:: VAL         IDESCA+BIT
                                     < SI BIT3=1 : LE CCI N'EST PAS
                                     < INTERACTIF AU COURS DE CETTE
                                     < INTERROGATION (LE MESSAGE SE
                                     < TROUVE DEJA DANS BUFESC).
MKTRAK:: VAL         '0F00
                                     < BIT4-7=0000 : POUR L'EDITION
                                     <               DE LA TRACE.
MKIDES:: VAL         '007F           < MASQUE DE DEFINITION DE L'IDENTIFICATEUR.
FSERV:   WORD        NIL             < ADRESSE D'UNE ROUTINE A APPELER
                                     < EVENTUELLEMENT EN FIN DE SERVICE,
                                     < ENTRE LE TEST DE REACTIVATION
                                     < ET L'APPEL AU SCHEDULER, C'EST-
                                     < A-DIRE LORSQU'ON EST SUR DE
                                     < LA PRESENCE DE L'ESPACE MEMOIRE
                                     < DE L'ESCLAVE.
PRESC:   WORD        NIL             < P DE RELANCE D'UN ESCLAVE LORS
                                     < D'UNE COMMANDE '!<R/C>' ;
                                     < PRESC<--0 : LORS DU 'JOB-ENTRY',
                                     < PRESC<--0 : LORS DE LA COM-
                                     <             MANDE '!<EOT>',
                                     < PRESC<--ADRESSE-RUN(PROCESSEUR) A
                                     <          CHAQUE RUN DE PROCESSEUR
                                     <          DE BASE DE CMS4,
                                     < PRESC<--(A) LORS DE L'EXECUTION
                                     <             D'UNE INSTRUCTION
                                     <             '1EB5.
<
<
<        D E M A N D E   D ' A C C E S   A U X
<        T A C H E S   D E   S E R V I C E S  :
<
<
DEMSER:  DZS         LDEM0           < BLOC DE DEMANDE AUX HANDLERS
                                     < DE SERVICE, ON TROUVE DANS :
                                     < AMDEM=ADRESSE AUTOMATE DE SERVICE.
<
<
<        P R O T E C T I O N   P A R T I E L L E   D E   D K U
<        P O U R   C H A Q U E   U T I L I S A T E U R  :
<
<
XWOR%1:  VAL         ARGDEM-NSPTYP+CODEM
LUDKU:   EQU         DEMSER+XWOR%1   < LISTE DES GROUPES DE CYLINDRE APPARTENANT
                                     < A L'UTILISATEUR ; CHAQUE GROUPE CONTIENT
                                     < 'NCYLP' CYLINDRES ET EST ASSOCIE A UN
                                     < BIT DE LA LISTE DE 'LUDKU' ; UN GROUPE
                                     < DE CYLINDRES APPARTIENT A L'UTILISATEUR
                                     < SI SON BIT ASSOCIE DANS 'LUDKU' EST A 1.
<
<
<        D E M A N D E   D E   S W A P P I N G  :
<
<
<*******************************************************************************
DEMSWP:  EQU         $               < DEMANDE SWAPPING IN/OUT.
DEMSWP: @MOT         '0@@@@          < DEMANDE DE SWAPPING DE L'ESCLAVE.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
         BYTE        NSPDKS;XDSYM    < AVEC : BIT8=1 SI SWAPPING OUT,
                                     <            =0 SI SWAPPING IN.
                                     < (BIT DE PRIORITE DE DEMSWP)
                                     < SI BIT0=1 : LE SWAPPING EST
                                     < BLOQUE POUR CET ESCLAVE.
         WORD        NILK            < OPDEM=2 SI SWAPPING OUT,
                                     <      =0 SI SWAPPING IN.
         WORD        NIL             < ADRESSE-OCTET D'IMPLANTATION DE
                                     < L'ESCLAVE EN MEMOIRE.
         WORD        NILK            < TAILLE EN OCTETS DE L'ESPACE
                                     < MEMOIRE DE L'ESCLAVE.
         WORD        NILS            < ADRESSE-SECTEUR DE LA ZONE
                                     < DE SWAPPING DE L'ESCLAVE SUR LE
                                     < DISQUE DE SWAPPING.
         DZS         LDEM0+DEMSWP-$
<
<
<        D E M A N D E   D ' A L L O C A T I O N   M E M O I R E  :
<
<
DEMMEM:  EQU         $               < DEMANDE D'ALLOCATION/RELEASE
                                     < D'ESPACE MEMOIRE.
         BYTE        NILK;NILK       < BYTE0=NSP<AL<1,2,4>,REL<1,2,4>>
         WORD        NILK
         WORD        DEMSWP+T+AMDEM  < L'ADRESSE OCTET DE L'ESPACE
                                     < ALLOUE EST A PLACER DIRECTEMENT
                                     < DANS LA DEMANDE DE SWAPPING.
XXALME:: VAL         W               < NOMBRE DE BLOCS NECESSAIRES !??!?!?
         WORD        XXALME          < DEMANDE D'1 SEUL BLOC DE 1K,
                                     < 2K OU 4K.
         DZS         LDEM0+DEMMEM-$
<
<
<        D E M A N D E   D E   S C H E D U L I N G  :
<
<
DEMSCH:  BYTE        NSPSCH;XDSYM    < BLOC DE DEMANDE DE REACTIVATION
                                     < AU SCHEDULER.
         DZS         LDEM0+DEMSCH-$
<
<
<        I N D I C A T E U R S   ( S U I T E )  :
<
<
XWOR%1:  VAL         ARGDEM-NSPTYP+OPDEM
IDDESC:  EQU         DEMSCH+XWOR%1   < DEFINITION D'UN MOT DEVANT CONTENIR
                                     < DIVERS INDICATEURS, ET IMPLEMENTE
                                     < DANS L'OPDEM DE 'DEMSCH'.
IDESCJ:: VAL         WAITB           < BIT PERMETTANT DE COMMUTER LES DEMANDES
                                     < "!CDAI" SUR "!CDAJ" ; CECI A ETE INTRO-
                                     < DUIT AFIN DE PERMETTRE A DES NOMBREUX
                                     < PROGRAMMES MANIPULANT EXPLICITEMENT LA
                                     < 'CDAI' DE TRAVAILLER EN AVEUGLE (ET SANS
                                     < QU'ILS LE SACHENT) DANS LA 'CDAJ+...' :
                                     < =0 : "!CDAI" ==> ACCES A LA 'CDAI',
                                     < =1 : "!CDAI" ==> ACCES A LA 'CDAJ+...'.
XWOR%2:  VAL         XMDSLO=K
XWOR%3:  VAL         NBITMO-XWOR%2   < ON INSTALLE LES INDICATEURS 'IDESC'
                                     < DERRIERE LE CHAMP 'XMDSLO', CAR EN
                                     < EFFET CELUI-CI EST CLEARE ET VALIDE PAR
                                     < 'CHAND' ET 'HANDLR'...
IDESC1:: VAL         XWOR%3          < INDICATEUR DE DISCRIMINATION DU
                                     < DEBUG TRANSLATABLE (K) ET DU
                                     < DEBUG ABSOLU (1).
IDESC2:: VAL         IDESC1+BIT      < INDICATEUR MEMORISANT QUE L'ON
                                     < EST SOUS ":SYS", ET N'ETANT UTILISE
                                     < QUE PAR LA COMMANDE SPECIALE !L DE
                                     < CHANGEMENT ON-LINE DES NUMEROS DE
                                     < COMPTE :
                                     < 0 : ON NE S'EST PAS LOGUE SOUS ":SYS",
                                     < 1 : ON S'EST LOGUE SOUS ":SYS", SANS Y
                                     <     ETRE PEUT-ETRE A L'HEURE ACTUELLE...
IDESC3:: VAL         IDESC2+BIT      < BIT UTILISE LORSQUE LES UTILISATEURS
                                     < INTERROMPUS PAR L'HORLOGE (ET DONC
                                     < EN COURS DE "PROCESS") SONT ENVOYES EN
                                     < MEMOIRE HAUTE,
                                     < 1 : ALORS QU'IL EST EN HAUT, L'UTILISA-
                                     <     EST DE NOUVEAU INTERROMPU PAR L'HOR-
                                     <     LOGE, IL VA RESTER EN HAUT...
                                     < 0 : ALORS QU'IL EST EN HAUT L'UTILISATEUR
                                     <     FAIT UN 'SVC', UN 'QUIT', UNE TRAPPE.
IDESC4:: VAL         IDESC3+BIT      < CE BIT N'A D'INTERET QUE LORSQUE LE
                                     < SYSTEME EST DANS LE MODE RALENTI,
                                     < C'EST-A-DIRE 'NITERS' SUPERIEUR A 1.
                                     < IL EST A MIS A 0 A L'ENTREE DE 'HDLSVC',
                                     < PUIS MIS A 1 LORS DU PREMIER 'STXES'
                                     < QUI SUIT...
IDESC5:: VAL         IDESC4+BIT      < BIT PERMETTANT DE SAVOIR SI LA COMMANDE
                                     < "!CDAG" A ETE UTILISEE ; IL VAUT :
                                     < 0 : POUR "!CDA", "!CDAP" ET "!CDAI",
                                     <     AINSI QU'AU LOGIN...
                                     < 1 : APRES "!CDAG" ; IL EST UTILISE CON-
                                     <     JOINTEMENT AVEC LE MOT 'ACDAG' DE LA
                                     <     'DCTSCH' QUI PERMET DE SAVOIR SI UN
                                     <     UTILISATEUR A FRAPPE "!CDAG"...
IDESC6:: VAL         IDESC5+BIT      < BIT PERMETTANT D'INTRODUIRE 2 CLASSES
                                     < DE PRIORITE ENTRE UTILISATEURS :
                                     < 0 : PRIORITE NORMALE (ETAT INITIAL),
                                     < 1 : PRIORITE INFERIEURE (DANS CE CAS,
                                     <     L'HORLOGE DE SWAPPING EST INITIALI-
                                     <     SEE SYSTEMATIQUEMENT A 1, ET CET
                                     <     UTILISATEUR PEUT ETRE INTERROMPU
                                     <     S'IL EST ACTIF A LA FIN DU SERVICE
                                     <     D'UN AUTRE UTILISATEUR).
                                     < VOIR A CE SUJET "!L0" ET "!L1"...)
IDESC7:: VAL         IDESC6+BIT      < BIT PERMETTANT DE DISCRIMINER LES 2
                                     < ACTIONS POSIBLES QUE 'DOWN' PEUT EXECU-
                                     < TER POUR LE COMPTE DE 'HDLSVC', PUIS CE
                                     < QUE 'RUNO' DOIT FAIRE :
                                     < 0 : 'DOWN' DOIT DESCENDRE L'ESCLAVE EN
                                     <     MEMOIRE BASSE, ET 'RUNO' RENDRE LA
                                     <     MAIN...
                                     < 1 : 'DOWN' DOIT LAISSER L'ESCLAVE EN
                                     <     MEMOIRE HAUTE (SANS ITERATION DU
                                     <     'SVC'/'QUIT'), ET 'RUNO' FAIRE UN
                                     <     'SERESC' POUR EXECUTER LE SERVICE EN
                                     <     MEMOIRE HAUTE, ET ENFIN LE RE-SCHE-
                                     <     DULER EN HAUT...
IDESC8:: VAL         IDESC7+BIT      < INDICATEUR PRECISANT SI L'UTILISATEUR
                                     < A FAIT UNE DEMANDE D'INITIALISATION OU
                                     < DE MONTAGE DE VOLUME :
                                     < 0 : PAS DE MONTAGE DE VOLUME,
                                     < 1 : CET UTILISATEUR A UNE VOLUME MONTE
                                     <     SUR LE DISQUE 'DKU' QU'IL S'EST DONC
                                     <     ASSIGNE.
IDESC9:: VAL         IDESC8+BIT      < INDICATEUR PRECISANT SI L'ECHO EST
                                     < DEMANDE SUR UN TERMINAL TEMPS PARTAGE :
                                     < 0 : NON (ETAT INITIAL),
                                     < 1 : OUI (VOIR LES COMMANDES "!ECHO").
<*******************************************************************************
IDESCX:: VAL         IDESC9+BIT      < INDICATEUR PERMETTANT DE SAVOIR SI UNE
                                     < TRAPPE EST EN COURS DE TRAITEMENT :
                                     < 0 : NON (ETAT INITIAL ET NORMAL),
                                     < 1 : OUI ; IL REPASSE A 1 APRES CHAQUE
                                     <     INTERROGATION 'CCI' (JUSTE AVANT
                                     <     LA DEMANDE DE LECTURE SUR 'NSPIN'.
         IF          '0@@@@-NBITMO,XEIF%,,
<*******************************************************************************
         IF          ATTENTION : TROP D'INDICATEURS ONT ETE
         IF          DEFINIS DANS 'IDDESC' !!!
XEIF%:   VAL         ENDIF
XWOR%1:  VAL         ARGDEM-NSPTYP+CODEM
HORESC:  EQU         DEMSCH+XWOR%1   < "HORLOGE" DE SWAPPING ESCLAVE :
                                     < CONTIENT UNE VALEUR NUMERIQUE INI-
                                     < TIALISEE A CHAQUE 'SWAPPING IN' EFFEC-
                                     < TIF ; AVANT CHAQUE 'SWAPPING OUT', ELLE
                                     < EST DECREMENTEE : TANT QU'ELLE RESTE
                                     < STRICTEMENT POSITIVE, ON NE TESTE PAS
                                     < LA NECESSITE DE FAIRE DU SWAPPING...
<
<
<        G E S T I O N   D E   L A   C D A  :
<
<
XWOR%1:  VAL         ARGDEM-NSPTYP+AMDEM
CDESCO:  EQU         DEMSCH+XWOR%1   < ADRESSE DE DEBUT DE LA 'CDA' : IL PEUT
                                     < S'AGIR SOIT DE LA 'CDA-COMMUNE', SOIT
                                     < DE LA 'CDA-PRIVEE', SOIT ENFIN DE LA
                                     < 'CDA-TELEVISION'...
XWOR%1:  VAL         ARGDEM-NSPTYP+ASDEM
CDESCE:  EQU         DEMSCH+XWOR%1   < ADRESSE DE FIN DE LA 'CDA'...
<
<
<        D E M A N D E   D E   S E R V I C E   U T I L I S A T E U R  :
<
<
DEMESC:  DZS         LDEM0B          < BLOC RECEVANT LES DEMANDES
                                     < DE L'ESCLAVE AU SYSTEME.
                                     < APRES TRADUCTION DANS LA
                                     < FORME COMPATIBLE AVEC CHAND.
BOXESC:  EQU         DEMESC+XBOX     < LA DEMANDE DEMESC CONTIENT
                                     < LE MOT FACULTATIF 'BOX' ; CELUI-
                                     < CI EST POSITIONNE PAR 'STBOX'
                                     < DANS HDLVIS, HDLLON/LNU/LNS/STN/
                                     < DLN, ET PEUT ETRE RECUPEREE
                                     < PAR LA FONCTION '1E35 DU
                                     < RECOVERY...
<
<
<        T R A N S F E R T   D E   V A L E U R S  :
<
<
XWOR%1:  VAL         ARGDEM-NSPTYP+ASDEM
XWOR%2:  VAL         DEMSER-DCTESC+XWOR%1
VALESC:: MOT         XWOR%2          < 'VALESC' EST UTILISE PAR LE 'CCI' POUR
                                     < TRANSMETTRE UNE VALEUR D'UN MODULE A
                                     < UN AUTRE, PAR EXEMPLE PAR DESSUS UNE
                                     < SUSPENSION DU 'CCI'...
<
<
<        S Y S T E M E   D ' A S S I G N A T I O N  :
<
<
LTASGN:: VAL         6               < LONGUEUR DE TASSGN.
<*******************************************************************************
TASSGN:  WORD        YASSGN,X        < RELAI INDIRECT INDEXE VERS L A
                                     < TABLE D'OCTETS DES ASSIGNATIONS
                                     < DE L'ESCLAVE : NVP-->NSP.
TASSGN: @MOT         '0@@@@          < ACCES AU RELAI DE LA LISTE DES ASSIGNS.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
<*******************************************************************************
YASSGN:  EQU         $
YASSGN: @MOT         '0@@@@          < LISTE DES ASSIGNATIONS DANS 'DCTESC'.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
         DZS         LTASGN          < CETTE TABLE PEUT CONTENIR
                                     < '2*LTASGN' NSP. A NOTER QUE LE
                                     < 1ER OCTET EST TOUJOURS NUL
                                     < (CF. NVP=K DANS RUNSVC).
                                     < CHAQUE ENTREE ASSIGNEE CONTIENT
                                     < UN NSP, SAUF DANS LE CAS DES
                                     < !ASSIGN <NVP>=I/O, POUR LES
                                     < QUELLES, ON TROUVE PHIN/
                                     < PHOUT RESPECTIVEMENT.
XNVPF::  VAL         '80             < INDICATEUR SUPPERPOSE AUX 'NSP'
                                     < LORSQU'IL S'AGIT DE FICHIER.
         IF          XNVPF)MOCD-NSPDUM+N,,XEIF%,
         IF          ATTENTION : ON RISQUE D'AVOIR DES SURPRISES !!!
XEIF%:   VAL         ENDIF
PHSER::  VAL         K               < ENTREE DE SERVICE DANS TASSGN.
PHIN::   VAL         PHSER+I         < NSP PERIPH IN DE L'ESCLAVE.
PHOUT::  VAL         PHIN+I          < NSP PERIPH OUT DE L'ESCLAVE.
<*******************************************************************************
XWOR%F:  VAL         NOCMO*LTASGN-Z
NVP:    @VAL         '0@@@@          < DERNIER 'NVP' ASSIGNABLE.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         NOCMO*LTASGN-Z
NVPMAX: @VAL         '0@@@@          < DERNIER 'NVP' ASSIGNABLE.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
<
<
<        I N F O R M A T I O N S   D I V E R S E S  :
<
<
XXCOMP:: VAL         D+D             < LONGUEUR DE LA COMPTABILITE.
COMPTA:  DZS         2               < COMPTABILITE DE L'ESCLAVE :
                                     < - COMPTA0=NBRE DE SVC EXECUTES
                                     <           ENTRE LOGIN ET LOGOUT,
                                     < - COMPTA1=NBRE DE DEMANDES
                                     <           DE SCHEDULER ENTRE
                                     <           LOGIN ET LOGOUT.
COMPT0:  EQU         COMPTA+O
COMPT1:  EQU         COMPTA+XXCOMP-Z
SETRUN:  WORD        K               < LES BITS 5,6,7 SONT UTILISES
                                     < EN PARALLELE DE CEUX DE SYNCUS,
                                     < POUR MEMORISER LES 'TEST & SET'
                                     < AU NIVEAU ESCLAVE.
RECOTO:  WORD        NILK            < INDEX COURANT DE LA GRAMMAIRE
                                     < DU CCI ; SI RECOTO=Q8000, C'EST
                                     < QU'UN LOG-OUT EST DEMANDE.
SRCOTO:  WORD        K               < SAUVEGARDE TEMPORAIRE DE
                                     < L'INDEX COURANT DE LA GRAMMAIRE
                                     < DU CCI LORS DE L'APPEL DE
                                     < SOUS-GRAMMAIRE.
                                     < SI SRCOTO='VALBAC', IL N'Y A PAS
                                     < D'APPEL DE SOUS-GRAMMAIRE
                                     < EN COURS.
YSER:    WORD        NILK            < MOT PERMETTANT DE TRANSMETTRE
                                     < LE REGISTRE Y(HDL-SERVICE) ENTRE
                                     < 2 ROUTINES DU CCI, MEME S'IL
                                     < Y A CHANGEMENT DE NIVEAU DE
                                     < SERVICE EN CAS DE SUSPENSION
                                     < DU CCI (CF. LORS DU DEBUG).
XXACN::  VAL         D+D             < NOMBRE DE MOTS OCCUPES PAR LES <ACN>.
U::      VAL         XXACN-Z         < POUR ATTEINDRE LE DEUXIEME MOT <ACN>.
         IF          XXACN-2,,XEIF%,
         IF          ATTENTION : 'XXACN' DOIT OBLIGATOIREMENT VALOIR 2 !!!
XEIF%:   VAL         ENDIF
ACNESC:  DZS         XXACN           < NUMERO DE COMPTE DE L'ESCLAVE.
ARGUM:   WORD        NILK            < MOT DE CONTENU VARIABLE; ASSURE
                                     < ENTRE AUTRE :
                                     < - LA TRANSMISSION DE LA LISTE DES
                                     < OCTETS DE ZDC A MODIFIER (VOIR
                                     < LA ROUTINE 'SERESC').
<
<
<        B U F F E R   R E S I D E N T  :
<
<
LDCTES:: VAL         YY7             < LONGUEUR D'UNE DCT-ESCALVE.
BUFESC:  EQU         $
<*******************************************************************************
LBUFES:: VAL         DCTESC-BUFESC+LDCTES
LBUFES: @VAL         '0@@@@          < LONGUEUR-MOTS DU BUFFER RESIDENT.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
         DZS         LBUFES          < BUFFER DE TRANSIT DE L'ESCLAVE.
         IF          LDCTES-YY7,,XEIF%,
         IF          ATTENTION : PLEIN DE CHOSES VONT MERDER !!!
XEIF%:   VAL         ENDIF
<
<
<        L O N G U E U R   M A X I M A L E   D E S
<        M E S S A G E S   A U   ' C C I '  :
<
<
<*******************************************************************************
LCCI::   VAL         KOLON           < PAR COMPATIBILITE VISU/CR.
LCCI:   @VAL         '0@@@@          < LONGUEUR MAXIAMLE DES MESSAGES AU 'CCI'.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
<
<
<        A C C E S   A U   ' C C I '   I N T E R P R E T A T I F  :
<
<
LCCINT:: VAL         LBUFES*NOCMO    < LONGUEUR MAXIMALE DES "CARTES" ENVOYEES
                                     < AU 'CCI' INTERPRETATIF.
         PAGE
<
<
<        N O M B R E   R E E L   D ' E S C L A V E S  :
<
<
NESCLB:: VAL         W               < NOMBRE D'UTILISATEURS EN BATCH...
<*******************************************************************************
RESCLA:: VAL         NSPVIN-NSPVI0+Z+NESCLB
                                     < RESCLA=NBRE REEL D'ESCLAVES...
                                     < SOIT :
                                     < NSPVIN-NSPVI1+Z POUR LES VISUS,
                                     < +NESCLB POUR LE BATCH (CR1,LP1).
NESCLA: @VAL         '0@@@@          < NOMBRE MAXIMAL D'UTILISATEURS.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
         PAGE
<
<
<        F O R M A T   D E S   D E M A N D E S
<        F O R M U L E E S   P A R   L E S   E S C L A V E S  :
<                    ( A   L ' A I D E   D E S   ' S V C ' )
<
<
<        DEFINITION :
<                      ON VA DEFINIR ICI LE
<                    FORMAT DES DEMANDES DE
<                    SERVICE QUE L'UTILISA-
<                    TEUR ENVOIE AU SYSTEME
<                    A L'AIDE DE 'SVC' AFIN
<                    D'EXECUTER UNE CERTAINE
<                    FONCTION (PAR EXEMPLE
<                    D'ENTREES-SORTIES,...).
<
<
         DSEC        FDESC
DEMES0:  EQU         $
<
<        D E S T I N A T A I R E   E T   F O N C T I O N  :
<
NVPFON:  BYTE        NILK;NILK       < BIT4-7=NVP,
                                     < BIT0=K : LE NVP REFERENCE A FAIT
                                     <          L'OBJET D'UN !ASSIGN
                                     <          EXPLICITE,
                                     <     =1 : LE NVP REFERENCE FAIT
                                     <          PARTIE DES NVP ASSIGNES
                                     <          EXPLICITEMENT PAR LE
                                     <          SYSTEME (VOIR EN
                                     <          PARTICULIER LE 'SGN'
                                     <          DANS HDLSVC).
                                     < BIT12-15=FONCTION DEMANDEE.
XASSIM:: VAL         BITSIG          < BIT DE DISCRIMINATION DES ASSIGNS
                                     < IMPLICITES (1)/EXPLICITES (K).
MASSIM:: VAL         '0F00           < MASQUE DE DEFINITION DU 'NVP'.
MASSFO:: VAL         MKOPDM          < MASQUE DE DEFINITION DE LA FONCTION.
XWOR%1:  VAL         MASSFO=K
XWOR%1:  VAL         -XWOR%1
XWOR%1:  VAL         MASSFO>XWOR%1
         IF          XWOR%1-XLDCTF,XEIF%,,
         IF          ATTENTION : 'DCTFON' N'EST PAS ASSEZ LONG !!!
XEIF%:   VAL         ENDIF
XWOR%2:  VAL         MKOPDM=K
XWOR%2:  VAL         -XWOR%2
XWOR%2:  VAL         MKOPDM>XWOR%2
         IF          XWOR%1-XWOR%2,,XEIF%,
         IF          ATTENTION : 'MKOPDM' ET 'MASSFO' SONT INCOMPATIBLES !!!
XEIF%:   VAL         ENDIF
MASSFF:: VAL         '0007           < IDEM POUR LA FONCTION RESTREINTE...
                                     < (VOIR 'HDLSVC')
         IF          FONTV(MASSFF-FGX,XEIF%,,
         IF          ATTENTION : 'FONTV' DOIT ETRE UNE FONCTION
         IF          D'E/S EFFECTIVE SOUS PEINE D'AVOIR DES
         IF          ENNUIS AVEC 'HDLSVC' (VOIR LA TRANSLATION
         IF          DES ADRESSES...) !!!
XEIF%:   VAL         ENDIF
<
<        A R G U M E N T S  :
<
AMESC:   WORD        NIL             < @OCTET SI E/S EFFECTIVE.
COESC:   WORD        NILK            < COMPTE D'OCTETS SI E/S EFFECTIVE.
ARGESC:  WORD        NILK            < VALEUR FACULTATIVE A TRANSMETTRE
                                     < EVENTUELLEMENT A UN HANDLER PAR
                                     < L'INTERMEDIAIARE DE ASDEM DE
                                     < DEMESC.
LFDESC:: VAL         $-NVPFON        < LONGUEUR EN MOTS DE LA DEMANDE ARGUMENT
                                     < D'UN ESCLAVE LORS D'UN 'SVC', OU D'UN
                                     < 'QUIT' ASSIMILE.
<
<        Z O N E   D E   P A T C H  :
<
PFDESC:: VAL         10              < LONGUEUR DE LA ZONE DE PATCH...
         DZS         PFDESC          < POUR EXTENSION...
         PAGE
<
<
<        S E M A P H O R E S   C O M M U N S  :
<
<
<        FONCTION :
<                      ON VA TROUVER ICI UN CERTAIN
<                    NOMBRE DE SEMAPHORES PERMET-
<                    TANT L'EXCLUSION DE CERTAINES
<                    PHASES CRITIQUES, AINSI QUE LA
<                    PROTECTION ET L'ALLOCATION DE
<                    CERTAINES RESSOURCES ('ID',...).
<
<
         TABLE
SEXSER:  WORD        SPHEX0          < SEMAPHORE D'EXCLUSION DES
                                     < PHASES CRITIQUES LORS DE
                                     < 6HALLOCATION DES HANDLERS DE
                                     < SERVICE.
                                     < (NOTA : SERT AUSSI, LORS DE
                                     < L'OCCUPATION DES ESCLAVES).
         DZS         LSEM
SEMMEM:  WORD        XXSEM0          < SEMAPHORE DE BLOCAGE DES ALLOCATEURS
                                     < EN ATTENTE DE RELEASE.
         DZS         LSEM
SEXAR:   WORD        SPHEX0          < SEMAPHORE GENERAL ET COMMUN
                                     < D'EXCLUSION DE PHASES CRITIQUES
                                     < ENTRE LES ALOOCATEURS/RELEASEURS
                                     < DE MEMOIRE.
         DZS         LSEM
CSPHEX:  WORD        SPHEX0          < SEMAPHORE D'EXCLUSION DES PHASES
                                     < CRITIQUES ENTRE L'ALLOCATEUR
                                     < ET LE RELEASEUR D'ESPACE-DISQUE.
         DZS         LSEM
SAST:    WORD        XXSEM0          < SEMAPHORE D'ATTENTE D'UN FICHIER
                                     < D'ETAT DONNE.
         DZS         LSEM
SEXSGF:  WORD        SPHEX0          < SEMAPHORE D'EXCLUSION DES
                                     < PHASES CRITIQUES DE LA GESTION
                                     < DE FICHIER.
         DZS         LSEM
SDCTF:   WORD        NDCTF           < SEMAPHORE D'ACCES AUX DCTF.
         DZS         LSEM
SAESC:   WORD        NESCLA          < SEMAPHORE D'ALLOCATION DES
                                     < IDENTIFICATEURS D'ESCLAVES.
         DZS         LSEM
SIDESC:  WORD        SPHEX0          < SEMAPHORE D'EXCLUSION DES PHASES
                                     < CRITIQUES LORS DE L'ALLOCATION
                                     < /RELEASE DES ID ESCLAVES.
         DZS         LSEM
SDODO:   WORD        XXSEM0          < SEMAPHORE DE MISE EN SOMMEIL
                                     < DE HANDLERS POUR UNE DUREE
                                     < EXPRIMEE EN SECONDES.
         DZS         LSEM
SEMCDA:  WORD        XXSEM0          < SEMAPHORE D'ATTENTE DE SYNCHRONISATION
                                     < SUR 'CDAG0'.
         DZS         LSEM
NMDE::   VAL         NDCTF           < NBRE MAX DE DESCRIPTEURS
                                     < D'ENREGISTREMENT.
SEMDE:   WORD        NMDE            < SEMAPHORE D'ACCES AUX DESCRIPTEURS.
         DZS         LSEM
SMATX:   WORD        SPHEX0          < EXCLUSION DES PHASES CRITIQUES
                                     < SUR LA ZONE DE DONNEES COMMU-
                                     < NES INTER-ESCLAVES ZDC, AINSI QUE
                                     < SUR LA MATRICE DES CONNEXIONS.
                                     < (ON UTILISE LE MEME SEMAPHORE
                                     < POUR MATX ET ZDC POUR DE SIMPLES
                                     < RAISONS D'ECONOMIE...)
         DZS         LSEM
SEMSO:   WORD        SPHEX0          < EXCLUSION DES PHASES CRITIQUES
                                     < ENTRE L'HORLOGE ET LE SWAPPER
                                     < LORS DU TRAVAIL SUR LA LISTE
                                     < CYCLIQUE DES ESCLAVES A
                                     < SWAPPER A PRIORI.
         DZS         LSEM
         PAGE
<
<
<                    C O M M O N  :
<
<
         COMMON
COM:     EQU         $
<
<        A T T E N T I O N  :
<                      POUR REDUIRE LA DEPENDENCE DE
<                    CERTAINS PROCESSEURS VIS A VIS DE
<                    CERTAINES CONSTANTES DEPENDANTES
<                    DE L'IMPLANTATION DE CMS4, LE
<                    RELAI CADCT DOIT ETRE LE 1ER MOT
<                    DU COMMON, AFIN DE NE PAS BOUGER
<                    (EN TANT QUE DEPLACEMENT PAR RAPPORT
<                    A C), LORS DES PATCHES DU COMMON !!!
<
ACADCT:  WORD        CADCT           < MISE DE L'ADRESSE D'UNE 'DCT' DANS 'L'.
                                     < L<--@DCT(X)
         IF          ACADCT-COM,,XEIF%,
         IF          ATTENTION : ON RISQUE DE GROS ENNUIS DANS CERTAINS
         IF          PROGRAMMES UTILISATEURS !!!
XEIF%:   VAL         ENDIF
<*******************************************************************************
XWOR%F:  VAL         ACADCT-COM-DEPCS
ACADCT: @VAL         '0@@@@          < DEPLACEMENT RELATIF A 'C' DE 'CADCT'.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
<
<
<        A C C E S   A   ' N S '  :
<
<
NS:      WORD        XXNS            < RELAI D'ACCES A 'NS',
ANS:     EQU         NS              < POUR EVITER DES ERREURS...
<
<
<        T R A C E   D U   S Y S T E M E  :
<
<
UTRACE:: VAL         D+D             < NOMBRE DE MOTS PAR ENTREE DE TRACE.
LTRACE:: VAL         YY7/UTRACE      < NOMBRE D'ENTREES DE LA TRACE...
XWOR%1:  VAL         LTRACE=K
         IF          BIT>XWOR%1-LTRACE,,XEIF%,
         IF          ATTENTION : 'LTRACE' DOIT ETRE UNE PUISSANCE DE 2 !!!
XEIF%:   VAL         ENDIF
XTRON::  VAL         K               < INDICATEUR DE TRACE ACTIVE...
TRACEX:  WORD        K               < INDEX DOUBLE-MOTS DE LA TRACE.
TRACE:   WORD        TTRACE,X        < RELAI DE LA TRACE.
SAVEX:   WORD        XTRON           < INDICATEUR D'INHIBITION DE LA TRACE :
                                     < BIT0=K : TRACE,
                                     < BIT0=1 : TRACE INHIBEE.
XBTROF:: VAL         BITSIG          < BIT D'INHIBITION DE LA TRACE...
         IF          XBTROF-BITSIG,,XEIF%,
         IF          ATTENTION : LES TEST D'INHIBITION VONT MERDER...
XEIF%:   VAL         ENDIF
XTROFF:: VAL         COSBT?XBTROF=FMASK(K?XTRON=FCINST
                                     < VALEUR DE 'SAVEX' LORSQUE LA TRACE EST
                                     < INHIBEE...
         IF          XTRON-K,,XEIF%,XEIF%
         IF          ATTENTION : ON NE PEUT DISTINGUER L'ETAT DE
         IF          TRACE INHIBEE DE CELUI OU ELLE EST AUTORISEE
         IF          PAR LES TESTS 'CPZ' !!!
XEIF%:   VAL         ENDIF
<
<
<        C O N S T A N T E S  :
<
<
XXRINI:: VAL         -1              < VALEUR DE 'RINI' AVANT INITIALISATION.
         IF          XXRINI+I,,XEIF%,
         IF          ATTENTION : LES TESTS SUR 'RINI' NE MARCHERONT PAS !!!
XEIF%:   VAL         ENDIF
RINI:    WORD        XXRINI          < INDICATEUR D'INITIALISATION
                                     < DU SYSTEME :
                                     < RINI=-1 : INIT PAS ENCORE FAITE,
                                     < RINI=K : INIT FAITE, MAIS DATE
                                     <      NON CONVERTIE EN ASCI,
                                     < RINI=1 : OK.
ASCHED:  WORD        WSCHED          < RELAI MEMOIRE DU MICRO-SCHEDULER.
HINSP::  VAL         NSPNP1          < PREMIER NSP NON PRIORITAIRE (CF.
                                     < SVC-ESCLAVE POUR PLUS D'INFO.).
HORIDC:  WORD        K               < PATTERN CYCLIQUE DE SWAPPING
                                     < OUT ; LE BIT DE RANG (X) EST
                                     < ASSOCIE A L'ESCLAVE D'ID (X).
                                     < ELLE EST UTILISEE PAR LE SWAPPING
                                     < OUT POUR FAIRE DU SWAPPING OUT
                                     < APRIORI ; QUAND LE BIT DE RANG
                                     < (X) EST A 1, ON SWAPPE OUT
                                     < L'ESCLAVE D'ID (X) MEME SI
                                     < TOUS LES CRITERES DE SWAPPING
                                     < OUT NE SONT PAS REMPLIS.
SOCYCL:  WORD        K               < LISTE CYCLIQUE DES ESCLAVES A
                                     < SWAPPER OUT A PRIORI ; LE BIT
                                     < DE RANG X, EST ASSOCIE A
                                     < L'ESCLAVE D'IDESC (X).
XWOR%7:  VAL         256
DMES:    WORD        XWOR%7          < SEUIL DES DUREES D'ECRITURE.
                                     < (AU-DELA DUQUEL IL FAUT
                                     < SWAPPER OUT).
NUSERA:  WORD        K               < NOMBRE D'ESCLAVES ACTIFS,
                                     < C'EST-A-DIRE SE TROUVANT ENTRE
                                     < LA COMMANDE '!LOGIN' ET UNE
                                     < DES COMMANDES '!BYE'/'!F',
                                     < ET N'AYANY PAS FRAPPE LA
                                     < COMMANDE '!W'.
ARUN:    WORD        NIL             < MOT CONTENANT L'@DCT-ESCLAVE
                                     < A FAIRE RUNNER.
BHRUN:   WORD        K               < PERMET D'EVITER QUE L'HORLOGE
                                     < N'INTERROMPE UN ESCLAVE QUE
                                     < LE RUNNER VIENT JUSTE D'ACTIVER ;
                                     < BHRUN=IBHRUN : LE RUNER VIENT D'
                                     <           ACTIVER L'ESCLAVE, ET
                                     <           PAS ENCORE D'IT HORLOGE.
                                     < L'HORLOGE DECREMENTE BHRUN,
                                     < ET N'INTERROMPT UN ESCLAVE QUE
                                     < SI BHRUN<0 (=-1).
XBHRUN:: VAL         BIT             < VALEUR D'INITIALISATION DE 'IBHRUN' ;
                                     < ON PREND 'BIT' CAR UNE OPERATION LOGI-
                                     < QUE EST FAITE DESSUS, MAIS 'I' SERAIT
                                     < BON AUSSI...
IBHRUN:  WORD        XBHRUN          < VALEUR INITIALE DE 'BHRUN' ;
                                     < CETTE VALEUR EST MISE A JOUR A
                                     < CHAQUE FOIS QUE 'NUSERA' EST
                                     < MODIFIE ; IBHRUN VAUT 0
                                     < LORSQU'IL Y A 2 UTILISATEURS
                                     < OU PLUS DANS LE SYSTEME ; ELLE
                                     < VAUT 1 SINON (NUSERA=K,1).
SYNCUS:  WORD        K               < LES BITS 5,6,7 SONT UTILISES
                                     < PAR L'INTERMEDIAIRE DU RECOVERY
                                     < POUR PERMETTRE LES SYNCHRO-
                                     < NISATIONS INTER-UTILISATEURS
                                     < PAR DES PRIMITIVES DU TYPE
                                     < 'TEST & SET' ET 'RESET'.
MOT0:    WORD        CMOT0           < INSTRUCTION A IMPLANTER EN MOT0
                                     < DE L'ESPACE MEMOIRE UTILISATEUR
                                     < LORS DES INITIALISATIONS, DES
                                     < TRAPPES, DES ALT-MODE ; ON A :
                                     < BIT0=K : GENERATION D'UN SVC,
                                     < BIT0=1 : GENERATION D'UN QUIT.
HTIME:   DZS         2               < HEURE COURANTE DANS LE JOUR,
                                     < EXPRIMEE EN SECONDES.
HTIMED:  EQU         HTIME+D
DIX:     WORD        BASE10          < POUR DIVISION PAR 10.
<*******************************************************************************
INFINI:  WORD        Q8000
XWOR%1:  VAL         '0000000@@@@    < RECUPERATION DE LA VALEUR DE L'INFINI.
<*******************************************************************************
         IF          XWOR%1-Q8000,,XEIF%,
         IF          A T T E N T I O N  : ON DOIT AVOIR
         IF          BIT0(INFINI)=1, BIT1(INFINI)=...=BIT15(INFINI)=K !!!
XEIF%:   VAL         ENDIF
CCBIPI:  EQU         INFINI          < 'CCB' SPECIAL UTILISE POUR LES APPELS
                                     < INTER-PROCESSEURS 'CF. 'HDLPR1').
         IF          COSBT?BCCBIP=FMASK(K=FCINST-XWOR%1,,XEIF%,
         IF          ATTENTION : LA VALEUR DE 'CCBIPI' EST INCOMPATIBLE
         IF          AVEC SA FONCTION !!!
XEIF%:   VAL         ENDIF
SMASK0:: VAL         0
SMASK:   WORD        SMASK0          < INDICATEUR DE L'ETAT DE MSAQUAGE DU
                                     < PROCESSEUR ; UNE VALEUR STRICTEMENT
                                     < POSITIVE DONNE LE NOMBRE DE MASQUAGES
                                     < IMBRIQUES.
DEFOK0:: VAL         I+I             < VALEUR NORMALE DE 'DEFOK' A L'INITIALI-
                                     < SATION, OU APRES UN "BON DEFAUT SECTEUR".
DEFOK:   WORD        DEFOK0          < NUL EN PERMANENCE, N'EST MIS A QUE
                                     < SI UN DEFAUT SECTEUR A ETE PRIS
                                     < EN COMPTE ET ENTIEREMENT TRAITE.
SAVHV:   WORD        NILK            < DESTINE A LA SAUVEGARDE DU REGISTRE
                                     < 'HV' LORS D'UN DEFAUT SECTEUR.
                                     < DE PLUS CONTIENT MAINTENANT EN PERMA-
                                     < NENCE LE REGISTRE 'HV' ; MAIS N'ETANT
                                     < PAS RAZE (CAR IL FAUDRAIT POUR CELA
                                     < UNE TACHE DE PRIORITE INTERMEDIARE
                                     < ENTRE TH15 ET TS0) CETTE VALEUR N'A
                                     < DE SENS QUE SI LE MOT QUI SUIT (COMPTH)
                                     < N'EST PAS A 0...
COMPTH:  WORD        K               < SI JE NE ME TROMPE PAS, CETTE VARIABLE
                                     < EST BOOLEENNE :
                                     < =0 : PAS D'INTERRUPTIONS EN TRAITEMENT,
                                     < =1 : UNE OU PLUSIEURS INTERRUPTIONS
                                     <      SONT EN TRAITEMENT, ET UNE SEULE
                                     <      (BIEN ENTENDU) A MASQUE LES
                                     <      INTERRUPTIONS...
TYPDEF:  WORD        -TYPTS-TYPTH    < DONNE LE TYPE DE LA TACHE AYANT
                                     < DETECTE UN DEFAUT SECTEUR PAR 'TDEFS'.
IDEDEF:  WORD        -NMTS-NMTH      < DONNE L'IDENTITE DE LA TACHE AYANT
                                     < DETECTE UN DEFAUT SECTEUR PAR 'TDEFS'.
MKDEF:   WORD        NILK            < ZONE DE SAUVEGARDE DE 'SMASK' DANS
                                     < LE PROGRAMME 'TDEFS'.
ALADEF:  WORD        NILK            < PERMET LA SAUVEGARDE DE LA NATURE D'UNE
                                     < ALARME, LORSQUE 'TDEFS' DETECTE UN
                                     < DEFAUT SECTEUR DANS 'TH0'.
ICNUM:   WORD        NILK            < MEMORISATION D'UN 'IC' DANS 'TDEFS'.
KTDEFS:  WORD        -I              < VALEUR INITIALE DES AUTORISATIONS
                                     < D'APPEL DE 'TDEFS'.
LIC:     WORD        LONGIC          < LONGUEUR D'UN 'IC'.
<
<
<        C O N F I G U R A T I O N   D U   S Y S T E M E  :
<
<
                                     < INDICATEURS DE CONTROLE DU SYSTEME :
                                     <
TVEXIS:: VAL         L               < =1 : LE SYSTEME DE TELEVISION NUME-
                                     <      RIQUE EST PRESENT,
                                     < BIT NSPDKF-NSPDK : 'DKF' PRESENT (1),
                                     < BIT NSPDKU-NSPDK : 'DKU' PRESENT (1),
                                     < BIT NSPDKM-NSPDK=1 TOUJOURS (DKM PRESENT)
         IF          NSPDKU-NSPDK-Z,,XEIF%,
         IF          ATTENTION : LE FORMAT D'ETASYS EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         IF          NSPDKM-NSPDK-2,,XEIF%,
         IF          ATTENTION : LE FORMAT D'ETASYS EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         IF          NSPDKF-NSPDK-3,,XEIF%,
         IF          ATTENTION : LE FORMAT D'ETASYS EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
BRCDKF:: VAL         NSPDKF-NSPDK+BIT < 1 : 'DKF' GARDERA LE JEU DE REGISTRES
                                     < 'HDC' QU'IL SE SERA ALLOUE TANT QUE CE
                                     < BIT RESTE A 1.
RECON::  VAL         BRCDKF+BIT      < CE BIT CONTROLE LE BLOCAGE DE 'TH0'
                                     < SUR UNE 'SYSER' :
                                     < 0 : 'TH0' SE BLOQUERA NORMALEMENT, ET
                                     <     LE DEBLOCAGE SE FERA AU PUPITRE
                                     <     EN MODIFIANT LE REGISTRE 'P',
                                     < 1 : 'TH0' SE BLOQUERA SUR LECTURE DES
                                     <     CLEFS DU PUPITRE, ET FAIRE 'CLEAR'
                                     <     PUIS 'MEM' LA DEBLOQUERA...
                                     <     (MODE IMPLICITE)
QSHS::   VAL         RECON+BIT       < CE BIT CONTROLE L'USAGE QU'IL DOIT ETRE
                                     < FAIT DES Q-SECTEURS EN MAUVAIS ETAT
                                     < LORS DE LEUR RELEASE :
                                     < 0 : ON LES REND, ILS SONT DONC RE-
                                     <     UTILISABLES,
                                     < 1 : ON NE LES REND PAS, ON NE LES
                                     <     RE-UTILISERA PLUS !!!
BTRYDK:: VAL         QSHS+BIT        < 0 : FAIRE UNE 'SYSER' SUR TROP D'ERREURS
                                     <     SUR 'DKF' ET 'DKM' APRES TOUTES LES
                                     <     TENTATIVES D'USAGE...
                                     < 1 : APRES TOUTES LES TENTATIVES, ON NE
                                     <     FERA PAS DE 'SYSER', ET ON RENVERRA
                                     <     UN CODE DE RETOUR OK (K).
OTODLN:: VAL         BTRYDK+BIT      < CE BIT CONTROLE LES ACTIONS
                                     < DE 'HDLDLN' :
                                     < =1 : LE DELETE D'UN NOM DE FICHIER
                                     <      EXISTANT EST AUTORISE,
                                     < =0 : LE DELETE D'UN NOM DE FICHIER
                                     <      EXISTANT N'EST PAS AUTORISE...
OTOCOP:: VAL         OTODLN+BIT      < CE BIT CONTROLE LA COPY DU SYSTEME ::
                                     < =0 : LA COPY EST ON ; CE MODE DOIT
                                     <      ETRE LE MODE PERMANENT.
                                     < =1 : LA COPY EST OFF ; CE MODE A
                                     <      UTILISER PRUDEMMENT PERMET PAR
                                     <      EXEMPLE DE REGENERER LE 'DKF' A
                                     <      PARTIR DU 'DKM', Y COMPRIS LA
                                     <      ZONE DE COPY...
OTOCFM:: VAL         OTOCOP+BIT      < CE BIT N'EST VALIDE QUE SI OTOCOP=K,
                                     < ET CONTROLE ALORS LA COPY PERIODIQUE
                                     < DU 'DKF' SUR LE 'DKM' :
                                     < =0 : LA COPY DKF --> DKM EST ON,
                                     < =1 : LA COPY DKM --> DKF EST OFF ;
                                     < ON NOTERA QUE LE MODE "OFF" POURRA
                                     < EST LE MODE COURANT, LE MODE "ON" ETANT
                                     < UTILISE AUX HEURS CREUSES ; EN EFFET
                                     < AVEC UN SYSTEME CHARGE, IL IMPLIQUERAIT
                                     < DE NOMBREUX MOUVEMENTS DE BRAS DU 'DKM'.
MKCOP::  VAL         '001C           < DEFINITION D'UNE CONSTANTE PERMETTANT
                                     < DE MODIFIER LA FREQUENCE DES COPIES
                                     < DU SYSTEME (CETTE CONSTANTE PEUT ETRE
                                     < MULTIPLIEE PAR 2 SUIVANT LA VALEUR
                                     < DE LA CONSTANTE 'FXHOR') ; ENFIN
                                     < CETTE CONSTANTE EST SIGNEE.
XWOR%1:  VAL         MKCOP=K-NBITMO+B
XETAIR:: VAL         -XWOR%1+BIT     < CONTROLE L'INITIALISATION DE LA RACINE,
XETAIA:: VAL         XETAIR+BIT      < CONTROLE LA REINITIALISATION DE L'ARBRE.
XWOR%1:  VAL         K
XWOR%1:  VAL         COIBT?TVEXIS=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         NSPDKU-NSPDK?COIBT=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         NSPDKM-NSPDK?COIBT=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         NSPDKF-NSPDK?COIBT=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COIBT?BRCDKF=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COIBT?RECON=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COIBT?QSHS=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COIBT?BTRYDK=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COIBT?OTODLN=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COIBT?OTOCOP=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COIBT?OTOCFM=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COIBT?XETAIR=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COIBT?XETAIA=FMASK(K?XWOR%1=FCINST
         IF          XWOR%1)MKCOP-MMOT,,XEIF%,
         IF          ATTENTION : LES DEFINITIONS SONT MAUVAISES !!!
XEIF%:   VAL         ENDIF
XWOR%1:  VAL         COSBT?RECON=FMASK(K=FCINST
XWOR%1:  VAL         XXRACK?TVEXIS=FMASK(K?XWOR%1=FCINST
ETASYS:  WORD        XWOR%1
                                     < LISTE DE BITS DES INDICATEURS DE
                                     < CONTROLE DU SYSTEME.
MEMV:    BYTE        K;K             < OCTET0=SEUIL : LORS D'UN OPEN DE
                                     < FICHIER, ON TESTE LA POSITION DU
                                     < 'NVP' DEMANDE PAR RAPPORT A CE
                                     < SEUIL; S'IL EST INFERIEUR, ON
                                     < UTILISERA 'DKM' POUR CE FICHIER,
                                     < SINON 'DKB'.
                                     < OCTET1 : CONTIENT 2 BITS :
XWOR%1:  VAL         MOCG=K-NBITMO+B
MEMVO::  VAL         -XWOR%1+BIT     < 1 : OPTIMISER LES LECTURES DU 'SGF'
                                     <     EN MEMOIRE VIRTUELLE PAR ANTICIPA-
                                     <     TION DES CHARGEMENTS DES PAGES.
XXXJFC:: VAL         MEMVO+BIT       < 1 : APRES CHAQUE EFFACEMENT DE L'ECRAN
                                     <     D'UNE VISU, ON EDITERA LE MESSAGE
                                     <     'JF. COLONNA...' !!! ON N'EST JAMAIS
                                     <     TROP PRUDENT (MERCI LES ARTISTES...).
                                     < 0 : MODE NORMAL DU SYSTEME, CE MESSAGE
                                     <     NE SORT PAS...
XSYNC0:: VAL         XXXJFC+BIT      < 1 : MIS A 1 CE BIT INDIQUE QUE 'DKU', ET
                                     <     CELA UNIQUEMENT S'IL EXISTE, ET MIS
                                     <     MODE FORMATAGE (SYNCHRONISATION SUR
                                     <     LE SECTEUR 0).
MEMXXX:: VAL         XSYNC0+BIT      < 0 : TOUTES LES DIRECTIVES DANGEREUSES
                                     <     SONT INTERDITES QUELQUE SOIT LE
                                     <     NUMERO DE COMPTE ('1EC5, 'STAR', LE
                                     <     'DEBUG ABSOLU, LE 'SVC-CONNEXION DES
                                     <     NSP AU NVP', L'ACCES DIRECT AU PU-
                                     <     PITRE POUR CHANGER 'MEMV',...)
                                     < 1 : TOUT EST AUTORISE SOUS ":SYS"...
XBTOVI:: VAL         MEMXXX+BIT      < 0 : NE PAS UTILISER LE SYSTEME DE DETEC-
                                     <     TION DES DEMANDES BLOQUANTES SUR LES
                                     <     VISUS (VOIR 'TESTO'),
                                     < 1 : L'UTILISER...
YBTOVI:: VAL         XBTOVI+BIT      < 0 : NE PAS METTRE EN PLACE DE TIME-OUT
                                     <     POUR 'SERESC' SUR LES VISUS DEMAN-
                                     <     DEES, LORSQUE CELLES-CI NE CORRES-
                                     <     PONDENT PAS A 'PHIN',
                                     < 1 : METTRE CE TIME-OUT LORSQUE LA VISU
                                     <     DEMANDEE DIFFERE DE 'PHIN'...
MEMVN::  VAL         YBTOVI+BIT      < 1 : APPLIQUER DKB AU SGN, SINON DKM.
MEMVF::  VAL         MEMVN+BIT       < 1 : APPLIQUER DKB AU SGF, SINON DKM.
<
<
<        C O N S T A N T E   M A G I Q U E  :
<
<
MAGIK::  VAL         7               < CONSTANTE MAGIQUE...
         IF          K*MAGIK/BASE16(K=FCREST-K,,XEIF%,
         IF          ATTENTION : IL FAUT MAGIK(K)=K POUR
         IF          SIMPLIFIER LES CHOSES EN BASE 16 !!!
XEIF%:   VAL         ENDIF
XWOR%3:  VAL         MAGIK           < CONSTANTE MAGIQUE...
XWOR%7:  VAL         K               < INITIALISATION DU CUMUL...
         NTRN
         DO          BASE16
XWOR%7:  VAL K=FCDO*XWOR%3/BASE16(K=FCREST?COSBT=FMASK(K?XWOR%7=FCINST
XWOR%8:  VAL         K               < INITIALISATION DU CUMUL...
         DO          BASE16
XWOR%8:  VAL K=FCDO?COSBT=FMASK(K?XWOR%8=FCINST
         TRN
         IF          XWOR%7-XWOR%8,,XEIF%,
         IF          ATTENTION : LA CONSTANTE MAGIQUE 'MAGIK'
         IF          N'OPERE PAS UNE PERMUTATION DES 16 CHIFFRES
         IF          DE 0 A F !!!
XEIF%:   VAL         ENDIF
         IF          K*MAGIK/BASE10(K=FCREST-K,,XEIF%,
         IF          ATTENTION : IL FAUT MAGIK(K)=K POUR
         IF          SIMPLIFIER LES CHOSES EN BASE 10 !!!
XEIF%:   VAL         ENDIF
XWOR%3:  VAL         MAGIK           < CONSTANTE MAGIQUE...
XWOR%7:  VAL         K               < INITIALISATION DU CUMUL...
         NTRN
         DO          BASE10
XWOR%7:  VAL K=FCDO*XWOR%3/BASE10(K=FCREST?COSBT=FMASK(K?XWOR%7=FCINST
XWOR%8:  VAL         K               < INITIALISATION DU CUMUL...
         DO          BASE10
XWOR%8:  VAL K=FCDO?COSBT=FMASK(K?XWOR%8=FCINST
         TRN
         IF          XWOR%7-XWOR%8,,XEIF%,
         IF          ATTENTION : LA CONSTANTE MAGIQUE 'MAGIK'
         IF          N'OPERE PAS UNE PERMUTATION DES 10 CHIFFRES
         IF          DE 0 A 9 !!!
XEIF%:   VAL         ENDIF
<
<        NOTA :
<                      DESORMAIS (MEME DANS L'HORLOGE)
<                    LA CONSTANTE MAGIQUE N'EST UTILISEE
<                    QUE PAR RAPORT A LA BASE16, ET PLUS
<                    DU TOUT AVEC LA BASE10...
<
<
<
<        O R G A N E   D E   S W A P P I N G  :
<
<
ANSPS:   WORD        NSPPR1          < ON TROUVE ICI LE 'NSP' DE L'ORGANE
                                     < DE SWAPPING ('NSPDKS' OU 'NSPPR1').
NUSEP1:  WORD        K               < NOMBRE D'UTILISATEURS POUVANT ACCEDER
                                     < AU SWAPPING SUR 'PR1' ; CE NOMBRE EST
                                     < CALCULE LORS DU BALAYAGE DE LA MEMOIRE
                                     < HAUTE AU RESTART DU SYSTEME...
         PAGE
<
<
<        N U M E R O   D E   C O M P T E   D U   S Y S T E M E
<                    ( E T   D E   S O N   P E R E )  :
<
<
ACNSYS:  BYTE        XK1;XK2;XK3;XK4
         PAGE
<
<
<        R E L A I S   D E S   T A B L E S   C O M M U N E S  :
<
<
SYSPRO:  WORD        LPRO,X          < LISTE DES PROCESSEURS DU SYSTEME.
AXPSTH:  WORD        PSTH00,X        < RELAI INDEXE VERS LES 'PSTH'.
AXIC:    WORD        IC00,X          < RELAI INDEXE VERS LES 'IC'
ADCTSY:  WORD        DCTSY,X         < RELAI TABLE STATIONS SERVICES.
ARSIM:   WORD        TRSIM,X         < LISTE D'EXECUTION DES 'SVC' IMMEDIATS.
AFOSIM:  WORD        FOSIM,X         < TABLE D'EXECUTION DES FAUX
                                     < SERVICES IMMEDIATS DU SVC.
ATMOB:   WORD        TTMOB,X         < OPERATIONS SUR BITS DANS TABLE.
ARVISU:  WORD        TRVISU,X        < EXECUTION DES FONCTIONS VISUS.
ACFOVI:  WORD        TCFOVI,X        < TABLE DE CODAGE DES FONCTIONS
                                     < ACCESSIBLES SUR LES VISUS.
VISOTO:  WORD        TVISOT,X        < RELAI D'ACCES A L'AUTOMATE
                                     < D'ACCES AUX VISUS.
ACEXTD:  WORD        CEXTD,X         < ADRESSE TABLE DES EXTENSIONS VISUS.
AFCCI:   WORD        FCCI,X          < RELAI DES MODULES DU CCI.
AOTCCI:  WORD        OTOCCI,X        < RELAI VERS LA GRAMMAIRE DU CCI.
ATFREQ:  WORD        TFREQ,X         < TABLE FREQUENCES INT. HORLOGE.
ATHESC:  WORD        THESC,X         < RELAI VERS LA TABLE DES VALEURS
                                     < INITIALES DES "HORLOGES" DE SWAPPING
                                     < DES ESCLAVES.
FREQI:   WORD        HORINI+T+AMDEM  < ADRESSE FREQUENCE REINITIALISATION
                                     < DE L'ORLOGE DANS LA DEMANDE
                                     < HORINI DE SYSINI.
                                     < (IMPLANTEE DANS DCTHOR !!!)
AMATX:   WORD        MATX,X          < RELAI DE LA MATRICE DE CONNEXION.
AZDC:    WORD        ZDC,X           < RELAI INDEXE VERS UNE ZONE DE
                                     < 16 OCTETS FORMANT UNE ZONE DE
                                     < DONNEES COMMUNES INTER-
                                     < ESCLAVES.
AFONX:   WORD        FONX,X          < RELAI VERS LA TABLE DE TRANS-
                                     < CODAGE UTILISEE LORS DES
                                     < CONNEXIONS MATRICIELLES POUR
                                     < CODER LES FONCTIONS A ENVOYER.
IMPASS:  WORD        TIMPAS,X        < RELAI D'ACCES A LA TABLE DES ASSIGNA-
                                     < TIONS IMPLICITES.
<
<        R E L A I S   V E R S   L E S   3   F I L E S
<        D U   M I C R O - S C H E D U L E R  :
<
AASTF:   WORD        ASTF-IJIJDX,X
AESTF:   WORD        ESTF-IJIJDX,X
ARSTF:   WORD        RSTF-IJIJDX,X
         PAGE
<
<
<        R E L A I S   D E S   R O U T I N E S   C O M M U N E S  :
<
<
ROUT5:   EQU         $
<
<
<        R O U T I N E S   G E N E R A L E S  :
<
<
ATRACE:  WORD        STRACE          < ROUTINE DE TRACE.
ASNAP:   WORD        SNAP            < ROUTINE DE SNAP DU CONTENU DE A.
ACHAND:  WORD        CHAND           < MISE D'UNE DEMANDE EN FILE D'ATTENTE.
ACHAN0:  WORD        CHAND0          < MISE D'UNE DEMANDE EN FILE D'ATTENTE,
                                     < AVEC PASSAGE PRELIMINAIRE SUR LA PAGE
                                     < '0 DE LA MEMOIRE, AFIN DE FORCER DES
                                     < ENTREES-SORTIES EN BAS DE LA MEMOIRE...
ACHANW:  WORD        CHANW           < ATTENTE DE FIN DE SERVICE, PUIS
                                     < TEST DES CONDITIONS DE RETOUR.
ACANSP:  WORD        CANSP           < CALCUL DU NSP DU DEMANDEUR, OU
                                     < NSPACT SI APPEL PAR HDLSER.
ACBDCT:  WORD        CBDCT           < CALCUL DE L'ADRESSE DE LA DCT ASSOCIEE
                                     < A UN NIVEAU D'INTERRUPTION GENERALISE
                                     < DONNE EN ARGUMENT...
ALODCT:  WORD        LOCDCT          < LOCATION D'UNE DCT.
ADLDCT:  WORD        DELDCT          < DELOCATION D'UNE DCT.
ARVHDL:  WORD        REVHDL          < REVEIL D'UN HANDLER APRES UNE IT.
ARVDEM:  WORD        REVDEM          < REVEIL DU DEMANDEUR EN FIN
                                     < DE SERVICE.
ACSWIT:  WORD        CSWIT           < REMISE A 0 DU BETA(SIT) ET
                                     < ATTENTE D'INTERRUPTION.
ABETA1:  WORD        BETA1           < ROUTINE DE CALCUL DE BETA(SCHVID).
ABETA2:  WORD        BETA2           < CALCUL DU BETA(SIT).
ABETA:   WORD        E753            < BETA D'UN SEMAPHORE QUELCONQUE.
APBS:    WORD        PBS             < TEST DE POSITION DE BETA(SCHVID)
                                     < PAR RAPPORT A SEUIL(SCHVID).
ATEC:    WORD        TEC
ATIT:    WORD        TIT             < ADRESSE DE LA ROUTINE DE TRAITEMENT
                                     < DES IT D'E/S.
APREDS:  WORD        PREDS           < ROUTINE DE PREVENTION DES DEFSEC.
ATHDS:   WORD        THDS            < ROUTINE DE TEST DES DEFSEC.
AHEXEX:  WORD        HEXEX           < CONVERSION BINAIRE-->ASCI
ADODO:   WORD        DODO            < ROUTINE DE MISE EN SOMMEIL POUR
                                     < UNE DUREE DETERMINEE.
ASOBT:   WORD        SOBT            < ROUTINE DE RECHERCHE D'UN BIT
                                     < A 1 DANS UNE TABLE.
ATMOBT:  WORD        TMOBT           < ROUTINE D'OPERATIONS SUR
                                     < SUR BIT DANS UNE TABLE.
ASEPAR:  WORD        SEPAR           < ROUTINE DE DECONCATENATION
                                     < D'UN NUMERO DE BIT.
AHEXIN:  WORD        HEXIN           < CONVERSION ASCI-->BINAIRE.
ASTBOX:  WORD        STBOX           < ROUTINE RANGEANT LA BOX D'UNE
                                     < DEMANDE, SI CELLE-CI EST
                                     < VALIDEE PAR LE VBOX DU NSPTYP.
ARLSE:   WORD        RLSE            < SOUS-PROGRAMME DE SIMULATION DE
                                     < L'INSTRUCTION 'RLSE'.
ASMMK:   WORD        SMMK            < SOUS-PROGRAMME DE MASQUAGE PROCESSEUR.
ASMDK:   WORD        SMDK            < SOUS-PROGRAMME INVERSE DE 'SMMK'.
ATDEFS:  WORD        TDEFS           < ROUTINE TESTANT LES DEFAUTS SECTEURS
                                     < EN ATTENTE DANS LES PHASES MASQUEES.
ASMPUI:  WORD        SMPUI           < SOUS-PROGRAMME DE LECTURE DES CLEFS
                                     < DU PUPITRE ET DE SON ETAT.
ASMPUO:  WORD        SMPUO           < SOUS-PROGRAMME D'ECRITURE PUPITRE.
ASMTH:   WORD        SMTH            < SOUS-PROGRAMME DE CALCUL DE
                                     < L'ADRESSE D'UNE 'PSTH'.
ASMIC:   WORD        SMIC            < SOUS-PROGRAMME DE CALCUL DE
                                     < L'ADRESSE D'UN 'IC'.
ASYSER:  WORD        SYSER           < SOUS-PROGRAMME DE TRAITEMENT
                                     < DES ERREURS SYSTEME.
<*******************************************************************************
XWOR%F:  VAL         ASYSER-COM-DEPCS
ASYSER: @VAL         '0@@@@          < DEPLACEMENT RELATIF A 'C' DE 'SYSER'.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
ASMWHO:  WORD        SMWHO           < SOUS-PROGRAMME D'IDENTIFICATION DE
                                     < LA TACHE EN COURS.
ASMIT:   WORD        SMIT            < SOUS-PROGRAMME DE TEST DE L'ETAT
                                     < REEL DE MASQUAGE DES INTERRUPTIONS.
AGETOC:  WORD        GETOC           < SOUS-PROGRAMME D'ACCES A UN
                                     < OCTET QUELCONQUE D'INDEX
                                     < DONNE AU-DELA DE 32K.
ASIMUL:  WORD        SIMUL           < SIMULATION DES INSTRUCTIONS DE 'LOAD' ET
                                     < DE 'STORE' DANS TOUTE LA MEMOIRE...
ACHIFR:  WORD        CHIFRA          < CHIFFRAGE/DECHIFFRAGE D'UN MOT...
ATWOE:   WORD        TWOE            < SOUS-PROGRAMME METTANT EN PLACE LES
                                     < REGISTRES (SLO,SLE) ; DU MOINS, IL FAIT
                                     < SEMBLANT, CAR EN GENERAL, IL LAISSE
                                     < CEUX QUI Y SONT DEJA, MAIS EVENTUEL-
                                     < LEMENT EN CHANGEANT (SLE)-(SLO) ;
                                     < CELA PERMET D'ETENDRE LES ANCIENNES
                                     < OPERATIONS 'CDAI' A L'ENSEMBLE DES 'CDA'.
<
<
<        R O U T I N E S   A T T A C H E E S   A U X
<                    E S C L A V E S  :
<
<
AALOHS:  WORD        ALOHS           < ROUTINE D'ALLOCATIO ET D'APPEL
                                     < D'UN HANDLER DE SERVICE.
ARGARM:  WORD        RGARM           < CALCUL DU RANG DE L'ALLOCATEUR/
                                     < RELEASEUR MEMOIRE NECESSAIRE A
                                     < UN ESCLAVE.
ARGAM1:  WORD        RGAM            < POUR ALLOCATION MEMOIRE LORS
                                     < DU CHARGEMENT D'UN PROCESSEUR.
AFSERV:  WORD        SFSERV          < TEST ET RANGEMENT D'UNE ARDREESE
                                     < DE ROUTINE DE FIN DE SERVICE.
ADOWN:   WORD        DOWN            < SOUS-PROGRAMME APPELE A LA SUITE D'UN
                                     < 'SVC' OU UN 'QUIT' RECU, OU BIEN UNE
                                     < UNE TRAPPE, ET QUI REGARDE OU SE TROUVE
                                     < L'ESCLAVE (EN HAUT, OU EN BAS), ET S'IL
                                     < EST EN HAUT, PREPARE SA DESCENTE, AFIN
                                     < QUE TOUTES SES OPERATIONS SOIENT TRAITEES
                                     < EN BAS...
APDADR:  WORD        PDADR           < SOUS-PROGRAMME CONVERTISSANT UN REGISTRE
                                     < 'SLO' EN UNE ARESSE MOT (LORSQUE CELA
                                     < EST LEGAL).
AISWAP:  WORD        ISWAP           < ROUTINE DE FIN DE SERVICE
                                     < D'INVERSION DES CONDITIONS
                                     < DE SWAP DE L'ESCLAVE.
AABORT:  WORD        ABORT           < ROUTINE DE MODIFICATION DE
                                     < L'ESPACE MEMOIRE ESCLAVE
                                     < SUITE A UN ABORT.
ASAVRE:  WORD        SAVREG          < ROUTINE DEPLACANT LES 10 REGIS-
                                     < DE L'ESCLAVE (A,B,X,Y,C,L,W,K,P,
                                     < S) DE DCTESC VERS L'EN-TETE DE
                                     < L'ESPACE MEMOIRE ESCLAVE ; APPE-
                                     < LE PAR 'ABORT' ET 'TRAPPE'.
ARUNP:   WORD        RUNP            < ROUTINE D'INITIALISATION
                                     < DU P DE LANCEMENT D'UN PROCESSEUR.
AGOBPE:  WORD        GOBPE           < ROUTINE DE FIN DE SERVICE DE
                                     < RETOUR AU PROGRAMME ESCLAVE
                                     < PAR 'PRESC'.
AGOON:   WORD        GOON            < ADRESSE ROUTINE DE FIN DE SERVICE
                                     < UTILISEE LORS D'UN PROCEED.
ACHKIN:  WORD        CHKIN           < TEST NSPIN=?NSPOUT ET RENVOI
                                     < DE NSPIN DANS LE REGISTRE A.
ACARAC:  WORD        CARAC           < ACCES AU CARACTERE COURANT DE
                                     < BUFESC PENDANT L'ANALYSE DU CCI.
ACCIF:   WORD        CCIFIL          < INTERFACE GESTION DES NOMS-CCI.
ASTXES:  WORD        STXES           < SOUS-PROGRAMME DE MODIFICATION DU REGIS-
                                     < TRE 'X' DE L'ESCLAVE DANS 'DCTESC' ; IL
                                     < POSSEDE COMME ARGUMENT UNE INSTRUCTION
                                     < DE 'STORE'...
<
<
<        E N V O I   D ' U N   M E S S A G E  :
<
<
AMJEEJ:  WORD        MJEEJ           < MESSGE DE EJ ET JE VERS TTYS.
<
<
<        R O U T I N E S   D I V E R S E S   D ' E / S  :
<
<
ASDIPI:  WORD        IPI             < SOUS-PROGRAMME EMETTANT A DESTINATION
                                     < UN 'IPI' EN AYANT BIEN ENTENDU AU
                                     < PREALABLE MIS UNE ADRESSE DE 'CCB' DANS
                                     < SA BOITE AUX LETTRES...
AINICV:  WORD        INICV           < ROUTINE D'INITIALISATION DES REGISTRES
                                     < DES COUPLEURS DES VISUS, EN PARTICULIER
                                     < LORS D'UN 'RESTART'.
AMESSO:  WORD        MESSO           < EMISSION D'UN MESSAGE.
AWOGB:   WORD        WOGB            < ECRITURE DK POUR GET/REL DK.
AROGB:   WORD        ROGB            < LECTURE DK POUR ALLOC/REL DK.
ARRSTF:  WORD        RRSTF           < TEST DU MODE D'EXECUTION, ET EPILOGUE
                                     < DES TACHES HARDWARES.
<
<
<        R O U T I N E S   D U   S G F  :
<
<
ALOOKF:  WORD        LOOKF           < ROUTINE DE RECHERCHE D'UN FICHIER
                                     < D'ETAT DONNE.
AOPFIL:  WORD        OPNFIL          < OPEN FILE.
ACLFIL:  WORD        CLSFIL          < ROUTINE DE CLOSE FICHIER.
AMTEDF:  WORD        MTEDF           < ROUTINE DE MISE A JOUR DE TEDF.
AACTP:   WORD        ACTP            < ROUTINE DONNANT LA TP D'UN FICHIER
                                     < DE NOM DIRECT DONNE.
ADETP:   WORD        DETP            < ROUTINE SUPPRIMANT UN NOM
                                     < DIRECT DANS TATP.
ARWTP:   WORD        RWTP            < ROUTINE D'ECRITURE D'UN SECTEUR
                                     < DE TATP.
AACTP2:  WORD        ACTP2           < ACCES A LA TP D'UN FICHIER (SGF).
AWAITR:  WORD        WAITR           < ATTENTE EVENEMENT & LIBERATION
                                     < PROVISOIRE DU SGF.
ACLAS:   WORD        CLAS            < CALCUL DE LA CLASSE D'EQUIVALENCE
                                     < D'UNE CLEF.
APLSC:   WORD        PLSC            < ROUTINE DE PARCOURS D'UNE LISTE
                                     < SEQUENTIELLE DE CLEFS.
AE475:   WORD        E475            < RELAI-ADRESSE INTERNE A 'PLSC'.
AE261:   WORD        E261            < RELAI-ADRESSE INTERNE A 'PLSC'.
AINITK:  WORD        INITK           < INITIALISATION DESCRIPTEUR DE CLEF.
AALSC:   WORD        ALSC            < ROUTINE D'ALLOCATION SECTEURS
                                     < POUR PLSC.
AINITS:  WORD        INITS           < INITIALISATION D'UN SECTEUR D'UNE
                                     < LISTE SEQUENTIELLE DE CLEFS.
ADELET:  WORD        DELETE
AINSER:  WORD        INSERT
RETCID:  WORD        E302            < ADRESSE DE RETOUR DE INSERT/DELETE.
ADADF:   WORD        DADF            < ROUTINE DE TRANSFERT DES
                                     < ARG DU SGF VERS DFILDK.
ACLOSK:  WORD        CLOSK           < ROUTINE DE CLOSE SAVE D'UN
                                     < ENREGISTREMENT.
AELWS:   WORD        ELWS            < ECRITURE UN SECTEUR (SGF).
ACLO1:   WORD        CLO1            < INITIALISATION D'UN CLOSE
                                     < ENREGISTREMENT.
AOPN1:   WORD        OPN1            < INITIALISATION OPEN ENREGISTREMENT.
AELR1:   WORD        ELR1            < VALIDATION DES LECTURES SOUS SGF.
AELCH:   WORD        ELCH            < CHAINAGE DES SECTEURS A L'ECRITURE.
AELR2:   WORD        ELR2            < RECUPERATION DES CHAINAGES
                                     < DES SECTEURS LORS D'UNE LECTURE
                                     < DU SGF.
ARDESC:  WORD        RDESC           < ROUTINE DE RELEASE D'UN
                                     < DESCRIPTEUR D'ENREGISTREMENT.
AADESC:  WORD        ADESC           < ROUTINE D'ALLOCATION
                                     < DESCRIPTEUR D'ENREGISTREMENT.
AELARS:  WORD        ELARS           < ALLOCATION/RELEASE DE SECTEURS.
AELESS:  WORD        ELESS           < E/S SECTEUR DISQUE.
AWSDK:   WORD        WSDK            < ROUTINE D'ECRITURE 1 SECTEUR DK.
ARSDK:   WORD        RSDK            < ROUTINE DE LECTURE 1 SECTEUR DK.
<
<
<        R O U T I N E S   D I V E R S E S  :
<
<
AMEM:    WORD        MEM             < GENERATION D'UN RELAI D'ACCES
                                     < A UN BUFFER ET DE SON INDEX
                                     < A PARTIR DE L'ARGUMENT 'AMDEM' D'UNE
                                     < DEMANDE...
<
<
<        R O U T I N E S   D E   V I S U A L I S A T I O N  :
<
<
OACTIV: @
XWOR%1:  VAL         KOLF=FMASK+KOLTES=FVAL
XWOR%1:  VAL         KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2:  VAL         KOLTED=FMASK+KOL0=FVAL
XWOR%2:  VAL         KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3:  VAL         XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE 'OACTIV'...
XWOR%4:  VAL         MSYMBI=FMASK+KOL0=FVAL
XWOR%4:  VAL         MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
         IF          XWOR%4=FCSYMT-SYMBX,XEIF%,,XEIF%
OACTIV:: VAL         EXIST           < SI 'OACTIV' N'EXISTE PAS, ON LE CREE...
                                     < OPTION 'EXIST'/'NEXIST' DE LA VISUALI-
                                     < TION DU TRAFFIC DES DEMANDES INTER-TACHES
XEIF%:   VAL         ENDIF
         IF          OACTIV-EXIST,XEIF%8,,XEIF%8
AACTIV:  WORD        ACTIV           < CETTE ROUTINE PERMET DE VISUALISER SUR
                                     < LE SYSTEME MOYENNE DEFINITION LE TRAFIC
                                     < INTER-TACHES ; L'ADRESSE 'ACTIV' EST
                                     < SOIT PAIRE (LE SOUS-PROGRAMME EST ALORS
                                     < INEFFECTIF), SOIT IMPAIRE (LE SOUS-PRO-
                                     < GRAMME EST ALORS ACTIF).
XACTIV:: VAL         NBITMO-B        < "BIT DE PARITE" CONTROLANT L'ACTIVITE
                                     < DU SOUS-PROGRAMME 'ACTIV'.
XEIF%8:  VAL         ENDIF
         PAGE
<
<
<        T A B L E   D E S   S E M A P H O R E S   C O M M U N S  :
<
<
ASXSER:  WORD        SEXSER          < ALLOCATION DES HANDLERS DE SERVICE
ASMMEM:  WORD        SEMMEM          < ALLOCATEURS MEMOIRE.
ASEXAR:  WORD        SEXAR           < ALLOCATION/RELEASE MEMOIRE.
ASPHEX:  WORD        CSPHEX          < ALLOCATION/RELEASE ESPACE DISQUE.
ASEMDE:  WORD        SEMDE           < DESCRIPTEURS D'ENREGISTREMENTS.
ASAST:   WORD        SAST            < ATTENTE DE FICHIER :ETAT DONNE.
ASXSGF:  WORD        SEXSGF          < GESTION DE FICHIERS.
ASDCTF:  WORD        SDCTF           < ACCES AUX DCTF.
ASAESC:  WORD        SAESC           < ALLOCATION DES ID. ESCLAVES.
ASIDES:  WORD        SIDESC          < SEMAPHORE D'EXCLUSION D'ALLOC.ID.
ASDODO:  WORD        SDODO           < SEMAPHORE DE MISE EN SOMMEIL.
ASEMCD:  WORD        SEMCDA          < SEMAPHORE DE SYNCHRONISATION SUR 'CDAG0'.
ASMATX:  WORD        SMATX           < PHASES CRITIQUES SUR MATX ET ZDC.
ASEMSO:  WORD        SEMSO           < PHASES CRITIQUES HORLOGE-SWAPPER.
         PAGE
<
<
<        O C C U P A T I O N   D E S   E S C L A V E S
<        E T   D E S   H A N D L E R S   D E   S E R V I C E  :
<
<
ATOHDS:  WORD        TOHDS,X         < RELAI DE LA TABLE D'OCCUPATION
                                     < DES HANDLERS DE SERVICE.
ATOESC:  WORD        TOESC,X         < RELAI DE LA TABLE D'OCCUPATION
                                     < DES ESCLAVES (INCLUE DONC
                                     < L'OCCUPATION DE TBU ET DES BLOCS
                                     < DISQUE DE SWAPPING).
ATBU:    WORD        TBU,X           < RELAI DE LA TABLE DES ADRESSES
                                     < DES BLOCS ALLOUES AUX ESCLAVES.
         PAGE
<
<
<        A L L O C A T I O N   M E M O I R E  :
<
<
MEMSIZ:: VAL         MEMORY-K        < TAILLE MEMOIRE ALLOUABLE ;
                                     < (EN DOUBLE-MOTS...)
                                     < LA VALEUR DONNEE ICI EST FARFELUE
                                     < PUISQU'ELLE INCLUT LE SYSTEME.
<
<
<
ATOM:    WORD        TOM,X           < ACCES A TOM EN ADRESSE MOT ET JDX.
ATOMB:   WORD        TOM+IJIJDX,X    < ACCES A TOM EN ADRESSE D'OCTETS.
ATOMP:   WORD        TOMP,X          < ACCES A LA TABLE DES PROPRIETAIRES.
OTOSM:   WORD        K               < SEUIL DE CHANGEMENT DES AUTOMATES
                                     < DE SERVICE NON IMMEDIATS,
                                     < SOIT : NSP>=(HINSP); ON COMPARE
                                     < A CE SEUIL LE NOMBRE D'ALLOCATEURS
                                     < MEMOIRE EN ATTENTE=BETA(SEMMEM).
                                     < (VOIR POUR CELA 'RUNSVC')
<
< TABLE DES BLOCS DE 2K INTERDITS
< AUX BUFFERS : CECI A POUR EFFET D'EVITER
< DES BLOCAGES DU SYSTEME DUS A DES
< IMPLANTATIONS MALHEUREUSES DE DCTESC
< LORS DES LOGIN, ET QUI FINALEMENT
< BLOQUE DES ESPACES 2K, 4K...
<
UMEM2K:: VAL         MEMORK/NBITMO   < NOMBRE DE BLOCS DE 1K REPRESENTES
                                     < PAR LES TABLES 'BUINT' ET 'K2INT'.
L2K::    VAL         LK*UMEM2K       < LONGUEUR EN MOTS DES BLOCS DE 2K...
NL2KB::  VAL         W               < NOMBRE MINIMAL ET PAR DEFAUT DE BLOCS
                                     < DE 2K DANS LESQUELS ON PEUT IMPLANTER
                                     < DES BUFFERS.
BUINT:   WORD        XXLBM           < LISTE DES BLOCS DE 2K AUTORISES :
                                     < '0000-'07FF,
                                     < '0800-'0FFF,
                                     < '1000-'17FF,
                                     < '1800-'1FFF,
                                     < '2000-'27FF,
                                     < '2800-'2FFF,
                                     < '3000-'37FF.
<
< BLOCS DE 2K INTERDITS LORS DES
< ALLOCATIONS 1K, 2K, 4K, 6K, 8K
< (INTERDICTION DUE A DES INTERFERENCES
< FACHEUSES ENTRE L'ALLOCATION
< MEMOIRE UTILISATEUR ET LES DEMANDES
< DE BUFFERS DU SGN) :
<
         IF          UMEM2K*NBITMO-MEMORK,,XEIF%,
         IF          ATTENTION : LA LONGUEUR DE LA LISTE EST IMCOMPATIBLE
         IF          AVEC LA TAILLE DE LA MEMOIRE ALLOUABLE !!!
XEIF%:   VAL         ENDIF
K2INT:   WORD        XXLNBM          < LISTE DES BLOCS DE 2K AUTORISES :
                                     < '3800-'3FFF,
                                     < '4000-'47FF,
                                     < '4800-'4FFF,
                                     < '5000-'57FF,
                                     < '5800-'5FFF,
                                     < '6000-'67FF,
                                     < '6800-'6FFF,
                                     < '7000-'77FF,
                                     < '7800-'7FFF.
         IF          K2INT-BUINT-D,,XEIF%,
         IF          E R R E U R  !!!
                                     < SI K2INT#BUINT+1 (CF. LE
                                     < NSP2K D'ACCES A BUINT ET
                                     < K2INT DANS DCTSY).
XEIF%:   VAL         ENDIF
         PAGE
<
<
<        A L L O C A T I O N   D E   L ' E S P A C E
<        D I S Q U E   A M O V I B L E  :
<
<
<        PHILOSOPHIE :
<                      LE DISQUE AMOVIBLE 'DKM' EST DECOUPE
<                    EN 'NBGB' GRANDS BLOCS 'GB' (NUMEROTES
<                    A PARTIR DE 1).
<                      TOUS LES 'GB' SONT ACCESSIBLES A L'ALLO-
<                    CATEUR DISQUE ; UN SEUL SECTEUR EST INTER-
<                    DIT : C'EST CELUI QUI CORRESPOND A
<                    L'INFINI (Q8000) ; CETTE INTERDICTION
<                    EST REALISEE PAR L'ALLOCATEUR LUI-MEME...
<                      LE NOMBRE TOTAL DE SECTEURS DISPONIBLES
<                    SUR 'DKM' EST DONC DE NBGB*NBSPGB-1,
<                    AVEC : NBGB=NOMBRE TOTAL DE 'GB',
<                           NBSPGB=NOMBRE DE SECTEURS PAR 'GB'.
<
<
NBGB::   VAL         '20-1           < NOMBRE DE GRANDS BLOCS TOTAL ; -1, CAR
                                     < CE DISQUE 50 MEGA-OCTETS NE FAIT PAS
                                     < EXACTEMENT 50 MEGA-OCTETS...
NBSPGB:: VAL         YY7*NBITMO      < NOMBRE DE SECTEURS PAR 'GB' : AINSI LA
                                     < TABLE D'ALLOCATION D'UN 'GB' OCCUPE
                                     < YY7 MOTS, SOIT UN SECTEUR...
X2::     VAL         NBSPGB          < NOMBRE DE SECTEURS PAR 'GB'.
NSTO::   VAL         NBGB            < NOMBRE DE SECTEURS UTILISES PAR LA
                                     < TABLE D'ALLOCATION DE L'ENSEMBLE
                                     < DES 'GB'.
NSDKF:  @
XWOR%1:  VAL         KOLF=FMASK+KOLTES=FVAL
XWOR%1:  VAL         KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2:  VAL         KOLTED=FMASK+KOL0=FVAL
XWOR%2:  VAL         KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3:  VAL         XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE 'NSDKF'...
XWOR%4:  VAL         MSYMBI=FMASK+KOL0=FVAL
XWOR%4:  VAL         MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
         IF          XWOR%4=FCSYMT-SYMBX,XEIF%,,XEIF%
XWOR%5:  VAL         2
NSDKF::  VAL         NBSPGB*XWOR%5   < NOMBRE DE SECTEURS DE 'DKF'.
XEIF%:   VAL         ENDIF
TDKM::   VAL         NBGB*NBSPGB
                                     < NOMBRE DE SECTEURS ALLOUABLES SUR 'DKM'.
         NTRN
NUQFM::  VAL         NSDKF+QUANTA-E/QUANTA+NBSPGB-E/NBSPGB*NBSPGB
         TRN
                                     < NOMBRE D'UNITES DE 'QUANTA' SECTEURS
                                     < UTILISES SUR 'DKM' POUR SIMULER 'DKF'.
SDKM::   VAL         TDKM-NUQFM      < NOMBRE DE SECTEURS RESTANT SUR 'DKM',
                                     < UNE FOIS QU'ON A PRIS EN COMPTE LA ZONE
                                     < DE SIMULATION/COPY DE 'DKF' SUR 'DKM'.
<
<
<        E S P A C E   L I B R E   S U R  ' D K M '  :
<
<
NSL:     WORD        SDKM            < ET VOILA...
<
<
<        O C C U P A T I O N   D U   D I S Q U E
<                    F I X E   ' D K F ' :
<
<
<        PHILOSOPHIE :
<                      LE DISQUE FIXE N'EST PAS ALLOUABLE ;
<                    MALGRE TOUT SA CAPACITE CORRESPOND
<                    A 2 'GB' :
<                    1 - LE PREMIER EST OCCUPE PAR 'TOGB'
<                    'TP' ET L'ARBRE DU SYSTEME.
<                    2 - LE SECOND CONTIENT LES ZONES DE
<                    SWAPPING AINSI QUE LES PROCESSEURS
<                    DE BASE DE CMS5.
<
<
XWOR%1:  VAL         NBITMO=K        < UN 'SB' EST REPRESENTE PAR 1 MOT,
XWOR%2:  VAL         YY7=K           < UN 'GB' EST REPRESENTE PAR UN BUFFER.
DECON::  VAL         XWOR%1+XWOR%2   < AMPLITUDE DES DECALAGES DE
                                     < CONCATENATION/DECONCATENATON.
<
< RELAIS DES TABLES :
<
ANSLGB:  WORD        NSLGB,X
ATOGB:   WORD        TOGB,X
<
< CONSTANTES D'ALLOCATION/RELEASE :
<
NSMGB:   WORD        X2              < NBRE DE SECTEURS MAX DANS UN 'GB'.
NUGBC:   WORD        NBGB            < NUMERO+1 DU 'GB' COURANT ;
                                     < INITIALISE SUR LE 'GB0' (1ER
                                     < 'GB' A L'INITIALISATION DU
                                     < SYSTEME).
<
< SEMAPHORE D'ALLOCATION :
<
SGETS:   WORD        XXSEM0          < SEMAPHORE DE BLOCAGE DE L'ALLOCA-
                                     < TEUR DIQUE LORSQU'IL N'Y A PLUS
                                     < DE SECTEURS LIBRES ; IL ATTEND UN
                                     < REVEIL DU RELEASEUR...
         PAGE
<
<
<        G R A N D   B L O C   D E   S W A P P I N G  :
<
<
TZSCRA:: VAL         40              < NOMBRE DE SECTEURS OCCUPES PAR LA
                                     < ZONE SCRATCH DES UTILISATEURS.
MXMEME:: VAL         '8000           < NOMBRE MAXIMAL D'OCTETS ALLOUABLES
                                     < A L'ESPACE MEMOIRE UTILISATEUR.
XWOR%1:  VAL         YY8=K
XWOR%1:  VAL         -XWOR%1
XWOR%2:  VAL         MXMEME>XWOR%1   < NOMBRE DE SECTEURS NECESSAIRES AU
                                     < SWAPPING UTILISATEUR.
TZPROG:: VAL         XWOR%2          < NOMBRE DE SECTEURS NECESSAIRES POUR LE
                                     < SWAPPING DE L'ESPACE UTILISATEUR PRO-
                                     < PREMENT DIT.
XWOR%7:  VAL         YY7*TZPROG/LK   < NOMBRE DE K-MOTS UTILISES AU MAXIMUM
                                     < POUR L'ESPACE UTILISATEUR.
         NTRN
XWOR%8:  VAL         XX64K/XWOR%7
         TRN
         IF          XWOR%8*XWOR%7-XX64K,,XEIF%,
         IF          ATTENTION : LA ZONE DE SWAPPING UTILISATEUR
         IF          SUR 'PR1' NE DOIT PAS ETRE A CHEVAL SUR DES
         IF          FRONTIERES DE 64K ; CE TEST SERA COMPLETE
         IF          DANS 'DCTPR1' PAR UNE VALIDATION IDENTIQUE
         IF          SUR L'ADRESSE DE DEBUT DE CETTE MEME ZONE !!!
         IF          (ET CECI A CAUSE DES ENTREES-SORTIES AU-DELA DE 64K...)
XEIF%:   VAL         ENDIF
TCPROG:: VAL         TZPROG          < TAILLE DE LA 'CDA' ; CELLE-CI DOIT
                                     < INCLURE LA ZONE PROGRAMME 'TZPROG'...
         IF          TCPROG-TZPROG,,XEIF%,XEIF%
         IF          ATTENTION : LA "!CDAP" NE PEUT CONTENIR
         IF          LA ZONE PROGRAMME 'TZPROG' !!!
XEIF%:   VAL         ENDIF
XWOR%6:  VAL         LK=K
XWOR%6:  VAL         -XWOR%6
XWOR%5:  VAL         YY7*TCPROG>XWOR%6
XWOR%4:  VAL         XX64K/XWOR%5    < DONNE LE NOMBRE DE "!CDAP" QUE L'ON
                                     < PEUT METTRE DANS 64K... CE NOMBRE DOIT
                                     < ETRE ENTIER (MERCI 'TRN'/'NTRN').
<*******************************************************************************
TZSWAP:: VAL         TZPROG+TZSCRA   < NOMBRE DE SECTEURS OCCUPES PAR LA
                                     < ZONE DE SWAPPING DE CHAQUE UTILI-
                                     < SATEUR.
TZSWAP: @VAL         '0@@@@          < TAILLE DE LA ZONE DE SWAP UTILISATEUR.
         CALL        #SISP CMS5 GEN DEF#
<*******************************************************************************
X16::    VAL         X20*TZSWAP      < NOMBRE DE SECTEURS RESERVES POUR LE
                                     < SWAPPING UTILISATEUR SUR 'DKF'.
ASYS:    WORD        SECTSY          < CONSTANTE DE TRANSLATION DES
                                     < ADRESSES DES ZONES DE SWAPPING
                                     < DES UTILISATEURS (DUE AU FAIT
                                     < QUE LE SYSTEME N'EST PLUS
                                     < IMPLEMENTE A PARTIR DE 0 SUR
                                     < LES DISQUES DE SWAPPING !!!)
         IF          TVLIMA*LK/YY7-TZSCRA,XEIF%,XEIF%,
         IF          ATTENTION : LA ZONE SCRATCH NE TIENT MEME PAS UNE TRAME !!!
XEIF%:   VAL         ENDIF
<
<        F O R M A T   D ' U N   B L O C   D E   S W A P P I N G  :
<
<
<        DEFINITION :
<                    1 - LES 'TZSWAP'-'TZSCRA' PREMIERS SECTEURS
<                    CONTIENNENT LA ZONE DE SWAPPING DE L'ESPACE
<                    MEMOIRE DE CHAQUE UTILISATEUR.
<
<                    2 - LES 'TZSCRA' SECTEURS SUIVANTS CONTIEN-
<                    NENT LA ZONE SCRATCH DE CHAQUE UTILISATEUR ;
<                    MAIS ATTENTION, CETTE ZONE N'EST RENCONTREE
<                    QUE SUR 'DKS' ; 'PR1' N'EN DISPOSE PAS AFIN QUE
<                    LES ZONNES DE SWAPPING (QUI SONT AUSSI LES
<                    ZONES DE 'RUNO') NE SOIENT PAS A CHEVAL SUR
<                    DES FRONTIERES DE 64K, ET CECI A CAUSE DES
<                    ENTREES-SORTIES AU-DELA DES 64 PREMIERS K...
<
<
<        NOTA IMPORTANT :
<                      'TZSWAP' N'ETANT PAS DIVISIBLE EXACTEMENT
<                    PAR 32, IL Y A UN DEPHASAGE IMPLICITE DES
<                    ZONES DE SWAPPING ; CETTE NOTION N'EST DONC
<                    PLUS EXPLICITEE ACTUELLEMENT.
<
<
XNSPDK:: VAL         32              < NOMBRE DE SECTEURS PAR PISTE SUR 'DKF'.
XWOR%2:  VAL         XNSPDK
         NTRN
XWOR%1:  VAL         TZSWAP/XWOR%2
         TRN
         IF          XWOR%1*XWOR%2-TZSWAP,XEIF%,,XEIF%
         IF          A T T E N T I O N  : JE MENS !!!
XEIF%:   VAL         ENDIF
         PAGE
<
<
<        G E S T I O N   D E   F I C H I E R S  :
<
<
LTEDF::  VAL         YY7             < LONGUEUR DE LA TABLE TEDF.
NBITEF:: VAL         NBITCX          < NOMBRE DE BITS PAR "ETAT FICHIER"...
NMFILE:: VAL         LTEDF*NBITMO/NBITEF < NOMBRE MAX DE FICHIERS RECONNUS.
LMTATP:: VAL         NDCTF           < LONGUEUR MAX EN DOUBLE-MOTS
                                     < DE LA TABLE ASSOCIATIVE TATP.
NMBA::   VAL         -1              < NBRE MAX DE BUFFERS LIBRES EN
                                     < STOCK.
MSTOCS:: VAL         8               < NBRE MAX DE SECTEURS QUE PLSC
                                     < EST AUTORISE A STOCKER.
NSTP::   VAL         NMFILE          < NBRE DE SECTEURS OCCUPES PAR TP.
XXTP1M:: VAL         15              < MARGE DE SECURITE...
                                     < (MAIS A QUOI SERT-ELLE DONC ???)
<
<        T A B L E   D E S   P A R T I T I O N S   F I C H I E R S  :
<
NUSF::   VAL         YM7             < NUMERO /0 DU MOT D'UNE TP
                                     < CONTENANT LE NBRE D'UTILISATEURS
                                     < SIMULTANES SUR UN FICHIER.
ATEDF:   WORD        TEDF,X
ATADF:   WORD        TADF-IJIJDX,X   < RELAI VERS LA LISTE DE BITS INDI-
                                     < QUANT SI LES FICHIER SONT EN
                                     < ATTENTE OU EN COURS DE DELETE.
AINITP:  WORD        NILX            < RELAI NON REENTRANT D'INITIALISATION
                                     < DE LA TP D'UN FICHIER.
NBATP:   WORD        K               < NBRE COURANT DE BUFFER LIBRES
                                     < EN STOCK (< OU = A NMBA).
LTATP:   WORD        NILK            < LONGUEUR COURANTE DE TATP.
UTATP::  VAL         D+D             < 'TP' EST UNE TABLE DE DOUBLE-MOTS.
ATATP:   WORD        TATP            < ADRESSE DE TATP.
ATATPI:  WORD        TATP+UTATP-D    < ADRESSE DE TATP+1
ATATP0:  WORD        TATP,X          < RELAI DE TATP POUR ATTEINDRE
                                     < LES ENTREES PAIRE (NOMS DIRECTS
                                     < DES FICHIERS PRESENTS DANS TATP.
ATATP1:  WORD        TATP+IJIJDX,X   < RELAI DE TATP POUR ATTEINDRE
                                     < LES ENTREES IMPAIRES (ADRESSES
                                     < DES BUFFERS ASSOCIEES AUX
                                     < NOMS DIRECTS DES FICHIERS
                                     < PRESENTS DAN SLA TABLE ASSOCIATIVE.
AALBTP:  WORD        ALBTP           < ADRESSE BLOC D'ALLOCATION 1 BUFFER.
ARLBTP:  WORD        RELBTP          < ADRESSE BLOC DE RELEASE 1 BUFFER.
ATNSPF:  WORD        TNSPF-IJIJDX,X  < RELAI DE LA TABLE INDIQUANT
                                     < SI UNE 'DCTF' PEUT AVOIR ACCES
                                     < A LA MEMOIRE VIRTUELLE 'DKB'.
<
<        C O N S T A N T E S  :
<
NSTOCS:  WORD        K               < NBRE COURANT DE SECTEURS QUE PLSC
                                     < A EN STOCK DANS STOCS.
ASTOCS:  WORD        STOCS,X         < POINTEUR DE LA PILE DE STOCKAGE.
PEK:     WORD        NILK            < PEK DE LA CLEF RECHERCHEE.
PDK:     WORD        NILK            < PDK DE LA CLEF RECHERCHEE.
LIST0:   WORD        NILK            < POUR REPRISE D'UNE EXPLORATION
                                     < SEQUENTIELLE D'UNE TP.
TEST1:   WORD        NILK            < RESULTAT DE PARCOURS DE LA
                                     < LISTE SEQUENTIELLE D'UNE PARTI
                                     < TION.
TEST2:   WORD        NILS            < ADRESSE SECTEUR ASSOCIEE.
NEXPE:   WORD        NILK            < PEK DE LA BORNE SUPERIEURE
                                     < COURANTE D'UNE CLEF.
NEXPD:   WORD        NILK            < PDK DE LA BORNE SUPERIEURE
                                     < COURANTE D'UNE CLEF.
NEXAS:   WORD        NILS            < ADRESSE SECTEUR DE LA BORNE
                                     < SUPERIEURE COURANTE D'UNE CLEF.
NEXW:    WORD        NIL             < ADRESSE DESCRIPTEUR DE LA BORNE
                                     < SUPERIEURE COURANTE D'UNE CLEF.
AADD:    WORD        NIL             < AVANT DERNIER DESCRIPTEUR DE
                                     < CLEF RENCONTRE LORS DE
                                     < L'EXPLORATION D'UNE LISTE
                                     < SEQUENTIELLE.
AADS:    WORD        NILS            < ADRESSE DU SECTEUR DE L'AVANT
                                     < DERNIER DESCRIPTEUR.
NMFIL:   WORD        NMFILE          < NOMBRE MAXIMUM DE FICHIERS SGF
                                     < SUPPORTES PAR CMS4.
C6000:   WORD        EXXPL8
C7FF:    WORD        BXXPL4          < MASQUE DU NOM-DIRECT FICHIER.
C1FFF:   WORD        EMXKE1          < MASQUE DE RECUPERATION DE PEK.
CE000:   WORD        AMXPL1          < CONSERVATION DES 3 BITS DE TETE.
<
<        D E S C R I P T E U R S   D ' E N R E G I S T R E M E N T  :
<
ATDE:    WORD        TDE             < ADRESSE DU POOL DES DESCRIPTEURS
                                     < D'ENREGISTREMENTS.
ATODE:   WORD        TODE,X          < RELAI VERS LA TABLE D'OCCUPATION
                                     < DES DESCRIPTEURS D'ENREGISTREMENTS.
<
<        D C T   D E   G E S T I O N   D E   F I C H I E R S  :
<
AODCTF:  WORD        TODCTF,X        < RELAI VERS LA TABLE D'OCCUPATION
                                     < DES DCTF.
AFOFIL:  WORD        FOFIL,X         < RELAI DES FONCTIONS 'SGF'.
         PAGE
<
<
<        B L O C S   D E   D E M A N D E S
<        D E   G E T I O N   D E   T A T P  :
<
<
<
< DEMANDE D'ECRITURE D'UN SECTEUR DE 'TP'
< EN MODE PRIORITAIRE SUR 'DKA' :
<
WTP:     BYTE        NSPDKA;XDPRIO?XDSYM
         WORD        FGW             < ECRITURE,
         WORD        NIL             < ADRESSE OCTET DU 1ER MOT A ECHANGER.
         WORD        YY8             < ON ECRIT UN SEUL SECTEUR.
WTPAS:   WORD        NILS            < ADRESSE DU PREMIER SECTEUR A ECRIRE.
         DZS         LDEM0+WTP-$     < ETADEM, WEIO, NEXT.
<
< DEMANDE DE LECTURE D'UN SECTEUR DE 'TP'
< SUR 'DKA' EN MODE PRIORITAIRE :
<
RTP:     BYTE        NSPDKA;XDPRIO?XDSYM
         WORD        FGR             < LECTURE,
         WORD        NIL             < ADRESSE OCTET DU 1ER MOT A ECHANGER.
         WORD        YY8             < ON LIT UN SEUL SECTEUR.
         WORD        NILS            < ADRESSE DU 1ER SECTEUR A LIRE.
         DZS         LDEM0+RTP-$     < ETADEM, WEIO, NEXT.
         PAGE
<
<
<        D E M A N D E S   D ' E / S   P R I O R I T A I R E S
<        P O U R   L E S   C L E F S   D E S   F I C H I E R S  :
<
<
<
< BLOC D'ENTREE-SORTIE DISQUE
< EN MODE PRIORITAIRE :
<
PLSCDK:  BYTE        NILK;XDPRIO?XDSYM
         WORD        NILK            < SENS DE L'OPERATION.
PLSCAM:  WORD        NIL             < ADRESSE OCTET DU BUFFER.
         WORD        YY8             < YY7 MOTS A ECHANGER.
PLSCAS:  WORD        NILS            < ADRESSE DU SECTEUR.
         DZS         LDEM0+PLSCDK-$
<
< DEMANDE D'ALLOCATION/RELEASE
< DE L'ESPACE-DISQUE POUR 'PLSC' :
<
XXSSGF:: VAL         W               < NOMBRE DE SECTEURS A ALLOUER OU
                                     < A RELEASER D'UN COUP DANS 'PLSC'.
RALSC:   BYTE        K;XDPRIO        < NSPGET/NSPREL ; MODE PRIORITAIRE.
         WORD        K
RASCAM:  WORD        NIL             < ADRESSE MEMOIRE OU METTRE L'ADRESSE
                                     < DU SECTEUR ALLOUE.
         WORD        XXSSGF          < DEMANDE D'1 SECTEUR.
         DZS         LDEM0+RALSC-$
         PAGE
<
<
<        Z O N E   P A T C H   A D R E S S A B L E
<                    D U   C O M M O N  :
<
<
PATCH4:  EQU         $
         DO          COM-$+DEPCS+DEPCS
         WORD        K               < MOT LIBRE ET ADRESSABLE.
         PAGE
<
<
<        N O M S   D E   C E R T A I N S   N I V E A U X  :
<
<
<        NOTA :
<                      CES NOMS SONT PLACES EN MEMOIRE
<                    BASSE CAR 'TH0' GENERE DES RELAIS
<                    INDEXES VERS EUX...
<
<
         IF          $-ZERO-NSPLST,,,XEIF%
         IF          ATTENTION : LES ADRESSES DES NOMS VONT RESSEBLER
         IF          A DES 'NSP', D'OU CONFLIT DANS 'DCTIT' !!!
XEIF%:   VAL         ENDIF
         IF          $-ZERO-K,,,XEIF%
         IF          ATTENTION : LES ADRESSES DES NOMS DOIVENT ETRE
         IF          DANS L'ESPACE DEFINI PAR 'DOL1' !!!
XEIF%:   VAL         ENDIF
MXDMP:   EQU         $
       #@ASCI        " DMP"          < #SISP CMS5 ASCI#
MXTOP:   EQU         $
       #@ASCI        " TOP"          < #SISP CMS5 ASCI#
MXTRA:   EQU         $
       #@ASCI        " TRA"          < #SISP CMS5 ASCI#
MXTO:    EQU         $
       #@ASCI        " TO "          < #SISP CMS5 ASCI#
MXIPI:   EQU         $
       #@ASCI        " IPI"          < #SISP CMS5 ASCI#
MXCBM:   EQU         $
       #@ASCI        " CBM"          < #SISP CMS5 ASCI#
MXCBJ:   EQU         $
       #@ASCI        " CBJ"          < #SISP CMS5 ASCI#
MXXXX:   EQU         $
       #@ASCI        " XXX"          < #SISP CMS5 ASCI#
<
< ZONE DE PATCH :
<
PATCHI:: VAL         8               < LONGUEUR DE LA ZONE DE PATCH 'DCTIT',
                                     < ET TABLE DES NOMS DE PERIPHERIQUES.
         DZS         LHNAME*PATCHI   < ZONE DE PATCH...
         PAGE
<
<
<        L I S T E   D E S   I N T E R R U P T I O N S  :
<
<
<        FORMAT :
<                      CETTE TABLE A UN FORMAT DE MOTS,
<                      CETTE TABLE EST INDEXEE PAR LES NIVEAUX
<                    GENERALISES D'INTERRUPTIONS (QU'ELLE
<                    DEFINIT AU PASSAGE) ; ELLE A UN FORMAT
<                    DE MOT, ET CONTIENT :
<                    1 - SOIT UN 'NSP' : LORSQUE LE NIVEAU
<                    GENERALISE EST CELUI D'UNE INTERRUPTION
<                    REELLE, ON TROUVE ALORS LE 'NSP' DE LA
<                    TACHE ASSOCIEE.
<                    2 - SOIT UNE ADRESSE (EN MEMOIRE BASSE POUR
<                    DES RAISONS D'INDEXATION DANS 'TH0') DE
<                    NOM DE NIVEAU GENERALISE LORSQU'IL
<                    S'AGIT D'ENTREES SPECIALES DANS LA TRACE.
<                      DE PLUS CETTE TABLE EST ABSOLUE,
<                    C'EST-A-DIRE QUE SON ORGANISATION
<                    EST INDEPENDANTE DES NSP (CONTRAI-
<                    REMENT A DCTSY), ET EST LIEE A
<                    LA CONFIGURATION DU CALCULATEUR :
<
<
<        NOTA :
<                      EN COMMENTAIRE, ON DONNE LES
<                    NIVEAUX D'IT REELS ASSOCIES A
<                    CHAQUE DCT PERIPHERIQUE.
<
<
<        IMPORTANT :
<                      POUR DES RAISONS DE SIMPLICITE
<                    DE PARAMETRAGE, POUR TOUS LES
<                    PERIPHERIQUES UTILISANT LE MODE
<                    CANAL, ON FAIT :
<                    SOUS-NIVEAU EXCEPTION = ITN...
<
<
CUMITN:: VAL         K               < INITIALISATION DU CUMUL DES 'ITN'
                                     < DES PERIPHERIQUES GERES EN MODE CANAL
                                     < 'LDC' ; IL EST EST EVIDENT QU'ILS
                                     < NE PEUVENT ETRE IDENTIQUES 2 A 2 A
                                     < CAUSE DES CONTEXTES...
         CALL        #SISP CMS5 DOL2#
DCTIT:   EQU         $
<
<        F A U X   N I V E A U X  :
<
XNDMP::  VAL         $-DCTIT         < NIVEAU DE 'DUMP'.
         WORD        MXDMP
FNTOP::  VAL         $-DCTIT         < NIVEAU DE 'TOP 1 SECONDE'.
         WORD        MXTOP
XNTRA::  VAL         $-DCTIT         < NIVEAU 'ENTREE DANS TH0'.
         WORD        MXTRA
FNTO::   VAL         $-DCTIT         < NIVEAU 'TIME OUT DETECTE'.
         WORD        MXTO
<
<        D E F I N I T I O N   D E S   ' C B M '  :
<
NIVCBM:: VAL         '01             < 'CBM' DE LA TELEVISION BASSE DEFINITION,
NIVCBJ:: VAL         '02             < 'CBJ' DE LA TELEVISION MOYENNE DEFINI-
                                     < TION.
<
<        N I V E A U   ' 0 4 :
<
NIVTH4:: VAL         '04
NTRAN4:: VAL         $-DCTIT
         WORD        NSPCU1          < SOUS-NIVEAU 0.
         WORD        MXXXX
         WORD        NSPCU1          < SOUS-NIVEAU 2.
XSNCU1:: VAL         $-DCTIT-NTRAN4-D < SOUS-NIVEAU NORMAL D'INTERRUPTION.
         WORD        MXXXX
         WORD        NSPCU2          < SOUS-NIVEAU 4.
         WORD        MXXXX
         WORD        NSPCU2          < SOUS-NIVEAU 6.
XSNCU2:: VAL         $-DCTIT-NTRAN4-D < SOUS-NIVEAU NORMAL D'INTERRUPTION.
<*******************************************************************************
         CALL        #SISP CMS5 VALITN#
         WORD        MXXXX
         WORD        NSPCU3
         WORD        MXXXX
         WORD        NSPCU3          < SOUS-NIVEAU 10.
XSNCU3:: VAL         $-DCTIT-NTRAN4-D < SOUS-NIVEAU NORMAL D'INTERRUPTION.
YTRAN4:: VAL         $-DCTIT-NTRAN4  < NOMBRE DE SOUS-NIVEAUX.
<
<        N I V E A U   ' 0 6
<
NIVTH6:: VAL         '06
NTRAN6:: VAL         $-DCTIT
NSNMX1:: VAL         2               < NORMAL+EXCEPTION,
NSNMX2:: VAL         4               < ET 4 SOUS-NIVEAUX PAR COUPLEUR.
NSNMX::  VAL         NSNMX1*NSNMX2   < NOMBRE DE SOUS-NIVEAUX PAR COUPLEUR
                                     < 'MXR' : 4 NORMAUX + 4 EXCEPTION.
         DO          NSNMX
         WORD        NSPMUL
         DO          NSNMX
         WORD        NSPMUL
YTRAN6:: VAL         $-DCTIT-NTRAN6  < NOMBRE DE SOUS-NIVEAUX.
<
<        N I V E A U   ' 0 D  :
<
NIVTHD:: VAL         '0D
NTRAND:: VAL         $-DCTIT         < DEPLACEMENT DU NIVEAU '0D
         WORD        NSPHOR          < SOUS-NIVEAU=K.
YTRAND:: VAL         $-DCTIT-NTRAND  < NOMBRE DE SOUS-NIVEAUX.
<
<        N I V E A U   ' 0 E  :
<
NIVTHE:: VAL         '0E
NTRANE:: VAL         $-DCTIT         < DEPLACEMENT DU NIVEAU '0E
         WORD        NSPDKF          < SOUS-NIVEAU=K.
XSNDKF:: VAL         $-DCTIT-NTRANE-D < SOUS-NIVEAU NORMAL D'INTERRUPTION.
         WORD        NSPDKU          < SOUS-NIVEAU=1.
XSNDKU:: VAL         $-DCTIT-NTRANE-D < SOUS-NIVEAU NORMAL D'INTERRUPTION.
         WORD        NSPMT1          < SOUS-NIVEAU=2.
XSNMT1:: VAL         $-DCTIT-NTRANE-D < SOUS-NIVEAU NORMAL D'INTERRUPTION.
         WORD        NSPDKM          < SOUS-NIVEAU=3.
XSNDKM:: VAL         $-DCTIT-NTRANE-D < SOUS-NIVEAU NORMAL D'INTERRUPTION.
         WORD        NSPCR1          < SOUS-NIVEAU=4.
XSNCR1:: VAL         $-DCTIT-NTRANE-D < SOUS-NIVEAU NORMAL D'INTERRUPTION.
<*******************************************************************************
         CALL        #SISP CMS5 VALITN#
         WORD        NSPCR2          < SOUS-NIVEAU=5.
XSNCR2:: VAL         $-DCTIT-NTRANE-D < SOUS-NIVEAU NORMAL D'INTERRUPTION.
<*******************************************************************************
         CALL        #SISP CMS5 VALITN#
         WORD        MXXXX
         WORD        NSPLP1          < SOUS-NIVEAU=7.
XSNLP1:: VAL         $-DCTIT-NTRANE-D < SOUS-NIVEAU NORMAL D'INTERRUPTION.
<*******************************************************************************
         CALL        #SISP CMS5 VALITN#
YTRANE:: VAL         $-DCTIT-NTRANE  < NOMBRE DE SOUS-NIVEAUX.
<
<        N I V E A U   ' 0 F  :
<
NIVTHF:: VAL         '0F
NTRANF:: VAL         $-DCTIT         < DEPLACEMENT DU NIVEAU '0F
         WORD        NSPTYS          < SOUS-NIVEAU=K.
YTRANF:: VAL         $-DCTIT-NTRANF  < NOMBRE DE SOUS-NIVEAUX.
<
<        B I Z A R E R I E  :
<
XWOR%1:  VAL         9               < ??!??!
         DO          XWOR%1
         WORD        MXXXX
<
<        D I V E R S  :
<
NPIPI::  VAL         $-DCTIT         < NIVEAU 'IPI' RECU DANS 'TH0'.
         WORD        MXIPI
NPCBM::  VAL         $-DCTIT         < NIVEAU 'DEFAUT' SUR LE 'CBM' DE LA
                                     < TELEVISION BASSE DEFINITION.
         WORD        MXCBM
NPCBJ::  VAL         $-DCTIT         < NIVEAU 'DEFAUT' SUR LE 'CBJ' DE LA
                                     < TELEVISION MOYENNE DEFINITION.
         WORD        MXCBJ
<
<        S O U S - N I V E A U   M U L T I P L E X E U R  :
<
DCTITV:  EQU         $
NPDPR::  VAL         DCTITV-DCTIT    < CONSTANTE DE TRANSLATION DE PASSAGE
                                     < DES NUMEROS DE VOIES AU NIVEAU GENE-
                                     < RALISE D'INTERRUPTION DES VISUS.
         WORD        NSPVI1          < (X)=K,
         WORD        NSPVI2          < (X)=1,
         WORD        NSPVI3          < (X)=2,
         WORD        NSPVI4          < (X)=3,
         WORD        NSPVI5          < (X)=4,
         WORD        NSPVI6          < (X)=5,
         WORD        NSPVI7          < (X)=6,
         WORD        NSPVI8          < (X)=7.
YTRANV:: VAL         $-DCTITV        < NOMBRE DE SOUS-NIVEAUX.
         NTRN
         IF          YTRANV/NSNMX2(K=FCREST,,XEIF%,
         IF          PETITE BIZARRERIE DANS LES VISUS ???
XEIF%:   VAL         ENDIF
         TRN
<
<        D E R N I E R   N I V E A U  :
<
X69::    VAL         $-D-DCTIT       < DERNIER NIVEAU...
         DZS         PATCHI          < ZONE PATCH DE 'DCTIT'.
         CALL        #SISP CMS5 DOL1#
         PAGE
<
<
<        S Y S T E M E   D ' A S S I G N A T I O N S
<                    I M P L I C I T E S  :
<
<
<        FONCTION :
<                      CETTE TABLE DE MOTS EST UTILISEE
<                    PAR LES 'SVC' ET PERMET AUX UTILISATEURS
<                    DE REFERENCER DES 'NSP' QU'ILS N'AURONT
<                    PAS ASSIGNE EXPLICITEMENT.
<
<
<        FORMAT DE LA TABLE :
<
<
XXPAS0:: VAL         MOCG            < DONNE L'ETAT INITIAL DE CETTE ENTREE.
XXPAS1:: VAL         MOCD            < DONNE L'ETAT COURANT DE CETTE ENTREE ;
                                     < EN EFFET LORS D'UN !ASSIGN EXPLICITE,
                                     < ON RECHERCHE LE 'NSP' ASSIGNE (S'IL
                                     < N'EST PAS PARTAGEABLE) DANS CETTE TABLE,
                                     < SI ON LE TROUVE, ON L'ENLEVE...
XYPAS0:: VAL         XXPAS0=K        < POUR LES DECALAGES...
XYPAS1:: VAL         XXPAS1=K        < POUR LES DECALAGES...
XXPASI:: VAL         XASSIM          < BIT DE 'XXPAS1' INDIQUANT :
                                     < 0 : (XXPAS1)='NSP',
                                     < 1 : (XXPAS1)='NVP'.
XYPASI:: VAL         XXPAS1)MMOT=K+XXPASI
XWOR%1:  VAL         XYPASI-B
XMPASI:: VAL         BIT>XWOR%1      < MASQUE DANS 'XXPAS1' DE DISCRIMINATION
                                     < DES 'NSP' ET DES 'NVP'...
<
<
<        PHASES CRITIQUES D'ECRITURE DANS 'TIMPAS' :
<                      ELLES SONT RESOLUES PAR 'LODCT' ET
<                    'DELDCT' A L'AIDE DES SEMAPHORES 'SPHEX'
<                    DES 'NSP' EN CAUSE...
<
<
TIMPAS:  EQU         $
NVPSER:: VAL         PHSER           < POUR LES SERVICES IMMEDIATS PAR 'SVC'.
         WORD        K               < LE 'NVP' NUL N'EXISTE PAS...
XWOR%1:  VAL         XXPAS0?XXPAS1
XWOR%2:  VAL         XXPAS0+XXPAS1
         IF          XWOR%1-XWOR%2,,XEIF%,
         IF          ATTENTION : LE CODAGE QUI SUIT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         WORD        COSWBR=FMASK(K?PHIN?XMPASI=FCPUSH=FCINST=FCPULL
NVPIN::  VAL         $-D-TIMPAS      < 'NVP' STANDARD D'ENTREE.
         IF          PHIN-NVPIN,,XEIF%,
         IF          ATTENTION : LE 'NVP' STANDARD D'ENTREE EST BIZARRE !!!
XEIF%:   VAL         ENDIF
         WORD        COSWBR=FMASK(K?PHOUT?XMPASI=FCPUSH=FCINST=FCPULL
NVPOUT:: VAL         $-D-TIMPAS      < 'NVP' STANDARD DE SORTIE.
         IF          PHOUT-NVPOUT,,XEIF%,
         IF          ATTENTION : LE 'NVP' STANDARD DE SORTIE EST BIZARRE !!!
XEIF%:   VAL         ENDIF
         WORD        COSWBR=FMASK(K?NSPDLN=FCPUSH=FCINST=FCPULL
NVPDLN:: VAL         $-D-TIMPAS      < 'NVP' D'ACCES A 'HDLDLN'.
         WORD        COSWBR=FMASK(K?NSPSTN=FCPUSH=FCINST=FCPULL
NVPSTN:: VAL         $-D-TIMPAS      < 'NVP' D'ACCES A 'HDLSTN'.
         WORD        COSWBR=FMASK(K?NSPLON=FCPUSH=FCINST=FCPULL
NVPLON:: VAL         $-D-TIMPAS      < 'NVP' D'ACCES A 'HDLLON'.
         WORD        COSWBR=FMASK(K?NSPLNS=FCPUSH=FCINST=FCPULL
NVPLNS:: VAL         $-D-TIMPAS      < 'NVP' D'ACCES A 'HDLLNS'.
         WORD        COSWBR=FMASK(K?NSPLNU=FCPUSH=FCINST=FCPULL
NVPLNU:: VAL         $-D-TIMPAS      < 'NVP' D'ACCES A 'HDLLNU'.
         WORD        COSWBR=FMASK(K?NSPNXP=FCPUSH=FCINST=FCPULL
NVPNXP:: VAL         $-D-TIMPAS      < 'NVP' D'ACCES A 'HDLNXP'.
         WORD        COSWBR=FMASK(K?NSPNXS=FCPUSH=FCINST=FCPULL
NVPNXS:: VAL         $-D-TIMPAS      < 'NVP' D'ACCES A 'HDLNXS'.
         WORD        COSWBR=FMASK(K?NSPDKU=FCPUSH=FCINST=FCPULL
NVPDKU:: VAL         $-D-TIMPAS      < 'NVP' STANDARD D'ACCES A 'DKU'.
         WORD        COSWBR=FMASK(K?NSPCU3=FCPUSH=FCINST=FCPULL
NVPCU3:: VAL         $-D-TIMPAS      < 'NVP' STANDARD D'ACCES A 'CU3'.
NSPVDK:: VAL         NSPVI4          < 'NSP' STANDARD D'ACCES AU DISQUE VIDEO.
         WORD        COSWBR=FMASK(K?NSPVDK=FCPUSH=FCINST=FCPULL
NVPVDK:: VAL         $-D-TIMPAS      < 'NVP' STANDARD D'ACCES AU DISQUE VIDEO.
<
< ZONE DE PATCH DE LA TABLE 'TIMPAS' :
<
XWOR%1:  VAL         $-ZERO
         WORD        COSWBR=FMASK(K?PHIN?XMPASI=FCPUSH=FCINST=FCPULL
         WORD        COSWBR=FMASK(K?PHOUT?XMPASI=FCPUSH=FCINST=FCPULL
PIMPAS:: VAL         $-ZERO-XWOR%1   < LONGUEUR DE LA ZONE DE PATCH...
LIMPAS:: VAL         $-TIMPAS        < NOMBRE D'ENTREES DE 'TIMPAS'...
         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  :
<
<
<        FONCTION :
<                      LA TABLE 'TOM' DONNE L'ETAT
<                    D'ALLOCATION DE LA PREMIERE
<                    MOITIE DE LA MEMOIRE MAITRE,
<                    A RAISON D'UN BIT PAR BUFFER
<                    DE 128 MOTS.
<
<
XWORK7:  VAL         MEMORY/YY7*UMEM < NOMBRE DE BUFFERS TOTAL...
         WORD        XWORK7          < POUR LES VALIDATIONS DE 'SOBT'...
TOM:     EQU         $-IJIJDX
         CALL        #SISP CMS5 NBIT1#
                                     < L'ESPACE MEMOIRE DISPONIBLE,
                                     < PUISQU'ON VOIT LE RESIDENT
                                     < ALLOUABLE.
<
<
<        T A B L E   D E S   P R O P R I E T A I R E S  :
<
<
<        FONCTION :
<                      CETTE TABLE CONTIENT UNE ENTREE (MOT)
<                    PAR ESPACE DE LONGUEUR 'PLK' POSSIBLE ;
<                    CHAQUE ENTREE MEMORISE :
<                    1 - DANS 'MOCG' : L'IDESC DU PROPRIETAIRE,
<                    2 - DANS 'MOCD' : NUMERO RELATIF DE CET ESPACE
<                                      DANS L'ESPACE TOTAL ALLOUE A
<                                      L'UTILISATEUR DE CET IDESC.
<                      SI CET ESPACE DE 'PLK' MOTS EST UTILISE PAR
<                    AU MOINS UN BUFFER, L'ENTREE EST INVALIDEE PAR
<                    XXTOMP...
<
<
XXTOMP:: VAL         MMOT            < VALEUR D'INVALIDATION DE 'TOMP'.
XITOMP:: VAL         MOCG            < MASQUE D'IDESC,
XNTOMP:: VAL         MOCD            < MASQUE DE NUMERO RELATIF.
XWOR%1:  VAL         XITOMP=K
XWOR%1:  VAL         -XWOR%1         < POUR FAIRE UN DECALAGE A DROITE...
XWOR%2:  VAL         XXTOMP>XWOR%1   < MASQUE SUPERIEUR A 'MKIDES' ???
XWOR%3:  VAL         MKIDES=K
XWOR%3:  VAL         -XWOR%3
XWOR%4:  VAL         MKIDES>XWOR%3   < MASQUE D'UN IDESC DANS DCTESC.
         IF          XWOR%2-XWOR%4,,,XEIF%
         IF          ATTENTION : 'XITOMP' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
TOMP:    EQU         $
XWOR%2:  VAL         XXXMOY          < PARCEQUE 'MEMORK' TIENT MAL SUR 15 BITS !
         NTRN
         IF          MEMORK/XWOR%2*XWOR%2-MEMORK,,XEIF%,
         IF          ATTENTION : 'MEMORK' NON DIVISIBLE PAR 'XWOR%2' !!!
XEIF%:   VAL         ENDIF
         TRN
         DO          MEMORK/XWOR%2*LK/PLK*XWOR%2
         WORD        XXTOMP
         PAGE
<
<
<        A L L O C A T I O N   D E S   D I S Q U E S  :
<
<
<        DEFINITION :
<                      LA TABLE 'TOGB' DONNE L'ETAT
<                    D'ALLOCATION DES Q-SECTEURS
<                    DU SYSTEME A RAISON D'UN BIT
<                    PAR Q-SECTEUR (1=LIBRE) ; ETANT
<                    TROP GRANDE, CETTE TABLE EST
<                    GEREE EN OVERLAY SUR 'DKA'...
<
<                    1=LIBRE,
<                    0=OCCUPE.
<
<        O C C U P A T I O N   D U   ' G B '   C O U R A N T  :
<
<
TOGB:    EQU         $-IJIJDX
         DO          YY7
         WORD        MMOT            < INITIALISATION SUR GB1 LIBRE.
<
<
<        E T A T   D ' O C C U P A T I O N   D E   C H A Q U E   ' G B '  :
<
<
<        FONCTION :
<                      CETTE TABLE DONNE LE NOMBRE DE Q-SECTEURS
<                    LIBRES DANS CHAQUE 'GB'.
<
<
<        NOTA IMPORTANT :
<                      POUR INTERDIRE L'ALLOCATION DANS UN
<                    'GB' DONNE (PAR EXEMPLE POUR FORCER
<                    L'IMPLANTATION D'UN FICHIER A UN
<                    ENDROIT BIEN PRECIS DU DISQUE) IL
<                    SUFFIT DE FAIRE :
<
<                    BIT0(NSLGB(DE CE 'GB')) <-- 1... (ENTREE NEGATIVE)
<
<
XXINGB:: VAL         BITSIG          < BIT D'INTERDICTION D'UN 'GB'...
NSLGB:   EQU         $-IJIJDX
XWOR%1:  VAL         NUQFM/NBSPGB
         DO          XWOR%1
         WORD        COSBT?XXINGB=FMASK(K=FCINST < ZONE SIMULATION DU 'DKF'.
XDKSYM:: VAL         $-IJIJDX-NSLGB-XWOR%1
                                     < NUMERO PAR RAPPORT A 0 DU 'GB'
                                     < UTILISE PAR LA SIMULATION DE
                                     < 'DKF' SUR 'DKM'.
         IF          XDKSYM,,XEIF%,
         IF          ATTENTION : 'XDKSYM' DOIT ETRE NUL !!!
XEIF%:   VAL         ENDIF
         DO          NBGB-XWOR%1
         WORD        NBSPGB          < TOUT LIBRE INITIALEMENT...
<
<
<        T A B L E   P E R M E T T A N T   D E   S A V O I R
<        S U R   ' D K M '   L E S   ' G B '   L E S   P L U S
<                    U T I L I S E S  :
<
<
<        FORMAT :
<                      'TLRUGB' EST UNE TABLE D'OCTETS,
<                    DONT CHAQUE ENTREE CONTIENT UN
<                    NUMERO DE 'GB'-1 (1=IJIJDX) ; A
<                    CHAQUE FOIS QU'UN 'GB' DE NUMERO
<                    N+1 EST REFERENCE DANS 'DKB', ON
<                    LE FAIT SE RAPPROCHER DE LA TETE
<                    DE 'TLRUGB' PAR PERMUTATION AVEC
<                    SON PREDECESSEUR (S'IL EXISTE...) ;
<                    ON FINIT AU BOUT D'UN CERTAIN TEMPS
<                    A CLASSER LES 'GB' PAR ORDRE DE PLUS
<                    GRANDE UTILISATION LE PLUS RECEMMENT ;
<                    ON FORCERA L'ALLOCATION DISQUE LORSQUE
<                    CELA EST POSSIBLE DANS LES 'GB' LES
<                    PLUS UTILISES AFIN DE MINIMISER LES
<                    DEPLACEMENTS DES BRAS DE 'DKM'...
<
<
<        NOTA :
<                      CETTE TABLE EST MISE A JOUR PAR
<                    'DKB' ET LUE UNIQUEMENT PAR L'ALLO-
<                    CATEUR DISQUE ; ON N'INTRODUIT DONC
<                    PAS DE PHASE CRITIQUE DESSUS...
<
<
TLRUGB:  EQU         $
         NTRN
XWOR%1:  VAL         NBGB+NOCMO-E/NOCMO
XWOR%2:  VAL         NBGB/NOCMO(K=FCREST
         TRN
XWOR%3:  VAL         NBGB+XWOR%2     < INCREMENT DES OCTETS GAUCHES,
XWOR%4:  VAL         XWOR%3+NOCMO-Z  < INCREMENT DES OCTETS DROITS.
<*******************************************************************************
         DO          XWOR%1
         BYTE       K=FCDO)MFFFF+N-Z*NOCMO+XWOR%3;K=FCDO)MFFFF+N-Z*NOCMO+XWOR%4
XWOR%5:  VAL         '0000000@@@@    < RECUPERATION DU DERNIER MOT,
<*******************************************************************************
         IF          XWOR%2-K,,XEIF%,
XWOR%5:  VAL         XWOR%5(MOCG     < DANS LE CAS D'UNE TABLE DE LONGUEUR
                                     < IMPAIRE, ON EFFACE LE DERNIER OCTET
                                     < GENERE,
         $EQU        $-D             < ON REVIENT D'UN MOT EN ARRIERE,
         WORD        XWOR%5          < ET ON REGENERE LE DERNIER MOT...
XEIF%:   VAL         ENDIF
         PAGE
<
<
<        T A B L E S   D U   S G F  :
<
<
<        T E D F  :  TABLE RESIDENTE DES ETATS SUR 4 BITS DES FICHIERS
<                    ACCEDEE PAR NOM DIRECT OU PAR TYPE.
<
<                    ETATS INTERESSANTS :
<
<                                    '0 : INEXISTANT JAMAIS OUVERT,
<                                    '4 : INEXISTANT OUVERT AU MOINS 1 FOIS,
<                                    '7 : EXISTANT FERME,
<                                    'C : CLOSE, EN ATTENTE DE DELETE,
<                                    'F : OPEN.
<
<
<        T A D F  :  TABLE DE BITS INDIQUANT POUR CHAQUE FICHIER,
<                    SI CELUI-CI EST EN ATTENTE (OU EN COURS
<                    DE DELETE) PAR UN BIT A 1, OU BIEN S'IL EST
<                    OUVERT (OU FERME EN SAVE) PAR UN BIT A 0.
<                    L'INDEX DE BIT DE CETTE TABLE EST LE NOM
<                    DIRECT DU FICHIER.
<
<
<        T A T P  :  C'EST UNE TABLE ASSOCIATIVE,
<                    METTANT EN CORRESPONDANCE LES NOMS
<                    DIRECTS DES FICHIERS ET LES ADRESSES DES
<                    BUFFERS QUI SONT ALLOUES A LEUR 'TP'.
<
<                    FORMAT D'UNE ENTREE :
<
<                    - MOT0 : NOM-DIRECT,
<                    - MOT1=ADRESSE BUFFER ALLOUE A LA TP DU FICHIER DONT
<                    LE NOM-DIRECT PRECEDE.
<
<
XTATPN:: MOT         O               < ENTREE NOM-DIRECT DU FICHIER,
XTATPB:: MOT         XTATPN+D        < ADRESSE DU BUFFER DE SA TP...
<
<
<        T A B L E   D E S   E T A T S   D E S   F I C H I E R S  :
<
<
TEDF:    EQU         $-IJIJDX
         DZS         LTEDF           < INITIALISATION TELLE QUE :
                                     < TOUS LES FICHIERS SONT :
                                     <   - INEXISTANTS,
                                     <   - CLOSE,
                                     <   - PARTAGEABLES.
                                     <     (ET DONC ENCORE JAMAIS
                                     <     OUVERTS...)
<
<
<        T A B L E   D E S   A T T E N T E S   D E   D E L E T E  :
<
<
TADF:    EQU         $
         DZS         NMFILE/NBITMO   < INITIALEMENT AUCUN FICHIER N'EST EN
                                     < ATTENTE DE DELETE (OU EN COURS...).
<
<
<        T A B L E   A S S O C I A T I V E   D E S
<                  P A R T I T I O N S  :
<
<
TATP:    EQU         $
         DZS         UTATP*LMTATP    < TABLE DE DOUBLE-MOTS.
<
<
<        P I L E   D E S   S E C T E U R S   L I B E R A B L E S  :
<
<
STOCS:   EQU         $-IJIJDX
         DZS         MSTOCS          < PILE DE STOCKAGE DES SECTEURS
                                     < DE PLSC.
<
<
<        D E S C R I P T E U R S   D ' E N R E G I S T R E M E N T  :
<
<
DEMO0::  MOT         O               < PREMIER MOT D'UN DESCRIPTEUR D'ENREGIS-
                                     < TREMENT : TETE DE L'ENREGISTREMENT.
DEMO1::  MOT         DEMO0+D         < DEUXIEME MOT : QUEUE DE L'ENREGISTREMENT,
DEMO2::  MOT         DEMO1+D         < TROISIEME MOT : ADRESSE DU SECTEUR
                                     < AUQUEL APPARTIENT LA CLEF OUVERTE DE
                                     < CET ENREGISTREMENT, MAIS
                                     < A T T E N T I O N  :  'DEMO2' N'A DE
                                     < SENS QUE POUR LES FICHIERS 'OLD' !!!
DENI::   MOT         DEMO2+D         < QUATRIEME MOT : NOM INTERNE DU FICHIER
                                     < POSSEDANT CET ENREGISTREMENT.
UDE::    VAL         DENI+D          < LONGUEUR D'UN DESCRIPTEUR D'ENREGIS-
                                     < TREMENT...
XWOR%1:  VAL         UDE=K
         IF          BIT>XWOR%1-UDE,,XEIF%,
         IF          ATTENTION : 'UDE' DOIT ETRE UNE PUISSANCE DE 2
         IF          A CAUSE DES DECALAGES UTILISANT UDE=K !!!
XEIF%:   VAL         ENDIF
TDE:     DZS         UDE*NMDE        < POOL DES DESCRIPTEURS
                                     < D'ENREGISTREMENTS.
XWOR%1:  VAL         TDE-ZERO        < ADRESSE DU PREMIER MOT DE 'TDE',
XWOR%2:  VAL         UDE*NMDE+XWOR%1 < ADRESSE DU PREMIER MOT N'APPAR-
                                     < TENANT PAS A 'TDE'.
         IF          XWOR%1,,XEIF%,XEIF%
         IF          ATTENTION : 'TDE' DOIT ETRE EN TETE !!!
XEIF%:   VAL         ENDIF
         IF          XWOR%2,,XEIF%,XEIF%
         IF          ATTENTION : 'TDE' DOIT ETRE EN TETE !!!
XEIF%:   VAL         ENDIF
XWOR%3:  VAL         XDKSYM*NBSPGB   < ADRESSE DU PREMIER SECTEUR DU
                                     < 'GB' DE SIMULATION DE 'DKF' SUR
                                     < 'DKM'.
XWOR%4:  VAL         XWOR%3+NBSPGB   < ADRESSE DU PREMIER SECTEUR N'APPAR-
                                     < TENANT PAS AU 'GB' DE SIMULATION.
         IF          XWOR%3,,XEIF%,XEIF%
         IF          ATTENTION : LE 'GB' DE SIMULATION DOIT ETRE EN TETE !!!
XEIF%:   VAL         ENDIF
         IF          XWOR%4,,XEIF%,XEIF%
         IF          ATTENTION : LE 'GB' DE SIMULATION DOIT ETRE EN TETE !!!
XEIF%:   VAL         ENDIF
<
<        NOTA IMPORTANT :
<                      VERIFIONS QUE (XWOR%1,XWOR%2) EST
<                    INCLUS DANS (XWOR%3,XWOR%4) ; EN EFFET,
<                    LORS D'UN DEFAUT SECTEUR TROP LONG (PAR
<                    EXEMPLE) ON RISQUE DE SE RETROUVER AVEC
<                    DES FICHIERS OUVERTS NON FERMABLES DANS
<                    LESQUELS LES ADRESSES DE DEBUT ET DE FIN
<                    D'ENREGISTREMENT SONT REMPLACEES PAR LES
<                    ADRESSES DE DESCRIPTEUR DE CLEF. SI LA
<                    RELATION PRECEDDENTE EST VERIFIEE, SACHANT
<                    DE PLUS QU'UN SECTEUR NE PEUT ETRE ALLOUE
<                    DANS LE 'GB' DE SIMULATION, ON POURRA, EN
<                    TESTANT PAR EXEMPLE L'ADRESSE PRESUMEE DE
<                    DEBUT D'ENREGISTREMENT SAVOIR S'IL S'AGIT
<                    BIEN D'UNE ADRESSE DISQUE, OU ALORS D'UNE
<                    ADRESSE DE DESCRIPTEUR...
<
         IF          XWOR%1-XWOR%3,,XEIF%,XEIF%
         IF          ATTENTION : LES ADRESSES DE 'TDE' ET
         IF          DU 'GB' DE SIMULATION PEUVENT ENTRAI-
         IF          NEES DES CONFUSIONS !!!
XEIF%:   VAL         ENDIF
         IF          XWOR%2-XWOR%4,XEIF%,XEIF%,
         IF          ATTENTION : VOIR COMMENTAIRE CI-DESSUS !!!
XEIF%:   VAL         ENDIF
<
<
<        O C C U P A T I O N   D E S   D E S C R I P T E U R S
<                        D ' E N R E G I S T R E M E N T  :
<
<
XWORK7:  VAL         NMDE            < NOMBRE DE DESCRIPTEURS D'ENREGISTREMENT.
         WORD        XWORK7          < POUR LES VALIDATIONS DE 'SOBT'...
TODE:    EQU         $-IJIJDX        < TABLE D'OCCUPATION DES
                                     < DESCRIPTEURS D'ENREGISTREMENTS.
X7::     VAL         NMDE+NBITMO-E
         CALL        #SISP CMS5 NBIT1#
<
<
<        O C C U P A T I O N   D E S   ' D C T F '  :
<
<
XWORK7:  VAL         NDCTF           < NOMBRE DE 'DCTF' RECONNUES.
         WORD        XWORK7          < POUR LES VALIDATIONS DE 'SOBT'.
TODCTF:  EQU         $-IJIJDX        < TABLE D'OCCUPATION DES DCTF.
X8::     VAL         NDCTF+NBITMO-E
         CALL        #SISP CMS5 NBIT1#
<
<
<        A C C E S   A   ' D K B '  :
<
<
TNSPF:   EQU         $               < TABLE INDIQUANT SI UNE DCTF
                                     < DE NSP DONNE PEUT AVOIR ACCES
                                     < A LA MEMOIRE VIRTUELLE 'DKB'
                                     < (BIT(NSPF)=1), OU BIEN SI ELLE
                                     < ACCEDERA SYSTEMATIQUEMENT LE
                                     < DISQUE 'DKM' (BIT(NSPF)=K).
         DZS         LSEM
         IF          NSNSP0,,XEIF%,XEIF%
         IF          ATTENTION : LA TABLE PRECDENTE EST
         IF          MAL GENEREE PAR CE 'DZS'...
XEIF%:   VAL         ENDIF
<
<
<        L I S T E   D E S   M O D U L E S   ' S G F '  :
<
<
FOFIL:   WORD        ELRS;ELRDS;ELWS;OPNEXT;OPNNK;OPNOK;CLORK;CLOSK
<
<
<        D E M A N D E S   ' S G F '   " E X C L U S I V E S "  :
<
<
<
< DEMANDE D'ALLOCATION BUFFER :
<
XXBSGF:: VAL         W               < NOMBRE DE BUFFERS NECESSAIRES.
ALBTP:   BYTE        NSPALB;XDPRIO?XDSYM
XWOR%1:  VAL         COSBT?WAITB=FMASK(K=FCINST
         WORD        XWOR%1          < D'UNE MANIERE GENERALE LE HANDLER
                                     < D'ALLOCATION NE SE METTRA PAS EN ATTENTE
                                     < ATTENTE S'IL N'Y A PAS DE BUFFER
                                     < LIBRE A ALLOUER POUR TP.
         WORD        NIL             < ADRESSE MOT DE LA ZONE
                                     < OU METTRE L'ADRESSE MEMOIRE DE
                                     < L'EVENTUEL BUFFER ALLOUE A TP.
         WORD        XXBSGF          < NBRE DE BUFFERS DEMANDES.
         DZS         LDEM0+ALBTP-$
<
< DEMANDE DE RELEASE BUFFER :
<
RELBTP:  BYTE        NSPRLB;XDPRIO?XDSYM
         WORD        K
         WORD        NIL             < MOT OU METTRE L'ADRESSE-MOT
                                     < DE LA ZONE OU SE TROUVE L'ADDRESSE
                                     < DU BUFFER A RELEASER.
         WORD        XXBSGF          < 1 BUFFER A RELEASER.
         DZS         LDEM0+RELBTP-$
<
<
<        C O N S T A N T E S   D I V E R S E S   ' S G F '  :
<
<
NLSTS::  VAL         K               < VALEUR FORCEE DANS LE PREMIER MOT D'UN
                                     < ENREGISTREMENT QUI N'EST PAS LE DERNIER
                                     < DANS LA LISTE (SINON, ON TROUVE LA
                                     < VALEUR 'INFINI').
<
< FONCTIONS D'ACCES AU 'SGF' :
<
FOFW::   VAL         FGW             < ECRITURE.
FOFONX:: VAL         FOFW+I          < OPEN NEXT,
FOFON::  VAL         FOFONX+I        < OPEN NEW,
FOFOO::  VAL         FOFON+I         < OPEN OLD,
FOFCR::  VAL         FOFOO+I         < CLOSE RELEASE,
FOFCS::  VAL         FOFCR+I         < CLOSE SAVE,
FOFR::   VAL         FOFCS+I         < LECTURE,
FOFRD::  VAL         FOFR+I          < LECTURE-DELETE,
XWOR%1:  VAL         K
XWOR%1:  VAL         COSBT?FOFONX=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FOFON=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FOFOO=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FOFCR=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FOFCS=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FOFR=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FOFRD=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FOFW=FMASK(K?XWOR%1=FCINST
XSGFON:: VAL         XWOR%1          < LISTE DES FONCTIONS 'SGF' RECONNUES.
<
< "ALTITUDE" D'EXECUTION DES FONCTIONS 'SGF' :
<
XWOR%1:  VAL         K               < INITIALISATION...
XWOR%1:  VAL         COSBT?FOFONX=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FOFON=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FOFOO=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FOFCR=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FOFCS=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FOFR=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FOFRD=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FOFW=FMASK(K?XWOR%1=FCINST
XSGFUP:: VAL         XWOR%1          < POUR INITIALISER LES 'DCTSGF'...
<
< CODES D'ERREUR DU 'SGF' :
<
ECZERO:: VAL         K               < PAS D'ERREUR...
ECFC::   VAL         1               < FICHIER DEJA FERME LORS D'UN CLOSE,
ECEO::   VAL         2               < OPEN ENREGISTREMENT EN COURS LORS
                                     < D'UN CLOSE,
ECCED::  VAL         Q8000           < LA CLEF EXISTE DEJA EN OPEN NEW,
ECLV::   VAL         '6000           < LA LISTE DES CLEFS EST VIDE,
ECCI1::  VAL         '2000           < CLEF INEXISTANTE,
ECCI2::  VAL         '4000           < CLEF INEXISTANTE,
ECEPO::  VAL         3               < ECRITURE DEMANDEE SANS OPEN,
ECEPOV:: VAL         12              < ECRITURE DEMANDEE, ALORS QU'IL N'Y
                                     < A PLUS DE PLACE SUR "DKM"...
ECRPO::  VAL         4               < LECTURE DEMANDEE SANS OPEN,
ECDPO::  VAL         5               < DELETE DEMANDE SANS OPEN,
ECLEV::  VAL         6               < LECTURE D'UN ENREGISTREMENT VIDE,
ECEC1::  VAL         8               < MAUVAISE CLEF,
ECEC2::  VAL         9               < MAUVAISE CLEF,
ECEN::   VAL         10              < LE DEMANDEUR N'EST PAS L'OUVREUR.
ECDSYS:: VAL         11              < OPEN ENREGISTREMENT IMPOSSIBLE
                                     < DEFINITIVEMENT : IL FAUDRA RENDRE LE
                                     < FICHIER INACCESSIBLE EN DETRUISANT
                                     < SON NOM EXTERNE UNIQUEMENT...
<
< ETATS DES FICHIERS (SUR 4 BITS) :
<
XWOR%1:  VAL         NBITEF-Z        < A CAUSE DU SOUS-PROGRAMME 'SEPAR' QUI
                                     < EST UTILISE DANS LE 'SGF'...
XWOR%1:  VAL         NBITMO-B-XWOR%1
XBITF1:: VAL         XWOR%1          < BIT D'OPEN (1) / CLOSE (K).
XBITF2:: VAL         XBITF1+BIT      < BIT PARTAGEABLE.
XBITF3:: VAL         XBITF2+BIT      < NATURE DU
XBITF4:: VAL         XBITF3+BIT      < FICHIER ; NOTA :
                                     < (XBITF3,XBITF4)=(00) : FICHIER LIBRE,
                                     < (XBITF3,XBITF4)=(11) : FICHIER OCCUPE.
XEFX::   VAL         K               < INEXISTANT JAMAIS OUVERT,
XWOR%1:  VAL         XEFX
XWOR%1:  VAL         COSBT?XBITF2=FMASK(K?XWOR%1=FCINST
XEF1::   VAL         XWOR%1          < INEXISTANT OUVERT AU MOINS 1 FOIS,
XWOR%1:  VAL         XEFX
XWOR%1:  VAL         COSBT?XBITF2=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?XBITF3=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?XBITF4=FMASK(K?XWOR%1=FCINST
XEFF::   VAL         XWOR%1          < EXISTANT FERME,
XWOR%1:  VAL         XEFX
XWOR%1:  VAL         COSBT?XBITF1=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?XBITF2=FMASK(K?XWOR%1=FCINST
XEFCD::  VAL         XWOR%1          < CLOSE EN ATTENTE DE DELETE,
XWOR%1:  VAL         XEFX
XWOR%1:  VAL         COSBT?XBITF1=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?XBITF2=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?XBITF3=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?XBITF4=FMASK(K?XWOR%1=FCINST
XEFO::   VAL         XWOR%1          < OPEN.
XWOR%1:  VAL         COSBT?XBITF1=FMASK(K=FCINST
         IF          XEFCD(XWOR%1,XEIF%,,XEIF%
         IF          ATTENTION : 'XECFD' ET 'XBITF1' INCOMPATIBLES !!!
XEIF%:   VAL         ENDIF
         IF          XEFO(XWOR%1,XEIF%,,XEIF%
         IF          ATTENTION : 'XEFO' ET 'XBITF1' INCOMPATIBLES !!!
XEIF%:   VAL         ENDIF
<
< ARGUMENTS DES OPEN/CLOSE :
<
XWOR%9:  VAL         K
XWOR%9:  VAL         COSBT?XBITF1=FMASK(K?XWOR%9=FCINST
XWOR%9:  VAL         CORBT?XBITF2=FMASK(K?XWOR%9=FCINST
                                     < NOTA : TOUS LES 'XEF...' POSSEDENT LE
                                     < BIT 'XBITF2', C'EST POURQUOI ON LE
                                     < CLEAR DANS LE MASQUE 'XWOR%9'...
XWOR%9:  VAL         COSBT?XBITF3=FMASK(K?XWOR%9=FCINST
XWOR%9:  VAL         COSBT?XBITF4=FMASK(K?XWOR%9=FCINST
                                     < DEFINITION DU MASQUE 'XWOR%9'...
MTSGF::  VAL         K>NBITEF?K      < POUR OBTENIR L'ETAT D'UN FICHIER.
XWOR%1:  VAL         XEFX?XEF1(XWOR%9
MEFX::   VAL         XWOR%9>NBITEF?XWOR%1
                                     < RECHERCHE D'UN FICHIER CLOSE INEXISTANT.
XWOR%8:  VAL         K
XWOR%8:  VAL         CORBT?XBITF1=FMASK(K?XWOR%8=FCINST
XWOR%8:  VAL         CORBT?XBITF2=FMASK(K?XWOR%8=FCINST
XWOR%8:  VAL         COSBT?XBITF3=FMASK(K?XWOR%8=FCINST
XWOR%8:  VAL         COSBT?XBITF4=FMASK(K?XWOR%8=FCINST
XWOR%1:  VAL         XEFCD(XWOR%8
MCFR::   VAL         XWOR%8>NBITEF?XWOR%1
                                     < DEMANDE DE CLOSE RELEASE.
XWOR%8:  VAL         XWOR%9)XWOR%8
XWOR%1:  VAL         CORBT?XBITF1=FMASK(K=FCINST
MCFS::   VAL         XWOR%8>NBITEF?XWOR%1
                                     < DEMANDE DE CLOSE SAVE.
XWOR%1:  VAL         COSBT?XBITF1=FMASK(K=FCINST
MCOI::   VAL         XWOR%9>NBITEF?XWOR%1
                                     < DEMANDE D'OPEN INEXISTANT.
XWOR%1:  VAL         CORBT?XBITF1=FMASK(K=FCINST
MCIN::   VAL         XWOR%9>NBITEF?XWOR%1
                                     < SPECIAL POUR 'HDLRCF'...
BITRFE:: VAL         BITSIG          < BIT INDICATEUR D'UNE RECHERCHE D'UN
                                     < FICHIER D'ETAT DONNE A OUVRIR.
BITCFN:: VAL         BITSIG          < BIT INDICATEUR DE CLOSE D'UN FICHIER
                                     < DONT ON DONNE LE 'NSP' COURANT.
<
<
<        S E C T E U R   D ' U N   E N R E G I S T R E M E N T  :
<
<
XCHSGF:: MOT         O               < LE PREMIER MOT DE CHAQUE Q-SECTEUR
                                     < CONTIENT UN CHAINAGE VERS LE SECTEUR
                                     < SUIVANT... (OU L'INFINI...)
         PAGE
<
<
<        G E N E R A T I O N   D E S   ' P S T H '   E T   D E S   ' I C '
<
<
         CALL        #SISP CMS5 PSTH-IC#
         PAGE
<
<
<        I N I T I A L I S A T I O N   S T R A T E G I Q U E
<                    D E   L ' H O R L O G E  :
<
<
<        FONCTION :
<                      CETTE TABLE DONNE EN FONCTION
<                    DU NOMBRE D'UTILISATEURS ACTIFS
<                    LA FREQUENCE DE L'HORLOGE ; IL
<                    CONVIENT DE NOTER QU'IL Y AIT 0
<                    OU 1 UTILISATEUR, L'HORLOGE DOIT
<                    QUAND MEME "TOURNER" DE FACON A
<                    ENTRETENIR LE MOUVEMENT, ET METTRE
<                    A JOUR LA DATE ET L'HEURE, MEME
<                    SI L'ON PENALISE AINSI LEGEREMENT
<                    L'EVENTUEL UTILISATEUR UNIQUE...
<
<
<        NOTA :
<                      LES FREQUENCES SONT EXPRIMEES
<                    EN MILLI-SECONDES.
<
<
XXHINI:: VAL         100             < FREQUENCE A DONNER A L'HORLOGE LORSQU'
                                     < IL N'Y A PAS D'ESCLAVES...
XH1000:: VAL         1000
XH200::  VAL         200
XH100::  VAL         100
TFREQ:   EQU         $
         WORD        XXHINI          < PAS D'ESCLAVES DANS LE SYSTEME.
         WORD        XH1000          < 1 ESCLAVE.
         WORD        XH100           < 2 ESCLAVES.
         WORD        XH100           < 3 ESCLAVES.
         WORD        XH100           < 4 ESCLAVES.
         WORD        XH100           < 5 ESCLAVES.
         WORD        XH100           < 6 ESCLAVES.
         WORD        XH100           < 7 ESCLAVES.
         WORD        XH100           < 8 ESCLAVES.
         WORD        XH100           < 9 ESCLAVES.
         WORD        XH100           < 10 ESCLAVES.
         WORD        XH100           < 11 ESCLAVES.
         WORD        XH100           < 12 ESCLAVES.
<
<
<        I N I T I A L I S A T I O N   S T R A T E G I Q U E
<        D E   L A   P A T T E R N   C Y C L I Q U E
<        D E   S W A P P I N G   O U T  :
<
<
<        FONCTION :
<                      CETTE TABLE RELAYEE PAR LE MEME
<                    RELAI QUE LA TABLE PRECEDENTE (ATFREQ)
<                    A LA TRANSLATION 'NMESCL+1' DE L'INDEX
<                    PRES PERMET UNE INITIALISATION DE
<                    LA PATTERN CYCLIQUE DE SWAPPING OUT
<                    (HORIDC) EN FONCTION DE LA CHAGRGE DU
<                    SYSTEME EN ESCLAVE ACTIF, C'EST-A-DIRE
<                    SE TROUVANT ENTRE LA COMMANDE '!LOGIN'
<                    ET L'UNE DES COMMANDES '!BYE'/'!F', ET
<                    N'AYANY PAS FRAPPE '!W'.
<
<
<        A T T E N T I O N  :
<                      LE BIT15 DE CHAQUE ENTREE EST
<                    UTILISE POUR LE CALCUL DYNAMIQUE DE
<                    'IBHRUN' A CHAQUE MODIFICATION DE
<                    'NUSERA' ; ON A :
<                                    BIT15=K : NUSERA=K,1
<                                              IBHRUN=1.
<                                    BIT15=1 : NUSERA>1
<                                              IBHRUN=K.
<
<
         IF          $-TFREQ-NMESCL,,,XEIF%
         IF          E R R E U R !!!
XEIF%:   VAL         ENDIF
<
<
XWOR%4:  VAL         '1111           < 1 BIT SUR 4,
XWOR%2:  VAL         '5555           < 1 BIT SUR 2...
         WORD        '0000           < PAS D'ESCLAVE DANS LE SYSTEMME.
         WORD        '0000           < 1 ESCLAVE.
         WORD        '0001           < 2 ESCLAVES.
         WORD        '0001           < 3 ESCLAVES.
         WORD        '0101           < 4 ESCLAVES.
         WORD        '0101           < 5 ESCLAVES.
         WORD        XWOR%4          < 6 ESCLAVES.
         WORD        XWOR%2          < 7 ESCLAVES.
         WORD        XWOR%2          < 8 ESCLAVES.
         WORD        XWOR%2          < 9 ESCLAVES.
         WORD        XWOR%2          < 10 ESCLAVES.
         WORD        XWOR%2          < 11 ESCLAVES.
         WORD        XWOR%2          < 12 ESCLAVES.
<
<
<        T A B L E   D E S   H O R L O G E S   D E
<        S W A P P I N G   U T I L I S A T E U R S  :
<
<
<        FONCTION :
<                      DANS LA 'DCTESC', ON INTRODUIT UNE
<                    HORLOGE DE DECOMPTAGE 'HORESC' DESTINEE
<                    A REDUIRE LES SWAPPINGS DES GROS PROGRAMMES,
<                    PUISQUE SI LEUR TAILLE EST TELLE QU'ILS
<                    RESIDENT SEULS EN MEMOIRE, MALGRE LA
<                    MULTIPROGRAMMATION, LES DUREES DE
<                    SWAPPING SONT PERDUES POUR LES AUTRES
<                    UTILISATEUR. AINSI, ON A LA GESTION
<                    SUIVANTE DE 'HORESC' :
<                    1 - 'JOB ENTRY' : HORESC <-- 1 (VALEUR
<                    INITIALE ARBITRAIRE DESTINEE AU PREMIER
<                    SWAPPING OUT.
<                    2 - AVANT CHAQUE TRAITEMENT DE 'SVC'
<                    HORESC <-- (HORESC)-1 ; TANT QUE 'HORESC'
<                    RESTE STRICTEMENT POSITIVE, ALORS ON
<                    LAISSE EN PLACE LES AUTOMATES DE TYPE
<                    MEMOIRE 'FREE', SINON, A CHAQUE PASSAGE
<                    DE 'HORESC' PAR 0, ON LES REMPLACERA,
<                    SUIVANT LE NOMBRE D'ALLOCATEURS EN
<                    ATTENTE DE MEMOIRE, PAR LES AUTOMATES
<                    MEMOIRE 'OCCUPEE', ET DE PLUS,
<                    HORESC <-- F(TAILLE MEMOIRE COURANTE
<                    DE L'ESCLAVE); 'F' EST DONNEE PAR LA
<                    TABLE 'THESC'.
<
<
THESC:   EQU         $
         WORD        1               < 1K MOTS.
         WORD        1               < 2K MOTS.
         WORD        1               < 4K MOTS.
         WORD        1               < 6K MOTS.
         WORD        4/4             < 8K MOTS.
         WORD        6/6             < 10K MOTS.
         WORD        8/8             < 12K MOTS.
         WORD        10/10           < 14K MOTS.
         WORD        12/12           < 16K MOTS.
                                     < NOTA : ON EST REVENU A DES HORLOGES
                                     < UNITAIRES POUR TOUTES LES TAILLES D'ALLO-
                                     < CATION MEMOIRE DEPUIS QU'EXISTE LA
                                     < NOTION DE 'RUNO'...
         PROG
         PAGE
<
<
<        D E F I N I T I O N   D E S   C O N T E X T E S   ' L D C '  :
<
<
<        DEFINITION :
<                      ON TROUVE ICI LES CONTEXTES
<                    ASSOCIES A CHAQUE CANAL 'LDC'.
<                    ETANT DONNE QU'IL N'Y A QU'UN
<                    SEUL PROCESSEUR 'IOP' ('PROIOP'),
<                    ON RECOUVRE LES CONTEXTES 'LDC'
<                    DES 4 PROCESSEURS QUE L'ON
<                    PEUT METTRE SUR 1 BUS...
<
<
         CALL        #SISP CMS5 DOL2#
LDC0:    EQU         $               < DEFINITION DES CONTEXTES 'LDC' :
LDC1:    EQU         LDC0            < ON N'UTILISE QU'UN
LDC2:    EQU         LDC0            < SEUL IOP, ON PEUT DONC
LDC3:    EQU         LDC0            < RECOUVRIR LES 4 CONTEXTES...
XLODC::  VAL         8               < LONGUEUR DES CONTEXTES 'LDC'.
         DZS         XLODC           < ITN=K.
         DZS         XLODC           < ITN=1.
         DZS         XLODC           < ITN=2.
         DZS         XLODC           < ITN=3.
         DZS         XLODC           < ITN=4 (LECTEUR DE CARTES 1).
         DZS         XLODC           < ITN=5 (LECTEUR DE CARTES 2).
         DZS         XLODC           < ITN=6 (CU2 EN MODE CANAL).
         DZS         XLODC           < ITN=7 (IMPRIMANTE).
LOLDC::  VAL         $-LDC0          < LONGUEUR DES CONTEXTES LDC.
         PAGE
<
<
<        L I S T E   D E S   P R O C E S S E U R S  :
<
<
<        DEFINITION :
<                      ON TROUVE DANS LE SYSTEME
<                    TROIS TYPES DE PROCESSEURS
<                    REPRESENTES PHYSIQUEMENT PAR
<                    DEUX PROCESSEURS REELS :
<
<                    1 - LE PROCESSEUR MAITRE : C'EST
<                    SUR LUI QUE TOURNE LE SYSTEME
<                    ET LES UTILISATEURS.
<
<                    2 - LE PROCESSEUR ESCLAVE : C'EST
<                    LUI QUI SUPPORTE LE SWAPPING
<                    ESCLAVE EN MEMOIRE HAUTE, ET LA
<                    MISE A JOUR DE LA COPIE :
<
<                    3 - LE PROCESSEUR D'ENTREES-SORTIES :
<                    C'EST LUI QUI SUPPORTE TOUS LES
<                    CANAUX ; A NOTER QUE LES ENTREES-
<                    SORTIES "NON CANALES" (VISUS PAR
<                    EXEMPLE) SONT SUR LE PROCESSEUR
<                    MAITRE.
<
<
PROCE0:: VAL         K               < LE PROCESSEUR DE NUMERO 0 EST OBLIGATOIRE
                                     < A CAUSE DES MICRO-PROGRAMMES...
NPRO::   VAL         NMPROC          < NOMBRE MAXIMUM DE PROCESSEURS DANS
                                     < UN SYSTEME SOLAR 16.65.
PRINEX:: VAL         -1              < NUMERO DONNE A UN PROCESSEUR INEXISTANT.
         IF          PRINEX,XEIF%,,
         IF          ATTENTION : PRINEX DOIT ETRE NEGATIF !!!
XEIF%:   VAL         ENDIF
         CALL        #SISP CMS5 DOL1#
LPRO:    EQU         $               < LISTE DES PROCESSEURS.
<
<
<        M A I T R E  :
<
<
PROMST:: VAL         $-LPRO          < PROCESSEUR MAITRE : C'EST LUI SUR
                                     < LEQUEL S'EXECUTE TOUTES LES TACHES
                                     < DU SYSTEME, ET QUI GERE LES INTER-
                                     < RUPTIONS, ALARMES ET DEFAUT SECTEUR.
YROMST:: VAL         PROCE0
         WORD        YROMST          < PROCESSEUR MAITRE...
<
<
<        E S C L A V E  :
<
<
PROESC:: VAL         $-LPRO          < PROCESSEUR ESCLAVE : C'EST UN PRO-
                                     < CESSEUR BETE QUI TESTE CYCLIQUEMENT
                                     < SI LE MAITRE NE LUI SOUMET RIEN,
                                     < QUI NE TRAVAILLE SOUS AUCUN NIVEAU
                                     < DEFINI (AFIN DE NE PAS AVOIR DE
                                     < PROBLEMES DE CHANGEMENTS DE CONTEXTES)
                                     < QUI TESTE PERIODIQUEMENT LE DEFAUT
                                     < SECTEUR, ET QUI PARTAGE LA MEMOIRE
                                     < DU MAITRE.
YROESC:: VAL         YROMST+I        < ON PREND LE PROCESSEUR SUIVANT...
         WORD        YROESC          < PROCESSEUR ESCLAVE...
<
<
<        I O P  :
<
<
PROIOP:: VAL         $-LPRO          < PROCESSEUR D'ENTREES-SORTIES : C'EST
                                     < LUI QUI GERE LES CANAUX DU SYSTEME
                                     < (DISQUES, LECTEURS DE CARTES,
                                     < IMPRIMANTES,...).
YROIOP:: VAL         YROESC          < ON PREND L'ESCLAVE OU UN 'IOP', MAIS
                                     < DE PREFERENCE, PAS LE MAITRE, AFIN DE
                                     < LE DECHARGER...
         WORD        YROIOP          < PROCESSEUR IOP...
<
<
<        V A L I D A T I O N S  :
<
<
         IF          YROIOP-PRINEX,XEIF%,,XEIF%
         IF          ATTENTION : IL FAUT UN IOP !!!
XEIF%:   VAL         ENDIF
         IF          YROMST-PRINEX,XEIF%,,XEIF%
         IF          ATTENTION : IL FAUT UN MAITRE !!!
XEIF%:   VAL         ENDIF
         IF          YROMST-PROCE0,,XEIF%,
         IF          YROESC-PROCE0,,XEIF%,
         IF          ATTENTION : SOIT LE MAITRE, SOIT L'ESCLAVE
         IF          DOIVENT ETRE LE PROCESSEUR OBLIGATOIRE (PROCE0) !!!
XEIF%:   VAL         ENDIF
         IF          YROMST-YROESC,XEIF%,,XEIF%
         IF          ATTENTION : LE MAITRE NE PEUT ETRE L'ESCLAVE !!!
XEIF%:   VAL         ENDIF
         CALL        #SISP CMS5 DOL2#
         PAGE
<
<
<        B O I T E   A U X   L E T T R E S  :
<
<
<        DEFINITION :
<                      ON TROUVE ICI LES BOITES
<                    A LETTRE DESTINEES AUX
<                    DIALOGUES INTER-PROCESSEURS
<                    ('IPI') ET EN PARTICULIER
<                    AUX ENTREES-SORTIES "CANALES".
<
<
         WORD        K               < ZONE RESERVEE PAR PRUDENCE, A CAUSE
                                     < DE PRINEX QUI VAUT -1...
BOXIPI:  EQU         $
         DZS         NPRO
<
<
<        V E R R O U   D E S   B O I T E S   A U X   L E T T R E S  :
<
<
VLOCK::  VAL         K)MFFFF         < VALEUR D'UN VERROU VERROUILLE.
VERROU:  DZS         NPRO            < IL Y A UN VERROU PAR BOITE AUX
                                     < LETTRES INITIALISE A L'ETAT NON
                                     < VERROUILLE.
XVEROU:: VAL         VERROU-BOXIPI   < DEPLACEMENT D'ACCES A L'AIDE DE
                                     < BASE 'W' LORSQU'ELLE POINTE 'BOXIPI'.
         PAGE
<
<
<        G E N E R A T I O N   D U   F I C H I E R   D E S
<        C O N S T A N T E S   G E N E R A L E S
<        U T I L I S E   P A R   L E S   P R O C E S S E U R S  :
<
<
<*******************************************************************************
XWOR%F:  VAL         K
K:      @VAL         '0@@@@          < POUR CLEARER, RAZER...
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         NILK
NILK:   @VAL         '0@@@@          < VALEUR INITIALE DE MOTS NON DEFINIS...
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         ENDIF
ENDIF:  @VAL         '0@@@@          < FIN D'UN "IF".
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         NOCMO
NOCMO:  @VAL         '0@@@@          < NOMBRE D'OCTETS PAR MOT.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         NBITMO
NBITMO: @VAL         '0@@@@          < NOMBRE DE BITS PAR MOT.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         BIT
BIT:    @VAL         '0@@@@          < ELEMENT BINAIRE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         D
D:      @VAL         '0@@@@          < LONGUEUR D'UN "WORD"...
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         DFLOT
DFLOT:  @VAL         '0@@@@          < LONGUEUR D'UN "FLOAT"...
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         Z
Z:      @VAL         '0@@@@          < POUR CE QUI COMMENCE A 0...
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         B
B:      @VAL         '0@@@@          < POUR TENIR COMPTE DU RANG DU PREMIER BIT.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         I
I:      @VAL         '0@@@@          < INCREMENT...
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         E
E:      @VAL         '0@@@@          < POUR LES DIVISIONS PAR EXCES (Y+X-E/X).
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         S
S:      @VAL         '0@@@@          < POUR LES DECALAGES D'UN CRAN.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         L
L:      @VAL         '0@@@@          < RANG DU BIT DE GAUCHE D'UN MOT.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         O
O:      @VAL         '0@@@@          < ELEMENT COURANT.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         W
W:      @VAL         '0@@@@          < ELEMENT UNIQUE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XXXMOY
XXXMOY: @VAL         '0@@@@          < POUR FAIRE DES MOYENNES.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         BITSIG
BITSIG: @VAL         '0@@@@          < RANG DU BIT DE SIGNE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         Q8000
Q8000:  @VAL         '0@@@@          < INFINI, OU BIEN INDICATEUR DE FIN...
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XXQUIT
XXQUIT: @VAL         '0@@@@          < CODE DU 'QUIT' D'APPEL DU 'CCI'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         MFFFF
MFFFF:  @VAL         '0@@@@          < MASQUE GLOBAL.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         N
N:      @VAL         '0@@@@          < POUR LES PASSAGES MASQUE <--> 2**N...
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         BITX
BITX:   @VAL         '0@@@@          < RANG DU BIT D'INDEXATION.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         BASE10
BASE10: @VAL         '0@@@@          < BASE 10...
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         BASE16
BASE16: @VAL         '0@@@@          < BASE 16...
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         NBITCX
NBITCX: @VAL         '0@@@@          < NOMBRE DE BITS PAR CHIFFRE HEXA-DECIMAL.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         LK
LK:     @VAL         '0@@@@          < DEFINITION D'UN K...
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         IJIJDX
IJIJDX: @VAL         '0@@@@          < POUR GERER LES INDEX DES 'JDX'/'JIX'...
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         DEPILE
DEPILE: @VAL         '0@@@@          < POUR GENERER CORRECTEMENT LES PILES.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         DEPBAS
DEPBAS: @VAL         '0@@@@          < DEPLACEMENT DES BASES 'C' ET 'L'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         NEXIST
NEXIST: @VAL         '0@@@@          < INDICATEUR D'INEXISTENCE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         EXIST
EXIST:  @VAL         '0@@@@          < INDICATEUR D'EXISTENCE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         MOCD
MOCD:   @VAL         '0@@@@          < MASQUE DE L'OCTET DROIT D'UN MOT.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         MOCG
MOCG:   @VAL         '0@@@@          < MASQUE DE L'OCTET GAUCHE D'UN MOT.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         MMOT
MMOT:   @VAL         '0@@@@          < MASQUE D'UN MOT.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KEOT
KEOT:   @VAL         '0@@@@          < CARACTERE 'CTRL-D'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KCR
KCR:    @VAL         '0@@@@          < CARACTERE 'CTRL-M' (<RETURN>).
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         K6D
K6D:    @VAL         '0@@@@          < CARACTERE "EXTENSION" <R/C>+<LF>.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL       KSP
KSP:    @VAL         '0@@@@          < CARACTERE D'ESPACEMENT.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KDP
KDP:    @VAL         '0@@@@          < CARACTERE 'DOUBLE-POINT' ":".
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KESC
KESC:   @VAL         '0@@@@          < CARACTERE 'ESCAPE' (POUR 4014...).
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KCCI
KCCI:   @VAL         '0@@@@          < "INTRODUCTION" DES COMMANDES AU 'CCI'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FMASK
FMASK:  @VAL         '0@@@@          < DEFINITION DU MASQUE COURANT.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FVAL
FVAL:   @VAL         '0@@@@          < CADRAGE DE 'VALEUR' SUIVANT 'FMASK'...
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FCGET
FCGET:  @VAL         '0@@@@          < RECUPERATION D'UN OCTET EN "CD".
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FCSTO
FCSTO:  @VAL         '0@@@@          < RANGEMENT D'UN OCTET EN "CD".
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FCMOV
FCMOV:  @VAL         '0@@@@          < MOUVEMENT D'UNE CHAINE D'OCTETS.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KOLTES
KOLTES: @VAL         '0@@@@          < FONCTION DE RECHERCHE D'UN CARCATERE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KOLTED
KOLTED: @VAL         '0@@@@          < DEFINITION PREMIER CARACTERE CHAINE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KOLTEF
KOLTEF: @VAL         '0@@@@          < DEFINITION DERNIER CARACTERE CHAINE+1.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KOLF
KOLF:   @VAL         '0@@@@          < MASQUE DE LA FONCTION DEMANDEE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KOLC
KOLC:   @VAL         '0@@@@          < DEFINITION DU CARACTERE A INSERER.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KOL0
KOL0:   @VAL         '0@@@@          < NUMERO DE LA PREMIERE COLONNE DE CARTE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KOL1
KOL1:   @VAL         '0@@@@          < NUMERO DE LA COLONNE 'COMMANDE'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KOL2
KOL2:   @VAL         '0@@@@          < NUMERO DE LA COLONNE 'ARGUMENT'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KOL3
KOL3:   @VAL         '0@@@@          < NUMERO DE LA COLONNE 'COMMENTAIRE'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KOLON
KOLON:  @VAL         '0@@@@          < LONGUEUR D'UNE CARTE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FCTES
FCTES:  @VAL         '0@@@@          < RECHERCHE D'UN OCTET DANS UNE CHAINE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FCDO
FCDO:   @VAL         '0@@@@          < ACCES A L'INDEX D'UN 'DO' NORMAL.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FCDOF
FCDOF:  @VAL         '0@@@@          < ACCES A L'INDEX D'UN 'DO' SUR 'CALL'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FCSYMT
FCSYMT: @VAL         '0@@@@          < TEST DE L'ETAT D'UN SYMBOLE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         MSYMBI
MSYMBI: @VAL         '0@@@@          < INDEX DU PREMIER CARACTERE D'UN SYMBOLE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         MSYMBL
MSYMBL: @VAL         '0@@@@          < NOMBRE DE CARACTERES D'UN SYMBOLE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         MSYMBN
MSYMBN: @VAL         '0@@@@          < SYMBOLE REFERENCE MAIS NON DEFINI.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FCSYMM
FCSYMM: @VAL         '0@@@@          < MODIFICATION DE L'ETAT D'UN SYMBOLE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FCBA
FCBA:   @VAL         '0@@@@          < CONVERSION BINAIRE --> ASCI.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FCAB
FCAB:   @VAL         '0@@@@          < CONVERSION ASCI --> BINAIRE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FCTA
FCTA:   @VAL         '0@@@@          < CONVERSION TRANSLATABLE --> ABSOLU.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FCAT
FCAT:   @VAL         '0@@@@          < CONVERSION ABSOLU --> TRANSLATABLE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FCINST
FCINST: @VAL         '0@@@@          < EXECUTION D'UNE INSTRUCTION MACHINE...
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         COSBT
COSBT:  @VAL         '0@@@@          < CODE DU 'SBT'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         CORBT
CORBT:  @VAL         '0@@@@          < CODE DU 'RBT'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FCEXSP
FCEXSP: @VAL         '0@@@@          < EXECUTION D'UN SOUS-PROGRAMME EN "CD".
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FCPUSH
FCPUSH: @VAL         '0@@@@          < EMPILEMENT.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FCPULL
FCPULL: @VAL         '0@@@@          < DEPILEMENT SIMPLE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FCPEXU
FCPEXU: @VAL         '0@@@@          < DEPILEMENT ET EXECUTION DE LA FONCTION.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FCREST
FCREST: @VAL         '0@@@@          < ACCES AU RESTE D'UNE DIVISION.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FCSIGN
FCSIGN: @VAL         '0@@@@          < ACCES AU SIGNE COURANT.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         HZERO
HZERO:  @VAL         '0@@@@          < CHIFFRE DECIMAL "0".
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         HNEUF
HNEUF:  @VAL         '0@@@@          < CHIFFRE DECIMAL "9".
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         HA
HA:     @VAL         '0@@@@          < CHIFFRE HEXA-DECIMAL "A".
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         HF
HF:     @VAL         '0@@@@          < CHIFFRE HEXA-DECIMAL "F".
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         BITPAR
BITPAR: @VAL         '0@@@@          < BIT DE PARITE CARACTERE DANS UN MOT.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XNCOOL
XNCOOL: @VAL         '0@@@@          < NOMBRE DE COULEURS PRIMAIRES.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         PAGE68
PAGE68: @VAL         '0@@@@          < NUMERO DE LA PAGE 'CDAJ' D'ACCES '68000'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XRCMD
XRCMD:  @VAL         '0@@@@          < REGISTRE DE COMMANDE ET D'ETAT DU '365'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XPVECT
XPVECT: @VAL         '0@@@@          < BIT DE MISE EN FORMAT "PETITS VECTEURS".
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XRASTR
XRASTR: @VAL         '0@@@@          < COMMANDE DE TRACE "RASTER" POUR 'XRCMD'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XRXH
XRXH:   @VAL         '0@@@@          < REGISTRE DE POIDS FORTS DES 'X'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XRXL
XRXL:   @VAL         '0@@@@          < REGISTRE DE POIDS FAIBLES DES 'X'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XRYH
XRYH:   @VAL         '0@@@@          < REGISTRE DE POIDS FORTS DES 'Y'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XRYL
XRYL:   @VAL         '0@@@@          < REGISTRE DE POIDS FAIBLES DES 'Y'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XRNIVO
XRNIVO: @VAL         '0@@@@          < REGISTRE DE NIVEAU DE GRIS DU TRACER..
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XXNOIR
XXNOIR: @VAL         '0@@@@          < NIVEAU DE NOIR EN MOYENNE DEFINITION.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XXN255
XXN255: @VAL         '0@@@@          < NIVEAU DE BLANC EN MOYENNE DEFINITION.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XC512
XC512:  @VAL         '0@@@@          < NOMBRE DE COLONNES EN MOYENNE DEFINITION.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XL512
XL512:  @VAL         '0@@@@          < NOMBRE DE LIGNES EN MOYENNE DEFINITION.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         LCCINT
LCCINT: @VAL         '0@@@@          < LONGUEUR MAX DES CARTES 'CCI' INTERP.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         NVPSER
NVPSER: @VAL         '0@@@@          < 'NVP' RESERVE AUX SERVICES IMMEDIATS.'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         NVPFON-DEMES0
NVPFON: @MOT         '0@@@@          < 'NVP' ET FONCTION D'UNE 'DEMESC'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XASSIM+NBITOC
XASSIM: @VAL         '0@@@@          < BIT(OCTET) D'ASSIGNATION IMPLICITE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         AMESC-DEMES0
AMESC:  @MOT         '0@@@@          < ADRESSE-OCTET DU BUFFER D'UNE 'DEMESC'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         COESC-DEMES0
COESC:  @MOT         '0@@@@          < LONGUEUR-OCTET DU BUFFER D'UNE 'DEMESC'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         ARGESC-DEMES0
ARGESC: @MOT         '0@@@@          < ARGUMENT VARIABLE D'UNE 'DEMESC'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         NVPIN
NVPIN:  @VAL         '0@@@@          < 'NVP' STANDARD D'ENTREE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         NVPOUT
NVPOUT: @VAL         '0@@@@          < 'NVP' STANDARD DE SORTIE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         NVPDLN
NVPDLN: @VAL         '0@@@@          < 'NVP' D'ACCES A 'DLN' DU 'SGN'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         NVPSTN
NVPSTN: @VAL         '0@@@@          < 'NVP' D'ACCES A 'STN' DU 'SGN'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         NVPLON
NVPLON: @VAL         '0@@@@          < 'NVP' D'ACCES A 'LON' DU 'SGN'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         NVPLNS
NVPLNS: @VAL         '0@@@@          < 'NVP' D'ACCES A 'LNS' DU 'SGN'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         NVPLNU
NVPLNU: @VAL         '0@@@@          < 'NVP' D'ACCES A 'LNU' DU 'SGN'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         NVPNXP
NVPNXP: @VAL         '0@@@@          < 'NVP' D'ACCES A 'NXP' DU 'SGN'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         NVPNXS
NVPNXS: @VAL         '0@@@@          < 'NVP' D'ACCES A 'NXS' DU 'SGN'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         NVPDKU
NVPDKU: @VAL         '0@@@@          < 'NVP' D'ACCES A 'DKU'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         NVPCU3
NVPCU3: @VAL         '0@@@@          < 'NVP' D'ACCES A 'CU3'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         NVPVDK
NVPVDK: @VAL         '0@@@@          < 'NVP' D'ACCES AU DISQUE VIDEO.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         RA
RA:     @VAL         '0@@@@          < REGISTRE 'A'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         RB
RB:     @VAL         '0@@@@          < REGISTRE 'B'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         RX
RX:     @VAL         '0@@@@          < REGISTRE 'X'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         RY
RY:     @VAL         '0@@@@          < REGISTRE 'Y'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         RC
RC:     @VAL         '0@@@@          < REGISTRE 'C'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         RL
RL:     @VAL         '0@@@@          < REGISTRE 'L'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         RW
RW:     @VAL         '0@@@@          < REGISTRE 'W'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         RK
RK:     @VAL         '0@@@@          < REGISTRE 'K'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         RP
RP:     @VAL         '0@@@@          < REGISTRE 'P'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         RS
RS:     @VAL         '0@@@@          < REGISTRE 'S'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         RAD
RAD:    @VAL         '0@@@@          < REGISTRE 'ADRESSE MEMOIRE'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         RM
RM:     @VAL         '0@@@@          < REGISTRE 'MEMOIRE'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KRA
KRA:    @VAL         '0@@@@          < NOM DU REGISTRE 'A'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KRB
KRB:    @VAL         '0@@@@          < NOM DU REGISTRE 'B'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KRX
KRX:    @VAL         '0@@@@          < NOM DU REGISTRE 'X'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KRY
KRY:    @VAL         '0@@@@          < NOM DU REGISTRE 'Y'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KRC
KRC:    @VAL         '0@@@@          < NOM DU REGISTRE 'C'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KRL
KRL:    @VAL         '0@@@@          < NOM DU REGISTRE 'L'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KRW
KRW:    @VAL         '0@@@@          < NOM DU REGISTRE 'W'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KRK
KRK:    @VAL         '0@@@@          < NOM DU REGISTRE 'K'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KRP
KRP:    @VAL         '0@@@@          < NOM DU REGISTRE 'P'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KRSTAT
KRSTAT: @VAL         '0@@@@          < NOM DU REGISTRE 'S'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KRAD
KRAD:   @VAL         '0@@@@          < NOM DU REGISTRE 'ADRESSE MEMOIRE'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         KRMEM
KRMEM:  @VAL         '0@@@@          < NOM DU REGISTRE 'MEMOIRE'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************



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