<        S I S   C M S 5   3
         PAGE
         PAGE
<
<
<        F O N C T I O N S   R E C O N N U E S  :
<
<
FAVR::   VAL         FGR             < FONCTION D'APPEL LECTURE,
FAVRE::  VAL         FAVR+I          < FONCTION D'APPEL LECTURE AVEC ECHO,
FAVRG::  VAL         9               < FONCTION D'APPEL LECTURE GRAPHIQUE,
FAVOG::  VAL         3               < FONCTION D'APPEL MISE EN GRAPHIQUE,
FAVCG::  VAL         4               < FONCTION D'APPEL ALPHA-NUMERIQUE,
FAVER::  VAL         5               < FONCTION D'APPEL EFFACEMENT ECRAN,
FAVCU::  VAL         6               < FONCTION D'APPEL CURSEUR GRAPHIQUE,
FAVRC::  VAL         8               < FONCTION D'APPEL LECTURE CURSEUR,
FAVWD::  VAL         7               < FONCTION D'APPEL ECRITURE DIRECTE,
<*******************************************************************************
XWOR%F:  VAL         FAVR
FAVR:   @VAL         '0@@@@          < LECTURE SUR VISU.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FAVRE
FAVRE:  @VAL         '0@@@@          < LECTURE SUR VISU AVEC ECHO.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FAVW
FAVW:   @VAL         '0@@@@          < ECRITURE SUR VISU.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FAVOG
FAVOG:  @VAL         '0@@@@          < MISE EN GRAPHIQUE D'UNE VISU.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FAVCG
FAVCG:  @VAL         '0@@@@          < MISE EN ALPHA-NUMERIQUE D'UNE VISU.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FAVER
FAVER:  @VAL         '0@@@@          < EFFACEMENT DE L'ECRAN D'UNE VISU.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FAVCU
FAVCU:  @VAL         '0@@@@          < MISE EN FONCTION CURSEUR GRAPHIQUE VISU.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FAVWD
FAVWD:  @VAL         '0@@@@          < ECRITURE DIRECTE SUR VISU.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FAVRC
FAVRC:  @VAL         '0@@@@          < LECTURE DU CURSEUR D'UNE VISU.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FAVRG
FAVRG:  @VAL         '0@@@@          < LECTURE GRAPHIQUE SUR VISU.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         FAVWG
FAVWG:  @VAL         '0@@@@          < ECRITURE GRAPHIQUE SUR VISU.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<
< ET LEURS "ALTITUDES" D'EXECUTION :
<
XWOR%1:  VAL         K               < INITIALISATION...
XWOR%1:  VAL         COSBT?FAVR=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FAVRE=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FAVW=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         CORBT?FAVWG=FMASK(K?XWOR%1=FCINST
                                     < A T T E N T I O N  : 'FAVWG' (ECRITURE
                                     < GRAPHIQUE NE PEUT S'EXECUTER EN HAUT
                                     < CAR ELLE MODIFE LE BUFFER ARGUMENT
                                     < LORS DU CODAGE DES COORDONNEES (X,Y)
                                     < EN CODE 'ASCI' !!!
XWOR%1:  VAL         COSBT?FAVRG=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FAVOG=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FAVCG=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FAVER=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FAVCU=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FAVRC=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FAVWD=FMASK(K?XWOR%1=FCINST
XVISUP:: VAL         XWOR%1          < LISTE DES "ALTITUDES" DES VISUS.
<
<
<        C O N S T A N T E S   D I V E R S E S  :
<
<
B2400::  VAL         2400
B9600::  VAL         9600
VEQFO::  VAL         '5200           < TABLE D'EQUIVALENCE DES FONCTIONS.
                                     < (VOIR 'DCTVI1' POUR PLUS DE PRECISIONS).
XVBITS:: VAL         '0400           < POUR GENERER 'BITSEM'...
XERAS::  VAL         8*2             < POUR CALCULER LA DUREE D'UN EFFACEMENT.
XALTMO:: VAL         XERAS           < POUR ATTENDRE LE DEUXIEME ALTMODE.
LVPILE:: VAL         9               < POUR CALCULER LES LONGUEURS DE PILE
                                     < DES VISUS.
XVWEIO:: VAL         W               < 'WEIO' INITIAL DE SURVEILLANCE.
XXVNCW:: VAL         LCCINT          < NOMBRE MAXIMUM DE CARACTERES EN
                                     < ATTENTE D'ENTREE (ON PREND 'LCCINT' CAR
                                     < C'EST LE BUFFER D'ANTICIPATION DES VISUS
                                     < QUI EST UTILISE PAR LES COMMANDES "!M..."
XXVNCM:: VAL         XXVNCW-Z        < VALEUR DE TEST DE SATURATION DU BUFFER
                                     < CIRCULAIRE.
XXVOUT:: VAL         K               < VALEUR INITIALE DE L'INDEX DE
                                     < SORTIE DES CARACTERES DU BUFFER
                                     < EN ANNEAU.
         NTRN
XXVIN::  VAL         K-I+XXVNCW/XXVNCW(K=FCREST
         TRN
                                     < VALEUR INITIALE DE L'INDEX D'ENTREE
                                     < DES CARACTERES DANS LE BUFFER EN
                                     < ANNEAU.
         NTRN
XXCBA0:: VAL         XXVIN+I-XXVOUT/XXVNCW(K=FCREST
         TRN
                                     < VALEUR INITIALE DE 'KCWIO'.
         IF          XXCBA0-K,,XEIF%,
         IF          ATTENTION : 'XXCBA0' N'ETANT PAS NUL, IL
         IF          Y A DES VIDAGES DU BUFFER D'ANTICIPATION QUI
         IF          VONT MERDER !!!
XEIF%:   VAL         ENDIF
XXVXY::  VAL         2               < NOMBRE DE COORDONNEES CONTENUES
                                     < DANS UN COUPLE (X,Y).
XWOR%1:  VAL         K
XWOR%1:  VAL         COSBT?FAVR=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FAVRE=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FAVW=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FAVWG=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FAVRG=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FAVOG=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FAVCG=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FAVER=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FAVCU=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FAVRC=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FAVWD=FMASK(K?XWOR%1=FCINST
XXVFO::  VAL         XWOR%1          < LISTE DES FONCTIONS RECONNUES.
XXVLC::  VAL         1+NBITOC+1      < NOMBRE DE BITS POUR UN CARACTERE :
                                     < 1 : POUR LE BIT 'START',
                                     < NBITOC : POUR L'INFORMATION,
                                     < 1 : POUR UN BIT DE 'STOP'.
LPILID:: VAL         3               < NOMBRES D'ENTREES DANS LA PILE
                                     < D'IMBRICATION DES UTILISATEURS ATTACHES
                                     < A UNE MEME VISU PAR LA COMMANDE "!U".
UPILID:: VAL         1               < NOMBRE DE MOTS COMPOSANT UNE ENTREE : ON
                                     < EMPILE 'IOID' ; A NOTER QUE 'CARALT'
                                     < N'A PAS BESOIN D'ETRE EMPILE, CAR "!U"
                                     < PASSANT PAR LE NOYAU DU 'CCI' REINITIA-
                                     < LISE 'CARALT' AVEC 'KALTM'...
XPILID:: VAL         LPILID*UPILID   < LONGUEUR EN MOTS DE LA PILE LOCALE
                                     < A CHAQUE VISU DE RECURSION PAR "!U".
         IF          NESCLA-LPILID,,,XEIF%
         IF          ATTENTION : C'EST TROP LONG, CELA NE SERT A RIEN !!!
XEIF%:   VAL         ENDIF
XXEXEX:: VAL         K               < VALEUR INITIALE DE 'INEXEX'.
<
< DEFINITION DE LA CONSTANTE MAGIQUE :
<
NMAGIC:: VAL         K               < VALEUR DE NON UTILISATION DE LA CONSTANTE
                                     < MAGIQUE...
KMAGIC:: VAL         MAGIK           < CONSTANTE MAGIQUE...
XWOR%7:  VAL         K               < INITIALISATION DU CUMUL...
         NTRN
         DO          BASE16
XWOR%7:  VAL K=FCDO*KMAGIC/BASE16(K=FCREST?COSBT=FMASK(K?XWOR%7=FCINST
XWOR%8:  VAL         K               < INITIALISATION DU CUMUL...
         DO          BASE16
XWOR%8:  VAL K=FCDO?COSBT=FMASK(K?XWOR%8=FCINST
         TRN
         IF          XWOR%7-XWOR%8,,XEIF%,
         IF          ATTENTION : LA CONSTANTE MAGIQUE 'KMAGIC'
         IF          N'OPERE PAS UNE PERMUTATION DES 16 CHIFFRES
         IF          DE 0 A F !!!
XEIF%:   VAL         ENDIF
<
< TABLE DES TRANSPOSES (LE DEUXIEME
< OCTET DONNE LE TRANSPOSE DU PREMIER) :
<
         DO          BASE16
XWOR%9:  VAL         K=FCDO>NBITOC=FCPUSH(K=FCDO*KMAGIC(MBAS16=FCPULL
<
< DEFINITION DE LA TEMPORISATION
< INTER-CARACTERES A L'EMISSION,
< AINSI QUE DE LA GESTION DU
< BIT DE PARITE DES CARACTERES :
<
NTEMPI:: VAL         K               < 'NTEMPI' SI TEMPORISATION NON NECESSAIRE.
VTEMPI:: VAL         -20000          < 'VTEMPI' EST LA TEMPORISATION NECESSAIRE
                                     < (A CAUSE DU DISQUE VIDEO) ; ELLE EST
                                     < EXPRIMEE EN 'THALT'-MICROSECONDES...
XWOR%1:  VAL         1000            < 1 MILLI-SECONDE=1000 MICRO-SECONDE...
XWOR%2:  VAL         VTEMPI/XWOR%1*THALT
XWOR%2:  VAL         -XWOR%2         < DUREE EN MILLI-SECONDES DE LA TEMPO-
                                     < RISATION SUR LE DISQUE-VIDEO...
NBITPA:: VAL         CORBT?BITPAR=FMASK(K=FCINST
                                     < 'NBITPA' : LE BIT DE PARITE EST LAISSE
                                     <            TEL QU'IL EST RECU,
VBITPA:: VAL         COSBT?BITPAR=FMASK(K=FCINST
                                     < 'VBITPA' : LE BIT DE PARITE EST FORCE A
                                     <            1 ; CELA EST DU AU DISQUE
                                     <            VIDEO QUI ENVOIE DES CARAC-
                                     <            TERES SANS PARITE...
         IF          NSPVI1-NSPVDK,,XEIF%,
TEMPI1:: VAL         NTEMPI          < PAS DE TEMPORISATION...
BITPA1:: VAL         NBITPA          < BIT DE PARITE INCHANGE...
XEIF%:   VAL         ENDIF
         IF          NSPVI1-NSPVDK,XEIF%,,XEIF%
TEMPI1:: VAL         VTEMPI          < ET OUI, POUR LE DISQUE VIDEO IL FAUT
                                     < UNE GROSSE TEMPORISATION INTER-CARACTERE.
BITPA1:: VAL         VBITPA          < BIT DE PARITE FORCE A 1...
XEIF%:   VAL         ENDIF
         IF          NSPVI2-NSPVDK,,XEIF%,
TEMPI2:: VAL         NTEMPI          < PAS DE TEMPORISATION...
BITPA2:: VAL         NBITPA          < BIT DE PARITE INCHANGE...
XEIF%:   VAL         ENDIF
         IF          NSPVI2-NSPVDK,XEIF%,,XEIF%
TEMPI2:: VAL         VTEMPI          < ET OUI, POUR LE DISQUE VIDEO IL FAUT
                                     < UNE GROSSE TEMPORISATION INTER-CARACTERE.
BITPA2:: VAL         VBITPA          < BIT DE PARITE FORCE A 1...
XEIF%:   VAL         ENDIF
         IF          NSPVI3-NSPVDK,,XEIF%,
TEMPI3:: VAL         NTEMPI          < PAS DE TEMPORISATION...
BITPA3:: VAL         NBITPA          < BIT DE PARITE INCHANGE...
XEIF%:   VAL         ENDIF
         IF          NSPVI3-NSPVDK,XEIF%,,XEIF%
TEMPI3:: VAL         VTEMPI          < ET OUI, POUR LE DISQUE VIDEO IL FAUT
                                     < UNE GROSSE TEMPORISATION INTER-CARACTERE.
BITPA3:: VAL         VBITPA          < BIT DE PARITE FORCE A 1...
XEIF%:   VAL         ENDIF
         IF          NSPVI4-NSPVDK,,XEIF%,
TEMPI4:: VAL         NTEMPI          < PAS DE TEMPORISATION...
BITPA4:: VAL         NBITPA          < BIT DE PARITE INCHANGE...
XEIF%:   VAL         ENDIF
         IF          NSPVI4-NSPVDK,XEIF%,,XEIF%
TEMPI4:: VAL         VTEMPI          < ET OUI, POUR LE DISQUE VIDEO IL FAUT
                                     < UNE GROSSE TEMPORISATION INTER-CARACTERE.
BITPA4:: VAL         VBITPA          < BIT DE PARITE FORCE A 1...
XEIF%:   VAL         ENDIF
         IF          NSPVI5-NSPVDK,,XEIF%,
TEMPI5:: VAL         NTEMPI          < PAS DE TEMPORISATION...
BITPA5:: VAL         NBITPA          < BIT DE PARITE INCHANGE...
XEIF%:   VAL         ENDIF
         IF          NSPVI5-NSPVDK,XEIF%,,XEIF%
TEMPI5:: VAL         VTEMPI          < ET OUI, POUR LE DISQUE VIDEO IL FAUT
                                     < UNE GROSSE TEMPORISATION INTER-CARACTERE.
BITPA5:: VAL         VBITPA          < BIT DE PARITE FORCE A 1...
XEIF%:   VAL         ENDIF
         IF          NSPVI6-NSPVDK,,XEIF%,
TEMPI6:: VAL         NTEMPI          < PAS DE TEMPORISATION...
BITPA6:: VAL         NBITPA          < BIT DE PARITE INCHANGE...
XEIF%:   VAL         ENDIF
         IF          NSPVI6-NSPVDK,XEIF%,,XEIF%
TEMPI6:: VAL         VTEMPI          < ET OUI, POUR LE DISQUE VIDEO IL FAUT
                                     < UNE GROSSE TEMPORISATION INTER-CARACTERE.
BITPA6:: VAL         VBITPA          < BIT DE PARITE FORCE A 1...
XEIF%:   VAL         ENDIF
         IF          NSPVI7-NSPVDK,,XEIF%,
TEMPI7:: VAL         NTEMPI          < PAS DE TEMPORISATION...
BITPA7:: VAL         NBITPA          < BIT DE PARITE INCHANGE...
XEIF%:   VAL         ENDIF
         IF          NSPVI7-NSPVDK,XEIF%,,XEIF%
TEMPI7:: VAL         VTEMPI          < ET OUI, POUR LE DISQUE VIDEO IL FAUT
                                     < UNE GROSSE TEMPORISATION INTER-CARACTERE.
BITPA7:: VAL         VBITPA          < BIT DE PARITE FORCE A 1...
XEIF%:   VAL         ENDIF
         IF          NSPVI8-NSPVDK,,XEIF%,
TEMPI8:: VAL         NTEMPI          < PAS DE TEMPORISATION...
BITPA8:: VAL         NBITPA          < BIT DE PARITE INCHANGE...
XEIF%:   VAL         ENDIF
         IF          NSPVI8-NSPVDK,XEIF%,,XEIF%
TEMPI8:: VAL         VTEMPI          < ET OUI, POUR LE DISQUE VIDEO IL FAUT
                                     < UNE GROSSE TEMPORISATION INTER-CARACTERE.
BITPA8:: VAL         VBITPA          < BIT DE PARITE FORCE A 1...
XEIF%:   VAL         ENDIF
         CALL        #SISP CMS5 CHECK#
         PAGE
<
<
<        D C T   V I S U   V O I E   1 :
<
<
BAUDS1:: VAL         B2400           < VITESSE DE TRANSMISSION VOIE 1.
<
<
         CALL        #SISP CMS5 DOL1#
DCTVI1:  EQU         $
PSTVI1:  WORD        K;K;K;K;COM+DEPCS;DCTVI1;NIL;PILVI1;HANDLR;SMST;SO;SE
       #@ASCI        " VI1"          < #SISP CMS5 ASCI#
         BYTE        NSPVI1;NOUSER   < IOID.
                                     < BIT0-7=NSP VISU OUT ASSOCIEE,
                                     < BIT8=K : PAS D'ESCLAVE ATTACHE,
                                     <     =1 : ESCLAVE ATTACHE OU EN
                                     <          COURS D'ATTACHEMENT,
                                     < BIT9-15=ID. DE CET ESCLAVE
                                     <         S'IL EXISTE.
         WORD        NFILTR
         WORD        FILTRS          < S-FILTRE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC
         DZS         LSEM
         WORD        NIL             < TETE DE LA FILE D'ATTENTE SUR
                                     < LA VISU VOIE1.
         WORD        NIL             < QUEUE
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT
         DZS         TFONCE-D        < 1ERE PARTIE DE LA FILE D'ATTENTE
                                     < DU SEMAPHORE 'SIT'.
         WORD        VEQFO           < TABLE D'EQUIVALENCE 'TFONCE'
                                     < DES FONCTIONS :
                                     < FONCTION '03 : 1 CARACTERE 'GS'
                                     <                ECRIT,
                                     < FONCTION '04 : 1 CARACTERE 'US'
                                     <                ECRIT,
                                     < FONCTION '05 : 'ERASE' N'EST PAS
                                     <                CONSIDERE COMME
                                     <                UNE E/S EFFECTIVE,
                                     < FONCTION '06 : 2 CARACTERES 'ESC'
                                     <                ET 'SUB' ECRITS.
                                     < FONCTION '07 : N'EST PAS CONSI-
                                     <                DERREE COMME UNE
                                     <                E/S EFFECTIVE,
                                     <                AFIN DE LAISSER
                                     <                SON CODEM INTEGRE.
         DZS         LSEM-TFONCE     < DERNIERE PARTIE DE LA FILE
                                     < D'ATTENTE DU SEMAPHORE 'SIT'.
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLVIS          < ADRESSE DE LA ROUTINE SPECIFIQUE
                                     < DES ENTREES-SORTIES VISU.
         WORD        ITVIS           < ROUTINE SPECIFIQUE DES PSEUDOS-IT
                                     < DES VISUS (CF. LE DISPATCH).
         WORD        K;VISOTI        < VALEUR INITIALE DE L'ETAT
         WORD        XVBITS          < BITSEM.
                                     < DUREE D'E/S RELATIVE A 1 CARACTERE
                                     < = 8 FOIS CELLE DE L'IMPRIMANTE.
         WORD        XXNTRY;TRYVID   < NTRIES & FRETRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXVFO           < LISTE DES FONCTIONS RECONNUES.
         WORD        XVISUP          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
<        Z O N E   V A R I A B L E   " T Y P E - V I S U "  :
<
VARVI:   EQU         $               < LES SYMBOLES NE SONT DEFINIS QUE
                                     < POUR LA VOIE1, ILS ONT ONT LA
                                     < MEME VALEUR SUR LES AUTRES VOIES.
VARVI1:  EQU         $
         IF          VARVI1-DCTVI1-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
<
< SOUS-PROGRAMMES LOCAUX AUX VISUS :
<
         WORD        WVISU
AWVISU:: VAL         $-D-VARVI       < SOUS-PROGRAMME D'ECRITURE D'UN CARACTERE.
         WORD        WITVI
AWITVI:: VAL         $-D-VARVI       < SOUS-PROGRAMME D'ATTENTE D'UNE INTER-
                                     < RUPTION QUELCONQUE.
         WORD        E61
AE61::   VAL         $-D-VARVI       < MALHEUREUX RELAI...
         WORD        VILBY
AVILBY:: VAL         $-D-VARVI       < SIMULATION DU 'LBY' SUR 'RBUVI'.
         WORD        VISBY
AVISBY:: VAL         $-D-VARVI       < SIMULATION DU 'STBY' SUR 'RBUVI'.
<
< ARGUMENTS DE 'SIO' :
<
         WORD        ACVI1?FPHETA
ETAVI::  VAL         $-D-VARVI       < OPERANDE SIO ENTREE ETAT
         WORD        ACVI1?FPHIN
INVI::   VAL         $-D-VARVI       < OPERANDE SIO ENTREE INFO
         WORD        ACVI1?FPHOUT
SORVI::  VAL         $-D-VARVI       < OPERANDE SIO SORTIE INFO
         WORD        ACVI1?FPHCMD
CDEVI::  VAL         $-D-VARVI       < OPERANDE SIO SORTIE COMMANDE
<
< ARGUMENT D'UNE DEMANDE DE SURVEILLANCE :
< (ATTENTION : 'AMDEM' ET 'CODEM' SONT
< UTILISES PAR 'BOEREA' ET 'BOALT' !!!)
<
         BYTE        NSPSUR;XDSYM
SURVIS:: VAL         $-D-VARVI
         WORD        K
         NTRN
         WORD        BAUDS1/XERAS
         TRN
BOERA::  VAL         $-D-VARVI       < NBRE DE CARACTERE DE TEMPORI-
                                     < SATION 'KTEMPO' A EMETTRE POUR
                                     < ATTENDRE L'ERASE DE L'ECRAN.
         NTRN
         WORD        BAUDS1/XALTMO
         TRN
BOALT::  VAL         $-D-VARVI       < NBRE DE CARACTERES DE TEMPORI-
                                     < SATION 'KTEMPO' A EMETTRE POUR
                                     < ATTENDRE UN EVENTUEL 2EME
                                     < CARACTERE D'ABORT.
<
<        A T T E N T I O N  :
<                      BOERA ET BOALT OCCUPENT LES MOTS
<                    AMDEM ET CODEM RESPECTIVEMENT DE
<                    LA DEMANDE DE SURVEILLANCE !!!
<
         BYTE        NSPVI1;XDPRIO?XDSYM
                                     < FUTUR NSPTYP PRIORITAIRE DE SURVEILLANCE
                                     < SURVEILLANCE QUE L'ON MET DANS
                                     < 'ASDEM'...
         WORD        K
         WORD        XVWEIO          < WEIO.
         WORD        NIL             < NEXT
<
<        TABLE DE TABULATION :
<
         WORD        TABUL1-IJIJDX,X
ATABUL:: VAL         $-D-VARVI
TABUL1:  EQU         $
         CALL        #SISP CMS5 TAB1#
<
< INFORMATIONS DIVERSES :
<
         WORD        XXEXEX
INEXEX:: VAL         $-D-VARVI       < 'INEXEX' CONTROLE LES EXTENSIONS :
                                     < INEXEX=K : LES EXPANSION ET
                                     < EXTENSIONS DE CARACTERES SONT
                                     < AUTORISEES,
                                     < INEXEX>0 : LES EXTENSIONS ET
                                     < EXPANSIONS SONT INHIBEES,
                                     < LES CODES SONT DONC TRANSMIS
                                     < TELS QU'ILS SONT FOURNIS EN
                                     < ARGUMENT DES DEMANDES;
                                     < A T T E N T I O N  :
                                     < INEXEX EST REMIS A 0 A CHAQUE
                                     < PASSAGE AU CCI INTERACTIF.
         WORD        NILX
RBUVI::  VAL         $-D-VARVI       < RELAI VERS LE BUFFER UTILISE
                                     < PAR LA VISU.
<
< SAUVEGARDE DU CARACTERE REELLEMENT LU :
<
         WORD        NILK
CARIN::  VAL         $-D-VARVI
<
< DERNIER CARACTERE LU
<
         WORD        NILK
DCARLU:: VAL         $-D-VARVI
<
< SAUVEGARDE ETAT VISU
<
         WORD        NILK
SAVETA:: VAL         $-D-VARVI
<
< SAUVEGARDE CARACTERE LU
<
         WORD        LVCW1,X
ALVCW::  VAL         $-D-VARVI       < RELAI PERMETTANT UN ACCES EN OCTET
                                     < DU BUFFER EN ANNEAU.
         WORD        XXVIN
ICWIN::  VAL         $-D-VARVI       < INDEX D'INSERTION DE CARACTERES DANS
                                     < LE BUFFER EN ANNEAU.
         WORD        XXVOUT
ICWOUT:: VAL         $-D-VARVI       < INDEX D'EXTRACTION DE CARACTERES
                                     < DU BUFFER EN ANNEAU.
         WORD        XXCBA0
KCWIO::  VAL         $-D-VARVI       < COMPTEUR DES CARACTERES EN ATTENTE
                                     < DANS LE BUFFER ; VAUT EN FAIT
                                     < 'IN'+1-'OUT' MODULO 'XXVNCW'.
<
< INDICATEUR CARACTERE D'ABORT RECU :
<
         WORD        NILK            < CONTIENT LE CODE DU 'ALT-MODE'
                                     < ('7D) DES QUE LE CARACTERE ABORT
                                     < A ETE RECU ; IL N'EST REMIS A 0
                                     < QUE DANS 'ALTOUT', ET N'EST
                                     < TESTE QU'A LA SORTIE DES
                                     < HANDLERS (EN Z700).
IALTM::  VAL         $-D-VARVI
<
< CARACTERE COURANT D'ABORT :
<
         WORD        KALTM           < LE CARACTERE COURANT D'ABORT
                                     < EST INITIALISE AVEC 'ALT-MODE',
                                     < ET RE-INITIALISE PAR 'ALT-MODE'
                                     < A CHAQUE PASSAGE DANS LE CCI EN
                                     < MODE INTERACTIF.
CARALT:: VAL         $-D-VARVI
<
< CONSTANTE MAGIQUE :
<
         WORD        NMAGIC
VMAGIC:: VAL         $-D-VARVI       < CETTE CONSTANTE VAUT 'NMAGIC' (PAS DE
                                     < CONSTANTE MAGIQUE) OU 'KMAGIC'...
<
< TEMPORISATION INTER-CARACTERES
< A L'EMISSION (OUT) :
<
         WORD        TEMPI1
TEMPIC:: VAL         $-D-VARVI       < TEMPO INTER-CARACTERES A L'EMISSION.
<
< GESTION DU BIT DE PARITE :
<
         WORD        BITPA1
VIPARI:: VAL         $-D-VARVI       < CONTIENT 'NBITPA' OU 'VBITPA', SUIVANT
                                     < QUI FAUT LAISSE INCHANGE LE BIT DE
                                     < PARTITE OU BIEN LE FORCER A 1...
<
< GESTION DE L'EMPILEMENT DES UTILISATEURS PAR "!U" :
<
         WORD        PILID1
APILID:: VAL         $-D-VARVI       < ADRESSE DE LA PILE DE RECURSION.
         CALL        #SISP CMS5 DOL2#
PILID1:  EQU         $
XWPILE:  VAL         XPILID
         CALL        #SISP CMS5 GENPIL3#
         CALL        #SISP CMS5 DOL1#
<
< BUFFER EN ANNEAU DES CARACTERES 'IN' :
<
LVCW1:   EQU         $
         NTRN
         DZS         XXVNCW+NOCMO-E/NOCMO
         TRN
<
< PILE DU HANDLER :
<
XWPILE:  VAL         LPILEH+LVPILE
PILVI1:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        D C T   V I S U   V O I E   2 :
<
<
BAUDS2:: VAL         B2400           < VITESSE DE TRANSMISSION VOIE 2.
<
<
DCTVI2:  EQU         $
PSTVI2:  WORD        K;K;K;K;COM+DEPCS;DCTVI2;NIL;PILVI2;HANDLR;SMST;SO;SE
       #@ASCI        " VI2"          < #SISP CMS5 ASCI#
         BYTE        NSPVI2;NOUSER   < IOID.
         WORD        NFILTR
         WORD        FILTRS          < S-FILTRE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC
         DZS         LSEM
         WORD        NIL             < TETE
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT
         DZS         TFONCE-D
         WORD        VEQFO           < TABLE D'EQUIVALENCE-FONCTIONS.
         DZS         LSEM-TFONCE
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLVIS          < ROUTINE SPECIFIQUE VISU.
         WORD        ITVIS
         WORD        K;VISOTI        < VALEUR INITIALE DE L'ETAT
         WORD        XVBITS          < BITSEM.
         WORD        XXNTRY;TRYVID   < NTRIES & FRETRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXVFO           < DCTFON.
         WORD        XVISUP          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE VISU :
<
VARVI2:  EQU         $
         IF          VARVI2-DCTVI2-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        WVISU           < S/P D'ECRITURE D'UN CARACTERE.
         WORD        WITVI           < S/P D'ATTENTE D'UNE IT QUELCONQUE.
         WORD        E61             < MALHEUREUX RELAI...
         WORD        VILBY           < SIMULATION DE 'LBY' SUR 'RBUVI'.
         WORD        VISBY           < SIMULATION DE 'STBY' SUR 'RBUVI'.
         WORD        ACVI2?FPHETA    < OPERANDE SIO ENTREE ETAT.
         WORD        ACVI2?FPHIN     < OPERANDE SIO ENTREE INFO.
         WORD        ACVI2?FPHOUT    < OPERANDE SIO SORTIE INFO.
         WORD        ACVI2?FPHCMD    < OPERANDE SIO SORTIE COMMANDE.
         BYTE        NSPSUR;XDSYM    < DEMANDE DE SURVEILLANCE.
         WORD        K
         NTRN
         WORD        BAUDS2/XERAS    < TEMPORISATION ERASE ECRAN.
         WORD        BAUDS2/XALTMO   < TEMPORISATION 2EME ABORT.
         TRN
         BYTE        NSPVI2;XDPRIO?XDSYM
         WORD        K
         WORD        XVWEIO          < WEIO.
         WORD        NIL
         WORD        TABUL2-IJIJDX,X
TABUL2:  EQU         $
         CALL        #SISP CMS5 TAB1#
         WORD        XXEXEX          < INEXEX.
         WORD        NILX            < RELAI VERS LE BUFFER.
         WORD        NILK            < CARACTERE REELLEMENT LU.
         WORD        NILK            < DERNIER CARACTERE LU
         WORD        NILK            < SAUVEGARDE MOT D'ETAT VISU
         WORD        LVCW2,X         < RELAI D'ACCES A L'ANNEAU.
         WORD        XXVIN           < INDEX D'INSERTION DANS L'ANNEAU,
         WORD        XXVOUT          < INDEX D'EXTRACTION DE L'ANNEAU.
         WORD        XXCBA0          < COMPTEUR DES CARACTERES DE L'ANNEAU.
         WORD        NILK            < INDICATEUR 'ALT-MODE' RECU.
         WORD        KALTM           < CARACTERE COURANT D'ABORT.
         WORD        NMAGIC          < CONSTANTE MAGIQUE.
         WORD        TEMPI2          < TEMPO INTER-CARACTERES D'EMISSION.
         WORD        BITPA2          < ACTION SUR LE BIT DE PARITE.
         WORD        PILID2
         CALL        #SISP CMS5 DOL2#
PILID2:  EQU         $
XWPILE:  VAL         XPILID
         CALL        #SISP CMS5 GENPIL3#
         CALL        #SISP CMS5 DOL1#
<
< BUFFER EN ANNEAU DES CARACTERES 'IN' :
<
LVCW2:   EQU         $               < BUFFER EN ANNEAU DES CARACTERES 'IN'.
         NTRN
         DZS         XXVNCW+NOCMO-E/NOCMO
         TRN
<
< PILE DU HANDLER :
<
XWPILE:  VAL         LPILEH+LVPILE
PILVI2:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        D C T   V I S U   V O I E   3 :
<
<
BAUDS3:: VAL         B2400           < VITESSE DE TRANSMISSION VOIE 3.
<
<
DCTVI3:  EQU         $
PSTVI3:  WORD        K;K;K;K;COM+DEPCS;DCTVI3;NIL;PILVI3;HANDLR;SMST;SO;SE
       #@ASCI        " VI3"          < #SISP CMS5 ASCI#
         BYTE        NSPVI3;NOUSER   < IOID.
         WORD        NFILTR
         WORD        FILTRS          < S-FILTRE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC
         DZS         LSEM
         WORD        NIL             < TETE
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT
         DZS         TFONCE-D
         WORD        VEQFO           < TABLE D'EQUIVALENCE-FONCTIONS.
         DZS         LSEM-TFONCE
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLVIS
         WORD        ITVIS
         WORD        K;VISOTI        < VALEUR INITIALE DE L'ETAT
         WORD        XVBITS          < BITSEM.
         WORD        XXNTRY;TRYVID   < NTRIES & FRETRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO
         WORD        XXVFO           < DCTFON.
         WORD        XVISUP          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE VISU :
<
VARVI3:  EQU         $
         IF          VARVI3-DCTVI3-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        WVISU           < S/P D'ECRITURE D'UN CARACTERE.
         WORD        WITVI           < S/P D'ATTENTE D'UNE IT QUELCONQUE.
         WORD        E61             < MALHEUREUX RELAI...
         WORD        VILBY           < SIMULATION DE 'LBY' SUR 'RBUVI'.
         WORD        VISBY           < SIMULATION DE 'STBY' SUR 'RBUVI'.
         WORD        ACVI3?FPHETA    < OPERANDE SIO ENTREE ETAT.
         WORD        ACVI3?FPHIN     < OPERANDE SIO ENTREE INFO.
         WORD        ACVI3?FPHOUT    < OPERANDE SIO SORTIE INFO.
         WORD        ACVI3?FPHCMD    < OPERANDE SIO SORTIE COMMANDE.
         BYTE        NSPSUR;XDSYM    < DEMANDE DE SURVEILLANCE.
         WORD        K
         NTRN
         WORD        BAUDS3/XERAS    < TEMPORISATION ERASE ECRAN.
         WORD        BAUDS3/XALTMO   < TEMPORISATION 2EME ABORT.
         TRN
         BYTE        NSPVI3;XDPRIO?XDSYM
         WORD        K
         WORD        XVWEIO          < WEIO.
         WORD        NIL
         WORD        TABUL3-IJIJDX,X
TABUL3:  EQU         $
         CALL        #SISP CMS5 TAB1#
         WORD        XXEXEX          < INEXEX.
         WORD        NILX            < RELAI VERS LE BUFFER.
         WORD        NILK            < CARACTERE REELLEMENT LU.
         WORD        NILK            < DERNIER CARACTERE LU
         WORD        NILK            < SAUVEGARDE MOT D'ETAT VISU
         WORD        LVCW3,X         < RELAI D'ACCES A L'ANNEAU.
         WORD        XXVIN           < INDEX D'INSERTION DANS L'ANNEAU,
         WORD        XXVOUT          < INDEX D'EXTRACTION DE L'ANNEAU.
         WORD        XXCBA0          < COMPTEUR DES CARACTERES DE L'ANNEAU.
         WORD        NILK            < INDICATEUR 'ALT-MODE' RECU.
         WORD        KALTM           < CARACTERE COURANT D'ABORT.
         WORD        NMAGIC          < CONSTANTE MAGIQUE.
         WORD        TEMPI3          < TEMPO INTER-CARACTERES D'EMISSION.
         WORD        BITPA3          < ACTION SUR LE BIT DE PARITE.
         WORD        PILID3
         CALL        #SISP CMS5 DOL2#
PILID3:  EQU         $
XWPILE:  VAL         XPILID
         CALL        #SISP CMS5 GENPIL3#
         CALL        #SISP CMS5 DOL1#
<
< BUFFER EN ANNEAU DES CARACTERES 'IN' :
<
LVCW3:   EQU         $               < BUFFER EN ANNEAU DES CARACTERES 'IN'.
         NTRN
         DZS         XXVNCW+NOCMO-E/NOCMO
         TRN
<
< PILE DU HANDLER :
<
XWPILE:  VAL         LPILEH+LVPILE
PILVI3:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        D C T   V I S U   V O I E   4 :
<
<
BAUDS4:: VAL         B2400           < VITESE DE TRANSMISSION VOIE 4.
<
<
DCTVI4:  EQU         $
PSTVI4:  WORD        K;K;K;K;COM+DEPCS;DCTVI4;NIL;PILVI4;HANDLR;SMST;SO;SE
       #@ASCI        " VI4"          < #SISP CMS5 ASCI#
         BYTE        NSPVI4;NOUSER   < IOID.
         WORD        NFILTR
         WORD        FILTRS          < S-FILTRE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC
         DZS         LSEM
         WORD        NIL             < TETE.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT
         DZS         TFONCE-D
         WORD        VEQFO           < TABLE D'EQUIVALENCE-FONCTIONS.
         DZS         LSEM-TFONCE
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLVIS
         WORD        ITVIS
         WORD        K;VISOTI        < VALEUR INITIALE DE L'ETAT
         WORD        XVBITS          < BITSEM.
         WORD        XXNTRY;TRYVID   < NTRIES & FRETRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXVFO           < DCTFON.
         WORD        XVISUP          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE VISU :
<
VARVI4:  EQU         $
         IF          VARVI4-DCTVI4-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        WVISU           < S/P D'ECRITURE D'UN CARACTERE.
         WORD        WITVI           < S/P D'ATTENTE D'UNE IT QUELCONQUE.
         WORD        E61             < MALHEUREUX RELAI...
         WORD        VILBY           < SIMULATION DE 'LBY' SUR 'RBUVI'.
         WORD        VISBY           < SIMULATION DE 'STBY' SUR 'RBUVI'.
         WORD        ACVI4?FPHETA    < OPERANDE SIO ENTREE ETAT.
         WORD        ACVI4?FPHIN     < OPERANDE SIO ENTREE INFO.
         WORD        ACVI4?FPHOUT    < OPERANDE SIO SORTIE INFO.
         WORD        ACVI4?FPHCMD    < OPERANDE SIO SORTIE COMMANDE.
         BYTE        NSPSUR;XDSYM    < DEMANDE DE SURVEILLANCE.
         WORD        K
         NTRN
         WORD        BAUDS4/XERAS    < TEMPORISATION ERASE ECRAN.
         WORD        BAUDS4/XALTMO   < TEMPORISATION 2EME ABORT.
         TRN
         BYTE        NSPVI4;XDPRIO?XDSYM
         WORD        K
         WORD        XVWEIO          < WEIO.
         WORD        NIL
         WORD        TABUL4-IJIJDX,X
TABUL4:  EQU         $
         CALL        #SISP CMS5 TAB1#
         WORD        XXEXEX          < INEXEX.
         WORD        NILX            < RELAI VERS LE BUFFER.
         WORD        NILK            < CARACTERE REELLEMENT LU.
         WORD        NILK            < DERNIER CARACTERE LU
         WORD        NILK            < SAUVEGARDE MOT D'ETAT VISU
         WORD        LVCW4,X         < RELAI D'ACCES A L'ANNEAU.
         WORD        XXVIN           < INDEX D'INSERTION DANS L'ANNEAU,
         WORD        XXVOUT          < INDEX D'EXTRACTION DE L'ANNEAU.
         WORD        XXCBA0          < COMPTEUR DES CARACTERES DE L'ANNEAU.
         WORD        NILK            < INDICATEUR 'ALT-MODE' RECU.
         WORD        KALTM           < CARACTERE COURANT D'ABORT.
         WORD        NMAGIC          < CONSTANTE MAGIQUE.
         WORD        TEMPI4          < TEMPO INTER-CARACTERES D'EMISSION.
         WORD        BITPA4          < ACTION SUR LE BIT DE PARITE.
         WORD        PILID4
         CALL        #SISP CMS5 DOL2#
PILID4:  EQU         $
XWPILE:  VAL         XPILID
         CALL        #SISP CMS5 GENPIL3#
         CALL        #SISP CMS5 DOL1#
<
< BUFFER EN ANNEAU DES CARACTERES 'IN' :
<
LVCW4:   EQU         $               < BUFFER EN ANNEAU DES CARACTERES 'IN'.
         NTRN
         DZS         XXVNCW+NOCMO-E/NOCMO
         TRN
<
< PILE DU HANDLER :
<
XWPILE:  VAL         LPILEH+LVPILE
PILVI4:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        D C T   V I S U   V O I E   5 :
<
<
BAUDS5:: VAL         B9600           < VITESSE DE TRANSMISSION VOIE 5.
<
<
DCTVI5:  EQU         $
PSTVI5:  WORD        K;K;K;K;COM+DEPCS;DCTVI5;NIL;PILVI5;HANDLR;SMST;SO;SE
       #@ASCI        " VI5"          < #SISP CMS5 ASCI#
         BYTE        NSPVI5;NOUSER   < IOID.
         WORD        NFILTR
         WORD        FILTRS          < S-FILTRE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC
         DZS         LSEM
         WORD        NIL             < TETE.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT
         DZS         TFONCE-D
         WORD        VEQFO           < TABLE D'EQUIVALENCE-FONCTIONS.
         DZS         LSEM-TFONCE
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLVIS
         WORD        ITVIS
         WORD        K;VISOTI        < VALEUR INITIALE DE L'ETAT
         WORD        XVBITS          < BITSEM.
         WORD        XXNTRY;TRYVID   < NTRIES & FRETRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXVFO           < DCTFON
         WORD        XVISUP          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE VISU :
<
VARVI5:  EQU         $
         IF          VARVI5-DCTVI5-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        WVISU           < S/P D'ECRITURE D'UN CARACTERE.
         WORD        WITVI           < S/P D'ATTENTE D'UNE IT QUELCONQUE.
         WORD        E61             < MALHEUREUX RELAI...
         WORD        VILBY           < SIMULATION DE 'LBY' SUR 'RBUVI'.
         WORD        VISBY           < SIMULATION DE 'STBY' SUR 'RBUVI'.
         WORD        ACVI5?FPHETA    < OPERANDE SIO ENTREE ETAT.
         WORD        ACVI5?FPHIN     < OPERANDE SIO ENTREE INFO.
         WORD        ACVI5?FPHOUT    < OPERANDE SIO SORTIE INFO.
         WORD        ACVI5?FPHCMD    < OPERANDE SIO SORTIE COMMANDE.
         BYTE        NSPSUR;XDSYM    < DEMANDE DE SURVEILLANCE.
         WORD        K
         NTRN
         WORD        BAUDS5/XERAS    < TEMPORISATION ERASE ECRAN.
         WORD        BAUDS5/XALTMO   < TEMPORISATION 2EME ABORT.
         TRN
         BYTE        NSPVI5;XDPRIO?XDSYM
         WORD        K
         WORD        XVWEIO          < WEIO.
         WORD        NIL
         WORD        TABUL5-IJIJDX,X
TABUL5:  EQU         $
         CALL        #SISP CMS5 TAB1#
         WORD        XXEXEX          < INEXEX.
         WORD        NILX            < RELAI VERS LE BUFFER.
         WORD        NILK            < CARACTERE REELLEMENT LU.
         WORD        NILK            < DERNIER CARACTERE LU
         WORD        NILK            < SAUVEGARDE MOT D'ETAT VISU
         WORD        LVCW5,X         < RELAI D'ACCES A L'ANNEAU.
         WORD        XXVIN           < INDEX D'INSERTION DANS L'ANNEAU,
         WORD        XXVOUT          < INDEX D'EXTRACTION DE L'ANNEAU.
         WORD        XXCBA0          < COMPTEUR DES CARACTERES DE L'ANNEAU.
         WORD        NILK            < INDICATEUR 'ALT-MODE' RECU.
         WORD        KALTM           < CARACTERE COURANT D'ABORT.
         WORD        NMAGIC          < CONSTANTE MAGIQUE.
         WORD        TEMPI5          < TEMPO INTER-CARACTERES D'EMISSION.
         WORD        BITPA5          < ACTION SUR LE BIT DE PARITE.
         WORD        PILID5
         CALL        #SISP CMS5 DOL2#
PILID5:  EQU         $
XWPILE:  VAL         XPILID
         CALL        #SISP CMS5 GENPIL3#
         CALL        #SISP CMS5 DOL1#
<
< BUFFER EN ANNEAU DES CARACTERES 'IN' :
<
LVCW5:   EQU         $               < BUFFER EN ANNEAU DES CARACTERES 'IN'.
         NTRN
         DZS         XXVNCW+NOCMO-E/NOCMO
         TRN
<
< PILE DU HANDLER :
<
XWPILE:  VAL         LPILEH+LVPILE
PILVI5:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        D C T   V I S U   V O I E   6 :
<
<
BAUDS6:: VAL         B9600           < VITESSE DE TRANSMISSION VOIE 6.
<
<
<        A T T E N T I O N  :
<                      IL EST NECESSAIRE DE PLACER LES
<                    VOIES HAUTE VITESSE SUR LES
<                    NIVEAUX MOINS PRIORITAIRES QUE LES
<                    VOIES BASSE VITESSE...(CF. VOIE 6).
<
<
DCTVI6:  EQU         $
PSTVI6:  WORD        K;K;K;K;COM+DEPCS;DCTVI6;NIL;PILVI6;HANDLR;SMST;SO;SE
       #@ASCI        " VI6"          < #SISP CMS5 ASCI#
         BYTE        NSPVI6;NOUSER   < IOID.
         WORD        NFILTR
         WORD        FILTRS          < S-FILTRE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC
         DZS         LSEM
         WORD        NIL             < TETE.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT
         DZS         TFONCE-D
         WORD        VEQFO           < TABLE D'EQUIVALENCE-FONCTIONS.
         DZS         LSEM-TFONCE
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLVIS
         WORD        ITVIS
         WORD        K;VISOTI        < VALEUR INITIALE DE L'ETAT
         WORD        XVBITS          < BITSEM.
         WORD        XXNTRY;TRYVID   < NTRIES & FRETRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXVFO           < DCTFON.
         WORD        XVISUP          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE DES VISUS :
<
VARVI6:  EQU         $
         IF          VARVI6-DCTVI6-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        WVISU           < S/P D'ECRITURE D'UN CARACTERE.
         WORD        WITVI           < S/P D'ATTENTE D'UNE IT QUELCONQUE.
         WORD        E61             < MALHEUREUX RELAI...
         WORD        VILBY           < SIMULATION DE 'LBY' SUR 'RBUVI'.
         WORD        VISBY           < SIMULATION DE 'STBY' SUR 'RBUVI'.
         WORD        ACVI6?FPHETA    < OPERANDE SIO ENTREE ETAT.
         WORD        ACVI6?FPHIN     < OPERANDE SIO ENTREE INFO.
         WORD        ACVI6?FPHOUT    < OPERANDE SIO SORTIE INFO.
         WORD        ACVI6?FPHCMD    < OPERANDE SIO SORTIE COMMANDE.
         BYTE        NSPSUR;XDSYM    < DEMANDE DE SURVEILLANCE.
         WORD        K
         NTRN
         WORD        BAUDS6/XERAS    < TEMPORISATION ERASE ECRAN !!!
         WORD        BAUDS6/XALTMO   < TEMPORISATION 2EME ABORT.
         TRN
         BYTE        NSPVI6;XDPRIO?XDSYM
         WORD        K
         WORD        XVWEIO          < WEIO.
         WORD        NIL
         WORD        TABUL6-IJIJDX,X
TABUL6:  EQU         $
         CALL        #SISP CMS5 TAB1#
         WORD        XXEXEX          < INEXEX.
         WORD        NILX            < RELAI VERS LE BUFFER.
         WORD        NILK            < CARACTERE REELLEMENT LU.
         WORD        NILK            < DERNIER CARACTERE LU
         WORD        NILK            < SAUVEGARDE MOT D'ETAT VISU
         WORD        LVCW6,X         < RELAI D'ACCES A L'ANNEAU.
         WORD        XXVIN           < INDEX D'INSERTION DANS L'ANNEAU,
         WORD        XXVOUT          < INDEX D'EXTRACTION DE L'ANNEAU.
         WORD        XXCBA0          < COMPTEUR DES CARACTERES DE L'ANNEAU.
         WORD        NILK            < INDICATEUR 'ALT-MODE' RECU.
         WORD        KALTM           < CARACTERE COURANT D'ABORT.
         WORD        NMAGIC          < CONSTANTE MAGIQUE.
         WORD        TEMPI6          < TEMPO INTER-CARACTERES D'EMISSION.
         WORD        BITPA6          < ACTION SUR LE BIT DE PARITE.
         WORD        PILID6
         CALL        #SISP CMS5 DOL2#
PILID6:  EQU         $
XWPILE:  VAL         XPILID
         CALL        #SISP CMS5 GENPIL3#
         CALL        #SISP CMS5 DOL1#
<
< BUFFER EN ANNEAU DES CARACTERES 'IN' :
<
LVCW6:   EQU         $               < BUFFER EN ANNEAU DES CARACTERES 'IN'.
         NTRN
         DZS         XXVNCW+NOCMO-E/NOCMO
         TRN
<
< PILE DU HANDLER :
<
XWPILE:  VAL         LPILEH+LVPILE
PILVI6:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        D C T   V I S U   V O I E   7  :
<
<
BAUDS7:: VAL         B9600           < VITESSE DE TRANSMISSION VOIE 7.
<
<
DCTVI7:  EQU         $
PSTVI7:  WORD        K;K;K;K;COM+DEPCS;DCTVI7;NIL;PILVI7;HANDLR;SMST;SO;SE
       #@ASCI        " VI7"          < #SISP CMS5 ASCI#
         BYTE        NSPVI7;NOUSER   < IOID.
         WORD        NFILTR
         WORD        FILTRS          < S-FILTRE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC
         DZS         LSEM
         WORD        NIL             < TETE
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT
         DZS         TFONCE-D
         WORD        VEQFO           < TABLE D'EQUIVALENCE-FONCTIONS.
         DZS         LSEM-TFONCE
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLVIS
         WORD        ITVIS
         WORD        K;VISOTI        < VALEUR INITIALE DE L'ETAT
         WORD        XVBITS          < BITSEM.
         WORD        XXNTRY;TRYVID   < NTRIES & FRETRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXVFO           < DCTFON.
         WORD        XVISUP          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE VISU :
<
VARVI7:  EQU         $
         IF          VARVI7-DCTVI7-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        WVISU           < S/P D'ECRITURE D'UN CARACTERE.
         WORD        WITVI           < S/P D'ATTENTE D'UNE IT QUELCONQUE.
         WORD        E61             < MALHEUREUX RELAI...
         WORD        VILBY           < SIMULATION DE 'LBY' SUR 'RBUVI'.
         WORD        VISBY           < SIMULATION DE 'STBY' SUR 'RBUVI'.
         WORD        ACVI7?FPHETA    < OPERANDE SIO ENTREE ETAT.
         WORD        ACVI7?FPHIN     < OPERANDE SIO ENTREE INFO.
         WORD        ACVI7?FPHOUT    < OPERANDE SIO SORTIE INFO.
         WORD        ACVI7?FPHCMD    < OPERANDE SIO SORTIE COMMANDE.
         BYTE        NSPSUR;XDSYM    < DEMANDE DE SURVEILLANCE.
         WORD        K
         NTRN
         WORD        BAUDS7/XERAS    < TEMPORISATION ERASE ECRAN !!!
         WORD        BAUDS7/XALTMO   < TEMPORISATION 2EME ABORT.
         TRN
         BYTE        NSPVI7;XDPRIO?XDSYM
         WORD        K
         WORD        XVWEIO          < WEIO.
         WORD        NIL
         WORD        TABUL7-IJIJDX,X
TABUL7:  EQU         $
         CALL        #SISP CMS5 TAB1#
         WORD        XXEXEX          < INEXEX.
         WORD        NILX            < RELAI VERS LE BUFFER.
         WORD        NILK            < CARACTERE REELLEMENT LU.
         WORD        NILK            < DERNIER CARACTERE LU
         WORD        NILK            < SAUVEGARDE MOT D'ETAT VISU
         WORD        LVCW7,X         < RELAI D'ACCES A L'ANNEAU.
         WORD        XXVIN           < INDEX D'INSERTION DANS L'ANNEAU,
         WORD        XXVOUT          < INDEX D'EXTRACTION DE L'ANNEAU.
         WORD        XXCBA0          < COMPTEUR DES CARACTERES DE L'ANNEAU.
         WORD        NILK            < INDICATEUR 'ALT-MODE' RECU.
         WORD        KALTM           < CARACTERE COURANT D'ABORT.
         WORD        NMAGIC          < CONSTANTE MAGIQUE.
         WORD        TEMPI7          < TEMPO INTER-CARACTERES D'EMISSION.
         WORD        BITPA7          < ACTION SUR LE BIT DE PARITE.
         WORD        PILID7
         CALL        #SISP CMS5 DOL2#
PILID7:  EQU         $
XWPILE:  VAL         XPILID
         CALL        #SISP CMS5 GENPIL3#
         CALL        #SISP CMS5 DOL1#
<
< BUFFER EN ANNEAU DES CARACTERES 'IN' :
<
LVCW7:   EQU         $               < BUFFER EN ANNEAU DES CARACTERES 'IN'.
         NTRN
         DZS         XXVNCW+NOCMO-E/NOCMO
         TRN
<
< PILE DU HANDLER :
<
XWPILE:  VAL         LPILEH+LVPILE
PILVI7:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        D C T   V I S U   V O I E   8  :
<
<
BAUDS8:: VAL         B9600           < VITESSE DE TRANSMISSION VOIE 8.
<
<
DCTVI8:  EQU         $
PSTVI8:  WORD        K;K;K;K;COM+DEPCS;DCTVI8;NIL;PILVI8;HANDLR;SMST;SO;SE
       #@ASCI        " VI8"          < #SISP CMS5 ASCI#
         BYTE        NSPVI8;NOUSER   < IOID.
         WORD        NFILTR
         WORD        FILTRS          < S-FILTRE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC
         DZS         LSEM
         WORD        NIL             < TETE.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID.
         DZS         LSEM
         WORD        XXSIT0          < SIT
         DZS         TFONCE-D
         WORD        VEQFO           < TABLE D'EQUIVALENCE-FONCTIONS.
         DZS         LSEM-TFONCE
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLVIS
         WORD        ITVIS
         WORD        K;VISOTI        < VALEUR INITIALE DE L'ETAT
         WORD        XVBITS          < BITSEM.
         WORD        XXNTRY;TRYVID   < NTRIES & FRETRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXVFO           < DCTFON.
         WORD        XVISUP          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE VISU :
<
VARVI8:  EQU         $
         IF          VARVI8-DCTVI8-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        WVISU           < S/P D'ECRITURE D'UN CARACTERE.
         WORD        WITVI           < S/P D'ATTENTE D'UNE IT QUELCONQUE.
         WORD        E61             < MALHEUREUX RELAI...
         WORD        VILBY           < SIMULATION DE 'LBY' SUR 'RBUVI'.
         WORD        VISBY           < SIMULATION DE 'STBY' SUR 'RBUVI'.
         WORD        ACVI8?FPHETA    < OPERANDE SIO ENTREE ETAT.
         WORD        ACVI8?FPHIN     < OPERANDE SIO ENTREE INFO.
         WORD        ACVI8?FPHOUT    < OPERANDE SIO SORTIE INFO.
         WORD        ACVI8?FPHCMD    < OPERANDE SIO SORTIE COMMANDE.
         BYTE        NSPSUR;XDSYM    < DEMANDE DE SURVEILLANCE.
         WORD        K
         NTRN
         WORD        BAUDS8/XERAS    < TEMPORISATION ERASE ECRAN.
         WORD        BAUDS8/XALTMO   < TEMPORISATION 2EME ABORT.
         TRN
         BYTE        NSPVI8;XDPRIO?XDSYM
         WORD        K
         WORD        XVWEIO          < WEIO.
         WORD        NIL
         WORD        TABUL8-IJIJDX,X
TABUL8:  EQU         $
         CALL        #SISP CMS5 TAB1#
         WORD        XXEXEX          < INEXEX.
         WORD        NILX            < RELAI VERS LE BUFFER.
         WORD        NILK            < CARACTERE REELLEMENT LU.
         WORD        NILK            < DERNIER CARACTERE LU
         WORD        NILK            < SAUVEGARDE MOT D'ETAT VISU
         WORD        LVCW8,X         < RELAI D'ACCES A L'ANNEAU.
         WORD        XXVIN           < INDEX D'INSERTION DANS L'ANNEAU,
         WORD        XXVOUT          < INDEX D'EXTRACTION DE L'ANNEAU.
         WORD        XXCBA0          < COMPTEUR DES CARACTERES DE L'ANNEAU.
         WORD        NILK            < INDICATEUR 'ALT-MODE' RECU.
         WORD        KALTM           < CARACTERE COURANT D'ABORT.
         WORD        NMAGIC          < CONSTANTE MAGIQUE.
         WORD        TEMPI8          < TEMPO INTER-CARACTERES D'EMISSION.
         WORD        BITPA8          < ACTION SUR LE BIT DE PARITE.
         WORD        PILID8
         CALL        #SISP CMS5 DOL2#
PILID8:  EQU         $
XWPILE:  VAL         XPILID
         CALL        #SISP CMS5 GENPIL3#
         CALL        #SISP CMS5 DOL1#
<
< BUFFER EN ANNEAU DES CARACTERES 'IN' :
<
LVCW8:   EQU         $               < BUFFER EN ANNEAU DES CARACTERES 'IN'.
         NTRN
         DZS         XXVNCW+NOCMO-E/NOCMO
         TRN
<
< PILE DU HANDLER :
<
XWPILE:  VAL         LPILEH+LVPILE
PILVI8:#@EQU         $-DEPILE        < #SISP CMS5 GENPIL1#
         PAGE
<
<
<        H A N D L E R   V I S U S   T E K T R O N I X
<                    T 4 0 1 0   E T   T 4 0 1 4  :
<
<
<        O P T I O N S   A   S T R A P P E R  :
<
<                    1- BIT0=1 POUR TOUS LES CARACTERES (PARITE FORCEE),
<                    2- 'CR' SANS 'LF',
<                    3- 'LF' SANS 'CR',
<                    4- PAS DE 'CR' NI 'EOT' LORS DES LECTURES GRAPHIQUES.
<
<
<        ARGUMENTS :
<                    - (L)=ADRESSE 'DCT',
<                    - (W)=ADRESSE DEMANDE.
<                    - (A)=NSPTYP.
<
<
<        F O N C T I O N S   P O S S I B L E S  :
<
<        APPEL :     INTERNE :
<
<        0000        0000 : LECTURE,
<        0001        0001 : LECTURE AVEC ECHO,
<        0010        0010 : ECRITURE,
<        1010        0011 : ECRITURE GRAPHIQUE,
<        1001        0100 : LECTURE GRAPHIQUE,
<        0011        0101 : MISE EN MODE GRAPHIQUE (OPEN GRAPH.),
<        0100        0110 : RETOUR AU MODE ALPHA-NUMERIQUE (CLOSE),
<        0101        0111 : ERASE SCREEN,
<        0110        1000 : MISE EN FONCTION DU CURSEUR GRAPHIQUE,
<                           (IL FAUT AMDEM=K),
<        1000        1000 : LECTURE DES COORDONNEES DU CURSEUR
<                           ALPHA-NUMERIQUE (IL FAUT AMDEM#0),
<        0111        1001 : ECRITURE DIRECTE (C'EST-A-DIRE QUE LES
<                           CARACTERES ARGUMENTS CONTENUS DANS AMDEM+
<                           CODEM+ASDEM SONT EMIS TELS QUELS...)
<
<
<        NOTA :
<                      L'OPDEM D'APPEL PEUT AVOIR LE
<                    BIT 'ZBTOVI' POSITIONNE ; CELA
<                    CORRESPOND A UN APPEL PAR 'SERESC'
<                    DEMANDANT QU'UN TIME-OUT SOIT FORCE
<                    POUR CET ECHANGE...
<
<
<        UTILISATION DE ETAT1 :
<                    BIT0-8 : INDIQUENT LES FONCTIONS AUTORISEES SUR
<                             CETTE VISU A CET APPEL : 1 BIT CORRES-
<                             POND A 1 FONCTION (LE BIT0 A LA FONCTION 0
<                             ...), AVEC LES CONVENTIONS SUIVANTES :
<
<                                    L=LECTURE ALPHA-NUMERIQUE,
<                                    LE=IDEM AVEC DE PLUS L'ECHO,
<                                    E=ECRITURE ALPHANUMERIQUE,
<                                    EG=ECRITURE GRAPHIQUE,
<                                    LG=LECTURE GRAPHIQUE (CURSEUR),
<                                    OG=OPEN GRAPHIQUE,
<                                    CG=CLOSE GRAPHIQUE,
<                                    ER=ERASE DE L'ECRAN,
<                                    CU=MISE EN FONCTION DU CURSEUR
<                                       GRAPHIQUE, OU LECTURE DES
<                                       COORDONNEES DU CURSEUR
<                                       ALPHA-NUMERIQUE,
<
<                             ON A L'AUTOMATE SUIVANT D'ACCES AUX
<                             FONCTIONS (LA 1ERE FONCTION EST LA FONCTION
<                             COURANTE, LES SUIVANTES, CELLES QUI SONT
<                             AUTORISEES A L'APPEL SUIVANT) :
<
<                                    L-->(L,LE,E,EG,OG,CG,ER,CU),
<                                    LE-->(L,LE,E,OG,ER),
<                                    E-->(L,LE,E,OG,ER),
<                                    EG-->(L,EG,OG,CG,ER,CU),
<                                    LG-->(L,LE,E,OG,ER),
<                                    OG-->(L,EG,OG,CG,ER,CU),
<                                    CG-->(L,LE,E,OG,ER),
<                                    ER-->(L,LE,E,OG,ER),
<                                    CU-->(EG,LG).
<
<
<        FONCTION :
<                      CE HANDLER GERE UNE VISU. IL N'IMBRIQUE PAS
<                    LES MESSAGES SIMULTANES IN & OUT. MALGRE TOUT, AU
<                    COURS D'UNE SORTIE LES CARACTERES ENTRANTS SONT
<                    LUS, ON PEUT AINSI TENIR COMPTE DE CERTAINS CODES
<                    SPECIAUX...
<
<
<        RESULTAT :
<                      DANS LE CAS D'UNE ENTREE, ON A DANS LES
<                    BITS 9-15 DE ETAT1 LE NBRE DE CARACTERES
<                    REELLEMENT LUS, CE NBRE EST AUSSI
<                    RENVOYE AU DEMANDEUR DANS SON CODEM...
<                      SI LA BOX DE LA DEMANDE COURANTE
<                    EST VALIDE, CELLE-CI RECOIT LORS D'UNE
<                    LECTURE, LE NBRE DE CARACTERES REELLE-
<                    MENT LUS.
<
<
<        NOTA IMPORTANT : DANS LE CAS DE L'ECRITURE GRAPHIQUE
<                    LE BUFFER CONTIENT UNE LISTE DE
<                    COORDONNEES (Y,X), MAIS 'CODEM' RESTE
<                    LA LONGUEUR-OCTETS DU BUFFER, ET NON
<                    PAS LE NOMBRE DE POINTS, OU AUTRE...
<
<
<        A T T E N T I O N  :
<                      DANS LE CAS D'UNE ECRITURE GRAPHIQUE,
<                    LE BUFFER POINTE PAR 'AMDEM' EST MODI-
<                    FIE PAR LE HANDLER-VISU, DE FACON A
<                    MEMORISER LES CODES 'ASCI' EQUIVALENTS
<                    AUX COORDONNEES... CELA N'A QUE PEU
<                    D'IMPORTANCE POUR LES UTILISATEURS,
<                    PUISQUE CE TYPE D'INFORMATION TRANSITE
<                    PAR LE BUFFER 'BUFESC' ; D'AUTRE PART,
<                    LE 'SVC' DIT DE 'FAUSSE LECTURE' LUI
<                    PERMETTRA DE RECUPERER LES CODES 'ASCI'
<                    GENERES ICI EN GRAPHIQUE...
<
<
<        E C R I T U R E   D I R E C T E  :
<                      L'ECRITURE DIRECTE PERMET D'EMETTRE JUSQU'A
<                    6 CARACTERES TELS QU'ILS SONT DONNES PAR LE
<                    DEMANDEUR (IL N'EST PAS TENU COMPTE DES
<                    EXTENSIONS ET DES EXPANSIONS). DE PLUS
<                    CE MODE D'ECRITURE EST TOUJOURS ACCESSIBLE,
<                    QUELQUE SOIT LA FONCTION QUI AIE PRECEDEE,
<                    ET ENFIN ELLE NE MODIFIE PAS L'AUTOMATE DES
<                    VISUS.
<                      LES CARACTERES ARGUMENTS SONT SITUES DANS
<                    LE BLOC DE DEMANDE (AMDEM+CODEM+ASDEM) ;
<                    S'ILS SONT EN NBRE INFERIEUR A 6, UN
<                    'EOT' SERVIRA DE LIMITEUR, ET IL NE
<                    SERA PAS EMIS ; DANS CE CAS, IL Y A
<                    DE PLUS VIDAGE DU BUFFER D'ANTICIPA-
<                    TION DE LA VISU CONCERNEE.
<
<
<        C A R A C T E R E   D ' A B O R T  :
<                      ON A DANS 'CARALT' LE CODE DU CARACTERE
<                    COURANT D'ABORT ; CELUI-CI EST INITIALISE
<                    AVEC 'ALT-MODE', ET REINITIALISE AINSI
<                    A CHAQUE PASSAGE DANS LE CCI INTERACTIF.
<                    ON A LA POSSIBILITE DE CHANGER CE CODE
<                    A L'AIDE DE L'INSTRUCTION '1EA5'.
<                      IL EST UTILISE DE LA FACON SUIVANTE :
<                    1 - UN SEUL CARACTERE 'ABORT' PRO-
<                    VOQUE UN RETOUR AU PROGRAMME UTI-
<                    LISATEUR A L'ADRESSE DEFINIE PAR
<                    LE 'PRESC'.
<                    2 - DEUX CARACTERES 'ABORT' RECUS
<                    EN MOINS DE TEMPS QU'IL NE FAUT
<                    POUR EMETTRE BAUDS/11/3 CARACTERES
<                    'NULL' PROVOQUE UN 'ABORT' DU PRO-
<                    GRAMME UTILISATEUR.
<
<
<        T I M E - O U T  :
<                      LE TIME OUT SUR UNE VISU EST
<                    FACULTATIF SUR UNE VISU ; IL EST
<                    PROGRAMME PAR LA FONCTION '1EA5
<                    DU RECOVERY ; LORSQU'ON EST EN
<                    TIME-OUT, ON FAIT COMME SI UN
<                    ALT-MODE AVAIT ETE RECU !!!
<
<
<        FONCTION DU   B R E A K   OU   DU   N U L L  :
<                    EN ENTREE, COMME EN SORTIE, L'ACTION
<                    DE LA TOUCHE BREAK, ET D'ARRETER
<                    L'E/S EN COURS SUR LA VISU
<                    (E,EG,L).
<                      LORSQU'UN 'BREAK' EST HORS-ECHANGE,
<                    SON ACTION EST DE PURGER LE BUFFER EN
<                    ANNEAU DES CARACTERES EN ATTENTE ;
<                    NE PAS OUBLIER COMMENT EST GEREE
<                    LA COMMANDE "!M...".
<
<
<        FONCTION DU   C T R L - E O T  :
<                    EN ENTREE : FIN DE MESSAGE.
<                    (COMME 'CR')
<
<
<        FONCTION DU   C T R L - X - O F F  :
<                    EN SORTIE : ARRETE LA SORTIE (COMME BREAK),
<                    MAIS DE PLUS RENVOIE LE CODE '13 (CTRL-X-OFF)
<                    A L'UTILISATEUR. DE PLUS SI CE CARACTERE EST
<                    APPARU HORS-ECHANGE, IL ABORTE LA SORTIE
<                    SUIVANTE (CODE '93) !!!
<
<
<        FONCTION DU   C T R L - V  :
<                    CTRL-V PERMET EN ENTREE DE FAIRE DE
<                    LA TABULATION AUTOMATIQUE, EN S'APPUYANT SUR
<                    LA TABLE 'ATABUL'.
<
<
VTAB::   VAL         KSYN            < CTRL-V (CODE DE TABULATION).
KTEMPO:: VAL         KSOH            < CODE DU CARACTERE DE TEMPO-
                                     < RISATION (CTRL-A) ; 'NULL' NE
                                     < PEUT PLUS ETRE UTILISE ; EN
                                     < EFFET LORS DE LIGNES BOUCLEES,
                                     < UN 'NULL' EMIS PAR VIX, ET QUI
                                     < RERENTRE DANS VIY EST CONFONDU
                                     < AVEC UN BREAK DONT LE CODE
                                     < QUOI QU'ON Y FASSE EST '00 !!!
<
<
<        E X T E N S I O N S   C A R A C T E R E S  :
<                      LORSQU'ON FAIT UNE ECRITURE ALPHA-NUMERIQUE,
<                    LES CODES '60-'6F ET 'E0-'FF SONT INUTILISES,
<                    DONC DISPONIBLES POUR DES EXTENSIONS PROGRAMMEES
<                    DE CARACTERES COMPOSITES (64 AU MAX).
<
<
<        T A B L E   D E S   F O N C T I O N S  :
<
<
TRVISU:  EQU         $
         WORD        E62
FIVR::   VAL         $-TRVISU-D      < FONCTION INTERNE LECTURE.
         WORD        E62
FIVRE::  VAL         $-TRVISU-D      < FONCTION INTERNE LECTURE AVEC ECHO.
         WORD        E61
FIVW::   VAL         $-TRVISU-D      < FONCTION INTERNE ECRITURE.
         WORD        VISUEG
FIVWG::  VAL         $-TRVISU-D      < FONCTION INTERNE ECRITURE GRAPHIQUE.
         WORD        VISULG
FIVRG::  VAL         $-TRVISU-D      < FONCTION INTERNE LECTURE GRAPHIQUE.
         WORD        VISUOG
FIVOG::  VAL         $-TRVISU-D      < FONCTION INTERNE MISE EN GRAPHIQUE.
         WORD        VISUCG
FIVCG::  VAL         $-TRVISU-D      < FONCTION INTERNE ALPHA-NUMERIQUE.
         WORD        VISUER
FIVER::  VAL         $-TRVISU-D      < FONCTION INTERNE EFFACEMENT ECRAN.
         WORD        VISUCU
FIVCU::  VAL         $-TRVISU-D      < FONCTION INTERNE CURSEUR GRAPHIQUE.
FIVRC::  VAL         FIVCU           < FONCTION INTERNE LECTURE CURSEUR.
FIVWD::  VAL         FIVRC+I         < FONCTION INTERNE ECRITURE DIRECTE.
FIVALT:: VAL         FIVWD+I         < FONCTION INTERNE SUITE ALT-MODE.
<
<
<        A U T O M A T E   D E S   V I S U S  :
<
<
XWORK1:  VAL         COSBT?FIVR=FMASK(K=FCINST
XWORK1:  VAL         COSBT?FIVRE=FMASK(K?XWORK1=FCINST
XWORK1:  VAL         COSBT?FIVW=FMASK(K?XWORK1=FCINST
XWORK1:  VAL         COSBT?FIVOG=FMASK(K?XWORK1=FCINST
XWORK1:  VAL         COSBT?FIVER=FMASK(K?XWORK1=FCINST
WISOTI: VAL         XWORK1          < ETAT INITIAL DE L'AUTOMATE DES VISUS :
VISOTI:  EQU         ZERO+WISOTI     < E --> (L,LE,E,OG,ER).
TVISOT:  EQU         $
XWOR%1:  VAL         COSBT?FIVWG=FMASK(K?WISOTI=FCINST
XWOR%1:  VAL         COSBT?FIVCG=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FIVCU=FMASK(K?XWOR%1=FCINST
         WORD        XWOR%1          < L-->(L,LE,E,EG,OG,CG,ER,CU).
         WORD        VISOTI          < LE-->(L,LE,E,OG,ER).
         WORD        VISOTI          < E-->(L,LE,E,OG,ER).
XWOR%1:  VAL         COSBT?FIVR=FMASK(K=FCINST
XWOR%1:  VAL         COSBT?FIVWG=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FIVOG=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FIVCG=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FIVER=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?FIVCU=FMASK(K?XWOR%1=FCINST
         WORD        XWOR%1          < EG-->(L,EG,OG,CG,ER,CU).
         WORD        VISOTI          < LG-->(L,LE,E,OG,ER).
XWOR%1:  VAL         XWOR%1
         WORD        XWOR%1          < OG-->(L,EG,OG,CG,ER,CU).
         WORD        VISOTI          < CG-->(L,LE,E,OG,ER).
         WORD        VISOTI          < ER-->(L,LE,E,OG,ER).
XWOR%1:  VAL         COSBT?FIVWG=FMASK(K=FCINST
XWOR%1:  VAL         COSBT?FIVRG=FMASK(K?XWOR%1=FCINST
         WORD        XWOR%1          < CU-->(EG,LG).
         WORD        K               < (RESERVE POUR LA FONCTION '9)
XWOR%1:  VAL         CORBT?FIVOG=FMASK(K?WISOTI=FCINST
         WORD        XWOR%1          < 'ALT-MODE'-->(L,LE,E,ER).
<
<
<        C O D A G E   D E S   F O N C T I O N S  :
<
<
<        ACCES A 'TCFOVI' :
<                      LA FONCTION D'APPEL DU
<                    'HDLVIS' DANS 'OPDEM' (DITE
<                    FONCTION "EXTERNE") DONNE
<                    L'INDEX D'ACCES A 'TCFOVI' ;
<                    L'OCTET AINSI INDEXE DONNE LA
<                    FONCTION QUI VA ETRE EXECUTEE
<                    PAR 'HDLVIS' (DITE FONCTION
<                    "INTERNE").
<
<
TCFOVI:  EQU         $
         BYTE        FIVR;FIVRE      < FAVR;FAVRE.
         BYTE        FIVW;FIVOG      < FAVW;FAVOG.
         BYTE        FIVCG;FIVER     < FAVCG;FAVER.
         BYTE        FIVCU;FIVWD     < FAVCU;FAVWD.
         BYTE        FIVRC;FIVRG     < FAVRC;FAVRG.
         BYTE        FIVWG;K         < FAVWG.
<
<
<        T A B L E   D E S   E X T E N S I O N S  :
<
<
<        A T T E N T I O N  :
<                      LES LISTES D'EXTENSION FONT AU
<                    MAXIMUM 7 CARACTERES, ET DOIVENT
<                    CONTENIR SUFFISAMMENT DE 'CTRL-H',
<                    AFIN QUE L'EXTENSION N'OCCUPE
<                    QU'UN SEUL CARACTERE SUR L'ECRAN.
<                      DE PLUS, LES LISTES D'EXTENSION
<                    SONT DONNEES A L'ENVERS (LE PRE-
<                    MIER CARACTERE EST EN QUEUE),
<                    L'OCTET0 DONNANT LE NOMBRE DE
<                    CARACTERES A EDITER...
<
<
CEXTD:   EQU         $
NKEXT::  VAL         8               < NOMBRE DE CARACTERES PAR EXTENSION.
<
< EXTENSION '60 (CURSEUR ALPHA-NUMERIQUE "HOME",
<               C'EST-A-DIRE ENVOI EN (0,780)) :
<
        @BYTE        0;KUS;KAROND;KSP;KDEL;KSEPT;KGS
         CALL        #SISP CMS5 EXTEND#
<                    (LA POSITION HOME EST LE POINT 0,780)
         IF          $-CEXTD*NOCMO-NKEXT,,XEIF%,
         IF          ATTENTION : LONGUEUR ANORMALE DES LE
         IF          PREMIER ELEMENT...
XEIF%:   VAL         ENDIF
<
< EXTENSION '61 (PETITE ABEILLE) :
<
        @BYTE        0;KINF;KBS;KSUP;KBS;KCHAP
         CALL        #SISP CMS5 EXTEND#
<
< EXTENSION '62 (IL EXISTE) :
<
        @BYTE        0;KCD;KBS;KMOINS
         CALL        #SISP CMS5 EXTEND#
<
< EXTENSION '63 (QUELQUE SOIT) :
<
        @BYTE        0;KV;KBS;KMOINS
         CALL        #SISP CMS5 EXTEND#
<
< EXTENSION '64 (BARRE VERTICALE) :
<
        @BYTE        0;KPE;KBS;KVIR
         CALL        #SISP CMS5 EXTEND#
<
< EXTENSION '65 (EQUIVAUT A) :
<
        @BYTE        0;KEGAL;KBS;KSOUL
         CALL        #SISP CMS5 EXTEND#
<
< EXTENSION '66 (FLECHE GAUCHE) :
<
        @BYTE        0;KINF;KBS;KMOINS
         CALL        #SISP CMS5 EXTEND#
<
< EXTENSION '67 (FLECHE DROITE) :
<
        @BYTE        0;KSUP;KBS;KMOINS
         CALL        #SISP CMS5 EXTEND#
<
< EXTENSION '68 (IMPLIQUE) :
<
        @BYTE        0;KDP;KBS;KSUP
         CALL        #SISP CMS5 EXTEND#
<
< EXTENSION '69 (IMPLIQUE A L'ENVERS) :
<
        @BYTE        0;KINF;KBS;KDP
         CALL        #SISP CMS5 EXTEND#
<
< EXTENSION '6A (IL N'EXISTE PAS) :
<
        @BYTE        0;KCD;KBS;KDQ;KBS;KSEPT;KBS;KMOINS
         CALL        #SISP CMS5 EXTEND#
<
< EXTENSION '6B (SIGNE DE LA MULTIPLICATION) :
<
        @BYTE        0;KSLASH;KBS;KASLSH
         CALL        #SISP CMS5 EXTEND#
<
< EXTENSION '6C (SIGNE DIFFERENT) :
<
        @BYTE        0;KEGAL;KBS;KSLASH
         CALL        #SISP CMS5 EXTEND#
<
< EXTENSION '6D ('RC'+'LF') :
<
EXT6D::  VAL         $-CEXTD*NOCMO/NKEXT
                                     < NUMERO DE L'EXTENSION 'K6D'...
        @BYTE        0;KLF;KCR
         CALL        #SISP CMS5 EXTEND#
<
< EXTENSION '6E (LETTRE "T" MINUSCULE) :
<
        @BYTE        0;KL;KBS;KMOINS
         CALL        #SISP CMS5 EXTEND#
<
< EXTENSION '6F (LETTRE "D" DE DERIVATION) :
<
        @BYTE        0;KPE;KBS;KPD
         CALL        #SISP CMS5 EXTEND#
NCEXTD:: VAL         $-CEXTD*NOCMO/NKEXT
                                     < NOMBRE DE LISTES D'EXTENSION...
VEXTER:  EQU         $
        @BYTE        0;"?"
         CALL        #SISP CMS5 EXTEND#
         NTRN
XWOR%1:  VAL         XXLEXT+W+NOCMO-E/NOCMO
         TRN
         $EQU        VEXTER+XWOR%1   < POUR RATTRAPER LES '00 GENERES...
                                     < DERNIERE EXTENSION, RESERVEE
                                     < AUX ERREURS : ELLE DOIT
                                     < SUIVRE LE CALCUL DE 'NCEXTD'.
<
<
<        M E S S A G E   ' J F .   C O L O N N A '  :
<
<
<        NOTA :
<                      CE MESSAGE ACCEDE PAR 'ACEXTD',
<                    EST CONTROLE PAR LE BIT 'XXXJFC'
<                    DU MOT 'MEMV'.
<
<
MJFC:    EQU         $
XXJFC1:: VAL         MJFC-CEXTD*NOCMO < INDEX DE DEBUT DU MESSAGE,
         ASCI        "JF. COLONNA."
<*******************************************************************************
         BYTE        KCR;K           < POUR REVENIR EN DEBUT DE LIGNE...
XWOR%1:  VAL         '0000000@@@@=FCSIGN-SIGNP
<*******************************************************************************
XXJFC2:: VAL         $-MJFC*NOCMO+XWOR%1
                                     < LONGUEUR EN OCTETS DU MESSAGE.
         PAGE
<
<
<        I N I T I A L I S A T I O N   C O U P L E U R  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME EST APPELE
<                    PAR LES HANDLERS VISUS, MAIS AUSSI
<                    PAR LE 'RESTART' AFIN D'INITIALISER,
<                    OU DE REINITIALISER LES COUPLEURS
<                    DES VISUS INDIVIDUELLEMENT.
<
<
         CALL        #SISP CMS5 DOL2#
         CALL        #SISP CMS5 CHECK#
INICV:   EQU         $
XWOR%1:  VAL         COSBT?COMSTR=FMASK(K=FCINST
XWOR%1:  VAL         COSBT?COMINT=FMASK(K?XWOR%1=FCINST
         LAI         XWOR%1
         SIO         VAR+CDEVI       < VALIDATIONS DES IT IN
         RSR
         PAGE
<
<
<        E C R I T U R E   D I R E C T E  :
<
<
<        RAPPEL :
<                      CE MODE D'ECRITURE EST ACCESSIBLE
<                    EN PERMANENCE, ET NE MODIFIE PAS
<                    L'AUTOMATE DES VISUS ; IL PEUT DONC
<                    ETRE UTILISE POUR ENVOYER LES ORDRES
<                    FORT COMPLEXES DU T4014...
<                    (IL IGNORE LES EXTENSIONS ET LES EXPANSIONS)
<
<
<        A T T E N T I O N  :
<                      UNE ECRITURE DIRECTE N'EST PAS
<                    INTERRUPTIBLE, NI PAR CTRL-X-OFF,
<                    NI PAR ALT-MODE ; LES TESTS DE CES
<                    CARACTERES NE SE FONT QU'EN SORTIE...
<
<
<        UTILISATION DE 'CARIN' :
<                      'CARIN' CONTIENT LES CONDITIONS
<                    DE RETOUR DE L'ECRITURE DIRECTE
<                    (FUTUR ETAT0), SOIT 0, SOIT
<                    '13 SI UN CTRL-X-OFF A ETE RECU.
<
<
<        UTILISATION DE 'EOT' :
<                      LE CARACTERE 'EOT' EST EN GENERAL LA FIN DE
<                    CHAINE, MAIS N'EST PAS TRANSMIS ; DE PLUS S'IL EST
<                    LE PREMIER OCTET DE CELLE-CI ; DANS CES CONDITIONS,
<                    LE BUFFER D'ANTICIPATION EST VIDE (VOIR 'WVISU'),
<                    PUIS IL EST EMIS !!!
<
<
         USE         L,DCT0
         USE         W,DEM0
VISUWD:  EQU         $
         LAD         ARGDEM+AMDEM    < (A)=@MOT DU BUFFER DES CARACTERES.
         SBT         BITX            < MISE EN PLACE DU BIT INDEX.
         STA         VAR+RBUVI       < GENERATION DU RELAI D'ACCES
                                     < AUX CARACTERES.
         LXI         K               < (X)=INDEX DU BUFFER.
         LYI         ASDEM-AMDEM+Z*NOCMO  < (Y)=NOMBRE MAX DE CARACTERES.
<
< TEST D'UN CTRL-X-OFF PRELIMINAIRE :
<
         LA          VAR+DCARLU
         CPI         KDC3            < UN CTRL-X-OFF A-T'IL ETE RECU
                                     < AVANT LA DEMANDE D'ECRITURE
                                     < DIRECTE ???
XWOR%1:  VAL         COSBT?BITPAR=FMASK(K=FCINST
         ORI         XWOR%1          < PREPARATION A PRIORI DU CODE
                                     < D'ERREUR ('93).
         JE          E942Y           < OUI,ABANDON
         STZ         VAR+CARIN       < SINON, ON PREPARE UN RETOUR
                                     < OK A PRIORI (CARIN=K).
<
< BOUCLE D'ECRITURE DIRECTE :
<
Z920:    EQU         $
         LBY         &VAR+RBUVI      < ACCES A UN CARACTERE.
         CPI         KEON            < EST-CE LE LIMITEUR DE FIN DE
                                     < MESSAGE ('EOT') ???
         JE          Z955X           < OUI, FIN DE L'ECRITURE DIRECTE :
                                     < A NOTER QU'ON FAIT UNE SORTIE
                                     < IMMEDIATE DU HANDLER ET QUE
                                     < CARIN EST DEJA POSITIONNE
                                     < SOIT A 0 (SI OK), SOIT A
                                     < '13 (SI CTRL-X-OFF).
         LR          A,B             < SINON (B)=CARACTERE A EMETTRE.
Z955XX:  EQU         $               < EMISSION D'UN 'EOT'...
         BSR         VAR+AWVISU      < EMISSION DU CARACTERE SANS
                                     < EXPANSION, NI EXTENSION !!!
         CPI         KDC3            < UN CTRL-X-OFF A-T'IL ETE RECU ???
         JNE         Z922            < NON.
         STA         VAR+CARIN       < OUI, ON PREPARE UN RETOUR
                                     < EN ERREUR EN FAISANT CARIN='13,
                                     < MAIS CELUI-CI NE SE FERA QUE
                                     < LORSQUE L'ECRITURE DIRECTE
                                     < SERA ACHEVEE.
Z922:    EQU         $
         ADRI        I,X             < PROGRESSION DE L'INDEX
                                     < DU BUFFER.
         CPR         X,Y             < EST-CE FINI ???
         JG          Z920            < NON, ON CONTINUE.
<
<
<        S O R T I E   I M M E D I A T E
<        D U   H A N D L E R   V I S U S  :
<
<
Z955:    EQU         $
         LA          VAR+CARIN       < RECUPERATION DES CONDITIONS
                                     < D'EXECUTION DE L'ECRITURE
                                     < DIRECTE RANGEES DANS 'CARIN'.
         STA         ETAT0           < ET TRANSMISSION PAR ETAT0.
         JMP         Z700Z           < VERS LE TEST DU ALT-MODE,
                                     < ET LA SORTIE DU HANDLER.
Z955X:   EQU         $
         CPZR        X               < 'EOT' EST-IL LE PREMIER CARACTERE ???
         JG          Z955            < NON, DONC FIN DE CHAINE...
<
< VIDAGE DU BUFFER D'ANTICIPATION :
<
         PSR         X               < SAUVEGARDE DE L'INDEX CARACTERE COU-
                                     < RANT, ON NE SAIT JAMAIS...
         SVC         SVCM10          < ET VIDAGE DU BUFFER D'ANTICIPATION...
         PLR         X               < (X)=INDEX DU BUFFER...
         JMP         Z955            < ET ON SORT SANS EMETTRE LE CARACTERE
                                     < 'EOT' CONTRAIREMENT A AUTREFOIS...
         PAGE
<
<
<        E N T R Y   H A N D L E R   V I S U  :
<
<
HDLVIS:  EQU         $
YYTOVI:: VAL         4               < TIME-OUT ARBITRAIRE FORCE LORSQU'UN
                                     < TIME-OUT EST DEMANDE POUR L'ECHANGE
                                     < COURANT,
                                     < A L'AIDE DU BIT 'ZBTOVI' DE 'OPDEM'...
XWOR%1:  VAL         COSBT?ZBTOVI=FMASK(K=FCINST
         IF          XWOR%1(MKOPDM-K,,XEIF%,
         IF          ATTENTION : IL Y A UN RECOUVREMENT FACHEUX
         IF          ENTRE 'MKOPDM' ET 'ZBTOVI' !!!
XEIF%:   VAL         ENDIF
         IF          XWOR%1(XMDSLO-K,,XEIF%,
         IF          ATTENTION : IL Y A UN RECOUVREMENT FACHEUX
         IF          ENTRE 'XMDSLO' ET 'ZBTOVI' !!!
XEIF%:   VAL         ENDIF
         LA          ARGDEM+OPDEM
         TBT         ZBTOVI          < TIME-OUT DEMANDE ???
         RBT         ZBTOVI          < DANS TOUS LES CAS ON RAZE L'INDICATEUR,
         STA         ARGDEM+OPDEM    < ATTENTION, ON MODIFIE 'OPDEM' !!!
         LR          A,X             < (X)=FONCTION D'APPEL DE 'HDLVIS'...
         JNC         E825Y           < NON, PAS DE TIME-OUT...
         CPZ         TESTO           < COMMENT EST LE TIME-OUT COURANT ???
         JNE         E825Y           < DEJA POSITIONNE, C'EST LUI QUI L'EM-
                                     < PORTE SUR 'YYTOVI'...
         LAI         YYTOVI          < OUI,
         STA         TIMOUT          < IL SUFFIT D'ECRASER BRUTALEMENT LE
                                     < COMPTEUR COURANT PUISQUE S'IL LE FAUT,
                                     < 'HANDLR' LE RESTAURERA...
         STA         TESTO           < AUCUNE IMPORTANCE, CAR EN EFFET :
                                     < 1 - OU BIEN ON RERENTRERA PAR UN 'RETRY'
                                     < DANS LE HANDLER, MAIS COMME ON A RAZE
                                     < 'ZBTOVI', CETTE OPERATION NE SERA PAS
                                     < ITEREE ; IL VAUT DONC MIEUX QUE 'TESTO'
                                     < SOIT ECRASE... (DE TOUTE FACON, 'HANDLR'
                                     < LA EMPILE AVANT LES ITERATIONS...),
                                     < 2 - DE TOUTE FACON, IL N'Y A PAS DE
                                     < RETRY SUR LES VISUS !!!
E825Y:   EQU         $
         LR          X,A             < (A)=FONCTION D'APPEL DE 'HDLVIS' :
         CPI         FAVCU           < EST-CE LA MISE EN FONCTION DU CURSEUR
                                     < GRAPHIQUE ???
         JNE         E825Y1          < NON, OK...
         CPZ         ARGDEM+AMDEM    < OUI, ALORS L'AMDEM EST-IL BIEN NUL ???
                                     < EN EFFET, CE TEST S'IMPOSE, CAR 'FAVCU'
                                     < ET 'FAVRC' DONNENT TOUS DEUX NAISSANCE
                                     < A LA MEME FONCTION INTERNE 'FIVCU'/
                                     < 'FIVRC' ; APRES, DANS 'HDLVIS', C'EST
                                     < LA NULLITE DE 'AMDEM' QUI FAIT TOUTE
                                     < LA DIFFERENCE ==> SI ALORS ARRIVE
                                     < UNE DEMANDE 'FAVCU' AVEC (AMDEM)#0, ELLE
                                     < SERA TRAITEE EN FAIT COMME UNE DEMANDE
                                     < 'FAVRC' QUI EST UNE LECTURE VRAIE,
                                     < QUI PROVOQUERA DANS 'HDLSER' UN APPEL
                                     < A 'HDLMEM' ; OR DANS LE CAS DE 'FAVCU',
                                     < 'AMDEM' NON NUL N'A AUCUNE SIGNIFICATION
                                     < DU TYPE ADRESSE MEMOIRE, ET EN PARTICU-
                                     < LIER N'EST PAS TRANSLATEE ; D'OU UN
                                     < PLANTAGE POSSIBLE DU SYSTEME. IL A FALLU
                                     < ATTENDRE BEAUCOUP D'ANNEES POUR QU'IL
                                     < SE PRODUISE ENFIN !!!
         JNE         E825Y2          < 'AMDEM' N'EST PAS NUL, ON SORT EN ERREUR
                                     < POUR FONCTION NON RECONNUE !!!
E825Y1:  EQU         $
E825:    EQU         $               < ENTREE DE REBOUCLAGE LORS
                                     < DE LA LECTURE DES COORDONNEES
                                     < DU CURSEUR ALPHA-NUMERIQUE.
         LBY         &ACFOVI         < CODAGE DE LA FONCTION.
         CPI         FIVWD           < VALIDATION DE LA FONCTION.
         JE          VISUWD          < DEROUTEMENT IMMEDIAT POUR
                                     < DEMANDE D'ECRITURE DIRECTE.
         JL          SYSR11          < FONCTION OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      PEUT-ETRE 'JMP HDLVIS', AU
<                    CAS OU 'OPDEM' AURAIT ETE
<                    MODIFIE A LA MAIN...
<
SYSR11:  EQU         $
         LR          A,X             < (X)=FONCTION DEMANDEE.
<
< TEST D'ACCESSIBILITE DE LA FONCTION DEMANDEE :
<
         LA          ETAT1           < POUR TEST DES BITS0-8(ETAT1).
         TBT         L,X             < (X)=FONCTION DEMANDEE.
         JC          Z1180           < OK, LA FONCTION EST ACCESSIBLE.
<
< CAS D'UNE FONCTION INACCESSIBLE :
<
         LXI         FIVALT
         CP          &VISOTO         < EST-ON EN FAIT DANS L'ETAT
                                     < INTERNE ('0A) MIS A LA SUITE
                                     < D'UN ALT-MODE, ET INTERDISANT
                                     < LA FONCTION 'OG' ???
         JNE         E772            < NON VERS LE RETOUR EN ERREUR.
         SBT         FIVOG           < SI OUI, ON AUTORISE 'OG' POUR
                                     < LES APPELS DU HANDLER DE CETTE
                                     < VISU ('OG'=FONCTION INTERNE 5).
                                     < (APPELS ULTERIEURS !!!)
         STA         ETAT1           < MISE A JOUR DE ETAT1.
         JMP         E772            < PUIS VERS LE RETOUR EN ERREUR.
E825Y2:  JMP         ERVI11          < RELAI 'FONCTION INEXISTANTE'...
<
< CAS D'UNE FONCTION ACCESSIBLE :
<
Z1180:   EQU         $
         LA          &VISOTO         < MAJ DE L'AUTOMATE DE LA VISU,
                                     < EN VUE DE L'APPEL SUIVANT.
         STA         ETAT1
         LA          &ARVISU         < (A)=@MODULE SPECIFIQUE DE
                                     <     TRAITEMENT DE LA FONCTION.
         PSR         A               < EMPILEMENT DE L'ADRESSE EN
                                     < VUE DE FAIRE UN RSR, POUR SE
                                     < BRANCHER DANS LA ROUTINE
                                     < SPECIFIQUE.
<
< INITIALISATION DU COUPLEUR :
<
         BSR         AINICV          < MIEUX VAUT TROP QUE PAS ASSEZ...
<
< PREPARATION DE L'OPERATION :
<
         LA          ARGDEM+AMDEM    < ACCES A L'ADRESSE D'OCTET DU
                                     < BUFFER.
         BSR         AMEM            < RENVOIE :
                                     < (A)=RELAI INDIRECT INDEXE VERS
                                     <     LE BUFFER,
                                     < (X)=K OU 1, SUIVANT QUE LE 1ER
                                     <     PREMIER OCTET DU BUFFER EST
                                     <     L'OCTET GAUCHE OU DROIT.
         STA         VAR+RBUVI
         LY          ARGDEM+CODEM    < DANS Y, ON MET LE NBRE D'OCTETS
                                     < DEMANDES.
         ADR         X,Y             < PUIS DANS Y LE RANG +1 DU DERNIER
                                     < CARACTERE A ECHANGER.
<
<
<        T R A I T E M E N T   D E   L A   F O N C T I O N  :
<
<
         RSR                         < ...
Z700Z:   JMP         Z700            < RELAI...
         PAGE
<
<
<        E C R I T U R E   S U R   V I S U  :
<
<
<        FONCTION D' E X P A N S I O N  :
<                      LORSQU'UN CARACTERE A SON BIT0 A 1,
<                    ET QUE SON CODE EST INFERIEUR A CELUI
<                    DU 'SPACE' ('20 OU 'A0), CE CARACTERE EST
<                    PRIS COMME UN COMPTE DE DUPLICATION
<                    DU CARACTERE SUIVANT :
<                                    PAR EXEMPLE : '8AC3, PERMETTRA
<                                    D'AFFICHER 10 ('A) FOIS LA
<                                    LETTRE "C" ('C3).
<                    CONSEQUENCES : TOUS LES 'CTRL-XXX' AYANT
<                    LE BIT0 A 1 SONT PRIS COMME DES
<                    COMPTE D'EXPANSION.
<        NOTA :
<                      LE CODE D'EXPANSION '80 PERMET DE REPETER
<                    A L'INFINI LE CARACTERE SUIVANT, ET CECI
<                    JUSQU'A CE QU'UN 'ALT-MODE', OU UN
<                    'CTRL-X-OFF' SOIT FRAPPE SUR LE CLAVIER...
<
<
<        A T T E N T I O N  :
<                      LES EXTENSIONS/EXPANSIONS SONT
<                    INHIBEES SI INEXEX>0, ET AUTORISEES
<                    SI INEXEX=K.
<                      DE PLUS, LES CARACTERES D'EXTENSION
<                    AYANT LE BIT DE PARITE A 1, NE SONT
<                    PAS PRIS COMME DES EXTENSIONS, MAIS
<                    CODE DES CODES ASCI NORMAUX...
<
<
E61:     EQU         $
<
< TEST SUR UN CTRL-X-OFF AYANT PRECEDE LA SORTIE :
<
         LA          VAR+DCARLU      < ACCES AU DERNIER CARACTERE ENTRE.
XWOR%1:  VAL         COSBT?BITPAR=FMASK(K=FCINST
         CPI         KDC3            < EST-CE CTRL-X-OFF ???
         ORI         XWOR%1          < MEMORISATION EVENTUEL DE
                                     < 'ABORT SORTIE AVANT QU'ELLE
                                     < NE COMMENCE' !!!
         JNE         E942X           < NON, PAS DE CTRL-X-OFF HORS ECHANGE...
E942Y:   EQU         $               < ENTREE POUR LES ECRITURES DIRECTES.
         PSR         A               < SAUVEGARDE DU CODE D'ERREUR,
         LBI         ETANXT          < PUIS LECTURE DE CE CTRL-X-OFF, AFIN
         BSR         VAR+AWITVI      < DE NE PAS RETOMBER DESSUS AU COUP
                                     < SUIVANT !!!
         PLR         A               < (A)=CODE D'ERREUR,
         JMP         E952            < VERS LA SORTIE EN ERREUR...
E942X:   EQU         $
XXVDUP:: VAL         W               < NOMBRE DE DUPLICATIONS A PRIORI...
         LBI         XXVDUP          < A PRIORI CHAQUE CARACTERE N'EST
                                     < PAS DUPLIQUE.
E942:    EQU         $
         LA          ETAT1           < ACCES A ETAT1 POUR SAVOIR SI
                                     < ON EST EN GRAPHIQUE (BIT2=K),
                                     < OU EN ALPHA-NUMERIQUE(BIT2=1).
         CPZ         VAR+INEXEX      < LES EXPANSIONS ET EXTENSIONS
                                     < SONT-ELLES AUTORISEES ???
         JE          Z1900           < ET OUI...
         RBT         FIVW            < LORSQUE LES EXPANSIONS/EXTENSIONS
                                     < SONT INHIBEES, ON FAIT CROIRE AU
                                     < HANDLER-VISU QU'IL EST EN
                                     < GRAPHIQUE (BIT2=K).
Z1900:   EQU         $
         TBT         FIVW            < TEST DU BIT DE LA FONCTION
                                     < 'ECRITURE ALPHA-NUMERIQUE'.
         BSR         VAR+AVILBY      < RECUPERATION 1 CARACTERE DANS
                                     < LE BUFFER.
         JC          Z1300           < LORSQU'ON EST EN ALPHA-NUMERIQUE,
                                     < ON TESTE LES EXTENSIONS ET
                                     < LES EXPANSIONS.
<
< CAS DU GRAPHIQUE : LES OCTETS RECUPERES DANS
< LE BUFFER DOIVENT ETRE EMIS TEL QU'ILS SONT :
< (OU CAS DES EXTENSIONS/EXPANSIONS INHIBEES PAR INEXEX>0)
<
         PSR         B               < SAVE (B)=1 (COMPTE DE DUPLICATION).
         LR          A,B             < (B)=CARACTERE A EMETTRE.
         JMP         E951            < VERS L'EMISSION DU CARACTERE (B).
<
< CAS DE L'ALPHA-NUMERIQUE : TEST DES
< EXPANSIONS ET DES EXTENSIONS :
<
Z1300:   EQU         $
         TBT         BITPAR
         JNC         E945            < BIT8=K : CE NE PEUT ETRE UN
                                     < CODE D'EXPANSION.
XWOR%1:  VAL         COSBT?BITPAR=FMASK(K?KSP=FCINST
         CPI         XWOR%1          < DANS LE CAS OU BIT8=1, IL FAUT
                                     < TESTER LA VALEUR DU CARACTERE PAR
                                     < RAPPORT A CELLE DE 'SPACE'.
         JL          E943            < BIT8=1 ET CODE<'A0 : EXPANSION.
E945:    EQU         $
         PSR         B               < SAVE COMPTE D'EXPANSION.
         LR          A,B             < (B)=CARACTERE A ECREIRE.
<
< TEST DE CARACTERES EXTENSION :
<
         TBT         BITPAR+NBITMO   < LE BIT DE PARITE EST-IL LA ???
         JC          E951            < LE BIT DE PARITE EST A 1, MAIS CE N'EST
                                     < PAS UNE EXPANSION, C'EST DONC UN CODE
                                     < ASCI NORMAL...
XXVX1::  VAL         L+I
XXVX2::  VAL         XXVX1+I
XWOR%1:  VAL         EXT6D
XWOR%2:  VAL         BITPAR+XXVX1
XWOR%1:  VAL         COSBT?XWOR%2=FMASK(K?XWOR%1=FCINST
XWOR%2:  VAL         BITPAR+XXVX2
XWOR%1:  VAL         COSBT?XWOR%2=FMASK(K?XWOR%1=FCINST
         IF          XWOR%1-K6D,,XEIF%,
         IF          ATTENTION : LA VALEUR CALCULEE DE 'K6D' DANS LES
         IF          LISTES D'EXTENSION NE COINCIDE PAS A LA VALEUR
         IF          PRESUMEE AU DEBUT DU SYSTEME !!!
XEIF%:   VAL         ENDIF
         TBT         BITPAR+XXVX1+NBITMO
         JNC         E951            < CE NE PEUT ETRE UNE EXTENSION.
         TBT         BITPAR+XXVX2+NBITMO
         JC          EXTEND          < (B) EST UN CARACTERE D'EXTENSION.
                                     < BIT1=BIT2=1 DANS UNE EXTENSION.
E951:    EQU         $
         BSR         VAR+AWVISU      < ECRITURE DU CARACTERE (B).
E949:    EQU         $
         PLR         B               < RESTAURE (B)=COMPTE D'EXPANSION.
         JANE        E949X           < CE N'EST PAS LE 'BREAK'...
         XR          A,X             < OUI, C'EST LE 'BREAK', ALORS OU EN
         CPI         NOCMO-Z         < EST-ON DE LA SORTIE ???
         XR          A,X
         ADCR        A               < (A)='BREAK'+1 SI (X)<NOCMO-1, C'EST-A-DIR
                                     < SI ON EN EST AU DEBUT DE L'ECHANGE,
                                     < ET CECI QUE LE BUFFER COMMENCE SUR
                                     < UNE ADRESSE PAIRE OU IMPAIRE...
                                     < AINSI, IL EST IGNORE...
E949X:   EQU         $
         JAE         E63             < C'EST 'BREAK', ABANDON DE
                                     < LA SORTIE...
         CPI         KALTM           < EST-CE LE ALT-MOD...
         JE          ALTOUT          < OUI, C'EST 'ALT-MODE'.
<
< TEST D'UN CTRL-X-OFF MONTE PENDANT LA SORTIE :
<
         CPI         KDC3
         JE          E952            < ABANDON DE LA SORTIE EN
                                     < ERREUR (CODE '13).
<
< L'IT ETANT MONTEE POUR DESOCCUPATION DE LA VOIE, PASSONS AU CARACTERE
< SUIVANT :
<
         ADRI        -I,B            < DECOMPTE DES DUPLICATIONS.
         CPZR        B               < RESTE-T'IL DES DUPLICATIONS
                                     < A FAIRE ???
         JNE         E942            < OUI, ON REPREND DONC LE
                                     < CARACTERE PRECEDENT.
         LBI         XXVDUP          < REINITIALIASTION DU COMPTE
                                     < D'EXPANSION EN FIN DE DUPLICATION.
E944:    EQU         $
         ADRI        I,X
         CPR         X,Y             < EST-ON ARRIVE AU BOUT DE
                                     < NOS PEINES...
         JG          E942            < ET NON, ON A : X<Y.
         JMP         E63             < C'EST FINI...
<
<        D E M A N D E   D ' E X P A N S I O N
<        D U   C A R A C T E R E   S U I V A N T  :
<
E943:    EQU         $
         RBT         BITPAR          < RAZ DU BIT D'EXPANSION.
         LR          A,B             < (B)=COMPTE D'EXPANSION.
         JMP         E944            < VERS ACCES AU CARACTERE SUIVANT
                                     < (CARACTERE A DUPLIQUER, OU
                                     < CARACTERE D'EXPANSION ANNULANT
                                     < CELUI-CI...)
         PAGE
<
<
<        T R A I T E M E N T   D E S   E X T E N S I O N S  :
<
<
EXTEND:  EQU         $
<        ON A ICI :
<                    (B)=CARACTERE D'EXTENSION.
XWOR%2:  VAL         KAPO            < NUMERO DE LA PREMIERE EXTENSION.
         ADRI        -XWOR%2,B       < TRANSLATION DU CARACTERE.
         TBT         BITPAR+NBITMO   < TEST DU BIT0 DU CARACTERE.
         JNC         E948            < BIT0=K : B CONTIENT LE NUMERO
                                     < DE L'EXTENSION.
         ADRI        -XWOR%2,B       < SINON, ON RAZE LE BIT0, ET
                                     < ON FAIT MONTER LE BIT2.
                                     < -'60=-'80+'20.
E948:    EQU         $
         LR          B,A             < (A)=NUMERO DE L'EXTENSION (K-'3F).
         LB          VAR+RBUVI       < SAVE @DU BUFFER ARGUMENT.
         PSR         B,X             < SAVE @BUFFER ET L'INDEX CARACTERE
         CPI         NCEXTD          < VALIDATION DE L'EXTENSION
                                     < DEMANDEE.
         JL          E950            < OK, ELLE EXISTE.
<
< CAS OU UNE EXTENSION N'EXISTE PAS : ON
< ENVOIE UN '?' A L'UTILISATEUR A SA PLACE :
<
         LAI         NCEXTD          < EXTENSION D'ERREUR...
E950:    EQU         $
         SLLS        NKEXT/NOCMO=K   < MULTIPLICATION PAR 4 DU NUMERO.
         AD          ACEXTD          < (A)=@DU MESSAGE D'EXTENSION.
         STA         VAR+RBUVI       < RELAI VERS LE MESSAGE.
         LXI         K               < INDEX D'ACCES AU COMPTE D'OCTETS.
         LBY         &VAR+RBUVI      < (A)=NBRE DE CARACTERES DU MESSAGE
                                     < D'EXTENSION.
         LR          A,X             < (X)=COMPTTE D'OCTETS.
E947:    EQU         $
         LBY         &VAR+RBUVI      < (A)=1 CARACTERE D'EXTENSION.
         LR          A,B
         BSR         VAR+AWVISU      < ENVOI D'UN DES CARACTERES DU
                                     < MESSAGE D'EXTENSION.
         JAE         E947X           < CAS D'UN 'BREAK',
         CPI         KALTM
         JE          E947X           < CAS D'UN 'ALT-MODE',
         CPI         KDC3
         JE          E947X           < CAS D 'UN 'CTRL-X-OFF'.
         JDX         E947            < AU SUIVANT.
E947Y:   EQU         $               < CAS DES ABANDONS D'EXTENSIONS...
         PLR         B,X
         STB         VAR+RBUVI       < RESTAURE LE RELAI VERS LE
                                     < BUFFER ARGUMENT.
         JMP         E949            < RETOUR AU MESSAGE ARGUMENT.
E947X:   EQU         $               < CAS OU UN CARACTERE RECLAMANT L'ABANDON
                                     < DE LA SORTIE A ETE RECU ; IL EST RESTE
                                     < DANS LE REGISTRE 'A'.
         PSR         A
         LBI         KUS             < CARACTERE 'US'.
         BSR         VAR+AWVISU      < A PRIORI, ON REMET LA VISU EN ALPHA,
                                     < EN EFFET, IL EST DES EXTENSIONS QUI
                                     < UTILISENT 'KGS' ('60 PAR EXEMPLE...).
         PLR         A               < (A)=CARACTERE D'ABANDON...
         JMP         E947Y           < ET ON ARRETE LA...
<
<
<        M I S E   E N   F O N C T I O N   D U
<        C U R S E U R   G R A P H I Q U E  :
<                    O U
<        L E C T U R E   D E S   C O O R D O N N E E S
<        D U   C U R S E U R   A L P H A - N U M E R I Q U E  :
<
<
VISUCU:  EQU         $
         LBI         -KESC           < CARACTERE 'ESC'.
         BSR         VAR+AWVISU      < ENVOI DE L''ESC'.
         LBI         -KSUB           < CARACTERE 'SUB'.
         LA          ARGDEM+AMDEM    < TEST DE AMDEM POUR SAVOIR LA
                                     < NATURE DU CURSEUR DEMANDE :
                                     < 1- AMDEM=K : CURSEUR GRAPHIQUE,
                                     < 2- AMDEM#0 : CURSEUR ALPHA-
                                     <              NUMERIQUE.
         JAE         E758            < C'EST LE CURSEUR GRAPHIQUE QUI
                                     < VA ETRE MIS EN FONCTION, ALLONS
                                     < ENVOYER 'SUB'.
<
<        C U R S E U R   A L P H A  :
<
         LBI         -KENQ           < CARACTERE 'ENQ'.
         BSR         VAR+AWVISU      < ENVOI DE 'ENQ'.
         LXI         FAVRG           < SIMULONS UNE DEMANDE DE LA
                                     < FONCTION '09 (LECTURE GRAPHIQUE)
                                     < DE FACON A RECUPERER CORRECTEMENT
                                     < LES COORDONNEES DU CURSEUR
                                     < ALPHANUMERIQUE, MEME APRES
                                     < LES SWAPPINGS.
         STX         ARGDEM+OPDEM    < A T T E N T I O N  : MODIFICATION
                                     < DE L'OPDEM DE LA DEMANDE.
         JMP         E825            < RE-RENTREE DANS LE HANDLER.
<
<
<        S O R T I E   D U   H A N D L E R  :
<
<
E63:     EQU         $
         STZ         ETAT0           < RAZ D'ETAT CAR TOUT EST OK.
<
< TEST D'UN ALT-MODE NON ENCORE DETECTE :
<
Z700:    EQU         $               < ENTRY RESERVEE AUX SORTIES
                                     < EN ERREUR DES HANDLERS-VISUS.
         CPZ         VAR+IALTM       < Y-A-T'IL EU EU UN ALT-MODE NON
                                     < ENCORE DETECTE (A NOTER QUE
                                     < LES ALT-MODE DETECTES ONT
                                     < PROVOQUES UN PASSAGE APR
                                     < ALTIN/ALTOUT, ET DONC UN
                                     < RAZ DE L'INDICATEUR 'IALTM').
         JNE         ALTOUT          < ET OUI, IL Y A UN ALT-MODE
                                     < NON DETECTE, ALLONS LE PRENDRE
                                     < EN COMPTE.
<
< SORTIE DEFINITIVE :
<
         RSR
<
<
<        E R R E U R S   S U R   V I S U  :
<
<
<        LISTE DES CODES-ERREUR DES VISUS :
<                    '93 : CTRL-X-OFF RECU HORS-ECHANGE AVANT UNE
<                          SORTIE,
<                    '7D : ALT-MODE RECU ET PRIS EN COMPTE,
<                    '13 : CTRL-X-OFF RECU PENDANT UNE SORTIE,
<                    '11 : FONCTION INEXISTANTE,
<                    '05 : MODE GRAPHIQUE ERRONE,
<                    '03 : FONCTION INACCESSIBLE A L'INSTANT PRESENT.
<                    - BIT15 : SOMME DES ERREURS SOFT.
<
<
EVXHE::  VAL         COSBT?BITPAR=FMASK(K?KDC3=FCINST
                                     < CTRL-X-OFF RECU HORS-ECHANGE.
EVALT::  VAL         KALTM           < ALT-MODE, OU EQUIVALENT RECU.
EVEX::   VAL         KDC3            < CTRL-X-OFF PENDANT UNE SORTIE.
EVINEX:: VAL         '11             < FONCTION INEXISTANTE.
EVGR::   VAL         '05             < ERREUR EN MODE GRAPHIQUE.
EVINAC:: VAL         '03             < FONCTION ACTUELLEMENT INACCESSIBLE.
<
<
E952:    EQU         $               < CTRL-X-OFF PENDANT UNE SORTIE.
         STZ         VAR+DCARLU
         DC          VAR+DCARLU      < MISE A -1 DE DCARLU
                                     < (AU CAS OU UNE AUTRE SORTIE
                                     < SUIVRAIT IMMEDIATEMENT).
         JMP         E65
ERVI11:  EQU         $
         LAI         EVINEX          < POSITIONNEMENT DES BITS 11 & 15.
         JMP         E65
E772:    EQU         $
         LAI         EVINAC          < POSITIONNEMENT DES BITS 14 & 15.
E65:     EQU         $
<
<        NOTA :
<                      A CE NIVEAU, LE BIT 15 DOIT
<                    ETRE POSITIONNE ; IL INDIQUE LA
<                    PRESENCE D'UNE ERREUR SOFTWARE !!!
<
Z701:    EQU         $               < ENTRY UTILISEE LORS DES
                                     < ALT-MODES RECUS ET PRIS EN
                                     < COMPTE.
         STA         ETAT0
         JMP         Z700            < VERS LE TEST DES ALT-MODES NON
                                     < ENCORE PRIS EN COMPTE.
         PAGE
<
<
<        L E C T U R E   S U R    V I S U  :
<        L E C T U R E   A V E C   E C H O  :
<
<
E62:     EQU         $
         LBI         ETANXT          < POUR TEST DU BIT 14 DU MOT D'ETAT.
         BSR         VAR+AWITVI      < ALLONS ATTENDRE UN CARACTERE.
<
< LA PSEUDO-IT EST MONTEE, DANS A ON A LE CARACTERE ENTRE :
<
         STA         VAR+CARIN       < SAUVEGARDE DU CARACTERE
                                     < REELLEMENT LU.
<
< TEST SUR LE CARACTERE LU :
<
         JAE         E782            < C'EST 'BREAK', ON DELETE LE
                                     < MESSAGE ENTRE, ET ON RECOMMENCE
                                     < L'ENTREE (REINITIALISATION
                                     < DU BUFFER).
         CPI         KDEL            < EST-CE 'DEL' (RUBOUT).
         JE          E771            < OUI.
         CPI         VTAB            < EST-CE CTRL-V : DEMANDE DE
                                     < TABULATION AUTOMATIQUE.
         JNE         Z303            < NON.
<
<        T A B U L A T I O N   A U T O M A T I Q U E  :
<
Z304:    EQU         $
         LR          X,A
         CPI         LCCI            < TEST DE L'INDEX COURANT DU BUFFER.
         JGE         E62             < AU-DELA DE 'LCCI' CARACTERES,
                                     < LA TABULATION AUTOMATIQUE
                                     < EST REFUSEE.
         PSR         Y
         LYI         FONTB           < FONCTION TEST BIT.
         LAD         VAR+ATABUL      < (A)=@DU RELAI INDIRECT INDEXE
                                     <     VERS LA TABLE DES TABULATIONS.
         BSR         ATMOBT          < TEST DE LA POSITION DU CARACTERE
                                     < COURANT (X) PAR RAPPORT A LA
                                     < TABULATION.
         PLR         Y
         JC          E62             < C'EST UN DEBUT DE ZONE : SI ON
                                     < ETAIT EN TABULATION, ON
                                     < S'ARRETE LA, ET ON VA LIRE
                                     < UN NOUVEAU CARACTERE ; SI UNE
                                     < DEMANDE DE TABULATION EST
                                     < FAITE SUR UN DEBUT DE ZONE,
                                     < CETTE DEMANDE EST REFUSEE.
         LAI         KSP             < LORSQUE LA TABULATION EST
                                     < ACCEPTEE, ON RENVOIE UN 'SPACE'.
Z303:    EQU         $
         BSR         VAR+AVISBY      < QUE L'ON RANGE.
         CPI         KGS             < EST-CE UN CTRL-SHIFT-M (C'EST-
                                     < A-DIRE LE CARACTERE 'GS' DE
                                     < PASSAGE EN GRAPHIQUE) ????
         JE          Z880            < OUI, DONC PAS D'ECHO A PRIORI...
<
< TEST DE L'ECHO SUR LE CARACTERE ENTRE :
<
         LB          ARGDEM+OPDEM    < RECUPERATION DE LA FONCTION.
         XR          A,B             < (A)=FONCTION ; (B)=CARACTERE LU.
         JAE         E757            < LA LECTURE EST DEMANDEE SANS ECHO.
<
<        E C H O   D U   C A R A C T E R E   L U  :
<
         BSR         VAR+AWVISU      < ECHO DU CARACTERE LU (B), ET
                                     < (A)='DCARLU' S'IL EXISTE...
         CPI         KALTM           < NE SERAIT-CE PAS LE "ALT-MODE" ???
         JE          Z880            < OUI, ET ON FAIT CE TEST PLUTOT QUE
                                     < D'UTILISER LE 'VILBY' QUI SUIT, CAR
                                     < EN EFFET, EN PARTIULIER LORS DE
                                     < L'UTILISATION D'UNE COMMANDE "!M"
                                     < CONTENANT LE CODE DU "ALT-MODE", C'EST
                                     < LORS DE L'EVENTUEL ECHO DU CARACTERE
                                     < QUI PRECEDE LE "ALT-MODE" QUE CELUI-CI
                                     < EST REPERE COMME ETANT EN ATTENTE (EN
                                     < EFFET, LORS DE LA MISE DANS LE BUFFER
                                     < D'ANTICIPATION PAR "!M", LES CODES
                                     < "ALT-MODES" SONT INSERES LA OU ILS
                                     < SONT, SANS ETRE MIS EN TETE PAR
                                     < RAPPORT A 'ICWOUT'). SI DONC ON SE
                                     < CONTENTE D'UTILISER 'VILBY', ON RISQUE
                                     < DE TROUVER LE CARACTERE QUI VIENT D'ETRE
                                     < ENVOYER EN ECHO, ET NON PAS LE
                                     < CARACTERE "ALT-MODE" !!!
<
< TEST DE FIN D'ECHANGE :
<
E757:    EQU         $
         BSR         VAR+AVILBY      < RESTAURE (A)=CARACTERE LU.
Z880:    EQU         $               < CAS DES 'GS' ENTRES.
         ADRI        I,X
         CPI         KALTM           < EST-CE 'ALT-MODE'...
         JE          ALTIN           < OUI, C'EST 'ALT-MODE'.
         CPI         KCR             < EST-CE LE RETOUR-CHARRIOT.
         JE          E64             < SI OUI, C'EST LA FIN...
         CPI         KEON            < EST-CE 'EOT'...
         JE          E64             < OUI, C'EST LA FIN DU MESSAGE.
         CPR         X,Y             < EST-CE QUE TOUS LES CARACTERES DE
                                     < MANDES SONT LA...
         JLE         E64             < FIN DE LA LECTURE.
<
< DANS LE CAS OU LA LECTURE N'EST PAS FINIE,
< ON REGARDE SI ON EST EN TABULATION EN
< REGARDANT LE CARACTERE QUI AVAIT ETE LU :
<
         LA          VAR+CARIN       < RECUPERATION DU CARACTERE
                                     < REELLEMENT LU.
         CPI         VTAB            < ETAIT-CE UNE DEMANDE DE
                                     < TABULATION ????
         JE          Z304            < SI OUI, ON VA TESTER LA POSITION
                                     < DE X PAR RAPPORT A LA TABLE
                                     < DE TABULATION.
         JMP         E62             < SI NON, ON VA LIRE UN NOUVEAU
                                     < CARACTERE.
<
< FIN D'UNE ENTREE :
<
E64:     EQU         $
         STX         ARGDEM+CODEM    < LE NBRE DE CARACTERES REELLE-
                                     < MENT LUS EST MIS DANS 'CODEM' DE
                                     < LA DEMANDE. A T T E N T I O N...
         BSR         ASTBOX          < SI LA DEMANDE COURANTE A UNE
                                     < BOX (CF. DEMESC), CELLE-CI
                                     < RECOIT LE NBRE DE CARACTERES
                                     < REELLEMENT LUS.
         JMP         E63
<
<        T R A I T E M E N T   D U   R U B O U T  :
<
E771:    EQU         $
         CPZR        X               < Y-A-T'IL DES CARACTERES DEJA
                                     < ENTRES DANS LE BUFFER 'RBUVI'...
         JE          E62             < NON, LE BUFFER EST VIDE,
                                     < LE RUBOUT EST IGNORE.
         ADRI        -I,X            < DANS LE CAS OU IL Y A AU MOINS
                                     < UN CARACTERE DANS RBUVI, ON FAIT
                                     < UN RETOUR ARRIERE D'1 CARACTERE.
         JMP         E62             < ET C'EST REPARTI (COMME EN 14).
<
<        E R R E U R   G R A P H I Q U E :
<
E760:    EQU         $
         LAI         EVGR            < POSITIONNEMENT DES BITS 13 & 15.
         JMP         E65
EE63:    JMP         E63             < RELAI D'ADRESSAGE VERS E63...
<
<        T R A I T E M E N T   D U   B R E A K  :
<
E782:    EQU         $
         LXI         K               < REINITIALISATION EN TETE DU
                                     < BUFFER.
         JMP         E62             < ET C'EST REPARTI...
         PAGE
<
<
<        T R A I T E M E N T   D U   A L T - M O D  :
<
<
ALTIN:   EQU         $               < CAS DES ENTREES.
         STX         ARGDEM+CODEM    < RENVOI DU COMPTE D'OCTETS LUS.
ALTOUT:  EQU         $               < CAS DES SORTIES (ECRITURES).
         STZ         VAR+IALTM       < RAZ DE L'INDICATEUR DES ALT-
                                     < MODES RECUS ; A NOTER QUE C'EST
                                     < ICI LE SEUL ENDROIT OU 'IALTM'
                                     < EST RE-INITIALISE APRES AVOIR
                                     < RECU LE CODE '7D.
         LA          IOID
         TBT         IOIDX           < UN ESCLAVE EST-IL DEJA ATTACHE
                                     < A CETTE VISU...
         JNC         E63             < NON PAS D'ESCLAVE, LA DEMANDE
                                     < COURANTE PROVIENT DE LA
                                     < SURVEILLANCE, IL FAUT DONC
                                     < LUI RENVOYER LE 'ALT-MOD'.
                                     < (EN VUE DU JOB-ENTRY).
<
< CAS OU UN ESCLAVE ATTACHE A LA VISU ENVOIE UN 'ALT-MOD' :
<
         PSR         L               < SAVE @DCT-VISU.
         ANDI        IOIDM           < (A)=ID ESCLAVE.
         IF          IOIDM=K-K,,XEIF%,
         IF          LA RECUPERATION DE <IDESC> EST IDIOTE !!!
XEIF%:   VAL         ENDIF
         LR          A,X             < (X)=ID.
         LB          &ATBU           < (B)=@DCT-ESCLAVE.
         CPZR        B               < VALIDATION @DCT-ESCLAVE.
         JL          E842            < 'ALT-MODE' IGNORE : UN
                                     < 'END-JOB' EST EN COURS, ET
                                     < L'IOID DE LA VISU EST ENCORE
                                     < ATTACHE A L'ESCLAVE DONT
                                     < L'ADRESSE DE DCTESC EST DONNEE
                                     < PAR LES BITS 1-15(B).
         JG          SYSR12          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      PEUT-ETRE LE MIEUX SERA-T'IL
<                    D'IGNORER LE ALT-MODE PAR UN
<                    'JMP E842'...
<
SYSR12:  EQU         $
<        ON A ICI :
<                    (B)=ADRESSE DCT-ESCLAVE.
         LR          B,L             < (L)=@DCT-ESCLAVE.
         LA          IDESC-DCTESC,L
         TBT         IDESCA          < TEST D'INHIBITION DE LA FONCTION
                                     < DU 'ALT-MODE'.
         JC          E842            < EFFECTIVEMENT, IL FAUT IGNORER
                                     < CE 'ALT-MODE'.
         TBT         IDESCW          < TEST DE SUSPENSION D'UN ESCLAVE
                                     < DANS CCI PAR SON HANDLER DE
                                     < SERVICE.
         JC          E841            < OUI, IL FAUT REVEILLER CET
                                     < ESCLAVE QUI DEMANDE A EMETTRE
                                     < SUR LE RESEAU.
<
<        A L T - M O D E   D ' A B O R T  :
<
<
< TEST D'UN 'ALT-MODE' DEJA EN TRAITEMENT :
<
         LA          FSERV-DCTESC,L  < ACCES A FSERV DANS DCTESC.
         JANE        Z1211           < FSERV#0 : IL Y A DEJA UNE
                                     < ROUTINE DE FIN DE SERVICE,
                                     < CE ALT-MODE EST DONC IGNORE !!!
<
< CAS OU IL N'Y A PAS DE ALT-MODE EN COURS DE TRAITEMENT :
<
<        ON A ICI :
<                    (L)=ADRESSE DCT-ESCLAVE.
         LR          L,Y             < SAVE L'ADRESSE DE LA DCT-ESCLAVE
                                     < DANS Y.
         PLR         L               < RESTAURE (L)=@DCT-VISU.
<
< REINITIALISATION DE L'ETAT DE LA VISU :
<
         LXI         FIVALT          < FONCTION INTERNE 'ALT-MODE'
                                     < (=CG, AVEC OG INHIBE) !!!
                                     < AINSI UN ALT-MODE SURVENANT
                                     < ENTRE UN SVC 'OG', ET LA MISE
                                     < EN FILE DE L'OG, METTRA
                                     < MALGRE TOUT LA VISU EN ALPHA-
                                     < NUMERIQUE.
         LA          &VISOTO         < POUR REINITIALISATION DE
                                     < L'ETAT1 DE CETTE VISU.
         STA         ETAT1           < MAJ ETAT1.
         LBI         KUS             < CARACTERE 'US'.
         BSR         VAR+AWVISU      < MISE EVENTUELLE EN MODE ALPHA-
                                     < NUMERIQUE DE LA VISU.
<
< BOUCLE D'ATTENTE D'UN EVENTUEL 2EME
< ALT-MODE PAR EMISSION DE CARACTERE DE
< TEMPORISATION, QUI POUR DES RAISONS LIEES
< AUX LIGNES BOUCLEES ET AU 'BREAK', NE
< PEUT PLUS ETRE LE 'NULL' CONTRAIREMENT
< A CE QUI EST ECRIT DANS LES COMMENTAIRES
< QUI SUIVENT...
<
         LX          VAR+BOALT       < (X)=NBRE DE CARACTERES 'KTEMPO'
                                     <     A EMETTRE POUR TEMPORISER.
         LBI         KSI             < CTRL-O : POUR RETOUR EVENTUEL
                                     < AUX CARACTERES NORMAUX (CF.
                                     < 'ALERNATE MODE').
Z1130:   EQU         $
         BSR         VAR+AWVISU      < EMISSION DU 'NULL' : CETTE
                                     < SOLUTION PAR RAPPORT A CELLE
                                     < DU 'DODO' PRESENTE 2 AVANTAGES :
                                     < 1- ON EST SUR DE LA DUREE, ALORS
                                     < QU'AVEC 'DODO' ON PEUT PRENDRE
                                     < LE TRAIN EN MARCHE...
                                     < 2- AVEC WVISU, ON APPELLE WITVI
                                     < QUI PERMET DE RECUPER LE 2EME
                                     < ALT-MODE EVENTUEL.
         LBI         KTEMPO          < (B)=CARACTERE DE TEMPORISATION.
         JDX         Z1130           < SUITE DE LA TEMPORISATION.
         LA          AGOBPE          < LORS DU 1ER ALT-MODE, ON FAIT
                                     < UNE DEMANDE DE RETOUR AU
                                     < PROGRAME UTILISATEUR PAR PRESC ;
         CPZ         VAR+IALTM       < EST-CE VRAIMENT LE 1ER ALT-MODE???
         JE          Z1150           < OUI, ON VA DONC FAIRE UN
                                     < RETOUR AU PROGRAMME UTILISATEUR.
<
< CAS DU 2EME ALT-MODE RECU EN UN INTERVALLE
< DE TEMPS FAIBLE (INFERIEUR AU TEMPS
< NECESSAIRE POUR EMETTRE BAUDS/11/3 CARACTERES) :
<
         STZ         VAR+IALTM       < RAZ DE L'INDICATEUR DES ALT-MODES
                                     < RECUS.
         LA          AABORT          < LORS DU 2EME ALT-MODE, ON FAIT
                                     < DEMANDE D'ABORT DU PROGRAMME
                                     < UTILISATEUR.
<
< MISE EN PLACE DE LA ROUTINE DE FIN DE SERVICE :
< (A NOTER QUE CETTE FIN DE SERVICE PEUT
< ETRE CELLE D'UN SERVICE DEMANDE EXPLICITEMENT
< PAR L'ESCLAVE, OU IMPLICITEMENT PAR UNE
< INTERRUPTION D'HORLOGE)
<
Z1150:   EQU         $
         XR          Y,L             < (L)=@DCT-ESCLAVE, ET SAVE
                                     <     L'@DCT-VISU DANS Y.
         BSR         AFSERV          < POSITIONNEMENT FSERV AVEC (A), AVEC TEST
                                     < TEST D'UNE TRAPPE EN COURS (CAR LA ROUTI-
                                     < NE DE FIN DE SERVICE ANNULERAIT LE CHAR-
                                     < GEMENT DES REGISTRES REALISES PAR LA
                                     < GESTION DES TRAPPES ; ON FAIT APPEL A
                                     < 'FSERV', CAR CE TEST NE TENAIT PAS ICI...
<
<        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...
<
         LR          Y,L             < RESTAURE (L)=@DCT-VISU.
<
< FIN DU TRAITEMENT :
<
Z1210:   EQU         $               < ENTRY UTILISEE LORSQUE FSERV
                                     < EST DEJA POSITIONNE (CAS EN
                                     < PARTICULIER DES ALT-MODES
                                     < FRAPPES SOUS LE CCI).
         LAI         EVALT           < (A)=CODE-ERREUR DE SORTIE...
         JMP         Z701            < VERS LA SORTIE EN ERREUR DU
                                     < HANDLER ; A NOTER QUE SI UN
                                     < 2EME ALT-MODE EST APPARU, ON
                                     < VA REVENIR IMMEDIATEMENT
                                     < DANS CE MODULE PAR LE TEST
                                     < SUR IALTM QUI SE TROUVE A LA
                                     < SORTIE DE HDLVISU.
<
<        A L T - M O D E   D E   R E V E I L   D ' U N
<        E S C L A V E   S U S P E N D U   D A N S   C C I
<        P A R   S O N   H A N D L E R   D E   S E R V I C E  :
<
E841:    EQU         $
         SBT         IDESCA          < INHIBITION PROVISOIRE DE LA
                                     < FONCTION DU 'ALT-MODE POUR
                                     < CET ESCLAVE.
         RBT         IDESCW          < REVEIL ESCLAVE.
         STA         IDESC-DCTESC,L  < FIN DE SUSPENSION ESCLAVE.
         LBY         DEMSER-DCTESC+XXNSP,L
XWOR%1:  VAL         MOCG=K
XWOR%1:  VAL         -XWOR%1         < POUR UN DECALAGE A DROITE.
XWOR%1:  VAL         MSKNSP>XWOR%1
         ANDI        XWOR%1          < (A)=NSP DU HANDLER DE SERVICE
                                     <     TRAVAILLANT POUR CET ESCLAVE.
         JANE        SYSR13          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      PEUT-ETRE LE MIEUX SERA-T'IL
<                    DE NE PAS FAIRE DE REVEIL PAR
<                    UN 'JMP E842'...
<
SYSR13:  EQU         $
         LR          A,X             < (X)=NSP DU HANDLER DE SERVICE.
         BSR         ACADCT          < (L)=@DCT DE SERVICE ASSOCIEE.
         BSR         ARIT            < REVEIL DU HANDLER DE SERVICE.
E842:    EQU         $
         PLR         L               < RESTAURE (L)=@DCT-VISU.
         JMP         E63
         PAGE
<
<
<        O P E N   G R A P H I Q U E  :
<
<
VISUOG:  EQU         $
         LBI         KGS             < ENVOI DE 'GS'.
E758:    EQU         $
         LA          VAR+DCARLU      < ACCES A L'EVENTUEL DERNIER
                                     < CARACTERE ENTRE.
XWOR%1:  VAL         COSBT?BITPAR=FMASK(K=FCINST
         CPI         KDC3            < EST-CE UN CTRL-X-OFF ???
         ORI         XWOR%1          < MEMORISATION EVENTUELLE D'UN
                                     < CTRL-X-OFF HORS-ECHANGE (AVANT
                                     < LA SORTIE...)
         JE          E952            < RETOUR EN ERREUR POUR CTRL-X-OFF
                                     < HORS-ECHANGE.
         BSR         VAR+AWVISU      < ECRITURE DU CARACTERE (B).
         CPI         KDC3            < EST-CE CTR-X-OFF ???
         JE          E952            < OUI, RETOUR EN ERREUR.
         JMP         EE63            < ET C'EST TOUT...
<
<
<        C L O S E   G R A P H I Q U E  :
<
<
VISUCG:  EQU         $
         LBI         KUS             < CARACTERE 'US'.
         JMP         E758            < VERS L'ECRITURE DU CARACTERE.
<
<
<        E F F A C E M E N T   D E   L ' E C R A N  :
<
<
VISUER:  EQU         $
         LBI         KESC            < CARACTERE 'ESC'.
         BSR         VAR+AWVISU      < ECRITURE DE 'ESC'.
         LX          VAR+BOERA       < NBRE DE CARACTERES A 11 MOMENTS
                                     < A EMETTRE (1 'HOME'+(X) 'KTEMPO')
         LBI         KFF             < CARACTERE 'HOME'.
E759:    EQU         $
         BSR         VAR+AWVISU      < ECRITURE DU CARACTERE (B).
         LBI         KTEMPO          < (B)=CARACTERE DE TEMPORISATION.
         JDX         E759            < BOUCLE DE TEMPORISATION.
         LA          MEMV            < ACCES AU CONTROLE DU SYSTEME...
         TBT         XXXJFC          < FAUT-IL SIGNER ???
         JC          E759X           < OUI, ON Y VA...
EEEE63:  JMP         EE63            < NON, C'EST FINI...
         PAGE
<
<
<        L E C T U R E   G R A P H I Q U E  :
<
<
<        RESULTAT :
<                      ON RENVOIE AU DEMANDEUR DANS SON BUFFER :
<                                    - OCTET0=CARACTERE
<                                    FRAPPE PAR L'ESCLAVE POUR ENVOYER
<                                    LE CURSEUR GRAPHIQUE,
<                                    OU ETAT DU TERMINAL DANS LE CAS
<                                    DU CURSEUR ALPHA-NUMERIQUE,
<                                    BIT3=K : HARD COPY IN WORKING
<                                             ORDER (=1 IF NOT),
<                                    BIT4=K : LINEAR INTERPOLATION OFF,
<                                    BIT5=K : MODE GRAPHIQUE,
<                                        =1 : MODE ALPHA-NUMERIQUE,
<                                    BIT6=K : MARGIN LEFT (K),
<                                        =1 : MARGIN RIGHT (1),
<                                    BIT7=K : AUXILIARY DEVICES AT-
<                                    TACHED IN ACTIVATION,
<                                    - OCTET1=K,
<                                    - MOT1=COORDONNEE 'Y' DU CURSEUR
<                                    GRAPHIQUE OU ALPHA-NUMERIQUE,
<                                    - MOT2=COORDONNEE 'X'.
<
<
<        NOTA :
<                      LE 'CODEM' (Y) DOIT ETRE
<                    SUPERIEUR OU EGAL A 6, LES
<                    OCTETS RESIDUELS ETANT IGNORES ;
<                    ON NE PEUT ACCEPTER DES LON-
<                    GUEURS INFERIEURES A 6 POUR DES
<                    RAISONS EVIDENTES DE PROTECTION
<                    MEMOIRE...
<
<
<        A T T E N T I O N  :
<                      DANS LE CAS DU CURSEUR GRAPHIQUE,
<                    LA CONNAISSANCE DE SES COORDONNEES
<                    SE FAIT PAR L'INTERMEDIARE DE DEUX
<                    DEMANDES SUCCESSIVES : 'CU'+'LG',
<                    ALORS QUE POUR LE CURSEUR ALPHA-
<                    NUMERIQUE, SEULE LA DEMANDE 'CU'
<                    (AVEC (AMDEM)#0) SUFFIT...
<
<
VISULG:  EQU         $
<*******************************************************************************
XWOR%1:  VAL         -I              < INITIALISATION D'UN COMPTEUR :
XXVM0::  MOT         '0@@@@+D        < MOT0 DU BUFFER (CARACTERE DE DEBLOCAGE),
XXVM1::  MOT         '0@@@@+D        < MOT1 DU BUFFER (COORDONNEE X),
XXVM2::  MOT         '0@@@@+D        < MOT2 DU BUFFER (COORDONNEE Y).
<*******************************************************************************
XXVD4::  VAL         LK              < DIMENSION DE L'ECRAN GRAPHIQUE...
                                     < (X=Y).
<*******************************************************************************
XWOR%F:  VAL         XXVD4
SIZXVI: @VAL         '0@@@@          < TAILLE HORIZONTALE DE L'ECRAN VISU.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XXVD4
SIZYVI: @VAL         '0@@@@          < TAILLE VERTICALE DE L'ECRAN VISU.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
XXVD1::  VAL         XXVD4=K/XXXMOY  < DECALAGES DE
XXVD2::  VAL         NBITOC-XXVD1    < DECONCATENATION
XXVD3::  VAL         NBITMO-XXVD1    < DES COORDONNEES.
XXVTOG:: VAL         2               < VALEUR INITIALE DU DECOMPTEUR DE TIME
                                     < OUT IMPOSE SUR LES VISUS LORS DES
                                     < LECTURES GRAPHIQUES ; EN EFFET, SI ALORS
                                     < QUE LE RETICULE EST VISUALISE, L'UTILI-
                                     < SATEUR FAIT PAGE, ALORS, LES OCTETS DE
                                     < COORDONNEES NE SONT PAS ENVOYES, ET ON
                                     < SE MET A ATTENDRE...
                                     < ATTENTION : ON PREND 2 ET NON PAS 1
                                     < CAR ON RISQUERAIT AINSI DE VOIR DES
                                     < INTERRUPTIONS D'HORLOGE PASSER AVANT
                                     < L'UN DES CARACTERES DE COORDONNEES,
                                     < DECRETANT AINSI UN TIME OUT !!!
XXVCLG:: VAL         KAROND          < PREMIER CODE-CARACTERE QUI NE PEUT ETRE
                                     < EMIS PAR LA VISU LORS DE LA LECTURE
                                     < GRAPHIQUE...
         IF          KALTM-XXVCLG,,XEIF%,XEIF%
         IF          ATTENTION : ON RISQUE DE RECEVOIR DES CODES DE
         IF          'ALT-MODE' LORS DES LECTURES GRAPHIQUES !!!
XEIF%:   VAL         ENDIF
         CPZR        X
         JNE         E760            < ERREUR SUR L'@BUFFER.
         LA          ARGDEM+CODEM    < (A)='CODEM' ARGUMENT,
         CPI         XXVXY*NOCMO+NOCMO
         JL          E760            < 'CODEM' EST INVALIDE CAR INFERIEUR
                                     < AU NOMBRE D'OCTETS ATTENDUS...
         LBI         ETANXT          < POUR TEST DU BIT 14 DU MOT D'ETAT.
         BSR         VAR+AWITVI      < ATTENTE DU 1ER CARACTERE DE
                                     < L'UTILISATEUR, INDIQUANT QUE
                                     < LE CURSEUR GRAPHIQUE EST BIEN
                                     < POSITIONNE.
         SWBR        A,A             < CADRAGE A GAUCHE ET OCTET1=K.
<*******************************************************************************
         BSR         ASIMUL          < SIMULATION DE L'INSTRUCTION SUIVANTE :
         STA         &VAR+RBUVI      < LE CARACTERE DE DEBLOCAGE EST
<*******************************************************************************
                                     < RENVOYE EN MOT0 DU BUFFER
                                     < (BITS 8-15=K).
         LXI         XXVM1*NOCMO     < POUR COMMENCER SUR L'OCTET2
                                     < DU BUFFER.
         LYI         XXVXY*NOCMO+NOCMO < LECTURE DES 6-2 OCTETS DE
                                     < COORDONNEE GRAPHIQUE.
         STY         ARGDEM+CODEM    < LE CODEM DE LA DEMANDE RECOIT
                                     < 6 LORS D'UNE LECTURE GRAPHIQUE
                                     < POUR EVITER LES ENNUIS LORS
                                     < DE L'OMOV2 SUIVANT L'EVENTUEL
                                     < SWAPPING IN ESCLAVE.
         LA          TESTO
         PSR         A               < SAUVEGARDE DU 'TESTO' COURANT...
         LA          TIMOUT          < ET DU 'TIMOUT', MAIS PAS DANS 'B'
         PSR         A               < CAR IL Y A 'ETANXT'...
         LA          ETAT0           < ACCES A L'ETAT CORRESPONDANT AU
                                     < CARACTERE DE DEBLOCAGE...
         TBT         ETADOG          < EST-CE UN TIME-OUT ???
         JC          E774X1          < OUI, INUTILE D'ATTENDRE LA SUITE...
         LAI         XXVTOG
         STA         TESTO           < MISE EN PLACE D'UN 'TESTO' SPECIAL 'LG'.
         STA         TIMOUT          < POUR DECOMPTER BIEN SUR !!!
         STBY        VAR+CARALT      < DE PLUS, ON INHIBE AINSI LES TESTS
                                     < SUR 'CARALT' ; EN EFFET, LE 'CARALT'
                                     < PEUT VALOIR L'UN DES CODES D'ENTREE
                                     < GRAPHIQUE !!!
         IF          XXVTOG-K,,,XEIF%
         IF          ATTENTION : CE QUI PRECEDE EST IDIOT !!!
XEIF%:   VAL         ENDIF
E774:    EQU         $
         BSR         VAR+AWITVI      < LECTURE DES COORDONNEES PAR OCTET.
         CPI         KALTM           < EST-CE UN TIME OUT ???
         JE          E774X           < OUI, ON ARRETE ICI...
         BSR         VAR+AVISBY      < SAVE DANS LE BUFFER.
         ADRI        I,X
         CPR         X,Y
         JG          E774            < OCTET SUIVANT.
<OPTION  BSR         VAR+AWITVI      < LECTURE DE 'CR' (IGNORE).
<-STRAP  BSR         VAR+AWITVI      < LECTURE DE 'EOT' (IGNORE).
<
< TEST D'UN EVENTUEL 'ALT-MODE' ENVOYE COMME 1ER CARACTERE :
<
E774X1:  EQU         $               < CAS DES TIME-OUT DES LE PREMIER.
                                     < CARACTERE...
         LXI         XXVM0
         BSR         VAR+AVILBY      < ACCES A L'OCTET0 DU BUFFER.
         CPI         KALTM           < LE CARACTERE LU EST DANS L'OCTET
                                     < GAUCHE DU MOT0 DU BUFFER.
E774X:   EQU         $
         PLR         A
         STA         TIMOUT          < RESTAURATION DU 'TIMOUT' COURANT...
         PLR         A
         STA         TESTO           < RESTAURATION DU 'TESTO' COURANT...
         LAI         K
         STBY        VAR+CARALT      < RESTAURATION DU 'CARALT'...
         JE          ALTIN           < C'EST 'ALT-MODE', OU BIEN UN TIME OUT
                                     < LORS DE L'ENTREE DES COORDONNEES, ON
                                     < ABORTE...
<
< DECODAGE DES COORDONNEES DU CURSEUR GRAPHIQUE :
<
         LXI         XXVM1
<*******************************************************************************
         BSR         ASIMUL          < SIMULATION DE L'INSTRUCTION SUIVANTE :
         LA          &VAR+RBUVI      < ACCES A LA COORDONNEE X.
<*******************************************************************************
         SLRD        XXVD1           < LOW-X DANS B.
         ANDI        MOCD            < RAZ DU '001' EN TETE DE HIGH-X.
         SLRS        XXVD2           < (A)=HIGH-X.
         SLRD        XXVD3           < RECONCATENATION DANS B DE
                                     < HIGH-X-LOW-X.
         LXI         XXVM2
<*******************************************************************************
         BSR         ASIMUL          < SIMULATION DE L'INSTRUCTION SUIVANTE :
         LA          &VAR+RBUVI      < ACCES A LA COORDONNE Y.
<*******************************************************************************
<*******************************************************************************
         BSR         ASIMUL          < SIMULATION DE L'INSTRUCTION SUIVANTE :
         STB         &VAR+RBUVI      < SAVE DANS LE MOT2 DU BUFFER LA
<*******************************************************************************
                                     < COORDONNEE X DECODEE.
         SLRD        XXVD1           < LOW-Y DANS B.
         ANDI        MOCD            < SUPPRESSION DE '001' EN TETE DE
                                     < HIGH-Y.
         SLRS        XXVD2           < (A)=HIGH-Y.
         SLLD        XXVD1           < RECONCATENATION DANS A DE
                                     < HIGH-Y-LOW-Y.
         LXI         XXVM1
<*******************************************************************************
         BSR         ASIMUL          < SIMULATION DE L'INSTRUCTION SUIVANTE :
         STA         &VAR+RBUVI      < MISE DANS LE MOT1 DU BUFFER DE
<*******************************************************************************
                                     < LA COORDONNEE DECODEE Y DU
                                     < CURSEUR GRAPHIQUE.
         LBI         KUS
         BSR         VAR+AWVISU      < POUR CLEARER LE TERMINAL APRES
                                     < CETTE ENTREE GRAPHIQUE...
EEE63:   JMP         EEEE63          < THAT'ALL FOLK... (VERS E63).
         PAGE
<
<
<        A L T - M O D E   ( S U I T E   E T   F I N )  :
<
<
<        NOTA :
<                      CE MODULE SPECIALEMENT SQULETTIQUE
<                    EST MIS LA PARCEQU'ON N'A PAS LA
<                    PLACE DE LE METTRE AILLEURS (CF.
<                    LES SAUTS RELATIFS...)
<                      IL EST DESTINEE A RECEVOIR LES
<                    ALT-MODES ALORS QUE FSERV EST DEJA
<                    POSITIONNEE (CF. LES ALT-MODES SOUS-CCI)
<
<
Z1211:   EQU         $               < ENTRY UTILISEE LORSQUE FSERV
                                     < EST DEJA POSITIONNEE.
         PLR         L               < RESTAURE (L)=@DCT-VISU.
         JMP         Z1210           < VERS L'ENVOI DU CODE ERREUR '7D.
         PAGE
<
<
<        S I G N A T U R E  :
<
<
<        FONCTION :
<                      LORSQUE LE BIT 'XXXJFC' DU
<                    MOT DE CONTROLE 'MEMV' EST A 1,
<                    CHAQUE EFFACEMENT D'ECRAN D'UNE
<                    VISU EST SUIVI DE L'AFFICHAGE DU
<                    MESSAGE 'MJFC'...
<
<
E759X:   EQU         $
         LXI         XXJFC2          < (X)=LONGUEUR DU MESSAGE,
         LYI         XXJFC1          < (Y)=INDEX DE DEBUT DU MESSAGE.
E759Y:   EQU         $
         XR          X,Y
         LBY         &ACEXTD         < (A)=CARACTERE COURANT DU MESSAGE,
         LR          A,B             < ET SA MISE DANS 'B' POUR 'AWVISU'...
         BSR         VAR+AWVISU      < ECRITURE DU CARACTERE (B).
         XR          X,Y
         ADRI        I,Y             < PASSAGE AU CARACTERE SUIVANT,
         JDX         E759Y           < S'IL EXISTE...
         JMP         EEE63           < ET C'EST FINI...
         PAGE
<
<
<        E C R I T U R E   G R A P H I Q U E  :
<
<
<        ARGUMENTS :
<                    (Y)=NBRE D'OCTETS DE LA LISTE=NBRE DE POINTS*4,
<                        LE BUFFER (AMDEM) CONTIENT (Y)/4 COUPLETS DE
<                        COORDONNEES (Y,X),
<                    (X)=K.
<
<
<        A T T E N T I O N  :
<                      LORSQU'UNE COORDONNEE Y/X N'EST
<                    PAS RECONNUE DANS L'INTERVALLE (K,1023),
<                    ON ADMET QU'ELLE EST DEJA TRANSCODEE
<                    EN ASCI ; CELA PERMET DONC D'ENVOYER
<                    DES GRAPHIQUES DEJA CODES, MAIS AUSSI
<                    AUTORISE LES CONNEXIONS MATRICIELLES
<                    EN GRAPHIQUE (EN EFFET L'ECRITURE
<                    GRAPHQIE DETRUIT LE BUFFER, ET LORSQU'ON
<                    DUPLIQUE CELLE-CI, A LA 2EME ITERATION,
<                    LE BUFFER NE CONTIENT PLUS LES COUPLES
<                    (Y,X)).
<                      DE PLUS SI L'@-OCTET DU BUFFER
<                    N'EST PAS PAIRE, OU BIEN, SI LE
<                    COMPTE D'OCTETS N'EST PAS MULTIPLE
<                    DE 4, AUCUNE CONVERSION N'EST FAITE,
<                    ET LE CONTENU DU BUFFER EST ENVOYE
<                    TEL QUEL. ON PEUT AINSI FAIRE DANS
<                    UN PROGRAMME LES CONVERSIONS GRAPHI-
<                    QUES, ET LES TRANSMETTE A CMS4 DANS LE
<                    MODE 'ECRITURE GRAPHIQUE' ; EN EFFET ON NE
<                    PEUT FAIRE D'ECRITURE ALPHA-NUMERIQUE
<                    PUISQUE LA PLUPART DES CODES A TRANSMETTRE
<                    SONT EN FAIT DES CODES DE MINUSCULES
<                    UTILISES POUR LES EXTENSIONS !!!
<
<
<        NOTA IMPORTANT :
<                      LES ACCES AU BUFFER ARGUMENT PAR '&VAR+RBUVI'
<                    NE SE FONT PAS EN SIMULATION, CAR EN EFFET CELA
<                    EST INUTILE DANS LA MESURE OU 'FAVWG', MODIFIANT
<                    CE MEME BUFFER ARGUMENT, NE PEUT S'EXECUTER EN
<                    MEMOIRE HAUTE !!!
<
<
VISUEG:  EQU         $
         CPZR        X               < X EST-IL BIEN NUL...
         JNE         Z1540           < NON, L'ADRESSE OCTET DU
                                     < BUFFER N')ST PAS PAIRE, ON
                                     < NE FAIT DONC PAS DE CONVERSION !!!
         LR          Y,A             < (A)=NBRE D'OCTETS DE LA LISTE,
                                     < A NOTER QU'IL NE PEUT ETRE
                                     < NUL (CF. RUNSVC).
         ANDI        BIT>XXVXY-N     < CE NBRE DOIT ETRE UN MULTIPLE
                                     < DE 4 PUISQUE CORRESPONDANT
                                     < AU NBRE DE POINTS A TRACER (Y,X).
         JANE        Z1540           < LE COMPTE D'OCTETS N'EST PAS
                                     < MULTIPLE DE 4 : ON NE FAIT DONC
                                     < PAS DE CONVERSION !!!
         LR          Y,A             < (A)=NBRE D'OCTETS.
         SLRS        NOCMO=K         < (A)=NBRE DE MOTS.
         LR          A,Y             < (Y)=NBRE DE MOTS DE LA LISTE DE
                                     < COORDONNEES.
<        ON A ICI :
<                    (Y)=NBRE DE COORDONNEES (Y,X),
<                    (X)=K.
E770:    EQU         $
         LA          &VAR+RBUVI      < ACCES A UNE COORDONNEE Y OU X.
         LBI         K
<
< CONVERSION 'ASCI' DES COORDONNEES :
<
         SCRS        XXVD1
         SCLD        XXVD1           < (B)=RESTE DE LA DIVISION PAR 32.
         SLRS        XXVD1           < (A)=QUOTIENT DE LA DIVISION PAR 32.
         CPI         BIT>XXVD1-N     < VALIDATION DES POIDS FORTS.
         JG          ZYY70           < ON ADMET QUE LA COORDONNEE Y/X
                                     < EST DEJA TRANSCODEE EN ASCI.
         ADRI        BIT>XXVD1,A     < (A)=1ER CARACTERE ASCII DE LA
                                     < COORDONNEE CODEE.
         ADRI        XXVXY>XXVD1,B   < DANS LE CAS DE X, A CONTIENT
                                     < LE 2EME CARACTERE DE LA
                                     < COORDONNEE CODEE, DANS LE CAS
                                     < DE Y, IL VA FALLOIR AJOUTER 32.
         SWBR        A,A             < LE 1ERE CARACTERE EST MIS A
                                     < GAUCHE DANS A.
         ORR         B,A             < CONCATENATION 1ER-2EME CARACTERE
                                     < DE LA COORDONNEE CODEE.
         LR          X,B             < LA COORDONNEE COURANTE EST-ELLE
                                     < X OU Y...
         TBT         NBITAB-B        < SI X EST PAIR, C'EST Y, SINON
                                     < LA COORDONNEE EST X.
         JC          E761            < CAS DE LA COORDONNEE 'X' ((X) IMPAIR),
         ADRI        BIT>XXVD1,A     < CAS DE LA COORDONNEE 'Y' ((X) PAIR).
E761:    EQU         $
         STA         &VAR+RBUVI      < RANGEMENT DES 2 CARACTERES
                                     < DE LA COORDONNEE CODEE.
ZYY70:   EQU         $               < ENTRY 'COORDONNEE Y/X
                                     < DEJA TRANSCODEE EN ASCI'.
         ADRI        I,X             < COORDONNEE SUIVANTE.
         CPR         X,Y
         JG          E770            < COORDONNEES SUIVANTES.
<
< CAS OU ON A FINI DE CODER LES COORDONNEES :
<
         ADR         Y,Y             < (Y)=NBRE D'OCTETS A EMETTRE.
         LXI         K               < RANG DU 1ER OCTET A ECRIRE.
Z1540:   EQU         $               < CAS OU AUCUNE CONVERSION
                                     < GRAPHIQUE EN ASCI N'A ETE FAITE.
         BR          VAR+AE61        < ALLONS VERS L'ECRITURE ALPHA-
                                     < NUMERIQUE.
         PAGE
<
<
<        E X E C U T I O N   D E S   ' L B Y '   S U R   ' R B U V I '  :
<
<
<        ARGUMENT :
<                    (X)=INDEX DE L'OCTET.
<
<
<        RESULTAT :
<                    (A)=OCTET DESIRE.
<
<
VILBY:   EQU         $
<*******************************************************************************
         BSR         ASIMUL          < SIMULATION DE L'INSTRUCTION SUIVANTE :
         LBY         &VAR+RBUVI      < (A)=OCTET(X) PAR RAPPORT A (SLO,SLE).
<*******************************************************************************
         RSR
<
<
<        E X E C U T I O N   D E S   ' S T B Y '   S U R   ' R B U V I '  :
<
<
<        ARGUMENT :
<                    (A)=OCTET A RANGER,
<                    (X)=INDEX DE CET OCTET.
<
<
<        NOTA :
<                      ON FAIT DE 'VILBY' ET 'VISBY'
<                    DES SOUS-PROGRAMMES, A CAUSE DES
<                    SAUTS SUPERIEURS A 128 MOTS QUE
<                    L'IMPLANTATION DIRECTE DE 'BSR'
<                    'ASIMUL' NE MANQUERAIT PAS DE
<                    PRODUIRE...
<
<
VISBY:   EQU         $
<*******************************************************************************
         BSR         ASIMUL          < SIMULATION DE L'INSTRUCTION SUIVANTE :
         STBY        &VAR+RBUVI      < RANGEMENT DE L'OCTET (A) EN (X) PAR
<*******************************************************************************
                                     < RAPPORT A (SLO,SLE).
         RSR
         PAGE
<
<
<        E C R I T U R E   D ' 1   C A R A C T E R E   :
<
<
<        FONCTION :
<                      CETTE ROUTINE A A SA CHARGE
<                    L'ECRITURE D'UN CARACTERE SUR
<                    LA VOIE COURANTE, PUIS D'ATTEN-
<                    DRE L'INTERRUPTION DE FIN D'ECHANGE,
<                    ET ENFIN SI CELA EST DEMANDE PAR
<                    'TEMPIC' DE TEMPORISER AVANT DE
<                    RENDRE LA MAIN (CELA EST RENDU
<                    NECESSAIRE PAR LE DISQUE VIDEO...)
<
<
<        ARGUMENT :
<                    (B)=CARACTERE A ECRIRE, ON POURRA PARFOIS TROUVER
<                        (MISE EN FONCTION DU CURSEUR GRAPHIQUE,...) LE
<                        COMPLEMENT A 2 DU CARACTERE A ECRIRE : CELA
<                        SIGNIFIE ALORS QU'IL FAUT AU PREALABLE VIDER
<                        LE BUFFER DES CARACTERES ANTICIPES (EN EFFET
<                        POUR LE CURSEUR GRAPHIQUE, ON NE PEUT ANTICIPER
<                        LES 4 OCTETS DE COORDONNEES GENERES PAR LA VISU
<                        ELLE-MEME, IL FAUT DONC ANNULER TOUT CE QUE
<                        L'UTILISATEUR AURAIT PU ANTICIPER...).
<
<
<        RESULTAT :
<                    DETRUIT 'B' !!!
<                    (A)='DCARLU' (S'IL EXISTE BIEN ENTENDU...).
<
<
WVISU:   EQU         $
         BSR         ASMMK           < ON MASQUE LES INTERRUPTIONS ; IL NE
                                     < FAUDRAIT PAS EN EFFET QU'UN DEFAUT
                                     < SECTEUR APPARAISSE ENTRE 'APREDS', ET
                                     < LA 'SIO' DE SORTIE, LE RESTART SERAIT
                                     < ALORS MAUVAIS...
         CPZR        B               < FAUT-IL VIDER LE BUFFER D'ANTICIPATION ??
         JGE         WVISU1          < NON...
         NGR         B,B             < OUI, (B)=CARACTERE A ECRIRE...
         PSR         X
         SVC         SVCM10          < ET VOILA LE TRAVAIL...
         PLR         X
WVISU1:  EQU         $
         BSR         APREDS          < MISE DE BIT0(SIT) A 1.
<
< A NOTER  QU'ON A ICI LE MODE 'SORTIE FONCTION'.
<
         LR          B,A             < RECUPERATION DU CARACTERE
         SIO         VAR+SORVI       < SORTIE CARACTERE
XWOR%1:  VAL         COSBT?COMRW=FMASK(K=FCINST
XWOR%1:  VAL         COSBT?COMSTR=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?COMINT=FMASK(K?XWOR%1=FCINST
         LAI         XWOR%1
         SIO         VAR+CDEVI       < VALIDATION DES IT 'OUT'
         BSR         ASMDK           < DEMASQUAGE DES INTERRUPTIONS...
         LR          B,A             < (A)=CARACTERE EMIS,
         CPI         KBEL            < EST-CE LA CLOCHE ???
         JNE         WVISU2          < NON...
<
< CAS DU CARACTERE 'CLOCHE' : LE
< PROBLEME EST LE SUIVANT : SA DUREE
< EST SUPERIEURE A CELLE D'UN CARACTERE
< NORMAL ; IL FAUT DONC TEMPORISER
< DERRIERE LUI. ON POURRAIT LE FAIRE
< EN ENVOYANT DES CARACTERES 'KTEMPO',
< MALHEUREUSEMENT, CELA COMPLIQUERAIT
< VACHEMENT LES CHOSES AU NIVEAU DES
< TESTS SUR 'DCARLU' QUI SUIVENT LES
< APPELS A 'WVISU' ; C'EST POURQUOI
< ON VA UTILISER 'DODO' :
<
XWOR%1:  VAL         1000            < ON VA TRAVAILLER EN MILLI-SECONDE, CAR
                                     < EN MICRO-SECONDE, 1.000.000 NE TIENT
                                     < PAS SUR UN MOT...
XWOR%2:  VAL         32              < ON VA TEMPORISER UNE DUREE EQUIVALENTE
                                     < A CELLE DE L'ENVOI DE XWOR%2 CARACTERES,
                                     < SUR UNE VISU A B9600 BAUDS !!!
         NTRN
XWOR%3:  VAL         XXVLC*XWOR%1/XERAS*XWOR%2/THALT
XWOR%4:  VAL         XWOR%3/B9600*XERAS*XWOR%1
         TRN
                                     < XWOR%3 DONNE LA DUREE DE XWOR%2
                                     < CARACTERES SUR UNE VISU A B9600 BAUDS
                                     < EXPRIMEE EN THALT-MICRO-SECONDES...
         PSR         X
         LRM         X
         WORD        -XWOR%4         < (X)=-DUREE DE LA TEMPORISATION EXPRI-
                                     < MEE EN THALT-MICRO-SECONDE...
         BSR         ADODO           < ET ON FAIT DODO A CAUSE DES CLOCHES...
         PLR         X
<
< ATTENTE DE L'INTERRUPTION :
<
WVISU2:  EQU         $
         LBI         ETARIL
         BSR         VAR+AWITVI      < ALLONS ATTENDRE UNE IT
                                     < VOIE (PSEUDO-IT...)
<
< DEBLOCAGE LORS DE L'IT DE FIN D'ECRITURE...
<
         BSR         APREDS          < MISE DE BIT0(SIT) A 0.
<
< TEMPORISATION EVENTUELLE
< INTER-CARACTERES :
<
         PSR         X
         LX          VAR+TEMPIC      < (X)='NTEMPI' OU 'VTEMPI', SUIVANT...
         BSR         ADODO           < PEUT-ETRE UN PETIT DODO...
         PLR         X
<
< SORTIE :
<
         RSR
         PAGE
<
<
<        R O U T I N E   D E S   P S E U D O - I T   V I S U S :
<
<
<        ARGUMENT :
<                    (L)=ADRESSE DCT VISU EN CAUSE.
<                    (X)=NUMERO DE LA VISU (DE 1 A 8)
<
<
         USE         W,DEM0
         USE         L,DCT0
ITVIS:   EQU         $
         PSR         A
         LAI         NPDPR           < (A)=CONSTANTE DE TRANSLATION DE PASSAGE
                                     <     DES NUMEROS DE VOIES AU NIVEAU GENERA
                                     <     LISE D'INTERRUPTION DES VISUS.
         ADR         X,A             < (A)=NIVEAU D'IT GENERALISE DE
                                     <     LA VISU NUMERO (X).
         BSR         ASNAP           < TRACE DE LA PSEUDO-IT VISU(X).
         BSR         ASMIT           < LES INTERRUPTIONS SONT-ELLES MASQUEES ???
         JAE         E805XB          < NON, ON PEUT DONC FAIRE IMPUNEMENT
                                     < LE 'RQST' SUR 'SPHEX'...
         LA          SPHEX           < OUI, ELLES LE SONT : IL S'AGIT SUREMENT
                                     < D'UN APPEL DE 'ITVIS' PAR LE DETECTEUR
                                     < DE TIME-OUT, AUQUEL CAS IL NE FAUT
                                     < SURTOUT PAS DEMASQUER LES INTERRUPTIONS
                                     < PAR LE 'RQST' ; IL FAUT NOTER QUE LE
                                     < MASQUAGE DES INTERUPTIONS FAIT OFFICE
                                     < D'EXCLUEUR DE PHASE CRITIQUE...
         BSR         ABETA           < MAIS AU FAIT QUE VAUT LE 'SPHEX' DE
                                     < LA VISU :
         CPI         SPHEX0          < LA VISU NE SERAI-ELLE PAS DEJA EN
                                     < PHASE CRITIQUE ???
         JE          E805XC          < NON, OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      VOIR COMMENT CELA EST POSSIBLE
<                    VUES LES PRIORITES RELATIVES DE
<                    L'HORLOGE (POUR LE DETECTEUR DE
<                    TIME OUT) ET DES VISUS !!!
<
E805XC:  EQU         $
         JMP         E805XD          < ON SAUTE LE 'RQST' SUR 'SPHEX'... (PUIS-
                                     < QUE LE MASQUAGE DES INTERRUPTIONS NOUS
                                     < PLACE EN PHASE CRITIQUE...
E805XB:  EQU         $
         RQST        SPHEX           <<<<PHASE CRITIQUE AVEC CHAND ET
                                     < LES HANDLERS VISUS.
E805XD:  EQU         $
         BSR         ATEC            < TEST D'UN ECHANGE EN COURS
                                     < SUR CETTE VISU.
         JNE         E806            < OUI, IL Y A UN ECHANGE EN COURS
                                     < (POUR LE COMPTE DE L'ESCLAVE OU
                                     < POUR LE COMPTE DE LA SURVEIL-
                                     < LANCE), IL N'Y A DONC RIEN A
                                     < FAIRE, QUE DE DEBLOQUER LE
                                     < HANDLER-VISU CONCERNE.
         LB          VAR+SAVETA      < (B)=VALEUR DE L'ETAT AVANT...
         STZ         VAR+SAVETA      < PUISQU'IL N'Y A PAS D'ECHANGE EN COURS,
                                     < LA VISU EN CAUSE N'EST PAS BLOQUEE DANS
                                     < DANS 'WITVI', ET CETTE REMISE A 0
                                     < N'AURA PAS LIEU...
         LA          VAR+KCWIO       < NOMBRE DE CARACTERES EN ATTENTE 'IN',
         JAG         E805XY          < OK, 'KCWIO' EST CORRECT...
         TBT         NBITMO+ETANXT   < EST-CE UNE INTERRUPTION D'ENTREE ???
         JNC         E805XZ          < NON, C'EST DONC UNE INTERRUPTION DE
                                     < SORTIE HORS ECHANGE... COMMENT CELA
                                     < PEUT-IL ARRIVER ??? IMAGINONS UN CARAC-
                                     < TERE D'ABANDON DE SORTIE ('CTRL-X-OFF',
                                     < 'BREAK',...) APPARAISSANT ENTRE L'ENTRY
                                     < DE 'HDLVIS' ET LA 'SIO' DE SORTIE
                                     < CARACTERE : LE MOT D'ETAT CONTIENT
                                     < 'ETANXT', ET 'ETARIL' CAR LA VOIE
                                     < EST LIBRE PUISQUE NON UTILISEE ;
                                     < 'HDLVIS' EST DONC INTERROMPUE, 'ITVIS'
                                     < PREND LA MAIN (PAR 'HDLMUL'), ET
                                     < DETECTE UN ECHANGE EN COURS, ET CROIT
                                     < DONC REVEILLER 'HDLVIS' (PAR SON
                                     < SEMAPHORE... 'HDLVIS' REPREND ENSUITE
                                     < LA MAIN, VA DONC LANCER SON ECHANGE,
                                     < PUIS FAIRE SON 'WITVI', QUI EST PASSANT
                                     < (VOIR LE 'SIT' ET 'ETARIL'), AINSI,
                                     < IL CROIT AVOIR FAIT SA SORTIE, CE QUI
                                     < EST FAUX... LA VRAIE INTERRUPTION
                                     < CORRESPONDANT A L'ECHANGE QU'IL A
                                     < LANCE N'APPARAITRA QUE PLUTARD, ET
                                     < CERTAINEMENT HORS-ECHANGE !!!
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ESSAYER DE COMPRENDRE,... PUIS SORTIR...
<
E805XZ:  EQU         $
         LAD         SPHEX
         BSR         ARLSE           < FIN DE PHASE CRITIQUE...
         JMP         E806X           < ET ON SORT...
E805XY:  EQU         $
         CPI         XXVNCM          < Y-A-T'IL DEBORDEMENT PROCHAIN DU
                                     < BUFFER EN ANNEAU ???
         JL          E805XA          < NON, C'EST BIEN...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ESSAYER DE COMPRENDRE...
<
         JMP         E805X           < ET ON VA VERS LA SURVEILLANCE...
E805XA:  EQU         $
         LX          VAR+ICWOUT      < NON, MAIS LE CARACTERE
         LBY         &VAR+ALVCW      < A EXTRAIRE
         RBT         BITPAR          < RAZ DU BIT DE PARITE A PRIORI...
         CPI         KDC3            < EST-CE LE 'CTRL-X-OFF' ???
         JNE         E805XX          < NON...
         STA         VAR+DCARLU      < OUI, ON FAIT CE VILAIN TRUANDAGE AFIN
                                     < QUE L'ECRITURE SUR VISU PUISSE TESTER
                                     < LES 'CTR-X-OFF' HORS-ECHANGE... ON NOTERA
                                     < QU'IL N'Y A PAS D'ECHANGE EN COURS,
                                     < ET QUE DONC CE 'STA' N'EST PAS DAN-
                                     < GEREUX...
E805XX:  EQU         $
         IF          NSPMUL-NSPVI0,XEIF%,,
         IF          ATTENTION : 'HDLMUL' DOIT ETRE PLUS PRIORITAIRE
         IF          QUE LES 'HDLVIS' POUR FAIRE EN SORTE QUE 'ITVIS'
         IF          FONCTIONNE REELLEMENT COMME UNE ROUTINE
         IF          D'INTERRUPTION...
XEIF%:   VAL         ENDIF
         CP          VAR+CARALT      < NE SERAIT-IL PAS LE 'CARALT' ???
         JNE         E806            < NON, MAIS SI OUI, ETANT HORS
                                     < ECHANGE, IL FAUT FAIRE APPEL A
                                     < LA SURVEILLANCE...
E805X:   EQU         $
<
< CAS OU IL N'Y A PAS D'ECHANGE EN COURS :
<        1- SOIT RIEN N'EST EN COURS REELLEMENT,
<        2- SOIT LA DEMANDE DE SURVEILLANCE EST EN FILE
<        DU HANDLER DE SURVEILLANCE, ET N'A
<        PAS ENCORE ETE TRAITEE.
<
         LAD         VAR+SURVIS
         LR          A,W             < (W)=@DEMANDE DE SURVEILLANCE.
         LA          NSPTYP
         PSR         A               < 'A' CONTIENT LE 'NSPTYP'
         LAD         SPHEX
         BSR         ARLSE
         PLR         A               < RECUPERATION DU 'NSPTYP'
         TBT         ENFILE          < LA DEMANDE DE SURVEILLANCE EST-
                                     < ELLE DEJA EN FILE...
         JC          E805            < OUI, IL VAUT DONC MIEUX EVITER
                                     < DE L'Y REMETTRE
         BSR         ACHAND          < ENVOI DE LA DEMANDE DE
                                     < SURVEILLANCE.
<
< ACTION SUR LE HANDLER :
<
E805:    EQU         $
         BSR         ABETA2          < (A)=BETA(SIT(VISU)),
                                     <     A NOTER QUE VUES LES PRIORITES RESPEC
                                     <     TIVES DU MULTIPLEXEUR (SOUS LEQUEL
                                     <     S'EXECUTE 'ITVIS') ET DES VISUS, IL E
                                     <     INUTLE DE MASQUER LES INTERRUPTIONS..
         IF          XXSIT0-K,,XEIF%,
         IF          ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JAG         E806Y           < LE 'SIT' EST DEJA LARGEMENT PASSANT,
                                     < INUTILE D'EN RAJOUTER ; CE TEST A ETE
                                     < RAJOUTE POUR LA RAISON SUIVANTE :
                                     < 1 - UN HANDLER VISU EST EN SORTIE ;
                                     < 2 - LES CARACTERES EMIS PROVOQUENT UNE
                                     < REPONSE DE LA "VISU" (C'EST LE CAS DU
                                     < DISQUE VIDEO...) ;
                                     < 3 - CES CARACTERES RECUS (MIS DANS LE
                                     < BUFFER D'ANTICIPATION) NE SONT PAS LUS
                                     < PAR UN PROGRAMME ;
                                     < 4 - ETANT DONNE QU'IL Y A UNE ECHANGE EN
                                     < COURS (SORTIE) SUR CETTE VISU, CHAQUE
                                     < APPEL A 'ITVIS' PROVOQUE UN PASSAGE DE
                                     < REVEIL ICI ;
                                     < 5 - DONC POUR CHAQUE CARACTERE EMIS (1
                                     < INTERRUPTION 'IN'), ON PEUT RECEVOIR
                                     < PLUSIEURS CARACTERES (PLUSIEURS INTERRUP-
                                     < TIONS 'OUT') ;
                                     < 6 - SI LA DUREE DE LA RECEPTION DES
                                     < CARACTERES EST SUPERIEURE A LA DUREE DU
                                     < CARACTERE EMIS (CE QUI EST LE CAS GENERAL
                                     < ...), IL Y A DONC UN EXCEDENT D'INTER-
                                     < RUPTIONS, ET DONC SATURATION TOT OU TARD
                                     < DU 'SIT'...
                                     < 7 - OUF...
         BSR         ARVHDL          < REVEIL DU HANDLER DE LA VISU CONCERNEE.
E806Y:   EQU         $
<
< SORTIE DE 'ITVIS' :
<
E806X:   EQU         $               < SORTIE SUR SYSER...
         PLR         A
         RSR
E806:    EQU         $
         BSR         ASMIT           < COMMENT SONT LES INTERRUPTIONS ???
         JAE         E805XE          < DEMASQUEES : IL FAUT DONC FAIRE LE
                                     < 'RLSE' SUR LE 'SPHEX' DE LA VISU...
         LA          SPHEX           < MASQUEES : ON N'A DONC PAS FAIT LE
                                     < 'RQST'...
         BSR         ABETA           < VALIDONS LE BETA(SPHEX) :
         CPI         SPHEX0          < ALORS ???
         JE          E805XF          < OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT MALGRE LES
<                    PRIORITES RELATIVES DES VISUS
<                    ET DE L'HORLOGE ON PEUT EN ETRE LA !!!
<
E805XF:  EQU         $
         JMP         E805XG          < ET ON SAUTE LE 'RLSE' SUR 'SPHEX'...
E805XE:  EQU         $
         LAD         SPHEX
         BSR         ARLSE           <<<< FIN DE PHASE CRITIQUE AVEC CHAND
E805XG:  EQU         $
         JMP         E805
         PAGE
<
<
<        A T T E N T E   D E S   P S E U D O S - I T   V I S U S  :
<
<
<        FONCTION :
<                      CETTE ROUTINE ATTEND POUR CHAQUE VISU, LES
<                    PSEUDO-IT ENVOYEES PAR LE DISPATCHER.
<                    LORSQU'ELLE L'A RECUE, ELLE LIT LE MOT D'ETAT
<                    DE VOIE (MEV), ; SI UN CARACTERE EST VALIDE EN ENTREE
<                    ELLE LE LIT D'UNE PART POUR DESOCCUPER LA VOIE EN ENTREE
<                    ET D'AUTRE PART PARCEQUE CE CARACTERE PEUT ETRE
<                    UN CARACTERE DE SURVEILLANCE. ESUITE ELLE TESTE LE BIT
<                    LE BIT DONT LE NUMERO EST DANS B. SI L'IT ARRIVEE
<                    N'EST PAS CELLE QU'ON ATTENDAIT, ON SE REMET EN ATTENTE.
<
<
<        ARGUMENTS :
<                    (L)=ADRESSE DE LA 'DCTVIS',
<                    (B)=NUMERO DU BIT A TESTER DANS LE MOT D'ETAT :
<                                    =14 ('ETANXT') : VISU EN LECTURE,
<                                    =08 ('ETARIL') : VISU EN ECRITURE.
<
<
<        RESULTAT :
<                    (DCARLU)=LE CARACTERE EN ATTENTE LE PLUS
<                             PRIORITAIRE QU'IL SOIT DEMANDE
<                             OU PAS, ET 'FFFF SI CELUI-CI
<                             N'EXISTE PAS...
<                    (A)=(DCARLU),
<                    LES INDICATEURS SONT POSITIONNES DE TELLE
<                    FACON QUE L'ON PUISSE SAVOIR SI 'DCARLU'
<                    ETAIT UN CARACTERE ANTICIPE OU PAS :
<                                    # : ANTICIPE ('JNE'),
<                                    = : NON ANTICIPE ('JE').
<
<
WITVI:   EQU         $
         STZ         VAR+DCARLU
         DC          VAR+DCARLU      < MISE A -1 DE DCARLU, POUR
                                     < PERMETTRE UN TEST VALIDE AU
                                     < RETOUR (EVENTUELLEMENT)
                                     < SUR SA VALEUR.
         LA          VAR+KCWIO       < (A)=COMPTEUR DE CARACTERES CONTENUS DANS
                                     <     LE BUFFER EN ANNEAU AVANT...
         PSR         A,X
         LR          B,X             < LE RANG DU BIT A TESTER EST MIS DANS
                                     < DANS X.
         BSR         ASMMK           < MASQUAGE POUR ACCEDER A 'SIT' :
         BSR         ABETA2          < RENVOIE : (A)=BETA(SIT(VISU)).
         JAG         WITVI1          < IL EST PASSANT, ON PEUT Y ALLER...
         LR          B,A             < IL EST BLOQUANT, MAIS
         CPI         ETANXT          < EST-CE UNE ENTREE ???
         JNE         WITVI1          < NON, ALLONS SE BLOQUER...
         CPZ         VAR+KCWIO       < OUI, ALORS Y-A-T'IL DES CARACTERES DANS
                                     < LE BUFFER EN ANNEAU ???
         JNE         WITVI3          < OUI, DONC ON NE SE BLOQUE PAS...
         LA          ARGDEM+ETADEM   < NON, ALORS QUI EST LE DEMANDEUR :
         CPI         NSPSUR          < NE SERAIT-CE PAS LA SURVEILLANCE ???
         JNE         WITVI4          < NON, OUF...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT 'ITVIS' APPELEE
<                    PAR 'HDLMUL' A PU ENVOYER UNE DEMANDE
<                    DE SURVEILLANCE ALORS QUE LE BUFFER
<                    DES CARACTERES 'IN' EST VIDE !!!
<                      CELA PEUT SE PASSER DANS LA SITUA-
<                    TION SUIVANTE :
<                    1 - ON EST SUR 'VIX',
<                    2 - SUR 'VIY', UN UTILISATEUR EST EN
<                    TRAIN DE SE LOGGER, CE QUI SIGNIFIE
<                    QUE 'MUL' EST ACTIVE POUR LUI ET EST
<                    EN TRAIN DE REFERENCER 'JE', CE QUI
<                    EST UNE OPERATION DE LONGUE DUREE,
<                    AVEC L'INITIALISATION DE L'ESPACE
<                    MEMOIRE ET DE SWAPPING...
<                    3 - SUR 'VIX', ON EMET UN ALT-MODE
<                    HORS-ECHANGE, QUI PROVOQUE DONC UNE
<                    DEMANDE A 'SUR' QUI NE PEUT DONC LA
<                    SATISFAIRE TOUT DE SUITE. ALORS QUE
<                    CETTE DEMANDE DE 'SUR' EST TOUJOURS EN
<                    ATTENTE, 'VIX' RECOIT UNE DEMANDE DE
<                    SORTIE, QUI EST SAITISFAITE, ET QUI
<                    PROVOQUE LA PRISE EN COMPTE DU ALT-
<                    MODE ANTERIEUR.
<                    4 - ENFIN, 'SUR' PREND EN COMPTE LA
<                    DEMANDE RELATIVE AU ALT-MODE HORS-
<                    ECHANGE DE 'VIX', ET ENVOIE UNE DEMANDE
<                    DE LECTURE SUR 'VIX', MAIS IL EST TROP
<                    TARD !!!
<
         LA          VAR+ICWIN       < NON, (A)=INDEX D'INSERTION...
         ADRI        I,A             < PROGRESSION DE L'INDEX,
         CPI         XXVNCW          < DEBORDE-T'IL ???
         JL          WITVI5          < NON...
         NTRN
         LAI         XXVIN+I/XXVNCW(K=FCREST < OUI, ON LE REINITIALISE...
         TRN
WITVI5:  EQU         $
         LR          A,X             < (X)=INDEX D'INSERTION...
TROTAR:: VAL         KNUL            < CARACTERE RENVOYE A LA SURVEILLANCE
                                     < LORSQUE SA DEMANDE ARRIVE TROP TARD !!!
XWOR%1:  VAL         COSBT?BITPAR=FMASK(K?TROTAR=FCINST
         LAI         XWOR%1          < (A)=CARACTERE DISANT SI CELA EST NECES-
                                     <     A 'HDLSUR' QUE C'EST TROP TARD...
         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.
         JMP         WITVI3          < ET ON FAIT COMME S'IL Y AVAIT EU
                                     < QUELQUE CHOSE DANS LE BUFFER CIRCULAIRE..
WITVI4:  EQU         $
WITVI1:  EQU         $
<
< ATTENTE DE L'INTERRUPTION : ON
< A DANS LE REGISTRE 'X' SOIT LE
< NUMERO DU BIT 'ETANXT', SOIT LE
< NUMERO DU BIT 'ETARIL' SUIVANT
< L'INTERRUPTION QUI EST ATTENDUE ;
< ON FAIT UN 'EOR' PENDANT TOUTE
< LA DUREE DU 'RQST SIT', AFIN QUE
< LES PROGRAMMES 'MASK' ET 'TASK'
< PUISSENT IDENTIFIER AVEC UNE
< RELATIVE CERTITUDE QUE CET 'HDLVIS'
< QUI LES INTERESSE ATTEND BIEN UNE
< INTERRUPTION 'IN', AFIN QU'IL N'Y
< AIT PAS DE CONFUSION AVEC LES
< INTERRUPTIONS 'OUT' D'ECHO DES
< CARACTERES DONT ON SIMULE L'ENTREE...
<
XWOR%1:  VAL         MOCG=K
XXMASK:: VAL         XXK2>XWOR%1?XXK3
         LRM         A
         WORD        XXMASK          < MASQUE SUBTIL...
         EORR        A,X             < ON ESPERE QUE CETTE VALEUR DE 'X'
                                     < N'EXISTE NULLE PART AILLEURS DANS
                                     < 'HDLVIS'...
         RQST        SIT             < ATTENTE PSEUDO-IT...
<
< APRES L'INTERRUPTION (VRAIE OU FAUSSE) :
<
         EORR        A,X             < ON RESTAURE 'X'...
         BSR         ATHDS           < Y-A-T'IL EU DEFAUT SECTEUR ???
         JNC         WITVI2          < NON, UNE VRAIE INTERRUPTION...
         LA          VAR+SAVETA      < RECUPERATION DU MOT D'ETAT COURANT,
         SBT         ETARIL          < ON FAIT MONTER LE BIT 'VOIE LIBRE
                                     < EN SORTIE'...
         STA         VAR+SAVETA      < ET COMME CA SI ON ATTENDAIT UNE
                                     < INTERRUPTION DE SORTIE, C'EST BON...
WITVI2:  EQU         $
<
< UNE PSEUDO-IT EST MONTEE :
<
         BSR         ASMMK           <<<< MASQUAGE GENERAL DES IT
WITVI3:  EQU         $               < CAS D'UNE ENTREE ALORS QUE DES CARACTERES
                                     < SONT DANS LE BUFFER EN ANNEAU...
         LA          VAR+SAVETA      < RECUPERATION MOT D'ETAT VISU
         STZ         VAR+SAVETA      < ON NOTERA AVEC INTERET QUE CETTE
                                     < REINITIALISATION DU MOT D'ETAT DE
                                     < LA VISU N'A LIEU QU'APRES LE MASQUAGE
                                     < DES INTERRUPTIONS CE QUI PERMET A
                                     < 'HDLMUL' DE FAIRE UN CUMUL A PRIORI DES
                                     < MOTS D'ETAT SUCCESSIFS...
         CPZ         ETAT0           < LA PSEUDO-IT QUI EST MONTEE
                                     < ETAIT-ELLE EN FAIT UN TIMED
                                     < OUT SUR CETTE VISU ???
         IF          ETADEF-L,,XEIF%,
         IF          ATTENTION : CE TEST EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JGE         Z1800           < ETAT>=K : IL S'AGIT D'UNE VRAIE
                                     < PSEUDO INTERRUPTION SUR CETTE
                                     < VISU.
<
< CAS DES FAUSSES PSEUDO-INTERRUPTIONS :
<
         LA          ETAT0           < ACCES A ETAT POUR IDENTIFICATION
                                     < DE LA NATURE DE CETTE FAUSSE
                                     < PSEUDO-INTERRUPTION.
ETATOU:: VAL         -'80            < ETAT DE TIME OUT...
         CPI         ETATOU          < EST-CE UN TIMED-OUT ??? (VOIR
                                     < HDLHOR POUR CELA...)
         JG          Z892X1          < -'80<ETAT<0 : IL S'AGIT D'UN
                                     < TIMED-OUT, ON FAIT ALORS COMME
                                     < SI UN ALT-MODE AVAIT ETE RECU.
         SLLS        MOCG=K          < SINON, L'OCTET DROIT DE ETAT
                                     < (ETAT1) CONTIENT UN CARACTERE
                                     < TRANSMIS PAR UN AUTRE HANDLER,
                                     < QUI A SIMULE CETTE PSEUDO-IN-
                                     < TERRUPTION PAR 'RLSE SIT' SUR
                                     < CETTE VISU.
XWOR%1:  VAL         K
XWOR%1:  VAL         COSBT?ETANXT=FMASK(K?XWOR%1=FCINST
         IF          MOCG(XWOR%1-K,,XEIF%,
         IF          ATTENTION : IL Y A RECOUVREMENT ENTRE LE CARACTERE QUE
         IF          L'ON SAUVEGARDE ET 'ETANXT' !!!
XEIF%:   VAL         ENDIF
         ORI         XWOR%1          < LE CARACTERE TRANSMIS EST CADRE
                                     < A GAUCHE POUR SAUVEGARDE, ET
                                     < ON POSITIONNE ICI LE BIT 'ETANXT' (14),
         STA         ETAT0           < POSITIONNEMENT DU BIT 'ETANXT' (14)
                                     < DE ETAT, POUR FAIRE CROIRE QUE
                                     < L'EVENEMENT ATTENDU ETAIT
                                     < ARRIVE (IN).
         SLRS        MOCG=K          < (A)=OCTET1(ETAT)=CARACTERE TRANSMIS.
         JMP         Z1301           < PUIS, CE CARACTERE EST PRIS
                                     < COMME UN CARACTERE NORMALEMENT
                                     < RECU PAR LE COUPLEUR.
<
< CAS D'UNE VRAIE PSEUDO-IT :
<
Z1800:   EQU         $
         STA         ETAT0           < QUE L'ON SAUVEGARDE DANS ETAT0.
<
< Y-A-T'IL QUELQUE CHSOE DANS LE BUFFER EN ANNEAU ???
<
         CPZ         VAR+KCWIO
         JE          E60             < NON, IL N'Y A RIEN DEDANS...
<
< CAS D'UNE INFO VALIDE EN ENTREE :
<
         SBT         ETANXT          < AU CAS OU CE SERAIT UN CARACTERE DEPUIS
         STA         ETAT0           < LONGTEMPS EN ATTENTE, ON SIMULE UN
                                     < INTERRUPTION D'ENTREE...
         TBT         L,X             < L'EVENEMENT ATTENDU EST-IL ARRIVE ???
         JNC         E60             < NON ; CET EVENEMENT ATTENDU NE PEUT
                                     < ETRE UNE ENTREE, PUISQU'ON VIENT DE
                                     < FORCER 'ETANXT', DONC SI ON ATTEND
                                     < UNE ENTREE, CE TEST EST NEGATIF ;
                                     < DONC SI ON VA EN 'E60' C'EST QU'ON
                                     < ATTENDAIT UNE SORTIE, ET QUE DES CARAC-
                                     < TERES ATTENDENT ; ON ATTENDRA POUR LES
                                     < TESTER QUE L'EVENEMENT DE TYPE 'ETARIL'
                                     < APPARAISSE...
         LR          X,A             < (A)=NUMERO DE L'EVENEMENT ATTENDU...
         CPI         ETANXT          < EST-CE UNE ENTREE ???
         PSR         X
         LX          VAR+ICWOUT      < (X)=INDEX D'EXTRACTION DU BUFFER EN
                                     < ANNEAU ; ON NOTERA QUE LES INTERRUP-
                                     < TIONS SONT MASQUEES, ET QU'IL N'Y
                                     < A DONC PAS DE PROBLEMES D'ACCES AUX
                                     < INDEX ET AU BUFFER !!!
         JE          Z1800B          < OK, ON ATTEND UNE ENTREE ('ETANXT').
         LBY         &VAR+ALVCW      < (A)=CARACTERE EN ENTREE LE PLUS ANCIEN.
         RBT         BITPAR          < NON, PAS D'ENTREE... ALORS ENLEVONS
                                     < LE BIT DE PARITE A PRIORI...
         CP          VAR+CARALT      < EST-CE 'CARALT' ???
         JE          Z1800B          < ON N'ATTEND PAS D'ENTREE, MAIS C'EST
                                     < 'CARALT', ON LE PREND EN COMPTE...
         JAE         Z1800B          < ON N'ATTEND PAS D'ENTREE, MAIS C'EST
                                     < LE 'BREAK', ON LE PREND AUSSI...
         CPI         KDC3            < EST-CE DE MEME UN 'CTRL-X-OFF' ???
         JE          Z1800B          < OUI, ON LE PREND AUSSI...
         PLR         X               < ON N'ATTEND PAS D'ENTREE, ET CE N'EST
         JMP         E60             < PAS 'CARALT', ALORS ON ARRETE...
Z1800B:  EQU         $
         DC          VAR+KCWIO       < ET UN CARACTERE DE MOINS...
         JGE         Z1800C          < OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ALLER VOIR LES INDICATEURS DE CONTROLE
<                    DU BUFFER EN ANNEAU...
<
Z1800C:  EQU         $
         LBY         &VAR+ALVCW      < RESTAURE (A)=CARACTERE 'IN' COURANT...
         XR          A,X
         ADRI        I,A             < PROGRESSION DE L'INDEX D'EXTRACTION,
         CPI         XXVNCW          < DEBORDE-T'IL ???
         JL          Z1800X          < NON, OK...
         LAI         XXVOUT          < OUI, ON LE REINITIALISE...
Z1800X:  EQU         $
         XR          A,X             < (A)=CARACTERE EXTRAIT, ET
         STX         VAR+ICWOUT      < MISE A JOUR DE L'INDEX D'EXTRACTION.
         PLR         X
         JAE         Z1301           < SEUL LE CARACTERE 'BREAK' EST
                                     < LAISSE TEL QU'IL EST ; EN EFFET,
                                     < CE N'EST PAS UN VRAI CARACTERE,
                                     < ET LE CODE RECU EST TOUJOURS '00
                                     < QUELQUE SOIENT LES STRAPS !!!!
         IBT         BITPAR          < INVERSION DU BIT0 DU CARACTERE ;
                                     < SI LE CARACTERE VIENT D'UNE VRAIE
                                     < VISU, ON AVAIT BIT0=1, ET ON
                                     < FAIT DONC AINSI : BIT0=K ;
                                     < DANS LE CAS OU LE CARACTERE VIENT
                                     < D'UNE LIGNE BOUCLEE (PAR
                                     < EXEMPLE VIX CONNECTEE A VIY),
                                     < LES CARACTERES RECUS PAR
                                     < HDLVIX SONT CEUX EMIS PAR
                                     < HDLVIY ; EN PARTICULIER LORS
                                     < DE L'EMISSION GRAPHIQUE, LE
                                     < BIT0 EST TOUJOURS A 0 ; ON LE
                                     < FAIT DONC PASSER AINSI A 1, CE
                                     < QUI PERMET DE SHUNTER LES TESTS
                                     < QUI VONT SUIVRE SUR LE ALT-MODE,
                                     < LE RUB-OUT...
                                     < DONC :
                                     < BIT0=K : VISU REELLE,
                                     < BIT0=1 : LIGNE BOUCLEE,
                                     < SAUF EXCEPTIONS BIEN ENTENDUS ;
                                     < EN EFFET UNE LIGNE BOUCLEE EMET
                                     < CE QUI SE TROUVE DANS LE BUFFER,
                                     < ET SI LES CARACTERES QUI S'Y
                                     < TROUVENT ONT DEJA LEUR BIT0
                                     < A 1, IL PASSE A 0, ET
                                     < RESSEMBLENT ALORS A DES CARACTERES
                                     < D'UNE VISU REELLE...
Z1301:   EQU         $               < CAS DU 'BREAK'.
<
< TEST PRELIMINAIRE DU CARACTERE D'ABORT :
<
         CP          VAR+CARALT      < EST-CE LE CARACTERE COURANT
                                     < D'ABORT ???
         JE          Z892            < OUI, ALLONS LE REMPLACER
                                     < PAR UN ALT-MODE SIMULE.
         CPI         KALTM           < SI CE N'EST PAS LE CARACTERE
                                     < COURANT D'ABORT, EST-CE LE
                                     < CODE DU ALT-MODE ???
         JNE         Z894            < NON, C'EST DONC UN CARACTERE
                                     < STANDARD...
<
< CAS D'UN ALT-MODE QUI N'EST PAS
< CARACTERE COURANT D'ABORT :
<
         LAI         KINEX           < CELUI-CI EST REMPLACE PAR
                                     < UN CODE INEXISTANT.
                                     < (IL EST DONC IGNORE !!!).
<
< TRANSMISSION DU CARACTERE ENTRE OU SIMULE :
<
Z894:    EQU         $
         STA         VAR+DCARLU      < LE CARACTERE ENTRE OU TRANSCODE,
                                     < EST SAUVEGARDE DANS DCARLU, IL
                                     < PEUT TOUJOURS SERVIR...
<
< DEMASQUAGE DES INTERRUPTIONS :
<
E60:     EQU         $
         BSR         ASMDK           <<<< DEMASQUAGE GENERAL DES IT
<
< TEST SUR UNE DEMANDE DE SURVEILLANCE
<
         LB          ARGDEM+ETADEM   < (B)=NSP DU DEMANDEUR DE L'E/S-VISU.
         ADRI        -NSPSUR,B
         CPZR        B               < EST-CE LE HANDLER DE SURVEILLANCE
         JE          E801            < OUI, IL NE FAUT DONC SURTOUT
                                     < PAS BOUCLER.
<
< TEST DU BIT DEMANDE (X) :
<
<        BIT 14 : INFORMATION VALIDE EN ENTREE
<        BIT 8  : VOIE LIBRE EN SORTIE
<
         LB          ETAT0           < RESTAURATION DE L'ETAT DANS B.
                                     < (OU D'UN ALT-MODE EN OCTET0
                                     < DE L'ETAT0)
         TBT         NBITMO+L,X      < TEST, ENFIN...
         JNC         WITVI1          < ET NON, TOUT EST A RECOMMENCER...
E802:    EQU         $
         LR          X,B             < RESTAURE B...
         PLR         A,X
         CP          VAR+KCWIO       < LE NOMBRE DE CARACTERES EN ATTENTE DANS
                                     < LE BUFFER EN ANNEAU APRES EGALE-T'IL
                                     < CELUI D'AVANT :
                                     < = : 'DCARLU' N'EST PAS ANTICIPE,
                                     < # : 'DCARLU' EST ANTICIPE ;
                                     < CETTE METHODE N'EST PAS INFAILLIBLE, MAIS
                                     < AU MOINS, ELLE EST SIMPLE...
         LA          VAR+DCARLU      < (A)=LE CARACTERE ENTRE, OU 'FFFF S'IL
                                     < N'EXISTE PAS QUELQUE SOIT LE MODE
                                     < D'APPEL...
         RSR                         < C'EST FINI...
<
<        C A S   D U   T I M E - O U T  :
<
Z892X1:  EQU         $
XWOR%1:  VAL         COSBT?ETARIL=FMASK(K=FCINST
XWOR%1:  VAL         COSBT?ETANXT=FMASK(K?XWOR%1=FCINST
XWOR%2:  VAL         COSBT?ETADOG=FMASK(K=FCINST
         LRM         A
         WORD        XWOR%1?XWOR%2   < ON MEMORISE AINSI DE PLUS LE TIME-OUT.
         JMP         Z892X2          < VERS LA MISE A JOUR DE 'ETAT0'...
<
<        C A S   D U   C A R A C T E R E   D ' A B O R T   C O U R A N T  :
<
Z892:    EQU         $
         LAI         XWOR%1
Z892X2:  EQU         $
         STA         ETAT0           < ON FAIT AINSI CROIRE AUX GENS QUE TOUT
                                     < EST ARRIVE...
         LA          IOID            < MAIS,
         TBT         IOIDX           < UN ESCLAVE EST-IL DEJA ATTACHE A
                                     < CETTE VISU...
         JNC         Z892X3          < NON, IL N'Y A PAS ENCORE D'ESCLAVE ATTA-
                                     < CHE A CETTE VISU, ON EN EST DONC AU LOGIN
                                     < IL NE FAUT DONC PAS PERDRE LES EVENTUELS
                                     < CARACTERES ANTICIPES...
         PSR         X
         SVC         SVCM10          < DANS LE CAS DE 'CARALT', ON ANNULE TOUS
                                     < LES CARACTERES EN ATTENTE, EN REINITIA-
                                     < LISANT 'KCWIO'...
                                     < ON REINITIALISE LES INDEX D'ENTREE
                                     < ET DE SORTIE POUR PARER UN CAS VICIEUX :
                                     < SUPPOSONS QUE L'ON SOIT SOUS LE CURSEUR
                                     < GRAPHIQUE, ET QUE L'ON FRAPPE UN
                                     < ALT-MODE : SI CELUI-CI EST TRAITE PAR
                                     < 'WITVI' AVANT QUE N'ARRIVE LE PREMIER
                                     < OCTET DE COORDONNEES, PAS DE PROBLEME,
                                     < MAIS DANS LE CAS CONTRAIRE, LES INDEX
                                     < ONT PROGRESSE POUR LE PRENDRE EN COMPTE
                                     < ET LE RAZ DE 'KCWIO' NE SUFFIT PAS !!!
         PLR         X
Z892X3:  EQU         $
         LAI         KALTM           < LE CODE DU CARACTERE D'ABORT
                                     < COURANT EST REMPLACE PAR LE
                                     < CODE DU 'ALT-MODE'.
         STA         VAR+IALTM       < ET SAUVEGARDE DANS IALTM,
                                     < ON RECUPERE AINSI TOUS LES
                                     < ABORTS, MEME LES PLUS VICIEUX !!!
         JMP         Z894            < VERS LA TRANSMISSION DU
                                     < CODE DU 'ALT-MODE'...
<
<        E / S   D E M A N D E E   P A R   L E
<        H A N D L E R   D E   S U R V E I L L A N C E  :
<
E801:    EQU         $
         LA          VAR+DCARLU      < TESTONS SI UN CARACTERE A ETE
                                     < LU, ET SI OUI QUEL EST-IL...
<
<        PLUSIEURS CAS SE PRESENTENT :
<
<        1-UNE IT FANTOME EST APPARUE (PARASITE) ;
<        ET EN GENERAL IL S'AGIT D'UNE IT DE SORTIE,
<        EN FAIT DANS TOUS LES CAS, IL FAUT FAIRE COMME
<        SU UNE IT D'ENTREE ETAIT APPARUE, ET
<        RENVOYER UN CARACTERE INEXISTANT ('FF), POUR
<        NE PAS BLOQUER LA SURVEILLANCE, PAR
<        L'INTERMEDIAIRE DU HANDLER-VISU.
<        2- L'ESCLAVE A REELLEMENT FRAPPE UN CARACTERE
<        SUR SA VISU. DANS CE CAS IL NE FAUT LAISSER
<        PASSER QUE LE CARACTERE 'ALT-MODE', ET
<        FILTRER A PRIORI LES AUTRES, ET SURTOUT
<        'RUB-OUT' ET 'BREAK', QUI AURAIENT POUR
<        EFFET DE REBLOQUER LE HANDLER-VISU, ET
<        LA SURVEILLANCE PAR LA MEME OCCASION.
<
         CPI         KALTM           < EST-CE 'ALT-MODE'...
         JE          E802            < OK, C'EST BON, ON S'EN VA...
         LAI         KINEX           < NON, IL S'AGIT SOIT D'UNE IT
                                     < PARASITE, SOIT D'UN AUTRE CA-
                                     < RACTERE, RENVOYONS 'FF.
         JMP         E802            < ET L'ON SORT COMME SI UNE IT
                                     < D'ENTREE ETAIT APPARUE DANS
                                     < TOUS LES CAS.
         PAGE
<
<
<        D C T   M U L T I P L E X E U R :
<
<
         CALL        #SISP CMS5 CHECK#
         CALL        #SISP CMS5 DOL1#
DCTMUL:  EQU         $
PSTMUL:  WORD        K;K;K;K;COM+DEPCS;DCTMUL;XXDISW;PILMUL;DISPAT;SMST;SO;SE
       #@ASCI        " MUL"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR
         WORD        FILTRS          < S-FILTRE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC
         DZS         LSEM
         WORD        NIL             < TETE (INUTILISEE EN MODE DISPATCH)
         WORD        NIL             < QUEUE (INUTILISEE EN MODE DISPACTH)
         WORD        XXCHV0          < SCHVID (INUTILISEE EN MODE DISPATCH)
         DZS         LSEM
         WORD        XXSIT0          < SIT.
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        DISMUL          < ADRESSE DE LA ROUTINE SPECIFIQUE
                                     < DU MULTIPLEXEUR ET CHARGEE DE
                                     < DISPATCHER LES IT, VERS LES
                                     < DIFFERENTES VISUS.
                                     < A T T E N T I O N  : RAPPELONS QUE
                                     < POUR LES 'DISPAT', LA ROUTINE SPECI-
                                     < FIQUE 'ES' EST APPELEE SUITE A UNE
                                     < ACTION SUR 'SIT' (ICI, PAR UNE INTER-
                                     < RUPTION), ET NON PAS SUITE A UNE DEMANDE
                                     < DE SERVICE !!!
         WORD        ITMUL           < ROUTINE SPECIFIQUE DU MULTIPLEXEUR
                                     < ET APPELEE PAR IT7.
         WORD        K;K             < ETAT.
         WORD        XBITS0          < BITSEM.
         WORD        XXNTRY;TRYVID   < NTRIES & FRETRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XDDCTF
         WORD        XFONBA
<
< DEFINITION DE LA ZONE VARIABLE PROPRE AU MULTIPLEXEUR :
<
VARMUL:  EQU         $
         IF          VARMUL-DCTMUL-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
XWOR%1:  VAL         K               < INITIALISATION DU CUMUL.
XWOR%2:  VAL         -S              < POUR FAIRE UN DECALAGE A DROITE.
XWOR%3:  VAL         NSPVIN-NSPVI0+Z
         IF          XWOR%3-NBITMO,XEIF%,XEIF%,
         IF          ATTENTION : LA LISTE DES VISUS NE TIENT PAS SUR UN MOT !!!
XEIF%:   VAL         ENDIF
         DO          XWOR%3
XWOR%1:  VAL         XWOR%1>XWOR%2?M8000
WINTER:  EQU         ZERO+XWOR%1     < LISTE DES VISUS ACCESSIBLES...
         WORD        XWOR%1
FANTOM:: VAL         $-D-VARMUL      < DONNE LA LISTE DES VOIES DONT LES
                                     < INTERRUPTIONS SONT A PRENDRE EN
                                     < COMPTE (1) ; LES AUTRES (K) SONT
                                     < IGNOREES, MAIS QUAND MEME DESACTIVEES.
                                     < LE BIT DE RANG 'J' CORRESPOND A LA
                                     < VOIE 'J', SOIT A LA VISU 'J+1'.
         WORD        VINTER
INTER::  VAL         $-D-VARMUL      < ACCES A LA LISTE DES VISUS ACCESSIBLES
                                     < EN ENTREE...
         WORD        VIMUL
AVIMUL:: VAL         $-D-VARMUL      < SOUS-PROGRAMME D'ACCES A LA TABLE DES
                                     < CORRESPONDANCES NIVEAU IT --> 'DCTVIS'.
<
< PILE DU MULTIPLEXEUR :
<
         CALL        #SISP CMS5 DOL2#
PILMUL:  EQU         $-DEPILE        < EMPLACEMENT VARIABLE DANS LA DCT.
XWPILE:  VAL         LPILED+15+8
         CALL        #SISP CMS5 GENPIL2#
         CALL        #SISP CMS5 CHECK#
         PAGE
<
<
<        D I S P A T C H E R   M U L T I P L E X E U R  :
<
<
<        FONCTION :
<                      CETTE TACHE, DU TYPE 'DISPAT',
<                    EST REVEILLEE (VIA SON 'SIT') A
<                    CHAQUE FOIS QU'UNE INTERRUPTION
<                    SUR LES MULTIPLEXEURS ASYNCHRONES
<                    APPARAIT. ELLE DOIT ALORS IDENTIFIER
<                    LA OU LES VOIES APPELANTES, ET
<                    REVEILLER LE OU LES HANDLERS ASSO-
<                    CIES ; ON PEUT DONC DIRE QUE
<                    'HDLMUL' SIMULE POUR LES 'HDLVIS'
<                    DES INTERRUPTIONS VIRTUELLES...
<                      ENFIN, RAPPELONS QUE LES 'DISPAT'
<                    NE RECOIVENT PAS DE DEMANDES
<                    ARGUMENTS !!!
<
<
<        ARGUMENTS :
<                    (L)=ADRESSE DE LA 'DCTMUL'.
<
<
         USE         L,DCT0
DISMUL:  EQU         $
         BSR         ASMMK           < MASQUAGE DES INTERRUPTIONS.
         LA          ETAT0           < ACCES A LA LISTE DES IT EN ATTENTE :
         LBI         K               < PRUDENCE
         DBT                         < RECHERCHE D'UNE 'IT' A TRAITER...
         JC          DISMU1          < RIEN,CAS IT IN ET OUT SIMULTANEES
                                     < ALORS 2 IT,MAIS 1 SEUL BIT POUR
                                     < LES VISUS DANS ETAT
         RBT         L,X             < ON MEMORISE SON TRAITEMENT.
         STA         ETAT0
         BSR         ASMDK           < DEMASQUAGE DES INTERRUPTIONS...
         PSR         L               < SAVE ADRESSE(DCTMUL)
         BSR         VAR+AVIMUL      < (L)=ADRESSE(DCTVIX)
         BSR         ARIT
         PLR         L               < (L)=ADRESSE(DCTMUL)
DISMU2:  EQU         $
         RSR
DISMU1:  EQU         $
         BSR         ASMDK
         JMP         DISMU2
         PAGE
<
<
<        R O U T I N E   D E S   I T   M U L T I P L E X E U R :
<
<
<        ARGUMENTS :
<                    (B)=K SI IT NORMALE
<                       =1 SI IT EXCEPTION
<                    (X)=NUMERO DU SOUS-NIVEAU APPELANT
<
<
ITMUL:   EQU         $
         LR          X,A             < (A)=S/N APPELANT
XWOR%5:  VAL         NSNMX=K         < NSNMX=NOMBRE DE SOUS-NIVEAUX PAR 'MXR'.
         IF          BIT>XWOR%5-NSNMX,,XEIF%,
         IF          ATTENTION : 'NSNMX' N'EST PAS UNE PUISSANCE DE 2 !!!
XEIF%:   VAL         ENDIF
         TBT         NBITMO-B-XWOR%5 < SONT-CE LES VISUS 1 A 4 (BIT12=K),
                                     < OU LES VISUS 5 A 8 (BIT12=1) ???
XWOR%5:  VAL         NSNMX2=K        < NSNMX2=NOMBRE DE SOUS-NIVEAUX NORMAUX
                                     < OU D'EXCEPTION PAR 'MXR'.
         IF          BIT>XWOR%5-NSNMX2,,XEIF%,
         IF          ATTENTION : 'NSNMX2' N'EST PAS UNE PUISSANCE DE 2 !!!
XEIF%:   VAL         ENDIF
         ANDI        BIT>XWOR%5-N    < SUPPRESSION DU GROUPE (BIT12), ET DE
                                     < LA NATURE NORMALE/EXCEPTION DE
                                     < L'INTERRUPTION (BIT13).
         JNC         ITMUL2          < VISUS 1 A 4 (BIT13=K).
         SBT         NBITMO-B-XWOR%5 < VISUS 5 A 8 (BIT13=1).
ITMUL2:  EQU         $
         CPI         YTRANV          < VALIDATION DE LA VOIE...
         JL          ITMUL4          < OK, ELLE EXISTE...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
         JMP         ITMUL5          < ET ON SORT...
ITMUL4:  EQU         $
<
< ENTREE DU MOT D'ETAT :
<
         LY          &VAR+INTER      < (Y)=LISTE DES VISUS ACCESSIBLES EN ENTREE
         PSR         L
         LR          A,X             < (X)=NUMERO DE VOIE (K A 7).
         BSR         VAR+AVIMUL      < (L)=ADRESSE DCT VISU APPELANTE.
         SIO         VAR+ETAVI       < LECTURE MOT D'ETAT
         RBT         ETADEF          < RAZ BIT0(SOMME DES DEFAUTS)
                                     < A CAUSE DES FAUSSES PSEUDOS
                                     < INTERRUPTIONS (ETAT<0)
         TBT         ETARIL          < EST-CE UNE INTERRUPTION 'OUT' ???
         LB          VAR+SAVETA      < (B)=SAUVEGARDE DU CUMUL AVANT...
         ORR         A,B             < CUMUL DES MOTS D'ETAT SUCCESSIFS ; ON
                                     < NOTERA QUE 'ITVIS' REMET 'SAVETA'
                                     < A '0 APRES QUE LES INTERRUPTIONS AIENT
                                     < ETE MASQUEES. TOUTE CETTE USINE A GAZ
                                     < (...) POUR EVITER DES PROBLEMES DE
                                     < PERTE ET DE DOUBLEMENT DE ALT-MODES...
         STB         VAR+SAVETA      < QU'ON SAUVE DANS LA DCTVIX
         JNC         ITMUL3          < CE N'EST PAS UNE INTERRUPTION 'OUT'...
XWOR%9:  VAL         9
XWOR%1:  VAL         COSBT?XWOR%9=FMASK(K=FCINST
XWOR%1:  VAL         COSBT?COMINT=FMASK(K?XWOR%1=FCINST
         PSR         A               < SAUVEGARDE DU MOT D'ETAT NON CUMULE.
         LAI         XWOR%1          < C'EST UNE INTERRUPTION 'OUT', ALORS ON
         SIO         VAR+CDEVI       < DESARME LES INTERRUPTIONS 'OUT'...
         PLR         A               < (A)=MOT D'ETAT NON CUMULE...
ITMUL3:  EQU         $
         TBT         ETANXT          < LECTURE/ECRITURE ?
         JNC         ITMUL1          < ECRITURE...
<
< LECTURE D'UN CARACTERE :
<
         TBT         ETACAD          < Y-A-T'IL ERREUR DE CADENCE ???
         SIO         VAR+INVI        < LECTURE DU CARACTERE DANS 'A'.
         OR          VAR+VIPARI      < ON FORCE (SI 'VBITPA') OU BIEN ON LAISSE
                                     < INCHANGE (SI 'NBITPA') LE BIT DE PARITE.
         JC          ITMUL1          < IL Y A ERREUR DE CADENCE, C'EST
                                     < SUREMENT LA SUITE D'UN 'BREAK', ON
                                     < NE REPREND PAS DE CARACTERE...
<
< CODAGE MAGIQUE :
<
         IF          NMAGIC-K,,XEIF%,
         IF          ATTENTION : LA VALEUR DE 'NMAGIC' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         CPZ         VAR+VMAGIC      < Y-A-T'IL LIEU D'UTILISER LA MAGIE ???
         JE          ITMULJ          < NON...
         PSR         B               < SAUVEGARDE DU MOT D'ETAT CUMULE...
         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..
         PLR         B               < ET ENFIN, ON RESTAURE :
                                     < (B)=MOT D'ETAT CUMULE...
ITMULJ:  EQU         $
         XR          B,Y             < ACCES A LA LISTE DES VISUS ACCESSIBLES :
         TBT         NBITMO+L,X      < LA VOIE (X) EST UTILISABLE ???
         JC          ITMULF          < OUI...
         LAI         COSBT?BITPAR=FMASK(K?KINTER=FCINST
                                     < NON, ON SIMULE L'ENTREE D'UN CARACTERE
                                     < 'KINTER' QUI NE PEUT ETRE FRAPPE AU
                                     < CLAVIER, ET QUI NE PEUT REMPLACER
                                     < LE ALT-MODE PAR '1EX5...
ITMULF:  EQU         $
<
< MISE DANS LE BUFFER D'ANTICIPATION :
<
         XR          B,Y
         PSR         X
         LX          VAR+ICWOUT      < (X)=INDEX D'EXTRACTION A PRIORI,
                                     <     AU CAS OU CE SERAIT 'CARALT'...
         PSR         A               < SAUVEGARDE DU CARACTERE,
         RBT         BITPAR          < ET SUPPRESSION A PRIORI DU BIT
                                     < DE PARITE POUR TESTER 'CARALT'...
         JANE        ITMULA          < CE N'EST PAS LE 'BREAK'...
         CPZ         VAR+KCWIO       < Y-A-T'IL DES CARACTERES EN ATTENTE ???
         JE          ITMULB          < NON...
         LBY         &VAR+ALVCW      < OUI, (A)=CARACTERE DE TETE,
         RBT         BITPAR          < RAZ DU BIT DE PARITE A PRIORI...
         CP          VAR+CARALT      < EST-CE 'CARALT' ???
         JNE         ITMULD          < NON, 'BREAK' PRIS EN COMPTE.
         PLR         A               < OUI,
         JMP         ITMULC          < 'BREAK' IGNORE...
ITMULD:  EQU         $               < NON,
         STZ         VAR+KCWIO       < DANS LE CAS DU 'BREAK', ON SUPPRIME
                                     < TOUS LES CARACTERES EN ATTENTE, ET ON
                                     < FAIT UN PEU COMME SI UN 'ALT-MODE'
                                     < ETAIT LA...
ITMULB:  EQU         $
         PLR         A
         JMP         ITMUL6          < VERS LA TRANSMISSION DU 'BREAK'...
ITMULA:  EQU         $
         CP          VAR+CARALT      < EST-CE 'CARALT' ???
         JE          ITMULG          < OUI, ALLONS DONC VOIR S'IL Y A OU PAS
                                     < D'UTILISATEUR LOGUE...
ITMULH:  EQU         $               < POINT DE RETOUR AU CAS OU IL N'Y A PAS
                                     < D'UTILISATEUR LOGUE, 'WITVI' NE TOUCHERA
                                     < PAS AUX POINTEURS DU BUFFER D'ANTICIPA-
                                     < TION...
         PLR         A               < RESTAURE :
                                     < (A)=CARACTERE LU...
         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         ITMULE          < 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          ITMUL7          < NON...
         NTRN
         LAI         XXVIN+I/XXVNCW(K=FCREST < OUI, ON LE REINITIALISE...
         TRN
ITMUL7:  EQU         $
         XR          A,X             < (A)=CARACTERE LU,
ITMUL6:  EQU         $
         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.
ITMULC:  EQU         $               < 'CARALT' EN ATTENTE, 'BREAK' IGNORE...
         PLR         X
<
< SORTIE :
<
ITMUL1:  EQU         $
         PLR         L
         LA          ETAT0
         SBT         L,X             < MISE EN FILE DE L'IT EN ATTENTE.
         AND         VAR+FANTOM      < ELIMINATION EVENTUELLE DE CERTAINES VOIES
         STA         ETAT0
         BSR         ARVHDL          < REVEIL DU HANDLER MULTIPLEXEUR.
ITMUL5:  EQU         $
         RSR
<
< SORTIE POUR DEBORDEMENT DU BUFFER (LE CARACTERE
< N'EST DONC PAS UN ALT-MODE, NI UN BREAK) :
<
ITMULE:  EQU         $
         LA          VAR+SAVETA
         RBT         ETANXT          < ON SUPPRIME L'INTERUPION 'IN'
         STA         VAR+SAVETA      < BIEN ENTENDU...
         BSR         ATEC            < Y-A-T'IL UN ECHANGE EN COURS ???
         JNE         ITMULC          < OUI, IL FAUT DONC REVEILLER LES
                                     < HANDLERS 'MUL' ET 'VIS.'.
         PLR         X
         PLR         L
         JMP         ITMUL5          < NON, ON NE LES REVEILLE DONC PAS...
<
< CAS DU CARACTERE D'ABORT : IL
< FAUT TESTER L'ETAT "LOGUE"/
< "NON LOGUE" :
<
ITMULG:  EQU         $
         LA          IOID            < ON A RECU UN 'CARALT', MAIS
         TBT         IOIDX           < UN ESCLAVE EST-IL DEJA ATTACHE A
                                     < CETTE VISU...
         JNC         ITMULI          < NON, IL N'Y A PAS ENCORE D'ESCLAVE ATTA-
                                     < CHE A CETTE VISU, ON EN EST DONC AU LOGIN
                                     < IL FAUT DONC REINITIALISER LES POINTEURS
                                     < DU BUFFER D'ANTICIPATION, CAR 'WITVI' NE
                                     < LE FERA PAS DANS CE CAS LA...
         PLR         A               < OUI, IL Y A UN UTILISATEUR LOGUE, DONC
                                     < 'WITVI' SE CHARGERA DE REINITIALISER
                                     < LES POINTEURS DU BUFFER D'ANTICIPATION,
                                     < (A)=CARACTERE LU...
         JMP         ITMUL6          < ON FAIT AINSI EN SORTE QUE CE CARACTERE
                                     < LU SOIT LE PROCHAIN EXTRAIT EN ALLANT
                                     < LE RANGER A L'AIDE DE 'ICWOUT' ET NON
                                     < PAS DE 'ICWIN'...
ITMULI:  EQU         $               < CAS D'UN UTILISATEUR NON LOGUE ; CECI
                                     < EST DONC LE 'CARALT' DE LOGIN, IL FAUT
                                     < DONC "NETTOYER" LE BUFFER D'ANTICIPATION
                                     < EN JOUANT SUR SES POINTEURS, CAR 'WITVI'
                                     < NE LE FERA PAS AFIN D'AUTORISER L'ANTI-
                                     < CIPATION DES PREMIERES COMMANDES, MEME
                                     < S'IL Y A EN COURS PLUSIEURS LOGIN, CE QUI
                                     < RISQUE DE RETARDER LA PRISE EN COMPTE
                                     < DE CE 'CARALT' POUR CET UTILISATEUR
                                     < PAR 'HDLSUR', CELLE-CI ETANT DONC OCCU-
                                     < PE POUR QUELQU'UN D'AUTRE ; N'OUBLIONS
                                     < PAS QUE LE JOB-ENTRY DURE LONGTEMPS A
                                     < CAUSE DES INITIALISATIONS DE LA MEMOIRE
                                     < ET DU DISQUE DE SWAPPING...
         PSR         X
         SVC         SVCM10          < DANS LE CAS DE 'CARALT', ON ANNULE TOUS
                                     < LES CARACTERES EN ATTENTE, EN REINITIA-
                                     < LISANT 'KCWIO'...
         PLR         X
         JMP         ITMULH          < ET ON FAIT COMME SI DE RIEN N'ETAIT...
         PAGE
<
<
<        P O U R   L E   ' S V C M 1 0 '   D E   V I D A G E
<        D U   B U F F E R   D ' A N T I C I P A T I O N  :
<
<
EVBI01:  EQU         $
<*******************************************************************************
         STZ         VAR+KCWIO       < ANNULATION DES CARACTERES EN ATTENTE...
XWOR%8:  VAL         '0000000@@@@    < RECUPERATION DU CODE GENERE,
<*******************************************************************************
STZKCW:  EQU         ZERO+XWOR%8     < ET RENVOI POUR REFERENCE EN AVANT...
<*******************************************************************************
         LAI         XXVIN
XWOR%8:  VAL         '0000000@@@@    < RECUPERATION DU CODE GENERE,
<*******************************************************************************
LAIVIN:  EQU         ZERO+XWOR%8     < ET RENVOI POUR REFERENCE EN AVANT...
<*******************************************************************************
         STA         VAR+ICWIN       < ON REINITIALISE LES INDEX D'ENTREE
XWOR%8:  VAL         '0000000@@@@    < RECUPERATION DU CODE GENERE,
<*******************************************************************************
STAWIN:  EQU         ZERO+XWOR%8     < ET RENVOI POUR REFERENCE EN AVANT...
<*******************************************************************************
         LAI         XXVOUT
XWOR%8:  VAL         '0000000@@@@    < RECUPERATION DU CODE GENERE,
<*******************************************************************************
LAIVOU:  EQU         ZERO+XWOR%8     < ET RENVOI POUR REFERENCE EN AVANT...
<*******************************************************************************
         STA         VAR+ICWOUT      < ET DE SORTIE...
XWOR%8:  VAL         '0000000@@@@    < RECUPERATION DU CODE GENERE,
<*******************************************************************************
STAWOU:  EQU         ZERO+XWOR%8     < ET RENVOI POUR REFERENCE EN AVANT...
<*******************************************************************************
         $EQU        EVBI01          < ANNULATION DU CODE GENERE...
         PAGE
<
<
<        M I S E   E N   P L A C E   D U   C O D E   M A G I Q U E  :
<
<
<        FONCTION :
<                      CE MODULE APPELE PAR LE 'CCI',
<                    PERMET D'INVERSER L'ETAT DES
<                    VARIABLES 'VMAGIC' DES VISUS...
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DE DCT(ESCLAVE).
<
<
PMAGIC:  EQU         $
         BSR         ACHKIN          < COMPARAISON DE 'NPSIN' ET DE 'NSPOUT'
                                     < AVEC RENVOI DE 'NSPIN' DANS 'A' :
         JE          PMAGI1          < OK, ON EST BIEN EN TEMPS PARTAGE...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE, CAR LA GRAMMAIRE CONTIENT
<                    UN FILTRAGE DES DEMANDES BATCH !!!
<
         JMP         PMAGI3          < ET ON SORT...
PMAGI1:  EQU         $
         PSR         X,L             < SAUVEGARDE DE L'INDEX DE LA GRAMMAIRE
                                     < DU 'CCI' ET DE L'ADRESSE DE 'DCTSER'.
         LR          A,X             < (X)='NSPIN',
         BSR         ACADCT          < (A)=(L)=ADRESSE DE LA 'DCT' DE LA VISU
                                     <         DE L'UTILISATEUR...
         LAI         KMAGIC          < (A)=CODE MAGIQUE A PRIORI...
         CPZ         VAR+VMAGIC      < ETAIT-IL POSITIONNE ANTERIEUREMENT ???
         JE          PMAGI2          < NON, ON LE MET...
         LAI         NMAGIC          < OUI, ON L'ENLEVE...
         IF          NMAGIC-K,,XEIF%,
         IF          ATTENTION : LE 'CPZ' CI-DESSUS EST IDIOT !!!
XEIF%:   VAL         ENDIF
PMAGI2:  EQU         $
         STA         VAR+VMAGIC      < AUTORISATION OU INHIBITION DU CODE
                                     < MAGIQUE DES VISUS...
         PLR         X,L             < RESTAURE :
                                     < (X)=INDEX DE LA GRAMMAIRE 'CCI',
                                     < (L)=ADRESSE DE LA 'DCTVIS'.
PMAGI3:  EQU         $
         RSR                         < ET C'EST TOUT...
         PAGE
<
<
<        C O R R E S P O N D A N C E   E N T R E   L E S   N I V E A U X
<        D ' I N T E R R U P T I O N   D E S   V I S U S   E T
<                    L E U R S   ' D C T '  :
<
<
<        ARGUMENT :
<                    (X)=NUMERO DES VOIES APPELANTES.
<
<
<        RESULTAT :
<                    (A)=(L)=ADRESSE DE LA 'DCT' ASSOCIEE.
<
<
VIMUL:   EQU         $
         PSR         X
         ADRI        NPDPR,X         < CONVERSION DU NUMERO DE VOIE EN UN
                                     < NIVEAU D'INTERRUPTION GENERALISE,
         BSR         ACBDCT          < ET (A)=(L)=ADRESSE DE LA 'DCT' ASSOCIEE.
         PLR         X
         RSR
         PAGE
<
<
<        D C T   D E   S U R V E I L L A N C E :
<
<
         CALL        #SISP CMS5 CHECK#
         CALL        #SISP CMS5 DOL1#
DCTSUR:  EQU         $
PSTSUR:  WORD        K;K;K;K;COM+DEPCS;DCTSUR;NIL;PILSUR;HANDLR;SMST;SO;SE
       #@ASCI        " SUR"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR
         WORD        FILTRS          < S-FILTRE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC
         DZS         LSEM
         WORD        NIL             < TETE DE LA FILE D'ATTENTE DES
                                     < DEMANDES DE SURVEILLANCE ENVOYEES
                                     < PAR LE DISPATCHER LORS DES IT
                                     < HORS-ECHANGE.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID
         DZS         LSEM
         WORD        XXSIT0          < SIT : INUTILISE...
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLSUR
         WORD        NIL             < PAS DE ROUTINE D'IT PUISQUE CE
                                     < N'EST PAS UN VRAI PERIPHERIQUE...
         WORD        K;K             < ETAT.
         WORD        XBITS0          < BITSEM.
         WORD        XXNTRY;TRYVID   < NTRIES & FRETRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXDCTF          < 'DCT' NON CONNECTABLE...
         WORD        XFONBA
<
< ZONE VARIABLE DE LA DCT :
<
VARSUR:  EQU         $
         IF          VARSUR-DCTSUR-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
BUFSUR:: VAL         $-VARSUR        < BUFFER DE SURVEILLANCE.
LBUFSU:: VAL         XXVXY*NOCMO+NOCMO < NOMBRE D'OCTETS A LIRE PAR UNE LECTURE
                                     < GRAPHIQUE.
         NTRN
         DZS         LBUFSU+NOCMO-E/NOCMO
         TRN
                                     < ET 'LG' (LECTURE GRAPHIQUE).
DEMSUR:: VAL         $-VARSUR        < DEMANDE UTILISEE PAR HDLSUR.
         DZS         LDEM0
TABSUR:: VAL         $-VARSUR        < VALEUR INITIALE DES LISTES DE TABULA-
                                     < TION DES VISUS.
         CALL        #SISP CMS5 TAB1#
LTATAB:: VAL         $-VARSUR-TABSUR < LONGUEUR DES TABLES DE TABULATION.
TABSU0:: VAL         $-VARSUR        < ZONE DESTINEE A LA REMISE A 0 DES LISTES
                                     < DE TABULATION POUR LA COMMANDE "!TAB".
         DZS         LTATAB
<
< PILE DE HDLSUR :
<
         CALL        #SISP CMS5 DOL2#
PILSUR:  EQU         $-DEPILE
XWPILE:  VAL         LPILEH+10
         CALL        #SISP CMS5 GENPIL2#
         CALL        #SISP CMS5 CHECK#
         PAGE
<
<
<        H A N D L E R   D E   S U R V E I L L A N C E  :
<
<
<        FONCTION :
<                      LORSQUE LE DISPATCHER RENCONTRE UNE IT HORS-ECHANGE,
<                    IL SAIT QUE CE NE PEUT ETRE QU'UNE IT DE CARACTERE
<                    VALIDE EN ENTREE ; CE CARACTERE PEUT ETRE UN AC-
<                    -CIDENT, MAIS CE PEUT ETRE AUSSI UN CARACTERE DE
<                    CONTROLE, C'EST POURQUOI IL FAUT LE PRENDRE EN
<                    COMPTE, ET C'EST LE ROLE DE CE HANDLER DE
<                    SURVEILLANCE.
<
<
<        ARGUMENTS :
<                    (L)=ADRESSE DE LA 'DCTSUR',
<                    (W)=ADRESSE DE LA DEMANDE COURANTE DE SURVEILLANCE ;
<                        CELLE-CI CONTIENT DANS SON 'ASDEM', LE 'NSPTYP'
<                        DE LA VISU A SURVEILLER...
<
<
         USE         L,DCT0
         USE         W,DEM0
HDLSUR:  EQU         $
         LA          ARGDEM+ASDEM    < ACCES AU NSPTYP DE LA VISU A SUR-
                                     < VEILLER.
         STA         VAR+DEMSUR+XXNSP   < GENERATION DE LA DEMANDE A CHAND.
         PSR         W               < SAUVEGARDE DE L'ADRESSE DE LA DEMANDE.
         LAD         VAR+DEMSUR      < CALCUL DE L'ADRESSE DE LA
                                     < DEMANDE D'ENTREE SUR LA VISU A SUR
                                     < SURVEILLER.
         LR          A,W             < QUE L'ON MET DANS 'W' POUR CHAND.
<
< CALCUL DE L'ADRESSE D'OCTET DU BUFFER :
<
         LAD         VAR+BUFSUR      < (A)=@MOT DU BUFFER.
         SLLS        NOCMO=K         < CONVERSION EN ADRESSE-OCTETS.
         STA         ARGDEM+AMDEM    < QUE L'ON MET DANS 'AMDEM'.
         LBI         FAVR            < FONCTION 'L' A PRIORI (LECTURE).
         LYI         W               < 1 OCTET A LIRE.
Z101:    EQU         $               < BOUCLE D'ERREUR.
         STB         ARGDEM+OPDEM    < FONCTION 'L' OU 'LG'.
         STY         ARGDEM+CODEM    < COMPTE OCTETS DE 1 OU 6.
         BSR         ACHAND          < ENVOI DE LA DEMANDE D'ENTREE SUR
                                     < LA VISU A SURVEILLER.
         LBI         FAVRG           < FONCTION 'LG' (LECTURE GRAPHIQUE)
                                     < AU CAS OU...
         LYI         LBUFSU          < 6 OCTETS NECESSAIRES POUR 'LG'.
         WAIT        WEIO            < ATTENTE DU CARACTERE.
<
< LE CARACTERE EST ARRIVE, ON EST DEBLOQUE.
< TEST DES CONDITIONS DE RETOUR :
<
         LA          ARGDEM+ETADEM
         CPI         KDC3            < EST-CE UN CTRL-X-OFF ????
                                     < OU UN ALT-MODE DEJA TRAITE PAR
                                     < LES HANDLERS VISUS ?????
         JGE         E780            < OUI, IGNORE...
         JANE        Z101            < LA FONCTION 'L' N'A PAS ETE
                                     < RECONNUE, CELA SIGNIFIE QUE
                                     < L'AUTOMATE DE LA VISU CONCERNEE
                                     < ETAIT A L'ETAT 'CU', ET ALORS
                                     < SEULE LA FONCTION 'LG' EST
                                     < RECONNUE, C'EST POURQUOI,
                                     < ON RECOMMENCE EN DEMANDANT 'LG'.
<
< ANALYSE DU CARACTERE HORS-ECHANGE :
<
         LBY         VAR+BUFSUR      < (A)=CARACTERE HORS-ECHANGE.
         CPI         KALTM           < EST-CE ALT-MOD...
         JNE         E780            < NON, LE CARACTERE EST IGNORE.
<
<
<        T R A I T E M E N T  D E S   A L T - M O D
<                    H O R S - E C H A N G E S  :
<
<
         LBY         NSPTYP          < (A)=NSP DE LA VISU AYANT EMIS
                                     <     HORS-ECHANGES.
         LR          A,X             < (X)=NSP-VISU.
         LAD         VAR+TABSUR
         LR          A,Y             < (Y)=ADRESSE DE LA TABLE D'INITIALISATION
                                     <     DES LISTES DE TABULATION, TANT QUE
                                     <     LA BASE 'L' EST BONNE...
         PSR         L               < SAVE @DCT-SURVEILLANCE.
         BSR         ACADCT          < (L)=@DCT-VISU.
         LA          IOID            < ACCES A L'IOID DE CETTE VISU.
         JAE         E781            < IOID=K : CE N'EST PAS UNE
                                     < CONSOLE DU TEMPS PARTAGE, ON
                                     < NE FAIT DONC PAS DE JOB-ENTRY !!!
         TBT         IOIDX           < Y-A-T'IL DEJA UN ESCLAVE
                                     < ATTACHE, OU EN COURS D'ATTACHE-
                                     < MENT SUR CETTE VISU...
         JC          E781            < OUI, UN ESCLAVE EST ATTACHE,
                                     < IL N'Y A DONC RIEN A FAIRE...
<
<
<        A T T A C H E M E N T   D ' U N   N O U V E L
<                    E S C L A V E  :
<
<
<        ON A ICI :
<                    (L)=ADRESSE DCT(VISU) SUR LAQUELLE ON FAIT LE 'JOB-ENTRY'.
<                    (Y)=ADRESSE DE LA TABLE D'INITIALISATION DES TABULATIONS.
<
         SBT         IOIDX           < MEMORISATION DE CET ATTACHE-
                                     < MENT DAS LA DCT DE CETTE VISU.
         STA         IOID            < MAJ DE LA DCT VISU.
         LAI         NSPJE
         SWBR        A,A             < GENERATION D'UN NSPTYP VERS
                                     < LE JOB-ENTRY.
         STA         NSPTYP          < LA DEMANDE VERS LA VISU VA
                                     < SERVIR DE DEMANDE AU JOB ENTRY.
         STX         ARGDEM+AMDEM    < MISE DU NSPVISU DANS AMDEM
                                     < (C'EST LE FUTUR NSPIN).
         LAI         K
XWOR%1:  VAL         PLK*NOCMO=K     < PLK*NOCMO=TAILLE INITIALE DE L'ESPACE.
XWOR%1:  VAL         NBITMO-XWOR%1-B < NUMERO DU BIT A POSITIONNER...
         SBT         XWOR%1          < DEMANDE D'UN ESPACE MEMOIRE
                                     < DE '800 OCTETS.
         STA         ARGDEM+CODEM
<
< INITIALISATION DE LA TABLE DE TABULATION :
<
         LXI         LCCI/NBITMO     < (X)=NOMBRE DE MOTS DE LA TABLE,
         LR          Y,A             < (A)=ADRESSE DE LA VALEUR INITIALE,
         LB          VAR+ATABUL      < (B)=ADRESSE DE LA TABLE DE TABULATION
         RBT         NBITMO+BITX     < A REINITIALISER.
         ADRI        IJIJDX,B
         MOVE                        < REINITIALISATION...
<
< JOB-ENTRY :
<
         BSR         ACHAND          < ENVOI DE LA DEMANDE DE JOB-ENTRY.
         BSR         ACHANW          < ATTENTE DE FIN DE JOB-ENTRY,
                                     < POUR DES RAISONS DE NON-REEN-
                                     < TRANCE SUR LE BLOC DE DEMANDE
                                     < DEMSUR.
E781:    EQU         $
         PLR         L               < RESTAURE (L)=@DCT-SURVEILLANCE.
E780:    EQU         $
         PLR         W               < RESTAURE :
                                     < (W)=ADRESSE DE LA DEMANDE DE SURVEIL-
                                     <     LANCE COURANTE.
         RSR



Copyright © Jean-François Colonna, 2011-2022.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2011-2022.