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