< S I S C M S 5 3 PAGE PAGE < < < F O N C T I O N S R E C O N N U E S : < < FAVR:: VAL FGR < FONCTION D'APPEL LECTURE, FAVRE:: VAL FAVR+I < FONCTION D'APPEL LECTURE AVEC ECHO, FAVRG:: VAL 9 < FONCTION D'APPEL LECTURE GRAPHIQUE, FAVOG:: VAL 3 < FONCTION D'APPEL MISE EN GRAPHIQUE, FAVCG:: VAL 4 < FONCTION D'APPEL ALPHA-NUMERIQUE, FAVER:: VAL 5 < FONCTION D'APPEL EFFACEMENT ECRAN, FAVCU:: VAL 6 < FONCTION D'APPEL CURSEUR GRAPHIQUE, FAVRC:: VAL 8 < FONCTION D'APPEL LECTURE CURSEUR, FAVWD:: VAL 7 < FONCTION D'APPEL ECRITURE DIRECTE, <******************************************************************************* XWOR%F: VAL FAVR FAVR: @VAL '0@@@@ < LECTURE SUR VISU. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL FAVRE FAVRE: @VAL '0@@@@ < LECTURE SUR VISU AVEC ECHO. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL FAVW FAVW: @VAL '0@@@@ < ECRITURE SUR VISU. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL FAVOG FAVOG: @VAL '0@@@@ < MISE EN GRAPHIQUE D'UNE VISU. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL FAVCG FAVCG: @VAL '0@@@@ < MISE EN ALPHA-NUMERIQUE D'UNE VISU. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL FAVER FAVER: @VAL '0@@@@ < EFFACEMENT DE L'ECRAN D'UNE VISU. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL FAVCU FAVCU: @VAL '0@@@@ < MISE EN FONCTION CURSEUR GRAPHIQUE VISU. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL FAVWD FAVWD: @VAL '0@@@@ < ECRITURE DIRECTE SUR VISU. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL FAVRC FAVRC: @VAL '0@@@@ < LECTURE DU CURSEUR D'UNE VISU. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL FAVRG FAVRG: @VAL '0@@@@ < LECTURE GRAPHIQUE SUR VISU. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL FAVWG FAVWG: @VAL '0@@@@ < ECRITURE GRAPHIQUE SUR VISU. CALL #SISP CMS5 GEN CTE# <******************************************************************************* < < ET LEURS "ALTITUDES" D'EXECUTION : < XWOR%1: VAL K < INITIALISATION... XWOR%1: VAL COSBT?FAVR=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FAVRE=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FAVW=FMASK(K?XWOR%1=FCINST XWOR%1: VAL CORBT?FAVWG=FMASK(K?XWOR%1=FCINST < A T T E N T I O N : 'FAVWG' (ECRITURE < GRAPHIQUE NE PEUT S'EXECUTER EN HAUT < CAR ELLE MODIFE LE BUFFER ARGUMENT < LORS DU CODAGE DES COORDONNEES (X,Y) < EN CODE 'ASCI' !!! XWOR%1: VAL COSBT?FAVRG=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FAVOG=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FAVCG=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FAVER=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FAVCU=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FAVRC=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FAVWD=FMASK(K?XWOR%1=FCINST XVISUP:: VAL XWOR%1 < LISTE DES "ALTITUDES" DES VISUS. < < < C O N S T A N T E S D I V E R S E S : < < B2400:: VAL 2400 B9600:: VAL 9600 VEQFO:: VAL '5200 < TABLE D'EQUIVALENCE DES FONCTIONS. < (VOIR 'DCTVI1' POUR PLUS DE PRECISIONS). XVBITS:: VAL '0400 < POUR GENERER 'BITSEM'... XERAS:: VAL 8*2 < POUR CALCULER LA DUREE D'UN EFFACEMENT. XALTMO:: VAL XERAS < POUR ATTENDRE LE DEUXIEME ALTMODE. LVPILE:: VAL 9 < POUR CALCULER LES LONGUEURS DE PILE < DES VISUS. XVWEIO:: VAL W < 'WEIO' INITIAL DE SURVEILLANCE. XXVNCW:: VAL LCCINT < NOMBRE MAXIMUM DE CARACTERES EN < ATTENTE D'ENTREE (ON PREND 'LCCINT' CAR < C'EST LE BUFFER D'ANTICIPATION DES VISUS < QUI EST UTILISE PAR LES COMMANDES "!M..." XXVNCM:: VAL XXVNCW-Z < VALEUR DE TEST DE SATURATION DU BUFFER < CIRCULAIRE. XXVOUT:: VAL K < VALEUR INITIALE DE L'INDEX DE < SORTIE DES CARACTERES DU BUFFER < EN ANNEAU. NTRN XXVIN:: VAL K-I+XXVNCW/XXVNCW(K=FCREST TRN < VALEUR INITIALE DE L'INDEX D'ENTREE < DES CARACTERES DANS LE BUFFER EN < ANNEAU. NTRN XXCBA0:: VAL XXVIN+I-XXVOUT/XXVNCW(K=FCREST TRN < VALEUR INITIALE DE 'KCWIO'. IF XXCBA0-K,,XEIF%, IF ATTENTION : 'XXCBA0' N'ETANT PAS NUL, IL IF Y A DES VIDAGES DU BUFFER D'ANTICIPATION QUI IF VONT MERDER !!! XEIF%: VAL ENDIF XXVXY:: VAL 2 < NOMBRE DE COORDONNEES CONTENUES < DANS UN COUPLE (X,Y). XWOR%1: VAL K XWOR%1: VAL COSBT?FAVR=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FAVRE=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FAVW=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FAVWG=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FAVRG=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FAVOG=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FAVCG=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FAVER=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FAVCU=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FAVRC=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FAVWD=FMASK(K?XWOR%1=FCINST XXVFO:: VAL XWOR%1 < LISTE DES FONCTIONS RECONNUES. XXVLC:: VAL 1+NBITOC+1 < NOMBRE DE BITS POUR UN CARACTERE : < 1 : POUR LE BIT 'START', < NBITOC : POUR L'INFORMATION, < 1 : POUR UN BIT DE 'STOP'. LPILID:: VAL 3 < NOMBRES D'ENTREES DANS LA PILE < D'IMBRICATION DES UTILISATEURS ATTACHES < A UNE MEME VISU PAR LA COMMANDE "!U". UPILID:: VAL 1 < NOMBRE DE MOTS COMPOSANT UNE ENTREE : ON < EMPILE 'IOID' ; A NOTER QUE 'CARALT' < N'A PAS BESOIN D'ETRE EMPILE, CAR "!U" < PASSANT PAR LE NOYAU DU 'CCI' REINITIA- < LISE 'CARALT' AVEC 'KALTM'... XPILID:: VAL LPILID*UPILID < LONGUEUR EN MOTS DE LA PILE LOCALE < A CHAQUE VISU DE RECURSION PAR "!U". IF NESCLA-LPILID,,,XEIF% IF ATTENTION : C'EST TROP LONG, CELA NE SERT A RIEN !!! XEIF%: VAL ENDIF XXEXEX:: VAL K < VALEUR INITIALE DE 'INEXEX'. < < DEFINITION DE LA CONSTANTE MAGIQUE : < NMAGIC:: VAL K < VALEUR DE NON UTILISATION DE LA CONSTANTE < MAGIQUE... KMAGIC:: VAL MAGIK < CONSTANTE MAGIQUE... XWOR%7: VAL K < INITIALISATION DU CUMUL... NTRN DO BASE16 XWOR%7: VAL K=FCDO*KMAGIC/BASE16(K=FCREST?COSBT=FMASK(K?XWOR%7=FCINST XWOR%8: VAL K < INITIALISATION DU CUMUL... DO BASE16 XWOR%8: VAL K=FCDO?COSBT=FMASK(K?XWOR%8=FCINST TRN IF XWOR%7-XWOR%8,,XEIF%, IF ATTENTION : LA CONSTANTE MAGIQUE 'KMAGIC' IF N'OPERE PAS UNE PERMUTATION DES 16 CHIFFRES IF DE 0 A F !!! XEIF%: VAL ENDIF < < TABLE DES TRANSPOSES (LE DEUXIEME < OCTET DONNE LE TRANSPOSE DU PREMIER) : < DO BASE16 XWOR%9: VAL K=FCDO>NBITOC=FCPUSH(K=FCDO*KMAGIC(MBAS16=FCPULL < < DEFINITION DE LA TEMPORISATION < INTER-CARACTERES A L'EMISSION, < AINSI QUE DE LA GESTION DU < BIT DE PARITE DES CARACTERES : < NTEMPI:: VAL K < 'NTEMPI' SI TEMPORISATION NON NECESSAIRE. VTEMPI:: VAL -20000 < 'VTEMPI' EST LA TEMPORISATION NECESSAIRE < (A CAUSE DU DISQUE VIDEO) ; ELLE EST < EXPRIMEE EN 'THALT'-MICROSECONDES... XWOR%1: VAL 1000 < 1 MILLI-SECONDE=1000 MICRO-SECONDE... XWOR%2: VAL VTEMPI/XWOR%1*THALT XWOR%2: VAL -XWOR%2 < DUREE EN MILLI-SECONDES DE LA TEMPO- < RISATION SUR LE DISQUE-VIDEO... NBITPA:: VAL CORBT?BITPAR=FMASK(K=FCINST < 'NBITPA' : LE BIT DE PARITE EST LAISSE < TEL QU'IL EST RECU, VBITPA:: VAL COSBT?BITPAR=FMASK(K=FCINST < 'VBITPA' : LE BIT DE PARITE EST FORCE A < 1 ; CELA EST DU AU DISQUE < VIDEO QUI ENVOIE DES CARAC- < TERES SANS PARITE... IF NSPVI1-NSPVDK,,XEIF%, TEMPI1:: VAL NTEMPI < PAS DE TEMPORISATION... BITPA1:: VAL NBITPA < BIT DE PARITE INCHANGE... XEIF%: VAL ENDIF IF NSPVI1-NSPVDK,XEIF%,,XEIF% TEMPI1:: VAL VTEMPI < ET OUI, POUR LE DISQUE VIDEO IL FAUT < UNE GROSSE TEMPORISATION INTER-CARACTERE. BITPA1:: VAL VBITPA < BIT DE PARITE FORCE A 1... XEIF%: VAL ENDIF IF NSPVI2-NSPVDK,,XEIF%, TEMPI2:: VAL NTEMPI < PAS DE TEMPORISATION... BITPA2:: VAL NBITPA < BIT DE PARITE INCHANGE... XEIF%: VAL ENDIF IF NSPVI2-NSPVDK,XEIF%,,XEIF% TEMPI2:: VAL VTEMPI < ET OUI, POUR LE DISQUE VIDEO IL FAUT < UNE GROSSE TEMPORISATION INTER-CARACTERE. BITPA2:: VAL VBITPA < BIT DE PARITE FORCE A 1... XEIF%: VAL ENDIF IF NSPVI3-NSPVDK,,XEIF%, TEMPI3:: VAL NTEMPI < PAS DE TEMPORISATION... BITPA3:: VAL NBITPA < BIT DE PARITE INCHANGE... XEIF%: VAL ENDIF IF NSPVI3-NSPVDK,XEIF%,,XEIF% TEMPI3:: VAL VTEMPI < ET OUI, POUR LE DISQUE VIDEO IL FAUT < UNE GROSSE TEMPORISATION INTER-CARACTERE. BITPA3:: VAL VBITPA < BIT DE PARITE FORCE A 1... XEIF%: VAL ENDIF IF NSPVI4-NSPVDK,,XEIF%, TEMPI4:: VAL NTEMPI < PAS DE TEMPORISATION... BITPA4:: VAL NBITPA < BIT DE PARITE INCHANGE... XEIF%: VAL ENDIF IF NSPVI4-NSPVDK,XEIF%,,XEIF% TEMPI4:: VAL VTEMPI < ET OUI, POUR LE DISQUE VIDEO IL FAUT < UNE GROSSE TEMPORISATION INTER-CARACTERE. BITPA4:: VAL VBITPA < BIT DE PARITE FORCE A 1... XEIF%: VAL ENDIF IF NSPVI5-NSPVDK,,XEIF%, TEMPI5:: VAL NTEMPI < PAS DE TEMPORISATION... BITPA5:: VAL NBITPA < BIT DE PARITE INCHANGE... XEIF%: VAL ENDIF IF NSPVI5-NSPVDK,XEIF%,,XEIF% TEMPI5:: VAL VTEMPI < ET OUI, POUR LE DISQUE VIDEO IL FAUT < UNE GROSSE TEMPORISATION INTER-CARACTERE. BITPA5:: VAL VBITPA < BIT DE PARITE FORCE A 1... XEIF%: VAL ENDIF IF NSPVI6-NSPVDK,,XEIF%, TEMPI6:: VAL NTEMPI < PAS DE TEMPORISATION... BITPA6:: VAL NBITPA < BIT DE PARITE INCHANGE... XEIF%: VAL ENDIF IF NSPVI6-NSPVDK,XEIF%,,XEIF% TEMPI6:: VAL VTEMPI < ET OUI, POUR LE DISQUE VIDEO IL FAUT < UNE GROSSE TEMPORISATION INTER-CARACTERE. BITPA6:: VAL VBITPA < BIT DE PARITE FORCE A 1... XEIF%: VAL ENDIF IF NSPVI7-NSPVDK,,XEIF%, TEMPI7:: VAL NTEMPI < PAS DE TEMPORISATION... BITPA7:: VAL NBITPA < BIT DE PARITE INCHANGE... XEIF%: VAL ENDIF IF NSPVI7-NSPVDK,XEIF%,,XEIF% TEMPI7:: VAL VTEMPI < ET OUI, POUR LE DISQUE VIDEO IL FAUT < UNE GROSSE TEMPORISATION INTER-CARACTERE. BITPA7:: VAL VBITPA < BIT DE PARITE FORCE A 1... XEIF%: VAL ENDIF IF NSPVI8-NSPVDK,,XEIF%, TEMPI8:: VAL NTEMPI < PAS DE TEMPORISATION... BITPA8:: VAL NBITPA < BIT DE PARITE INCHANGE... XEIF%: VAL ENDIF IF NSPVI8-NSPVDK,XEIF%,,XEIF% TEMPI8:: VAL VTEMPI < ET OUI, POUR LE DISQUE VIDEO IL FAUT < UNE GROSSE TEMPORISATION INTER-CARACTERE. BITPA8:: VAL VBITPA < BIT DE PARITE FORCE A 1... XEIF%: VAL ENDIF CALL #SISP CMS5 CHECK# PAGE < < < D C T V I S U V O I E 1 : < < BAUDS1:: VAL B2400 < VITESSE DE TRANSMISSION VOIE 1. < < CALL #SISP CMS5 DOL1# DCTVI1: EQU $ PSTVI1: WORD K;K;K;K;COM+DEPCS;DCTVI1;NIL;PILVI1;HANDLR;SMST;SO;SE #@ASCI " VI1" < #SISP CMS5 ASCI# BYTE NSPVI1;NOUSER < IOID. < BIT0-7=NSP VISU OUT ASSOCIEE, < BIT8=K : PAS D'ESCLAVE ATTACHE, < =1 : ESCLAVE ATTACHE OU EN < COURS D'ATTACHEMENT, < BIT9-15=ID. DE CET ESCLAVE < S'IL EXISTE. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC DZS LSEM WORD NIL < TETE DE LA FILE D'ATTENTE SUR < LA VISU VOIE1. WORD NIL < QUEUE WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT DZS TFONCE-D < 1ERE PARTIE DE LA FILE D'ATTENTE < DU SEMAPHORE 'SIT'. WORD VEQFO < TABLE D'EQUIVALENCE 'TFONCE' < DES FONCTIONS : < FONCTION '03 : 1 CARACTERE 'GS' < ECRIT, < FONCTION '04 : 1 CARACTERE 'US' < ECRIT, < FONCTION '05 : 'ERASE' N'EST PAS < CONSIDERE COMME < UNE E/S EFFECTIVE, < FONCTION '06 : 2 CARACTERES 'ESC' < ET 'SUB' ECRITS. < FONCTION '07 : N'EST PAS CONSI- < DERREE COMME UNE < E/S EFFECTIVE, < AFIN DE LAISSER < SON CODEM INTEGRE. DZS LSEM-TFONCE < DERNIERE PARTIE DE LA FILE < D'ATTENTE DU SEMAPHORE 'SIT'. WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLVIS < ADRESSE DE LA ROUTINE SPECIFIQUE < DES ENTREES-SORTIES VISU. WORD ITVIS < ROUTINE SPECIFIQUE DES PSEUDOS-IT < DES VISUS (CF. LE DISPATCH). WORD K;VISOTI < VALEUR INITIALE DE L'ETAT WORD XVBITS < BITSEM. < DUREE D'E/S RELATIVE A 1 CARACTERE < = 8 FOIS CELLE DE L'IMPRIMANTE. WORD XXNTRY;TRYVID < NTRIES & FRETRY. WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXVFO < LISTE DES FONCTIONS RECONNUES. WORD XVISUP < DCTFUP ("ALTITUDES" DES FONCTIONS). < < Z O N E V A R I A B L E " T Y P E - V I S U " : < VARVI: EQU $ < LES SYMBOLES NE SONT DEFINIS QUE < POUR LA VOIE1, ILS ONT ONT LA < MEME VALEUR SUR LES AUTRES VOIES. VARVI1: EQU $ IF VARVI1-DCTVI1-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF < < SOUS-PROGRAMMES LOCAUX AUX VISUS : < WORD WVISU AWVISU:: VAL $-D-VARVI < SOUS-PROGRAMME D'ECRITURE D'UN CARACTERE. WORD WITVI AWITVI:: VAL $-D-VARVI < SOUS-PROGRAMME D'ATTENTE D'UNE INTER- < RUPTION QUELCONQUE. WORD E61 AE61:: VAL $-D-VARVI < MALHEUREUX RELAI... WORD VILBY AVILBY:: VAL $-D-VARVI < SIMULATION DU 'LBY' SUR 'RBUVI'. WORD VISBY AVISBY:: VAL $-D-VARVI < SIMULATION DU 'STBY' SUR 'RBUVI'. < < ARGUMENTS DE 'SIO' : < WORD ACVI1?FPHETA ETAVI:: VAL $-D-VARVI < OPERANDE SIO ENTREE ETAT WORD ACVI1?FPHIN INVI:: VAL $-D-VARVI < OPERANDE SIO ENTREE INFO WORD ACVI1?FPHOUT SORVI:: VAL $-D-VARVI < OPERANDE SIO SORTIE INFO WORD ACVI1?FPHCMD CDEVI:: VAL $-D-VARVI < OPERANDE SIO SORTIE COMMANDE < < ARGUMENT D'UNE DEMANDE DE SURVEILLANCE : < (ATTENTION : 'AMDEM' ET 'CODEM' SONT < UTILISES PAR 'BOEREA' ET 'BOALT' !!!) < BYTE NSPSUR;XDSYM SURVIS:: VAL $-D-VARVI WORD K NTRN WORD BAUDS1/XERAS TRN BOERA:: VAL $-D-VARVI < NBRE DE CARACTERE DE TEMPORI- < SATION 'KTEMPO' A EMETTRE POUR < ATTENDRE L'ERASE DE L'ECRAN. NTRN WORD BAUDS1/XALTMO TRN BOALT:: VAL $-D-VARVI < NBRE DE CARACTERES DE TEMPORI- < SATION 'KTEMPO' A EMETTRE POUR < ATTENDRE UN EVENTUEL 2EME < CARACTERE D'ABORT. < < A T T E N T I O N : < BOERA ET BOALT OCCUPENT LES MOTS < AMDEM ET CODEM RESPECTIVEMENT DE < LA DEMANDE DE SURVEILLANCE !!! < BYTE NSPVI1;XDPRIO?XDSYM < FUTUR NSPTYP PRIORITAIRE DE SURVEILLANCE < SURVEILLANCE QUE L'ON MET DANS < 'ASDEM'... WORD K WORD XVWEIO < WEIO. WORD NIL < NEXT < < TABLE DE TABULATION : < WORD TABUL1-IJIJDX,X ATABUL:: VAL $-D-VARVI TABUL1: EQU $ CALL #SISP CMS5 TAB1# < < INFORMATIONS DIVERSES : < WORD XXEXEX INEXEX:: VAL $-D-VARVI < 'INEXEX' CONTROLE LES EXTENSIONS : < INEXEX=K : LES EXPANSION ET < EXTENSIONS DE CARACTERES SONT < AUTORISEES, < INEXEX>0 : LES EXTENSIONS ET < EXPANSIONS SONT INHIBEES, < LES CODES SONT DONC TRANSMIS < TELS QU'ILS SONT FOURNIS EN < ARGUMENT DES DEMANDES; < A T T E N T I O N : < INEXEX EST REMIS A 0 A CHAQUE < PASSAGE AU CCI INTERACTIF. WORD NILX RBUVI:: VAL $-D-VARVI < RELAI VERS LE BUFFER UTILISE < PAR LA VISU. < < SAUVEGARDE DU CARACTERE REELLEMENT LU : < WORD NILK CARIN:: VAL $-D-VARVI < < DERNIER CARACTERE LU < WORD NILK DCARLU:: VAL $-D-VARVI < < SAUVEGARDE ETAT VISU < WORD NILK SAVETA:: VAL $-D-VARVI < < SAUVEGARDE CARACTERE LU < WORD LVCW1,X ALVCW:: VAL $-D-VARVI < RELAI PERMETTANT UN ACCES EN OCTET < DU BUFFER EN ANNEAU. WORD XXVIN ICWIN:: VAL $-D-VARVI < INDEX D'INSERTION DE CARACTERES DANS < LE BUFFER EN ANNEAU. WORD XXVOUT ICWOUT:: VAL $-D-VARVI < INDEX D'EXTRACTION DE CARACTERES < DU BUFFER EN ANNEAU. WORD XXCBA0 KCWIO:: VAL $-D-VARVI < COMPTEUR DES CARACTERES EN ATTENTE < DANS LE BUFFER ; VAUT EN FAIT < 'IN'+1-'OUT' MODULO 'XXVNCW'. < < INDICATEUR CARACTERE D'ABORT RECU : < WORD NILK < CONTIENT LE CODE DU 'ALT-MODE' < ('7D) DES QUE LE CARACTERE ABORT < A ETE RECU ; IL N'EST REMIS A 0 < QUE DANS 'ALTOUT', ET N'EST < TESTE QU'A LA SORTIE DES < HANDLERS (EN Z700). IALTM:: VAL $-D-VARVI < < CARACTERE COURANT D'ABORT : < WORD KALTM < LE CARACTERE COURANT D'ABORT < EST INITIALISE AVEC 'ALT-MODE', < ET RE-INITIALISE PAR 'ALT-MODE' < A CHAQUE PASSAGE DANS LE CCI EN < MODE INTERACTIF. CARALT:: VAL $-D-VARVI < < CONSTANTE MAGIQUE : < WORD NMAGIC VMAGIC:: VAL $-D-VARVI < CETTE CONSTANTE VAUT 'NMAGIC' (PAS DE < CONSTANTE MAGIQUE) OU 'KMAGIC'... < < TEMPORISATION INTER-CARACTERES < A L'EMISSION (OUT) : < WORD TEMPI1 TEMPIC:: VAL $-D-VARVI < TEMPO INTER-CARACTERES A L'EMISSION. < < GESTION DU BIT DE PARITE : < WORD BITPA1 VIPARI:: VAL $-D-VARVI < CONTIENT 'NBITPA' OU 'VBITPA', SUIVANT < QUI FAUT LAISSE INCHANGE LE BIT DE < PARTITE OU BIEN LE FORCER A 1... < < GESTION DE L'EMPILEMENT DES UTILISATEURS PAR "!U" : < WORD PILID1 APILID:: VAL $-D-VARVI < ADRESSE DE LA PILE DE RECURSION. CALL #SISP CMS5 DOL2# PILID1: EQU $ XWPILE: VAL XPILID CALL #SISP CMS5 GENPIL3# CALL #SISP CMS5 DOL1# < < BUFFER EN ANNEAU DES CARACTERES 'IN' : < LVCW1: EQU $ NTRN DZS XXVNCW+NOCMO-E/NOCMO TRN < < PILE DU HANDLER : < XWPILE: VAL LPILEH+LVPILE PILVI1:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < D C T V I S U V O I E 2 : < < BAUDS2:: VAL B2400 < VITESSE DE TRANSMISSION VOIE 2. < < DCTVI2: EQU $ PSTVI2: WORD K;K;K;K;COM+DEPCS;DCTVI2;NIL;PILVI2;HANDLR;SMST;SO;SE #@ASCI " VI2" < #SISP CMS5 ASCI# BYTE NSPVI2;NOUSER < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC DZS LSEM WORD NIL < TETE WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT DZS TFONCE-D WORD VEQFO < TABLE D'EQUIVALENCE-FONCTIONS. DZS LSEM-TFONCE WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLVIS < ROUTINE SPECIFIQUE VISU. WORD ITVIS WORD K;VISOTI < VALEUR INITIALE DE L'ETAT WORD XVBITS < BITSEM. WORD XXNTRY;TRYVID < NTRIES & FRETRY. WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXVFO < DCTFON. WORD XVISUP < DCTFUP ("ALTITUDES" DES FONCTIONS). < < ZONE VARIABLE VISU : < VARVI2: EQU $ IF VARVI2-DCTVI2-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD WVISU < S/P D'ECRITURE D'UN CARACTERE. WORD WITVI < S/P D'ATTENTE D'UNE IT QUELCONQUE. WORD E61 < MALHEUREUX RELAI... WORD VILBY < SIMULATION DE 'LBY' SUR 'RBUVI'. WORD VISBY < SIMULATION DE 'STBY' SUR 'RBUVI'. WORD ACVI2?FPHETA < OPERANDE SIO ENTREE ETAT. WORD ACVI2?FPHIN < OPERANDE SIO ENTREE INFO. WORD ACVI2?FPHOUT < OPERANDE SIO SORTIE INFO. WORD ACVI2?FPHCMD < OPERANDE SIO SORTIE COMMANDE. BYTE NSPSUR;XDSYM < DEMANDE DE SURVEILLANCE. WORD K NTRN WORD BAUDS2/XERAS < TEMPORISATION ERASE ECRAN. WORD BAUDS2/XALTMO < TEMPORISATION 2EME ABORT. TRN BYTE NSPVI2;XDPRIO?XDSYM WORD K WORD XVWEIO < WEIO. WORD NIL WORD TABUL2-IJIJDX,X TABUL2: EQU $ CALL #SISP CMS5 TAB1# WORD XXEXEX < INEXEX. WORD NILX < RELAI VERS LE BUFFER. WORD NILK < CARACTERE REELLEMENT LU. WORD NILK < DERNIER CARACTERE LU WORD NILK < SAUVEGARDE MOT D'ETAT VISU WORD LVCW2,X < RELAI D'ACCES A L'ANNEAU. WORD XXVIN < INDEX D'INSERTION DANS L'ANNEAU, WORD XXVOUT < INDEX D'EXTRACTION DE L'ANNEAU. WORD XXCBA0 < COMPTEUR DES CARACTERES DE L'ANNEAU. WORD NILK < INDICATEUR 'ALT-MODE' RECU. WORD KALTM < CARACTERE COURANT D'ABORT. WORD NMAGIC < CONSTANTE MAGIQUE. WORD TEMPI2 < TEMPO INTER-CARACTERES D'EMISSION. WORD BITPA2 < ACTION SUR LE BIT DE PARITE. WORD PILID2 CALL #SISP CMS5 DOL2# PILID2: EQU $ XWPILE: VAL XPILID CALL #SISP CMS5 GENPIL3# CALL #SISP CMS5 DOL1# < < BUFFER EN ANNEAU DES CARACTERES 'IN' : < LVCW2: EQU $ < BUFFER EN ANNEAU DES CARACTERES 'IN'. NTRN DZS XXVNCW+NOCMO-E/NOCMO TRN < < PILE DU HANDLER : < XWPILE: VAL LPILEH+LVPILE PILVI2:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < D C T V I S U V O I E 3 : < < BAUDS3:: VAL B2400 < VITESSE DE TRANSMISSION VOIE 3. < < DCTVI3: EQU $ PSTVI3: WORD K;K;K;K;COM+DEPCS;DCTVI3;NIL;PILVI3;HANDLR;SMST;SO;SE #@ASCI " VI3" < #SISP CMS5 ASCI# BYTE NSPVI3;NOUSER < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC DZS LSEM WORD NIL < TETE WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT DZS TFONCE-D WORD VEQFO < TABLE D'EQUIVALENCE-FONCTIONS. DZS LSEM-TFONCE WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLVIS WORD ITVIS WORD K;VISOTI < VALEUR INITIALE DE L'ETAT WORD XVBITS < BITSEM. WORD XXNTRY;TRYVID < NTRIES & FRETRY. WORD K < HSTATS. WORD XTESTO < TESTO WORD XXVFO < DCTFON. WORD XVISUP < DCTFUP ("ALTITUDES" DES FONCTIONS). < < ZONE VARIABLE VISU : < VARVI3: EQU $ IF VARVI3-DCTVI3-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD WVISU < S/P D'ECRITURE D'UN CARACTERE. WORD WITVI < S/P D'ATTENTE D'UNE IT QUELCONQUE. WORD E61 < MALHEUREUX RELAI... WORD VILBY < SIMULATION DE 'LBY' SUR 'RBUVI'. WORD VISBY < SIMULATION DE 'STBY' SUR 'RBUVI'. WORD ACVI3?FPHETA < OPERANDE SIO ENTREE ETAT. WORD ACVI3?FPHIN < OPERANDE SIO ENTREE INFO. WORD ACVI3?FPHOUT < OPERANDE SIO SORTIE INFO. WORD ACVI3?FPHCMD < OPERANDE SIO SORTIE COMMANDE. BYTE NSPSUR;XDSYM < DEMANDE DE SURVEILLANCE. WORD K NTRN WORD BAUDS3/XERAS < TEMPORISATION ERASE ECRAN. WORD BAUDS3/XALTMO < TEMPORISATION 2EME ABORT. TRN BYTE NSPVI3;XDPRIO?XDSYM WORD K WORD XVWEIO < WEIO. WORD NIL WORD TABUL3-IJIJDX,X TABUL3: EQU $ CALL #SISP CMS5 TAB1# WORD XXEXEX < INEXEX. WORD NILX < RELAI VERS LE BUFFER. WORD NILK < CARACTERE REELLEMENT LU. WORD NILK < DERNIER CARACTERE LU WORD NILK < SAUVEGARDE MOT D'ETAT VISU WORD LVCW3,X < RELAI D'ACCES A L'ANNEAU. WORD XXVIN < INDEX D'INSERTION DANS L'ANNEAU, WORD XXVOUT < INDEX D'EXTRACTION DE L'ANNEAU. WORD XXCBA0 < COMPTEUR DES CARACTERES DE L'ANNEAU. WORD NILK < INDICATEUR 'ALT-MODE' RECU. WORD KALTM < CARACTERE COURANT D'ABORT. WORD NMAGIC < CONSTANTE MAGIQUE. WORD TEMPI3 < TEMPO INTER-CARACTERES D'EMISSION. WORD BITPA3 < ACTION SUR LE BIT DE PARITE. WORD PILID3 CALL #SISP CMS5 DOL2# PILID3: EQU $ XWPILE: VAL XPILID CALL #SISP CMS5 GENPIL3# CALL #SISP CMS5 DOL1# < < BUFFER EN ANNEAU DES CARACTERES 'IN' : < LVCW3: EQU $ < BUFFER EN ANNEAU DES CARACTERES 'IN'. NTRN DZS XXVNCW+NOCMO-E/NOCMO TRN < < PILE DU HANDLER : < XWPILE: VAL LPILEH+LVPILE PILVI3:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < D C T V I S U V O I E 4 : < < BAUDS4:: VAL B2400 < VITESE DE TRANSMISSION VOIE 4. < < DCTVI4: EQU $ PSTVI4: WORD K;K;K;K;COM+DEPCS;DCTVI4;NIL;PILVI4;HANDLR;SMST;SO;SE #@ASCI " VI4" < #SISP CMS5 ASCI# BYTE NSPVI4;NOUSER < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC DZS LSEM WORD NIL < TETE. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT DZS TFONCE-D WORD VEQFO < TABLE D'EQUIVALENCE-FONCTIONS. DZS LSEM-TFONCE WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLVIS WORD ITVIS WORD K;VISOTI < VALEUR INITIALE DE L'ETAT WORD XVBITS < BITSEM. WORD XXNTRY;TRYVID < NTRIES & FRETRY. WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXVFO < DCTFON. WORD XVISUP < DCTFUP ("ALTITUDES" DES FONCTIONS). < < ZONE VARIABLE VISU : < VARVI4: EQU $ IF VARVI4-DCTVI4-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD WVISU < S/P D'ECRITURE D'UN CARACTERE. WORD WITVI < S/P D'ATTENTE D'UNE IT QUELCONQUE. WORD E61 < MALHEUREUX RELAI... WORD VILBY < SIMULATION DE 'LBY' SUR 'RBUVI'. WORD VISBY < SIMULATION DE 'STBY' SUR 'RBUVI'. WORD ACVI4?FPHETA < OPERANDE SIO ENTREE ETAT. WORD ACVI4?FPHIN < OPERANDE SIO ENTREE INFO. WORD ACVI4?FPHOUT < OPERANDE SIO SORTIE INFO. WORD ACVI4?FPHCMD < OPERANDE SIO SORTIE COMMANDE. BYTE NSPSUR;XDSYM < DEMANDE DE SURVEILLANCE. WORD K NTRN WORD BAUDS4/XERAS < TEMPORISATION ERASE ECRAN. WORD BAUDS4/XALTMO < TEMPORISATION 2EME ABORT. TRN BYTE NSPVI4;XDPRIO?XDSYM WORD K WORD XVWEIO < WEIO. WORD NIL WORD TABUL4-IJIJDX,X TABUL4: EQU $ CALL #SISP CMS5 TAB1# WORD XXEXEX < INEXEX. WORD NILX < RELAI VERS LE BUFFER. WORD NILK < CARACTERE REELLEMENT LU. WORD NILK < DERNIER CARACTERE LU WORD NILK < SAUVEGARDE MOT D'ETAT VISU WORD LVCW4,X < RELAI D'ACCES A L'ANNEAU. WORD XXVIN < INDEX D'INSERTION DANS L'ANNEAU, WORD XXVOUT < INDEX D'EXTRACTION DE L'ANNEAU. WORD XXCBA0 < COMPTEUR DES CARACTERES DE L'ANNEAU. WORD NILK < INDICATEUR 'ALT-MODE' RECU. WORD KALTM < CARACTERE COURANT D'ABORT. WORD NMAGIC < CONSTANTE MAGIQUE. WORD TEMPI4 < TEMPO INTER-CARACTERES D'EMISSION. WORD BITPA4 < ACTION SUR LE BIT DE PARITE. WORD PILID4 CALL #SISP CMS5 DOL2# PILID4: EQU $ XWPILE: VAL XPILID CALL #SISP CMS5 GENPIL3# CALL #SISP CMS5 DOL1# < < BUFFER EN ANNEAU DES CARACTERES 'IN' : < LVCW4: EQU $ < BUFFER EN ANNEAU DES CARACTERES 'IN'. NTRN DZS XXVNCW+NOCMO-E/NOCMO TRN < < PILE DU HANDLER : < XWPILE: VAL LPILEH+LVPILE PILVI4:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < D C T V I S U V O I E 5 : < < BAUDS5:: VAL B9600 < VITESSE DE TRANSMISSION VOIE 5. < < DCTVI5: EQU $ PSTVI5: WORD K;K;K;K;COM+DEPCS;DCTVI5;NIL;PILVI5;HANDLR;SMST;SO;SE #@ASCI " VI5" < #SISP CMS5 ASCI# BYTE NSPVI5;NOUSER < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC DZS LSEM WORD NIL < TETE. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT DZS TFONCE-D WORD VEQFO < TABLE D'EQUIVALENCE-FONCTIONS. DZS LSEM-TFONCE WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLVIS WORD ITVIS WORD K;VISOTI < VALEUR INITIALE DE L'ETAT WORD XVBITS < BITSEM. WORD XXNTRY;TRYVID < NTRIES & FRETRY. WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXVFO < DCTFON WORD XVISUP < DCTFUP ("ALTITUDES" DES FONCTIONS). < < ZONE VARIABLE VISU : < VARVI5: EQU $ IF VARVI5-DCTVI5-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD WVISU < S/P D'ECRITURE D'UN CARACTERE. WORD WITVI < S/P D'ATTENTE D'UNE IT QUELCONQUE. WORD E61 < MALHEUREUX RELAI... WORD VILBY < SIMULATION DE 'LBY' SUR 'RBUVI'. WORD VISBY < SIMULATION DE 'STBY' SUR 'RBUVI'. WORD ACVI5?FPHETA < OPERANDE SIO ENTREE ETAT. WORD ACVI5?FPHIN < OPERANDE SIO ENTREE INFO. WORD ACVI5?FPHOUT < OPERANDE SIO SORTIE INFO. WORD ACVI5?FPHCMD < OPERANDE SIO SORTIE COMMANDE. BYTE NSPSUR;XDSYM < DEMANDE DE SURVEILLANCE. WORD K NTRN WORD BAUDS5/XERAS < TEMPORISATION ERASE ECRAN. WORD BAUDS5/XALTMO < TEMPORISATION 2EME ABORT. TRN BYTE NSPVI5;XDPRIO?XDSYM WORD K WORD XVWEIO < WEIO. WORD NIL WORD TABUL5-IJIJDX,X TABUL5: EQU $ CALL #SISP CMS5 TAB1# WORD XXEXEX < INEXEX. WORD NILX < RELAI VERS LE BUFFER. WORD NILK < CARACTERE REELLEMENT LU. WORD NILK < DERNIER CARACTERE LU WORD NILK < SAUVEGARDE MOT D'ETAT VISU WORD LVCW5,X < RELAI D'ACCES A L'ANNEAU. WORD XXVIN < INDEX D'INSERTION DANS L'ANNEAU, WORD XXVOUT < INDEX D'EXTRACTION DE L'ANNEAU. WORD XXCBA0 < COMPTEUR DES CARACTERES DE L'ANNEAU. WORD NILK < INDICATEUR 'ALT-MODE' RECU. WORD KALTM < CARACTERE COURANT D'ABORT. WORD NMAGIC < CONSTANTE MAGIQUE. WORD TEMPI5 < TEMPO INTER-CARACTERES D'EMISSION. WORD BITPA5 < ACTION SUR LE BIT DE PARITE. WORD PILID5 CALL #SISP CMS5 DOL2# PILID5: EQU $ XWPILE: VAL XPILID CALL #SISP CMS5 GENPIL3# CALL #SISP CMS5 DOL1# < < BUFFER EN ANNEAU DES CARACTERES 'IN' : < LVCW5: EQU $ < BUFFER EN ANNEAU DES CARACTERES 'IN'. NTRN DZS XXVNCW+NOCMO-E/NOCMO TRN < < PILE DU HANDLER : < XWPILE: VAL LPILEH+LVPILE PILVI5:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < D C T V I S U V O I E 6 : < < BAUDS6:: VAL B9600 < VITESSE DE TRANSMISSION VOIE 6. < < < A T T E N T I O N : < IL EST NECESSAIRE DE PLACER LES < VOIES HAUTE VITESSE SUR LES < NIVEAUX MOINS PRIORITAIRES QUE LES < VOIES BASSE VITESSE...(CF. VOIE 6). < < DCTVI6: EQU $ PSTVI6: WORD K;K;K;K;COM+DEPCS;DCTVI6;NIL;PILVI6;HANDLR;SMST;SO;SE #@ASCI " VI6" < #SISP CMS5 ASCI# BYTE NSPVI6;NOUSER < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC DZS LSEM WORD NIL < TETE. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT DZS TFONCE-D WORD VEQFO < TABLE D'EQUIVALENCE-FONCTIONS. DZS LSEM-TFONCE WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLVIS WORD ITVIS WORD K;VISOTI < VALEUR INITIALE DE L'ETAT WORD XVBITS < BITSEM. WORD XXNTRY;TRYVID < NTRIES & FRETRY. WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXVFO < DCTFON. WORD XVISUP < DCTFUP ("ALTITUDES" DES FONCTIONS). < < ZONE VARIABLE DES VISUS : < VARVI6: EQU $ IF VARVI6-DCTVI6-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD WVISU < S/P D'ECRITURE D'UN CARACTERE. WORD WITVI < S/P D'ATTENTE D'UNE IT QUELCONQUE. WORD E61 < MALHEUREUX RELAI... WORD VILBY < SIMULATION DE 'LBY' SUR 'RBUVI'. WORD VISBY < SIMULATION DE 'STBY' SUR 'RBUVI'. WORD ACVI6?FPHETA < OPERANDE SIO ENTREE ETAT. WORD ACVI6?FPHIN < OPERANDE SIO ENTREE INFO. WORD ACVI6?FPHOUT < OPERANDE SIO SORTIE INFO. WORD ACVI6?FPHCMD < OPERANDE SIO SORTIE COMMANDE. BYTE NSPSUR;XDSYM < DEMANDE DE SURVEILLANCE. WORD K NTRN WORD BAUDS6/XERAS < TEMPORISATION ERASE ECRAN !!! WORD BAUDS6/XALTMO < TEMPORISATION 2EME ABORT. TRN BYTE NSPVI6;XDPRIO?XDSYM WORD K WORD XVWEIO < WEIO. WORD NIL WORD TABUL6-IJIJDX,X TABUL6: EQU $ CALL #SISP CMS5 TAB1# WORD XXEXEX < INEXEX. WORD NILX < RELAI VERS LE BUFFER. WORD NILK < CARACTERE REELLEMENT LU. WORD NILK < DERNIER CARACTERE LU WORD NILK < SAUVEGARDE MOT D'ETAT VISU WORD LVCW6,X < RELAI D'ACCES A L'ANNEAU. WORD XXVIN < INDEX D'INSERTION DANS L'ANNEAU, WORD XXVOUT < INDEX D'EXTRACTION DE L'ANNEAU. WORD XXCBA0 < COMPTEUR DES CARACTERES DE L'ANNEAU. WORD NILK < INDICATEUR 'ALT-MODE' RECU. WORD KALTM < CARACTERE COURANT D'ABORT. WORD NMAGIC < CONSTANTE MAGIQUE. WORD TEMPI6 < TEMPO INTER-CARACTERES D'EMISSION. WORD BITPA6 < ACTION SUR LE BIT DE PARITE. WORD PILID6 CALL #SISP CMS5 DOL2# PILID6: EQU $ XWPILE: VAL XPILID CALL #SISP CMS5 GENPIL3# CALL #SISP CMS5 DOL1# < < BUFFER EN ANNEAU DES CARACTERES 'IN' : < LVCW6: EQU $ < BUFFER EN ANNEAU DES CARACTERES 'IN'. NTRN DZS XXVNCW+NOCMO-E/NOCMO TRN < < PILE DU HANDLER : < XWPILE: VAL LPILEH+LVPILE PILVI6:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < D C T V I S U V O I E 7 : < < BAUDS7:: VAL B9600 < VITESSE DE TRANSMISSION VOIE 7. < < DCTVI7: EQU $ PSTVI7: WORD K;K;K;K;COM+DEPCS;DCTVI7;NIL;PILVI7;HANDLR;SMST;SO;SE #@ASCI " VI7" < #SISP CMS5 ASCI# BYTE NSPVI7;NOUSER < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC DZS LSEM WORD NIL < TETE WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT DZS TFONCE-D WORD VEQFO < TABLE D'EQUIVALENCE-FONCTIONS. DZS LSEM-TFONCE WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLVIS WORD ITVIS WORD K;VISOTI < VALEUR INITIALE DE L'ETAT WORD XVBITS < BITSEM. WORD XXNTRY;TRYVID < NTRIES & FRETRY. WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXVFO < DCTFON. WORD XVISUP < DCTFUP ("ALTITUDES" DES FONCTIONS). < < ZONE VARIABLE VISU : < VARVI7: EQU $ IF VARVI7-DCTVI7-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD WVISU < S/P D'ECRITURE D'UN CARACTERE. WORD WITVI < S/P D'ATTENTE D'UNE IT QUELCONQUE. WORD E61 < MALHEUREUX RELAI... WORD VILBY < SIMULATION DE 'LBY' SUR 'RBUVI'. WORD VISBY < SIMULATION DE 'STBY' SUR 'RBUVI'. WORD ACVI7?FPHETA < OPERANDE SIO ENTREE ETAT. WORD ACVI7?FPHIN < OPERANDE SIO ENTREE INFO. WORD ACVI7?FPHOUT < OPERANDE SIO SORTIE INFO. WORD ACVI7?FPHCMD < OPERANDE SIO SORTIE COMMANDE. BYTE NSPSUR;XDSYM < DEMANDE DE SURVEILLANCE. WORD K NTRN WORD BAUDS7/XERAS < TEMPORISATION ERASE ECRAN !!! WORD BAUDS7/XALTMO < TEMPORISATION 2EME ABORT. TRN BYTE NSPVI7;XDPRIO?XDSYM WORD K WORD XVWEIO < WEIO. WORD NIL WORD TABUL7-IJIJDX,X TABUL7: EQU $ CALL #SISP CMS5 TAB1# WORD XXEXEX < INEXEX. WORD NILX < RELAI VERS LE BUFFER. WORD NILK < CARACTERE REELLEMENT LU. WORD NILK < DERNIER CARACTERE LU WORD NILK < SAUVEGARDE MOT D'ETAT VISU WORD LVCW7,X < RELAI D'ACCES A L'ANNEAU. WORD XXVIN < INDEX D'INSERTION DANS L'ANNEAU, WORD XXVOUT < INDEX D'EXTRACTION DE L'ANNEAU. WORD XXCBA0 < COMPTEUR DES CARACTERES DE L'ANNEAU. WORD NILK < INDICATEUR 'ALT-MODE' RECU. WORD KALTM < CARACTERE COURANT D'ABORT. WORD NMAGIC < CONSTANTE MAGIQUE. WORD TEMPI7 < TEMPO INTER-CARACTERES D'EMISSION. WORD BITPA7 < ACTION SUR LE BIT DE PARITE. WORD PILID7 CALL #SISP CMS5 DOL2# PILID7: EQU $ XWPILE: VAL XPILID CALL #SISP CMS5 GENPIL3# CALL #SISP CMS5 DOL1# < < BUFFER EN ANNEAU DES CARACTERES 'IN' : < LVCW7: EQU $ < BUFFER EN ANNEAU DES CARACTERES 'IN'. NTRN DZS XXVNCW+NOCMO-E/NOCMO TRN < < PILE DU HANDLER : < XWPILE: VAL LPILEH+LVPILE PILVI7:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < D C T V I S U V O I E 8 : < < BAUDS8:: VAL B9600 < VITESSE DE TRANSMISSION VOIE 8. < < DCTVI8: EQU $ PSTVI8: WORD K;K;K;K;COM+DEPCS;DCTVI8;NIL;PILVI8;HANDLR;SMST;SO;SE #@ASCI " VI8" < #SISP CMS5 ASCI# BYTE NSPVI8;NOUSER < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC DZS LSEM WORD NIL < TETE. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT DZS TFONCE-D WORD VEQFO < TABLE D'EQUIVALENCE-FONCTIONS. DZS LSEM-TFONCE WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLVIS WORD ITVIS WORD K;VISOTI < VALEUR INITIALE DE L'ETAT WORD XVBITS < BITSEM. WORD XXNTRY;TRYVID < NTRIES & FRETRY. WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXVFO < DCTFON. WORD XVISUP < DCTFUP ("ALTITUDES" DES FONCTIONS). < < ZONE VARIABLE VISU : < VARVI8: EQU $ IF VARVI8-DCTVI8-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD WVISU < S/P D'ECRITURE D'UN CARACTERE. WORD WITVI < S/P D'ATTENTE D'UNE IT QUELCONQUE. WORD E61 < MALHEUREUX RELAI... WORD VILBY < SIMULATION DE 'LBY' SUR 'RBUVI'. WORD VISBY < SIMULATION DE 'STBY' SUR 'RBUVI'. WORD ACVI8?FPHETA < OPERANDE SIO ENTREE ETAT. WORD ACVI8?FPHIN < OPERANDE SIO ENTREE INFO. WORD ACVI8?FPHOUT < OPERANDE SIO SORTIE INFO. WORD ACVI8?FPHCMD < OPERANDE SIO SORTIE COMMANDE. BYTE NSPSUR;XDSYM < DEMANDE DE SURVEILLANCE. WORD K NTRN WORD BAUDS8/XERAS < TEMPORISATION ERASE ECRAN. WORD BAUDS8/XALTMO < TEMPORISATION 2EME ABORT. TRN BYTE NSPVI8;XDPRIO?XDSYM WORD K WORD XVWEIO < WEIO. WORD NIL WORD TABUL8-IJIJDX,X TABUL8: EQU $ CALL #SISP CMS5 TAB1# WORD XXEXEX < INEXEX. WORD NILX < RELAI VERS LE BUFFER. WORD NILK < CARACTERE REELLEMENT LU. WORD NILK < DERNIER CARACTERE LU WORD NILK < SAUVEGARDE MOT D'ETAT VISU WORD LVCW8,X < RELAI D'ACCES A L'ANNEAU. WORD XXVIN < INDEX D'INSERTION DANS L'ANNEAU, WORD XXVOUT < INDEX D'EXTRACTION DE L'ANNEAU. WORD XXCBA0 < COMPTEUR DES CARACTERES DE L'ANNEAU. WORD NILK < INDICATEUR 'ALT-MODE' RECU. WORD KALTM < CARACTERE COURANT D'ABORT. WORD NMAGIC < CONSTANTE MAGIQUE. WORD TEMPI8 < TEMPO INTER-CARACTERES D'EMISSION. WORD BITPA8 < ACTION SUR LE BIT DE PARITE. WORD PILID8 CALL #SISP CMS5 DOL2# PILID8: EQU $ XWPILE: VAL XPILID CALL #SISP CMS5 GENPIL3# CALL #SISP CMS5 DOL1# < < BUFFER EN ANNEAU DES CARACTERES 'IN' : < LVCW8: EQU $ < BUFFER EN ANNEAU DES CARACTERES 'IN'. NTRN DZS XXVNCW+NOCMO-E/NOCMO TRN < < PILE DU HANDLER : < XWPILE: VAL LPILEH+LVPILE PILVI8:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < H A N D L E R V I S U S T E K T R O N I X < T 4 0 1 0 E T T 4 0 1 4 : < < < O P T I O N S A S T R A P P E R : < < 1- BIT0=1 POUR TOUS LES CARACTERES (PARITE FORCEE), < 2- 'CR' SANS 'LF', < 3- 'LF' SANS 'CR', < 4- PAS DE 'CR' NI 'EOT' LORS DES LECTURES GRAPHIQUES. < < < ARGUMENTS : < - (L)=ADRESSE 'DCT', < - (W)=ADRESSE DEMANDE. < - (A)=NSPTYP. < < < F O N C T I O N S P O S S I B L E S : < < APPEL : INTERNE : < < 0000 0000 : LECTURE, < 0001 0001 : LECTURE AVEC ECHO, < 0010 0010 : ECRITURE, < 1010 0011 : ECRITURE GRAPHIQUE, < 1001 0100 : LECTURE GRAPHIQUE, < 0011 0101 : MISE EN MODE GRAPHIQUE (OPEN GRAPH.), < 0100 0110 : RETOUR AU MODE ALPHA-NUMERIQUE (CLOSE), < 0101 0111 : ERASE SCREEN, < 0110 1000 : MISE EN FONCTION DU CURSEUR GRAPHIQUE, < (IL FAUT AMDEM=K), < 1000 1000 : LECTURE DES COORDONNEES DU CURSEUR < ALPHA-NUMERIQUE (IL FAUT AMDEM#0), < 0111 1001 : ECRITURE DIRECTE (C'EST-A-DIRE QUE LES < CARACTERES ARGUMENTS CONTENUS DANS AMDEM+ < CODEM+ASDEM SONT EMIS TELS QUELS...) < < < NOTA : < L'OPDEM D'APPEL PEUT AVOIR LE < BIT 'ZBTOVI' POSITIONNE ; CELA < CORRESPOND A UN APPEL PAR 'SERESC' < DEMANDANT QU'UN TIME-OUT SOIT FORCE < POUR CET ECHANGE... < < < UTILISATION DE ETAT1 : < BIT0-8 : INDIQUENT LES FONCTIONS AUTORISEES SUR < CETTE VISU A CET APPEL : 1 BIT CORRES- < POND A 1 FONCTION (LE BIT0 A LA FONCTION 0 < ...), AVEC LES CONVENTIONS SUIVANTES : < < L=LECTURE ALPHA-NUMERIQUE, < LE=IDEM AVEC DE PLUS L'ECHO, < E=ECRITURE ALPHANUMERIQUE, < EG=ECRITURE GRAPHIQUE, < LG=LECTURE GRAPHIQUE (CURSEUR), < OG=OPEN GRAPHIQUE, < CG=CLOSE GRAPHIQUE, < ER=ERASE DE L'ECRAN, < CU=MISE EN FONCTION DU CURSEUR < GRAPHIQUE, OU LECTURE DES < COORDONNEES DU CURSEUR < ALPHA-NUMERIQUE, < < ON A L'AUTOMATE SUIVANT D'ACCES AUX < FONCTIONS (LA 1ERE FONCTION EST LA FONCTION < COURANTE, LES SUIVANTES, CELLES QUI SONT < AUTORISEES A L'APPEL SUIVANT) : < < L-->(L,LE,E,EG,OG,CG,ER,CU), < LE-->(L,LE,E,OG,ER), < E-->(L,LE,E,OG,ER), < EG-->(L,EG,OG,CG,ER,CU), < LG-->(L,LE,E,OG,ER), < OG-->(L,EG,OG,CG,ER,CU), < CG-->(L,LE,E,OG,ER), < ER-->(L,LE,E,OG,ER), < CU-->(EG,LG). < < < FONCTION : < CE HANDLER GERE UNE VISU. IL N'IMBRIQUE PAS < LES MESSAGES SIMULTANES IN & OUT. MALGRE TOUT, AU < COURS D'UNE SORTIE LES CARACTERES ENTRANTS SONT < LUS, ON PEUT AINSI TENIR COMPTE DE CERTAINS CODES < SPECIAUX... < < < RESULTAT : < DANS LE CAS D'UNE ENTREE, ON A DANS LES < BITS 9-15 DE ETAT1 LE NBRE DE CARACTERES < REELLEMENT LUS, CE NBRE EST AUSSI < RENVOYE AU DEMANDEUR DANS SON CODEM... < SI LA BOX DE LA DEMANDE COURANTE < EST VALIDE, CELLE-CI RECOIT LORS D'UNE < LECTURE, LE NBRE DE CARACTERES REELLE- < MENT LUS. < < < NOTA IMPORTANT : DANS LE CAS DE L'ECRITURE GRAPHIQUE < LE BUFFER CONTIENT UNE LISTE DE < COORDONNEES (Y,X), MAIS 'CODEM' RESTE < LA LONGUEUR-OCTETS DU BUFFER, ET NON < PAS LE NOMBRE DE POINTS, OU AUTRE... < < < A T T E N T I O N : < DANS LE CAS D'UNE ECRITURE GRAPHIQUE, < LE BUFFER POINTE PAR 'AMDEM' EST MODI- < FIE PAR LE HANDLER-VISU, DE FACON A < MEMORISER LES CODES 'ASCI' EQUIVALENTS < AUX COORDONNEES... CELA N'A QUE PEU < D'IMPORTANCE POUR LES UTILISATEURS, < PUISQUE CE TYPE D'INFORMATION TRANSITE < PAR LE BUFFER 'BUFESC' ; D'AUTRE PART, < LE 'SVC' DIT DE 'FAUSSE LECTURE' LUI < PERMETTRA DE RECUPERER LES CODES 'ASCI' < GENERES ICI EN GRAPHIQUE... < < < E C R I T U R E D I R E C T E : < L'ECRITURE DIRECTE PERMET D'EMETTRE JUSQU'A < 6 CARACTERES TELS QU'ILS SONT DONNES PAR LE < DEMANDEUR (IL N'EST PAS TENU COMPTE DES < EXTENSIONS ET DES EXPANSIONS). DE PLUS < CE MODE D'ECRITURE EST TOUJOURS ACCESSIBLE, < QUELQUE SOIT LA FONCTION QUI AIE PRECEDEE, < ET ENFIN ELLE NE MODIFIE PAS L'AUTOMATE DES < VISUS. < LES CARACTERES ARGUMENTS SONT SITUES DANS < LE BLOC DE DEMANDE (AMDEM+CODEM+ASDEM) ; < S'ILS SONT EN NBRE INFERIEUR A 6, UN < 'EOT' SERVIRA DE LIMITEUR, ET IL NE < SERA PAS EMIS ; DANS CE CAS, IL Y A < DE PLUS VIDAGE DU BUFFER D'ANTICIPA- < TION DE LA VISU CONCERNEE. < < < C A R A C T E R E D ' A B O R T : < ON A DANS 'CARALT' LE CODE DU CARACTERE < COURANT D'ABORT ; CELUI-CI EST INITIALISE < AVEC 'ALT-MODE', ET REINITIALISE AINSI < A CHAQUE PASSAGE DANS LE CCI INTERACTIF. < ON A LA POSSIBILITE DE CHANGER CE CODE < A L'AIDE DE L'INSTRUCTION '1EA5'. < IL EST UTILISE DE LA FACON SUIVANTE : < 1 - UN SEUL CARACTERE 'ABORT' PRO- < VOQUE UN RETOUR AU PROGRAMME UTI- < LISATEUR A L'ADRESSE DEFINIE PAR < LE 'PRESC'. < 2 - DEUX CARACTERES 'ABORT' RECUS < EN MOINS DE TEMPS QU'IL NE FAUT < POUR EMETTRE BAUDS/11/3 CARACTERES < 'NULL' PROVOQUE UN 'ABORT' DU PRO- < GRAMME UTILISATEUR. < < < T I M E - O U T : < LE TIME OUT SUR UNE VISU EST < FACULTATIF SUR UNE VISU ; IL EST < PROGRAMME PAR LA FONCTION '1EA5 < DU RECOVERY ; LORSQU'ON EST EN < TIME-OUT, ON FAIT COMME SI UN < ALT-MODE AVAIT ETE RECU !!! < < < FONCTION DU B R E A K OU DU N U L L : < EN ENTREE, COMME EN SORTIE, L'ACTION < DE LA TOUCHE BREAK, ET D'ARRETER < L'E/S EN COURS SUR LA VISU < (E,EG,L). < LORSQU'UN 'BREAK' EST HORS-ECHANGE, < SON ACTION EST DE PURGER LE BUFFER EN < ANNEAU DES CARACTERES EN ATTENTE ; < NE PAS OUBLIER COMMENT EST GEREE < LA COMMANDE "!M...". < < < FONCTION DU C T R L - E O T : < EN ENTREE : FIN DE MESSAGE. < (COMME 'CR') < < < FONCTION DU C T R L - X - O F F : < EN SORTIE : ARRETE LA SORTIE (COMME BREAK), < MAIS DE PLUS RENVOIE LE CODE '13 (CTRL-X-OFF) < A L'UTILISATEUR. DE PLUS SI CE CARACTERE EST < APPARU HORS-ECHANGE, IL ABORTE LA SORTIE < SUIVANTE (CODE '93) !!! < < < FONCTION DU C T R L - V : < CTRL-V PERMET EN ENTREE DE FAIRE DE < LA TABULATION AUTOMATIQUE, EN S'APPUYANT SUR < LA TABLE 'ATABUL'. < < VTAB:: VAL KSYN < CTRL-V (CODE DE TABULATION). KTEMPO:: VAL KSOH < CODE DU CARACTERE DE TEMPO- < RISATION (CTRL-A) ; 'NULL' NE < PEUT PLUS ETRE UTILISE ; EN < EFFET LORS DE LIGNES BOUCLEES, < UN 'NULL' EMIS PAR VIX, ET QUI < RERENTRE DANS VIY EST CONFONDU < AVEC UN BREAK DONT LE CODE < QUOI QU'ON Y FASSE EST '00 !!! < < < E X T E N S I O N S C A R A C T E R E S : < LORSQU'ON FAIT UNE ECRITURE ALPHA-NUMERIQUE, < LES CODES '60-'6F ET 'E0-'FF SONT INUTILISES, < DONC DISPONIBLES POUR DES EXTENSIONS PROGRAMMEES < DE CARACTERES COMPOSITES (64 AU MAX). < < < T A B L E D E S F O N C T I O N S : < < TRVISU: EQU $ WORD E62 FIVR:: VAL $-TRVISU-D < FONCTION INTERNE LECTURE. WORD E62 FIVRE:: VAL $-TRVISU-D < FONCTION INTERNE LECTURE AVEC ECHO. WORD E61 FIVW:: VAL $-TRVISU-D < FONCTION INTERNE ECRITURE. WORD VISUEG FIVWG:: VAL $-TRVISU-D < FONCTION INTERNE ECRITURE GRAPHIQUE. WORD VISULG FIVRG:: VAL $-TRVISU-D < FONCTION INTERNE LECTURE GRAPHIQUE. WORD VISUOG FIVOG:: VAL $-TRVISU-D < FONCTION INTERNE MISE EN GRAPHIQUE. WORD VISUCG FIVCG:: VAL $-TRVISU-D < FONCTION INTERNE ALPHA-NUMERIQUE. WORD VISUER FIVER:: VAL $-TRVISU-D < FONCTION INTERNE EFFACEMENT ECRAN. WORD VISUCU FIVCU:: VAL $-TRVISU-D < FONCTION INTERNE CURSEUR GRAPHIQUE. FIVRC:: VAL FIVCU < FONCTION INTERNE LECTURE CURSEUR. FIVWD:: VAL FIVRC+I < FONCTION INTERNE ECRITURE DIRECTE. FIVALT:: VAL FIVWD+I < FONCTION INTERNE SUITE ALT-MODE. < < < A U T O M A T E D E S V I S U S : < < XWORK1: VAL COSBT?FIVR=FMASK(K=FCINST XWORK1: VAL COSBT?FIVRE=FMASK(K?XWORK1=FCINST XWORK1: VAL COSBT?FIVW=FMASK(K?XWORK1=FCINST XWORK1: VAL COSBT?FIVOG=FMASK(K?XWORK1=FCINST XWORK1: VAL COSBT?FIVER=FMASK(K?XWORK1=FCINST WISOTI: VAL XWORK1 < ETAT INITIAL DE L'AUTOMATE DES VISUS : VISOTI: EQU ZERO+WISOTI < E --> (L,LE,E,OG,ER). TVISOT: EQU $ XWOR%1: VAL COSBT?FIVWG=FMASK(K?WISOTI=FCINST XWOR%1: VAL COSBT?FIVCG=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FIVCU=FMASK(K?XWOR%1=FCINST WORD XWOR%1 < L-->(L,LE,E,EG,OG,CG,ER,CU). WORD VISOTI < LE-->(L,LE,E,OG,ER). WORD VISOTI < E-->(L,LE,E,OG,ER). XWOR%1: VAL COSBT?FIVR=FMASK(K=FCINST XWOR%1: VAL COSBT?FIVWG=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FIVOG=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FIVCG=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FIVER=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FIVCU=FMASK(K?XWOR%1=FCINST WORD XWOR%1 < EG-->(L,EG,OG,CG,ER,CU). WORD VISOTI < LG-->(L,LE,E,OG,ER). XWOR%1: VAL XWOR%1 WORD XWOR%1 < OG-->(L,EG,OG,CG,ER,CU). WORD VISOTI < CG-->(L,LE,E,OG,ER). WORD VISOTI < ER-->(L,LE,E,OG,ER). XWOR%1: VAL COSBT?FIVWG=FMASK(K=FCINST XWOR%1: VAL COSBT?FIVRG=FMASK(K?XWOR%1=FCINST WORD XWOR%1 < CU-->(EG,LG). WORD K < (RESERVE POUR LA FONCTION '9) XWOR%1: VAL CORBT?FIVOG=FMASK(K?WISOTI=FCINST WORD XWOR%1 < 'ALT-MODE'-->(L,LE,E,ER). < < < C O D A G E D E S F O N C T I O N S : < < < ACCES A 'TCFOVI' : < LA FONCTION D'APPEL DU < 'HDLVIS' DANS 'OPDEM' (DITE < FONCTION "EXTERNE") DONNE < L'INDEX D'ACCES A 'TCFOVI' ; < L'OCTET AINSI INDEXE DONNE LA < FONCTION QUI VA ETRE EXECUTEE < PAR 'HDLVIS' (DITE FONCTION < "INTERNE"). < < TCFOVI: EQU $ BYTE FIVR;FIVRE < FAVR;FAVRE. BYTE FIVW;FIVOG < FAVW;FAVOG. BYTE FIVCG;FIVER < FAVCG;FAVER. BYTE FIVCU;FIVWD < FAVCU;FAVWD. BYTE FIVRC;FIVRG < FAVRC;FAVRG. BYTE FIVWG;K < FAVWG. < < < T A B L E D E S E X T E N S I O N S : < < < A T T E N T I O N : < LES LISTES D'EXTENSION FONT AU < MAXIMUM 7 CARACTERES, ET DOIVENT < CONTENIR SUFFISAMMENT DE 'CTRL-H', < AFIN QUE L'EXTENSION N'OCCUPE < QU'UN SEUL CARACTERE SUR L'ECRAN. < DE PLUS, LES LISTES D'EXTENSION < SONT DONNEES A L'ENVERS (LE PRE- < MIER CARACTERE EST EN QUEUE), < L'OCTET0 DONNANT LE NOMBRE DE < CARACTERES A EDITER... < < CEXTD: EQU $ NKEXT:: VAL 8 < NOMBRE DE CARACTERES PAR EXTENSION. < < EXTENSION '60 (CURSEUR ALPHA-NUMERIQUE "HOME", < C'EST-A-DIRE ENVOI EN (0,780)) : < @BYTE 0;KUS;KAROND;KSP;KDEL;KSEPT;KGS CALL #SISP CMS5 EXTEND# < (LA POSITION HOME EST LE POINT 0,780) IF $-CEXTD*NOCMO-NKEXT,,XEIF%, IF ATTENTION : LONGUEUR ANORMALE DES LE IF PREMIER ELEMENT... XEIF%: VAL ENDIF < < EXTENSION '61 (PETITE ABEILLE) : < @BYTE 0;KINF;KBS;KSUP;KBS;KCHAP CALL #SISP CMS5 EXTEND# < < EXTENSION '62 (IL EXISTE) : < @BYTE 0;KCD;KBS;KMOINS CALL #SISP CMS5 EXTEND# < < EXTENSION '63 (QUELQUE SOIT) : < @BYTE 0;KV;KBS;KMOINS CALL #SISP CMS5 EXTEND# < < EXTENSION '64 (BARRE VERTICALE) : < @BYTE 0;KPE;KBS;KVIR CALL #SISP CMS5 EXTEND# < < EXTENSION '65 (EQUIVAUT A) : < @BYTE 0;KEGAL;KBS;KSOUL CALL #SISP CMS5 EXTEND# < < EXTENSION '66 (FLECHE GAUCHE) : < @BYTE 0;KINF;KBS;KMOINS CALL #SISP CMS5 EXTEND# < < EXTENSION '67 (FLECHE DROITE) : < @BYTE 0;KSUP;KBS;KMOINS CALL #SISP CMS5 EXTEND# < < EXTENSION '68 (IMPLIQUE) : < @BYTE 0;KDP;KBS;KSUP CALL #SISP CMS5 EXTEND# < < EXTENSION '69 (IMPLIQUE A L'ENVERS) : < @BYTE 0;KINF;KBS;KDP CALL #SISP CMS5 EXTEND# < < EXTENSION '6A (IL N'EXISTE PAS) : < @BYTE 0;KCD;KBS;KDQ;KBS;KSEPT;KBS;KMOINS CALL #SISP CMS5 EXTEND# < < EXTENSION '6B (SIGNE DE LA MULTIPLICATION) : < @BYTE 0;KSLASH;KBS;KASLSH CALL #SISP CMS5 EXTEND# < < EXTENSION '6C (SIGNE DIFFERENT) : < @BYTE 0;KEGAL;KBS;KSLASH CALL #SISP CMS5 EXTEND# < < EXTENSION '6D ('RC'+'LF') : < EXT6D:: VAL $-CEXTD*NOCMO/NKEXT < NUMERO DE L'EXTENSION 'K6D'... @BYTE 0;KLF;KCR CALL #SISP CMS5 EXTEND# < < EXTENSION '6E (LETTRE "T" MINUSCULE) : < @BYTE 0;KL;KBS;KMOINS CALL #SISP CMS5 EXTEND# < < EXTENSION '6F (LETTRE "D" DE DERIVATION) : < @BYTE 0;KPE;KBS;KPD CALL #SISP CMS5 EXTEND# NCEXTD:: VAL $-CEXTD*NOCMO/NKEXT < NOMBRE DE LISTES D'EXTENSION... VEXTER: EQU $ @BYTE 0;"?" CALL #SISP CMS5 EXTEND# NTRN XWOR%1: VAL XXLEXT+W+NOCMO-E/NOCMO TRN $EQU VEXTER+XWOR%1 < POUR RATTRAPER LES '00 GENERES... < DERNIERE EXTENSION, RESERVEE < AUX ERREURS : ELLE DOIT < SUIVRE LE CALCUL DE 'NCEXTD'. < < < M E S S A G E ' J F . C O L O N N A ' : < < < NOTA : < CE MESSAGE ACCEDE PAR 'ACEXTD', < EST CONTROLE PAR LE BIT 'XXXJFC' < DU MOT 'MEMV'. < < MJFC: EQU $ XXJFC1:: VAL MJFC-CEXTD*NOCMO < INDEX DE DEBUT DU MESSAGE, ASCI "JF. COLONNA." <******************************************************************************* BYTE KCR;K < POUR REVENIR EN DEBUT DE LIGNE... XWOR%1: VAL '0000000@@@@=FCSIGN-SIGNP <******************************************************************************* XXJFC2:: VAL $-MJFC*NOCMO+XWOR%1 < LONGUEUR EN OCTETS DU MESSAGE. PAGE < < < I N I T I A L I S A T I O N C O U P L E U R : < < < FONCTION : < CE SOUS-PROGRAMME EST APPELE < PAR LES HANDLERS VISUS, MAIS AUSSI < PAR LE 'RESTART' AFIN D'INITIALISER, < OU DE REINITIALISER LES COUPLEURS < DES VISUS INDIVIDUELLEMENT. < < CALL #SISP CMS5 DOL2# CALL #SISP CMS5 CHECK# INICV: EQU $ XWOR%1: VAL COSBT?COMSTR=FMASK(K=FCINST XWOR%1: VAL COSBT?COMINT=FMASK(K?XWOR%1=FCINST LAI XWOR%1 SIO VAR+CDEVI < VALIDATIONS DES IT IN RSR PAGE < < < E C R I T U R E D I R E C T E : < < < RAPPEL : < CE MODE D'ECRITURE EST ACCESSIBLE < EN PERMANENCE, ET NE MODIFIE PAS < L'AUTOMATE DES VISUS ; IL PEUT DONC < ETRE UTILISE POUR ENVOYER LES ORDRES < FORT COMPLEXES DU T4014... < (IL IGNORE LES EXTENSIONS ET LES EXPANSIONS) < < < A T T E N T I O N : < UNE ECRITURE DIRECTE N'EST PAS < INTERRUPTIBLE, NI PAR CTRL-X-OFF, < NI PAR ALT-MODE ; LES TESTS DE CES < CARACTERES NE SE FONT QU'EN SORTIE... < < < UTILISATION DE 'CARIN' : < 'CARIN' CONTIENT LES CONDITIONS < DE RETOUR DE L'ECRITURE DIRECTE < (FUTUR ETAT0), SOIT 0, SOIT < '13 SI UN CTRL-X-OFF A ETE RECU. < < < UTILISATION DE 'EOT' : < LE CARACTERE 'EOT' EST EN GENERAL LA FIN DE < CHAINE, MAIS N'EST PAS TRANSMIS ; DE PLUS S'IL EST < LE PREMIER OCTET DE CELLE-CI ; DANS CES CONDITIONS, < LE BUFFER D'ANTICIPATION EST VIDE (VOIR 'WVISU'), < PUIS IL EST EMIS !!! < < USE L,DCT0 USE W,DEM0 VISUWD: EQU $ LAD ARGDEM+AMDEM < (A)=@MOT DU BUFFER DES CARACTERES. SBT BITX < MISE EN PLACE DU BIT INDEX. STA VAR+RBUVI < GENERATION DU RELAI D'ACCES < AUX CARACTERES. LXI K < (X)=INDEX DU BUFFER. LYI ASDEM-AMDEM+Z*NOCMO < (Y)=NOMBRE MAX DE CARACTERES. < < TEST D'UN CTRL-X-OFF PRELIMINAIRE : < LA VAR+DCARLU CPI KDC3 < UN CTRL-X-OFF A-T'IL ETE RECU < AVANT LA DEMANDE D'ECRITURE < DIRECTE ??? XWOR%1: VAL COSBT?BITPAR=FMASK(K=FCINST ORI XWOR%1 < PREPARATION A PRIORI DU CODE < D'ERREUR ('93). JE E942Y < OUI,ABANDON STZ VAR+CARIN < SINON, ON PREPARE UN RETOUR < OK A PRIORI (CARIN=K). < < BOUCLE D'ECRITURE DIRECTE : < Z920: EQU $ LBY &VAR+RBUVI < ACCES A UN CARACTERE. CPI KEON < EST-CE LE LIMITEUR DE FIN DE < MESSAGE ('EOT') ??? JE Z955X < OUI, FIN DE L'ECRITURE DIRECTE : < A NOTER QU'ON FAIT UNE SORTIE < IMMEDIATE DU HANDLER ET QUE < CARIN EST DEJA POSITIONNE < SOIT A 0 (SI OK), SOIT A < '13 (SI CTRL-X-OFF). LR A,B < SINON (B)=CARACTERE A EMETTRE. Z955XX: EQU $ < EMISSION D'UN 'EOT'... BSR VAR+AWVISU < EMISSION DU CARACTERE SANS < EXPANSION, NI EXTENSION !!! CPI KDC3 < UN CTRL-X-OFF A-T'IL ETE RECU ??? JNE Z922 < NON. STA VAR+CARIN < OUI, ON PREPARE UN RETOUR < EN ERREUR EN FAISANT CARIN='13, < MAIS CELUI-CI NE SE FERA QUE < LORSQUE L'ECRITURE DIRECTE < SERA ACHEVEE. Z922: EQU $ ADRI I,X < PROGRESSION DE L'INDEX < DU BUFFER. CPR X,Y < EST-CE FINI ??? JG Z920 < NON, ON CONTINUE. < < < S O R T I E I M M E D I A T E < D U H A N D L E R V I S U S : < < Z955: EQU $ LA VAR+CARIN < RECUPERATION DES CONDITIONS < D'EXECUTION DE L'ECRITURE < DIRECTE RANGEES DANS 'CARIN'. STA ETAT0 < ET TRANSMISSION PAR ETAT0. JMP Z700Z < VERS LE TEST DU ALT-MODE, < ET LA SORTIE DU HANDLER. Z955X: EQU $ CPZR X < 'EOT' EST-IL LE PREMIER CARACTERE ??? JG Z955 < NON, DONC FIN DE CHAINE... < < VIDAGE DU BUFFER D'ANTICIPATION : < PSR X < SAUVEGARDE DE L'INDEX CARACTERE COU- < RANT, ON NE SAIT JAMAIS... SVC SVCM10 < ET VIDAGE DU BUFFER D'ANTICIPATION... PLR X < (X)=INDEX DU BUFFER... JMP Z955 < ET ON SORT SANS EMETTRE LE CARACTERE < 'EOT' CONTRAIREMENT A AUTREFOIS... PAGE < < < E N T R Y H A N D L E R V I S U : < < HDLVIS: EQU $ YYTOVI:: VAL 4 < TIME-OUT ARBITRAIRE FORCE LORSQU'UN < TIME-OUT EST DEMANDE POUR L'ECHANGE < COURANT, < A L'AIDE DU BIT 'ZBTOVI' DE 'OPDEM'... XWOR%1: VAL COSBT?ZBTOVI=FMASK(K=FCINST IF XWOR%1(MKOPDM-K,,XEIF%, IF ATTENTION : IL Y A UN RECOUVREMENT FACHEUX IF ENTRE 'MKOPDM' ET 'ZBTOVI' !!! XEIF%: VAL ENDIF IF XWOR%1(XMDSLO-K,,XEIF%, IF ATTENTION : IL Y A UN RECOUVREMENT FACHEUX IF ENTRE 'XMDSLO' ET 'ZBTOVI' !!! XEIF%: VAL ENDIF LA ARGDEM+OPDEM TBT ZBTOVI < TIME-OUT DEMANDE ??? RBT ZBTOVI < DANS TOUS LES CAS ON RAZE L'INDICATEUR, STA ARGDEM+OPDEM < ATTENTION, ON MODIFIE 'OPDEM' !!! LR A,X < (X)=FONCTION D'APPEL DE 'HDLVIS'... JNC E825Y < NON, PAS DE TIME-OUT... CPZ TESTO < COMMENT EST LE TIME-OUT COURANT ??? JNE E825Y < DEJA POSITIONNE, C'EST LUI QUI L'EM- < PORTE SUR 'YYTOVI'... LAI YYTOVI < OUI, STA TIMOUT < IL SUFFIT D'ECRASER BRUTALEMENT LE < COMPTEUR COURANT PUISQUE S'IL LE FAUT, < 'HANDLR' LE RESTAURERA... STA TESTO < AUCUNE IMPORTANCE, CAR EN EFFET : < 1 - OU BIEN ON RERENTRERA PAR UN 'RETRY' < DANS LE HANDLER, MAIS COMME ON A RAZE < 'ZBTOVI', CETTE OPERATION NE SERA PAS < ITEREE ; IL VAUT DONC MIEUX QUE 'TESTO' < SOIT ECRASE... (DE TOUTE FACON, 'HANDLR' < LA EMPILE AVANT LES ITERATIONS...), < 2 - DE TOUTE FACON, IL N'Y A PAS DE < RETRY SUR LES VISUS !!! E825Y: EQU $ LR X,A < (A)=FONCTION D'APPEL DE 'HDLVIS' : CPI FAVCU < EST-CE LA MISE EN FONCTION DU CURSEUR < GRAPHIQUE ??? JNE E825Y1 < NON, OK... CPZ ARGDEM+AMDEM < OUI, ALORS L'AMDEM EST-IL BIEN NUL ??? < EN EFFET, CE TEST S'IMPOSE, CAR 'FAVCU' < ET 'FAVRC' DONNENT TOUS DEUX NAISSANCE < A LA MEME FONCTION INTERNE 'FIVCU'/ < 'FIVRC' ; APRES, DANS 'HDLVIS', C'EST < LA NULLITE DE 'AMDEM' QUI FAIT TOUTE < LA DIFFERENCE ==> SI ALORS ARRIVE < UNE DEMANDE 'FAVCU' AVEC (AMDEM)#0, ELLE < SERA TRAITEE EN FAIT COMME UNE DEMANDE < 'FAVRC' QUI EST UNE LECTURE VRAIE, < QUI PROVOQUERA DANS 'HDLSER' UN APPEL < A 'HDLMEM' ; OR DANS LE CAS DE 'FAVCU', < 'AMDEM' NON NUL N'A AUCUNE SIGNIFICATION < DU TYPE ADRESSE MEMOIRE, ET EN PARTICU- < LIER N'EST PAS TRANSLATEE ; D'OU UN < PLANTAGE POSSIBLE DU SYSTEME. IL A FALLU < ATTENDRE BEAUCOUP D'ANNEES POUR QU'IL < SE PRODUISE ENFIN !!! JNE E825Y2 < 'AMDEM' N'EST PAS NUL, ON SORT EN ERREUR < POUR FONCTION NON RECONNUE !!! E825Y1: EQU $ E825: EQU $ < ENTREE DE REBOUCLAGE LORS < DE LA LECTURE DES COORDONNEES < DU CURSEUR ALPHA-NUMERIQUE. LBY &ACFOVI < CODAGE DE LA FONCTION. CPI FIVWD < VALIDATION DE LA FONCTION. JE VISUWD < DEROUTEMENT IMMEDIAT POUR < DEMANDE D'ECRITURE DIRECTE. JL SYSR11 < FONCTION OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < PEUT-ETRE 'JMP HDLVIS', AU < CAS OU 'OPDEM' AURAIT ETE < MODIFIE A LA MAIN... < SYSR11: EQU $ LR A,X < (X)=FONCTION DEMANDEE. < < TEST D'ACCESSIBILITE DE LA FONCTION DEMANDEE : < LA ETAT1 < POUR TEST DES BITS0-8(ETAT1). TBT L,X < (X)=FONCTION DEMANDEE. JC Z1180 < OK, LA FONCTION EST ACCESSIBLE. < < CAS D'UNE FONCTION INACCESSIBLE : < LXI FIVALT CP &VISOTO < EST-ON EN FAIT DANS L'ETAT < INTERNE ('0A) MIS A LA SUITE < D'UN ALT-MODE, ET INTERDISANT < LA FONCTION 'OG' ??? JNE E772 < NON VERS LE RETOUR EN ERREUR. SBT FIVOG < SI OUI, ON AUTORISE 'OG' POUR < LES APPELS DU HANDLER DE CETTE < VISU ('OG'=FONCTION INTERNE 5). < (APPELS ULTERIEURS !!!) STA ETAT1 < MISE A JOUR DE ETAT1. JMP E772 < PUIS VERS LE RETOUR EN ERREUR. E825Y2: JMP ERVI11 < RELAI 'FONCTION INEXISTANTE'... < < CAS D'UNE FONCTION ACCESSIBLE : < Z1180: EQU $ LA &VISOTO < MAJ DE L'AUTOMATE DE LA VISU, < EN VUE DE L'APPEL SUIVANT. STA ETAT1 LA &ARVISU < (A)=@MODULE SPECIFIQUE DE < TRAITEMENT DE LA FONCTION. PSR A < EMPILEMENT DE L'ADRESSE EN < VUE DE FAIRE UN RSR, POUR SE < BRANCHER DANS LA ROUTINE < SPECIFIQUE. < < INITIALISATION DU COUPLEUR : < BSR AINICV < MIEUX VAUT TROP QUE PAS ASSEZ... < < PREPARATION DE L'OPERATION : < LA ARGDEM+AMDEM < ACCES A L'ADRESSE D'OCTET DU < BUFFER. BSR AMEM < RENVOIE : < (A)=RELAI INDIRECT INDEXE VERS < LE BUFFER, < (X)=K OU 1, SUIVANT QUE LE 1ER < PREMIER OCTET DU BUFFER EST < L'OCTET GAUCHE OU DROIT. STA VAR+RBUVI LY ARGDEM+CODEM < DANS Y, ON MET LE NBRE D'OCTETS < DEMANDES. ADR X,Y < PUIS DANS Y LE RANG +1 DU DERNIER < CARACTERE A ECHANGER. < < < T R A I T E M E N T D E L A F O N C T I O N : < < RSR < ... Z700Z: JMP Z700 < RELAI... PAGE < < < E C R I T U R E S U R V I S U : < < < FONCTION D' E X P A N S I O N : < LORSQU'UN CARACTERE A SON BIT0 A 1, < ET QUE SON CODE EST INFERIEUR A CELUI < DU 'SPACE' ('20 OU 'A0), CE CARACTERE EST < PRIS COMME UN COMPTE DE DUPLICATION < DU CARACTERE SUIVANT : < PAR EXEMPLE : '8AC3, PERMETTRA < D'AFFICHER 10 ('A) FOIS LA < LETTRE "C" ('C3). < CONSEQUENCES : TOUS LES 'CTRL-XXX' AYANT < LE BIT0 A 1 SONT PRIS COMME DES < COMPTE D'EXPANSION. < NOTA : < LE CODE D'EXPANSION '80 PERMET DE REPETER < A L'INFINI LE CARACTERE SUIVANT, ET CECI < JUSQU'A CE QU'UN 'ALT-MODE', OU UN < 'CTRL-X-OFF' SOIT FRAPPE SUR LE CLAVIER... < < < A T T E N T I O N : < LES EXTENSIONS/EXPANSIONS SONT < INHIBEES SI INEXEX>0, ET AUTORISEES < SI INEXEX=K. < DE PLUS, LES CARACTERES D'EXTENSION < AYANT LE BIT DE PARITE A 1, NE SONT < PAS PRIS COMME DES EXTENSIONS, MAIS < CODE DES CODES ASCI NORMAUX... < < E61: EQU $ < < TEST SUR UN CTRL-X-OFF AYANT PRECEDE LA SORTIE : < LA VAR+DCARLU < ACCES AU DERNIER CARACTERE ENTRE. XWOR%1: VAL COSBT?BITPAR=FMASK(K=FCINST CPI KDC3 < EST-CE CTRL-X-OFF ??? ORI XWOR%1 < MEMORISATION EVENTUEL DE < 'ABORT SORTIE AVANT QU'ELLE < NE COMMENCE' !!! JNE E942X < NON, PAS DE CTRL-X-OFF HORS ECHANGE... E942Y: EQU $ < ENTREE POUR LES ECRITURES DIRECTES. PSR A < SAUVEGARDE DU CODE D'ERREUR, LBI ETANXT < PUIS LECTURE DE CE CTRL-X-OFF, AFIN BSR VAR+AWITVI < DE NE PAS RETOMBER DESSUS AU COUP < SUIVANT !!! PLR A < (A)=CODE D'ERREUR, JMP E952 < VERS LA SORTIE EN ERREUR... E942X: EQU $ XXVDUP:: VAL W < NOMBRE DE DUPLICATIONS A PRIORI... LBI XXVDUP < A PRIORI CHAQUE CARACTERE N'EST < PAS DUPLIQUE. E942: EQU $ LA ETAT1 < ACCES A ETAT1 POUR SAVOIR SI < ON EST EN GRAPHIQUE (BIT2=K), < OU EN ALPHA-NUMERIQUE(BIT2=1). CPZ VAR+INEXEX < LES EXPANSIONS ET EXTENSIONS < SONT-ELLES AUTORISEES ??? JE Z1900 < ET OUI... RBT FIVW < LORSQUE LES EXPANSIONS/EXTENSIONS < SONT INHIBEES, ON FAIT CROIRE AU < HANDLER-VISU QU'IL EST EN < GRAPHIQUE (BIT2=K). Z1900: EQU $ TBT FIVW < TEST DU BIT DE LA FONCTION < 'ECRITURE ALPHA-NUMERIQUE'. BSR VAR+AVILBY < RECUPERATION 1 CARACTERE DANS < LE BUFFER. JC Z1300 < LORSQU'ON EST EN ALPHA-NUMERIQUE, < ON TESTE LES EXTENSIONS ET < LES EXPANSIONS. < < CAS DU GRAPHIQUE : LES OCTETS RECUPERES DANS < LE BUFFER DOIVENT ETRE EMIS TEL QU'ILS SONT : < (OU CAS DES EXTENSIONS/EXPANSIONS INHIBEES PAR INEXEX>0) < PSR B < SAVE (B)=1 (COMPTE DE DUPLICATION). LR A,B < (B)=CARACTERE A EMETTRE. JMP E951 < VERS L'EMISSION DU CARACTERE (B). < < CAS DE L'ALPHA-NUMERIQUE : TEST DES < EXPANSIONS ET DES EXTENSIONS : < Z1300: EQU $ TBT BITPAR JNC E945 < BIT8=K : CE NE PEUT ETRE UN < CODE D'EXPANSION. XWOR%1: VAL COSBT?BITPAR=FMASK(K?KSP=FCINST CPI XWOR%1 < DANS LE CAS OU BIT8=1, IL FAUT < TESTER LA VALEUR DU CARACTERE PAR < RAPPORT A CELLE DE 'SPACE'. JL E943 < BIT8=1 ET CODE<'A0 : EXPANSION. E945: EQU $ PSR B < SAVE COMPTE D'EXPANSION. LR A,B < (B)=CARACTERE A ECREIRE. < < TEST DE CARACTERES EXTENSION : < TBT BITPAR+NBITMO < LE BIT DE PARITE EST-IL LA ??? JC E951 < LE BIT DE PARITE EST A 1, MAIS CE N'EST < PAS UNE EXPANSION, C'EST DONC UN CODE < ASCI NORMAL... XXVX1:: VAL L+I XXVX2:: VAL XXVX1+I XWOR%1: VAL EXT6D XWOR%2: VAL BITPAR+XXVX1 XWOR%1: VAL COSBT?XWOR%2=FMASK(K?XWOR%1=FCINST XWOR%2: VAL BITPAR+XXVX2 XWOR%1: VAL COSBT?XWOR%2=FMASK(K?XWOR%1=FCINST IF XWOR%1-K6D,,XEIF%, IF ATTENTION : LA VALEUR CALCULEE DE 'K6D' DANS LES IF LISTES D'EXTENSION NE COINCIDE PAS A LA VALEUR IF PRESUMEE AU DEBUT DU SYSTEME !!! XEIF%: VAL ENDIF TBT BITPAR+XXVX1+NBITMO JNC E951 < CE NE PEUT ETRE UNE EXTENSION. TBT BITPAR+XXVX2+NBITMO JC EXTEND < (B) EST UN CARACTERE D'EXTENSION. < BIT1=BIT2=1 DANS UNE EXTENSION. E951: EQU $ BSR VAR+AWVISU < ECRITURE DU CARACTERE (B). E949: EQU $ PLR B < RESTAURE (B)=COMPTE D'EXPANSION. JANE E949X < CE N'EST PAS LE 'BREAK'... XR A,X < OUI, C'EST LE 'BREAK', ALORS OU EN CPI NOCMO-Z < EST-ON DE LA SORTIE ??? XR A,X ADCR A < (A)='BREAK'+1 SI (X)EST IDIOTE !!! XEIF%: VAL ENDIF LR A,X < (X)=ID. LB &ATBU < (B)=@DCT-ESCLAVE. CPZR B < VALIDATION @DCT-ESCLAVE. JL E842 < 'ALT-MODE' IGNORE : UN < 'END-JOB' EST EN COURS, ET < L'IOID DE LA VISU EST ENCORE < ATTACHE A L'ESCLAVE DONT < L'ADRESSE DE DCTESC EST DONNEE < PAR LES BITS 1-15(B). JG SYSR12 < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < PEUT-ETRE LE MIEUX SERA-T'IL < D'IGNORER LE ALT-MODE PAR UN < 'JMP E842'... < SYSR12: EQU $ < ON A ICI : < (B)=ADRESSE DCT-ESCLAVE. LR B,L < (L)=@DCT-ESCLAVE. LA IDESC-DCTESC,L TBT IDESCA < TEST D'INHIBITION DE LA FONCTION < DU 'ALT-MODE'. JC E842 < EFFECTIVEMENT, IL FAUT IGNORER < CE 'ALT-MODE'. TBT IDESCW < TEST DE SUSPENSION D'UN ESCLAVE < DANS CCI PAR SON HANDLER DE < SERVICE. JC E841 < OUI, IL FAUT REVEILLER CET < ESCLAVE QUI DEMANDE A EMETTRE < SUR LE RESEAU. < < A L T - M O D E D ' A B O R T : < < < TEST D'UN 'ALT-MODE' DEJA EN TRAITEMENT : < LA FSERV-DCTESC,L < ACCES A FSERV DANS DCTESC. JANE Z1211 < FSERV#0 : IL Y A DEJA UNE < ROUTINE DE FIN DE SERVICE, < CE ALT-MODE EST DONC IGNORE !!! < < CAS OU IL N'Y A PAS DE ALT-MODE EN COURS DE TRAITEMENT : < < ON A ICI : < (L)=ADRESSE DCT-ESCLAVE. LR L,Y < SAVE L'ADRESSE DE LA DCT-ESCLAVE < DANS Y. PLR L < RESTAURE (L)=@DCT-VISU. < < REINITIALISATION DE L'ETAT DE LA VISU : < LXI FIVALT < FONCTION INTERNE 'ALT-MODE' < (=CG, AVEC OG INHIBE) !!! < AINSI UN ALT-MODE SURVENANT < ENTRE UN SVC 'OG', ET LA MISE < EN FILE DE L'OG, METTRA < MALGRE TOUT LA VISU EN ALPHA- < NUMERIQUE. LA &VISOTO < POUR REINITIALISATION DE < L'ETAT1 DE CETTE VISU. STA ETAT1 < MAJ ETAT1. LBI KUS < CARACTERE 'US'. BSR VAR+AWVISU < MISE EVENTUELLE EN MODE ALPHA- < NUMERIQUE DE LA VISU. < < BOUCLE D'ATTENTE D'UN EVENTUEL 2EME < ALT-MODE PAR EMISSION DE CARACTERE DE < TEMPORISATION, QUI POUR DES RAISONS LIEES < AUX LIGNES BOUCLEES ET AU 'BREAK', NE < PEUT PLUS ETRE LE 'NULL' CONTRAIREMENT < A CE QUI EST ECRIT DANS LES COMMENTAIRES < QUI SUIVENT... < LX VAR+BOALT < (X)=NBRE DE CARACTERES 'KTEMPO' < A EMETTRE POUR TEMPORISER. LBI KSI < CTRL-O : POUR RETOUR EVENTUEL < AUX CARACTERES NORMAUX (CF. < 'ALERNATE MODE'). Z1130: EQU $ BSR VAR+AWVISU < EMISSION DU 'NULL' : CETTE < SOLUTION PAR RAPPORT A CELLE < DU 'DODO' PRESENTE 2 AVANTAGES : < 1- ON EST SUR DE LA DUREE, ALORS < QU'AVEC 'DODO' ON PEUT PRENDRE < LE TRAIN EN MARCHE... < 2- AVEC WVISU, ON APPELLE WITVI < QUI PERMET DE RECUPER LE 2EME < ALT-MODE EVENTUEL. LBI KTEMPO < (B)=CARACTERE DE TEMPORISATION. JDX Z1130 < SUITE DE LA TEMPORISATION. LA AGOBPE < LORS DU 1ER ALT-MODE, ON FAIT < UNE DEMANDE DE RETOUR AU < PROGRAME UTILISATEUR PAR PRESC ; CPZ VAR+IALTM < EST-CE VRAIMENT LE 1ER ALT-MODE??? JE Z1150 < OUI, ON VA DONC FAIRE UN < RETOUR AU PROGRAMME UTILISATEUR. < < CAS DU 2EME ALT-MODE RECU EN UN INTERVALLE < DE TEMPS FAIBLE (INFERIEUR AU TEMPS < NECESSAIRE POUR EMETTRE BAUDS/11/3 CARACTERES) : < STZ VAR+IALTM < RAZ DE L'INDICATEUR DES ALT-MODES < RECUS. LA AABORT < LORS DU 2EME ALT-MODE, ON FAIT < DEMANDE D'ABORT DU PROGRAMME < UTILISATEUR. < < MISE EN PLACE DE LA ROUTINE DE FIN DE SERVICE : < (A NOTER QUE CETTE FIN DE SERVICE PEUT < ETRE CELLE D'UN SERVICE DEMANDE EXPLICITEMENT < PAR L'ESCLAVE, OU IMPLICITEMENT PAR UNE < INTERRUPTION D'HORLOGE) < Z1150: EQU $ XR Y,L < (L)=@DCT-ESCLAVE, ET SAVE < L'@DCT-VISU DANS Y. BSR AFSERV < POSITIONNEMENT FSERV AVEC (A), AVEC TEST < TEST D'UNE TRAPPE EN COURS (CAR LA ROUTI- < NE DE FIN DE SERVICE ANNULERAIT LE CHAR- < GEMENT DES REGISTRES REALISES PAR LA < GESTION DES TRAPPES ; ON FAIT APPEL A < 'FSERV', CAR CE TEST NE TENAIT PAS ICI... < < NOTA : < ON NE FAIT PAS 'ADOWN', CAR < EN EFFET D'UNE PART CELA COMPLIQUE < LES CHOSES (INTERFERENCES AVEC < L'HORLOGE), MAIS SURTOUT ON FAIT < UN 'FSERV' QUI EST EXPLOITE PAR < L'AUTOMATE DE SERVICE QUI SERA < AUTOMATIQUEMENT DECLENCHE LORS DE < LA PROCHAINE INTERRUPTIOON D'HORLOGE... < LR Y,L < RESTAURE (L)=@DCT-VISU. < < FIN DU TRAITEMENT : < Z1210: EQU $ < ENTRY UTILISEE LORSQUE FSERV < EST DEJA POSITIONNE (CAS EN < PARTICULIER DES ALT-MODES < FRAPPES SOUS LE CCI). LAI EVALT < (A)=CODE-ERREUR DE SORTIE... JMP Z701 < VERS LA SORTIE EN ERREUR DU < HANDLER ; A NOTER QUE SI UN < 2EME ALT-MODE EST APPARU, ON < VA REVENIR IMMEDIATEMENT < DANS CE MODULE PAR LE TEST < SUR IALTM QUI SE TROUVE A LA < SORTIE DE HDLVISU. < < A L T - M O D E D E R E V E I L D ' U N < E S C L A V E S U S P E N D U D A N S C C I < P A R S O N H A N D L E R D E S E R V I C E : < E841: EQU $ SBT IDESCA < INHIBITION PROVISOIRE DE LA < FONCTION DU 'ALT-MODE POUR < CET ESCLAVE. RBT IDESCW < REVEIL ESCLAVE. STA IDESC-DCTESC,L < FIN DE SUSPENSION ESCLAVE. LBY DEMSER-DCTESC+XXNSP,L XWOR%1: VAL MOCG=K XWOR%1: VAL -XWOR%1 < POUR UN DECALAGE A DROITE. XWOR%1: VAL MSKNSP>XWOR%1 ANDI XWOR%1 < (A)=NSP DU HANDLER DE SERVICE < TRAVAILLANT POUR CET ESCLAVE. JANE SYSR13 < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < PEUT-ETRE LE MIEUX SERA-T'IL < DE NE PAS FAIRE DE REVEIL PAR < UN 'JMP E842'... < SYSR13: EQU $ LR A,X < (X)=NSP DU HANDLER DE SERVICE. BSR ACADCT < (L)=@DCT DE SERVICE ASSOCIEE. BSR ARIT < REVEIL DU HANDLER DE SERVICE. E842: EQU $ PLR L < RESTAURE (L)=@DCT-VISU. JMP E63 PAGE < < < O P E N G R A P H I Q U E : < < VISUOG: EQU $ LBI KGS < ENVOI DE 'GS'. E758: EQU $ LA VAR+DCARLU < ACCES A L'EVENTUEL DERNIER < CARACTERE ENTRE. XWOR%1: VAL COSBT?BITPAR=FMASK(K=FCINST CPI KDC3 < EST-CE UN CTRL-X-OFF ??? ORI XWOR%1 < MEMORISATION EVENTUELLE D'UN < CTRL-X-OFF HORS-ECHANGE (AVANT < LA SORTIE...) JE E952 < RETOUR EN ERREUR POUR CTRL-X-OFF < HORS-ECHANGE. BSR VAR+AWVISU < ECRITURE DU CARACTERE (B). CPI KDC3 < EST-CE CTR-X-OFF ??? JE E952 < OUI, RETOUR EN ERREUR. JMP EE63 < ET C'EST TOUT... < < < C L O S E G R A P H I Q U E : < < VISUCG: EQU $ LBI KUS < CARACTERE 'US'. JMP E758 < VERS L'ECRITURE DU CARACTERE. < < < E F F A C E M E N T D E L ' E C R A N : < < VISUER: EQU $ LBI KESC < CARACTERE 'ESC'. BSR VAR+AWVISU < ECRITURE DE 'ESC'. LX VAR+BOERA < NBRE DE CARACTERES A 11 MOMENTS < A EMETTRE (1 'HOME'+(X) 'KTEMPO') LBI KFF < CARACTERE 'HOME'. E759: EQU $ BSR VAR+AWVISU < ECRITURE DU CARACTERE (B). LBI KTEMPO < (B)=CARACTERE DE TEMPORISATION. JDX E759 < BOUCLE DE TEMPORISATION. LA MEMV < ACCES AU CONTROLE DU SYSTEME... TBT XXXJFC < FAUT-IL SIGNER ??? JC E759X < OUI, ON Y VA... EEEE63: JMP EE63 < NON, C'EST FINI... PAGE < < < L E C T U R E G R A P H I Q U E : < < < RESULTAT : < ON RENVOIE AU DEMANDEUR DANS SON BUFFER : < - OCTET0=CARACTERE < FRAPPE PAR L'ESCLAVE POUR ENVOYER < LE CURSEUR GRAPHIQUE, < OU ETAT DU TERMINAL DANS LE CAS < DU CURSEUR ALPHA-NUMERIQUE, < BIT3=K : HARD COPY IN WORKING < ORDER (=1 IF NOT), < BIT4=K : LINEAR INTERPOLATION OFF, < BIT5=K : MODE GRAPHIQUE, < =1 : MODE ALPHA-NUMERIQUE, < BIT6=K : MARGIN LEFT (K), < =1 : MARGIN RIGHT (1), < BIT7=K : AUXILIARY DEVICES AT- < TACHED IN ACTIVATION, < - OCTET1=K, < - MOT1=COORDONNEE 'Y' DU CURSEUR < GRAPHIQUE OU ALPHA-NUMERIQUE, < - MOT2=COORDONNEE 'X'. < < < NOTA : < LE 'CODEM' (Y) DOIT ETRE < SUPERIEUR OU EGAL A 6, LES < OCTETS RESIDUELS ETANT IGNORES ; < ON NE PEUT ACCEPTER DES LON- < GUEURS INFERIEURES A 6 POUR DES < RAISONS EVIDENTES DE PROTECTION < MEMOIRE... < < < A T T E N T I O N : < DANS LE CAS DU CURSEUR GRAPHIQUE, < LA CONNAISSANCE DE SES COORDONNEES < SE FAIT PAR L'INTERMEDIARE DE DEUX < DEMANDES SUCCESSIVES : 'CU'+'LG', < ALORS QUE POUR LE CURSEUR ALPHA- < NUMERIQUE, SEULE LA DEMANDE 'CU' < (AVEC (AMDEM)#0) SUFFIT... < < VISULG: EQU $ <******************************************************************************* XWOR%1: VAL -I < INITIALISATION D'UN COMPTEUR : XXVM0:: MOT '0@@@@+D < MOT0 DU BUFFER (CARACTERE DE DEBLOCAGE), XXVM1:: MOT '0@@@@+D < MOT1 DU BUFFER (COORDONNEE X), XXVM2:: MOT '0@@@@+D < MOT2 DU BUFFER (COORDONNEE Y). <******************************************************************************* XXVD4:: VAL LK < DIMENSION DE L'ECRAN GRAPHIQUE... < (X=Y). <******************************************************************************* XWOR%F: VAL XXVD4 SIZXVI: @VAL '0@@@@ < TAILLE HORIZONTALE DE L'ECRAN VISU. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL XXVD4 SIZYVI: @VAL '0@@@@ < TAILLE VERTICALE DE L'ECRAN VISU. CALL #SISP CMS5 GEN CTE# <******************************************************************************* XXVD1:: VAL XXVD4=K/XXXMOY < DECALAGES DE XXVD2:: VAL NBITOC-XXVD1 < DECONCATENATION XXVD3:: VAL NBITMO-XXVD1 < DES COORDONNEES. XXVTOG:: VAL 2 < VALEUR INITIALE DU DECOMPTEUR DE TIME < OUT IMPOSE SUR LES VISUS LORS DES < LECTURES GRAPHIQUES ; EN EFFET, SI ALORS < QUE LE RETICULE EST VISUALISE, L'UTILI- < SATEUR FAIT PAGE, ALORS, LES OCTETS DE < COORDONNEES NE SONT PAS ENVOYES, ET ON < SE MET A ATTENDRE... < ATTENTION : ON PREND 2 ET NON PAS 1 < CAR ON RISQUERAIT AINSI DE VOIR DES < INTERRUPTIONS D'HORLOGE PASSER AVANT < L'UN DES CARACTERES DE COORDONNEES, < DECRETANT AINSI UN TIME OUT !!! XXVCLG:: VAL KAROND < PREMIER CODE-CARACTERE QUI NE PEUT ETRE < EMIS PAR LA VISU LORS DE LA LECTURE < GRAPHIQUE... IF KALTM-XXVCLG,,XEIF%,XEIF% IF ATTENTION : ON RISQUE DE RECEVOIR DES CODES DE IF 'ALT-MODE' LORS DES LECTURES GRAPHIQUES !!! XEIF%: VAL ENDIF CPZR X JNE E760 < ERREUR SUR L'@BUFFER. LA ARGDEM+CODEM < (A)='CODEM' ARGUMENT, CPI XXVXY*NOCMO+NOCMO JL E760 < 'CODEM' EST INVALIDE CAR INFERIEUR < AU NOMBRE D'OCTETS ATTENDUS... LBI ETANXT < POUR TEST DU BIT 14 DU MOT D'ETAT. BSR VAR+AWITVI < ATTENTE DU 1ER CARACTERE DE < L'UTILISATEUR, INDIQUANT QUE < LE CURSEUR GRAPHIQUE EST BIEN < POSITIONNE. SWBR A,A < CADRAGE A GAUCHE ET OCTET1=K. <******************************************************************************* BSR ASIMUL < SIMULATION DE L'INSTRUCTION SUIVANTE : STA &VAR+RBUVI < LE CARACTERE DE DEBLOCAGE EST <******************************************************************************* < RENVOYE EN MOT0 DU BUFFER < (BITS 8-15=K). LXI XXVM1*NOCMO < POUR COMMENCER SUR L'OCTET2 < DU BUFFER. LYI XXVXY*NOCMO+NOCMO < LECTURE DES 6-2 OCTETS DE < COORDONNEE GRAPHIQUE. STY ARGDEM+CODEM < LE CODEM DE LA DEMANDE RECOIT < 6 LORS D'UNE LECTURE GRAPHIQUE < POUR EVITER LES ENNUIS LORS < DE L'OMOV2 SUIVANT L'EVENTUEL < SWAPPING IN ESCLAVE. LA TESTO PSR A < SAUVEGARDE DU 'TESTO' COURANT... LA TIMOUT < ET DU 'TIMOUT', MAIS PAS DANS 'B' PSR A < CAR IL Y A 'ETANXT'... LA ETAT0 < ACCES A L'ETAT CORRESPONDANT AU < CARACTERE DE DEBLOCAGE... TBT ETADOG < EST-CE UN TIME-OUT ??? JC E774X1 < OUI, INUTILE D'ATTENDRE LA SUITE... LAI XXVTOG STA TESTO < MISE EN PLACE D'UN 'TESTO' SPECIAL 'LG'. STA TIMOUT < POUR DECOMPTER BIEN SUR !!! STBY VAR+CARALT < DE PLUS, ON INHIBE AINSI LES TESTS < SUR 'CARALT' ; EN EFFET, LE 'CARALT' < PEUT VALOIR L'UN DES CODES D'ENTREE < GRAPHIQUE !!! IF XXVTOG-K,,,XEIF% IF ATTENTION : CE QUI PRECEDE EST IDIOT !!! XEIF%: VAL ENDIF E774: EQU $ BSR VAR+AWITVI < LECTURE DES COORDONNEES PAR OCTET. CPI KALTM < EST-CE UN TIME OUT ??? JE E774X < OUI, ON ARRETE ICI... BSR VAR+AVISBY < SAVE DANS LE BUFFER. ADRI I,X CPR X,Y JG E774 < OCTET SUIVANT.