IF          XXXSGN-0,XWOR%,,XWOR%
ORDI:    VAL         "S"             < TOUJOURS LE SOLAR...
XSTATS:  VAL         0
XWOR%:   VAL         0
         IF          XXXSGN-1,XWOR%,,XWOR%
XXXSGN:  VAL         1               < DU SGN TOUJOURS...
XWOR%:   VAL         0
         IDP         "ASSEMBLEUR SOLAR 64K - RELEASE 08/12/1977"
         IF          ORDI-"T",XWOR%,,XWOR%
         IDP         "VERSION EXECUTABLE SOUS CMS4 - T1600"
QUANTA:  VAL         1               < UNITE D'ALLOCATION DISQUE.
XXXSGN:  VAL         1               < TOUJOURS LE 'SGN' SUR T1600,
XSTATS:  VAL         0               < ET PAS DE PLACE POUR LES STATISTIQUES.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         IDP         "VERSION EXECUTABLE SOUS CMS5 - SOLAR"
QUANTA:  VAL         3               < UNITE D'ALLOCATION DISQUE.
         IF          XXXSGN-0,XWOR%,,XWOR%
         IDP         "VERSION SUPER RAPIDE SUR CDA"
XWOR%:   VAL         0
LLLBUF:  VAL         128*QUANTA      < NOMBRE DE MOTS OCCUPES PAR LES
                                     < BUFFERS DU SGF.
<
<
<        A S S E M B L E U R   S Y M B O L  :
<
<
<        NOTA :
<                    L'ASSEBLEUR SYMBOL EST EN FAIT L'ASSEMBLEUR ASM
<                    (ASM=ASSEMBLEUR SQUELETTIQUE MINABLE) PRODUIT
<                    PAR UNE USINE QUI S'EST LANCEE DANS L'INFORMATIQUE
<                    JE VEUX PARLER DE LA TELEMECANIQUE . DONC , CET
<                    ASM A ETE ADAPTE AUX BESOINS PREMIERS DU
<                    CLIENT (MOI EN L'OCCURENCE) , EN RESPECTANT
<                    L'INTERFACE AVEC UCPRS-CMS4 , ET LES FABULEUX
<                    SERVICES QU'IL MET A LA DISPOSITION DES
<                    UTILISATEURS ....
<
<
<
<
<        FORMAT DES DESCRIPTEURS DE SECTIONS:
<
<        - 'PROCESSEUR DE BASE' (DANS DECSEC) :
<            MOT1 =  N0 SECTION
<            MOT2 =  @ DEBUT
<            MOT3 = @ FIN
<
<
<        FORMAT DES DESCRIPTEURS DE SYMBOLES :
<            MOT1 =  BIT 0 = INDEXATION RENCONTREE SUR UNE
<                            ADRESSE NON ENCORE DEFINIE.
<                    BIT 1 = 1 SIGNIFIE PREMIER CHAINAGE SUR CE
<                            SYMBOLE, ALORS QUE 0 SIGNIFIE DEU-
<                            XIEME CHAINAGE ET SUIVANTS.
         IF          XXXSGN-1,XWOR%,,XWOR%
<                    BITS 2-7 = NUMERO DE SECTION (<64 !!!).
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
<                    BIT 2 = 1 : LE SYMBOLE A ETE DEFINI, MAIS JAMAIS REFERENCE,
<                    BITS 3-7 = NUMERO DE SECTION (<32 !!!).
XWOR%:   VAL         0
<                    BIT 8 = NON DEFINI
<                    BIT 9 = ABSOLU
<                    BIT 10 = EXT
<                    BIT 11 = DSEC
<                    BIT 12 = DEJA CHAINE
<                    BIT 13 = ENT
         IF          XXXSGN-1,XWOR%,,XWOR%
<                    BIT 14-15 = LG EN MOTS
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
<                    BIT 14 = SYMBOLE COMPACTE
<                    BIT 15 = LONGUEUR : 0 POUR 1,2 OU 3 CARACTERES
<                                        1 POUR 4,5 OU 6 CARACTERES
XWOR%:   VAL         0
<            MOT2 =  @ PROG DE DEFINITION
<            MOT3(-4-5)=  SYMBOLE EVENTUELLEMENT COMPACTE
<
<
<        FORMAT DES DESCRIPTEURS DE DEPLACEMENTS (DECROISSANTS) :
<
<            MOT1 =  @ DU DESCRIPTEUR DU SYMBOLE
<            MOT2 =  VALEUR DU DEPLACEMENT
<            MOT3 =  @ PROG DU DEPLACEMENT
<
<
<        FORMAT DES DESCRIPTEURS DE PAGE
<
<            BIT 0 = MODIFIEE
<            BIT 1 = NON PLEINE
<            BIT 2-3 = LG SYMBOLES
<            BIT 4-7 = N0 PAGE RESIDENTE
<            BIT 8 = NON RESIDENTE
<            BIT 9-15 = N0 PAGE
<
<
         PAGE
<
<
<        B U F F E R S  :
<
<
         TABLE
ZERO:    EQU         $               < ZERO RELATIF DU PROGRAMME.
         DZS         'C              < INTERFACE AVEC CALL
DITEM:   EQU         $
         IF          XXXSGN-1,XWOR%,,XWOR%
         ASCI        "ASSY"
         BYTE        "S";'04
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
         ASCI        "SUPE"
         BYTE        "R";'04
XWOR%:   VAL         0
DBCHIT:  EQU         $
         WORD        SIZE            < TAILLE EN OCTETS
         WORD        ASM             < ADRESSE DE RUN DE SYMBOL.
         PROG
         WORD        0               < POUR FAIRE $=$+1.
PSYMB:   EQU         $
         LRP         L
         BR          -2,L            < ENTRY DANS SYMBOL.
<
< BUFFERS DE TRAVAIL DE SYMBOL :
<
ABSIML:  WORD        SIML            < BUFFER SIMULATION LECTURE 'EDITS'.
ABSIME:  WORD        SIME            < BUFFER SIMULATION ECRITURE 'EDITS'.
ABORT:   WORD        NDS             < LORS DE LA RENCONTRE D'UN
                                     < ERREUR '17' DANS LA VERSION
                                     < PROCESSEUR DE BASE DE CMS4 ,
                                     < ON EDITE LES SYMBOLES NON DEFINIS
                                     < PUIS ON ABORTE L'ASSEMBLEUR.
ZACQN:   ASCI        "      "        < NUMERO LIGNE FICHIER
ZACQQ:   DZS         4               < POUR NUMEROTATION
ZACQ1:   EQU         $               < BUFFER DE SORTIE DU LISTING.
         ASCI        "000000000000000000"
ZACQ:    DZS         41              < BUFFER D'ENTREE UNE LIGNE
         IF          ORDI-"T",XWOR%,,XWOR%
NZACQ:   VAL         2               < NOMBRE DE CARTES DYNAMIQUES.
YNZACQ:  VAL         40*NZACQ
ZZACQ:   DZS         YNZACQ          < CARTES DYNAMIQUES...
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
NZACQ:   VAL         3               < NOMBRE DE CARTES DYNAMIQUES.
XNZACQ:  VAL         128             < ON RESERVE 128 MOTS POUR LES CARTES
                                     < DYNAMIQUES ; AINSI L'INDEX OCTET D'ACCES
                                     < TIENT SUR UN OCTET.
YNZACQ:  VAL         40*NZACQ
PZZACQ:  BYTE        XNZACQ;YNZACQ   < POINTEUR DE LA PILE DU CODE GENERE...
ZZACQ:   DZS         YNZACQ          < CARTES DYNAMIQUES,
         DZS         XNZACQ-YNZACQ   < PILE DU CODE GENERE, ACCESSIBLE PAR
                                     < LES FONCTIONS DES CARTES DYNAMIQUES.
XWOR%:   VAL         0
LXZACQ:  VAL         ZZACQ-ZACQ*2    < POUR PASSER DE ZACQ A ZZACQ.
MCLOSE:  ASCI        "!CLOSE"
         BYTE        '04;0
         IF          ORDI-"S",XWOR%,,XWOR%
SAVEC:   DZS         2+XSTATS        < SAUVEGARDE DIRECTIVE COURANTE.
SAVEP:   DZS         2+XSTATS        < SAUVEGARDE DIRECTIVE PRECEDENTE.
XWOR%:   VAL         0
         PAGE
<
<
<        C O M M O N   D E   S Y M B O L  :
<
<
         COMMON
COMMUN:  EQU         $+128
         DZS         1               < POUR FLOTTANT
COMM1:   EQU         COMMUN+256
COM1:    WORD        COMM1
<
<
<        C O N S T A N T E S   F L O T T A N T E S  :
<
<
ZCDF:    WORD        0
ACDF:    WORD        CDF
ACOMFL:  WORD        COMFL
CEFLT:   WORD        TFLOAT+1
M3800:   WORD        '3800
ZFLOAT:  DZS         6
AZFL:    WORD        ZFLOAT+1,X
ARETD:   WORD        RETDIR
<
<
<        R E L A I S   S O U S - P R O G R A M M E S  :
<
<
SORSYM:  WORD        PSOSYM          < SORTIE D'UN SYMBOLE.
CALEX:   WORD        PCALEX          < CALCUL D'UNE EXPRESSION.
MACQ:    WORD        PMACQ           < MODULE D'ACQUISITION.
INSET:   WORD        PINSET          < INSERTION D'UN SYMBOLE DANS LA
                                     < TABLE DES SYMBOLES TSYMB.
RETIQ:   WORD        PRETIQ          < RECHERCHE D'UN SYMBOLE DANS
                                     < LA TABLE DES SYMBOLES TSYMB.
INSDEP:  WORD        PINSDP          < INSERTION DEPLACEMENT DANS TDEP.
IUSY:    WORD        SPIUSY          < REPERAGE SYMB. POUR SUP.
SUSY:    WORD        SPSUSY          < SUPPRESSION SYMBOLES
VERPA:   WORD        VERPAS          < TEST DEPASSEMENT 32K.
SPTAS:   WORD        PTAS            < TRANSFERT SYMBOLE DANS BUF.
PSORTQ:  WORD        SORTQ           < SORTIE QUADRUPLET IDP.
SPJUMP:  WORD        PJUMP           < VERIFICATION PORTEE DES JUMPS.
CONVER:  WORD        PCONV           < CONVERSION 4 CHIFFRES.
HEXA2:   WORD        PHEXA           < CONVERSION 2 CHIFFRES.
BSUPL:   WORD        SUPL            < TRAITEMENT BITS 9,8,10
SPSAV:   WORD        PSAV            < SAVE POUR LES CAS D'ERREUR.
ASPSO1:  WORD        SPSO1           < SORTIE 1 QUADRUPLET.
ASPSO2:  WORD        SPSO2           < SORTIE 2 QUADRUPLETS.
SORSEC:  WORD        PSORC           < EDITION SECTION COMPLETE.
SYMUL:   WORD        PSYMUL          < RECHERCHE PROCHAIN SYMBOLE
                                     < DE TSYMB.
SORMES:  WORD        PSORM           < SORTIE MESSAGE.
TRASYM:  WORD        PTRAS           < TRANSFERT DE TSYMB DANS SYMBOL.
SPLIST:  WORD        PLIST           < SORTIE LISTING.
SORCLF:  WORD        PSORCL          < SORTIE RC-LF.
SPLIS1:  WORD        PLIS1           < SORTIE LISTING (DZS,EQU).
CONV10:  WORD        PCOV10          < CONVERSION DECIMALE.
PAGE:    WORD        PPAGE           < SAUT DE PAGE.
PAGIN:   WORD        PPAGIN          < PAGINATION.
APAGEN:  WORD        PAGENE          < SORTIE LISTING (DIRECTIVES).
         IF          ORDI-"S",XWOR%,,XWOR%
ASISVC:  WORD        SISVC           < SIMULATION DES 'SVC' DE LISTING.
XWOR%:   VAL         0
         PAGE
<
<
<        C O N S T A N T E S   A D R E S S E  :
<
<
AC44:    WORD        C44
ATABLG:  WORD        TABLG,X
ATABTY:  WORD        TABTY,X
XWOR%1:  VAL         0               < SGN UTILISE A PRIORI...
         IF          XXXSGN-0,XWOR%,,XWOR%
XWOR%1:  VAL         '800            < ET BIEN NON, PAS DE SGN...
XWOR%:   VAL         0
ATDEP:   WORD        '97EF+XWOR%1
ATDEP1:  WORD        '97EE+XWOR%1
ATDEP2:  WORD        '97ED+XWOR%1
ATABDR:  WORD        TABDIR,X
AZACQ:   WORD        ZACQ,X
AZACQX:  WORD        ZACQ+40,X
ABFSG0:  WORD        BUFSGF
ABFSGF:  WORD        BUFSGF+1,X
ABRAN:   WORD        BRAN+2,X
ABASC:   WORD        BASC+1,X
ATABCO:  WORD        FINTAB,X
ATACAT:  WORD        TACAT,X
ATACLE:  WORD        TACLE,X
ATALON:  WORD        TALON,X
ATALIG:  WORD        TALIG,X
ATATYP:  WORD        TATYP,X
ATABRG:  WORD        TABRG,X
ADLAN:   WORD        DEBLAN,X
ATSYMB:  WORD        ZONSYM,X
SYMBIN:  WORD        TABINI,X
INCALE:  WORD        DEBCAL,X
INMACQ:  WORD        DEBMAC,X
ATARUP:  WORD        TARUP,X
ASYMB:   WORD        SYMBOL-1,X
ASYMB1:  WORD        SYMBO1-1,X
ASYMB2:  WORD        SYMBO2-1,X
ATBINF:  WORD        TABINF,X
ATBSUP:  WORD        TABSUP,X
AIGET:   WORD        TABEXT,X
LIMINF:  WORD        ZONBAS,X
LIMSUP:  WORD        ZONBAS+3,X
SECBAS:  WORD        ZONSEC,X
VALBAS:  WORD        ZONBAS+6,X
LIMIN1:  WORD        ZONBA1,X
LIMSU1:  WORD        ZONBA1+2,X
SECBA1:  WORD        ZONSEC+3,X
VALBA1:  WORD        ZONBA1+4,X
ASAVE:   WORD        DEBSAV,X
ADINI:   WORD        DEBIN,X
AREST:   WORD        DEBRES,X
ABUF:    WORD        BUF+2,X
ABUFBN:  WORD        BUFBIN+1,X      < +1 A CAUSE DE L'INTERFACE SGF.
ACARSP:  WORD        CARSP+1,X
ACOT:    WORD        COTROU
AFINF:   WORD        FINFRA
ATESTF:  WORD        TESTF
ANOCON:  WORD        NOCONF
ADEP:    WORD        DEPART
BRAN:    WORD        PADIF
RETER:   WORD        EOTIMP
         WORD        PADET
ASORLI:  WORD        SORLIS
         WORD        DOLLAR
RETEQ1:  WORD        C93
ZACQ10:  WORD        ZACQ1+0
ZACQ11:  WORD        ZACQ1+1
ZACQ12:  WORD        ZACQ1+2
ZACQ13:  WORD        ZACQ1+3
ZACQ14:  WORD        ZACQ1+4
ZACQ15:  WORD        ZACQ1+5
ZACQ16:  WORD        ZACQ1+6
ZACQ17:  WORD        ZACQ1+7
ZACQ18:  WORD        ZACQ-1
         PAGE
<
< DEFINITION DU NVP DE SORTIE IMPLICITE :
<
NVPO:    VAL         '0402           < VALEUR IMPLICITE SI 'SYMBOL'.
KNVPO:   VAL         0
<
<
<        Z O N E   D E   T R A V A I L  :
<
<
IOCB4:   WORD        NVPO+KNVPO      < SORTIE DU LISTING.
         WORD        ZACQQ-ZERO*2
         WORD        0
DEBCAL:  EQU         $-1             < ZONE INITIALISEE PAR CALEX.
RANG:    WORD        0
RANG1:   WORD        0
SOM:     WORD        0
NSEC:    WORD        0
INDSEC:  WORD        0
SIGMA:   WORD        0
COMDE:   WORD        0
NIV:     WORD        0
FINCAL:  EQU         $-1
IOCB3:   WORD        NVPO            < SORTIE MESSAGE.
         WORD        ADSY1           < @ OCTET DE 'SYMBOL'.
DEBMAC:  EQU         $-1             < ZONE INITIALISEE PAR MACQ.
SIGNE:   WORD        0
SIGN1:   WORD        0
ETAT:    WORD        0
LG:      WORD        0
INDICA:  WORD        0
COND:    DZS         2
SYMBOL:  DZS         3
ADSY0:   VAL         SYMBOL-ZERO*2
ADSY1:   EQU         ZERO+ADSY0
VALEUR:  EQU         SYMBOL
INDHEX:  EQU         SYMBOL+1
CSTE:    EQU         SYMBOL+2
FINMAC:  EQU         $-1
NIVSYM:  WORD        0
CLE:     WORD        0
MOTINF:  WORD        0
MOTSUP:  WORD        0
IOCB1:   WORD        NVPO            < SORTIE CARTE ERRONNEE.
                                     < NVP=4.
         WORD        ZACQ-ZERO*2
         WORD        80
BUF:     DZS         4
IOCB2:   WORD        NVPO            < MESSAGES D'ERREUR.
         WORD        ADSY3           < @ OCTET DE 'SYMBO2'.
VALEQU:  WORD        22              < CE MOT DONNE D'UNE PART LE COMPTE
                                     < D'OCTETS DES MESSAGES D'ERREUR, ET D'AUTR
                                     < D'AUTRE PART UN INDICATEUR RELATIF AU
                                     < TRAITREMENT DES "::",
                                     < 0 : MODE NORMAL (":"),
                                     < +2 : VAL::,
                                     < -2 : EQU::.
                                     < LES AUTRES VALEURS DOIVENT ETRE CONSI-
                                     < DEREES COMME UN VAL:...
NELT:    WORD        0
NLIG:    WORD        0
IOCB5:   WORD        '0302           < SORTIE BINAIRE.
         WORD        BUFBI2
         WORD        LLLBUF*2
DEBIN:   EQU         $-1             < DONNEES INITIALISEES AU LANCEMENT.
         DZS         2
DEBSAV:  EQU         $-1             < DONNEES SAUVEGARDEES EN
                                     < DEBUT DE PHRASE.
SECOUR:  WORD        0
PAS:     WORD        0
NDEP:    WORD        0
ETATS:   WORD        0
SECMAX:  WORD        0
FINSAV:  EQU         $-1
INDEND:  WORD        0
ZONSEC:  EQU         $-1
         DZS         5               < NUMEROS SECTIONS POINTEES
                                     < PAR BASES.
LIST2:   WORD        0
CHECK:   WORD        0
SYMBO1:  DZS         3
NACQ1:   WORD        0
LIMSU2:  WORD        0
SAUVPA:  WORD        0
DEBSEC:  WORD        0
FINSEC:  WORD        0
INDZS:   WORD        0
BASCUL:  WORD        0
NBLIG:   WORD        0
SITUAT:  WORD        0               < 0 : LOCAL, COMMON, TABLE.
                                     < 1 : DSEC.
                                     <-1 : PROG.
DEPLA2:  WORD        0
IBUFBN:  WORD        0
SYMBO2:  DZS         3
ADSY2:   VAL         SYMBO2-ZERO*2
ADSY3:   EQU         ZERO+ADSY2
FININ:   EQU         $-1
         WORD        '2B
         WORD        0
RCLF:    WORD        '0D0A
         ASCI        "ERA "
ZTR:     WORD        0
RC:      WORD        '0D00
LF:      WORD        '0A00
ATSYM0:  WORD        ZONSYM+1
MOTEST:  WORD        '09A0
OUVR:    WORD        '2028           < '('.
FERM:    WORD        '2920           < ')'.
CARSP:   WORD        'A0A5
         WORD        "  "
         WORD        'A0AA
M10:     WORD        10
SAUPAG:  WORD        '0D50
M3277:   WORD        3277
IOCB6:   WORD        0
IOCB7:   WORD        0
DEBLAN:  EQU         $-1             < DONNEES INITIALISEES EN
                                     < DEBUT DE CARTE.
INBRE:   WORD        0
SINGER:  WORD        0
VALDIR:  WORD        0
NR:      WORD        0
SIGNIF:  EQU         $
TRANS:   WORD        0
INDASC:  WORD        0
MOT1:    WORD        0
PVIR:    WORD        0
MOT2:    WORD        0
ETAPH:   WORD        0
BINARY:  WORD        0
NACQ:    WORD        0
CARLU:   WORD        0
INDREG:  WORD        0
NREG:    WORD        0
NETIQ:   WORD        0
INBYTE:  WORD        0
MOBYTE:  WORD        0
INACTD:  WORD        0
INFL:    WORD        0
FINLAN:  EQU         $-1
KSTOR:   WORD        AKSTOR
KSTOR3:  WORD        AKSTOR+3
DEBRES:  EQU         $-1
         DZS         FINSAV-DEBSAV   < ZONE DE SAUVEGARDE.
OPNBO:   WORD        '0304           < OPEN-NEW ENREGISTREMENT.
         WORD        1               < CLEF=1.0.
         WORD        0
CCI:     WORD        '0001           < APPEL DU CCI.
         PAGE
<
<
<        A D R E S S E S   D ' E R R E U R S  :
<
<
MERR:    WORD        ERR
< 1      ERREUR D'ECRITURE.
< 2      ERREUR DANS UNE EXPRESSION.
< 3      ETIQUETTE INTERDITE OU MANQUANTE.
< 4      SYMBOLE INCORRECT.
< 5      EXPRESSION INTERDITE.
< 6      EXPRESSION NON DEFINIE.
< 7      DEPLACEMENT HORS-LIMITES.
< 8      DOUBLE DEFINITION.
< 9      SATURATION DES TABLES.
< 10     CHAINAGE INCORRECT
< 11     ADRESSE INACCESSIBLE.
< 12     PASSAGE D'UNE ADRESSE AU DELA DE 64K.
< 13     CONTEXTE IMPROPRE.
< 14     ADRESSE SUPERIEURE A 32K SUR LAQUELLE
<        UNE INDEXATION A ETE DEMANDEE.
< 15     LIMITE DE SECTION 'PROG' NON ATTEINTE.
< 16     ENCHAINEMENT DES SECTIONS INCORRECT.
< 17     SYMBOLE(S) NON DEFINI(S) LORS DE LA RENCONTRE DU 'END'.
< 18     DEBORDEMENT SUR UN 'WORD' PARAIT-IL...
< 19     LE SYMBOLE TRANSLATABLE DEFINI VAUT '7FFF, OR
<        CETTE VALEUR INDIQUE UNE FIN DE CHAINAGE.
< 20     CHAINAGE SUPERIEUR A 32K, LORS DE LA RENCONTRE
<        D'UNE REFERENCE EN AVANT SUR LAQUELLE UNE
<        INDEXATION EST DEMANDEE; LORSQU'UNE REFERENCE
<        EN AVANT INDEXEE SERA FAITE AU DELA DE 32K,
<        (PORTANT EVIDEMMENT SUR UNE VALEUR INFERIEURE
<        A 32K DEFINIE PAR EXEMPLE PAR UN RETOUR ARRIERE
<        DU $), ON CREERA AUTANT DE SYMBOLES DIFFERENTS
<        QU'IL Y AURA DE REFERENCES INDEXEES; TOUS CES
<        SYMBOLES AYANT BIEN ENTENDU LA MEME VALEUR...
< 21     SATURATION DE LA TABLE DES SYMBOLES (FAUT LE FAIRE !!!)
< 22     LORS D'UNE REFERENCE EN AVANT, UN CHAINAGE>32K
<        EST SUIVI D'UN CHAINAGE<32K : ON INTERDIT AINSI
<        DES SYMBOLES<32K DEFINIS APRES AVOIR ETE REFE-
<        RENCES AU-DELA DES 32K (IL Y AURAIT ALORS POUR
<        POUR L'EDITEUR DE LIENS UNE AMBIGUITE ENTRE
<        LES CHAINAGES>32K, ET LES CHAINAGES<32K INDEXES!!!);
<        LA SOLUTION POUR PASSER OUTRE CETTE POSSIVBILITE
<        EST DE CREER AUTANT DE SYMBOLES EQUIVALENTS
<        QUE NECESSAIRES...
< 23     ETIQUETTE SUR UNE INSTRUCTION DE L'OPTION CDA.
<        (INTERDITE POUR UNE RAISON LIEE A LA
<        COMPLEXITE MERDIQUE DE CET ASSEMBLEUR).
< 24     ERREUR D'ACCES A UN FICHIER SUR 'EOT'.
< 25     'ED' ALORS QU'IL Y A UN 'EOT' EN COURS.
         PAGE
<
<
<        O P E R A T I O N S   S U R   F I C H I E R
<                    D ' E N T R E E  :
<
<
NBPASS:  WORD        -1              < EVITE UN ALT-MODE
AEOT:    WORD        EOT
LCNF:    WORD        SPLCNF          < SP DE LECTURE SUR FICHIER
MODSB:   WORD        SPMDSB
ATSYM1:  WORD        ZONSY1
ATSYM2:  WORD        ZONSY1+1
ATSY11:  WORD        ZONSY2
ATSY12:  WORD        ZONSY2+1
PTSECT:  WORD        2
ADSECT:  WORD        DECSEC,X
BATCH:   WORD        0               < 0 : TS, 1 : BATCH.
KLIST:   WORD        0               < KLIST=0 : EDITION LISTING,
                                     < KLIST>0 : PAS DE LISTING (SUR
                                     <           IOCB3 ET IOCB4).
MTABCO:  WORD        NTABCO          < COMPLEMENT PAR RAPPORT A 0 DE LA
                                     < LONGUEUR DE LA TABLE DES DIRECTIVES.
<
< DEBUT DE LA ZONE EMPILEE PAR 'EOT' :
<
SAVEDK:  EQU         $
INDO:    WORD        0               < LE COMPTEUR/INDICATEUR DES
                                     < DO EN COURS FAIT PARTIE DU
                                     < CONTEXTE DES FICHIERS.
IOCB:    WORD        '0101           < ENTREE CARTE.
         WORD        ZACQ-ZERO*2
         WORD        80
INDIN:   WORD        0               < INDEX DE DECOMPACTAGE SGF.
OPEN5O:  WORD        '3405           < OPEN OLD 5,6,7,... LE '3X SERT
                                     < EN FAIT A GENERER DES CHIFFRES
                                     < DECIMAUX ASCI POUR LA GENERATION
                                     < DYNAMIQUE DE SYMBOLES RECURSIFS...
         WORD        2;0             < SUR LA CLEF 2.0
SINDO:   WORD        0               < 'INDO' SPECIAL POUR 'EOT'.
CLOS5S:  WORD        '0407           < CLOSE SAVE 5, 6, 7,...
         WORD        2
         WORD        0
MASS5S:  ASCI        "!ASSIGN "
MASS4S:  BYTE        "4";"=";"S";'04
MASS5O:  ASCI        "!ASSIGN "
MASS4O:  BYTE        "4";"=";"O";","
         IF          ORDI-"T",XWOR%,,XWOR%
XXXLFC:  VAL         20              < LONGUEUR MOT NOM FICHIER
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
XXXLFC:  VAL         10
XWOR%:   VAL         0
NOMFIC:  DZS         XXXLFC+1        < NOM DU FICHIER 'EOT'.
LGNMFC:  EQU         NOMFIC+XXXLFC   < LONGUEUR DU FICHIER 'EOT'.
NOMF2:   DZS         XXXLFC+1        < NOM DU FICHIER COURANT.
LF2:     EQU         NOMF2+XXXLFC    < LONGUEUR DE FICHIER COURANT.
SZACQN:  DZS         ZACQQ-ZACQN     < ZONE DE SAVE NUMERO DE LIGNE.
<
< FIN DE LA ZONE EMPILEE PAR 'EOT' :
<
FAVEDK:  EQU         $
ANOMF1:  WORD        NOMFIC
ANOMF2:  WORD        NOMF2
AIOCB:   WORD        IOCB            < PARCQUE JE NE PEUX PAS
APEN5O:  WORD        OPEN5O          < FAIRE AUTREMENT...
AINDO:   WORD        INDO            < IDEM...
DEMMEM:  WORD        '0004           < DEMANDE MEMOIRE
         WORD        0
         IF          XXXSGN-1,XWOR%,,XWOR%
         WORD        '3000
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
         WORD        '4000
XWOR%:   VAL         0
MAXMEM:  WORD        '4000           < NB MAX OCTETS MEMOIRE
         IF          ORDI-"T",XWOR%,,XWOR%
MAXPAR:  WORD        '6000           < 12K MAXIMUM
XWOR%:   VAL         0
ADPAGE:  WORD        TOP,X           < TABLE SYMB. RESIDENTE
NSYMB:   WORD        0               < PT D'OCCUPATION
ADTBPG:  WORD        TBPAGE,X        < RELAI VERS DESC. PAGES
NBPAGE:  WORD        -1              < NB PAGES - 1
NBPGRS:  WORD        -1              < NB PAGES RESIDENTES - 1
XLGPAG:  VAL         512             < LONGUER EN MOT DES PAGES.
LGPAGE:  WORD        XLGPAG-1        < LONGUEUR DES PAGES -1.
XWOR%1:  VAL         XLGPAG=0
         IF          1>XWOR%1)XLGPAG,,XWOR%,
         IF          ATTENTION, XLGPAG DOIT ETRE UNE PUISSANCE DE 2 !!!
XWOR%:   VAL         0
         IF          XXXSGN-1,XWOR%,,XWOR%
XWOR%1:  VAL         3*4*5           < PPCM LONGUEUR D'UNE ENTREE
XWOR%2:  VAL         5               < NOMBRE DE FOIS CETTE LG EN HASH
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
XWOR%1:  VAL         3*4             < PPCM LONGUEUR D'UNE ENTREE
XWOR%2:  VAL         25              < NOMBRE DE FOIS CETTE LG EN HASH
XWOR%:   VAL         0
LGH:     WORD        XWOR%1*XWOR%2   < LG ZONE HASH DANS UNE PAGE
ONZE:    WORD        11              < CSTE
         IF          ORDI-"T",XWOR%,,XWOR%
DEUX41:  WORD        29              < CONSTANTE NOMBRE PREMIER.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
DEUX41:  WORD        LTBBIT          < POUR ACCES AUX TABLES DE BITS.
XWOR%:   VAL         0
MASKRP:  WORD        '0F80           < MASQUE POUR ISOLER N0 RES.
MASKRM:  WORD        'F07F           < MASQUE POUR ELIM. N0 RES.
RESERV:  DZS         1               < SAUVEGARDE X
RESERY:  DZS         1               < SAUVEGARDE Y
SAUVX:   DZS         1               < SAUVEGARDE X
LG1:     DZS         1               < LG SYMBOLE(MOTS)
COEF:    DZS         1               < COEF POUR HASH
LG2:     DZS         1               < LG DESC. SYMBOLE(MOTS)
ATBBT1:  WORD        TBBIT1,X        < RELAIS TABLE BITS
ATBBT2:  WORD        TBBIT2,X
LIRP:    WORD        SPLIRP          < RELAIS SS-PROG
TTPL:    WORD        SPTTPL
LEPG:    WORD        SPLEPG
ECRP:    WORD        SPECRP
CALH:    WORD        SPCALH
RCPG:    WORD        SPRCPG
PLMM:    WORD        SPPLMM
CHSB:    WORD        SPCHSB
INVP:    WORD        SPINVP
DRPR:    WORD        SPDRPR
RCAD:    WORD        SPRCAD
INSY:    WORD        SPINSY
ELPG:    WORD        SPELPG
ADDSYM:  WORD        ZONSYM          < RELAIS
ADDSY1:  WORD        ZONSY2
ANIVSY:  WORD        NIVSYM
ADRDEP:  DZS         1
ANIV:    WORD        NIV
RELAD:   WORD        SYMBOL,X
         IF          XXXSGN-0,XWOR%,,XWOR%
LG3:     DZS         1               < POUR LA GENERATION DES SYMBOLES
SYMCOM:  DZS         3               < EN COMPACTE
ASMCOM:  WORD        SYMCOM,X
AZNSYM:  WORD        ZONSYM+2,X
M40:     WORD        40
ADRDP1:  DZS         1               < SAUVERGARDE DE PT HASH
BASCH:   WORD        0               < BASCULE DU HASH
CPSY:    WORD        SPCPSY
CPS3:    WORD        SPCPS3
DCSY:    WORD        SPDCSY
DCS3:    WORD        SPDCS3
XWOR%:   VAL         0
PTFINP:  DZS         1               < FIN ZONE DEBOR. PAGE
PTSYMU:  DZS         1               < PT POUR PSYMUL
PGSYMU:  DZS         1
LGSYMU:  DZS         1
PRSYMU:  DZS         1
AZAQC:   WORD        ZACQ,X          < RELAI POUR EOT
AZACQN:  WORD        ZACQN           < RELAI NUMERO DE LIGNE.
AASS5S:  WORD        '0002           < DEMANDE AU CCI
         WORD        MASS5S-ZERO*2
         WORD        80
AASS5O:  WORD        '0002
         WORD        MASS5O-ZERO*2
         WORD        80
ANOMF:   WORD        NOMFIC,X        < RELAI
<
< ACCES ZONE SCRATCH DISQUE :
<
         IF          FAVEDK-SAVEDK-128,XWOR%,,
         IF          A T T E N T I O N  : LA ZONE DES CONSTANTES
         IF          SGF NE DOIT PAS EXCEDER UN SECTEUR SCRATCH !!!
XWOR%:   VAL         0
WDK1:    WORD        '0C02           < SAVE BUFFER SGF.
         WORD        BUFSG2
         WORD        LLLBUF*2
         WORD        0
RDK1:    WORD        '0C00           < RESTAURE BUFFER SGF.
         WORD        BUFSG2
         WORD        LLLBUF*2
         WORD        0
WDK2:    WORD        '0C02           < SAVE CERTAINES CONSTANTES.
         WORD        SAVEDK-ZERO*2
         WORD        FAVEDK-SAVEDK*2
XWOR%1:  VAL         '09-'05+4*QUANTA  < CALCUL MAJORE DE NOMBRE DE SECTEURS
                                     < OCCUPES PAR LA SAUVEGARDE DES BUFFERS
                                     < DU SGF (LES NVP UTILISES PAR LE SGF
                                     < ALLANT DE '05 A '09).
         WORD        XWOR%1          < PREMIER SECTEUR.
RDK2:    WORD        '0C00           < RESTAURE CERTAINES CONSTANTES.
         WORD        SAVEDK-ZERO*2
         WORD        FAVEDK-SAVEDK*2
         WORD        XWOR%1          < PREMIER SECTEUR.
         IF          ORDI-"S",XWOR%,,XWOR%
ASASGF:  WORD        SASGF           < SAUVEGARDE DES INFOS SGF.
ARESGF:  WORD        RESGF           < RESTAURATION DES INFOS SGF.
XWOR%:   VAL         0
<
< ACCES SGN POUR LA TABLE DES SYMBOLES :
<
RECPAG:  WORD        '8502           < LECTURE PAGE
DETPAG:  WORD        '8302           < DESTRUCTION PAGE
CREPAG:  WORD        '8402           < CREATION PAGE
IDESC:   BYTE        0;'04           < N0 UTILISATEUR
COMPAG:  WORD        '8200           < COMMANDE AU SGN
         WORD        0               < @ A CALCULER
         WORD        1024            < LG EN BYTES DE LA PAGE
         WORD        -1              < DEPLACEMENT NUL
AA:      WORD        "AA"            < PREMIER NOM
PTSASY:  DZS         1               < POUR EFFACER SYMBOLES
SASYMB:  WORD        SAUVSY,X
SAUVSY:  DZS         5
ZONSYM:  DZS         5               < DESC. SYMBOLE
ZONSY1:  DZS         5
ZONSY2:  DZS         2
<
< APPEL DE L'OVERLAY 'EDITS' :
<
LOADED:  WORD        '8602           < CHARGEMENT DE 'EDITS'.
         WORD        DITEM-ZERO*2
         WORD        0               < GENEREE AU CHARGEMENT.
         WORD        -1
NOMED:   ASCI        "EDIT"          < NOM DE L'OVERLAY.
         BYTE        "S";'04
NOMAS:   ASCI        "ASSY"
         BYTE        "S";'04
ALOAD:   WORD        8               < ADRESSE DU PROGRAMME DE
                                     < CHARGEMENT DES OVELAYS
                                     < GENERE PAR L'APPEL !CALL.
DELASS:  WORD        '8302           < DELETE 'ASSY'.
         WORD        DITEM-ZERO*2
         WORD        DBCHIT-DITEM*2
         WORD        -1
STASS:   WORD        '8402           < GENERATION DE 'ASSY'.
         WORD        DITEM-ZERO*2
         WORD        0               < GENERE AU CHARGEMENT.
         WORD        -1
SAVEK:   WORD        0               < SAUVEGARDE DE (K) EN COURS
                                     < D'EXECUTION DE L'OVERLAY.
ANOMA:   WORD        DITEM+2         < POUR METTRE  DANS 'ASSYS'.
ARUN1:   WORD        ASM             < ENTRY POINT DE 'ASSYS',
ARUN2:   WORD        EX310           < ENTRY POINT AU RETOUR DE 'EDITS'.
ARUN:    WORD        '10             < ADRESSE DU MOT OU METTRE
                                     < L'ADRESSE DE L'ENTRY POINT.
AARSR:   WORD        ARSR            < POUR ALLER CHERCHER UN 'RSR',
AGO:     WORD        '000A           < ET OU LE METTRE...
DCLOSE:  WORD        '0002           < DEMANDE DE CLOSE DE TOUTES
         WORD        MCLOSE-ZERO*2   < LES ASSIGNATIONS.
         WORD        80
<
< COMPTAGE DES ERREURS :
<
KERROR:  WORD        0               < SERA EDITE SUR LA CARTE 'END'.
         IF          ORDI-"S",XWOR%,,XWOR%
<
< COMPTAGE DES PAGES IMPRIMEES :
<
NUMPAG:  WORD        0
XWOR%:   VAL         0
<
< DEFINITION DES MASQUES ET VALEURS DE 'CALEX'.
<
FLOMAS:  EQU         ZFLOAT+0
FLOVAL:  EQU         ZFLOAT+1
         IF          ORDI-"S",XWOR%,,XWOR%
FLORES:  EQU         ZFLOAT+2        < POUR LE RESTE D'UNE DIVISION.
XWOR%:   VAL         0
<
< NOMBRE DE SECTIONS AUTORISE :
<
         IF          XXXSGN-1,XWOR%,,XWOR%
NBRSEC:  VAL         50              < NBRE MAX DE SECTIONS.
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
NBRSEC:  VAL         32              < NOMBRE DE SECTIONS AUTORISEES...
         IF          NBRSEC-'20,XWOR%5,XWOR%5,
         IF          ATTENTION : A CAUSE DU BIT 2 (SYMBOLE NON UTILISE)
         IF          LE NUMERO DE SECTION DOIT TENIR SUR 5 BITS !!!
XWOR%5:  VAL         0
XWOR%:   VAL         0
         PAGE
<
<
<        T A B L E   D E   R E C O N N A I S S A N C E
<                    D E S   D I R E C T I V E S  :
<
<
<        FORMAT :
<                      TABCO CONTIENT SUR 1 OU 2 MOTS LES
<                    DIRECTIVES CODEE DE LA FACON SUIVANTE :
<                    BIT0(TABCO)=0 SI LONGUEUR=1 MOT,
<                                 1 SI LONGUEUR=2 MOTS.
<                    BIT1-5(TABCO)=BIT3-7(CARACTERE1)
<                    BIT6-10(TABCO)=BIT3-7(CARACTERE2)
<                    ( BIT11-15(TABCO)=BIT3-7(CARACTERE3)
<                      ( BIT16-20(TABCO)=BIT3-7(CARACTERE4)
<                                                           )
<                                                             )
<
<
TABCO:   EQU         $
         WORD        'DDF2           < WORD.
         BYTE        '20;156
         DZS         XSTATS
         WORD        '582C;152       < VAL.
         DZS         XSTATS
         WORD        '1635;151       < EQU.
         DZS         XSTATS
         WORD        '24C0;150       < IF.
         DZS         XSTATS
         WORD        '11E0;155       < DO.
         DZS         XSTATS
         WORD        '15F4;146       < EOT.
         DZS         XSTATS
         WORD        '3274;184       < LST.
         DZS         XSTATS
         WORD        '3993;185       < NLS.
         DZS         XSTATS
         WORD        '1353;153       < DZS.
         DZS         XSTATS
         WORD        '8B34           < BYTE.
         BYTE        '28;154
         DZS         XSTATS
         WORD        '3020;16        < LA.
         DZS         XSTATS
         WORD        '3029;80        < LAI.
         DZS         XSTATS
         WORD        '4E81;13        < STA.
         DZS         XSTATS
         WORD        '3309;81        < LXI.
         DZS         XSTATS
         WORD        '0A72;6         < BSR.
         DZS         XSTATS
         WORD        '4272;90        < PSR.
         DZS         XSTATS
         WORD        '4192;91        < PLR.
         DZS         XSTATS
         WORD        '0E09;85        < CPI.
         DZS         XSTATS
         WORD        '2898;89        < JDX.
         DZS         XSTATS
         WORD        '2938;88        < JIX.
         DZS         XSTATS
         WORD        '3329;86        < LYI.
         DZS         XSTATS
         WORD        '3049;87        < LBI.
         DZS         XSTATS
         WORD        '8492           < ADRI.
         BYTE        '48;79
         DZS         XSTATS
         WORD        '3E49;82        < ORI.
         DZS         XSTATS
         WORD        '85C4           < ANDI.
         BYTE        '48;83
         DZS         XSTATS
         WORD        '95F2           < EORI.
         BYTE        '48;84
         DZS         XSTATS
         WORD        'C027           < PAGE.
         BYTE        '28;159
         DZS         XSTATS
         WORD        '14A0;187       < EE.
         DZS         XSTATS
         IF          ORDI-"S",XWOR%,,XWOR%
         WORD        '8C2C           < CALL (SYNONYME DE 'EOT').
         BYTE        '60;146
         DZS         XSTATS
XWOR%:   VAL         0
         WORD        '29B0;32        < JMP.
         DZS         XSTATS
         WORD        '2860;76        < JC.
         DZS         XSTATS
         WORD        '29C3;72        < JNC.
         DZS         XSTATS
         WORD        '28E5;128       < JGE.
         DZS         XSTATS
         WORD        '29C5;129       < JNE.
         DZS         XSTATS
         WORD        '28E0;130       < JG.
         DZS         XSTATS
         WORD        '2980;132       < JL.
         DZS         XSTATS
         WORD        '28A0;133       < JE.
         DZS         XSTATS
         WORD        '2985;134       < JLE.
         DZS         XSTATS
         WORD        'A827           < JAGE.
         BYTE        '28;33
         DZS         XSTATS
         WORD        'A82E           < JANE.
         BYTE        '28;34
         DZS         XSTATS
         WORD        '2827;35        < JAG.
         DZS         XSTATS
         WORD        '282C;37        < JAL.
         DZS         XSTATS
         WORD        '2825;38        < JAE.
         DZS         XSTATS
         WORD        'A82C           < JALE.
         BYTE        '28;39
         DZS         XSTATS
         WORD        '3024;29        < LAD.
         DZS         XSTATS
         WORD        '3059;0         < LBY.
         DZS         XSTATS
         WORD        'CE82           < STBY.
         BYTE        'C8;1
         DZS         XSTATS
         WORD        '4E9A;30        < STZ.
         DZS         XSTATS
         WORD        '0E1A;4         < CPZ.
         DZS         XSTATS
         WORD        '8663           < ASCI.
         BYTE        '48;158
         DZS         XSTATS
         WORD        '3E40;18        < OR.
         DZS         XSTATS
         WORD        '05C4;19        < AND.
         DZS         XSTATS
         WORD        '15F2;20        < EOR.
         DZS         XSTATS
         WORD        '0E00;21        < CP.
         DZS         XSTATS
         WORD        '6240;54        < XR.
         DZS         XSTATS
         WORD        '3240;55        < LR.
         DZS         XSTATS
         WORD        '0492;56        < ADR.
         DZS         XSTATS
         WORD        '4C52;57        < SBR.
         DZS         XSTATS
         WORD        '3E52;58        < ORR.
         DZS         XSTATS
         WORD        '95F2           < EORR.
         BYTE        '90;59
         DZS         XSTATS
         WORD        '85C4           < ANDR.
         BYTE        '90;60
         DZS         XSTATS
         WORD        '38F2;64        < NGR.
         DZS         XSTATS
         WORD        '8E1A           < CPZR.
         BYTE        '90;65
         DZS         XSTATS
         WORD        'CEE2           < SWBR.
         BYTE        '90;68
         DZS         XSTATS
         WORD        '4854;40        < RBT.
         DZS         XSTATS
         WORD        '4C54;41        < SBT.
         DZS         XSTATS
         WORD        '2454;42        < IBT.
         DZS         XSTATS
         WORD        '5054;43        < TBT.
         DZS         XSTATS
         IF          ORDI-"S",XWOR%,,XWOR%
         WORD        '35F4;152       < MOT (EQUIVAUT A VAL...).
         DZS         XSTATS
XWOR%:   VAL         0
         WORD        'CD92           < SLRS.
         BYTE        '98;44
         DZS         XSTATS
         WORD        'CD8C           < SLLS.
         BYTE        '98;46
         DZS         XSTATS
         WORD        'CC72           < SCRS.
         BYTE        '98;48
         DZS         XSTATS
         WORD        'CC6C           < SCLS.
         BYTE        '98;50
         DZS         XSTATS
         WORD        'CC6C           < SCLD.
         BYTE        '20;51
         DZS         XSTATS
         WORD        'CC72           < SCRD.
         BYTE        '20;49
         DZS         XSTATS
         WORD        'CD8C           < SLLD.
         BYTE        '20;47
         DZS         XSTATS
         WORD        'CD92           < SLRD.
         BYTE        '20;45
         DZS         XSTATS
         WORD        '4E82;12        < STB.
         DZS         XSTATS
         WORD        '4E99;10        < STY.
         DZS         XSTATS
         WORD        '4E98;11        < STX.
         DZS         XSTATS
         WORD        '0A40;5         < BR.
         DZS         XSTATS
         WORD        '2460;24        < IC.
         DZS         XSTATS
         WORD        '1060;25        < DC.
         DZS         XSTATS
         WORD        '3040;23        < LB.
         DZS         XSTATS
         WORD        '3300;17        < LX.
         DZS         XSTATS
         WORD        '3320;22        < LY.
         DZS         XSTATS
         WORD        '4A72;98        < RSR.
         DZS         XSTATS
         WORD        '0480;9         < AD.
         DZS         XSTATS
         WORD        '4C40;8         < SB.
         DZS         XSTATS
         WORD        '12C0;15        < DV.
         DZS         XSTATS
         WORD        '3600;14        < MP.
         DZS         XSTATS
         WORD        '4EC3;92        < SVC.
         DZS         XSTATS
         WORD        '324D;93        < LRM.
         DZS         XSTATS
         WORD        'CA33           < RQST.
         BYTE        'A0;26
         DZS         XSTATS
         WORD        'C993           < RLSE.
         BYTE        '28;27
         DZS         XSTATS
         WORD        'DC29           < WAIT.
         BYTE        'A0;31
         DZS         XSTATS
         WORD        '0474;28        < ACT.
         DZS         XSTATS
         WORD        '4D2F;7         < SIO.
         DZS         XSTATS
         WORD        '8E02           < CPBY.
         BYTE        'C8;2
         DZS         XSTATS
         WORD        '61A0;3         < XM.
         DZS         XSTATS
         WORD        '0E12;67        < CPR.
         DZS         XSTATS
         WORD        '8492           < ADRP.
         BYTE        '80;70
         DZS         XSTATS
         WORD        '8483           < ADCR.
         BYTE        '90;62
         DZS         XSTATS
         WORD        'CC43           < SBCR.
         BYTE        '90;63
         DZS         XSTATS
         WORD        '3250;71        < LRP.
         DZS         XSTATS
         WORD        '5665;142       < USE.
         DZS         XSTATS
         WORD        '046B;109       < ACK.
         DZS         XSTATS
         WORD        '064D;95        < ARM.
         DZS         XSTATS
         WORD        '0471;96        < ACQ.
         DZS         XSTATS
         WORD        'A02C           < HALT.
         BYTE        'A0;97
         DZS         XSTATS
         WORD        'E12D           < XIMR.
         BYTE        '90;69
         DZS         XSTATS
         WORD        '8D93           < CLSR.
         BYTE        '90;61
         DZS         XSTATS
         WORD        '0DB2;66        < CMR.
         DZS         XSTATS
         WORD        'B5F6           < MOVE.
         BYTE        '28;105
         DZS         XSTATS
         WORD        '4C53;106       < SBS.
         DZS         XSTATS
         WORD        '8DED           < COMMON : REDUIT A COMM..
         BYTE        '68;135
         DZS         XSTATS
         WORD        'B1E3           < LOCAL : REDUIT A LOCA.
         BYTE        '08;136
         DZS         XSTATS
         WORD        'C24F           < PROG.
         BYTE        '38;137
         DZS         XSTATS
         WORD        'D022           < TABLE : REDUIT A TABL.
         BYTE        '60;138
         DZS         XSTATS
         WORD        '9265           < DSEC.
         BYTE        '18;139
         DZS         XSTATS
         WORD        'C2B3           < PUSH.
         BYTE        '40;107
         DZS         XSTATS
         WORD        'C2AC           < PULL.
         BYTE        '60;108
         DZS         XSTATS
         WORD        '8474           < ACTD.
         BYTE        '20;101
         DZS         XSTATS
         WORD        '1984;160       < FLD.
         DZS         XSTATS
         WORD        '1824;161       < FAD.
         DZS         XSTATS
         WORD        '19B0;162       < FMP.
         DZS         XSTATS
         WORD        '1896;163       < FDV.
         DZS         XSTATS
         WORD        '1A74;164       < FST.
         DZS         XSTATS
         WORD        '1A62;165       < FSB.
         DZS         XSTATS
         WORD        '986D           < FCMZ.
         BYTE        'D0;166
         DZS         XSTATS
         WORD        '9861           < FCAM.
         BYTE        '68;167
         DZS         XSTATS
         WORD        '99C5           < FNEG.
         BYTE        '38;168
         DZS         XSTATS
         WORD        '9822           < FABS.
         BYTE        '98;169
         DZS         XSTATS
         WORD        '1938;170       < FIX.
         DZS         XSTATS
         WORD        '1994;171       < FLT.
         DZS         XSTATS
         WORD        'B9F2           < NORM.
         BYTE        '68;172
         DZS         XSTATS
         WORD        '9861           < FCAZ.
         BYTE        'D0;173
         DZS         XSTATS
         WORD        '998F           < FLOAT : REDUIT A FLOA.
         BYTE        '08;174
         DZS         XSTATS
         WORD        '4D91;175       < SLQ.
         DZS         XSTATS
         WORD        '4CD1;176       < SFQ.
         DZS         XSTATS
         WORD        'CEB0           < SUPQ.
         BYTE        '88;177
         DZS         XSTATS
         WORD        'A5D3           < INSQ.
         BYTE        '88;178
         DZS         XSTATS
         WORD        'C854           < RBTM.
         BYTE        '68;179
         DZS         XSTATS
         WORD        'CC54           < SBTM.
         BYTE        '68;180
         DZS         XSTATS
         WORD        '9242           < DRBM.
         BYTE        '68;181
         DZS         XSTATS
         WORD        'C864           < RCDA.
         BYTE        '08;182
         DZS         XSTATS
         WORD        'DC64           < WCDA.
         BYTE        '08;183
         DZS         XSTATS
         WORD        'C893           < RDSI.
         BYTE        '48;121
         DZS         XSTATS
         WORD        '3032;122       < LAR.
         DZS         XSTATS
         WORD        'C88F           < RDOE.
         BYTE        '28;123
         DZS         XSTATS
         WORD        'B6D4           < MVTM.
         BYTE        '68;124
         DZS         XSTATS
         WORD        'CE81           < STAR.
         BYTE        '90;125
         DZS         XSTATS
         WORD        '5DE5;126       < WOE.
         DZS         XSTATS
         WORD        'B6D4           < MVTS.
         BYTE        '98;127
         DZS         XSTATS
         WORD        '48A6;140       < REF (EX. EXT='1714).
         DZS         XSTATS
         WORD        '10A6;141       < DEF (EX. ENT='15D4).
         DZS         XSTATS
         WORD        '2609;120       < IPI.
         DZS         XSTATS
         WORD        'C888           < RDHV.
         BYTE        'B0;119
         DZS         XSTATS
         WORD        '4E74;117       < SST.
         DZS         XSTATS
         WORD        '4A74;118       < RST.
         DZS         XSTATS
         WORD        '1134;115       < DIT.
         DZS         XSTATS
         WORD        '1534;116       < EIT.
         DZS         XSTATS
         WORD        '4A76;110       < RSV.
         DZS         XSTATS
         WORD        'C9ED           < ROMB.
         BYTE        '10;111
         DZS         XSTATS
         WORD        '1050;112       < DBP.
         DZS         XSTATS
         WORD        '4C50;113       < SBP.
         DZS         XSTATS
         WORD        '4850;114       < RBP.
         DZS         XSTATS
         WORD        '1054;99        < DBT.
         DZS         XSTATS
         WORD        'CE85           < STEP.
         BYTE        '80;100
         DZS         XSTATS
         WORD        'C6A9           < QUIT.
         BYTE        'A0;102
         DZS         XSTATS
         WORD        '4C79;104       < SCY.
         DZS         XSTATS
         WORD        '4299;103       < PTY.
         DZS         XSTATS
         WORD        '29D6;73        < JNV.
         DZS         XSTATS
         WORD        'A9C3           < JNCV.
         BYTE        'B0;74
         DZS         XSTATS
         WORD        '2AC0;77        < JV.
         DZS         XSTATS
         WORD        '2876;78        < JCV.
         DZS         XSTATS
         WORD        'CC32           < SARS.
         BYTE        '98;52
         DZS         XSTATS
         WORD        'CC32           < SARD.
         BYTE        '20;53
         DZS         XSTATS
         WORD        '39F0;36        < NOP.
         DZS         XSTATS
         WORD        '1274;143       < DST.
         DZS         XSTATS
         WORD        '1674;144       < EST.
         DZS         XSTATS
         WORD        '3893;145       < NDS.
         DZS         XSTATS
         WORD        '2490;157       < IDP.
         DZS         XSTATS
         WORD        '1480;186       < ED.
         DZS         XSTATS
         IF          ORDI-"S",XWOR%,,XWOR%
         WORD        '1714;140       < EXT.
         DZS         XSTATS
         WORD        '15D4;141       < ENT.
         DZS         XSTATS
XWOR%:   VAL         0
         WORD        '15C4;147       < END.
         DZS         XSTATS
         WORD        '0C69;148       < CCI.
         DZS         XSTATS
         IF          ORDI-"S",XWOR%,,XWOR%
         WORD        '9034           < DATE.
         BYTE        '28;188
         DZS         XSTATS
         WORD        '524E;189       < TRN.
         DZS         XSTATS
         WORD        'BA92           < NTRN.
         BYTE        '70;190
         DZS         XSTATS
         IF          XXXSGN-0,XWOR%7,,XWOR%7
         WORD        '08A4;191       < BED.
         WORD        '0A12;192       < BPR.
XWOR%7:  VAL         0
XWOR%:   VAL         0
FINTAB:  EQU         $
BASC:    EQU         $
         WORD        '0101           < ENTREE CARTE SUR NVP=1
         WORD        '0101           < ENTREE CARTE SUR NVP=1
TACAT:   BYTE        32;4;1;3;14;8;2;1;1;3;3;7
         BYTE        1;8;2;2;1;1;2;5;2;25;5;1
         BYTE        1;1;1;1;2;1;1;1;1;1
         BYTE        4;1;2
TALON:   BYTE        0;'21;3;'21;'22;5;6;5;6;5
         BYTE        6;'21;'C4;'87;'21;'31;'A7;'31;'62;3;'22;3
         BYTE        '2E;'90;'B0;'CB;'12;'E;3;'EC;'67;'E7
         BYTE        7;'61;'47;'48;3
TALIG:   WORD        'A202;'1200;'8A01;'0200
         WORD        'C200;'4201;'4200;'8200
         WORD        '8202;'1201;'0A00;'2201
         WORD        '1202;'0200;'0602;'0200
         WORD        '1204;'4204;'0600
TABINI:  WORD        '8000;0
         WORD        6;0;"OF";'C600
TABINF:  WORD        -256;-128;0
TABSUP:  WORD        7;31;127;255
TACLE:   WORD        '3030;'0AC9;'0002;'0853
         WORD        '001C;'005D;'8036;'0047
TABRG:   WORD        '2041;'4258;'5943;'4C57
         WORD        '4B00
TATYP:   WORD        EXPA
         WORD        REGIS
         WORD        BASE
         WORD        EXPT
         WORD        INDEX
         WORD        NOMSEC
TABEXT:  WORD        REFMEM
         WORD        JUMP
         WORD        WORD
         WORD        EQU
         WORD        EXT
         WORD        ENT
         WORD        USE
         WORD        END
TABLG:   BYTE        0;64;61;59;58;48;47;46;45;44
         BYTE        40;35;34;33;32;27;1
TABTY:   BYTE        0;2;0;6;4;2;7;2;3;2
         BYTE        7;1;7;3;7;5;5
TARUP:   WORD        FINPH
         WORD        CHAIN
         WORD        CSIGNE
         WORD        NEWCAR
         WORD        DECIM
         WORD        SUILT
         WORD        EMACQ
         WORD        EMACQ
         WORD        FSUILT
         WORD        EMACQ
         WORD        FSUILT
         WORD        FSUIL1
         WORD        SUILT1
         WORD        SUILT
         WORD        ETIQ
         WORD        EMACQ
         WORD        FNBRE
         WORD        EMACQ
         WORD        FNBRE
         WORD        FNBR1
         WORD        CNBRE
         WORD        CNBR1
         WORD        EMACQ
         WORD        EMACQ
         WORD        EXCLAM
         WORD        FCHAIN
TABDIR:  EQU         $-1
         WORD        COMMON
         WORD        LOCAL
         WORD        PROG
         WORD        TABLE
         WORD        DSEC
         WORD        EXT1
         WORD        ENT1
         WORD        USE1
         WORD        DST
         WORD        EST
         WORD        NDS
         WORD        EOT
         WORD        END1
         WORD        PSTS
         WORD        PSTH
         WORD        0               < LIMITE DIRECTIVES ETIQUETABLES.
         WORD        EQU1
         WORD        VAL
         WORD        DZS
         WORD        BYTE
         WORD        DO
         WORD        WORD1
         WORD        IDP
         WORD        ASCI
ZONBAS:  EQU         $-1
         DZS         9
ZONBA1:  EQU         $-1
         DZS         6
         PAGE
<
<
<        S Y M B O L E S   A B S O L U S  :
<
<
LGLAN:   VAL         FINLAN-DEBLAN   < LONGUEUR ZONE A INITIALISER
                                     < PAR CARTE.
LCALEX:  VAL         FINCAL-DEBCAL
LMACQ:   VAL         FINMAC-DEBMAC
LTABCO:  VAL         FINTAB-TABCO    < LONGUEUR TABLE DES CODES
                                     < OPERATION.
NTABCO:  EQU         ZERO-LTABCO
LTABTY:  VAL         16
LSAV:    VAL         FINSAV-DEBSAV   < LONGUEUR ZONE SAUVEGARDEE.
         PAGE
         PROG
         IF          ORDI-"T",XWOR%,,XWOR%
         SVC         0               < CODE DU 'SVC'.
LISTIN:  VAL         '0000000@@@@
         $EQU        $-1             < ANNULATION DU 'SVC'.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         BSR         ASISVC          < CODE DE LA SIMULATION 'SVC'.
LISTIN:  VAL         '0000000@@@@
         $EQU        $-1
XWOR%:   VAL         0
<
<
<        E X T E N S I O N S   O P T I O N   C D A  :
<
<
EXTEND:  EQU         $
         PLR         A
         PSR         A
         CPI         184             < EST-CE 'LST' OU 'NLS' ???
         JGE         EX2             < OUI, ELLES PEUVENT SE SITUER
                                     < PARTOUT DANS UN PROGRAMME...
         CPZ         SITUAT          < OU EST-ON ???
         JL          EX2             < DANS UNE SECTION 'PROG', OK...
         LAI         13              < PAS 'PROG', ERREUR...
EX3:     EQU         $
         ADRI        -1,K            < RATTRAPAGE DE LA PILE.
EX4:     EQU         $
         BR          MERR            < ABORT ERREUR.
<
< CAS OU L'ON EST DANS UNE SECTION 'PROG' :
<
EX2:     EQU         $
         CPZ         NETIQ           < Y-A-T'IL UNE ETIQUETTE ???
         LAI         23              < ERREUR A PRIORI...
         JNE         EX3             < ET OUI, ON L'INTERDIT, CAR
                                     < SA VALEUR NE PEUT ETRE CORRECTE-
                                     < MENT EVALUEE QU'AU PRIX DE
                                     < COMPLICATIONS TERRIBLES !!!
         LX          NACQ
         LBY         &AZACQ          < ACCES AU CARACTERE COURANT.
         PLR         Y               < Y=CODE DE L'INSTRUCTION DEMANDEE.
         CPI         '0D
         JE          EX5             < OK, FIN DE PHRASE.
         CPI         "<"
         JE          EX5             < OK, FIN DE PHRASE.
<
< CAS OU LA ZONE ARGUMENT EST LA :
<
         LR          Y,A
         CPI         179             < VALIDATION FONCTION.
         JE          EX6             < OK, RBTM.
         CPI         180             < VALIDATION FONCTION.
         JE          EX6             < OK, SBTM.
EX8:     EQU         $
         LAI         1
         JMP         EX4             < VERS L'ABORT...
<
< TRAITEMENT DE RBTM/SBTM :
<
EX6:     EQU         $
         PSR         Y               < SAVE LE CODE-OP.
         BSR         CALEX           < EVALUATION DES ARGUMENTS.
         PLR         Y               < RESTAURE LE CODE-OP.
         CPZ         SIGMA
         JNE         EX8             < ERREUR, ARGUMENT TRANSLATABLE.
EX7:     EQU         $
         LA          SOM
         JAL         EX8             < ERREUR, ARGUMENT<0.
         LX          NACQ
         LBY         &AZACQ          < ACCES AU CARACTERE COURANT.
         CPI         '0D
         JE          EX9             < FIN DE PHRASE.
         CPI         "<"
         JE          EX9             < FIN DE PHRASE.
         CPI         "X"
         JNE         EX8             < ERREUR, ON N'A PAS RECONNU 'X'.
         ADRI        -1,X
         LBY         &AZACQ          < A=CARACTERE PRECEDANT LE "X".
         CPI         ","
         JNE         EX8             < ERREUR, CE N'EST PAS ",X".
<
< CAS DE L'INDEXATION SUR RBTM/SBTM :
<
         LA          SOM
         SBT         0               < BIT D'INDEX.
         STA         SOM
         JMP         EX9             < VERS L'EDITION...
<
< CAS DES AUTRES INSTRUCTIONS :
<
EX5:     EQU         $
         STZ         SOM             < MOT2=0 A PRIORI.
         LR          Y,A
         CPI         184             < EST-CE 'LST' OU 'NLS' ???
         JE          EX20            < 'LST'.
         CPI         185
         JE          EX50            < 'NLS'.
         JG          EX300           < 'ED'.
         CPI         183
         JNE         EX9
         IC          SOM             < MOT2=1 POUR WCDA.
<
< EDITION BINAIRE ET LISTING :
<
EX9:     EQU         $
         LR          Y,A
         ADRI        -127,A
         ADRI        -56,A
         JAE         EX10            < CAS DE WCDA.
         ADRI        1,A
EX10:    EQU         $
         NGR         A,A
         SWBR        A,A
         ORI         '3F             < INSERTION DU CODE-OPERATION.
         SWBR        A,B             < B=MOT1 DU BINAIRE.
         IC          PAS             < PROGRESSION COMPTEUR ORDINAL.
         LAI         '24             < CHARGER SANS TRANSLATER.
         BSR         SPLIST          < BINAIRE ET LISTING.
         LB          SOM             < B=MOT2 DU BINAIRE.
         IC          PAS             < PROGRESSION COMPTEUR ORDINAL.
         IC          DEBRES+2        < IL LE FAUT BIEN, PUISQUE SANS
                                     < LUI CELA NE MARCHE PAS !!!
         LAI         '24             < CHARGER SANS TRANSLATER.
         BSR         SPLIST          < BINAIRE ET LISTING.
         BR          ADEP            < VERS L'INSTRUCTION SUIVANTE.
<
<
<        O P T I O N   ' L S T '
<           L I S T I N G  :
<
<
EX20:    EQU         $
         DC          KLIST
         JG          EX51            < KLIST>0 : RIEN A FAIRE...
         JE          EX52            < KLIST PASSE PAR 0 : IL FAUT RETABLIR
                                     < LA SORTIE DU LISTING...
         STZ         KLIST           < KLIST=0 SI DEVIENT NEGATIF...
         JMP         EX51            < PUIS RIEN A FAIRE...
<
< RETABLISSEMENT DU LISTING :
<
EX52:    EQU         $
         LA          IOCB4
         EORI        '000D           < MISE DE '02 A LA PLACE DE '0F.
         STA         IOCB4
         LA          IOCB3
         EORI        '000D           < MISE DE '02 A LA PLACE DE '0F.
         STA         IOCB3
EX51:    EQU         $
         BR          ADEP            < VERS L'INSTRUCTION SUIVANTE...
<
<
<        O P T I O N   ' N L S '
<        P A S   D E   L I S T I N G  :
<
<
EX50:    EQU         $
         IC          KLIST           < KLIST>0.
         LA          IOCB4
         ORI         '000F           < MISE DE '0F A LA PLACE DE '02.
         STA         IOCB4
         LA          IOCB3
         ORI         '000F           < MISE DE '0F A LA PLACE DE '02.
         STA         IOCB3
         JMP         EX51            < VERS LA SORTIE...
<
<
<        A P P E L   D E   ' E D I T S '  :
<
<
EX300:   EQU         $
BSIML:   VAL         1               < ADRESSE DU MOT TRANSMETTANT L'ADRESSE
                                     < DU BUFFER DE LECTURE.
BSIME:   VAL         2               < ADRESSE DU MOT TRANSMETTANT L'ADRESSE
                                     < DU BUFFER D'ECRITURE.
ALSIM:   VAL         0               < ADRESSE DU MOT TRANSMETTANT LA
                                     < LONGUEUR DU BUFFER SI 'EE', ET 0 SI 'ED'.
         EORR        W,W             < W BASE LE 'ZERO' DE 'ASSYS'.
         CPI         187             < 'ED' OU 'EE' ???
         JL          EX300X          < 'ED'...
         IF          ORDI-"S",XWOR%,,XWOR%
         CPI         188
         JGE         EX301X          < 'DATE' OU BIEN 'TRN'/'NTRN'...
XWOR%:   VAL         0
<
< PREPARATION DE 'EE' :
<
         LBY         IOCB
         ANDI        '0F
NVPF::   VAL         '08             < PREMIER 'NVP' DU 'SGF' UTILISE PAR
                                     < L'EDITEUR DE TEXTES 'EDITS'.
         CPI         NVPF            < NVPO OU 3 PREMIERS 'EOT' ???
         JGE         EX4X            < NON AU DELA, ERREUR !!!
         LAI         2*YNZACQ
         STA         ALSIM,W         < LONGUEUR OCTET DES BUFFERS (#0).
         LB          ABSIML-ZERO,W
         STB         BSIML,W         < ADRESSE DU BUFFER DE LECTURE.
         LA          ABSIME-ZERO,W
         STA         BSIME,W         < ADRESSE DU BUFFER D'ECRITURE.
         LA          AZACQ
         RBT         0
         ADRI        LXZACQ/2,A      < A=ADRESSE CARTE DYNAMIQUE.
         LXI         YNZACQ
         MOVE                        < MOVE CARTE DYNAMIQUE VERS LE
                                     < BUFFER DE LECTURE.
         JMP         EX320
<
< PREPARATION DE 'ED' :
<
EX300X:  EQU         $
         STZ         ALSIM,W         < POUR DISCRMINER 'ED' DE 'EE'.
         ADRI        1,W             < ET (W)#0 POUR 'ED'.
         LBY         IOCB
         CPI         1               < QUELLE EST L'UNITE D'ENTREE ???
         JE          EX320           < 'IN' C'EST BON...
EX4X:    EQU         $
         LAI         25              < NON, IL Y A DONC 'EOT' EN COURS,
         JMP         EX4             < ERREUR....
<
< TRONC COMMUN 'ED'/'EE' :
<
EX320:   EQU         $
         PSR         A,W
         LAD         IOCB4
         WORD        LISTIN          < EDITION DE 'ED'.
         BSR         PAGIN           < ET PAGINATION...
         PSR         C
         LA          COM1
         LR          A,C             < CHANGEMENT DE BASE C.
         USE         C,COMM1
         IF          XXXSGN-0,XWOR%7,,XWOR%7
         CPZ         LOADED          < 'ED'/'EE' SONT-ILS AUTORISES ???
         JE          EX301D          < NON, INHIBES...
XWOR%7:  VAL         0
         LR          K,A
         STA         SAVEK           < SAVE LE REGISTRE K D'APPEL.
         LAI         2
         LR          A,K             < UTILISATION D'UNE PILE BASSE
                                     < RESISTANT AUX APPELS D'OVERLAY.
         LA          ARUN2
         STA         &ARUN           < CHANGEMENT DE L'ENTRY POINT.
         LAD         NOMAS
         LBI         DITEM-ZERO
         LXI         3
         MOVE                        < MISE EN PLACE DE 'ASSYS'.
         LBY         IDESC
         STBY        &ANOMA          < GENERATION DU NOM 'ASSY'.
         LAD         DELASS
         SVC         0               < DELETE A PRIORI 'ASSY'.
         LAD         STASS
         SVC         0               < GENERATION DE 'ASSY'.
         LAD         NOMED
         LBI         DITEM-ZERO
         LXI         6/2
         MOVE                        < MISE EN PLACE DU NOM 'EDITS'.

         LA          &AARSR          < ON VA CHERCHER UN 'RSR', AFIN DE
         STA         &AGO            < SUPPRIMER LE RETOUR AU CCI
                                     < IMPLEMENTE PAR !CALL...
         LAI         PSYMB-ZERO
         PSR         A               < EMPILEMENT DE L'ADRESSE DE
                                     < DEBUT DE 'EDITS' AFIN DE FAIRE
                                     < LE 'RSR' DE BRANCHEMENT.
         LAD         LOADED          < A=@DEMANDE DE CHARGEMENT 'EDITS'.
         BR          ALOAD           < CHARGEMENT DE 'EDITS'.
<
<
<        R E T O U R   D E   ' E D I T S '  :
<
<
         WORD        COMM1
EX310:   EQU         $
         LRP         C
         LA          -1,C
         LR          A,C             < REINITIALISATION DE C.
         USE         C,COMM1
         LA          ARUN1           < RESTAURE L'ENTRY-POINT
         STA         &ARUN           < DE 'ASSYS'...
         LA          SAVEK
         LR          A,K             < RESTAURATION REGISTRE K.
         LAD         DELASS
         SVC         0               < DELETE DE 'ASSYS'.
         IF          XXXSGN-0,XWOR%7,,XWOR%7
EX301D:  EQU         $               < CAS 'ED'/'EE' INHIBES...
XWOR%7:  VAL         0
         PLR         C               < RESTAURE BASE C DE 'ASSYS'.
         USE         C
         PLR         B,W
         CPZR        W               < 'ED' OU 'EE' ???
         JNE         EX310X          < 'ED'.
         LA          ABSIME-ZERO,W   < ADRESSE DU BUFFER D'ECRITURE.
         LXI         YNZACQ
         MOVE                        < MOVE BUFFER D'ECRITURE VERS LES
                                     < CARTES DYNAMIQUES.
EX310X:  EQU         $
         BR          ADEP            < VERS L'INSTRUCTION SUIVANTE.
         IF          ORDI-"S",XWOR%,,XWOR%
<
<
<        D A T E  :
<
<
MDATE:   ASCI        "!DAT"
         BYTE        "E";'04
DMDATE:  WORD        '0002           < DEMANDE AU SYSTEME.
         WORD        MDATE-ZERO*2
         WORD        80
EX301X:  EQU         $
         CPI         189
         JE          EX301Y          < 'TRN'.
         CPI         190
         JGE         EX301Z          < 'NTRN'.
         LRM         A
         WORD        DMDATE
         SVC         0               < ENVOI DE !DATE...
         BR          ADEP            < VERS L'INSTRUCTION SUIVANTE...
<
<
<        ' T R N '  :  T E S T   R E S T E # 0  :
<        ' N T R N '  :  P A S   D E   T E S T  ...
<
<
EX301Y:  EQU         $
         LRM         A,B             < 'TRN' :
         CPZR        B               < TEST DU RESTE,
         WORD        FEALEX          < 'GOTO' 'EEALEX' SI RESTE#0...
         JMP         EX301T
EX301Z:  EQU         $
         IF          XXXSGN-0,XWOR%7,,XWOR%7
         CPI         191             < 'BED' ???
         JGE         EX301A          < 'BED'...
XWOR%7:  VAL         0
         LRM         A,B             < 'NTRN' :
         STB         FLORES          < ON MEMORISE LE RESTE...
         NOP
EX301T:  EQU         $
         LR          K,X             < SAUVEGARDE DE 'K' DANS 'X',
         LRM         K
         WORD        INDYN-1         < ET ON INITIALISE 'K' SUR LA ZONE
                                     < D'INSTRUCTIONS DYNAMIQUES...
         PSR         A,B             < MISE EN PLACE DES 2 INSTRUCTIONS...
         LR          X,K             < RESTAURATION DE 'K',
         IF          XXXSGN-0,XWOR%7,,XWOR%7
EX301C:  EQU         $
XWOR%7:  VAL         0
         LAD         IOCB4
         WORD        LISTIN
         BSR         PAGIN           < EDITION ET PAGINATION DE TRN-NTRN...
         BR          ADEP            < ET VERS L'INSTRUCTION SUIVANTE...
         IF          XXXSGN-0,XWOR%7,,XWOR%7
<
<
<        ' B E D '  : A U T O R I S A T I O N / I N H I B I T I O N
<                    E N   B A S C U L E   D E   ' E D ' / ' E E '  :
<
<
EX301A:  EQU         $
         CPI         192             < 'BPR' ???
         JGE         EZ301D          < 'BPR'...
         PSR         C
         LA          COM1
         LR          A,C             < CHANGEMENT DE BASE 'C'...
         USE         C,COMM1
         LRM         A
         WORD        '8602
         CPZ         LOADED          < 'ED'/'EE' AUTORISES ???
         JE          EX301B          < NON, (A)='8602, ON LES RE-AUTORISE...
         LAI         0               < OUI, (A)=0, ON LES INHIBE...
EX301B:  EQU         $
         STA         LOADED          < ET MEMORISATION DE 'BED'...
         PLR         C               < ET RESTAURE 'C'...
         USE         C
         JMP         EX301C          < VERS LA SORTIE...
<
<
<        ' B P R '  :  A U T O R I S A T I O N / I N H I B I T I O N
<        D E S   A P P E L S   D E   P R O C E D U R E S   E N
<                    Z O N E   C O M M A N D E  :
<
<
EZ301D:  EQU         $
         LRM         A,B
         WORD        EOTIMP          < AUTORISATION,
         WORD        EOTINS          < INHIBITION.
         CP          RETER           < EST-CE AUTORISE ???
         JE          EZ301E          < OUI, ON L'INHIBE...
         STA         RETER           < NON, ON L'AUTORISE...
         JMP         EX301C          < ET ON SORT...
EZ301E:  EQU         $
         STB         RETER           < INHIBITION...
         JMP         EX301C          < ET ON SORT...
XWOR%7:  VAL         0
XWOR%:   VAL         0
         PAGE
<
<
<        I N S T R U C T I O N S   D Y N A M I Q U E S  :
<
<
<        FONCTION :
<                      CE MODULE TESTE LA COLONNE 9 DE
<                    CHAQUE CARTE; S'IL Y RENCONTRE '@',
<                    IL LE REMPLACE PAR UNE CHAINE DE CARAC-
<                    TERES CONTENANT L'INSTRUCTION DONT
<                    LE NUMERO (DONNE PAR LA TABLE 'TABCO')
<                    EST CONTENU EN ASCI DANS LES OCTETS
<                    0 ET 1 DE ZACQ1.
<
<
EX138:   EQU         $
         LXI         0+9
         LBY         &AZACQ          < ACCES COLONNE 9 DE LA CARTE.
         CPI         "@"             < INSTRUCTION DYNAMIQUE ???
         JNE         EX130           < NON, ON SORT...
<
< GENERATION D'UN NUMERO DE DIRECTIVE :
<
         LBI         0
         ADRI        -18-9+1,X       < DEPART SUR L'OCTET 1 DE ZACQ1.
         LYI         2               < DECODAGE DE 2 OCTETS.
EX131:   EQU         $
         LBY         &AZACQ          < OCTET 1, PUIS OCTET 0 DE ZACQ1.
         ADRI        -'30,A          < DECODAGE BINAIRE.
         CPI         9               < CHIFFRE OU LETTRE ???
         JLE         EX132           < CHIFFRE.
         ADRI        -'41+'39+1,A    < LETTRE.
EX132:   EQU         $
         SLRD        4               < CONCATENATION A (B).
         ADRI        -1,X            < PASSAGE A L'OCTET 0.
         ADRI        -1,Y            < DECOMPTAGE.
         CPZR        Y
         JG          EX131           < PASSAGE A L'OCTET 0.
         SWBR        B,A             < A=NUMERO DE DIRECTIVE DEMANDEE.
         LX          MTABCO
         LR          A,B             < SAUVEGARDE DU NUMERO DANS B...
<
< IDENTIFICATION DE LA DIRECTIVE :
<
EX133:   EQU         $
         LR          B,A             < RESTAURE LE NUMERO DE DIRECTIVE...
         LR          X,Y             < Y=SAVE X.
         ADRI        1,X             < X INDEXE LE NUMERO DE LA
                                     < DIRECTIVE COURANTE.
         EOR         &ATABCO         < DIRECTIVE DEMANDEE ???
         ANDI        '00FF           < ON NE CONSERVE QUE LE NUMERO...
         JAE         EX135           < OUI...
         IF          XSTATS,XWOR%,XWOR%,
         ADRI        XSTATS,X        < ON SAUTE LE COMPTEUR...
XWOR%:   VAL         0
         JIX         EX133           < NON, A LA SUIVANTE...
         JMP         EX130           < PAS TROUVEE : ON LAISSE '@'...
<
< GENERATION DYNAMIQUE DE L'NSTRUCTION :
<
EX135:   EQU         $
         LR          Y,X             < X=INDEX DIRECTIVE.
         LA          &ATABCO         < 1ER MOT,
         LBI         0               < 2EME MOT NUL A PRIORI...
         JAGE        EX136           < 1 SEUL MOT.
         ADRI        1,X             < 2 MOTS EN FAIT...
         LB          &ATABCO         < 2EME MOT...
         SLRD        16-5            < SUPPRESSION DES BITS 5-15 DE 'B'.
         SLLD        16-5
EX136:   EQU         $
         LXI         0+9             < INDEX DE GENERATION.
EX137:   EQU         $
         RBT         0               < ...
         JAE         EX407           < C'EST FINI...
         PSR         A
         SLRS        5+5             < ON ISOLE LE CARACTERE COURANT.
         SBT         1+8             < CONVERSION ASCI.
         STBY        &AZACQ          < GENERATION...
         ADRI        1,X             < INDEX DU SUIVANT.
         PLR         A
         SLLD        5               < PASSAGE AU CARACTERE SUIVANT.
         JMP         EX137           < AU SUIVANT SI EXISTE...
EX407:   EQU         $
         LYI         "@"             < Y="@" CAR UNE INSTRUCTION DYNAMI-
                                     < QUE A ETE GENEREE...
EX130:   EQU         $
<
<
<        C A R T E S   D Y N A M I Q U E S  :
<
<
<        FONCTION :
<                      NUMEROTANT LES COLONNES 0,1,...
<                    SI ON PLACE UN CARACTERE 'A-ROND'
<                    EN COLONNE 8 ET PAS EN COLONNE 7,
<                    ALORS LA CARTE COURANTE EST RECOPIEE :
<                    ZACQ --> ZZACQ, DE PLUS
<                    SI LA COLONNE 7 CONTIENT UN "#",
<                    ALORS ON FAIT DE PLUS UN APPEL
<                    IMPLICITE DE FICHIER PAR 'EOT',
<                    LE NOM DU FICHIER ENTRE "#"
<                    DEVANT SE TROUVER AU DELA DE LA
<                    COLONNE 38 (NUMEROTEES 0,1,2...),
<                    SOIT DERRIERE LE">" DES COMMENTAIRES...
<                    PAR CONTRE SI LES 2 COLONNES 7 ET 8
<                    CONTIENNENT LE 'A-ROND', ALORS
<                    C'EST LE MOUVEMENT INVERSE QUI A
<                    LIEU.
<                      ON UTILISERA CECI EN CONJONCTION
<                    AVEC L'OPERATEUR '='.
<
<
         LXI         8
         LBY         &AZACQ          < TEST DE LA COLONNE 8.
         CPI         "@"
         JNE         EX139           < PAS DE CARTES DYNAMIQUES...
         LAI         " "
         STBY        &AZACQ          < EFFACEMENT DU "@" POUR SAUVEGARDE.
         LXI         7
         LBY         &AZACQ          < TEST DE LA COLONNE 7.
         CPI         "@"
         LA          AZACQ
         RBT         0               < A=ADRESSE BUFFER CARTE A ASSEMBLER.
         LR          A,B
         LXI         LXZACQ-2/2-1    < X=NOMBRE DE MOTS A DEPLACER.
         JE          EX331           < GENERATION D'UNE CARTE...
<
< SAUVEGARDE D'UNE CARTE : ZACQ --> ZZACQ
<
         ADRI        LXZACQ/2,B      < B=ADRESSE DU RECEPTEUR.
         MOVE                        < SAUVEGARDE...
         LXI         LXZACQ          < INDEX 1ER CARACTERE DE ZZACQ.
EX333:   EQU         $
         LBY         &AZACQ
         CPI         " "
         JGE         EX332           < OK, C'EST UN CARACTERE...
         LAI         " "             < ON REMPLACE TOUS LES
         STBY        &AZACQ          < 'CTRL' PAR DES 'SPACE'...
                                     < ET EN PARTICULIER R/C LF...
EX332:   EQU         $
         ADRI        1,X             < AU SUIVANT,
         LR          X,A
         CPI         LXZACQ+80       < S'IL EXISTE...
         JL          EX333           < ET OUI...
         LXI         LXZACQ+7
         LBY         &AZACQ          < ACCES A LA COLONNE 7 DE 'ZZACQ'.
         CPI         "#"             < EST-CE UN APPEL IMPLICITE ???
         JNE         EX710           < NON, UN SIMPLE MOUVEMENT...
<
< PREPARATION D'UN APPEL IMPLICITE DE FICHIER :
<
         LAI         " "
         STBY        &AZACQ          < ON ECRASE LE "#"...
         LXI         37+1
         STX         NACQ            < ON SE PLACE AU NIVEAU DE LA ZONE
                                     < DES COMMENTAIRES...
         LAI         ZZACQ-ZACQQ-1*2 < ON MET A JOUR BRUTALEMENT LA LONGUEUR
         STA         IOCB4+2         < D'EDITION DE LA CARTE, MEME SI ELLE
                                     < EST EST ENTREE PAR LE TERMINAL, ET TER-
                                     < MINEE PAR UN 'R/C'.
<
<
<        N O T A   I M P O R T A N T  :
<                      LA ZONE 'VALEUR HEXADECIMALE' DU LISTING
<                    N'EST PAS REINITIALISEE LORS D'UN "EOT"
<                    IMPLICITE ; CELLE-CI PEUT DONC ETRE RECUPEREE
<                    DANS LE FICHIER APPELE, A CONDITION QUE CELUI-CI
<                    SOIT APPELE PAR UN "EOT" IMPLICITE CONTENU
<                    DANS UNE CARTE COMMENTAIRE UNIQUEMENT...
<
<
         BR          AEOT            < ET ON SIMULE UN 'EOT'...
<
< EDITION DES CARTES MISES EN DYNAMIQUES :
<
EX710:   EQU         $
         LB          IOCB4+1         < SAVE L'ADRESSE DU BUFFER D'EDITION, CAR
         LAI         ZZACQ-ZERO*2    < ON VE VA EDITER QUE LA CARTE
         STA         IOCB4+1         < SEULE...
         LAD         IOCB4
         WORD        LISTIN          < EDITION DE LA CARTE SAUVEGARDEE.
         STB         IOCB4+1         < RESTAURE L'ADRESSE DU BUFFER.
         BSR         SORCLF          < ???
         BSR         PAGIN           < PAGINATION.
         BR          ADEP            < ET C'EST TOUT, ON NE L'ASSEMBLE PAS.
<
< GENERATION D'UNE CARTE : ZACQ <-- ZZACQ
<
EX331:   EQU         $
         ADRI        LXZACQ/2,A      < A=ADRESSE DE L'EMETTEUR.
         MOVE                        < GENERATION...
         LYI         "@"             < Y="@" CAR UNE INSTRUCTION DYNA-
                                     < MIQUE A ETE GENEREE.
EX330:   EQU         $
         JMP         FX30            < VERS UN TEST DES SYMBOLES DYNAMIQUES...
EX138X:  JMP         EX138           < RELAI VERS 'EX138'...
<
<
<        S Y M B O L E S   D Y N A M I Q U E S  :
<
<
<        FONCTION DU CARACTERE "@" :
<                      CE MODULE TESTE LES COLONNES
<                    2 3 4 5 23 24 25 26 DE CHAQUE
<                    CARTE; LORSQUE DANS L'UNE DE CES
<                    POSITIONS IL RENCONTRE UN '@',
<                    IL LE REMPLACE PAR LE CARACTERE
<                    DE RANG 0 1 2 3 0 1 2 3 (RESPECTI-
<                    VEMENT) DE ZACQ1; EN EFFET LES
<                    OCTETS 0 1 2 3 DE ZACQ1 CONTIENNENT
<                    LE CODE OU LA VALEUR BINAIRE GENEREE
<                    A LA LIGNE PRECEDENTE.
<                      DE PLUS, IL PERMET DE RECUPERER
<                    LA NATURE TRANSLATABLE ('$'), OU
<                    REFERENCE EN AVANT ('*'), AINSI QUE
<                    LE BINAIRE GENERE A LA LIGNE PRECEDENTE
<                    (ATTENTION AUX COMMENTAIRES TROP
<                    LONGS !!!).
<
<
<                    2 ZACQ <-- 0 ZACQ1,
<                    3          1
<                    4          2
<                    5          3
<                    23         0
<                    24         1
<                    25         2
<                    26         3
<                    27         4
<                    28         5
<                    29         6
<                    30         7
<                    31         8
<                    32         9
         IF          ORDI-"S",XWOR%,,XWOR%
<                    33         CARACTERE "0" SI KLIST=0 (OPTION 'LST')
<                    34              CARACTERE 'ORDI' ("S" OU "T").
XWOR%:   VAL         0
<
<
<        EXEMPLE :
32K, ERREUR !!!
         BR          MERR
C35C:    EQU         $
         LBY         CLE
         ANDI        'F
C36:     EQU         $
         LR          A,X
C37:     EQU         $
         LA          BINARY
         SBT         0,X
C38:     EQU         $
         STA         BINARY
TESTF:   EQU         $               < POINT DE RETOUR.
         IC          NELT
         ADRI        -2,K            < ELIMINATION SAUVEGARDES
         LA          ZTR
         JMP         NEWELT
BASE1:   EQU         $               < BASE.
         ADRI        -4,A
         JALE        NOCONF
         CPI         4
         JE          NOCONF
         SCRS        2
C39:     EQU         $
         OR          BINARY
         JMP         C38
REGIS1:  EQU         $               < REGISTRE.
         LBY         BINARY
         CPI         '1A
         JE          INSPSR          < 'PSR'.
         CPI         '1B
         JE          INSPLR          < 'PLR'.
         CPI         '1D
         JE          INSPSR          < LRM TRAITE COMME UN PSR.
         LBY         CLE
         SLRS        4
         ADRI        -1,X
         XR          A,X             < A=REGISTRE , B=NBRE DE DECALGES.
         CPZ         NREG
         JG          C40
         SLLS        0,X
C40:     EQU         $
         IC          NREG
         JMP         C39
INSPSR:  EQU         $               < INSTRUCTION 'PSR'.
         ADRI        7,X
         JMP         C37
INSPLR:  EQU         $               < INSTRUCTION 'PLR'.
         LAI         16
         SBR         X,A
         JMP         C36
NOCONF:  EQU         $               < NON CONFORMITE.
         BSR         SUSY
         PLR         A,B
         STA         CARLU
         STB         NACQ
         LA          ZTR
         TBT         13
         JC          EVENT           < CAS 'PSR'-'PLR','EXT'-'ENT'.
         LX          NELT
         JDX         C42             < AUCUNE AUTRE POSSIBILITE.
         TBT         15,X
         JNC         C42             < AUCUNE AUTRE POSSIBILITE.
         IC          NLIG
         JMP         C31
EVENT:   EQU         $
         CPZ         LIST2
         JE          C41
         CPZ         VALDIR
         JE          C41
         BR          ASORLI          < 'EXT'-'ENT' AU SECOND PASSAGE.
C41:     EQU         $
         CPZ         NELT
         JNE         C30
C42:     EQU         $
         LAI         1               < ERREUR AU 1ER ELEMENT
         BR          MERR
RTESTF:  JMP         TESTF           < RELAI VERS TESTF
EXPA:    EQU         $               < EXPRESSION ABSOLUE.
         BSR         CALEX
         JANE        NOCONF
         LBI         -1              < MASQUE.
         LA          VALDIR
         CPI         16
         JE          DIRIF           < DIRECITIVE 'IF'.
         LA          CLE
         CPI         2
         JE          RANGT           < AUCUNE LIMITATION.
         SLRD        5
         ANDI        3
         LR          A,X
         LA          SOM
         SB          &ATBINF
         JAGE        C43
EREXPA:  EQU         $               < VALEUR HORS-LIMITES.
         LAI         7
         BR          MERR
C43:     EQU         $
         SLLD        2
         ANDI        3
         LR          A,X
         LA          &ATBSUP
         SB          SOM
         JAL         EREXPA
         LBI         'FF
         LA          NLIG
         CPI         7
         JNE         RANGT
         SBT         18              < OPERANDE IMMEDIAT 9 BITS.
RANGT:   EQU         $
         LA          SOM
         ANDR        B,A
C44:     EQU         $
         CPZ         INACTD          < EST-CE UN ACTD ???
         JE          C39             < NON.
         CPI         15              < OUI, L'ARGUMENT DOIT ETRE DANS (0,15)...
         JG          EREXPA
         SLLS        4               < CADRAGE SUIVANT '1EX5...
         JMP         C39
DIRIF:   EQU         $               < DIRECTIVE 'IF'.
         LAD         IOCB4
         WORD        LISTIN          < EDITION DE LA CARTE 'IF'.
         BSR         PAGIN
         CPZ         SOM
         JL          AVANTI
         JE          C45
         IC          SIGNIF
C45:     EQU         $
         IC          SIGNIF
AVANTI:  EQU         $               < SIGNIF=0(<0),1(=0),2(>0).
         LA          CARLU
         CPI         '2C             < TEST ','.
         JNE         C42             < ERREUR DE SYNTAXE.
         BSR         MACQ
         DC          SIGNIF
         JGE         AVANTI
         JANE        C47
         LXI         3               < SYMBO1=SYMBOLE A RECHERCHER.
C46:     EQU         $
         LB          &ASYMB
         STB         &ASYMB1
         JDX         C46
C47:     EQU         $
         BR          ADEP
EXPT:    EQU         $               < EXPRESSION TRANSLATBLE.
         BSR         CALEX
         LA          VALDIR
         ADRI        -22,A
         CPZ         SIGMA
         JAE         C48             < CAS 'WORD'.
         JL          NOCONF
C48:     EQU         $
         JE          NOCONF
         LA          CLE
         ANDI        7
         LR          A,X
         CPZ         NIV
         BR          &AIGET
END:     EQU         $               < DIRECTIVE 'END'.
         JNE         C50
         LA          COMDE
         TBT         12
         JC          RTESTF          < SOM=ADRESSE DE LANCEMENT
C49:     EQU         $
         LAI         6               < SYMBOLE N'APPARTIENT PAS A LA
         BR          MERR            < SECTION 'PROG'.
USE:     EQU         $
         JE          C51
C50:     EQU         $
         LAI         5               < EXPRESSION NON DEFINIE.
         BR          MERR
C51:     EQU         $
         LA          COMDE
         TBT         12
         JC          C49             < SYMBOLE D'UNE SECTION 'PROG'.
         CPZ         SITUAT
         JL          C52
         LAI         13              < ON N'EST PAS DANS UNE
         BR          MERR            < SECTION 'PROG'.
C52:     EQU         $
         LA          NSEC
         JAE         C57             < 'OFF'.
         LXI         -3
CEPACA:  EQU         $
         ADRI        3,X
         CP          &ADSECT
         JNE         CEPACA
         ADRI        1,X
         LA          &ADSECT
         LB          SOM
         ADRI        -128,B
         CPR         A,B
         JLE         C55
         LR          B,A
C55:     EQU         $
         STA         MOTINF
         ADRI        1,X
         LA          &ADSECT
         LB          SOM
         LYI         128
         ADR         Y,B
         CPR         A,B
         JGE         C56
         LR          B,A
C56:     EQU         $
         STA         MOTSUP
C57:     EQU         $
         BR          ATESTF
REFMEM:  EQU         $               < REFERENCE MEMOIRE NON DEFINIE.
         JNE         C50
         LXI         3
C58:     EQU         $
         LA          NSEC
         CP          &SECBAS
         JNE         APREF
         LA          SOM
         CP          &LIMINF
         JL          APREF
         CP          &LIMSUP
         JL          C60
APREF:   EQU         $
         JDX         C58
C59:     EQU         $
         LAI         11              < ACCES IMPOSSIBLE.
         BR          MERR
C60:     EQU         $
         SB          &VALBAS
         ANDI        'FF
         SLLS        2               < GENERATION INDICATION DE BASE.
         LR          X,B
         SCRD        2
         JMP         C44
JUMP:    EQU         $               < SAUT CONDITIONNEL.
         JNE         PLUTAR
         LA          NSEC
         SB          SECOUR
         JANE        C59             < SYMBOLE N'APPARTIENT PAS
                                     < A SECOUR.
         LR          A,W             < W=/
         LA          SOM
         LY          PAS
         BSR         SPJUMP
         ANDI        'FF
         JMP         C44
PLUTAR:  EQU         $               < SYMBOLE DEFINI ULTERIEUREMENT.
         LA          SOM
         CPI         -128
         JL          EREXPA          < DEEPLACEMENT TROP IMPORTANT.
         CPI         127
         JG          EREXPA
         LA          &ATSY11
         ORI         '90
         STA         &ATSY11
         BSR         MODSB
         BSR         INSDEP          < INSERTION CODE OPERATION ET
                                     < DEPLACEMENT DANS TDEP.
         LAI         0
         JMP         C65
WORD:    EQU         $               < DIRECTIVE 'WORD'.
         LA          SITUAT
         JALE        C61
         BSR         SUSY
         BR          ATESTF
C61:     EQU         $
         JNE         CHAINA          < EXPRESSION NON DEFINIE.
         DC          SINGER          < INDICATEUR DE TRANSLATION.
         LA          SOM
         LB          COMDE
         TBT         27
         JNC         C62
         LAI         10              < 'DSEC' INTERDIT.
         BR          MERR
C62:     EQU         $
         IC          TRANS           < A CHAGER EN TRANSLATANT.
         BR          AC44
CHAINA:  EQU         $               < CHAINAGE.
         CPZ         SIGMA
         JL          REFEXT          < SYMBOLE EXTERNE.
         CPZ         SOM
         JE          C63
         BSR         INSDEP          < INSERTYION DEPLACEMENT DANS TDEP.
C63:     EQU         $
         LA          &ATSY11
         RBT         1               < 2EME CHAINAGE ET SUIVANTS A PRIORI...
         STA         &ATSY11         < MISE A JOUR A PRIORI...
         TBT         12
         JC          DEJCHA
         ORI         '88             < DEBUT DE CHAINAGE.
         SBT         1               < C'EST LE PREMIER CHAINAGE.
         STA         &ATSY11
         LAI         -1
         RBT         0               < A='7FFF.
C64:     EQU         $
SOWORD:  EQU         $
         LB          PAS
         STB         &ATSY12
         BSR         MODSB
C65:     EQU         $
         IC          SINGER          < INDICATEUR DE CHAINGAE.
         BR          AC44
DEJCHA:  EQU         $               < CHAINAGE EN COURS.
         IC          TRANS
         LA          &ATSY12
         JAGE        SOWORD          < OK, L'ADRESSE DU CHAINAGE PRECEDENT
<                                    < EST INFERIEURE A 32K.
         CPZ         PAS             < SINON, EST-ON ACTUELLEMENT AU-DELA
                                     < DES 32K ???
         JL          SOWORD          < OUI, C'EST BON, ON Y RESTE...
         LAI         22              < NON, ON EST OBLIGE D'INTERDIRE
         BR          MERR            < CETTE POSSIBILITE A CAUSE DE
                                     < DE L'EDITEUR DE LIENS...
REFEXT:  EQU         $
         CPZ         SOM
         JNE         DEPFAU          < DEPLACEMENT ASSOCIE AU SYMBOLE.
         LAI         0
         CPZ         LIST2
         JG          C65             < SECOND PASSAGE.
         LA          &ATSY11
         TBT         12
         JC          DEJCHA
         ORI         '88
         DC          TRANS           < TRANS=-1.
         STA         &ATSY11
         BSR         MODSB
         LAI         0
         JMP         C64
EQU:     EQU         $               < DIRECTIVE 'EQU'.
         JE          C100
         LAI         5               < SYMBOLE NON DEFINI.
         BR          MERR
C100:    EQU         $
         JMP         C69
ENT:     EQU         $               < DIRECTIVE 'ENT'.
         LBI         '84
         JMP         C66
EXT:     EQU         $               < DIRECTIVE 'EXT'.
         LBI         'A0
C66:     EQU         $
         CPZ         LIST2
         JG          C69             < SECOND PASSAGE.
         CPZ         NIV
         JNE         C67
BERA6:   EQU         $               < SYMBOLE DEJA DEFINI.
         LAI         6
         BR          MERR
C67:     EQU         $
         LA          &ATSY11
         ANDI        'FC
         JANE        BERA6           < SYMBOLE DEJA CHAINE.
         CPZ         SOM
         JE          C68
DEPFAU:  EQU         $               < DEPLACEMENT ASSOCIE AU SYMBOLE.
         LAI         1
         BR          MERR
C68:     EQU         $
         LA          &ATSY11
         ORR         B,A
         STA         &ATSY11
         BSR         MODSB
C69:     EQU         $
         BR          ATESTF
NOMSEC:  EQU         $               < NOM DE SECTION.
         LA          VALDIR          < DST?
         CPI         9
         JNE         $+2
         BR          ADEP
         BSR         MACQ
         LB          CLE
         TBT         24
         JC          DIRSEC          < DIRECTIVE DE SECTIONNEMEMT.
         JANE        C74
         BSR         RETIQ           < AUTRES DIRECTIVES.
         JAGE        BERA6           < NOM N'APPARTIENT PAS A TSYMB.
         SLRS        8
         ANDI        '7F
         BR          AC44
DIRSEC:  EQU         $
         CPZ         LIST2
         JE          C70
         IC          SECMAX          < SECOND PASSAGE.
         LA          SECMAX
         STA         SECOUR
         JMP         C73
C70:     EQU         $
         JANE        C71
         BSR         RETIQ
         JAE         C71
         LAI         8               < APPARTIENT DEJA A TSYMB.
         BR          MERR
C71:     EQU         $
         LX          PTSECT          < @ FIN SECTION PRECEDENTE
         LA          PAS
         STA         &ADSECT
         IC          PTSECT
         IC          SECMAX
         LA          SECMAX
         STA         SECOUR
         CPI         NBRSEC
         JL          C72
         LAI         9               < NOMBRE DE SECTIONS>127.
         BR          MERR
C72:     EQU         $
         LX          PTSECT
         STA         &ADSECT
         IC          PTSECT
         BSR         SPTAS           < MEMORISATION NOM DANS BUF.
C73:     EQU         $
         CPZ         LG
         JE          C74             < PAS DE NOM DE SECTION.
         BR          ATESTF
FINFRA:  EQU         $
         CPI         '2C             < TEST ','.
         JNE         C75
C74:     EQU         $
         BR          ANOCON
C75:     EQU         $
         BSR         MACQ
         CPI         1
         JNE         C74
         CPZ         TRANS
         JGE         C76
         LA          BUF
         LB          BUF+1
         PSR         A,B             < SAUVEGARDE DE BUF,BUF+1.
C76:     EQU         $
         LA          VALDIR
NPVIRG:  EQU         $               < INSTRUCTIONS.
         JAE         TRAREG
         CPI         19
         JGE         C78
         LBI         0
         LYI         0
C77:     EQU         $
         LR          A,X             < DIRECTIVES DE SECTIONNEMENT.
         LA          BINARY
         BR          &ATABDR         < 'EQU' ET 'VAL'.
C78:     EQU         $
         JG          TRAREG
         LA          BINARY          < DIRECTIVE 'DZS'.
C79:     EQU         $
         AD          PAS
         JNC         TRAREG          < OK...
         LAI         12              < DEPASSEMENT 64K !!!
         BR          MERR
TRAREG:  EQU         $
         LA          NREG
         CPI         1
         JNE         RETDIR
         LA          CLE             < EXCLUSION 'ADRI'.
         JAL         RETDIR
         LA          BINARY          < DUPLICATION RS DANS RD.
         SLRS        3
         ANDI        7
         OR          BINARY
         STA         BINARY
RETDIR:  EQU         $
         CPZ         NETIQ
         JE          TRAREF          < PAS D'ETIQUETTE.
         LA          SECOUR          < TRAITEMENT ETIQUETTE.
         JAG         C80
         LAI         3               < ETIQUETTE AVANT SECTION.
         BR          MERR
C80:     EQU         $
         SLLS        8
         CPZ         SITUAT
         JLE         C81
         SBT         11              < SECTION 'DSEC'.
C81:     EQU         $
         JGE         C82
         SBT         12              < SECTION 'PROG'.
C82:     EQU         $
         LY          PAS
         STY         SOM             < COMDE=MOT DE COMMANDE ,
                                     < SOM=VALEUR.
C93:     EQU         $
         STA         COMDE
RETEQ:   EQU         $
         CPZ         LIST2
         JG          TRAREF          < SECOND PASSAGE.
         LA          &ATSYM1
         ANDI        'E8             < BIT11=0 (DSEC), AFIN DE PERMETTRE LA
                                     < REDEFINITION DE SYMBOLE TRANSLATABLE
                                     < PAR '::' DANS UNE 'DSEC'...
         JAE         NEWSYM          < NOUVEAU SYMBOLE.
         CPZ         SITUAT
         JLE         C83
         LAI         10              < SYMBOLE UTILISE AILLEURS.
         BR          MERR
C83:     EQU         $
         LYI         -1
         LR          Y,W
RETW:    EQU         $
         LXI         0
         LY          NDEP
C84:     EQU         $
         CPR         X,Y
         JE          C86
         CPZ         &ATDEP          < MEMORISATION SIGNE.
         LA          &ATDEP
         RBT         0
         EOR         NETIQ
         JANE        FINDEP
         LA          &ATDEP1
         JG          DEPWOR          < BIT0=0.
         AD          SOM
         LY          &ATDEP2
         BSR         SPJUMP
         ANDI        'FF             < ELIMINATION OCTET GUACHE.
C85:     EQU         $
         CPZR        W
         JE          PERFO
FINDEP:  EQU         $
         ADRI        -3,X
         JMP         RETW+1
C86:     EQU         $
         CPZR        W               < X=NDEP.
         JE          NEWSYM
         ADRI        1,W             < AUCUNE ERREUR DETECTEE.
         LA          &ATSYM1
         TBT         12
         JNC         RETW
         LAI         'AA
         LB          &ATSYM2
         BSR         ASPSO1
         LAI         '22
         LB          SOM
         BSR         ASPSO1
         JMP         RETW
DEPWOR:  EQU         $               < DEPLACEMENT SUR 'WORD'.
         AD          SOM
         JNV         C87             < OK...
         LAI         18
         BR          MERR
C87:     EQU         $
         LA          &ATDEP1
         JMP         C85
PERFO:   EQU         $               < SORTIE DEPLACEMENT.
         LR          A,Y
         LAI         '2E
         LB          &ATDEP2
         LR          X,L
         BSR         ASPSO1
         LAI         '22
         LR          Y,B
         BSR         ASPSO1
         LR          L,X
         LR          X,B
         ADRI        -3,X
TASDEP:  EQU         $               < TASSEMENT DE TDEP.
         LY          NDEP
         CPR         Y,X
         JNE         C88
         LR          B,X
         ADRI        3,Y
         STY         NDEP
         JMP         C84
C88:     EQU         $
         LA          &ATDEP
         ADRI        3,X
         STA         &ATDEP
         ADRI        -4,X
         JMP         TASDEP
CC77:    JMP         C77             < RELAI VERS C77 !!!
<
<
<        R E N C O N T R E   D ' U N   N O U V E A U   S Y M B O L E  :
<
<
NEWSYM:  EQU         $               < NOUVEAU SYMBOLE.
         LA          &ATSYM1
         TBT         12              < LE NOUVEAU SYMBOLE EST-IL DEJA CHAINE ???
         JNC         C88E            < NON, OK...
         CPZ         &ATSYM2         < OUI, LE CHAINAGE PRECEDENT EST-IL
                                     < SUPERIEUR A 32K ???
         JGE         C88E            < NON, OK...
         CPZ         SOM             < OUI, ALORS SA VALEUR ES-ELLE AUSSI
                                     < SUPERIEURE A 32K ???
         JL          C88E            < OUI, OK...
         TBT         1               < PREMIER CHAINAGE ???
         RBT         1               < OUI A PRIORI...
         JC          C88E            < ET OUI, C'EST BON...
         LAI         22              < NON, L'EDITEUR DE LIENS NE S'EN
         BR          MERR            < SORTIRA PAS, ABORT...
C88E:    EQU         $
         TBT         0               < L'INDEXATION A-T'ELLE ETE DEJA
                                     < DEMANDEE SUR CE SYMBOLE ???
         ANDI        7
         OR          COMDE
         STA         &ATSYM1
         LA          SOM
         STA         &ATSYM2
         LA          NETIQ
         STA         NIV
         LA          &ATSYM1
         JNC         C88A            < NON, OK...
         CPZ         &ATSYM2         < OUI, ALORS EST-ON A UNE ADRESSE
                                     < SUPERIEURE A 32K ???
         JGE         C88A            < NON, OK...
         LAI         14              < OUI, ERREUR !!!
         BR          MERR
C88A:    EQU         $
         STA         &ATSY11
         TBT         9               < EST-CE UN SYMBOLE ABSOLU ???
         LA          &ATSYM2
         STA         &ATSY12
         JC          P7FFF           < OUI, UN SYMBOLE ABSOLU PEUT
                                     < VALOIR '7FFF !!!
         IBT         0
         CPI         'FFFF           < LE NOUVEAU SYMBOLE DEFINI VAUT-IL
                                     < '7FFF ??? (CONFLIT AVEC FIN DE
                                     < CHAINAGE !!!)
         JNE         E7FFF           < NON, OK...
         LAI         19              < OUI, ON SE DOIT DE LE REFUSER !!!
         BR          MERR            < ERREUR !!!
<
< CAS DES SYMBOLES TRANSLATABLES :
<
E7FFF:   EQU         $
         IF          ORDI-"S",XWOR%,,XWOR%
         LXI         LXZACQ-1
         LAI         YNZACQ
         STBY        &AZACQ          < A CHAQUE RENCONTRE D'UN SYMBOLE TRANS-
                                     < LATABLE ON REINITIALISE LA PILE DU
                                     < CODE GENERE EN BOUT DES CARTES
                                     < DYNAMIQUES...
XWOR%:   VAL         0
<
< CAS DE TOUS LES SYMBOLES :
<
P7FFF:   EQU         $
         BSR         MODSB
TRAREF:  EQU         $               < TRAITEMENT REFERENCE.
         LA          VALDIR
         JAE         INSTR
         JAG         C89
         BR          CEFLT           < CAS DU FLOTTANT.
C89:     EQU         $
         CPI         18
         JG          CC77
         LB          SOM             < SORTIE LISTING ('EQU' ET 'VAL').
         BSR         CONVER          < B=VALEUR CONVERSION.
         STY         &ZACQ10         < POIDS FORTS VALEUR
         STA         &ZACQ11         < POIDS FAIBLES VALEUR
         BR          ASORLI
WORD1:   EQU         $               < DIRECTIVE 'WORD'.
INSTR:   EQU         $               < INSTRUCTION.
         LBI         'A6
         LAI         1
         CPZ         TRANS
         JNE         INCPAS
C90:     EQU         $
         LBI         '24             < CHARGER SANS TRANSLATER.
INCPAS:  EQU         $
         AD          PAS
         STA         PAS
         CPZ         TRANS
         JL          TREXT           < DEBUT CHAINAGE SUR 'EXT'.
         LR          B,A
SREXT:   EQU         $
         LB          BINARY
         CPZ         INFL
         JE          COMFL
         PSR         B
         LB          M3800           < POSITIONNEMENT DU CODE FLOTTANT.
COMFL:   EQU         $
         BSR         SPLIST          < SORTIE DU BINAIRE DU 1ER MOT
                                     < ET EDITION LISTING ...
         CPZ         INFL
         JE          COND3
         IC          PAS
         IC          DEBRES+2
         LAI         '24
         PLR         B
         BSR         SPLIST
COND3:   EQU         $
         CPZ         PVIR
         JE          NBRAN
         STZ         TRANS           < 'WORD' + POINT VIRGULE.
         STZ         MOBYTE
         STZ         SINGER
RBYTE:   EQU         $
         BSR         SPSAV
         STZ         BINARY
         STZ         PVIR
         STZ         NETIQ
         IC          DEPLA2
         ADRI        -2,K            < ELIMINATION SAUVEGARDES
         PLR         W               < RESTITUTION RANG DU MOT CLE.
         BR          ACOT
ELIMIN:  EQU         $               < ELIMINATION LG SYMBOLE EQUIVALENT.
         CPZ         NETIQ
         JNE         C92
C91:     EQU         $
         LAI         3               < ETIQUETTE MANQUANTE.
         BR          MERR
RELNWS:  JMP         NEWSYM
C92:     EQU         $
         CPZ         SECOUR
         JE          C91             < ERREUR : AUCUNE SECTION
                                     < N'EST ENCORE DEFINIE !!
         LA          COMDE
         SLRS        3               < AINSI QUE LE BIT13 ('ENT').
         SLLS        3
         BR          RETEQ1
TREXT:   EQU         $               < SORTIE SYMBOLE EXTERNE.
         PLR         A,B
         LAI         -1              < DEBUT DE CHAINAGE EXT
         RBT         0
         OR          BINARY
         STA         BINARY
         LAI         '24
         JMP         SREXT
EQU1:    EQU         $               < DIRECTIVE 'EQU'.
         CPZ         ETAPH
         JE          ELIMIN
         LA          COMDE
         CPZ         SITUAT          < EST-ON DANS UNE 'DSEC' ???
         JG          EX700           < OUI, ATTENTION !!!
         LBY         COMDE
         STA         SECOUR          < SECTION COURANTE...
         LA          COMDE
         TBT         11
         JC          C94
         TBT         12
         JNC         C95
         ADRI        -2,B            < 'PROG'.
C94:     EQU         $
         ADRI        1,B             < 'DSEC'.
C95:     EQU         $
         STB         SITUAT
EX700:   EQU         $
         LB          SOM
         STB         PAS
         STB         DEBRES+2
         CPZ         SITUAT
         JG          C96             < 'DSEC'.
         LAI         'A0
         BSR         ASPSO1
C96:     EQU         $
         BSR         SPLIS1          < SORTIE LISTING.
NBRAN:   EQU         $
         BR          ADEP
BYTE:    EQU         $               < DIRECTIVE 'BYTE'.
         SLRD        8               < DECONCATENATION GAUCHE/DROITE...
         JANE        ARASCI          < ERREUR : (GAUCHE)#0...
         SLLD        8               < (A)=2 CHIFFRES HEXA-DECIMAUX...
         CPZ         INBYTE
         JE          BYTE1           < BYTE DE GAUCHE.
         OR          MOBYTE          < BYTE DE DROITE.
         STZ         INBYTE
C97:     EQU         $
         STA         BINARY
         JMP         INSTR
ARASCI:  JMP         ERASCI          < RELAI...
BYTE1:   EQU         $
         SLLS        8
         STA         MOBYTE
         IC          INBYTE
         CPZ         PVIR
         JE          C97
         JMP         RBYTE           < 'BYTE' + POINT-VIRGULE.
DZS:     EQU         $               < DIRECTIVE 'DZS'.
         JAE         C96
         LAI         'AC
         LB          BINARY
         CPZ         SITUAT
         JG          C98             < ON EST DANS UN 'DSEC'.
         BSR         ASPSO1          < REPEAT LOAD.
C98:     EQU         $
         LA          BINARY
         STZ         BINARY
         JMP         C90
VAL:     EQU         $               < DIRECTIVE 'VAL'.
         CPZ         NETIQ
         JE          C91             < ETIQUETTE MANQUANTE.
         CPZ         VALEQU          < EST-ON EN FAIT EN PRESENCE DE LA SEQUENCE
                                     < SUIVANTE :
                                     < ETI: EQU $      PUIS
                                     < ETI::VAL 0      ???
         JL          C99XX           < OUI, ERREUR !!!
         LA          &ATSYM1
         ANDI        'BC
         JAE         C99
C99XX:   EQU         $
         LAI         4               < SYMBOLE DEJA UTILISE.
         BR          MERR
C99:     EQU         $
         LAI         '40
         STA         COMDE
         JMP         RELNWS
COMMON:  EQU         $               < DIRECTIVE 'COMMON'.
         ADRI        -1,Y
LOCAL:   EQU         $               < DIRECTIVE 'LOCAL'.
         ADRI        2,Y
TABLE:   EQU         $               < DIRECTIVE 'TABLE'.
         LR          B,W
         CPI         3
         JG          NONVER          < 'TABLE' OU 'DSEC'.
         AD          ETATS           < VERIFICATION DE L'ENCHAINEMENT
                                     < DES SECTIONS.
         LR          A,X
         LA          MOTEST
         TBT         0,X
         JNC         C101
         LAI         16              < ENCHAINEMENT INCORRECT.
         BR          MERR
C101:    EQU         $
         LAI         3
         MP          VALDIR
         STB         ETATS
NONVER:  EQU         $
         LR          W,B
         LX          LIMSU2
         CPZR        X
         JE          NREGUL
         LA          PAS             < SORTIE 'COMMON' OU 'LOCAL'.
         CP          &LIMSUP
         JGE         C102
         STA         &LIMSUP
         STA         &LIMSU1
C102:    EQU         $
         STZ         LIMSU2
NREGUL:  EQU         $
         CPZ         SITUAT
         JL          FINPRO
         JE          C103
         LA          SAUVPA          < SORTIE 'DSEC'.
         STA         PAS
REPRO:   EQU         $
         STZ         SITUAT
C103:    EQU         $
         CPZR        Y
         JE          YNUL
         LR          Y,X             < 'COMMON' OU 'LOCAL'.
         LYI         128
         LA          PAS             < POSITIONNEMT IMPLICITE C ET L.
         STA         &LIMINF
         STA         &LIMIN1
         ADR         Y,A
         STA         &VALBAS
         STA         &VALBA1
         ADR         Y,A
         STA         &LIMSUP
         STA         &LIMSU1
         LA          SECOUR
         STA         &SECBAS
         STA         &SECBA1
         STX         LIMSU2
YNUL:    EQU         $
         CPZR        B
         LY          PAS
         JE          TRACOM
         STB         SITUAT          < 'PROG' OU 'DSEC'.
         JL          TRACOM          < CAS DE 'PROG'.
         STZ         PAS
         STY         SAUVPA          < 'DSEC'.
         LYI         0
         JMP         C104
TRACOM:  EQU         $               < SORTIE NOM DE SECTION.
         LAI         '36
         BSR         ASPSO2
C104:    EQU         $
         STY         DEBSEC
         STY         FINSEC
         IC          INDZS
         CPZ         LIST2
         JG          C105            < SECOND PASSAGE.
         LX          PTSECT
         STY         &ADSECT
         IC          PTSECT
C105:    EQU         $
         BR          ASORLI          < SORTIE LISTING.
PROG:    EQU         $               < DIRECTIVE 'PROG'.
         ADRI        -2,B
DSEC:    EQU         $               < DIRECTIVE 'DSEC'.
         ADRI        1,B
         JMP         TABLE
FINPRO:  EQU         $               < FIN DE SECTION 'PROG'.
         LAI         0
         LR          A,W
         BSR         SYMUL
C106:    EQU         $
         LAI         1
         BSR         SYMUL
         JE          SYMUL1
         LXI         0
         LA          &ATSYMB         < RECHERCHE DES JUMPS NON
                                     < SATISFAITS.
         ANDI        '90
         CPI         '90
         JNE         MORE
         BSR         SORCLF
         LAD         &ATSYMB         < 'JUMP' NON SATISFAIT.
         BSR         SORSYM          < EDITION SYMBOLE.
         ADRI        1,W
MORE:    EQU         $               < APPEL SYMBOLE SUIVANT.
         JMP         C106
SYMUL1:  EQU         $
         CPZR        W
         JE          REPRO
C107:    EQU         $
         LAI         15              < LIMITE SECTION NON ATTEINTE.
         BR          MERR
USE1:    EQU         $               < DIRECTIVE 'USE'.
         SLRS        14
         LR          A,X
         CPZ         INBRE
         JNE         NIMPL           < POSITIONNEMENT EXPLICITE.
         CPI         3               < RETOUR POSITIONNEMENT IMPLICITE.
         JNE         C108
ERASCI:  EQU         $
         LAI         1               < BASE W.
         BR          MERR
C108:    EQU         $
         LY          &SECBA1
         STY         &SECBAS
         LA          &LIMIN1
         LB          &LIMSU1
         LY          &VALBA1
RUSE:    EQU         $
         STA         &LIMINF
         STB         &LIMSUP
         STY         &VALBAS
         BR          ASORLI          < SORTIE LISTING.
EXT1:    EQU         $-1
ENT1:    EQU         $-1
NIMPL:   EQU         $
         LY          NSEC
         STY         &SECBAS
         LA          MOTINF
         LB          MOTSUP
         LY          SOM
         JMP         RUSE
NR13:    EQU         $
         LAI         13
         BR          MERR
<
<
<        A P P E L   D U   C C I  :
<
<
PSTS:    EQU         $
PSTH:    EQU         $
         LAD         CCI
         SVC         0               < POUR DES PATCHES...
         BR          ASORLI          < ET C'EST TOUT...
DO:      EQU         $               < DIRECTIVE 'DO'.
         STA         INDO
         LAD         IOCB4
         WORD        LISTIN          < EDITION DE LA CARTE 'DO'.
         BSR         PAGIN
         BSR         LCNF
         JAE         C1300
         BR          AEOT
C1300:   EQU         $
         BR          ADEP
ASCI:    EQU         $               < DIRECTIVE 'ASCI'.
         IF          ORDI-"S",XWOR%,,XWOR%
         LBI         '24
         IC          NACQ1           < PREMIER CARACTERE PRESUME DE LA CHAINE,
         LX          NACQ1
         LBY         &AZACQ
         CPI         "'"             < EST-CE UNE ' DERRIERE " ???
         JNE         C111X           < NON, VRAI ASCI...
<
< CAS D'UNE CHAINE HEXA-DECIMALE "'XXXXXXXX" :
<
C111Y:   EQU         $
         LBI         1               < B=INDICATEUR DE COMPTAGE A 4...
C111Z:   EQU         $
         IC          NACQ1
         LX          NACQ1
         LBY         &AZACQ          < A=CARACTERE SUIVANT...
         CPI         '0D             < FIN DE CARTE ???
         JE          ERASCI          < ERREUR DE SYNTAXE...
         CPI         '22             < FIN DE CHAINE ???
         JE          FASCIX          < OUI...
         ADRI        -"0",A          < DECODAGE,
         JAL         ERASCI          < ERREUR DE SYNTAXE...
         CPI         9
         JLE         C111R           < CHIFFRE DECIMAL.
         ADRI        -"A"+"9"+1,A
         CPI         'A
         JL          ERASCI
         CPI         'F
         JG          ERASCI          < ERREUR DE SYNTAXE...
C111R:   EQU         $
         SCRS        4
         SCLD        4               < CONCATENATION DANS B.
         JAE         C111Z           < ON BOUCLE TANT QUE (A)=0 : 4 FOIS...
SASCIX:  EQU         $
         IC          PAS             < PROGRESSION DU "$".
         LAI         '24             < CODE DE CHARGEMENT,
         BSR         SPLIST          < LISTING + BINAIRE.
         IC          DEBRES+2
         CPZ         INDASC          < FINI ???
         JNE         C111Y           < NON...
C111T:   EQU         $
         BR          ADEP            < CARTE SUIVANTE SVP...
FASCIX:  EQU         $
         STZ         INDASC          < INDICATEUR DE DERNIER MOT...
         LR          B,A
         CPI         1               < MOT VIDE ???
         JE          C111T           < OUI, RIEN A FAIRE...
         LAI         0               < CLEAR,
C111S:   EQU         $
         SCLD        4
         JAE         C111S           < ON BOUCLE TANT QUE (A)=0...
         JMP         SASCIX          < VERS LA SORTIE DU DERNIER MOT.
C107X:   JMP         C107            < RELAI...
<
< VRAI ASCI "YYYYYYYY" :
<
C111U:   EQU         $
XWOR%:   VAL         0
         LBI         '24
C111:    EQU         $
         IC          NACQ1
         LX          NACQ1
         LBY         &AZACQ
         IF          ORDI-"S",XWOR%,,XWOR%
C111X:   EQU         $
XWOR%:   VAL         0
         CPI         '0D             < R/C ???
         JE          ERASCI          < OUI, MANQUE LE " DE FIN DE ASCI...
         CPI         '22
         JE          FASCI           < FIN DE CHAINE.
         SLLS        8
         SCLD        8
         JAE         C111
SASCI:   EQU         $
         IC          PAS
         BSR         SPLIST          < PERFO MOT + SORTIE LISTING.
         IC          DEBRES+2        < INCREMENTATION ADRESSE.
         CPZ         INDASC
         IF          ORDI-"T",XWOR%,,XWOR%
         JNE         ASCI
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         JNE         C111U
XWOR%:   VAL         0
         BR          ADEP
FASCI:   EQU         $
         STZ         INDASC
         LAI         0
         SCLD        8
         JANE        SASCI           < ENCORE UN CARACTERE.
         BR          ADEP
IDP:     EQU         $               < DIRECTIVE 'IDP'.
         LAI         'B4
         LB          RCLF
         STA         BUF
         STB         BUF+1
         BSR         PSORTQ          < SORTIE RC-LF DANS QUADRUPLET.
IDP1:    EQU         $
         LXI         -2
         STZ         BUF             < NETTOYAGE DE BUF.
         STZ         BUF+1
C112:    EQU         $
         LR          X,Y
         IC          NACQ1
         LX          NACQ1
         LBY         &AZACQ
         CPI         '22
         JE          FIDP            < FIN DE CHAINE.
         LR          Y,X
         STBY        &ABUF
         JIX         C112
SIDP:    EQU         $
         LAI         'B4
         STA         BUF
         BSR         PSORTQ          < SORTIE QUADRUPLET.
         CPZ         INDASC
         JNE         IDP1
         BR          ASORLI          < SORTIE LISTING.
FIDP:    EQU         $
         STZ         INDASC
         LAI         -3
         CPR         A,X
         JNE         SIDP
SORLIS:  EQU         $               < SORTIE LISTING (ZACQ)
         BSR         APAGEN
         BR          ADEP
END1:    EQU         $               < DIRECTIVE 'END'.
         IF          ORDI-"S",XWOR%,,XWOR%
         CPZ         KLIST           < LISTING ???
         JE          FINAS1          < OUI, DEJA ON...
         STZ         KLIST           < NON, 'LST' IMPLICITE,
         LA          IOCB4           < ET ON RESTAURE...
         EORI        '000D
         STA         IOCB4
         LA          IOCB3
         EORI        '000D
         STA         IOCB3
FINAS1:  EQU         $
XWOR%:   VAL         0
         EORR        L,L
         LAI         0               < RECHERCHE SYMBOLES NON DEFINIS
         BSR         SYMUL
C113A:   EQU         $
         LAI         1
         BSR         SYMUL
         JE          C113B
         LXI         0
         LA          &ATSYMB
         IF          ORDI-"T",XWOR%,,XWOR%
         TBT         10              < ELIMINER EXT
         JC          C113A
         TBT         8
         ADCR        L
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         ANDI        'A0             < UNDEF+REF...
         CPI         '80             < UNDEF ???
         JNE         C113A
         ADRI        1,L
XWOR%:   VAL         0
         JMP         C113A
C113B:   EQU         $
         CPZR        L
         JE          C113
         LAI         17              < ASSEMBLAGE INCORRECT.
         BR          MERR
C113:    EQU         $
         CPZ         SITUAT
         JGE         C114            < LA SECTION EN COURS N'EST PAS
                                     < UNE SECTION 'PROG'.
         LA          FINSEC
         CP          PAS
         IF          ORDI-"T",XWOR%,,XWOR%
         JG          C107            < LIMITE DE SECTION NON ATTEINTE.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         JG          C107X           < LIMITE DE SECTION NON ATTEINTE...
XWOR%:   VAL         0
C114:    EQU         $
         DC          IOCB4+2
         LAD         IOCB4           < SORTIE LISTING.
         WORD        LISTIN
         BSR         PAGIN
         CPZ         LIST2
         JG          FINASS          < SECOND PASSAGE.
         LAI         0
         BSR         SYMUL
CEND:    EQU         $
         LAI         1
         BSR         SYMUL
         JE          SYMUL2
         LXI         0
         LA          &ATSYMB
         TBT         13
         JC          ENTENT          < 'ENT'.
         ANDI        '28
         CPI         '28
         JE          EXTEXT          < 'EXT'
CEND1:   EQU         $
         JMP         CEND
SYMUL2:  EQU         $
         LB          SOM
         CPZR        B
         JNE         C115
         SBT         16              < B='8000
C115:    EQU         $
         LAI         '28
         BSR         ASPSO1          < SORTIE DE L'ADRESSE DE LANCEMENT.
         LAI         '30
         LB          CHECK
         BSR         ASPSO1          < SORTIE CHECKSUM.
         IC          INDEND
         STZ         LIST2
         STZ         CHECK
         PAGE
<
<
<        F I N   D ' A S S E M B L A G E  :
<
<
FINASS:  EQU         $
         BSR         SORCLF
         LA          COM1
         XR          A,C             < POUR ATTEINDRE 'KERROR'...
         USE         C,COMM1
         LB          KERROR          < B=NOMBRE D'ERREURS...
         IF          ORDI-"S",XWOR%,,XWOR%
         LX          NBPAGE
         ADRI        1,X             < X=NOMBRE DE PAGES VIRTUELLES (RESI-
                                     < DENTES OU PAS) UTILISEES PAR LA
                                     < TABLE DES SYMBOLES.
XWOR%:   VAL         0
         XR          A,C
         USE         C
         BSR         CONVER          < CONVERSION ASCI DE (B).
         STA         &ZACQ11         < ET MISE DANS
         STY         &ZACQ10         < LE LISTING,
         IF          ORDI-"S",XWOR%,,XWOR%
XWOR%1:  VAL         XLGPAG=0
XWOR%1:  VAL         16-1-XWOR%1
         LRM         B
         WORD        1>XWOR%1>8      < NOMBRE MAX DE PAGES POUR LA TABLE
                                     < DES SYMBOLES.
         ORR         X,B             < QUE L'ON CONCATENE AU NOMBRE
                                     < REELLEMENT UTILISE.
         BSR         CONVER
         STA         &ZACQ14         < QUE L'ON INSERE DANS
         STY         &ZACQ13         < LE LISTING DE 'END'...
XWOR%:   VAL         0
         LAD         IOCB4           < QUE L'ON EDITE...
         WORD        LISTIN
         BSR         PAGE
         IF          ORDI-"T",XWOR%,,XWOR%
         LAI         '6D             < LIBERER L'IMPRIMANTE
         SWBR        A
         ORI         '0D
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LRM         A               < LIBERER L'IMPRIMANTE
         WORD        '6D0D
XWOR%:   VAL         0
         STA         SYMBOL
         LAD         IOCB3
         WORD        LISTIN
         LAD         IOCB5           < ECRIRE LE DERNIER BUFFER
         SVC         0
         LA          OPNBO
         ORI         3               < MISE EN MODE 'CLOSE-SAVE'.
         STA         OPNBO
         LAD         OPNBO
         SVC         0               < FERMETURE DE L'ENREGISTREMENT
                                     < BINAIRE.
         PSR         C
         LA          COM1
         LR          A,C
         USE         C,COMM1
<
<        ELIMINER LES PAGES
<
         BSR         ELPG
         LAD         DCLOSE          < ON FERME TOUT
         SVC         0               < AVANT DE SORTIR...
         PLR         C
         USE         C
         LAD         CCI
         SVC         0               < RETOUR AU CCI.
         JMP         $-1             < CAS D'UN !GO.
EOT:     EQU         $               < DIRECTIVE 'EOT'.
         BSR         MACQ            < VOIR CE QUI SUIT
         CPI         1
         JE          EOTBL           < RIEN - RETOUR SUR NVPI
         CPI         -1
         JE          EOTDS           < DIESE - LECTURE SUR FICHIER
EREOT:   EQU         $
         LAI         24              < SINON, ERREUR.
         BR          MERR
CEND11:  JMP         CEND1
FNSFNS:  JMP         FINASS
EOTBL:   EQU         $
         LBY         IOCB            < REVENIR A NVPI SI NECESSAIRE
         CPI         1
         JE          AC3001
<
< CAS D'UNE FIN DE FICHIER (OU ERREUR) :
<
         LA          NR              < EST-CE UN 'EOT' SIMULE PAR
                                     < LE MODULE D'ERREUR ???
         CPI         24              < EST-CE 'ERREUR FICHIER' ???
         JE          ET1701          < OUI, IL FAUT ANNULER LES
                                     < EFFETS DE L'EOT...
         JANE        AC3001          < POUR LES AUTRES ERREURS,
                                     < ON CONTINUE SUR LE FICHIER...
ET1701:  EQU         $
         LB          NR              < B=CODE D'ERREUR EVENTUEL.
         PSR         C
         LA          COM1
         LR          A,C             < CHANGEMENT BASE C.
         USE         C,COMM1
         LAD         CLOS5S
         SVC         0               < FERMETURE CLEF 2.0.
         CPZR        B               < ERREUR EN COURS (24) ???
         JNE         ET1812          < OUI, PAS DE 'DO EOT'...
         DC          SINDO           < NON, DECOMPTAGE...
         JGE         NEREOT          < OK, IL EN RESTE...
ET1812:  EQU         $
         STZ         SINDO           < SINON, ON REINITIALISE...
         LAD         AASS5S
         SVC         0               < DESASSIGNATION FICHIER.
         IF          ORDI-"T",XWOR%,,XWOR%
         DC          RDK1+3          < RETOUR ARRIERE.
         DC          RDK2+3
         DC          WDK1+3
         DC          WDK2+3
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         BSR         ARESGF          < RETOUR EN ARRIERE...
XWOR%:   VAL         0
         LAD         RDK1
         SVC         0               < RESTAURATION BUFFER SGF.
         LAD         RDK2
         SVC         0               < RESTAURATION CONSTANTES.
         LXI         ZACQQ-ZACQN
         LAD         SZACQN
         LB          AZACQN
         MOVE                        < RESTAURE LE NUMERO DE LIGNE.
         PLR         C               < RESTAURE LA BASE C.
         USE         C
         STZ         INDO            < REINITIALISATION DE INDO.
         PSR         A,C
         LA          COM1
         LR          A,C
         USE         C,COMM1
         LAD         NOMF2
         LB          ANOMF1
         LXI         XXXLFC+1
         MOVE                        < RESTAURATION DU NOM DU FICHIER
                                     < COURANT ET DE LA LONGUEUR
                                     < LORSQU'IL N'Y A PLUSE DE
                                     < 'DO' SUR 'EOT'.
         PLR         A,C
         USE         C
         JMP         C3002
EOTDS:   EQU         $
         LX          NACQ            < Y-A-T'IL UN NOM DE FICHIER?
         LBY         &AZACQ
         CPI         '0D
         JNE         EOTFIC
         LXI         0               < NON - FICHIER COURANT
         PSR         C
         LA          COM1
         LR          A,C
         USE         C,COMM1
         CPZ         &ANOMF          < A NOTER X=0 (MOVE),
         PLR         C
         USE         C
         JE          EREOT           < PAS DE FICHIER, ERREUR...
         LBY         IOCB            < OUI - INVERSER LECTURE
         CPI         1
         JE          C3002
         JMP         AC3001
ENTENT:  JMP         SYMENS
EXTEXT:  JMP         SYMEXS
<
< APPEL FICHIER :
<
EOTFIC:  EQU         $
         LAD         IOCB4
         WORD        LISTIN          < EDITION DE LA CARTE 'EOT'.
         BSR         PAGIN           < COMPTAGE 'EOT'...
         LB          NACQ            < IL Y A UN NOM DE FICHIER
ET1704:  EQU         $               < A NOTER : B<0 S'IL S'AGIT D'UNE
                                     < ITERATION SUR 'EOT'.
         PSR         C
         LA          COM1
         LR          A,C
         USE         C,COMM1
<
< SAVE LE NOM COURANT :
<
         PSR         B
         LB          ANOMF2
         LAD         NOMFIC
         LXI         XXXLFC+1
         MOVE                        < SAVE LE NOM COURANT ET LA LONGUEUR.
         PLR         B
<
<        A T T E N T I O N  : X=0 APRES LE 'MOVE !!!
<
AUTCF:   EQU         $
         XR          X,B
         LBY         &AZAQC
         ADRI        1,X
         XR          X,B
         CPI         "#"             < FIN DE NOM?
         JE          FINNMF
         STBY        &ANOMF
         ADRI        1,X
         LR          X,A
         CPI         XXXLFC*2-1      < TRONCATION?
         JL          AUTCF
FINNMF:  EQU         $
         LAI         '04             < FIN NOM - PLACER EOT
         STBY        &ANOMF
         STX         LGNMFC
         IF          ORDI-"S",XWOR%,,XWOR%
         LYI         "#"
         LR          B,X             < X=INDEX BUFFER D'ENTREE...
         LBY         &AZAQC          < ACCES AU CARACTERE SUIVANT "#"...
         SBR         A,Y             < Y=0 : BOUCLAGE SUR OPEN EN ERREUR,
                                     <  #0 : MESSAGE D'ERREUR SINON...
XWOR%:   VAL         0
ET1707:  EQU         $
<
< EMPILEMENT DE L'ETAT SGF COURANT :
<
         LXI         ZACQQ-ZACQN
         LAD         SZACQN
         LR          A,B
         LA          AZACQN
         MOVE                        < SAVE LE NUMERO DE LIGNE COURANT.
         LAD         WDK1
         SVC         0               < SAVE LE BUFFER SGF COURANT.
         LAD         WDK2
         SVC         0               < SAVE LES CONSTANTES.
         IF          ORDI-"T",XWOR%,,XWOR%
         IC          WDK1+3          < PROGRESSION EMPILEMENT.
         IC          WDK2+3
         IC          RDK1+3
         IC          RDK2+3
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         BSR         ASASGF          < PROGRESSION DE L'EMPILEMENT.
XWOR%:   VAL         0
         LA          &AINDO
         STA         SINDO           < 'DO' SPECIAL POUR 'EOT'.
         STZ         &AINDO          < REINITIALISATION DE INDO POUR
                                     < CHAQUE APPEL DE FICHIER.
         LAI         8
         STA         &AIOCB          < LECTURE BINAIRE A PRIORI...
         LBY         &APEN5O         < PROGRESSION DE L'OPEN.
         ADRI        1,A
         STBY        &AIOCB          < POUR LA LECTURE SGF.
         CPZ         LGNMFC          < LE NOM DU FICHIER EST-IL VIDE ???
         JE          FCART1          < OUI, ALORS LE FICHIER VA ETRE LU
                                     < SUR CARTE EN COMPRESSE.
         STBY        &APEN5O         < NON, FICHIER...
         LBY         CLOS5S          < PROGRESSION DU CLOSE.
         ADRI        1,A
         STBY        CLOS5S
         LBY         MASS4S          < PROGRESSION !ASSIGN SAVE.
         ADRI        1,A
         STBY        MASS4S
         LBY         MASS4O          < PROGRESSION !ASSIGN OLD.
         ADRI        1,A
         STBY        MASS4O
         IF          ORDI-"S",XWOR%,,XWOR%
TRYOPN:  EQU         $
XWOR%:   VAL         0
         LAD         AASS5O          < OUVRIR LE FICHIER
         SVC         0
FCART1:  EQU         $
         JE          NEREOT          < OK, IL EXISTE...
         IF          ORDI-"S",XWOR%,,XWOR%
         CPZR        Y               < BOUCLAGE SUR OPEN EN ERREUR ???
         JE          TRYOPN          < OUI...
XWOR%:   VAL         0
         PLR         C
         JMP         EREOT           < VERS L'ERREUR...
ASEND1:  JMP         CEND11          < RELAIS DE SAUTS
AFINAS:  JMP         FNSFNS          < SUPERIEURS A 128 MOTS !!!
AC3001:  JMP         C3001           < RELAI DE JMP>128 MOTS...
SYMENS:  JMP         SYMENT
SYMEXS:  JMP         SYMEXT
NEREOT:  EQU         $
         PLR         C
         USE         C
         LAD         OPEN5O
         SVC         0
         STZ         INDIN           < FORCER LA LECTURE
         LXI         0
         LAI         'FF
         STBY        &ABFSGF
         LXI         -32             < REMISE A ZERO NUMEROTATION
C1114:   EQU         $
         LAI         " "
         STBY        &AZACQ
         ADRI        1,X
         LR          X,A
         CPI         -26
         JL          C1114
C3002:   EQU         $
         LA          IOCB
ET1700:  EQU         $
         LXI         -1
         STA         &ABASC
         LXI         0
         STA         &ABASC
         SLRS        10              < CHANGER LE DEBUT DES BUFFERS
         LB          AZACQ           < ET LE NOMBRE DE CARACTERES
         LYI         80
         JAE         C3000
         LB          ABFSG0
         IF          ORDI-"S",XWOR%,,XWOR%
         LRM         Y
         WORD        LLLBUF*2
XWOR%:   VAL         0
         IF          ORDI-"T",XWOR%,,XWOR%
         LYI         LLLBUF*2-1
         ADRI        1,Y
XWOR%:   VAL         0
C3000:   EQU         $
         SLLD        1
         STB         IOCB+1
         STY         IOCB+2
C3001:   EQU         $
<
< EDITION DU NOM DU FICHIER ACTIF :
<
         LBY         IOCB
         CPI         1               < FICHIER OU PAS ???
         JE          ET1709          < PAS FICHIER...
         LA          IOCB4+1         < FICHIER, ALORS
         LB          IOCB4+2         < ON SAVE L'IOCB4...
         PSR         A,B,X
         PSR         C
         LA          COM1
         LR          A,C
         USE         C,COMM1
         LAD         NOMFIC
         SLLS        1               < A=@OCTET DU NOM DE FICHIER.
         LB          LGNMFC          < B=LONGUEUR OCTET.
         PLR         C
         USE         C
         STA         IOCB4+1         < MAJ DE L'IOCB4.
         STB         IOCB4+2
         LAD         IOCB4
         WORD        LISTIN          < EDITION DU NOM DE FICHIER.
         PLR         A,B,X
         STA         IOCB4+1         < RESTAURATION DE L'IOCB4.
         STB         IOCB4+2
         BSR         SORCLF
         BSR         PAGIN           < PAGINATION.
ET1709:  EQU         $
         BR          ADEP
<
<        R E F / D E F  :
<
SYMEXT:  EQU         $               < SYMBOLE EXT.
         LAI         'A5
         JMP         C116
SYMENT:  EQU         $               < SYMBOLE ENT.
         CPI         6
         JE          ASEND1          < 'OFF'.
         LAI         '3A
C116:    EQU         $
         STX         ZTR
         LR          A,L             < SAUVEGARDE DE A.
         LXI         0
         LAD         &ATSYMB         < A=ADRESSE DU SYMBOLE.
         BSR         TRASYM          < TRANSFERT DANS SYMBOL.
         BSR         SPTAS           < PUIS DANS BUF.
         LR          L,A             < RESTAURATION DE A.
         BSR         ASPSO2
         LXI         1
         LB          &ATSYMB         < MOT VALEUR.
         LAI         '22
         BSR         ASPSO1
         LX          ZTR             < RESTAURATION DE X.
         JMP         ASEND1
NDS:     EQU         $               < DIRECTIVE 'NDS'.
         BSR         SORCLF
         LAI         0
         BSR         SYMUL
C117:    EQU         $
         LAI         1
         BSR         SYMUL
         JE          SYMUL3
         LXI         0
         LA          &ATSYMB
         IF          ORDI-"T",XWOR%,,XWOR%
         ANDI        'A0
         CPI         '80
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         ANDI        'A0             < UNDEF+REF...
         CPI         '80             < UNDEF ???
XWOR%:   VAL         0
         JNE         C118            < ELIMINATION EXT.
         LAD         &ATSYMB         < A=ADRESSE SYMBOLE.
         BSR         SORSYM
         BSR         SORCLF
C118:    EQU         $
         JMP         C117
SYMUL3:  EQU         $
         CPZ         NR              < EST-CE UNE VRAIE CARETE NDS ,
                                     < OU UNE CARTE NDS SIMULEE SUITE
                                     < A UNE ERREUR '17' ???
         JNE         AFINAS          < NON, ERREUR 17 : ABORT !!!
         BR          ADEP
EST:     EQU         $               < DIRECTIVE 'EST'.
         LB          IOCB4
         STB         IOCB3
         BSR         SORSEC
C119:    EQU         $
DST:     EQU         $               < 'DST' EST INEFFECTIVE...
         BR          ADEP
         PAGE
<
<
<        T R A I T E M E N T   D E S   A P P E L S   D E
<        P R O C E D U R E S   I M P L I C I T E S  :
<
<
         IF          XXXSGN-0,XWOR%7,,XWOR%7
<        I N H I B I T I O  N  :
<
<
<        FONCTION :
<                      ON N'APPELLE PAS DE FICHIER
<                    DE PROCEDURES, ET ON REMPLACE
<                    #XXXXX# PAR XXXXX EN REMPLACANT
<                    PAR DES BLANCS LES CARACTERES
<                    DE CODE INFERIEUR A '40 ; AINSI
<                    PAR EXEMPLE #/FLD# DEVIENT FLD...
<
<
EOTINS:  EQU         $
         LX          NACQ            < (X)=INDEX CARACTERE COURANT : IL POINTE
                                     <     DERRIERE LE PREMIER '#',
         ADRI        -1,X            < RETOUR SUR LE PREMIER '#'...
         PSR         X               < ET SAVE...
EOTIN1:  EQU         $
         LBY         &AZACQ          < (A)=CARACTERE COURANT :
         CPI         " "             < EST-CE LE PREMIER 'SPACE' ???
         JE          EOTIN2          < OUI, ON S'ARRETE DESSUS...
         CPI         '40             < EST-CE UNE LETTRE ???
         JGE         EOTIN3          < OUI, ON LA GARDE...
         LAI         " "             < NON :
         STBY        &AZACQ          < ON L'EFFACE...
EOTIN3:  EQU         $
         ADRI        1,X             < AU SUIVANT...
         LR          X,A
         CPI         80              < FIN DE CARTE ???
         JL          EOTIN1          < NON...
EOTIN2:  EQU         $
         LAI         "@"
         LXI         -20
         STBY        &AZACQ          < MISE DE "A-ROND" SUR LE LISTING AFIN
                                     < D'INDIQUER AU MOINS UNE GENERATION...
         PLR         X
         STX         NACQ            < AFIN DE SE POSITIONNER DEVANT LE MOT-CLEF
                                     < QUE L'ON VIENT DE CREER...
         LR          X,Y             < (X)=INDEX EMETTEUR,
                                     < (Y)=INDEX RECEPTEUR.
EOTINA:  EQU         $
         LBY         &AZACQ
         CPI         " "             < RECHERCHE DU PREMIER CARACTERE (NON " ")
                                     < DU NOM DE LA PROCEDURE :
         JNE         EOTIN5          < TROUVE EN (X)...
         ADRI        1,X             < NON,
         LR          X,A
         CPI         80
         JE          EOTIN6          < FIN DE CARTE, ON ABANDONNE...
         JMP         EOTINA          < PASSAGE AU CARACTERE SUIVANT...
EOTIN5:  EQU         $
         CPR         X,Y             < EMETTEUR=RECEPTEUR ???
         JE          EOTIN6          < OUI, RIEN A FAIRE...
EOTIN7:  EQU         $
         LBY         &AZACQ          < NON :
         XR          X,Y
         STBY        &AZACQ          < ON DECALE LE NOM DE (X)-(Y)...
         XR          X,Y
         ADRI        1,X
         ADRI        1,Y
         CPI         " "             < EST-ON AU BOUT DU NOM ???
         JNE         EOTIN7          < NON, ON CONTINUE...
         LR          Y,X             < OUI, ON VA ECRASER LES CARACTERES RESI-
                                     < DUELS :
EOTIN8:  EQU         $
         LBY         &AZACQ
         CPI         " "             < A-T'ON FINI DE NETTOYER ???
         JE          EOTIN9          < OUI, ON ARRETE...
         LAI         " "
         STBY        &AZACQ          < NON, ON EFFACE...
         ADRI        1,X
         JMP         EOTIN8
EOTIN9:  EQU         $
EOTIN6:  EQU         $
         LRM         A
         WORD        EOTIN4
         PSR         A
         RSR                         < ET ON VA EN 'EOTIN4' AFIN D'ANA-
                                     < LYSER LA COMMANDE...
XWOR%7:  VAL         0
<
<
<        A U T O R I S A T I O N  :
<
<
<        FONCTION :
<                      ON SIMUL UN 'CALL', EN METTANT
<                    AU PREALABLE LA CARTE COURANTE EN
<                    CARTE DYNAMIQUE...
<
<
EOTIMP:  EQU         $
<
< MISE DE LA CARTE COURANTE EN DYNAMIQUE :
< (ZACQ --> ZZACQ)
<
         LA          AZACQ
         RBT         0               < A=ADRESSE BUFFER CARTE A ASSEMBLER.
         LR          A,B
         LXI         LXZACQ-2/2-1    < X=NOMBRE DE MOTS A DEPLACER.
         ADRI        LXZACQ/2,B      < B=ADRESSE DU RECEPTEUR.
         MOVE                        < SAUVEGARDE...
         LXI         LXZACQ          < INDEX 1ER CARACTERE DE ZZACQ.
EY333:   EQU         $
         LBY         &AZACQ
         CPI         " "
         JGE         EY332           < OK, C'EST UN CARACTERE...
         LAI         " "             < ON REMPLACE TOUS LES
         STBY        &AZACQ          < 'CTRL' PAR DES 'SPACE'...
                                     < ET EN PARTICULIER R/C LF...
EY332:   EQU         $
         ADRI        1,X             < AU SUIVANT,
         LR          X,A
         CPI         LXZACQ+80       < S'IL EXISTE...
         JL          EY333           < ET OUI...
<
< ET TRAITEMENT DES 'EOT' :
<
         LRM         A
         WORD        EOTDS
         PSR         A
         RSR                         < ET 'GOTO' 'EOTDS'...
         PAGE
         IF          ORDI-"S",XWOR%,,XWOR%
<
<
<        E M P I L E M E N T / D E P I L E M E N T   S G F  :
<
<
RESGF:   EQU         $               < DEPILEMENT.
         USE         C,COMM1
         LA          RDK1+3
         ADRI        -QUANTA,A
         STA         RDK1+3
         DC          RDK2+3
         LA          WDK1+3
         ADRI        -QUANTA,A
         STA         WDK1+3
         DC          WDK2+3
         RSR
SASGF:   EQU         $               < EMPILEMENT.
         LA          RDK1+3
         ADRI        QUANTA,A
         STA         RDK1+3
         IC          RDK2+3
         LA          WDK1+3
         ADRI        QUANTA,A
         STA         WDK1+3
         IC          WDK2+3
         USE         C
         RSR
XWOR%:   VAL         0
         PAGE
<
<
<        S O U S - P R O G R A M M E S  :
<
<
<
<
<        C A L C U L   D ' U N E   E X P R E S S I O N  :
<
<
<        NOTA :
<                      AVEC UN OPERATEUR BINAIRE .OP., CE
<                    SOUS-PROGRAMME FAIT LE CALCUL SUIVANT :
<                                    SOM <-- (SOM).OP.(VALEUR)
<
<
<        NOUVEAUTES :
<                      ON RAJOUTE LES OPERATEURS BINAIRES
<                    SUIVANTS :
<
<                    (               .AND.
<                    ?               .OR.
<                    )               .EOR.
<                    >               DECALAGE DE (SOM) A GAUCHE
<                                    SI (VALEUR)>0, ET A DROITE
<                                    SINON (PAR SLLS/SLRS)
<                    =               1 - SI LE PREMIER CHIFFRE HEXADECIMAL
<                                    DE (VALEUR) EST DIFFERENT DE 'F :
<                                    DONNE DANS SOM, LE NOMBRE DE
<                                    DECALAGES A DROITE A FAIRE
<                                    SUR (SOM) POUR QU'IL N'Y
<                                    AIT PLUS DE BITS NULS A
<                                    DROITE;
<                                    PUIS FAIT : SOM <-- (SOM)+(VALEUR)
<                                    EXEMPLE : (SOM)='00E0
<                                    DONNE : SOM <-- 5
<
<
0.
XWOR%:   VAL         0
<
<
<
< RECHERCHE DES SOUS-FONCTIONS DE 'F7 :
<
MEWOPA:  EQU         $
         XR          A,Y
         ANDI        'FF             < ACCES A LA "SOUS-FONCTION"...
         CPI         '00
         XR          A,Y             < RESTAURE A=ETAT SYMBOLE...
         JE          MEWOPB          < SOUS-FONCTION '00, C'EST FINI...
         JAE         NEWOPS          < LE SYMBOLE N'EXISTANT PAS, ON REFUSE
                                     < TOUTE SOUS-FONCTION...
         LR          Y,A
         CPI         1
         JNE         NEWOPS          < ERREUR DE SOUS-FONCTION...
<
< MISE A JOUR DE L'ETAT D'UN SYMBOLE :
<
         LA          NIV             < SAVE 'NIV'...
         PSR         A,B,X
         LA          NIVSYM          < ADRESSE VIRTUELLE DU SYMBOLE.
         STA         NIV
         LXI         0
         FLD         &ATSY11
         PSR         A,B             < SAVE LE DEBUT DE 'ZONSYM1'.
         FLD         &ATSYMB         < ANCIEN ETAT...
         AND         FLOMAS          < APPLICATION DU MASQUE...
         OR          FLOVAL          < MISE A JOUR...
         FST         &ATSY11
         LR          A,Y             < SAVE LE NOUVEL ETAT.
         BSR         MODSB           < MISE A JOUR TABLE DES SYMBOLES...
         PLR         A,B
         FST         &ATSY11
         PLR         A,B,X
         STA         NIV
         LR          Y,A             < A <-- NOUVEL ETAT.
         LYI         0
         JMP         MEWOPB          < VERS SOM <-- NOUVEL ETAT.
<
< ACCES A L'ETAT D'UN SYMBOLE :
<
NEWOPV:  EQU         $
         LA          SOM
         ANDI        'FF             < A=LONGUEUR PRESUMEE DU SYMBOLE.
         JAE         NEWOPS          < LONGUEUR NULLE : ERREUR...
         CPI         6
         JG          NEWOPS          < TROP LONG : ERREUR...
         PSR         X,Y,B           < PRUDENCE...
         LR          A,B             < B=NOMBRE DE CARACTERES DU SYMBOLE.
         ADRI        1,A
         SLRS        1
         STA         LG              < ARGUMENT DE 'RETIQ'.
         LXI         3
NEWOPY:  EQU         $
         STZ         &ASYMB          < RAZ DE LA ZONE 'SYMB'.
         JDX         NEWOPY
         LBY         SOM
         LR          A,X             < X=INDEX DU PREMIER CARACTERE.
         ADRI        LXZACQ,X        < POUR ACCES A ZZACQ...
         LYI         2               < Y=INDEX DE LA ZONE 'SYMBOL'.
NEWOPW:  EQU         $
         LBY         &AZACQ          < TRANSFERT DU NOM DU SYMBOLE...
         XR          X,Y
         STBY        &ASYMB
         XR          X,Y
         ADRI        1,X
         ADRI        1,Y
         ADRI        -1,B
         CPZR        B               < EST-CE FINI...
         JG          NEWOPW          < NON, AU CARACTERE SUIVANT...
         BSR         RETIQ           < OUI, TEST DU SYMBOLE... (RESULAT
                                     < DANS LE REGISTRE A...)
         LXI         3
NEWOPX:  EQU         $
         STZ         &ASYMB          < RAZ DE LA ZONE 'SYMB'.
         JDX         NEWOPX
         PLR         X,Y,B
         JMP         MEWOPA          < VERS LE TEST DES SOUS-FONCTIONS.
MEWOPB:  JMP         NEWOPT
NEWOPU:  JMP         NEWOPV
<
< MASQUES ET VALEURS :
<
NEWOPN:  EQU         $               < DEFINITION DU MASQUE COURANT.
         LA          SOM
         STA         FLOMAS          < SAVE LE MASQUE COURANT.
         LAI         'FF
         ANDR        A,Y             < Y=OCTET DROIT DE 'VALEUR'.
         JMP         NEWOPP          < VERS SOM <-- 0+(OCTET DROIT DE Y).
NEWOPO:  EQU         $
         PSR         X
         LA          FLOMAS          < A=MASQUE COURANT.
         LXI         16              < POUR TESTER LES 16 BITS DE (A).
NEWOPQ:  EQU         $
         TBT         32-1,X          < TEST DE (A) PAR LA DROITE.
         JC          NEWOPR          < ON S'ARRETE SUR LE PREMIER A '1'.
         JDX         NEWOPQ          < PAS ENCORE TROUVE...
NEWOPR:  EQU         $
         ADRI        -16,X
         NGR         X,X             < X=POSITION DU MASQUE A DROITE.
         SLRS        0,X             < CADRAGE A DROITE DU MASQUE.
         EORI        'FFFF           < ET ON PREND SON COMPLEMENT.
         AND         SOM             < TEST DE LA VALEUR PAR RAPPORT
                                     < AU MASQUE COURANT.
         JANE        NEWOPS          < ERREUR, LA VALEUR NE TIENT PAS DANS
                                     < LE MASQUE COURANT.
         LAI         'FF
         ANDR        A,Y             < ON NE CONSERVE QUE L'OCTET DROIT
                                     < DE LA VALEUR (Y).
         LA          SOM
         SLLS        0,X             < CADRAGE DE LA VALEUR SUIVANT LE MASQUE.
         OR          FLOVAL          < CUMUL PAR UN 'OU'.
         STA         FLOVAL          < 'A' CONTIENT LE NOUVEAU CUMUL.
         PLR         X
         JMP         NEWOPT          < VERS : SOM <-- NOUVEAU CUMUL+OCTET
                                     < DROIT DE Y.
NEWOPS:  EQU         $
         LAI         2
         BR          MERR
<
< RECHERCHE D'UN CARACTERE :
<
NEWOPK:  EQU         $
         PSR         X
         LA          SOM
         LBI         'FF
         ANDR        A,B             < B=INDEX DU 1ER OCTET A NE PAS TESTER.
         LBY         SOM
         LR          A,X             < X=INDEX DU 1ER OCTET A TESTER.
         ADRI        LXZACQ,X        < POUR ATTEINDRE ZZACQ,
         ADRI        LXZACQ,B        < DE MEME...
         LAI         'FF
         ANDR        Y,A             < A=CARACTERE RECHERCHE...
NEWOPL:  EQU         $
         CPR         B,X             < EST-CE FINI ???
         JGE         NEWOPM          < OUI, (X)>=(B), PAS TROUVE...
         CPBY        &AZACQ          < NON...
         JE          NEWOPM          < OK, ON L'A TROUVE...
         ADRI        1,X             < NON, AU SUIVANT...
         JMP         NEWOPL
NEWOPM:  EQU         $
         LYI         0
         LR          X,A
         ADRI        -LXZACQ,A       < FUTURE VALEUR DE 'SOM'.
         PLR         X
         JMP         C125            < POUR FAIRE SOM <-- (INDEX CARACTERE).
<
< MOUVEMENT DE CHAINE DANS 'CAR' :
<
NEWOPH:  EQU         $
         PSR         X
         LAI         '00FF
         ANDR        A,Y             < Y=LONGUEUR DE LA CHAINE A DEPLACER.
         LA          SOM
         LBI         0
         SCLD        8               < B=INDEX ZONE EMETTRICE,
         SWBR        A,X             < X=INDEX ZONE RECEPTRICE.
         ADRI        LXZACQ,X        < POUR ATTEINDRE ZZACQ,
         ADRI        LXZACQ,B        < DE MEME...
NEWOPI:  EQU         $
         CPZR        Y               < FINI ???
         JE          NEWOPJ          < OUI, A NOTER (Y)=0...
         XR          B,X             < NON, ON DEEPLACE...
         LBY         &AZACQ          < ACCES A L'EMETTEUR...
         XR          B,X
         STBY        &AZACQ          < ET ENVOI AU RECEPTEUR...
         ADRI        1,X             < PROGRESSION
         ADRI        1,B             < DES INDEX,
         ADRI        -1,Y            < ET DECOMPTAGE.
         JMP         NEWOPI          < AU SUIVANT...
NEWOPJ:  EQU         $
         PLR         X
NEWOPP:  EQU         $
         LAI         0               < POUR FAIRE SOM <-- 0.
NEWOPT:  EQU         $
         JMP         C125
NEWOP2:  EQU         $
         LA          SIGN1           < DISCRIMINATION DE L'OPERATEUR...
         JAE         NEWOP3          < 0 : MULTIPLICATION.
         CPI         1
         JE          NEWOP4          < 1 : DIVISION.
         CPI         "("
         JE          NEWOP5          < ( : .AND.
         CPI         "?"
         JE          NEWOP6          < ? : .OR.
         CPI         ")"
         JE          NEWOP7          < ) : .EOR.
         CPI">"
         JE          NEWOP8          < > : DECALAGE.
         CPI         "="
         JE          NEWOP9          < = : NOMBRE DE DECALAGE.
         ACTD                        < E R R E U R   P R O G R A M M E !!!
<
< .AND.
<
NEWOP5:  EQU         $
         LA          SOM
         ANDR        Y,A
         JMP         C126            < SOM <-- (SOM).AND.(VALEUR)
<
< .OR.
<
NEWOP6:  EQU         $
         LA          SOM
         ORR         Y,A
         JMP         C126            < SOM <-- (SOM).OR.(VALEUR)
<
< .EOR.
<
NEWOP7:  EQU         $
         LA          SOM
         EORR        Y,A
         JMP         C126            < SOM <-- (SOM).EOR.(VALEUR)
<
< DECALAGE :
<
NEWOP8:  EQU         $
         XR          X,Y             < X=(VALEUR)
         LA          SOM
         CPZR        X               < A DROITE OU A GAUCHE ???
         JL          NEWOPA          < A DROITE,
         SLLS        0,X             < A GAUCHE.
         JMP         NEWOPB
NEWOPA:  EQU         $
         NGR         X,X             < CALCUL DE ABS(X).
         SLRS        0,X             < DECALAGE A DROITE.
         NGR         X,X             < RESTAURE X.
NEWOPB:  EQU         $
         XR          X,Y             < RESTAURE X ET Y.
         JMP         C126            < SOM <-- (SOM) DECALE DE (VALEUR).
<
< GESTION DE CAR(SOM) :
<
NEWOPE:  EQU         $
NEWOPG:  EQU         $               < STORE 'CAR'.
         LAI         'FF
         ANDR        Y,A             < CARACTERE A METTRE EN CAR(SOM).
         LB          SOM             < INDEX DE RANGEMENT.
         XR          B,X
         ADRI        LXZACQ,X        < PASSAGE A ZZACQ,
         STBY        &AZACQ          < MISE DANS ZZACQ.
         LYI         0               < AFIN DE FAIRE : SOM <-- CAR(SOM)+0.
         JMP         C403
NEWOPF:  EQU         $               < GET 'CAR'.
         LAI         'FF
         ANDR        A,Y             < VALEUR <-- (VALEUR).AND.'00FF.
         LB          SOM             < INDEX DE LA CHAINE DE CARACTERES.
         XR          B,X
         ADRI        LXZACQ,X        < PASSAGE A ZZACQ,
         LBY         &AZACQ          < ACCES A ZZACQ.
C403:    EQU         $
         ADRI        -LXZACQ,X       < RETOUR A ZACQ.
         XR          B,X
         JMP         C125            < VERS SOM <-- CAR(SOM)+(VALEUR),
                                     < AVEC (A)=CAR(SOM), (Y)=(VALEUR).
<
< CALCUL D'UN NOMBRE DE DECALAGES A FAIRE OU GESTION DE 'CAR' :
<
NEWOP9:  EQU         $
         SWBR        Y,A
         ANDI        'FF             < POUR CHOISIR LA FONCTION...
         CPI         'F7
         JE          NEWOPU          < VERS LE TEST 'SYMBOLE'...
         CPI         'F5
         JE          NEWOPN          < DEFINITION DU MASQUE COURANT.
         CPI         'F6
         JE          NEWOPO          < CADRAGE D'UNE VALEUR DANS
                                     < LE MASQUE COURANT.
         CPI         'F1
         JE          NEWOPF          < GET 'CAR'.
         CPI         'F2
         JE          NEWOPG          < STORE 'CAR'.
         CPI         'F3
         JE          NEWOPH          < MOVE 'CAR'.
         CPI         'F4
         JE          NEWOPK          < RECHERCHE CARACTERE.
         CPI         'F0
         JGE         EDALEX          < ERREUR...
         PSR         X
         LXI         16              < POUR TESTER LES 16 BITS.
         LA          SOM
NEWOPC:  EQU         $
         TBT         32-1,X          < TEST DU BIT (X)-1 DANS SOM.
         JC          NEWOPD          < ON S'ARRETE SUR LE 1ER '1'.
         JDX         NEWOPC          < BIT PRECEDENT...
NEWOPD:  EQU         $
         ADRI        -16,X
         NGR         X,X
         LR          X,A             < CE NOMBRE DE DECALAGE DEVIENT
                                     < LE SOM PROVISOIRE,
         PLR         X
         JMP         C125            < VERS SOM <-- (SOM)+(VALEUR)
<
<        P O I N T   D ' E N T R E E  :
<
PCALEX:  EQU         $               < CALCUL D'EXPRESSION.
         STZ         FLOMAS          < INITIALISATIONS DU MASQUE ET DU
         STZ         FLOVAL          < CUMUL COURANT, EN PRIANT DIEU POUR
                                     < QU'ON N'AIT PAS SIMULTANEMENT DES
                                     < MASQUES ET DU FLOTTANT !!! MAIS POUR
                                     < CELA, IL FAUDRAIT ETRE VICIEUX...
         IF          ORDI-"S",XWOR%,,XWOR%
         STZ         FLORES
XWOR%:   VAL         0
         LXI         LCALEX
         STZ         &INCALE
         JDX         $-1
C123:    EQU         $
         BSR         MACQ
         JAL         EEALEX
         STZ         INDICA
         JAE         TYPLET
         CPI         2
         JE          TIPCOM
         CPI         1
         JE          TYPFIN
         LY          VALEUR          < TERME ABSOLU.
C124:    EQU         $
         IC          INBRE
TYPABS:  EQU         $
         LA          SOM
         CPZ         SIGNE
         JE          MULTIP          < MULTIPLICATION OU DIVISION.
         JG          C125
         NGR         Y,Y
C125:    EQU         $
         ADR         Y,A
C126:    EQU         $
         STA         SOM
SUIMUL:  EQU         $
         LA          CARLU
         CPI         '20
         JE          C134            < 'ESPACE'.
         CPI         '2C
         JE          C134            < 'VIRGULE'.
         JMP         C123
MULTIP:  EQU         $
         CPZ         INDICA
         JNE         EEALEX          < MULTIPLICATEUR OU DIVISEUR
                                     < NON ABSOLU.
         IF          ORDI-"S",XWOR%,,XWOR%
         LRM         A
         WORD        'FA02
         CPR         A,Y             < EST-CE CONVERSION TRANSLATABLE -->
                                     < ABSOLU ???
         JE          NEWOP2          < OUI, ALORS LA PREMIERE PARTIE PEUT
                                     < ETRE TRANSLATABLE...
XWOR%:   VAL         0
         CPZ         SIGMA
         JNE         EEALEX          < MULTIPLICANDE OU DIVIDENDE
                                     < NON ABSOLU.
         STY         VALEUR
         JMP         NEWOP2          < VERS LA DISCRIMINATION DES
                                     < OPERATEURS.
<
< MULTIPLICATION :
<
NEWOP3:  EQU         $
         LA          SOM
         MP          VALEUR
         JAE         C127
         CPI         -1
GEALEX:  JNE         EEALEX          < RESULTAT NON SUR 16 BITS.
C127:    EQU         $
         STB         SOM
         JMP         SUIMUL
<
< DIVISION :
<
NEWOP4:  EQU         $
         LA          SOM
DIVIS:   EQU         $
         SARD        16              < B=POIDS FAIBLES.
         DV          VALEUR
         JV          EEALEX          < DIVISION IMPOSSIBLE (/0) !!!
         IF          ORDI-"S",XWOR%,,XWOR%
INDYN:   EQU         $               < ZONE D'INSTRUCTIONS DYNAMIQUES :
         CPZR        B               < CAS DE 'TRN'...
         JNE         GEALEX          < ERREUR, SI RESTE#0 !!!
XWOR%1:  VAL         '0000000@@@@
FEALEX:  EQU         ZERO+XWOR%1     < POUR TRANSMETTRE LE CODE DU 'JNE' A
                                     < LA SEQUENCE DE 'TRN'...
         $EQU        INDYN
         STB         FLORES          < MEMORISATION DU RESTE COURANT : C'EST
         NOP                         < L'OPTION IMPLICITE ET 'NTRN'...
XWOR%:   VAL         0
         JMP         C126
TYPLET:  EQU         $               < SUITE DE LETTRES.
         BSR         RETIQ
         JAE         C132            < LE SYMBOLE N'APPARTIENT PAS
                                     < A TSYMB.
         LXI         1
         LY          &ATSYMB         < MOT VALEUR.
         ANDI        'FFFC
         JAE         C138            < ETIQUETTE DE LA PHRASE EN COURS
         TBT         8
         JC          NONDEF          < NON DEFINI.
         TBT         9
         JC          C124            < SYMBOLE ABSOLU.
         CPI         4
         JNE         C128
         LX          VALDIR          < 'OFF'.
         ADRI        -8,X
         CPZR        X
         JNE         EEALEX          < NON UTILISE AVEC 'USE'.
C128:    EQU         $
         SLRD        8
         XR          A,B             < B=NUMERO DE SECTION.
COMAS:   EQU         $
         CPZ         RANG
         JNE         PAPREM
         TBT         3               < 1ER ELEMENT.
         JNC         C129
         DC          INDSEC          < SYMBOLE APPARTIENT A 'DSEC'.
C129:    EQU         $
         STB         NSEC            < NSEC=NUMERO DE SECTION.
PRESER:  EQU         $
         SCRD        8
         STA         COMDE           < COMDE=MOT DE COMMANDE.
         LA          RANG            < SAUVEGARDE RANG DE L'ELEMENT.
         STA         RANG1
         CPZ         SIGNE
REPAS:   EQU         $
         JL          ECALEX
C130:    EQU         $
         LA          SIGNE
         AD          SIGMA
         STA         SIGMA
         IC          INDICA
         IC          RANG
         JMP         C124
<
< SUITE DE L'IDENTIFICATION DES FONCTIONS :
<
EDALEX:  EQU         $
         CPI         'F8
         JE          NEVOP1          < ACCES A 'INDO'.
         CPI         'F9
         JE          NEVOP2          < ACCES A 'SINDO'.
         JG          NEVOP4          < FONCTIONS SUPERIEURES A 'F9.
EEALEX:  JMP         ECALEX          < ERREUR, FONCTION NON RECONNUE...
TIPCOM:  JMP         TYPCOM          < RELAI...
<
< ACCES AU COMPTE D'ITERATIONS SUR 'EOT' :
<
NEVOP2:  EQU         $
         LAI         'FF
         ANDR        Y,A             < A=2EME OCTET DE 'VALEUR'.
         PSR         C
         LY          COM1
         LR          Y,C             < POUR BASER 'SINDO'...
         USE         C,COMM1
         AD          SINDO
         PLR         C
         USE         C
         JMP         NEVOP3          < VERS LA SUITE DU CALCUL...
<
< ACCES AU COMPTE D'ITERATIONS SUR INSTRUCTIONS AUTRES QUE 'EOT' :
<
NEVOP1:  EQU         $
         LAI         'FF
         ANDR        Y,A             < A=2EME OCTET DE 'VALEUR'.
         AD          INDO
NEVOP3:  EQU         $
         AD          SOM             < CUMUL...
NEVOP8:  EQU         $
         JMP         C126            < VERS LA SORTIE...
PAPREM:  EQU         $               < AUTRES ELEMENTS.
         TBT         3
         JC          C131            < APPARTIENT A 'DSEC'.
         CPZ         INDSEC          < MELANGES INTERDIT SI NEGATIF.
         JMP         C130            < 'ASSYS' : MELANGES AUTORISES !!!
C131:    EQU         $
         LA          NSEC
         CPR         A,B
         JMP         C130
C132:    EQU         $
         BSR         INSET
         LBI         1
         BSR         IUSY
NONDEF:  EQU         $               < NON DEFINI.
         LA          NIVSYM
         LXI         0
         LB          &ATSYMB
         CP          NETIQ
         JE          TYPCOM          < ETIQUETTE DE LA PHRASE EN COURS.
         STA         NIV             < SAUVEGARDES.
         STB         MOT1
         STY         MOT2
         STB         &ATSY11
         LXI         1
         LX          &ATSYMB
         STX         &ATSY12
         CPZ         RANG
         JNE         ECALEX          < CE N'EST PAS LE 1ER ELEMENT.
         TBT         26
         JNC         C133
         IC          INDSEC          < REFERENCE EXTERNE.
         BSR         SPTAS           < MEMORISATION SYMBOLE DANS BUF.
C133:    EQU         $
         XR          A,B
         LYI         0
         JMP         C129
TYPFIN:  EQU         $               < FIN DE PHRASE.
         DC          NACQ
C134:    EQU         $
         LA          SIGMA
         SLRS        1
         JANE        ECALEX          < SIGMA DIFFERENT DE 0 ET 1.
         JC          C137
         CPZ         NIV             < SIGMA=0
         JNE         ECALEX
C135:    EQU         $
         LA          SIGMA
C136:    EQU         $
         RSR
ECALEX:  EQU         $               < EXPRESSION INCORRECTE.
         LAI         2
         BR          MERR
C137:    EQU         $
         CPZ         RANG1
         JNE         ECALEX          < ELEMENT TRANSLATABLE NON EN
                                     < TETE DE L'EXPRESSION.
         CPZ         INDSEC          < SIGMA=1.
         JLE         C135
         LAI         -1
         STA         SIGMA
         JMP         C136
TYPCOM:  LAI         0               < COMPTEZUR D'ASSEMBLAGE.
C138:    EQU         $
         CPZ         SITUAT
         JLE         C139
         SBT         3               < SECTION 'DSEC' EN COURS.
C139:    EQU         $
         JGE         C140
         SBT         4               < SECTION 'PROG' EN COURS.
C140:    EQU         $
         LB          SECOUR
         LY          PAS
         JMP         COMAS
<
< SUITE DES FONCTIONS :
<
NEVOP4:  EQU         $
         CPI         'FA
         JE          NEVOP5          < CONVERSIONS ASCI <--> HEXA.
         CPI         'FB
         JE          NEVOP9          < EXECUTION D'UNE INSTRUCTION.
         CPI         'FC
         JE          NEVOPA          < VERS L'INTERPRETATION SOUS-PROGRAMME.
         IF          ORDI-"S",XWOR%,,XWOR%
         CPI         'FD
         JE          NEVOPB          < DERNIER RESTE DE DIVISION.
         CPI         'FE
         JE          NEVOPC          < PUSH/PULL.
         CPI         'FF
         JE          NEVOPE          < SIGNE D'UNE EXPRESSION.
XWOR%:   VAL         0
         JMP         ECALEX          < ERREUR...
<
< CONVERSIONS ASCI <--> HEXA :
<
NEVOP5:  EQU         $
         LR          Y,A             < A=FONCTION DEMANDEE,
         ANDI        '00FF           < A=SOUS-FONCTION DEMANDEE.
         JAE         NEVOP6          < CONVERSION BINAIRE --> ASCI.
         IF          ORDI-"S",XWOR%,,XWOR%
         CPI         2
         JGE         CONTA           < PEUT-ETRE TRANSLATABLE-ABSOLU ???
XWOR%:   VAL         0
<
< CONVERSION ASCI --> BINAIRE (SUR 1 CHIFFRE) :
<
         LA          SOM             < VALEUR A CONVERTIR.
         ADRI        -"0",A          < CONVERSION PRIMAIRE.
         JAL         ECALEX          < ERREUR...
         CPI         9               < CHIFFRE ???
         JLE         NEVOP7          < OUI...
         ADRI        -"A"+"9"+1,A    < LETTRE PEUT-ETRE...
         CPI         'A              < VALIDATION.
         JL          ECALEX          < ERREUR...
         CPI         'F              < VALIDATION.
         JG          ECALEX          < ERREUR...
NEVOP7:  EQU         $
         JMP         NEVOP8          < OK, (A) EST LA VALEUR CONVERTIE.
<
< CONVERSION BINAIRE --> ASCI (2 CHIFFRES) :
<
NEVOP6:  EQU         $
         LA          SOM
         SLRD        8               < L'OCTET0 DE B RECOIT LES 2 CHIFFRES.
         JANE        ECALEX          < ERREUR, PLUS DE 2 CHIFFRES.
         PSR         X
         LX          ZTR             < SAVE ZTR...
         BSR         HEXA2           < CONVERSION DANS A.
         STX         ZTR             < RESTAURE ZTR...
         PLR         X
         JMP         NEVOP8          < OK, (A) EST LA VALEUR CONVERTIE.
<
< EXECUTION D'UNE INSTRUCTION SANS VERIFICATION :
<
NEVOP9:  EQU         $
         PSR         W
         LAI         'FF
         ANDR        A,Y             < Y <-- DEUXIEME OCTET DE (VALEUR).
         LBI         0               < POUR SAVOIR SI 'B',
         LXI         0               < OU 'X' SONT MODIFIES.
LRPW:    LRP         W
         LA          FLOMAS          < A=INSTRUCTION PRESUMEE.
         WORD        STA4W           < MISE EN PLACE DE L'INSTRUCTION.
         LA          SOM             < A <-- (SOM).
JMPDOL:  JMP         $               < I N S T R U C T I O N   VARIABLE...
ASTA4W:  STA         JMPDOL-LRPW,W   < INSTRUCTION VARIABLE.
STA4W:   EQU         ZERO+'00@@@@    < RECUPERATION DU CODE DU 'STA'.
         $EQU        ASTA4W          < QUE L'ON ANNULE...
         EORR        B,A             < ON SUPERPOSE 'B' ET 'X' A 'A', SUPPOSANT
         EORR        X,A             < QU'UN SEUL D'ENTRE-EUX A ETE MODIFIE.
         PLR         W
         JMP         NEVOP8          < OK, (A) EST PRESUME BON.
<
< EXECUTION D'UN SOUS-PROGRAMME GENERE DYNAMIQUEMENT
< EN CARTE DYNAMIQUE PAR L'UTILISATEUR :
<
NEVOPA:  EQU         $
         LXI         'FF
         ANDR        Y,X             < X=INDEX DU POINT D'ENTREE DU S/P
                                     < DANS LA CARTE DYNAMIQUE,
         ADRI        LXZACQ/2,X      < ET TRANSLATION D'ACCES A LA
                                     < CARTE DYNAMIQUE.
         LAD         &AZACQ          < A=ADRESSE DU POINT D'ENTREE,
         STA         'FF80,C         < QUE L'ON MET DANS LE PREMIER DU
                                     < COMON RESERVE A L'OPERATEUR FLOTTANT.
         LA          SOM             < A=ARGUMENT DU SOUS-PROGRAMME.
         BSR         'FF80,C         < ET ON Y VA...
NEVOQ8:  JMP         NEVOP8          < OK, (A)=RESULTAT DU S/P.
         IF          ORDI-"S",XWOR%,,XWOR%
<
< DERNIER RESTE DE DIVISION ENTIERE :
<
NEVOPB:  EQU         $
         LAI         'FF
         ANDR        Y,A             < A=OCTET SUIVANT LA FONCTION.
         AD          FLORES          < AUQUEL ON AJOUTE LE RESTE COURANT OU 0.
NEVOQ3:  JMP         NEVOP3          < VERS : SOM <-- (A)+(SOM).
<
< PUSH/PULL :
<
NEVOPC:  EQU         $
         LR          Y,A
         ANDI        '00FF           < A=FONCTION DEMANDEE.
         LRM         Y
         WORD        PUSPUL          < Y=@DE LA PILE PUSH/PULL.
         JAE         NEVOPD          < UN 'PUSH' (0) EST DEMANDE.
         CPI         2               < EST-CE UN 'PULL' ???
         LR          A,B             < SAVE LE CODE 1/2 DU 'PULL'.
         JG          ECALEX          < NON, ERREUR...
         PULL                        < EXECUTION D'UN 'PULL' DANS 'A'.
         JV          ECALEX          < ERREUR, LA PILE EST VIDE...
         XR          A,B
         CPI         1               < EST-CE UN 'PULL' NORMAL ???
         XR          A,B
         JE          NEVOQ3          < OUI, VERS SOM <-- (SOM)+(A).
         LR          A,Y             < NON, C'EST UN 'PULL-EXU', ALORS
                                     < LA VALEUR DEPILEE DEVIENT LA
                                     < NOUVELLE OPERANDE DROITE DE "=".
         LRM         A
         WORD        AAEXU
AEXU:    ADRP        A               < QUE NE FAUT-IL PAS FAIRE POUR
                                     < EXECUTER UN GRAND SAUT...
XWOR%1:  VAL         NEWOP9-AEXU     < AMPLITUDE DU SAUT...
AAEXU:   EQU         ZERO+XWOR%1     < CAR REFERENCE EN AVANT...
NEVOPD:  EQU         $
         LA          SOM
         PUSH                        < EXECUTION DE 'PUSH' (SOM).
         JV          ECALEX          < ERREUR, LA PILE EST PLEINE...
         JMP         NEVOQ8          < OK, VERS SOM <-- (SOM).
<
< SIGNE D'UNE EXPRESSION :
<
NEVOPE:  EQU         $
         LAI         'FF
         ANDR        Y,A             < A=DEUXIEME OCTET DE (VALEUR).
         CPZ         SOM             < TEST DU SIGNE...
         SBCR        A               < -1 SI (SOM)<0.
         CPZ         SOM             < RESTEST DU SIGNE A CAUSE DE 'SBCR'.
         JLE         NEVOQ8          < VERS SOM <-- (A).
         ADRI        1,A             < +1 SI (SOM)>0.
         JMP         NEVOQ8          < VERS SOM <-- (A).
         IF          ORDI-"S",XWOR%,,XWOR%
<
< CONVERSIONS TRANSLATABLE-ABSOLUE :
<
CONTA:   EQU         $
         STZ         SIGMA           < SIGMA=0 : ABSOLU A PRIORI...
         JE          CONTA1          < 2 ==> ABSOLU...
         CPI         3
         JG          ECALEX          < ERREUR DE SOUS-FONCTION...
         IC          SIGMA           < 3 ==> SIGMA=1 : TRANSLATABLE...
CONTA1:  EQU         $
         LAI         '0008
         STA         COMDE           < "DEJA CHAINE"...
         LA          SECOUR
         STA         NSEC
         STBY        COMDE           < NUMERO DE SECTION...
         LA          SOM
         JMP         NEVOQ8          < VERS SOM <-- (SOM)...
XWOR%:   VAL         0
         IF          ORDI-"T",XWOR%,,XWOR%
CONTA:   EQU         ECALEX          < ERREUR...
XWOR%:   VAL         0
XWOR%:   VAL         0
         PAGE
<
<
<        M O D U L E   D ' A C Q U I S I T I O N  :
<
<
<
< TRAITEMENT DES NOUVEAUX OPERATEURS BINAIRES :
<
NEWOP1:  EQU         $
         STA         SIGN1           < SIGN1=CODE ASCI DE L'OPERATEUR.
         LAI         -2
         STA         SIGNE           < SIGNE=-2 : * / ! ? @ > =
         JMP         NEWCAR          < AU CARACTERE SUIVANT.
<
< POINT D'ENTREE :
<
PMACQ:   EQU         $
         LXI         LMACQ
         STZ         &INMACQ
         JDX         $-1
         LYI         -2
PMACQ1:  EQU         $
         LX          NACQ
         LR          X,A
         CPI         80              < FIN DE CARTE?
         JL          C2200
         LAI         0               < AFIN D'ALLER A 'FINPH'...
         JMP         PHINPH
C2200:   EQU         $
         LBY         &AZACQ
C2201:   EQU         $
         STA         CARLU
         CPZ         ETAT
         JNE         APRES
         CPI         "("
         JE          NEWOP1          < .AND.
         CPI         "?"
         JE          NEWOP1          < .OR.
         CPI         ")"
         JE          NEWOP1          < .EOR.
         CPI">"
         JE          NEWOP1          < DECALAGE
         CPI         "="
         JE          NEWOP1          < NBRE DE DECALAGES
         CPI         '3B             < TEST ';'.
         JE          POIVRE          < POINT-VIRGULE RECONNU.
         CPI         '26             < TEST '&'.
         JE          INDIR           < CARACTERE D'INDIRECTION RECONNU.
         CPI         '27             < TEST '''
         JE          HEXA            < INDICATIF NBRE HEXA RECONNU.
         CPI         '24             < TEST DU "$" ???
         JE          COMPAS          < COMPTEUR D'ASSEMBLAGE RECONNU.
         CPI         '23             < TEST '#'.
         JE          COMUT
         CPI         '2C             < TEST ','.
         JE          FNBR1           < OMISSION DU CHIFFRE 0.
         CPI         '2F             < TEST DU '/'.
         JE          SLASH           < DIVISION RECONNUE.
APRES:   EQU         $
         SBT         8
         CPI         '8D             < TEST R/C.
         JE          C141            < R / C RECONNU.
         ANDI        '3F
C141:    EQU         $
         LR          A,B
         LXI         LTABTY
C142:    EQU         $
         LBY         &ATABLG
         SBR         B,A
         JAG         C143
         JDX         C142
C143:    EQU         $
         LBY         &ATABTY
         AD          ETAT
PHINPH:  EQU         $
         CPI         25
         LR          A,X
         LA          CARLU
         JG          CCHAIN
         BR          &ATARUP
POIVRE:  EQU         $               < POINT-VIRGULE.
         LA          VALDIR
         CPI         22
         JE          C144            < SUR 'WORD'.
         CPI         20
         JNE         EMACQ
C144:    EQU         $
         IC          PVIR            < OU SUR 'BYTE'.
         LA          CARLU
         JMP         APRES
INDIR:   EQU         $               < INDIRECTION RECONNU.
         CPZ         NLIG
         JNE         EMACQ
         ADRI        1,X
         STX         &KSTOR3
         LA          BINARY
         SBT         2
         STA         BINARY
         JMP         NEWCAR
DECIM:   EQU         $               < DEBUT NBRE DECIMAL.
         ANDI        'F
         STA         VALEUR
         LAI         10
C145:    EQU         $
         LBI         16
C146:    EQU         $
         STA         CSTE
C147:    EQU         $
         STB         ETAT
NEWCAR:  EQU         $
         IC          NACQ
         JMP         PMACQ1
HEXA:    EQU         $               < DEBUT NBRE HEXADECIMAL.
         IC          INDHEX
         LAI         16
         JMP         C145
CNBRE:   EQU         $               < CONTINUATION D'UN NBRE.
         ANDI        'F
C148:    EQU         $
         LR          A,X
         LA          CSTE
         CPI         10
         LA          VALEUR
         JNE         C149
         CP          M3277
         JGE         EMACQ
C149:    EQU         $
         MP          CSTE
         JANE        EMACQ
         ADR         X,B
         STB         VALEUR
         JNV         NEWCAR
LIMDEC:  EQU         $               < TEST LIMITE SI DECIMAL.
         SLLD        19
         JANE        EMACQ           < LIMITE (32.768) DEPASSEE.
         CPZ         SIGNE
         JGE         EMACQ           < SIGNE PLUS.
         JMP         NEWCAR
CNBR1:   EQU         $               < CONTINUATION NBRE HEXA.
         CPZ         INDHEX
         JE          EMACQ
         ANDI        '1F
         JAE         EMACQ           < CAS DU 'A-ROND'...
         CPI         6
         JG          EMACQ
         ADRI        9,A
         JMP         C148
SUILT1:  EQU         $               < CHIFFRE DANS SUITE DE LETTRES.
         IC          INDICA
SUILT:   EQU         $               < SUITE DE LETTRES.
         LX          LG
         ADRI        2,X
         LBI         8
         CPR         X,B
         JE          EMACQ
         STBY        &ASYMB
         ANDI        '1F
         LR          A,B
         SLLD        26
         ADRI        -2,X
         CPZR        X
         JE          C150
         SLRD        5
         JDX         $-1
C150:    EQU         $
         OR          COND
         STA         COND
         LA          COND+1
         ORR         A,B
         STB         COND+1
         IC          LG
         LBI         8
         JMP         C147
SLASH:   EQU         $
         IC          SIGN1
         LAI         2
CSIGNE:  EQU         $               < SIGNE.
         CPZ         SIGNE
         JNE         EMACQ
         ANDI        3
         ADRI        -4,A
         STA         SIGNE
         JMP         NEWCAR
EXCLAM:  CPI         '8D
         JE          EMACQ
CCHAIN:  EQU         $
         CPZ         INDASC
         JNE         NEWCAR          < DIRECTIVES 'ASCI' ET 'IDP'.
         JMP         C148            < ELEMENT ABSOLU.
FNBRE:   EQU         $               < FIN D'UN NBRE.
         DC          NACQ
         JMP         FNBR1
FSUILT:  EQU         $               < FIN D'UNE SUITE DE LETTRES.
         DC          NACQ
         JMP         FSUIL1
CHAIN:   EQU         $               < DEBUT CAHINE DE CARACTERES.
         LA          NACQ
         STA         NACQ1
         LAI         0
         SBT         7               < A=256
         LBI         24
         JMP         C146
FCHAIN:  EQU         $
         LA          INDASC          < Y=4 : CHAINE DE CARACTERES.
         ADR         A,Y
FNBR1:   EQU         $
         ADRI        1,Y             < Y=3 : ELEMENT ABSOLU.
COMPAS:  EQU         $
         ADRI        1,Y             < Y=2 : $.
FINPH:   EQU         $
         ADRI        1,Y             < Y=1 : FIN DE PHRASE.
FSUIL1:  EQU         $
         ADRI        1,Y             < Y=0 : SUITE DE LETTRES.
COMUT:   EQU         $
         ADRI        1,Y             < Y=-1 : #.
         IF          ORDI-"S",XWOR%,,XWOR%
         JMP         ETIQX
ETIQ:    EQU         $
         LX          NACQ
         ADRI        1,X
         LBY         &AZACQ          < A=CARACTERE COURANT,
         STZ         VALEQU          < REDEFINITION A PRIORI...
         CPI         ":"             < EST-CE UN DEUXIEME ":" ???
         JNE         ETIQX           < NON...
         IC          VALEQU          < OUI, PAS DE REDEFINITION POSSIBLE,
         IC          NACQ            < ET ON LE SAUTE...
ETIQX:   EQU         $
XWOR%:   VAL         0
         IF          ORDI-"T",XWOR%,,XWOR%
ETIQ:    EQU         $
XWOR%:   VAL         0
         LA          LG              < Y=-2 : ETIQUETTE.
         ADRI        1,A
         SLRS        1
         STA         LG
         IC          NACQ
         CPZ         SIGNE
         JE          C151
         IC          SIGNE
C151:    EQU         $
         IC          SIGNE           < SIGNE=1(+),0,-1(-).
         LR          Y,A
         RSR
EMACQ:   EQU         $               < ERREUR DE SYNTAXE.
         LAI         1
         BR          MERR
         PAGE
<
<
<        INSERTION D'UN SYMBOLE
<        PARAM : LG,SYMBOL
<        RESUL : A=MOT DE COMMANDE
<                NIVSYM=@ VIRTUELLE
<                ZONSYM= DESCRIPTION DU SYMBOLE
<
<
PINSET:  EQU         $
         LY          LG              < RENDRE LA LONGUEUR ACCESSIBLE
         LX          NDEP            < RELAI VERS TABLE DEPLACEMENTS
         LAD         &ATDEP
         LR          A,X
         PSR         C               < CHANGEMENT DE BASE
         LA          COM1
         LR          A,C
         USE         C,COMM1
         STY         LG2
         STX         ADRDEP
         IF          XXXSGN-0,XWOR%,,XWOR%
         BSR         CPSY            < COMPACTER LE SYMBOLE
XWOR%:   VAL         0
         LXI         -1              < INDEX DESC. PAGES
INSET1:  EQU         $
         ADRI        1,X             < RECHERCHE PAGE NON PLEINE
         LA          NBPAGE
         CPR         A,X             < AUTRE PAGE?
         JG          INSET9
         LA          &ADTBPG         < OUI - PLEINE?
         TBT         1
         JNC         INSET1
         SLRS        12              < NON - LONGUEUR CORRECTE?
         IF          XXXSGN-1,XWOR%,,XWOR%
         ANDI        3
         CP          LG2
         JNE         INSET1
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
         EOR         LG3
         ANDI        3
         JANE        INSET1
XWOR%:   VAL         0
INSET2:  EQU         $
         LA          &ADTBPG         < @ MEMOIRE PAGE
         AND         MASKRP
         SLLS        1
         STA         RESERY
         TBT         7               < PAGE TROUVEE - RESIDENTE?
         JNC         INSET3
         STX         RESERV          < NON - ECRIRE DERNIERE
         LX          NBPGRS
         BSR         ECRP
         LX          NBPGRS          < LIRE LA PAGE
         BSR         LIRP
         LX          RESERV
INSET3:  EQU         $
         BSR         TTPL            < AMENER EN TETE DE PILE
         BSR         CALH            < CALCUL HASH
         LA          RESERY          < PLACE OCCUPEE?
         ADR         A,X
         CPZ         &ADPAGE
         JNE         INSET6
INSET4:  EQU         $
         STX         RESERV          < NON- LE PLACER
INSET8:  EQU         $
         IF          XXXSGN-1,XWOR%,,XWOR%
         LA          LG2             < PLACEMENT DESC. SYMBOLE
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
         LA          LG3             < PLACEMENT DESC. SYMBOLE
XWOR%:   VAL         0
         STA         &ADPAGE
         ADRI        2,X
         IF          XXXSGN-1,XWOR%,,XWOR%
         LBI         0
INSET5:  EQU         $
         XR          X,B
         LA          &RELAD
         ADRI        1,X
         XR          X,B
         STA         &ADPAGE
         ADRI        1,X
         LR          B,A
         CP          LG2
         JL          INSET5
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
         LA          SYMCOM
         STA         &ADPAGE
         ADRI        1,X
         LA          LG3
         TBT         15
         JNC         INSET5
         LA          SYMCOM+1
         STA         &ADPAGE
INSET5:  EQU         $
XWOR%:   VAL         0
         LX          RESERV          < PLACER DESC. DANS ZONSYM
         LAD         &ADPAGE
         LB          ADDSYM
         IF          XXXSGN-1,XWOR%,,XWOR%
         LXI         5
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
         LXI         2
XWOR%:   VAL         0
         MOVE
         IF          XXXSGN-0,XWOR%,,XWOR%
         LXI         0
         LAD         &RELAD
         ADRI        2,B
         LXI         3
         MOVE
XWOR%:   VAL         0
         LA          RESERV          < NIVSYM=@ VIRTUELLE
         SB          RESERY
         SLLS        7
         LXI         0
         LB          &ADTBPG
         SBT         0+16            < INDICATEUR DE MISE
         STB         &ADTBPG         < A JOUR DE CETTE PAGE !!!
         SCRD        7
         STA         &ANIVSY
         IF          XXXSGN-1,XWOR%,,XWOR%
         LA          LG2             < A=MOT DE COMMANDE
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
         LA          LG3             < A=MOT DE COMMANDE
XWOR%:   VAL         0
         PLR         C
         RSR
INSET6:  EQU         $
         IF          XXXSGN-0,XWOR%,,XWOR%
         BSR         CALH            < LA PLACE EST OCCUPEE
         LA          RESERY          < ON ESSAYE LA DEUXIEME FORMULE
         ADR         A,X
         CPZ         &ADPAGE
         JE          INSET4          < YOUPIE. LA PLACE EST LIBRE
XWOR%:   VAL         0
         LA          LGPAGE          < IL Y A DEBORDEMENT
         AD          RESERY          < TROUVER LA PLACE
         LR          A,X
         LA          &ADPAGE
         AD          RESERY
         STA         RESERV
         IF          XXXSGN-1,XWOR%,,XWOR%
         LA          LG1             < NOUVEAU PT DEBORDEMENT
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
         LB          LG3             < NOUVEAU PT DE DEBORDEMENT
         RBT         16+14
         ADRI        3,B
         LR          B,A
XWOR%:   VAL         0
         AD          &ADPAGE
         STA         &ADPAGE
         IF          XXXSGN-1,XWOR%,,XWOR%
         AD          LG1             < RESTE-T-IL DE LA PLACE?
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
         ADR         B,A
XWOR%:   VAL         0
         CP          LGPAGE
         JLE         INSET7
         STZ         &ADPAGE         < NON -L'INDIQUER
         LXI         0
         LA          &ADTBPG
         RBT         1
         STA         &ADTBPG
INSET7:  EQU         $
         LX          RESERV          < ALLER PLACER SYMBOLE
         JMP         INSET8
INSET9:  EQU         $               < PLUS DE PAGE LIBRE
                                     < IL FAUT EN CREER UNE
         LA          NBPGRS          < PEUT-ON EN CREER UNE RESIDENTE?
         CPI         15
         JL          INSE12
INSE13:  EQU         $
         IC          NBPAGE          < CREER LA PAGE
         LA          NBPAGE
XWOR%:   VAL         XLGPAG=0
XWOR%:   VAL         16-1-XWOR%
         CPI         1>XWOR%-1       < PLUS DE PLACE ???
         JLE         INSE10
         DC          NBPAGE          < ANNULE L'IC...
         PLR         C
         USE         C
         LAI         21
         BR          MERR
         USE         C,COMM1
INSE10:  EQU         $
         LR          A,X             < CONSTRUIRE DESC. PAGE
         IF          XXXSGN-1,XWOR%,,XWOR%
         LA          LG2
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
         LA          LG3
XWOR%:   VAL         0
         SLLS        4
         OR          NBPGRS
         SLLS        1
         LR          A,B             < RESIDENTE?
         LA          NSYMB
         TBT         0
         RBT         0
         STA         NSYMB
         JC          INSE14
         SBT         31
INSE14:  EQU         $
         LR          B,A
         SLLS        7
         OR          NBPAGE
         SBT         0
         SBT         1
         STA         &ADTBPG
         JMP         INSET2
INSE12:  EQU         $               < PAGE RESIDENTE POSSIBLE
         LA          NSYMB           < Y-A-T'IL DE LA PLACE?
         AD          LGPAGE
         ADRI        1,A
         LR          A,X
         LA          ADPAGE
         RBT         0
         ADR         X,A
         CP          ADRDEP
         JL          INSE11
         BSR         PLMM            < NON - AUGMENTER MEMOIRE
         JANE        INSE13
INSE11:  EQU         $
         LA          NBPAGE          < CREER SON NOM
         ADRI        1,A
         SCLS        1
         OR          NSYMB
         SCRS        1
         LR          A,B
         BSR         RCPG
         LA          NSYMB           < CREER LA PAGE RESIDENTE
         STA         RESERV
         AD          LGPAGE
         LR          A,X
         STZ         &ADPAGE
         ADRI        1,A
         STA         NSYMB
         LX          RESERV          < MISE A ZERO
         LAD         &ADPAGE
         ADRI        3,A
         LR          A,B
         ADRI        1,A
         LX          LGPAGE
         ADRI        -3,X
         MOVE
         LX          NSYMB           < PT DE DEBORDEMENT
         ADRI        -1,X
         LA          LGH
         STA         &ADPAGE
         IC          NBPGRS
         LA          NSYMB           < PAGE SERA RESIDENTE
         SBT         0
         STA         NSYMB
         JMP         INSE13
         USE         C
         PAGE
<
<
<        RECHERCHE D'UN SYMBOLE
<        PARAM : LG,SYMBOL
<        RESUL : ABSENT, A=0
<                SINON, A=MOT DE COMMANDE
<                       NIVSYM=@ VIRTUELLE
<                       ZONSYM= DESC. DU SYMBOLE
<
<
PRETIQ:  EQU         $
         LB          LG              < RENDRE LG ACCESSIBLE
         PSR         C               < CHANGER LA BASE
         LA          COM1
         LR          A,C
         USE         C,COMM1
         STB         LG2
         PSR         W,L             < CALCUL DES FORMULES POUR
         EORR        Y               < VERIFIER L'ABSENCE D'UN
         EORR        W               < SYMBOLE PAR TABLE DE BIT
         LXI         0               < CALCUL PAR CARACTERE
RTIQ10:  EQU         $
         LBY         &RELAD
         JAE         RTIQ12          < REDUCTION CARACTERE
         ADRI        -'30,A
         CPI         9
         JLE         RTIQ11
         ADRI        -7,A
RTIQ11:  EQU         $
         LR          A,L             < PRESERVER CARACTERE
         XR          A,Y             < L'INCORPORER DANS 1ERE FORMULE
         MP          ONZE
         ADR         B,Y
         LR          L,A             < RESTAURER CARACTERE
         XR          A,W             < L'INCORPERER DANS 2EME FORMULE
         MP          ONZE
         ADR         B,W
         NGR         W
         ADRI        1,X             < CARACTERE SUIVANT
         LR          X,A
         SLRS        1
         CP          LG2
         JL          RTIQ10
RTIQ12:  EQU         $
         CPZR        Y               < SI LES RESULTATS SONT NEGATIFS,
         JGE         RTIQ13
         NGR         Y
RTIQ13:  EQU         $
         CPZR        W               < LES RENDRE POSITIFS
         JGE         RTIQ14
         NGR         W
RTIQ14:  EQU         $
         LAI         0               < LA 1ERE FORMULE SERT A INDEXER
         LR          Y,B             < UN BIT DANS LA 1ERE TABLE
         DV          DEUX41          < SI CE BIT EST A ZERO, LE
         LAI         0               < SYMBOLE EST ABSENT. SINON,
         SCRD        4               < IL PEUT ETRE PRESENT
         SLRS        12
         XR          A,B
         LYI         0
         LR          A,X
         LA          &ATBBT1
         XR          X,B
         TBT         0,X
         ADCR        Y
         SBT         0,X
         XR          X,B
         STA         &ATBBT1
         LAI         0               < IL FAUT TRAVAILLER SUR LES 2
         LR          W,B             < TABLES. ON APPLIQUE
         DV          DEUX41          < LA 2EME FORMULE SUR LA 2EME
         LAI         0               < TABLE DE LA MEME FACON
         SCRD        4
         SLRS        12
         XR          A,B
         LR          A,X
         LA          &ATBBT2
         XR          X,B
         TBT         0,X
         ADCR        Y
         SBT         0,X
         XR          X,B
         STA         &ATBBT2
         PLR         W,L
         LR          Y,A             < SI L'UN DES BITS EST A ZERO,
         CPI         2               < LE SYMBOLE EST ABSENT
         JNE         RETIQ5
         CPZ         NBPAGE          < AUCUNE PAGE?
         JL          RETIQ5
         IF          XXXSGN-0,XWOR%,,XWOR%
         BSR         CPSY            < COMPACTER LE SYMBOLE
XWOR%:   VAL         0
         BSR         CALH            < CALCUL HASH
         STX         ADRDEP          < PROTEGER X
         IF          XXXSGN-0,XWOR%,,XWOR%
         BSR         CALH            < CALCUL DE LA 2EME FORMULE
         STX         ADRDP1
XWOR%:   VAL         0
         LXI         0               < RECHERCHE D'UNE PAGE AVEC LG
RETIQ4:  EQU         $
         LA          &ADTBPG         < AFIN DE TESTER LA LONGUEUR
         SLRS        12              < DES SYMBOLES QU'ELLE CONTIENT...
         IF          XXXSGN-1,XWOR%,,XWOR%
         ANDI        3
         CP          LG2             < EST-CE LA BONNE LONGUEUR ???
         JNE         RTIQ15          < NON, INUTILE DE LA LIRE....
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
         EOR         LG3
         ANDI        3
         JANE        RTIQ15
XWOR%:   VAL         0
         STX         RESERV
         LA          &ADTBPG         < PAGE RESIDENTE?
         AND         MASKRP
         SLLS        1
         STA         RESERY
         TBT         7
         JNC         RETIQ1
         LXI         0               < NON - ECRIRE PAGE 0
         BSR         ECRP
         LXI         0               < LIRE LA PAGE
         BSR         LIRP
RETIQ1:  EQU         $
         BSR         INVP            < INVERSER LES DESCRIPTEURS
         LA          RESERY          < RECHERCHE DANS ZONE HASH
         AD          ADRDEP
         LR          A,X
         CPZ         &ADPAGE
         IF          XXXSGN-1,XWOR%,,XWOR%
         JE          RETIQ3
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
         JE          RRTIQ4          < ESSAYER L'AUTRE FONCTION...
XWOR%:   VAL         0
         BSR         CHSB
         JAE         RETIQ7
         IF          XXXSGN-0,XWOR%,,XWOR%
RRTIQ4:  EQU         $
         LA          RESERY          < ESSAI DE LA 2EME FONCTION
         AD          ADRDP1
         LR          A,X
         CPZ         &ADPAGE
         JE          RETIQ3
         BSR         CHSB
         JAE         RETIQ7          < YOUPIE. LE VOILA
XWOR%:   VAL         0
         LA          RESERY          < RECHERCHE ZONE DEBORDEMENT
         AD          LGH
         LR          A,Y
         LA          RESERY
         AD          LGPAGE
         LR          A,X
         LA          &ADPAGE
         JANE        RETIQ9
         LA          LGPAGE
RETIQ9:  EQU         $
         AD          RESERY
         STA         PTFINP
         LR          Y,A
RETIQ2:  EQU         $
         LR          A,X
         CP          PTFINP
         JGE         RETIQ3
         CPZ         &ADPAGE         < SYMBOLE PRESENT?
         JE          RETIQ8
         BSR         CHSB
         JAE         RETIQ7
RETIQ8:  EQU         $
         LR          X,A
         AD          LG1
         JMP         RETIQ2
RETIQ3:  EQU         $
         LX          RESERV          < ABSENT DE LA PAGE
RTIQ15:  EQU         $
         ADRI        1,X             < VOIR PAGE SUIVANTE?
         LR          X,A
         CP          NBPAGE
         JLE         RETIQ4
RETIQ5:  EQU         $
         LAI         0               < SYMBOLE ABSENT
         JMP         RTIQ22          < VERS LA SORTIE...
RETIQ7:  EQU         $
         LR          X,A             < TROUVE - @ VIRTUELLE
         SB          RESERY
         SLLS        7
         LXI         0
         LB          &ADTBPG
         SCRD        7
         STA         &ANIVSY
         LB          ADDSYM          < SYMBOLE DANS ZONSYM
         LX          SAUVX
         LAD         &ADPAGE
         IF          XXXSGN-1,XWOR%,,XWOR%
         LXI         5
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
         LXI         2
XWOR%:   VAL         0
         MOVE
         IF          XXXSGN-0,XWOR%,,XWOR%
         LXI         0
         LAD         &RELAD
         ADRI        2,B
         LXI         3
         MOVE
         LA          &ADDSYM
         TBT         2               < EST-CE UN SYMBOLE JAMAIS REFERENCE ???
         JNC         RTIQ59          < NON...
         RBT         2               < OUI,
         STA         &ADDSYM         < ON MEMORISE CETTE PREMIERE REFERENCE...
         LA          ADDSYM
         LB          ADDSY1
         LY          SAUVX
         PLR         C               < RESTAURE 'C' PROVISOIRE...
         USE         C
         LX          NIV
         PSR         X,Y             < SAUVEGARDE DE 'NIV' ET DE 'SAUVX'...
         LX          NIVSYM
         STX         NIV             < TRANSMISSION DE L'ADRESSE VIRTUELLE...
         LXI         2
         MOVE                        < DEPLACEMENT : ZONSYM --> ZONSY2...
         BSR         MODSB           < ET ON INDIQUE AINSI QUE LE SYMBOLE
                                     < EST UTILISE AU MOINS UNE FOIS (BIT 2).
         PLR         X,Y
         STX         NIV             < RESTAURATION DE 'NIV'...
         PSR         C               < ET RE-SAUVEGARDE DE 'C'...
         LA          COM1
         LR          A,C
         USE         C,COMM1
         STY         SAUVX           < RESTAURATION DE 'SAUVX'...
RTIQ59:  EQU         $
XWOR%:   VAL         0
         LX          SAUVX           < A=MOT DE COMMANDE
         LA          &ADPAGE
RTIQ22:  EQU         $
         PLR         C
         USE         C
         PSR         A
         LA          VALEQU
         AD          VALEQU          < ON COMPTABILISE LES PASSAGES DANS
                                     < LE MODULE 'RETIQ'...
         STA         VALEQU
         PLR         A
         JAE         RTIQ20          < CAS D'UN SYMBOLE INEXISTANT...
         TBT         9               < EST-CE UN SYMBOLE TRANSLATABLE ???
         JC          RTIQ20          < NON, ABSOLU...
         PSR         A               < OUI (OU UNDEFINED...),
         LA          VALEQU
         CPI         2               < EST-CE LE PREMIER PASSAGE DANS 'RETIQ' ?
         JG          RTIQ21          < NON, ON LAISSE 'VALEQU'...
         CPI         -2              < ???
         JLE         RTIQ21          < NON...
         NGR         A,A
         STA         VALEQU          < ON FAIT : VALEQU < 0...
RTIQ21:  EQU         $
         PLR         A
RTIQ20:  EQU         $
         RSR
         PAGE
<
<
<        MODIFICATION D'UN SYMBOLE
<        PARAM : NETIQ = @ VIRTUELLE
<                ZONSY1 = NOUVEAU DESC.
<
<
SPMDSB:  EQU         $
         PSR         A,B,C
         LA          COM1
         LR          A,C
         USE         C,COMM1
         LA          &ANIV           < CALCUL @ REELLE
         BSR         RCAD
         LA          &ADTBPG         < PAGE MODIFIEE
         SBT         0
         STA         &ADTBPG
         LA          RESERY
         OR          SAUVX
         LR          A,X
         LAD         &ADPAGE         < MODIFICATIONS
         IF          XXXSGN-0,XWOR%,,XWOR%
         PSR         A,W
         LB          &ADDSY1         < (B)=NOUVELLE LISTE DES INDICATEURS,
         LR          A,W
         LA          0,W             < (A)=ANCIENNE LISTE DES INDICATEURS...
         ANDI        'FFFC           < ON Y SUPPRIME LA LONGUEUR,
         RBT         16+2            < FOIS SUIVANTES A PRIORI...
         JANE        SPMDS1          < ET OUI...
         SBT         16+2            < ET NON, PREMIERE FOIS...
SPMDS1:  EQU         $
         STB         &ADDSY1         < ET ON MET A JOUR LA NOUVELLE LISTE...
         PLR         A,W
XWOR%:   VAL         0
         LR          A,B
         LA          ADDSY1
         LXI         2
         MOVE
         PLR         A,B,C
ARSR:    RSR
<
<
<        RECHERCHE ADRESSE REELLE
<
<
SPRCAD:  EQU         $
         LBI         0
         SCLD        7
         SLRS        7
         STA         SAUVX           < @ DANS LA PAGE
         LXI         0               < RECHERCHE DESC. PAGE
RCAD1:   EQU         $
         LA          &ADTBPG
         ANDI        '7F
         CPR         A,B
         JE          RCAD2
         ADRI        1,X
         JMP         RCAD1
RCAD2:   EQU         $
         LA          &ADTBPG         < PAGE TROUVEE - RESIDENTE?
         AND         MASKRP
         SLLS        1
         STA         RESERY
         TBT         7
         JNC         RCAD3
         STX         RESERV          < NON - ECRIRE DERNIERE
         LX          NBPGRS
         BSR         ECRP
         LX          NBPGRS          < LIRE LA PAGE
         BSR         LIRP
         LX          RESERV
RCAD3:   EQU         $
         BSR         TTPL            < AMENER EN TETE DESC.
         RSR
         USE         C
         PAGE
<
<
<        REPERAGE SYMBOLE POUR SUPPRESSION
<
<
SPIUSY:  EQU         $
         PSR         X,C             < CHANGER DE BASE
         LX          COM1
         LR          X,C
         USE         C,COMM1
         CPZR        B
         JNE         IUSY1
         STZ         PTSASY          < INITIALISATION
         PLR         X,C
         RSR
IUSY1:   EQU         $
         LX          PTSASY          < EMPILER @ VIRTUELLE
         LB          &ANIVSY
         STB         &SASYMB
         IC          PTSASY
         PLR         X,C
         RSR
         USE         C
<
<
<        SUPPRESSION DE SYMBOLES
<
<
SPSUSY:  EQU         $
         PSR         X,C             < CHANGER DE BASE
         LA          COM1
         LR          A,C
         USE         C,COMM1
SUSY1:   EQU         $
         CPZ         PTSASY
         JLE         SUSY3
         DC          PTSASY          < SYMBOLE SUIVANT
         LX          PTSASY          < @ VIRTUELLE
         LA          &SASYMB
         BSR         RCAD            < @ REELLE
         LA          SAUVX           < DANS LE DEBOR.?
         CP          LGH
         JL          SUSY2
         LA          RESERY          < OUI - DECREMENTER PT
         AD          LGPAGE
         LR          A,X
         CPZ         &ADPAGE         < PLUS DE PLACE?
         JNE         SUSY4
         PSR         X               < OUI - DIRE QU'IL Y EN A
         LXI         0
         LA          &ADTBPG
         SBT         1
         STA         &ADTBPG
         PLR         X
SUSY4:   EQU         $
         LA          SAUVX
         STA         &ADPAGE
SUSY2:   EQU         $
         LA          RESERY          < ENLEVER LE SYMBOLE
         OR          SAUVX
         LR          A,X
         STZ         &ADPAGE
         JMP         SUSY1
SUSY3:   EQU         $
         PLR         X,C
         RSR
         USE         C
         PAGE
<
<
<        RECHERCHE SYMBOLE SUIVANT
<
<
PSYMUL:  EQU         $
         PSR         B,Y,C
         LB          COM1
         LR          B,C
         USE         C,COMM1
         JANE        MULSY1          "
         SWBR        A
         ORI         '07             < BELL
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LRM         A               < BELL
         WORD        '3E07
XWOR%:   VAL         0
         STA         SYMBOL
         LAI         2
         STA         IOCB3+2
         LAD         IOCB3
         SVC         0               < DANS TOUS LES CAS ON EDITE">"...
         PLR         A
         STA         IOCB3
         PLR         A
         STA         SYMBOL
         LAD         IOCB
         SVC         0
         LAI         0
         RSR
C1100:   EQU         $
         LBI         -80             < INDEX OUT DE DECOMPACTAGE.
         LX          INDIN           < LECTURE SUR FICHIER
         LBY         &ABFSGF         < FIN DE SECTEUR?
         CPI         'FF
         JNE         C1101
         PSR         C
         LA          COM1
         LR          A,C
         USE         C,COMM1
         CPZ         LGNMFC          < LE NOM DU FICHIER COURANT
                                     < EST-IL VIDE ???
         PLR         C
         USE         C
         JNE         FCART2          < NON, VRAI FICHIER SGF.
<
< CAS DES FICHIERS DE NOM VIDE,
< IL S'AGIT DE L'ENTREE DE CARTES
< COMPRESSEES SUR NVP='0A.
<
FCART8:  EQU         $               < ENTRY : CARTE SYMBOLIQUE A
                                     < CHEVAL SUR 2 CARTES COMPRESSEES.
         LAI         '0A
         STBY        IOCB            < LECTURE SUR LE NVP '0A.
         LYI         2*80
         STY         IOCB+2          < LECTURE DES CARTES EN BINAIRE.
         LAD         IOCB
         SVC         0               < LECTURE 1 CARTE COMPRESSEE.
         IF          ORDI-"T",XWOR%,,XWOR%
         ADRI        -80+LLLBUF*2,Y
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LRM         A
         WORD        -80+LLLBUF*2
         ADR         A,Y
XWOR%:   VAL         0
         STY         IOCB+2          < RESTAURE IOCB.
         CPZR        X               < ERREUR DE LECTURE CARTE ???
         JNE         C1108           < DANS LE CAS D'UNE ERREUR DE
                                     < LECTURE (!ASSIGN ABSENT ???),
                                     < ON FAIT COMME S'IL Y AVAIT UNE
                                     < FIN DE FICHIER.
         LAI         -2
         STA         INDIN           < EN EFFET DANS LE CAS DES CARTES
                                     < COMPRESSEES, LE 1ER MOT DU
                                     < BUFFER EST SIGNIFICATIF
                                     < CONTRAIREMENT AU SGF...
<
< TEST DE FIN DE FICHIER CARTE :
<
         LAI         '20
         SBT         4               < A=":" EN BINAIRE,
         CP          &ABFSG0         < LA CARTE LUE EST-ELLE ":F" ???
         JNE         FCART3          < NON,
         LAI         '80             < PEUT-ETRE...
         SBT         0               < A="F" EN BINAIRE.
         LXI         0
         CP          &ABFSGF         < LA CARTE LUE EST-ELLE ":F" ???
         JE          C1108           < OUI, FIN DE FICHIER...
<
< DECODAGE PRIMAIRE D'UNE CARTE :
<
FCART3:  EQU         $
         PSR         B               < SAVE INDEX OUT (-80, OU BIEN
                                     < UNE VALEUR SUPERIEURE A -80
                                     < DANS LE CAS DES CARTES SYMBO-
                                     < LIQUES A CHEVAL...
         LXI         -1
         LYI         -2              < INDEX DE RANGEMENT OCTET.
FCART4:  EQU         $
         LA          &ABFSGF         < MOT COURANT,
         ADRI        1,X
         LB          &ABFSGF         < MOT SUIVANT.
         ADRI        1,X
         SLRS        4               < ELIMINATION DES BITS 12-15.
         SLRD        4               < ELIMINATION DES BITS 12-15.
FCART6:  EQU         $
         JAE         FCART5          < ELIMINATION DES NULLS ('0).
         XR          X,Y
         STBY        &ABFSGF         < RANGEMENT OCTET COURANT.
         XR          X,Y
         ADRI        1,Y
FCART5:  EQU         $
         CPZR        B               < TEST DE FIN DE TRAITEMENT
                                     < DES 2 MOTS COURANTS ???
         JE          FCART7          < OUI, AUX SUIVANTS.
         LAI         0               < NON, ON DECONCATENE...
         SLLD        8
         JMP         FCART6
FCART7:  EQU         $
         LR          X,A
         CPI         80-4-1          < TEST DE FIN DE CARTE ???
         JL          FCART4          < NON, ON CONTINUE...
         XR          X,Y
         LAI         'FF             < ON MET UNE FAUSSE FIN DE
         STBY        &ABFSGF         < SECTEUR EN FIN DE CARTE.
         PLR         B
         JMP         C1101           < VERS LA DECOMPRESSION...
<
< CAS DES VRAIS FICHIERS SGF :
<
FCART2:  EQU         $
         LAD         IOCB            < OUI - RELORE
         SVC         0
         JNE         C1108
         CPZ         &ABFSG0
         JL          C1108
         STZ         INDIN           < INDEX A ZERO
C1101:   EQU         $
         LX          INDIN           < INDEX IN
C1102:   EQU         $
         LBY         &ABFSGF         < RELEVER UN CARACTERE
         ADRI        1,X
         CPI         'FE             < FIN DE CARTE
         JE          C1107
         CPI         'FF             < EST-CE UN FIN DE SECTEUR : CE
                                     < TEST EST DESTINE AUX CARTES
                                     < SYMBOLIQUES A CHEVAL SUR 2
                                     < CARTES COMPRESSEES.
         JE          FCART8          < OUI, IL FAUT LIRE LA CARTE
                                     < SUIVANTE...
         TBT         8               < EST-CE REPETITION /TABULATION?
         JC          C1103
         XR          X,B             < NORMAL - LE PLACER
         STBY        &AZACQX
         ADRI        1,X
         XR          X,B
         JMP         C1102
C1103:   EQU         $
         RBT         8
         CPI         80              < REPETITION OU TABULATION?
         JGE         C1104
         ADRI        -80,A
         LR          A,B
         JMP         C1102
C1104:   EQU         $
         ADRI        -80,A           < REPETITION
         LR          A,Y
         LBY         &ABFSGF         < CARACTERE A REPETER
         ADRI        1,X
         XR          X,B             < LE PLACER
C1105:   EQU         $
         STBY        &AZACQX
         ADRI        1,X
         CPZR        Y               < FINI?
         JE          C1106
         ADRI        -1,Y            < NON - CONTINUER
         JMP         C1105
C1106:   EQU         $
         XR          X,B
         JMP         C1102
C1107:   EQU         $
         STX         INDIN
         LXI         -27             < AUGMENTER LA NUMEROTATION
C1110:   EQU         $
         LBY         &AZACQ
         CPI         " "             < BLANC?
         JE          C1112
         ADRI        1,A
         CPI         "9"             < DEPASSE 9?
         JG          C1111
         STBY        &AZACQ          < NON - FIN
         JMP         C1113
C1111:   EQU         $
         LAI         "0"             < 10 - METTRE 0 ET PRECEDENT
         STBY        &AZACQ
         ADRI        -1,X
         JMP         C1110
C1112:   EQU         $
         LAI         "1"             < BLANC - METTRE 1
         STBY        &AZACQ
C1113:   EQU         $
         LXI         -16             < LA TRANSFERER DANS LA LIGNE
         LA          &AZACQ
         ADRI        3,X
         STA         &AZACQ
         ADRI        -2,X
         LA          &AZACQ
         ADRI        3,X
         STA         &AZACQ
         ADRI        -2,X
         LA          &AZACQ
         ADRI        3,X
         STA         &AZACQ
         LAI         0               < CODE DE RETOUR
         RSR
C1108:   EQU         $
         LAI         80              < SIMUL. FIN DE CARTE
         STA         NACQ
         LAI         1
         RSR
         PAGE
<
< CONVERSION DES NOMBRES FLOTTANTS
< ON A DANS ZFLOAT(EN BYTES)
< LE SIGNE(+ OU -), UN POINTEUR SUR LA FIN DE LA ZONE,
< PUIS LES CARACTERES DU NOMBRE, ET L'EXPOSANT EN BINAIRE
<
         LOCAL
LOC1:    EQU         $
NBFLT:   DZS         2               < NB FLOTTANT DE TRAVAIL
FL10:    WORD        '5004;'0000     < NB 10 EN FLOTTANT
         PROG
         USE         L,LOC1+'80
         WORD        LOC1+'80        < RELAI VERS LE LOCAL
CDF:     EQU         $
         PSR         L               < POSITIONNER LA BASE L
         LRP         L
         LA          -2,L
         LR          A,L
         IF          ORDI-"S",XWOR%,,XWOR%
         LXI         0
         LBY         &AZFL
         JANE        CDF1X           < MODE NORMAL...
         LXI         1
         LA          &AZFL           < MODE PARAMETRE...
         FLT                         < (A,B)=PARTIE ENTIERE.
         FST         NBFLT           < SAVE LA PARTIE ENTIERE...
         LXI         2
         LA          &AZFL
         FLT                         < (A,B)=PARTIE DECIMALE...
CDF1Y:   EQU         $
         PSR         A,B
         FIX
         CPI         0               < INFERIEURE A 1 ???
         PLR         A,B
         JE          CDF1Z           < OUI (FIX=0)...
         FDV         FL10            < NON, ON REDUIT PAR 10...
         JMP         CDF1Y
CDF1Z:   EQU         $
         FAD         NBFLT           < CONCATENATION ENTIERE-DECIMALE...
         LXI         6               < INDEX DE L'EXPOSANT...
         JMP         CDF3X
CDF1X:   EQU         $
XWOR%:   VAL         0
         LAI         0               < NB FLOTTANT RESULTAT=0.0
         STA         NBFLT+1
         SBT         8
         STA         NBFLT
         LA          ZFLOAT          < PRELEVER POINTEUR DE FIN
         ANDI        'FF
         LR          A,Y
CDF1:    EQU         $
         CPR         Y,X
         JGE         CDF2
         FLD         NBFLT           < CALCUL DE LA MANTISSE
         FMP         FL10
         JCV         CDF9
         FST         NBFLT
         LBY         &AZFL
         ADRI        -'30,A
         FLT
         FAD         NBFLT
         JCV         CDF9
         FST         NBFLT
         ADRI        1,X
         JMP         CDF1
CDF2:    EQU         $
         LBY         ZFLOAT          < METTRE LE SIGNE
         CPI         "-"
         JNE         CDF3
         FLD         NBFLT
         FNEG
         IF          ORDI-"S",XWOR%,,XWOR%
CDF3X:   EQU         $
XWOR%:   VAL         0
         FST         NBFLT
CDF3:    EQU         $
         LBY         &AZFL           < PRELEVER L'EXPOSANT
         SWBR        A
         SARS        8
         LYI         0               < RELEVER SON SIGNE
         JAGE        CDF4
         NGR         A
         LYI         1
CDF4:    EQU         $
         LR          A,W             < VALEUR ABSOLUE EXPOSANT
         FLD         NBFLT
CDF5:    EQU         $
         CPZR        W               < APPLIQUER L'EXPOSANT
         JLE         CDF8
         CPZR        Y               < SUIVANT SON SIGNE
         JNE         CDF6
         FMP         FL10
         JMP         CDF7
CDF6:    EQU         $
         FDV         FL10
CDF7:    EQU         $
         JCV         CDF9
         ADRI        -1,W
         JMP         CDF5
CDF8:    EQU         $
         PLR         L               < RETOUR - VALEUR DANS A-B
         RSR
CDF9:    EQU         $
         IC          ZCDF            < ERREUR
         JMP         CDF8
         PAGE
<
<
<        F I N   D E   A S S Y S  :
<
<
         IF          ORDI-"T",XWOR%,,XWOR%
FASSYS:  EQU         $
XWOR%:   VAL         0
<
<
<        D E S C R I P T E U R S   D E   L A
<        T A B L E   D E S   S Y M B O L E S  :
<
<
TBPAGE:  DZS         64              < DESC. PAGES
         IF          XXXSGN-0,XWOR%,,XWOR%
PAGEX:   DZS         64/16           < LISTE D'EXISTENCE DES PAGES.
XWOR%:   VAL         0
         IF          ORDI-"T",XWOR%,,XWOR%
TBBIT1:  DZS         2               < TABLE BITS POUR ABSENCE DE
TBBIT2:  DZS         2               < SYMBOLES LORS DES RECHERCHES.
XWOR%:   VAL         0
<
<
<        D E S C R I P T I O N   D E S   S E C T I O N S  :
<
<
DECSEC:  DZS         3*NBRSEC        < DESCRIPTEURS DE SECTIONS.
         IF          NBRSEC-'3F,XWORK1,XWORK1,
         IF          ATTENTION : LE NUMERO DE SECTION DOIT
         IF          TENIR SUR 6 BITS !!!
XWORK1:  VAL         0
<
<
<        B U F F E R   B I N A I R E  :
<
<
BUFBIN:  DZS         LLLBUF
X100:    VAL         BUFBIN-ZERO*2   < ADRESSE OCTET DU BUFFER BINAIRE.
BUFBI2:  EQU         ZERO+X100
<
<
<        B U F F E R   S G F  :
<
<
BUFSGF:  DZS         LLLBUF
X100:    VAL         BUFSGF-ZERO*2   < ADRESSE OCTET DU BUFFER SGF.
BUFSG2:  EQU         ZERO+X100
<
<
<        B U F F E R S   S I M U L A T I O N   ' E E '  :
<
<
SIML:    EQU         $
         DZS         YNZACQ          < SIMULATION LECTURES 'EDITS'.
SIME:    EQU         $
         DZS         YNZACQ          < SIMULATION ECRITURES 'EDITS'.
<
<
<        P I L E   D E   T R A V A I L  :
<
<
AKSTOR:  EQU         $-1
         DZS         24
         IF          ORDI-"S",XWOR%,,XWOR%
<
<
<        P I L E   P U S H / P U L L  :
<
<
PUSPUL:  EQU         $
         BYTE        LPUSUL;0        < DESCRIPTEUR DE LA PILE.
         DZS         LPUSUL          < PILE...
<
<
<        A C C E L E R A T E U R   D ' A C C E S
<        A   L A   T A B L E   D E S   S Y M B O L E S  :
<
<
XWOR%1:  VAL         $-ZERO
XWOR%2:  VAL         XLGPAG-1)'FFFF
XWOR%3:  VAL         XWOR%1+XLGPAG-1(XWOR%2
XWOR%4:  VAL         XWOR%3-XWOR%1-'10-'10/2
         IF          XWOR%4-64,,XWOR%5,XWOR%5
XWOR%4:  VAL         XLGPAG/2+XWOR%4 < ON ASSURE UNE LONGUEUR MINI.
XWOR%5:  VAL         0
XWOR%4:  VAL         XLGPAG/2+XWOR%4 < ON AGRANDIT...
         IF          XXXSGN-0,XWOR%9,,XWOR%9
XWOR%4:  VAL         XLGPAG/2+XWOR%4 < ET ENCORE...
XWOR%9:  VAL         0
TBBIT1:  DZS         XWOR%4
TBBIT2:  DZS         XWOR%4
XWOR%6:  VAL         XWOR%4*16-1     < LONGUEUR-1 EN BITS DE CES TABLES.
LTBBIT:  EQU         ZERO+XWOR%6     < AFIN D'INDEXER EN BITS CES TABLES.
XWOR%:   VAL         0
<
<
<        T O P   U T I L E   D E   S Y M B O L  :
<
<
TOP:     EQU         $
         IF          XXXSGN-1,XWOR%,,XWOR%
         IF          ORDI-"S",XWOR%,,XWOR%
         DZS         1000            < A PRIORI...
XWOR%:   VAL         0
         IF          ORDI-"T",XWOR%,,XWOR%
XWOR%1:  VAL         TOP-FASSYS      < NOMBRE DE MOTS
LCLEAR:  EQU         ZERO+XWOR%1     < A RAZER...
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         IF          XXXSGN-0,,XWOR%1,
         DZS         '400            < ?!?!?!??
XWOR%1:  VAL         0
FASSYS:  EQU         $
XWOR%:   VAL         0
         PAGE
<
<
<        GENERATION EN TANT QU'ITEM.
<
<
FITEM:   EQU         FASSYS
LGIT:    VAL         FITEM-DBCHIT*2
         IF          ORDI-"T",X100,,X100
         IF          '2B-1*128+80*2-LGIT,,,X100
         IF          A S S Y S   T R O P   G R A N D   !!!
X100:    VAL         0
         IF          XXXSGN-1,XWOR%,,XWOR%
SIZE:    EQU         ZERO-LGIT       < SIZE<0 ==> (SIZE)+2K LORS DE !CALL.
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
SIZE:    EQU         ZERO+LGIT
XWOR%:   VAL         0
         LOCAL
LONGR:   VAL         FITEM-DITEM
DEMITE:  WORD        '8402           < DEMANDE DE GENERATION
         WORD        DITEM-ZERO*2
         WORD        LONGR*2
         WORD        -1
ASTASS:  WORD        STASS+2         < POUR METTRE LA LONGUEUR
ALOAED:  WORD        LOADED+2        < REELLE DE 'ASSYS'.
         PROG
         USE         L,DEMITE+'80
         WORD        DEMITE+'80
         WORD        COMMUN
GENERE:  EQU         $
         LRP         L
         LR          L,C
         LA          -2,L
         LR          A,L
         LA          -1,C
         LR          A,C
         LA          KSTOR
X200:    VAL         0
         LR          A,K
         LA          DEMITE+2        < LONGUEUR REELLE DE 'ASSYS'.
         STA         &ASTASS
         STA         &ALOAED
ITEDEM:  EQU         $
         LAD         DEMITE
         SVC         0
         JE          FINGEN
         LAD         CCI
         SVC         0
         JMP         ITEDEM
FINGEN:  EQU         $
         LAD         CCI
         SVC         0
         JMP         FINGEN
X100:    VAL         0
         END         GENERE



Copyright (c) Jean-François Colonna, 2011-2013.
Copyright (c) CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2011-2013.