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