<        S I S   C M S 5   14
         PAGE
         PAGE
<
<
<        O P E N   D ' U N   F I C H I E R  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME PERMET
<                    L'OUVERTURE D'UN FICHIER ;
<                    POUR CE FAIRE, ELLE ALLOUE
<                    AU DEMANDEUR (SI CELA EST
<                    POSSIBLE) UNE 'DCT' APPAR-
<                    TENANT AU POOL DU 'SGF',
<                    PUIS ELLE ACTIVE LA TACHE
<                    'SGF' REENTRANTE CORRESPON-
<                    DANTE.
<                      L'ACCES A UN FICHIER PEUT
<                    SE FAIRE SOIT EN EN DONNANT
<                    LE <NOM-INTERNE>, SOIT EN
<                    RECHERCHANT UN FICHIER D'UN
<                    TYPE DONNE (LIBRE PAR EXEM-
<                    PLE...).
<
<
<        ARGUMENTS :
<                    (A)=
<                        1- BIT0=K : BIT1-15=NOM-DIRECT DU FICHIER,
<                        2- BIT0=1 : BIT1-15=MASK-ETAT RECHERCHE.
<                    (B)=
<                        BIT0-12=K,
<                        BIT13=K : FICHIER PARTAGEABLE,
<                             =1 : FICHIER NON PARTAGEABLE,
<                        BIT14-15=K1 : FICHIER IN,
<                                =10 : FICHIER OUT,
<                                =11 : FICHIER DE TRAVAIL.
<                    (Y)=NVP DU FUTUR FICHIER.
<
<
<        A T T E N T I O N  :
<                      LE 'NVP' DU FUTUR FICHIER
<                    (Y) EST RECUPERE DANS LA PILE
<                    PAR UN DEPLACEMENT CALCULE A
<                    L'ASSEMBLAGE...
<
<
<        REMARQUE :
<                      LORS D'UN "OPEN-NEW", ON
<                    RECHERCHE UN FICHIER LIBRE,
<                    CE QUI SE FAIT EN DONNANT :
<                                    (A)='B0 (=CLOSE & INEXISTANT).
<
<
<        RESULTATS :
<                    (X)=NSP DE LA DCTF ALLOUEE, OU
<                        0 SI L'OPEN N'A PU SE FAIRE.
<
<
         USE         L,DCT0
         USE         W,DEM0
OPNFIL:  EQU         $
XKREG:   VAL         K               < INITIALISATION DU CUMUL DES REGISTRES.
       #@PSR         A,B,Y           < #SISP CMS5 KREG# A CAUSE DU MICRO-CANAL..
       #@PSR         W,L             < #SISP CMS5 KREG# A CAUSE DU MICRO-CANAL..
XREGTG:: VAL         -XKREG          < NOMBRE DE REGISTRES EMPILES A L'ENTREE.
         LR          A,Y             < SAVE PROVISOIRE DE L'ARGUMENT
                                     < D'APPEL (A) DANS Y, POUR SAVOIR
                                     < ULTERIEUREMENT SI L'APPEL A EU
                                     < LIEU PAR NOM-DIRECT OU PAR ETAT.
         RQST        &ASXSGF         <<<<PHASE CRITIQUE DU SGF.
<
< DISCRIMINATION DU MODE D'APPEL
< (PAR NOM, OU PAR ETAT RECHERCHE) :
<
         IF          BITRFE-BITSIG,,XEIF%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JAGE        E400            < BIT0(A)=K : APPEL PAR NOM-DIRECT.
<
< CAS DE L'APPEL AVEC RECHERCHE
< D'UN FICHIER D'ETAT DONNE :
<
         RBT         BITRFE          < RAZ DU BIT D'APPEL PAR ETAT.
<
<        ON A ICI :
<                    (A)=MASK+ETAT POUR LOOKF.
<
         BSR         ALOOKF          < RENVOI DANS A LE NOM DIRECT
                                     < DU 1ER FICHIER POSSEDNAT L'ETAT
                                     < CHERCHE. SI AUCUN FICHIER NE COINCIDE
                                     < COINCIDE, RAPPELONS QUE LOOKF
                                     < BLOQUE LE DEMANDEUR JUSQU'A
                                     < SATISFACTIOM, ET DEBLOQUE
                                     < LA GESTION DE FICHIERS PAR
                                     < LE SEMAPHORE SEXSGF.
E400:    EQU         $
         CP          NMFIL           < VALIDATION DU NOM INTERNE...
         JL          E400XX          < OK, IL EST DANS LES NORMES...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      LE MIEUX EST DE SORTIR AVEC (Y)=NSPVID, AINSI
<                    LE FICHIER DEMANDE N'EST PAS OUVERT...
<
         LYI         NSPVID          < 'OPEN' IMPOSSIBLE...
         JMP         E402R           < VERS LA SORTIE EN ERREUR...
E400XX:  EQU         $
<
<        ON A ICI :
<                    (A)=NOM DIRECT D'UN FICHIER A OUVRIR.
<
         LXI         MTSGF
         XR          A,X
<
<        ON A ICI :
<                    (A)=ARGUMENT DE DEMANDE D'ETAT,
<                    (X)=NOM DIRECT DU FICHIER DONT ON DESIRE L'ETAT.
<
         BSR         AMTEDF          < RENVOI L'ETAT DU FICHIER DANS A.
<
< TEST DE L'ETAT DU FICHIER AVANT LA DEMANDE :
<
         TBT         XBITF1          < TEST OPEN (1) / CLOSE (K).
         JNC         E401            < OK LE FICHIER EST CLOSE.
<
< CAS D'UN FICHIER DEJA OUVERT :
<
         LYI         NSPVID          < NSP NULLE A PRIORI.
XWOR%1:  VAL         BIT>NBITEF-N    < MASQUE D'ETAT DU FICHIER.
XWOR%2:  VAL         CORBT?XBITF1=FMASK(K?XWOR%1=FCINST
         ANDI        XWOR%2          < AFIN DE NE TESTER QUE LES BITS
                                     < PARTAGEABLE (13) ET ETAT (14-15).
         CPI         XEF1
XWOR%2:  VAL         COSBT?XBITF1=FMASK(K=FCINST
         ORI         XWOR%2          < RESTAURATION DU BIT OPEN (12).
         JG          E402R           < OPEN IMPOSSIBLE : LE FICHIER
                                     < EST DEJA OUVERT, NON PARTAGEABLE
                                     < ET EXISTANT.
                                     < A NOTER : (Y)=NSPVID !!!
<
< CAS OU L'OUVERTURE DU FICHIER EST POSSIBLE :
<
E401:    EQU         $
<
<        ON A ICI :
<                    (X)=NOM-DIRECT DU FICHIER,
<                    (A)=ETAT DU FICHIER AVANT CETTE DEMANDE.
<                    (Y)=K : FICHIER DEJA OUVERT, OU APPEL AVEC
<                            LE NOM-DIRECT=K,
<                       >=K : APPEL PAR NOM-DIRECT,
<                       <  0 : APPEL PAR ETAT.
<
         CPZR        Y
         JL          Z239            < APPEL PAR ETAT.
<
< CAS DE L'APPEL PAR NOM-DIRECT (LE CAS FICHIER DEJA
< OUVERT QUI AMENE AUSSI ICI, SERA
< DISCRIMINE PAR LA SUITE) ; DANS LE CAS DE L'APPEL
< PAR NOM-DIRECT, ON VERIFIE QUE LE FICHIER
< DEMANDE EST EXISTANT :
<
XWOR%1:  VAL         BIT>NBITEF-N    < MASQUE DE L'ETAT...
XWOR%2:  VAL         CORBT?XBITF2=FMASK(K?XWOR%1=FCINST
         LYI         XWOR%2          < ON VA IGNORER LE BIT PARTAGEABLE.
         ANDR        A,Y             < (Y)=K SI LE FICHIER ETAIT (ETAT
                                     <     DANS A) CLOSE ET INEXISTANT.
         CPZR        Y
         JE          E402R           < ERREUR : L'OPEN NE PEUT AVOIR
                                     < LIEU DANS LE CAS OU LE FICHIER
                                     < DEMANDE PAR NOM EST CLOSE ET
                                     < INEXISTANT.
                                     < A NOTER : (Y)=K.
<
<
<        O U V E R T U R E   D U   F I C H I E R  :
<
<
<
Z239:    EQU         $
<
< RECHERCHE D'UNE DCT LIBRE :
<
         PSR         A
         LA          &ASDCTF
         BSR         ABETA           < (A)=BETA(SDCTF),
                                     <    =NOMBRE DE 'DCTF' LIBRES...
         IF          XXFICD-W,,,XEIF%
         IF          ATTENTION : IL FAUT QUE LE SEUIL UTILISE
         IF          PAR LE 'CCI' SOIT SUPERIEUR A 'W' POUR DES
         IF          RAISONS LIEES A DES DEMANDES SIMULTANEES
         IF          D'OUVERTURE DE FICHIERS !!!
XEIF%:   VAL         ENDIF
         CPI         W               < Y-EN-A T'IL AU MOINS UNE ???
         JGE         Z239X1          < OUI, AU MOINS UNE...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      IL N'Y A PAS DE 'DCTF' DE LIBRES ;
<                    AUTREFOIS, ON FAISAIT :
<
<        LAD         &ASXSGF
<        BSR         ARLSE           < SORTIE DE LA PHASE CRITIQUE 'SGF',
<        RQST        &ADCTF          < ATTENTE D'ALLOCATION D'UNE 'DCTF',
<        RQST        &ASXSGF         < PUIS, RE-RENTREE EN PHASE CRITIQUE...
<
<                    MALHEUREUSEMENT, L'ETAT DU FICHIER
<                    DANS 'TEDF' N'INDIQUE PAS ENCORE
<                    L'OUVERTURE (QUI A LIEU A LA SORTIE
<                    DE 'OPNFIL') ; OR EN PARTICULIER DANS
<                    LE CAS DE L'OPEN 'NEW', SI PAR MALHEUR
<                    2 OPENS 'NEW' ONT LIEU SIMULTANEMENT, IL
<                    SE PEUT QU'IL TOMBE SUR LE MEME FICHIER
<                    INTERNE !!!
<                      ALORS QUE FAIRE ??? ET BIEN JE NE SAIS PAS
<                    CAR IL Y A UN RISQUE TEL QUE CELUI EVOQUE
<                    CI-DESSUS !!!
<
         LAD         &ASXSGF
         BSR         ARLSE           < ON SORT DE LA PHASE CRITIQUE,
         RQST        &ASXSGF         < ET ON Y RE-RENTRE...
Z239X1:  EQU         $
         PLR         A
         RQST        &ASDCTF         < ATTENTE D'UNE DCTF.
                                     < (ON SAIT QU'IL EN EXISTE AU MOINS
                                     < UNE...)
<
< CAS OU AU MOINS UNE DCTF EST LIBRE :
<
         BSR         AACTP           < ACCES A LA TP : (W)=@TP DU FICHIER.
<
<
<        A T T E N T I O N  :
<                      A PARTIR D'ICI, LA 'TP' DU
<                    FICHIER EST RESIDENTE EN ME-
<                    MOIRE CENTRALE...
<
<
         IC          NUSF,W          < ET 1 UTILISATEUR DE PLUS SUR
                                     < CE FICHIER (C'EST PEUT-ETRE LE 1ER).
         PSR         A,X             < SAVE L'ETAT AVANT LA DEMANDE,
         NTRN
         LXI         X8/NBITMO       < (X)=NOMBRE DE MOTS OCCUPES PAR (TODCTF'.
         TRN
         LAD         AODCTF          < ADRESSE DU RELAI VERS LA TABLE
                                     < D'OCCUPATION DES DCTF.
         BSR         ASOBT           < RECHERCHE ET OCCUPATION DE
                                     < LA 1ERE DCTF LIBRE.
         JG          SYSRD1          < OK, (X) EST CORRECT...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ATTENTION, SI L'ON RELANCE LE
<                    SYSTEME, LE NUMERO DE 'DCTF'
<                    ALLOUEE EST FORCEMENT MAUVAIS
<                    ET RISQUE DE PERTURBER 'DCTSY'...
<
SYSRD1:  EQU         $
<
<        ON A ICI :
<                    (A)=NUMERO PAR RAPPORT A 0 DE LA 1ERE DCTF LIBRE.
<
         LR          A,X
         PSR         X               < SAVE NUMERO DE DCTF / A 0.
         ADRI        NSPFIL,X        < (X)=NSP DE LA DCTF ALLOUEE.
<
< ALLOCATION D'UN BUFFER D'IMPLANTATION DE LA DCTF :
<
         PSR         W               < SAVE @TP.
         LA          AALBTP          < ETANT DANS UNE PHASE CRITIQUE
                                     < DU SGF, ON PEUT UTILISER LE
                                     < BLOC NON REENTRANT D'ALLOCATION
                                     < DES BUFFERS DE TP.
         LR          A,W             < (W)=@DEMANDE ALLOCATION BUFFER.
         STZ         ARGDEM+OPDEM    < RAZ DU BIT WAITB DE L'OPDEM.
         LAD         ARGDEM+ASDEM
         STA         ARGDEM+AMDEM    < L'ADRESSE OCTET DU BUFFER ALLOUE
                                     < SERA RENVOYE PAR ASDEM.
         BSR         ACHAND          < DEMANDE D'ALLOCATION 1 BUFFER.
         LA          &ADCTSY         < TEST DE DCTSY.
         JAE         SYSRD2          < OK, DCTSY(NSPF)=K.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      JE NE SAIS PAS, MAIS EN TOUT
<                    CAS ALLER VOIR QUELLE ET LA
<                    TACHE QUI OCCUPE DCTSY(X).
<
         JMP         SYSRD2          < ET OUI...
E402R:   JMP         E402            < RELAI VERS 'E402'...
SYSRD2:  EQU         $
         SBT         WAITB           < RESTAURATION DE L'OPDEM DE
                                     < ALBTP (AVEC WAITB POSITIONNE) ; A
                                     < NOTER QU'ICI, ON A : (A)=K.
         BSR         ACHANW          < ATTENTE DE FIN D'ALLOCATION.
         STA         ARGDEM+OPDEM    < RESTAURATION DE L'OPDEM DE ALBTP.
<
< RECUPERATION DU BUFFER ALLOUE POUR DCTF :
<
         LA          ARGDEM+ASDEM
         SLRS        NOCMO=K         < CONVERSION EN UNE ADRESSE MOT.
         PLR         W               < RESTAURE (W)=@TP.
         LR          A,L             < (L)=@DCTF.
<
< INITIALISATION DE LA DCTF :
<
         LR          X,Y             < (Y)=NSP DE LA DCTF.
         LXI         LDCTF           < (X)=LONGUEUR D'UN BUFFER.
E441:    EQU         $
         STZ         O,L             < MISE A 0 DE TOUT LE BUFFER CONTE-
         ADRI        P,L             < LA FUTURE 'DCTSGF'.
         JDX         E441
         ADRI        -LDCTF+PFIL+DEPILE,L
                                     < POSITIONNEMENT SUR LE PREMIER MOT
                                     < DE LA PILE DE LA 'DCTSGF'.
         LXI         LPILEH+XXPFIL+XXPILI
                                     < (X)=LONGUEUR D'UNE PILE DE 'DCTSGF'.
E441X:   EQU         $
         LR          L,A
         STA         O,L             < ON INITIALISE TOUTE LA PILE DE LA
         ADRI        P,L             < 'DCTSGF' AVEC LE '$', AFIN D'ETRE
         JDX         E441X           < COMPATIBLE AVEC 'SI CMS5 GENPIL2'.
         ADRI        -LPILEH-XXPFIL-XXPILI-PFIL-DEPILE,L
                                     < RESTAURE : (L)=ADRESSE 'DCTSGF'.
XWOR%1:  VAL         XLNSGF=FCBA(MOCD
         LRM         A,X
         BYTE        XWOR%1;KF       < POUR UN NOM TYPE "HANDLER-SGF"...
         WORD        COSBT?BISOSE=FMASK(K=FCINST
         STA         HNAME           < RANGEMENT 2 PREMIERS CARACTERES DU NOM
                                     < DE CE HANDLER TYPE "SGF"...
         STX         BITSEM          < ON POSITIONNE 'BISOSE' DANS 'BITSEM' DE
                                     < LA 'DCTSGF' ; AINSI LE 'SGF' NE TRANSMET
                                     < JAMAIS LE COUPLE (SLO,SLE) SAUF EXCEP-
                                     < TION (DANS 'ELESS' LORSQU'IL S'AGIT DES
                                     < LECTURES-ECRITURES DES SECTEURS D'UN
                                     < ENREGISTREMENT DE FICHIER...
         PLR         X               < (X)=NUMERO DE DCTF PAR RAPPORT A 0.
         ADRI        I,X             < (X)=NUMERO DE DCTF PAR RAPPORT A 1.
         XR          B,X             < SAVE B DANS X, ET :
                                     < (B)=NUMERO DE DCTF PAR RAPPORT A 1.
         LAI         K               < NETTOYAGE DE A.
         DV          DIX             < (A)=DIZAINES ; (B)=UNITES.
         ADRI        HZERO,A         < CONVERSION ASCI DES DIZAINES.
         ADRI        HZERO,B         < CONVERSION ASCI DES UNITES.
         STB         HNAME+LHNAME-Z  < RANGEMENT CHIFFRE DES UNITES.
         STBY        HNAME+LHNAME-Z  < RANGEMENT CHIFFRE DES DIZAINES.
         LR          X,B             < RESTAURE (B)=ETAT DEMANDE APRES
                                     < L'OPEN DU FICHIER.
         IF          SPHEX0-I,,XEIF%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         IC          SPHEX           < LE SEMAPHORE D'EXCLUSION DE
                                     < PHASE CRITIQUE DE CETTE DCT
                                     < EST MIS A 1.
         IF          XXNTRY-I,,XEIF%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         IC          NTRIES          < LE NBRE MAX D'ESSAIS EST FIXE A 1.
         LRM         A,X
         WORD        TRYVID
         WORD        XSGFON
         STA         FRETRY          < POUR FAIRE UNE 'SYSER' !!!
         STX         DCTFON          < LISTE DES FONCTIONS RECONNUES.
         LRM         A,X
         WORD        SMST
         WORD        XSGFUP
         STA         PST+RS          < REGISTRE 'S' : MODE MAITRE...
         STX         DCTFUP          < ET LISTE DES "ALTITUDES" DES FONCTIONS...
XWOR%1:  VAL         MOCG=K
XWOR%2:  VAL         XNVPF>XWOR%1
         IF          XWOR%2-Q8000,,XEIF%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         STA         IOID            < ON MET LE CODE '80 DANS LA PARTIE
                                     < 'IO' DE IOID (MODE FICHIER).
         IF          K,,XEIF%,
         IF          ATTENTION : L'INITIALISATION DE 'ETAT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         LR          L,A
         STA         PST+RL          < REGISTRE L.
         ADRI        PFIL,A
         STA         PST+RK          < REGISTRE K.
         LR          C,A
         STA         PST+RC          < REGISTRE C.
         LRM         A,X
         WORD        SO
         WORD        SE
         STA         PST+RSLO        < INITIALISATION DE 'SLO',
         STX         PST+RSLE        < ET DE 'SLE' (PLUS PROPRE QU'UTILE...).
         LRM         A,X
         WORD        FFILTR
         WORD        FSFILT
         STA         FILTRE          < ROUTINE DE FILTRAGE,
         STX         SFLITR          < ROUTINE DE S-FILTRAGE.
         LRM         A,X
         WORD        HANDLR
         WORD        HDLFIL
         STA         PST+RP          < REGISTRE P,
         STX         ES              < HANDLER DE GESTION DE FICHIERS.
         XR          W,K             < W BASE LA PILE...
         LA          -XREGTG+DEPILE,W  < RECUPERATION DU FUTUR 'NVP' DU FICHIER.
         XR          W,K
         LXI         FONSB           < FONCTION 'SET BIT A 1 SANS VERIF'.
         CPBY        MEMV            < COMPARAISON DU NVP AU SEUIL...
         JGE         E441Y           < NVP>=SEUIL ==> SGF SUR DKB...
         LXI         FONRB           < FONCTION 'SET BIT A 0 SANS VERIF'.
E441Y:   EQU         $
         LAI         NSPDKB          < DANS TOUS LES CAS ON DEMANDE
                                     < 'DKB' QUI SERA PEUT-ETRE UTILISEE
                                     < EN TRANSPARENT...
         STBY        VAR+DFILDK+XXNSP      < ON GENERE LE NSPTYP DE LA DEMANDE
                                     < D'E/S DISQUE UNE FOIS POUR TOUTE...
         XR          X,Y             < (X)=NSP(DCTF), (Y)=FONCTION.
         LAD         ATNSPF          < (A)=ADRESSE DU RELAI VERS 'TNSPF'.
         BSR         ATMOBT          < MEMORISATION DE LA POSITION DU
                                     < 'NVP' DU FICHIER PAR RAPPORT AU
                                     < SEUIL ACTUEL...
         LR          L,A             < (A)=ADRESSE DE LA 'DCTSGF',
         STA         &ADCTSY         < ET ENFIN MISE A JOUR DE 'DCTSY' PAR
                                     < INSERTION DE CETTE NOUVELLE 'DCTSGF'.
         XR          X,Y
XWOR%1:  VAL         YAPILS-DCTF0-DAPILS
         ADRI        DAPILS+XWOR%1,A < BASE DE LA PILE DES SECTEURS
                                     < A RELEASER.
         SBT         BITX            < BIT D'INDEXATION.
         STA         VAR+APILS       < POINTEUR DE LA PILE DES SECTEURS.
         STY         VAR+NSPF        < SAVE NSP DE LA DCTF.
         LAD         AESTF           < ADRESSE DU RELAI VERS 'ESTF'.
         LR          Y,X             < (Y)=NSPDCTF.
         ADRI        NSNSP0,X        < (X)=NIVEAU SOFT DE LA DCTF.
         BSR         ASMMK           <<< MASQUAGE GENERAL IT
         LYI         FONSB           < FONCTION DE MISE A 1 D'UN
                                     < BIT SANS VERIFICATION.
<
<
<        P H A S E   I N I N T E R R U P T I B L E  :
<
<
         BSR         ATMOBT          < BISE A 1 DU BIT DE CTTE TACHE DANS
                                     < LA FILE ESTF.
         BSR         ASMDK           <<< DEMASQUAGE GENERAL IT
         LY          VAR+NSPF        < RESTAURE (Y)=NSPDCTF.
<
<
<        A T T E N T I O N  :
<                      L'ARMEMENT DU HANDLER 'SGF' AURA
<                            LIEU AU COURS DE LA 1ERE DEMANDE
<                            QUI LUI SERA ADRESSEE.
<
<
         PLR         A,X             < RESTAURE ETAT AVANT (A) ET NOM
                                     < DIRECT (X).
         STX         VAR+FILNOM      < MISE DU NOM DIRECT DANS LA DCTF.
<
<        ON A ICI :
<                    (A)=ETAT AVANT LA DEMANDE D'OPEN,
<                    (B)=ETAT DEMANDE POUR LE FICHIER APRES L'OPEN,
<                    (X)=NOM DIRECT DU FICHIER,
<                    (Y)=NSP DE LA DCTF ALLOUEE,
<                    (L)=ADRESSE DCTF,
<                    (W)=ADRESSE TP DU FICHIER.
<
<
< MISE A JOUR DE TEDF :
<
         SBT         NBITMO+XBITF1   < ON FORCE LE BIT OPEN DANS
                                     < L'ETAT DEMANDE POUR LE FICHIER.
XWOR%1:  VAL         COSBT?XBITF1=FMASK(K=FCINST
         ANDI        XWOR%1          < DE L'ETAT AVANT LA DEMANDE, ON
                                     < NE CONSERVE QUE LE BIT
                                     < OPEN/CLOSE (BIT 12).
         SLLS        NBITEF+XBITF1-XBITF2 < CE BIT OPEN/CLOSE EST POSITIONNE
                                     < EN FACE DU BIT DE MASQUE DU BIT
                                     < PARTAGEABLE/NON PARTAGEABLE.
<
<
<        A T T E N T I O N  :
<                      SI LE FICHIER ETAIT 'OPEN' (1),
<                    ET QUE LE PASSAGE EN 'NON PARTAGEA-
<                    BLE' SOIT DEMANDE, IL FAUT ALORS
<                    IGNORER CE BIT, LE MASQUE DE L'ETAT
<                    A DONNER AU FICHIER EST DONC CONS-
<                    TRUIT A PARTIR DU BIT OPEN/CLOSE
<                    DE L'ETAT AVANT...
<
<
         IBT         XBITF1-NBITEF-XBITF1+XBITF2
                                     < INVERSION DE L'ANCIEN BIT OPEN/CLOSE.
XWOR%1:  VAL         BIT>NBITEF-N    < MASQUE DE L'ETAT FICHIER.
XWOR%2:  VAL         CORBT?XBITF2=FMASK(K?XWOR%1=FCINST
XWOR%2:  VAL         XWOR%2>NBITEF   < CADRAGE...
         ORI         XWOR%2
<
<        ON A ICI :
<                    (A)=MASQUE, ET :
<                                    (A)='B0 SI LE FICHIER ETAIT OPEN,
<                                    (A)='F0 SI LE FICHIER ETAIT CLOSE.
<
         ORR         B,A             < DANS A ON A L'ARG DE MTEDF.
<
< ELIMINATION DES DEMANDES D'ETAT INEXISTANT :
<
         RBT         NBITMO+XBITF1   < RAZ DU BIT OPEN FORCE CI-DESSUS.
         RBT         NBITMO+XBITF2   < RAZ BIT PARTAGEABLE A PRIORI.
         CPZR        B
         JNE         E410            < ETAT DEMANDE :
                                     < IN, OUT, OU TRAVAIL.
<
< CAS OU L'ETAT DEMANDE EST 'INEXISTANT',
< ON FORCE L'ETAT 'TRAVAIL' :
<
XWOR%1:  VAL         COSBT?XBITF3=FMASK(K=FCINST
XWOR%1:  VAL         COSBT?XBITF4=FMASK(K?XWOR%1=FCINST
         ORI         XWOR%1          < MISE A 1 DES BITS 14 & 15 DE A.
E410:    EQU         $
         BSR         AMTEDF          < MAJ DE L'ETAT DU FICHIER.
<
< MISE DANS LA DCTF DU NIVEAU DE LA TACHE FAISANT L'OPEN :
<
         BSR         ACANSP          < RENVOIE (A)=NSP DEMANDEUR OU NSPACT.
         STA         VAR+NSPDDR      < NSPDDR DE DCTF = DCT DE L'OUVREUR
E402:    EQU         $
         LR          Y,X             < RESTAURE NSPDCTF DANS X.
         LAD         &ASXSGF
         BSR         ARLSE
         PLR         W,L             < A CAUSE DU MICRO-CANAL.
         PLR         A,B,Y           < A CAUSE DU MICRO-CANAL.
         RSR                         < ...OUF...
         PAGE
<
<
<        C L O S E   D ' U N   F I C H I E R  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME A POUR BUT
<                    DE FERMER UN FICHIER, C'EST-A-
<                    DIRE DE LIBERER LES RESSOURCES
<                    QU'IL UTILISAIT ('DCTF', BUFFER
<                    DE SA 'TP',...). CETTE FERMETURE
<                    EST REFUSEE DANS LE CAS OU LE
<                    TRAVAIL EN COURS EST INACHEVE
<                    ('OPEN ENREGISTREMENT' SANS LE
<                    'CLOSE' ASSOCIE).
<
<
<        ARGUMENTS :
<                    (A)=
<                        SI BIT0=K : BIT1-15=NOM DIRECT DU FICHIER A FERMER,
<                        SI BIT0=1 : BIT1-15=NSP DE LA DCTF ALLOUEE
<                                            AU FICHIER LORS DE L'OPEN.
<                    (B)=
<                        BIT8-11=K011 : DELETE (METTRA LE FICHIER A L'ETAT
<                                       OPEN & INEXISTANT).
<                               =1000 : SAVE. (ETAT CLOSE).
<                               =1011 : MODE SPECIAL RESERVE AU
<                                       RELEASEUR DES CLEFS D'UN FICHOIER
<                                       DELETE (METTRA LE FICHIER A L'ETAT
<                                       CLOSE & INEXISTANT).
<                        (LE RESTE DE B ETANT A 0 ; CECI EST UN
<                        ETAT/MASK A DONNER AU FICHIER AU CLOSE).
<                    (L)=ADRESSE DCTF, SI BIT0(A)=K.
<
<
<        RESULTATS :
<                    (Y)=K SI CLOSE OK, OU SI ENCORE AU MOINS UN UTI-
<                        LISATEUR SIMULTANE.
<                       =1 SI LE FICHIER ETAIT DEJA FERME,
<                       =2 SI CLOSE NON REALISE, UN 'OPEN ENREGISTREMENT'
<                       AYANT ETAIT FAIT (SANS LE CLOSE ASSOCIE),
<                       =NIVEAU DE LA TACHE AYANT FAIT L'OPEN SI LE
<                       DEMANDEUR DE CLOSE N'EST PAS L'OUVREUR...
<
<
ECFC:    VAL         ECFC
ECEO:    VAL         ECEO
         USE         L,DCT0
CLSFIL:  EQU         $
         PSR         A,X,L,W
         LX          C7FF            < MASQUE DE NOM-DIRECT.
         ANDR        A,X             < (X)=NOM DIRECT OU NSP.
<
< DISCRIMINATION DU MODE D'APPEL :
<
         JAG         E403            < BIT0(A)=K : APPEL PAR NOM-DIRECT.
<
< CAS D'UN APPEL PAR NSP : IL FAUT CALCULER L'ADRESSE DE LA DCT :
<
         JAE         E444            < < SI NSP=K, C'EST HDLVID, RIEN
                                     < A FAIRE.
         LYI         ECFC            < POSITIONNEMENT DU CODE ERREUR
                                     < 1 DANS Y.
         LA          &ADCTSY         < RECUPERATION DE L'@DCTF DANS A.
                                     < NOTA : ON N'UTILISE PAS CADCT,
                                     < CAR SI LE FICHIER N'EXISTE PAS,
                                     < ON A DCTSY(X)=K, ET EN FAIT,
                                     < IL N'Y A PAS DE RECOVERY A FAIRE.
         JAE         E405            < ERREUR : LA DCTF N'EXISTE PAS,
                                     < LE CLOSE NE PEUT DONC AVOIR LIEU.
         JAG         SYSRD3          < OK : LA DCTF EXISTE.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ETRE PRUDENT, CAR L'ADRESSE
<                    RECUPEREEE N'EST PAS CELLE NI
<                    D'UN BUFFER, NI D'UNE 'DCT',
<                    CAR ELLES SONT POSITIVES...
<
SYSRD3:  EQU         $
         LR          A,L             < (L)=@DCTF.
<
< TEST D'UN DEBORDEMENT DES PILES 'SGF' :
< MALHEUREUSEMENT APRES QUE CE DEBORDEMENT
< AIT EU LIEU !!!
<
         LAD         LDCTF-Z,L       < ACCES AU DERNIER MOT DE LA 'DCTSGF',
         CP          LDCTF-Z,L       < COMME IL S'AGIT DU DERNIER MOT DE LA
                                     < PILE, IL DOIT ENCORE CONTENIR SA
                                     < PROPRE ADRESSE (C'EST UN GARDE-FOUS...).
         JE          E403X1          < C'EST BON...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      EVALUER L'AMPLITUDE DU DEBORDEMENT,
<                    ET VOIR OU CELA C'EST PRODUIT, ET QUE
<                    FAIRE POUR QUE LES 'DCTSGF' RESTENT
<                    IMPLANTEES DANS UN BUFFER !!!
<
E403X1:  EQU         $
<
<        ON A ICI :
<                    (L)=ADRESSE DCTF,
<                    (X)=NSPF.
<
<
< TEST D'OUVREUR-FERMEUR :
<
         BSR         ACANSP          < RENVOIE (A)=NSP FERMEUR (OU NSPACT)
         LY          VAR+NSPDDR      < ACCES AU NSP DE L'OUVREUR
         CPR         A,Y
         JNE         E405            < CLOSE REFUSE : (Y)=NIVEAU-OUVREUR.
         LX          VAR+FILNOM      < RECUPERATION DU NOM DIRECT DU
                                     < FICHIER A FERMER.
E403:    EQU         $
         BSR         ABETA1          < CACUL (A)=BETA(SCHVID(DCTF))).
         JAL         Z221            < OK : HDLSGF EN ATTENTE SUR SCHVID
         LRM         A
         WORD        HANDLR          < DANS LE CAS OU HDLSGF N'EST PAS
                                     < EN ATTENTE SUR SCHVID, TESTONS
                                     < SON REGISTRE P POUR SAVOIR
                                     < S'IL A 'BOUGE' DEPUIS L'OPEN...
         CP          PST+RP          < VALEUR INITIALE DE P.
         JE          Z221            < OK : HDLSGF N'A PAS 'BOUGE'...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
Z221:    EQU         $
<
< TESTS DE VALIDITE DU CLOSE :
<
<
<        ON A ICI :
<                    (X)=NOM DIRECT DU FICHIER.
<
         LY          ETAT1           < Y-A-T'IL UN OPEN ENREGISTREMENT
                                     < EN COURS...
         ADR         Y,Y
         IF          ECEO-2,,XEIF%,
         IF          ATTENTION : 'ECEO' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         CPZR        Y
         JNE         E405            < OUI, LE CLOSE EST REFUSE,
                                     < NOTONS AU PASSAGE QUE : (Y)=2.
<
< TEST SUR L'ETAT DU FICHIER :
<
         LYI         FONSB1          < (Y)=1 A PRIORI, S'IL IL N'Y A PAS
                                     <     D'ERREUR, CE (Y)=1 SERA UTILISE
                                     <     PAR ATMOBT PAR LA SUITE.
         IF          ECFC-FONSB1,,XEIF%,
         IF          ATTENTION : 'ECFC' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         LAI         MTSGF           < ARGUMENT DE DEMANDE D'ETAT.
         BSR         AMTEDF
<
<        ON A ICI, AU RETOUR :
<                    (A)=ETAT DU FICHIER DE NOM DIRECT (X).
<
         TBT         XBITF1          < TEST DU BIT OPEN (1) / CLOSE (K).
         JNC         E405            < DEJA FERME : (Y)=1.
<
< CAS OU LE FICHIER ETAIT OUVERT :
<
         RQST        &ASXSGF         <<<<PHASE CRITIQUE DU SGF.
         BSR         AACTP           < ACCES A LA TP DU FICHIER, A NOTER
                                     < QUE LE FICHIER NE PEUT ETRE
                                     < INEXISTANT...
<
<        ON A ICI :
<                    (W)=ADRESSE TP EN MEMOIRE.
<
         DC          NUSF,W          < ET UN UTILISATEUR DE MOINS SUR
                                     < CE FICHIER.
         JG          E404            < IL RESTE ENCORE AU MOINS UN
                                     < UTILISATEUR.
<
< CAS OU PLUS PERSONNE N'UTILISE CE FICHIER :
<
         BSR         ADETP           < ON SUPPRIME LA TP DE LA TABLE
                                     < ASSOCIATIVE TATP.
<
< MISE A JOUR DE TEDF :
<
         LR          B,A             < (A)=ETAT A DONNER.
         PSR         A,Y
         CPI         MCFR            < EST-CE UNE DEMANDE DE DELETE ???
         JE          E404X           < OUI, (Y)=1 (SET A 1 AVEC VERIF).
         LYI         FONRB           < NON, (Y)=4 (RESET A 0 SANS VERIF).
E404X:   EQU         $
         LAD         ATADF           < (A)=ADRESSE DU RELAI VERS 'TADF',
                                     < (X)=NOM DIRECT DU FICHIER,
                                     < (Y)=FONCTION SUR 'TADF'.
         BSR         ATMOBT          < SI UN DELETE A ETE DEMANDE SUR LE
                                     < FICHIER DE NOM INTERNE (X), ON MET
                                     < SON BIT A 1 DANS 'TADF' EN VERIFIANT
                                     < QU'IL ETAIT A 0 AU PREALABLE ; SINON,
                                     < ON LE RAZE SANS VERIFICATION...
         PLR         A,Y             < RESTAURE : (A)=ETAT A DONNER AU FICHIER,
                                     < (Y)=1 POUR L'APPEL SUIVANT DE TMBOT.
         BSR         AMTEDF          < (A)=ETAT/MASK A DONNER AU FICHIER.
E404:    EQU         $
<
< LIBERATION DE LA DCTF :
<
         LX          VAR+NSPF        < RECUPERATION DU NSPDCTF.
         STZ         &ADCTSY         < MEMORISATION DE LA FERMETURE
                                     < PAR RAZ DE L'ENTREE DE DCTSY(X).
         ADRI        -NSPFIL,X       < CALCUL DU NUMERO DE LA DCTF
                                     < DANS L'ENSEMBLE DES DCTF /0.
         LAD         AODCTF          < ADRESSE DU RELAI D'ACCES A
                                     < LA TABLE D'OCCUPATION DES DCTF.
         BSR         ATMOBT          < LIBERATION DCTF, RAPPELONS QUE
                                     < (Y)=1 (FONCTION 'SET BIT').
         LAD         &ASDCTF
         BSR         ARLSE
<
< RELEASE DU BUFFER CONTENANT LA DCTF :
<
         LA          ARLBTP
         LR          A,W             < (W)=@DEMANDE DE RELEASE BUFFER.
         LR          L,A             < (A)=@MOT DU BUFFER ALLOUE A DCTF.
         SLLS        NOCMO=K         < CONVERSION EN UNE ADRESSE OCTET.
         STA         ARGDEM+ASDEM    < MISE EN ASDEM DE RELBTP.
         LAD         ARGDEM+ASDEM
         STA         ARGDEM+AMDEM    < L'ADRESSE OCTET DU BUFFER EST
                                     < RENVOYE PAR L'ASDEM DE RELBTP.
         BSR         ACHAND          < DEMANDE DE RELEASE BUFFER.
         BSR         ACHANW
         LAD         &ASXSGF
         BSR         ARLSE
E444:    EQU         $
         LYI         ECZERO          < CONDITION DE RETOUR OK.
E405:    EQU         $
         PLR         A,X,L,W
         RSR
         PAGE
<
<
<        D C T   D U   R E L E A S E U R   D E S
<        C L E F S   D ' U N   F I C H I E R
<                    D E L E T E  :
<
<
         CALL        #SISP CMS5 CHECK#
         CALL        #SISP CMS5 DOL1#
DCTRCF:  EQU         $
PSTRCF:  WORD        K;K;K;K;COM+DEPCS;DCTRCF;DEMRCF;PILRCF;HDLRCF;SMST;SO;SE
       #@ASCI        " RCF"          < #SISP CMS5 ASCI#
<
< BLOC DE DEMANDE AU SGF :
<
DEMRCF:  WORD        NILK            < NSPTYP.
         WORD        NILK            < OPDEM.
         DZS         LDEM0+DEMRCF-$
<
< PILE DU RELEASEUR :
<
         CALL        #SISP CMS5 DOL2#
PILRCF:  EQU         $-DEPILE
XWPILE:  VAL         40
         CALL        #SISP CMS5 GENPIL2#
         CALL        #SISP CMS5 CHECK#
         PAGE
<
<
<        R E L E A S E U R   D E S   C L E F S
<        D ' U N   F I C H I E R   D E L E T E  :
<
<
<        FONCTION :
<                      CE HANDLER N'EST PAS ACCESSIBLE PAR 'CHAND',
<                             EST TOUJOURS ACTIF. IL EST BLOQUE EN GENERAL DANS
<                             LOOKF, EN ATTENTE DE FICHIERS A L'ETAT OPEN &
<                             INEXISTANT (SUITE DONC A UN CLOSE-DELETE). LORSQU'
<                             EN A TROUVE UN, IL RECUPERE SES CLEFS UNE A UNE
<                             EN MODE NEXT, ET LES DELETE, PUIS ENFIN DEMANDE
<                             LA FERMETURE EN MODE CLOSE & INEXISTANT, MODE
<                             SPECIAL QUI LUI EST RESERVE.
<
<
         USE         W,DEM0
HDLRCF:  EQU         $
         LAI         MCOI            < RECHERCHE DE FICHIERS A L'ETAT
                                     < OPEN & INEXISTANT.
         SBT         BITRFE          < RECHERCHE PAR ETAT.
XWOR%1:  VAL         COSBT?XBITF3=FMASK(K=FCINST
XWOR%1:  VAL         COSBT?XBITF4=FMASK(K?XWOR%1=FCINST
         LBI         XWOR%1          < FICHIER DE TRAVAIL.
         LYI         NSPVID          < FAUX NVP MINIMUM FORCANT LE
                                     < PASSAGE DU SGF SUR 'DKB' EN
                                     < TRANSPARENT POUR 'RCF' ; IL N'EST EN EFFE
                                     < EN EFFET PAS UTILE QUE DE LA MEMOIRE
                                     < VIRTUELLE SOIT IMMOBILISEE POUR
                                     < LUI, CAR IL N'A PAS BESOIN D'ETRE
                                     < RAPIDE...
         BSR         AOPFIL          < OUVERTURE DU 1ER FICHIER
                                     < COINCIDANT.
         CPZR        X               < TEST DES CONDITIONS DE RETOUR...
         JNE         SYSRD4          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      PROBABLEMENT FAIRE UN 'JMP HDLRCF'...
<
SYSRD4:  EQU         $
<
<        T R A C E   D U   S Y S T E M E  :
<
         LAI         NSPRCF
         SWBR        A,A             < GENERATION D'UN FAUX NSPTYP.
         BSR         ATRACE
<
<        ON A ICI :
<                    (X)=NSPDCTF.
<
<
< MISE A JOUR DU BLOC DE DEMANDE SGF :
<
         SWBR        X,A
         STA         NSPTYP          < GENERATION DE L'EN-TETE DE LA
                                     < DEMANDE AU SGF.
         LYI         FOFONX          < FONCTION OPEN-NEXT ENREGISTREMENT
         LBI         FOFCR           < FONCTION CLOSE-RELEASE ENREGISTRE-
                                     < MENT.
<
< BOUCLE DE RELEASE DES ENREGISTREMENTS EN MODE NEXT :
<
E570:    EQU         $
         STY         ARGDEM+OPDEM    < FONCTION OPEN-NEXT ENREGISTREMENT
         BSR         ACHAND          < W A L'ADRESSE DU BLOC DE
                                     < DEMANDE SGF.
         WAIT        WEIO            < ATTENTE DE FIN D'OUVERTURE.
         LA          ARGDEM+ETADEM   < TEST DES CONDITIONS DE RETOUR.
         JANE        E571            < SI (A)#0, C'EST QUE C'EST
                                     < TERMINE : SOIT CATALOGUE
                                     < DES CLEFS ENTIEREMENT EXPLORE,
                                     < OU CATALOGUE VIDE...
         STB         ARGDEM+OPDEM    < FONCTION CLOSE-RELEASE.
         BSR         ACHAND
         BSR         ACHANW          < ATTENTE DE FIN DE CLOSE-RELEASE.
         JMP         E570            < NEXT CLEF.
<
< FERMETURE DU FICHIER :
<
E571:    EQU         $
         LR          X,A             < (X)=A=NSPDCTF.
         SBT         BITCFN          < MODE FERMETURE PAR NSP.
         LBI         MCIN            < DEMANDE DE FERMETURE A L'ETAT
                                     < CLOSE, INEXISTANT, ET SURTOUT
                                     < NON PARATGEABLE, MEMORISANT
                                     < AINSI QU'IL A DEJA ETE OUVERT
                                     < AU MOINS UNE FOIS.
         BSR         ACLFIL          < FERMETURE.
         JMP         HDLRCF          < ALLONS CHERCHER LE FICHIER
                                     < OPEN & INEXISTANT SUIVANT.
         PAGE
<
<
<        A L L O C A T I O N   D ' U N   D E S C R I P T E U R
<                    D ' E N R E G I S T R E M E N T  :
<
<
<        RESULTATS :
<                    AFILT (DCTF) =ADRESSE DU DESCRIPTEUR ALLOUE,
<                    AFILQ (DCTF) =ADRESSE+1 DU DESCRIPTEUR ALLOUE.
<                    MOT(DENI(DESCRIPTEUR)) <-- NOM INTERNE DU FICHIER,
<                    LE DESCRIPTEUR AYANT ETE NETTOYE AU PREALABLE...
<
<
<        RAPPEL PHILOSOPHIQUE :
<                      A CHAQUE ENREGISTREMENT LOGIQUE EST ASSOCIE
<                    UNE CLEF ; DANS LE DESCRIPTEUR DE CLEF, LORSQUE
<                    CELLE-CI EST A L'ETAT IDLE, ON TROUVE LE
<                    DESCRIPTEUR DE L'ENREGISTREMENT, SOI LA
<                    LA TETE ET LA QUEUE DE LA LISTE DE SECTEURS
<                    CHAINES QUI LE CONSTITUENT. LORSQUE LA CLEF
<                    EST A L'ETAT IN USE, CE DESCRIPTEUR EST RENDU
<                    RESIDENT, ET C'EST LE ROLE DE CETTE ROUTINE
<                    DE LUI ALLOUER 2 MOTS EN MEMOIRE.
<
<
<        I M P O R T A N T  :
<                      LORS D'UNE REINITIALISATION DU SYSTEME
<                    ('SYSINI'), SI UN OU PLUSIEURS DESCRIPTEURS
<                    D'ENREGISTREMENT SONT DIFFERENTS DE 0,
<                    CELA SIGNIFIE QUE CERTAINEMENT DES ENREGISTRE-
<                    MENTS ETAIENT ENCORE OUVERTS LORS DU
<                    RECHARGEMENT DU SYSTEME ; CONNAISSANT AINSI
<                    LE NOM INTERNE DES FICHIERS EN CAUSE (VOIR
<                    LE MOT 'DENI' DES DESCRIPTEURS), ON PEUT
<                    CONNAITRE LEUR 'TP', PUIS LA LISTE DES
<                    CLEFS, ET DONC LA CLEF 'IN USE', ET DONC
<                    RESTAURER MANUELLEMENT LES CHAINAGES
<                    D'ENREGISTREMENT SI NECESSAIRE...
<
<
         USE         L,DCT0
ADESC:   EQU         $
<
< RECHERCHE D'UN DESCRIPTEUR LIBRE :
<
         PSR         A
         LAD         &ASXSGF
         BSR         ARLSE           < POUR EVITER LES INTERBLOCAGES
         PLR         A
                                     < DANS LE CAS OU AUCUN DESCRIPTEUR
                                     < N'EST LIBRE.
         RQST        &ASEMDE         < ALLOCATION D'UN DESCRIPTEUR,
                                     < AVEC ATTENTE EVENTUELLE.
         RQST        &ASXSGF         <<<<PHASE CRITIQUE DU SGF.
         PSR         A,X
         LAD         ATODE           < ADRESSE DU RELAI VERS LA TABLE
                                     < D'OCCUPATION DES DESCRIPTEURS.
         NTRN
         LXI         X7/NBITMO
         TRN
                                     < (X)=NOMBRE DE MOTS DE LA TABLE D'OCCU-
                                     < PATION DES DESCRIPTEURS.
         BSR         ASOBT           < RECHERCHE DU 1ER LIBRE, DONT LE
                                     < NUMERO EST RENVOYE DANS A.
         JG          SYSRD5          < OK, (X) EST CORRECT...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ATTENTION, SI ON RELANCE LE
<                    SYSTEME, L'ADRESSE DU DESCRIPTEUR
<                    RENVOYEE SERA MAUVAISE, PUIS
<                    QUE CE DERNIER N'EXISTE PAS...
<
SYSRD5:  EQU         $
         SLLS        UDE=K           < CONVERSION DU NUMERO DE DESCRIP-
                                     < TEUR EN UN NUMERO DE MOT DANS
                                     < LE POOL.
         AD          ATDE            < (A)=@MOT DU DESCRIPTEUR ALLOUE.
         XR          A,W             < (A)=SAVE W, (W)=ADRESSE DESCRIPTEUR...
         DO          UDE
         STZ         K=FCDO,W        < NETTOYAGE AVANT UTILISATION...
         LX          VAR+FILNOM      < (X)=NOM INTERNE DU FICHIER, QUE L'ON
         STX         DENI,W          < DUPLIQUE DANS LE DESCRIPTEUR...
         XR          A,W             < RESTAURE...
         STA         VAR+AFILT       < ADRESSE DE L'ADRESSE DE LA
                                     < TETE DE L'ENREGISTREMENT.
         ADRI        DEMO1-DEMO0,A
         STA         VAR+AFILQ       < ADRESSE DE L'ADRESSE DE LA
                                     < QUEUE DE L'ENREGISTREMENT.
         PLR         A,X
         RSR
         PAGE
<
<
<        R E L E A S E   D ' U N   D E S C R I P T E U R
<                    D ' E N R E G I S T R E M E N T  :
<
<
<        ARGUMENT :
<                    AFILT (DCTF) =ADRESSE DESCRIPTEUR A RELEASER.
<
<
         USE         L,DCT0
RDESC:   EQU         $
<
<
<        A T T E N T I O N  :
<                      ON EST DANS UNE PHASE
<                    CRITIQUE DU 'SGF !!!
<
<
         PSR         A,X,Y
         LA          VAR+AFILT       < RECUPERATION DE L'ADRESSE DU
                                     < DESCRIPTEUR A RELEASER.
         XR          A,W             < (A)=SAVE W, (W)=ADRESSE DESCRIPTEUR.
         LX          VAR+FILNOM      < (X)=NOM INTERNE COURANT,
         LY          DENI,W          < (Y)=NOM INTERNE D'OUVERTURE,
         CPR         X,Y             < SONT-ILS IDENTIQUES ???
         JE          RDESC1          < OUI, OUFFF...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ETRE PRUDENT, CAR EN RELANCANT
<                    LE SYSTEME, ON RISQUE D'EFFACER DES
<                    INFORMATIONS UTILISEES PAR UN AUTRE...
<
RDESC1:  EQU         $
         DO          UDE
         STZ         K=FCDO,W        < NETTOYAGE POUR LA 'COPY'...
         XR          A,W             < RESTAURE...
         SB          ATDE            < CONVERSION EN UN NUMERO DE
                                     < MOT DANS LE POOL.
         SLRS        UDE=K           < (A)=NUMERO DU DESCRIPTEUR A RELEASER.
         LR          A,X             < (X)=NUMERO DU DESCRIPTEUR A RELEASER.
         LAD         ATODE           < ADRESSE DU RELAI D'ACCES A LA
                                     < TABLE D'OCCUPATION DES DESCRIP-
                                     < TEURS D'ENREGISTREMENT.
         LYI         FONSB1          < FONCTION SET BIT A 1.
         BSR         ATMOBT          < RELEASE DU DESCRIPTEUR.
         LAD         &ASEMDE
         BSR         ARLSE           < RELEASE D'UN DESCRIPTEUR
         PLR         A,X,Y
         RSR
         PAGE
<
<
<        A T T E N T   E V E V N E M E N T   E T   L I B E R A T I O N
<                    P R O V I S O I R E   D U   S G F  :
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DE LA DEMANDE ASSOCIEE A L'EVENEMENT.
<
<
         USE         W,DEM0
WAITR:   EQU         $
         PSR         A
         LAD         &ASXSGF         < LIBERATION DU SGF
         BSR         ARLSE
         PLR         A
         BSR         ACHANW          < ATTENTE EVENEMENT.
         RQST        &ASXSGF         < RETOUR SGF RE-ALLOUE.
         RSR                         < RETOUR SGF RE-ALLOUE.
         PAGE
<
<
<        H A N D L E R   D U   S G F  :
<
<
<        DEFINITION :
<                      LE HANDLER SGF EST FAIT D'UN CERTAIN NBRE DE ROUTINES
<                    SPECIFIQUES, REALISANT DES FONCTIONS BIEN DETERMINEES :
<
<                    - OPEN NEW ENREGISTREMENT,
<                    (=INSERTION D'UNE NOUVELLE CLEF DANS LE CATALO-
<                    GUE DU FICHIER, AVEC INITIALISATION DE L'ENREGISTRE
<                    MENT)
<                    - OPEN OPLD ENREGISTREMENT,
<                    (REPRISE D'UN ANCIEN ENREGISTREMENT POUR
<                    POUR RELECTURE OU MISE A JOUR)
<                    - OPEN NEXT ENREGISTREMENT,
<                    (ACCES A L'ENREGISTREMENT DONT LA CLEF
<                    EST LA CLEF SUIVANT LA CLEF OUVERTE
<                    PRECEDEMMENT)
<                    - CLOSE RELEASE ENREGISTREMENT,
<                    (SUPPRESSION DE LA CLEF DU CATALOGUE ET DELETE
<                    DE L'ENREGISTREMENT)
<                    - CLOSE SAVE ENREGISTREMENT,
<                    (ABANDON PROVISOIRE DE L'ENREGISTREMENT, LA CLEF
<                    ETANT CONSERVEE DANS LE CATALOGUE)
<                    - LECTURE SEQUENTIELLE ENREGISTREMENT,
<                    (LECTURE EN SEQUENTIEL D'1 SECTEUR DE L'ENREGISTREMENT)
<                    - LECTURE SEQUENTIELLE ET DELETE ENREGISTREMENT,
<                    (LECTURE EN SEQUENTIEL D'1 SECTEUR DE L'ENREGISTRE-
<                    MENT ET RELEASE DU SECTEUR LU)
<                    - ECRITURE SEQUENTIELLE.
<                    (ECRITURE EN SEQUENTIEL D'1 SECTEUR DE L'ENRE-
<                    GISTREMENT)
<
<
<        ARGUMENTS :
<                    1- ECRITURE, LECTURE (-DELETE) :
<                            (AMDEM)=ADRESSE OCTET DU BUFFER DU DEMANDEUR,
<                            (CODEM)=NBRE D'OCTETS A ECHANGER+2
<                                    POUR LE CHAINAGE SEQUENTIEL DES
<                                    ENREGISTREMENTS PAR SGF (USAGE
<                                    INTERNE MAIS PREVU PAR L'UTILISATEUR)
<                    2- OPEN (NEW OU OLD) :
<                            (AMDEM)='PEK' DE LA CLEF,
<                            (CODEM)='PDK' DE LA CLEF.
<                    3- AUTRES CAS : NEANT.
<
<                    DANS TOUS LES CAS, ON A DANS OPDEM LA FONCTION :
<                    BIT12-15=
<                             0011 : OPEN NEXT,
<                             0100 : OPEN NEW,
<                             0101 : OPEN OLD,
<                             0110 : CLOSE RELEASE,
<                             0111 : CLOSE SAVE,
<                             1000 : LECTURE,
<                             1001 : LECTURE & DELETE,
<                             0010 : ECRITURE.
<                    BIT0=0 : EN GENERAL,
<                         1 : DANS LE CAS D'UNE ECRITURE DEMANDE DE
<                             DE PLUS EN CLOSE SAVE DE L'ENREGISTREMENT.
<                             (C'EST LE BIT 'EOF').
<
<
<        NOTION D'ENREGISTREMENT LOGIQUE :
<                      ON APPELLE ENREGISTREMENT LOGIQUE UNE
<                    SUITE SEQUENTIELLE DE SECTEURS CHAINES. L'ACCES
<                    A UN ENREGISTREMENT LOGIQUE NE PEUT QU'ETRE
<                    QUE SEQUENTIEL.
<                      A CHAQUE ENREGISTREMENT LOGIQUE EST ASSOCIE
<                    UNE CLEF PERMETTANT UNE IDENTIFICATION BIUNIVOQUE.
<                    L'ACCES AUX CLEFS EST LUI DIRECT.
<
<
<        RAPPEL :
<                      LE CHAINAGE SEQUENTIEL DES SECTEURS SE
<                    FAIT PAR LEUR MOT 0, LE NBRE D'OCTETS
<                    DISPONIBLES EST DONC DE 2*YY7*QUANTA-2.
<
<
<        RESULTATS :
<                      AU RETOUR, ON TROUVE DANS 'ETAT0'
<                    LES CODES HEXA-DECIMAUX SUIVANTS :
<
<                    (CODES HEXADECIMAUX)
<                    0000 : OK TOUT C'EST BIEN PASSE,
<                    8000 : LA CLEF EXISTE DEJA, ALORS QU'UN OPEN NEW
<                           A ETE DEMANDE,
<                    6000 : LA LISTE DES CLEFS EST VIDE, ALORS QU'UN
<                           CLOSE (SAVE/RELEASE), OU UN
<                           OPEN-OLD A ETE DEMANDE,
<                           OU FIN DE CATALOGUE DES CLEFS, ALORS
<                           QU'UN OPEN NEXT A ETE DEMANDE,
<                    2000 : LA CLEF EST INEXISTANTE, ALORS QU'UN CLOSE
<                           (SAVE/RELEASE) OU UN OPEN-OLD A ETE
<                           DEMANDE,
<                    4000 : LA CLEF N'EXISTE PAS, ET ON A PARCOURU
<                           TOUTE SA LISTE SEQUENTIELLE, ALORS QU'UN
<                           CLOSE (SAVE/RELEASE) OU UN OPEN-OLD A
<                           ETE DEMANDE,
<                    0001 : OPEN ENREGISTREMENT (OLD/NEW) ALORS QU'IL
<                           Y EN A DEJA UN EN COURS,
<                    0002 : CLOSE (RELEASE/SAVE) DEMANDE ALORS QU'IL
<                           N'Y A JAMAIS EU D'OPEN CORRESPONDANT,
<                    0003 : ECRITURE DEMANDEE, ALORS QU'IL N'Y A
<                           PAS EU D'OPEN,
<                    0004 : LECTURE DEMANDEE, ALORS QU'IL N'Y A PAS
<                           EU D'OPEN CORRESPONDANT,
<                    0005 : DELETE DEMANDE, ALORS QU'IL N'Y A PAS
<                           EU D'OPEN,
<                    0006 : LECTURE DEMANDEE, ALORS QUE L'ENREGISTREMENT
<                           EST SOIT VIDE, SOIT DEJA ENTIEREMENT LU.
<                    0008 : UN OPEN (OLD/NEW) EST DEMANDE SUR UNE
<                           CLEF NEGATIVE OU NULLE.
<                    0009 : OPEN-NEW DEMANDE AVEC UNE
<                           CLEF DE PDK IMPAIRE.
<                    000A : DEMANDE SGF SUR UNE DCTF CREE PAR UNE
<                           AUTRE TACHE.
<                    000B : L'OPEN ENREGISTREMENT DEMANDE EST IMPOS-
<                           SIBLE A REALISER ; IL S'AGIT D'UN CAS
<                           RARE CORRESPONDANT AU RECHARGEMENT DU
<                           SYSTEME (PLANTAGE, DEFSEC TROP LONG,...)
<                           ALORS QUE DES FICHIERS SONT OUVERTS : CES
<                           DERNIERS PEUVENT ETRE OUVERTS APRES
<                           RECHARGEMENT ; LES CLEFS RISQUENT ALORS
<                           DE CONTENIR NON PAS LES ADRESSES D'ENRE-
<                           GISTREMENT, MAIS LES ADRESSES DE DESCRIP-
<                           TEUR : ET C'EST CETTE ERREUR !!!
<
<
         IF          XXPL6-ECCED,,XEIF%,
         IF          ATTENTION : CODES ERRONNES !!!
XEIF%:   VAL         ENDIF
         IF          XXPL8-ECLV,,XEIF%,
         IF          ATTENTION : CODES ERRONES !!!
XEIF%:   VAL         ENDIF
         IF          XXPL9-ECCI2,,XEIF%,
         IF          ATTENTION : CODES ERRONES !!!
XEIF%:   VAL         ENDIF
         IF          XXPL10-ECCI1,,XEIF%,
         IF          ATTENTION : CODES ERRONES !!!
XEIF%:   VAL         ENDIF
<
<
<        UTILISATION DE ETAT1 (ETAT+1) :
<                    ETAT1=K : IL N'Y A PAS EU D'OPEN ENREGISTREMENT
<                              (OLD/NEW),
<                    ETAT1=1 : UN OPEN ENREGISTREMENT (OLD/NEW) A EU
<                              LIEU.
<
<
<        UTILISATION DE NSPDDR (ZONE VARIABLE) :
<                    - A L'OPEN FILE : NSPDDR<--(NS) DE LA TACHE
<                                              FAISANT L'OPEN,
<                    - AU CLOSE FILE : NSPDDR<--0,
<                    - A TOUTE ENTREE DANS LE SGF :
<                                    ON COMPARE (NS) & (NSPDDR).
<
<
<        UTILISATION DU BIT15 DE PDK :
<                      A PRIORI UN PDK DOIT ETRE UN NBRE PAIR ;
<                    LE CATALOGUE DES CLEFS NE CONTIENT DONC QUE
<                    DES CLEFS PAIRES. LORSQUE L'ON VEUT RECHERCHER
<                    LA CLEF SUIVANTE D'UNE CLEF DONNE, IL
<                    SUFFIT DE CHERCHER A PLACER DANS LE CATALOGUE
<                    LA CLEF IMMEDIATEMENT SUPERIEURE A LA CLEF
<                    DONNEE ; AVEC CES CONVENTIONS DE PARITE,
<                    CETTE CLEF IMMEDIATEMENT SUPERIEURE S'OBTIENT
<                    EN RENDANT PDK IMPAIR...
<
<
<        UTILISATION :
<                    (CLEFS,CLEFS+1) CONTIENT EN PERMANENCE LA
<                    CLEF COURANTE OU LA CLEF PRECEDENTE S'IL N'Y
<                    A PAS D'OPEN EN COURS.
<                    1- OPEN-NEXT : ACCEDERA A LA CLEF SUIVANT CELLE
<                    CONTENUE DANS (CLEFS,CLEFS+1).
<                    OPEN-OLD AVEC UNE PDK IMPAIRE : DONNERA LA
<                    CLEF SUIVANT CELLE DONNEE EN ARG.
<
<
         PAGE
<
<
<        H A N D L E R   G E N E R A L
<        D E   G E S T I O N   D E   F I C H I E R S  :
<
<
<        FONCTION :
<                      CE HANDLER EST CHARGE DE LA RECUPERATION
<                    DE LA FONCTION, ET DE L'APPEL DE LA ROUTINE SPECI-
<                    FIQUE. DE PLUS IL INITIALISE A ET B :
<                    (Y)=NOM DIRECT DU FICHIER.
<                    (A)=AMDEM (EVENTUEL PEK),
<                    (B)=CODEM (EVENTUEL PDK).
<
<                      DE PLUS, IL IGNORE NSPTYP QUI LUI EST TRANSMIS
<                    DANS A PAR HANDLR.
<
<
         USE         L,DCT0
         USE         W,DEM0
HDLFIL:  EQU         $
<
< TEST DE PROPRIETE DE LA 'DCTF' :
<
         LA          ARGDEM+ETADEM   < ACCES NIVEAU DEMANDEUR.
         CP          VAR+NSPDDR      < LE DEMANDEUR EST-IL CELUI QUI
                                     < A FAIT L'OPEN...
         JE          E498            < OK, C'EST BON, ENTRONS DANS
                                     < LE SGF.
<
< CAS OU LA TACHE DEMANDEUSE N'EST PAS CELLE QUI A FAIT
< L'OPEN DCTF, OU BIEN CAS D'UNE DEMANDE ARRIVANT APRES
< QUE CETTE MEME TACHE AIT FAIT UN CLOSE DCTF...
<
         LYI         ECEN
         JMP         E497
<
< ENTREE DANS LE SGF :
<
E498:    EQU         $
         LXI         MKESEF          < MASQUE DE FONCTION.
         LA          ARGDEM+OPDEM
         ANDR        A,X             < GENERATION D'UN INDEX D'AIGUILLAGE FONCTI
                                     < FONCTION DE CE QUI EST DEMANDE.
         LA          ARGDEM+AMDEM
         LB          ARGDEM+CODEM
         LY          VAR+FILNOM      < NOM DIRECT DU FICHIER DANS Y.
         RQST        &ASXSGF         <<<<PHASE CRITIQUE DU SGF.
         BSR         &AFOFIL         < EXECUTION DE LA FONCTION...
         LAD         &ASXSGF
         BSR         ARLSE
E497:    EQU         $
         STY         ETAT0           < LA CONDITION DE RETOUT (Y)
                                     < EST SAUVEGARDEE DANS ETAT0.
         RSR
         PAGE
<
<
<        F I L T R A G E   E T   S - F I L T R A G E   D U   S G F  :
<
<
<        FONCTION :
<                      CES ROUTINES SONT CHARGEES DE DE FILTRER LES
<                    DEMANDES QUI ARRIVENT SUR LE HANDLER SGF. EN
<                    EFFET DANS LE CAS OU UN ENREGISTREMENT EST VIDE,
<                    OU DANS LE CAS OU ON EST AU BOUT EN LECTURE,
<                    IL FAUT DIFFERER LES DEMANDES DE LECTURE,
<                    JUSQU'A CE QUE DES DEMANDES D'ECRITURE SOIENT
<                    APPARUES.
<
<
<        ARGUMENT :
<                    (L)=ADRESSE DCTF.
<
<
         USE         L,DCT0
         USE         W,DEM0
FFILTR:  EQU         $
         LA          ARGDEM+OPDEM
         ANDI        MKESEF)MKOPDM   < TEST DU BIT12.
         JAE         E411            < OK, PAS DE FILTRAGE (A=K),
                                     < IL S'AGIT D'OPEN, CLOSE OU
                                     < ECRITURE
<
< CAS D'UNE LECTURE OU D'UNE LECTUE-DELETE :
<
FSFILT:  EQU         $
<
< TEST DE PARTAGIBILITE DU FICHIER : EN
< EFFET SI LE FICHIER EST NON PARTAGEABLE
< IL NE FAUT PAS FILTRER, CAR UNE DEMANDE
< BLOQUEE LE SERAIT POUR L'ETERNITE, PERSONNE
< NE POUVANT LA DEBLOQUER.
<
         LX          VAR+FILNOM      < (X)=NOM-DIRECT DU FICHIER.
         LAI         MTSGF           < DEMANDE D'ETAT EN RETOUR.
         BSR         AMTEDF          < RENVOIE : (A)=ETAT(FICHIER (X)).
         TBT         XBITF2          < TEST DU BIT PARTAGEABLE.
         LAI         NIL-ZERO        < PAS DE FILTRAGE A PRIORI.
         JC          E411            < LE FICHIER ETANT NON PARTAGEABLE
                                     < PAS DE FILTRAGE.
<
< CAS DES FICHIERS PARTAGEABLES :
<
         LA          VAR+NFILR       < TEST DE L'ADRESSE DU PROCHAIN
                                     < SECTEUR A LIRE.
         AND         INFINI
<
<        ON A ICI :
<                    (A)=Q8000 : CELA SIGNIFIE QU'IL N'Y A PAS DE
<                              PROCHAIN SECTEUR A LIRE, IL FAUT DONC
<                              FILTRER LES DEMANDES DE LECTURE ET
<                              LECTURE-DELETE.
<                    (A)=K : CELA SIGNIFIE QU'IL Y A UN PROCHAIN
<                          SECTEUR A LIRE, DONC PAS DE FILTRAGE.
<
E411:    EQU         $
         RSR         < A EST OK (=K OU #0).
         PAGE
<
<
<        D E P L A C E M E N T   D E S   A R G U M E N T S
<        D ' U N E   D E M A N D E   A U   S G F   V E R S
<                    U N E   D E M A N D E   D I S Q U E  :
<
<
<        FONCTION :
<                      TRANSFERT DES ARGUMENTS (AMDEM & CODEM) DE LA
<                    DEMANDE AU SGF VERS LA DEMANDE DISQUE DFILDK.
<                      DE PLUS EMPILE DE MANIERE CORRECTE W (@DEMANDE
<                    AU SGF) DANS LA PILE.
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DEMANDE AU SGF.
<
<
<        RESULTAT :
<                    (W) DE LA DEMANDE AU SGF DANS LA PILE,
<                    (W)=ADRESSE DE DFILDK.
<
<
<        A T T E N T I O N  :
<                      DETRUIT LE REGISTRE 'A' !!!
<
<
         USE         L,DCT0
         USE         W,DEM0
DADF:    EQU         $
         LA          NSPTYP
         TBT         TYPAD           < L'ADRESSE EST-ELLE BIEN EN OCTETS ???
         JNC         DADF1           < OUI, OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      VACHEMENT GAFFE (!?!??!), CAR EN
<                    EFFET A MAINTS ENDROITS, ON EXPLOITE
<                    'AMDEM' EN LA SUPPOSANT A PRIORI EN
<                    ADRESSE OCTETS !!!
<
DADF1:   EQU         $
         LA          ARGDEM+AMDEM    < ACCES A L'ADRESS D'OCTET DU
                                     < BUFFER DEMANDEUR.
         STA         VAR+AFILDK+AMDEM
         LRM         A
         WORD        YY8Q            < (A)=COMPTE D'OCTETS MAXIMUM.
         CP          ARGDEM+CODEM    < VALIDATION DU CODEM...
         JGE         SYSRD6          < OK, CODEM<== YY7*2*QUANTA.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      EN REALITE CE N'EST PAS UNE
<                    ERREUR, ON POURRA RELANCER
<                    LE SYSTEME, A CONDITION DE METTRE
<                    AU PREALABLE DANS LE 'CODEM' LA
<                    VALEUR 'YY8*QUANTA'='YY8Q'...
<
         LRM         A
         WORD        YY8Q
         STA         ARGDEM+CODEM    < ET VOILA, C'EST PLUS SUR EN LE
                                     < PROGRAMMANT...
SYSRD6:  EQU         $
         LA          ARGDEM+CODEM    < (A)=COMPTE D'OCTETS ARGUMENT.
<
<
<        A T T E N T I O N  :
<                      1 MOT (2 OCTETS) DOIT ETRE
<                    RESERVE EN TETE DE CHAQUE BUFFER SGF
<                    POUR LE MOT DE CHAINAGE SEQUENTIEL.
<                    CE MOT DOIT ETRE INCLU DANS LE COMPTE
<                    D'OCTETS DE LA DEMANDE SGF, MAIS DOIT
<                    ETRE LIBRE DE TOUTE INFORMATION, SOUS
<                    PEINE DE SA DESTRUCTION...
<
<
         STA         VAR+AFILDK+CODEM
         LA          ARGDEM+OPDEM    < ACCES A LA FONCTION.
         ANDI        FGR?FGW         < (A)=K SI LECTURE, (A)=2 SI ECRITURE.
         STA         VAR+AFILDK+OPDEM
         PLR         A               < 'A' RECOIT LE 'P' DE RETOUR DE DADF.
         PSR         W               < SAVE (W)=@DEMANDE AU SGF.
         PSR         A               < REMISE DU 'P' DE RETOUR EN PILE.
         LAD         VAR+DFILDK
         LR          A,W             < (W)=@DFILDK.
         RSR
         PAGE
<
<
<        L E C T U R E - E C R I T U R E
<        D ' U N   S E C T E U R   A V E C
<        O U   S A N S   A T T E N T E  :
<
<
<        ARGUMENTS :
<                    (W)=ADRESSE DEMANDE D'E/S (DFILDK),
<                    (X)=ADRESSE DU SECTEUR A ECHANGER (SUR 'DKM').
<                    (Y)=K SI ATTENTE DE FIN D'ENTREE-SORTIE,
<                       =1 SI PAS D'ATTENTE.
<
<
XXGF2::  VAL         K               < ATTENTE DE FIN D'E/S,
XXGF3::  VAL         XXGF2+I         < PAS D'ATTENTE DE FIN D'E/S.
<
<
<        PHILOSOPHIE DU MODE PRIORITAIRE :
<                      IL EST POSSIBLE DE RELEASER UN SECTEUR
<                    APRE AVOIR LANCER UNE E/S SANS ATTENTE
<                    SUR LUI, MAIS POUR EVITER QU'UNE
<                    AUTRE TACHE QUI SE L'AIT FAIT ALLOUER
<                    NE FASSE DESSUS UNE E/S PRIORITAIRE, IL
<                    FAUT QUE L'E/S PRECEDENT LE RELEASE SOIT
<                    ELLE-MEME PRIORITAIRE.
<                      C'EST POURQUOI ICI, LORSQU'UNE DEMANDE
<                    EST FAITE 'SANS ATTENTE', ON LUI DONNE
<                    LE MODE PRIORITAIRE.
<
<
         USE         W,DEM0
ELESS:   EQU         $
         PSR         A
<
< ENVOI DE LA DEMANDE :
<
         STX         ARGDEM+ASDEM    < MISE EN PLACE DE L'ADRESSE
                                     < SECTEUR DANS DFILDK
         LBY         NSPTYP          < RECUPERATION DU NVP DKM/DKB.
XWOR%1:  VAL         MSPTYP=K        < POSITION DU 'NSP'...
XWOR%1:  VAL         NBITMO-B-XWOR%1
         SLLS        PRIO-XWOR%1     < CADRAGE...
         ADR         Y,A             < POSITIONNEMENT DU BIT DE MODE
                                     < PRIORITAIRE A 0 OU 1 SUIVANT
                                     < LA VALEUR DE Y
         SLLS        MSPTYP=K-PRIO+XWOR%1 < CADRAGE DU 'NSPTYP'.
         STA         NSPTYP
         BSR         ACHAND          < ENVOI DE LA DEMANDE.
<
< TEST D'ATTENTE :
<
         CPZR        Y
         JNE         E413            < LE RETOUR IMMEDIAT EST DEMANDE.
<
< CAS OU L'ATTENTE EST DEMANDEE :
<
         BSR         AWAITR          < ATTENTE AVEC DEBLOCAGE DU SGF.
E413:    EQU         $
<
< A PRIORI, ON INHIBE SYSTEMATIQUEMENT
< LA TRANSMISSION DE (SLO,SLE) PAR LE 'SGF' :
<
         LA          BITSEM
         SBT         BISOSE
         STA         BITSEM
         PLR         A
         RSR
         PAGE
<
<
<        A L O C A T I O N - R E L E A S E
<        S E C T E U R   A V E C   A T T E N T E  :
<
<
<        ARGUMENT :
<                    CODEM(DFILS)=NBRE DE SECTEURS A ALLOUER/RELEASER,
<                    BIT0(A)=K : RELEASER,
<                           =1 : ALLOUER,
XXGF1::  VAL         L               < DEFINITION DU BIT ALLOUER/RELEASER.
<                    BIT1-15(A)=ADRESSE MOT DE LA LISTE DES SECTEURS
<                               A ALLOUER/RELEASER.
<
<
<        A T T E N T I O N  :
<                      DETRUIT LE REGISTRE 'A' !!!
<
<
         USE         W,DEM0
         USE         L,DCT0
ELARS:   EQU         $
         PSR         W
         TBT         XXGF1           < TEST DU SENS ALLOUER/RELEASE.
         RBT         XXGF1           < RAZ DU BIT0 A PRIORI.
         STA         VAR+AFILS+AMDEM < MAJ DE DFILS.
         LAD         VAR+DFILS
         LR          A,W             < (W)=@DEMANDE ALLOCATION/RELEASE.
         LAI         NSPREL
         ADCR        A               < (A)=NSPGET/NSPREL SUIVANT QUE
                                     <     BIT0(A)=1 OU 0.
         IF          NSPGET-NSPREL-BIT,,XEIF%,
         IF          ATTENTION : LE 'ADCR' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         SWBR        A,A
         STA         NSPTYP          < MAJ DE LA DEMANDE.
         BSR         ACHAND          < ENVOI DE LA DEMANDE.
         BSR         AWAITR          < ATTENTE D'ALLOCATION/RELEASE
                                     < AVEC DEBLOCAGE DU SGF.
         PLR         W
         RSR
         PAGE
<
<
<        A C C E S   A   T P   L O R S
<        D ' U N   O P E N - C L O S E
<        E N R E G I S T R E M E N T  :
<
<
<        ARGUMENTS :
<                    (L)=ADRESSE DCTF.
<
<
<        RESULTAT :
<                    (W)=ADRESSE DE LA TP DU FICHIER EN MEMOIRE.
<
<
         USE         L,DCT0
ACTP2:   EQU         $
         PSR         A,X
         LX          VAR+FILNOM      < (X)=NOM-DIRECT DU FICHIER.
XWOR%1:  VAL         COSBT?XBITF3=FMASK(K=FCINST
XWOR%1:  VAL         COSBT?XBITF4=FMASK(K?XWOR%1=FCINST
         LAI         XWOR%1          < ETAT FICHIER 'TRAVAIL' POUR
                                     < NE PAS AVOI D'ENNUIS.
         BSR         AACTP
<
<        ON A ICI :
<                    (W)=ADRESSE DE LA TP DU FICHIER EN MEMOIRE.
<
         PLR         A,X
         RSR
         PAGE
<
<
<        I N I T I A L I S A T I O N   D ' U N   O P E N
<                    E N R E G I S T R E M E N T  :
<
<
<        ARGUMENTS :
<                    (Y)=Q8000.OR.NOM-DIRECT SI OPEN NEW (INSERT),
<                       ='0800.OR.NOM-DIRECT SI OPEN OLD (TEST-OPEN),
<                    (L)=ADRESSE DCTF.
<                    (A,B)=LA CLEF.
<
<
<        RESULTAT :
<                    (Y)=K SI OPEN AUTORISE,
<                       =1 SI OPEN IMPOSSIBLE UN OPEN AYANT
<                          DEJA EU LIEU.
<                       =8 SI OPEN IMPOSSIBLE CAR DEMANDE POUR UNE
<                          CLEF NEGATIVE OU NULLE.
<                       =11 : OPEN IMPOSSIBLE PARCEQUE LE FICHIER
<                             A DES PETITS PROBLEMES SUITE A UN
<                             RECHARGEMENT DU SYSTEME...
<
<
<        A T T E N T I O N  :
<                      DETRUIT LE REGISTRE 'X' !!!
<
<
<        T R E S   I M P O R T A N T  :
<                      TANT QUE LA 'TP' DU FICHIER EST EN
<                    MEMOIRE, ON NE PEUT FAIRE DE RLSE
<                    SEXSGF DE DEBLOCAGE DU SGF...
<                      EN EFFET ON RISQUERAIT DE MODIFIER
<                    L'ETAT DES TP EN MEMOIRE...
<
<
         USE         L,DCT0
         USE         W,DEM0
OPN1:    EQU         $
<
< TEST D'UN EVENTUEL OPEN-ENREGISTREMENT EN COURS :
<
         LX          ETAT1
         CPZR        X
         JE          E414            < OK, ON PEUT OUVRIR.
<
< CAS OU IL Y A DEJA UN OPEN EN COURS :
<
         LYI         ECFC            < ERREUR 'OPEN DEJA EN COURS'.
         JMP         E415XY
<
< VALIDATION DE LA CLEF (PEK) :
<
E414:    EQU         $
         LXI         K               < INITIALISATION DU COMPTE DE BITS A 1.
         TBT         BXKE0           < BIT LIBRE/OCCUPE.
         ADCR        X
         TBT         BXKE1           < BIT DE DEBORDEMENT.
         ADCR        X
         TBT         BXKE2           < BIT DE DERNIER DESCRIPTEUR.
         ADCR        X
         TBT         NBITMO+BXKE4    < BIT IN USE/IDLE.
         ADCR        X
         CPZR        X               < X-A-T'IL AU MOINS UN BIT A 1 ???
         JE          E466            < NON, ILS SONT TOUS A 0, LA CLEF
                                     < PARAIT BONNE... (A NOTER QU'ELLE
                                     < PEUT AVOIR UNE 'PEK' NULLE : CECI DANS
                                     < LE CAS D'UN OPEN 'NEXT'...
         LYI         ECEC1           < ERREUR CLEF NEGATIVE OU NULLE.
         JMP         E415XY
<
< CAS OU L'OPEN EST POSSIBLE :
<
E466:    EQU         $
         BSR         AADESC          < ALLOCATION D'UN DESCRIPTEUR
                                     < D'ENREGISTREMENT.
         LX          VAR+AFILT       < RECUPERATION DE L'ADRESSE
                                     < DU DESCRIPTEUR D'ENREGISTREMENT
                                     < ALLOUE.
         STX         TEST1           < POUR MISE A JOUR DU DESCRIPTEUR
                                     < DE LA CLEF (A,B).
         PSR         W
         BSR         AACTP2          < ACCES A LA TP DU FICHIER DANS W.
         BSR         APLSC           < ARGUMENTS : A,B,Y,W.
         PLR         W
<
< TEST DES CONDITIONS DE RETOUR DE PLSC :
<
         CPZR        Y
         JE          E415            < OK, L'OPEN EST BON.
<
< CAS OU L'OPEN NE PEUT AVOIR LIEU :
<
E415Y:   EQU         $
         BSR         ARDESC          < RELEASE DU DESCRIPTEUR
                                     < D'ENREGISTREMENT.
         JMP         E415XY          < Y CONTIENT LE CODE ERREUR.
<
< CAS OU L'OPEN PEUT AVOIR LIEU :
<
E415:    EQU         $
         LA          PEK             < EN FAIT PEK&PDK N'ONT ETE
                                     < MODIFIES QUE SI L'ON A FAIT
                                     < UN OPEN-NEXT.
         LB          PDK             < (ALORS PLSC A MODIFI PEK ET PDK).
         STA         VAR+CLEFS+CLEFSE < SAUVEGADRE DE LA CLEF DANS LA
         STB         VAR+CLEFS+CLEFSD < 'DCTSGF'.
BXKE44:: VAL         BXKE4           < BXKE44 PERMET DE PRECISER RAPIDEMENT
                                     < LA VALEUR DE LA 'PDK' :
                                     < 0 : (PDK)=K (CAS FREQUENT),
                                     < 1 : (PDK)#0...
         CPZR        B               < COMMENT EST LA 'PDK' ???
         JE          E415XX          < NULLE, YOUPI...
         SBT         BXKE44          < NON, ALORS ON LE MENTIONNE DANS 'PEK'...
E415XX:  EQU         $
         XR          A,X
         BSR         ASTBOX          < MISE EVENTUELLE DANS LA 'BOX' DE
                                     < 'PEK' ET DE 'BXKE44'.
         XR          A,X
         IF          BXKE44-BXKE0,,XEIF%,
         IF          ATTENTION : 'BXKE44' EST MAL CHOISI !!!
XEIF%:   VAL         ENDIF
<
< MISE EN RESIDENT DU DESCRIPTEUR DE L'ENREGISTREMENT ASSOCIE
< A LA CLEF (A,B) :
<
         LA          TEST1
         JAL         E415X           < ILS'AGIT BIEN D'UNE ADRESSE DE
                                     < SECTEUR DISQUE 'DKM'...
         CP          NSMGB           < L'ADRESSE PRESUMEE (A) EST-ELLE
                                     < BIEN DANS L'ESPACE ALLOUABLE DE 'DKM' ???
         IF          XDKSYM,,XEIF%,
         IF          ATTENTION : LES 2 TESTS CI-DESSUS SONT MAUVAIS !!!
XEIF%:   VAL         ENDIF
         JGE         E415X           < OUI, C'EST BIEN UNE ADRESSE DISQUE...
         LYI         ECDSYS          < NON, 'OPEN' REFUSE...
         JMP         E415Y           < ET ON ARRETE LA...
E415X:   EQU         $
         IC          ETAT1           < MEMORISATION D'UN OPEN ENREGIS-
                                     < TREMENT EN COURS...
         STA         &VAR+AFILT      < MAJ DE LA TETE DE L'ENREGISTREMENT.
         LA          TEST2
         STA         &VAR+AFILQ      < MAJ DE LA QUEUE DE L'ENREGISTREMENT.
         LA          INFINI
         STA         VAR+NFILW       < INITIALISATION DE L'ADRESSE DU
                                     < PROCHAIN SECTEUR A ECRIRE.
E415XY:  EQU         $               < SORTIE...
         RSR
         PAGE
<
<
<        O P E N - O L D   E N R E G I S T R E M E N T  :
<
<
<        ARGUMENTS :
<                    (Y)=NOM-DIRECT DU FICHIER AUQUEL APPARTIENT
<                        L'ENREGISTREMENT,
<                    (L)=ADRESSE DCTF.
<                    (A,B)=LA CLEF.
<
<
         USE         L,DCT0
         USE         W,DEM0
OPNOK:   EQU         $
         JALE        OPNOK1          < POUAHHH... (PEK<=0)
         CP          C1FFF           < VALIDATION SUPERIEURE...
         JLE         OPNOK3          < OK...
OPNOK1:  EQU         $
         LYI         ECEC1           < (Y)=CODE D'ERREUR...
         JMP         E416XX          < VERS LA SORTIE...
OPNOK3:  EQU         $
         TBT         NBITMO+BXKE4    < LE BIT 'BXKE4' DE 'PDK' DOIT ETRE A 0 :
         JNC         OPNOK4          < EFFECTIVEMENT...
         LYI         ECEC2           < (Y)=CODE D'ERREUR...
         JMP         E416XX          < VERS LA SORTIE...
OPNOK4:  EQU         $
<
< TRONC COMMUN "OPEN OLD" ET "OPEN NEXT" :
<
OPNONK:  EQU         $
XWOR%1:  VAL         COSBT?BXPL2=FMASK(K=FCINST
XWOR%2:  VAL         MOCG=K
XWOR%2:  VAL         -XWOR%2         < POUR UN DECALAGE A DROITE...
         LXI         XWOR%1>XWOR%2
         SWBR        X,X             < (X)='0800 (FONCTION TEST-OPEN).
         ORR         X,Y             < (Y)=TEST-OPEN.OR.NOM-DIRECT.
         BSR         AOPN1           < DEMANDE D'OUVERTURE DE
                                     < L'ENREGISTREMENT.
<
< TEST DES CONDITIONS DE RETOUR :
<
         CPZR        Y
         JNE         E416XX          < Y CONTIENT DEJA LE CODE-ERREUR.
<
< CAS OU L'OPEN A EU LIEU :
<
         LA          &VAR+AFILT      < ACCES A LA TETE DE L'ENREGISTREMENT.
         STA         VAR+NFILR       < INITIALISATION DE L'ADRESSE DU
                                     < PROCHAIN SECTEUR A LIRE AVEC LA
                                     < TETE DE L'ENREGISTREMENT.
E416XX:  EQU         $
         RSR                         < (Y)=K, OK.
         PAGE
<
<
<        O P E N - N E W   E N R E G I S T R E M E N T  :
<
<
<        ARGUMENTS :
<                    (Y)=NOM-DIRECT DU FICHIER AUQUEL APPARTIENT
<                        L'ENREGISTREMENT,
<                    (L)=ADRESSE DCTF.
<                    (A,B)=CLEF.
<
<
         USE         L,DCT0
         USE         W,DEM0
OPNNK:   EQU         $
         JALE        OPNNK1          < VALIDATION DE 'PEK'...
         CP          C1FFF           < IL FAUT QUE BIT0=BIT1=BIT2=K
         JLE         E499
OPNNK1:  EQU         $
         LYI         ECEC1           < ERREUR : 'PEK' INVALIDE
         JMP         E417XX
<
< CAS D'UNE 'PEK' VALIDE :
<
E499:    EQU         $
         TBT         NBITMO+BXKE5    < TEST PARITE DE PDK DANS LE
         JC          E4991           < CAS D'UN OPEN-NEW: IL EST
                                     < INTERDIT D'INSERER DES CLES
                                     < IMPAIRES SI L'ON VEUT QUE
                                     < LE FONCTIONNEMENT DU MODE NEXT
                                     < SOIT CORRECT
         TBT         NBITMO+BXKE4    < DE PLUS, PDK DOIT ETRE > 0
         JNC         E478
E4991:   EQU         $
         LYI         ECEC2           < ERREUR PDK
         JMP         E417XX
<
< CAS D'UN PDK CORRECT LORS D'UN OPEN NEW
<
E478:    EQU         $
         LX          INFINI          < (X)=FONCTION INSERT.
         ORR         X,Y             < (Y)=FONCTION-INSERT.OR.NOM-DIRECT.
         BSR         AOPN1           < DEMANDE D'OUVERTURE.
<
< TEST DES CONDITIONS DE RETOUR :
<
         CPZR        Y
         JE          E417            < OK, L'OPEN A LIEU.
<
< CAS OU L'OPEN N'A PU AVOIR LIEU :
<
         JMP         E417XX          < Y CONTIENT DEJA LE CODE-ERREUR.
<
< CAS OU L'OPEN A EU LIEU :
<
E417:    EQU         $
         LA          INFINI
         STA         VAR+NFILR       < INITIALISATION DE L'ADRESSE DU
                                     < PROCHAIN SECTEUR A LIRE AVEC
                                     < L'INFINI.
E417XX:  EQU         $               < SORTIE...
         RSR                         < (Y)=K, OK.
         PAGE
<
<
<        O P E N - N E X T   E N R E G I S T R E M E N T  :
<
<
<        ARGUMENTS :
<                    (L)=ADRESSE DCTF.
<                    (CLEFS,CLEFS+1)=CLEF PRECEDENTE,
<                    (Y)=NOM-DIRECT DU FICHIER.
<
<
         USE         L,DCT0
         USE         W,DEM0
OPNEXT:  EQU         $
         LA          VAR+CLEFS+CLEFSE < RECUPERATION DE LA
         LB          VAR+CLEFS+CLEFSD < CLEF COURANTE...
         SBT         NBITMO+BXKE5    < POSITIONNEMENT DU MODE NEXT.
         JMP         OPNONK          < ON EST RAMENE A OPEN-OLD...
         PAGE
<
<
<        I N I T I A L I S A T I O N   D ' U N   C L O S E
<                    E N R E G I S T R E M E N T  :
<
<
<        ARGUMENTS :
<                    (Y)='6800.OR.NOM-DIRECT SI CLOSE-SAVE,
<                       ='6000.OR.NOM-DIRECT SI DELETE-RELEASE,
<                    (L)=ADRESSE DCTF.
<
<
<        RESULTAT :
<                    (Y)=K SI CLOSE AUTORISE,
<                       =2 SI CLOSE IMPOSSIBLE, AUCUN OPEN N'AYANT
<                          EU LIEU.
<
<
         USE         L,DCT0
         USE         W,DEM0
CLO1:    EQU         $
<
< TEST SUR OPEN EN COURS :
<
         LX          ETAT1
         ADRI        -I,X
         CPZR        X
         JE          E418            < OK, ETAT1=1, IL Y A DONC EU
                                     < UN OPEN AVANT.
<
< CAS OU IL N'Y A PAS EU D'OPEN AVANT :
<
         LYI         ECEO            < CODE ERREUR CLOSE DEMANDE SANS
                                     < OPEN.
         JMP         E418XX
<
< CAS OU IL Y A EU UN OPEN AVANT LA DEMANDE DE CLOSE :
<
E418:    EQU         $
<
< SAUVEGARDE DU DESCRIPTEUR D'ENREGISTREMENT
< DANS LE DESCRIPTEUR DE CLEF :
<
         LX          &VAR+AFILT      < RECUPERATION DE LA TETE DE
                                     < L'ENREGISTREMENT.
         STX         TEST1
         LX          &VAR+AFILQ      < RECUPERATION DE LA QUEUE DE
                                     < L'ENREGISTREMENT.
         STX         TEST2
         LA          VAR+CLEFS+CLEFSE < RECUPERATION DE LA
         LB          VAR+CLEFS+CLEFSD < CLEF COURANTE...
         XR          B,X
         BSR         ASTBOX          < RENVOI EVENTUEL DE 'PDK' DANS LA BOX...
         XR          B,X
         PSR         W
         BSR         AACTP2          < MISE EN MEMOIURE DE LA TP
                                     < DU FICHIER.
         BSR         APLSC           < Y POSSEDE LA FONCTION DEMANDEE.
         PLR         W
<
< TEST DES CONDITIONS DE RETOUR :
<
         CPZR        Y
         JE          SYSRD7          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      PEUT-ETRE UN 'JMP E418XX'...
<
SYSRD7:  EQU         $
         DC          ETAT1           < ETAT1=K, ON MEMORISE
                                     < AINSI QU'IL N'Y A PLUS
                                     < D'OPEN EN COURS.
E418XX:  EQU         $
         RSR                         < (Y)=K, OK.
         PAGE
<
<
<        C L O S E   S A V E   D ' U N   E N R E G I S T R E M E N T  :
<
<
<        ARGUMENTS :
<                    (Y)=NOM-DIRECT DU FICHIER,
<                    (L)=ADRESSE DCTF.
<
<
         USE         L,DCT0
         USE         W,DEM0
CLOSK:   EQU         $
         LA          VAR+NFILW       < TEST DU PROCHAIN SECTEUR A ECRIRE.
         CP          INFINI          < EXISTE-T-IL?
         JNE         E465            < OUI, IL EXISTE
<
< CAS OU LE PROCHAIN SECTEUR A ECRIRE N'EXISTE PAS (Q8000) :
<
XWOR%1:  VAL         MXPL1=K
XWOR%2:  VAL         XXPL2>XWOR%1    < CADRAGE DE LA FONCTION DE DELETE.
XWOR%3:  VAL         COSBT?BXPL2=FMASK(K?XWOR%2=FCINST
XWOR%4:  VAL         MOCG=K
XWOR%4:  VAL         -XWOR%4         < POUR UN CADRAGE A DROITE...
         LXI         XWOR%3>XWOR%4
         SWBR        X,X             < (X)='6800=FONCTION DE DELETE-CLOSE.
         ORR         X,Y             < (Y)='6800.OR.NOM-DIRECT.
         BSR         ACLO1           < DEMANDE DE FERMETURE DE
                                     < L'ENREGISTREMENT EN SAVE.
<
< TEST DES CONDITIONS DE RETOUR :
<
         CPZR        Y
         JNE         E419            < ERREUR, LE CLOSE EST REFUSE.
         BSR         ARDESC          < DANS LE CAS OU LE CLOSE EST
                                     < ACCEPTE ON RELEASE LE DESCRIPTEUR
                                     < D'ENREGISTREMENT.
E419:    EQU         $
         RSR                         < OK, Y EST CORRECT.
<
< CAS OU LE PROCHAIN SECTEUR A ECRIRE EXISTE :
<
E465:    EQU         $
<
< TRANSFORMATION DE LA DEMANDE DE CLOSE
< SAVE EN UNE DEMANDE D'ECRITURE AVEC EOF ;
< LE SECTEUR QUE L'ON VA ECRIRE EN
< QUEUE DE L'ENREGISTREMENT CONTIENT
< 2 CARACTERES 'EOT' CONSECUTIFS.
<
         LAI         FGW             < FONCTION ECRITURE.
         SBT         EOF             < AVEC 'EOF'.
         STA         ARGDEM+OPDEM    < MAJ DE L'OPDEM DE LA DEMANDE
                                     < ARGUMENT DU CLOSK.
         LAI         K
XKREG:   VAL         K               < INITIALISATION DU CUMUL DES REGISTRES...
       #@PSR         A               < #SISP CMS5 KREG#
                                     < LE MOT COURANT EST LE PREMIER MOT DU
                                     < DERNIER BUFFER (IL DONNERA UN CHAINAGE
                                     < 'INFINI'...).
         LR          K,A             < (A)=@MOT DU MOT DE CHAINAGE SGF.
         SLLS        NOCMO=K
         STA         ARGDEM+AMDEM    < @OCTET DU DERNIER SECTEUR
                                     < DE L'ENREGISTREMENT.
KEOF::   VAL         KEOT            < CARACTERE DOUBLE DE FIN D'ENREGISTREMENT.
         LAI         KEOF            < 4 OCTETS ET CODE DU 'EOF'.
         STA         ARGDEM+CODEM    < 4 OCTETS : 1 MOT DE CHAINAGE
                                     < DU SGF, PLUS LES 2 'EOT'.
         SWBR        A,A
         ORI         KEOF            < (A)='0404='EOF''EOF'.
       #@PSR         A               < #SISP CMS5 KREG#
                                     < LE MOT SUIVANT DE LA PILE CONTIENT
                                     < 2 CARACTERES 'EOF'.
XKREG:   VAL         -XKREG          < NOMBRE DE MOTS DU BUFFER DE FERMETURE
                                     < DE L'ENREGISTREMENT...
         IF          XKREG*NOCMO-KEOF,,XEIF%,
         IF          ATTENTION, LES OPTIMISATIONS SIOUX QUI
         IF          PRECEDENT SONT IDIOTES !!!
XEIF%:   VAL         ENDIF
         BSR         AELWS           < ECRITURE DU SECTEUR CONTENU
                                     < DANS LA PILE K.
         ADRI        -XKREG,K        < DESTRUCTION DU BUFFER
                                     < REENTRANT DU SECTEUR.
         JMP         E419            < GO BACK.
         PAGE
<
<
<        C L O S E - R E L E A S E   D ' U N
<        E N R E G I S T R E M E N T  :
<
<
<        ARGUMENTS :
<                    (Y)=NOM-DIRECT DU FICHIER,
<                    (L)=ADRESSE DCTF.
<
<
         USE         L,DCT0
         USE         W,DEM0
CLORK:   EQU         $
XWOR%1:  VAL         MXPL1=K
XWOR%2:  VAL         XXPL2>XWOR%1    < CADRAGE DE LA FONCTION DE DELETE.
XWOR%4:  VAL         MOCG=K
XWOR%4:  VAL         -XWOR%4         < POUR UN CADRAGE A DROITE...
         LXI         XWOR%2>XWOR%4
         SWBR        X,X             < (X)='6000=FONCTION DELETE-DELETE.
         ORR         X,Y             < (Y)='6000.OR.NOM-DIRECT.
         BSR         ACLO1           < DEMANDE DE FERMETURE.
<
< TEST DES CONDITIONS DE RETOUR :
<
         CPZR        Y
         JNE         E424XX          < Y CONTIENT LE CODE-ERREUR.
<
< CAS D'UN CLOSE ACCEPTE :
<
<
< RELEASE DE L'ENREGISTREMENT :
<
         LAD         VAR+BFILDE      < 'BFILDE' EST PRIS COMME BUFFER.
         SLLS        NOCMO=K         < CONVERSION EN UNE ADRESSE-OCTET.
         STA         VAR+AFILDK+AMDEM
         LAI         NOCMO           < DEMANDE LECTURE 2 OCTETS, JUSTE
                                     < SUFFISANT POUR OBTENIR L'EN-
                                     < TETE DE CHAINAGE SEQUENTIEL.
         STA         VAR+AFILDK+CODEM
         STZ         VAR+AFILDK+OPDEM  < DEMANDE DE LECTURE (K).
         LX          &VAR+AFILT      < INITIALISATION DE L'ADRESSE
                                     < DISQUE DANS X AVEC LA TETE
                                     < DE L'ENREGISTREMENT.
         BSR         ARDESC          < ON PEUT MAINTENANT RELEASER
                                     < LE DESCRIPTEUR D'ENREGISTREMENT.
         LB          VAR+NFILW       < (B)=ADRESSE DU PROCHAIN SECTEUR
                                     <     A ECRIRE POUR TEST DE FIN DU
                                     <     PARCOURS DE L'ENREGISTREMENT EN
                                     <     SEQUENTIEL.
<
< LIBERATION DES SECTEURS : POUR ACCELERER LE
< PROCESSUS DE LIBERATION DES SECTEURS,ILS
< SONT GROUPES PAR PAQUET DE 16 DANS L 'PILS'.
< LE NBRE DE SECTEURS CONTENUS DANS CETTE
< PILE EST MIS DANS 'AFILS+CODEM'.
<
         STZ         VAR+AFILS+CODEM
         PSR         W               < SAVE @DEMANDE DE CLOSE-RELEASE.
         LAD         VAR+DFILDK
         LR          A,W             < (W)=@DEMANDE DFILDK.
<
< BOUCLE DE RELEASE DES SECTEURS :
<
E421:    EQU         $
<
< TEST DE FIN D'ENREGISTREMENT :
<
         LY          INFINI
         CPR         Y,X
         LYI         XXGF2           < DEMANDE AVEC ATTENTE A PRIORI
         JE          E422            < SI (X)=Q8000, C'EST LA FIN
         CPR         X,B
         JE          E422            < (X)=PROCHAIN SECTEUR A ECRIRE,
                                     < C'EST LA FIN AUSSI.
         LA          VAR+AFILS+CODEM < INDEX SECTEUR DANS LA PILE.
XWOR%1:  VAL         LLPILS=K
         TBT         NBITMO-B-XWOR%1
         ADCR        Y               < SI LA PILE EST PLEINE (A)=LLPILS
                                     < ET ALORS (Y)=1, ET LA DEMANDE SERA
                                     < SANS ATTENTE.
         BSR         AELESS          < LECTURE DE L'EN-TETE DU SECTEUR
                                     < D'ADRESSE (X) AVEC ATTENTE
                                     < EN GENERAL. DANS LE CAS OU LA
                                     < PILE EST PLEINE ON PROFITE DE LA
                                     < LECTURE (QUI SERA PRIORITAIRE)
                                     < POUR RELEASER LA PILE DE SECTEURS.
<
< PENDANT LA LECTURE ON VA METTRE EN PILE LE SECTEUR (X),
< ET EVENTUELLEMENT RELEASER LA PILE.
<
         CPI         LLPILS          < PILS FAIT LLPILS MOTS MAX
         JL          E423            < LA PILE N'EST APS PLEINE.
<
< CAS OU LA PILE DE BLOCAGE DES BUFFERS EST PLEINE :
<
         LA          VAR+APILS
         RBT         XXGF1           < (A)=@DE LA PILE DES SECTEURS
                                     <     A RELEASER.
         BSR         AELARS          < DEMANDE RELESAE (BIT0(A)=K)
                                     < DE LLPILS SECTEURS.
                                     < ET ATTENTE DE FIN DE RELEASE,
                                     < AFIN DE LIBERER LA PILE DE BLOCAGE.
         STZ         VAR+AFILS+CODEM
         LAI         K               < INDEX DU 1ER SECTEUR DE LA PILE.
<
< MISE EN PILE DE BLOCAGE :
<
E423:    EQU         $
         IC          VAR+AFILS+CODEM < ET 1 SECTEUR DE PLUS DANS LA PILE.
         XR          A,X
<
<        ON A ICI :
<                    (X)=INDEX COURANT DE LA PILE,
<                    (A)=ADRESSE DU SECTEUR A RELAESER.
<
         STA         &VAR+APILS      < MISE EN PILE.
         CPZR        Y               < L'ATTENTE DE FIN DE LECTURE EST-ELLE
                                     < DEJA FAITE...
         JE          E462            < OUI...
         BSR         AWAITR          < ATTENTE DE FIN DE LECTURE.
E462:    EQU         $
<
< RECUPERATION DU CHAINAGE DES SECTEURS :
<
         LX          VAR+BFILDE      < LE BUFFER CONTIENT L'EN-TETE DU
                                     < SECTEUR QUE L'ON VIENT DE LIRE.
         JMP         E421
<
< RENCONTRE DE LA FIN D'ENREGISTREMENT :
<
E422:    EQU         $
         LA          VAR+AFILS+CODEM
         JAE         E424            < LA PILE EST VIDE.
<
< CAS OU LA PILE EST NON VIDE A LA FIN DE L'ENREGISTREMENT :
<
         LA          VAR+APILS
         RBT         XXGF1
         BSR         AELARS          < RELEASE DES SECTEURS PRESENTS
                                     < DANS LA PILE ET ATTENTE DE FIN DE RELEASE
                                     < DE RELEASE.
E424:    EQU         $
         PLR         W               < RESTAURE @DEMANDE DE CLOSE-RELEASE.
E424XX:  EQU         $               < SORTIE...
         RSR                         < (Y)=K, OK.
         PAGE
<
<
<        V A L I D A T I O N   D E S   L E C T U R E S  :
<
<
<        ARGUMENTS :
<                    (W)=ADRESSE DE DEMANDE DE LECTURE,
<                    (L)=ADRESSE DCTF.
<
<
<        RESULTAT :
<                    (X)=ADRESSE DU SECTEUR A LIRE.
<                    (Y)=K SI LECTURE POSSIBLE,
<                       =4 SI LECTURE IMPOSSIBLE, AUCUN OPEN N'AYANT
<                          EU LIEU,
<                       =6 SI LECTURE IMPOSSIBLE L'ENREGISTREMENT ETANT
<                          VIDE OU ENTIEREMENT LU.
<
<
<        A T T E N T I O N  :
<                      DETRUIT LE REGISTRE 'A' !!!
<
<
         USE         L,DCT0
         USE         W,DEM0
ELR1:    EQU         $
<
< TEST SUR UN OPEN-ENREGISTREMENT EN COURS :
<
         LY          ETAT1
         ADRI        -I,Y
         CPZR        Y
         JE          E425            < OK, ETAT1=1, IL Y A UN OPEN
                                     < ENREGISTREMENT EN COURS.
<
< CAS D'UNE DEMANDE DE LECTURE, ALORS QU'IL N'Y A PAS D'OPEN :
<
         LYI         ECRPO           < CODE-ERREUR.
         JMP         E426
<
< CAS D'UNE DEMANDE DE LECTURE AVEC OPEN PREALABLE :
<
E425:    EQU         $
         LX          VAR+NFILR       < RECUPERATION DU SECTEUR SUIVANT.
                                     < A LIRE.
         LY          INFINI
         CPR         X,Y             < CE SECTEUR EXISTE-T-IL?
         LYI         ECZERO
         JNE         E426            < OUI, IL EXISTE, ON PEUT DONC
                                     < LE LIRE...
<
< CAS D'UNE DEMANDE DE LECTURE ALORS QUE
< L'ENREGISTREMENT EST SOIT VIDE, SOIT
< DEJA ENTIEREMENT LU :
<
         LYI         ECLEV
E426:    EQU         $
         RSR                         < A NOTER QUE SI LA LECTURE
                                     < EST POSSIBLE, ON (Y)=K.
         PAGE
<
<
<        R E C U P E R A T I O N   D U   C H A I N A G E
<        S E Q U E N T I E L   D E S   S E C T E U R S
<                    L O R S   D ' U N E   L E C T U R E  :
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DFILDK.
<                    (SLO,SLE)=DEFINISSENT L'ESPACE DE
<                              TRAVAIL QUI EST UTILISE
<                              TEL QUEL, CONTRAIREMENT A 'ELCH'...
<
<
<        RESULTAT :
<                    (X)=CHAINAGE VERS LE SECTEUR SUIVANT DE
<                        L'ENREGISTREMENT,
<                    NFILR=ADRESSE DU SECTEUR SUIVANT (CF. X).
<
<
<        A T T E N T I O N  :
<                      DETRUIT LE REGISTRE 'A' !!!
<
<
         USE         L,DCT0
         USE         W,DEM0
ELR2:    EQU         $
         PSR         Y
         LA          ARGDEM+AMDEM    < RECUPERATION DE L'ADRESSE
                                     < OCTET DU BUFFER DE LECTURE.
         SLRS        NOCMO=K         < CONVERSION EN UNE ADRESSE-MOT.
                                     < RAPPEL : LES BUFFERS DISQUE
                                     < SONT TOUJOURS A DES FRONTIERES
                                     < DE MOTS (CF. ADM).
         LR          A,Y             < (Y)=ADRESSE ABSOLUE DU PREMIER MOT DU
                                     <     BUFFER DANS LA PAGE DONNEE PAR 'SLO'.
         IF          XCHSGF-O,,XEIF%,
         ADRI        XCHSGF,Y        < POUR ATTEINDRE LE CHAINAGE...
XEIF%:   VAL         ENDIF
<
<
<        A T T E N T I O N  :
<                      CETTE ROUTINE NE PEUT ETRE APPELEE QU'APRES
<                    QUE LA LECTURE SE SOIT ACHVEE, PUISQU'ELLE
<                    RECUPERE DE L'INFORMATION DE CHAINAGE DANS
<                    LE SECTEUR LU...
<
<
         LAR                         < RECUPERATION DANS 'A' DU CHAINAGE VERS
                                     < LE SECTEUR SUIVANT DE L'ENREGISTREMENT.
<
< TRUANDAGE PARESSEUX
<
         LR          A,X             < (X)=ADRESSE DU SECTEUR SUIVANT OU
                                     <     L'INFINI SI LE SECTEUR COURANT
                                     <     EST LE DERNIER...
         CP          INFINI
         JE          E460X           < FIN D'ENREGISTREMENT...
         IF          NLSTS-K,,XEIF%,
         IF          ATTENTION : DE NOMBREUX PROGRAMMES UTILISATEURS
         IF          VONT MERDER (TEL 'EDITS'...) !!!
XEIF%:   VAL         ENDIF
         LAI         NLSTS
         STAR                        < AINSI, LE PREMIER MOT DU BUFFER
                                     < EST TOUJOURS NUL, SAUF DANS LE
                                     < CAS DE LA FIN D'ENREGISTREMENT...
E460X:   EQU         $
<
<
<        A T T E N T I O N  :
<                      LE PROCHAIN SECTEUR (X) EST PEUT-ETRE
<                    EN FAIT LE PROCHAIN SECTEUR A ECRIRE QUI N'EXISSTE PAS
<                    ENCORE :
<
<
         LA          VAR+NFILW       < ACCES PROCHAIN SECTEUR A ECRIRE.
         CPR         A,X             < COMPARAISON DU SECTEUR SUIVANT
                                     < (X) ET DU PROCHAIN SECTEUR A
                                     < ECRIRE (A).
         JNE         E460            < ILS DIFFERENT, OK.
<
< CAS OU L'ON EST CHAINE SUR LE PROCHAIN SECTEUR A ECRIRE :
<
         LX          INFINI          < LE PROCHAIN SECTEUR A LIRE
                                     < N'EXISTE PAS JUSQU'A CE QUE
                                     < LE PROCHAIN SECTEUR A ECRIRE
                                     < SOIT ECRIT.
E460:    EQU         $
         STX         VAR+NFILR       < (X) EST LE PROCHAIN SECTEUR
                                     < A LIRE.
         PLR         Y
         RSR
         PAGE
<
<
<        L E C T U R E   D ' U N   S E C T E U R
<        D ' U N   E N R E G I S T R E M E N T  :
<
<
<        ARGUMENTS :
<                    (W)=ADRESSE DE LA DEMANDE DE LECTURE,
<                    (L)=ADRESSE DCTF.
<
<
         USE         L,DCT0
         USE         W,DEM0
ELRS:    EQU         $
         BSR         AELR1           < PREPARATION DE LA LECTURE.
<
< LA LECTURE EST-ELLE POSSIBLE :
<
         CPZR        Y
         JNE         E427XX          < Y EST CORRECT.
<
< CAS OU LA LECTURE EST POSSIBLE :
<
<
<        ON A ICI :
<                    (Y)=K,
<                    (X)=ADRESSE DU SECTEUR A LIRE.
<
         BSR         ADADF           < PREPARATION DE L'EXECUTION
                                     < LA DEMANDE DE LECTURE,
                                     < TRES IMPORTANT : SAVE W...
         LA          BITSEM          < ATTENTION : POUR 'ELESS' QUI VA SUIVRE,
         RBT         BISOSE          < ON AUTORISE LA TRANSMISSION DE (SLO,SLE)
         STA         BITSEM          < AFIN D'ACCEDER A L'ESPACE UTILISATEUR...
         BSR         AELESS          < DEMANDE LECTURE AVEC ATTENTE
                                     < (CF. (Y)=K, PUISQUE OK) DU SECTEUR
                                     < D'ADRESSE (X) ; A LA FIN DE LA LECTURE
                                     < ON INHIBE LA TRANSMISSION DE (SLO,SLE).
         BSR         AELR2           < RECUPERATION DU PROCHAIN
                                     < SECTEUR A LIRE DANS CET
                                     < ENREGISTREMENT.
         PLR         W               < RESTAURE @DEMZNDE DE LECTURE SGF,
                                     < RAPPELONS QUE LE PSR AVAIT ETE
                                     < FAIT PAR AADF.
E427XX:  EQU         $               < SORTIE...
         RSR                         < RETOUR OK, AVEC (Y)=K.
         PAGE
<
<
<        L E C T U R E   E T   D E L E T E
<                    D ' U N   S E C T E U R
<        D ' U N   E N R E G I S T R E M E N T  :
<
<
<        ARGUMENTS :
<                    (W)=ADRESSE DE LA DEMANDE DE LECTURE-DELETE,
<                    (L)=ADRESSE DCTF.
<
<
         USE         L,DCT0
         USE         W,DEM0
ELRDS:   EQU         $
         BSR         AELR1           < VALIDATION DE LA DEMANDE DE
                                     < LECTURE.
<
< LA LECTURE EST-ELLE POSSIBLE :
<
         CPZR        Y
         JNE         E428XX          < Y EST CORRECT.
<
< CAS OU LA LECTURE EST POSSIBLE :
<
<
<        ON A CI :
<                    (X)=ADRESSE DU SECTEUR A LIRE,
<                    (Y)=0.
<
         BSR         ADADF           < PREPARATION DE LA DEMANDE
                                     < LECTURE.
         LYI         XXGF2           < DEMANDE DE LECTURE AVEC ATTENTE.
         LA          BITSEM          < ATTENTION : POUR 'ELESS' QUI VA SUIVRE
         RBT         BISOSE          < ON AUTORISE LA TRANSMISSION DE (SLO,SLE)
         STA         BITSEM          < AFIN D'ACCEDER A L'ESPACE UTILISATEUR...
         BSR         AELESS          < LECTURE DU SECTEUR (X) AVEC ATTENTE ;
                                     < EN FIN DE LECTURE, ON INHIBE LA TRANS-
                                     < MISSION DE (SLO,SLE).
<
< RELEASE DU SECTEUR LU (X) :
<
         LAD         ARGDEM+ASDEM    < ADRESSE DE L'ADRESSE
                                     < SECTEUR A RELEASER.
         STY         VAR+AFILS+CODEM < DEMANDE DE RELEASE 1 SECTEUR.
         BSR         AELARS          < DEMANDE DE RELEASE (BIT0(A)=K),
                                     < AVEC ATTENTE DE FIN DE RELEASE.
<
< MISE A JOUR DE LA CHAINE DE L'ENREGISTREMENT :
<
         BSR         AELR2           < RECUPERATION DU PROCHAIN SECTEUR
                                     < A LIRE.
<
<        ON A ICI :
<                    (X)=ADRESSE DU PROCHAIN SECTEUR A LIRE.
<
         STX         &VAR+AFILT      < MISE A JOUR DE LA TETE DE
                                     < L'ENREGISTREMENT.
         LY          INFINI
         CPR         X,Y
         JNE         E428            < OK, L'ENREGISTREMENT N'EST PAS
                                     < VIDE
<
< CAS OU ON A RENCONTRE LA FIN DE L'ENREGISTREMENT :
<
         STX         &VAR+AFILQ      < ON MET AUSSI A JOUR LA QUEUE DE
                                     < CHAINE QUI EST VIDE MAINTENANT.
E428:    EQU         $
         PLR         W               < RESTAURE @DEMANDE LECTURE-DELETE.
                                     < LE PSR CORRESPONDANT AYANT ETE
                                     < FAIT PAR ADADF.
         LYI         ECZERO          < RETOUR OK.
E428XX:  EQU         $
         RSR
         PAGE
<
<
<        C H A I N A G E   D E S   S E C T E U R S
<        L O R S   D ' U N E   E C R I T U R E  :
<
<
<        ARGUMENTS :
<                    (W)=ADRESSE DE LA DEMANDE 'DFILDK',
<                    (L)=ADRESSE DCTF,
<                    (B)=ADRESSE DU SECTEUR SUIVANT (A METTRE EN TETE DU
<                        SECTEUR COURANT AVANT SON ENVOI SUR DISQUE).
<                    BISOSE(BITSEM)=1 : ON UTILISE (SLO,SLE)=(SO,SE), CE
<                                       QUI SIGNIFIE QUE L'ON TRAVAILLE
<                                       DANS LA PAGE 0 (CAS DE "EOF" PAR
<                                       EXEMPLE...),
<                                  =0 : ON UTILISE (SLO,SLE) TELS QUELS
<                                       AFIN DE TRAVAILLER DANS L'ESPACE
<                                       ARGUMENT (C'EST LE CAS COURANT, OU
<                                       EN COURS D'ENREGISTREMENT, ON CHAINE
<                                       LES SECTEURS ENTRE EUX...).
<
<
<        A T T E N T I O N  :
<                      DETRUIT LE REGISTRE 'A' !!!
<
<
         USE         L,DCT0
         USE         W,DEM0
ELCH:    EQU         $
         PSR         B,Y
         LR          B,Y             < (Y)=ADRESSE DU SECTEUR SUIVANT...
         CALL        #SISP CMS5 PSRSLO#
                                     < SAUVEGARDE DE (SLO,SLE) A PRIORI...
         LA          BITSEM
         TBT         BISOSE          < DANS QUELLE PAGE DE 32K FAUT-IL ALLER ???
         JNC         ELCH1           < DANS CELLE QUI EST DEFINIE PAR (SLO,SLE)
                                     < ARGUMENT (MODE NORMAL "UTILISATEUR"...).
         CALL        #SISP CMS5 PAGE0#
ELCH1:   EQU         $
         LR          Y,B             < (B)=ADRESSE DU SECTEUR SUIVANT...
         LA          ARGDEM+AMDEM    < RECUPERATION DE L'ADRESSE OCTET
                                     < DU BUFFER.
         SLRS        NOCMO=K         < CONVERSION EN UNE ADRESSE-MOT.
         LR          A,Y             < (Y)=ADRESSE ABSOLUE DU PREMIER MOT DU
                                     <     BUFFER DANS LA PAGE DEFINE PAR 'SLO'.
         IF          XCHSGF-O,,XEIF%,
         ADRI        XCHSGF,Y        < POUR ATTEINDRE LE CHAINAGE...
XEIF%:   VAL         ENDIF
         LR          B,A             < (A)=CHAINAGE VERS LE SECTEUR SUIVANT,
         STAR                        < CHAINAGE DU SECTEUR COURANT VERS LE
                                     < SECTEUR SUIVANT...
                                     < RESTAURATION DE (SLO,SLE) A PRIORI :
         CALL        #SISP CMS5 PLRSLO#
         LR          Y,A             < ON REMET L'ADRESSE ABSOLUE DANS 'A' POUR
                                     < RESTER COMPATIBLE AVEC L'ANCIENNE VER-
                                     < SION DU SYSTEME ?!???!
         PLR         B,Y
         RSR
         PAGE
<
<
<        E C R I T U R E   D ' U N   S E C T E U R  :
<
<
<        ARGUMENTS :
<                    (W)=ADRESSE DE LA DEMANDE DE LECTURE,
<                    (L)=ADRESSE DCTF.
<
<
         USE         L,DCT0
         USE         W,DEM0
ELWS:    EQU         $
         LA          ARGDEM+OPDEM
         TBT         EOF             < EST-CE LA FERMETURE DU FICHIER ???
         JC          E430X           < OUI, PAS DE TEST SUR 'NSL' ALORS ;
                                     < EN EFFET, CE RETOUR EN ERREUR, PROVO-
                                     < QUERAIT UN REFUS DE FERMETURE DU FICHIER,
                                     < D'OU UNE 'SYSER' DANS LE 'CCI'...
         LA          NSL             < (A)=NOMBRE DE Q-SECTEURS LIBRES,
         SLRS        S               < ON DECALE, CAR EN GENERAL 'NSL' EST
                                     < UN NOMBRE SUR 16 BITS...
XWOR%9:  VAL         -S
         IF          XXSGNT>XWOR%9-NDCTF,,,XEIF%
         IF          ATTENTION, POUR NE PAS AVOIR D'ENNUIS, IL
         IF          FAUT QUE LE SEUIL UTILISE POUR 'NSL'
         IF          SOIT STRICTEMENT SUPERIEUR AU NOMBRE
         IF          DE FICHIERS OUVRABLES A UN INSTANT
         IF          DONNE !!!
XEIF%:   VAL         ENDIF
         CPI         XXSGNT>XWOR%9   < ON UTILISE LE SEUIL ARBITRAIRE
                                     < DE 'HDLSTN'...
         JGE         E430X           < OK, ON PEUT ECRIRE...
         LYI         ECEPOV          < ET NON, ON NE DEMANDE PAS DE Q-SECTEUR,
                                     < ET ON N'ECRIT DONC PAS...
         JMP         E436XX          < ET ON SORT EN ERREUR...
E430X:   EQU         $
<
< VALIDATION DE L'ECRITURE :
<
         LA          ETAT1
         CPI         W
         JE          E430            < OK, IL Y A EU UN OPEN.
<
< CAS OU IL N'Y A PAS EU D'OPEN, LA LECTURE EST IMPOSSIBLE :
<
         LYI         ECEPO           < CODE LECTURE DEMANDEE, ET
                                     < OPEN NON EN COURS.
         JMP         E436XX
<
< CAS OU L'ECRITURE PEUT AVOIR LIEU,  UN OPEN AYANT EU LIEU :
<
E430:    EQU         $
         STA         VAR+AFILS+CODEM < POUR DEMANDE D'ALLOCATION
                                     < D'UN SECTEUR.
         LX          VAR+NFILW       < ACCES A L'ADRESSE DU PROCHAIN
                                     < SECTEUR A ECRIRE.
         LR          X,A
         CP          INFINI          < EXISTE-T-IL SEULEMENT?
         JNE         E434            < OUI, C'EST BON...
<
< CAS OU LE PROCHAIN SECTEUR A ECRIRE N'EXISTE PAS :
<
         LAD         VAR+NFILW       < ADRESSE MEMOIRE OU METTRE
                                     < L'ADRESSE DU SECTEUR ALLOUE.
         SBT         XXGF1           < BIT0 DE DEMANDE D'ALLOCATION.
         BSR         AELARS          < DEMANDE D'ALLOCATION D'1SECTEUR
                                     < AVEC ATTENTE.
         LX          &VAR+AFILQ      < TEST DE LA QUEUE DE L'ENREGISTRE-
                                     < MENT.
         LR          X,A
         CP          INFINI
         JE          E431            < L'ENREGISTREMENT EST VIDE...
<
< CAS D'UNE MISE A JOUR D'UN ENREGISTREMENT DEJA EXISTANT
< EN EFFET, LE NFILW N'EXISTE PAS CELA SIGNIFIE
< QUE L'ON A FAIT UN OPEN-OLD SUR L'ENREGISTREMENT,
< CE QUI EST VERIFIE PAR LE FAIT QUE L'ENREGISTREMENT
< N'EST PAS VIDE.
<  ON EST DONC OBLIGER DE RECCHAINER LE DERNIER SECTEUR
< DE L'ENREGISTREMENT (QUEUE) SUR LE SECTEUR QUE
< L'ON VA ECRIRE ; IL FAUT DONC RELIRE LA QUEUE ET POUR
< CELA, IL FAUT DEMANDER UN BUFFER ; A NOTER QUE
< CELA EST POSSIBLE, CAR EN EFFET LE SECTEUR QUE
< L'ON RELIT NE CONTIENT QUE LE CHAINAGE 'INFINI'
< ET LE CODE "EOF""EOF"...
<
         PSR         W
         LAD         VAR+DFILS       < ON VA UTILISER LA DEMANDE
                                     < D'ALLOCATION SECTEUR POUR
                                     < L'ALLOCATION BUFFER.
         LR          A,W             < (W)=@DFILS.
         LAI         NSPALB
XWOR%1:  VAL         MSPTYP=K
XWOR%1:  VAL         NBITMO-XWOR%1
         SBT         PRIO-XWOR%1     < FUTUR BIT DE MODE PRIORITAIRE.
         SWBR        A,A             < GENERATION DU NSP D'ALLOCATIO
                                     < BUFFER.
         STA         NSPTYP
         LAD         VAR+AFILDK+AMDEM
                                     < ON VA METTRE L'ADRESSE DU BUFFER
                                     < ALLOUE DIRECTEMENT DANS DFILDK.
         STA         ARGDEM+AMDEM    < (W)=@DFILS.
         BSR         ACHAND          < ENVOI DE LA DEMANDE.
         LAI         YY7
         SLLS        NOCMO=K         < (A)=YY8 OCTETS A LIRE.
         STA         VAR+AFILDK+CODEM
         STZ         VAR+AFILDK+OPDEM  < DEMANDE DE LECTURE (K).
         LAD         VAR+DFILDK
         LYI         XXGF2           < DEMANDE DE LECTURE AVEC ATTENTE.
         BSR         AWAITR          < ARRIVE ICI, ON EST OBLIGE
                                     < LA FIN D'ALLOCATION BUFFER.
<
< ARRIVE ICI, ON UN BUFFER ALLOUE :
<
         LR          A,W             < (W)=@DEMANDE DFILDK.
         BSR         AELESS          < LECTURE AVEC ATTENTE DU SECTEUR
                                     < D'ADRESSE (X).
<
< ARRIVE ICI, ON A DANS LE BUFFER ALLOUE, LE SECTEUR
< DE QUEUE D'ENREGISTREMENT.
<
         LB          VAR+NFILW       < RECUPERATION DU PROCHAIN SECTEUR
                                     < AECRIRE DANS B.
         BSR         AELCH           < CHAINAGE DE LA QUEUE VERS NFILW.
         LAI         FGW
         STA         ARGDEM+OPDEM    < DEMANDE D'ECRITURE.
         BSR         AELESS          < REECRITURE DU SECTEUR DE
                                     < QUEUE D'ENREGISTREMENT (X)
                                     < AVEC ATTENTE (Y VAUT ENCORE 0).
<
< RELEASE DU BUFFER DE TRAVAIL : EN EFFET LORSQU'ON
< ARRIVE ICI, C'EST QUE LE SECTEUR DE QUEUE A ETE REECRIT :
<
         LAD         VAR+DFILS
         LR          A,W             < (W)=@DFILS.
         LAI         NSPRLB
         SWBR        A,A
         STA         NSPTYP          < GENERATION DU NSPTYP DE
                                     < RELEASE BUFFER.
         BSR         ACHAND          < ENVOI DE LA DEMANDE.
         BSR         AWAITR          < ATTENTE DE FIN DE RELEASE.
         PLR         W               < RESTAURE @DEMANDE D'ECRITURE.
<
< ECRITURE DU SECTEUR COURANT (X) :
<
E431:    EQU         $
         LX          VAR+NFILW       < LE PROCHAIN SECTEUR A ECRIRE
                                     < DEVIENT LE SECTEUR COURANT (CELUI
                                     < QUE L'ON VA ECRIRE.
E434:    EQU         $
         LA          ARGDEM+OPDEM
         TBT         EOF             < TEST DU BIT EOF DANS LA DEMANDE
                                     < D'ECRITURE SGF.
         JC          E432            < OUI, C'EST DONC LE DERNIER
                                     < SECTEUR DE L'ENREGISTREMENT.
<
< CAS OU CE N'EST PAS LE DERNIER SECTEUR DE L'ENREGISTREMENT
< QUE L'ON ECRIT :
<
         LAD         VAR+NFILW       < ADRESSE OU METTRE L'ADRESSE DU
                                     < SECTEUR ALLOUE.
         SBT         XXGF1           < POSITIONNEMENT DU BIT
                                     < DEMANDE D'ALLOCATION.
         BSR         AELARS          < ALLOCATION D'1 SECTEUR ET
                                     < ATTENTE.
         LB          VAR+NFILW       < RECUPERATION DANS B DU SECTEUR
                                     < ALLOUE.
         LYI         XXGF2           < SI CE N'EST PAS LE DERNIER SECTEUR
                                     < DEMANDE AVEC ATTENTE.
         JMP         E433
<
< CAS DE L'ECRITURE DU DERNIER SECTEUR DE L'ENREGISTREMENT :
<
E432:    EQU         $
         LB          INFINI          < IL N'Y A PAS A ALLOER DE DERNIER
                                     < SECTEUR.
         STB         VAR+NFILW       < MAJ DE NFILW.
         LYI         XXGF3           < DANS LE CAS DU DERNIER SECTEUR
                                     < LA DEMANDE EST SANS ATTENTE,
                                     < ET DONC PRIORITAIRE ; LE TEMPS
                                     < D'ECRITURE SERA UTILISE POUR
                                     < FERMER (CLOSK) L'ENREGISTREMENT.
E433:    EQU         $
         CPZR        Y               < EST-CE LE DERNIER SECTEUR ???
         IF          XXGF3-K,XEIF%,,XEIF%
         IF          ATTENTION : LE TEST SUIVANT EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         JNE         E461X1          < OUI, IL EST ECRIT A PARTIR DE LA PILE
                                     < DU 'HDLSGF', EN CONSEQUENCES, IL FAUT
                                     < RESTER DANS LA PAGE 0 !!!
         LA          BITSEM          < ATTENTION : POUR 'ELESS' QUI VA SUIVRE,
         RBT         BISOSE          < ON AUTORISE LA TRANSMISSION DE (SLO,SLE),
         STA         BITSEM          < AFIN D'ATTEINDRE L'ESPACE RELATIF...
E461X1:  EQU         $
         BSR         AELCH           < CHAINAGE DU SECTEUR COURANT
                                     < VERS NFILW.
<
<        ON A ICI :
<                    (X)=ADRESSE DU SECTEUR A ECRIRE,
<                    (Y)=K SI CE N'EST PAS LE DERNIER SECTEUR,
<                       =1 SI C'EST LE DERNIER SECTEUR (EOF).
<
         BSR         ADADF           < MAJ DE LA DEMANDE D'ECRITURE DISQUE
                                     < DFILDK.
<
<
<        A T T E N T I O N  :
<                      'ADADF' A FAIT UN 'PSR''W' !!!
<
<
         BSR         AELESS          < ECRITURE DU SECTEUR (X) ; EN FIN D'ECRI-
                                     < TURE, LA TRANSMISSION DE (SLO,SLE) EST
                                     < INHIBEE...
         LA          VAR+NFILR       < TEST DE L'ADRESSE DU PROCHAIN
                                     < SECTEUR A LIRE.
         CP          INFINI
         JNE         E461            < C'EST BON, IL EXISTE DEJA
<
< (RE-)INITIALISATION DU PROCHAIN SECTEUR A LIRE AVEC LE SECTEUR QUE
< L'ON VIENT D'ECRIRE :
<
         STX         VAR+NFILR
E461:    EQU         $
         STX         &VAR+AFILQ      < MAJ DE LA QUEUE DE L'ENREGISTREMENT.
         LA          &VAR+AFILT      < ACCES A LA TETE DE L'ENREGISTREMENT.
         CP          INFINI
         JNE         E435            < C'EST BON, IL N'ETAIT PAS VIDE
<
< CAS OU L'ENREGISTREMENT ETAIT VIDE AVANT CETTE ECRITURE :
<
         STX         &VAR+AFILT      < MAJ DE LA TETE DE L'ENREGISTREMENT.
E435:    EQU         $
<
<        RAPPEL :
<                      DANS LE CAS OU CE N'EST
<                    PAS L'<EOF>, ON A :
<                                    (Y)=0 (RETOUR OK...).
<
         CPZR        Y               < TEST EOF OU PAS EOF...
         JE          E436            < CE N'EST PAS EOF, A NOTER
                                     < AU PASSAGE QUE L'ATTENTE DE FIN
                                     < D'ECRITURE EST DEJA FAITE.
<
< CAS OU L'EOF EST DEMANDE :
<
         LY          VAR+FILNOM      < RECUPERATION DU NOM-DIRECT DU
                                     < FICHIER.
         BSR         ACLOSK          < DEMANDE DE CLOSE-SAVE DE
                                     < L'ENREGISTREMENT.
         CPZR        Y               < TEST DES CONDITIONS DE RETOUR.
         JE          SYSRD8          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
SYSRD8:  EQU         $
         BSR         AWAITR          < ATTENTE DE FIN D'ECRITURE.
E436:    EQU         $
         PLR         W               < RESTORE (W)=@DEMANDE ECRITURE SGF.
E436XX:  EQU         $
         RSR
         PAGE
<
<
<        A L L O C A T I O N   D ' U N   S E C T E U R
<        P O U R   E X T E N S I O N   D ' U N E
<        L I S T E   S E Q U E N T I E L L E
<                    D E   C L E F S  :
<
<
<        ARGUMENT :
<                    (A)=ADRESSE DU MOT OU METTRE L'ADRESSE SECTEUR ALLOUE
<
<
<        A T T E N T I O N  :
<                      DETRUIT LE REGISTRE 'A' !!!
<
<
         USE         W,DEM0
ALSC:    EQU         $
         PSR         X,W
<
< TEST SUR L'ETAT DU STOCK DE SECTEURS DE PLSC :
<
         LX          NSTOCS
         CPZR        X
         JE          E320            < PAS DE SECTEURS EN STOCK, IL VA
                                     < DONC FALLOIR PASSER PAR
                                     < L'ALLOCATEUR DISQUE.
<
< CAS OU IL Y A AU MOINS UN SECTEUR EN STOCK :
<
         DC          NSTOCS          < ET UN SECTEUR DE MOINS...
         LR          A,W             < (W)=@ DU MOT OU METTRE L'@ SECTEUR
                                     <     ALLOUE.
         LA          &ASTOCS         < (A)=1ER SECTEUR DE LA PILE.
         STA         O,W             < RENVOI AU DEMANDEUR.
<
< RETOUR :
<
E321:    EQU         $
         PLR         X,W
         RSR
<
< CAS OU LE STOCK DE SECTEURS EST VIDE,
< PASSONS PAR L'ALLOCATEUR DISQUE :
<
E320:    EQU         $
         STA         RASCAM          < MAJ DE LA DEMANDE.
         LAI         NSPGET
XWOR%1:  VAL         MSPTYP=K
XWOR%1:  VAL         NBITMO-XWOR%1
         SBT         PRIO-XWOR%1     < BIT PRIORITAIRE (FUTUR BIT8(A).
         SWBR        A,A             < GENERATION DE L'EN-TETE DE LA
                                     < DEMANDE A CHAND.
         STA         RALSC
         LAD         RALSC
         LR          A,W             < (W)=ARG DE CHAND.
         BSR         ACHAND
         BSR         ACHANW          < ATTENTE DE FIN D'ALLOCATIOPN.
         JMP         E321            < LE SECTEUR EST ALLOUE, ON S'EN VA.
         PAGE
<
<
<        I N I T I A L I S A T I O N   D ' U N   S E C T E U R
<        D ' U N E   L I S T E   S E Q U E N T I E L L E
<                    D E   C L E F S  :
<
<
<        EN-TETE D'UN SECTEUR :
<                    MOT0=CHAINAGE VERS LE SECTEUR SUIVANT,
<                    MOT1=CHAINAGE VERS LE SECTEUR PRECEDENT,
<                    MOT2=K SI CE N'EST PAS UN SECTEUR DE DEBORDEMENT,
<                         DEPLACEMENT DU DESCRIPTEUR DE DEBORDEMENT CHAI-
<                         NANT CE SECTEUR DANS L'AUTRE CAS.
<                    MOT3=NBRE DE DESCRIPTEURS UTILISES DANS LE SECTEUR.
<
<
<        ARGUMENT :
<                    BIT0-7(A)=NBRE DE DESCRIPTEURS UTILISES INITIALIEMENT,
<                    BIT8-15(A)=DANS LE CAS OU CE SECTEU EST UN SECTEUR
<                               DE DEBORDEMENT, ON A ICI, LE DEPLACEMENT
<                               DU DESCRIPTEUR QUI A DEBORDE DANS SON
<                               SECTEUR,
<                    (L)=ADRESSE DU BUFFER CONTENANT LE SECTEUR
<                        A INITIALISER.
<                    (X)=ADRESSE SECTEUR PRECEDENT (POUR CHAINAGE ARRIERE).
<                    MOT D'ADRESSE (L)=ADRESSE DU SECTEUR A INITIALISER.
<
<
<        RESULTAT :
<                    (X)=ADRESSE SECTEUR INITIALISE,
<                    (W)=ADRESSE DU PREMIER DESCRIPTEUR DU SECTEUR=(L)+XSFL.
<
<
<        A T T E N T I O N  :
<                      DETRUIT LE REGISTRE 'A' !!!
<
<
INITS:   EQU         $
         PSR         B
         STX         XXSFB,L         < CONSTITUTION DU CHAINAGE ARRIERE
                                     < DU SECTEUR A INITIALISER VERS LE
                                     < SECTEUR PRECEDENT.
         LX          XXSFS,L         < (X)=@SECTEUR A INITIALISER.
         LBI         K
         SCLD        NBITOC          < DECONCATENATION DES 2 OCTETS DE A.
         SWBR        A,A             < CADRAGE DE A ET B A DROITE.
         STA         XXSFD,L         < DEPLACEMENT DANS LE CAS D'UN
                                     < SECTEUR DE DEBORDEMENT.
         STB         XXSFK,L         < NBRE DE DESCRIPTEURS UTILISES.
         LA          INFINI          < IL N'Y A PAS ENCORE DE SECTEUR SUI
                                     < SUIVANT.
         STA         XXSFS,L         < CONSTITUTION DU CHAINAGE AVANT
                                     < DU SECTEUR A INITIALISER VERS
                                     < LE SECTEUR SUIVANT (INFINI).
         LR          L,W             < (W)=@BUFFER.
         ADRI        XXSFL,W         < (W)=@1ER DESCRIPTEUR.
         PSR         X,W
         LXI         YY7-XXSFL       < (X)=NOMBRE DE MOTS A REMETTRE A '0000,
INITS1:  EQU         $
         STZ         O,W             < ET ON REMET LE RESTE DU SECTEUR A '0000.
         ADRI        P,W             < AU MOT SUIVANT,
         JDX         INITS1          < S'IL EXISTE...
         PLR         X,W
         PLR         B
         RSR
         PAGE
<
<
<        I N I T I A L I S A T I O N   D ' U N
<        D E S C R I P T E U R   D E   C L E F  :
<
<
<        FORMAT D'UN DESCRIPTEUR DE CLEF :
<                    MOT0 :
<                          BIT0=INDICATEUR LIBRE (1) / OCCUPE (K),
<                          BIT1=INDICATEUR DE DEBORDEMENT (1),
<                          BIT2=INDICATEUR DE DERNIER DESCRIPTEUR DE
<                               LA SEQUENCE (1),
<                          BIT3-15=PEK,
<                    MOT1 :
<                          BIT0 : BIT IN USE (1) / IDLE (K) ; CE
<                          BIT N'A DE SENS QUE SI :
<                                    BIT0(MOT0)=BIT1(MOT0)=K,
<                          C'EST-A-DIRE SI ON EST DANS UN DESCRIPTEUR
<                          DE CLEF (OCCUPE & NON EN DEBORDEMENT).
<                          BIT1-15=PDK.
<
<                    ET, LORSQUE LA CLEF EST A L'ETAT 'IDLE' :
<
<                    MOT2=ADRESSE SECTEUR DE DEBORDEMENT, OU ADRESSE 1ER SECTEUR
<                         DE L'ENREGISTREMENT,
<                    MOT3=ADRESSE DERNIER SECTEUR DE L'ENTREGISTREMENT.
<                         (EVENTUEL)
<
<
<        ARGUMENTS :
<                    BIT8-15(A)=ETAT DU DESCRIPTEUR (DERNIER, LIBRE...)
<                    (W)=ADRESSE DESCRIPTEUR.
<
<
<        A T T E N T I O N  :
<                      DETRUIT LE REGISTRE 'A' !!!
<
<
<        NOTA :
<                      LORS DE SA CREATION, UNE CLEF EST AUTOMATIQUEMENT
<                    MISE A L'ETAT 'IN USE', C'EST DONC DE PLUS UN OPEN.
<                      DE PLUS ON FAIT :
<                                    (MOT2,MOT3)<--(TEST1,TEST2),
<                                    (TEST1,TEST2)<--(Q8000,Q8000).
<
<
<        IMPORTANT :
<                      LORS D'UNE DUPLICATION DE DESCRIPTEUR POUR
<                    DEBORDEMENT, LA VERSION DUPLIQUEE POSSEDE LA
<                    PROPRIETE 'IN USE/IDLE' DE LA VERSION EN DEBORDEMENT.
<
<
INITK:   EQU         $
         SWBR        A,A             < L'ETAT EST MIS DANS L'OCTET
                                     < GAUCHE DE A.
         OR          PEK             < GENERATION DU 1ER MOT DU DESCRIPTEUR
                                     < BIT0-2=ETAT,
                                     < BIT3-15=PEK.
         STA         XXKE1,W         < MOT0.
         LA          PDK
         TBT         BXKE5           < EST-CE UNE CLEF MODE NEXT...
         JNC         SYSRD9          < NON, OK
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      PEUT-ETRE NE PAS FAIRE L'INITIALISATION,
<                    OU MIEUX, VOIR POURQUOI ON A LE
<                    BIT BXKE5'...
<
SYSRD9:  EQU         $
         SBT         BXKE4           < PASSAGE AUTOMATIQUE A L'ETAT
                                     < 'IN USE'.
         STA         XXKE2,W         < MOT1.
<
< OPEN DU DESCRIPTEUR :
<
         LA          TEST1
         STA         XXKE3,W         < INITIALISATION DU MOT2.
         LA          TEST2
         STA         XXKE4,W         < INITIALISATION DU MOT3.
<
< INITIALISATION DE LA CHAINE DES
< ENREGISTREMENTS DANS 'TEST1' ET 'TEST2' :
<
         LA          INFINI
         STA         TEST1           < CHAINE VIDE.
         STA         TEST2           < CHAINE VIDE.
         RSR
         PAGE
<
<
<        I N S E R T I O N   D ' U N E   C L E F
<        D A N S   U N E   L I S T E
<        S E Q U E N T I E L L E   D E   C L E F S  :
<
<
<        ARGUMENTS :
<                    (L)=ADRESSE DU BUFFER DU SECTEUR COURANT,
<                    (A)=RESULTAT DU PARCOURS DE LA LISTE SEQUENTIELLE
<                        A LA QUELLE APPARTIENT LA CLEF QUE L'ON VA
<                        INSERER.
<                    (X)=ADRESSE DU SECTEUR COURANT DE LA LISTE.
<
<
         USE         W,DEM0
INSERT:  EQU         $               < ARRIVE ICI, ON SAIT QUE L'INSERTION ES
                                     < EST POSSIBLE.
         XR          A,X
         CP          INFINI          < TEST DE LISTE VIDE
         XR          A,X
         JE          E330            < LA LISTE EST VIDE
<
< CAS OU LA LISTE DE LA CLEF N'EST PAS VIDE :
<
         SLLS        LXKE=K          < CONVERSION EN UNE ADRESSE DE MOT
                                     < DU DESCRIPTEUR PRECEDENT.
XWOR%1:  VAL         XXPL8(XXPL10    < ON RECHERCHE LE BIT COMMUN ENTRE
                                     < LES CODES DE RETOUR 'CLEF NON CERNEE'.
         IF          XXPL9(XWOR%1,,XEIF%,
         IF          ATTENTION : ANOMALIE DANS LES CODES !!!
XEIF%:   VAL         ENDIF
XWOR%2:  VAL         XWOR%1=K
XWOR%3:  VAL         NBITMO-B-XWOR%2 < NUMERO DU BIT COMMUN DES FONCTIONS
                                     < 'CLEF NON CERNEE'.
XWOR%4:  VAL         LXKE=K
         TBT         XWOR%3-XWOR%4   < DISCRIMINATION CLEF NON CERNEE (1)
                                     < - CLEF CERNEE (K).
         RBT         XWOR%3-XWOR%4   < RAZ BIT0 DE A.
         LR          A,W             < (W)=@ DU DESCRIPTEUR PRECEDENT.
         JNC         E340            < LA CLEF EST CERNEE.
<
< CAS D'UNE CLEF NON CERNEE :
<
         LB          XXKE1,W         < ACCES A L'ETAT DU DESCRIPTEUR PRE
                                     < PRECEDENT.
         RBT         NBITMO+BXKE2    < LA CLEF N'ETANT PAS CERNEE, CELA
                                     < SIGNIFIE QUE LE DESCRIPTEUR (W)
                                     < EST LE DERNIER DE LA LISTE, AVEC
                                     < L'INSERTION C'EST LA NOUVELLE CLEF
                                     < (PEK,PDK) QUI DEVIENT LA DERNIERE.
         STB         XXKE1,W         < LE DESCRIPTEUR PRECEDENT
                                     < N'EST PLUS LE DERNIER DE LA LISTE.
         SBR         L,A             < CALCUL DE (W)-(L), AVEC (A)=(W).
         CPI         YY7-XXSFL       < LE DESCRIPTEUR PRECDENT EST-IL
                                     < EN BOUT DE SECTEUR...
         JGE         E335            < OUI, IL FAUT DONC CHANGER DE
                                     < SECTEUR.
<
< CAS OU L'ON PEUT RESTER DANS LE MEME SECTEUR :
<
E336:    EQU         $
         ADRI        LXKE,W          < PASSAGE AU DESCRIPTEUR SUIVANT.
E337:    EQU         $
XWOR%1:  VAL         COSBT?BXKE2=FMASK(K=FCINST
XWOR%2:  VAL         MOCG=K
XWOR%2:  VAL         -XWOR%2         < POUR UN CADRAGE A DROITE...
         LAI         XWOR%1>XWOR%2   < INDICATION DE DERNIER DESCRIPTEUR
                                     < (FUTUR BIT2 DU DESCRIPTEUR DE LA
                                     < CLEF).
E338:    EQU         $
         BSR         AINITK          < INITIALISATION DU DESCRIPTEUR DE
                                     < LA CLEF INSEREE.
         IC          XXSFK,L         < ET UN DESCRIPTEUR OCCUPE DE PLUS
                                     < DANS CE SECTEUR.
         BSR         AWSDK           < ECRITURE DU SECTEUR COURANT (X),
                                     < ET ATTENTE.
<
< RETOUR :
<
         BR          RETCID
<
< CAS OU LA CLEF N'EST PAS CERNEE, ET OU POUR LA RAJOUTER
< IL FAUT UN NOUVEAU SECTEUR :
<
E335:    EQU         $
         LR          L,A             < ON DEMANDE AINSI QUE L'ADRESSE DU
                                     < SECTEUR SUIVANT SOIT MISE DANS LE
                                     < MOT0 DU SECTEUR COURANT POUR
                                     < GENERE AUTOMATIQUEMENT LE CHAINAGE
                                     < AVANT.
         BSR         AALSC           < ALLOCATION 1 SECTEUR, ATTENTE
                                     < EVENTUELLE ET CHANAGE AVANT DES SECTEURS
                                     < SECTEURS.
         BSR         AWSDK           < ECRITURE DU SECTEUR COURANT (X).
         LAI         K               < INDIQUONS AINSI QU'IL Y A
                                     < 0 DESCRIPTEURS UTILISES ET
                                     < QUE LE NOUVEAU SECTEUR N'EST PAS
                                     < SECTEUR DE DEBORDEMENT.
         BSR         AINITS          < INITIALISATION DU NOUVEAU SECTEUR.
                                     < (X A ENCORE L'@SECTEUR PRECEDENTE).
         JMP         E337
<
< CAS OU LA LISTE EST VIDE :
<
E330:    EQU         $
         LR          L,A             < ON DEMANDE QUE L'@ DU SECTEUR ALLOUE
                                     < SOIT MISE DANS LE MOT0 DU BUFFER
                                     < MAIS CELA SERVIRA UNIQUEMENT
                                     < A 'INITS'...
         BSR         AALSC           < ALLOCATION 1 SECTEUR.
         LX          INFINI          < INDIQUONS AINSI QU'IL N'Y A PAS DE SECTEU
                                     < DE SECTEURS PRECEDENTS.
         LAI         K
XWOR%1:  VAL         MOCG=K
XWOR%2:  VAL         W>XWOR%1=K      < '1' CADRE A GAUCHE...
         SBT         NBITMO-B-XWOR%2 < (A)='100 : ON INDIQUE AINSI QU'IL
                                     < Y A 1 DESCRIPTEUR UTILISE
                                     < ET PAS DE DEBORDEMENT.
         BSR         AINITS          < INITIALISATION DU SECTEUR.
<
<        NOTA SUR LA PREMIERE CLEF D'UNE LISTE SEQUENTIELLE :
<                      POUR NE PAS AVOIR DE PROBLEMES AVEC DES
<                    DELETES DE LISTES NE CONTENANT QU'UN SEUL
<                    DESCRIPTEUR, ON CREE A PRIORI EN TETE
<                    DE CHAQUE LISTE UNE CLEF BIDON (K,-1).
<
         STZ         XXKE1,W
         LA          INFINI          < ON NE SAIT JAMAIS...
XWOR%1:  VAL         COSBT?BXKE4=FMASK(K=FCINST
         IF          XWOR%1-Q8000,,XEIF%,
         IF          ATTENTION : L'INITIALISATION DE 'XXKE2' EST MAUVAISE
         IF          EN UTILISANT 'INFINI' !!!
XEIF%:   VAL         ENDIF
         STA         XXKE2,W         < CLEF (K,Q8000).
         STA         XXKE3,W         < CHAINE VIDE.
         STA         XXKE4,W         < CHAINE VIDE.
         JMP         E336
<
< CAS OU LA CLEF EST CERNEE :
<
E340:    EQU         $
         LR          X,A
         CP          PLSCAS          < LE DESCRIPTEUR PRECEDENT EST-IL
                                     < EN MEMOIRE...
         JE          E341            < OUI, OK.
<
< CAS OU LE DESCRIPTEUR PRECEDENT N'EST PLUS EN MEMOIRE : IL FAUT RELIRE SON
< SON SECTEUR :
<
         BSR         ARSDK           < LECTURE DU SECTEUR DU DESCRIPTEUR
                                     < PRECEDENT (X).
E341:    EQU         $
         LA          XXKE1,W         < ACCES AU MOT0 DU DESCRIPTEUR
                                     < PRECEDENT.
         JAGE        E342            < TEST DE SON BIT0 (LIBRE) : LE
                                     < DESCRIPTEUR PRECEDENT N'EST APS
                                     < LIBRE.
<
< CAS OU LE DESCRIPTEUR PRECEDENT EST LIBRE :
< C'EST BON, ON PEUT DONC L'UTILISER...
<
         LAI         K               < INDIQUONS AINSI QUE LE DESCRIPTEUR
                                     < EST OCCUPE ET QU'IL N'EST PAS
                                     < LE DERNIER.
         JMP         E338
<
< CAS OU LE DESCRIPTEUR PRECEDENT EST OCCUPE :
< IL VA FALLOIR FAIRE DU DEBORDEMENT...
<
E342:    EQU         $
<
< SAUVEGARDE DU DESCRIPTEUR PRECEDENT POUR LE RESTAURER
< LORSQU'ON AURA OBTENU UN SECTEUR DE DEBORDEMENT :
< (ON A DEJA : (A)=MOT0).
<
         LB          XXKE2,W         < ACCES MOT1.
         PSR         A,B             < SAVE MOT0,MOT1 DU DESCRIPTEUR PRECEDENT
                                     < PRECEDENT.
         SBT         BXKE1           < LE DESCRIPTEUR PRECEDENT DEVIENT
                                     < DEVIENT UN DESCRIPTEUR DE
                                     < DEBORDEMENT.
         STA         XXKE1,W
         LA          XXKE3,W         < MOT2.
         LB          XXKE4,W         < MOT3.
         PSR         A,B             < SAVE MOT2,MOT3.
<
< CALCUL DU DEPLACEMENT DU DESCRIPTEUR DE DEBORDEMENT
< DANS SON SECTEUR :
<
         LR          W,A             < (A)=@DESCRIPTEUR DE DEBORDEMENT.
         SBR         L,A             < (L)=@BUFFER.
         PSR         A               < SAVE DEPLACEMANT : A NOTER
                                     < QUE L'ON SAVE LE DEPLACEMENT ET NON PAS
                                     < ET NON PAS L'@ POUR DES RAISONS
                                     < DE TRANSLATABILITE DES BUFFERS EN MEMOIRE
                                     < MEMOIRE.
         LR          W,A
         ADRI        XXKE3-XXKE1,A   < ON DEMANDE QUE L'@ DU SECTEUR ALLOUE
                                     < SOIT MISE DANS LE MOT2 DU
                                     < DESCRIPTEUR DE DEBORDEMENT.
         BSR         AALSC           < ALLOCATION DU SECTEUR DE
                                     < DEBORDEMENT.
         BSR         AWSDK           < ECRITURE DU SECTEUR COURANT (X),
                                     < ET ATTENTE
<
< GENERATION DE L'EN TETE DU SECTEUR DE DEBORDEMENT :
<
         PLR         A               < RESTAURE DEPLACEMENT DU
                                     < DESCRIPTEUR DE DEBORDEMENT.
XWOR%1:  VAL         MOCG=K
XWOR%2:  VAL         W>XWOR%1=K      < '1' CADRE A GAUCHE...
         SBT         NBITMO-B-XWOR%2 < INDIQUONS AINSI QU'IL Y A
                                     < UN DESCRIPTEUR UTILISE.
         LY          XXKE3,W         < SAVE @SECTEUR DE DEBORDEMENT DANS Y.
                                     < DANS Y.
         BSR         AINITS          < INITIALISATION DU SECTEUR DE
                                     < DEBORDEMENT (X=@SECTEUR
                                     < PRECEDENT).
         LR          Y,X             < GENERATION DE (X)=@SECTEUR DEBORDE-
                                     < MENT, CAR AINITS A RENVOYE :
                                     < (X)=@SECTEUR SUIVANT DU PRECEDENT.)
<
< RESTAURATION DU DESCRIPTEUR COMME 1ER
< DESCRIPTEUR DU SECTEUR DE DEBORDEMENT :
<
         PLR         A,B             < RESTAURE MOT2,MOT3.
         STA         XXKE3,W         < MOT2.
         STB         XXKE4,W         < MOT3.
         PLR         A,B             < RESTAURE MOT0,MOT1.
         STA         XXKE1,W         < MOT0.
         STB         XXKE2,W         < MOT1.
         JMP         E336
         PAGE
<
<
<        D E L E T E   U N E   C L E F   D A N S   U N E
<        L I S T E   S E Q U E N T I E L L E  :
<
<
<        ARGUMENTS :
<                    (L)=ADRESSE DU BUFFER DU SECTEUR COURANT,
<                    (X)=ADRESSE DU SECTEUR COURANT,
<                    (A)=RESULTAT DU PARCOURS DE LA LISTE SEQUENTIELLE.
<                    (B)=ARGUMENT D'APPEL DE PLSC.
<                                    BIT4(B)=K : DELETE DESCRIPTEUR,
<                                    BIT4(B)=1 : CLOSE DESCRIPTEUR (IDLE).
<
<
         USE         W,DEM0
DELETE:  EQU         $
         SLLS        LXKE=K          < CONVERSION EN UNE ADRESSE DE MOT
                                     < DU DESCRIPTEUR DE LA CLEF
                                     < A DELETER.
XWOR%1:  VAL         XXPL6=K
         RBT         NBITMO-B-XWOR%1
         LR          A,W             < (W)=@DU DESCRIPTEUR DE LA CLEF A
                                     < DELETER.
         LA          XXKE2,W         < ACCES AU MOT1 DU DESCRIPTEUR.
         TBT         BXKE4           < TEST BIT IN USE/IDLE.
         JC          SYSRDA          < IN USE, OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ETRE PRUDENT...
<
SYSRDA:  EQU         $
         TBT         NBITMO+BXPL2    < DISCRIMINATION DELETE/CLSE.
         JC          E372            < UN CLOSE EST DEMANDE.
<
< TRAITEMENT DES DELETE-DELETE :
< LORS D'UN DELETE-DELETE, LE DESCRIPTEUR EST LIBERE, LE
< BIT IN USE/IDLE N'AYANT PLUS AUCUN SENS.
<
E350:    EQU         $
         DC          XXSFK,L         < ET UN DESCRIPTEUR DE MOINS
                                     < DANS LE SECTEUR.
         JE          E355            < IL N'Y A PLUS AUCUN DESCRIPTEUR
                                     < OCCUPES DANS LE SECTEUR, IL
                                     < ALLONS LE LIBERER.
<
< CAS OU LE SECTEUR COURANT CONTIENT ENCORE AU MOINS
< UN DESCRIPTEUR OCCUPE :
<
         LA          XXKE1,W         < ACCES A L'ETAT DU DESCRIPTEUR DE
                                     < DE LA CLEF QUE L'ON DELETE.
         TBT         BXKE2           < EST-CE LE DERNIER DESCRIPTEUR
                                     < DE LA LISTE SEQUENTIELLE.
         JC          E352            < ET OUI, C')ST LE DERNIER.
<
< CAS OU LE DESCRIPTEUR DELETE N'EST PAS LE DERNIER
< DE LA SEQUENCE :
<
         SBT         BXKE0           < MEMORISATION DE LA LIBERATION DE CE
                                     < CE DESCRIPTEUR.
E362:    EQU         $
         STA         XXKE1,W         < ET MISE A JOUR DU DESCRIPTEU.
         JMP         E359            < ET C'EST TOUT...
<
< CAS OU LE DESCRIPTEUR DELETE EST LE DERNIER DE LA LISTE :
<
E352:    EQU         $
         ADRI        -LXKE,W         < PASSAGE AU DESCRIPTEUR PRECEDENT.
E353:    EQU         $
         LA          XXKE1,W         < TEST DE L'ETAT LIBRE DU
                                     < DESCRIPTEUR PRECEDENT.
         JAL         E352            < LE DESCRIPTEUR PRECEDENT EST
                                     < LIBRE (BIT0=1), CONTINUONS DONC
                                     < A REMONTER DANS LE SECTEUR.
<
< ARRETONS NOUS SUR LE 1ER DESCRIPTEUR OCCUPE (PAR UNE
< CLEF OU UN DEBORDEMENT).
< A NOTER, QU'IL Y A FORCEMENT AU MOINS UN DESCRIPTEUR
< OCCUPE DANS CE SECTEUR PUISQU LE NBRE DE BLOCS
< UTILISES EST DIFFERENT DE 0 (CF. 3,L).
<
         SBT         BXKE2           < LE 1ER DESCRIPTEUR OCCUPE
                                     < DEVIENT LE DERNIER DE LA LISTE.
         JMP         E362            < ET C'EST TOUT...
<
< CAS OU ON TROUVE UN SECTEUR VIDE, ON VA DONC LE LIBERER :
<
E355:    EQU         $
         LAD         RALSC
         LR          A,W             < (W)=@DEMANDE DE RELEASE SECTEUR,
                                     <     A NOTER, QUE CETTE INITIALISATION
                                     <     EST FAITE QUELQUE SOIT LA FACON
                                     <     DONT ON LIBERERA LE SECTEUR.
<
< TEST SUR LE STOCK DE SECTEURS DE PLSC :
<
         LA          NSTOCS
         CPI         MSTOCS          < A-T'ON UN STOCK SUFFISANT...
         JGE         E360            < OUI...
<
< CAS OU LE STOCK DE SECTEURS DE PLSC EST INSUFFISANT :
<
         ADRI        I,A
         STA         NSTOCS          < ET UN SECTEUR DE PLUS EN STOCK...
         XR          A,X
<
<        ON A ICI :
<                    (A)=ADRESSE SECTEUR A LIBERER.
<                    (X)=NUMERO DE CE SECTEUR DANS LA PILE.
<
         STA         &ASTOCS         < MISE EN PILE...
         IC          WEIO            < AINSI WEIO>0, DONC LE WAIT
                                     < NE NOUS BLOQERA PAS TOUTE A
                                     < L'HEURE...
         JMP         E361
<
< CAS OU LE STOCK DE SECTEURS EST SUFFISANT :
<
E360:    EQU         $
<
< LE SECTEUR ETANT LIBRE ON VA UTILISER SON MOT4
< POUR RENVOYER A 'RELEASE SECTEUR' L'@
< DU SECTEUR A RELEASER.
<
         LR          L,A
         ADRI        XXSFL,A
         STA         RASCAM          < MAJ DE LA DEMANDE DE RELEASE.
         STX         XXSFL,L         < RANGEMENT DE L'@SECTEUR A
                                     < RELEASER DANS MOT4 DU SECTEUR.
         LAI         NSPREL
XWOR%1:  VAL         MSPTYP=K
XWOR%1:  VAL         NBITMO-XWOR%1
         SBT         PRIO-XWOR%1     < FUTUR BIT PRIORITAIRE DE L'EN-
                                     < TETE DE DEMANDE
         SWBR        A,A             < GENERATION DE L'EN-TETE DE
                                     < DEMANDE.(NSPREL,PRIORITAIRE).
         STA         RALSC
         BSR         ACHAND          < ON A (W)=@DEMANDE DE RELEASE.
<
<        NOTA :
<                      L'ATTENTE DE FIN DE RELEASE
<                    EST REPOUSSEE LE PLUS TARD
<                    POSSIBLE...
<
E361:    EQU         $
<
<        ON A ICI :
<                    (L)=ADRESSE BUFFER,
<                    (W)=ADRESSE DE LA DEMANDE DE RELEASE.
<
<
< RECONSTITUTION DES CHAINAGES APRES LE RELEASE
< D'UN SECTEUR :
<
         LX          XXSFS,L         < (X)=@SECTEUR SUIVANT.
         LB          XXSFB,L         < (B)=@SECTEUR PRECEDENT.
         LY          INFINI
         CPR         X,Y             < TEST PRESENCE SECTEUR SUIVANT
         LY          XXSFD,L         < (Y)=INDICATEUR DE DEBORDEMENT
         JE          E356            < IL N'Y A PAS DE SECTEUR SUIVANT
<
< CAS OU IL Y A UN SECTEUR SUIVANT :
<
         BSR         ARSDK           < LECTURE DU SECTEUR SUIVANT,
                                     < ET ATTENTE.
<
< MISE A JOUR DE L'EN-TETE DU SECTEUR SUIVANT :
<
         STB         XXSFB,L         < CHAINAGE VERS LE SECTEUR PRECEDENT
                                     < (C'EST LE PRECEDENT DU SECTEUR
                                     < LIBERE).
         STY         XXSFD,L         < L'INDICATEUR DE DEBORDEMENT
                                     < DU SECTEUR LIBERE EST REPORTE
                                     < SUR LE SECTEUR SUIVANT.
         BSR         AWSDK           < REECRITURE DU SECTEUR SUIVANT.
E356:    EQU         $
<
<
<        A T T E N T I O N  :
<                      IL Y A TOUJOURS UN PRECEDENT, CAR
<                    UNE FOIS QU'UNE LISTE SEQUENTIELLE
<                    A ETE CREE, ON NE PEUT PLUS LA
<                    VIDER COMPLETEMENT, CE QUI
<                    CE QUI SIGNIFIE QUE LE 1ER SECTEUR
<                    NE PEUT JAMAIS ETRE VIDE, DONC
<                    JAMAIS RELEASE (CF CLEF (K,-1)).
<
<
         XR          B,X
<
<        ON A ICI :
<                    (X)=ADRESSE DU SECTEUR PRECEDENT,
<                    (B)=ADRESSE DU SECTEUR SUIVANT.
<
         BSR         ARSDK           < LECTURE DU SECTEUR PRECEDENT
                                     < ET ATTENTE.
<
< ATTENTE EVENTUELLE DE FIN DE RELEASE SECTEUR :
<
         BSR         ACHANW          < C'EST WEIO DU RELEASE SECTEUR.
         LR          L,W             < (W)=@BUFFER.
<
< LE SECTEUR RELEASE ETAIT-IL UN SECTEUR DE DEBORDEMENT :
<
         CPZR        Y               < TEST INDICATEUR DE DEBORDEMENT.
         JNE         E357            < LE SECTEUR RELEASE ETAIT UN SECTEUR
                                     < DE DEBORDEMENT.
<
< CAS OU LE SECTEUR RELEASE N'EATAIT PAS UN SECTEUR DE DEBORDEMENT :
<
         STB         XXSFS,L         < RECONSTITUTION DU CHAINAGE AVANT
                                     < DU SECTEUR PRECEDENT VERS LE
                                     < SECTEUR SUIVANT DU SECTEUR
                                     < RELEASE.
         XR          B,A
         CP          INFINI          < MAIS,AU FAIT, LE SECTEUR SUIVANT
                                     < DU SECTEUR RELEASE EXISTE-T-IL?
         XR          B,A
         JNE         E359            < OUI, LE SUIVANT EXISTE
<
< CAS OU LE SECTEUR SUIVANT DU SECTEUR RELEASE N'EXISTE PAS :
< CELA SIGNIFIE AU PASSAGE QUE LA CLEF DELETEE ETAIT LA
< DERNIERE DE SA LISTE...
<   NOUS VOILA DONC DANS L'OBLIGATION DE PARCOURIR LE SECTEUR
< PRECEDENT (X) POUR DETERMINER QUEL EST LE DERNIER
< DESCRIPTEUR DE LA LISTE (APRE DONC LE DELETE DE LA CLEF ARG. )
<
         ADRI        YY7-XXSFL,W     < (W)=@DU DERNIER DESCRIPTEUR DU SECTEUR
                                     < SECTEUR (X).
         JMP         E353
<
< CAS OU LE SECTEUR RELEASE ETAIT EN DEBORDEMENT :
<
E357:    EQU         $
         ADR         Y,W             < (W)=@ DU DESCRIPTEUR DE DEBORDEMENT.
         XR          B,A
         CP          INFINI          < LE SECTEUR SUIVANT DU SECTEUR
                                     < RELEASE EXISTE-T-IL?
         XR          B,A
         JE          E350            < NON, DONC LE DESCRIPTEUR DE
                                     < DEBORDEMENT EST LIBRE A SON TOUR
<
< CAS OU LE SECTEUR SUIVANT DU SECTEUR RELEASE EXISTE : IL FAUT RECONSTITUER
< LE CHAINAGE DU DESCRIPTEUR DE DEBORDEMENT VERS CE SECTEUR SUIVANT.
<
         STB         XXKE3,W         < (B)=@SECTEUR SUIVANT,
                                     < (W)=@DESCRIPTEUR DE DEBORDEMENT.
<
< RETOUR : IL FAUT METTRE A JOUR LE SECTEUR COURNAT (X) SUR DISQUE :
<
E359:    EQU         $
         BSR         AWSDK           < REECRITURE DU SECTEUR COURANT (X).
         BR          RETCID          < OUF...
<
< TRAITEMENT D'UN DELETE-CLOSE :
< DANS CE CAS LA CLEF PASSE A L'ETAT IDLE.
<
E372:    EQU         $
         RBT         BXKE4           < LA CLEF PASSE A L'ETAT IDLE.
         STA         XXKE2,W         < MAJ DU DESCRIPTEUR.
<
< ON FAIT DE PLUS :
<                    (MOT2,MOT3)<--(TEST1,TEST2).
<
         LA          TEST1
         STA         XXKE3,W
         LA          TEST2
         STA         XXKE4,W
         JMP         E359            < ET C'EST TOUT...
         PAGE
<
<
<        L E C T U R E - E C R I T U R E
<        D ' U N  S E C T E U R  S U R  D K M
<        E T   A T T E N T E   D E   F I N   D ' E / S.
<
<
<        ARGUMENT :
<                    (X)=ADRESSE DU SECTEUR.
<
<
         USE         W,DEM0
<
< ECRITURE D'UN SECTEUR :
<
WSDK:    EQU         $
         PSR         A,B,W
         LAI         FGW             < DEMANDE D'ECRITURE.
         JMP         E262
<
< LECTURE D'UN SECTEUR :
<
RSDK:    EQU         $
         PSR         A,B,W
         LAI         FGR             < DEMANDE DE LECTURE.
<
< TRONC COMMUN LECTURE/ECRITURE :
<
E262:    EQU         $
         IF          NUQFM,,,XEIF%
         IF          LA ZONE DE SIMULATION DE 'DKF' SUR 'DKM'
         IF          EST INCOMPATIBLE AVEC LES TESTS DE
         IF          DISCRIMINATION QUI SUIVENT !!!
XEIF%:   VAL         ENDIF
         CPZR        X
         JL          E262X1          < CAS DES ADRESSES 'DKM' SUPERIEURES
                                     < A L'INFINI, ELLES APPARTIENNENT
                                     < FORCEMENT A 'DKM'...
         LRM         B
         WORD        NUQFM
         CPR         B,X
         JGE         E262X1          < (X)>=B : LE SECTEUR DEMANDE EST AUSSI
                                     < HORS DE 'NUQFM' : IL APPARTIENT A 'DKM'.
         LRM         B
         WORD        XXTP+NSTP
         CPR         B,X
         JGE         E262X2          < (X)>=XXTP+NSTP : 'SYSER'...
         LRM         B
         WORD        XXTP
         CPR         B,X
         JGE         E262X3          < XXTP<=(X)<XXTP+NSTP : LE SECTEUR DEMANDE
                                     < PARTIENT DONC A 'DKF'...
E262X2:  EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      BIEN EXAMINER L'ADRESSE SECTEUR (X)...
<
E262X3:  EQU         $
<
<
<        C A S   D E S   S E C T E U R S   D E   ' D K F '  :
<
<
         CPI         FGR             < EST-CE UNE LECTURE ???
         LAD         RTP             < OUI A PRIORI : (A)=ADRESSE(RTP).
         JE          E262X4          < OUI...
         LAD         WTP             < NON, (A)=ADRESSE(WTP)...
E262X4:  EQU         $
         LR          A,W             < (W)=ADRESSE D'UNE DEMANDE DE LECTURE
                                     <     OU D'ECRITURE D'UNE 'TP'...
         LB          PLSCAM          < (B)=ADRESSE OCTET DU BUFFER,
         STB         ARGDEM+AMDEM    < QUE L'ON TRANSFERE DANS LA DEMANDE
                                     < DE 'TP' VERS 'DKF'.
         STX         ARGDEM+ASDEM    < DE MEME, ON MET EN PLACE L'ADRESSE
                                     < SECTEUR DE LA 'TP' SUR 'DKA'...
         BSR         ACHAND          < ENVOI DE LA DEMANDE A 'DKA',
         BSR         ACHANW          < ET ATTENTE DE FIN D'OPERATION...
         JMP         E262X7          < VERS LA SORTIE...
<
<
<        C A S   D E S   S E C T E U R S   ' D K M '  :
<
<
E262X1:  EQU         $
<
< GENERATION DE 'PLSCDK' :
<
         STA         PLSCDK+T+OPDEM  < MISE A JOUR DE LA DEMANDE.
         LR          X,A             < (A)=ADRESSE DU SECTEUR 'DKM'...
         CP          INFINI
         JE          E262X6          < DANS LE CAS DE L'INFINI, C'EST
                                     < QU'IL Y A EU UNE ERREUR DE LECTURE
                                     < DISQUE AU PREALABLE ; ON VA SIMULER
                                     < UNE LECTURE TRUANDE...
         STX         PLSCAS          < ADRESSE SECTEUR
         LAI         NSPDKB          < DANS TOUS LES CAS, ON DEMANDE
                                     < 'DKB' QUI SRRA PEUT-ETRE UTILISE
                                     < EN TRANSPARENT.
XWOR%1:  VAL         MSPTYP=K
XWOR%1:  VAL         NBITMO-XWOR%1
         SBT         PRIO-XWOR%1     < MODE PRIORITAIRE.
         SWBR        A,A             < LE NSP EST MIS DANS L'OCTET
                                     < GAUCHE DE 'A',
         STA         PLSCDK+XXNSP    < MISE A JOUR DE LA DEMANDE.
<
< VALIDATION "PRIMITIVE" DE
< CE QUE L'ON VA ECRIRE, S'IL
< S'AGIT D'UNE ECRITURE :
<
         TBT         TYPAD           < L'ADRESSE DU BUFFER EST-ELLE D'OCTETS
                                     < OU DE MOTS ???
         LA          PLSCDK+T+AMDEM  < (A)=ADRESSE-MOT A PRIORI...
         JC          E262X5          < EFFECTIVEMENT...
         SLRS        NOCMO=K         < (A)=ADRESSE-OCTET CONVERTIE EN MOTS...
E262X5:  EQU         $
         LR          A,W             < (W)=ADRESSE DU PREMIER MOT DU BUFFER.
         LA          PLSCDK+T+OPDEM  < (A)=FONCTION DEMANDEE :
         CPI         FGW             < EST-CE UNE ECRITURE ???
         JNE         E262XA          < NON, RIEN A VALIDER AVANT L'OPERATION...
         IF          XCHSGF-XXSFS,,XEIF%,
         IF          ATTENTION : LE CHAINAGE DE TYPE 'NEXT' DOIT ETRE
         IF          TOUJOURS A LA MEME PLACE (EN FAIT, CE TEST EST
         IF          INUTILE, CAR ON NE PASSE ICI QUE POUR DES
         IF          SECTEURS DE LISTE DE CLEFS...) !!!
XEIF%:   VAL         ENDIF
XWOR%1:  VAL         XCHSGF?XXSFS
         LA          XWOR%1,W        < (A)=VALEUR DU CHAINAGE DE TYPE 'NEXT'
                                     <     DU SECTEUR COURANT A ECRIRE...
         SLRS        DECON           < (A)=NUMERO PAR RAPPORT A 0 DE SON 'GB' :
         CPI         XDKSYM          < NE SERAIT-CE PAS CELUI DE LA SIMULATION
                                     < DE 'DKF' SUR 'DKM' ???
         JNE         E262XB          < NON, ON ADMET QUE C'EST BON...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ALLER EXAMINER LE BUFFER DONT
<                    L'ADRESSE EST DANS 'W', ET VOIR
<                    CE QU'IL CONTIENT, ET PEUT-ETRE
<                    LE CORRIGER !!!
<
E262XB:  EQU         $
E262XA:  EQU         $
         LR          W,B             < (B)=SAUVEGARDE DE L'ADRESSE DU BUFFER...
<
< ENVOI DE LA DEMANDE 'PLSCDK' :
<
         LAD         PLSCDK
         LR          A,W             < (W)=ADRESSE DE LA DEMANDE ARGUMENT.
         BSR         ACHAND          < ENVOI DE LA DEMANDE A 'DKB', ET
         BSR         ACHANW          < ATTENTE DE FIN D'OPERATION
                                     < POUR LE COMPTE DU DEMANDEUR.
<
< VALIDATION "PRIMITIVE" DE
< CE QUE L'ON A LU, S'IL
< S'AGIT D'UNE LECTURE :
<
         LA          PLSCDK+T+OPDEM  < (A)=FONCTION REMPLIE :
         CPI         FGR             < FUSSE UNE LECTURE ???
         JNE         E262XC          < NON, RIEN A VALIDER...
         LR          B,W             < OUI :
                                     < (W)=ADRESSE DU BUFFER :
         LA          XWOR%1,W        < (A)=CHAINAGE 'NEXT' PRESUME,
         SLRS        DECON           < (A)=NUMERO PAR RAPPORT A 0 DU 'GB'
                                     <     D'APPARTENANCE DE CE CHAINAGE :
         CPI         XDKSYM          < NE SERAIT-CE PAS LE 'GB' DE SIMULATION
                                     < DE 'DKF' SUR 'DKM' ???
         JNE         E262XD          < NON, ON ADMET QUE C'EST BON...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE :
<                      ALLER VOIR LA MEMOIRE VIRTUELLE
<                    'DKB' SI CE FICHIER Y AVAIT DROIT
<                    (VOIR LA LISTE 'TNSPF' INDEXEE PAR
<                    LE 'NSPF'), ET COMPARER LA PAGE
<                    VIRTUELLE ; SINON, ALLER VOIR CE
<                    QU'IL Y A SUR 'DKM' !!!
<
E262XD:  EQU         $
E262XC:  EQU         $
<
<
<        S O R T I E   C O M M U N E   ' D K A ' / ' D K B '  :
<
<
E262X7:  EQU         $               < CAS DES SORTIES SIMULEES...
         PLR         A,B,W
         RSR
<
<
<        C A S   D E S   S U I T E S   D ' U N E   E R R E U R
<        A N T E R I E U R E   D E   L E C T U R E  :
<
<
E262X6:  EQU         $
         PSR         X,L
         LA          PLSCAM
         SLRS        NOCMO=K
         LR          A,L             < (L)=ADRESSE MOT DU BUFFER DE LECTURE...
         LAI         K
XWOR%1:  VAL         MOCG=K
XWOR%2:  VAL         W>XWOR%1=K
         SBT         NBITMO-B-XWOR%2 < POSITIONNEMENT DU FUTUR "1 DESCRIP-
                                     < TEUR" PRESENT DANS LE SECTEUR...
         LX          INFINI          < (X)=FAUX CHAINAGE ARRIERE...
         STX         O,L             < QUE L'ON MET EN TETE DU BUFFER,
         BSR         AINITS          < INITIALISATION DU BUFFER, COMME S'IL
                                     < NE CONTENAIT QU'UN SEUL DESCRIPTEUR,
                                     < ET SANS CHAINAGES...
         LAI         K
         SBT         BXKE2           < INDICATEUR "DERNIER DESCRIPTEUR".
         STA         XXKE1,W         < GENERATION D'UNE FAUSSE 'PEK',
         STZ         XXKE2,W         < D'UNE FAUSSE 'PDK',
         STX         XXKE3,W         < ET DE FAUX CHAINAGES
         STX         XXKE4,W         < D'ENREGISTREMENT.
         PLR         X,L
         JMP         E262X7          < C'EST TOUT, ET ON ESPERE QUE CA
                                     < VA MARCHER...



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