TABLE
ZERO:    EQU         $
         DZS         '10             <POUR CMS4
         WORD        DEB
         WORD        DEBEFF
         PROG
DEB:     EQU         $
         LRP         L
         BR          -1,L
<
         PAGE
<
<
<
<        E T A T S   D E   L  '  A N A L Y S E
<
<
EPO:     VAL         0               <PARENTHES OUVRANTE OU DEB ANALYSE
EPF:     VAL         1               <PARENTHESE FERMANTE
ECD:     VAL         2               <CONSTANTE DECIMALE
ECH:     VAL         3               <CONSTANTE HEXA
ECB:     VAL         4               <CONSTANTE BINAIRE
ECA:     VAL         5               <CONSTANTE ASCI
EV1:     VAL         6               <VARIABLE 1ER MEMBRE
EV2:     VAL         7               <VARIABLE 2ND MEMBRE
EOP:     VAL         8               <OPERATEUR
EF1:     VAL         9               <FIN 1ER MEMBRE
EPP:     VAL         10              <POST O-PERATEUR
EFT:     VAL         11              <FIN DE TRAVAIL
EER:     VAL         12              <ERREUR
<
<        NOTA:       EPP EST PEU DIFFERENT DE EPO
<
<
<        T Y P E   C A R A C T E R E   E N   C O U R S
<
AC:      VAL         '1              <CARACTERES  A C
BDF:     VAL         '2              <CARACTERES  B D F
LL:      VAL         '4              <CARACTERE  L
BA:      VAL         '8              <DELIMITEUR ASCI   "
BB:      VAL         '10             <BASE BINAIRE  %
BH:      VAL         '20             <BASE HEXA  '
C01:     VAL         '40             <CHIFFRES  0 1
C29:     VAL         '80             <CHIFFRES 2 3 ... 9
EG:      VAL         '100            <SIGNE  =
EOT:     VAL         '200            <EOT  (OU  CTRLD)
OP:      VAL         '400            <OPERATEUR
PO:      VAL         '800            <PARENTHESE OUVRANTE
PF:      VAL         '1000           <PARENTHESE FERMANTE
SP:      VAL         '2000           <ESPACE
AU:      VAL         '4000           <AUTRE CARACTERE
<
<
<
AF:      VAL         AC+BDF          <CARACTERES A B C D E F
ACL:     VAL         AC+LL           <CARACTERS A C L
C09:     VAL         C01+C29         <CHIFFRES 0...9
C0F:     VAL         C09+AF          <CHIFFRES 0...F
<
<        OPERATEURS
<
PLUS:    VAL         "+"             <ADDITION
MOINS:   VAL         "-"             <SOUSTRACTION
MULT:    VAL         "*"             <MULTIPLICATION
DIV:     VAL         "/"             <DIVISION, QUOTIENT
REST:    VAL         "\"             <DIVISION, RESTE
SHFTL:   VAL         "<"             <SHIFT LEFT
SHFTR:   VAL         ">"             <SHIFT RIGHT
OR:      VAL         "@"             <OU LOGIQUE
AND:     VAL         "&"             <ET LOGIQUE
EOR:     VAL         "#"             <OU EXCLUSIF
<
<
<
<                    P A R A M E T R E S
<
NMNIV:   VAL         10              <NB MAX NIVEAUX DE PARENTHESES
LMVC:    VAL         32              <LONGUEUR MAX VARIABLE OU CSTE
<                                    <EN FORMAT EXTERNE
LMMSG:   VAL         90              <LONGUEUR MAX MESSABE EN PROVE
<                                    <NANCE DE L'UTILISATEUR
<
LTBNV:   VAL         90              <LONGUEUR MAX TABLR DES NOMS DE
                                     <VARIABLES, ELLE EST DE LA FORME:
                                     <"NOM1"'FF"NOM2"'FF...
                                     <..."NOMN"'FF'00
NMAXV:   VAL         25              <NB MAX DE VARIABLES POUR LA TABLE
                                     <DES VALEURS: TVV
         PAGE
         TABLE
<
<        TABLE DES ADRESSES DES TABLES POUR CHAQUE ETAT
<
TBET:    EQU         $
         WORD        TEPO            <ETAT PRENTHESE OUVRANTE
         WORD        TEPF            <ETAT PARENTHESE FERMANTE
         WORD        TECD            <ETAT CSTE DECIMALE
         WORD        TECH            <ETAT CSTE HEXA
         WORD        TECB            <ETAT CSTE BINAIRE
         WORD        TECA            <ETAT CSTE ASCI
         WORD        TEV1            <ETAT VARIABLE 1ER MEMBRE
         WORD        TEV2            <ETAT VARIABLE 2ND MEMBRE
         WORD        TEOP            <ETAT OPERATEUR
         WORD        TEF1            <ETAT FIN MEMBRE 1
         WORD        TEPP            <ETAT POST O-PERATEUR
<
<        TABLE DE BRANCHEMENT EN FONCTION DE L'ETAT ET DU
<        CARACTERE EN COURS
<
<        CHAQUE POSTE DE LA TABLE CONTIENT ADRESSE DE
<        BRANCHEMENT ET TYPES DE CARACTERES ASSOCIES
<
<        POUR CHAQUE ETAT LA TABLE SE TERMINE PAR UN MOT A ZERO
<
TEPO:    EQU         $               <ETAT PO (PARENTHESE OUVRANTE)
         WORD        INOP;OP
TEPP:    EQU         $               <ETAT PP (POST O-PERATEUR)
         WORD        INV1;ACL+BDF+AU
         WORD        INCA;BA
         WORD        INCB;BB
         WORD        INCH;BH
         WORD        INCD;C09
         WORD        TRPO;PO
         WORD        ANACAL;SP
         WORD        -EPO
TEPF:    EQU         $               <ETAT PF (PARENTHESE FERMANTE)
         WORD        TRF1;EG
         WORD        INOP;OP
         WORD        TRPF;PF
         WORD        ANACAL;SP
         WORD        -EPF
TECD:    EQU         $               <ETAT CD (CSTE DECIMALE)
         WORD        TRCD;C09
         WORD        ECDEG;EG
         WORD        ECDOP;OP
         WORD        ECDPF;PF
         WORD        ANACAL;SP
         WORD        -ECD
TECH:    EQU         $               <ETAT CH (CSTE HEXA)
         WORD        TRCH;C0F
         WORD        ECHEG;EG
         WORD        ECHOP;OP
         WORD        ECHPF;PF
         WORD        ANACAL;SP
         WORD        -ECH
TECB:    EQU         $               <ETAT CB (CSTE BINAIRE)
         WORD        TRCB;C01
         WORD        ECBEG;EG
         WORD        ECBOP;OP
         WORD        ECBPF;PF
         WORD        ANACAL;SP
         WORD        -ECB
TECA:    EQU         $               <ETAT CA (CSTE ASCI)
         WORD        ECABA;BA
         WORD        TRCA;'FFFF
TEV1:    EQU         $               <ETAT V1 (VAR MEMBRE 1)
         WORD        TRV1;ACL+BDF+C09+AU
         WORD        EV1EG;EG
         WORD        EV1OP;OP
         WORD        EV1PF;PF
         WORD        ANACAL;SP
         WORD        -EV1
TEV2:    EQU         $               <ETAT V2 (VAR MEMBRE 2)
         WORD        TRV2;ACL+BDF+C09+AU
         WORD        EV2CD;EOT
         WORD        ANACAL;SP
         WORD        -EV2
TEOP:    EQU         $               <ETAT OP (OPERATEUR)
         WORD        EOPACL;ACL
         WORD        ANACAL;SP
         WORD        -EOP
TEF1:    EQU         $               <ETAT F1 (FIN MEMBRE 1)
         WORD        INV2;ACL+BDF+AU
         WORD        TRFM;EOT
         WORD        ANACAL;SP
         WORD        -EF1
<
<        TABLE CORRESPONDANCE CARACTERES/TYPE UTILISEE
<        PAR LE SP TRCAR
<
TCAR:    EQU         $-" "
         WORD        SP;AU;BA;OP     < ESPACE ! " #
         WORD        AU;BB;OP;BH     < $ % & '
         WORD        PO;PF;OP;OP     < ( ) * +
         WORD        AU;OP;AU;OP     < , - . /
         WORD        C01;C01;C29;C29 < 0 1 2 3
         WORD        C29;C29;C29;C29 < 4 5 6 7
         WORD        C29;C29;AU;AU   < 8 9 : ;
         WORD        OP;EG;OP;AU     < < = > ?
         WORD        OP;AC;BDF;AC    < @ A B C
         WORD        BDF;BDF;BDF     < D E F
<
<        TABLES DES NOMS DE VARIABLES ET DES VALEURS DE VARIABLES
<
TNV:     DZS         LTBNV           <TABLE DES NOMS DE VARIABLES
                                     <DE LA FORME:  "NOM1"'FF"NOM2"'FF...
                                     <..."NOMN"'FF'00
TNVF:    EQU         $               <FIN TABLE TNV
TVV:     DZS         NMAXV*2         <TABLE DES VALEURS (2 MOTS PAR VALEUR)
<
<
<        PILES
<
PREG:    DZS         80              <REGISTRES (PAR K)
PR:      DZS         NMNIV+1*2       <PILE DES RESULTATS
POP:     DZS         NMNIV+4         <PILE DES OPERATEURS(PUSH/PULL)
<
<        AUTRES ZONES
<
VCC:     DZS         LMVC/2+1        <VARIABLE OU CSTE EN COURS
MSG:     DZS         LMMSG/2+1       <MESSAGE EN ENTRDEE
<                    MESSAGE D'ERREUR
ER:      ASCI        " ER "
CODR:    DZS         3               <CODE ERREUR
<                    REPONSE
REP:     ASCI        " "
REPH:    DZS         5               <RESULTAT EN HEXA
         ASCI        "    "
         BYTE        '22
REPA:    DZS         2               <RESULTAT EN ASCI
         BYTE        '22;'0D;'0A
REPB:    DZS         20              <RESULTAT EN BINAIRE
         ASCI        "    "
REPD:    DZS         3               <RESULTAT EN DECIMAL
         ASCI        "    "
LREPD:   VAL         $-REPD
LREPF:   VAL         8
REPF:    DZS         LREPF           <RESULTAT EN FLOTTANT
IREPDF:  EQU         $               < POUR REINITIALISER 'REPD' ET 'REPF'...
         DO          $-REPD
         WORD        "  "
LREPDF:  VAL         $-IREPDF
<
MES0:    BYTE        '0D;'0A;">"     <DEMANDE A L'UTILISATEUR
<
         PAGE
         COMMON
COMCAL:  EQU         $
         WORD        0               < POUR LE BLOC FLOTTANT...
<
<        C O N S T A N T E S
<
<                    CONSTANTES DIVERSES
<
DIX:     WORD        10
PDIX:    DZS         1               <PUISSANCES DE 10
TEOT:    WORD        EOT             <TYPE CARACT  EOT
TOP:     WORD        OP              <TYPE OPERATEUR
TLL:     WORD        LL              <TYPE LL
TAU:     WORD        AU              <TYPE AUTRE
LNF::    VAL         2               < LONGUEUR MOTS D'UN NOMBRE FLOTTANT.
EFL10E:  WORD        10              < DIX ENTIER.
EFLDIX:  FLOAT       10.0
EFL1SD:  FLOAT       0.1
EFLUN:   FLOAT       1.0
EFLT1:   DZS         LNF             < ZONE DE TRAVAIL 1.
EFLSDX:  DZS         1               < SIGNE DE X ARGUMENT:
                                     < = 0 : X >= 0,
                                     < < 0 : X < 0.
EFLPUI:  DZS         1               < PUISSANCE DE 10 DU NOMBRE.
EFLREL:  DZS         1               < RELAI D'ACCES A LA ZONE D'EDITION.
EFLX:    WORD        '8000           < RELAI D'ADRESSAGE OCT
<
<                    ARGUMENTS POUR SVC
<
DEM1:    WORD        '0202           <ENVOI CARACTERE ">"
         WORD        MES0-ZERO*2
         WORD        3
<
DEM2:    WORD        '0101           <LECTURE EXPRESSION
         WORD        MSG-ZERO*2
         WORD        LMMSG
<
DEM3:    WORD        '0001           <RETOUR CCI INTERACTIF
<
DEM4:    WORD        '0202           <ENVOI REPONSE UL 2
         WORD        REP-ZERO*2
         WORD        0
<
DEM5:    WORD        '0202           <ENVOI MESSAGE D'ERREUR
         WORD        ER-ZERO*2
         WORD        0
<
<        R E S E R V A T I O N S
<
PCC:     DZS         1               <POINTEUR CARACT EN COURS
NC:      DZS         1               <NIVEAU PARENTHESES EN COURS
PPR:     DZS         1               <POINTEUR PILE DES RESULTATS
ETAT:    DZS         1               <ETAT DE L'ANALYSE
PCVCC:   DZS         1               <POINTEUR EN COUS VAR OU CSTE
<                                    <EN COURS
LMVCC:   DZS         1               <LONG MAX ..ETC...
LVCC:    DZS         1               <LONGUEUR COURANTE ...ETC...
RGVC:    DZS         1               <RANG VARIABLE EN COURS DANS TABLE
                                     <DES NOMS (TNV) TBLE DES VALEURS (TVV)
PCTNV:   DZS         1               <POINTEUR COURANT TABLE DES NOMS
<
<        R E L A I S
<
AOCT:    WORD        ZERO,X          <ADRESSE OCTET
AOVCC:   WORD        VCC-ZERO*2      <ADR OCT VAR OU CSTE EN COUS
AOCODR:  WORD        CODR-ZERO*2     <ADR OCTET CODE ERREUR
AOREPH:  WORD        REPH-ZERO*2     <ADR OCT REPONSE HEXA
AOREPB:  WORD        REPB-ZERO*2     <ADR OCT REPONSE BINAIRE
AOREPD:  WORD        REPD-ZERO*2     <ADR OCT REPONSE DECIMALE
AOREPF:  WORD        REPF-ZERO*2     <ADR OCTET REPONSE FLOTTANTE
AOREPA:  WORD        REPA-ZERO*2     <ADR OCT REPONSE ASCI
AXREPA:  WORD        REPA,X          <REPONSE ASCI
AOTNV:   WORD        TNV-ZERO*2      <ADR OCT TABLE NOMS DE VARIABLES
AOTNVF:  WORD        TNVF-ZERO*2     <ADR OCT FIN DE CETTE TABLE
AXTVV:   WORD        TVV,X           <RELAI TABLE DES VALEURS
ATBET:   WORD        TBET,X          <TABLE BRANCH SELON ETAT EN COURS
APREG:   WORD        PREG-1          <PILE UTILISABLE AVEC K
APR:     WORD        PR,X            <PILE DES RESULTATS
APO:     WORD        POP             <PILE DES OPERATEURS
ATCAR:   WORD        TCAR,X          <TAB DES CARACT (CF SP TRCAR)
AANACA:  WORD        ANACAL
AERR:    WORD        ERR
ATRCAR:  WORD        TRCAR
AINOP:   WORD        INOP
ATRCA:   WORD        TRCA
ATRCD:   WORD        TRCD
ATRPF:   WORD        TRPF
ATRF1:   WORD        TRF1
ATRFM:   WORD        TRFM
ACDB:    WORD        CDB
ACBD:    WORD        CBD
AEFL:    WORD        EFL
EFLADA:  WORD        EFLDA           < EDITION DE L'EXPOSANT.
EFLAST:  WORD        EFLST           < STOCKAGE D'UN OCTET EN ZONE D'EDITION.
ACHB:    WORD        CHB
ACBB:    WORD        CBB
ACADR:   WORD        CADR
AOPER:   WORD        OPER
ACLV1:   WORD        CLV1
ACLV2:   WORD        CLV2
AEDITR:  WORD        EDITR
AEDHB:   WORD        EDHB
ACLN:    WORD        CLN
AV16:    WORD        V16
ARCHV:   WORD        RCHV            <RECHERCHE VARIABLE
AINSV:   WORD        INSV            <INSTALLATION VARIABLE
ADEB2:   WORD        DEB2            <ADR RETOUR SI ALT-MODE
<
         PROG
<
<        I N I T I A L I S A T I O N S   G L O B A L E S
<
<        BASE DU COMMON
<
         WORD        COMCAL+128
DEBEFF:  EQU         $               <POINT D'ENTREE EFFECTIF
         LRP         C
         LY          -1,C
         LR          Y,C
<
<        PILE GEREE PAR K
<
         LA          APREG
         LR          A,K
<
<        TABLE DES NOMS DE VARIABLES: ON MET LE DELIMITEUR DE FIN '00
<        EN TETE
<
         LAI         0
         LX          AOTNV
         STBY        &AOCT
<
<        ADRESSE BRANCHEMENT SI ALT-MODE
<
         LA          ADEB2
         WORD        '1EB5
<
<        INTERROGATION UTILISATEUR
<
DEB2:    EQU         $
         LRM         A,B,X
         WORD        IREPDF
         WORD        REPD
         WORD        LREPDF
         MOVE                        < REINITIALISATION DE 'REPD' ET 'REPDF'...
         LAD         DEM1
         SVC         0
         JE          LEC
         LBI         1
         ACTD
<
<        LECTURE MESSAGE
<
LEC:     EQU         $
         LAD         DEM2
         SVC         0
         JE          TSTFIN
         LBI         2
         ACTD
<
<        TEST FIN
<
TSTFIN:  EQU         $
         LX          DEM2+1
         LBY         &AOCT
         CPI         '04             <1ER CARACT=EOT?
         JNE         INIT
         LAD         DEM3            <OUI, RETOUR CCI
         SVC         0
         JMP         DEB2
INIT:    EQU         $
<
<        INITIALISATIONS ANALYSE SYNTAXIQUE ET CALCUL
<
<        ADRESSE CARACTERE EN COURS (ADR OCTET)
<
         LA          DEM2+1
         ADRI        -1,A
         STA         PCC             <POINTEUR CARACT EN COURS
<
<        PILE DES OPERATEURS ET NIVEAU EN COURS
<
         LAI         NMNIV+3
         SWBR        A,A
         ORI         1
         STA         &APO            <PILE UTILISANT PUSH/PULL
         LY          APO
         LAI         0
         PUSH                        <OPERATEUR NEUTRE AU NIVEAU
                                     <EN COURS (NIVEAU ZERO)
<
         STZ         NC              <NIVEAU EN COURS = 0
<
<        PILE DES RESULTATS: DEUX MOTS PAR
<        POSTE DE LA TABLE (RESULT.SUR 2 MOTS)

<
         LA          APR
         STA         PPR             <POINTEUR PILE RESULTATS
         LXI         0
         STZ         &PPR            <RAZ 1ER MOT NIVEAU 0
         LXI         1
         STZ         &PPR            <IDEM 2EME MOT NIVEAU ZERO
<
<        REINIT K (ON PEUT ETRE SORTI EN ERREUR AVEC PILE NON VIDE)
<
         LA          APREG
         LR          A,K
<
<        ETAT ANALYSE:  ETAT INITIAL=EPO (ETAT
<        PARENTHESE OUVRANTE)
<
         LAI         EPO
         STA         ETAT
         PAGE
<
<
<        ANALYSE ET CALCUL
<
ANACAL:  EQU         $
         LA          ETAT
         CPI         EFT             <FIN DE TRAVAIL?
         JNE         A01
         LAD         DEM4            <OUI,ENVOI REPONSE...
         SVC         0
         JE          DEB2            <...+ CARACTERE ">"
         LBI         4
         ACTD
A01:     EQU         $
         CPI         EER             <ETAT ERREUR?
         JNE         A02
         LAD         DEM5            <OUI, ENVOI MESSAGE...
         SVC         0
         JE          DEB2            <...+CARACTERE ">"
         LBI         5
         ACTD
A02:     EQU         $               <DERNIER CARACTERE ATTEINT?
         LA          PCC             <POINT. CAR. EN COURS
         SB          DEM2+1          <  - ADR. DEB
         CPI         LMMSG           <LONG MAX MSG
         JL          A03             <PLUS PETIT?
         LBI         10              <NON, ERREUR
         BR          AERR
A03:     EQU         $               <CONTINUER ANALYSE
         IC          PCC             <POINTEUR CARACT EN COURS='+1
         LX          PCC
         LBY         &AOCT           <A=CARACT.EN COURS
         BSR         ATRCAR          <ET TYPE CARACTERE-->B
         LX          ETAT
         LY          &ATBET          <ADR. TABLE ETAT EN COURS,
                                     <1ER POSTE
A05:     EQU         $               <DETERMINATION DE L'DRESSE
                                     <A LAQUELLE ON DOIT SE BRANCHER
                                     <PAR BALAYAGE DE LA TABLE DE
                                     <L'ETAT EN COURS
         LR          Y,W             <ADR POSTE EN COURS
         LA          0,W
         JAG         A04             <SI ADR <=0 ,  CAS ERREUR
         LR          A,B             <NUMERO MESS. D'ERREUR
         BR          AERR            < ---> ERREUR
A04:     EQU         $
         LA          1,W             <TYPES CARACT. AUTORISES
         ANDR        B,A             <LE TYPE EN COURS CONVIENT?
         JAE         A06             <NON, CONTINUER BALAYAGE
         BR          0,W             <OUI, BRANCHEMENT
A06:     EQU         $
         ADRI        2,Y             <POSTE SUIVANT
         JMP         A05             <BOUCLE
<
         PAGE
<
<        ETAT=ECD(CSTE DECIMALE) ...
<
ECDEG:   EQU         $               <...ET SIGNE =
         BSR         ACDB            <CONV DECIM.-->BIN. ET OPERATION
         BR          ATRF1           <TRAITEMENT FIN MEMBRE 1
<
ECDOP:   EQU         $               <...ET OPERATEUR
         BSR         ACDB            <CONV. DEC.--->BIN. ET OPERATION
         BR          AINOP           <INIT OPERATEUR
<
ECDPF:   EQU         $               <...ET PARENTH. FERMANTE
         BSR         ACDB            <CONV DEC-->BIN ET OPERATION
         BR          ATRPF           <TRAITEMENT PARENTH. FERMANTE
<
<        ETAT=ECH(CSTE HEXA) ...
<
ECHEG:   EQU         $               <...ET SIGNE =
         BSR         ACHB            <CONV HEXA-->BIN. ET OPER.
         BR          ATRF1           <TRAIT. FIN 1ER MEMBRE
<
ECHOP:   EQU         $               <...ET OPERATEUR
         BSR         ACHB            <CONV HEXA-->BIN  ET OPER.
         BR          AINOP           <INIT OPERATEUR
<
ECHPF:   EQU         $               <...ET PARENTH. FERMANTE
         BSR         ACHB            <CONV HEXA-->BIN. ET OPER.
         BR          ATRPF           <TRAIT. PARENTH. FERMANTE
<
<        ETAT=ECB(CSTE BINAIRE) ...
<
ECBEG:   EQU         $               <...ET SIGNE =
         BSR         ACBB            <CONVERSION ET OPERATION
         BR          ATRF1           <TRAIT. FIN MEMBRE 1
<
ECBOP:   EQU         $               <...ET OPERATEUR
         BSR         ACBB            <CONVERSION ET OPERATION
         BR          AINOP           <INIT OPERATEUR
<
ECBPF:   EQU         $               <... ET PARENTHESE FERMANTE
         BSR         ACBB            <CONVERSION ET OPERATION
         BR          ATRPF           <TRAIT. PARENTH. FERMANTE
<
<
<        ETAT ECA(CSTE ASCI)...
<
ECABA:   EQU         $               <... ET DELIMITEUR "
                                     <PROBLEME DES DOUBLEMENTS
                                     <DE DELIMITEUR "
         LX          PCC             <POINTEUR CARACT. EN COURS
         ADRI        1,X
         LBY         &AOCT
         CPI         '22             <CARACT. SUIV. = "  ?
         JNE         A08
         BR          ATRCA           <OUI, CARACT. EN COURS N'EST
                                     <PAS UN DELIMITEUR, IL EST PRIS
                                     <COMME CAR. ASCI
A08:     EQU         $
         ADRI        -2,X
         LBY         &AOCT
         CPI         '22             <CARACT. PRECEDENT = "   ?
         JE          A09
                                     <NON, DONC CAR. EN COURS EST
                                     <UN DELIMITEUR
         LAI         EPF             <ETAT=PARENTH. FERMANTE(FICTIF)
         STA         ETAT
         BSR         ACADR           <CADRAGE+OPERATION
A09:     EQU         $
         BR          AANACA          <RETOUR ANALYSE
<
<        ETAT EV1(VARIABLE 1ER MEMBRE)...
<
EV1EG:   EQU         $               <...ET SIGNE =
         BSR         ACLV1           <CLOSE VAR. ET OPERATION
         BR          ATRF1           <TRAIT. FIN 1ER MEMBRE
<
EV1OP:   EQU         $               <...ET OPERATEUR
         BSR         ACLV1           <CLOSE VAR. ET OPERATION
         BR          AINOP           <INIT. OPERATEUR
<
EV1PF:   EQU         $               <...ET PARENTH. FERMANTE
         BSR         ACLV1           <CLOSE VARIABLE ET OPERATION
         BR          ATRPF           <TRAIT. PARENTH. FERMANTE
<
<        ETAT=EV2 (VARIABLE 2ND MEMBRE) ...
<
EV2CD:   EQU         $               <... ET CAR=EOT (CTRLD)
         BSR         ACLV2           <CLOSE VAR 2ND MEMBRE
         BR          ATRFM           <TRAITEMENT FIN DE MESSAGE
<
<        ETAT=EOP(OPERATEUR) ET CAR. = A,C,L
<
EOPACL:  EQU         $
         LY          APO             <ADR. PILE OPERATEURS
         PULL                        <OPERATEUR EN COURS-->A
         XR          A,B
         LX          PCC             <CARACT. EN COOURS...
         LBY         &AOCT           <...DANS A
         ORR         B,A             <OPERATEUR COMPLET-->A
         PUSH                        <STOCKAGE OPERATEUR
         LAI         EPO             <ETAT=PARENTH.OUVRANTE(FICTIF)
         STA         ETAT
         BR          AANACA          <RETOUR ANALYSE
<
INCD:    EQU         $               <INIT CSTE DECIMALE
         LAI         ECD             <ETAT=ECD(CSTE DECIMALE)
         LXI         5               <LONGUEUR MAX
         JMP         IN
INCH:    EQU         $               <INIT CSTE HEXA
         LAI         ECH             <ETAT=ECH(CSTE HEXA)
         LXI         8               <LONGUEUR MAX
         JMP         IN
INCA:    EQU         $               <INIT CSTE ASCI
         LAI         ECA             <ETAT=ECA(CSTE ASCI)
         LXI         4               <LONGUEUR MAX
         JMP         IN
INCB:    EQU         $               <INIT CSTE BINAIRE
         LAI         ECB             <ETAT=CSTE BIN.)
         LXI         32              <LONGUEUR MAX
         JMP         IN
INV1:    EQU         $               <INIT VAR. 1ER MEMBRE
         LAI         EV1             <ETAT=EV1(VAR.1ER MEMBRE)
         LXI         LMVC            <LONGUEUR MAX
         JMP         IN
INV2:    EQU         $               <INIT VAR. 2ND MEMBRE
         LAI         EV2             <ETAT=EV2(VAR 2ND MEMBRE)
         LXI         LMVC            <LONGUEUR MAX
IN:      EQU         $
         STA         ETAT            <STOCKAGE ETAT
         STX         LMVCC           <STOCKAGE LONGUEUR MAX
         LXI         0               <INIT...
         STX         LVCC            <...LONG. VAR. OU CSTE EN COURS
         LA          AOVCC           <ADR OCT. ZONE DE STOCKAGE...
         STA         PCVCC           <..VAR/CSTE EN COURS->PCVCC
         LA          ETAT            <SI ETAT...
         CPI         ECD             <...=CSTE DECIMALE
         JE          TRCD
         CPI         EV1             <...OU VARIABLE 1ER MEMBRE
         JE          TRV1
         CPI         EV2             <...OU VARIABLE 2ND MEMBRE
         JE          TRV2
                                     <ALORS ON STOCKE LE 1ER CARACTERE
                                     <SINON...
         BR          AANACA          <...RETOUR DIRECT A ANALYSE
<
INOP:    EQU         $
<        INIT OPERATEUR:STIOCKAGE DANS LA PILE PO,AU NIVEAU EN COURS.
<        SI C'EST UN OPERATEUR A 2 CARACTERES (SHIFT), ALORS
<        ON RESTE EN ETAT OPERATEUR;SINON ON PASSE A L'ETAT EPP
<
         LX          PCC             <CAR. EN COURS...
         LBY         &AOCT           <...DANS A
         SWBR        A,B             <..ET B (A GAUCHE)
         CPI         SHFTL
         JE          INOP2
         CPI         SHFTR
         JE          INOP2
         LAI         EPP             <ETAT=POST O-PERATEUR
         JMP         INOP1
INOP2:   EQU         $               <OPERATEUR A 2 CARACTERES
         LAI         EOP             <ETAT=OPERATEUR
INOP1:   EQU         $
         STA         ETAT            <STOCKAGE ETAT
<
<        STOCKAGE DE L'OPERATEUR AU NIV EN COURS
<

         LR          B,A
         LY          APO
         PULL
         LR          B,A
         PUSH
         BR          AANACA          <RETOUR ANALYSE
         PAGE
<        TRAITEMENT VARIABLE OU CONSTANTE EN COURS
<        (STOCKAGE CARACTERE EN COURS AVEC CONTROLE LONGUEUR
<        PAR RAPPORT A LA LONGUEUR MAX: LMVCC)
<
TRCD:    EQU         $               <CONSTANTE DECIMALE
TRCH:    EQU         $               <CONSTANTE HEXA
TRCA:    EQU         $               <CONSTANTE ASCI
TRCB:    EQU         $               <CONSTANTE BINAIRE
TRV1:    EQU         $               <VARIABLE 1ER MEMBRE
TRV2:    EQU         $               <VARIABLE 2ND MEMBRE
         LX          PCC             <CARACTERE EN COURS...
         LBY         &AOCT           <...DANS A
         LX          PCVCC           <POINTEUR COURANT
         STBY        &AOCT           <STOCKAGE DANS VCC
         IC          PCVCC           <PCVCC='+1
         LA          PCVCC
         SB          AOVCC           <CALCUL LONGUEUR COURANTE
         CP          LMVCC           <LONGUEUR CORRECTE?
         JLE         TRC1
         LBI         30              <NON, ERREUR
         BR          AERR
TRC1:    EQU         $               <OUI,
         STA         LVCC            <STORE LONGUEUR..
         BR          AANACA          <...ET RETOUR ANALYSE
CLV1:    EQU         $
<
<        CLOSE VARIABLE 1ER MEMBRE ET OPERATION
<
         BSR         ARCHV           <RECHERCHE VARIABLE
         CPZR        W               <ELLE EXISTE?
         JE          CLV11           <NON, ERREUR
         BSR         AOPER           <OUI, VALEUR EST DANS  A B
                                     <ON PEUT EFFECTUER L'OPERATION
         RSR                         <RETOUR
CLV11:   EQU         $               <VARIABLE INEXISTANTE
         LBI         40
         BR          AERR            <--->ERREUR
CLV2:    EQU         $
<
<        CLOSE VARIABLE SECOND MEMBRE:
<        INSTALLATION SI ELLE N'EXISTE PAS ENCORE
<                    ET AFFECTATION DE VALEUR
<
         BSR         ARCHV           <RECHERCHE VARIABLE
         CPZR        W               <ELLE EXISTE?
         JNE         CLV21           <OUI
         BSR         AINSV           <NON, ALORS ON L'INSTALLE
CLV21:   EQU         $               <AFFECTATION DE VALEUR
         LA          RGVC            <RANG
         SLLS        1               <RANG*2...
         LR          A,W             <...DANS W
         LXI         0
         LA          &PPR            <1ER MOT VALEUR...
         LR          W,X
         STA         &AXTVV          <...>VALEUR(1)
         LXI         1
         LA          &PPR            <1ER MOT VALEUR...
         ADRI        1,W
         LR          W,X
         STA         &AXTVV          <...--->VALEUR(2)
         RSR                         <RETOUR
<
<        TRAITEMENT PARENTHESE OUVRANTE
<                    ETAT=PARENTHESE OUVRANTE
<                    INCREMENTATION VERIF. NIVEAU EN COURS (NC)
<                    EMPILEMT OPERATEUR NEUTRE DS PIL OPERAT. (PO)
<                    EMPILEMENT RESULT. NUL DS PILE RESULTATS (PR)
<
TRPO:    EQU         $
         LAI         EPO
         STA         ETAT            <ETAT=EPO(PRENTH. OUVR.)
<
<        PILE DES OPERATEURS
<
         IC          NC              <NIVEAU EN COURS='+1
         LA          NC
         CPI         NMNIV           <NIVEAU MAX ATTEINT?
         JLE         P01             <NON, EMPILER
         LBI         20              <OUI, ERREUR
         BR          AERR
P01:     EQU         $
         LAI         0
         LY          APO
         PUSH                        <EMPILEMENT OPERATEUR NEUTRE
<
<        PILE DES RESULTATS
<
         IC          PPR             <POINT. PILE RESULT.='+!
         IC          PPR             <  "      "     "    '+1
                                     <2 MOTS PAR NIVEAU!
         LXI         0
         STZ         &PPR            <RESULTAT NUL 1ER MOT
         LXI         1
         STZ         &PPR            <RESULTAT NUL 2ND MOT
         BR          AANACA
<
<        TRAITEMENT PARENTHESE FERMANTE
<                    ETAT=PARENTHESE FERMANTE
<                    DECREM. ET VERIF. NIVEAU EN COURS(NC)
<                    OPERATION
<
TRPF:    EQU         $
         LAI         EPF
         STA         ETAT            <ETAT=PARENTH. FERMANTE
<
         LA          NC              <NIVEAU EN COURS
         JAG         PF1             <CORRECT?
         LBI         21              <NON, ERREUR
         BR          AERR
PF1:     EQU         $
         LY          APO             <PASSAGE AU NIVEAU INFERIEUR...
         PULL                        <...SUR PILE DES OPERATEURS
         LXI         0
         LA          &PPR            <CHARGEMENT A ET B AVEC
         LXI         1               <RESULTAT NIVEAU EN COURS
         LB          &PPR
         DC          PPR             <DECREMENTATION DE 2...
         DC          PPR             <DU POINTEUR PILE RESUL.
         DC          NC              <NIVEAU EN COURS='-1
         BSR         AOPER           <OPERATION
         BR          AANACA          <RETOUR ANALYSE
<
<        TRAITEMENT FIN DE 1ER MEMBRE
<                    ETAT=FIN 1ER MEMBRE
<                    VERIF NIVEAU EN COURS (NC=0)
<
TRF1:    EQU         $
         LAI         EF1
         STA         ETAT            <ETAT=FIN 1ER MEMBRE
<
         LA          NC              <NIVEAU EN COURS...
         JAE         F11             <..NUL?
         LBI         22              <NON, ERREUR
         BR          AERR
F11:     EQU         $
         BR          AANACA          <RETOUR ANALYSE
<
<        TRAITEMENT FIN DE MESSAGE
<                    ....
<                    ....
TRFM:    EQU         $
         LAI         EFT
         STA         ETAT            <ETAT=FIN DE TRAVAIL
         BSR         AEDITR          <EDITION REPONSE EN DECIMAL HEXA. ET BIN.
                                     <T BINAIRE
         BR          AANACA          <RETOUR ANALYSE
<
         PAGE
<
<        S/P  T R C A R  TRAITEMENT CARACTERE
<
<        CE S/P DETERMINE LE TYPE DU CARACTERE EN COURS
<
<        EN ENTREE   A=CARACTERE EN COURS
<
<        EN SORTIE   A=INCHANGE
<                    B=TYPE CARACTERE
<
<        LE TRAITEMENT UTILISE LA TACLE DE CORRESPONDANCE
<        CARACTERE/TYPE  TCAR POUR LA PLUPART DES CARACTERES
<
TRCAR:   EQU         $
         CPI         '04             <EOT?
         JE          T05
         CPI         '0D             <OU  RETURN ?
         JNE         T01
T05:     EQU         $               <CTRLD OU RETURN
         LB          TEOT            <TYPE=EOT
         JMP         T99
T01:     EQU         $
         CPI         "\"
         JNE         T02
         LB          TOP             <TYPE OPERATEUR
         JMP         T99
T02:     EQU         $
         CPI         " "
         JL          T03
         CPI         "F"
         JG          T03
         LR          A,X
         LB          &ATCAR          <CHARGEMENT DU TYPE
         JMP         T99
T03:     EQU         $
         CPI         "L"
         JNE         T04
         LB          TLL             <TYPE LL
         JMP         T99
T04:     EQU         $
         LB          TAU             <TYPE AUTRE
T99:     EQU         $
         RSR
         PAGE
EDITR:   EQU         $
<
<        EDITION DU RESULTAT EN DECIMAL HEXADECIMAL BINAIRE ET ASCI
<
         LXI         0
         LA          &PPR            <1ER MOT RESULTAT
         STA         &AXREPA         <PREPARATION EDITION ASCI
         LXI         1
         LB          &PPR            <2ND MOT RESULTAT
         STB         &AXREPA         <PREPARATION EDITION ASCI
<
<                    EN DECIMAL
<
         LY          AOREPD          <ADR OCT REPONSE DECIMALE
         BSR         ACBD            <CONVERSION-EDITION
         ADRI        REPD-REP+LREPF+LREPD*2,X <CALCUL LONGUEUR
         STX         DEM4+2
<
<                    EN FLOTTANT :
<
         LY          AOREPF          <ADR OCT REPONSE FLOTTANTE
         BSR         AEFL            <CONVERSION-EDITION
<
<                    EN HEXADECIMAL
<
         LY          AOREPH          <ADR OCT REPONSE HEXA
         STY         PCVCC           <...DANS POINTEUR
         LXI         4               <NB DE SHIFT POU EDHB
         LYI         4*2+1           <LONG. ZONE D'EDITION
         BSR         AEDHB           <CONVERSION-EDITION
<
<                    EN BINAIRE
<
         LY          AOREPB          <ADR OCT. REPONSE BINAIRE...
         STY         PCVCC           <...DANS POINTEUR
         LXI         1               <NB DE SHIFT POUR EDHB
         LYI         4*8+7           <LONG. ZONE D'EDITION
         BSR         AEDHB           <CONVERSION-EDITION
<
<                    EN ASCI (LES CARACTERES NON-COMPRIS EMTRE
<                                    '20 ET '5F SOT REMPLACES PAR
<                                    DES BLANCS
<
         LA          AOREPA
         STA         PCVCC           <ADR OCT 1ER CAR
         LXI         4               <INIT COUNT
CAA1:    EQU         $
         LR          X,W             <SVG COUNT
         LX          PCVCC
         LBY         &AOCT           <CAR EN COURS...
         CPI         '20
         JL          CAA2
         CPI         '5F
         JLE         CAA3
CAA2:    EQU         $               <...COMPRIS ENTRE '20 ET '5F
         LAI         '20             <--->REMPLACE PAR BLANC
         STBY        &AOCT
CAA3:    EQU         $
         IC          PCVCC           <CAR SUIVANT
         LR          W,X             <RESTAUR COUNT
         JDX         CAA1            <BOUCLE
         RSR                         <RETOUR
         PAGE
<
<        S/P         C B D           CONVERSION BINAIRE-->DECIMAL
<
<        EN ENTREE   A B  NOMBRE A CONVERTIR
<                    Y=ADR OCTETZONE DE STOKAGE RESULTAT
<
<        EN SORTIE   A B Y INCHANGES
<                    X=LONGUEUR OCTETS RESULTAT
<
<        NOTA: LE NOMBRE OBTENU EST PRECEDE D'UNE "*" S'IL ETAIT TROP GRAND
CBD:     EQU         $
         PSR         A,B,Y
         EORR        W,W
         CPI         -1              <A='FFFF  ?
         JE          CBDN            <OUI, VOIR SI B NEGATIF
         JANE        CBDP            <NON, PROBLEME
         XR          A,B             <B EST-IL ...
         JAGE        CBDOK           <...POSITIF?ALORS OK
CBDP:    EQU         $               <PROBLEME, METTRE * DEVANT LE NOMBRE
         LAI         "*"
         JMP         CBDOK2
CBDN:    EQU         $
         XR          A,B             <B EST-IL...
         JAL         CBDOK           <...NEGATIF? ALORS OK
         JMP         CBDP            <...PROBLEME
CBDOK:   EQU         $
         LAI         " "             <NE RIEN METTRE DEVANT LE NOMBRE
CBDOK2:  EQU         $
         LR          Y,X             <ADR OCT ZONE EDITION...
         ADRI        -1,X            <... -1
         STBY        &AOCT           <STORE "*"  0U  " "
         PLR         A,B,Y
         PSR         A,B,Y
         TBT         15+1            <NB NEGATIF?
         JNC         CBD2            <NON
         ADRI        1,W             <OUI,  W POSITIONNE A 1
         NGR         B,B             <INVERSION
CBD2:    EQU         $
         LXI         0               <COUNT NB CHIFFRES DECIMAUX
CBD5:    EQU         $               <BOUCLE SUR DIVISIONS PAR 10
         LAI         0
         DV          DIX
         JNV         CBD3            <DIVISION IMPOSSIBLE?
         LBI         'D              <OUI, RETOUR CCI
         ACTD
CBD3:    EQU         $
         PSR         B               <PUSH LE RESTE DE LA DIVISION
         ADRI        1,X             <COUNT NB CIFFRES DECIMAUX
         JAE         CBD4            <QUOTIENT NUL?
         XR          A,B             <NON, UN CONTINUE
         JMP         CBD5
CBD4:    EQU         $               <STCKAGE NB DECIMAL DANS ZONE
                                     <D'ADRESSE OCTET (Y)
         LR          X,B             <SVG LONG. DANS B
         LR          W,A             <SIGNE
         JAE         CBD6            <NB POSITIF, PAS DE SIGNE
                                     <NB NEGATIF, STOCKE SIGNE
         ADRI        1,B             <LONGUEUR='+1
         LAI         "-"
         XR          X,Y
         STBY        &AOCT
         XR          X,Y
         ADRI        1,Y             <ADR STOCKAGE='+1
CBD6:    EQU         $               <BOUCLE DE STOCKAGE DES CHIFFRES
                                     <DECIMAUX
         PLR         A               <PULL CHIFFRE
         ORI         '30
         XR          X,Y
         STBY        &AOCT           <STORE CHIFFRE ETENDU
         XR          X,Y
         ADRI        1,Y             <ADR=ADR+1
         JDX         CBD6            <BOUCLE STOCKAGE
         LR          B,X             <LONGUEUR-->X
         PLR         A,B,Y           <RESTAURATION
         RSR
         PAGE
<
<        E F L :   E D I T I O N   D ' U N   N O M B R E   F L O T T A N T.
<
<        ARGUMENT:
<                    - 'A'-'B' = NOMBRE FLOTTANT A EDITER.
<                    - 'Y' = ADRESSE OCTET D'EDITION.
<
<        RESULTAT:
<                    - LE NOMBRE EST EDITE SOUS LA FORME [-]0.XXXXXXX [-]ENN
<
<        ATTENTION:
<                    - PREVOIR PAS MAL DE MOTS DANS SA PILE !
<
<
<        LA METHODE UTILISEE EST LA SUIVANTE:
<
<        - ON TRAVAILLE AVEC LA VALEUR ABSOLUE DE X.
<        - ON DETERMINE SON ORDRE DE GRANDEUR, C'EST-A-DIRE QU'ON CHERCHE
<          N TEL QUE :  10**N <= X <= 10**(N+1)
<        - ON DIVISE X PAR 10**(N+1) --> U AVEC 0 <= U < 1, PUIS ON
<          DETERMINE LES DECIMALES DE U EN FAISANT DES MULTIPLICATIONS PAR 10
<          AVEC ARRONDI PUIS SOUSTRACTION A U' DU CHIFFRE OBTENU.....
<          AUTANT DE FOIS QUE NECESSAIRE.
<
EFL:     EQU         $
<
< SAUVEGARDES ET INITIALISATIONS.
<
         PSR         A,B,X,Y
         PSR         W
         STY         EFLREL          < RELAI OCTET D'ACCES A LA ZONE D'EDITION.
< SIGNE DE X ARGUMENT.
         STZ         EFLSDX          < X POSITIF OU NUL A PRIORI.
         FCAZ
         JGE         EFL1
         DC          EFLSDX          < X NEGATIF.
         LYI         "-"             < PLACER LE SIGNE MOINS.
         BSR         EFLAST
EFL1:    EQU         $
         LYI         "0"             < PLACER LE ZERO.
         BSR         EFLAST
         LYI         "."             < ET LE POINT DECIMAL.
         BSR         EFLAST
         FABS                        < ON TRAVAILLE AVEC X > 0.
         STZ         EFLPUI          < PUISSANCE NULLE A PRIORI.
         FCAZ                        < ET ON ELIMINE TOUT DE SUITE LE NUL.
         JNE         EFL7
         LYI         "0"
         BSR         EFLAST
         JMP         EFL9
EFL7:    EQU         $
         LRM         W               < ON FERA DES MULTIPLICATIONS PAR 10
         WORD        EFLDIX          < A PRIORI.
         LYI         1               < PUISSANCES POSITIVES A PRIORI.
         FCAM        EFLUN
         JGE         EFL2
         ADRI        EFL1SD-EFLDIX,W < MULTIPLICATIONS PAR 0.1.
         LYI         -1              < PUISSANCES NEGATIVES...
EFL2:    EQU         $
<
< EVALUATION DE L'ORDRE DE GRANDEUR DU NOMBRE.
<
         PSR         A,B
         FLD         EFLUN
         FST         EFLT1           < TRAV1 = 1.
         PLR         A,B
         LXI         0               < PUISSANCE DE 10 COURANTE.
EFL4:    EQU         $
         CPZR        Y               < PIUSSANCES POSITIVES / NEGATIVES ?
         JL          EFL3
< ON TRAVAILLE EN PUISSANCES DE 10 POSITIVES.
         FCAM        EFLT1
         JL          EFL5            < VU.
EFL6:    EQU         $
< PASSER A LA PUISSANCE DE 10 SUIVANTE.
         PSR         A,B
         FLD         EFLT1
         FMP         0,W
         JNCV        $+2
         ACTD
         FST         EFLT1
         PLR         A,B
         ADR         Y,X             < NOUVELLE PUISSANCE COURANTE.
         JMP         EFL4
EFL3:    EQU         $
< ON TRAVAILLE EN PUISSANCES DE 10 NEGATIVES.
         FCAM        EFLT1
         JL          EFL6            < ESSAYER PLUS PETIT.
         PSR         A,B
         FLD         EFLT1           < REVENIR UN PEU EN ARRIERE...
         FMP         EFLDIX
         FST         EFLT1
         ADRI        1,X             < PUISSANCE DE 10 RETENUE.
         PLR         A,B
EFL5:    EQU         $
         STX         EFLPUI          < PUISSANCE RETENUE.
         FDV         EFLT1           < DIVISER X PAR 10 ** (N+1) --> U.
         FST         EFLT1           < ON A ICI : 0 <= U < 1.
<
< DETERMINATION DES DECIMALES DE U.
<
         LXI         8               < ON NE SORT QUE 8 DECIMALES.
EFL8:    EQU         $
         FCAZ
         JE          EFL9            < TERMINE.
         FMP         EFLDIX
         FST         EFLT1
         FIX
         LR          A,Y
         ADRI        "0",Y
         BSR         EFLAST          < STOCKER LA DECIMALE...
         FLT
         FNEG
         FAD         EFLT1
         JDX         EFL8            < DECIMALE SUIVANTE SVP.
EFL9:    EQU         $
< IL RESTE A EDITER L'EXPOSANT.
         LYI         " "
         BSR         EFLAST
         LYI         "E"
         BSR         EFLAST
         LY          EFLREL
         LA          EFLPUI
         BSR         EFLADA          < EDITION DES 2 CHIFFRES DE L'EXPOSANT.
<
< RETOUR :
<
         PLR         W
         PLR         A,B,X,Y
         RSR
<
<        S T O C K A G E   D ' U N   C A R A C T E R E   E N   Z O N E
<
<        D ' E D I T I O N.
<
EFLST:   EQU         $
         PSR         A,X
         LX          EFLREL
         LR          Y,A
         STBY        &EFLX
         IC          EFLREL
         PLR         A,X
         RSR
         PAGE
<
<        C O N V E R S I O N - E D I T I O N   E N   D E C I M A L
<
<        F O R M A T   A S C I   D ' U N   N O M B R E   B I N A I R E
<
<        C O N T E N U   D A N S   ' A '.
<
<        ARGUMENTS:
<                    - 'A' = NOMBRE EN BINAIRE.
<                    - 'Y' = ADRESSE OCTET D'EDITION DE CE NOMBRE
<
<        ATTENTION:
<                      CE S/P EST SPECIALISE DANS L'EDITION DE L'EXPOSANT
<                    D'UN NOMBRE FLOTTANT, AUSSI N'ACCEPTE-T-IL QUE DES
<                    NOMBRES TENANT SUR 2 CHIFFRES DECIMAUX AU MAXIMUM.
<
EFLDA:   EQU         $
         CPI         99              < VALIDATION.
         JLE         $+2
         ACTD
         PSR         A,B,X,Y         < SAUVEGARDES.
         PSR         W
<
         XR          Y,W
         LYI         " "             < SI POSITIF, PAS DE SIGNE.
         JAGE        $+2
         LYI         "-"             < NOMBRE NEGATIF, SIGNE MOINS.
         XR          Y,W             < 'W' CONTIENT LE SIGNE.
<
         LXI         2               < 2 CHIFFRES MAXI.
EFLDA1:  EQU         $
         SARD        16
         DV          EFL10E
         CPZR        B               < TEST SIGNE DU RSTE.
         JGE         $+2
         NGR         B               < CHIFFRE POSITIF.
         ADRI        "0",B           < POUR EDITION FUTURE.
         PSR         B               < PUSH CHIFFRE COURANT.
         JDX         EFLDA1
         PSR         W               < PUSH SIGNE.
<
         LXI         3               < SIGNE PLUS 2 CHIFFRES.
EFLDA2:  EQU         $
         LR          X,W             < SAVE COUNT.
         LR          Y,X             < INDEX COURANT.
         PLR         A               < PULL SIGNE / CHIFFRE COURANT.
         STBY        &EFLX           < STOCKAGE SIGNE / CHIFFRE.
         LR          W,X             < RECUPERATION COUNT.
         ADRI        1,Y             < INDEX CHIFFRE SUIVANT.
         JDX         EFLDA2
<
         PLR         W               < RESTAURATIONS.
         PLR         A,B,X,Y
         RSR
         PAGE
EDHB:    EQU         $
<        EDITION RESULTAT EN FORMAT HEXADECIMAL OU BINAIRE
<        EN ENTREE   A B  RESULTAT A EDITER
<                    X    NOMBRE DE SHIFT
<                    Y    LONGUEUR TOTALE APRES CONVERSION (Y COMPRIS LES BLANCS
<                         BLANC TOUS LES 4 CARACTERES)
<                    PCVCC ADR.OCTET ZONE D'EDITION
<
<        EN SORTIE   A B X  INCHANGES
<                    Y      DETRUIT
<                    PCVCC,LVCC DETRUITS
<
         STZ         LVCC            <RAZ LONG. COURANTE
         PSR         A,B
         PSR         X               <NB DE SHIFT
         LR          Y,X             <INIT COUNT DE BOUCLE
<
EDHB1:   EQU         $               <BOUCLE
         LR          X,Y             <SVG. COUNT
         PLR         X               <LECT. ...
         PSR         X               <..ET SVG NB SHIFT
         SCLD        0,X
         XR          A,B
         LR          A,W             <SVG. DE A
         LR          X,A             <NB DE SHIFT...
         CPI         1               <... =1 ? (BINAIRE)
         JE          EDHB2
         LXI         '0F             <NON,DONC GARDER 4 BITS
         JMP         EDHB4
EDHB2:   EQU         $               <OUI,DONC BINAIRE...
         LXI         '01             <GARDER 1 SEUL BIT
EDHB4:   EQU         $
         LR          W,A             <RECUP.  DE A
         ANDR        X,A             <SELECT 1 OU 4 BITS
         CPI         9               <CHIFFRE>9 ?
         JLE         EDHB3
         ADRI        '7,A            <OUI, LUI AJOUTER 7(PUIS 30)
EDHB3:   EQU         $
         ADRI        '30,A
         LX          PCVCC           <POINTEUR
         STBY        &AOCT           <STORE CARACT.
         IC          PCVCC           <POINTEUR='+1
         IC          LVCC            <LONG.='+1
         LA          LVCC
         ANDI        '03
         JANE        EDHB5           <LONG. MULTIPLE DE 4 ?
         LAI         " "             <OUI,INTERCALER UN BLANC
         LX          PCVCC
         STBY        &AOCT           <STORE BLANC
         IC          PCVCC           <POINTEUR='+1
         ADRI        -1,Y            <COUNT='-1
EDHB5:   EQU         $
         LR          W,A             <RECUP. A
         XR          A,B
         LR          Y,X             <RECUP COUNT
         JDX         EDHB1           <BOUCLE
<
         PLR         X
         PLR         A,B
         RSR                         <RETOUR
<
<
<        CONTROLE LONGUEUR VARIABLE OU CSTE NON-NULLE
<
CLN:     EQU         $
         LA          LVCC            <LONG. VAR OU CSTE EN COURS
         JAG         CLN1
         LBI         31              <LONG. NULLE ERREUR
         BR          AERR
CLN1:    EQU         $               <LONGUEUR NON NULLE...
         RSR                         <...RETOUR
<
<
<        S/P         E R R           PREPARATION MESSAGE D'ERREUR
<
<        EN ENTREE   B=NUMERO MESSAGE D7ERREUR
<
<        EN SORTIE   MESSAGE D'ERREUR EN ZONE REPONSE
<                    ETAT=ETAT ERREUR
<
ERR:     EQU         $
         LAI         EER
         STA         ETAT            <ETAT=EER (ERREUR)
         LAI         0
         CPZR        B               <NUM. DE MESSAGE ...
         JGE         ERR1            <...POSITIF OU NUL?
         LAI         -1              <NON, A=-1 (POUR S/P CBD)
ERR1:    EQU         $
         LY          AOCODR          <ADR OCT CODE ERREUR APRES CONVERS.
         BSR         ACBD            <CONVERSION BIN-->DECIMAL
         ADRI        CODR-ER*2,X     <LONGUEUR DU MESSAGE
         STX         DEM5+2          <STOCKAGE LONGUEUR
         BR          AANACA          <RETOUR ANALYSE
<
<
<
         PAGE
OPER:    EQU         $
<
<        OPERATION:   <RESULT. NIV. NC>= ' .<OPERATEUR NIV. NC.>. <A B>
<
         PSR         A,B             <SAUVEGARDE NOMBRE EN COURS
         LXI         1
         LY          &PPR            <2ND MOT RESULTAT NIVEAU NC
         LXI         0
         LX          &PPR            <1ER MOT RESULTAT NIVEAU NC
<
<                    SELECTION DE L'OPERATEUR
<
         LR          Y,W             <SAUVEGARDE Y
         LY          APO             <PILE OPERATEURS
         PULL                        <OPERATEUR--->A
         PUSH
         LR          W,Y             <RESTAURATION Y
         JAE         OPERN           <OPERATEUR NEUTRE
         LR          A,B
         SLRS        8               <CARACTERE GAUGHE DE L'OPERATEUR
         XR          A,B
         ANDI        'FF             <CARACTERE DROIT DE L'OPERATEUR
         XR          A,B
         CPI         PLUS
         JE          OPLUS           <ADDITION
         CPI         MOINS
         JE          OMOINS          <SOUSTRACTION
         CPI         SHFTL
         JE          OSHFTL          <SHIFT LEFT
         CPI         SHFTR
         JE          OSHFTR          <SHIFT RIGHT
         CPI         OR
         JE          OOR             <OU LOGIQUE
         CPI         AND
         JE          OAND            <ET LOGIQUE
         CPI         EOR
         JE          OEOR            <OU EXCLUSIF
         CPI         MULT
         JE          OMULT           <MULTIPLICATION
         JMP         ODR             <DIVISION/RESTE
<
OPERN:   EQU         $               <OPERATEUR NEUTRE, SIMPLE STOCKAGE
         PLR         A,B             <RECUP NOMBRE EN COURS
OPSTK:   EQU         $               <STOCKAGE RESULTAT EN PILE RESULT. (PR)
         LXI         0
         STA         &PPR            <1ER MOT RESULTAT
         LXI         1
         STB         &PPR            <2ND MOT RESULTAT
         RSR                         <RETOUR
<
<
OOR:     EQU         $               <OPERATEUR OU LOGIQUE
         PLR         A,B             <RECUP NOMBRE EN COURS
         ORR         X,A
         ORR         Y,B
         JMP         OPSTK           <STOCKAGE
<
OAND:    EQU         $               <OPERATEUR ET LOGIQUE
         PLR         A,B             <RECUP NOMBRE EN COURS
         ANDR        X,A
         ANDR        Y,B
         JMP         OPSTK           <STOCKAGE
<
OEOR:    EQU         $               <OPERATEUR OU EXCLUSIF
         PLR         A,B             <RECUP NOMBRE EN COURS
         EORR        X,A
         EORR        Y,B
         JMP         OPSTK           <STOCKAGE
OSHFTL:  EQU         $               <SHIFT LEFT
         LR          B,W             <SVG NATURE SHIFT (A,C,L)
         PLR         A,B             <RECUP NB EN COURS
         JAL         SERR            <NB SHIFT NEGATIF -->ERREUR
         PSR         X,Y             <SVG RESULT. NIV. NC
         LR          B,X             <NB DE SHIFT
         LR          W,A             <NATURE SHIFT...
         CPI         "A"
         JE          SAL             <...ARITHMETIQUE
         CPI         "C"
         JE          SCL             <...CIRCULAIRE
         CPI         "L"
         JE          SLL             <...LOGIQUE
         ACTD
SAL:     EQU         $               <SAL ASSIMILE A SLL
SLL:     EQU         $               <LOGICAL LEFT
         PLR         A,B             <RECUP. XY--->AB
         SLLD        0,X
         JMP         OPSTK           <STOCKAGE
SCL:     EQU         $               <CIRCULARY LEFT
         PLR         A,B             <RECUP. XY--->AB
         SCLD        0,X
         JMP         OPSTK           <STOCKAGE
OSHFTR:  EQU         $               <SHIFT RIGHT
         LR          B,W             <SVG NATURE SHIFT (A,C,L)
         PLR         A,B             <RECUP NB EN COURS
         JAL         SERR            <NB SHIFT NEGATIF -->ERREUR
         PSR         X,Y             <SVG RESULT. NIV. NC
         LR          B,X             <NB DE SHIFT
         LR          W,A             <NATURE SHIFT...
         CPI         "A"
         JE          SAR             <...ARITHMETIQUE
         CPI         "C"
         JE          SCR             <...CIRCULAIRE
         CPI         "L"
         JE          SLR             <...LOGIQUE
         ACTD
SAR:     EQU         $               <ARITHMETICAL RIGHT
         PLR         A,B             <RECUP. XY--->AB
         SARD        0,X
         JMP         OPSTK           <STOCKAGE
SCR:     EQU         $               <CIRCULARY RIGHT
         PLR         A,B             <RECUP. XY--->AB
         SCRD        0,X
         JMP         OPSTK           <STOCKAGE
SLR:     EQU         $               <LOGICAL RIGHT
         PLR         A,B             <RECUP XY--->AB
         SLRD        0,X
         JMP         OPSTK           <STOCKAGE
SERR:    EQU         $               <NOMBRE DE SHIFT NEGATIF: ERREUR
         LBI         34
         BR          AERR
OPLUS:   EQU         $               <ADDITION  AB=XY+AB
         PLR         A,B             <RECUP NB EN COURS
         ADR         Y,B             <POIDS FAIBLES
         JNC         PL1             <CARRY?
         ADCR        A               <OUI,LE  REPORTER
         JNV         PL1             <PAS D'OVERFLOW APRES REPORT?
         JMP         PLER            <SINON, ERREUR
PL1:     EQU         $
         ADR         X,A             <POIDS FORTS
         JNV         OPSTK           <PAS D'OVERFLOW-->STOCKAGE
         JMP         PLER            <SINON, ERREUR
OMOINS:  EQU         $               <SOUSTRACTION AB=XY-AB
         PLR         A,B             <RECUP NB EN COURS
         SBR         B,Y             <POIDS FAIBLES
         JNC         MO1             <PAS DE CARRY?
         SBCR        X               <SI,LE REPORTER
         JNV         MO1             <PAS D'OVERFLOW APRES REPORT?
         JMP         MOER            <OUI, ERREUR
MO1:     EQU         $
         SBR         A,X             <POIDS FORTS
         JV          MOER            <SI OVERFLOW -->ERREUR
         LR          X,A             <SINON, RESULTAT DANS A ...
         LR          Y,B             <...ET B
         JMP         OPSTK           <STOCKAGE
PLER:    EQU         $               <ERREUR SUR ADDITION
         LBI         35
         BR          AERR
MOER:    EQU         $               <ERREUR SUR SOUSTRACTION
         LBI         36
         BR          AERR
<
<
<
ODR:     EQU         $               <DIVISION,RESTE
         LR          A,W             <SVG. OPERATEUR
         BSR         AV16            <VERIF NB EN COURS TIENT SUR 1 MOT
                                     <AV16 DEPILE A ET B
         CPZR        B               <DIVISEUR NUL ?
         JNE         ODR1
         LBI         38              <OUI,ERREUR
         BR          AERR
ODR1:    EQU         $
         LR          X,A             <DIVIDENDE 1ER MOT
         LXI         0
         STB         &PPR            <STORE DIVISEUR
         LR          Y,B             <DIVIDENDE 2ND MOT
         DV          &PPR
         JNV         ODR2            <OVERFLOW?
         LBI         39              <OUI,ERREUR
         BR          AERR
ODR2:    EQU         $
         XR          A,W             <RECUP OPERATEUR
         CPI         DIV             <DIVISION?
         JNE         OREST
         LR          W,B             <OUI, QUOTIENT-->B
OREST:   EQU         $               <RESTE DANS B
                                     <IL FAUT ETENDRE LE SIGNE
                                     <DU RESULT. A A
         TBT         16              <RESULT. NEGATIF?
         JNC         ODR3
         LAI         -1
         JMP         OPSTK           <STOCKAGE
ODR3:    EQU         $
         LAI         0               <RESULT. POSITIF
         JMP         OPSTK           <STOCKAGE
OMULT:   EQU         $               <MULTIPLICATION (AB=XY*AB)
         BSR         AV16            <VERIFICATION : NB EN COURS
                                     <DOIT TENIR SUR 1 MOT
                                     <(V16 DEPILE A ET B)
         PSR         A,B
         PSR         X,Y             <MULTIPLICANDE
         BSR         AV16            <IDEM
         PLR         A,B             <MULTIPLICATEUR
         LR          Y,A             <MULTIPLICANDE
         LXI         0
         STB         &PPR            <STORE MULTIPLCATEUR
         MP          &PPR
         JMP         OPSTK           <STOCKAGE
<
CHB:     EQU         $
<        CONVERSION NB EN HEXA ( 'AB4E.. ) EN BINAIRE DANS A B
<        ET OPERATION (SP OPER)
<
         BSR         ACLN            <VERIF LONGEUR NON-NULLE
         LBI         4               <NB DE SHIFT POUR CVHB
         JMP         CVHB
CBB:     EQU         $
<        CONVERSION DE NB BINAIRE ( %0110011....) EN BINAIRE
<        DANS A B  ET OPERATION (SP OPER)
<
         BSR         ACLN            <VERIF LONGUEUR NON NULLE
         LBI         1               <NB DE SHIFT POUR CVHB
CVHB:    EQU         $
         LA          AOVCC           <ADRESSE CONSTANTE...
         STA         PCVCC           <...DANS POINTEUR
         LX          LVCC            <LONGUEUR CSTE A CONVERTIR
         LAI         0
         PSR         A
         PSR         A               <INIT A ZERO
CVHB1:   EQU         $               <BOUCLE TRAITEMENT 1 CARACT.
         LR          X,Y             <SVG COUNT POUR BOUCLE (JDX)
         LX          PCVCC           <CARACT. EN COURS...
         LBY         &AOCT           <...DANS A
         CPI         "A"             <CHIFFRE ...
         JL          CVHB2           <...INFERIEUR A "A" ?
         ADRI        9,A             <NON, AJOUTER 9
CVHB2:   EQU         $
         ANDI        '0F             <ON GARDE LES 4 BITS DE DROITE
         LR          A,W             <SVG CHIFFRE EN COURS
         LR          B,X             <NB DE SHIFT
         PLR         A,B
         SLLD        0,X             <SHIFT
         XR          A,B
         ORR         W,A             <INSERTION DU CHIFFRE
         XR          A,B
         PSR         A,B             <STOCKAGE
         LR          X,B             <SVG NB DE SHIFT
         IC          PCVCC           <POINTEUR='+1
         XR          X,Y             <RECUP COUNT
         JDX         CVHB1           <BOUCLE
<
         PLR         A,B
         BSR         AOPER           <OPERATION
         RSR                         <RETOUR
CDB:     EQU         $
<
<        CONVERSION NOMBRE  DECIMAL EXTERNE--->BINAIRE  DANS  A B
<	       LE NOMBRE DOIT TENIR DANS UN REGISTRE. IL EST PLACE DANS B
<        LE SIGNE EST ETENDU A A
<
         DC          PCVCC           <POINTEUR-1...
         LX          PCVCC           <...DANS X  (DERNIER CHIFFRE)
         LBY         &AOCT           <DERN. CHIFFRE, ON NE GARDE...
         ANDI        '0F             <...QUE LES 4 BITS DROITE...
         LR          A,W             <...DANS W
         LA          LVCC            <LONGUEUR...
         ADRI        -1,A            <... RESTANTE...
         JAE         CDB3            <...NULLE?
                                     <NON,CONTINUER CONVERSION PAR
                                     <BOUCLE
         LX          LVCC
         ADRI        -1,X            <INIT COUNT
         LAI         1
         STA         PDIX            <INIT PUISSANCE
CDB1:    EQU         $               <BOUCLE
         LR          X,Y             <SAUVEGARDE COUNT
         LA          PDIX
         MP          DIX             <CALCUL PUISSANCE
         STB         PDIX
         DC          PCVCC           <POINTEUR='-1
         LX          PCVCC           <CHIFFRE EN COURS...
         LBY         &AOCT           <  --->A
         ANDI        '0F             <4 BITS DE DROITE
         MP          PDIX            <ELEVATION PUISSANCE
         JANE        CDB2            <DEPASSEMENT?
         XR          A,B
         JAL         CDB2            <DEPASSEMENT?
         ADR         A,W             <NON, CUMUL
         JCV         CDB2            <DEPASSEMENT?
         LR          Y,X             <NON, RECUP. COUNT...
         JDX         CDB1            <...ET BOUCLE
CDB3:    EQU         $               <STOCKAGE RESULTAT
         LAI         0               <DANS A ET...
         LR          W,B             <B
         BSR         AOPER           <OPERATION
         RSR                         <RETOUR
CDB2:    EQU         $               <DEPASSEMENT, ON VA EN ERREUR
         LBI         33
         BR          AERR
CADR:    EQU         $
<
<        CADRAGE CSTE ASCI, STOCKAGE DANS AB (NOMBRE EN COURS)
<        ET OPERATION
<
         BSR         ACLN            <VERIF LONGUEUR NON NULLE
         LAI         4
         LY          LVCC            <LONGUEUR (NON NULLE)
         SBR         Y,A
         SLLS        3
         LR          A,X             <X=(4-LONGUEUR)*8
         LA          AOVCC           <ADR. OCTET CSTE ASCI
         SLRS        1               <ADR MOT
         XR          L,W
         LR          A,L
         LA          0,L             <CSTE ASCI NON CADREE...
         LB          1,L             <...DANS  AB
         XR          L,W
         SLRD        0,X             <CADRAGE
         BSR         AOPER           <OPERATION
         RSR                         <RETOUR
V16:     EQU         $
<
<        VERIFICATION QU'UN NOMBRE SUR 2 MOTS PEUT TENIR
<        SUR 1 MOT; SINON, ERREUR
<
         PLR         L               <ADRESSE RETOUR
         PLR         A,B
         CPI         -1              <A='FFFF  ?
         JE          AV2             <OUI, VOIR SI B NEGATIF
         JAE         AV1             <A=0, VOIR SI B POSITIF
         JMP         AVER            <ERREUR
AV1:     EQU         $
         TBT         16              <B POSITIF?
         JNC         AVOK            <OUI, OK
         JMP         AVER            <NON, ERREUR
AV2:     EQU         $
         TBT         16              <B NEGATIF?
         JC          AVOK            <OUI, OK
AVER:    EQU         $               <ERREUR
         LBI         37
         BR          AERR
AVOK:    EQU         $
         PSR         L               <ADRESSE RETOUR
         RSR                         <RETOUR
         PAGE
RCHV:    EQU         $
<
<        RECHERCHE VARIABLE EN TABLE DES NOMS DE VAR. (TNV)
<        ET, SI ELLE EXISTE ON VA CHERCHER SA VALEUR EN TABLE
<        DES VALEURS (TVV) ET ON LA MET DANS  A B
<
<        EN ENTREE
<
<        VCC/LVCC/PCVCC: VAR. EN COURS/LONGUEUR/POINTEUR COURANT
<
<        EN SORTIE
<
<        VCC/LVCC/PCVCC: INCHANGES
<        SI LA VARIABLE EXISTE:
<                    W=1
<                    AB=SA VALEUR, RGVC=SON RANG (DE 0 A N)
<                    PCTN, POINTEUR COURANT TABLE DES NOMS TNV POINTE
<                    SUR LE DERN. CAR. DU NOM + 2 (C'EST '00 SI LA VAR. EST
<                    EST LA DERNIERE DE LA TABLE)
<        SI LA VARIABLE N'EXISTE PAS
<                    W=0
<                    PCTN POINTE SUR DELIMITEUR DE FIN DE TABLE '00
<
<        RAPPEL: LA TABLE A LA STRUCTURE SUIVANTE:
<        "NOM1"'FF"NOM2"'FF....."NOMN"'FF'00
<
<
<        INITIALISATIONS
<
         LX          PCVCC
         PSR         X               <SAUVEGARDE POINTEUR DE VCC
         LAI         'FF             <DELIMITATION...
         STBY        &AOCT           <..VAR. EN COURS
         STZ         RGVC            <RANG=0
         LA          AOTNV
         STA         PCTNV           <POINTEUR COURANT TABLE TNV
RCHVT:   EQU         $               <BOUCLE RECHERCHE VARIABLE
         LX          PCTNV
         LBY         &AOCT
         JANE        RCHVT1          <FIN DE TABLE?
         EORR        W,W             <OUI, RECHERCHE INFRUCTUEUSE
         JMP         RCHVF           <-->FIN
RCHVT1:  EQU         $
<        RECHERCHE VAR. PAR COMPARAISON VAR. VCC
<        AVEC VAR. EN COURS TABLE (TNV, POINTEUR PCTNV)
         LY          PCTNV           <SVG PCTNV
         LX          LVCC
         ADRI        1,X             <LONGUEUR COMPARAISON
         LA          AOVCC
         STA         PCVCC           <POINTE SUR 1ER CAR. VARIABLE VCC
RCHVT2:  EQU         $               <BOUCLE COMPARAISON NIV. CARACTERE
         LR          X,W             <SVG COUNT
         LX          PCTNV
         LBY         &AOCT
         LR          A,B             <CAR. EN COURS TNV
         LX          PCVCC
         LBY         &AOCT           <CAR. EN COURS VCC
         CPR         A,B             <EGALITE CARACTERE?
         JNE         RCHVT3          <NON,SORTIE BOUCLE CARACTERE
         IC          PCVCC           <CAR. SUIVANT
         IC          PCTNV           <CAR. SUIVANT
         LR          W,X             <RESTAUR. COUNT
         JDX         RCHVT2          <BOUCLE CARACTERE
<
<                    EGALITE! RECHERCHE FRUCTUEUSE
         LAI         1
         LR          A,W             <W=1   EXISTENCE
         JMP         LOADV           <LOAD VALEUR VAR. DANS A B
RCHVT3:  EQU         $               <INEGALITE!
         STY         PCTNV           <RESTAUR. PCTNV
RCHVT4:  EQU         $               <RECHERCHE DELIMITEUR 'FF
         ADRI        1,Y
         LR          Y,X
         LBY         &AOCT
         CPI         'FF
         JNE         RCHVT4
         STY         PCTNV
         IC          PCTNV           <POINTE SUR 1ER CAR. DU NOM
                                     <SUIVANT (OU '00 SI FIN !)
         IC          RGVC            <RANG=+1
         JMP         RCHVT           <BOUCLE RECHERCHE
LOADV:   EQU         $               <LOAD VALEUR
         LA          RGVC            <RANG...
         SLLS        1               <... *2
         LR          A,X
         LA          &AXTVV          <1ER MOT VALEUR
         ADRI        1,X
         LB          &AXTVV          <2ND MOT VALEUR
RCHVF:   EQU         $               <FIN DU S/P
         PLR         X
         STX         PCVCC           <RESTAURATION PCVCC
         RSR                         <RETOUR
         PAGE
INSV:    EQU         $
<
<        INSTALLATION VARIABLE DANS LA TABLE DES NOMS DE VAR. TNV
<
<        EN ENTREE
<
<        VCC/LVCC/PCVCC: VARIABLE/LONGUEUR/POINTEUR
<        PCTNV: POINTE SUR FIN TABLE TNV ('00)
<        RGVC: RANG DE LA DERN. VAR. DE TNV
<
<        EN SORTIE
<
<        VARIABLE INSTALLEE
<        PCVCC DETRUIT
<        PCTNV POINTE SUR FIN DE TNV ('00)
<        RGVC='+1 RANG DE LA VAR. QUE L'ON VIENT D'INSTALLER
<
<        ERREURS: CAPACITE TNV/CAPACITE TVV
<
<
<        VERIF CAPACITE TABLES
<
<                    TABLE DES NOMS DE VAR. (TNV)
<
         LA          PCTNV           <POINTEUR...
         AD          LVCC            <...+LONGUEUR...
         ADRI        2,A             <...+DELIM'FF+DELIM'00...
         CP          AOTNVF          <... >ADR. FIN TNV ?
         JL          INSV1
         LBI         41              <OUI, ERREUR CAPACITE TNV
         BR          AERR
INSV1:   EQU         $
<
<                    TABLE DES VALEURS (TVV)
<
         LA          RGVC
         ADRI        1,A             <A=RANG+1
         CPI         NMAXV           <RANG>= NB MAX VAR. ?
         JL          INSV2
         LBI         42              <OUI, ERREUR CAPACITE TVV
         BR          AERR
INSV2:   EQU         $
         LA          AOVCC
         STA         PCVCC           <1ER CAR. VAR. A INSTALLER
         LX          LVCC            <LONGUEUR DU NOM...
         ADRI        1,X             <...+1 POUR DELIM. DE FIN 'FF
INSV3:   EQU         $               <BOUCLE STOCKAGE
         LR          X,W             <SVG COUNT
         LX          PCVCC
         LBY         &AOCT           <CARACT. EN COURS...
         LX          PCTNV
         STBY        &AOCT           <...--->TABLE TNV
         IC          PCVCC           <CARACT. SUIV.
         IC          PCTNV           <CARACT. SUIV.
         LR          W,X             <RESTAUR. COUNT
         JDX         INSV3           <BOUCLE
         LX          PCTNV
         LAI         0
         STBY        &AOCT           <DELIMITEUR DE FIN DE TABLE
         RSR                         <RETOUR
         END



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.