<        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) 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.



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