< 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