PAGE
         EOT         #SIP DEFINITION CMS5#
NMPROC:  VAL         "XX"            < ????!!! (A CAUSE DE #CTE ITEM#)
         IF          ORDI-"T",XWOR%,,XWOR%
         IDP         "MASK - VERSION T1600 SOUS CMS4"
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         IDP         "MASK - VERSION SOLAR SOUS CMS5"
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
SVCM1:   VAL         '01             < CODE DU 'SVC' MAITRE PERMETTANT LE
                                     < RELEASE D'UN SEMAPHORE.
XWOR%:   VAL         0
         EOT         #SIP DEFINITION ITEM#
<
<
<        P I L E   D E   R E C U R S I V I T E  :
<
<
<        FORMAT :
<                      LA PILE 'PIR' EST FAITE D'ENTREE DOUBLE-
<                    MOTS ASSURANT LA RECURSIVITE DU LANGAGE
<                    DE DESCRIPTION DES SCENARI.
<
<
IR:      VAL         0               < MOT0 : CAUSE DE L'EMPILEMENT :
                                     < BIT1=1 : PUSH POUR REPETITIONS ,
                                     < BIT2=1 : PUSH POUR APPEL PROG.,
                                     < BIT3=1 : PUSH POUR SAUT PROG.
CODREP:  VAL         '40             < PUSH POUR REPETITIONS.
BITREP:  VAL         1               < BIT DE REPETITIONS.
CODPRO:  VAL         '20             < PUSH POUR APPEL PROGRAMME.
BITPRO:  VAL         2               < BIT APPEL PROGRAMME.
                                     < A T T E N T I O N  : BITPRO
                                     < UTILISE AVEC BITDEF SIGINFIE
                                     < QU'ON APPELLE UN PROGRAMME
                                     < AVEC CHGT D'ITEM COURANT.
CODDEF:  VAL         '10             < PUSH POUR DEFINITION PROGRAMME.
BITDEF:  VAL         3               < BIT DE SAUT DEFINITION PROG.
CDCP:    VAL         1               < MOT1 : COMPTE DES 'DO' , ET
                                     < LE COMPTE ALGEBRIQUE DES
                                     < PARENTHESES.
CD:      VAL         2*CDCP+0        < OCTET0(MOT1)=NBRE DE REPETITIONS
                                     < RESTANT A FAIRE (INDEX DE TYPE
                                     < OCTET) ,
CP:      VAL         2*CDCP+1        < OCTET1(MOT1)=COMPTE ALGEBRIQUE
                                     < DES PARENTHESES RENCONTREES
                                     < SOUS CE NIVEAU :
                                     < '(' : +1 ,
                                     < ')' : -1.
LEPR:    VAL         2               < NBRE DE MOTS OCCUPES PAR UNE
                                     < ENTREE DE LA PILE PIR.
LPR:     VAL         12              < NBRE D'ENTREES DE PIR.
XPR:     VAL         LEPR*LPR-LEPR
<
<
<        D E S C R I P T E U R   V I S U - E S C L A V E S  :
<
<
         DSEC        VISESC
VISES:   EQU         $
MODE:    WORD        0               < 0 : VISU ASSIGNEE (!ASSIGN),
                                     < 1 : ASSIGNATION SIMULEE (NVP=).
NSPVIS:  WORD        0               < NSP DE LA VISU ASSIGNNE A
                                     < CET NVP : !ASSIGN NVP=NSP.
ADCTVI:  WORD        0               < @DCT DE CETTE VISU.
DUREE:   WORD        0               < DUREE RESTANT A PARCOURIR
                                     < JUSQU'A LA FIN D'UNE COMMANDE 'W'.
HORLOG:  WORD        0               < TEMPS COURANT EN MULTIPLE DE
                                     < 2 SECONDES.
NOCT:    WORD        0               < CODEM DE LA LECTURE COURANTE.
VIEG:    WORD        0               < INDEX COURANT DE L'ITEM
                                     < ASSOCIE A CETTE VISU.
NOMIT:   DZS         4               < NOM DE L'ITEM ASSOCIE.
CONST0:  EQU         $               < LISTE DES CONSTANTES SUR
                                     < LESQUELLES PEUVENT PORTER
                                     < DES OPERATIONS.
NCONST:  VAL         16              < NBRE DE CONSTANTES (0 A NCONST-1).
NCONSG:  VAL         NCONST-12       < NBRE DE CONSTANTES GLOBALES
                                     < (0 A NCONSG-1) PARMI LES
                                     < NCONST CONSTANTES.
         DZS         NCONST
CCONST:  WORD        0               < NUMERO DE LA CONSTANTE
                                     < COURANTE.
APRC:    WORD        PIR,X           < RELAI COURANT VERS PIR.
BPR:     WORD        PIR             < BASE DE PIR,
TPR:     WORD        PIR+XPR         < TOP DE PIR.
PIR:     EQU         $               < PILE DE RECURSIVITE.
         WORD        0;0             < BLOCAGE 1ERE ENTREE.
         DZS         XPR
LVISES:  VAL         $-VISES         < LONGUEUR DE LA PARTIE DU
                                     < DESCRIPTEUR A RAZER.
NVPVIS:  WORD        0               < NVP DE LA VISU.
NOMVIS:  BYTE        5;'6D
         ASCI        "NVPN"
LLVIS:   VAL         $-VISES         < LONGUEUR TOTALE DU CONTEXTE.
<
<
<        L O C A L  :
<
<
         TABLE
ZERO:    EQU         $
         DZS         'C
<
< INTERFACE DE '!CALL' :
<
NTASK:   ASCI        "MASK"
         BYTE        '04;'D0
         WORD        SIZE            < NOMBRE D'OCTETS NECESSAIRES.
ADEBUT:  WORD        DEBUT
         WORD        TASK            < ENTRY POINT DU MODULE.
         PROG
DEBUT:   EQU         $
         LRP         L
         BR          -1,L            < ENTRY DANS LE MODULE.
XDEBUT:  VAL         $-ADEBUT
         DZS         DEBUT-ZERO-XDEBUT
         JMP         DEBUT           < TOUT CECI POUR LA RAISON SUI-
                                     < VANTE : LORSQU'ON ARRIVE DE
                                     < !CALL, ON A : PRESC='10, ET SI
                                     < ON EFFECTUE UN ALT-MODE, ON
                                     < TOMBE SUR LE MOT ADEBUT, ASSIMILE
                                     < A UN 'JMP', QUI NOUS FERA
                                     < RETOMBER GRACE AU DZS QUI
                                     < PRECEDE SUR LE DEBUT DU PROGRAMM.
<
<
<        I T E M   C O U R A N T  :
<
<
NITEM:   WORD        0;0;0           < PAS D'ITEM COURANT.
         BYTE        '04;0
LNITEM:  VAL         $-NITEM
         DZS         LTN-LNITEM
ITEM:    DZS         LTNI-LTN
<
< LOCAL PROPREMENT DIT :
<
MMODE:   BYTE        10;" "
         ASCI        "(!ASSIGN) "
MITEM:   BYTE        5;" "
         ASCI        "ITEM"
MINEF:   BYTE        11;'6D
         ASCI        "NON EMISE!"
MVIS:    BYTE        4;"="
         ASCI        "VIS "
CSYS:    ASCI        "!L :SY"
         BYTE        "S";'04
LSYS:    VAL         $-CSYS*2
         LOCAL
LOC:     EQU         $
<
< MESSAGES DIVERS :
<
MSYS:    BYTE        7;'6D
         ASCI        "ACN???"
MARRET:  BYTE        4;" "
         ASCI        "FIN "
MERR:    BYTE        3;" "
         ASCI        "??"
MNUL:    BYTE        4;0;0;0;0       < "NULL"...
MERR1:   BYTE        1;0             < MESSAGE VARIABLE...
MRCLF:   BYTE        2;'6D;" ";0
AMMODE:  WORD        MMODE
AMITEM:  WORD        MITEM
AMINEF:  WORD        MINEF
AMVIS:   WORD        MVIS
MEGAL:   BYTE        1;"="
MENTER:  BYTE        7;'6D
         ASCI        "ENTER!"
MINTER:  BYTE        1;">"
MASS:    ASCI        "!ASSIGN "
         BYTE        0;"=";"S";'04
LMASS:   VAL         $-MASS          < LONGUEUR CARTE !ASSIGN.
<
< MOT DE PASSE :
<
         NLS
MPASS:   BYTE        '03;'1D
MPASS1:  BYTE        '00;":"
         ASCI        "SYS1470975114380:JFC"
MPASS2:  BYTE        '00;'10;'04;0
MAGIC:   WORD        7               < CONSTANTE MAGIQUE...
         LST
MALT:    BYTE        '7D;'84         < POUR L'ENVOI D'UN ALT-MODE.
<
< CONSTANTES DE L'UTILISATEUR ET DE LA VISU ASSIGNEE A '0B :
<
ESC1:    WORD        0               < NSPESC DE CET UTILISATEUR.
NSPIN:   WORD        0               < NSPIN DE CET UTILISATEUR.
<
< MESSAGE COURANT :
<
ABUF:    WORD        0               < RELAI RELATIF MESSAGE COURANT.
ABUFA:   WORD        0               < RELAI ABSOLU MESSAGE COURANT.
XBUF:    WORD        0               < INDEX COURANT MESSAGE COURANT.
BUF:     DZS         40
         BYTE        '04;0           < PAR PRUDENCE : CAS DES
                                     < MESSAGES SANS 'EOT'.
<
< RELAIS DIVERS :
<
AWORK:   WORD        0               < REALI DE TRAVAIL.
ASEND:   WORD        SEND            < ROUTINE MAITRE 'WRITE 1 CAR.'.
APRINT:  WORD        PRINT           < ROUTINE D'EMISSION MESSAGE.
ATEOT:   WORD        TEOT            < TEST FIN DE MESSAGE.
AGTCAR:  WORD        GTCAR           < ACCES CARACTERE POUR LES
                                     < CODAGES DE NOMS D'ITEM.
AGETCO:  WORD        GETCO           < DECODAGE BINAIRE 1-9, A-Z.
ACOD:    WORD        CODAGE          < CODAGE DES NOMS D'ITEM.
ATASK:   WORD        TASK
ASENDV:  WORD        SENDV           < ESSAI D'ENVOI A UNE VISU.
ATIME:   WORD        0               < @DE LA DATE/HEURE DU SYSTEME.
ANIT0:   WORD        NITEM+0
ANIT1:   WORD        NITEM+1
ANIT2:   WORD        NITEM+2
ANITEM:  EQU         ANIT0           < RELAI VERS LE NOM DE
                                     < L'ITEM COURANT.
ACOMD:   WORD        COMD,X          < TABLE D'ANALYSE DES COMMANDES.
KOMPT:   WORD        0               < COMPTEUR DES NVP INTERESSANTS.
LIMIT:   WORD        0               < CONTIENT EN TEMPORAIRE
                                     < LE CARACTERE COURANT DE FIN DE
                                     < MESSAGE EQUIVALENT A 'EOT'
                                     < POUR CHAQUE ITEM.
C10:     WORD        10
C16:     WORD        16
CFFF:    WORD        '0FFF           < RAZ DES BITS 0 A 3.
F3:      WORD        0               < FONCTION DE CODAGE NOMIT.
ALLVIS:  WORD        LLVIS           < LONGUEUR TOTALE DU CONTEXTE.
KCAR:    WORD        0               < COMPTEUR DES CARACTERES MESSAGES.
COMC:    WORD        0               < SAVE LA COMMANDE COURANTE.
IENTER:  WORD        0               < 0 : PAS DE 'I' EN COURS.
AMAJIE:  WORD        MAJIEG
AERR:    WORD        ERREUR
AERR1:   WORD        ERR1
AFSEND:  WORD        FSENDV
AANALY:  WORD        ANALYS          < ANALYSE DU MESSAGE COURANT.
AFINIT:  WORD        FINITE
AEXTAS:  WORD        EXTAS           < ROUTINE DE PARCOURS DE TASSGN.
BEXTAS:  WORD        MEXTAS          < PARCOURS MAITRE DE TASSGN.
AASIGN:  WORD        ASSIGN          < SIMULATION DES ASSIGNATIONS.
<
< DESCRIPTEURS VISUS-ESCLAVES :
<
ADESC:   WORD        DESC,X          < LISTE DES DESCRIPTEURS.
MDESC:   WORD        0               < ADESC ABSOLUTISE.
DESC:    EQU         $
         WORD        0               < NVP=0,
         WORD        0               < NVP=1,
         WORD        0               < NVP=2,
         WORD        NSP3,X          < NVP=3,
         WORD        NSP4,X          < NVP=4,
         WORD        NSP5,X          < NVP=5,
         WORD        NSP6,X          < NVP=6,
         WORD        NSP7,X          < NVP=7,
         WORD        NSP8,X          < NVP=8,
         WORD        NSP9,X          < NVP=9.
         WORD        0               < NVP=A,
         WORD        0               < NVP=B.
CDESC:   WORD        0               < @RELATIVE DESCRIPTEUR COURANT.
<
<        NOTA : LORSQUE LE BIT0 D'UN RELAI EST A 1,
<        CELA SIGNIFIE QUE LE NVP CORRESPONDANT
<        N'EST PAS ASSIGNE ; SI LE RELAI EST A 0,
<        LE NVP NE PEUT ETRE ASSIGNE.
<
<
< DEMANDES A CMS4 :
<
DEM1C:   WORD        '0101           < ENTREE 1 CARACTERE.
         WORD        BUF-ZERO*2
         WORD        1
DEMIN:   WORD        '0101           < LECTURE ASCI AVEC ECHO.
         WORD        BUF-ZERO*2
         WORD        80
DEMOUT:  WORD        '0202           < DEMANDE D'EDITION DE MESSAGES.
         WORD        0               < @OCTET DU MESSAGE.
         WORD        0               < NBRE DE CARACTERES DU MESSAGES.
CCI:     WORD        '0001           < ACCES AU CCI.
CCINT:   WORD        '0002           < APPEL CCI NON INTERACTIF.
         WORD        BUF-ZERO*2      < SUR LE MESSAGE COURANT.
         WORD        80
DSYS:    WORD        '0002           < ENVOI DE "!L :SYS"...
         WORD        CSYS-ZERO*2
         WORD        LSYS
SLEEP:   WORD        '0005;0;0       < DEMANDE DE TEMPORISATION.
SCH:     WORD        '0006           < DEMANDE DE RETOUR AU SCHEDULER.
<
< ACCES A L'ITEM COURANT :
<
IEG:     WORD        0               < INDEX COURANT DE L'ITEM.
AITEM:   WORD        ITEM,X          < RELAI D'ACCES A L'ITEM.
ANOMC:   WORD        0               < RELAI TEMPORAIRE VERS LE
                                     < NOMIT EN COURS DE CODAGE.
NCP:     WORD        NBCAR*NBLIG     < NBRE D'OCTETS D'UN ITEM.
DEMSGN:  WORD        '8502           < ACCES A UN ITEM.
         WORD        NITEM-ZERO*2
         WORD        2*LTNI
         WORD        -1
<
<        L I S T E   D E S   E V E N E M E N T S  :
<
LEVENT:  WORD        '0000;'0000     < 1 BIT PAR EVENEMENT (0-31).
<
<        P I L E   D E   T R A V A I L  :
<
STACK:   DZS         16
<
<        C O N T E X T E S   V I S U S  :
<
NSP3:    DZS         LVISES
         WORD        3
         BYTE        5;'6D
         ASCI        "NVP3"
NSP4:    DZS         LVISES
         WORD        4
         BYTE        5;'6D
         ASCI        "NVP4"
NSP5:    DZS         LVISES
         WORD        5
         BYTE        5;'6D
         ASCI        "NVP5"
NSP6:    DZS         LVISES
         WORD        6
         BYTE        5;'6D
         ASCI        "NVP6"
NSP7:    DZS         LVISES
         WORD        7
         BYTE        5;'6D
         ASCI        "NVP7"
NSP8:    DZS         LVISES
         WORD        8
         BYTE        5;'6D
         ASCI        "NVP8"
NSP9:    DZS         LVISES
         WORD        9
         BYTE        5;'6D
         ASCI        "NVP9"
<
<        L I S T E   D E S   C O M M A N D E S  :
<
COMD:    EQU         $-" "
         WORD        COMEN1          < 'SPACE'
         WORD        CARTC           < !
         WORD        ERR1            < "
         WORD        FDODO           < #
         WORD        ERR1            < $
         WORD        RECUR           < %
         WORD        ERR1            < &
         WORD        ERR1            < '
         WORD        BREC            < (
         WORD        ENDR            < )
         WORD        PPASS           < *
         WORD        CHGIT           < +
         WORD        ERR1            < ,
         WORD        SUPIT           < -
         WORD        ERR1            <.
         WORD        E10             < /
         WORD        ERR1            < 0
         WORD        COMPT           < 1
         WORD        COMPT           < 2
         WORD        COMPT           < 3
         WORD        COMPT           < 4
         WORD        COMPT           < 5
         WORD        COMPT           < 6
         WORD        COMPT           < 7
         WORD        COMPT           < 8
         WORD        COMPT           < 9
         WORD        ERR1            < :
         WORD        ERR1            < ;
         WORD        COMEN1          < <
         WORD        EOT             < =
         WORD        COMEN2          < >
         WORD        ERR1            < ?
         WORD        GCONST          < @
         WORD        ASSGN           < A
         WORD        ERR1            < B
         WORD        GOCCI           < C
         WORD        ERR1            < D
         WORD        ERR1            < E
         WORD        FINRAZ          < F
         WORD        ERR1            < G
         WORD        TEMPO           < H
         WORD        ENTERM          < I
         WORD        ERR1            < J
         WORD        ERR1            < K
         WORD        ERR1            < L
         WORD        ERR1            < M
         WORD        ERR1            < N
         WORD        ERR1            < O
         WORD        ERR1            < P
         WORD        ERR1            < Q
         WORD        EVENT           < R
         WORD        EVENT           < S
         WORD        EVENT           < T
         WORD        ERR1            < U
         WORD        ERR1            < V
         WORD        WTEMPO          < W
         WORD        SALTM           < X
         WORD        ERR1            < Y
         WORD        ERR1            < Z
         PROG
         USE         C,VISES
         PAGE
<
<
<        E M I S S I O N   M E S S A G E  :
<
<
<        ARGUMENT :
<                    A=@MOT DU MESSAGE.
<
<
PRINT:   EQU         $
         PSR         X,C
         LR          A,C             < C=@MESSAGE.
         ADR         A,A
         ADRI        1,A             < A=@OCTET DU MESSAGE.
         STA         DEMOUT+1
         LBY         0,C             < A=LONGUEUR DU MESSAGE.
         STA         DEMOUT+2
         LAD         DEMOUT
         SVC         0               < EDITION DU MESSAGE.
         PLR         X,C
         RSR
         PAGE
<
<
<        T E S T   F I N   D E   M E S S A G E  :
<
<
<        ARGUMENT :
<                    X=INDEX DE BUF, DONNE LE
<                      RANG DU CARACTERE A TESTER.
<
<
<        RESULTAT :
<                    A=CARACTERE TESTE (SI CELUI-CI
<                      ETAIT R/C, IL EST REMPLACE
<                      PAR 'EOT'),
<                    CODE DE CONDITIONS POSITION-
<                    NES POUR TEST EN RETOUR JE/JNE...
<
<
TEOT:    EQU         $
         LBY         &ABUF           < A=CARACTERE A TESTER.
         ANDI        '7F             < CARACTERE SUR 7 BITS.
         CPI         '04
         JE          TEOT1           < C'EST EOT...
         CPI         '0D
         JNE         TEOT1           < CE N'EST PAS R/C...
         LAI         '04             < C'EST R/C, ON LE
         STBY        &ABUF           < REMPLACE PAR 'EOT'.
TEOT1:   EQU         $
         RSR
         PAGE
<
<
<        S I M U L A T I O N   E N T R E E   M E S S A G E  :
<
<
         WORD        LOC+'80
TASK:    EQU         $               < ENTRY POINT DU MODULE.
DEB:     EQU         $
         LRP         L
         LA          -1,L
         LR          A,L
         LAI         DEBUT-ZERO
         WORD        '1EB5           < PRESC(ESCLAVE)<--'DEBUT'.
         LAD         STACK-1
         LR          A,K
<
< PLACONS-NOUS SI POSSIBLE SOUS ":SYS" :
<
DEB2:    EQU         $
         LAD         DSYS
         SVC         0               < ENVOI DE "!L :SYS" :
         JE          DEB1            < OK...
         LAD         MSYS
         BSR         APRINT          < IMPOSSIBLE,
         LAD         CCI
         SVC         0               < ON VA AU CCI,
         JMP         DEB2            < ET ON BOUCLE EVENTUELLEMENT...
DEB1:    EQU         $
         LAD         MENTER
         BSR         APRINT          < ENVOI D'UN MESSAGE AVANT LE CCI.
         LAD         CCI
         SVC         0               < ON RETOURNE AU CCI ; CECI SERA
                                     < SURTOUT UTILISE SUITE A UN
                                     < ALT-MODE, POUR FAIRE DES !ASSIGN.
<
< ACCES A LA DCT DE CET UTILISATEUR :
<
         WORD        '1E45           < RENVOIE : A=IDESC.
         ADRI        NSPESC,A
         SBT         0               < AFIN D'ACCEDER A DCTSY INDEXEE
                                     < PAR LE NSP DE CET UTILISATEUR.
         WORD        '1E15           < RENVOIE : B=@DCTESC.
         LR          B,A
         STA         ESC1            < SAVE @DCTESC.
         ADRI        YASSGN,A        < POUR ACCES AU NVP='01.
         WORD        '1E15           < RENVOIE : B='00,NSPIN.
         STB         NSPIN           < SAVE LE NSPIN DE CET UTILISATEUR.
<
< PREPARATION A L'ACCES A LA DATE/HEURE :
<
         LAI         NSPDAT
         SBT         0
         WORD        '1E15           < RENVOIE : B=@LISTE DES COMPOSAN-
                                     < TES DE LA DATE/HEURE.
         STB         ATIME           < ET SAVE CETTE @.
         STZ         LEVENT          < A CAUSE DES
         STZ         LEVENT+1        < ALT-MODES !!!
<
< PREMIERE SIMULATION D'ASSIGNATION :
<
         BSR         AEXTAS          < AFIN DE FAIRE UNE EDITION
                                     < CORRECTE DES NVP --> NSP.
         BSR         AASIGN
<
< EXPLORATION DE TASSGN, ET ENVOI DES MESSAGES :
<
LOOP14:  EQU         $
         BSR         AEXTAS          < EXPLORATION DE TASSGN.
LOOP10:  EQU         $
         LXI         0               < X=1ER NVP A TESTER.
         LYI         NVPMAX+1        < Y=1ER NVP INEXISTANT.
         STZ         KOMPT           < RAZ DU COMPTEUR DES NVP.
LOOP11:  EQU         $
         LA          &ADESC          < ACCES AU DESCRIPTEUR (X).
         JALE        LOOP12          < A NE PAS TESTER, OU NON
                                     < ASSIGNE.
         PSR         X,Y
         LR          A,C             < C=@DESCRIPTEUR.
LOOP30:  EQU         $
         CPZ         NOMIT           < Y-A-T'IL UN ITEM ASSOCIE ???
         JNE         LOOP21          < OUI, ON VA LE LIRE...
<
< INITIALISATION DES NOMS D'ITEMS ASSOCIES :
<
         LAD         MRCLF
         BSR         APRINT          < ENVOI D'UN MESSAGE.
         LAD         NOMVIS
         BSR         APRINT          < EMISSION DU NVP AUQUEL EST
                                     < ASSOCIE L'ITEM DEMANDE.
         LA          AMITEM
         BSR         APRINT
         LAD         MEGAL
         BSR         APRINT          < ENVOI DU LIMITEUR '='.
         LAD         DEMIN
         SVC         0               < ENTREE D'UN NOM PRESUME.
         LAD         BUF
         ADRI        -1,A            < PAR COMPATIBILITE AVEC CODAGE.
         SBT         0
         STA         ABUF            < RELAI VERS LE BUFFER D'ENTREE.
         BSR         ACOD            < CODAGE SUR 6 CARACTERES.
         JMP         LOOP30          < ET C'EST REPARTI...
<
< MISE EN PLACE DU NOM DE L'ITEM COURANT :
<
LOOP21:  EQU         $
         LA          NOMIT+0
         CP          &ANIT0
         JNE         LOADI           < L'ITEM ASSOCIE N'EST PAS
                                     < L'ITEM RESIDENT : VERS LE LOAD
                                     < DE CELUI-CI.
         LA          NOMIT+1
         CP          &ANIT1
         JNE         LOADI           < ITEM ASSOCIE NON RESIDENT.
         LA          NOMIT+2
         CP          &ANIT2
         JE          NLOAD           < L'ITEM ASSOCIE EST DEJA
                                     < RESIDENT, INUTILE DONC DE
                                     < LE RECHARGER...
LOADI:   EQU         $               < CHARGEMENT DE L'ITEM ASSOCIE.
         LAD         NOMIT           < A=@EMETTEUR,
         LB          ANITEM          < B=@RECEPTEUR,
         LXI         3               < X=3 CARACTERES A DEPLACER,
         MOVE                        < MISE EN PLACE DU NOM DE
                                     < L'ITEM COURANT.
         LAD         DEMSGN
         SVC         0               < TENTATIVE DE LECTURE DE
                                     < L'ITEM ASSOCIE A LA VISU
                                     < ASSIGNEE A CE NVP.
         JE          NLOAD           < OK, L'ITEM ASSOCIE EXISTE.
         STZ         &ANIT0          < LORS DES ERREURS DE CHAR-
         STZ         &ANIT1          < GEMENT, ON SUPPRIME LE
         STZ         &ANIT2          < NOM DE L'ITEM COURANT.
         JMP         LOOP13
NLOAD:   EQU         $               < L'ITEM ASSOCIE EST LA...
         IC          KOMPT           < OK, ON COMPTE LE NVP.
         LXI         0
         LBY         &AITEM          < RECUPERATION DU 1ER CARACTERE
                                     < DE L'ITEM COURANT,
         STA         LIMIT           < QUI DEFINIT, POUR CET ITEM
                                     < LE CARACTERE DE FIN DE MESSAGE
                                     < EQUIVALENT A 'EOT'.
         BSR         ASENDV          < ET ON VA ESSAYER D'ENVOYER
                                     < LE MESSAGE COURANT DE CETTE
                                     < VISU...
LOOP13:  EQU         $
         PLR         X,Y
LOOP12:  EQU         $
         ADRI        1,X             < PASSAGE AU NVP SUIVANT.
         CPR         X,Y             < EXISTE-T'IL...
         JNE         LOOP11          < OK, ON LE TESTE.
         CPZ         KOMPT           < SINON, A'T'ON TROUVE AU MOINS
                                     < UN NVP INTERESSANT ???
         JNE         LOOP10          < OUI, DONC ON REBOUCLE.
         BSR         AASIGN          < ESSAI DE SIMULATION !ASSIGN.
         LAD         CCI             < NON, ALORS ON ATTEND
         SVC         0               < EN RETOURNANT AU CCI.
         JMP         LOOP14          < PUIS ON RECOMMENCE SI !GO.
         PAGE
         PROG        P1
<
<
<        F I N   E T   R A Z   U N   N V P  :
<
<
<        FONCTION :
<                      'F' A LA MEME FONCTION QUE '/',
<                    MAIS DE PLUS, L'INDEX ITEM EST
<                    REMIS EN TETE DE L'ITEM (1),
<                    L'ITEM ASSOCIE, AINSI QUE L'ITEM
<                    RESIDENT SONT SUPPRIMES.
<                      RAPPELONS QUE '/' NE FAIT QUE
<                    DESASSIGNER LE NVP !!!
<
<
FINRAZ:  EQU         $
         STZ         IEG
         IC          IEG             < IEG <-- 1.
         STZ         NOMIT           < SUPPRESSION ITEM ASSOCIE.
         STZ         &ANIT0          < SUPPRESSION ITEM RESIDENT.
         JMP         E10             < VERS LE TRAITEMENT DE '/'.
<
<
<        E N V O I   D E S   M E S S A G E S  :
<
<
<        ARGUMENT :
<                    C=@DESCRIPTEUR DE LA VISU VERS LAQUELLE
<                      ON DOIT TENTER L'ENVOI D'UN MESSAGE.
<
<
SENDV:   EQU         $
LOOP2:   EQU         $
         LAD         BUF
         SBT         0
         STA         ABUF            < ABUF RELAYE BUF A PRIORI.
         STZ         XBUF
         IC          XBUF            < XBUF=1 A PRIORI.
<
< ENTREE DU MESSAGE COURANT :
<
LOOP3:   EQU         $
         LYI         80              < NBRE D'OCTETS PAR CARTE.
         LXI         0               < INDEX INITIAL BUFFER.
         STZ         KCAR            < RAZ COMPTEUR DES CARACTERES
                                     < DU MESSAGE COURANT (NON
                                     < COMPRIS L'EOT).
         LA          VIEG            < INDEX COURANT ITEM-VISU,
         STA         IEG             < QUE L'ON MET EN TEMPORAIRE.
GETCAR:  EQU         $
         LA          IEG
         CP          NCP             < VALIDATION IEG
         JL          E1              < OK.
E10:     EQU         $
<
< DESASSIGNATION DU NVP :
<
         CPZ         MODE            < !ASSIGN OU NVP= ???
         JNE         SIMU1           < ASSIGNATION SIMULEE (NVP=).
         LAD         MASS            < A=@EMETTEUR.
         LB          ABUF
         RBT         0+NBITMO        < B=@RECEPTEUR.
         LXI         LMASS           < X=NBRE DE MOTS A DEPLACER.
         MOVE                        < MISE DE !ASSIGN DANS BUF.
         LA          NVPVIS          < A=NVP A DESASSIGNER.
         ADRI        '30,A           < CONVERSION ASCI DU NVP.
         LXI         LMASS*2-4
         STBY        &ABUF           < MISE DU NVP DANS !ASSIGN NVP=S.
         LAD         CCINT
         SVC         0               < ENVOI DU !ASSIGN NVP=S.
SIMU1:   EQU         $
         BR          AFINIT          < DEBORDEMENT : FIN D'ITEM, ON
                                     < ARRETE LA POUR CETTE VISU.
<
< ACCES AU CARACTERE COURANT :
<
E1:      EQU         $
         PSR         X
         LR          A,X
         LBY         &AITEM          < A=OCTET COURANT DE L'ITEM.
         CP          LIMIT           < EST-CE LE CARACTERE DE FIN
                                     < DE MESSAGE COURANT ???
         JNE         GET3            < NON.
         LAI         '04             < OUI, ON LE REMPLACE PAR 'EOT'.
GET3:    EQU         $
         IC          IEG             < PROGRESSION IEG.
         PLR         X
         CPZR        X               < EST-CE LE 1ER CARACTERE BUFFER ???
         JE          GET1            < OUI, IL RESTE TEL QUEL...
         TBT         8               < EST-CE UN CTRL-XXX ???
         JNC         GET1            < NON, CARACTERE NORMAL.
         RBT         8               < OUI, A=CTRL-XXX.
         ADRI        -'40,A
GET1:    EQU         $
         STBY        &ABUF
         CPI         '04             < EST-CE UN 'EOT' ???
         JE          GET2            < OUI, FIN DE MESSAGE.
         CPI         '0D             < EST-CE UN 'RETURN' ???
         JE          GET2            < OUI, FIN DE MESSAGE.
         IC          KCAR            < COMPTAGE DES CARACTERES
                                     < DIFFERENTS DE 'LIMIT'.
         ADRI        1,X             < PROGRESSION INDEX BUFFER.
         CPR         X,Y             < 80 OCTETS ???
         JNE         GETCAR          < NON, AU SUIVANT.
GET2:    EQU         $
<
<        P R E - A N A L Y S E  :
<
         STZ         IENTER          < 0 : PAS DE 'I' A PRIORI.
ANALYS:  EQU         $
         LXI         0               < INDEX INITIAL BUFFER.
<
< PRE-ANALYSE DU MESSAGE :
<
<        DEFINITION DU PREMIER CARACTERE :
<
<                    'SPACE'         COMMENTAIRE,
<                    <               COMMENTAIRE,
<                    >               TEXTE A EDITER,
<                    I               MESSAGE COURANT A ENTER SUR NVP='01.
<                    A               SIMULATION DES ASSIGNATIONS
<                                    NVP --> NSP VISU.
<                    !               CARTE CONTROLE DESTINEE AU CCI
<                                    DE LA VISU LOCALE,
<                    C               ACCES AU CCI LOCALE,
<                    +               SUIVI PAR UN 'NVP' (3-9),
<                                    PERMET DE DEFINIR L'ITEM ASSOCIE
<                                    A CE 'NVP'.
<                    -               SUPPRIME L'ITEM ASSOCIE A UN NVP,
<                                    NOTA : POUR + ET - LE NVP
<                                    PEUT S'ECRIRE @, AUQUEL CAS
<                                    ON PREND LE NVP COURANT.
<                    =               MESSAGE CONTENANT UN 'EOT' EN FIN,
<                    #               IDEM A '=', MAIS AVEC BLOCAGE
<                                    PREALABLE DE TOUT LE SYSTEME
<                                    PENDANT 2 SECONDES.
<                    '1' A '9'       MESSAGE SANS 'EOT' DE LONGUEUR
<                                    DE 1 A 9 CARACTERES,
<                    *               DEMANDE DU MOT DE PASSE DYNAMIQUE,
<                    X               ENVOI D'UN ALT-MODE,
<                    /               FIN DE LA LISTE DES MESSAGES.
<                    F               FIN DE LISTE ET RAZ,
<                    %K(             DEBUT DE RECURSIVITE,
<                    )               FIN DE RECURSIVITE.
<                    @K              DEFINITION DE CCONST (=K),
<                    @K=XXX          INITIALISATION DE LA CONST K,
<                    @K+XXX          INCREMENTATION DE CONST K,
<                    @K-XXX          DECREMENTATION DE CONST K.
<                    XXX PEUT S'ECRIRE : CONSTANTE HEXADECIMALE,
<                                        OU @L (CONST L),
<                                        OU @LN (CONST L DU NVP=N),
<                    HK              TEMPORISATION DE K SECONDES.
<                                    MAIS BLOQUE L'ENSEMBLE DES NVP !!!
<                    WK              MISE EN ATTENTE DE K SECONDES
<                                    DE L'ITEM COURANT (NE BLOQUE PAS
<                                    LES AUTRES !!!).
<                    RK              RESET EVENEMENT K,
<                    SK              SET EVENEMENT K, SI K>=16,
<                    TK (K<16)       SI L'EVENEMENT K EST ARRIVE,
<                                    ON ATTEND, SINON, ON LE MET
<                                    A 1 ET ON CONTINUE EN
<                                    SEQUENCE (TEST & SET),
<                    TK (K>=16)      SI L'EVENEMENT K EST ARRIVE,
<                                    ON CONTINUE EN SEQUENCE,
<                                    SINON, ON L'ATTEND.
<
<
<        IMPORTANT :
<                      TOUS LES MESSAGES DEFINIS CI-DESSUS
<                    DOIVENT SE TERMINES PAR UN LIMITEUR
<                    DU TYPE 'EOT' (VOIR LE 1ER CARACTERE
<                    DE CHAQUE ITEM).
<
<
<        IMPORTANT :
<                      SI LE PREMIER CARACTERE EST EN EXPOSANT,
<                    LA SUITE DU MESSAGE DOIT ETRE VIDE, ET EST REMPLACEE
<                    PAR LA CONSTANTE COURANTE (CCONST) CODEE
<                    EN ASCI SUR 1 A 9 CHIFFRES :
<                    1-9 --> 1 A 9 CHIFFRES,
<                    LES AUTRES COMMANDES DONNANT 4 CHIFFRES.
<
         LBY         &ABUF           < X=0 (SVC) : ACCES AU 1ER CARACTERE
         TBT         8               < EST-IL EN EXPOSANT ???
         JNC         NORM1           < NON, MODE NORMAL...
<
< CAS OU UNE CONSTANTE VA ETRE CODEE EN ASCI :
<
         RBT         8
         LYI         4               < 4 CARACTERE DE CODAGE.
         CPI         "1"
         JL          NORM2           < ON N'EST PAS ENTRE 1 ET 9.
         CPI         "9"
         JG          NORM2           < ON N'EST PAS ENTRE 1 ET 9.
         ADRI        -'30,A          < ENTRE 1 ET 9, LA COMMANDE
         LR          A,Y             < DONNE LE NBRE DE CARACTERES
                                     < CODES.
NORM2:   EQU         $
         LXI         1
         BSR         ATEOT           < TEST DE MESSAGE VIDE ???
         JNE         ERR1            < NON, ERREUR !!!
         PSR         W
         LAD         CONST0
         AD          CCONST
         LR          A,W             < W=@CONSTANTE COURANTE.
         LB          0,W             < B=CONSTANTE COURANTE.
         LR          Y,A
         CPI         4               < CODE-T'ON PLUS OU MOINS DE
                                     < 4 CARACTERES ???
         JLE         NORM7           < 4 OU MOINS DE 4 CARACTERES.
         ADRI        -4,A            < A=NBRE DE CARACTERES EXCE-
                                     < DANT LES 4.
         LR          A,X             < X=1, 2,.. (NBRE DE '0').
         LYI         1               < Y=INDEX DE STORE '0'.
         LAI         "0"             < CARACTERES INSERES PREA-
                                     < LABLEMENT...
NORM8:   EQU         $
         XR          X,Y
         STBY        &ABUF           < INSERTION DES '0' PRELIMINAIRES.
         XR          X,Y
         ADRI        1,Y             < INDEX DES '0'.
         JDX         NORM8           < AU SUIVANT.
         LR          Y,X             < X=INDEX DES CHIFFRES A SUIVRE.
         LYI         4               < Y=4 CARACTERES A CODER.
         JMP         NORM9           < VERS LE CODAGE...
NORM7:   EQU         $
         LBI         0               < CLEAR B.
         SLLS        2               < CONVERSION EN NBRE DE BITS.
         LR          A,X
         LA          0,W             < A=CONSTANTE COURANTE.
         SLRD        0,X             < CADRAGE CORRECT DANS B.
NORM6:   EQU         $
         LXI         1               < X=INDEX DE CODAGE.
NORM9:   EQU         $
         PLR         W
NORM3:   EQU         $
         LAI         0
         SLLD        4               < DECONCATENATION.
         CPI         9
         JLE         NORM5           < CHIFFRE DECIMAL.
         ADRI        "A"-"9"-1,A     < CODAGE ASCI.
NORM5:   EQU         $
         ADRI        "0",A           < CODAGE ASCI SUITE.
         STBY        &ABUF           < ET MISE DANS LE BUFFER ASCI.
         ADRI        1,X             < PROGRESSION INDEX BUFFER,
         ADRI        -1,Y            < DECOMPTE DES CARACTERES GENERES.
         CPZR        Y               < C'EST FINI ???
         JG          NORM3           < NON...
         LAI         '04             < OUI, ON SIMULE UN 'EOT'.
         STBY        &ABUF           < MIS DANS LE BUFFER.
         LXI         0
         LBY         &ABUF
         RBT         8               < A=COMMANDE COURANTE...
<
<        T R A I T E M E N T   C O M M A N D E
<                    C O U R A N T E  :
<
NORM1:   EQU         $
         CPI         " "
         JL          ERR1            < ERREUR DE SYNTAXE.
         CPI         "Z"
         JG          ERR1            < ERREUR DE SYNTAXE.
         LR          A,X             < X=INDEX COMMANDE.
         STA         COMC            < SAVE LA COMMANDE COURANTE.
         BR          &ACOMD          < VERS LE MODULE SPECIFIQUE.
<
<        E R R E U R S   D E   S Y N T A X E  :
<
ERR1:    EQU         $
         SBT         7               < MISE D'UNE LONGUEUR=1
         STA         MERR1           < DEVANT LE CARACTERE ERRONE.
         LAD         NOMVIS
         BSR         APRINT          < ENVOI DU NVP EN CAUSE.
         LAD         MERR1
         BSR         APRINT          < ENVOI DU CARACTERE EN CAUSE.
         LAD         MERR
         BSR         APRINT          < ENVOI DE ??
         BR          AMAJIE          < VERS LA MAJ DE IEG...
<
<        E N V O I   A L T - M O D E  :
<
SALTM:   EQU         $
         LAD         MALT
         SBT         0
         STA         ABUF            < ABUF RELAYE LE ALT-MODE.
         DC          XBUF            < XBUF=0.
         JMP         EOT             < ET C'EST TOUT...
<
<        E N V O I   M E S S A G E   A V E C
<        D O D O   P R E A L A B L E  :
<
FDODO:   EQU         $
         LAI         2
         STA         SLEEP+2
         LAD         SLEEP
         SVC         0               < MISE EN ATTENTE PENDANT 2S.
         JMP         EOT             < PUIS ESSAI D'ENVOI MESSAGE.
<
<        A P P E L   C C I   L O C A L   I N T E R P R E T A T I F  :
<
CARTC:   EQU         $
         LAD         CCINT
         SVC         0               < APPEL DU CCI NON INTERACTIF.
         JNE         E4              < ERREUR DE CARTE CONTROLE.
         BSR         AEXTAS          < APRES CHAQUE APPEL DU CCI,
                                     < ON REPARCOURT TASSGN.
E8:      EQU         $
         BR          AMAJIE
<
<        A C C E S   C C I   L O C A L   I N T E R A C T I F  :
<
GOCCI:   EQU         $
         LAD         CCI
         SVC         0               < ALLER AU CCI...
         BR          AMAJIE          < APRES UN !GO...
<
<        C H A N G E M E N T   D E   L ' I T E M
<        A S S O C I E   A   U N   N V P  :
<
<        S U P P R E S S I O N  :
<
SUPIT:   EQU         $
         LR          A,B             < SAVE B=FONCTION.
         LXI         2
         BSR         ATEOT           < NVP SUIVI D'UN EOT ???
         JNE         E4              < NON, ERREUR !!!
         LR          B,A             < RESTAURE A=FONCTION.
<
<        A J O U T  :
<
CHGIT:   EQU         $
         LR          A,B             < SAVE LA FONCTION DEMANDEE
                                     < DANS B ('+' OU '-').
         LXI         1
         LBY         &ABUF           < RECUPERATION DU NVP PRESUME.
         ADRI        -'30,A          < CONVERSION BINAIRE.
         JAL         E4              < ERREUR DE SYNTAXE.
         CPI         '09             < EST UN CHIFFRE DECIMAL ???
         JLE         CHGIT2          < OUI, OK.
         ADRI        -"A"+"9"+1,A    < NON, CONVERSION HEXADECIMALE.
         CPI         '09             < EST-CE UN CHIFFRE HEADECIMAL ???
         JG          CHGIT2          < PEUT-ETRE...
         JL          E4              < NON, ERREUR !!!
         LA          NVPVIS          < CAS DU CARACTERE '@', ON PREND
                                     < COMME NVP, LE NVP DU DESCRIP-
                                     < TEUR COURANT.
CHGIT2:  EQU         $
         CPI         NVPMAX+1        < VALIDATION.
         JGE         E4              < ERREUR DE NVP.
         LR          A,X             < X=NVP DEMANDE.
         LA          &ADESC          < RECUPERATION DU DESCRIPTEUR
                                     < ASSOCIE A CE NVP.
         JAE         E4              < NVP INACESSIBLE.
         PSR         C               < SAVE LE C COURANT
         RBT         0               < RAZ INVALIDATION A PRIORI.
         LR          A,C             < C=@DESCRIPTEUR ASSOCIE A (X).
         STZ         NOMIT           < SUPPRESSION A PRIORI...
         LR          B,A             < RECUPERATION DE LA FONCTION.
         CPI         "+"             < EST-CE UNE ADJONCTION ???
         JNE         CHGIT1          < NON, OK SUPPRESSION.
         BSR         ACOD            < OUI, ON VA CODER.
CHGIT1:  EQU         $
         LR          C,A             < SAVE L'@DESCRIPTEUR QUE L'ON
                                     < VIENT DE MODIFIER.
         PLR         C               < RESTAURE LE C COURANT.
         CPR         A,C             < A-T'ON EN FAIT MODIFIER LE
                                     < DESCRIPTEUR COURANT ???
         JE          E100            < OUI, ON NE VA PAS METTRE
                                     < IEG A JOUR, EN EFFET, LE
                                     < CODAGE L'A REMIS A 1 !!!
         BR          AMAJIE          < VERS LA MAJ DE L'INDEX IEG.
         NLS
<
< DEMANDE DU MOT DE PASSE DYNAMIQUE :
<
PPASS:   EQU         $
         LAD         MPASS
         SBT         0
         STA         ABUF            < ABUF RELAYE LE MOT DE PASSE.
         DC          XBUF            < XBUF=0.
<
<        E N V O I   M O T   D E   P A S S E
<        D Y N A M I Q U E  :
<
PASS:    EQU         $
         LA          ATIME
         ADRI        5,A             < POUR ACCEDER AUX SECONDES.
         WORD        '1E15
         LR          B,A
         ANDI        'FF             < A=NBRE DE SECONDES.
         CPI         50              < A-T'ON LE TEMPS DE L'ENVOYER ???
         JG          PASS            < NON, ON BOUCLE SUR CETTE
                                     < SEQUENCE...
         LA          ATIME           < A=@DE LA DATE/HEURE.
         ADRI        4,A             < POUR ACCEDER AUX MINUTES.
         WORD        '1E15
         LR          B,A
         ANDI        'FF             < A=NBRE DE MINUTES.
         SLRD        NBITMO          < OK, A=0 ET B=NBRE DE MINUTES.
         DV          C10
         LR          B,A             < A=CHIFFRE DES UNITES.
HZERO::  VAL         "0"
HA::     VAL         "A"
HNEUF::  VAL         "9"
M0001::  VAL         '0001
         ORI         HZERO           < ??!???!?!
         EORI        HZERO?M0001     < IGNOBLE TRUANDAGE...
         MP          MAGIC           < PERMUTATION DES BITS...
         DV          C16
         LR          B,A
         CP          C10             < CHIFFRE OU LETTRE ???
         JL          PASS9           < CHIFFRE...
         ADRI        HA-HNEUF-1,A    < LETTRE...
PASS9:   EQU         $
         ADRI        HZERO,A         < ET CONVERSION ASCI...
         STBY        MPASS1          < ET MISE DANS LE MOT DE PASSE...
         LAI         NSPUPD
         SBT         0
         WORD        '1E15
         LR          B,A
         WORD        '1E15           < (B)=NUMERO DU RELEASE COURANT.
         LAI         0
         DV          C10
         LR          B,A
         ORI         '30             < (A)=CHIFFRE DES UNITES DU NUMERO DE
         STBY        MPASS2          < RELEASE DE CMS5 MIS DANS LE MOT DE
                                     < PASSE...
         JMP         EOT             < OK, C'EST TOUT.
         LST
E4:      EQU         $
         BR          AERR            < TRAITEMENT DES ERREURS.
<
< TEST DES MESSAGES SANS 'EOT' :
<
COMPT:   EQU         $
E5:      EQU         $
         ADRI        -'30+1,A        < OK, CONVERSION BINAIRE+1.
         LR          A,X             < X INDEXE LE 1ER CARACTERE QUI
                                     < SUIT LE DERNIER CARACTERE
                                     < SIGNIFICATIF.
         LAI         '80+'04         < CODE DE L''EOT' AVEC LE BIT0
                                     < POSITIONNE A 1 AFIN QU'IL NE
                                     < SOIT PAS EMIS PAR SEND.
         STBY        &ABUF           < MISE EN FIN DE MESSAGE.
<
<        M E S S A G E S  :
<
EOT:     EQU         $
<
< TEST D'AUTO-ASSIGN :
<
         LA          NSPVIS          < NSP DEMANDE,
         CP          NSPIN           < EST-CE CELUI DE LA VISU
                                     < DE DIALOGUE ???
         JNE         WAIT            < OK, ON PEUT EMETTRE...
         LA          COMC            < NSPVIS=NSPIN : ERREUR, LE
                                     < PROGRAMME NE PEUT FAIRE
                                     < 2 CHOSES EN MEME TEMPS (ATTEN-
                                     < DRE UN MESSAGE, ET SE L'EMET-
                                     < TRE !!!) : ERREUR...
         JMP         ERR1            < ENVOI COMMANDE COURANTE...
<
<        A T T E N T E   E V E N T U E L L E
<        D ' U N E   V I S U   E N   L E C T U R E  :
<
WAIT:    EQU         $
         LAD         MNUL
         BSR         APRINT          < ON TEMPORISE, AFIN D'ETRE SUR DE NE
                                     < PAS RETOMBER SUR UNE DEMANDE ANTERIEURE..
         LA          ADCTVI          < A=@DCT VISU.
         ADRI        TETE,A          < A=TETE DE LA FILE D'ATTENTE
                                     < SUR CETTE VISU.
         WORD        '1E15           < RENVOIE : B=@DEMANDE DE TETE
                                     < SUR CETTE VISU.
         LR          B,A
         JAE         E6              < PAS DE DEMANDE EN ATTENTE, ON
                                     < REND LA MAIN PROVISOIREMENT...
                                     < SUR CETTE VISU, ON ATTEND...
         LR          A,X             < SAVE X=@DEMANDE DE SERVICE.
         ADRI        OPDEM,A         < A=@DE LA FONCTION DEMANDEE
                                     < DANS LA DEMANDE DE TETE.
         WORD        '1E15           < RENVOIE : B=FONCTIOB DEMANDEE.
         LR          B,A
         ANDI        '07             < MASCAGE DU BIT 12.
         CPI         1               < S'AGIT-IL D'UNE LECTURE???
         JLE         E7              < OK, IL S'AGIT D'UNE LECTURE.
E6:      EQU         $
         CPZ         IENTER          < LE MESSAGE QUE L'ON NE PEUT
                                     < EMETTRE A-T'IL ETE RENTRE
                                     < PAR 'I' ???
         JE          E100            < NON...
         LA          AMINEF          < OUI, IL FAUT SIGNALER
         BSR         APRINT          < QU'IL N'A PAS ETE EMIS,
                                     < ET QU'IL VA FALLOIR LE
                                     < RERENTRER...
E100:    EQU         $
         BR          AFSEND          < ON REND LA MAIN PROVISOIREMENT
                                     < LORSQU'IL N'Y A RIEN A FAIRE...
E7:      EQU         $
<
< LA VISU ATTEND UNE LECTURE, LET'S GO...
<
         LR          B,A             < A=FONCTION REELLEMENT DEMANDEE.
         CPI         '09             < EST-CE 'LECTURE GRAPHIQUE' ???
         LBI         5               < OUI A PRIORI : B=5 OCTETS A LIRE.
         JE          E20             < ET OUI, 'LECTURE GRAPHIQUE'...
         LR          X,A             < A=@DEMANDE DE SERVICE,
         ADRI        CODEM,A         < A=@DE SON CODEM.
         WORD        '1E15           < RENVOIE : B=COMPTE D'OCTETS
                                     < DE LA DEMANDE COURANTE LECTURE.
E20:     EQU         $
         STB         NOCT            < ET SAVE IT...
<
<        B O U C L E   D E   S I M U L A T I O N
<        D E   L ' E N T R E E   D ' U N
<        M E S S A G E   S U R   U N E   V I S U  :
<
LOOP:    EQU         $
         LR          C,A
         STA         CDESC           < SAUVEGARDE DE L'ADRESSE
                                     < DU DESCRIPTEUR COURANT.
WIT:     EQU         $
         LA          ADCTVI          < A=@DCTVISU.
         ADRI        SIT,A           < A=@SIT DE LA VISU.
         WORD        '1E15           < DEMANDE DANS B DU SIT-VISU.
         SWBR        B,A             < AFIN DE TESTER SON SIGNE.
         JAL         ITAT            < OK, IT ATTENDUE.
WITNXT:  EQU         $
         LAD         SCH
         SVC         0               < NON, IL FAUT ATTENDRE QUE
                                     < LA TACHE SOIT EN ATTENTE IT.
         JMP         WIT             < VERS UN NOUVEAU TEST.
ITAT:    EQU         $
RX::     VAL         2               < POUR ATTEINDRE LE REGISTRE X(VIS),
ETANXT:: VAL         14              < NUMERO DU BIT SIGNIFIANT 'IN',
JF::     VAL         "JF"            < CODE PERMETTANT DE VALIDER 'X'...
         LA          ADCTVI          < A=ADRESSE(DCT(VIS)),
         ADRI        RX,A            < A=ADRESSE(R(VIS)),
         WORD        '1E15           < B=(X(VISU)),
         LRM         A
         WORD        JF)ETANXT       < A=VALEUR DE 'X' LORSQUE LA VISU ATTEND
                                     < UNE INTERRUPTION 'IN'...
         CPR         A,B             < ALORS EST-CE 'IN' ???
         JNE         WITNXT          < NON, ON REBOUCLE SUR 'SIT'...
         LA          ASEND           < A=@ROUTINE MAITRE.
         WORD        '1EC5           < SIMULATION MAITRE DE LA
                                     < RECEPTION D'UN CARACTERE.
         CPZ         NOCT            < A-T'ON ENVOYE SUFFISAMENT
                                     < D'OCTETS AU HANDLER VISU ???
         JE          LOOP20          < OUI, ON ARRETE LA...
         LX          XBUF
         IC          XBUF            < PROGRESSION INDEX DU BUFFER.
         BSR         ATEOT           < TEST DE DERNIER CARACTERE...
         JNE         LOOP            < NON, ON CONTINUE...
<
<
<        F I N   D E   L ' E M I S S I O N
<        M E S S A G E   O U   D U
<        T R A I T E M E N T   C O M M A N D E  :
<
LOOP20:  EQU         $
<
< MISE A JOUR DE L'INDEX COURANT DE L'ITEM VISU :
<
MAJIEG:  EQU         $
         LA          IEG
         STA         VIEG
<
< RETOUR, FIN TEMPORAIRE POUR CETTE VISU :
<
FSENDV:  EQU         $
         RSR
<
< FIN DE LA LISTE DES MESSAGES :
<
LOOPF:   EQU         $
<
< SUPPRESSION DU DESCRIPTEUR DE CETTE VISU :
<
FINITE:  EQU         $
         LAD         NOMVIS
         BSR         APRINT          < EDITION DU NVP EN CAUSE,
         LAD         MARRET
         BSR         APRINT          < PUIS DU MESSAGE 'FIN'.
         LX          NVPVIS          < X=NVP AUQUEL EST ASSIGNEE
                                     < CETTE VISU.
         LA          &ADESC
         SBT         0               < INVALIDATION DU CONTEXTE.
         STA         &ADESC
         STZ         NSPVIS          < AFIN DE RENDRE COMPATIBLES
         STZ         ADCTVI          < LES !ASSIGN ET LEUR SIMULA-
                                     < TION : AINSI SI UNE ASSI-
                                     < GNATION NVP --> NSP EST
                                     < SIMULEE, NSPVIS#0, ET AINSI,
                                     < LORS DU PARCOURS DE TASSGN,
                                     < BIEN QUE LE NVP NE SOIT PAS
                                     < REELLEMENT ASSIGNE, SON
                                     < RELAI NE SERA PAS INVALIDE...
         BR          AMAJIE          < VERS LA MISE A JOUR DE
                                     < L'INDEX COURANT DE L'ITEM-VISU.
<
< EMISSION D'UNE ERREUR :
<
ERREUR:  EQU         $
         LAD         NOMVIS
         BSR         APRINT          < EDITION NOM DE LA VISU.
         LAD         MERR
         BSR         APRINT          < EDITION DE '??'.
         BR          AMAJIE          < VERS LA MAJ DE L'INDEX ITEM-VISU.
         PAGE
<
<
<        C O M M E N T A I R E S  :
<
<
COMEN2:  EQU         $
         LA          KCAR
         ADRI        -1,A            < SUPPRESSION DU 1ER CARACTERE.
         JALE        COMEN1          < RIEN A EDITER...
         LXI         0
         STBY        &ABUF           < LE 1ER OCTET DU MESSAGE COURANT
                                     < RECOIT SA LONGUEUR.
         LAD         BUF
         BSR         APRINT          < ENVOI DU MESSAGE COURANT SUR
                                     < NVP='02.
COMEN1:  EQU         $
         BR          AMAJIE          < IL NE S'AGISSAIT QUE D'UN
                                     < COMMENTAIRE DANS LE TEXTE
                                     < DE L'ITEM.
         PAGE
<
<
<        E N T R E E   D I R E C T E   D U
<        M E S S A G E   C O U R A N T  :
<
<
ENTERM:  EQU         $
         IC          IENTER          < 1 : 'I' EN COURS.
         CPZ         DUREE           < EST-ON EN FAIT DANS UNE
                                     < COMMANDE 'W' INTRODUITE
                                     < SOUS 'I' ???
         JNE         NENTER          < OUI, DONC PAS DE NOUVEAU
                                     < MESSAGE A RENTRER !!!
         LXI         1
         BSR         ATEOT           < EOT DERRIERE 'I' ???
         JNE         RECU19          < NON, ERREUR !!!
         LAD         NOMVIS
         BSR         APRINT          < EDITION DU NVP COURANT.
         LAD         MINTER
         BSR         APRINT          < ENVOI INVITATION...
         LAD         DEMIN
         SVC         0               < ENTREE DU MESSAGE COURANT.
ENTER7:  EQU         $
         BR          AANALY          < VERS SON ANALYSE INSTANTANEE...
<
< SIMULATION D'UNE COMMANDE 'W' :
<
NENTER:  EQU         $
         LXI         0               < A METTRE EN TETE DU BUFFER,
         LAI         "W"             < UNE BELLE COMMANDE 'W'...
         STBY        &ABUF
         JMP         ENTER7          < ET ON VA L'ANALYSER...
         PAGE
<
<
<        T E M P O R I S A T I O N  :
<
<
TEMPO:   EQU         $
         LXI         1
         LBY         &ABUF           < CARACTERE SUIVANT 'H'.
         BSR         AGETCO          < DECODAGE BINAIRE.
         STA         SLEEP+2
         LXI         2
         BSR         ATEOT           < EOT DERRIERE ???
         JNE         RECU19          < NON...
         LAD         SLEEP
         SVC         0               < ATTENTE...
         BR          AMAJIE          < VERS LA MAJ DE IEG...
<
<
<        T E M P O R I S A T I O N   S U R   L E   N V P
<        C O U R A N T   U N I Q U E M E N T  :
<
<
WTEMPO:  EQU         $
         CPZ         DUREE           < Y-A-T'IL UNE COMMANDE 'W'
                                     < EN COURS ???
         JE          TEMPO1          < NON, INITIALISATION DE 'W'...
<
< CAS D'UNE COMMANDE 'W' EN COURS :
<
         WORD        '1E85           < A=HEURE COURANTE (/2).
         CP          HORLOG          < A-T'ON CHANGE  DE TRANCHE
                                     < DE 2 SECONDES DEPUIS LA
                                     < DERNIERE MISE A L'HEURE ???
         JE          TEMPO2          < NON, RIEN A FAIRE !!!
         STA         HORLOG          < OUI, MISE A JOUR...
         DC          DUREE           < DECOMPTE DU TEMPS ECOULE.
         JNE         TEMPO2          < IL EN RESTE ENCORE...
         BR          AMAJIE          < C'EST FINI : DUREE=0.
<
< INITIALISATION D'UNE COMMANDE 'W' :
<
TEMPO1:  EQU         $
         LXI         2
         BSR         ATEOT           < EOT DERRIERE ???
         JNE         RECU19          < NON, ERREUR...
         LXI         1
         LBY         &ABUF           < ACCES A LA DUREE DEMANDEE.
         BSR         AGETCO          < DECODAGE SI OK.
         ADRI        1,A             < ON INCREMENTE DE 1, CAR ON
                                     < VA DIVISER PAR 2.
         SLRS        1               < CAR '1E85 DONNE DES TEMPS
                                     < EXPRIMES EN MULTIPLE DE
                                     < 2 SECONDES.
         STA         DUREE           < DUREE#0.
         WORD        '1E85           < A=HEURE COURANTE (/2).
         STA         HORLOG          < 1ERE MISE A L'HEURE.
TEMPO2:  EQU         $
         BR          AFSEND          < ON NE FAIT PAS PROGRESSER
                                     < IEG AFIN DE RESTER SUR 'W'...
         PAGE
<
<
<        G E S T I O N   D E S   E V E N E M E N T S  :
<
<
<        FONCTIONS :
<                      ON DISPOSE DE 32 EVENEMENTS (1-9, A-W),
<                    SUR LESQUELS ON PEUT FAIRE DES
<                    SET, RESET, ET SURTOUT DES TESTS;
<                    LORS D'UN TEST, SI L'EVENEMENT EST POSITIONNE,
<                    ON CONTINUE EN SEQUENCE (MAJIEG), SINON,
<                    ON ATTEND QU'IL LE SOIT (FSENDV).
<
<                    A T T E N T I O N  :
<                    1- SI K<16 : LE SET N'EXISTE PAS, ET
<                    LA FONCTION TEST EST EN FAIT UN TEST &
<                    SET : SI L'EVENEMENT K EST ARRIVE ON
<                    SE BLOQUE, SINON, ON LE MARQUE, ET ON
<                    CONTINUE EN SEQUENCE : PERMET L'EXCLUSION !!!
<                    2- SI K>=16 : IL S'AGIT ALORS D'UN TEST
<                    TOUT COURT : SI L'EVENEMENT N'EST PAS
<                    ARRIVE, ON L'ATTEND, SINON, ON CONTINUE
<                    EN SEQUENCE...
<
<
EVENT:   EQU         $
         LR          A,Y             < Y=FONCTION DEMANDEE (R/S/T).
         LXI         2
         BSR         ATEOT           < EOT DERRIERE ???
         JNE         RECU19          < NON, ERREUR...
         LXI         1
         LBY         &ABUF           < ACCES AU NOM D'EVENEMENT.
         BSR         AGETCO          < CONVERSION BINAIRE.
         CPI         32              < VALIDATION EVENEMENT ???
         JGE         RECU17          < N'EXISTE PAS, ERREUR.
         CPI         16              < DISCRIMINATION TEST&SET DE TEST.
         LR          A,X             < X=NUMERO DE L'EVENEMENT.
         LR          Y,A             < A=FONCTION ASCI.
         JL          EVENT3          < K<16 : 'TEST & SET'.
<
<
<        S E T / R E S E T / T E S T  :
<
<
         ADRI        -"S",A          < A=-1 SI R, 0 SI S, +1 SI T.
         CPI         0               < DISCRIMINATION DES FONCTIONS.
         LA          LEVENT          < ACCES A LA LISTE DES
         LB          LEVENT+1        < EVENEMENTS COURANTS.
         JL          EVENTR          < RESET.
         JE          EVENTS          < SET.
<
< TEST EVENEMENT (X) :
<
EVENTT:  EQU         $
         TBT         0,X
         JC          EVENT1          < (X) EST ARRIVE : MAJIEG.
         BR          AFSEND          < (X) NON ARRIVE, ON ATTEND.
<
< RESET EVENEMENT (X) :
<
EVENTR:  EQU         $
         RBT         0,X
         JMP         EVENT2
<
< SET EVENEMENT (X) :
<
EVENTS:  EQU         $
         SBT         0,X
EVENT2:  EQU         $               < MAJ DE LA LISTE DES EVENEMENTS.
         STA         LEVENT
         STB         LEVENT+1
EVENT1:  EQU         $               < ON CONTINUE EN SEQUENCE.
         BR          AMAJIE
<
<
<        R E S E T / T E S T & S E T  :
<
<
EVENT3:  EQU         $
         ADRI        -"S",A          < A=-1 SI R, 0 SI S, +1 SI T.
         JAE         RECU19          < S N'EXISTE PAS SI K<16.
         CPI         0               < DISCRIMINATION T/R.
         LA          LEVENT          < CHARGEMENT DE LA
         LB          LEVENT+1        < LISTE DES EVENEMENTS.
         JL          EVENTR          < TRAITEMENT DE RESET.
<
< TEST&SET EVENEMENT (X) :
<
         TBT         0,X             < (X) EST-IL ARRIVE ???
         JNC         EVENTS          < NON, ALORS IL ARRIVE, ON
                                     < SIMULE UN SET.
         BR          AFSEND          < OUI, ALORS ON SE BLOQUE
                                     < DESSUS.
                                     < (PERMET L'EXCLUSION !!!)
         PAGE
<
<
<        R E C U P E R A T I O N   C O N S T A N T E  :
<
<
<        ARGUMENT :
<                    A=CARACTERE ASCI,
<
<
<        RESULTAT :
<                    A=VALEUR 1-9 OU A-Z.
<
<
GETCO:   EQU         $
         ADRI        -'30,A          < CODAGE BINAIRE...
         JALE        GETCO1          < ERREUR.
         CPI         9               < CHIFFRE DECIMAL ???
         JLE         RECU18          < OUI, OK.
         ADRI        -"A"+"9"+1,A    < CODAGE BINAIRE SUITE...
         CPI         9
         JL          GETCO1          < ERREUR.
         JG          RECU18          < OK.
<
< CAS DE LA CONSTANTE '@' : ON RECUPERE CCONST :
<
         PSR         W
         LAD         CONST0
         AD          CCONST
         LR          A,W             < W=@CCONST.
         LA          0,W             < A=CONSTANTE COURANTE.
         PLR         W
         JALE        GETCO1          < ERREUR : REFUS CONSTANTE <=0 !!!
RECU18:  EQU         $
         RSR
GETCO1:  EQU         $
         ADRI        -1,K            < ANNULATION BSR.
         JMP         RECU19          < VERS MESSAGE ERREUR...
         PAGE
<
<
<        D E B U T   D E  R E C U R S I V I T E  :
<
<
RECU19:  EQU         $
         LXI         0               < INDEX CARACTERE 0.
RECU17:  EQU         $
         LBY         &ABUF           < ACCES CARACTERE (X).
         BR          AERR1           < VERS L'EMISSION ERREUR...
<
< POINT D'ENTREE :
<
RECUR:   EQU         $
         CPZ         IENTER          < EST-ON SOUS 'I' ???
         JNE         RECU19          < OUI, '(' REFUSE !!!
         LXI         1
         LBY         &ABUF           < ACCES CARACTERE SUIVANT %.
         BSR         AGETCO          < DECODAGE BINAIRE DE (A).
         LR          A,Y             < Y=NBRE DE REPETITIONS (1 A Z).
         LXI         2
         LBY         &ABUF           < ACCES AU CARACTERE SUIVANT...
         CPI         "("
         JNE         RECU17          < ERREUR, CE N'EST PAS ( !!!!
         LXI         3
         BSR         ATEOT           < EOT DERRIERE ???
         JNE         RECU19          < NON, ERREUR...
         LBI         CODREP          < B=CODREP, ET Y=NBRE REPETITIONS.
<
<
<         P U S H   R E C U R S I V I T E  :
<
<
<        ARGUMENTS :
<                    B#0=CAUSE DU PUSH : EMPILEMENT REEL DANS PIR ;
<                     ='40 : PUSH POUR REPEAT ,
<                     ='20 : PUSH POUR APPEL PROGRAMME ,
<                     ='10 : PUSH POUR SAUT DEFINITION PROGRAMME ,
<                     ='20+'10 : PUSH POUR APPEL PROGRAMME , AVEC
<                                CHANGEMENT D'ITEM COURANT.
<                    Y=NBRE DE REPETITIONS A FAIRE SOUS CE NIVEAU (SI
<                      B#0).
<
<
PRIMPS:  EQU         $
<
< CAS DES PUSH VERITABLES :
<
         LA          APRC            < ACCES AU RELAI COURANT DE PIR.
         RBT         0               < RAZ DU BIT INDEX.
         LXI         CDCP            < RETOUR EN ERREUR A PRIORI.
         CP          TPR             < EST-ON AU SOMMET DE PIR ???
         JGE         RECU19          < STACK OVERFLOW....
         LA          APRC
         ADRI        LEPR,A          < NON CALCUL @ENTREE SUIVANTE.
         STA         APRC            < MAJ DU RELAI COURANT DE PIR.
<
< INITIALISATION DE LA NOUVELLE ENTREE DE PIR :
<
         SWBR        Y,A             < Y=COMPTE DE REPETITIONS.
         ORI         1               < CP=1 : COMPTE PARENTHESES.
         STA         &APRC           < RANGEMENT DE CD ET CP.
         LXI         IR              < RETOUR OK.
         SWBR        B,A             < OCTET0(A)=CAUSE DU PUSH.
         AD          IEG             < ET CONCATENATION INDEX COURANT.
         ADRI        -1,A
         TBT         BITREP          < EST-CE UN PUSH POUR REPEAT ???
         SBCR        A               < SI OUI , RETOUR SUR '('.
         STA         &APRC
         BR          AMAJIE          < VERS LA MAJ DE VIEG...
<
<
<        D E B U T   D E   R E C U R S I V I T E  :
<
<
BREC:    EQU         $
         LXI         CP
         LBY         &APRC
         ADRI        1,A             < COMPTAGE DES PARENTHESES.
         STBY        &APRC
         LXI         1
         LBY         &ABUF
         CPI         '04
         JNE         RECU19          < ERREUR DE SYNTAXE...
         BR          AMAJIE          < OK...
<
<
<        F I N   D E   R E C U R S I V I T E  :
<
<
ENDR:    EQU         $
         CPZ         IENTER          < EST-ON SOUS 'I' ???
         JNE         RECU19          < OUI, ')' REFUSE !!!
         LXI         1
         BSR         ATEOT           < EOT DERRIERE ')' ???
         JNE         RECU19          < NON, ERREUR...
<
<
<        P U L L   R E C U R S I V I T E  :
<
<
<        ARGUMENT :
<                    B#0 : PULL VERITABLE ,
<                     =0 : DECOMPTER UNIQUEMENT LES ')'.
<
<
PRIMPL:  EQU         $
<
< DECOMPTE DES PARENTHESES :
<
         LXI         CP
         LBY         &APRC           < A=CP COURANT SOUS CE NIVEAU.
         JAE         RECU19          < TROP DE ')' !!!
         ADRI        -1,A
         STBY        &APRC           < MAJ DU CP COURANT.
         JANE        RECU20          < JUSTE DECOMPTAGE DES ')'...
         LXI         CD
         LBY         &APRC           < A=CD COURANT.
         JAE         RECU20          < CAS DE LA 1ERE ENTREE DANS PIR,
                                     < IL NE FAUT PAS DEPILER ...
         ADRI        -1,A            < DECOMPTE DES REPETITIONS.
         JAG         E14             < IL RESTE AU MOINS UNE REPETITION.
         JAL         RECU19          < ERREUR DE SYNTAXE...
<
< CAS CD=0 : PULL VERITABLE :
<
         LA          APRC
         RBT         0               < ACCES A L'@ENTREE COURANTE.
         CP          BPR             < EST-ON AU BAS DE LA PILE ???
         JLE         RECU19          < OUI, ERREUR...
E90:     EQU         $
         LA          APRC
         ADRI        -LEPR,A         < NON , RETOUR SUR L'ENTREE
                                     < PRECEDENTE.
         STA         APRC            < ET MAJ DU RELAI COURANT.
<
< SORTIE OK...
<
RECU20:  EQU         $
         BR          AMAJIE
<
< ACS OU CD#0 : 2L RESTE AU MOINS UNE REPETITION :
<
E14:     EQU         $
         STBY        &APRC           < MAJ DU CD COURANT.
         LXI         IR
         LA          &APRC
         LR          A,B             < B=ENTREE IR DE PIR.
         TBT         BITPRO          < EST-CE UN RETOUR PROGRAMME ???
         AND         CFFF            < RAZ DES BITS 0,1,2,3.
         STA         IEG             < A=INDEX DE DEBUT DE REPETITION.
         JMP         RECU20          < VERS LA SORTIE OK...
         PAGE
<
<
<        G E S T I O N   D E S   C O N S T A N T E S   @  :
<
<
<        FONCTION :
<                    @K;             CCONST <-- K,
<                    @K=XXX;         INITIALISATION DE LA CONSTANTE
<                                    K, ET CCONST <-- K,
<                    @K+XXX,         INCREMENTATION DE LA CONSTANTE
<                                    K, ET CCONST <-- K,
<                    @K-XXX,         DECREMENTATION DE LA CONSATNTE
<                                    K, ET CCONST <-- K.
<                    XXX EST         SOIT UNE CONSTANTE HEXADECIMALE,
<                                    SOIT @L (CONST L),
<                                    SOIT @LN (CONST L DU NVP=N, N POUVANT
<                                    ETRE ECRIT @, CE QUI SIGNIFIE ALORS :
<                                    PRENDRE LE NVP COURANT),
<
<
<        IMPORTANT :
<                    CONSTANTES GLOBALES : K VA DE 0 A NCONSG-1,
<                                          (ELLES SONT COMMUNES A
<                                          TOUS LES NVP),
<                    CONSTANTES LOCALES : K VA DE NCONSG A NCONST-1.
<
<
GCONST:  EQU         $
         LXI         1
         LBY         &ABUF           < ACCES CARACTERE SUIVANT.
         ADRI        -'30,A          < DECODAGE BINAIRE.
         JAL         RECU19          < ERREUR DE SYNATXE...
         CPI         9               < CHIFFRE DECIMAL ???
         JLE         GCONS8          < OUI.
         ADRI        -"A"+"9"+1,A    < DECODAGE (SUITE).
         CPI         9
         JL          RECU19          < ERREUR DE SYNATXE...
GCONS8:  EQU         $
         CPI         NCONST-1        < VALIDATION...
         JG          RECU19          < ERREUR DE SYNTAXE...
         STA         CCONST          < OK, SAVE LE NOUVEAU CCONST.
         PSR         W
         LR          A,W
         LAD         CONST0
         ADR         A,W             < W=@CONSTANTE COURANTE.
<
< TEST PRELIMINAIRE DE L'OPERATEUR :
<
         LXI         2
         BSR         ATEOT           < INITIALISATION CCONST ???
         JE          GCONS7          < C'ESTFINI, JUSTE MAJ DE CCONS.
<
< DETECTION DE LA CONSTANTE :
<
         LXI         3
         LBY         &ABUF
         CPI         "@"             < EST-CE LE TYPE @K @L ???
         JE          GCONS9          < OUI....
         LBI         0               < INITIALISATION DE B.
GCONS1:  EQU         $
         BSR         ATEOT           < FIN DE MESSAGE ???
         JE          GCONS4          < OUI, FIN DU DECODAGE.
         ADRI        -'30,A          < DECODAGE BINAIRE.
         JAL         GCONS2          < ERREUR DE SYNTAXE...
         CPI         9               < CHIFFRE DECIMAL ???
         JLE         GCONS3          < OUI...
         ADRI        -"A"+"9"+1,A    < DECODAGE (SUITE).
         CPI         'A              < VALIDATION CHIFFRE A-F ???
         JL          GCONS2          < ERREUR DE SYNATXE.
         CPI         'F              < VALIDATION CHIFFRE A-F ???
         JG          GCONS2          < ERREUR DE SYNTAXE...
GCONS3:  EQU         $
         SCRS        4
         SCLD        4               < CONCATENATION A B...
         ADRI        1,X             < PROGRESSION INDEX BUFFER.
         JMP         GCONS1          < AU SUIVANT...
<
< TRAITEMENT DE L'OPERATEUR :
<
GCONS4:  EQU         $
         LXI         2
         LBY         &ABUF
         LY          0,W             < Y=CONSTANTE DEMANDEE.
         CPI         "+"
         JE          GCONS5          < INCREMENTATION.
         CPI         "-"
         JNE         GCONS6
         NGR         B,B             < DECREMENTATION.
         JMP         GCONS5          < VERS L'INCREMENTATION.
GCONS6:  EQU         $
         CPI         "="
         JNE         GCONS2          < ERREUR DE SYNTAXE...
         LYI         0               < INITIALISATION CONSTANTE.
GCONS5:  EQU         $
         ADR         B,Y
GCONSB:  EQU         $
         LA          CCONST          < A=NOM DE LA CONSTANTE DEMANDEE.
         CPI         NCONSG          < EST-ELLE LOCALE ???
         JGE         GCONSE          < OUI.
<
< STORE UNE CONSTANTE GLOBALE :
<
         LB          CCONST          < SAVE B=NOM DE LA CONSTANTE
                                     < DEMANDEE.
         PSR         C               < SAVE LE CONTEXTE COURANT.
         LXI         NVPMAX+1        < X=1ER NVP INEXISTANT.
GCONSF:  EQU         $
         LA          &ADESC          < ACCES AU DESCRIPTEUR DU
                                     < NVP=(X)-1.
         JALE        GCONSG          < NON ASSIGNE (<0) OU NON
                                     < NON ASSIGNABLE (=0).
         LR          A,C
         LAD         CONST0
         ADR         B,A             < RECUPERATION NOM CONSTANTE.
         LR          A,W             < W=@ DE LA CONSTANTE DANS
                                     < LE CONTEXTE (C).
         STY         0,W             < STORE LA CONSTANTE GLOBALE
                                     < CCONST.
GCONSG:  EQU         $
         JDX         GCONSF          < AU CONTEXTE PRECEDENT...
         PLR         C               < RESTAURE LE CONTEXTE COURANT.
         JMP         GCONS7          < ET C'EST TOUT...
<
< STORE UNE CONSTANTE LOCALE :
<
GCONSE:  EQU         $
         STY         0,W             < MAJ DE LA CONSTANTE DEMANDEE.
GCONS7:  EQU         $
         PLR         W
         BR          AMAJIE          < ET C'EST TOUT...
<
< RETOURS EN ERREUR :
<
GCONS2:  EQU         $
         PLR         W
GCONSH:  EQU         $
         LXI         0
         LBY         &ABUF
         BR          AERR1           < VERS LE MESSAGE D'ERREUR...
<
< INITIALISATION CONSTANTE-CONSTANTE :
<
GCONS9:  EQU         $
         LXI         5
         BSR         ATEOT           < INITIALISATION LOCALE ???
         LBI         0               < B=0 : ACCES CONSTANTE LOCALE
                                     < A PRIORI.
         JE          GCONSC          < CAS DE L'EOT : MODE LOCAL.
         ADRI        -'30,A          < EST-CE LE MODE GLOBAL ???
         JAL         GCONS2          < ERREUR...
         CPI         '09
         JLE         GCONSD          < OK, NVP<=9.
         ADRI        -"A"+"9"+1,A
         CPI         '09
         JG          GCONSD          < OK, NVP>9.
         JL          GCONS2          < ERREUR...
         LA          NVPVIS          < CAS DE @ : ON PREND LE NVP COURANT...
GCONSD:  EQU         $
         CPI         NVPMAX+1        < VALIDATION DU NVP DEMANDE...
         JGE         GCONS2          < ERREUR, N'EXISTE PAS...
         LR          A,X             < X=NVP DEMANDE.
         CPZ         &ADESC          < EST-IL ASSIGNE ???
         JLE         GCONS2          < NON, ERREUR !!!
         SB          NVPVIS
         MP          ALLVIS          < B=DISTANCE SEPARANT LES CONSTANTES
                                     < DU NVP COURANT DE CELLES DU NVP
                                     < DEMANDE (EN MOTS).
         LXI         6
         BSR         ATEOT           < EOT DERRIERE ???
         JNE         GCONS2          < NON, ERREUR...
GCONSC:  EQU         $
         LXI         4
         LBY         &ABUF           < ACCES A LA 2EME CONSTANTE.
         ADRI        -'30,A          < DECODAGE BINAIRE.
         JAL         GCONS2          < ERREUR.
         CPI         9               < EST-CE DE 0 A 9 ???
         JLE         GCONSA          < OUI.
         ADRI        -"A"+"9"+1,A    < NON, SUITE DECODAGE.
         CPI         9
         JL          GCONS2          < ERREUR DE SYNTAXE.
GCONSA:  EQU         $
         CPI         NCONST-1        < VALIDATION DU NOM ???
         JG          GCONS2          < ERREUR, N'EXISTE PAS...
         PSR         W               < SAVE C@CONSTANTE RESULTAT.
         LR          A,W
         LAD         CONST0
         ADR         B,W             < PRISE EN COMPTE DES MODES
                                     < LOCAUX (B=0), ET GLOBAUX (B#0).
         ADR         A,W             < W=@CONSTANTE ARGUMENT.
         LB          0,W             < B=VALEUR DE @L.
         PLR         W               < RESTAURE L'@CONSTANTE.
         JMP         GCONS4          < VERS L'ACCES A L'OPERATEUR...
         PAGE
<
<
<        S I M U L A T I O N   M A I T R E   1   C A R A C T E R E  :
<
<
<        FONCTION :
<                      CETTE ROUTINE MAITRE EMET UN CARACTERE
<                    DU MESSAGE COURANT A DESTINATION
<                    DU HANDLER DE LA VISU ASSIGNEE
<                    A '0B SI LE CODE ASCI DE CELUI-CI EST
<                    IBFERIEUR A '80; EN PARTICULIER
<                    LA FIN DE MESSAGE EST L'EOT ('04) : SI CELUI-CI
<                    N'EST PAS A EMETTRE, ON LUI DONNE
<                    LE CODE '80+'04...
<
<
         WORD        LOC+'80         < VALEUR RELATIVE DE L.
SEND:    EQU         $
         LRP         L
         LA          -1,L            < A=@RELATIVE LOCAL.
         AD          10,W            < W=@DCTESC, ET 10,W=SLOESC.
         LR          A,L             < L=@ABSOLUE LOCAL.
         LA          ABUF            < ACCES A ABUF.
         AD          10,W            < ABSOLUTISATION DE ABUF.
         STA         ABUFA
         LA          CDESC           < A=@RELATIVE DESCRIPT. COURANT.
         AD          10,W            < ABSOLUTISATION PAR SLOESC.
         LR          A,C             < C=@ABSOLU DESCRIPTEUR COURANT.
         LA          ADCTVI
         LR          A,W             < W=@DCTVISU.
<
< VALIDATIONS DE L'APPEL :
<
         LA          SIT,W
         SWBR        A,A
         JAGE        $               < ON N'EST PAS EN ATTENTE D'IT !!!
         LRM         A
         WORD        JF)ETANXT
         CP          RX,W
         JNE         $               < ON N'EST PAS EN ATTENTE D'UNE ENTREE !!!
<
< SIMULATION DE LA RECEPTION D'UN CARACTERE :
<
         LX          XBUF            < X=INDEX COURANT DU BUFFER CARTE.
         LBY         &ABUFA          < A=CARACTERE COURANT.
         CPI         '80             < CODE A EMETTRE ???
         JGE         SEND1           < NON...
         SBT         0               < AFIN D'AVOIR A<0.
         STA         ETAT,W          < QUE L'ON MET DANS L'ETAT DE
                                     < LA VISU ASSIGNEE A '0B.
         DC          NOCT            < ET UN OCTET DE MOINS...
         IF          ORDI-"T",XWOR%,,XWOR%
         RLSE        SIT,W           < ET ON SIMULE UNE PSEUDO-IT VIS.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LAD         SIT,W           < A=ADRESSE DU 'SIT' D'INTERRUPTION, ET
         SVC         SVCM1           < SIMULATION D'UNE PSEUDO-INTERRUPTION
                                     < SUR LA VISU...
XWOR%:   VAL         0
SEND1:   EQU         $
         RSR                         < ET C'EST TOUT...
         PAGE
<
<
<        S I M U L A T I O N   ! A S S I G N  :
<
<
ASSGN:   EQU         $
         LXI         1
         BSR         ATEOT           < EOT DERRIERE ???
         JNE         GCONSH          < NON, ERREUR...
         BSR         AASIGN          < ENTREE DES ASSIGNATIONS
                                     < NVP --> NSP VISU.
         BR          AMAJIE          < ET C'EST TOUT.
<
<
<        E N T R E E   D E S   N V P  -->  N S P  :
<
<
ASSIGN:  EQU         $
         PSR         X,C
         LAD         BUF
         SBT         0
         STA         ABUF            < POUR LA 1ERE FOIS !?!?!??!
         LXI         0               < X=1ER NVP A TESTER.
EXPL1:   EQU         $
         LA          &ADESC          < DESCRIPTEUR DU NVP COURANT (X).
         JAE         EXPL4           < NON ASSIGNABLE (=0).
<
< CAS D'UN NVP ASSIGNABLE :
<
         PSR         X
         LR          A,B             < SAVE L'@ DESCRIPTEUR, AINSI
                                     < QUE L'ETAT VALIDE (BIT0).
         RBT         0
         LR          A,C             < C=@DESCRIPTEUR DU NVP=(X).
EXPL5:   EQU         $
         LAD         NOMVIS
         BSR         APRINT          < ENVOI DU NVP.
         LA          AMVIS
         BSR         APRINT          < ENVOI INVITATION.
         CPZR        B               < LE NVP EST-IL DEJA ASSIGNE ???
         JG          EXPL6           < DEJA ASSIGNE (>0).
<
< CAS D'UN NVP NON ASSIGNE :
<
         LAD         DEM1C
         SVC         0               < ENTREE NUMERO VISU.
         LXI         0               < INDEX CARACTERE ENTRE.
<
<        REPONSES RECONNUES :
<                    EOT,R/C         NE PAS TOUCHER A CE NVP,
<                    NUMERO DE 1 A.. ASSIGNER CE NVP A LA VISU
<                                    DONT LE NUMERO EST DONNE.
<
         BSR         ATEOT           < NVP A NE PAS INITIALISER ???
         JE          EXPL2           < R/C IDEM A 'EOT'...
         ADRI        -'30+NSPVI1-1,A < DECODAGE BINAIRE.
         CPI         NSPVI1          < VALIDATION...
         JL          EXPL3           < ERREUR...
         CPI         NSPVIN          < VALIDATION...
         JG          EXPL3           < ERREUR...
         STA         NSPVIS          < OK, SAVE LE NSP DE CETTE VISU.
         SBT         0               < BIT0=1 : ACCES @DCT PAR NSP,
         WORD        '1E15           < B=@DCT VISU.
         STB         ADCTVI          < SAVE L'@DCT DE CETTE VISU.
         LR          C,A             < A=@DESCRIPTEUR, AVEC BIT0=0.
         PLR         X               < RESTAURE X=NVP-1.
         STA         &ADESC          < AUTORISATION DE CE NVP.
         STZ         MODE
         IC          MODE            < MODE=1 : NVP=....
         STZ         NOMIT           < AFIN DE FORCER UNE REDEMANDE
                                     < DU NOM D'ITEM ASSOCIE; CECI
                                     < EST TRES UTILE A LA SUITE
                                     < DES ALT-MODES; EN DECONNECTANT
                                     < UN NVP DE SON NSP, ET EN LE
                                     < RECONNECTANT TOUT DE SUITE,
                                     < ON REINITIALISERA TOUT LE
                                     < CONTEXTE DE CE NVP...
EXPL4:   EQU         $
         ADRI        1,X             < NVP SUIVANT...
         LR          X,A
         CPI         NVPMAX+1        < EXISTE-T'IL ???
         JL          EXPL1           < OUI...
         PLR         X,C
         RSR                         < ET C'EST TOUT...
<
< CAS DES NVP INTOUCHES :
<
EXPL2:   EQU         $
         PLR         X               < RESTAURE LE NVP,
         JMP         EXPL4           < ET AU PRECEDENT...
<
< CAS DES FAUTES DE SYNTAXE :
<
EXPL3:   EQU         $
         LAD         MERR
         BSR         APRINT
         JMP         EXPL5           < ET NOUVEL ESSAI !!!
<
< CAS D'UN NVP DEJA ASSIGNE :
<
EXPL6:   EQU         $
         LA          NSPVIS          < A=NSP DE LA VISU REELLE.
         ADRI        '30-NSPVI1+1,A  < CONVERSION EN UN NUMERO.
         SBT         7               < OCTET0(A)=LONGUEUR DU
                                     < MESSAGE=1.
         STA         BUF
         LAD         BUF
         BSR         APRINT          < EDITION DE LA VISU ASSOCIEE
                                     < AU NVP COURANT.
         CPZ         MODE            < !ASSIGN OU SIMULATION ???
         JNE         EXPL7           < OK, SIMULATION...
         LA          AMMODE          < ET NON, !ASSIGN,
         BSR         APRINT
         JMP         EXPL2           < ON NE PEUT FAIRE '-' !!!
EXPL7:   EQU         $
         LAD         MINTER
         BSR         APRINT          < ENVOI D'UNE INVITATION.
         LAD         DEM1C
         SVC         0               < ENTREE DE LA REPONSE.
         LXI         0               < INDEX CARACTERE ENTRE.
<
<        REPONSES RECONNUES :
<                    EOT,R/C         NE PAS TOUCHER A CETTE ASSIGNATION,
<                    -               FAIRE LA DESASSIGNATION.
<
         BSR         ATEOT           < ???
         JE          EXPL2           < RIEN A FAIRE...
         CPI         "-"
         JNE         EXPL7           < ERREUR, ON REDEMANDE !!!
<
< DESASSIGNATION :
<
         SBT         0+NBITMO        < BIT0(B)=1.
         PLR         X               < RESTAURE LE NVP+1.
         STB         &ADESC          < INVALIDATION DU CONTEXTE.
         STZ         NSPVIS          < AFIN DE PERMETTRE L'EXPLORA-
         STZ         ADCTVI          < TION DE TASSGNE RELATIVE A CE NVP.
         JMP         EXPL1           < ON VA RETRAITER CE NVP; AINSU
                                     < ON PEUT TOUT DE SUITE LE REAS-
                                     < SIGNER !!!
         PAGE
<
<
<        P A R C O U R S   D E   T A S S G N  :
<
<
EXTAS:   EQU         $
         LA          BEXTAS
         WORD        '1EC5           < EXECUTION MAITRE DE 'MEXTAS'.
         RSR
<
< ROUTINE MAITRE DE PARCOURS DE TASSGN :
<
         WORD        LOC+'80         < @RELATIVE DU LOCAL.
MEXTAS:  EQU         $
         LRP         L
         LA          -1,L            < A=@RELATIVE LOCAL.
         AD          10,W            < ABSOLUTISATION PAR SLOESC.
         LR          A,L             < L=@ABSOLUE LOCAL.
         LA          ADESC           < A=RELAI RELATIF DESCRIPTEURS.
         AD          10,W            < ABSOLUTISATION PAR SLOESC.
         STA         MDESC           < RELAI ABSOLU DES DESCRIPTEURS.
         LYI         NVPMAX+1        < Y=1ER NVP INEXISTANT.
         LXI         0               < X=1ER NVP A TESTER.
<
< BOUCLE DE RECUPERATION DES NVP :
<
MEXT1:   EQU         $
         LA          &MDESC          < A=@DESCRIPTEUR ASSOCIE
                                     < AU NVP=(X).
         JAE         MEXT2           < CAS DES NVP A NE PAS TESTER.
         JAL         MEXT5           < NVP NON ASSIGNE...
         PSR         A,C
         AD          10,W            < ABSOLUTISATION DE L'@DESCRIPTEUR.
         LR          A,C             < C=@ABSOLUE DESCRIPTEUR.
         CPZ         NSPVIS          < LE NVP COURANT N'AURAIT-IL
                                     < PAS ETE L'OBJET D'UNE
                                     < SIMULATION D'ASSIGNATION ???
         PLR         A,C
         JNE         MEXT2           < OUI, NSPVIS#0, DONC ON
                                     < NE RETESTE PAS CE NVP !!!
MEXT5:   EQU         $
         SBT         0               < INVALIDATION A PRIORI.
         STA         &MDESC
         RBT         0               < A=@RELATIVE DU DESCRIPTEUR.
         AD          10,W            < ABSOLUTISATION PAR SLOESC.
         LR          A,B             < B=@ABSOLUE DESCIPTEUR.
         LBY         &TASSGN,W       < A=NSP ASSIGNE AU NVP=(X).
MEXT4:   EQU         $
         JAE         MEXT2           < INTERESSANT.
         CPI         2               < TEST DES !ASSIGN NVP=I/O ???
         JG          MEXT3           < NON.
         PSR         X               < OUI, SAVE LE NVP COURANT.
         LR          A,X             < POUR ACCES AUX NVP=1/2.
         LBY         &TASSGN,W       < ACCES AU NSP ASSIGNE AU
                                     < NVP=1/2.
         PLR         X               < RESTAURE LE NVP COURANT.
         JMP         MEXT4           < ET ON RECOMMENCE.
MEXT3:   EQU         $
         CPI         NSPVI1
         JL          MEXT2           < ININTERESSANT.
         CPI         NSPVIN
         JG          MEXT2           < ININTERESSANT.
         PSR         X,L
         LR          A,X             < X=NSP ASSIGNE AU NVP.
         BSR         ACADCT,C        < RENVOIE : A=L=@DCT(X=NSP).
         XR          B,C             < C=@DESCRIPTEUR, B=@COMMON CMS4.
         STA         ADCTVI          < SAVE L'@DCT VISU,
         STX         NSPVIS          < SAVE LE NSP DE CETTE VISU.
         STZ         MODE            < MODE=0 : !ASSIGN...
         XR          B,C             < C=@COMMON CMS4, B=@DESCRIPTEUR.
         PLR         X,L
         LR          B,A             < A=@ABSOLUE DU DESCRIPTEUR.
         SB          10,W            < RELATIVISATION DE (A).
         STA         &MDESC          < AUTORISATION DU DESCRIPTEUR.
MEXT2:   EQU         $
         ADRI        1,X             < AU NVP SUIVANT.
         CPR         X,Y             < EXISTE-T'IL ???
         JNE         MEXT1           < OK, ALLONS-Y...
         RSR                         < ET NON, ON S'EN VA...
         PAGE
         PROG        P2
         DST         P1
<
<
<        C O D A G E   < N O M >   E N   < N O M C >  :
<
<
<        FONCTION :
<                      CETTE ROUTINE CODE SUR 6 CARACTERES
<                    <NOMC> LES 'N' CARACTERES <NOM>
<                    D'UN NOEUD.
<                      CECI EST FAIT SUIVANT UN SUPERBE
<                    ALGORITHME DE COMPACTAGE PAS MAL
<                    UNIVOQUE ...
<
<
<        ARGUMENT :
<                    C=@DESCRIPTEUR ASSOCIE AU NVP COURANT.
<
<
<        RESULTAT :
<                    X=0 (OK).
<
<
CODAGE:  EQU         $
         STZ         VIEG
         IC          VIEG            < A CHAQUE (RE-)DEFINITION
                                     < D'ITEM, ON (RE-)INITIALISE
                                     < VIEG SUR LE 2EME CARACTERE
                                     < DE L'ITEM, AFIN DE SAUTER
                                     < LA DEFINITION DU CARACTER
                                     < DE FIN DE MESSAGE ASSOCIE A
                                     < CET ITEM.
<
< INITIALISATION DES CONSTANTES :
<
         LAD         CONST0-1
         SBT         0
         STA         AWORK           < RELAI D'ACCES A LA LISTE
                                     < DES CONSTANTES.
         LXI         NCONST          < X=INDEX D'ACCES.
RZCONS:  EQU         $
         STZ         &AWORK          < RAZ DES CONSTANTES.
         ADRI        -1,X
         LR          X,A
         CPI         NCONSG          < EST-ON ARRIVE AUX CONSTANTES
                                     < GLOBALES ???
         JG          RZCONS          < NON, ON CONTINUE...
         STZ         CCONST          < CCONST <-- 0.
<
< INITIALISATION PILE DE RECURSIVITE :
<
         LAD         PIR
         STA         BPR             < BASE DE PIR,
         SBT         0
         STA         APRC            < RELAI COURANT PIR,
         LAD         PIR+XPR
         STA         TPR             < TOP DE PIR.
         LXI         XPR
RZPIR:   EQU         $
         ADRI        -1,X            < ENTREE PRECEDENTE.
         STZ         &APRC           < RAZ PILE DE RECURSIVITE.
         CPZR        X
         JG          RZPIR           < AU MOT PRECEDENT...
<
< SUPPRESSION DE L'ITEM RESIDENT :
< AINSI, ON PEUT MODIFIER UN ITEM
< AU COURS D'UNE SESSION DE 'MASK',
< ET PRENDRE EN COMPTE SA NOUVELLE
< VERSION APRES UN !GO...
<
         STZ         &ANIT0          < POUR FORCER UN RECHARGEMENT...
<
< INITIALISATION DU CODEUR :
<
         LAD         NOMIT           < A=@NOMIT COURANT.
         SBT         0               < BIT D'INDEX.
         STA         ANOMC           < GENERATION D'UN RELAI TEMPORAIRE
                                     < VERS LE NOM CODE COURANT.
         STZ         F3              < RAZ DE LA FONCTION F3.
         LYI         3               < 2*3 CARACTERES A METTRE A BLANC.
         LXI         0               < INDEX DE MISE A BLANC.
         LAI         '20
         SBT         2               < A='SPACE''SPACE'.
ETI1:    EQU         $
         STA         &ANOMC          < MISE DE <NOMC> A 'SPACE'.
         ADRI        1,X             < INDEX DE RAZ.
         CPR         X,Y
         JNE         ETI1            < NEXT...
         LYI         -1              < Y=LONGUEUR COURANTE.
                                     <   =F1=LONGUEUR DU MOT ENTRE.
         LBI         0               < B=F2.
<
<        UTILISATION DES REGISTRES :
<
<                    B=F2=EOR(K(I)) : EOR SUR TOUS LES
<                      CARACTERES DE K(4) A K(L).
<                      F2=EOR(K(4),K(5),...,K(L)) ,
<                    Y=LONGUEUR COURANTE DU NOM ,
<                     =F1=LONGUEUR COURANTE DU MOT ENTRE (NBRE DE
<                      CARACTERES NON COMPRIS 'EOT') ,
<                    F3=CF. F2  , MAIS A CHAQUE EOR , LE
<                       RESULTAT INTERMEDIAIRE EST DECALE
<                       CIRCULAIREMENT.
<
<
< RECUPERATION DES 3 PREMIERS CARACTERES :
<
         BSR         AGTCAR          < A=K(1).
         JE          ETI2            < MOT VIDE, C'EST FINI.
         STBY        &ANOMC          < STORE : C(1)=K(1).
         BSR         AGTCAR          < A=K(2).
         JE          ETI2            < LE MOT N'A QU'UNE LETTRE.
         STBY        &ANOMC          < C(2)=K(2).
         BSR         AGTCAR          < A=K(3).
         JE          ETI2            < LE MOT N'A QUE 2 LETTRES.
         STBY        &ANOMC          < C(3)=K(3).
<
< CODAGE DES CARACTERES K(4),...,K(L) :
<
ETI3:    EQU         $
         BSR         AGTCAR          < A=K(I) , I=4,...,L.
                                     < (L DESIGNANT LA LONGUER DU
                                     < MOT A CODER).
         JE          ETI4            < ARRET DU CODAGE SUR 'EOT'.
         ADR         Y,A             < LE CARACTERE COURANT (A) EST
                                     < PONDERE PAR SA POSITION (X).
                                     < DANS LE MOT.
                                     < K(I)=K(I)+I.
         EORR        A,B             < CALCUL DE F2 :
                                     < F2=EOR(F2,K(I)).
         ADR         A,B             < F2=F2+K(I).
         EOR         F3              < CALCUL DE F3 :
                                     < A=EOR(F3,K(I)).
         SCLS        1               < DECALAGE CIRCULAIRE.
         STA         F3              < F3=SCLS(EOR(F3,K(I)),1).
         JMP         ETI3            < CODAGE DU CARACTERE SUIVANT.
<
< MISE SOUS FORME ASCI DES FONCTIONS F2 & F3 :
<
ETI4:    EQU         $
         LBY         F3              < A=OCTET0(F3).
         AD          F3              < A=F3+OCTET0(F3).
         ANDI        '7F             < A=OCTET0(F3)+OCTET1(F3).
                                     < (SUR 7 BITS).
         CPI         "Z"
         JLE         ETI5
         ADRI        -'30,A          < F3 EST MIS SOUS LA FORME D'UN
                                     < CODE INFERIEUR AU 'Z'.
ETI5:    EQU         $
         CPI         " "
         JG          ETI6
         ADRI        '30,A           < F3 EST DONC ENTRE LE 'Z'
                                     < (COMPRIS) ET LE 'SPACE' (NON
                                     < COMPRIS).
ETI6:    EQU         $
<        ON A ICI :
<                    A=F3=CARACTERE ASCI DE '!' (='21) A 'Z' (='5A) ;
<                          L'AMBIGUITE EST DONC POUR F3 DE '5A-'21.
         XR          A,B             < B=F3 , A=F2 A METTRE EN FORME.
         ANDI        '7F             < MISE SUR 7 BITS.
         CPI         "Z"
         JLE         ETI7
         ADRI        -'30,A          < ON RAMENE F2 A UN CODE INFERIEUR
                                     < A CELUI DU 'Z'.
ETI7:    EQU         $
         CPI         "0"
         JGE         ETI8
         ADRI        '20,A           < ON TENTE DE RAMENER F2 APRES
                                     < LE CODE DU '0' (ZERO).
         JMP         ETI7            < POURSUIVONS LA TENTATIVE...
ETI8:    EQU         $
<        ON A ICI :
<                    A=F2=CARACTERE ASCI ALLANT DU '0' (COMPRIS)
<                          AU 'Z' (COMPRIS) ; L'AMBIGUITE DE F2 EST DONC
<                          DE '30-'5A :
<                                    AMBIGUITE(F2)<AMBIGUITE(F3).
         SWBR        A,A
         ORR         B,A             < A=F2.F3.
         STA         NOMIT+2         < STORE : C(5)=F2, C(6)=F3.
<
< CODAGE DE LA LONGUEUR DU MOT :
<
ETI2:    EQU         $
<        ON A ICI :
<                    Y=LONGUEUR DU MOT ENTRE (NON COMPRIS 'EOT').
         LR          Y,A
         ADRI        '30,A           < ON MET LA LONGUEUR SOUS FORME
                                     < D'UN CARACTERE ASCI QUI NOUS
                                     < DONNE F1 DONT L'AMBIGUITE EST
                                     < DE '30-.... , MAIS INFERIEUR A
                                     < CELLE DE F2 , ET DONC A CELLE
                                     < DE F3 A FORTIORI.
         LXI         3               < INDEX DE C(4).
         STBY        &ANOMC          < STORE : C(4)=F1.
         LXI         6               < INDEX DE C(7).
         LAI         '04             < 'EON' DE FIN DE NOM CODE.
         STBY        &ANOMC          < STORE : C(7)='EON'.
         LXI         0               < RETOUR OK.
         RSR
         PAGE
<
<
<        A C C E S   A   U N   C A R A C T E R E  :
<
<
<        FONCTION :
<                      CETTE ROUTINE FAIT PROGRESSER L'INDEX
<                    CARACTERE COURANT (X) , LA LONGUEUR COURANTE
<                    DU MOT (X) ET ACCEDE LE CARACTERE COURANT ,
<                    APRES INCREMENTATION DE X ; ENFIN
<                    ELLE DIT SI LE CARACTERE ACCEDE EST
<                    OU N'EST PAS 'EOT'.
<
<
<        NOTA :
<                      UNE REPONSE EQUIVALENTE EST DONNEE
<                    DANS LE CAS OU LA LONGUEUR COURANTE
<                    ATTEINTE EST LA LONGUEUR MAX QUE
<                    PEUT ATTEINDRE UN <NOM>.
<
<
GTCAR:   EQU         $
         ADRI        1,Y             < PROGRESSION LONGUEUR SUIVANTE.
         LR          Y,X
         ADRI        2,X             < X=INDEX CARACTERE DANS 'BUF'.
         BSR         ATEOT           < ACCES CARACTERE COURANT, ET
                                     < TEST DE FIN DE MESSAGE...
         LR          Y,X             < POUR LE STOCKAGE DES 3
                                     < PREMIERS CARACTERES.
         RSR
         PAGE
<
<
<        G E N E R A T I O N   D U   M O D U L E  :
<
<
FTASK:   EQU         $               < 1ER MOT APRES LE MODULE.
LGIT:    VAL         FTASK-ZERO*2
SIZE:    EQU         ZERO+LGIT       < LONGUEUR OCTET DU MODULE EXPRI-
                                     < ME A L'AIDE D'UN SYBOLE TRANSLA-
                                     < TABLE POUR REFERENCE EN AVANT.
         LOCAL
LOC2:    EQU         $
DEMCCI:  WORD        '0001           < APPEL DU CCI.
LONGR:   VAL         FTASK-NTASK     < NBRE DE MOTS DU MODULE.
DEMGEN:  WORD        '8402           < DEMANDE DE STORE AU SGN.
         WORD        NTASK-ZERO*2
         WORD        LONGR*2
         WORD        6
PILE1:   DZS         10
         PROG
         WORD        LOC2+'80
GENERE:  EQU         $
         LRP         L
         LA          -1,L
         LR          A,L
         LAD         PILE1-1
         LR          A,K
GEN1:    EQU         $
         LAD         DEMGEN
         SVC         0               < TENTATIVE DE STORE 'TASK'.
         JE          GEN2            < OK, FIN.
         LAD         DEMCCI          < STORE IMPOSSIBLE, IL Y A ERREUR
         SVC         0               < D'ASSIGNATION : RETOUR TEMPORAIRE
         JMP         GEN1            < AU CCI, PUIS ON RETENTE...
GEN2:    EQU         $
         LAD         DEMCCI
         SVC         0               < OK, ON FAIT UN RETOUR DEFINITIF
         JMP         GEN2            < AU CCI.
         END         GENERE



Copyright © Jean-François Colonna, 2022-2022.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2022.