<        S I S   C M S 5   6
         PAGE
         PAGE
<
<
<        C A R D   C O N T R O L   I N T E R P R E T E R  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME APPELE
<                    PAR LES HANDLERS DE SERVICE,
<                    A A SA CHARGE LE DIALOGUE ENTRE
<                    LES UTILISATEURS ET LE SYSTEME
<                    VIA LE LANGAGE DE COMMANDE (OU
<                    'CCI') ; POUR CE FAIRE, IL SE
<                    BASE SUR UNE GRAMMAIRE, DITE
<                    "GRAMMAIRE DU CCI", DONT 'RUNCCI'
<                    EST L'INTERPRETEUR...
<
<
<        NOTA :
<                      AU NIVEAU DIALOGUE AVEC
<                    L'UTILISATEUR :
<
<                    1 - LES ENTREES SE FONT SUR 'PHIN',
<                    2 - LES SORTIES SE FONT SUR 'PHOUT'.
<
<
<        FORMAT DE LA GRAMMAIRE DU CCI :
<                      LA GRAMMAIRE DU CCI EST FAITE DE NOEUDS DE
<                    FONCTIONS (F0 A F18) DONT LE FORMAT EST
<                    DECRIT CI-DESSOUS :
<
XCCIM0:: MOT         O               < MOT0 DECOUPE EN 2 OCTETS...
XCCIM1:: MOT         XCCIM0+D        < MOT 1 D'UN NOEUD DE LA GRAMMAIRE,
XCCIM2:: MOT         XCCIM1+D        < MOT 2 D'UN NOEUD,
XCCIM3:: MOT         XCCIM2+D        < ET MOT 3...
XCCINX:: VAL         I               < INCREMENT PERMETTANT DE PASSER DU
                                     < DERNIER MOT D'UN NOEUD AU NOEUD LE
                                     < SUIVANT PHYSIQUEMENT...
XCCIER:: VAL         XCCINX          < INCREMENT UTILISE POUR LES RETOURS EN
                                     < ERREUR DES ROUTINES DU CCI.
< CCIM :
<        F0          MESSAGE         ENVOI D'UN MESSAGE A L'ESCLAVE,
<                    OCTET0=LONGUEUR DU MESSAGE,
<                    OCTET1=K,
<                    MOT1=ADRESSE MOT DU MESSAGE.
< CCIR :
<        F1          ROUTINE         EXECUTION D'UNE ROUTINE,
<                    OCTET0=K, OU 'OCTET' ARGUMENT (CF. NSP ASSIGN...),
<                    OCTET1=1,
<                    MOT1=ADRESSE ROUTINE.
<                    MOT2=INDEX DU NOEUD SUIVANT 1,
<                    MOT3=INDEX DU NOEUD SUIVANT 2.
<                         (LE CHOIX EST A LA CHARGE DE LA ROUTINE PAR
<                         ACTION SUR LE REGISTRE X :
<                         X INCHANGE : NOEUD SUIVANT=NOEUD 1,
<                         X<--(X)+1  : NOEUD SUIVANT=NOEUD 2 ).
< CCIS :
<        F2          SUSPENSION      SORTIE DU CCI (ET RETOUR AU SVC),
<                    OCTET0=K,
<                    OCTET1=2.
< CCID :
<        F3          DISCONNECT      LOG-OUT DE L'ESCLAVE,
<                    OCTET0=K,
<                    OCTET1=3.
< CCICT :
<        F4          CARACTERE TYPE  COMPARE LE TYPE DU CARACTERE
<                                    COURANT DE BUFESC AVEC L'OCTET0,
<                    OCTET0=TYPE : 4=CARACTERE<"0",
<                                  3=CHIFFRES ("0" A "9"),
<                                  2=CODE ENTRE CHIFFRES ET LETTRES,
<                                  1=LETTRES,
<                                  0=CARACTERE>"Z".
CCITCT:: VAL         4               < TOUS LES CODES AVANT LES CHIFFRES,
CCITCH:: VAL         CCITCT-I        < TOUS LES CHIFFRES DECIMAUX,
CCITCL:: VAL         CCITCH-I        < ENTRE LES CHIFFRES ET LES LETTRES,
CCITLE:: VAL         CCITCL-I        < TOUTES LES LETTRES,
CCITZZ:: VAL         CCITLE-I        < AU-DELA DES LETTRES.
<                    OCTET1=4,
<                    MOT1=INDEX DU NOEUD SUIVANT SI LES TYPES COINCIDENT,,
<                    MOT2=INDEX DU NOEUD SUIVANT SI LES TYPE NE
<                         COINCIDENT PAS.
< CCIC :
<        F5          CARACTERE       COMPARE LE CARACTERE COURANT DE
<                                    BUFESC AVEC L'OCTET0,
<                    OCTET0=CARACTERE DE TEST,
<                    OCTET1=5,
<                    MOT1=INDEX DU NOEUD SUIVANT SI LES CARACTERES
<                         COINCIDENT,
<                    MOT2=INDEX DU NOEUD SUIVANT SI LES 2 CARACTERES
<                         NE COINCIDENT PAS.
XCOK::   MOT         XCCIM1          < MOT1 DE 'CCIC',
XCNK::   MOT         XCCIM2          < MOT2 DE 'CCIC'.
< CCII :
<        F6          INTERROGATION   INTERROGE L'ESCLAVE : QUESTION-
<                                    REPONSE,
<                    OCTET0=K,
<                    OCTET1=6.
< CCIJMP :
<        F7          JUMP CCI        CETTE FONCTION PROVOQUE UN SAUT
<                                    INCONDITIONNEL DANS LA GRAMMAIRE
<                                    DU CCI,
<                    OCTET0=K,
<                    OCTET1=7,
<                    MOT1=INDEX DU NOEUD SUIVANT.
< CCILP :
<        F8          LOAD PROCESSOR  CETTE FONCTION A A SA CHARGE
<                                    LE CHARGEMENT DES PROCESSEURS
<                                    DEMANDES PAR L'UTILISATEUR LORS
<                                    DE L'INTERROGATION CCI,
<                    OCTET0=K,
<                    OCTET1=8,
<                    MOT1=ADRESSE DISQUE DU PROCESSEUR.
<                    MOT2=TAILLE OCTET NECESSAIRE AU PROCESSEUR
<                         EN MEMOIRE,
<                    MOT3=ADRESSE DE DEPART DU PROCESSEUR EN
<                         ADRESSE TRANSLATABLE (PAR RAPPORT A SLO).
XLPAD::  MOT         XCCIM1          < ADRESSE DISQUE D'UN PROCESSEUR,
XLPTO::  MOT         XCCIM2          < TAILLE OCTET DE CELUI-CI,
XLPRUN:: MOT         XCCIM3          < ET ADRESSE DE LANCEMENT.
< CCIACN :
<        F9          TEST       ON TESTE ICI, SI LE NUMERO
<                                    DE COMPTE DE L'UTILISATEUR
<                                    COINCIDE AVEC CELUI QUI EST
<                                    CONTENU DANS LE NOEUD.
<                    OCTET0=K,
<                    OCTET1=9,
<                    MOT1=CARACTERES 0 & 1 DE L' CHERCHE,
<                    MOT2=CARACTERES 2 & 3 DE L' CHERCHE,
<                    MOT3=INDEX DU NOEUD SUIVANT SI LES 2 
<                         COINCIDENT,
<                    MOT4=INDEX DU NOEUD SUIVANT S'ILS DIFFERENT.
XACN1::  MOT         XCCIM1          < DEBUT DE L',
XACN2::  MOT         XCCIM2          < FIN DE L',
XACNOK:: MOT         XCCIM3          < MOT DE COINCIDENCE,
XACNNK:: MOT         XACNOK+XCCIER   < MOT DE NON COINCIDENCE.
< CCIEOM :
<        F10         TEST       TESTE LA PRESENCE D'UN CARACTERE
<                                    FIN DE MESSAGE  (R/C OU EOT).
<                    OCTET0=K,
<                    OCTET1=10 ('A),
<                    MOT1=INDEX DU NOEUD SUIVANT SI ,
<                    MOT2=INDEX DU NOEUD SUIVANT SINON.
< CCINT :
<        F11         TEST  TESTE LE MODE INTERPRETATIF/
<                                    NON-INTERPRETATIF DU CCI.
<                    OCTET0=K,
<                    OCTET1=11 ('B),
<                    MOT1=INDEX DU NOEUD SUIVANT SI CCI NON-INTERPRETATIF,
<                         (DIT AUSSI "INTERACTIF"...)
<                    MOT2=INDEX DU NOEUD SUIVANT SI INTERPRETATIF.
<                         (DIT AUSSI "NON INTERACTIF"...)
< CCIUSR :
<        F12         TEST   TESTE LA NATURE INTERACTIVE
<                                    DE L'ESCLAVE TRAVAILLANT AVEC
<                                    LE CCI (UTILISE LA COMPARAISON DE
<                                    DE 'NSPIN' A 'NSPOUT').
<                    OCTET0=K,
<                    OCTET1=12 ('C),
<                    MOT1=INDEX DU NOEUD SUIVANT SI USER INTERACTIF,
<                    MOT2=INDEX NOEUD SUIVANT SI USER NON INTERACTIF.
XUSRUI:: MOT         XCCIM1          < MOT INTERACTIF,
XUSRNI:: MOT         XCCIM2          < MOT NON INTERACTIF.
< CCINOP :
<        F13         NOP             NOEUD NOP DU CCI.
<                    OCTET0=K,
<                    OCTET1=13 ('D).
< CCIBAC :
<        F14         GO BACK         RESTAURATION DE L'INDEX COURANT
<                                    DE LA GRAMMAIRE DU CCI A PARTIR
<                                    DE SRCOTO (RETOUR D'UNE SOUS-
<                                    GRAMMAIRE).
<                    OCTET0=K,
<                    OCTET1=14 ('E).
< CCIBAK :
<        F15         GO BACK'        RESTAURATION DE L'INDEX COURANT
<                                    DE LA GRAMMAIRE DU CCI (A PARTIR
<                                    DE SRCOTO) ET DE Y (A PARTIR
<                                    DE YSER) (RETOUR D'UNE SOUS-
<                                    GRAMMAIRE DE TRAPPE PAR EXEMPLE...)
<                    OCTET0=K,
<                    OCTET1=15 ('F).
< CCICAL :
<        F16         CALL S-GRAMM.   SAUVEGARDE DE L'INDEX COURANT
<                                    DE LA GRAMMAIRE DU CCI DANS SRCOTO
<                                    ET APPEL D'UNE SOUS-GRAMMAIRE ;
<                                    LES APPELS NE PEUVENT ETRE
<                                    EMBOITES.
<                    OCTET0=K,
<                    OCTET1=16 ('10),
<                    MOT1=INDEX DU 1ER NOEUD DE LA SOUS-GRAMMAIRE.
< CCINC :
<        F17         CARACTERE       COMPARE LE CARACTERE COURANT
<                                    DE BUFESC AVEC L'OCTET0.
<                    OCTET0=CARACTERE DE TEST,
<                    OCTET1=17 ('11)
<                    MOT1=ADRESSE NOEUD SUIVANT SI LES 2 CARACTERES NE
<                         NE COINCIDENT PAS,
<                    MOT2=ADRESSE NOEUD SUIVANT SI LES 2 CARACTERES
<                         COINCIDENT.
XNCNK::  MOT         XCCIM1          < MOT DE NON COINCIDENCE,
XNCOK::  MOT         XCCIM2          < MOT DE COINCIDENCE.
< CCIDIR :
<        F18         CARACTERE       TEST DIRECT DU CARACTERE COURRANT
<                                    A L'AIDE D'UNE TABLE QUE CE
<                                    CARACTERE INDEXE (DE 'A' A 'Z').
<                    OCTET0=K,
<                    OCTET1=18 ('12),
<                    MOT1=ADRESSE NOEUD SUIVANT SI LE CARACTERE COURANT N'EST
<                          PAS DANS L'INTERVALLE 'A'-'Z', OU SI
<                          L'ENTREE QU'IL INDEXE EST VIDE ('0000),
<                    MOT2=ADRESSE NOEUD SUIVANT SI LE CARACTERE COURANT
<                          EST 'A',
<                    MOT3=ADRESSE NOEUD SUIVANT SI 'B',... ET CECI
<                          JUSQU'A 'Z'.

<                                    EST CELUI DU SYSTEME, C'EST-A-DIRE
<                                    LE MIEN...
<                    OCTET0=K,
<                    OCTET1=19 ('13),
<                    MOT1=ADRESSE DU NOEUD SUIVANT SI :SYS,
<                    MOT2=ADRESSE DU NOEUD SUIVANT SINON.
<
<
<        A U T O - R E L A I  :
<                      SI L'ON EST EN PRESENCE D'UN
<                    RELAI DE NOEUD (CHAINAGE-ADRESSE)
<                    DONT LE CONTENU N'EST PAS DU
<                    TYPE '1XXX (TOUTE LA GRAMMAIRE DU
<                    'CCI' EST DANS LES ADRESSES '1XXX)
<                    ON ADMET QU'ON EST EN PRESENCE
<                    DIRECTE DE L'INFORMATION QUE L'ON
<                    DEVAIT CHAINER...
<
<
<        G R A M M A I R E   D U   ' C C I '  :
<                      LA GRAMMAIRE DU 'CCI' EST UN
<                    GRAPHE ORIENTE QUE L'ESCLAVE
<                    PARCOURS AU COURS DE SA SESSION ;
<                    LES NOEUDS SONT DES ACTIONS, ET
<                    LES ARCS (CHAINAGES) DES TRANSI-
<                    TIONS D'ETAT.
<                      LE MOT 'RECOTO' DE LA 'DCTESC'
<                    DE L'ESCLAVE DONNE L'INDEX COU-
<                    RANT DANS LA GRAMMAIRE ; IL EST
<                    INITIALISE A 0 PAR 'JE', ET MIS
<                    A 'INFINI' LORS D'UNE DEMANDE
<                    DE 'EJ'...
<
<
<        ARGUMENT :
<                    (L)=ADRESSE DCT(SERVICE),
<                    (W)=ADRESSE DCT(ESCLAVE).
<                    'B' A NE PAS DETRUIRE (VOIR 'HDLSER')...
<
<
<        RESULTAT :
<                    X(PST-ESCLAVE) :
<                     =0 : MODE INTERACTIF.
<                     =0 : MODE NON INTERACTIF, ET ANALYSE OK.
<                     =1 : MODE NON INTERACTIF, ET ERREUR DE SYNTAXE,
<                     =2 : MODE NON INTERACTIF ET TRONCATION.
<
<
<*******************************************************************************
XWOR%9:  VAL         K               < INITIALISATION...
ECES::   VAL         '0@@@@+I        < ERREUR DE SYNTAXE EN NON INTERACTIF,
ECT::    VAL         '0@@@@+I        < TRONCATION EN NON INTERACTIF.
<*******************************************************************************
<
<
<        T A B L E   D E S   M O D U L E S   C C I  :
<
<
         CALL        #SISP CMS5 DOL1#
FCCI:    EQU         $
         WORD        CCIM
FCCI0::  VAL         $-FCCI-D        < ENVOI D'UN MESSAGE A L'ESCLAVE.
         WORD        CCIR
FCCI1::  VAL         $-FCCI-D        < EXECUTION D'UN SOUS-PROGRAMME.
         WORD        CCIS
FCCI2::  VAL         $-FCCI-D        < SORTIE DU CCI.
         WORD        CCID
FCCI3::  VAL         $-FCCI-D        < LOG-OUT DE L'ESCLAVE.
         WORD        CCICT
FCCI4::  VAL         $-FCCI-D        < TYPE CARACTERE COURANT.
         WORD        CCIC
FCCI5::  VAL         $-FCCI-D        < TEST CARACTERE COURANT.
         WORD        CCII
FCCI6::  VAL         $-FCCI-D        < INTERROGATION ESCLAVE.
         WORD        CCIJMP
FCCI7::  VAL         $-FCCI-D        < SAUT DANS LA GRAMMAIRE.
         WORD        CCILP
FCCI8::  VAL         $-FCCI-D        < CHARGEMENT D'UN PROCESSEUR.
         WORD        CCIACN
FCCI9::  VAL         $-FCCI-D        < TEST DE L'.
         WORD        CCIEOM
FCCI10:: VAL         $-FCCI-D        < TEST DE L'.
         WORD        CCINT
FCCI11:: VAL         $-FCCI-D        < TEST DU MODE INTERPRETATIF.
         WORD        CCIUSR
FCCI12:: VAL         $-FCCI-D        < TEST INTERACTIVITE ESCLAVE.
         WORD        CCINOP
FCCI13:: VAL         $-FCCI-D        < NOP.
         WORD        CCIBAC
FCCI14:: VAL         $-FCCI-D        < RETOUR SOUS-GRAMMAIRE,
         WORD        CCIBAK
FCCI15:: VAL         $-FCCI-D        < RETOUR SOUS-GRAMMAIRE.
         WORD        CCICAL
FCCI16:: VAL         $-FCCI-D        < APPEL SOUS-GRAMMAIRE.
         WORD        CCINC
FCCI17:: VAL         $-FCCI-D        < TEST INVERSE DE CARACTERE.
         WORD        CCIDIR
FCCI18:: VAL         $-FCCI-D        < TEST DIRECT CARACTERE.
         WORD        CCISYS
FCCI19:: VAL         $-FCCI-D        < TEST DU NUMERO DE COMPTE :SYS.
NFCCI::  VAL         $-FCCI-D        < NBRE DE FONCTIONS DU CCI -1.
<
<
         USE         W,DEM0
         USE         L,DCT0
         CALL        #SISP CMS5 DOL2#
RUNCCI:  EQU         $
         PSR         B               < SAVE LE B A NE PAS DETRUIRE...
         LX          RECOTO-DCTESC,W < RECUPERATION DE L'INDEX COURANT
                                     < DE L'ESCLAVE DANS LA GRAMMAIRE
                                     < DU CCI.
         LY          YSER-DCTESC,W   < RESTAURATION EVENTUELLE DU
                                     < REGISTRE Y DE SERVICE ; PERMET
                                     < AINSI A 2 ROUTINES DU CCI DE
                                     < COMMUNIQUER PAR Y, MEME S'IL
                                     < Y A CHANGEMENT DE NIVEAU
                                     < DE SERVICE.
<
< TEST DU MODE DU CCI : INTERACTIF OU PROGRAMME ????
<
         LA          IDESC-DCTESC,W
         TBT         IDESCI          < TEST DU MODE DU CCI ???
         JC          E784            < CAS DU CCI NON INTERACTIF, OK.
<
< TEST DE L'INTEARCTIVITE DE L'UTILISATEUR :
<
         BSR         ACHKIN          < COMPARAISON DE NSPIN ET
                                     < DE NSPOUT (AVEC RENVOI DE
                                     < NSPIN DANS LE REGISTRE A).
         JNE         Z891            < RIEN A FAIRE : NSPIN#NSPOUT.
<
< CAS D'UN UTILISATEUR INTERACTIF (NSPIN=NSPOUT) :
< (REINITIALISATION DE SON CARACTERE D'ABORT)
< (SUPPRESSION DU TIME OUT SUR SA VISU)
< (AUTORISATION DES EXPANSIONS/EXTENSIONS)
<
         PSR         X,L             < SAVE L'INDEX COURANT DE LA
                                     < GRAMMAIRE DU CCI, ET
                                     < L'@DCT-SERVICE.
         LR          A,X             < (X)=NSPIN DE LA CONSOLE.
         BSR         ACADCT          < RENVOIE : (L)=@DCT(NSPIN).
         LAI         KALTM           < (A)=CODE DU 'ALT-MODE'.
         STA         VAR+CARALT      < RE-INITIALISATION SYSTEMATIQUE
                                     < ET A PRIORI DU CARACTERE D'ABORT
                                     < DE L'UTILISATEUR A CHAQUE PASSAGE
                                     < DANS LE CCI INTERACTIF.
         STZ         TESTO           < SUPPRESSION DU TEST DU TIME-
                                     < OUT SUR LA CONSOLE INTERACTIVE
                                     < A CHAQUE INTERROGATION DU CCI.
         STZ         VAR+INEXEX      < AUTORISATION A PRIORI DES
                                     < EXPANSIONS/EXTENSIONS.
         PLR         X,L             < RESTAURE L'INDEX COURANT DE LA
                                     < GRAMMAIRE DU CCI ET @DCT-SERVICE.
<
< TEST DES 'TEST & SET' NON RESETES
< LORS DU PASSAGE DANS LE CCI INTERACTIF ;
< IL EST DONC INTERDIT D'APPELER LE
< CCI INTERACTIF ENTRE UN 'TEST & SET'
< ET LE 'RESET' ASSOCIE !!!
< (OU PLUTOT CE N'EST PAS RECOMMANDE...)
<
Z891:    EQU         $
         LA          SETRUN-DCTESC,W < ACCES A LA ZONE DE SAUVEGARDE
                                     < DES 'TEST & SET' AU NIVEAU DE
                                     < L'ESCLAVE.
         JAE         E784            < OK, PAS DE 'TEST & SET' EN
                                     < COURS.
         BSR         ASMMK           <<<< PHASE ININTERRUPTIBLE
         EOR         SYNCUS          < ON FORCE LES 'RESET' NON
                                     < ENCORE EFFECTUES.
         STA         SYNCUS          < MAJ DE SYNCUS.
         BSR         ASMDK           <<<< DEMASQUAGE
         STZ         SETRUN-DCTESC,W < 'RESET' GLOBAL AU NIVEAU DE
                                     < L'ESCLAVE.
<
<        B O U C L E   D E   P A R C O U R S   D E
<        L A   G R A M M A I R E   D U   C C I  :
<
E784:    EQU         $
         LA          &AOTCCI         < ACCES AU MOT0 DU NOEUD COURANT.
XWOR%1:  VAL         CODBT=FMASK(K?MOCD=FCINST)MOCD
         RBT         BITPAR-XWOR%1   < POUR ASSUER LA COMPATIBILITE
                                     < DES CODES LORSQU'IL SAGIT
                                     < DE NOEUDS DE CARACTERES.
         PSR         X               < SAVE INDEX COURANT DE LA GRAMMAIRE.
         LBI         K
         SCLD        MOCG=K          < (B)=OCTET0(MOT0 DU NOEUD), AVEC SON BIT D
                                     <     PARITE ('BITPAR') A 0.
         SWBR        A,A             < (A)=OCTET1=FONCTION.
         LR          A,X             < (X)=FONCTION DEMANDEE AU CCI.
         CPI         NFCCI           < VALIDATION DE LA FONCTION.
         JLE         SYSR51          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      JE NE SAIS PAS, MAIS LA SITUATION
<                    EST DELICATE, CAR ON RISQUE DE S'EMPETRER
<                    DE PLUS EN PLUS ; UNE SOLUTION SERAIT PEUT
<                    ETRE DE PRENDRE L'INDEX DU NOEUD D'INTER-
<                    ROGATION GENERALE (N5-N0), PUIS DE FAIRE
<                    UN 'JMP E784'...
<
SYSR51:  EQU         $
         LA          &AFCCI          < (A)=@DU MODULE TRAITANT CETTE
                                     <     FONCTION (X).
         PLR         X               < RESTAURE INDEX COURANT DE
                                     < LA GRAMMAIRE.
         ADRI        XCCIM1-XCCIM0,X < PASSAGE AU MOT1 DU NOEUD COURANT
                                     < OU AU NOEUD SUIVANT.
         PSR         A               < EMPILEMENT DE L'ADRESSE DU
                                     < MODULE DE TRAITEMENT.
         RSR                         < BRANCHEMENT VERS LE MODULE.
<
<        N O P   D U   C C I  :
<
CCINOP:  EQU         E784
<
<        G O   B A C K   D U   C C I  :
<
CCIBAK:  EQU         $
         LY          YSER-DCTESC,W   < RESTAURATION DE Y, EN VUE
                                     < DE NE PAS PERDRE LE REGISTRE Y
                                     < DU DEBUG PAR EXEMPLE...
CCIBAC:  EQU         $
VALBAC:: VAL         ME000
         LA          CE000
         CP          SRCOTO-DCTESC,W < VALIDATION DU GO BACK.
         JNE         SYSR52          < OK, IL Y A UN APPEL DE SOUS-
                                     < GRAMMAIRE EN COURS.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      PEUT-ETRE COMME INDIQUE CI-DESSUS...
<
SYSR52:  EQU         $
         LX          SRCOTO-DCTESC,W < RESTAURATION DE L'INDEX COURANT
                                     < DE LA GRAMMAIRE DU CCI
                                     < AVEC SRCOTO.
         STA         SRCOTO-DCTESC,W < MISE DE SRCOTO A 'E000, POUR
                                     < INDIQUER QU'IL N'Y A PLUS
                                     < D'APPEL DE SOUS-GRAMMAIRE
                                     < EN COURS.
         JMP         E784            < VERS LA BOUCLE DU CCI.
<
<
<        I N T E R R O G A T I O N   E S C L A V E  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME ENVOIE
<                    UN MESSAGE A L'UTILISATEUR
<                    SUR 'NSPOUT', LIT SA REPONSE
<                    SUR 'NSPIN', PUIS LUI EN
<                    FAIT L'ECHO SUR 'NSPOUT'...
<
<
<        ARGUMENT :
<                    (L)=ADRESSE DE 'DCTSER',
<                    (W)=ADRESSE DE 'DCTESC',
<                    (B)=INDICATEUR DE FAIRE DE L'ECHO OU PAS :
XEECHO:: VAL         EXIST           < FAIRE DE L'ECHO,
XNECHO:: VAL         NEXIST          < NE PAS FAIRE DE L'ECHO ; ON NOTERA QUE
                                     < DANS LE CAS DU TEMPS PARTAGE, CECI PEUT
                                     < ETRE BY-PASSE PAR LA COMMANDE "!ECHO ON",
                                     < MAIS QUI BIEN SUR NE PEUT ETRE FRAPPE
                                     < AVANT L'ENTREE DU MOT DE PASSE, OUFFF...
<
<
LMES1::  VAL         4
CCII:    EQU         $
         PSR         X               < SAVE INDEX COURANT GRAMMAIRE.
         PSR         B               < ET SAUVEGARDE DE L'INDICATEUR D'ECHO...
         LBI         LMES1           < (B)=LONGUEUR A PRIORI DU MESSAGE,
         BSR         ACHKIN          < MAIS EST-ON INTERACTIF ???
                                     < RENVOIE :
                                     < (A)='NSPIN' DE L'UTILISATEUR...
         JNE         Z1200Y          < NON, DONC (B) EST BON...
         PSR         X,L             < OUI, IL S'AGIT D'UN UTILISATEUR INTER-
                                     < ACTIF, LE NOMBRE DE "?" QUE L'ON VA
                                     < EDITER EST FONCTION DU NIVEAU D'EMPILE-
                                     < MENT DE CET 'IDESC'...
         LR          A,X             < (X)='NPSIN' DE L'UTILISATEUR,
         BSR         ACADCT          < (L)=ADRESSE DE LA 'DCT' DE LA VISU...
         LA          VAR+APILID
         LR          A,L             < (L)=ADRESSE DE LA PILE D'EMPILEMENT DES
                                     <     UTILISATEURS PAR "!U" SUR CETTE VISU,
         LA          O,L             < (A)=POINTEUR DE LA PILE :
         ANDI        XLCPIL          < (A)=LONGUEUR COURANTE,
XWOR%1:  VAL         XLCPIL=K
         IF          XWOR%1-K,,XEIF%,
         SLRS        XWOR%1
XEIF%:   VAL         ENDIF
         ADR         A,B             < ON AJOUTE AU MESSAGE DE BASE 'MESCCI'
                                     < UN  NOMBRE DE "?" EGAL AU NIVEAU D'IMBRI-
                                     < CATION DES UTILISATEURS PAR "!U" SUR
                                     < CETTE VISU...
         PLR         X,L
Z1200Y:  EQU         $
         LRM         A
         WORD        MESCCI          < (A)=ADRESSE DU MESSAGE "".
         BSR         AMESSO          < EMISSION DU MESSAGE VERS
                                     < L'ESCLAVE ET ATTENTE.
<
< LECTURE DE LA REPONSE ESCLAVE SUR NSPIN :
<
<        ON A ICI :
<                    (Y)=NSPTYP SUR NSPOUT,
<                    (A)=W=ADRESSE DCT(ESCLAVE).
<
         ADRI        BUFESC-DCTESC,A < (A)=@MOT DU BUFFER ESCLAVE DANS
                                     < LA DCT-ESCLAVE.
         SLLS        NOCMO=K         < CONVERSION EN UNE ADRESSE OCTET.
         STA         VAR+DEMCCI+T+AMDEM
         IF          FGR-FAVR,,XEIF%,
         IF          ATTENTION : IL Y A UNE INCOHERENCE
         IF          DANS LES CODES DES FONCTIONS DE
         IF          LECTURE !!!
XEIF%:   VAL         ENDIF
         IF          FGR-K,,XEIF%,
         IF          ATTENTION : IL DOIT Y AVOIR DU CODE OU L'ON
         IF          EXPLOITE IMPLICITEMENT LE FAIT QUE 'FGR'=0 !!!
XEIF%:   VAL         ENDIF
         LA          IDDESC-DCTESC,W < (A)=LISTE DES INDICATEURS :
         RBT         IDESCX
         STA         IDDESC-DCTESC,W < A PRIORI ON RAZE 'IDESCX' INDIQUANT
                                     < AINSI QU'IL N'Y A PLUS DE TRAPPE EN
                                     < COURS... (ON LE FAIT JUSTE AVANT LA
                                     < DEMANDE DE LECTURE SUR 'NSPIN')
         TBT         IDESC9          < ALORS UN ECHO IMMEDIAT EST-IL DEMANDE ???
         LAI         FGR             < (A)=FONCTION DE LECTURE SANS ECHO A
                                     <     PRIORI...
         JNC         Z1200Z          < NON, DONC (A) EST BON ; CELA SIGNIFIE
                                     < QUE SOIT L'ECHO IMMEDIAT N'EST PAS DE-
                                     < MANDE (PAR "!ECHO OFF"), SOIT QU'ON
                                     < EST EN BATCH (OU LES COMMANDES "!ECHO"
                                     < SONT INTERDITES...).
         LAI         FAVRE           < OUI :
                                     < DANS LE CAS DU TEMPS PARTAGE, ON MET EN
                                     < PLACE UNE FONCTION DE LECTURE AVEC ECHO,
                                     < CE QUI PERMET DE VOIR CE QUE L'ON TAPPE
                                     < (C'EST PAS TROP TOT...), LA FONCTION
                                     < D'ECRITURE QUI SUIVRA PERMETTANT DE VOIR
                                     < LA COMMANDE REELLEMENT INTERPRETEE APRES
                                     < LES EVENTUELS 'RUBOUT', 'BREAK' ET
                                     < 'ALT-MODE'...
Z1200Z:  EQU         $
         STA         VAR+DEMCCI+T+OPDEM
                                     < MISE EN PLACE DE LA FONCTION DE LECTURE
                                     < AVEC OU SANS ECHO...
         LXI         PHIN
         LBY         &TASSGN-DCTESC,W  < (A)=NSPIN DE L'ESCLAVE.
         SWBR        A,A             < GENERATION D'UN 'NSPTYP' VERS LE PERI-
                                     < PHERIQUE 'NSPOUT' DE L'ESCLAVE...
         STA         VAR+DEMCCI+XXNSP      < MAJ DE NSPTYP DE DEMCCI.
         LAD         VAR+DEMCCI
         LR          W,X             < SAVE @DCT-ESCLAVE DANS X.
         LR          A,W             < (W)=@DEMCCI.
<        ON A ICI :
<                    (W)=ADRESSE DEMCCI,
<                    (X)=ADRESSE DCT(ESCLAVE).
Z1200:   EQU         $               < REBOUCALGE EN CAS D'ERREUR
                                     < A LA LECTURE DU MESSAGE USER.
         LAI         LCCI            < COMPTE D'OCTETS MAX DU CCI.
         STA         ARGDEM+CODEM    < INITIALISATION DU CODEM DE
                                     < DEMCCI, OU REINITIALISATION DANS
                                     < LE CAS D'UN BOUCLAGE POUR
                                     < ERREUR A LA LECTURE.
         BSR         ACHAND          < ENVOI DE LA DEMANDE DE LECTURE SUR LE
                                     < 'NSPIN' DE L'ESCLAVE.
         WAIT        WEIO            < ATTENTE DE FIN DE LECTURE
                                     < SUR LE NSPIN.
<
<        RAPPEL :
<                      DANS LE CAS DES VISUS, LE CODEM
<                    DE LA DEMANDE CONTIENT LE NBRE
<                    DE CARACTERES REELLEMENT LUS.
<
YCCITO:: VAL         2               < DUREE D'UNE MISE EN SOMMEIL EVEN-
                                     < TUEL DU 'CCI' LORS D'ERREURS D'ENTREE-
                                     < SORTIE...
         LA          ARGDEM+ETADEM   < COMMENT S'EST PASSE L'ENTREE ???
         JAE         Z1200X          < TRES BIEN...
         CPI         EVINAC          < MAL, EST-CE UNE FONCTION INACCESSIBLE ???
                                     < (NOTA : ON NE DISCRIMINE PAS LES VISUS
                                     < DU RESTE, CAR CE PHENOMENE NE PEUT
                                     < SE RENCONTRER QUE SUR LES VISUS...)
         JNE         Z1200           < NON, ON RECOMMENCE IMMEDIATEMENT...
         PSR         X               < ET OUI, SINON CA FAIT DES ALARMES !!!
         LXI         YCCITO          < OUI,
         BSR         ADODO           < FAIT DODO MON PETIT CCI... CE PHENOMENE
                                     < EST LIE AU INTERFERENCES DES TIME-OUT
                                     < SUR VISUS ET DU CURSEUR GRAPHIQUE...
         PLR         X
         JMP         Z1200           < ET ON ITERE...
Z1200X:  EQU         $
<
< OK, DEMANDE EXECUTEE, IL Y A
< PEUT-ETRE DES CONNEXIONS
< MATRICIELLES A EXPLOITER :
<
         PLR         B               < (B)=INDICATEUR D'ECHO,
         IF          XNECHO-K,,XEIF%,
         IF          ATTENTION : LES 3 TESTS SUIVANTS SONT IDIOTS !!!
XEIF%:   VAL         ENDIF
         CPZR        B               < ALORS UN ECHO EST-IL DEMANDE ???
         JE          Z1200T          < NON, DONC ON SAUTE LES CONNEXIONS MATRI-
                                     < CIELLES...
         PSR         A,X             < OUI :
         LA          ARGDEM+OPDEM
         ANDI        MKOPDM          < (A)=FONCTION COURANTE, ET
                                     < (W)=ADRESSE DE LA DEMANDE COURANTE...
         SVC         SVCM8           < VERS LA DUPLICATION EVENTUELLE DE LA
                                     < DEMANDE (W) SUR LES PERIPHERIQUES
                                     < CONNECTES AU PERIPHERIQUE COURANT...
         PLR         A,X
Z1200T:  EQU         $
<
< ECRITURE DE LA REPONSE ESCLAVE SUR NSPOUT :
<
         LAI         FGW             < FONCTION D'ECRITURE...
         STA         ARGDEM+OPDEM    < DEMANDE D'ECRITURE.
         STY         NSPTYP          < MISE EN PLACE DU NSPTYP SUR
                                     < NSPOUT A PARTIR DE Y POSITIONNE
                                     < PAR 'AMESSO'.
         CPZR        B               < ALORS ET L'ECHO ???
         JE          Z1200S          < PAS D'ECHO...
         BSR         ACHAND          < ECHO : ENVOI DE LA DEMANDE D'ECRITURE
                                     < SUR NSPOUT.
Z1200S:  EQU         $
<
< PREPARATION DE L'ANALYSE SYNTAXIQUE :
< (PUIS ATTENTE DE FIN D'OPERATION)
<
         LR          X,A             < (A)=@DCT-ESCLAVE.
         ADRI        BUFESC-DCTESC,A < (A)=@BUFFER ESCLAVE (DCTESC).
         SBT         BITX            < POSITIONNEMENT DU BIT D'INDEXATION
         STA         VAR+ABUFGR      < GENERATION D'UN RELAI INDIRECT
                                     < INDEX VERS LE BUFFER ESCLAVE
                                     < A PARTIR DU HANDLER DE SERVICE.
         STZ         VAR+XBUFGR      < INDEX INITIAL VERS LE BUFFER
                                     < ESCLAVE (DCTESC).
         CPZR        B               < ALORS, ET L'ECHO ???
         JE          Z1200R          < PAS D'ECHO, ON SORT...
         WAIT        WEIO            < ECHO : ATTENTE DE FIN D'ECRITURE...
<
< OK, DEMANDE EXECUTEE, IL Y A
< PEUT-ETRE DES CONNEXIONS
< MATRICIELLES A EXPLOITER :
<
         PSR         A,X
         LA          ARGDEM+OPDEM
         ANDI        MKOPDM          < (A)=FONCTION COURANTE, ET
                                     < (W)=ADRESSE DE LA DEMANDE COURANTE...
         SVC         SVCM8           < VERS LA DUPLICATION EVENTUELLE DE LA
                                     < DEMANDE (W) SUR LES PERIPHERIQUES
                                     < CONNECTES AU PERIPHERIQUE COURANT...
         PLR         A,X
<
< PARCOURS DE LA GRAMMAIRE :
<
Z1200R:  EQU         $
         LR          X,W             < RESTAURE (W)=@DCT-ESCLAVE.
         PLR         X               < RESTAURE INDEX COURANT GRAMMAIRE.
         LA          DEMESC-DCTESC+T+CODEM,W
         STA         VAR+MBUFGR      < AFIN DE VALIDER 'XBUFGR' DANS 'CARAC'...
         STZ         FSERV-DCTESC,W  < RAZ A PRIORI DE FSERV, AU CAS
                                     < OU UN ALT-MODE AURAIT ETE RECU
                                     < PENDANT L'ECHANGE DES MESSAGES.
         JMP         E784            < VERS L'ENTREE SUIVANTE DE LA
                                     < GRAMMAIRE DU CCI.
<
<        A P P E L   D ' U N E   R O U T I N E  :
<
CCIR:    EQU         $
<        ON A ICI :
<                    (L)=ADRESSE DCT(SERVICE).
<                    (W)=ADRESSE DCT(ESCLAVE).
         BSR         &AOTCCI         < MOT1=@DE LA ROUTINE.
         ADRI        XCCINX,X        < ACCES A L'INDEX DE L'UN DES
                                     < 2 NOEUDS SUIVANTS.
         JMP         CCIJMP
<
<        E N V O I   D ' U N   M E S S A G E  :
<
CCIM:    EQU         $
<
<        ON A ICI :
<                    (B)=LONGUEUR OCTETS DU MESSAGE.
<
         CPZR        B
         JE          E785            < RIEN A FAIRE : LE MESSAGE EST
                                     < VIDE (UTILISE PAR LE 'MAIL').
         LA          &AOTCCI         < (A)=MOT1(NOEUD)=@MESSAGE.
         BSR         AMESSO          < ENVOI DU MESSAGE ET ATTENTE.
E785:    EQU         $
         ADRI        XCCINX,X        < PASSAGE AU NOEUD SUIVANT DANS LE
                                     < CAS OU LE NOEUD COURANT FAIT
                                     < 2 MOTS DE LONG.
AE784:   JMP         E784            < ACCES AU NOEUD SUIVANT (ET RELAI 'E784').
<
<        D I S C O N N E X I O N   E S C L A V E  :
<
CCID:    EQU         $
         LX          INFINI          < EN VUE DU PROCHAIN APPEL AU CCI.
                                     < QUI PROVOQUERA UN END-JOB PAR
                                     < L'INTERMEDIAIRE DU RUN-SVCC.
<
<        S U S P E N S I O N   D U   C C I  :
<
CCIS:    EQU         $
         STX         RECOTO-DCTESC,W < SAVE INDEX COURANT DE L'ESCLAVE
                                     < DANS LA GRAMMAIRE DU CCI.
         PLR         B
<
<        S O R T I E   D U   C C I  :
<
E953:    EQU         $
         STY         YSER-DCTESC,W   < SAUVEGARDE A PRIORI DU REGISTRE
                                     < Y DE SERVICE.
<
< RETOUR A PRIORI AU MODE CCI INTERACTIF :
<
         BSR         ASMMK           <<<< MASK IT
         LA          IDESC-DCTESC,W
         RBT         IDESCI          < MODE INTERACTIF A PRIORI.
         STA         IDESC-DCTESC,W
         BSR         ASMDK           <<<< DEMASK IT
         RSR                         < ET C'EST TOUT...
<
<        R E C O N N A I S S A N C E   D I R E C T E  :
<
CCIDIR:  EQU         $
         BSR         ACARAC          < (A)=CARACTERE COURANT DU BUFESC.
         CPI         KZ              < VALIDATION PRELIMINAIRE PAR
                                     < RAPPORT AU 'Z'.
         JG          Z720            < ERREUR : HORS L'INTERVALLE A-Z.
         ADRI        -KAROND,A       < TRANSLATION PAR RAPPORT AU '@' (='A'-1).
         JALE        Z720            < ERREUR : HORS L'INTERVALLE A-Z.
<
< CAS OU LE CARACTERE COURANT EST DANS
< L'INTERVALLE 'A'-'Z' :
<
         LR          X,Y             < SAVE X DANS Y.
         ADR         A,X             < LE CARACTERE COURANT VA ETRE
                                     < UTILISE POUR INDEXER UNE
                                     < TABLE DE RELAIS DE NOEUDS.
         LX          &AOTCCI         < (X)=@NOEUD SUIVANT OU '0000.
         CPZR        X
         JNE         Z980            < OK, LE NOEUD COURANT EST
                                     < RECONNU, ET X CONTIENT L'
                                     < ADRESSE DU NOEUD SUIVANT.
<
< CAS DES CARACTERES NON RECONNUS :
<
         JE          SYSR53          < OK, (X)=K.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
SYSR53:  EQU         $
         LR          Y,X             < RESTAURE L'INDEX COURANT DE LA
                                     < GRAMMAIRE DU CCI QUI DONNE LE
                                     < NOEUD OU ALLER EN CAS DE NON
                                     < RECONNAISSANCE.
         JMP         Z720            < VERS LE RETOUR SUR LE CARACTERE
                                     < NON RECONNU.
<
<        R E C O N N A I S S A N C E   I N V E R S E E  :
<
CCINC:   EQU         $
         BSR         ACARAC          < ACCES AU CARACTERE COURANT DE
                                     < BUFESC.
<
<        ON A ICI :
<                    (A)=CARACTERE COURANT DE BUFESC,
<                    (B)=CARACTERE ATTENDU.
<
         ADRI        XNCOK-XNCNK,X   < PREPARATION D'UN RETOUR OK
                                     < A PRIORI.
         CPR         A,B             < Y-A-T'IL COINCIDENCE ???
         JE          E786            < OK, IL Y A COINCIDENCE.
         ADRI        XNCNK-XNCOK,X   < NON COINCIDENCE : ERREUR.
         JMP         Z720            < VERS UN RETOUR ARRIERE DANS
                                     < LE BUFESC.
<
<        R E C O N N A I S S A N C E   U N   C A R A C T E R E  :
<
CCIC:    EQU         $
         BSR         ACARAC          < ACCES AU CARACTERE COURANT DE
                                     < BUFESC.
<
<        ON A ICI :
<                    (B)=CARACTERE ATTENDU,
<                    (A)=CARACTERE COURANT.
<
         CPR         A,B             < Y-A-T'IL COINCIDENCE...
E787:    EQU         $
         JE          E786            < OK : CARACTERE RECONNU, OU
                                     < COINCIDENCE DE TYPE.
E787JN:  EQU         $
         ADRI        XCNK-XCOK,X     < DANS LE CAS DE LA NON-RECONNAIS-
                                     < SANCE OU DE LA NON COINCIDENCE
                                     < DE TYPE IL FAUT ACCEDER AU MOT2.
Z720:    EQU         $               < ENTRY NON COINCIDENCE POUR CCINC.
         DC          VAR+XBUFGR      < RETOUR ARRIERE SUR LE CARACTERE
                                     < NON RECONNU.
E786:    EQU         $
<
<        S A U T   D A N S   L A   G R A M M A I R E  :
<
CCIJMP:  EQU         $
<
< VALIDATION DE L'ADRESSE DU NOEUD SUIVANT :
<
         LA          &AOTCCI         < ACCES A CE QUI EST POINTE
                                     < PAR LE REGISTRE X.
ADGCCI:: VAL         1               < LA GRAMMAIRE DU CCI DOIT ETRE A DES
MKCCI::  VAL         'F000           < ADRESSES DU TYPE 1XXX (MASQUE BITS 0-3).
XWOR%1:  VAL         MKCCI=K
XWOR%1:  VAL         -XWOR%1
         SLRS        -XWOR%1         < ACCES AUX BITS0-3.
         CPI         ADGCCI          < EST-CE UNE ADRESSE DE LA
                                     < GRAMMAIRE DU CCI ???
         JE          Z980X1          < OUI, ON VA S'Y BRANCHER...
<
< TESTS DES SAUTS IMPLICITES A 'N10'
< AVEC CODE D'ERREUR UTILISATEUR :
<
MCCIER:: VAL         'F000           < "RACINE" COMMUNE DES CODES D'ERREURS,
                                     < QU'ON NE DOIT PAS RETROUVER SUR AUCUN
                                     < AUTRE NOEUD DE LA GRAMMAIRE SOUS PEINE
                                     < DE FAUSSES ERREURS...
         CPI         MCCIER>XWOR%1   < ALORS, EST-CE UN BRANCHEMENT IMPLICITE
                                     < AU NOEUD D'ERREUR 'N10' ???
         JNE         AE784           < NON, ON EST DONC EN PRESENCE
                                     < D'UN AUTO-RELAI.
         LA          &AOTCCI         < OUI :
                                     < (A)=CODE D'ERREUR UTILISATEUR,
         STA         BOXESC-DCTESC,W < QUE L'ON RENVOIE PAR 'BOX', ET QUE L'ON
                                     < EDITER APRES BRANCHEMENT A 'N10' SI
                                     < L'UTILISATEUR N'EST PAS EN MODE INTER-
                                     < PRETATIF...
         LRM         X
         WORD        N10             < ET BRANCHEMENT AUTOMATIQUE A 'N10',
         JMP         Z980            < VERS CE BRANCHEMENT EFFECTIF...
<
< CAS DES BRANCHEMENTS EXPLICITES :
<
Z980X1:  EQU         $
<
< ACCES A L'ADRESSE DU NOEUD SUIVANT :
<
         LX          &AOTCCI         < ACCES A L'ADRESSE DU NOEUD
                                     < SUIVANT.
<
< BRANCHEMENT :
<
Z980:    EQU         $               < ENTRY 'RECONNAISSANCE DIRECTE'.
         LA          AOTCCI          < RELAI VERS LE NOEUD 0
                                     < DE LA GRAMMAIRE DU CCI.
         RBT         BITX            < (A)=ADRESSE DU NOEUD 0 PAR RAZ
                                     <     DU BIT D'INDEX.
         SBR         A,X             < (X)=INDEX NOEUD SUIVANT.
         JMP         AE784           < ACCES AU NOEUD SUIVANT.
<
<        A P P E L   S O U S - G R A M M A I R E  :
<
CCICAL:  EQU         $
         LA          SRCOTO-DCTESC,W
         CP          INFINI          < VERIFICATION QUE L'APPEL N'EST
                                     < PAS IMBRIQUE DANS UN AUTRE
                                     < APPEL.
         JE          SYSR54          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      VOIR JE PENSE LA 'SYSER' QUI EST
<                    SITUEE EN 'E784' ENVIRON...
<
SYSR54:  EQU         $
         STX         SRCOTO-DCTESC,W < SAUVEGARDE DE L'INDEX COURANT
                                     < DE LA GRAMMAIRE DU CCI DANS
                                     < SRCOTO.
         IC          SRCOTO-DCTESC,W < SRCOTO DOIT CONTENIR EN FAIT
                                     < L'INDEX DU NOEUD SUIVANT.
         JMP         CCIJMP          < LA SUITE DU TRAITEMENT EST
                                     < IDENTIQUE AU CCI JUMP.
<
<        T Y P E   U N   C A R A C T E R E  :
<
CCICT:   EQU         $
         BSR         ACARAC          < ACCES AU CARACTERE COURANT
                                     < DE BUFESC.
<
<        ON A ICI :
<                    (A)=CARACTERE COURANT DE BUFESC,
<                    (B)=TYPE ATTENDU.
<
         LYI         CCITZZ          < INITIALISATION.
         CPI         HZERO           < CARACTERE<"0"...
         ADCR        Y
         CPI         HNEUF+E         < CARACTERE=CHIFFRE...
         ADCR        Y
         CPI         KA              < CARACTERES ENTRE LES CHIFFRES
                                     < ET LES LETTRES...
         ADCR        Y
         CPI         KZ+E            < CARACTERE>"Z"...
         ADCR        Y
         CPR         Y,B             < COMPARAISON DU TYPE CHERCHE,
                                     < AVEC LE TYPE DU CARACTERE COURANT.
         JMP         E787            < VERS LA DETERMINATION DU
                                     < NOEUD SUIVANT.
<
<        C H A R G E M E N T   D ' U N   P R O C E S S E U R  :
<
<
<        A T T E N T I O N  :
<                    ON A ICI : (B)=K.
<                    (CF. LE FORMAT DE LA FONCTION F8 DU CCI) !!!
<
CCILP:   EQU         $
         LA          &AOTCCI         < (A)=@DK DU PROCESSEUR SUR LE
                                     <     DISQUE DE SWAPPING.
         ADRI        XLPTO-XLPAD,X
         LY          &AOTCCI         < (Y)=TAILLE OCTET MEMOIRE NECESSAIRE
                                     < AU PROCESSEUR.
         ADRI        XLPRUN-XLPTO+XCCINX,X
         PSR         A               < SAVE @DK DU PROCESSEUR.
<
< MISE EN PLACE DE LA ROUTINE DE FIN
< DE SERVICE, QUI POSITIONNERA L'ADRESSE
< DE LANCEMENT DU PROCESSEUR :
<
         LA          ARUNP
         SBT         XFSERV          < PAS DE RECOVERY SI FSERV EST
                                     < DEJA POSITIONNE.
         BSR         AFSERV          < TEST ET RANGEMENT DE FSERV.
         TBT         XFSERV          < TEST EN RETOUR DE L'EXECUTION
                                     < DE AFSERV.
         PLR         A               < RESTAURE (A)=@DK DU PROCESSEUR.
         JC          CCIS            < FSERV N'A PAS ETE MODIFIE ;
                                     < IL Y A SUREMENT UN ALT-MODE
                                     < EN COURS ; ON IGNORE DONC LE
                                     < LOAD-PROCESSOR, ET ON FAIT UNE
                                     < SUSPENSION DU CCI POUR CETE
                                     < ESCLAVE AFIN D'EXECUTER LA
                                     < FIN DE SERVICE (D'ABORT !!!).
<
< OK, LE PROCESSEUR VA ETRE CHARGE :
<
         STA         DEMSWP-DCTESC+T+OPDEM,W
                                     < CETTE ADRESSE DISQUE EST TRANSMISE
                                     < AU SWAPER (IN) PAR L'INTERMEDIAIRE
                                     < DE L'OPDEM DE LA DEMANDE DE SWAP.
         STY         DEMSWP-DCTESC+T+CODEM,W
                                     < MISE A JOUR DE LA DEMANDE DE
                                     < SWAPPING.
         STX         RECOTO-DCTESC,W < SAVE L'INDEX COURANT DE
                                     < L'AUTOMATE DU CCI.
         ADRI        -D,K            < DESTRUCTION DU REGISTRE B
                                     < EMPILE A L'ENTREE DE CCI.
<
<        ON A ICI :
<                    (B)=K (CE QUI EST PARFAIT POUR 'ARGAM1'...)
<
         BSR         ARGAM1          < ON EST DANS UNE SITUATION
                                     < IDENTIQUE A CELLE DE LA 1ERE
                                     < ALLOCATION MEMOIRE D'UN ESCLAVE.
<
<        ON A ICI :
<                    BIT0(B)=1 : POUR FORCER LE SWAPPER,
<                    (B)=RANG DE L'ALLOCATEUR NECESSAIRE.
<
         ADRI        DCTESC-DEMSWP,W < RESTAURE (W)=@DCT-ESCLAVE.
         JMP         E953            < VERS LA SUSPENSION DU CCI.
<
<        T E S T   N U M E R O   D E   C O M P T E  :
<
CCIACN:  EQU         $
         LA          &AOTCCI         < (A)=CARACTERE 0 & 1 DE L'.
         ADRI        XACN2-XACN1,X
         LB          &AOTCCI         < (B)=CARACTERES 2 & 3 DE L'.
CCIACP:  EQU         $
         ADRI        XACNNK-XACN2,X  < RETOUR EN ERREUR AU CCI A PRIORI.
<
< COMPARAISON DU NUMERO DE L'UTILISATEUR
< AVEC CELUI CONTENU DANS (A,B) :
<
         IF          XXACN-2,,XEIF%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         CP          ACNESC-DCTESC,W
         JNE         CCIJMP          < NON COINCIDENCE.
         LR          B,A             < 2EME PARTIE...
         CP          ACNESC-DCTESC+U,W
         JNE         CCIJMP          < NON COINCIDENCE.
<
< CAS OU LE NUMERO DE COMPTE DE L'UTILISATEUR
< COINCIDE AVEC CELUI DU NOUED COURANT :
<
         ADRI        XACNOK-XACNNK,X < RETOUR OK AU CCI.
         JMP         CCIJMP
<
<        T E S T   D U   N U M E R O   D E   C O M P T E   : S Y S  :
<
CCISYS:  EQU         $
         LA          ACNSYS
         LB          ACNSYS+U        < (A,B)=NUMERO DE COMPTE DU SYSTEME.
         ADRI        XCCIM0-XCCIM1,X < RETOUR SUR LA FONCTION...
         JMP         CCIACP          < VERS LE TEST DE ":SYS"...
<
<        T E S T   < E O M >  :
<
CCIEOM:  EQU         $
         BSR         ACARAC          < (A)=CARACTERE COURANT DE BUFGR.
         JE          CCIJMP          < C'EST UN LIMITEUR (RETOUR-CHARIOT,
                                     < 'EON' OU BIEN ENFIN LE POINT...).
         JMP         E787JN          < ET BIEN NON, CE N'EST PAS UN CARACTERE
                                     < LIMITEUR...
<
<        T E S T   I N T E R P R E T A T I F  :
<
CCINT:   EQU         $
         LA          IDESC-DCTESC,W
         TBT         IDESCI          < TEST DU BIT DE MODE DU CCI.
         ADCR        X               < ON FAIT +1 SUR L'INDEX COURANT
                                     < DE LA GRAMMAIRE DU CCI (X) SI
                                     < LE CCI EST EN MODE NON
                                     < NON-INTERPRETATIF POUR CET ESCLAVE.
         IF          XCCINX-BIT,,XEIF%,
         IF          ATTENTION : 'ADCR' NE MARCHERA PAS !!!
XEIF%:   VAL         ENDIF
         JMP         CCIJMP          < VERS L'ACCES AU NOEUD SUIVANT.
<
<        T E S T   D U   M O D E   D E   L ' U T I L I S A T E U R  :
<
<
<        DEFINITION :
<                    UN USER EST DIT INTERACTIF SI NSPIN=NSPOUT,
<                    ET NON INTERACTIF DANS LE CAS CONTRAIRE.
<
CCIUSR:  EQU         $
         BSR         ACHKIN          < COMPARAISON DE NSPIN ET DE
                                     < NSPOUT DE L'UTILISATEUR.
         JE          CCIJMP          < NSPIN=NSPOUT : L'UTILISATEUR
                                     < EST CONSIDERE COMME ETANT
                                     < INTERACTIF.
         ADRI        XUSRNI-XUSRUI,X < NSPIN#NSPOUT : L'UTILISATEUR
                                     < EST CONSIDERE NON INTERACTIF.
         JMP         CCIJMP
         PAGE
<
<
<        C O M P A R A I S O N   D U   N S P I N   E T   D U
<        N S P O U T   D E   L ' U T I L I S A T E U R  :
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DCT(ESCLAVE).
<
<
<        RESULTAT :
<                    (A)=NSPIN DE L'UTILISATEUR.
<                    INDICATEURS POSITIONNES PRES POUR FAIRE UN
<                    'JE' SI NSPIN=NSPOUT.
<
<
CHKIN:   EQU         $
         PSR         X               < DANS LE CAS D'UN APPEL PAR LE
                                     < CCI : SAVE L'INDEX COURANT DE LA
                                     < GRAMMAIRE.
         LXI         PHIN
         LBY         &TASSGN-DCTESC,W
         LXI         PHOUT
         CPBY        &TASSGN-DCTESC,W
         PLR         X               < DANS LE CAS D'UN RETOUR AU CCI :
                                     < RESTAURE L'INDEX COURANT DE LA
                                     < GRAMMAIRE.
         RSR
         PAGE
         CALL        #SISP CMS5 DOL1#
<
<
<        I N I T I A L I S A T I O N   D U   P
<        D ' U N   P R O C E S S E U R  :
<
<
<        FONCTION :
<                    APPELEE EN FIN DE SERVICE UTILISATEUR,
<                    LORSQUE CELUI-CI A DEMANDE UN PROCESSEUR DU
<                    SYSTEME ; ELLE MODIFIE LE REGISTRE K :
<                         K <-- 2 ,
<                    ET MET A CETTE ADRESSE (K) L'ADRESSE DE
<                    LANCEMENT DU PROCESSEUR, QUI DEVIENT
<                    L'ADRESSE DE RETOUR DU 'SVC CCI'.
<                      SI L'APPEL A EU LIEU PAR QUIT, LE
<                    REGISTRE K EST RAZE,
<                    ET LE REGISTRE P EST INITIALISE
<                    DIRECTEMENT.
<                      DE PLUS ELLE RAZE LES REGISTRES
<                    A,B,X,Y,C,L,W DU PROCESSEUR DNAS
<                    LA PST UTILISATEUR.
<
<
<        A T T E N T I O N  :
<                      ON DOIT DONC RESERVER EN TETE DE
<                    CHAQUE PROOCESSEUR UNE ZONE D'AU MOINS
<                    2 MOTS POUR QU'IL CONSERVE SON
<                    INTEGRITE LORS D'UN 'RUNP'...
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DEMSER.
<                    (DESTRUCTIBLE).
<
<
RUNP:    EQU         $
<
<        A T T E N T I O N  :
<                    QUAND ON EST ICI, LA ZONE
<                    MEMOIRE DE L'UTILISATEUR EST RESIDENTE !!!!
<
         LX          RECOTO-DEMSER,W < RECUPERATION DE L'INDEX COURANT
                                     < DE LA GRAMMAIRE DU CCI.
         ADRI        -XCCINX,X       < PASSAGE SUR L'ADRESSE DE
                                     < LANCEMENT DU PROCESSEUR.
         LX          &AOTCCI         < (X)=@LANCEMENT DU PROCESSEUR.
         STX         PRESC-DEMSER,W  < PRESC RECOIT A PRIORI L'ADRESSE
                                     < DE LANCEMENT DU PROCESSEUR DE
<
                                     < BASE DE CMS4 QUE L'ON LANCE.
<
<        E N T R Y   ' G O B P E '  :
<
<
<        ON A ICI :
<                    (X)=FUTUR REGISTRE P (OU DE RETOUR),
<                    (W)=ADRESSE DEMSER.
<
<
         CPZ         PSTESC-DEMSER+RS,W < TEST DU MODE DE L'UTILISATEUR :
                                       < MAITRE : APPEL PAR SVC,
                                       < ESCLAVE : APPEL PAR QUIT.
         IF          MS-BITSIG,,XEIF%,
         IF          ATTENTION : LE TEST EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JGE         Z870            < L'ESCLAVE ETANT EN MODE ESCLAVE,
                                     < ON PEUT INITIALISER DIRECTEMENT
                                     < SON REGISTRE P AVEC L'ADRESSE
                                     < DE LANCEMENT DU PROCESSEUR.
<
< CAS D'UN ESCLAVE EN MODE MAITRE : ON NE
< PEUT QU'INITIALISER LE P DE RETOUR
< DU SVC AVEC L'ADRESSE DE LANCEMENT
< DU PROCESSEUR :
<
         LA          PSTESC-DEMSER+RSLO,W  < (A)=(SLO).
         BSR         APDADR          < (A)=SLO*16 (EN MOTS)
         ADRI        XMOT2,A         < (A)=(SLO)+2, POUR INITIALISER
                                     <     LE REGISTRE K (ON PREND
                                     <     (SLO)+2 AU CAS OU LE PRESC
                                     <     SERAIT NUL, CE QUI SIGIFIE
                                     <     UN PASSAGE PAR LE SVC CCI !!!).
         XR          A,W             < (W)=ADRESSE ABSOLUE SOMMET PILE
                                     < UTILISATEUR
         STX         O,W             < ADRESSE DE LANCEMENT DU PROCESSEUR
         XR          A,W
         LAI         XMOT2
         STA         PSTESC-DEMSER+RK,W < STOCKAGE DU K
                                     < TRANSLATABLE DE L'UTILISATEUR
         LXI         RW-RA+Z         < POUR RAZ DE : A,B,X,Y,C,L,W.
         JMP         Z871            < VERS L'INITIALISATION DES
                                     < REGISTRES DE L'ESCLAVE.
<
< CAS D'UN ESCLAVE EN MODE ESCLAVE,
< ON PEUT INITIALISER DIRECTEMENT
< SON REGISTRE P AVEC L'ADRESSE DE
< LANCEMENT DU PROCESSEUR (QUIT) :
<
Z870:    EQU         $
         STX         PSTESC-DEMSER+RP,W < INITIALISATION DIRECTE DE 'P'.
         LXI         RK-RA+Z         < POUR RAZ DE : A,B,X,Y,C,L,W,K.
Z871:    EQU         $
         LA          FSERV-DEMSER,W  < POUR DISCRIMINER RUNP DE GOBPE.
         STZ         FSERV-DEMSER,W  < RAZ DE LA ROUTINE DE FIN DE
                                     < SERVICE.
         CP          AGOBPE          < ETAIT-CE GOBPE ???
         JE          Z1140           < OUI, ON NE TOUCHE DONC PAS
                                     < AUX REGISTRES DE L'UTILISATEUR.
<
< CAS DE RUNP : RAZ DES REGISTRES DU PROCESSEUR :
<
E960:    EQU         $
         STZ         PSTESC-DEMSER,W
         ADRI        P,W             < REGISTRE SUIVANT DANS LA PST
                                     < DE L'UTILISATEUR.
         JDX         E960            < AU SUIVANT...
Z1140:   EQU         $               < ENTRY POUR GOBPE.
         RSR                         < GO BACK TO HDLSER.
         PAGE
<
<
<        G E S T I O N   D U   ' P R E S C '   U T I L I S A T E U R  :
<
<
<        FONCTION :
<                    ! : PROVOQUE UNE REMISE A 0 DU PRESC,
<                    ! : PROVOQUE UN RETOUR AU PROGRAMME
<                             DE L'UTILISATEUR, TEL QUE :
<                                    P(ESCLAVE)<--(PRESC).
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DCT(ESCLAVE).
<
<
<        C O M M A N D E   ! < E O T >  :
<
<
RPRESC:  EQU         $
         STZ         PRESC-DCTESC,W  < LA COMMANDE '!' REMET
                                     < A 0 LE PRESC DE L'ESCLAVE.
         RSR                         < ET C'EST TOUT...
<
<
<        C O M M A N D E   ! < R / C >  :
<
<
MPRESC:  EQU         $
         LA          AGOBPE          < (A)=@ROUTINE DE FIN DE SERVICE
                                     < PERMETTANT UN RETOUR AU PROGRAMME
                                     < ESCLAVE PAR 'PRESC'.
         JMP         Z932            < VERS LE POSITIONNEMENT DE
                                     < 'FSERV'.
<
<
<        R E T O U R   P R O G R A M M E
<        E S C L A V E   P A R   P R E S C  :
<
<
<        FONCTION :
<                      CETTE ROUTINE DE FIN DE SERVICE PERMET
<                    UN RETOUR AU PROGRAMME ESCLAVE PAR
<                    PRESC ; CE RETOUR EST TRAITE COMME
<                    L'INITIALISATION D'UN PROCESSEUR
<                    DE BASE DE CMS4.
<                      EN FAIT, SI (PRESC)<0 : LE ALT-MODE
<                    SOLITAIRE EST IGNORE.
<
<
<        A T T E N T I O N  :
<                      DANS LE CAS OU BIT0(DEMSWP)=1,
<                    C'EST-A-DIRE LORSQUE LE SWAPPING
<                    EST BLOQUE POUR UN ESCLAVE, LE
<                    RETOUR A PRESC EST REMPLACE PAR
<                    UN ABORT. C'EST UN CAS QUI SE RENCONTRE
<                    DANS LE DEBUG, LORSQUE L'ON FAIT
<                    PAR EXEMPLE 'S,0', PUIS 'M...'
<                    LE TOUT SUIVI D'UN ALT-MODE...
<
<
<        T R E S   I M P O R T A N T  :
<                      LE MOT D'ADRESSE (SLO)+XMOTX CORRESPOND
<                    AU MOT 'CDRET' DEFINI DANS LE SYSTEME
<                    D'ENSEIGNEMENT 'SMC' ; LES PROCES-
<                    SEURS DE 'SMC' L'UTILISE PARFOIS
<                    POUR SAVOIR SI UN ALT-MODE A ETE RECU ;
<                    IL FAUT DONC QUE CETTE CORRESPONDANCE
<                    SUBSISTE :
<
<                                    CDRET=(SLO)+XMOTX...
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DEMSER.
<                      (DESTRUCTIBLE).
<
<
GOBPE:   EQU         $
XMOTX::  MOT         XMOT2           < MOT UTILISE DANS L'ESPACE UTILISATEUR
                                     < POUR INDIQUER LA RECEPTION D'UN ALT-
                                     < MODE SOLITAIRE, EN DONNANT LE 'P' ACTIF
                                     < A CE MOMENT ; LES AUTRES REGISTRES SONT
                                     < INCHANGES...
         CPZ         DEMSWP-DEMSER+XXNSP,W
         JL          Z1500           < BIT0(DEMSWP)=1 : LE SWAPPING
                                     < EST BLOQUE POUR CET ESCLAVE,
                                     < ON VA DONC EN FAIT ABORTER.
<
< CAS OU BIT0(DEMSWP)=K : RETOUR A PRESC.
<
         LA          RECOTO-DEMSER,W < (A)=INDEX COURANT DE LA GRAMMAIRE
                                     <     DU CCI DE L'ESCLAVE.
         CP          INFINI          < UN LOGOUT EST-IL DEMANDE ???
         JE          Z871            < OUI, ALORS LE ALT-MODE QUI
                                     < PROVOQUE CE RETOUR AU PROGRAMME
                                     < UTILISATEUT EST IGNORE...
         LX          PRESC-DEMSER,W  < RECUPERATION DANS X DU PRESC
                                     < COURANT DE L'ESCLAVE.
         CPZR        X               < MAIS EN REALITE, EST-CE BIEN
                                     < UN P DE RETOUR ???
         JL          Z871            < ET BIEN NON, PRESC<0 INDIQUE
                                     < QUE LES ALT-MODES SOLITAIRES
                                     < DOIVENT ETRE IGNORES...
         PSR         B,Y             < PRENONS LE ALT-MODE EN COMPTE :
         LA          PSTESC-DEMSER+RSLO,W
         BSR         APDADR
         LR          A,Y             < (A)=Y=(SLOESC) EXPRIME EN MOTS...
         CPZ         PSTESC-DEMSER+RS,W < ALORS QUEL EST LE MODE ???
         IF          MS-BITSIG,,XEIF%,
         IF          ATTENTION : LE TEST EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JGE         Z930X1          < ESCLAVE...
<
< CAS DU MODE MAITRE : LE ALT-MODE
< SOLITAIRE EST APPARU ALORS QU'UN
< 'SVC' ETAIT EN COURS :
<
         AD          PSTESC-DEMSER+RK,W
         XR          A,W             < 'W' POINTE L'ENTREE COURANTE DE LA
                                     < PILE 'K', ET DONNE DONC :
         LB          O,W             < (B)=REGISTRE 'P' DE RETOUR DU 'SVC'...
         STX         O,W             < QUE L'ON REMPLACE PAR LE 'PRESC' (X).
         XR          A,W
         ADRI        -XMOTX,A
         CPR         A,Y             < LE MOT 'XMOTX' CORRESPONDRAIT-IL
                                     < AU SOMMET DE LA PILE OU L'ON A RANGE
                                     < LE 'PRESC' DE RETOUR ???
         JE          Z930X3          < OUI, C'EST LE CAS EN PARTICULIER OU
                                     < L'ON UTILISE LA COMMANDE 'MPRESC'
                                     < A LA SUITE D'UNE TRAPPE...
         JMP         Z930X2          < VERS L'INDICATION DU ALT-MODE...
<
< CAS DU MODE ESCLAVE : LE ALT-MODE
< SOLITAIRE EST APPARU PENDANT LE
< RUN DU PROGRAMME, OU ALORS QU'UN
< 'QUIT 0' ETAIT EN COURS :
<
Z930X1:  EQU         $
         LB          PSTESC-DEMSER+RP,W < (B)=REGISTRE 'P' COURANT,
         STX         PSTESC-DEMSER+RP,W < QUE L'ON REMPLACE PAR LE 'PRESC' (X).
<
< INDICATION A L'UTILISATEUR PAR
< 'XMOTX' QU'UN ALT-MODE SOLITAIRE
< EST APPARU : ON MET DANS 'XMOTX'
< LE 'P' COURANT...
<
Z930X2:  EQU         $
         XR          Y,W
         STB         XMOTX,W         < ET VOILA...
         XR          Y,W
Z930X3:  EQU         $
         PLR         B,Y
         JMP         Z871            < VERS LA SORTIE, ET L'ANNULATION
                                     < DU 'FSERV' EN COURS...
<
< CAS OU BIT0(DEMSWP)=1 : ABORT.
<
Z1500:   EQU         $
         LA          AABORT          < (A)=@ROUTINE DE FIN DE SERVICE
                                     <     D'ABORT,
         STA         FSERV-DEMSER,W  < QUI REMPLACE LA ROUTINE DE FIN
                                     < DE SERVICE DE RETOUR A PRESC
                                     < DESTINEE AU HANDLER DE SERVICE.
         JMP         Z1140           < VERS UN RETOUR IMMEDIAT AU
                                     < HANDLER DE SERVICE.
         PAGE
<
<
<        E X E C U T I O N   D E S   D E M A N D E S
<                    D E   P R O C E E D  :
<
<
<
<
<        P R O C E E D  :
<
<
<        FONCTION :
<                      CETTE ROUTINE EST APPELEE PAR
<                    L'INTERMEDIARE DE LA GRAMMAIRE DU CCI,
<                    LORS DE LA RENCONTRE DE LA COMMANDE
<                    '!GO'. ELLE POSITIONNE LA DEMANDE D'UNE
<                    ROUTINE DE FIN DE SERVICE.
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DCT(ESCLAVE).
<
<
PROCED:  EQU         $
         LA          AGOON           < @ROUTINE DE FIN DE SERVICE, POUR
                                     < EXECUTION DU PROCEED.
<
<        E N T R Y   M P R E S C  :
<
Z932:    EQU         $
<
<        ON A ICI :
<                    (A)=ADRESSE ROUTINE DE FIN DE SERVICE
<                      A METREE DANS 'FSERV'.
<
         BSR         AFSERV          < TEST ET RANGEMENT DE FSERV.
         RSR                         < IL FAUT EVIDEMMENT QU'UNE
                                     < SUSPENSION DU CCI SUIVE (CF.
                                     < LA GRAMMAIRE DU CCI).
<
<
<        R E T O U R   E S C L A V E  :
<
<
<        FONCTION :
<                      CETTE ROUTINE EST PAPELEE EN FIN DE
<                    SERVICE, ELLE A A SA CHARGE LA
<                    MODIFICATION DU REGISTRE P DE RETOUR
<                    L'ESCLAVE, TEL QUE L'ON DEPASEE
<                    LA SVC CCI.
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DEMSER.
<
<
GOON:    EQU         $
         STZ         FSERV-DEMSER,W  < SUPPRESSION DE LA ROUTINE DE
                                     < FIN DE SERVICE.
         LA          PSTESC-DEMSER+RS,W < DISCRIMINATION DE L'APPEL AU 'CCI' :
         TBT         SVCS            < PAR UN 'SVC' ???
         JC          Z842            < SVCS=1 : L'APPEL A EU LIEU PAR 'SVC'...
<
< CAS D'UN ESCLAVE EN MODE ESCLAVE ;
< L'APPEL A EU LIEU PAR QUIT :
<
         CPZ         PSTESC-DEMSER+RP,W < TEST DU REGISTRE P(ESCLAVE).
         JE          Z60               < P(ESCLAVE) EST NUL, ON EST
                                       < SUREMENT SUR LE QUIT INITIAL
                                       < DE L'ESPACE MEMOIRE ESCLAVE.
         IC          PSTESC-DEMSER+RP,W < ON INCREMENTE DIRECTEMENT
                                       < LE REGISTRE P DE L'ESCLAVE,
                                       < PUISQUE CELUI-CI EST EN
                                       < MODE ESCLAVE.
         JMP         Z60             < RETOUR SANS TOUCHER AU REGSITRE
                                     < X DE L'ESCLAVE LORS D'UN QUIT.
<
< CAS D'UN ESCLAVE EN MODE MAITRE ;
< L'APPEL A DONC EU LIEU PAR SVC :
<
Z842:    EQU         $
         PSR         A               < SAUVEGARDE DE 'RS'...
         LRM         A
         WORD        RETSVC          < (A)=VALEUR DU REGISTRE 'P' D'UN UTILI-
                                     <     SATEUR LORSQUE CELUI-CI A FAIT UN
                                     <     'SVC'...
         CP          PSTESC-DEMSER+RP,W
                                     < L'UTILISATEUR AYANT SVCS=1, AVANT DE LE
                                     < (RE-)METTRE EN MODE MAITRE, VERIFIONS
                                     < QU'IL A BIEN LE BON REGISTRE 'P' ???
         PLR         A               < RESTAURE :
                                     < (A)=REGISTRE 'S'...
         JNE         Z60             < IL EST DIFFERENT, ON LE LAISSE DONC
                                     < INCHANGE, MAIS SURTOUT, ON NE REMET
                                     < PAS L'UTILISATEUR EN MODE MAITRE !!!
                                     < CELA PEUT SE PRODUIRE DE LA FACON
                                     < SUIVANTE :
                                     < 1 - L'UTILISATEUR EST SOUS "DEBUG",
                                     < 2 - IL A FAIT : "S,0" PUIS A MODIFIE
                                     < LE REGISTRE 'P' PAR "P,...",
                                     < 3 - ENFIN, IL EST SORTI DU "DEBUG"
                                     < PAR LA COMMANDE "!GO" ;
                                     < DONC, ARRIVANT ICI SUITE AU "!GO", ON
                                     < TROUVE 'SVCS'=1, ON DEDUIT QU'IL Y EU
                                     < 'SVC', ET ON REFORCE DONC LE MODE
                                     < MAITRE QUI AVAIT ETE ANNULE SOUS LE
                                     < "DEBUG" PAR L'UTILISATEUR... MAIS 'RP'
                                     < N'EST PLUS BON, ON LAISSE DONC L'UTILI-
                                     < SATEUR EN MODE ESCLAVE...
         SBT         MS              < DANS LE CAS D'UN APPEL PAR 'SVC', ON
         STA         PSTESC-DEMSER+RS,W < ON REMET A PRIORI L'UTILISATEUR EN
                                        < MODE MAITRE (AU CAS OU IL SERAIT
                                        < PASSE SOUS "DEBUG"...).
         LA          PSTESC-DEMSER+RSLO,W < (A)=(SLO).
         BSR         APDADR          < (A)=SLO*16
         AD          PSTESC-DEMSER+RK,W < (A)=K ABSOLUTISE
         XR          A,W             < (W)=K ABSOLU
                                     < (A)=ADRESSE DCTESC
         CPZ         O,W             < TEST DU P DE RETOUR
         JE          Z60Z            < S'IL EST NUL, ON NE FAIT RIEN
                                     < CAR ON EST SUREMENT A LA SUITE
                                     < D'UN ALT-MODE OU DU LOGIN
         IC          O,W             < SAUTONS LE 'SVC  CCI'. EN EFFET
                                     < A L'ENTREE DU 'SVC  CCI', ON
                                     < FAIT -1 SUR LE REGISTRE P DE RETOUR
         XR          A,W             < (W)=ADRESSE DCT ESCLAVE
                                     < (A)=K ABSOLU
<*******************************************************************************
         BSR         ASTXES          < EXECUTION DU STORE X(ESCLAVE) SUIVANT :
         STZ         PSTESC-DEMSER+RX,W  < RAZ DU REGISTRE X DE L'ESCLAVE
<*******************************************************************************
Z60:     EQU         $
         RSR                         < RETOUR A L'ESCLAVE.
Z60Z:    EQU         $
         XR          A,W             < (W)=ADRESSE DCT ESCLAVE
                                     < (A)=K ABSOLU
         JMP         Z60
         CALL        #SISP CMS5 DOL2#
         PAGE
<
<
<        R O U T I N E S   D E   S E R V I C E   D U   C C I  :
<
<
<
<
<        E M I S S I O N   M E S S A G E  :
<        R E C E P T I O N   M E S S A G E  :
<
<
<        ARGUMENTS :
<                    (W)=ADRESSE DE LA DCT-ESCLAVE,
<                    (L)=ADRESSE DE LA DCT-SERVICE,
<                    (A)=ADRESSE MOT MESSAGE : EMISSION DEMANDEE SUR 'PHOUT',
<                       =0 : RECEPTION DEMANDEE SUR PHIN DANS BUFESC,
<                    (B)=LONGUEUR OCTET DU MESSAGE.
<                        (LORS D'UNE EMISSION).
<
<
<        RESULTATS :
<                    (A)=ADRESSE DCT(ESCLAVE).
<                    (Y)=NSPTYP SUR NSPIN/OUT DE L'ESCLAVE.
<
<
         USE         L,DCT0
         USE         W,DEM0
MESSI:   EQU         $               < RECEPTION SUR PHIN.
         LAI         FGR             < DEMANDE DE LECTURE.
MESSO:   EQU         $               < DEMANDE D'EMISSION SI (A)#0, ET
                                     < DE RECEPTION SI (A)=K.
         PSR         X               < SAVE INDEX COURANT GRAMMAIRE.
         JAE         E854            < UNE RECEPTION EST DEMANDEE.
         IF          FGR-K,,XEIF%,
         IF          ATTENTION : CE QUI PRECEDE EST IDIOT !!!
XEIF%:   VAL         ENDIF
<
< PREPARATION DE L'EMISSION VERS NSPOUT :
<
         LXI         PHOUT           < NVP DU PERIPH.OUT.
         SLLS        NOCMO=K         < CONVERSION DE L'ADRESSE-MOT
                                     < EN UNE ADRESSE OCTET.
         STA         VAR+DEMCCI+T+AMDEM
         LAI         FGW             < OPDEM D'UNE ECRITURE.
<
< REALISATION DE L'EMISSION/RECEPTION :
<
E855:    EQU         $
         STB         VAR+DEMCCI+T+CODEM
         STA         VAR+DEMCCI+T+OPDEM
         LBY         &TASSGN-DCTESC,W
         SWBR        A,A             < (A)='NSPTYP' D'UNE DEMANDE DE LECTURE/
                                     <     ECRITURE SUR 'NSPIN'/'NSPOUT' DE
                                     < L'ESCLAVE...
         STA         VAR+DEMCCI+XXNSP
         LR          A,Y             < SAVE LE NSPTYP DANS Y, UTILISE
                                     < LORS DE L'EMISSION DE L'INTERRO-
                                     < GATION DU CCI.
         LAD         VAR+DEMCCI
         XR          A,W
<
<        ON A ICI :
<                    (A)=ADRESSE DCT(ESCLAVE).
<                    (W)=ADRESSE DEMCCI.
<
Z846:    EQU         $
         BSR         ACHAND          < ENVOI DE LA DEMANDE.
         WAIT        WEIO            < ATTENTE IMMEDIATE DE LA FIN
                                     < DE L'OPERATION.
         CPZ         ARGDEM+ETADEM   < TEST DES CONDITIONS DE RETOUR ???
         JNE         Z845            < ON EST PROBABLEMENT EN PRESENCE
                                     < D'UN TERMINAL DE TYPE VISU
                                     < GRAPHIQUE QUI SE TROUVE EN MODE
                                     < GRAPHIQUE, OU BIEN UN 'ALT-MODE'
                                     < A ETE ENVOYE PAR L'ESCLAVE
                                     < PENDANT LA SORTIE DU MESSAGE ;
                                     < CE SONT LES SEULS CAS
                                     < D'ERREUR POSSIBLE (???).
<
< OK, DEMANDE EXECUTEE, IL Y A
< PEUT-ETRE DES CONNEXIONS
< MATRICIELLES A EXPLOITER :
<
         PSR         A,X
         LA          ARGDEM+OPDEM
         ANDI        MKOPDM          < (A)=FONCTION COURANTE, ET
                                     < (W)=ADRESSE DE LA DEMANDE COURANTE...
         SVC         SVCM8           < VERS LA DUPLICATION EVENTUELLE DE LA
                                     < DEMANDE (W) SUR LES PERIPHERIQUES
                                     < CONNECTES AU PERIPHERIQUE COURANT...
         PLR         A,X
<
< FIN DE 'MESSI'/'MESSO' :
<
         PLR         X               < RESTAURE (X)=INDEX COURANT DE LA
                                     < GRAMMAIRE DU CCI.
         LR          A,W             < RESTAURE (W)=@DCT-ESCLAVE.
         LA          FSERV-DCTESC,W  < ACCES AU FSERV DE L'ESCLAVE,
                                     < AFIN DE SAVOIR SI UN OU
                                     < PLUSIEURS ALT-MODE(S) ONT ETE
                                     < EMIS PAR L'UTILISATEUR PENDANT
                                     < LE MESSAGE.
         CP          AABORT          < UN ABORT A-T'IL ETE DEMANDE ???
                                     < (C'EST-A-DIRE 2 ALT-MODES ONT-
                                     < ILS ETE FRAPPES???) ; CE TEST EST
                                     < RENDU OBLIGATOIRE PAR LA
                                     < POSSIBILITE QU'A UN UN PROGRAMME
                                     < ESCLAVE DE BOUCLER SUR UN APPEL
                                     < AU CCI NON INTERACTIF ; ET DANS
                                     < CES CONDITIONS, IL FAUT QUAND
                                     < MEME POUVOIR ABORTER CE
                                     < PROGRAMME !!!
         JE          Z1520           < TOUT ABORT DEMANDE EST CONSERVE!!!
         STZ         FSERV-DCTESC,W  < ET OUI, IL FAUT ENCORE RAZER
                                     < FSERV AU CAS OU UN ALT-MODE
                                     < AURAIT ETE FRAPPE PENADANT LA
                                     < SORTIE D'UN MESSAGE (CF. !DATE) ;
                                     < C'EST PAS POUR DIRE, MAIS
                                     < L'INTRODUCTION DES 2 ALT-
                                     < MODES D'ABORT N'A PAS SIMPLIFIE
                                     < LES CHOSES...
Z1520:   EQU         $
         LR          W,A             < RESTAURE : (A)=@DCT-ESCLAVE.
         RSR
<
< TRAITEMENT DES ERREURS D'EXECUTION :
<
Z845:    EQU         $
<
<        NOTA :
<                    LE REGISTRE X EST DESTRUCTIBLE.
<
         LX          ARGDEM+OPDEM
         PSR         X               < SAUVEGARDE DE L'OPDEM COURANT
                                     < DE LA DEMANDE DU CCI.
         LXI         FAVCG           < FONCTION 'CLOSE GRAPHIQUE'.
         STX         ARGDEM+OPDEM    < GENERATION D'UNE DEMANDE
                                     < DE 'CLOSE GRAPHIQUE'.
         PLR         X               < POUR EVITER DES DEBORDEMENTS
                                     < DE LA PILE DU HDL-SERVICE.
<
<        ON A ICI :
<                    (W)=ADRESSE DEMCCI.
<                    (X)=OPDEM DE LA DEMANDE REELLE.
<
         BSR         ACHAND          < ENVOI DE LA DEMANDE DE
                                     < 'CLOSE GRAPHIQUE'.
         WAIT        WEIO            < ATTENTE DE FIN DE 'CLOSE
                                     < GRAPHIQUE'.
         STX         ARGDEM+OPDEM    < RESTAURE L'OPDEM DE LA DEMANDE.
         CPZ         ARGDEM+ETADEM   < ALORS ???
         JE          Z846            < CELA C'EST BIEN PASSE...
         LXI         YCCITO
         BSR         ADODO           < LE 'CCI' EST MIS EN SOMMEIL AFIN DE
                                     < PERMETTRE UN EVENTUEL CHANGEMENT DE
                                     < L'ETAT DE LA VISU SANS BLOQUER LE
                                     < SYSTEME SUR DES RETOURS EN ERREURS
                                     < PERPETUELS !!!
         JMP         Z846            < NOUVELLE TENTATIVE D'EXECUTION
                                     < DE LA DEMANDE.
<
< PREPARATION DE LA RECEPTION DE NSPIN :
<
E854:    EQU         $
         LXI         PHIN
         LA          DEMESC-DCTESC+T+CODEM,W
         STA         VAR+MBUFGR      < AFIN DE VALIDER 'XBUFGR' DANS 'CARAC'...
         LR          W,A             < (A)=@DCT-ESCLAVE.
         ADRI        BUFESC-DCTESC,A < (A)=@MOT DE BUFESC.
         SBT         BITX            < CONSTITUTION D'UN RELAI EN
                                     < VUE D'UNE EVENTUELLE ANALYSE
                                     < SYNTAXIQUE DU MESSAGE RECU.
         STA         VAR+ABUFGR
         STZ         VAR+XBUFGR
         SLLS        NOCMO=K         < CONVERSION EN UNE @OCTET DE
                                     < L'ADRESSE BUFFER (A NOTER QUE
                                     < LE BIT D'INDEXATION A DISPARU...)
         STA         VAR+DEMCCI+T+AMDEM
         LAI         FGR             < OPDEM D'UNE LECTURE SANS ECHO.
         LBI         LCCI            < COMPTE D'OCTETS MAX.
         JMP         E855
         PAGE
<
<
<        C A R A C T E R E   C O U R A N T   D E   B U F E S C :
<
<
<        FONCTION :
<                      CETTE ROUTINE FOURNIT LE
<                    CARACTERE COURANT DU 'BUFESC'
<                    DANS LE REGISTRE 'A' ; DE PLUS
<                    ELLE ELIMINE LES 'NULLS', ET
<                    CECI A CAUSE DE LA DIRECTIVE
<                    "ASCI" DE L'ASSEMBLEUR QUI EN
<                    GENERE LORSQUE LE NOMBRE DE
<                    CARACTERES EST IMPAIR. ENFIN,
<                    ELLE INDIQUE AU DEMANDEUR SI
<                    LE CARACTERE NON NUL RENVOYE
<                    EST UNE FIN DE MESSAGE ('R/C',
<                    'EON' OU BIEN ".").
<                      DE PLUS, SAUF LORSQUE LA DEMANDE
<                    VIENT DES COMMANDES DU TYPE "!M..."
<                    (CE QUE L'ON IDENTIFIE PAR UN TEST
<                    DE MASQUAGE DES INTERRUPTIONS), LE
<                    BIT DE PARITE EST SYSTEMATIQUEMENT
<                    EFFACE...
<
<
<        RESULTAT :
<                    (A)=CARACTERE COURANT DE BUFESC (NON 'NULL'),
<                     ='EOT' SI ON SE TROUVE EN BOUT DE BUFFER CCI.
<                    XBUFGR : PROGRESSE D'UNE UNITE,
<                    INDICATEURS POSITIONNES SUR UN TEST DE LIMITEUR.
<                    ('R/C', 'EON' OU ".")
<
<
CARAC:   EQU         $
CARAC0:  EQU         $               < REBOUCLAGE SUR 'NULL'...
<
< ACCES AU CARACTERE COURANT :
<
         PSR         X               < SAVE INDEX COURANT DE LA GRAMMAIRE
         LXI         KEON            < 'EOT' A PRIORI.
         LA          VAR+XBUFGR      < (A)=INDEX COURANT DU BUFFER CCI.
         CPI         LCCINT          < VALIDATION...
         JLE         Z305X2          < OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT L'INDEX
<                    DU BUFFER 'CCI' PEUT ETRE EN
<                    DEBORDEMENT ; EXAMINER 'ABUFGR'
<                    ET SURTOUT 'MBUFGR' !!!
<
Z305X2:  EQU         $
         CP          VAR+MBUFGR      < EST-ON EN BOUT DU BUFFER "VISIBLE" ???
         XR          A,X             < (A)='EOT' A PRIORI,
                                     < (X)=INDEX COURANT DU BUFFER CCI.
         JGE         Z305            < LORSQU'ON EST EN BOUT DE
                                     < BUFFER CCI, ON RENVOIE DANS
                                     < A UN 'EOT' SIMULANT UN .
         LBY         &VAR+ABUFGR     < (A)=CARACTERE COURANT DE BUFESC.
         TBT         BITPAR          < A-T'IL LA PARITE ???
         JNC         Z305X1          < NON...
         PSR         A               < OUI, ON LE SAUVEGARDE,
         BSR         ASMIT           < QUEL EST L'ETAT DES INTERRUPTIONS ???
                                     < (C'EST UN TEST PEU ELEGANT DES COMMAN-
                                     < DES "!M... ; EN EFFET, ELLES UTILISENT
                                     < LE BIT DE PARITE : CF. 'KCRP' ET 'KEOTP')
XWOR%1:  VAL         K
XWOR%1:  VAL         CORBT?IPM=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         CORBT?IOM=FMASK(K?XWOR%1=FCINST
         CPI         XWOR%1          < ALORS LES INTERRUPTIONS SONT-ELLES
                                     < MASQUEES ???
         PLR         A               < RESTAURE : (A)=CARACTERE COURANT...
         JNE         Z305X1          < OUI, DONC ON NE TOUCHE PAS AU BIT
                                     < DE PARITE : C'EST UNE COMMANDE "!M...".
         RBT         BITPAR          < NON, ON ELEMINE LA PARITE AFIN D'IGNORER
                                     < LA PROVENANCE DU CARACTERE...
Z305X1:  EQU         $
Z305:    EQU         $
         IC          VAR+XBUFGR      < PROGRESSION DE L'INDEX COURANT
                                     < DE BUFESC.
         PLR         X               < RESTAURE INDEX GRAMMAIRE.
<
< TEST DE LIMITEUR :
<
         CPI         KCR             < EST-CE LE RETOUR-CHARRIOT ???
         JE          Z305JE          < OUI...
         CPI         KEON            < EST-CE  ???
         JE          Z305JE          < OUI...
         CPI         KPOINT          < EST-CE LE POINT ???
         JAE         CARAC0          < ON ELIMINE LES 'NULL', AFIN DE FACILI-
                                     < TER L'ECRITURE DES PROGRAMMES UTILI-
                                     < SATEUR EXPLOITANT LA DIRECTIVE "ASCI"
                                     < DE L'ASSEMBLEUR QUI EN GENERE EN BOUT
                                     < DE CHAINES EN CAS D'UN NOMBRE IMPAIR
                                     < DE CARACTERES.
                                     < CE 'JAE' EST MIS APRES LE TEST SUR
                                     < 'EON' A CAUSE DES DEBORDEMENTS DE
                                     < L'INDEX 'XBUFGR' : AINSI ON NE BOUCLERA
                                     < EN CAS D'UNE SUITE DE 'NULLS' EN FIN
                                     < FIN DE BUFFER, SANS CARACTERE DE FIN DE
                                     < MESSAGE EXPLICITE...
Z305JE:  EQU         $
<
< SORTIE :
<
         RSR
<
<
<        F I N   D E   N O M  :
<
<
EON::    VAL         KEON            < CARACTERE DE 'FIN DE NOM'.
         PAGE
<
<
<        D E P L A C E M E N T   D A N S   ' B U F G R '  :
<
<
<        FONCTION :
<                      CE MODULE PERMET D'AVANCER
<                    OU DE RECULER DANS LE BUFFER
<                    UTILISATEUR 'BUFGR'.
<                      DEUX ENTRIES SONT DISPO-
<                    NIBLES : L'UNE POUR AVANCER
<                    ('ICXBUF'), ET L'AUTRE POUR
<                    RECULER ('DCXBUF').
<
<
<        ARGUMENT :
<                    (B)=VALEUR ABSOLUE DU DEPLACEMENT.
<
<
DCXBUF:  EQU         $               < ENTRY 'RECULER' :
         NGR         B,B             < AFIN D'AVOIR UN DEPLACEMENT ARRIERE...
ICXBUF:  EQU         $               < ENTRY 'AVANCER' :
         LA          VAR+XBUFGR      < (A)=INDEX COURANT,
         ADR         B,A             < ON SE REPOSITIONNE EN RELATIF,
         STA         VAR+XBUFGR      < ET ON MET A JOUR...
         RSR
         PAGE
<
<
<        I N I T I A L I S A T I O N   D E   ' V A L E S C '  :
<
<
<        ARGUMENTS :
<                    (B)=VALEUR POSITIVE A DONNER A 'VALESC',
<                    (W)=ADRESSE DE 'DCTESC'.
<
<
<        RESULTAT :
<                    (VALESC)=(B).
<
<
PSTVAL:  EQU         $
         STB         VALESC-DCTESK,W < AIN'T IT HARD...
         RSR
         PAGE
<
<
<        C H A N G E M E N T   D E   ' C A R A L T '   S U R   ! W  :
<
<
<        FONCTION :
<                      LORS DE LA FRAPPE DE !W, ON REMPLACE
<                    'CARALT' LORSQU'IL S'AGIT D'UN UTILISATEUR
<                    INTERACTIF, PAR LE DERNIER CARACTERE FRAPPE
<                    ENTRE "!W" ET  ; S'IL N'EXISTE PAS,
<                    'CARALT' DEMEURE INCHANGE...
<
<
CCIALT:  EQU         $
         BSR         ACHKIN          < RENVOIE : (A)=NSPIN,
         JE          CCIAL1          < OK, NSPIN=NSPOUT (UTILISATEUR
                                     < INTERACTIF COMME LE PREVOIT LA GRAMMAIRE.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      VOIR COMMENT ON A PU EN ARRIVER LA !!!
<
         JMP         CCIAL2          < ET ON SORT...
CCIAL1:  EQU         $
         PSR         X,L
         LR          A,X             < (X)=NSPIN,
         BSR         ACARAC          < (A)=CARACTERE COURANT DU 'BUFESC' ; A
                                     < NOTER QUE, VUE LA GRAMMAIRE DU 'CCI',
                                     < IL NE PEUT S'AGIR D'UN ...
         LR          A,B             < (B)=CARACTERE COURANT ; A NOTER QUE L'ON
                                     <     FAIT AINSI, CAR 'CARAC' A BESOIN DE
                                     <     LA BASE 'L' !!!
         BSR         ACADCT          < (L)=ADRESSE DE LA DCT(NSPIN)...
         STB         VAR+CARALT      < LE CARACTERE COURANT DEVIENT 'CARALT'...
         PLR         X,L
CCIAL2:  EQU         $
         RSR
         PAGE
<
<
<        C A R A C T E R E S   D E   C O M M A N D E
<                    D U   S G N  :
<
<
SPLUS::  VAL         KPLUS           < INSERTION D'UN CHEMIN,
SMOINS:: VAL         KMOINS          < SUPPRESSION D'UN CHEMIN.
         PAGE
<
<
<        I N S E R T / D E L E T E   A C N  :
<
<
<        RESULTAT :
<                    (Y)=7, POUR VALIDATION ACN DANS 'ACNON',
<                    OPDEM(DEMCCI)=2 (FONCTION INSERT/DELETE).
<
<
LOGNEW:  EQU         $
         LA          MEMV
         TBT         MEMXXX          < INSERT/DELETE ACN AUTORISES ???
         JC          LOGNW1          < OUI, ON Y VA...
         ADRI        XCCIER,X        < NON, RETOUR EN ERREUR...
         JMP         LOGNW2          < ET ON SORT...
LOGNW1:  EQU         $
         PSR         X               < SAVE INDEX COURANT DE LA GRAMMAIRE
                                     < DU CCI.
         LX          VAR+DEMCCI+T+CODEM
         LAI         EON             < EN EFFET, ON RAJOUTE EN QUEUE
                                     < DE L'ACN UN 2EME  POUR
                                     < INITIALISER A VIDE LE SOUS-
                                     < CATALOGUE DES NOMS DE CE
                                     < NUMERO DE COMPTE.
         STBY        &VAR+ABUFGR     < STORE IN BUFFER.
         IC          VAR+DEMCCI+T+CODEM  < ON FAIT COMME SI CE 2EME
                                         <  AVAIT ETE ENVOYE PAR
                                         < LE DEMANDEUR.
         PLR         X               < RESTAURE L'INDEX DE LA GRAMMAIRE.
XVACN7:: VAL         XXACN*NOCMO+W+W+W
         LYI         XVACN7          < EN EFFET, DANS LE CAS D'UN
                                     < INSERT/DELETE, ON A :
                                     < ::=<+/->
                                     <         .
         LAI         FGID            < FONCTION INSERT/DELETE.
         STA         VAR+DEMCCI+T+OPDEM
LOGNW2:  EQU         $
         RSR
<
<
<        P R E P A R A T I O N   D ' U N   L O G I N  :
<
<
<        RESULTAT :
<                    (Y)=5, POUR VALIDATION ACN DANS 'ACNON',
<                    OPDEM(DEMCCI)='A (FONCTION TEST).
<
<
LOGOLD:  EQU         $
XVACN5:: VAL         XXACN*NOCMO+W
         LYI         XVACN5          < DANS LE CAS D'UN LOGIN, ON :
                                     < ::=K4>.
         LAI         FGT             < FONCTION DE TEST.
         STA         VAR+DEMCCI+T+OPDEM
         RSR
<
<
<        C H E C K   N U M E R O   D E   C O M P T E
<                    A U   L O G I N  :
<
<
<        FONCTION : CETTE ROUTINE EST APPELEE PAR
<                    LE CCI LORS DE LA RENCONTRE DE 'LOGIN'.
<                    ELLE RECUPERE L'ACN, ET PAR
<                    L'INTERMEDIAIRE DE HDLTRI, LE VALIDE.
<
<
<        ARGUMENTS :
<                    (Y)=5, SI LOGIN NORMAL,
<                        7, SI OPERATION INSERT/DELETE ACN,
<                    OPDEM(DEMCCI)='A, SI LOGIN NORMAL,
<                                  '2, SI OPERATION INSERT/DELETE ACN,
<                    (L)=ADRESSE DCT(SERVICE),
<                    (W)=ADRESSE DCT(ESCLAVE).
<
<
ACNON:   EQU         $
         LA          VAR+DEMCCI+T+CODEM
         SB          VAR+XBUFGR      < (A)=LONGUEUR DE L'ACN SUPPOSE.
         CPR         A,Y             < VALIDATION : RAPPELONS QU'UN
                                     < ACN EST :
                                     < ::=.
                                     < (AVEC <+>/<-> DANS LE CAS
                                     < INSERT/DELETE).
         JNE         Z42             < ERREUR DE FORMAT.
<
< CAS OU LA LONGUEUR EST CORRECTE :
<
         STA         VAR+DEMCCI+T+CODEM  < MAJ CODEM POUR HDLTRI.
         LA          VAR+DEMCCI+T+AMDEM
         AD          VAR+XBUFGR      < (A)=@OCTET DE L'ACN SUPPOSE.
         STA         VAR+DEMCCI+T+AMDEM  < MAJ AMDEM EN VUE DE HDLTRI.
         STZ         VAR+DEMCCI+T+ASDEM
         LAI         NSPTRI
         SWBR        A,A
         STA         VAR+DEMCCI+XXNSP      < GENERATION DU NSPTYP DE DEMANDE
                                     < D'HDLTRI.
         LAD         VAR+DEMCCI
         XR          A,W             < (W)=@DEMCCI (VERS HDLTRI),
                                     < (A)=SAVE W (@DCT-ESCLAVE).
         BSR         ACHAND          < ENVOI DE LA DEMANDE A HDLTRI.
         WAIT        WEIO            < ATTENTE DE FIN DE TEST DANS
                                     < L'ARBRE DU SYSTEME.
         LR          A,W             < RESTAURE (W)=@DCT-ESCLAVE.
<
< TEST DES CONDITIONS DE RETOUR :
<
         LA          VAR+DEMCCI+T+ETADEM
         JANE        Z42             < ACN NON RECONNU : ERREUR.
<
< DISCRIMINATION LOGIN/OPERATION-ACN :
<
         LR          Y,A
         CPI         XVACN7          < EST-CE UN INSERT/DELETE 'ACN' ???
         JE          Z43X            < OUI, C'EST TOUT.
<
<
<        L O G I N  :
<
<
<
< OK, ACN RECONNU, L'UTILISATEUR
< PEUT RENTRER DANS LE SYSTEME :
<
         DC          VAR+DEMCCI+T+CODEM  < SUPPRESSION DE  ENN VUE
                                     < DU MOVE DE L'ACN VERS LA DCT
                                     < DE L'UTILISATEUR.
         LAI         FGW             < FONCTION D'ECRITURE.
         STA         VAR+DEMCCI+T+OPDEM
         LAD         ACNESC-DCTESC,W < (A)=@MOT DE L'ACN DANS DCT-ESCLAVE.
         SLLS        NOCMO=K         < (A)=@OCTET OU METTRE L'ACN
                                     <     DANS DCT-ESCLAVE.
         STA         VAR+DEMCCI+T+ASDEM
         LAI         NSPMEM
         SWBR        A,A
         STA         VAR+DEMCCI+XXNSP      < GENERATION D'UN NSPTYP VERS
                                     < HDLMEM, POUR DEPLACER L'ACN
                                     < RECONNU DU BUFFER VERS ACNESC.
         LAD         VAR+DEMCCI
         XR          A,W             < (W)=@DEMCCI,
                                     < (W)=@DCT-ESCLAVE.
         BSR         ACHAND          < ENVOI DE LA DEMANDE DE MOVE.
         BSR         ACHANW          < ATTENTE DE FIN DE MOVE.
         LR          A,W             < RESTAURE (W)=@DCT-ESCLAVE.
<
< SORTIE DE LA ROUTINE :
<
Z43:     EQU         $
         RSR
<
< RETOUR EN ERREUR DE LA ROUTINE :
<
Z42:     EQU         $
         ADRI        XCCIER,X        < PROGRESSION DE L'INDEX COURNAT
                                     < DE LA GRAMMAIRE DU CCI (ERREUR).
         JMP         Z43             < VERS LA SORTIE.
<
<
<        I N S E R T / D E L E T E   A C N  :
<
<
Z43X:    EQU         $
         PSR         X
         LX          VAR+XBUFGR      < (X)=INDEX COURANT DU BUFFER CCI,
         LBY         &VAR+ABUFGR     < (A)=CARACTERE COURANT "+" OU "-".
         CPI         SMOINS          < EST-CE UN 'DELETE' ???
         LAI         SPLUS           < EN TOUT CAS,
         STBY        &VAR+ABUFGR     < ON FORCE UN 'INSERT'...
         PLR         X
         JNE         Z43             < CE N'EST PAS UN 'DELETE', ON SORT...
<
< CAS DU 'DELETE' D'UN  :
<
         LAI         FGT             < (A)=FONCTION DE TEST...
         STA         VAR+DEMCCI+T+OPDEM
         LAI         XVACN5          < (A)=LONGUEUR EN OCTETS POUR UN TEST...
         STA         VAR+DEMCCI+T+CODEM
         IC          VAR+DEMCCI+T+AMDEM
                                     < ON SAUTE LE CARACTERE "-"...
         STZ         VAR+DEMCCI+T+ASDEM
         LAD         VAR+DEMCCI
         XR          A,W             < (W)=ADRESSE DE LA DEMANDE VERS 'HDLTRI',
         BSR         ACHAND          < ENVOI D'UN DEMANDE DE TEST DE ...
         WAIT        WEIO            < ATTENTE DE FIN DE TEST,
         LR          A,W             < RESTAURE W...
         LA          VAR+DEMCCI+T+ETADEM < ALORS ???
         JANE        Z43             < OK, L' N'EXISTE PLUS, LE 'DELETE'
                                     < S'EST BIEN PASSE : IL N'Y AVAIT PAS
                                     < DE CATALOGUE DERRIERE LUI (MIS A PART
                                     < LE PREMIER ).
<
< CAS OU L' EXISTE ENCORE : SON
< CATALOGUE N'ETAIT PAS VIDE, IL FAUT
< DONC RECREER SA RACINE ...
<
         LAI         FGID            < (A)=FONCTION INSERT/DELETE : NE PAS OUBLI
                                     < QU'ON A REMPLACE "-" PAR "+" DANS LE
                                     < BUFFER DU CCI ==> 'INSERT'...
         STA         VAR+DEMCCI+T+OPDEM
         LAI         XVACN7          < (A)=LONGUEUR EN OCTETS POUR UN 'INSERT'.
         STA         VAR+DEMCCI+T+CODEM
         DC          VAR+DEMCCI+T+AMDEM
                                     < POSITIONNEMENT SUR LE "+"...
         STZ         VAR+DEMCCI+T+ASDEM
         LAD         VAR+DEMCCI
         XR          A,W             < (W)=ADRESSE DE LA DEMANDE A 'HDLTRI',
         BSR         ACHAND          < ENVOI D'UNE DEMANDE DE REINSERTION
                                     < DE L' ET SURTOUT DE LA RACINE
                                     <  DE SON CATALOGUE NON VIDE...
         BSR         ACHANW          < ATTENTE AVEC 'SYSER' SUR DEFAUT...
         LR          A,W             < RESTAURE W...
         JMP         Z42             < ET ON FAIT UNE SORTIE EN ERREUR
                                     < PUISQUE FINALEMENT ON N'A PAS DELETE...
         PAGE
<
<
<        M E M O R I S A T I O N   D ' U N   L O G I N
<        I N I T I A L   S O U S   : S Y S   E T   T E S T  :
<
<
<        FONCTION :
<                      LE BIT 'IDESC2' DE LA 'DCTESC' MEMORISE
<                    SI LE LOGIN INITIAL A EU LIEU SOUS ":SYS"
<                    OU PAS. ON DISPOSE, SI CELA EST LE CAS D'UNE
<                    COMMANDE SPECIALE !L DE CHANGEMENT DE NUMERO
<                    DE COMPTE EN VOL...
<                      DE PLUS, APRES CHAQUE LOGIN
<                    SOUS ":SYS", ON RETABLIT SYSTEMA-
<                    TIQUEMENT L'UTILISATION DU TOM
<                    ED ESSAP, AU CAS OU L'ON EN SERAIT
<                    A UNE PHASE DE REINITIALISATION
<                    GENERALE DU SYSTEME, AU COURS DE
<                    LAQUELLE LE PREMIER LOGIN SOUS ":SYS"
<                    NE NECESSITE PAS LE TOM ED ESSAP,
<                    AU CAS OU JE NE SERAIS PAS LA ??!??!
<
<
<        M E M O R I S A T I O N  :
<
<
INDSYS:  EQU         $
         LA          IDDESC-DCTESC,W
         SBT         IDESC2          < MEMORISATION DE ":SYS" INITIAL...
         STA         IDDESC-DCTESC,W
         NLS
<
< RETABLISSEMENT SYSTEMATIQUE DU TOM ED ESSAP :
<
         PSR         A,W
         LRM         A,W
         WORD        N335X1
         WORD        AN335
         STA         O,W             < LORS DU TEST DU NUMERO DE COMPTE, APRES
                                     < LE LOGIN, ON SE BRANCHERA SI ":SYS" SUR
                                     < LE NOEUD 'N335' D'ENTREE DU TOM ED
                                     < ESSAP...
         PLR         A,W
         LST
         RSR
<
<
<        T E S T  :
<
<
TESSYS:  EQU         $
         LA          IDDESC-DCTESC,W
         TBT         IDESC2          < ETAIT-ON INITIALEMENT SOUS ":SYS" ???
         JC          TESSY1          < OUI, OK...
         ADRI        XCCIER,X        < NON, ERREUR...
TESSY1:  EQU         $
         RSR                         < ET C'EST TOUT...
<
<
<        P O I N T   D E   N O N   R E T O U R  :
<
<
<        FONCTION :
<                      LA COMMANDE "!L" PERMET
<                    LORSQU'ON S'EST LOGUE INITIALE-
<                    MENT SOUS ":SYS", ET QUE L'ON
<                    Y EST PLUS D'INHIBER DEFINITI-
<                    VEMENT LE RETOUR POSSIBLE A
<                    L' ":SYS", D'OU LE NOM...
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DE 'DCTESC'.
<
<
PNRET:   EQU         $
         LA          IDDESC-DCTESC,W
         TBT         IDESC2          < ALORS ETAIT-ON INITIALEMENT SOUS ":SYS" ?
         RBT         IDESC2          < A PRIORI, POINT DE NON RETOUR...
         STA         IDDESC-DCTESC,W
         JC          PNRET1          < OK, ON ETAIT INITIALEMENT SOUS ":SYS" (ON
                                     < N'Y EST PLUS D'AILLEURS, C'EST LA GRAM-
                                     < MAIRE DU 'CCI' QUI L'A DEJA VERIFIE LORS-
                                     < QU'ON ARRIVE ICI...), ON NE POURRA PLUS
                                     < Y REVENIR, NI PLUS CHANGER NON PLUS
                                     < DYNAMIQUEMENT D'...
         ADRI        XCCIER,X        < IL N'Y A PAS EU DE LOGIN INITIAL SOUS
                                     < ":SYS", OU BIEN UN POINT DE NON RETOUR
                                     < A DEJA ETE FRANCHI...
PNRET1:  EQU         $
         RSR                         < ET C'EST TOUT...
         PAGE
<
<
<        G E S T I O N   D E S   P R I O R I T E S  :
<
<
<        FONCTION :
<                      ON DISPOSE DE 2 PRIORITES :
<                    1 - LA PRIORITE NORMALE (ETAT INITIAL,
<                    ET SUITE A LA COMMANDE "!L0"),
<                    2 - LA PRIORITE INFERIEURE (SUITE A
<                    LA COMMANDE "!L1").
<                      LA PRIORITE INFERIEURE PROVOQUE
<                    UN SWAPPING OUT A PRIORI, SANS
<                    UTILISER L'"HORLOGE" DE SWAPPING,
<                    ET PEUT PROVOQUER UNE INTERUPTION
<                    DE CET UTILISATEUR, LORSQU'UN
<                    AUTRE EST EN FIN DE SERVICE...
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DE LA 'DCT-ESCLAVE'.
<
<
LPRIO:   EQU         $
<
<
<        P R I O R I T E   N O R M A L E  :
<
<
LPRIO0:  EQU         $
         LA          IDDESC-DCTESC,W
         RBT         IDESC6          < IDESC6=0 : PRIORITE NORMALE...
         JMP         LPRIOA          < VERS LA MEMORISATION...
<
<
<        P R I O R I T E   I N F E R I E U R E  :
<
<
LPRIO1:  EQU         $
         LA          IDDESC-DCTESC,W
         SBT         IDESC6          < IDESC6=1 : PRIORITE INFERIEURE...
<
< MEMORISATION DE LA PRIORITE :
<
LPRIOA:  EQU         $
         STA         IDDESC-DCTESC,W
         RSR
         PAGE
<
<
<        C O M M A N D E   D E S   C O M M A N D E S  :
<
<
<        FONCTION :
<                      CETTE COMMANDE PERMET D'ENCHAINER
<                    AUTOMATIQUEMENT UNE SERIE DE COMMANDES
<                    , ,... EN RESPECTANT LA
<                    SYNTAXE SUIVANTE, ET A CONDITION D'ETRE
<                    UN UTILISATEUR TEMPS PARTAGE ('NSPIN'=
<                    'NSPOUT') :
<
<                    !M....
<
<                    OU  EST LE PREMIER CARACTERE RENCONTRE
<                    DERRIERE "!M" ET QUI DEFINIT LE SUBSTITUT DE
<                     POUR CHACUNE DES COMMANDES  ; IL
<                    EST ALORS REMPLACE PAR ...
<
<
<        ATTENTION :
<                      LA COMMANDE "!M" EST LA SEULE
<                    POUR LAQUELLE, SAUF IMMEDIATEMENT
<                    DERRIERE LE "M", LE CARACTERE
<                    'KPOINT' (".") N'EST PAS CONSIDERE
<                    COMME LIMITEUR, AFIN EN PARTICULIER
<                    POUVOIR RENCONTRER DES "!C." DANS
<                    "!M"...
<
<
STBAV:   EQU         $
         BSR         ACARAC          < ACCES AU CARACTERE COURANT DANS 'A', ET
                                     < TEST D'UN LIMITEUR DES LE DEBUT :
         JE          STBAV4          < EFFECTIVEMENT C'EST "!M"...
         LR          A,Y             < (Y)=LIMITEUR UTILISE POUR LES COMMANDES
                                     <     INTERMEDIAIRES ().
         BSR         ACHKIN          < (A)=NSPIN DE L'UTILISATEUR :
         JE          STBAV5          < OK, ON A BIEN : 'NSPIN'='NSPOUT'...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      VOIR POURQUOI LE TEST SUR L'INTERACTIVITE
<                    EST ICI NEGATIF, ALORS QUE DANS LA GRAMMAIRE
<                    IL FUT POSITIF !!!
<
         JMP         STBAV4          < ET ON ABANDONNE...
STBAV5:  EQU         $
         PSR         B,X,L           < SAUVEGARDE DE L'INDEX COURANT DE LA
                                     < GRAMMAIRE DU 'CCI' (X) ET L'ADRESSE
                                     < DE 'DCTSER' (L).
         LR          L,B             < (B)=ADRESSE DE 'DCTSER' (POUR PERMETTRE
                                     <     L'ACCES AU 'BUFESC').
         LR          A,X             < (X)='NSPIN',
         BSR         ACADCT          < (A)=(L)=ADRESSE DE LA 'DCTVIS' DE
                                     <         L'UTILISATEUR...
         BSR         ABETA2          < (A)=BETA(SIT(VISU(NSPIN))) :
         IF          XXSIT0-K,,XEIF%,
         IF          ATTENTION : LE TEST SUIVANT (AINSI QU'AILLEURS
         IF          DANS LE SYSTEME) EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JAGE        STBAV6          < OK, LA VISU N'EST PAS EN ATTENTE...
         LXI         FIVALT          < ALLONS BON, LA VISU EST EN ATTENTE,
                                     < MAIS N'EST -CE PAS POUR LE TEST DU
                                     < "ALT-MODE" ???
         LA          &VISOTO         < (A)=ETAT SUITE A UN "ALT-MODE",
         CP          ETAT1           < L'ETAT COURANT DE LA VISU NE SERAIT-IL
                                     < PAS CELUI QUI SUIT LA RECEPTION D'UN
                                     < PREMIER "ALT-MODE" ???
         JE          STBAV8          < OUI, DONC ON ABANDONNE IMMEDIATEMENT,
                                     < EN ERREUR, BIEN QU'EN FAIT CELA SOIT
                                     < UN PEU INDIFFERENT...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT CETTE VISU PEUT
<                    ETRE EN ATTENTE, ALORS QUE SON UTILISATEUR
<                    EST DANS LE 'CCI' !!! IL SE PEUT QU'ELLE
<                    SOIT ASSIGNEE PAR QUELQU'UN D'AUTRE, QUI
<                    A LANCE UNE ENTREE-SORTIE DESSUS, ALORS
<                    QUE SON POSSESSEUR UTILISE LE 'CCI'
<                    INTERPRETATIF...
<
         JMP         STBAV8          < ET ON ABANDONNE... (MAIS EN ERREUR...)
STBAV6:  EQU         $
<
< BOUCLE DE RECUPERATION DES CARACTERES :
<
         BSR         ASMMK           < ON MASQUE LES INTERRUPTIONS AFIN D'ACCE-
                                     < DER PROPREMENT AU BUFFER D'ANTICIPATION
                                     < DE LA VISU (ON MASQUE GLOBALEMENT, ET NON
                                     < PAS AU NIVEAU DE CHAQUE CARACTERE, POUR
                                     < DES RAISONS DE PERFORMANCE...).
STBAV1:  EQU         $
<
<        ON A ICI :
<                    (B)=ADRESSE DE 'DCTSER',
<                    (Y)=LIMITEUR  DE CHAQUE COMMANDE,
<                    (L)=ADRESSE DE LA 'DCTVIS'.
<
         XR          B,L             < AFIN D'ACCEDER A 'DCTSER' :
         BSR         ACARAC          < (A)=CARACTERE COURANT DU 'BUFESC', ET
                                     <     TEST DE LIMITEUR...
         XR          B,L             < AFIN D'ACCEDER A 'DCTVIS'...
         JE          STBAV2          < C'EST LA FIN DE LA COMMANDE "!M"...
STBAVA:  EQU         $               < RETOUR LORSQUE "." A ETE DETECTE, ET
                                     < BETEMENT DECLARE COMME UN LIMITEUR
                                     <  PAR 'CARAC', CE QUI EST FAUX DANS
                                     < LA COMMANDE "!M"...
         CPR         A,Y             < NON, ALORS EST-ON SUR  ???
         JNE         STBAV3          < NON, ON GARDE LE CARACTERE (A)...
         LAI         KEON            < OUI, ON LE REMPLACE PAR 'EON'...
STBAV3:  EQU         $
KEOTP::  VAL         COSBT?BITPAR=FMASK(K?KEOT=FCINST
                                     < 'EOT' AVEC BIT DE PARITE,
KCRP::   VAL         COSBT?BITPAR=FMASK(K?KCR=FCINST
                                     < 'CR' AVEC BIT DE PARITE.
         CPI         KCRP            < EST-CE LE 'CR' AVEC BIT DE PARITE ???
         JE          STBAV9          < OUI, CELA NE CONSTITUE PAS UNE ERREUR,
                                     < ET CELA PERMET AUX UTILISATEURS, MAIS
                                     < SURTOUT AUX COMMANDES PRE-PROGRAMMEES
                                     < DE FORCER DES 'CR' ET DES 'EOT', ET SUR-
                                     < TOUT DE LES DISTINGUER (CF. 'DEBUG'...).
         CPI         KEOTP           < EST-CE 'EOT' AVEC BIT DE PARITE ???
         JE          STBAV9          < OUI, MEME REMARQUE...
         TBT         BITPAR          < NON, ALORS COMMENT EST LE BIT DE PARITE ?
         JC          STBAWC          < POSITIONNE, ERREUR !!!
         SBT         BITPAR          < AFIN D'ASSURER LA COMPATIBILITE AVEC
                                     < LES VRAIES ENTREES VISUS, ON FORCE
                                     < LE BIT DE PARITE ('BITPAR').
<
< INSERTION DU CARACTERE (A)
< DANS LE BUFFER D'ANTICIPATION :
<
STBAV9:  EQU         $               < CAS DE 'KCRP' ET 'KEOTP'...
         LR          A,X             < (X)=SAVE LE CARACTERE ENTRE...
         LA          VAR+KCWIO       < ACCES AU NOMBRE DE CARACTERES EN ATTENTE,
         CPI         XXVNCM-Z-Z      < Y-A-T'IL DEBORDEMENT ???
                                     < NOTA : ON FAIT '-Z-Z' AFIN QU'UN
                                     < 'ALT-MODE' TAPPE ENSUITE NE PROVOQUE
                                     < PAS UNE 'SYSER' DANS 'ITVIS' POUR
                                     < DEBORDEMENT DU BUFFER...
         JGE         STBAWC          < OUI : CE CARACTERE EST IGNORE !!!
         LA          VAR+ICWIN       < NON, (A)=INDEX D'INSERTION...
         ADRI        I,A             < PROGRESSION DE L'INDEX,
         CPI         XXVNCW          < DEBORDE-T'IL ???
         JL          STBAW7          < NON...
         NTRN
         LAI         XXVIN+I/XXVNCW(K=FCREST < OUI, ON LE REINITIALISE...
         TRN
STBAW7:  EQU         $
         XR          A,X             < (A)=CARACTERE LU,
         STBY        &VAR+ALVCW      < QUE L'ON MET DANS LE BUFFER,
         IC          VAR+KCWIO       < ET UN CARACTERE DE PLUS...
         STX         VAR+ICWIN       < PUIS MISE A JOUR DE L'INDEX.
         BSR         ARVHDL          < ON REVEILLE (ENFIN, ON AGIT SUR 'SIT')
                                     < LE 'HDLVIS(IN)' POUR DES RAISONS DE
                                     < COMPATIBILITE AVEC 'HDLMUL'...
         JMP         STBAV1          < AU CARACTERE SUIVANT...
<
< FIN NORMALE :
<
STBAV2:  EQU         $               < CAS D'UN LIMITEUR RENCONTRE :
         CPI         KPOINT          < LE LIMITEUR RENCONTRE NE SERAIT-IL PAS
                                     < PAR MALHEUR LE CARACTERE 'KPOINT' ???
         JE          STBAVA          < OUI, "!M" EST LA SEULE COMMANDE DU 'CCI'
                                     < POUR LAQUELLE 'KPOINT' N'EST PAS UN
                                     < LIMITEUR AU MEME TITRE QUE  OU
                                     < ...
         BSR         ASMDK           < ON DEMASQUE LES INTERRUPTIONS...
         PLR         B,X,L           < RESTAURE :
                                     < (X)=INDEX DE LA GRAMMAIRE DU 'CCI',
                                     < (L)=ADRESSE DE 'DCTSER'...
STBAV4:  EQU         $
         RSR
<
< SORTIE EN ERREUR :
<
STBAWC:  EQU         $
         BSR         ASMDK           < DEMASQUAGE DES INTERRUPTIONS...
STBAV8:  EQU         $
         PLR         B,X,L           < RESTAURE L'INDEX DE LA GRAMMAIRE DU
                                     < 'CCI', ET L'ADRESSE DE 'DCTSER'...
         ADRI        XCCIER,X        < POUR UN RETOUR EN ERREUR AU 'CCI'...
         JMP         STBAV4          < VERS LA SORTIE...
         PAGE
<
<
<        C O M M A N D E   D E   C O M M A N D E S
<        P R E P R O G R A M M E E S  :
<
<
<        FONCTION :
<                      LA COMMANDE "!N PERMET
<                    DE REFERENCER DES COMMANDES "!M..."
<                    PRE-PROGRAMMEES DANS LA GRAMMAIRE
<                    DU 'CCI'.
<
<
KLIMS::  VAL         KSLASH          < CARACTERE LIMITEUR UTILISE COMME SUBSTI-
                                     < TUT DE  ; VOIR  DANS "!M"...
<
<
<        V A L I D A T I O N   E T   I N I T I A L I S A T I O N  :
<
<
<        ARGUMENT :
<                    (L)=ADRESSE DE 'DCTSER',
<                    (W)=ADRESSE DE LA 'DCTESC',
<                    VALESC=NUMERO DE LA COMMANDE PREPROGRAMMEE.
<
<
P1COM:   EQU         $
<
< VALIDATION DU NUMERO DE COMMANDE :
<
         LA          VALESC-DCTESK,W < (A)=NUMERO DE LA COMMANDE DEMANDEE :
         WORD        CPCOM0          < VALIDATION INFERIEURE ???
         JL          P1COM1          < ERREUR, N'EXISTE PAS...
         WORD        CPCOMN          < VALIDATION SUPERIEURE ???
         JGE         P1COM1          < ERREUR, N'EXISTE PAS...
<
< POINTONS SUR LA COMMANDE :
<
         PSR         W               < SAUVEGARDE DE L'ADRESSE DE 'DCTESC',
         LRM         W
         WORD        LCOMP           < (W)=ADRESSE DE LA LISTE DES RELAIS
                                     <     INDEXES VERS LES DIFFERENTES COMMAN-
                                     <     COMMANDES,
         ADR         A,W             < (W)=ADRESSE DU RELAI VERS LA COMMANDE
                                     <     DESIREE,
         LA          O,W             < (A)=RELAI INDEXE VERS LA COMMANDE...
         IF          BITX-BITSIG,,XEIF%,
         IF          ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JAL         P1COM3          < OK, LE RELAI EST BON...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      VOIR SI LE RELAI EST VRAIMENT
<                    MAUVAIS, OU SI C'EST SON ADRESSE !!!
<
P1COM3:  EQU         $
         PLR         W               < RESTAURE :
                                     < (W)=ADRESSE DE 'DCTESC'.
         XM          VAR+ABUFGR      < MISE DANS LE RELAI COURANT DU BUFFER
                                     < DU RELAI VERS LA COMMANDE COURANTE, ET
                                     < (A)=SAVE LE RELAI COURANT VERS LE
                                     <     BUFFER 'BUFESC',
         STA         VALESC-DCTESK,W < QUE L'ON MET EN TEMPORAIRE (JUSQU'A
                                     < 'P3COM') DANS 'VALESC'...
         STZ         VAR+XBUFGR      < ET ON POINTE SUR LE DEBUT DE LA
                                     < COMMANDE DEMANDEE, SUR LA DEFINITION
                                     < DE  ; A NOTER QUE "!M" EST IMPLI-
                                     < CITE...
         LAI         LCCINT
         STA         VAR+MBUFGR      < AFIN DE VALIDER 'XBUFGR' DANS 'CARAC'...
<
< SORTIE :
<
P1COM2:  EQU         $
         RSR
<
< SORTIE EN ERREUR :
<
P1COM1:  EQU         $
         ADRI        XCCIER,X        < RETOUR EN ERREUR AU 'CCI'...
         JMP         P1COM2          < VERS LA SORTIE...
<
<
<        E R R E U R   S Y S T E M E  :
<
<
P2COM:   EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE :
<                      REPERER LA COMMANDE "!M..." PRE-
<                    PROGRAMMEE COURANTE, ET VOIR COMMENT
<                    ELLE A PU ETRE REFUSEE !!!
<
         RSR
<
<
<        F I N   D E   " ! N "  :
<
<
<        FONCTION :
<                      CE MODULE RETABLIT LES CONDITIONS
<                    INITIALES D'AVANT "!N" ; MAIS EST-CE
<                    VRAIMENT UTILE : ON NE RETABLIT PAR
<                    'XBUFGR', NI 'MBUFGR', ET CELA A
<                    L'AIR DE BIEN MARCHER !!!
<
<
P3COM:   EQU         $
         LA          VALESC-DCTESK,W < (A)=RELAI INDEXE VERS 'BUFESC',
         STA         VAR+ABUFGR      < CE QUI PERMET DE REGENERER LE RELAI
                                     < COURANT DU BUFFER POUR LE 'CCI'...
         RSR
<
<
<        C O M M A N D E S   P R E - P R O G R A M M E E S
<                            D E
<        C O M M A N D E S   P R E - P R O G R A M M E E S  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME EST UTILISE
<                    POUR COMMUNIQUER UN NUMERO DE
<                    COMMANDE "!N" IMPLICITE, PERMETTANT
<                    DE COMPACTER EN QUELQUE SORTE PAR
<                    EXEMPLE LES ASSIGNATIONS LES PLUS
<                    FREQUENTES...
<
<
<        ARGUMENTS :
<                    (B)=NUMERO DE "!N" IMPLICITE,
<                    (W)=ADRESSE DE 'DCTESC'.
<
<
<        RESULTATS :
<                    VALESC(DCTESC)=NUMERO DE "!N" IMPLICITE
<                                   COMPATIBLE AVEC 'P1COM'.
<
<
P4COM:   EQU         PSTVAL
         PAGE
<
<
<        D E S A S S I G N A T I O N   G L O B A L E
<        D E   L A   T A S S G N  :
<
<
<        FONCTION :
<                      CES 2 ROUTINES APPELEES PAR L'INTERMEDIAIRE
<                    DE LA COMMANDE !CLOSE, PERMETTENT DE FAIRE
<                    SUR CHAQUE ENTREE DE TASSGN !ASSIGN NVP=S ;
<                    ON PARCOURT TASSGN D'UNE MANIERE INCREMENTALE
<                    DE NVP=PHOUT+1 A NVP=2*LTASGN-1.
<
<
<        ARGUMENT :
<                    YSER(DCTESC)=LE NVP COURANT SUR LEQUEL
<                                 ON TENTE UN !ASSIGN...=S.
<
<
<        I N I T I A L I S A T I O N   N V P  :
<
<
<        RESULTAT :
<                    YSER(DCTESC)=PHOUT.
<
<
INVP2:   EQU         $
XMAXIO:: VAL         PHOUT           < MAXIMUM A PRIORI...
         IF          PHIN-PHOUT,XEIF%,XEIF%,
XMAXIO:  VAL         PHIN            < ET BIEN NON, C'EST 'PHIN' LE MAX...
XEIF%:   VAL         ENDIF
         LYI         XMAXIO          < Y <-- MAX(PHIN,PHOUT).
         STY         YSER-DCTESC,W   < INITIALISATION YSER(DCTESC)=2.
         RSR                         < C'EST TOUT...
<
<
<        P R O G R E S S I O N   D U   N V P   C O U R A N T  :
<
<
<        RESULTAT :
<                    YSER(DCTESC)<--(YSER(DCTESC))+1,
<                    X<--(X)+1, SI YSER>=2*LTASSGN.
<                    (CF. LA ROUTINE 'NVPAS')
<
<
NVPP1:   EQU         $
         IC          YSER-DCTESC,W   < +1 SUR LE NVP COURANT.
         LA          YSER-DCTESC,W   < (A)=NVP COURANT POUR LES
                                     < VALIDATIONS D'USAGE.
         JMP         Z810            < VERS 'NVPAS'.
         PAGE
<
<
<        A S S I G N A T I O N  :  N V P --> N S P  :
<
<
<        FONCTION :
<                      CES ROUTINES SONT PAPPELLEES LORS DE
<                    LA RENCONTRE D'UNE COMMANDE D'ASSIGNATION
<                    D'UN NVP A UN NSP ; LA SYNTAXYE EN EST :
<
<                                    !ASSIGN =.
<
<
<        ARGUMENTS :
<                    (L)=ADRESSE DCT(SERVICE),
<                    (W)=ADRESSE DCT(ESCLAVE).
<
<
<        V A L I D A T I O N   D ' U N   N V P  :
<
<
<        FONCTIONS :
<                    'NVPAS' : DETERMINE SI LE 'NVP' EST ASSIGNE,
<                    'NVPASD' : IDEM, MAIS SANS RECUPERER LE 'NVP' DANS
<                               LE BUFFER D'ANALYSE SYNTAXIQUE (UTILISE
<                               PAR LA COMMANDE DE DELETE FICHIER) AUQUEL
<                               CAS 'Y' EST UN ARGUMENT DONNANT LE 'NVP'...
<
<
<        RESULTAT :
<                    (Y)=NVP SI NVP NON ASSIGNE,
<                      NVP.OR.'FF80, SI NVP DEJA ASSIGNE (Y<0).
<
<
NVPAS:   EQU         $
         PSR         X               < SAVE INDEX COURANT DE LA GRAMMAIRE
         LX          VAR+XBUFGR      < (X)=RANG DU 1ER CARACTERE DU
                                     <     NVP SUPPOSE.
         LAD         VAR+ABUFGR      < (A)=@RELAI VERS LE BUFFER.
         BSR         AHEXIN          < CONVERSION NUMERIQUE DU NVP
                                     < DANS LE REGISTRE A ; CELUI-CI EST
                                     < DANS LE BUFFER D'ENTREE CODE
                                     < EN HEXA-DECIMAL.
         STX         VAR+XBUFGR      < SAVE NOUVEL INDEX COURANT DU
                                     < MESSAGE.
         PLR         X               < RESTAURE (X)=INDEX GRAMMAIRE.
<
< VALIDATION DU NVP :
<
         CPI         XMAXIO          < IL EST INTERDIT D'ASSIGNER
                                     < PHIN ET PHOUT.
         JLE         Z72             < ERREUR.
Z810:    EQU         $               < ENTRY POUR 'NVPP1'.
         CPI         NOCMO*LTASGN
         JGE         Z72             < ERREUR.
<
< OK, NVP RECONNU :
<
         LR          A,Y             < TRANSMISSION DU NVP PAR Y A
                                     < ASSIGN EVENTUELLEMENT.
NVPASD:  EQU         $
         XR          X,Y             < (X)=NVP, (Y)=INDEX GRAMMAIRE CCI.
         LBY         &TASSGN-DCTESC,W
         JAE         Z206            < (A)=K : LE NVP N'EST PAS ASSIGNE.
XWOR%1:  VAL         MSKNSP=K
XWOR%1:  VAL         -XWOR%1         < POUR UN DECALAGE A DROITE...
XSKNSP:: VAL         MSKNSP>XWOR%1)MFFFF
         LAI         XSKNSP          < (A)='FF80 : LE NVP EST ASSIGNE.
Z206:    EQU         $
         IF          NSPVID-K,,XEIF%,
         IF          ATTENTION: CE QUI SUIT EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         ORR         A,X             < X<0 SI NVP DEJA ASSIGNE.
         XR          X,Y             < RESTAURE :
                                     < (X)=INDEX GRAMMAIRE CCI,
                                     < (Y)=NVP SI PAS ASSIGNE,
                                     <     NVP.OR.'FF80 SI DEJA ASSIGNE.
Z73:     EQU         $
         RSR
<
< ERREUR : NVP INVALIDE :
<
Z72:     EQU         $
         ADRI        XCCIER,X        < RETOUR EN ERREUR AU CCI.
         JMP         Z73
<
<
<        A S S I G N   D U M M Y  :
<
<
<        FONCTION :
<                      CE MODULE IDENTIQUE A 'ASSIGN',
<                    PERMET D'ASSIGNER UN NVP AU NSP
<                    DUMMY (NSPDUM), QUI PERMET DE
<                    FAIRE DES SVC DONT LES DEMANDES SONT
<                    IGNOREES, SANS POUR CELA PROVOQUER
<                    UN RETOUR EN ERREUR.
<
<
<        SYNTAXE :
<                    !ASSIGN =
<
<
<        ARGUMENTS :
<                      CF. 'ASSIGN' SAUF POUR LE REGISTRE
<                    B DONT LE CONTENU EST POSITIONNE
<                    ICI-MEME PUISQUE L'INTERPRETEUR
<                    DE LA GRAMMIARE DU CCI RAZE
<                    SYSTEMATIQUEMENT LE BIT0 DE CHQUE
<                    NOEUD !!!
<
<
DUMMY:   EQU         $
         LBI         NSPDUM          < (B)=NSP DUMMY.
<
<
<        A S S I G N   D A N S   T A S S G N  :
<
<
<        ARGUMENTS :
<                    (B)=NSP DEMANDE (OCTET0 DU NOEUD COURANT DE
<                      LA GRAMMAIRE DU CCI),
<                    (Y)=NVP DEMANDE SI PAS ASSIGNE,
<                      NVP.OR.'FF80 SI DEJA ASSIGNE,
<                    (TRANSMIS PAS NVPAS),
<                    (W)=ADRESSE DCT-ESCLAVE.
<
<
ASSIGN:  EQU         $
         PSR         X               < SAVE INDEX COURANT DE LA
                                     < GRAMMAIRE DU CCI.
         LR          B,A             < (A)=NSP DEMANDE.
         CPI         NSPVID
         JE          Z207            < C'EST UNE DESASSIGNATION, PAR
                                     < CONSEQUENT LE SIGNE DE Y EST
                                     < INDIFFERENT (NVP DEJA ASSIGNE
                                     < OU PAS )...
<
< CAS D'UNE ASSIGNATION :
<
         CPZR        Y
         JL          Z208            < ERREUR : LE NVP EST DEJA ASSIGNE
                                     < ALORS QU'UNE ASSIGNATION EST
                                     < DEMANDEE SUR LUI.
         CPI         NSPDUM          < EST-CE UNE ASSIGNATION DUMMY ???
         JE          Z207            < OUI, IL N'Y A DONC PAS DE
                                     < LOCATION A FAIRE ; ON VA
                                     < DIRECTEMENT VERS L'ASSIGNATION
                                     < DANS TASSGN.
<
< TEST ET LOCATION DU NSP :
<
         LR          A,X             < (X)=NSP DEMANDE.
         LBI         XXNLOC          < MODE DE LOCATION SANS ATTENTE
                                     < DANS LE CAS OU LE NSP EST
                                     < DEJA LOUE.
         BSR         ALODCT          < TEST PUIS LOCATION EVENTUELLE.
         CPZR        B               < TEST DE LA LOCATION.
         JNE         Z208            < ERREUR : LE NSP EST DEJA LOUE :
                                     < A NOTER QUE CE PEUT ETRE POUR
                                     < CET ESCLAVE ; EN EFFET, ON
                                     < NE PEUT ASSIGNER PLUSIEURS NVP
                                     < SUR LE MEME NSP.
         CPZR        Y               < RE-TEST DE Y (NVP).
Z212:    EQU         $
         JG          SYSR55          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      PEUT-ETRE UN 'JMP Z208'...
<
SYSR55:  EQU         $
<
<        R E A L I S A T I O N   D E   L ' A S S I G N  :
<
Z207:    EQU         $
         LXI         XSKNSP)MFFFF    < MASQUE DE RECUPERATION DU
                                     < NVP QUELQUE SOIT SON SIGNE.
         ANDR        Y,X             < (X)=NVP DEMANDE.
Z214:    EQU         $
<
<        ON A ICI :
<                    (X)=NVP DEMANDE.
<                    (A)=NSP DEMANDE.
<                      (OU PHIN/PHOUT POUR !ASSIGN I/O).
<
         STBY        &TASSGN-DCTESC,W  < ASSIGNATION DANS TASSGN.
         PLR         X               < RESTAURE INDEX COURANT DE
                                     < LA GRAMMAIRE DU CCI.
Z209:    EQU         $
         RSR
<
< ERREUR : NVP DEJA ASSIGNE LORS D'UNE ASSIGNATION :
<
Z208:    EQU         $
         PLR         X               < RESTAURE INDEX GRAMMAIRE CCI.
         ADRI        XCCIER,X        < RETOUR EN ERREUR AU CCI.
         JMP         Z209
<
<
<        A S S I G N   S U R   I N / O U T  :
<
<
<        I M P O R T A N T  :
<                      DANS LE CAS DES !ASSIGN I/O, IL
<                    N'Y A PAS DE LOCATION DES DCT, CE
<                    QUI PERMET PLUSIEURS ASSIGNATIONS
<                    I/O SUMULTANEES, ET DE PLUS CELA
<                    PERMET UN FONCTIONNEMENT CORRECT
<                    DES JOBS BATCH FAISANT DES ASSIGN =I
<                    (DONC SUR CR1), ALORS QUE CR1 EST
<                    ASSIGNE A LA CONSOLE QUI A EMIS
<                    LA COMMANDE !X...
<
<
<        ARGUMENTS :
<                    (W)=ADRESSE DCT(ESCLAVE).
<                    (B)=NVP (PHIN/PHOUT),
<                    (Y)=NVP DEMANDE.
<
<
ASSIO:   EQU         $
         PSR         X               < SAVE INDEX COURANT DE LA
                                     < GRAMMAIRE DU CCI.
         LR          B,X             < (X)=NVP (PHIN/PHOUT).
Z208X:   EQU         $
         LBY         &TASSGN-DCTESC,W
         JANE        SYSR56          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      PEUT-ETRE CORRIGER 'TASSGN'
<                    DE LA 'DCTESC', PUIS FAIRE
<                    UN 'JMP Z208X'...
<
SYSR56:  EQU         $
         CPZR        Y               < TEST PRELIMINAIRE D'ASSIGNATION ???
         JL          Z208            < ERREUR : LE NVP EST DEJA ASSIGNE.
         LR          B,A             < OK : (A)=PHIN/PHOUT.
         JMP         Z207            < VERS LA REALISATION DE L'ASSIGN.
         PAGE
<
<
<        A S S I G N A T I O N   D U   S Y S T E M E
<        D E   G E S T I O N   D E S   N O M S  :
<
<
<        FONCTION :
<                      CETTE ROUTINE APPELEE PAR !SGN,
<                    FAIT LES ASSIGNATIONS SUIVANTES :
<                                    3-->NSPDLN,
<                                    4-->NSPSTN,
<                                    5-->NSPLON,
<                                    6-->NSPLNS,
<                                    7-->NSPLNU,
<                                    8-->NSPNXP,
<                                    9-->NSPNXS.
<
<
         IF          NSPDLN+I-NSPSTN,,XEIF%,
         IF          ATTENTION...
XEIF%:   VAL         ENDIF
         IF          NSPSTN+I-NSPLON,,XEIF%,
         IF          ATTENTION...
XEIF%:   VAL         ENDIF
         IF          NSPLON+I-NSPLNS,,XEIF%,
         IF          ATTENTION...
XEIF%:   VAL         ENDIF
         IF          NSPLNS+I-NSPLNU,,XEIF%,
         IF          ATTENTION...
XEIF%:   VAL         ENDIF
         IF          NSPLNU+I-NSPNXP,,XEIF%,
         IF          ATTENTION...
XEIF%:   VAL         ENDIF
         IF          NSPNXP+I-NSPNXS,,XEIF%,
         IF          ATTENTION...
XEIF%:   VAL         ENDIF
SGNAS:   EQU         $
         PSR         X               < SAVE INDEX COURANT DE LA GRAMMAIRE
                                     < DU CCI.
<
< VERIFICATION QU'AUCUN NVP N'EST ASSIGNE :
<
         LXI         NSPSGN-NSPSG0+Z < (X)=NBRE DE VERIF A FAIRE.
         LYI         XMAXIO+E        < (Y)=1ER 'NVP' A VERIFIER.
         IF          XMAXIO+E-NVPDLN,,XEIF%,
         IF          ATTENTION : LES 'NVP' DU 'SGN' MERDENT !!!
XEIF%:   VAL         ENDIF
Z220:    EQU         $
         XR          X,Y
         LBY         &TASSGN-DCTESC,W
         CPI         NSPVID
         JNE         Z208            < ERREUR : LE NVP (X) EST ENCORE
                                     < ASSIGNE, ON S'ARRETE SUR LUI,
                                     < ET LE ?SGN EST REFUSE.
         XR          X,Y
         ADRI        I,Y             < NVP SUIVANT.
         JDX         Z220
<
< OK, LE ?SGN EST ACCEPTE :
<
         LAI         NSPSG0          < (A)=1ER NSP DE L'ASSIGNATION.
Z301:    EQU         $               < ENTRY DESASSIGN : (A)=NSPVID.
         LXI         NSPSGN-NSPSG0+Z < (X)=NBRE D'ASSIGNATIONS A FAIRE.
         LYI         XMAXIO+E        < (Y)=1ER 'NVP' DE L'ASSIGNATION.
         IF          XMAXIO+E-NVPDLN,,XEIF%,
         IF          ATTENTION : LES 'NVP' DU 'SGN' MERDENT !!!
XEIF%:   VAL         ENDIF
<
< BOUCLE D'ASSIGNATION/DESASSIGNATION :
<
Z74:     EQU         $
         XR          X,Y             < (X)=NVP COURANT ; (A)=NSP COURANT.
         STBY        &TASSGN-DCTESC,W
         JAE         Z302            < C'EST UN DESASSIGN DU SGN,
                                     < A RESTE A LA VALEUR 0 (NSPVID).
         ADRI        I,A             < PASSAGE AU NSP SUIVANT LORS
                                     < D'UN ASSIGN DU SGN.
Z302:    EQU         $
         XR          X,Y             < (X)=NBRE D'ASSIGNATIONS+1
                                     <     RESTANT A FAIRE.
         ADRI        I,Y             < NVP SUIVANT.
         JDX         Z74             < ASSIGNATION SUIVANTE.
         PLR         X               < RESTAURE (X)=INDEX COURANT
                                     < DE LA GRAMMAIRE CCI.
         RSR
AZ301:   JMP         Z301            < RELAI...
         PAGE
<
<
<        O P E N   N E W   F I L E  :
<
<
<        FONCTION :
<                      CETTE ROUTINE EST APPELEE SUITE
<                    A UN !ASSIGN =N,.
<                    ELLE A A SA CHARGE D'OUVRIR UN FICHIER
<                    CLOSE ET INEXISTANT, DE RANGER LE
<                     DANS L'ARGBRE DU SYSTEME.
<                    ET DE MEMORISER LA CORRESPONDANCE
<                     ET .
<
<
<        ARGUMENT :
<                    (Y)=NVP DEMANDE SI PAS ASSIGNE,
<                        NVP.OR.'FF80 SI DEJA ASSIGNE.
<
<
XBUFS1:: VAL         LBUFES-Z        < DERNIER OCTET DU BUFFER ESCLAVE,
XBUFS2:: VAL         XBUFS1-I        < AVANT-DERNIER OCTET...
CCINF:   EQU         $
<
< TEST PRELIMINAIRE D'ASSIGNATION DU NVP :
<
         IF          XSKNSP,XEIF%,,
         IF          ATTENTION : 'XSKNSP' DOIT ETRE NEGATIF !!!
XEIF%:   VAL         ENDIF
         CPZR        Y
         JL          Z72             < ERREUR : NVP DEJA ASSIGNE,
                                     < ASSIGN REFUSE.
<
< VERIFICATION SIMPLISTE D'UNE POSSIBLE
< OUVERTURE DU FICHIER : ON VERIFIE QU'AU
< MOINS 'XXFICN' FICHIERS INEXISTANTS,
< AINSI QUE 'XXFICD' 'DCT-FICHIERS' SONT
< ALLOUABLES ; CETTE VERIFICATION EST
< FAITE HORS-PHASE CRITIQUE, ET EST
< DONC INTERRUPTIBLE, MAIS LES SEUILS
< DE TEST SONT CHOISIS DE TELLE FACON,
< QUE LA VALEUR DU RESULTAT DES TESTS
< SOIT VALABLE QUELQUE SOIT LE NOMBRE
< DE 'HDLSER' LES FAISANT SIMULTANEMENT...
< (SAUF EXCEPTION !!!!??????!)
<
         LAI         MEFX            < (A)='ETAT CLOSE ET INEXISTANT'.
XXBKFE:: VAL         L               < NUMERO DU BIT COMMUNIQUANT A 'LOOKF'
                                     < QU'UN COMPTAGE EST DEMANDE...
XXFICN:: VAL         20              < SEUIL ARBITRAIRE DU NOMBRE DE FICHIERS
                                     < INEXISTANTS EN DECA DUQUEL L'OUVERTURE
                                     < NEW EST REFUSEE...
         IF          XXFICN-Z,,,XEIF%
         IF          ATTENTION : 'XXFICN' EST MAUVAIS, SACHANT
         IF          QUE LE FICHIER DE NOM INTERNE 0 N'EST PLUS
         IF          ACCESSIBLE !!!
XEIF%:   VAL         ENDIF
         IF          XXFICN-NDCTF,,,XEIF%
         IF          ATTENTION : LA VALIDATION QUI EST FAITE PEUT
         IF          MALGRE TOUT PERMETTRE A 'OPNFIL' DE SE BLOQUER
         IF          EN ATTENTE DE FICHIER INEXISTANT (VOIR LE
         IF          NIVEAU DE SERVICE SUR LEQUEL ON SE TROUVE, UN
         IF          NIVEAU DE SERVICE PLUS PRIORITAIRE POUVANT
         IF          L'INTERROMPRE !!!
XEIF%:   VAL         ENDIF
XXFICD:: VAL         4               < SEUIL ARBITRAIRE DU NOMBRE DE 'DCT
                                     < FICHIER' LIBRE EN DECA DUQUEL L'OPEN
                                     < EST REFUSE; NOTONS QUE CETTE PROTECTION
                                     < N'EST PAS EFFICACE A 100 POUR-CENT, EN
                                     < EFFET, ENTRE CE TEST, ET L'ATTRIBUTION
                                     < D'UNE 'DCTF', QUELQU'UN DE PLUS PRIO-
                                     < RITAIRE PEUT S'EN ETRE EMPARE...
         IF          NDCTF-NESCLA,,,XEIF%
         IF          ATTENTION : IL N'Y A PAS ASSEZ DE 'DCTF' !!!
XEIF%:   VAL         ENDIF
         SBT         XXBKFE
         BSR         ALOOKF          < DEMANDE A 'LOOKF' DANS 'A' DU NOMBRE
                                     < DE FICHIERS REPONDANT A LA QUESTION...
         CPI         XXFICN          < CELA SUFFIT-IL ???
         JL          Z72             < NON, L'ASSIGN EST REFUSE...
         LA          &ASDCTF         < (A)=BETA(SDCTF),
         BSR         ABETA           < QUE L'ON ETEND SUR 16 BITS...
         CPI         XXFICD          < Y-A-T'IL ASSEZ DE 'DCTF' ???
         JL          Z72             < NON, L'ASSIGN EST REFUSE...
<
< OK, TENTATIVE D'OUVERTURE :
<
         LAI         MEFX            < (A)='ETAT CLOSE ET INEXISTANT'...
         SBT         BITRFE          < MODE DE RECHERCHE D'UN FICHIER
                                     < D'ETAT DONNE.
         LBI         XEFF            < FICHIER QUE L'ON METTRA A L'
                                     < ETAT NON PARTAGEABLE & DE
                                     < TRAVAIL.
         PSR         X               < SAVE INDEX COURANT DE LA
                                     < GRAMMAIRE DU CCI.
         BSR         AOPFIL
<
<        ON A ICI :
<                    (X)=NSP ALLOUE AU FICHIER, OU
<                       =0 SI L'OUVERTURE EST IMPOSSIBLE.
<
         CPZR        X               < TEST DE L'OUVERTURE.
         JE          Z208            < OPEN IMPOSSIBLE : RETOUR
                                     < EN ERREUR AU CCI.
         PSR         L               < SAVE @DCT-SERVICE.
         BSR         ACADCT          < (L)=@DCT ALLOUEE AU FICHIER.
         LA          VAR+FILNOM      < (A)=NOM DIRECT DU FICHIER.
         PLR         L               < RESTAURE (L)=@DCT-SERVICE.
<
< MISE DU NOM-DIRECT DU FICHIER
< EN QUEUE DU BUFFER :
<
         STA         BUFESC-DCTESC+XBUFS1,W
         LBI         NSPSTN+X123X    < AFIN D'INSERER LE NOM DANS
                                     < L'ARBRE DU SYSTEME.
<
< MISE DE 'NSPSTN' DEVANT LE NOM-DIRECT
< DU FICHIER COMME MOT DE VALIDATION
< DU NOM-DIRECT (CF. OPEN OLD) :
<
         STB         BUFESC-DCTESC+XBUFS2,W
         ADRI        -X123X,B
         BSR         ACCIF           < INSERTION DU NOM DANS L'ARBRE
                                     < DU SYSTEME, AVEC LA CORRES-
                                     < PONDANCE : ---
                                     < .
<
< TEST DES CONDITIONS DE RETOUR DE HDLSTN :
<
         JANE        Z210            < ERREUR : LE NOM EXISTE SUREMENT
                                     < DEJA : ON VA REFERMER LE FICHIER
                                     < QUI A ETE OUVERT.
<
< OK, L'OPEN NEW FILE EST CORRECT :
<
Z211:    EQU         $
         LR          X,A             < (A)=NSP DE SGF ALLOUEE AU FICHIER.
XWOR%1:  VAL         XNVPF=K         < ACCES AU MASQUE 'NVP DE FICHIER'.
         SBT         NBITMO-B-XWOR%1 < MEMORISATION QUE C'EST UN
                                     < NSP DE GESTION DE FICHIERS.
<
< REALISATION DE L'ASSIGNATION :
<
         CPZR        Y               < TEST DU NVP DEMANDE.
         JMP         Z212            < VERS UNE RE-VALIDATION DU NVP,
                                     < ET L'ASSIGNATION.
<
< ERREUR A L'OPEN : REFERMETURE DU FICHIER :
<
Z210:    EQU         $
         LR          X,A             < (A)=NSPDCTF.
         SBT         BITCFN          < FERMETURE PAR NSPF.
         LBI         MCFR            < FERMETURE EN MODE RELEASE.
         BSR         ACLFIL          < FERMETURE DU FICHIER OUVERT
                                     < PAR ERREUR.
         CPZR        Y               < TEST DES CONDITIONS DE RETOUR.
         JE          Z208            < VERS UN RETOUR EN ERREUR AU CCI.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      EXAMINER LES CONDITIONS DE
<                    RETOUR ; EN EFFET PUISQU'ON
<                    A REUSSI A OUVRIR CE FICHIER,
<                    ON DOIT POUVOIR LE FERMER !!!
<
         JMP         Z208
         PAGE
<
<
<        O P E N   O L D   F I L E  :
<
<
<        FONCTION :
<                    CETTE ROUTINE EST APPELEE SUITE
<                    A UN : !ASSIGN =O,,
<                    OU A : !ASSIGN =D-,
<                    ELLE RECUPERE PAR L'INTERMEDIAIRE DE
<                    L'ARBRE DU SYSTEME LE 
<                    ASSOCIE A .
<
<
<        ARGUMENT :
<                    (Y)=NVP DEMANDE SI PAS ASSIGNE,
<                        NVP.OR.'FF80 SI DEJA ASSIGNE.
<
<
CCIOF:   EQU         $
<
< VALIDATION PRELIMINAIRE DU NVP :
<
         CPZR        Y
         JL          Z72             < ERREUR : NVP DEJA ASSIGNE,
                                     < ASSIGN REFUSE.
         LA          &ASDCTF         < (A)=BETA(SDCTF),
         BSR         ABETA           < QUE L'ON ETEND SUR 16 BITS...
         CPI         XXFICD          < Y-A-T'IL ASSEZ DE 'DCTF' ???
         JL          Z72             < NON, L'ASSIGN EST REFUSE...
<
< OK, RECUPERATION DU  :
<
         STZ         BUFESC-DCTESC+XBUFS2,W
         STZ         BUFESC-DCTESC+XBUFS1,W
                                     < A T T E N T I O N : CE RAZ EST
                                     < DESTINE A EVITER DE REPRENDRE
                                     < UN  UTILISE
                                     < PRECEDEMMENT AU CAS OU LE
                                     <  DONNE EN ARGUMENT
                                     < NE SERAIT EN FAIT QU'UN 
                                     < POUR LEQUE LA VALEUR SERAIT
                                     < INFERIEURE A 'LBUFES'.
         LBI         NSPLON
         BSR         ACCIF           < APPEL DE HDLLON, QUI RENVERRA
                                     < EN QUEUE DE BUFESC LE  ASSOCIE A .
         JANE        Z72             < ERREUR : LE NOM N'EXISTE PAS,
                                     < ASSIGN REFUSE.
<
< OK, LE  EXISTE :
<
LNOMS::  VAL         40              < LONGUEUR MAXIMALE DES NOMS 'SGN'.
         LA          DEMESC-DCTESC+T+CODEM,W
         SB          DEMESC-DCTESC+XBOX,W
                                     < NOTA : SI IL S'AGIT BIEN D'UN FICHIER
                                     < 'A' DOIT ALORS CONTENIR LA LONGUEUR
                                     < DU NOM EXTERNE DU FICHIER...
         JALE        Z72             < CODEM<=BOX : LA VALEUR EST TROP GRANDE
                                     < POUR ETRE CELLE D'UN FICHIER...
         CPI         LNOMS
AJGZ72:  JG          Z72             < CODEM-BOX>LNOMS : LA VALEUR PARAIT TROP
                                     < PETITE...
                                     < (ET RELAI...)
<
< VALIDATION DU NOM-DIRECT PRESUME PAR
< LE MOT LE PRECEDANT :
<
         LAI         NSPSTN+X123X    < MOT DE VALIDATION ATTENDU
         CP          BUFESC-DCTESC+XBUFS2,W
         JNE         Z72             < FICHIER INVALIDE (NON CREE PAR
                                     < UN ASSIGN NEW) ; ERREUR.
         LA          BUFESC-DCTESC+XBUFS1,W
<
<        ON A ICI :
<                    (A)= DU FICHIER.
<
         LBI         XEFF            < ETAT A DONNER A CE FICHIER :
                                     < NON PARTAGEABLE ET DE TRAVAIL.
         PSR         X               < SAVE INDEX COURANT DE LA
                                     < GRAMMAIRE DU CCI.
         JAL         Z208            < ERREUR : NOM DIRECT ERRONE.
         CP          NMFIL           < VALIDATION SUPERIEURE,
         JGE         Z208            < ERREUR : NOM DIRECT ERRONE.
         BSR         AOPFIL          < OUVERTURE DU FICHIER
                                     < DE  (A) DONNE.
         CPZR        X               < TEST DES CONDITIONS DE RETOUR.
         JE          Z208            < L'OPEN EST IMPOSSIBLE ,
                                     < L'ASSIGN EST REFUSE.
         JMP         Z211            < OK, VERS L'ASSIGNATION.
AZ214:   JMP         Z214            < RELAI...
         PAGE
<
<
<        C L O S E   D ' U N E   A S S I G N A T I O N  :
<
<
<        FONCTION :
<                      CETTE ROUTINE EST APPELEE SUITE A
<                    UN ?ASSIGN =S/R, ET A
<                    A SA CHARGE LA DESSIGNATION DU NVP,
<                    ET LA FERMETURE DU FICHIER SI LE NSP
<                    AUQUEL IL EST ASSIGNE EST UN NSPF.
<
<
<        A T T E N T I O N  :
<                    ATTENTION DANS LE CAS D'UN RELEASE
<                    SUR UN NSPF LE  N'EST
<                    PAS DELETE DE L'ARBRE DU SYSTEME.
<
<
<        ARGUMENT :
<                    (Y)=NVP SI PAS ASSIGNE,
<                        NVP.OR.'FF80 SI NVP ASSIGNE,
<                    (B)=MODE DE FERMETURE :
<                                    ='80 : MODE SAVE,
<                                    ='30 : MODE RELEASE.
<                    (W)=ADRESSE DCT(ESCLAVE).
<
<
CCICLF:  EQU         $
<
< TEST PRELIMINAIRE DU NVP :
<
         CPZR        Y
         JG          AJGZ72          < ERREUR : NVP NON ASSIGNE,
                                     < IL N'Y A DONC RIEN A FAIRE.
<
< OK, DESASSIGNATION :
<
         PSR         X               < SAVE INDEX COURANT DE LA GRAMMAIRE
                                     < DU CCI.
         LXI         XSKNSP)MFFFF
         ANDR        Y,X             < (X)=NVP DEMANDE.
         LBY         &TASSGN-DCTESC,W
         CPI         XMAXIO          < EST-CE UNE ASSIGNATION I/O ???
         JLE         Z215            < OUI, DANS LE CAS I/O, IL
                                     < N'Y A PAS DE DELOCATION DE DCT.
XWOR%1:  VAL         XNVPF=K         < ACCES AU MASQUE 'NVP DE FICHIER'.
         TBT         NBITMO-B-XWOR%1 < LE NSP ASSIGNE AU NVP ESTIL
                                     < UN NSP DE SGF ????
         JC          Z213            < OUI : NSPF.
                                     < OU BIEN C'EST LE NSP 'DUMMY' !!!
<
< TRAITEMENT DE 'DKU' :
< (ENVOI DE "!DK F" ET DE
< "!DK S0 OFF" IMPLICITES ET
< ENFIN DE "!DK =FFFF")
<
         CPI         NSPDKU          < EST-CE 'DKU' ???
         JNE         Z300X3          < NON...
         PSR         A,B,X           < OUI :
         LR          A,X             < (X)='NSPDKU'...
         LRM         A,B             < "!DK S0 OFF" :
         WORD        Z300X4          < (A)=ADRESSE DE RETOUR DE 'PS0OFF',
         WORD        PS0OF1          < (B)=ADRESSE DU SOUS-PROGRAMME DE MISE
                                     <     DE LA SYNCHRONISATION SUR LE
                                     <     SECTEUR 0 'OFF'.
         PSR         A,B             < EMPILEMENT DE L'ADRESSE DE RETOUR POUR
                                     < SIMULER UN 'BSR', ET DE L'ADRESSE DU
                                     < SOUS-PROGRAMME,
         RSR                         < VERS LEQUEL ON VA EN METTANT (B) DANS
                                     < 'P' PAR UN 'PSR'/'RSR'...
Z300X4:  EQU         $               < ADRESSE DE RETOUR...
         LRM         A,B             < "!DK F" :
         WORD        Z300X5          < (A)=ADRESSE DE RETOUR DE 'PFAST',
         WORD        PFAST1          < (B)=ADRESSE DU SOUS-PROGRAMME DE MISE
                                     <     EN MODE 'FAST' DE 'DKU'.
         PSR         A,B             < EMPILEMENT DE L'ADRESSE DE RETOUR POUR
                                     < SIMULER UN 'BSR', ET DE L'ADRESSE DU
                                     < SOUS-PROGRAMME,
         RSR                         < VERS LEQUEL ON VA EN METTANT (B) DANS
                                     < 'P' PAR UN 'PSR'/'RSR'...
Z300X5:  EQU         $               < ADRESSE DE RETOUR...
         LRM         A,B             < "!DK =FFFF" :
         WORD        Z300X6          < (A)=ADRESSE DE RETOUR DE 'PSLOWA',
         WORD        PSLOWA          < (B)=ADRESSE DU SOUS-PROGRAMME D'AUTORI-
                                     <     SATION DES GROUPES DE BLOCS ENTRE-
                                     <     LACES DE 'DKU'.
         PSR         A,B             < EMPILEMENT DE L'ADRESSE DE RETOUR POUR
                                     < SIMULER UN 'BSR', ET DE L'ADRESSE DU
                                     < SOUS-PROGRAMME,
         LR          X,B             < (B)='NSPDKU'...
         RSR                         < VERS LEQUEL ON VA EN METTANT (B) DANS
                                     < 'P' PAR UN 'PSR'/'RSR'...
Z300X6:  EQU         $               < ADRESSE DE RETOUR...
         PLR         A,B,X
Z300X3:  EQU         $
<
< TRAITEMENT DU DISQUE SUPPORT DE
< L'EXTENSION D'ADRESSAGE :
<
MONT0::  VAL         NEXIST          < NUMERO DE VOLUME DONNE AU NUMERO DE
                                     < VOLUME COURANT 'VOLNUM' LORSQU'IL N'Y A
                                     < PAS DE VOLUME MONTE PAR LA COMMANDE
                                     < "!DKU...".
         CPI         NSPDKG          < ALORS, LE 'NSP' (A) EST-IL CELUI DU
                                     < DISQUE D'EXTENSION D'ADRESSAGE ???
         JNE         Z300X1          < NON...
         PSR         A               < SAUVEGARDE DU 'NSP'...
         LA          IDDESC-DCTESC,W < (A)=LISTE DES INDICATEURS UTILISATEUR :
         TBT         IDESC8          < ALORS, Y-A-T'IL UN VOLUME MONTE ???
         JNC         Z300X2          < NON, RIEN A FAIRE...
         RBT         IDESC8          < OUI,
         STA         IDDESC-DCTESC,W < ON LE DEMONTE :
         PLR         A               < RESTAURE : (A)='NSP'...
         PSR         A,X,L           < OUI, ON SAUVEGARDE...
         LR          A,X             < (X)='NSP' DU DISQUE D'EXTENSION,
         BSR         ACADCT          < (A)=(L)=ADRESSE DE SA 'DCT'.
         WORD        LAVOLU          < CECI EST EN FAIT L'INSTRUCTION SUIVANTE :
                                     < 'LA VAR+ABVOLU', QU'ON NE PEUT ENCORE
                                     < ECRIRE, PUISQUE 'ABVOLU' N'EST PAS
                                     < ENCORE DEFINI...
                                     < (A)=ADRESSE DU BUFFER DE DESCRIPTION
                                     <     DU VOLUME COURANT,
         LR          A,L             < (L)=BASE DU BUFFER DE VOLUME...
         WORD        STZNUM          < PLUS DE VOLUME COURANT : 'VOLNUM'=K EST
                                     < L'INDICATEUR DE "BASE" INDIQUANT QU'IL
                                     < N'Y A PAS DE VOLUME MONTE...
                                     < (ATTENTION : C'EST UNE INSTRUCTION
                                     < "REFERENCEE EN AVANT"...)
         IF          MONT0-K,,XEIF%,
         IF          ATTENTION : LE 'STZ' EST IDIOT !!!
XEIF%:   VAL         ENDIF
         LAI         NSPVID
         WORD        STANSP          < PLUS DE 'NSP' SUPPORT D'UN VOLUME,
                                     < (ATTENTION : C'EST UNE INSTRUCTION
                                     < "REFERENCEE EN AVANT"...)
         PLR         A,X,L
         JMP         Z300            < IL EST INUTILE DE FAIRE LES TESTS SUR
                                     < LES 'NSP' DU 'SGN'...
<
< CAS DES AUTRES 'NSP' : EST-CE LE 'SGN' ???
<
Z300X1:  EQU         $
         CPI         NSPSG0
         JL          Z300            < CE N'EST PAS UN NSP DU SGN.
         CPI         NSPSGN
         JG          Z300            < CE N'EST PAS UN NSP DU SGN.
<
< CAS D'UN NSP DU SGN, ON
< VA DESASSIGNER TOUS LES NVP
< CONCERNES :
<
         LAI         NSPVID          < DESASSIGN.
         JMP         AZ301           < VERS LA DESASSIGNATION DU SGN.
<
< DANS LE CAS D'UN NSP QUI N'EST NI DU SGF,
< NI DU SGN, ON DELOUE LA DCT CORRESPONDANTE :
<
Z300X2:  EQU         $
         PLR         A               < RESTAURE : (A)='NSP'...
Z300:    EQU         $
         XR          A,X             < (X)=NSP A DELOUER, (A)=SAVE NVP.
         BSR         ADLDCT          < DELOCATION DU NSP (X).
         XR          A,X             < RESTAURE (X)=NVP, (A)=NSP.
Z215:    EQU         $
         LAI         NSPVID          < EN VUE DU DESASSIGN.
         JMP         AZ214           < VERS LA DESASSIGNATION.
<
< TRAITEMENT DES NSP DE SGF :
<
Z213:    EQU         $
XWOR%1:  VAL         XNVPF=K         < ACCES AU MASQUE 'NVP DE FICHIER'.
         RBT         NBITMO-B-XWOR%1 < (A)=NSP DE SGF.
         JAE         Z215            < NSP=NSPDUM : LE NVP ETAIT
                                     < ASSIGNE AU NSP DUMMY ; ON VA
                                     < DONC JUSTE LE DESASSIGNER !!!
         SBT         BITCFN          < MODE D'APPEL DE 'CLOSE-FILE'
                                     < PAR NSP.
CMCFSR:: VAL         N
         ADRI        CMCFSR,B        < (B)='30 OU '80, EN EFFET,
                                     < L'INTERPRETEUR DU CCI RAZE
                                     < LE BIT0 DE L'OCTET0 DE
                                     < CHAQUE NOEUD.
<
<        ON A ICI :
<                    (A)=NSP ALLOUE AU FICHIER A FERMER,
<                    (B)=MODE DE FERMETURE (RELEASE OU SAVE).
<                    (X)=NVP QUE L'ON DESASSIGNE.
<                    (W)=ADRESSE DCT(ESCLAVE).
<
Z230:    EQU         $
         BSR         ACLFIL          < TENTATIVE DE FERMETURE DU
                                     < FICHIER DANS LE MODE PRECISE (B).
<
< TEST DES CONDITIONS DE RETOUR :
<
         XR          A,Y             < (A)=CONDITIONS DE RETOUR,
                                     < (Y)=NSPF (BIT0=1).
         JAE         Z215            < OK, LE CLOSE DU FICHIER A ETE
                                     < ACCEPTE, ALLONS DESASSIGNER.
         CPI         ECEO            < LE CLOSE A-T'IL ETE REFUSE POUR
                                     < 'OPEN ENREGISTREMENT EN COURS' ???
         JE          SYSR57          < OUI, ALLONS FERMER L'ENREGIS-
                                     < TREMENT.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ET BIEN TOUT DEPEND DU CODE DE RETOUR...
<
SYSR57:  EQU         $
<
< FERMETURE DE L'ENREGISTREMENT DANS LE
< MEME MODE QUE CELUI DEMANDE POUR LE FICHIER :
<
         LAI         FOFCR           < CODE 'CLOSE RELEASE' A PRIORI.
XWOR%1:  VAL         MCFS=K-NBITMO+B < POUR DISCRIMINER SAVE/RELEASE :
XWOR%1:  VAL         -XWOR%1         < CE BIT=K (RELEASE) =1 (SAVE).
         TBT         NBITMO+XWOR%1   < LE DESASSIGN DU FICHIER EST-IL
                                     < SAVE OU RELEASE ??? :
                                     < SAVE : BIT8(B)=1 (B='80),
                                     < RELEASE : BIT8(B)=K (B='30).
         ADCR        A               < (A)=6 SI CLOSE RELEASE,
                                     <    =7 SI CLOSE SAVE.
         STA         DEMESC-DCTESC+T+OPDEM,W
         SWBR        Y,A             < (Y)=NSPF (BIT0=1).
         RBT         NBITOC+BITCFN   < (A)=NSPTYP VERS LE HANDLER SGF
                                     <     ALLOUE AU FICHIER.
         STA         DEMESC-DCTESC+XXNSP,W
         ADRI        DEMESC-DCTESC,W < (W)=@DEMANDE DE CLOSE ENREGIS-
                                     < TREMENT.
         BSR         ACHAND          < ENVOI DE LA DEMANDE DE CLOSE
                                     < ENREGISTREMENT SAVE/RELEASE.
         WAIT        WEIO            < ATTENTE DE FIN DE CLOSE.
         ADRI        DCTESC-DEMESC,W < (W)=@DCT-ESCLAVE.
<
< TEST DES CONDITIONS DE RETOUR
< DU CLOSE ENREGISTREMENT :
<
         LA          DEMESC-DCTESC+T+ETADEM,W
         JAE         SYSR58          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      JE NE SAIS PAS, MAIS SI CETTE 'SYSER'
<                    A LIEU, C'EST QUE PROBABLEMENT, ON EN
<                    A EU UNE LORS DU 'CLFIL' QUI A PRECEDE...
<
SYSR58:  EQU         $
<
< LE CLOSE ENREGISTREMENT A ETE ACCEPTE :
<
         LR          Y,A             < RESTAURE (A)=NSPF (BIT0(A)=1).
                                     < A NOTER QUE B EST OK ('80 OU '30).
         JMP         Z230            < TRY AGAIN TO CLOSE THE FILE !!!!
         PAGE
<
<
<        D E L E T E   U N   N O M   D E   F I C H I E R  :
<
<
<        FONCTION :
<                      CE MODULE DETRUIT UN NOM DE FICHIER,
<                    APRES QUE CE DERNIER AIT ETE OUVERT
<                    EN 'OLD', PUIS FERMER EN 'RELEASE' ;
<                    IL NE PEUT SE PRODUIRE D'ERREUR, SAUF
<                    ANOMALIE SYSTEME...
<
<
<        ARGUMENTS :
<                    (W)=ADRESSE DE LA DCT(ESCLAVE),
<                    (XBUFGR)=INDEX DU PREMIER CARACTERE DU NOM.
<
<
DELFIL:  EQU         $
         LBI         NSPDLN
         BSR         ACCIF           < DESTRUCTION DU NOM EXTERNE...
         JAE         DELFI1          < OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE POURQUOI, ALORS QU'ON
<                    A PU L'OUVRIR EN 'OLD', LE FERMER
<                    EN 'RELEASE', ON NE PEUT DETRUIRE
<                    SON NOM EXTERNE !!!
<
DELFI1:  EQU         $
         RSR
         PAGE
<
<
<        T E S T   A B S E N C E   D E S   ' N U L L S '
<        D A N S   U N E   C A R T E   " ! A S S I G N "  :
<
<
<        FONCTION :
<                      ETANT DONNE QUE "!ASSIGN =N,"
<                    DONNE NAISSANCE A UN ITEM DE NOM
<                     ET QUI VA AU BOUT DE
<                    'BUFESC', LE  DU
<                    FICHIER SE TROUVE DANS CET ITEM
<                    A UNE DISTANCE DU DEBUT DETERMINEE
<                    UNE FOIS POUR TOUTE LORS DE SA
<                    CREATION (OPEN-NEW) ; SI DONC DES
<                    'NULLS' SONT INTRODUITS DANS LA
<                    CARTE "!ASSIGN...", LA LONGUEUR DU
<                    DIT ITEM VA CHANGER, ET LE 
<                    DEVENIR IRRECUPERABLE...
<
<
ABSNUL:  EQU         $
<
< DEFINITION DE LA CARTE "!ASSIGN" (NEW) :
<
        @!ASSIGN N=X,
         IF          KOL1=FCGET-KCCI,,XEIF%,
         IF          ATTENTION : IL FAUT UN "!" EN TETE DE LA CARTE !!!
XEIF%:   VAL         ENDIF
XWOR%1:  VAL         KOLTED=FMASK+KOL1=FVAL
XWOR%1:  VAL         KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%1
XWOR%2:  VAL         KOLF=FMASK+KOLTES=FVAL
XWOR%2:  VAL         KOLC=FMASK+KVIR=FVAL?XWOR%2
XWOR%3:  VAL         XWOR%1=XWOR%2   < RECHERCHE DU LIMITEUR ","...
         IF          XWOR%3-KOL0-KOLON,XEIF%,,
         IF          ATTENTION : IL MANQUE LE LIMITEUR "," !!!
XEIF%:   VAL         ENDIF
XLPASS:: VAL         XWOR%3-KOL1+Z   < LONGUEUR EN OCTETS DE LA CARTE "!ASSIGN".
<
< VALIDATION DE LA CARTE :
< "!ASSIGN" COURANTE :
<
         LA          VAR+XBUFGR      < (A)=INDEX DU PREMIER CARACTERE DU
                                     <     ,
         CPI         XLPASS+KOL0     < EST-IL BON (+KOL0, CAR 'XLPASS' EST UNE
                                     < LONGUEUR, ET NON UN INDEX...) ???
         JE          ABSNU1          < OUI...
         ADRI        XCCIER,X        < NON, IL Y A DES 'NULLS', LA CARTE
                                     < "!ASSIGN..." COURANTE EST DONC REFUSEE...
ABSNU1:  EQU         $
         RSR                         < ET ON RETOURNE A LA GRAMMAIRE...
         PAGE
<
<
<        I N T E R F A C E   E N T R E   C C I   E T   L E
<        S Y S T E M E   D E   G E S T I O N   D E S   N O M S  :
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DCT(ESCLAVE).
<                    (B)=NSPLON OU NSPSTN SUIVANT QUE LE MODE
<                      DU FICHIER EST OLD OU NEW...
<                    (XBUFGR) POINTE SUR LE 1ER CARACTERE DU NOM.
<
<
<        RESULTAT :
<                    (A)=CONDITIONS DE RETOUR DE HDLLON/HDLSTN.
<
<
CCIFIL:  EQU         $
         SWBR        B,A
         SBT         VBOX            < AFIN DE RECUPERER LA LONGUEUR DE LA
                                     < VALEUR ASSOCIEE AU NOM...
         STA         DEMESC-DCTESC+XXNSP,W < GENERATION D'UN NSPTYP VERS
                                     < HDLLON OU HDLSTN.
         LA          VAR+DEMCCI+T+AMDEM
         AD          VAR+XBUFGR      < (A)=@OCTET DU NOM ARGUMENT DE
                                     < L'ASSIGNATION.
         STA         DEMESC-DCTESC+T+AMDEM,W
         LAI         NOCMO*LBUFES
         SB          VAR+XBUFGR      < (A)=NBRE D'OCTETS DE LA ZONE
                                     <     ALLANT DU 1ER CARACTERE DU
                                     <     NOM JUSQU'AU BOUT DU BUFESC.
         STA         DEMESC-DCTESC+T+CODEM,W
         LAI         FGSGNN          < LA VALEUR SUIT LE NOM.
         STA         DEMESC-DCTESC+T+ASDEM,W
         LAI         FGSGNA          < FONCTION AVEC CONCATENATION
                                     < DE L'ACN DEVANT LE NOM.
XXXSGF:: VAL         WAITB           < BIT A POSITIONNER DANS L'OPDEM A
                                     < DESTINATION DU 'SGN' POUR INDIQUER
                                     < QUE L'ITEM EN CAUSE EST UN ITEM DE
                                     < TYPE "SGF"...
XWOR%1:  VAL         COSBT?XXXSGF=FMASK(K=FCINST
         IF          XWOR%1(XMDSLO,,XEIF%,
         IF          ATTENTION : RECOUVREMENT ENTRE 'XMDSLO' ET 'XXXSGF' !!!
XEIF%:   VAL         ENDIF
         IF          XWOR%1(MKOPDM,,XEIF%,
         IF          ATTENTION : RECOUVREMENT ENTRE 'MKOPDM' ET 'XXXSGF' !!!
XEIF%:   VAL         ENDIF
         SBT         XXXSGF          < INDIQUONS AU "SGN" QU'IL S'AGIT DU "SGF".
         STA         DEMESC-DCTESC+T+OPDEM,W
         ADRI        DEMESC-DCTESC,W < (W)=@DEMANDE DEMESC.
         BSR         ACHAND          < ENVOI DE LA DEMANDE.
         WAIT        WEIO            < ATTENTE DE LA REPONSE.
         ADRI        DCTESC-DEMESC,W < RESTAURE (W)=@DCT-ESCLAVE.
         STA         DEMESC-DCTESC+T+OPDEM,W
                                     < REMISE DE L'OPDEM A 2, CAR LE
                                     < SGN L'A MIS A 0, ET IL SE PEUT
                                     < QU'UN 'OMOV2' SUIVE CET APPEL
                                     < AU CCI !!...!!!.
         LA          DEMESC-DCTESC+T+ETADEM,W
         RSR                         < RETOUR AVEC (A)=CONDITIONS.
         PAGE
<
<
<        C H E C K   T A S S G N   A U   L O G O U T  :
<
<
<        FONCTION :
<                      CETTE ROUTINE EST PAPPELEE SUITE A
<                    ?BYE, ET VERIFIE QUE QUE TOUS LES
<                    NVP A L'EXCEPTION DE PHIN ET PHOUT
<                    SONT DESASSIGNES ; SINON, LE
<                    BYE EST REFUSE.
<
<
CHKASG:  EQU         $
         PSR         X               < SAVE INDEX COURANT DE LA
                                     < GRAMMAIRE DU CCI.
         LXI         NOCMO*LTASGN-Z  < INDEX DU DERNIER NVP.
Z216:    EQU         $
         LBY         &TASSGN-DCTESC,W
         CPI         NSPVID          < TEST DU NSP ASSIGNE AU NVP (X).
         JNE         Z217            < LE NVP ETANT ENCORE ASSIGNE,
                                     < ON ARRETE L'EXPLORATION DE TASSGN
         JDX         Z216            < AU NVP SUIVANT
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
Z217:    EQU         $
         LR          X,A             < (A)=NVP ENCORE ASSIGNE.
         PLR         X               < RESTAURE INDEX GRAMMAIRE CCI (X).
         CPI         XMAXIO
         JGE         SYSR59
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      CERTAINEMENT UN RETOUR EN ERREUR
<                    AU 'CCI' PAR (X)#0, MAIS ATTENTION,
<                    LE 'JE Z218' QUI SUIT NE PEUT FONCTIONNER
<                    CORRECTEMENT, CAR ENTRE LE 'CPI' ET LUI,
<                    IL Y A EU LA 'SYSER'...
<
SYSR59:  EQU         $
         JE          Z218            < C'EST MAX(PHIN,PHOUT), LE ?BYE
                                     < EST DONC ACCEPTE, TOUS LES
                                     < NVP SONT DESASSIGNES SAAUF
                                     < PHIN & PHOUT.
         ADRI        XCCIER,X        < RETOUR EN ERREUR AU CCI, AU
                                     < MOINS UN NVP (DIFFERENT DE PHIN
                                     < ET PHOUT) EST ENCORE ASSIGNE.
Z218:    EQU         $
         RSR
         PAGE
<
<
<        C O M M A N D E   D E   C O N N E X I O N S
<                    M A T R I C I E L L E S  :
<
<
<        FONCTION :
<                      EN GENERAL, ON DISPOSE DE 2 NSP, SOIENT
<                    NSP1 ET NSP2 DONNES DANS CET ORDRE
<                    DANS UNE COMMANDE '?CM '.  LA COMMANDE
<                    CM GERE LES CONNEXIONS DE NSP1 VERS
<                    NSP2, C'EST-A-DIRE QUE TOUT CE QUI
<                    SE PASSERA SUR NSP1 SERA REPRODUIT
<                    SUR NSP2.
<
<
<        S A V E   N S P 1  :
<
<
<        ARGUMENT :
<                    (B)=NSP1.
<
<
<        RESULTAT :
<                    (Y)=NSP1, TRANSMIS AUX ROUTINES SUIVANTES.
<
<
CMP1:    EQU         $
         LR          B,Y             < (Y)=NSP1.
         RSR
<
<
<        N S P I N / O U T   D E M A N D E   C O M M E    N S P 1  :
<
<
<        ARGUMENT :
<                    (B)=NVP (PHIN/PHOUT).
<
<
<        RESULTAT :
<                    (Y)=+NSPIN/NSPOUT.
<
<
CMP5:    EQU         $
         PSR         X               < SAVE INDE COURANT DE LA
                                     < GRAMMAIRE DU CCI.
         LR          B,X             < (X)=NVP (PHIN/PHOUT).
Z218X:   EQU         $
         LBY         &TASSGN-DCTESC,W
         JANE        SYSR5A
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      PEUT-ETRE CORRIGER 'TASSGN' DE
<                    'DCTESC', PUIS UN 'JMP Z218X'...
<
SYSR5A:  EQU         $
         LR          A,Y             < (Y)=NSP1=+NSPIN/NSPOUT.
         PLR         X               < RESTAURE (X)=INDEX GRAMMAIRE CCI.
         RSR
<
<
<        D I S C R I M I N A T I O N   C O N N E X I O N
<                    D I S C O N N E X I O N  :
<
<
<        ARGUMENT :
<                    (Y)=NSP1.
<
<
<        RESULTAT :
<                    (Y)=-NSP1.
<
<
CMP4:    EQU         $
         NGR         Y,Y
         RSR                         < FACILE, N'EST-IL PAS ?????
<
<
<        R A Z   T O U T E S   C O N N E X I O N S
<        I S S U E S   D E   N S P 1  :
<
<
<        ARGUMENT :
<                    (Y)=NSP1.
<
<
CMP2:    EQU         $
         XR          X,Y             < (Y)=SAVE INDEX COURANT DE LA
                                     <     GRAMMAIRE DU CCI,
                                     < (X)=NSP1.
         ADR         X,X             < EN EFFET, MATX EST UNE TABLE
                                     < DE DOUBLE-MOTS.
         IF          UMATCO-2,,XEIF%,
         IF          ATTENTION : CE QUI PRECEDE EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         RQST        &ASMATX         <<<NSP2,
<                    SI Y>0 : CONNEXION NSP1-->NSP2.
<
<
<        RESULTAT :
<                    (B)=NSP2 (NSPIN/NSPOUT).
<
<
CMP6:    EQU         $
         PSR         X               < SAVE INDEX COURANT DE LA
                                     < GRAMMAIRE DU CCI.
         LR          B,X             < (X)=NVP DEMANDE (PHIN/PHOUT).
Z81XX:   EQU         $
         LBY         &TASSGN-DCTESC,W
         JANE        SYSR5B          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      PEUT-ETRE CORRIGER 'TASSGN' DE
<                    'DCTESC', PUIS UN 'JMP Z81XX'...
<
SYSR5B:  EQU         $
         LR          A,B             < (B)=NSP2 (NSPIN/NSPOUT).
         PLR         X               < RESTAURE PROVISOIRE DE L'INDEX
                                     < COURANT DE LA GARMMAIRE CCI.
         JMP         CMP3            < VERS LE TRAITEMENT STANDARD.
<
<
<        C O N N E X I O N / D I C O N N E X I O N
<                    N S P 1 --> N S P 2  :
<
<
<        ARGUMENTS :
<                    ABSVAL(Y)=NSP1,
<                    (B)=NSP2,
<                    SI Y<0 : DISCONNEXION NSP1-->NSP2,
<                    SI Y>0 : CONNEXION NSP1-->NSP2.
<
<
CMP3:    EQU         $
         CPR         Y,B
         JE          Z86             < LES AUTO-CONNEXIONS SONT
                                     < INTERDITES ; ON NE VERIFIE PAS
                                     < LES AUTO-DECONNEXIONS, PUISQU'
                                     < IL EST IMPOSSIBLE D'AUTO-CONNECTER.
         PSR         X               < SAVE INDEX COURANT DE LA GRAMMAIRE
                                     < DU CCI.
         CPZR        Y               < DISCRIMINATION CONNEXION /
                                     < DISCONNEXION.
         JGE         Z81             < CAS D'UNE CONNEXION.
<
< CAS D'UNE DISCONNEXION :
<
         NGR         B,B             < ON MEMORISE DISCONNEXION
                                     < PAR B<0.
         NGR         Y,Y             < ON REND Y POSITIF, POUR
                                     < POUVOIR INDEXER MATX.
Z81:     EQU         $
         LR          Y,X             < (X)=NSP1.
         ADR         X,X             < MATX EST UNE TABLE DOUBLE-MOTS.
         LR          B,Y             < SAVE (Y)=+-NSP2.
         RQST        &ASMATX         <<<NSP2.
<
< CAS D'UNE DISCONNEXION NSP1-->NSP2 :
<
         NGR         X,X             < (X)=NSP2.
         TBT         L,X             < ETAT DE LA CONNEXION A DETRUIRE.
         JNC         Z83             < ELLE N'EXISTE PAS, ERREUR.
         RBT         L,X             < OK, RAZ.
         JMP         Z84             < SORTIE OK.
<
< CAS D'UNE CONNEXION NSP1-->NSP2 :
<
Z82:     EQU         $
         TBT         L,X             < TEST DE L'ETAT DE LA CONNEXION.
         JC          Z83             < ERREUR : ELLE EXISTE DEJA.
         SBT         0,X             < OK, ON CONNECTE NSP1-->NSP2.
<
< MISE A JOUR DE MATX :
<
Z84:     EQU         $
         LR          Y,X             < RESTAURE (X)=INDEX MATX.
         STB         &AMATX
         ADRI        -UMATCO+E,X
         STA         &AMATX          < MAJ DE MATX.
         PLR         X               < RESTAURE (X)=INDEX COURANT DE
                                     < LA GRAMMAIRE DU CCI.
Z85:     EQU         $
         PSR         A
         LAD         &ASMATX
         BSR         ARLSE           < FIN DE PHASE CRITIQUE
         PLR         A
         RSR
<
< SORTIE EN ERREUR :
<
Z83:     EQU         $
         PLR         X               < RESTAURE (X)=INDEX COURANT DE
                                     < LA GRAMMAIRE DU CCI.
Z86:     EQU         $
         ADRI        XCCIER,X        < RETOUR EN ERREUR AU CCI.
         JMP         Z85             < SORTIE.
         PAGE
<
<
<        G E S T I O N   D U   ' M A I L '   A U X
<                    U T I L I S A T E U R S  :
<
<
<        FONCTION :
<                      CE MODULE EST APPELE SUITE
<                    A LA COMMANDE "!VI ..." ; ELLE
<                    MET EN PLACE LE MESSAGE 'MAIL'
<                    COURANT, EVENTUELLEMENT VIDE...
<
<
<        ARGUMENTS :
<                    (L)=ADRESSE DE 'DCTSER',
<                    (W)=ADRESSE DE 'DCTESC'.
<
<
PMAIL:   EQU         $
         PSR         B,X,Y           < SAUVEGARDES...
<
< DEFINITION DE LA CARTE "!VI " ('MAIL') :
<
        @!VI /
         IF          KOL1=FCGET-KCCI,,XEIF%,
         IF          ATTENTION : IL FAUT UN "!" EN TETE DE LA CARTE !!!
XEIF%:   VAL         ENDIF
XWOR%1:  VAL         KOLTED=FMASK+KOL1=FVAL
XWOR%1:  VAL         KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%1
XWOR%2:  VAL         KOLF=FMASK+KOLTES=FVAL
XWOR%2:  VAL         KOLC=FMASK+KSLASH=FVAL?XWOR%2
XWOR%3:  VAL         XWOR%1=XWOR%2   < RECHERCHE DU LIMITEUR "/"...
         IF          XWOR%3-KOL0-KOLON,XEIF%,,
         IF          ATTENTION : IL MANQUE LE LIMITEUR "/" !!!
XEIF%:   VAL         ENDIF
XLPVI::  VAL         XWOR%3-KOL1+Z-W < LONGUEUR EN OCTETS DE LA CARTE "!VI ".
                                     < (-W CAR LE LIMITEUR "/" N'EN FAIT PAS
                                     < PARTIE...)
<
< DETERMINATION DE LA LONGUEUR
< DU MESSAGE 'MAIL' COURANT :
<
         LA          VAR+DEMCCI+T+CODEM
                                     < (A)=NOMBRE DE CARACTERES DE LA COMMANDE
                                     <     "!VI ..." Y COMPRIS ,
         ADRI        -XLPVI-W,A      < (A)=LONGUEUR DU MESSAGE 'MAIL' DEMANDE,
                                     <     NON COMPRIS  (-W)...
         JAL         PMAIL3          < ?!??!??!
         WORD        CPMAIL          < VALIDATION...
         JLE         PMAIL4          < OK, ELLE TIENT DANS 'MAIL'...
PMAIL3:  EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE, CAR TOUT A ETE
<                    DIMENSIONNE CORRECTEMENT !!!
<
         JMP         PMAIL5          < ET ON SORT IMMEDIATEMENT...
PMAIL4:  EQU         $
         LR          A,Y             < (Y)=LONGUEUR DU NOUVEAU 'MAIL'...
<
< ACCES AU 'MAIL' GENERAL :
<
         PSR         L               < SAUVEGARDE DE L'ADRESSE DE 'DCTSER',
         LXI         NSPTT           < (X)='NSP' DU NOEUD DE 'MAIL' DE LA
                                     <     GRAMMAIRE DU 'CCI',
         BSR         ACADCT          < (L)=ADRESSE DU NOEUD DE 'MAIL'...
<
< MISE EN PLACE DE LA LONGUEUR
< DU NOUVEAU 'MAIL' :
<
         BSR         ASMMK           < MASQUAGE DES INTERRUPTIONS, AFIN QU'UN
                                     < AUTRE UTILISATEUR N'HERITE PAS D'UN
                                     < MESSAGE 'MAIL' BIZARRE...
         LR          Y,A             < (A)=NOUVELLE LONGUEUR,
         STBY        XCCIM0,L        < QUE L'ON MET EN PLACE DANS LE NOEUD DE
                                     < 'MAIL' DE LA GRAMMAIRE...
<
< INITIALISATION DU TRANSFERT :
<
         LX          XCCIM1,L        < (X)=ADRESSE DU MESSAGE 'MAIL',
         PLR         L               < ET RESTAURE :
                                     < (L)=ADRESSE DE 'DCTSER'...
         LA          VAR+ABUFGR      < (A)=RELAI D'ACCES A 'BUFESC' (CETTE
                                     <     ECRITURE EST PLUS GENERALE QU'UN
                                     <     'LAD' SUR 'BUFESC-DCTESC,W'...),
         RBT         BITX            < (A)=ADRESSE DU BUFFER COURANT,
         SBR         A,X             < (X)=DEPLACEMENT PERMETTANT DE PASSER DE
                                     <     'BUFESC' A 'MAIL' AVEC LE MEME
                                     <     RELAI 'VAR+ABUFGR'...
PMAIL6:  EQU         $               < SAUVEGARDE DU 'DOLLAR'...
<*******************************************************************************
         ADR         A,A             < DOUBLEMENT DE (A),
XWOR%1:  VAL         '0000000@@@@    < RECUPERATION DU CODE GENERE...
<*******************************************************************************
         $EQU        PMAIL6          < ET ANNULATION DU CODE GENERE...
         IF          XWOR%1=FMASK(K?W=FCINST-NOCMO,,XEIF%,
         IF          ATTENTION : LE PASSAGE DE L'INDEX MOT A
         IF          L'INDEX OCTET PAR 'ADR' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         ADR         X,X             < (X)=INDEX OCTET INITIAL DE RANGEMENT DANS
                                     <     LA ZONE 'MAIL'...
<
< BOUCLE DE TRANSFERT DES
< CARACTERES DU NOUVEAU
< MESSAGE 'MAIL' :
<
PMAIL1:  EQU         $
         CPZR        Y               < EN RESTE-T'IL A TRANSFERER ???
         JE          PMAIL2          < NON...
         BSR         ACARAC          < OUI :
                                     < (A)=CARACTERE COURANT DE 'BUFES' ; A
                                     <     NOTER QUE L'ON NE TESTE PAS EN RETOUR
                                     <     LES  AFIN D'AUTORISER LES "."
                                     <     DANS LES 'MAIL', ET DE PLUS CE TEST
                                     <     SERAIT REDONDANT AVEC CELUI DE 'Y'...
         STBY        &VAR+ABUFGR     < ET ON LE MET DANS 'MAIL'...
         ADRI        I,X             < PROGRESION DE L'INDEX,
         ADRI        -I,Y            < ET DECOMPTE DES CARACTERES RANGES...
         JMP         PMAIL1          < AU SUIVANT, S'IL EXISTE...
<
< FIN DES OPERATIONS :
<
PMAIL2:  EQU         $
         BSR         ASMDK           < ON DEMASQUE LES INTERRUPTIONS...
PMAIL5:  EQU         $
         PLR         B,X,Y           < ON RESTAURE LES REGISTRES,
         RSR                         < ET ON FAIT UN RETOUR OK...
         PAGE
<
<
<        A C T I O N   S U R   L E S   T A C H E S
<                    P A R A L L E L E S  :
<
<
<        FONCTION :
<                      CETTE ROUTINE ACCEDEE PAR LA COMMANDE
<                    !X SOUS :SYS, PERMET LA CREATION DE
<                    JOBS PARALLELES SUR LE PERIPHERIQUE
<                    ASSIGNE AU NVP ARGUMENT ; CE PERIPHERIQUE
<                    EST LE NSPIN DU JOB PARALLELE CREE.
<                    SI LE JOB EXISTE DEJA, L'ACTION DE LA COMMANDE
<                    EST EQUIVALENTE A UN ALT-MODE SUR UNE
<                    VISU.
<
<
<        ARGUMENTS :
<                    (W)=ADRESSE DCT(ESCLAVE) DEMANDEUR,
<                    (L)=ADRESSE DCT(SERVICE).
<                    (Y)=NVP SI NON ASSIGNE (>0),
<                       =NVP.OR.'FF80 SI ASSIGNE (<  0).
<
<
TASK:    EQU         $
         CPZR        Y               < TEST DU NVP ARGUMENT.
         JGE         Z281            < ERREUR : LE NVP N'EST PAS ASSIGNE
<
< CAS D'UN NVP ASSIGNE :
<
         PSR         X,L             < SAVE INDEX GRAMMAIRE CCI,
                                     < ET @DCT-SERVICE.
         LXI         XSKNSP)MFFFF
         ANDR        Y,X             < (X)=NVP DEMANDE (ET DEJA ASSIGNE).
         LBY         &TASSGN-DCTESC,W  < (A)=NSP DU PERIPHERIQUE IN
                                       <     DEMANDE.
         LR          A,Y             < (Y)=NSP PERIPHERIQUE IN DEMANDE.
         LXI         PHIN
         CPBY        &TASSGN-DCTESC,W  < LE PERIPHERIQUE DEMANDE NE
                                       < SERAIT-IL PAS LE NSPIN DU
                                       < DEMANDEUR ???
         JE          Z282            < OUI, ERREUR.
<
< ACCES A LA DCT DU PERIPHERIQUE IN DEMANDE :
<
         ANDI        XNVPF)MOCD
         LR          A,X             < (X)=NSP DU PERIPHERIQUE IN DEMANDE.
         BSR         ACADCT          < (L)=@DCT PERIPH. IN DEMANDE.
         LBY         IOID            < (A)=NSP DU PERIPHERIQUE OUT
                                     <     ASSOCIE AU PERIPHERIQUE
                                     <     IN DEMANDE.
         ANDI        IOIDM           < EN RAZANT LE BIT0 DE IOID, ON
                                     < EXCLUE L'ACCES AUX FICHIERS !!!
         JAE         Z282            < ERREUR : CE PERIPHERIQUE OUT
                                     < ASSOCIE N'EXISTE PAS.
<
< CAS OU LE PERIPHERIQUE IN DEMANDE
< EST ACCEPTABLE :
<
         LR          X,A             < (A)='NSP' DU PERIPHERIQUE DEMANDE :
         CPI         NSPVI0          < EST-CE UNE VISU ???
         JL          TASK01          < NON...
         CPI         NSPVIN          < ???
         JG          TASK01          < NON...
<
< CAS D'UNE VISU : IL FAUT
< REINITIALISER A PRIORI
< LE BUFFER D'ANTICIPATION :
<
         PSR         X
         SVC         SVCM10          < DANS LE CAS DE "!X..", ON ANNULE TOUS
                                     < LES CARACTERES EN ATTENTE, EN REINITIA-
                                     < LISANT 'KCWIO'...
         PLR         X
<
< TEST D'UN UTILISATEUR DEJA LOGUE :
<
TASK01:  EQU         $
         RQST        SPHEX           <<<XWOR%1
         ANDI        XWOR%1          < (A)=NSP DU HANDLER  DE SERVICE ASSOCIE,
         JANE        Z285Y           < OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      PEUT-ETRE LE MIEUX SERAIT-IL DE NE PAS
<                    REVEILLER L'ESCLAVE, EN FAISANT UN 'JMP Z285'...
<
Z285Y:   EQU         $
         PSR         X,L
         LR          A,X             < (X)='NSP' DU HANDLER DE SERVICE,
         BSR         ACADCT          < (A)=L=ADRESSE DE SA 'DCT',
         BSR         ARIT            < ON LE REVEILLE...
         PLR         X,L
         JMP         Z285            < ET ON SORT EN SAUTANT LA MISE EN
                                     < PLACE DE LA ROUTINE D'ABORT...
Z285X:   EQU         $
         BSR         ASMDK           < DEMASQUAGE DES INTERRUPTIONS...
         LA          AABORT          < (A)=@ROUTINE D'ABORT DE FIN DE
                                     <     SERVICE.
         SBT         XFSERV          < AFIN QUE FSERV NE LANCE PAS LE
                                     < RECOVERY SI LE FSERV EST DEJA
                                     < POSITIONNE POUR L'ESCLAVE
                                     < ATTACHE.
         XR          W,L             < (W)=@DCT-ESCLAVE ATTACHE.
         BSR         AFSERV          < MISE EN PLACE D'UNE ROUTINE
                                     < DE FIN DE SERVICE POUR L'ESCLAVE
                                     < ATTACHE.
<
<        NOTA :
<                      ON NE FAIT PAS 'ADOWN', CAR
<                    EN EFFET D'UNE PART CELA COMPLIQUE
<                    LES CHOSES (INTERFERENCES AVEC
<                    L'HORLOGE), MAIS SURTOUT ON FAIT
<                    UN 'FSERV' QUI EST EXPLOITE PAR
<                    L'AUTOMATE DE SERVICE QUI SERA
<                    AUTOMATIQUEMENT DECLENCHE LORS DE
<                    LA PROCHAINE INTERRUPTIOON D'HORLOGE...
<
         XR          W,L             < (W)=@DCT-ESCLAVE DEMANDEUR.
         TBT         XFSERV          < LA MISE EN PLACE DE LA ROUTINE
                                     < D'ABORT A-T'ELLE EU LIEU ?????
         JC          Z282            < NON, ERREUR.
<
< RETOUR :
<
Z285:    EQU         $
         PLR         X,L             < RESTAURE L'INDEX DE LA GRAMMAIRE
                                     < DU CCI, ET @DCT-SERVICE.
Z286:    EQU         $
         RSR                         < GO BACK.
<
<
<        J O B   P A R A L L E L E   E N T R Y  :
<
<
Z283:    EQU         $
<
<        ON A ICI :
<                    (Y)=NSP DU PERIPHERIQUE IN DEMANDE,
<                    (W)=ADRESSE DCT(ESCLAVE) DEMANDEUR.
<
         SBT         IOIDX           < MEMORISATION DE L'ATTACHEMENT
                                     < D'UN ESCLAVE SUR LE PERIPHERIQUE
                                     < IN DEMANDE.
         STA         IOID
         LAD         SPHEX
         BSR         ARLSE
<
< PREPARATION DU JOB-ENTRY :
<
         LAI         NSPJE
         SWBR        A,A
         STA         DEMESC-DCTESC+XXNSP,W < NSPTYP VERS HDLJE.
         STY         DEMESC-DCTESC+T+AMDEM,W
                                     < LE NSP DU PERIPHERIQUE IN
                                     < DEMANDE (Y) EST MIS EN AMDEM
                                     < DE LA DEMANDE.
         LAI         K
XWOR%1:  VAL         PLK*NOCMO=K     < PLK*NOCMO=TAILLE INITIALE DE L'ESPACE.
XWOR%1:  VAL         NBITMO-B-XWOR%1 < NUMERO DU BIT A POSITIONNER...
         SBT         XWOR%1          < POUR UNE DEMANDE DE '800 OCTETS.
         STA         DEMESC-DCTESC+T+CODEM,W
         ADRI        DEMESC-DCTESC,W < (W)=@DEMANDE DE JOB ENTRY.
         BSR         ACHAND          < ENVOI DE LA DEMANDE DE JOB-ENTRY.
         BSR         ACHANW          < ATTENTE DE FIN DE JOB-ENTRY.
         ADRI        DCTESC-DEMESC,W < RESTAURE (W)=@DCT-ESCLAVE
                                     < DEMANDEUR.
         JMP         Z285            < VERS LE RETOUR.
<
< SORTIES EN ERREUR :
<
Z282:    EQU         $
         PLR         X,L             < RESTAURE L'INDEX COURANT DE
                                     < LA GRAMMAIRE DU CCI, ET
                                     < @DCT-SERVICE.
Z281:    EQU         $
         ADRI        XCCIER,X        < RETOUR EN ERREUR AU CCI.
         JMP         Z286            < VERS LE RETOUR.
         PAGE
<
<
<        C O N T R O L E   D E   L A   T R A C E  :
<
<
<        FONCTION :
<                      CE MODULE 'CCI' PERMET DE METTRE
<                    'ON' OU 'OFF' LA TRACE SUIVANT LA
<                    COMMANDE "!TRACE...".
<
<
<        NOTA :
<                      PAS DE MASQUAGE DES INTERRUPTIONS,
<                    POUR L'ACCES A 'SAVEX', CE SERAIT
<                    VRAIMENT SE COMPLIQUER POUR RIEN...
<
<
PTRAON:  EQU         $               < COMMANDE "!TRACE C ON" :
         LA          SAVEX           < ACCES A L'INDICATEUR DE CONTROLE,
         RBT         XBTROF          < ET ON AUTORISE LA TRACE...
         JMP         PTRA1           < VERS LA MISE EN PLACE...
PTRAOF:  EQU         $               < COMMANDE "!TRACE C OFF" :
         LA          MEMV            < (A)=LISTE DES INDICATEURS 'MEMV' :
         TBT         MEMXXX          < LA FONCTION EST-ELLE AUTORISEE ???
         JNC         PTRA2           < NON, ERREUR...
         LA          SAVEX           < ACCES A L'INDICATEUR DE CONTROLE,
         SBT         XBTROF          < ET INHIBITION DE LA TRACE...
<
< CONTROLE DE LA TRACE :
<
PTRA1:   EQU         $
         STA         SAVEX
<
< RETOUR :
<
PTRA3:   EQU         $
         RSR
<
< SORTIE EN ERREUR :
<
PTRA2:   EQU         $
         ADRI        XCCIER,X        < RETOUR EN ERREUR AU 'CCI'...
         JMP         PTRA3           < ET ON SORT...
         PAGE
         IF          OACTIV-EXIST,XEIF%8,,XEIF%8
<
<
<        V I S U A L I S A T I O N   D E   L ' A C T I V I T E   D U
<        S Y S T E M E   E N   M O Y E N N E   D E F I N I T I O N  :
<
<
<        FONCTION :
<                      LES  COMMANDES "!ACTIVITE ON" ET
<                    "!ACTIVITE OFF" PERMETTENT D'ACTIVER
<                    OU INHIBER LE DISPOSITIF DE VISUALI-
<                    SATION DE L'ACTIVITE DU SYSTEME SOUS
<                    LA FORME D'UNE MATRICE (RECEPTEUR/EMETTEUR)
<                    SUR LE SYSTEME DE TELEVISION NUMERIQUE
<                    MOYENNE DEFINITION.
<
<
<        D E S A C T I V A T I O N   D U   D I S P O S I T I F  :
<
<
PACOFF:  EQU         $
         LA          AACTIV
         RBT         XACTIV          < IL SUFFIT DE RENDRE PAIRE L'ADRESSE
                                     < DU SOUS-PROGRAMME 'ACTIV'...
<
< MISE EN PLACE DE L'INDICATEUR
< D'ACTIVATION/INHIBITION :
<
PACTI2:  EQU         $
         STA         AACTIV          < MISE A JOUR DU RELAI DU SOUS-PROGRAMME
                                     < 'ACTIV'...
<
< FAUT-IL LIBERER LA 'CDAJ' ???
<
XCDAGL:: VAL         K               < VALEUR DU MOT 'ACDAG' LORSQU'AUCUNE
                                     < COMMANDE "!CDAG" N'A ETE FRAPPEE,
XCDAGO:: VAL         XCDAGL)MFFFF    < VALEUR DU MOT 'ACDAG' LORSQU'UNE COMMAN-
                                     < DE "!CDAG" A ETE FRAPPEE, ET QUE DONC
                                     < UN UTILISATEUR S'EST ATTRIBUE LA 'CDA-
                                     < COMMUNE', QUI NE L'EST DONC PLUS ???!!!?
XCDAJL:: VAL         XCDAGL          < INDICATEUR 'CDAJ' LIBRE,
XCDAJO:: VAL         XCDAGO          < INDICATEUR 'CDAJ' OCCUPEE.
         TBT         XACTIV          < EST-CE "ON" OU "OFF" ???
         JC          PACTI4          < "ON", ON VIENT DONC DE S'APPROPRIER
                                     < LA 'CDAJ' POUR LE COMPTE DU SYSTEME...
         PSR         W               < "OFF",
         LRM         W
         WORD        ACDAJ5          < (W)=BASE LE VERROU D'ACCES A LA 'CDAJ',
         STZ         O,W             < ET ON LA LIBERE...
         IF          XCDAJO-K,XEIF%,,XEIF%
         IF          ATTENTION : LE 'STZ' EST IDIOT !!!
XEIF%:   VAL         ENDIF
         PLR         W               < RESTAURATION DE :
                                     < (W)=ADRESSE DE 'DCTESC'...
PACTI4:  EQU         $
<
< RETOUR AU 'CCI' :
<
PACTI3:  EQU         $
         RSR
<
<
<        A C T I V A T I O N   D U   D I S P O S I T I F  :
<
<
PACON:   EQU         $
<
< TEST D'AUTORISATION :
<
         LA          MEMV
         TBT         MEMXXX          < LES FONCTIONS DANGEREUSES SONT-ELLES
                                     < AUTORISEES ???
         JNC         PACTI1          < NON, L'ACTIVATION EST REFUSEE...
<
< TEST DE L'ETAT DU 'CBMJ' :
<
         BSR         ASMMK           < ON MASQUE LES INTERRUPTIONS, CAR EN
                                     < EFFET ON VA LIRE LE REGISTRE 'IM' PAR
                                     < UN 'XIMR' ; A NOTER QU'ON NE PEUT UTILI-
                                     < SER 'PIMMST' GENERE PAR 'PR1', CAR LE
                                     < BIT 'NIVCBJ' DE 'IM' A PU ETRE MODIFIE
                                     < A LA MAIN...
         LAI         MMOT            < AFIN DE TOUT MASQUER...
         XIMR        A               < LECTURE DE 'IM',
         PSR         A               < SAUVEGARDE,
         XIMR        A               < ET RESTAURATION...
         BSR         ASMDK           < ET ON PEUT ALORS DEMASQUER.
         PLR         A               < (A)=CONTENU DU REGISTRE 'IM' COURANT,
         TBT         NIVCBJ          < ALORS LE SYSTEME DE TELEVISION NUMERI-
                                     < QUE MOYENNE DEFINITION EST-IL ACCES-
                                     < SIBLE ???
         JC          PACTI1          < NON, IL EST MASQUE...
<
< ESSAYONS DE S'APPROPRIER LA 'CDAJ' :
<
         PSR         W
         LRM         W
         WORD        ACDAJ4          < (W)=BASE LE VERROU D'ACCES A LA 'CDAJ',
         LAI         XCDAJO
         XM          O,W             < ET ON TENTE DE S'APPROPRIER LA 'CDAJ' :
         PLR         W               < RESTAURE :
                                     < (W)=ADRESSE DE LA 'DCTESC'...
         IF          XCDAJO-K,XEIF%,,XEIF%
         IF          ATTENTION : LE 'JANE' QUI SUIT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JANE        PACTI1          < ET BIEN, LA 'CDAJ' EST DEJA OCCUPEE,
                                     < DONC "!ACTIVITE ON" EST REFUSE...
<
< ACTIVATION DU DISPOSITIF :
<
         LA          AACTIV          < OUI,
         SBT         XACTIV          < IL SUFFIT DE RENDRE IMPAIRE L'ADRESSE
                                     < DU SOUS-PROGRAMME 'ACTIV'...
         JMP         PACTI2          < VERS LA MISE A JOUR, ET LA SORTIE...
<
< SORTIE EN ERREUR :
<
PACTI1:  EQU         $
         ADRI        XCCIER,X        < POUR UN RETOUR EN ERREUR AU 'CCI'...
         JMP         PACTI3          < VERS LA SORTIE...
XEIF%8:  VAL         ENDIF
         PAGE
<
<
<        V I S U A L I S A T I O N   D E   L ' A C T I V I T E   D U
<        S Y S T E M E   E N   B A S S E   D E F I N I T I O N  :
<
<
<        FONCTION :
<                      LES COMMANDES "!ACTIVITE H",
<                    "!ACTIVITE R/V/B"
<                    PERMETTENT SOIT D'INHIBER ("H") LE
<                    DISPOSITIF, SOIT D'ACTIVER LA VISUALI-
<                    SATION DE PAGE DE 4K DE LA MEMOIRE
<                    "MAITRE" (0-64K) SUR LE SYSTEME DE
<                    TELEVISION NUMERIQUE SUR L'UN DES
<                    3 CANAUX "R"/"V"/"B" AU CHOIX...
<                      ATTENTION : EN ADRESSANT LE
<                    DERNIER MOT DE LA MEMOIRE MAITRE,
<                    ON REFERENCE EN FAIT 'BMEMQ' (VOIR
<                    'IDLE')...
<
<
<        ARGUMENTS :
<                    (B)=NUMERO DU PROCESSEUR DE VISUALISATION ('TVPOFF',
<                        'TVPR', 'TVPV' OU 'TVPB'),
<                    (W)=ADRESSE DE 'DCTESC',
<                    (VALESC)=ADRESSE DE LA PAGE A VISUALISER.
<                             SI CELLE-CI REFERENCE LE DERNIER MOT
<                             DE LA MEMOIRE, ELLE EST REMPLACEE PAR
<                             'BMEMQ', PERMETTANT AINSI INDIRECTEMENT
<                             LA VISUALISATION D'UNE ZONE DE MEMOIRE
<                             QUELCONQUE...
<
<
PACTV:   EQU         $
         IF          NSPDKU-NSPSER,XEIF%,,
         IF          ATTENTION : IL FAUT QUE 'DKU' SOIT ININTERRUPTIBLE
         IF          PAR LES NIVEAUX DE SERVICE, AFIN QUE CE DISPOSITIF
         IF          FONCTIONNE CORRECTEMENT !!!
XEIF%:   VAL         ENDIF
<
< TEST D'AUTORISATION :
<
         LA          MEMV
         TBT         MEMXXX          < LES FONCTIONS DANGEREUSES SONT-ELLES
                                     < AUTORISEES ???
         JNC         PACTV1          < NON, L'ACTIVATION EST REFUSEE...
<
< TEST DE L'ACCESSIBILITE :
<
         LA          ETASYS
         TBT         TVEXIS          < LE SYSTEME BASSE-DEFINITION EST-IL
                                     < OPERATIONNEL ???
         JNC         PACTV1          < NON, ERREUR...
<
< MISE EN PLACE DE LA FONCTION :
<
         LA          VALESC-DCTESK,W < (A)=ADRESSE DE LA PAGE MEMOIRE A VISUA-
                                     <     LISER...
XWOR%1:  VAL         -DADR
XWOR%2:  VAL         LK>DADR*LSPACE=XWOR%1
         CPI         BIT>XWOR%2-Z    < EST-CE LE DERNIER MOT DE LA MEMOIRE
                                     < MAITRE ???
         JNE         PACTV2          < NON...
         LRM         A               < OUI :
         WORD        BMEMQ           < ON PREND ALORS COMME ADRESSE CELLE DU
                                     < BUFFER DE COPIE DE 'IDLE'...
PACTV2:  EQU         $
         XR          A,B             < (A)=NUMERO DU PROCESSEUR DE VISUALI-
                                     <     TION,
                                     < (B)=ADRESSE DE LA PAGE A VISUALISER.
XWOR%1:  VAL         TVSIMU=K
         IF          XWOR%1-K,,XEIF%,
         SLLS        XWOR%1          < CADRAGE DU NUMERO DE PROCESSEUR,
XEIF%:   VAL         ENDIF
         PSR         W               < SAUVEGARDE DE L'ADRESSE DE 'DCTESC'.
         CALL        #SISP CMS5 W ZERO#
         BSR         ASMMK           < MASQUAGE DES INTERRUPTIONS...
         STA         TVCTRL-ZERO,W   < MISE EN PLACE DU NUMERO DU PROCESSEUR
                                     < DE VISUALISATION (SI "R", "V" OU "B"),
                                     < OU DESACTIVATION DU DISPOSITIF (SI
                                     < 'TVPOFF'),
         STB         TVMEME-ZERO,W   < ET MISE EN PLACE DE L'ADRESSE DE LA
                                     < PAGE A VISUALISER...
         BSR         ASMDK           < DEMASQUAGE DES INTERRUPTIONS,
         PLR         W               < RESTAURE :
                                     < (W)=ADRESSE DE 'DCTESC'.
<
< RETOUR :
<
PACTV3:  EQU         $
         RSR
<
< RETOURS EN ERREUR AU 'CCI' :
<
PACTV1:  EQU         $
         ADRI        XCCIER,X        < POUR UN RETOUR EN ERREUR AU 'CCI',
         JMP         PACTV3          < VERS LA SORTIE...
                                     < REFUSEE...
         PAGE
<
<
<        M O D I F I C A T I O N   D E   L A   Z O N E   D E   M E M O I R E
<        Q U E L C O N Q U E   C O P I E E   P A R   L ' I D L E  :
<
<
<        FONCTION :
<                      'IDLE' COPIE EN PERMANENCE
<                    UNE ZONE DE MEMOIRE QUELCONQUE
<                    DANS UN BUFFER RESIDENT 'BMEMQ'.
<                    LA COMMANDE "!ACTIVITE M" PERMET DE
<                    MODIFIER LA DADR-ADRESSE DE LA
<                    ZONE DE MEMOIRE QUELCONQUE...
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DE LA 'DCTESC'.
<
<
PACTM:   EQU         $
<
< VALIDATION :
<
         LA          MEMV
         TBT         MEMXXX          < LES FONCTIONS DANGEREUSES SONT-ELLES
                                     < AUTORISEES ???
         JNC         PACTM1          < NON, LA COMMANDE EST REFUSEE !!!
<
< EXECUTION :
<
         LA          VALESC-DCTESK,W < OUI,
                                     < (A)=DADR-ADRESSE DE LA ZONE MEMOIRE
                                     <     QUE L'ON SOUHAITE ATTEINDRE,
         PSR         W
         LRM         W
         WORD        AMEMQ           < (W)=ADRESSE OU METTRE LA DADR-ADRESSE,
         STA         O,W             < ET ON MODIFIE AINSI 'IDLE'...
         PLR         W
<
< RETOUR AU 'CCI' :
<
PACTM2:  EQU         $
         RSR
<
< RETOUR EN ERREUR :
<
PACTM1:  EQU         $
         ADRI        XCCIER,X        < POUR PROVOQUER UN RETOUR EN ERREUR...
         JMP         PACTM2          < ET VERS LA SORTIE...
         PAGE
<
<
<        M A J   D E   L A   T A B L E   D E   T A B U L A T I O N  :
<
<
<        ARGUMENT :
<                    (B)=CONSTANTE DE TRANSLATION POUR
<                        L'UNE DES 2 TABLES D'INITIALI-
<                        SATION DE 'HDLSUR'.
<                    (W)=ADRESSE DCT(ESCLAVE).
<
<
<        R A Z   D E   A T A B U L  :
<
<
INITAB:  EQU         $
         PSR         X,L,W           < SAVE INDEX COURANT DE LA
                                     < GRAMMAIRE DU CCI, L'ADRESSE DE LA 'DCT'
                                     < DE SERVICE ET CELLE DE 'DCTESC'...
<
< RECUPERATION DE LA DCT DE LA VISU :
<
         LXI         PHIN
         LBY         &TASSGN-DCTESC,W
         ANDI        XNVPF)MOCD
         LR          A,X             < (X)=NSPIN.
         BSR         ACADCT          < RENVOIE (A)=@DCTIN.
         LAD         VAR+ATABUL
         STA         VALESC-DCTESK,W < SAVE @ATABUL DANS 'VALESC',
                                     < POUR USAGE ULTERIEUR.
<
< INITIALISATION DE LA TABLE
< DE TABULATION DE 'PHIN' :
<
         LRM         W
         WORD        VARSUR+TABSUR   < (W)=ADRESSE DE LA LISTE D'INITIALISATION
                                     <     DE LA TABULATION STANDARD,
         ADR         B,W             < ON PEUT AINSI ATTEINDRE UNE LISTE DE
                                     < REMISE A 0 SI :
                                     < (B)=TABSU0-TABSUR...
         LXI         LCCI/NBITMO
         IF          LCCI/NBITMO-LTATAB,,XEIF%,
         IF          ATTENTION : LA LONGUEUR DES LISTES DE
         IF          TABULATION EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
Z306:    EQU         $
         LA          LTATAB-D,W      < (A)=VALEUR COURANTE D'INITIALISATION,
         STA         &VAR+ATABUL     < ON INITIALISE (AVEC LA TABULATION STAN-
                                     < DARD, OU LA REMISE A 0),
         ADRI        -D,W            < ET PASSAGE A L'ENTREE SUIVANTE...
         JDX         Z306
         PLR         X,L,W
         RSR
<
<
<        D E F I N I T I O N   D ' U N
<        D E B U T   D E   Z O N E  :
<
<
<        DEBUT DE ZONE :
<                    IL EST PRECISE PAR UN "1" OU UN "/"
<                    TAPE PAR L'UTILISATEUR ; ALORS QUE
<                    LE CONTENU DE LA ZONE EST DEFINI PAR
<                    DES "0" OU DES " ".
<
<
ZONTAB:  EQU         $
         PSR         X               < SAVE INDEX GRAMMAIRE CCI.
         LA          VALESC-DCTESK,W < RESTAURE (A)=@ATABUL.
         LX          VAR+XBUFGR      < (X)=INDEX COURANT DU BUFFER CCI
         ADRI        -D,X            < CAR CCI A DEJA FAIT +1 SUR
                                     < L'INDEX DU BUFFER CCI ; ON A :
                                     < (X)=INDEX DU DEBUT DE LA ZONE.
         LYI         FONSB1          < FONCTION SET BIT A 1.
         BSR         ATMOBT          < MISE A 1 DU BIT DE DEBUT
                                     < DE ZONE.
         PLR         X               < RESTAURE INDEX GRAMMAIRE CCI.
         RSR
         PAGE
<
<
<        C O M M A N D E   D ' A U T O R I S A T I O N
<        E T   D ' I N H I B I T I O N   D E
<        L ' E C H O   I M M E D I A T   E N
<        T E M P S   P A R T A G E  :
<
<
<        FONCTION :
<                      CES 2 MODULES SONT REFERENCES
<                    PAR LA GRAMMAIRE DU 'CCI' POUR
<                    AUTORISER/INHIBER (ETAT INITIAL)
<                    L'ECHO IMMEDIAT DES COMMANDES
<                    DU 'CCI' (VOIR "!ECHO").
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DE 'DCTESC'.
<
<
PECHO:   EQU         $
         LA          IDDESC-DCTESC,W
         SBT         IDESC9          < AUTORISATION...
PECHO1:  EQU         $
         STA         IDDESC-DCTESC,W
         RSR
PECHON:  EQU         $
         LA          IDDESC-DCTESC,W
         RBT         IDESC9          < INHIBITION...
         JMP         PECHO1          < ET C'EST TOUT (JE FATIGUE POUR LES
                                     < COMMENTAIRES...).
         NLS
         PAGE
<
<
<        M O D I F I C A T I O N   D U   T O M   E D   E S S A P  :
<
<
<        FONCTION :
<                      LA COMMANDE !Z
<                    PERMET DE MODIFIER LE CARACTERE 'CTRLC' DU
<                    TOM ED ESSAP, ET AINSI MODIFIER CELUI-CI
<                    DYNAMIQUEMENT, ET MEME BLOQUER CARREMENT
<                    L'ACCES A ":SYS" ET ":JFC" EN METTANT UN
<                    CODE INEXISTANT...
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DE 'DCTESC',
<                    VALESC=CODE CHOISI...
<
<
ZPASS:   EQU         $
         LA          VALESC,W        < (A)=CODE CHOISI POUR 'CTRLC',
         JAL         ZPASS1          < ERREUR...
         CPI         MOCD            < TIENT-IL SUR UN OCTET ???
         JG          ZPASS1          < NON, ERREUR...
         PSR         X,L
         LXI         NSPASS
         BSR         ACADCT          < (L)=ADRESSE MOT DE 'CTRLC'...
         LA          VALESC,W        < (A)=CODE CHOISI QUE L'ON SAIT ETRE
                                     <     VALIDE MAINTENANT...
         STBY        O,L             < ET ON L'INSERE DANS LE TOM ED ESSAP ;
                                     < ON NOTERA QUE LE CODE '03 RESTAURE LE
                                     < TOM ED ESSAP INITIAL ('KETX')...
         PLR         X,L
ZPASS2:  EQU         $
         RSR                         < ET C'EST TOUT...
<
< SORTIES EN ERREUR :
<
ZPASS1:  EQU         $
         ADRI        XCCIER,X        < ACCES AU NOEUD D'ERREUR...
         JMP         ZPASS2          < ET ON SORT...
         PAGE
<
<
<        C H E V A L   D E   T R O I E  :
<
<
<        FONCTION :
<                      CE MODULE TRANSCODE SUIVANT
<                    LA CONSTANTE MAGIQUE LE MESSAGE
<                    ENTRE PAR "!CMS" ENTRE "!L :SYS"
<                    ET LE TOM ED ESSAP ; CETTE METHODE
<                    PERMET DE VERIFIER ASSEZ SUREMENT
<                    QUE C'EST BIEN DIRECTEMENT AVEC
<                    LE 'CCI' QUE L'ON DIALOGUE, ET NON
<                    PAS AVEC UN PROGRAMME UTILISATEUR
<                    QUI SIMULERAIT SUR CETTE VISU
<                    TOUTE LA PROCEDURE DE DIALOGUE AFIN
<                    DE PRELEVER LE TOM ED ESSAP !!!
<
<
<        ARGUMENTS :
<                    (L)=ADRESSE DE LA 'DCT' DE SERVICE.
<                    (XBUFGR)=INDEX COURANT DU BUFFER APRES "!CMS".
<
<
HORSE:   EQU         $
         PSR         B,X,W           < SAUVEGARDES ESSENTIELLES...
<
< BOUCLE DE CHIFFRAGE :
<
HORSE2:  EQU         $
         BSR         ACARAC          < (A)=CARACTERE COURANT DE 'BUFESC' :
         JE          HORSE1          < C'EST UN , ALLONS RE-EMETTRE LE
                                     < MESSAGE TRANSCODE...
         LX          VAR+XBUFGR      < NON, C'EST UN CARACTERE NORMAL,
         ADRI        -I,X            < REVENONS DESSUS, AFIN DE LE CODER...
                                     < (X)=INDEX DU CARACTERE A CODER...
         LBI         K               < PAR PURE HYGIENE...
         SCLD        NBITMO-NBITCX   < SAUVEGARDE DU PREMIER CHIFFRE HEXA-
                                     < DECIMAL DU CARACTERE DANS 'B',
         BSR         ACHIFR          < ET CHIFFRAGE DU DEUXIEME CHIFFRE HEXA-
                                     < DECIMAL DU CARACTERE COURANT,
         SCRD        NBITMO-NBITCX   < ET RECONSTITUTION D'UN CARACTERE CODE
                                     < QUI NE DIFFERE QUE PAR SON DEUXIEME
                                     < CHIFFRE HEXA-DECIMAL DU CARACTERE ENTRE..
         STBY        &VAR+ABUFGR     < ET RE-INSERTION DU CARACTERE COURANT
                                     < CHIFFRE DANS LE BUFFER,
         JMP         HORSE2          < VERS LE CARACTERE SUIVANT...
<
< EDITION DU MESSAGE CODE :
<
HORSE1:  EQU         $
         LAD         VAR+DEMCCI
         LR          A,W             < (W)=ADRESSE DE LA DEMANDE D'EMISSION.
                                     <     (ELLE A ETE CORRECTEMENT POSITIONNEE
                                     <     LORS DE L'ECHO DE "!CMS")
         BSR         ACHAND          < ENVOI DE "!CMS" CODEE...
         BSR         ACHANW          < ET ATTENTE DE FIN D'OPERATION...
<
< GESTION DES CONNEXIONS MATRICIELLES :
<
         LA          ARGDEM+OPDEM
         ANDI        MKOPDM          < (A)=FONCTION COURANTE, ET
                                     < (W)=ADRESSE DE LA DEMANDE COURANTE...
         SVC         SVCM8           < VERS LA DUPLICATION EVENTUELLE DE LA
                                     < DEMANDE (W) SUR LES PERIPHERIQUES
                                     < CONNECTES AU PERIPHERIQUE COURANT...
<
< SORTIE :
<
         PLR         B,X,W           < RESTAURATIONS,
         RSR                         < ET RETOUR SANS TOUCHER A L'INDEX
                                     < DE LA GRAMMAIRE 'CCI' (X)...
         LST
         PAGE
<
<
<                    A U T O R I S A T I O N   E T
<        I N H I B I T I O N   D E S   F O N C T I O N S
<                    D A N G E R E U S E S  :
<
<
<        FONCTION :
<                      CE MODULE REFERENCE PAR "!R"
<                    SOUS 'CCI', PERMET QUELQUE SOIT
<                    LE MODE, QUELQUE SOIT L',...
<                    D'INHIBER LES FONCTIONS DANGEREUSES...
<                    ET DEPUIS PEU (SOUS ":SYS" UNIQUE-
<                    MENT) DE LES AUTORISER PAR LA
<                    COMMANDE "!R DANGER" ;
<                    BIEN SUR C'EST DANGEREUX, MAIS
<                    FINALEMENT MOINS QUE D'ALLER
<                    BRICOLER AU PUPITRE...
<
<
PDANGE:  EQU         $               < ENTRY D'AUTORISATION :
         BSR         ASMMK           < M A S Q U A G E   I N T E R R U P T S...
         LA          MEMV
         SBT         MEMXXX          < ON PREPARE L'AUTORISATION...
         JMP         PDANG1          < VERS LA MISE A JOUR...
PINHIB:  EQU         $               < ENTRY D'INHIBITION :
         BSR         ASMMK           < M A S Q U A G E   I N T E R R U P T S...
         LA          MEMV
         RBT         MEMXXX          < ON PREPARE L'INHIBITION...
PDANG1:  EQU         $               < MISE A JOUR DE 'MEMV' :
         STA         MEMV            < ON MET A JOUR 'MEMV', ET :
         BSR         ASMDK           < D E M A S Q U A G E...
         RSR                         < PAS MECHANT...
         PAGE
<
<
<        G E S T I O N   D E   L A   ' C D A '  :
<
<
<        PHILOSOPHIE :
<                      LA 'CDA' EST ATTACHEE A CHAQUE UTILISATEUR
<                    PAR L'INTERMEDIAIRE DE SA 'DCTESC' ET DU
<                    SCHEDULER QUI POSITIONNE 'OCDA' ET 'ECDA'.
<                    ON DISTINGUE 3 TYPE DE 'CDA' :
<                    1 - LA 'CDA-COMMUNE' : DONNEE PAR 'AOCDA' ET
<                    'AECDA' ET QUI EST COMMUNE A TOUS,
<                    OU PRIVEE (?!???!?!) SI LA COMMANDE
<                    "!CDAG" EST UTILISEE, AUQUEL CAS
<                    TOUT AUTRE ACCES A LA 'CDA-COMMUNE'
<                    PAR UN AUTRE UTILISATEUR SE SOLDERA
<                    PAR UNE TRAPPE (VOIR 'HDLSCH')...
<                    2 - LA 'CDA-PRIVEE' : EST UNE EXTENSION DE
<                    L'ESPACE MEMOIRE UTILISATEUR, ET CORRESPOND
<                    LORSQUE LE SWAPPING A LIEU SUR 'DKS' AU ZONE
<                    DE SIMULATION DU SWAPPING EN MEMOIRE ; A NOTER
<                    QUE SUIVANT L'IDESC, DES TRAPPES DE VIOLATION
<                    MEMOIRE POURRONT AVOIR LIEU SUIVANT QUE LA
<                    ZONE ADRESSEE EXISTE OU NON...
<                    3 - LA 'CDA-TELEVISION' : QUI CORRESPOND A
<                    LA MEMOIRE DE RAFRAICHISSEMENT DE LA TELEVISION ;
<                    ON PEUT AINSI MODIFIER MOT A MOT UNE IMAGE...
<                    ELLE EST APPELEE AUSSI 'CDA' 'BASSE-
<                    DEFINITION'...
<                    4 - LA 'CDA-TELEVISION' DE MOYENNE
<                    DEFINITION QUI PERMET D'ATTEINDRE
<                    LE NOUVEL IMAGEUR 512*512...
<
<
<        FONCTION :
<                      CINQ COMMANDES SONT DISPONIBLES :
<                    !CDA POUR LA 'CDA-COMMUNE' ET "PARTAGEABLE" (!!??!),
<                    !CDAG POUR LA 'CDA-COMMUNE' MAIS "PRIVEE" (!??!?!),
<                    !CDAP POUR LA 'CDA-PRIVEE',
<                    !CDAI POUR LA 'CDA-IMAGE' BASSE-DEFINITION,
<                    !CDAJ POUR LA 'CDA-IMAGE' MOYENNE-DEFINITION.
<
<
<        ACCES A LA 'CDA' COURANTE :
<                      L'UTILISATEUR PEUT A TOUT MOMENT
<                    CONNAITRE L'ADRESSE DE SA 'CDA', ET
<                    DONC SA LONGUEUR A L'AIDE DE LA
<                    FONCTION '1E15, UTILISEE 2 FOIS,
<                    LA PREMIERE AVEC (A)=AOCDA ('18),
<                    LA SECONDE AVEC (A)=AECDA ('19), LE
<                    RESULTAT ETANT RETOURNE DANS 'B'...
<
<
<        EXCLUSION DES 'CDA' :
<                      EN REGLE GENERALE, IL EST
<                    IMPOSSIBLE DE POSSEDER SIMUL-
<                    TANEMENT PLUSIEURS 'CDA' (PAR
<                    EXEMPLE 'CDAI' ET 'CDAJ') ;
<                    IL Y A CEPENDANT UNE EXCEPTION
<                    A CETTE REGLE : EN EFFET, LA
<                    COMMANDE "!CDAG" NE PEUT ETRE
<                    ANNULEE QUE PAR "!CDA", "!CDAP"
<                    OU ENFIN "!F" ; CECI A ETE IN-
<                    TRODUIT AFIN QUE LORSQU'ON
<                    POSSEDE LA 'CDAG', ON PUISSE
<                    MALGRE TOUT ATTEINDRE LES IMA-
<                    GEURS SANS POUR CELA RISQUER DE
<                    PERDRE LES INFORMATIONS CONTE-
<                    NUES DANS LA 'CDAG', DE PLUS IL
<                    EST NECESSAIRE DE LE FAIRE POUR
<                    'CDAI' ET 'CDAJ' A CAUSE DE LA
<                    COMMANDE "!CDAI=I/J"...
<
<
PCDA:    EQU         $
<
<
<        ' C D A - C O M M U N E   P R I V E E '  :
<
<
PCDAG:   EQU         $
         LA          IDDESC-DCTESC,W
         TBT         IDESC5          < N'A-T'ON PAS DEJA LA 'CDAG' ???
         JC          PCDA20          < OUI, DONC ON VA LA GARDER, MAIS EN
                                     < REPOSITIONNANT LES ADRESSES 'CDESCO'
                                     < ET 'CDESCE', AU CAS OU LA 'CDAI' OU
                                     < LA 'CDAJ' FUSSENT UTILISEES AU PREA-
                                     < LABLE...
         PSR         W
         LRM         W
         WORD        ACDAG1          < (W)=PERMET D'ATTEINDRE LE MOT 'ACDAG'
                                     <     DE LA 'DCTSCH',
         LAI         XCDAGO
         XM          O,W             < ALORS, LA 'DCA-COMMUNE' EST-ELLE DEJA
                                     < OCCUPEE PAR UNE COMMANDE "!CDAG" ???
         PLR         W
         JANE        APCDA2          < OUI, DONC LA COMMANDE "!CDAG" NE PEUT
                                     < ETRE ACCEPTEE...
<
< OK, MAINTENANT : (ACDAG)=XCDAGO,
< ET L'UTILISATEUR COURANT POSSEDE
< LA 'CDA-COMMUNE' JUSQU'A CE QU'IL
< LA RENDE PAR UNE COMMANDE "!CDA",
< "!CDAP", OU BIEN EN FAISANT
< UN LOG-OUT...
<
         IF          XCDAGO-K,XEIF%,,XEIF%
         IF          ATTENTION : LE TEST 'JANE' CI-DESSUS EST IDIOT !!!
XEIF%:   VAL         ENDIF
         LA          IDDESC-DCTESC,W
         SBT         IDESC5          < ET ON MEMORISE DANS 'DCTESC' CETTE
                                     < ATTRIBUTION PAR "!CDAG"...
         STA         IDDESC-DCTESC,W
PCDA20:  EQU         $               < CAS OU L'ON POSSEDE DEJA LA 'CDAG'...
         LRM         A,B
         WORD        AOCDA3          < SUR LA
         WORD        AECDA3          < 'CDA-COMMUNE'...
         JMP         PCDA5           < VERS LA MISE EN PLACE DES ADRESSES...
<
<
<        ' C D A - C O M M U N E   P A R T A G E A B L E '  :
<
<
PCDAIN:  EQU         $
         LRM         A,B
         WORD        AOCDA2          < SUR LA
         WORD        AECDA2          < 'CDA-COMMUNE'...
<
< MISE EN PLACE DES ADRESSES, ET RETOURS :
<
PCDA1:   EQU         $               < CAS DE "!CDA" ET "!CDAP"...
<
<        ON A ICI :
<                    (A)=ADRESSE DE DEBUT DE LA 'CDA',
<                    (B)=SON ADRESSE DE FIN.
<
         PSR         A,W
         LA          IDDESC-DCTESC,W
         TBT         IDESC5          < MAIS CET UTILISATEUR QUI A FRAPPE "!CDA",
                                     < "!CDAI" OU "!CDAP" N'AVAIT-IL PAS FRAPPE
                                     < "!CDAG" AU PREALABLE ???
         RBT         IDESC5          < DE TOUTE FACON, ON EFFACE CET APPEL...
         STA         IDDESC-DCTESC,W
         JNC         PCDA6           < NON, PAS DE "!CDAG" ANTERIEUR...
         LRM         W               < OUI,
         WORD        ACDAG2          < (W)=ADRESSE DU MOT 'ACDAG' DE 'DCTSCH',
         IF          XCDAGL-K,,XEIF%,
         IF          ATTENTION : CE QUI VA SUIVRE EST IDIOT !!!
XEIF%:   VAL         ENDIF
         STZ         O,W             < LIBERONS LA 'CDAG'...
PCDA6:   EQU         $
         PLR         A,W
PCDA5:   EQU         $               < CAS DE "!CDAG", "!CDAI" ET "!CDAJ"...
         PSR         A,W
         TBT         BMCDAJ          < EST-CE LA 'CDAJ' QUI EST DEMANDEE ???
         JC          PCDA8           < OUI, ON NE REGARDE PAS SI ON L'AVAIT
                                     < DEJA, AFIN DE NE PAS LA RENDRE...
         LA          CDESCO-DCTESC,W < ACCES A LA 'CDA' COURANTE DE CET
                                     < UTILISATEUR :
         TBT         BMCDAJ          < NE SERAIT-CE PAS LA 'CDAJ' ???
                                     < (CARACTERISEE PAR LE BIT 'BMCDAJ' DANS
                                     < DANS TOUTES SES DADR-ADRESSES)
         JNC         PCDA8           < NON, RIEN A FAIRE...
         LRM         W               < OUI,
         WORD        ACDAJ2          < (W)=ADRESSE DU MOT 'ACDAJ' DE 'DCTSCH',
                                     <     QUI PERMET L'APPROPRIATION...
         IF          XCDAJL-K,,XEIF%,
         IF          ATTENTION : LE 'STZ' QUI SUIT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         STZ         O,W             < LIBERONS LA 'CDAJ'...
PCDA8:   EQU         $               < CAS OU L'ON N'A PAS LA 'CDAJ', OU BIEN
                                     < OU ON LA DEMANDE PRESENTEMENT...
         PLR         A,W
<
< MISE EN PLACE DE 'CDESCO'/'CDESCE' :
<
         STA         CDESCO-DCTESC,W < MISE EN PLACE
         STB         CDESCE-DCTESC,W < DANS LA 'DCTESC',
PCDA3:   EQU         $               < RETOUR EN ERREUR...
         RSR                         < RETOUR...
<
<
<        ' C D A - I M A G E '  B A S S E - D E F I N I T I O N  :
<
<
PCDAIM:  EQU         $
         LRM         A,B
         WORD        MEMTV0          < SUR LA
         WORD        MEMTVR-Z        < 'CDA-TELEVISION'...
         JMP         PCDA5           < VERS LA MISE EN PLACE DES ADRESSES...
                                     < (EN CONSERVANT LA 'CDAG' SI ON LA
                                     < POSSEDE DEJA...)
<
<
<        ' C D A - I M A G E '   M O Y E N N E - D E F I N I T I O N  :
<
<
PCDAJM:  EQU         $
<
< TEST DE L'ETAT DU 'CBMJ' :
<
         BSR         ASMMK           < ON MASQUE LES INTERRUPTIONS, CAR EN
                                     < EFFET ON VA LIRE LE REGISTRE 'IM' PAR
                                     < UN 'XIMR' ; A NOTER QU'ON NE PEUT UTILI-
                                     < SER 'PIMMST' GENERE PAR 'PR1', CAR LE
                                     < BIT 'NIVCBJ' DE 'IM' A PU ETRE MODIFIE
                                     < A LA MAIN...
         LAI         MMOT            < AFIN DE TOUT MASQUER...
         XIMR        A               < LECTURE DE 'IM',
         PSR         A               < SAUVEGARDE,
         XIMR        A               < ET RESTAURATION...
         BSR         ASMDK           < ET ON PEUT ALORS DEMASQUER.
         PLR         A               < (A)=CONTENU DU REGISTRE 'IM' COURANT,
         TBT         NIVCBJ          < ALORS LE SYSTEME DE TELEVISION NUMERI-
                                     < QUE MOYENNE DEFINITION EST-IL ACCES-
                                     < SIBLE ???
         JC          PCDA2           < NON, IL EST MASQUE, DONC "!CDAJ..."
                                     < EST REFUSEE...
<
< CALCUL DE LA TRANSLATION
< DE LA PREMIERE PAGE VERS
< LA PAGE DEMANDEE :
<
         LA          VALESC-DCTESK,W < (A)=NUMERO DE LA PAGE DEMANDEE,
         SLLS        LK>DADR*IMCDAJ=K
         LR          A,Y             < (Y)=TRANSLATION EN 'DADR'-MOTS DE LA
                                     <     PAGE DEMANDEE PAR RAPPORT A LA
                                     <     PREMIERE,
         LA          VALESC-DCTESK,W
         SCLS        LK>DADR*IMCDAJ=K
         CPR         A,Y             < LE 'SLLS' ET LE 'SCLS' DOIVENT DONNER
                                     < LE MEME RESULTAT S'IL N'Y A PAS DE-
                                     < BORDEMENT, C'EST-A-DIRE SI L'ARGUMENT
                                     < 'VALESC' EST BON...
         JNE         PCDA2           < ET BIEN NON, IL EST TROP GRAND...
<
< TENTATIVE D'APPROPRIATION DE LA 'CDAJ' :
<
         LA          CDESCO-DCTESC,W < ACCES A LA 'CDA' COURANTE DE CET
                                     < UTILISATEUR :
         TBT         BMCDAJ          < NE SERAIT-CE PAS DEJA LA 'CDAJ' ???
                                     < (CARACTERISEE PAR LE BIT 'BMCDAJ' DANS
                                     < DANS TOUTES SES DADR-ADRESSES)
         JC          PCDA11          < OUI, ON NE SE LA REAPPROPRIE PAS...
         PSR         W               < NON, ON VA TENTER :
         LRM         W
         WORD        ACDAJ1          < (W)=PERMET D'ATTEINDRE LE MOT 'ACDAJ'
                                     <     DE 'DCTSCH' QUI PERMET L'ALLOCATION
                                     <     UNIQUE DE 'CDAJ'...
         LAI         XCDAJO          < (A)=ETAT D'OCCUPATION DE 'CDAJ',
         XM          O,W             < ET L'ON TENTE DE S'APPROPRIER 'CDAJ' :
         PLR         W
APCDA2:  JANE        PCDA2           < ET BIEN C'EST IMPOSSIBLE, ELLE EST DEJA
                                     < OCCUPEE ; ON LA LAISSE A CELUI QUI L'A...
                                     < (NOTONS QUE 'XM' N'A PAS CHANGE LA
                                     < VALEUR DU CONTENU DE 'ACDAJ'...)
                                     < (ET RELAI...)
         IF          XCDAJO-K,XEIF%,,XEIF%
         IF          ATTENTION : LE 'JANE' QUI PRECEDE EST IDIOT !!!
XEIF%:   VAL         ENDIF
PCDA11:  EQU         $
<
< OK, ON A LA 'CDAJ',
< CALCULONS L'ADRESSE
< DE LA PAGE DESIREE :
<
         LRM         A,B
         WORD        MCDAJO          < (A)=ADRESSE DE DEBUT DE LA PREMIERE
                                     <     PAGE,
         WORD        MCDAJE          < (B)=ADRESSE DE FIN DE LA PREMIERE PAGE.
         ADR         Y,A             < TRANSLATION SUR
         ADR         Y,B             <                 LA PAGE DEMANDEE,
         IF          BMCDAJ-BITSIG,,XEIF%,
         IF          ATTENTION : LES TESTS SUIVANTS SONT MAUVAIS !!!
XEIF%:   VAL         ENDIF
         CPZR        B               < VALIDONS LA TRANSLATION (Y) PAR LE TEST
                                     < DE L'ADRESSE DE FIN :
         JGE         PCDA10          < ERREUR, L'ADRESSE REPASSE PAR 0 ; L'AR-
                                     < GUMENT 'VALESC' EST TROP GRAND...
         JAL         PCDA5           < OK, VERS LA MISE EN PLACE DES ADRESSES...
                                     < (EN CONSERVANT LA 'CDAG' SI ON LA
                                     < POSSEDE DEJA...)
                                     < (L'ADRESSE DE DEBUT EST BONNE, PUISQUE
                                     < NEGATIVE, CF. 'BMCDAJ'...)
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT L'ADRESSE DE
<                    DEBUT PEUT ETRE BONNE, ALORS QUE
<                    CELLE DE FIN EST MAUVAISE !!!
<
PCDA10:  EQU         $               < SORTIE EN ERREUR, ALORS QUE LA 'CDAJ'
                                     < A ETE ALLOUEE A CET UTILISATEUR...
         PSR         W
         LRM         W               < OUI,
         WORD        ACDAJ3          < (W)=ADRESSE DU MOT 'ACDAJ' DE 'DCTSCH',
                                     <     QUI PERMET L'APPROPRIATION...
         IF          XCDAJL-K,,XEIF%,
         IF          ATTENTION : LE 'STZ' QUI SUIT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         STZ         O,W             < ET ON LIBERE LA 'CDAJ'...
         PLR         W
         JMP         PCDA2           < ET ENFIN, SORTIE EN ERREUR...
<
<
<        ' C D A - P R I V E E '  :
<
<
PCDAP:   EQU         $
         LA          IDESC-DCTESC,W
         ANDI        MKIDES          < (A)='IDESC' DE L'UTILISATEUR...
         CP          NUSEP1          < AUTORISE ???
         JGE         PCDA2           < NON, IL N'A PAS DE 'CDAP' !!!
<
<        NOTA :
<                      DORENAVANT, LA COMMANDE "!CDAP"
<                    EST COMPATIBLE AVEC UN SWAPPING
<                    SUR 'PR1' ; EN EFFET LORS DE LA
<                    SELECTION DE L'ORGANE DE SWAPPING
<                    LORS DE L'INITIALISATION DU SWAPPING
<                    OUT, SI LA 'CDA' COURANTE DE L'UTI-
<                    LISATEUR EST LA "!CDAP", ON FORCE A
<                    PRIORI 'DKS'.
<                      DE PLUS, CELA N'EST PAS DANGEREUX
<                    DE FAIRE CELA ICI, CAR EN EFFET
<                    LORSQU'ON EXECUTE CE CODE ON EST
<                    SWAPPE OUT ET CE QUI VA SUIVRE EST
<                    UN SWAPPING IN QUI UTILISE OBLIGA-
<                    TOIREMENT L'ORGANE DE SWAPPING OUT
<                    PRECEDENT...
<
         LA          DEMSWP-DCTESC+T+ASDEM,W
         SB          ASYS            < OUI, ACCES AU DEPLACEMENT DE L'UTILI-
                                     < SATEUR DANS LES ZONES DE SWAPPING,
XWOR%2:  VAL         XXXMOY
XWOR%1:  VAL         TZSWAP/XWOR%2   < PARCEQUE TROP GRAND POUR UN 'ADRI'...
         IF          XWOR%1*XWOR%2-TZSWAP,,XEIF%,
         IF          ATTENTION : 'TZSWAP' N'EST PAS DIVISIBLE PAR 2 !!!
XEIF%:   VAL         ENDIF
         DO          XWOR%2*M
         ADRI        -XWOR%1,A       < (A)=PREMIERE ADRESSE ACCESSIBLE.
         LR          A,B             < ET SAUVEGARDE DANS 'B'...
         PSR         X,L
         LXI         NSPPR1
         BSR         ACADCT          < (A)=(L)=ADRESSE DE 'DCTPR1', CAR EN EFFET
                                     < ELLE CONTIENT 2 CONSTANTES VACHEMENT
                                     < UTILES...
         LR          B,A             < (A)=PREMIERE ADRESSE ACCESSIBLE (EXPRI-
                                     <     PRIMEE EN SECTEURS PAR RAPPORT AU '0
                                     <     DU PREMIER UTILISATEUR...
         MP          VAR+TAPROG      < PAR CE CALCUL ON PASSE D'UNE ZONE DE
         DV          VAR+TASWAP      < SWAPPING A ZONE SCRATCH ('DKS') A UNE
                                     < ZONE DE SWAPPING SANS ('PR1')...
         CPZR        B               < LE RESTE DOIT ETRE NUL...
         JE          PCDA7           < OUI, OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT LE RESTE DE
<                    CETTE DIVISION PEUT ETRE NON NUL !!!
<
PCDA7:   EQU         $
         PLR         X,L
         LR          A,B             < (A)=(B)=PREMIERE ADRESSE ACCESSIBLE
                                     < DANS L'ESPACE DE SWAPPING SUR 'PR1'...
XWOR%2:  VAL         YY7             < PREMIERE CONSTANTE INACCESSIBLE DANS
                                     < UNE INSTRUCTION 'ADRI'...
XWOR%2:  VAL         TCPROG*XXXMOY/XWOR%2
XWOR%1:  VAL         TCPROG/XWOR%2
         DO          XWOR%2*M
         ADRI        XWOR%1,B        < (B)=PREMIERE ADRESSE INACCESSIBLE...
         SLLD        YY7>DADR=K      < CONVERSION EN DES ADRESSES RELATIVES
                                     < EN 16-MOTS...
         LRM         Y
         WORD        KSIMS>DADR*LK   < (Y)=ADRESSE 16-MOTS DU PREMIER MOT
                                     < DISPONIBLE A CET USAGE...
         ADR         Y,A             < (A)=ADRESSE DE DEBUT DE LA 'CDA-PRIVEE',
         ADR         Y,B             < (B)=ADRESSE DE FIN DE
         ADRI        -Z,B            < LA 'CDA-PRIVEE'.
<
< TEST DES CHANGEMENTS DE PAGE (DE 64K) : (A)=DEBUT, (B)=FIN :
<
         PSR         A,B
         LR          B,Y             < (Y)=FIN, (A)=DEBUT.
         SLRD        NBITMO+DADR+NBITMO
                                     < (B)=CHIFFRE0(DEBUT).
         LR          Y,A             < (A)=FIN,
         SLRS        NBITMO+DADR     < (A)=CHIFFRE0(FIN).
         CPR         A,B             < Y-A-T'IL CHANGEMENT DE PAGE ???
         LR          A,Y             < (Y)=CHIFFRE0(FIN)...
         PLR         A,B
         JE          PCDA1           < IL N'Y A PAS DE CHANGEMENT DE PAGE,
                                     < ET 'A' ET 'B' SONT BONS :
                                     < (A)=DEBUT, (B)=FIN...
<
< CAS DES CHANGEMENTS DE PAGE :
<
         XR          A,Y             < (Y)=DEBUT, (B)=FIN, (A)=CHIFFRE0(FIN).
         SLLS        NBITMO+DADR     < (A)=PSEUDO-MILIEU (DIT "MILIEU").
         SBR         A,Y
         NGR         Y,Y             < (Y)=MILIEU-DEBUT.
         SBR         A,B             < (B)=FIN-MILIEU.
         CPR         Y,B             < EST-CE LA PARTITION HAUTE OU BASSE PAR
                                     < RAPPORT AU "MILIEU" QUI EST LA PLUS
                                     < GRANDE ???
         JL          PCDA4           < (B)<(Y) : C'EST LA PARTITION BASSE QUI
                                     < EST LA PLUS INTERESSANTE...
<
< (B)>=(Y) : C'EST LA PARTITION HAUTE :
<
         ADR         A,B             < (B)=FIN-MILIEU+MILIEU=FIN, ET
                                     < (A)=MILIEU=NOUVEAU DEBUT...
         JMP         PCDA1           < VERS LE RANGEMENT DE 'A' ET 'B' (B EST
                                     < EN FAIT INCHANGE...).
<
< (B)<(Y) : C'EST LA PARTITION BASSE :
<
PCDA4:   EQU         $
         LR          A,B
         ADRI        -Z,B            < (B)=MILIEU-E=NOUVELLE FIN, ET
         SBR         Y,A             < (A)=MILIEU-(MILIEU-DEBUT)=DEBUT.
         JMP         PCDA1           < VERS LE RANGEMENT DE 'A' ET 'B' (A EST
                                     < EN FAIT INCHANGE...).
<
< ERREURS :
<
PCDA2:   EQU         $
         ADRI        XCCIER,X        < RETOUR EN ERREUR A LA GRAMMAIRE...
         JMP         PCDA3           < VERS LE RETOUR SANS MISE EN PLACE...
         PAGE
<
<
<        C O M M U T A T I O N   ' C D A I '   -->   ' C D A J '  :
<
<
<        FONCTION :
<                      UN NOUVEAU DISPOSITIF A ETE
<                    INTRODUIT AFIN DE PERMETTRE A
<                    DE NOMBREUX PROGRAMMES QUI MANI-
<                    PULENT LA 'CDAI' EXPLICITEMENT
<                    DE TRAVAILLER EN AVEUGLE (ET SANS
<                    LE SAVOIR) SUR LA 'CDAJ+...' ; DEUX
<                    COMMANDES ONT ETE INTRODUITES :
<
<                                    "!CDAI=I" : ALORS "!CDAI" EST "!CDAI",
<                                    "!CDAI=J" : ALORS "!CDAI" EQUIVAUDRA
<                                                A "!CDAJ" LORSQU'ELLE SERA
<                                                EMISE.
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DE 'DCTESC'.
<
<
<        RESULTAT :
<                    POUR 'QCDAIJ', LE CONTENU DE 'X'
<                    EST INCHANGE SI "!CDAI=I", ET
<                    INCREMENTE DE 'XCCIER' SI "!CDAI=J".
<
<
PCDAII:  EQU         $               < TRAITEMENT DE "!CDAI=I" :
         LA          IDDESC-DCTESC,W
         RBT         IDESCJ          < IL SUFFIT DE CLEARER 'IDESCJ'...
         JMP         PCDAIK          < VERS LA MISE A JOUR...
PCDAIJ:  EQU         $               < TRAITEMENT DE "!CDAI=J" :
         LA          IDDESC-DCTESC,W
         SBT         IDESCJ          < IL SUFFIT DE FAIRE MONTER 'IDESCJ'...
PCDAIK:  EQU         $
         STA         IDDESC-DCTESC,W < ET ON MET A JOUR 'IDDESC' DANS 'DCTESC'.
         RSR
<
<
<        T E S T   D E   C O M M U T A T I O N  :
<
<
QCDAIJ:  EQU         $
         LA          IDDESC-DCTESC,W
         TBT         IDESCJ          < ALORS : "!DCAI=I" OU "!CDAI=J" ???
         ADCR        X               < ET ON FAIT EN CONSEQUENCE UN RETOUR
                                     < NORMAL SI "!CDAI=I" (IDESCJ=0) OU UN
                                     < RETOUR EN ERREUR SI "!CDAI=J" (IDESCJ=1).
         IF          BIT-XCCIER,,XEIF%,
         IF          ATTENTION : LA SORTIE DE 'QCDAIJ' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         RSR                         < ET ON SORT SUIVANT (X)...
         PAGE
<
<
<        T R A I T E M E N T   D U   M O D E
<        N O N   I N T E R A C T I F   D U   C C I
<        P O U R   U N   E S C L A V E  :
<
<
<        FONCTION :
<                      CES ROUTINES SONT APPELEES PAR
<                    LA GRAMMAIRE DU CCI, EN CERTAINS
<                    POINTS 'STRATEGIQUES' LORSQUE LE
<                    CCI EST EN MODE NON INTERACTIF POUR
<                    UN ESCLAVE.
<
<
<        M O D I F I C A T I O N   D U   R E G I S T R E
<                    X   D ' U N   E S C L A V E  :
<
<
<        A T T E N T I O N  :
<                      CETTE ROUTINE NE FAIT RIEN SI
<                    L'APPEL DU CCI A EU LIEU PAR UN
<                    QUIT, CE DONT ON SE REND COMPTE
<                    EN TESTANT LE MODE DE L'ESCLAVE.
<
<
<        ARGUMENT :
<                    (B)=VALEUR A DONNER AU REGISTRE X. (CONDITION
<                      DE RETOUR DU CCI EN MODE NON INTERACTIF).
<                    (W)=ADRESSE DCT(ESCLAVE).
<
<
CCIXE:   EQU         $
         CPZ         PSTESC-DCTESC+RS,W < TEST DU REGISTRE 'S' DE
                                       < L'ESCLAVE.
         IF          MS-BITSIG,,XEIF%,
         IF          ATTENTION : LE TEST EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JGE         Z862              < L'ESCLAVE EST EN MODE MAITRE,
                                       < L'APPEL A EU LIEU PAR QUIT,
                                       < ON FAIT UN RETOUR IMMEDIAT.
<
< CAS DES APPELS PAR SVC :
<
<*******************************************************************************
         BSR         ASTXES          < EXECUTION DU STORE X(ESCLAVE) SUIVANT :
         STB         PSTESC-DCTESC+RX,W < REGISTRE 'X' DANS PST(ESCLAVE).
<*******************************************************************************
Z862:    EQU         $               < SORTIE IMMEDIATE DES APPELS
                                     < PAR QUIT.
         RSR                         < ET C'EST TOUT...
<
<        I N I T I A L I S A T I O N   D E   L ' A N A L Y S E
<        S Y N T A X I Q U E   D U   C C I  :
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DCT(ESCLAVE),
<                    (L)=ADRESSE DCT(SERVICE).
<
<
INIBES:  EQU         $
<
< INITIALISATION ANALYSE SYNTAXIQUE :
<
         LAD         BUFESC-DCTESC,W < (A)=@BUFESC.
         SBT         BITX            < POSITIONNEMENT DU BIT D'INDEX.
         STA         VAR+ABUFGR      < GENERATION DU RELAI INDIRECT
                                     < INDEXE VERS BUFESC.
         STZ         VAR+XBUFGR      < INDEX INITIAL.
<
< INITIALISATION DE DEMCCI :
<
         IF          NOCMO=K-BIT,,XEIF%,
         IF          ATTENTION : LE 'BITX' EST RESTE DANS 'A' !!!
XEIF%:   VAL         ENDIF
         SLLS        NOCMO=K         < (A)=@OCTET DE BUFESC.
         STA         VAR+DEMCCI+T+AMDEM
                                     < INITIALISATION DE AMDEM DE
                                     < DEMCCI AVEC @BUFESC ; EN EFFET
                                     < PUISQU'ON EST EN NON INTERACTIF,
                                     < DEMCCI N'EST PAS INITIALISEE
                                     < CORRECTEMENT (EN GENERAL),
                                     < OR SON CONTENU EST UTILISE
                                     < LORS DES !ASSIGN SUR LE SGF !!!
         LA          DEMESC-DCTESC+T+CODEM,W
         STA         VAR+DEMCCI+T+CODEM
                                     < TRANSMISSION DE LA LONGUEUR DU MESSAGE,
                                     < EN PARTICULIER UTILISE PAR LA COMMANDE
                                     < !L  "ON-LINE"...
         STA         VAR+MBUFGR      < AFIN DE VALIDER 'XBUFGR' DANS 'CARAC'...
         BSR         ACHKIN          < RENVOI : (A)=NSPIN.
         STBY        VAR+DEMCCI      < MISE EN PLACE DE NSPIN, ON
                                     < NE SAIT JAMAIS...
         RSR                         < RETOUR.
         PAGE
<
<
<        D E B U G   U T I L I S A T E U R  :
<
<
<        FONCTION :
<                      CES ROUTINES SONT APPELEES PAR
<                    L'INTERMEDIAIRE DE LA GRAMMAIRE
<                    PRIVEE DU DEBUG (!DEBUG).
<
<
<        SYNTAXE :
<                    ? (+1 AUTOMATIQUE SUR A-ROND),
<                    ? (A-ROND RECOIT LA DERNIERE VALEUR DISPLAYEE,
<                            OU LA DERNIERE VALEUR ENTREE),
<                    ?'+'/'-',
<                    ?(T)'<'/'>'().
<                    AVEC ::=A,B,X,Y,C,L,W,K,P,S,@,M.
<                         ::=';' (SORTIE DU DEBUG),
<                         ::='G' (SORTIE DU DEBUG ET RETOUR D'ABORT).
<
<
<        RETOUR AU PROGRAMME UTILISATEUR APRES
<        UNE TRAPPE OU UN ALT-MODE :
<                    ON MODIFIE DANS L'ORDRE ET SANS FAIRE
<                    DE COMMANDES 'T', QUI FONT
<                    UN RETOUR AU SVC CCI :
<                    A<--(AT) OU AUTRE VALEUR,
<                    X<--(XT) OU AUTRE VALEUR,
<                    S<--MODE-ESCLAVE,
<                    K<--(KT) OU AUTRE VALEUR,
<                    P<--(PT) OU AUTRE VALEUR,
<                    ; QUI PROVOQUE LE RETOUR AU PROGRAMME INTERROMPU.
<        OU PAR :
<                    "G" QUI EST EQUIVALENTE A CE QUI PRECEDE...
<
<
<        CAS DU ALT-MODE :
<                      A-ROND DONNE (AVANT QU'ON NE L'AIT MODIFIE !!!)
<                    LE SOMMET DE LA PILE POINTEE PAR
<                    K AU MOMENT DU ALT-MODE ; SI
<                    ST=, L'ESCLAVE
<                    FAISAIT UN SVC, ET @ DONNE ALORS
<                    LE P DE RETOUR DU SVC ; POUR RELANCER
<                    LE PROGRAMME, ON FERA DONC :
<                    (K)<--(A-ROND), OU (A-ROND)-1 POUR REITERER LE 'SVC',
<                    X<--(XT),
<                    A<--(AT),
<                    ; QUI PROVOQUE LE RETOUR (ON NE TOUCHE
<                       NI A S NI A P).
<
<
         PAGE
<
<
<        R E T O U R   S U I T E   A   U N E   T R A P P E  :
<
<
<        FONCTION :
<                      CE MODULE APPELE EN FIN DE
<                    SERVICE PAR "G" SOUS 'DEBUG'
<                    PERMET DE RESTAURER LES CONDI-
<                    TIONS D'AVANT LA TRAPPE, ET DE
<                    RELANCER LE PROGRAMME.
<                      LORSQU'UNE TRAPPE APPARAIT,
<                    LE REGISTRE 'P' PEUT TRES BIEN
<                    POINTER SUR L'INSTRUCTION EN
<                    CAUSE, COMME SUR LA SUIVANTE;
<                    C'EST POURQUOI, DERRIERE "G",
<                    ON PEUT PRECISER UNE CONSTANTE
<                    DE TRANSLATION DE 'P' (EVENTUEL-
<                    LEMENT ABSENTE, DONC NULLE...).
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DE 'DEMSER',
<                    (VALESC)=CONSTANTE DE TRANSLATION DE 'RP'.
<
<
         CALL        #SISP CMS5 DOL1#
MOVERU:  EQU         $
         STZ         FSERV-DEMSER,W  < SUPPRESSION DE LA ROUTINE DE FIN DE
                                     < SERVICE...
         PSR         B,X             < SAUVEGARDES ESSENTIELLES...
         CALL        #SISP CMS5 PSRSLO#
<
< PREPARATION DE (SLO,SLE)
< ENCADRANT L'ESPACE UTILISATEUR
< Y COMPRIS L'EN-TETE :
<
         LA          PSTESC-DEMSER+RSLO,W < (A)='SLO' DE L'ESCLAVE,
XWOR%1:  VAL         SLOESC>DADR
         ADRI        -XWOR%1,A            < (A)=ADRESSE DE L'ESPACE UTILISATEUR,
         LB          PSTESC-DEMSER+RSLE,W < (B)='SLE' DE L'ESCLAVE,
         WOE                         < ENCADREMENT DE L'ESPACE UTILISATEUR...
         PSR         Y
<
< TEST D'UN REDEMARRAGE SUITE
< A UN DOUBLE ALT-MODE LORS
< D'UNE ECRITURE :
<
         LYI         RST
         LAR                         < (A)=REGISTRE 'ST' DE L'UTILISATEUR,
         TBT         BALT2           < ALORS, DOUBLE ALT-MODE LORS D'UNE ECRI-
                                     < TURE ALPHA-NUMERIQUE OU GRAPHIQUE ???
         JNC         MOVER1          < NON, ON NE TOUCHE A RIEN...
         SBT         V               < OUI, DANS CES CONDITIONS, ON ANNULE LE
                                     < CODE D'ERREUR ('RXT'), ET LES INDICATEURS
                                     < 'V' ET 'C' DE 'RST' QUI AVAIENT ETE
                                     < POSITIONNES PAR UN TEST DE (RXT)...
         RBT         C               < (V)=1 ET (C)=0 SIMULENT UN 'CPZR'
                                     < SUR UNE VALEUR NULLE...
         RBT         BALT2           < ENFIN, ON ANNULE L'INDICATEUR DE DOUBLE
                                     < ALT-MODE...
         STAR                        < ET ON MET AINSI A JOUR 'RST'...
         LYI         RXT
         LAR                         < (A)=REGISTRE 'X' SUITE AU DOUBLE ALT-
                                     <     MODE...
         CPI         EVALT           < ON LE VALIDE, CELA NE MANGE PAS DE
                                     < PAIN...
         JE          MOVER2          < OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      LA GESTION DU BIT 'BALT2' NE
<                    DOIT PAS ETRE CORRECT, PEUT-ETRE
<                    EST-IL DE TEMPS EN TEMPS REMANENT !!!
<
MOVER2:  EQU         $
         LAI         K
         STAR                        < ET ON CLEAR 'RXT', AFIN DE FAIRE UN
                                     < RETOUR SANS ERREUR AU PROGRAMME...
MOVER1:  EQU         $
<
< REGENERATION DES PREMIERS
< MOTS DE L'ESPACE MEMOIRE DE
< L'UTILISATEUR ECRASE PAR
< 'IMEMY' :
<
         LYI         RMOT0
         LAR
         LYI         SLOESC+XMOT0
         STAR                        < RESTAURATION DU MOT0,
         LYI         RMOT1
         LAR
         LYI         SLOESC+XMOT1
         STAR                        < DU MOT1,
         LYI         RMOT2
         LAR
         LYI         SLOESC+XMOT2
         STAR                        < ET DU MOT2...
         PLR         Y
<
< RESTAURATION DES REGISTRES :
<
         LAD         PSTESC-DEMSER+RA,W
         LR          A,B             < (B)=ADRESSE DU RECEPTEUR (ZONE DES
                                     <     REGISTRES DANS 'DCTESC'),
         LAI         RAT             < (A)=ADRESSE DE L'EMETTEUR (ZONE DES
                                     <     REGISTRES DE TRAPPE DANS L'ESPACE
                                     <     UTILISATEUR ENTIER),
         LXI         RS-RA+Z         < (X)=NOMBRE DE REGSITRES A RESTAURER...
         MVTM                        < ET ON RETABLIT LES CONDITIONS D'AVANT
                                     < L'ABORT...
<
< TRANSLATION EVENTUELLE DE 'RP' :
< (VOIR LE PROBLEME DES TRAPPES...)
<
         LA          PSTESC-DEMSER+RP,W
         AD          DCTESC+VALESC-DEMSER,W
         STA         PSTESC-DEMSER+RP,W
<
< ET RETOUR :
<
         CALL        #SISP CMS5 PLRSLO#
         PLR         B,X             < RESTAURATIONS...
         RSR
         CALL        #SISP CMS5 DOL2#
<
<
<        D E M A N D E   D E   F I N   D E   S E R V I C E
<        D E   R E T O U R   S U I T E   A   U N E   T R A P P E  :
<
<
<        FONCTION :
<                      CE MODULE APPELE PAR LA GRAMMAIRE
<                    DU 'DEBUG' POSITIONNE UNE ROUTINE
<                    DE FIN DE SERVICE QUI RETABLIRA
<                    LES CONDITIONS D'AVANT LA TRAPPE...
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DE 'DCTESC'.
<
<
MOVER:   EQU         $
         LRM         A
         WORD        MOVERU          < (A)=ADRESSE DE LA ROUTINE DE FIN DE
                                     <     SERVICE EN ESPACE BAS,
         BSR         AFSERV          < QUE L'ON MET EN ROUTINE DE FIN DE
                                     < SERVICE POUR CET UTILISATEUR...
         RSR                         < ET C'EST TOUT...
<
<
<        O P E R A N D E   D U   D E B U G  :
<
<
<        FONCTION :
<                      CETTE ROUTINE RECUPERE LA PARTIE
<                     DE LA COMMANDE ENVOYEE
<                    PAR L'UTILISATEUR AU DEBUG.
<
<
<        ARGUMENT :
<                    (B)=NUMERO DE L'OPERANDE :
<                                    0 : A,
<                                    1 : B,
<                                    2 : X,
<                                    3 : Y,
<                                    4 : C,
<                                    5 : L,
<                                    6 : W,
<                                    7 : K,
<                                    8 : P,
<                                    9 : S,
<                                    10 : @ (ADRESSE COURANTE),
<                                    11 : M (CONTENU MEMOIRE @),
<                                    12 : O (TRANSLATION DE '@' SOUS 'DEBUG'
<                                           ABSOLU),
<                                    13 : 0 (CONTENU DU MOT0),
<                                    14 : 1 (CONTENU DU MOT1),
<                                    15 : 2 (CONTENU DU MOT2 DE L'ESPACE MEMOIRE
<                                           UTILISATEUR AU MOMENT D'UNE TRAPPE).
<
<
<        RESULTAT :
<                    (Y)=B.
<
<
SADBG:   EQU         $
         LR          B,Y             < AIN'T IT HARD ?!?!?!?
         RSR
<
<
<        O P E R A N D E   D E   T R A P P E  :
<
<
<        FONCTION :
<                      CETTE ROUTINE EST APPELEE SUITE
<                    A L'OPTION 'T' SUIVANT LA
<                    PRECISION DE  ; IL EST
<                    AUSSI APPELE POUR "@" ET "M"...
<
<
<        ARGUMENT :
<                    (Y)=
<                    (W)=ADRESSE DE 'DCTESC'.
<
<
<        RESULTAT :
<                    (Y)=(Y)-SLOESC.
<
<
SADTBG:  EQU         $
<
< MEMORISATION DU TYPE DE  :
<
         ADRI        -SLOESC,Y
<
<
<        M O D E   M A I T R E   P O U R   U N
<        U T I L I S A T E U R   S O U S   ' S V C '  :
<
<
<        FONCTION :
<                      LORSQUE LE 'CCI' VA ETRE
<                    SUSPENDU, IL EST NECESSAIRE
<                    DE FORCER LE MODE MAITRE POUR
<                    UN UTILISATEUR SOUS 'SVC', ET EN
<                    RESTAURANT 'P' SUR 'RETSVC' ; DE
<                    PLUS, CELA PROVOQUE ALORS UN RETOUR
<                    EN ERREUR AU 'CCI', AFIN DE POUVOIR
<                    EDITER UN MESSAGE...
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DE 'DCTESC'.
<
<
MASTER:  EQU         $
<
< FAISONS EN SORTE QUE L'ESCLAVE
< PUISSE FAIRE CE QU'IL A DEMANDE :
<
         LA          PSTESC-DCTESC+RS,W
         TBT         SVCS            < L'UTILISATEUR EST-IL ARRIVE ICI PAR
                                     < UN 'SVC' ???
         JNC         SADTB1          < NON, OK...
         TBT         MS              < OUI, ALORS EST-ON BIEN EN MODE MAITRE ???
         JC          SADTB1          < OUI, OK...
         SBT         MS              < NON, ALORS ON LE REMET A PRIORI EN MODE
                                     < MAITRE AFIN D'ASSURER CORRECTEMENT LA
                                     < SUSPENSION DU 'CCI' INHERENTE AUX COM-
                                     < MANDES "@", "M" ET DE TYPE "T"...
         STA         PSTESC-DCTESC+RS,W
         LRM         A
         WORD        RETSVC
         STA         PSTESC-DCTESC+RP,W
                                     < ON REFAIT POINTER LE P(ESCLAVE) SUR LE
                                     < RETOUR DES INSTRUCTIONS 'SVC'...
         ADRI        XCCIER,X        < ET ENFIN, ON PROVOQUE UN RETOUR EN ERREUR
                                     < AU 'CCI', AFIN D'EDITER UN MESSAGE...
SADTB1:  EQU         $
<
< SORTIE (COMMUNE A 'MASTER' ET 'SADTBG') :
<
         RSR
<
<
<        R E C U P E R A T I O N   D ' U N E   V A L E U R  :
<
<
<        FONCTION :
<                      CETTE ROUTINE EST APPELEE LORS
<                    DES DEMANDES DE  ('<'). ELLE
<                    RECUPERE LA  SUIVANT '<'.
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DCT(ESCLAVE).
<
<
<        RESULTAT :
<                    VALESC(DCTESC)=.
<
<
SVDBG:   EQU         $
         PSR         X               < SAVE INDEX DE LA GRAMMAIRE DU
                                     < CCI (GRAMMAIRE DU DEBUG).
         LX          VAR+XBUFGR      < (X)=INDEX 1ER CARACTERE PRESUME
                                     < DE .
         LAD         VAR+ABUFGR      < (A)=@RELAI VERS LE BUFFER.
         BSR         AHEXIN          < CONVERSION DE LA CHAINE
                                     < HEXADECIMALE  EN
                                     < BIANIRE.
         STX         VAR+XBUFGR      < MAJ DE L'INDEX DE BUFGR.
         STA         VALESC-DCTESK,W < SAVE LA  (A) DANS
                                     < LE DEMESC DE DCTESC.
         PLR         X               < RESTAURE L'INDEX DE LA
                                     < GRAMMAIRE DU CCI.
         RSR
<
<
<        T E S T   D E   R E S I D E N C E
<        D E   < O P E R A N D E >  :
<
<
<        FONCTION :
<                      CETTE ROUTINE EST APPELEE POUR
<                    SAVOIR SI L' EST RESIDENTE (CAS
<                    DES REGISTRES DU CONTEXTE DANS DCTESC),
<                    NON RESIDENT (CAS DES REGISTRES DE
<                    TRAPPE, OU DU CONTENU DE L'ESPACE
<                    MEMOIRE DE L'UTILISATEUR).
<
<
<        ARGUMENT :
<                    (Y)=.
<
<
<        RESULTAT :
<                    INDEX DE LA GRAMMAIRE DU CCI :
<                    X : INCHANGE SI RESIDENT,
<                    X::=(X)+1 SI NON RESIDENT.
<
<
TRDBG:   EQU         $
         CPZR        Y
         IF          XCCINX-BIT,,XEIF%,
         IF          ATTENTION : LE 'ADCR' SUIVANT VA MERDER !!!
XEIF%:   VAL         ENDIF
         ADCR        X               < ON AJOUTE LE CARY A X, SOIT
                                     < 1 SI (Y)<0, ET 0 SI (Y)>=K.
         RSR
         PAGE
<
<
<        M O D I F Y   < O P E R A N D E >  :
<
<
<        FONCTION :
<                      CETTE ROUTINE EST APPELEE LORS
<                    QU'ON EST SUR DE LA RESIDENCE
<                    DE . ELLE RECUPERE LA VALEUR, ET
<                    APRES DIVERSES VERIFICATIONS (LIMITATION
<                    SUR LES MODIFICATIONS DU REGISTRE S,
<                    IMPOSSIBILITE DE TOUCHER A P EN MODE
<                    MAITRE),
<                      DONNE CETTE  A .
<
<
<        A T T E N T I O N  :
<                      LORSQUE CELA EST NECESSAIRE (Y<0),
<                    L'ESPACE MEMOIRE DE L'UTILISATEUR
<                    EST RESIDENT.
<
<
<        ARGUMENT :
<                    VALESC(DCTESC)=,
<                    (W)=ADRESSE DCT(ESCLAVE),
<                    (L)=ADRESSE DCT(SERVICE).
<                    (Y)=.
<
<
MODBG:   EQU         $
         PSR         L               < SAVE @DCT-SERVICE.
         LB          VALESC-DCTESK,W < (B)=.
<
< CALCUL DE L'ADRESSE ABSOLUE DE  :
<
         CPZR        Y
         JL          Z350            <  N'ETAIT PAS RESIDENTE.
<
< CAS  RESIDENTE :
<
         LR          W,L             < (L)=@DCT-ESCLAVE.
<
< VALIDATION DU  :
<
         LR          Y,A             < (A)=.
         CPI         RK              < EST-CE K ?????
         JE          Z351            < OUI, ALLONS TESTER S(DCTESC).
         CPI         RP              < EST-CE P ????
         JNE         Z326            < NON, NI P(DCTESC), NI K(DCTESC)
<
<  DEMANDE SUR P(DCTESC) OU K(DCTESC) :
<
Z351:    EQU         $
         CPZ         PSTESC-DCTESC+RS,W < TEST DU REGISTRE S(DCTESC).
         IF          MS-BITSIG,,XEIF%,
         IF          ATTENTION : LE TEST EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JGE         Z327            < OK, L'UTILISATEUR EST EN
                                     < MODE ESCLAVE, IL PEUT MODIFIER
                                     < SON REGISTRE P(DCTESC) COURANT.
<
< RETOUR EN ERREUR DE MODBG ET DE DISDBG :
<
Z328:    EQU         $
         ADRI        XCCIER,X        < RETOUR EN ERREUR AU CCI.
<
< SORTIE DE MODBG ET DE DISDBG :
<
Z329:    EQU         $
         PLR         L               < RESTAURE (L)=@DCT-SERVICE.
Z340:    EQU         $
         RSR
Z326:    EQU         $
         CPI         RS              < EST-CE UN  DE S ?????
         JNE         Z327            < NON, C'EST BON ON PEUT MODIFIER.
<
<  REGISTRE S(DCTESC) :
<
         LR          B,A             < (A)=.
         RBT         V               < RAZ INDICATEUR V.
         RBT         C               < RAZ INDICATEUR C.
         JANE        Z328            < DANS LE CAS OU CE QUI RESTE DE S
                                     < EST DIFFERENT DE 0, LA
                                     < DEMANDE DE  EST REFUSEE.
         LA          PSTESC-DCTESC+RS,W < (A)=REGISTRE 'S' AVANT :
         TBT         SVCS            < L'UTILISATEUR EST-IL ARRIVE ICI PAR
                                     < UN 'SVC' ???
         JNC         Z327X1          < NON, OK...
         SBT         NBITMO+SVCS     < OUI, ON MEMORISE CE FAIT ; LE BIT 'SVCS'
                                     < SERA RAZE PAR LE 'SCHEDULER' A PRIORI
                                     < S'IL TROUVE LE BIT 'MS' A 0 (MODE
                                     < ESCLAVE)...
Z327X1:  EQU         $
<
< CAS DES  ACCEPTES :
<
Z327:    EQU         $
<        ON A ICI :
<                    (L)=BASE VERS LA ZONE CONTENANT .
<                    (Y)=,
<                    (B)=.
         ADR         Y,L             < (L)=@.
         STB         O,L             <  DE 
                                     < AVEC .
<
< EST-CE EN FAIT UN 
< DE L'ESPACE MEMOIRE UTILISATEUR :
<
         LR          Y,A             < (A)=.
         CPI         -SLOESC+RM      < EST-CE 'M' ????
         JNE         Z329            < NON, C'EST TOUT.
<
<  DE L'ESPACE MEMOIRE
< UTILISATEUR : VALIDATION DE A-ROND :
<
         LA          IDDESC-DCTESC,W
         TBT         IDESC1          < TEST DU BIT IDESC1,
                                     < POUR SAVOIR SI LE DEBUG EST
                                     < EN MODE TRANSLATABLE (K) OU
                                     < EN MODE ABSOLU (1).
         LA          RAD-RM,L        < (A)=@ RELATIVE A (SLO).
         JNC         Z381X4          < CAS DU 'DEBUG' TRANSLATABLE...
         IF          O>DADR-K,,XEIF%,
         IF          ATTENTION : LE TEST QUI SUIT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         CPZ         RSLOT-RM,L      < CAS DU 'DEBUG' ABSOLU : UNE DADR-TRANS-
                                     < LATION DE '@' EST-ELLE DEMANDEE ???
         JE          Z381            < NON (DU MOINS, ELLE EST NULLE...), DONC
                                     < ON FAIT QUELQUES VALIDATIONS...
<
< CAS DU 'DEBUG' ABSOLU AVEC
< DADR-TRANSLATION DE '@' :
<
         PSR         A,B,X,Y         < SAUVEGARDES...
         LR          B,X             < (X)=VALEUR A DONNER AU MOT MEMOIRE QUE
                                     <     L'ON MODIFIE,
         LR          A,Y             < (Y)=ADRESSE DE CE MOT MEMOIRE RELATIVE-
                                     <     MENT A LA DADR-TRANSLATION 'RSLOT'.
         CALL        #SISP CMS5 PSRSLO#
         LR          Y,A             < ON VA ECLATER L'ADRESSE DU MOT MEMOIRE,
                                     < EN UNE DADR-ADRESSE (A), ET UN RESIDU (B)
         LBI         K               < CLEAR...
         SCRS        -DADR
         SCLD        -DADR           < (B)=RESIDU (DE O A 'FADR'-D),
         SLRS        -DADR           < (A)=DADR-ADRESSE DU MOT,
         LR          B,Y             < (Y)=ADRESSE DU MOT MEMOIRE A MODIFIER
                                     <     RELATIVE A UNE DADR-ADRESSE (A),
         AD          RSLOT-RM,L      < (A)='SLO' D'ACCES AU MOT,
         LR          A,B             < (B)='SLOE' D'ENCADREMENT,
         WOE                         < ET POSITIONNEMENT DE (SLO,SLE)...
         LR          X,A             < (A)=VALEUR A DONNER AU MOT D'ADRESSE
                                     <     RELATIVE :
                                     < (Y)=ADRESSE RELATIVE,
         STAR                        < ET ON MODIFIE LE MOT...
         CALL        #SISP CMS5 PLRSLO#
         PLR         A,B,X,Y         < RESTAURATIONS...
         JMP         Z329            < VERS LA SORTIE...
AZ340:   JMP         Z340            < RELAI...
<
< CAS DU DEBUG TRANSLATABLE :
< (ET EN 'Z381' DU DEBUG
< ABSOLU AVEC (RSLOT)=0...)
<
Z381X4:  EQU         $
         PSR         B
         LA          PSTESC-DCTESC+RSLO,W < (A)=(SLO).
         BSR         APDADR              < (A)=SLO*16(EN MOTS)
         LR          A,B
         AD          RAD-RM,L            < (A)=ADR "ABSOLUTISEE"
         CPR         B,A
         PLR         B
         JL          Z328            < ERREUR : @<(SLO).
         PSR         B
         LR          A,B
         LA          PSTESC-DCTESC+RSLE,W < (A)=SLE
         BSR         APDADR               < (A)=SLE*16(EN MOTS)
         ADRI        FADR-Z,A             < (A)=FIN DE LA ZONE UTILISATEUR.
         XR          A,B                  < (A)=ADR "ABSOLUTISEE"
         CPR         B,A
         PLR         B
         JG          Z328            < ERREUR : @>(SLE).
Z381:    EQU         $
         LR          A,L             < (L)=@ ABSOLUE.
         IF          MS-BITSIG,,XEIF%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         PSR         X,Y
         PSR         B,L
         LB          PSTESC-DCTESC+RSLO,W
         SLLD        -DADR           < (B)=(SLO) EN ADRESSE DE MOTS.
                                     <     (ON NE VALIDE PAR 'APDADR' CAR CELA
                                     <     A DEJA ETE FAIT CI-DESSUS)
         LA          PSTESC-DCTESC+RS,W
         TBT         SVCS            < QUEL EST LE MODE D'APPEL ???
         JC          Z381X1          < PAR 'SVC'...
         LA          PSTESC-DCTESC+RP,W
                                     < ESCLAVE ('QUIT') : ALORS :
                                     < (A)=ADRESSE RELATIVE DU 'QUIT'...
         JMP         Z381X2
Z381X1:  EQU         $
         LA          PSTESC-DCTESC+RK,W
         ADR         B,A             < ABSOLUTISATION DU REGISTRE 'K',
         LR          A,L             < QUE L'ON MET DANS 'L',
         LR          A,X             < (X)=SAUVEGARDE DE L'ADRESSE ABSOLUE DU
                                     <     MOT POINTE PAR 'K',
         LY          PSTESC-DCTESC+RA,W
         ADR         B,Y             < (Y)=SAUVEGARDE DE L'ADRESSE ABSOLUE DU
                                     <     MOT POINTE PAR 'A'.
         LA          O,L             < (A)=ADRESSE RELATIVE DU 'SVC'...
Z381X2:  EQU         $
         ADR         B,A             < (A)=ADRESSE ABSOLUE DU 'QUIT'/'SVC'...
         PLR         B,L
         CPR         A,L             < L'ADRESSE QUE L'ON VEUT MODIFIER ('L')
                                     < NE SERAIT-ELLE PAS L'ADRESSE DU 'QUIT'/
                                     < 'SVC' D'APPEL DU 'CCI' ???
         JE          Z328X1          < OUI, LE 'MODIFY' EST REFUSE !!!
                                     < EN EFFET, SINON, A CAUSE DES FONCTIONS
                                     < DE SUSPENSION DU 'CCI' CONTENUES DANS
                                     < LE 'DEBUG', LA RE-RENTREE DANS LE 'CCI'
                                     < SE FERAIT MAL !!!
         LA          PSTESC-DCTESC+RS,W
         TBT         SVCS            < QUEL EST LE MODE D'APPEL ???
         JNC         Z381X3          < CAS DES 'QUIT'...
         CPR         X,L             < CAS DES 'SVC', NE MODIFIE-T'ON PAS LE
                                     < MOT POINTE PAR 'K' ???
         JE          Z328X1          < OUI, QUELLE HONTE...
         CPR         Y,L             < NE MODIFIE-T'ON PAS LE MOT POINTE PAR
                                     < LE REGISTRE 'A' ???
         JE          Z328X1          < OUI, QUELLE TRAITRISE...
Z381X3:  EQU         $
         PLR         X,Y
         STB         O,L             <  DE L'ESPACE MEMOIRE
                                     < DE L'UTILISATEUR.
         JMP         Z329            < RETOUR.
Z328X1:  EQU         $
         PLR         X,Y             < ON RETABLIT LA PILE,
AZ328:   JMP         Z328            < ET ON SORT EN ERREUR !!!
                                     < (ET RELAI...)
<
< CAS D'UN  SUR DE L'INFORMATION
< QUI N'ETAIT PAS RESIDENTE :
<
Z350:    EQU         $
         LA          PSTESC-DCTESC+RSLO,W
         BSR         APDADR
         LR          A,L             < (L)=SLO*16 (EN MOTS)
         JMP         Z327            < VERS LE .
         PAGE
<
<
<        < D I S P L A Y >   D E   L A
<        V A L E U R   D E   < O P E R A N D E >  :
<
<
<        FONCTION :
<                      CETTE ROUTINE EST APPELEE LORSQUE
<                     EST RESIDENTE. ELLE FAIT
<                    UN  DE LA VALEUR EN
<                    HEXADECIMAL.
<
<
<        A T T E N T I O N  :
<                      LOSQUE CELA EST NECESSAIRE (Y<0),
<                    L'ESPACE MEMOIRE DE L'UTILISATEUR
<                    EST RESIDENT.
<
<
<        ARGUMENT :
<                    (Y)=.
<                    (W)=ADRESSE DCT(ESCLAVE).
<
<
<        RESULTAT :
<                    VALESC=, EN VUE D'UNE COMMANDE
<                                      D'ADRESSAGE INDIRECT (),
<                                      QUI SUIVRAIT EVENTUELLEMENT.
<
<
DISDBG:  EQU         $
         PSR         L               < SAVE @DCT-SERVICE.
         LR          W,L             < (L)=@DCT-ESCLAVE A PRIORI.
<
< TEST DE RESIDENCE :
<
         CPZR        Y
         JGE         Z330            <  ETAIT RESIDENTE.
<
< CAS DU  DE  NON RESIDENTE :
<
         LA          PSTESC-DCTESC+RSLO,W
         BSR         APDADR
         LR          A,L             < (L)=SLO*16 (EN MOTS)
Z330:    EQU         $
         ADR         Y,L             < (L)=@.
<
< EST-CE EN FAIT UN  DE L'ESPACE
< MEMOIRE DE L'UTILISATEUR ????
<
         LR          Y,A
         CPI         -SLOESC+RST     < EST-CE LE REGISTRE 'ST' ???
         JE          Z331X1          < OUI, ON LE TRAITE A PART A CAUSE DU
                                     < BIT 'BALT2' DESTINE A "G" SOUS 'DEBUG'...
         CPI         -SLOESC+RM      < EST-CE 'M' ???
         JNE         Z331            < NON, B EST CORRECT.
<
< CAS D'UN  MEMOIRE :
<
         LA          IDDESC-DCTESC,W
         TBT         IDESC1          < TEST DU MODE DU DEBUG :
                                     < ABSOLU (1) OU TRANSLATABLE (K).
         LA          RAD-RM,L        < (A)=@ RELATIVE A (SLO).
         JC          Z380X1          < LE DEBUG EST EN MODE ABSOLU,
                                     < DONC PAS DE TRANSLATION DE @.
         PSR         B
         LA          PSTESC-DCTESC+RSLO,W < (A)=(SLO).
         BSR         APDADR              < (A)=SLO*16 (EN MOTS)
         LR          A,B
         AD          RAD-RM,L            < (A)=ADR "ABSOLUTISEE"
         CPR         B,A
         PLR         B
         JL          AZ328           < ERREUR : @<(SLO).
         PSR         B
         LR          A,B
         LA          PSTESC-DCTESC+RSLE,W < (A)=(SLE).
         BSR         APDADR              < (A)=SLE*16 (EN MOTS)
         ADRI        FADR-Z,A        < (A)=FIN DE LA ZONE UTILISATEUR.
         XR          A,B
         CPR         B,A
         PLR         B
         JG          AZ328           < ERREUR : @>(SLE).
Z380:    EQU         $
         LR          A,L             < (L)=@ ABSOLUE DE .
<
<  DE  :
<
Z331:    EQU         $
         LB          O,L             < (B)= A DISPLAYER.
<
<        ON A ICI :
<                    (A)= SI #M,
<                     =ADRESSE ABSOLUE DE , SOIT A>>RK...
<                      SI =M.
<
Z352:    EQU         $
         STB         VALESC-DCTESK,W < SAVE  DANS DEMESC,
                                     < EN VUE D'1NE EVENTUELLE
                                     < COMMANDE .
         PLR         L               < RESTAURE (L)=@DCT-SERVICE.
<
< ENTRY DE 'DISPLA' :
<
DISPL1:  EQU         $
         PSR         X               < SAVE INDEX COURANT DE LA GRAMMAIRE
                                     < DU CCI (DEBUG).
         LXI         K               < INDEX INITIAL DE LA 
                                     < CONVERTRIE EN ASCI.
         LAD         VAR+ABUFGR      < (A)=@RELAI VERS LE BUFFER DE SORTIE.
         BSR         AHEXEX          < CONVERSION BINAIRE-->ASCI.
         PLR         X               < RESTAURE (X)=INDEX GRAMMAIRE CCI.
         LBI         NBITMO/NBITCX   < LONGUEUR DU MESSAGE A EMETTRE
                                     < VERS PHOUT.
         LR          W,A             < (A)=@DCT-ESCLAVE.
         ADRI        BUFESC-DCTESC,A < (A)=@MOT DE BUFESC.
         PSR         Y               < SAVE .
         BSR         AMESSO          <  DE .
         PLR         Y               < RESTAURE .
         JMP         AZ340           < RETOUR, C'EST FINI...
<
< CAS PARTICULIER DE 'ST' :
<
Z331X1:  EQU         $
         LB          O,L             < RECUPERATION DE 'ST',
         RBT         NBITMO+BALT2    < ET EFFACEMENT A PRIORI DE 'BALT2'
                                     < QUI NE DOIT PAS APPARAITRE AUX
                                     < YEUX DE L'UTILISATEUR...
         JMP         Z352            < VERS LA VISUALISATION...
<
< CAS DU 'DEBUG' ABSOLU
< AVEC UNE TRANSLATION 'RSLOT' :
<
Z380X1:  EQU         $
         PSR         A,Y             < SAUVEGARDES...
         LR          A,Y             < (Y)=ADRESSE RELATIVE A 'RSLOT' DU MOT
                                     <     A EDITER...
         CALL        #SISP CMS5 PSRSLO#
         LR          Y,A             < ON VA ECLATER L'ADRESSE DU MOT A EDITER
                                     < EN UNE DADR-ADRESSE (A), ET UN RESIDU (B)
         LBI         K               < CLEAR...
         SCRS        -DADR
         SCLD        -DADR           < (B)=RESIDU (ENTRE O ET 'FADR'-D),
         SLRS        -DADR           < (A)=DADR-ADRESSE DU MOT,
         LR          B,Y             < (Y)=ADRESSE DU MOT A EDITER RELATIVE-
                                     <     MENT AU FUTUR (SLO,SLE),
         AD          RSLOT-RM,L      < (A)='SLO' D'ACCES AU MOT,
         LR          A,B             < (B)='SLE' D'ENCADREMENT,
         WOE                         < AFIN D'ENCADRER LE MOT A EDITER,
         LAR                         < (A)=CONTENU DU MOT D'ADRESSE RELATIVE (Y)
         LR          A,Y             < QUE L'ON SAUVEGARDE DANS 'Y'...
         CALL        #SISP CMS5 PLRSLO#
         LR          Y,B             < (B)=VALEUR CHERCHEE...
         PLR         A,Y             < RESTAURATIONS,
         JMP         Z352            < ET VERS LA VISUALISATION...
         PAGE
<
<
<        E D I T I O N   D ' U N   C O D E   D ' E R R E U R
<                    C O N T E N U   D A N S   ' B O X '  :
<
<
<        FONCTION :
<                      CE MODULE A POUR ROLE D'EDITER
<                    LA 'BOX' UTILISATEUR, SUPPOSEE
<                    CONTENIR UN CODE D'ERREUR SUITE
<                    A UN BRANCHEMENT IMPLICITE A 'N10'.
<                      LE CODE D'ERREUR EST VALIDE
<                    SEULEMENT ICI, POUR EVITER DES
<                    SAUTS SUPERIEURS A 128 MOTS AU
<                    NIVEAU DE L'INTERPRETEUR DU 'CCI'
<                    EN 'CCIJMP'...
<
<
<        ARGUMENTS :
<                    (W)=ADRESSE DE 'DCTESC',
<                    (L)=ADRESSE DE 'DCTSER',
<                    (BOX)=VALEUR A EDITER.
<
<
DISPER:  EQU         $
<
< VALIDATION (TARDIVE) DU CODE D'ERREUR :
<
         LRM         A
         WORD        MCCIER)MMOT     < (A)=MASQUE D'EXTRACTION DU CODE-ERREUR,
         AND         BOXESC-DCTESC,W < (A)=CODE D'ERREUR,
         WORD        CPIMIN          < VALIDATION INFERIEURE ???
         JLE         DISPL2          < QUELLE HORREUR...
         WORD        CPIMAX          < VALIDATION SUPERIEURE ???
         JL          DISPL3          < OK, LA 'BOX' EST VALIDE POUR UN CODE
                                     < D'ERREUR TYPE 'N10'...
DISPL2:  EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      RECHERCHER DANS LA GRAMMAIRE DU
<                    'CCI', IL Y A SUREMENT UN NOEUD
<                    COMMENCANT PAR 'MCCIER' MAIS
<                    QUI N'EST PAS UN CODE D'ERREUR !!!
<                    SI TEL EST LE CAS, IL FAUT TROUVER
<                    UNE VALEUR DE 'MCCIER' NON AMBIGUE...
<
DISPL3:  EQU         $
<
< EDITION DU CODE D'ERREUR :
<
         LB          BOXESC-DCTESC,W < (B)=VALEUR A EDITER...
         JMP         DISPL1          < VERS L'EDITION...
         PAGE
<
<
<        D I S P L A Y   P A R T I E L   D ' U N E   C A R T E  :
<
<
<        FONCTION :
<                      CE MODULE DISPLAY PARTIELLEMENT
<                    UNE CARTE ; IL EST APPELE DANS 2
<                    CAS DIFFERENTS :
<
<                    1 - LORS D'UNE ERREUR DE SYNTAXE :
<                    LE DERNIER CARACTERE EDITE EST ALORS
<                    LE CARACTERE NON RECONNU (SAUF CAS
<                    PARTICULIERS OU EN BOUT DE CARTE
<                    ON TROUVE UN NOM 'SGN' : LOGIN, OU
<                    ASSIGNATION FICHIER...) ;
<
<                    2 - LORS DE LA "TRONCATION" D'UNE
<                    CARTE : LA PARTIE EDITEE EST LA PARTIE
<                    QUI A ETE PRISE EN COMPTE ET EXPLOITEE.
<
<
<        ARGUMENTS :
<                    (B)=DECREMENT A APPORTER A LA LONGUEUR CALCULEE
<                        DE LA CARTE A DISPLAYEE PARTIELLEMENT.
<                    (L)=ADRESSE DE 'DCTSER',
<                    (W)=ADRESSE DE 'DCTESC'.
<
<
DISPCA:  EQU         $
<
< ENVOI DU MESSAGE DE BASE
< DU 'CCI' POUR UN CADRAGE
< CORRECT DE LA CARTE PARTIELLE :
<
         PSR         B               < ET SAUVEGARDE DU DECREMENT DE LONGUEUR...
         LBI         LMES1           < (B)=LONGUEUR A PRIORI DU MESSAGE,
         BSR         ACHKIN          < MAIS EST-ON INTERACTIF ???
                                     < RENVOIE :
                                     < (A)='NSPIN' DE L'UTILISATEUR...
         JNE         DISPC3          < NON, DONC (B) EST BON...
         PSR         X,L             < OUI, IL S'AGIT D'UN UTILISATEUR INTER-
                                     < ACTIF, LE NOMBRE DE "?" QUE L'ON VA
                                     < EDITER EST FONCTION DU NIVEAU D'EMPILE-
                                     < MENT DE CET 'IDESC'...
         LR          A,X             < (X)='NPSIN' DE L'UTILISATEUR,
         BSR         ACADCT          < (L)=ADRESSE DE LA 'DCT' DE LA VISU...
         LA          VAR+APILID
         LR          A,L             < (L)=ADRESSE DE LA PILE D'EMPILEMENT DES
                                     <     UTILISATEURS PAR "!U" SUR CETTE VISU,
         LA          O,L             < (A)=POINTEUR DE LA PILE :
         ANDI        XLCPIL          < (A)=LONGUEUR COURANTE,
XWOR%1:  VAL         XLCPIL=K
         IF          XWOR%1-K,,XEIF%,
         SLRS        XWOR%1
XEIF%:   VAL         ENDIF
         ADR         A,B             < ON AJOUTE AU MESSAGE DE BASE 'MESCCI'
                                     < UN  NOMBRE DE "?" EGAL AU NIVEAU D'IMBRI-
                                     < CATION DES UTILISATEURS PAR "!U" SUR
                                     < CETTE VISU...
         PLR         X,L
DISPC3:  EQU         $
         LRM         A
         WORD        MESCCJ          < (A)=ADRESSE DU MESSAGE "".
         BSR         AMESSO          < EMISSION DU MESSAGE VERS L'ESCLAVE POUR
                                     < UN CADRAGE CORRECT DE LA CARTE PARTIELLE.
         PLR         B               < RESTAURE :
                                     < (B)=DECREMENT DE LA LONGUEUR DE LA
                                     <     CARTE PARTIELLE.
<
< EDITION DE LA CARTE PARTIELLE :
<
         LA          VAR+XBUFGR      < (A)=INDEX COURANT DE LA CARTE ANALYSEE ;
                                     <     IL POINTE TOUJOURS SUR LE PROCHAIN
                                     <     CARACTERE A ANALYSER...
         IF          Z-I,,XEIF%,
         IF          ATTENTION : IL Y A INCOHERENCE ENTRE LE 'IC'
         IF          SUR 'XBUFGR' ET LE FAIT QUE LES INDEXES
         IF          COMMENCENT A 0 !!!
XEIF%:   VAL         ENDIF
         ADRI        Z-I+I,A         < POUR COMPENSER LE 'DC' SUR 'XBUFGR' QUI
                                     < EST FAIT LORS DES CARACTERES NON RECON-
                                     < NUS ; A NOTER QUE DANS LES AUTRES CAS
                                     < D'ERREUR, CELA MERDERA PEUT-ETRE...
         SBR         B,A             < CALCUL DE LA LONGUEUR REELLE DE LA
                                     < CARTE PARTIELLE ; CECI EST LIE EN FAIT
                                     < A LA "TRONCATION", OU L'ON IDENTIFIE UN
                                     < CARACTERE ININTERESSANT, 'XBUFGR' POIN-
                                     < TANT DERRIERE...
         JAG         DISPC1          < OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT LA LONGUEUR
<                    CALCULEE PEUT ETRE NEGATIVE OU
<                    NULLE !!!
<
         JMP         DISPC2          < ET ON SORT...
DISPC1:  EQU         $
         LR          A,B             < (B)=LONGUEUR DU MESSAGE A EDITER,
         CPZ         VAR+XBUFGR      < ETAIT-ON EN DEBUT DE BUFFER ???
         JE          DISPC4          < OUI, RIEN A FAIRE...
         DC          VAR+XBUFGR      < NON, REVENONS D'UN CRAN EN ARRIERE,
         BSR         ACARAC          < ET TESTONS LE CARACTERE PRECEDENT ; A
                                     < NOTER QUE 'CARAC' REFAIT UN 'IC' SUR
                                     < 'XBUFGR'...
         JNE         DISPC4          < ET BIEN LE CARACTERE PRECEDENT N'EST
                                     < PAS UN LIMITEUR, ALLONS EDITER LA CARTE
                                     < SUR UNE LONGUEUR (B)...
         ADRI        -I,B            < ET OUI, LE CARACTERE PRECEDENT EST UN
                                     < LIMITEUR : CELA PEUT SE PRODUIRE ALORS
                                     < QUE LA CARTE ETAIT BONNE SYNTAXIQUEMENT,
                                     < MAIS MAUVAISE SEMANTIQUEMENT (PAR
                                     < EXEMPLE UN "!QFFFF", ALORS QU'AU MOINS
                                     < UN GROUPE DE CYLINDRES EST DEJA ATTRI-
                                     < BUE A QUELQU'UN D'AUTRE...) ; DONC IL
                                     < FAUT ANNULER LE 'ADRI''Z-I+I,A', LUI-
                                     < MEME DESTINE A COMPENSER UN 'DC' SUR
                                     < 'XBUFGR' QUI DANS CE CAS PRECIS N'A PAS
                                     < EU LIEU (OUF...).
DISPC4:  EQU         $
         LAD         BUFESC-DCTESC,W < (A)=ADRESSE-MOT DU MESSAGE A EDITER,
         BSR         AMESSO          < EDITION PARTIELLE DE LA CARTE ERRONNEE
                                     < OU TRONQUEE...
<
< SORTIE DU MODULE :
<
DISPC2:  EQU         $
         RSR                         < ET C'EST TOUT...
         PAGE
<
<
<        A D R E S S A G E   I N D I R E C T   E T
<        I N C R E M E N T A T I O N / D E C R E M E N T A T I O N
<        D E   L ' A D R E S S E   C O U R A N T E   @  :
<
<
<        FONCTION :
<                      CETTE ROUTINE GERE LES INCREMENTATIONS
<                    DECREMENTATIONS DE L'ADRESSE COURANTE @.
<                    CES 2 OPERATIONS SONT FAITES SANS
<                    VERIFICATION DE VALIDITE DE @ APRES
<                    CALCUL.
<                      DE PLUS, ELLE PERMET SI ON LE
<                    DESIRE, DE METTRE DANS @, LA DERNIERE
<                    VALEUR DISPLAYEE, OU ENTREE (DEMESC).
<
<
<        ARGUMENT :
<                    VALESC(DCTESC)= D'INCREMENTATION/DECRE-
<                                   -MENTATION/MODIFICATION,
<                    (W)=ADRESSE DCT(ESCLAVE).
<                    (Y)=K SI +,
<                     =1 SI -,
<                     =-1 SI ADRESSAGE INDIRECT SUR @,
<
<
<*******************************************************************************
YCCIAI:: VAL         K-I             < CODE DE L'ADRESSAGE INDIRECT,
YCCIP::  VAL         '0@@@@+I        < CODE DU "+",
YCCIM::  VAL         '0@@@@+I        < CODE DU "-".
XCCIP1:: VAL         I               < POUR INCREMENTER DE 1...
<*******************************************************************************
PMDBG:   EQU         $
         PSR         L               < SAVE @DCT-SERVICE.
         LA          RSLO+XXPSTD,W   < (A)=(SLO).
         BSR         APDADR          < (A)=SLO*16 (EN MOTS)
         LR          A,L             < (L)=(SLO).
         LA          VALESC-DCTESK,W < (A)=.
         CPZR        Y               < DISCRIMINATION +/-.
         JL          Z1220           < CAS D'1NE DEMANDE D'ADRESSAGE
                                     < INDIRECT ; A CONTIENT LA
                                     < VALEUR A DONNER A @...
         JE          Z341            < OK, C'EST UNE INCREMENTATION.
         NGR         A,A             < CAS D'UNE DECREMENTATION :
                                     < =-.
Z341:    EQU         $
<
<        A T T E N T I O N  :
<                    L'ESPACE MEMOIRE ESCLAVE EST
<                    RESIDENT LORSQU'ON EST ICI.
<
         AD          -SLOESC+RAD,L   < ON AJOUTE @ A LA NOUVELLE
                                     < .
Z1220:   EQU         $               < ENTRY 'ADRESSAGE INDIRECT'.
         STA         -SLOESC+RAD,L   < MAJ DE @ DANS L'ESPACE MEMOIRE.
         PLR         L               < RESTAURE (L)=@DCT-SERVICE.
         RSR
<
<
<        + 1   A U T O M A T I Q U E   S U R   @  :
<
<
<        FONCTION :
<                      CETTE ROUTINE EST CHARGEE DE PREPARER
<                    L'INCREMENTATION AUTOMATIQUE (+1) DE @ ;
<                    ELLE EST APPELEE LORS DES LIGNES VIDES
<                    ENVOYEES AU DEBUG.
<
<
<        ARGUMENTS :
<                    (B)=1,
<                    (W)=ADRESSE DCT(ESCLAVE).
<
<
<        RESULTATS :
<                    (Y)=K ('+'),
<                    VALESC(DCTESC)=1.
<
<
PLUS1:   EQU         $
         LYI         YCCIP           < POUR DEMANDER '+'.
         STB         VALESC-DCTESK,W < MISE DE +1 DANS DEMESC.
         RSR
<
<
<        A D R E S S A G E   I N D I R E C T   S U R   @  :
<
<
<        FONCTION :
<                      CETTE ROUTINE PERMET DE PREPARER
<                    LES OPERATIONS D'ADRESSAGE INDIRECT
<                    SUR A-ROND.
<
<
<        RESULTAT :
<                    (Y)=-1.
<
<
AINDIR:  EQU         $
         LYI         YCCIAI          < Y<0.
         RSR                         < AIN'T IT HARD ???
         PAGE
<
<
<        D E B U G   A B S O L U / T R A N S L A T A B L E  :
<
<
<        FONCTION :
<                      NORMALEMENT, LE DEBUG EST UN DEBUG UTILISATEUR
<                    C'EST-A-DIRE QUE LES ADRESSES SONT TRANSLATABLES
<                    ET RELATIVES A SLO ; SOUS :SYS, ON PEUT
<                    DEMANDER A TRAVAILLER EN ABSOLU, DE FACON A
<                    POUVOIR PATCHER LE SYSTEME ON-LINE (!?!!!?!!?).
<
<
<        M O D E   D E B U G   A B S O L U  :
<
<
<        NOTA :
<                      LE BIT 'MEMXXX' DE 'MEMV' LORSQU'IL
<                    EST A '0 INTERDIT, MEME DONC A ":SYS"
<                    L'ACCES AU 'DEBUG ABSOLU' !!!
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DCT(ESCLAVE).
<
<
<        RESULTAT :
<                    BIT1(S(PSTESC))=1.
<
<
ABSAD:   EQU         $
         LA          MEMV
         TBT         MEMXXX          < LES CHOSES DANGEREUSES SONT-ELLES
                                     < AUTORISEES A ":SYS" ???
         JC          Z382X           < ET OUI...
         ADRI        XCCIER,X        < ET NON, DONC UNE ERREUR 'CCI'...
         JMP         Z382Y           < ET C'EST TOUT...
Z382X:   EQU         $
         LA          IDDESC-DCTESC,W
         SBT         IDESC1          < MISE DU DEBUG EN MODE ABSOLU.
Z382:    EQU         $
         STA         IDDESC-DCTESC,W
Z382Y:   EQU         $
         RSR
<
<
<        M O D E   D E B U G   T R A N S L A T A B L E  :
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DCT(ESCLAVE).
<
<
<        RESULTAT :
<                    BIT1(S(PSTESC))=K.
<
<
TRAD:    EQU         $
         LA          IDDESC-DCTESC,W
         RBT         IDESC1          < MISE DU DEBUG EN MODE TRANSLATABLE.
                                     < TRANSALTABLE.
         JMP         Z382            < VERS LA MAJ DE S(PSTESC).
<
<
<        T E S T   D U   M O D E   D U   ' D E B U G '  :
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DE 'DCTESC'.
<
<
<        RESULTAT :
<                    RETOUR OK SI 'DEBUG' TRANSLATABLE,
<                    RETOUR EN ERREUR SI 'DEBUG' ABSOLU.
<
<
TDEBAB:  EQU         $
         LA          IDDESC-DCTESC,W
         TBT         IDESC1          < TEST DU MODE DU DEBUG : TRANSLATABLE (0),
                                     < OU ABSOLU (1) :
         ADCR        X               < ET L'INDEX DE LA GRAMMAIRE EST CALCULE
                                     < EN FONCTION DU MODE, D'OU UN RETOUR :
                                     < OK, SI TRANSLATABLE (0), ET
                                     < EN ERREUR, SI ABSOLU (1)...
         RSR                         < VERS LA GRAMMAIRE DU 'CCI'...



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