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'ASSEMBLEUR SYMBOL EST EN FAIT L'ASSEMBLEUR
<                    ASM FOURNI PAR LA TELEMECANIQUE ET QUI A ETE
<                    ADAPTE AUX BESOINS PREMIERS DU CLIENT , 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'<IDESC>.
         WORD        DITEM-ZERO*2
         WORD        DBCHIT-DITEM*2
         WORD        -1
STASS:   WORD        '8402           < GENERATION DE 'ASSY'<IDESC>.
         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 <IDESC> 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'<IDESC>.
         LAD         DELASS
         SVC         0               < DELETE A PRIORI 'ASSY'<IDESC>.
         LAD         STASS
         SVC         0               < GENERATION DE 'ASSY'<IDESC>.
         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'<IDESC>.
         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 :
<X:      VAL         1
<X:      VAL         X+1
<YY@@A@: VAL         '1234           < CECI EST EQUIVALENT A
<                                    < DEFINIR 'YY00A2'.
<
<
<        EXEMPLE :
<        PSR         A,B,X,Y
<XPSR:   VAL         '000000000@@    < XPSR VAUDRA '00F0, CAR LE 'PSR'
<                                    < A EMPILE LES REGISTRES A, B, X, Y.
<
<
<        FONCTION DU CARACTERE "POUR-CENT" :
<                      LE CARACTERE "POUR-CENT" S'IL EST RENCONTRE
<                    N'IMPORTE OU SUR LA CARTE (0 A 79), EST
<                    REMPLACE PAR UN CARACTERE DE "4" A "9"
<                    CALCULE EN FONCTION DE LA PROFONDEUR
<                    D'IMBRICATION DES 'EOT' :
<                    PAS D'EOT'      "4",
<                    PREMIER "EOT"   "5",...
<                      CELA PERMET EN FAIT DE GERER DES
<                    SYMBOLES 'LOCAUX' AUX PROCEDURES...
<
<
EX30:    EQU         $
         LYI         " "             < Y=" " RIEN N'A ENCORE ETE GENERE...
<
< GENERATION DE "POUR-CENT" :
<
FX30:    EQU         $               < SUITE DES CARTES DYNAMIQUES...
         LXI         -80             < POUR BALAYER TOUTE LA CARTE.
EX302:   EQU         $
         LBY         &AZACQX         < ACCES AU CARACTERE COURANT.
         CPI         '25             < EST-CE LE POUR-CENT ???
         JNE         EX304           < NON...
         LBY         OPEN5O          < OUI, ON LE REMPLACE PAR UN CHIFFRE
                                     < ASCI CONTENU DANS 'OPEN5O'.
         STBY        &AZACQX         < QUE L'ON MET DANS LE BUFFER...
         LYI         "@"             < Y="@" : "POUR-CENT" GENERE...
EX304:   EQU         $
         JIX         EX302           < AU SUIVANT...
<
< GENERATION DU "@" :
<
         LXI         0+2             < COLONNE 2 DE LA CARTE.
EX31:    EQU         $
         LBY         &AZACQ
         CPI         "@"             < EST-CE LE "@" ???
         JNE         EX32            < NON,
         ADRI        -2-18,X         < OUI, ACCES A ZACQ1,
         LBY         &AZACQ          < RECUPERATION 1 CARACTERE.
         ADRI        2+18,X
EX301:   EQU         $
         STBY        &AZACQ          < GENERATION DE LA CARTE.
         LYI         "@"             < Y="@" : "@" GENERE...
EX32:    EQU         $
         ADRI        1,X
         LR          X,A
         CPI         4+2             < FIN ???
         JL          EX31            < NON,
         LXI         21+2            < OUI, PASSAGE COLONNE 23.
EX33:    EQU         $
         LBY         &AZACQ
         CPI         "@"             < EST-CE LE "@" ???
         JNE         EX34            < NON,
         ADRI        -2-18-21,X      < OUI, ACCES A ZACQ1.
         LBY         &AZACQ
         ADRI        2+18+21,X
EX303:   EQU         $
         STBY        &AZACQ          < GENERATION DE LA CARTE.
         LYI         "@"             < Y="@" : "@" GENERE...
EX34:    EQU         $
         ADRI        1,X
         LR          X,A
         CPI         25+2+6          < FIN ???
         JL          EX33            < NON...
         IF          ORDI-"S",XWOR%,,XWOR%
         LBY         &AZACQ
         CPI         "@"             < "@" EN COLONNE 33 ???
         JNE         EX138Y          < NON, VERS LA COLONNE SUIVANTE...
         LA          KLIST           < OUI, ON PREND KLIST,
         ADRI        "0",A           < QUE L'ON CONVERTIT EN ASCI.,
         STBY        &AZACQ          < ET QUE L'ON MET DANS LE BUFFER.
         LYI         "@"             < Y="@" : "@" GENERE...
EX138Y:  EQU         $
         ADRI        1,X
         LBY         &AZACQ          < A=CARACTERE SUIVANT...
         CPI         "@"             < EST-CE "@" ???
         JNE         EX138X          < NON, VER LES INSTRUCTIONS DYNAMIQUES...
         LAI         ORDI            < OUI, ON LE REMPLACE PAR LA NATURE
         STBY        &AZACQ          < DE L'ORDINATEUR-HOTE ('ORDI').
         LYI         "@"             < Y="@" : "@" GENERE...
XWOR%:   VAL         0
         JMP         EX138X          < VERS LES INSTRUCTIONS DYNAMIQUES.
EX139:   EQU         $
         LR          Y,A
         LXI         -20
         STBY        &AZACQ          < MISE DE (Y) SUR LE LISTING AFIN
                                     < D'INDIQUER AU MOINS UNE GENERATION...
         JMP         EX40            < OUI, VERS L'ANALYSE DE LA CARTE...
EX30X:   JMP         EX30            < RELA VERS 'EX30'...
         PAGE
<
<
<        A S S E M B L E U R   A S S Y S  :
<
<
<        DEFINITION :
<                      L'ASSEMBLEUR ASSYS EST LA VERSION
<                    SOLAR 16.65 DE L'ASSEMBLEUR; CELUI-CI
<                    CONTIENT L'EXTENSION CDA, ET L'ADRESSAGE
<                    DES DONNEES SUR 64K.
<                      DE PLUS IL PERMET L'IMBBRICATION
<                    DES FICHIERS SYMBOLIQUES SUR 'EOT'
<                    A CONCURRENCE DE 5.
<
<
<                    NVP=3 : SORTIE DU BINAIRE ,
<                    NVP=4 : SORTIE LISTING ET MESSAGES ,
<                    NVP=A : ENTREE CARTES COMPRESSEES (EOT ##),
<                    NVP=1 : ENTREE CARTES.
<                    NVP=5, 6,...,9 : ENTREE CARTES SGF EN BASCULE
<                                     AVEC LE NVP=1.
<
<
         IF          ORDI-"T",XWOR%,,XWOR%
         WORD        LCLEAR          < X=NOMBRE DE MOTS A RAZER.
XWOR%:   VAL         0
         WORD        COMMUN          < BASE C.
         WORD        FASSYS          < ADRESSE DES MOTS A RAZER.
ASM:     EQU         $               < ENTRY-POINT.
         LRP         K
         IF          ORDI-"S",XWOR%,,XWOR%
         PLR         C,L,W
XWOR%:   VAL         0
         IF          ORDI-"T",XWOR%,,XWOR%
         PLR         X,C,L,W         < INITIALSATION DE X, C ET L (W N'EST
                                     < ICI QU'A CAUSE DU 'LRP'...).
CLEARX:  EQU         $
         STZ         0,L             < RAZ...
         ADRI        1,L             < AU MOT SUIVANT...
         JDX         CLEARX
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
LPUSUL:  VAL         80+8            < LONGUEUR DE LA PILE PUSH/PULL.
XWOR%:   VAL         0
         IC          NBPASS          < EVITER UN ALT-MODE
         JLE         CT100
         LAI         17
         BR          MERR
CT100:   EQU         $
         LB          KSTOR
         LR          B,K             < INITIALISATION DE LA PILE K.
         IC          NBLIG
SURCH:   EQU         $
<
<        RELEVER N0 UTILISATEUR
<
         PSR         C
         LA          COM1
         LR          A,C
         USE         C,COMM1
         WORD        '1E45
         ORI         '30
         STBY        IDESC
         LX          COMPAG+2        < ON VA S'ARRANGER POUR AVOIR
         LAD         &ADPAGE         < L'ESPACE DE DEUX PAGES RESIDENTES
         ADRI        '11,A           < POUR POUVOIR LES EFFACER
         SLRS        11
         ADRI        1,A
         SLLS        12
         STA         DEMMEM+2
         LAD         DEMMEM
         SVC         0
<
<        ELIMINER LES PAGES
<
         BSR         ELPG
         PLR         C
         USE         C
<
< TEST D'ASSIGNATION DU NVP 4
<
         LYI         '81             < POUR TEST 'NVP NON ASSIGNE'.
         LBI         'F              < 'F EST UNE FONCTION INEXISTANTE.
         SBT         5+16            < NVP=4.
         STB         IOCB6
         LAD         IOCB6
         SVC         0               < TEST D'ASSIGNATION DU NVP=4.
         CPR         X,Y             < TEST DES CONDITIONS DE RETOUR.
         JNE         Z3              < OK , NVP=4 ASSIGNE.
<
< SI NVP=4 NON ASSIGNE , ON PREND NVP=2 POUR OUT :
<
         LAI         2               < NVP=2=OUT.
         STBY        IOCB1
         STBY        IOCB2
         STBY        IOCB3
         STBY        IOCB4
Z3:      EQU         $
         BSR         PAGE
<
< OUVERTURE EN MODE NEW DU FICHIER BINAIRE :
<
         LAD         OPNBO
         SVC         0
         JE          Z1              < L'OUVERTURE S'EST FAITE EN
                                     < NEW AVEC LA CLEF 1.0.
         IF          ORDI-"S",XWOR%,,XWOR%
         STZ         IOCB5           < MEMORISONS LA NON ASSIGNATION DE '03.
XWOR%:   VAL         0
         CPR         X,Y
         JE          Z1              < NVP=3=BO N'EST PAS ASSIGNE
                                     < MAIS ON ASSEMBLE MALGRE TOUT.
         IF          ORDI-"T",XWOR%,,XWOR%
         LAD         CCI
         SVC         0               < ABORT DE L'ASSEMBLAGE DANS LE CAS
                                     < D'UNE OUVERTURE IMPOSSIBLE.
         JMP         $-1             < CAS D'UN !GO.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         ACTD                        < T R A P P E   VOLONTAIRE...
XWOR%:   VAL         0
Z1:      EQU         $
<
< TEST DE FONCTIONNEMENT EN BATCH :
<
         LB          IOCB            < ACCES A LA DEMANDE D'ENTREE
                                     < DES LIGNES A ASSEMBLER.
         ADRI        9,B             < ON LA FAIT PASSER DE LA FONCTION
                                     < '01 A LA FONCTION '0A :
                                     < SUR CR : LA FONCTION '0A EST
                                     <          INEXISTANTE (ERREUR
                                     <          '11) ,
                                     < SUR VISU : LA FONCTION '0A
                                     <            (=ECRITURE GRAPHIQUE)
                                     <            EST INACCESSIBLE A
                                     <            A L'INSTANT (ERREUR
                                     <            '03).
         STB         IOCB
         LAD         IOCB
         SVC         0               < ENVOI DE LA FONCTION '0A SUR
                                     < LE NVP D'ENTREE DES LIGNES.
         LR          X,A             < A=CODE ERREUR.
         CPI         '03             < EST-CE FONCTION INACCESSIBLE ???
         JE          Z100            < OUI , C'EST DONC UN ASSEMBLAGE
                                     < DU TEMPS PARTAGE ...
         ADRI        -1,B            < AFIN DE METTRE LA FONCTION 0
                                     < DANS IOCB CE QUI EVITERA QUE
                                     < LE HANDLER LECTEUR DE CARTES
                                     < NE FASSE SON PROPRE ECHO DE
                                     < LA CARTE LUE.
         IC          BATCH           < UTILISATION BATCH...
Z100:    EQU         $
         ADRI        -9,B
         STB         IOCB            < RESTAURE LA DEMANDE IN SUR
                                     < LA FONCTION '01.
         LAI         'A3             < DECLARATION DE BINAIRE
                                     < TRANSLATABLE ASSEMBLEUR.
         LBI         0
         BSR         ASPSO1
         STZ         INDEND
         STZ         BASCUL
         STZ         INDO            < ET C'EST PARTI ...
<
<
<        A S S E M B L A G E   D E   L A   L I G N E   C O U R A N T E  :
<
<
DEPART:  EQU         $
         LXI         LGLAN
         STZ         &ADLAN
         JDX         $-1
         LA          KSTOR
         LR          A,K             < INITIALISATION DE LA PILE K.
         STZ         &ATSYM0         < POUR EVITER DES HYSTERESIES DE CARTE
                                     < A CARTE...
         IC          DEPLA2
         IC          NLIG
SVCTAP:  EQU         $
         BSR         SPSAV
         CPZ         INDO
         JE          NEWASK
         DC          INDO            < TRAITEMENT 'DO' EN COURS.
         JMP         Z20
NEWASK:  EQU         $
         BSR         LCNF
         JAE         Z20
         BR          AEOT
Z20:     EQU         $
         JMP         EX30X           < VERS LA GENERATION EVENTUELLE
                                     < D'ETIQUETTES DYNAMIQUES.
EX40:    EQU         $               < RETOUR DE 'EX30'...
         LXI         79              < ELIMINER LES BLANCS
C1200:   EQU         $
         LBY         &AZACQ
         ORI         '20
         CPI         '20
         JNE         C1201
         JDX         C1200
C1201:   EQU         $
         ADRI        1,X
         LAI         '0D             < RETOUR-CHARIOT.
         STBY        &AZACQ          < QUE L'ON MET EN BOUT DE CARTE.
         ADRI        1,X
         LAI         '0A
         STBY        &AZACQ
         LXI         -18+4           < NETTOYAGE DE LA ZONE LISTING
                                     < (ZACQ1), SAUF LES 4 PREMIERS
                                     < CARACTERES UTILISES PAR LA
                                     < GENERATION DYNAMIQUE DES
                                     < SYMBOLES...
         LAI         '20
         STBY        &AZACQ
         JIX         $-1
         LYI         0               < NETTOYAGE DU BUFFER.
         LXI         -1
C2:      EQU         $
         ADRI        1,X
CARAC:   EQU         $
         XR          X,Y
         LBY         &AZACQ
         XR          X,Y
         ADRI        1,Y
         CPI         '0A
         JE          CARAC           < LES LF SONT IGNORES.
         STBY        &AZACQ
         CPI         '0D
         JE          RETURN
         CPI         '04
         JNE         C2              < FIN DE CARTE ( R / C ) NON TROUVE.
RETURN:  EQU         $
         LAI         '0D
         STBY        &AZACQ
         ADRI        1,X
         LAI         '0A
         STBY        &AZACQ
         ADRI        1,Y
         STY         IOCB1+2         < LONGUEUR NOUVELLE LIGNE.
         ADRI        1,X
         STX         IOCB1+2
         ADRI        26,X
         STX         IOCB4+2
EOTIN4:  EQU         $
         BSR         MACQ
         CPI         2
         JG          BERA1           < 1ER ELEMENT INCORRECT.
         CPZ         SYMBO1
         JE          NELIM
         CPI         -1
         JNE         ETIQET          < TRAITEMENT 'IF' EN COURS.
         CPZ         BASCUL
         JE          ETIQET
NELIM:   EQU         $
         LR          A,X
         BR          &ABRAN
DOLLAR:  EQU         $               < COMPTEUR D'ASSEMBLAGE.
         IC          ETAPH
         JMP         C11
ETIQET:  EQU         $               < TRAITEMENT 'IF'.
         PSR         A,X,Y
         LXI         -18+4           < METTRE DES "-" (+4 POUR @@@@).
         LAI         "-"
         STBY        &AZACQ
         JIX         $-1
         LY          IOCB4+2         < DECALER LA LIGNE
         LAI         26
         STA         IOCB4+2
         LAD         IOCB4
         WORD        LISTIN
         STY         IOCB4+2
         LXI         -26+8+4         < (+8+4 POUR LES @@@@).
         LAI         '20
         STBY        &AZACQ
         JIX         $-1
         LAD         IOCB4
         WORD        LISTIN          < EDITION DES CARTES RENCONTREES
                                     < DANS UNE SEQUENCE 'IF' , MAIS
                                     < A T T E N T I O N : LA CARTE
                                     < CONTENANT L'ETIQUETTE CHERCHEE
                                     < SERA EDITEE 2 FOIS ....
         BSR         PAGIN
         PLR         A,X,Y
         JAE         PADET
         CPI         -2
         JNE         DEPART
         LXI         3               < ETIQUETTE A VERIFIER.
C6:      EQU         $
         LA          &ASYMB
         CP          &ASYMB1
         JNE         DEPART          < ETIQUETTE RECHERCHEE NON TROUVEE.
         JDX         C6
         STZ         SYMBO1
PADIF:   EQU         $
         LXI         3               < MEMORISATION DERNIER SYMBOLE.
C7:      EQU         $
         LA          &ASYMB
         STA         &ASYMB2
         JDX         C7
         STZ         DEPLA2
<
<
<        A T T E N T I O N  :
<                      LES ETIQUETTES SONT AUTORISEES
<                    APRES UN 'DO' DANS 'ASSYS'; ON
<                    PEUT AINSI FAIRE DES CALCULS
<                    ITERATIFS SUR UNE VARIABLE
<                    AVEC DES 'VAL'...
<
<
         BSR         RETIQ
         CPZ         LIST2
         JG          JUSTIN          < SECOND PASSAGE.
         JAE         C10             < N'APPARTIENT PAS A TSYMB.
         TBT         10
         JC          FALSEX
         TBT         8
         JC          JUSTIN          < PAS ENCORE DEFINI.
         TBT         9
         JC          C9Z             < SYMBOLE ABSOLU.
         IF          ORDI-"S",XWOR%,,XWOR%
         LXI         0
         LA          LG
         STA         &ATSYMB         < A PRIORI, ON REINITIALISE L'ETAT
                                     < DU SYMBOLE DEJA EXISTANT AFIN D'EVITER
                                     < AU CAS D'UNE REDEFINITION PAR "::"
                                     < D'AVOIR DES ENNUIS AVEC LE BIT 12...
         CPZ         VALEQU          < SYSMBOLE TRANSLATABLE ; REDEFINITION ???
         JNE         JUSTIN          < OUI, ACCEPTE (::).
C9X:     EQU         $
XWOR%:   VAL         0
         LAI         8               < SYMBOLE NON ABSOLU.
         BR          MERR
C9Z:     EQU         $
         IF          ORDI-"S",XWOR%,,XWOR%
         CPZ         VALEQU          < SYMBOLE ABSOLU ; REDEFINITION ???
         JNE         C9X             < OUI, REFUSEE (::).
C9Y:     EQU         $
XWOR%:   VAL         0
C9:      EQU         $
         DC          ETAPH
         JMP         JUSTIN
C10:     EQU         $
         BSR         INSET
JUSTIN:  EQU         $
         LA          NIVSYM          < SAUVEGARDE NIVEAU SYMBOLE.
         STA         NETIQ
         LXI         0
         LAD         &ATSYMB
         LB          ATSYM1
         LXI         5
         MOVE
C11:     EQU         $
         BSR         MACQ
         JANE        BERA1           < PAS DE MOT CLE DANS LA CARTE.
PADET:   EQU         $
         CPZ         INDICA
         JNE         BERA1           < PAS DE MOT CLE DANS LA CARTE.
         LX          MTABCO
         IF          ORDI-"S",XWOR%,,XWOR%
         LYI         0               < Y=0 : PREMIERE DIRECTIVE.
XWOR%:   VAL         0
AVANT1:  EQU         $
         IF          ORDI-"S",XWOR%,,XWOR%
         LR          X,W             < W=SAVE DIRECTIVE COURANTE.
XWOR%:   VAL         0
         LBI         0
         LA          &ATABCO
         EOR         COND
         SLRD        15
         JAE         C12
         ADRI        1,X
         LA          &ATABCO
         ADRI        -1,X            < LE NUMERO N'EST PAS A PART...
C12:     EQU         $
         EOR         COND+1
         SLRS        16-5            < ON NE CONSERVE QUE LES BITS 0-4,
         SLLS        16-5            < SOIT, 4 CARACTERES PAR DIRECTIVE...
         ORR         B,A
         ADRI        1,X             < PASSAGE SUR NUMERO DE DIRECTIVE.
         JAE         COTRO           < MOT CLE TROUVE !!!
         IF          XSTATS,XWOR%,XWOR%,
         ADRI        XSTATS,X        < ON SAUTE LE COMPTEUR DE STATISTIQUES.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LR          W,Y             < Y=SAVE DIRECTIVE PRECEDENTE.
XWOR%:   VAL         0
         JIX         AVANT1
BERA1:   EQU         $               < PAS DE MOT CLE DANS LA CARTE.
         LAI         1
         BR          MERR
COTRO:   EQU         $
         IF          ORDI-"S",XWOR%,,XWOR%
         CPZR        Y
         JE          COTRO4          < C'EST DEJA LA PREMIERE DIRECTIVE...
         XR          W,X
         LAD         &ATABCO         < A=ADRESSE DIRECTIVE COURANTE.
         XR          W,X
         LRM         B,X
         WORD        SAVEC           < B=ADRESSE SAVE DIRECT. COURANTE.
         WORD        2+XSTATS        < X=NOMBRE DE MOTS MAX...
         PSR         B,X
         MOVE                        < SAVE LA DIRECTIVE COURANTE.
         XR          Y,X
         LAD         &ATABCO         < A=ADRESSE DIRECTIVE PRECEDENTE.
         XR          Y,X
         LRM         B,X
         WORD        SAVEP           < B=ADRESSE SAVE DIRECT. PRECEDENTE.
         WORD        2+XSTATS        < X=NOMBRE DE MOTS MAX...
         MOVE                        < SAVE LA DIRECTIVE PRECEDENTE.
         PLR         B,X             < X=NOMBRE DE MOTS MAX.
         XR          A,B             < A=ADRESSE SAVE DIRECT. COURANTE,
                                     < B=ADRESSE DIRECTIVE PRECEDENTE.
         MOVE                        < LA DIRECTIVE COURANTE REMPLACE LA
                                     < PRECEDENTE.
COTRO5:  EQU         $
         ADRI        1,Y             < Y INDEXE LE NUMERO DE LA DIRECTIVE
                                     < COURANTE LA OU ELLE EST...
         ADRI        2+XSTATS,B      < B=ADRESSE OU METTRE L'EX
                                     < DIRECTIVE PRECEDENTE...
         LXI         2+XSTATS
         LRM         A
         WORD        SAVEP           < A=ADRESSE SAVE DIRECT. PRECEDENTE,
                                     < X=NOMBRE DE MOTS EXACT...
         MOVE                        < LA DIRECTIVE PRECEDENTE REMPLACE
                                     < LA DIRECTIVE COURANTE.
         LR          Y,X             < X=INDEX DU NUMERO DE LA NOUVELLE
                                     < DIRECTIVE COURANTE.
COTRO4:  EQU         $
XWOR%:   VAL         0
         LA          &ATABCO         < A=NUMERO DE DIRECTIVE.
         ANDI        '00FF           < TIENT SUR 8 BITS...
         LR          A,W             < W=NUMERO DE DIRECTIVE.
         IF          XSTATS,XWOR%,XWOR%,
         CPI         146             < "EOT" ???
         LAI         1               < INCREMENT=1 A PRIORI.
         JNE         COTRO3          < NON, CE N'EST PAS "EOT"...
         AD          INDO            < OUI, C'EST "EOT" F LE 'DO' SUR
                                     < "EOT" N'ETANT PAS GERE COMME
                                     < LES AUTRES 'DO', IL FAUT PRENDRE
                                     < EN COMPTE IMMEDIATEMENT UNE
                                     < ITERATION EVENTUELLE ; A NOTER
                                     < QUE SI L'"EOT" SORT EN ERREUR,
                                     < LE NOMBRE D'OCCURENCES SERA
                                     < MAUVAIS !!!
COTRO3:  EQU         $
         ADRI        XSTATS,X        < POUR ACCES AU COMPTEUR :
         LB          &ATABCO         < B=NOMBRE D'OCCURENCES COURANT.
         ADR         B,A             < ON FAIT DES STATISTIQUES...
         STA         &ATABCO
         LA          NACQ
         CPI         9               < LA DIRECTIVE EST-ELLE DANS LA
                                     < PREMIERE ZONE ???
         JGE         COTROU          < NON, ON CONTINUE SON ASSEMBLAGE.
<
<
<        E D I T I O N   D U   N O M B R E
<        D E   R E F E R E N C E S   D I R E C T I V E  :
<
<
<        FONCTION :
<                      LORSQU'UNE DIRECTIVE FIGURE
<                    DANS LA PREMIERE ZONE, ELLE
<                    N'EST PAS ASSEMBLEE, ET L'ASSEM-
<                    BLEUR SE CONTENTE D'INDIQUER
<                    LE NOMBRE D'OCCURENCES DE CELLE-CI,
<                    NON COMPRIS L'OCCURENCE PRESENTE...
<
<
         STB         &ATABCO         < DECOMPTAGE DE CETTE OCCURENCE...
         BSR         CONVER          < CONVERSION DU NOMBRE...
         STA         &ZACQ11         < MISE EN PLACE
         STY         &ZACQ10         < DANS LE LISTING,
         LAD         IOCB4           < QUE L'ON EDITE,
         WORD        LISTIN
         BSR         PAGIN           < ET L'ON PAGINE...
         BR          ADEP            < VERS LA CARTE SUIVANTE...
XWOR%:   VAL         0
         IF          XSTATS,,,XWOR%
         JMP         COTROU
XWOR%:   VAL         0
DIRECT:  EQU         $               < DIRECTIVES.
         ADRI        -118,A
         ADRI        -16,A           < LE REPERTOIRE SOLAR 16.65
                                     < EST PLUS ETENDU QUE CELUI
                                     < DU PAUVRE T1600.
         STA         VALDIR
         ADRI        -7,W
         CPZ         ETAPH
         JE          C14
         JG          C13
         ADRI        -1,A            < ETAPH=-1 : TEST SI A=18.
C13:     EQU         $
         ADRI        -17,A           < ETAPH=1 : TEST SI A=17.
         JANE        C20
C14:     EQU         $
         LA          VALDIR
         CPI         12              < EOT?
         JNE         C15B
         CPZ         SYMBO1          < IF EN COURS ???
         JE          C15BB           < NON...
         BR          ADEP            < OUI, 'EOT' IGNORE !!!
C15BB:   EQU         $
         BR          AEOT
C15B:    EQU         $
         CPI         16
         JG          C15
         CPZ         NETIQ
         JE          C15
BERA3:   EQU         $               < ETIQUETTE INTERDITE SUR DIRECTIVE
         LAI         3
         BR          MERR
FALSEX:  JMP         FALSE           < RELAI...
C15:     EQU         $
         ADRI        -23,A
         JAL         MOTCLE
         CPI         2
         JNE         C16
         BSR         PAGE            < DIRECTIVE 'PAGE'.
         BR          ADEP
C16:     EQU         $
         IC          INDASC          < DIRECTIVES 'ASCI' ET 'IDP'.
         BSR         MACQ
         CPI         4
         JE          MOTCLE
         JMP         BERA1           < CE N'EST PAS UNE CHAINE DE
                                     < CARACTERES.
COTROU:  EQU         $
         LR          W,A
         PSR         W               < SAUVEGARDE W(WORD+BYTE).
         CPZ         SYMBO1
         JE          C17
         CPI         146             < TRAITEMENT IF EN COURS.
         JE          DIRECT          < DIRECTIVE 'EOT'.
         CPI         147
         JE          DIRECT          < DIRECTIVE 'END'.
BRADEP:  EQU         $
         BR          ADEP
C17:     EQU         $
         CPI         174
         JNE         C18
         DC          VALDIR
         BR          ARETD           < DIRECTIVE 'FLOAT'.
C18:     EQU         $
         CPI         134
         JLE         C19
         CPI         160
         JL          DIRECT
         IC          INFL
C19:     EQU         $
         CPZ         ETAPH           < INSTRUCTIONS T1600.
         JE          C21
C20:     EQU         $
         JG          BERA1           < $ DEVANT UN AUTRE MOT CLE
                                     < QUE 'EQU'.
FALSE:   EQU         $               < SYMBOLE INCORRECT.
         LAI         4
         BR          MERR
C21:     EQU         $
         CPI         174
         JL          EX1
         PSR         W
         LRP         W
         LB          5,W
         PLR         W
         PSR         B
         RSR                         < VERS LE TRAITEMENT DE
         WORD        EXTEND          < L'OPTION CDA.
EX1:     EQU         $
         CPI         102             < QUIT ???
         JE          C22XX           < OUI, TRAITE COMME 'ACTD' : QUIT N...
         CPI         101             < ACTD ???
         JNE         C22
C22XX:   EQU         $
         IC          INACTD          < ACTD OU QUIT...
C22:     EQU         $
         CPZ         SITUAT
         JL          C23
         LAI         13              < INSTRUCTIONS RENCONTREES HORS
         BR          MERR            < D'UNE SECTION 'PROG'.
C23:     EQU         $
         ADRI        -127,A
         CPI         33
         JL          CEPAF
         ADRI        -33,A           < CAS DES CODES FLOTTANTS.
         CPI         8
         JGE         C25
         SLLS        1               < CAS OU IL Y A OPERANDE.
         EORR        W,W             < W=0.
         JMP         CLASS2
C25:     EQU         $
         ADRI        -8,A            < CAS OU IL N'Y A PAS D'OPERANDE.
         SLLS        11
         LBI         96
         LR          B,W
         JMP         C27
CEPAF:   EQU         $
         JALE        C26
         ADRI        -56,W
         JMP         CLASS2
C26:     EQU         $
         ADRI        31,A
         JAGE        CLASS4
         ADRI        16,A
         JAGE        CLASS3
         ADRI        9,A
         JAG         CLASS2
         ADRI        31,A
         JAGE        CLASS1
         ADRI        40,A            < 'LBY' A 'JALE'.
         JMP         CLASS2
CLASS1:  EQU         $               < 'RBT' A 'LRP'.
         ORI         'A0
         SLLS        6
         JMP         C27
CLASS3:  EQU         $               < 'LAI' A 'ARM'.
         ORI         '10
         JMP         CLASS2
CLASS4:  EQU         $               < 'ACQ' A 'ROMB'.
         SLLS        8
         ORI         '1E
CLASS2:  EQU         $               < 'JNC' A 'ADRI' , 'JGE' A 'JLE'.
         SCLS        8
C27:     EQU         $
         STA         BINARY
MOTCLE:  EQU         $               < RECHERCHE TYPE DANS TACAT.
         LXI         0
C28:     EQU         $
         LBY         &ATACAT
         SBR         A,W
         CPZR        W
         JL          C29             < TROUVE.
         ADRI        1,X
         JMP         C28
C29:     EQU         $
         LBY         &ATALON
         ANDI        '1F
         STA         NLIG            < NUMERO DE LIGNE DANS NLIG.
         LBY         &ATALON
         SLRS        5
         LR          A,X
         LA          &ATACLE
         STA         CLE
C30:     EQU         $
         STZ         NELT
C31:     EQU         $
         LX          NLIG
         LA          &ATALIG
         STA         ZTR
NEWELT:  EQU         $
         DBT
         RBT         0,X
         STA         ZTR
         LB          NACQ            < SAUVEGARDES.
         LA          CARLU           < DANS KSTORE.
         PSR         A,B
         LBI         0
         BSR         IUSY
         LBI         6
         CPR         B,X
         JNE         C32
         BR          AFINF           < FIN DE CARTE.
C32:     EQU         $
         CPZ         NELT
         JE          C33
         CPI         '2C             < TEST ','.
         JNE         NOCONF
C33:     EQU         $
         LBI         -1
         BR          &ATATYP
REGIS:   EQU         $
         ADRI        1,B
BASE:    EQU         $
         ADRI        1,B
INDEX:   EQU         $
         STB         INDREG
         BSR         MACQ
         LXI         8
C34:     EQU         $
         LBY         &ATABRG
         SLLS        8
         CP          SYMBOL
         JE          C35
         JDX         C34
         JMP         NOCONF          < CE N'EST PAS UN NOM DE REGISTRE.
C35:     EQU         $
         LR          X,A
         CPZ         INDREG
         JG          REGIS1
         JE          BASE1
         CPI         3               < INDEX ???
         JNE         NOCONF
         CPZ         SITUAT          < EST-ON DANS UNE DSEC ???
         JG          C35C            < OUI, DONC LE SYMBOLE VIENT D'ETRE
                                     < SUPPRIME DE LA TABLE DES SYMBOLES
                                     < (VOIR A L'ETIQUETTE 'WORD'), IL NE
                                     < FAUT DONC PAS MODIFIER LA TABLE DES
                                     < SYMBOLES...
         CPZ         NIV             < SYMBOLE DEJA DEFINI ???
         JE          C35B            < OUI...
C35A:    EQU         $
         CPZ         BINARY          < TEST DE LA VALEUR DU CHAINAGE ???
         JGE         C35E            < OK, INFERIEUR A 32K...
         LAI         20              < C'EST BIEN DOMMAGE, MAIS ON
         BR          MERR            < NE PEUT PAS FAIRE AUTREMENT !!!
C35E:    EQU         $
         LA          &ATSY11         < SYMBOLE NON DEFINI, ET INDEXATION
         SBT         0               < DEMANDEE DESSUS, ON MEMORISE CE
         STA         &ATSY11         < FAIT DANS LE BIT0, AFIN QUE LORS
                                     < DE SA DEFINITION, ON REGARDE S'IL
                                     < NE DEPASSE PAS 32K !!!
         BSR         MODSB
         JMP         C35C
C35B:    EQU         $
         CPZ         &ATSYM0         < INDEXATION DEMANDEE SUR UN SYMBOLE
                                     < DEJA DEFINI; CELUI-CI N'EST-IL
                                     < PAS SUPERIEUR A 32K ???
         JGE         C35C            < NON, OK...
C35D:    EQU         $
         LAI         14              < OUI >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
<
<
<F1      GET CARACTERE :
<                                    2 - SI LE PREMIER OCTET DE (VALEUR)
<                                    VAUT 'F1 : SOM <-- CAR(SOM)+LE DEUXIEME
<                                    OCTET DE (VALEUR).
<
<
<F2      STORE CARACTERE :
<                                    3 - SI LE PREMIER OCTET DE (VALEUR)
<                                    VAUT 'F2 : CAR(SOM) <-- LE DEUXIEME
<                                    OCTET DE (VALEUR), PUIS SOM <-- CAR(SOM).
<                                    EXEMPLE : 'CAR'=ABCDEF 1='F134 DONNERA
<                                    SOM="B"+'34, ET 2='F241 DONNERA
<                                    'CAR'=ABADEF ET SOM="A"='41.
<
<
<F3      MOVE CHAINE DE CARACTERES :
<                                    4 - SI LE PREMIER OCTET DE (VALEUR)
<                                    VAUT 'F3, ALORS LE DEUXIEME OCTET DE
<                                    (VALEUR) DONNE UNE LONGUEUR 'LONG'
<                                    EXPRIMEE EN OCTETS, LE PREMIER (RESPEC-
<                                    TIVEMENT LE SECOND) OCTET DE SOM
<                                    DONNANT L'INDEX D'UNE ZONE EMETTRICE
<                                    RESPECTIVEMENT RECEPTRICE) DANS 'CAR',
<                                    PUIS FAIT SOM <-- 0.
<                                    EXEMPLE : 'CAR'=ABCDEF ALORS '0003='F302
<                                    DONNERA 'CAR'=ABCABF.
<
<
<F4      RECHERCHE D'UN CARACTERE :
<                                    5 - SI LE PREMIER OCTET DE (VALEUR)
<                                    VAUT 'F4, ALORS LE DEUXIEME OCTET DE
<                                    (VALEUR) DONNE UN CARACTERE A RECHER-
<                                    CHER DANS UNE CHAINE DEFINIE PAR UN
<                                    INDEX DE PREMIER CARACTERE A TESTER
<                                    (PREMIER OCTET DE (SOM)), ET PAR UN
<                                    INDEX DE PREMIER CARACTERE A NE PAS
<                                    TESTER (DEUXIEME OCTET DE (SOM)) ;
<                                    LORSQUE LE CARACTERE N'EST PAS TROUVE
<                                    OU LORSQUE LES INDEX SONT DANS UN
<                                    MAUVAIS ORDRE, LE RESULTAT EST L'INDEX
<                                    DE FIN, SINON, C'EST L'INDEX DU CARAC-
<                                    TERE CHERCHE...
<                                    EXEMPLE : 'CAR'=ABCDEF, ALORS :
<                                    '0205='F444 DONNERA SOM=4.
<
<
<F5      DEFINITION DU MASQUE COURANT :
<                                    6 - SI LE PREMIER OCTET DE (VALEUR)
<                                    VAUT 'F5, ALORS (SOM) DEVIENT LE
<                                    'MASQUE' COURANT, PUIS SOM RECOIT
<                                    L'OCTET DROIT DE (VALEUR) ;
<                                    PAR EXEMPLE 'FF00='F501 FAIT :
<                                    MASQUE <-- 'FF00, ET SOM <-- '01.
<
<
<F6      CADRAGE SUIVANT LE MASQUE COURANT :
<                                    7 - SI LE PREMIER OCTET DE (VALEUR)
<                                    VAUT 'F6, ALORS (SOM) CONTIENT UNE
<                                    VALEUR QUI VA ETRE CADREE DANS LE
<                                    MOT SUIVANT LE MASQUE COURANT POUR
<                                    DONNER 'V1', PUIS :
<                                    SOM <-- (V1)?(V2)+(OCTET DROIT DE Y)
<                                    PUIS V2 <-- (SOM) ; 'V2' EST DONC
<                                    UN CUMUL DES VALEURS CADREES SUIVANT
<                                    DES MASQUES DONNES ;
<                                    PAR EXEMPLE :
<                                    '0F00='F500+'0003='F600+'000F='F500
<                                    +'0007='F600 DONNERA LA VALEUR FINALE
<                                    DANS SOM : '0307.
<
<
<F7      ACCES TABLE DES SYMBOLES :
<                                    8 - SI LE PREMIER OCTET DE (VALEUR)
<                                    VAUT 'F7, ALORS LE PREMIER OCTET DE
<                                    (SOM) CONTIENT L'INDEX DU PREMIER
<                                    CARACTERE D'UN SYMBOLE DONT LA LONGUEUR
<                                    EST CONTENUE DANS LE DEUXIEME OCTET
<                                    DE (SOM) ; CE SYMBOLE ETANT EN GENERAL
<                                    DANS UNE CARTE DYNAMIQUE ;
<
<F700    ETAT D'UN SYMBOLE :
<                                    8.1 - SI LE DEUXIEME OCTET DE (VALEUR)
<                                    VAUT '00, ELLE RENVOIE L'ETAT DU SYMBOLE
<                                    SUIVANT LE FORMAT PRESCRIT PAR LA ROUTINE
<                                    'RETIQ', ET EN PARTICULIER '0000 S'IL
<                                    N'EXISTE PAS, ET ENFIN :
<                                    SOM <-- 'ETAT SYMBOLE'.
<
<F701    MODIFICATION DE L'ETAT D'UN SYMBOLE :
<                                    8.2 - SI LE DEUXIEME OCTET DE (VALEUR)
<                                    VAUT '01, SI L'ON NOTE 'ES' L'ETAT
<                                    DU SYMBOLE, ON FAIT ALORS :
<                                    ES <-- (ES.AND.MASK).OR.VAL, OU 'MASK'
<                                    ET 'VAL' DESIGNENT RESPECTIVEMENT LE
<                                    MASQUE ET LA VALEUR DEFINIS PAR LES
<                                    FONCTIONS RESPECTIVES 'F5 ET 'F6.
<                                    ENFIN : SOM <-- NOUVEL 'ETAT SYMBOLE'.
<
<
<F8      ACCES AU COMPTE D'ITERATION 'INDO' :
<                                    9 - SI LE PREMIER OCTET DE (VALEUR)
<                                    VAUT 'F8, ALORS :
<                                    SOM <-- (SOM)+(DEUXIEME OCTET DE
<                                    VALEUR)+(INDO).
<
<
<F9      ACCES AU COMPTE D'ITERATION DES 'EOT' 'SINDO' :
<                                    10 - SI LE PREMIER OCTET DE (VALEUR)
<                                    VAUT 'F9, ALORS :
<                                    SOM <-- (SOM)+(DEUXIEME OCTET DE
<                                    VALEUR)+(SINDO).
<
<
         IF          ORDI-"S",XWOR%,,XWOR%
<FA      CONVERSIONS ASCI-BINAIRE ET ABSOLUE-TRANSLATABLE :
XWOR%:   VAL         0
<                                    11 - SI LE PREMIER COCTET DE (VALEUR)
<                                    VAUT 'FA, ALORS DES PROCESSUS DE
<                                    CONVERSION SONT DECLENCHES :
<
<FA00    CONVERSION BINAIRE --> ASCI HEXADECIMAL :
<                                    11.1 - SI LE DEUXIEME OCTET DE (VALEUR)
<                                    VAUT '00, ALORS (SOM) EST CONVERTI SOUS
<                                    FORME DE 2 CARACTERES ASCI HEXA-DECIMAUX
<                                    SI CELA EST POSSIBLE.
<
<FA01    CONVERSION ASCI HEXADECIMAL --> BIANIRE :
<                                    11.2 - SI LE DEUXIEME OCTET DE (VALEUR)
<                                    VAUT '01, ALORS (SOM) EST SUPPOSE CONTENIR
<                                    UN CARACTERE ASCI HEXA-DECIMAL QUI
<                                    EST ALORS CONVERTI EN BINAIRE.
         IF          ORDI-"S",XWOR%,,XWOR%
<
<FA02    CONVERSION TRANSLATABLE-ABSOLUE :
<                                    11.3 - L'EXPRESSION 'SOM' COURANTE
<                                    EST FORCEE EN MODE 'ABSOLU'.
<
<FA03    CONVERSION ABSOLUE-TRANSLATABLE :
<                                    11.4 - L'EXPRESSION 'SOM' COURANTE
<                                    EST FORCEE EN MODE 'TRANSLATABLE'.
XWOR%:   VAL         0
<
<
<FB      EXECUTION D'UNE INSTRUCTION :
<                                    12 - SI LE PREMIER OCTET DE (VALEUR)
<                                    VAUT 'FB, ALORS :
<                                    A <-- (SOM),
<                                    Y <-- (DEUXIEME OCTET DE VALEUR),
<                                    B <-- 0,
<                                    X <-- 0,
<                                    PUIS ON EXECUTE LE CONTENU DU MASQUE
<                                    COURANT QUI EST SUPPOSE CONTENIR UNE
<                                    INSTRUCTION DONNANT SON RESULTAT DANS
<                                    LE REGISTRE A, PUIS FAIT :
<                                    A <-- (A).EORR.(B),
<                                    A <-- (A).EORR.(X), PERMETTANT AINSI
<                                    D'EXECUTER DES INSTRUCTIONS FOURNISSANT
<                                    LEUR RESULTAT DANS UN SEUL DES 3 REGISTRES
<                                    A, B OU X ; EXEMPLE :
<                                    '1E15='F500(0+'3000='FB00)'3000 DONNERA LE
<                                    CONTENU DE LA MEMOIRE D'ADRESSE
<                                    ABSOLUE '3000.
<
<
<FC      INTERPRETATION D'UNE SEQUENCE EN LANGAGE MACHINE :
<                                    13 - SI LE PREMIER OCTET DE (VALEUR)
<                                    VAUT 'FC, ALORS :
<                                    A <-- SOM,
<                                    L'ASSEMBLEUR FAIT UN 'BSR' A UN SOUS-
<                                    PROGRAMME QU'IL SUPPOSE GENERE EN
<                                    BINAIRE DANS LA CARTE DYNAMIQUE PAR
<                                    LE PROGRAMME UTILISATEUR, ET DONT LE
<                                    POINT D'ENTREE SUPPOSE EST A L'ADRESSE
<                                    ADRESSE-CARTE-DYNAMIQUE A LAQUELLE
<                                    EST AJOUTEE LE DEUXIEME OCTET DE
<                                    (VALEUR).
         IF          ORDI-"S",XWOR%,,XWOR%
<
<
<FD      RESTE D'UNE DIVISION ENTIERE :
<                                    14 - SI LE PREMIER OCTET DE (VALEUR) VAUT
<                                    'FD, ALORS :
<                                    A <-- (SOM)+(DEUXIEME OCTET DE VALEUR)+(R),
<                                    OU (R) VAUT 0 OU LE DERNIER RESTE DE
<                                    DIVISION ENTIERE DANS CETTE
<                                    EXPRESSION.
<
<
<FE      PUSH/PULL :
<                                    15 - SI LE PREMIER OCTET DE (VALEUR)
<                                    VAUT 'FE, ALORS DES VALEURS DE (SOM)
<                                    PEUVENT ETRE EMPILEES/DEPILEES :
<
<FE00    PUSH :
<                                    15.1 - LA PILE 'PUSPUL' <-- (SOM).
<
<FE01    PULL :
<                                    15.2 - SOM <-- (LA VALEUR DEPILEE DE
<                                    LA PILE 'PUSPUL')+(SOM).
<
<FE02    PULL-EXU :
<                                    15.3 - SOM RESTE SOM,... MAIS
<                                    LA VALEUR DEPILEE DEVIENT LA NOUVELLE
<                                    OPERANDE DROITE DE "=", ET ON RETRAITE
<                                    L'OPERATEUR "=" AVEC 'SOM'='VALEUR
<                                    DEPILEE'.
<
<
<FF      SIGNE D'UNE EXPRESSION :
<                                    16 - SI LE PREMIER OCTET DE (VALEUR)
<                                    VAUT 'FF, ALORS :
<                                    SOM <-- (S)+(DEUXIEME OCTET DE
<                                    VALEUR), OU :
<                                    S=-1 SI (SOM)<0,
<                                    S=0  SI (SOM)=0,
<                                    S=+1 SI (SOM)>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          <EST-CE L'INITIALISATION?
         STZ         PGSYMU          < OUI - INIT. N0 PAGE
         BSR         INSY            < INITIALISATION PAGE
         PLR         B,Y,C
         RSR
MULSY1:  EQU         $
         LA          PTSYMU          < FIN DE PAGE?
         CP          PTFINP
         JL          MULSY5
         IC          PGSYMU          < OUI - PAGE SUIVANTE?
         LA          PGSYMU
         CP          NBPAGE
         JG          MULSY3
         LR          A,X             < OUI - RESIDENTE?
         STX         RESERV
         LA          &ADTBPG
         TBT         8
         JNC         MULSY2
         LXI         0
         BSR         ECRP
         LXI         0               < LIRE LA PAGE
         BSR         LIRP
MULSY2:  EQU         $
         BSR         INVP            < INVERSER DESC.
         BSR         INSY            < INITIALISATION PAGE
         JMP         MULSY1
MULSY3:  EQU         $
         BSR         DRPR            < FIN - RAMENER DERNIERE PAGE
         LAI         0               < INDIC FIN
MULSY4:  EQU         $
         CPZR        A               < POSITIONNER CC
         PLR         B,Y,C
         RSR
MULSY5:  EQU         $
         AD          PRSYMU          < SYMBOLE POINTE?
         LR          A,X
         LA          PTSYMU
         AD          LGSYMU
         STA         PTSYMU
         CPZ         &ADPAGE
         JE          MULSY1
         LB          ADDSYM          < DESC. DANS ZONSYM
         LAD         &ADPAGE
         LXI         5
         MOVE
         IF          XXXSGN-0,XWOR%,,XWOR%
         LR          A,B
         LAD         SYMCOM
         XR          A,B
         ADRI        2,A
         LXI         2
         MOVE
         BSR         DCSY
XWOR%:   VAL         0
         LAI         1
         JMP         MULSY4
<
<
<        INITIALISATION POUR RECHERCHE SYMBOLE SUIVANT
<        LORS D'UN CHANGEMENT DE PAGE
<
<
SPINSY:  EQU         $
         LXI         0               < @ MEMOIRE PAGE
         LA          &ADTBPG
         AND         MASKRP
         SLLS        1
         STA         PRSYMU
         AD          LGPAGE          < @ FIN DE PAGE
         LR          A,X
         LA          &ADPAGE
         CPI         0
         JNE         INSY1
         LA          LGPAGE
INSY1:   EQU         $
         STA         PTFINP
         LXI         0               < LG POUR CETTE PAGE
         LA          &ADTBPG
         IF          XXXSGN-1,XWOR%,,XWOR%
         SLLS        2
         SLRS        14
         ADRI        2,A
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
         SLLS        3
         SLRS        15
         ADRI        3,A
XWOR%:   VAL         0
         STA         LGSYMU
         STA         PTSYMU          < PT DANS LA PAGE(0+NOM)
         RSR
         USE         C
         PAGE
<
<
<        INSERTION D'UN DEPLACEMENT
<
<
PINSDP:  EQU         $
         LX          NDEP            < ADRESSE DEP
         LAD         &ATDEP
         LR          A,B
         PSR         C               < CHANGER LA BASE
         LA          COM1
         LR          A,C
         USE         C,COMM1
         LX          NSYMB           < TEST PLACE
         LAD         &ADPAGE
         SBR         A,B
         ADRI        -2,B
         CPZR        B
         JGE         IDEP1
         BSR         PLMM            < NON - AUGMENTER MEMOIRE?
         JAE         IDEP1
         LA          NSYMB           < DIMINUER LIMITE MEMOIRE
         SB          LGPAGE
         ADRI        -1,A
         STA         NSYMB
         LXI         0               < TROUVER DERNIRE PAGE MEMOIRE
IDEP2:   EQU         $
         LA          &ADTBPG
         AND         MASKRP
         SLLS        1
         CP          NSYMB
         JE          IDEP3
         ADRI        1,X
         JMP         IDEP2
IDEP3:   EQU         $
         STX         SAUVX
         LX          NBPGRS          < ECRIRE PAGE MOINS UTILISEE
         BSR         ECRP
         LA          NBPGRS          < EST-CE LA MEME?
         CP          SAUVX
         JE          IDEP4
         LR          Y,X             < NON - TRANSFERER PAGE MEMOIRE
         LAD         &ADPAGE
         LR          A,B
         LX          NSYMB
         LAD         &ADPAGE
         LX          LGPAGE
         ADRI        1,X
         MOVE
         LX          SAUVX           < MISE-A-JOUR DESC.
         LA          &ADTBPG
         AND         MASKRM
         SCLS        1
         ORR         Y,A
         SCRS        1
         STA         &ADTBPG
         LY          NSYMB
IDEP4:   EQU         $
         LX          LGPAGE          < REMETTRE MEMOIRE A ZERO
         ADR         Y,X
         STZ         &ADPAGE
         LR          Y,X
         LAD         &ADPAGE
         LR          A,B
         ADRI        1,A
         LX          LGPAGE
         MOVE
         LX          NBPGRS          < RENDRE NON RESIDENTE
         LA          &ADTBPG
         SBT         8
         STA         &ADTBPG
         DC          NBPGRS
         JGE         IDEP1
         PLR         C               < PLUS DE PAGE RESIDENTE
         USE         C
         LAI         21
         BR          MERR
IDEP1:   EQU         $
         PLR         C
         LX          NDEP            < PLACEMENT
         CPZ         BINARY          < BINARY=0 SI 'WORD'
         LA          NIV
         JE          INSDP1
         SBT         0
INSDP1:  EQU         $
         STA         &ATDEP
         LA          SOM
         STA         &ATDEP1
         LA          PAS
         STA         &ATDEP2
         ADRI        -3,X
         STX         NDEP
         RSR
         USE         C,COMM1
         PAGE
<
<
<        AUGMENTER LA MEMOIRE DE 2K
<
<
SPPLMM:  EQU         $
         LA          DEMMEM+2        < EST-ON A 8K?
         IF          ORDI-"S",XWOR%,,XWOR%
         JAL         PLMM2           < RIEN A FAIRE, ON A DEJA LE MAX...
XWOR%:   VAL         0
         CP          MAXMEM
         JGE         PLMM1
         LAI         1               < NON - 2K DE PLUS
         SLLS        12
         AD          DEMMEM+2
         IF          ORDI-"S",XWOR%,,XWOR%
PLMM03:  EQU         $
XWOR%:   VAL         0
         STA         DEMMEM+2
         LAD         DEMMEM
         SVC         0
         IF          ORDI-"S",XWOR%,,XWOR%
         JNE         PLMM2           < BIZARRE !!!
XWOR%:   VAL         0
         LR          K,A             < RESTAURER C
         ADRI        -1,A            < POUR DEPLACER TDEP
         LR          A,C
         LA          0,C
         LR          A,C
         USE         C
         LX          NDEP
         LAD         &ATDEP
         ADRI        1,A
         LR          A,B
         LAI         1
         SLLS        11
         ADR         B,A
         XR          A,B
         NGR         X
         MOVE
         LB          ATDEP           < DPLACER LES POINTEURS
         LAI         1
         SLLS        11
         ADR         B,A
         STA         ATDEP
         ADRI        -1,A
         STA         ATDEP1
         ADRI        -1,A
         STA         ATDEP2
         LX          NDEP            < REMETTRE A ZERO
         LAD         &ATDEP
         LB          COM1
         LR          B,C
         USE         C,COMM1
         STA         ADRDEP
         STZ         &ADRDEP
         LX          NSYMB
         LAD         &ADPAGE
         LR          A,B
         SB          ADRDEP
         LR          A,X
         LR          B,A
         ADRI        1,A
         MOVE
PLMM01:  EQU         $
         LA          NSYMB           < RESTE-T'IL DE LA PLACE?
         LR          A,Y
         AD          LGPAGE
         ADRI        1,A
         LR          A,X
         LAD         &ADPAGE
         CP          ADRDEP
         JGE         PLMM2
         LA          NBPGRS          < OUI - PAGES NON RESIDENTES?
         CP          NBPAGE
         JGE         PLMM02
         STX         NSYMB           < OUI - RESERVER LA PLACE
         IC          NBPGRS          < UNE PAGE RESIDENTE DE PLUS
         LX          NBPGRS          < @ MEMOIRE DANS DESCRIPTEUR
         LA          &ADTBPG
         AND         MASKRM
         SCLS        1
         ORR         Y,A
         SCRS        1
         STA         &ADTBPG
         BSR         LEPG            < LIRE LA PAGE ET SUIVANTE
         JMP         PLMM01
PLMM02:  EQU         $
         LAI         0
         RSR
PLMM1:   EQU         $
         LA          NBPAGE
         SB          NBPGRS
NPNR:    VAL         0               < SEUIL D'ALLOCATION MEMOIRE.
         CPI         NPNR
         JL          PLMM2
         LAI         1               < SI PLUS DE NPNR PAGES NON
         SLLS        12              < RESIDENTES, ESSAYER D'AUGMENTER
         AD          DEMMEM+2
         IF          ORDI-"T",XWOR%,,XWOR%
         CP          MAXPAR          < LA TAILE MEMOIRE
         JG          PLMM2
XWOR%:   VAL         0
         STA         MAXMEM
         IF          ORDI-"T",XWOR%,,XWOR%
         JMP         SPPLMM
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         JMP         PLMM03
XWOR%:   VAL         0
PLMM2:   EQU         $
         LAI         1
         RSR
         PAGE
<
<
<        LECTURE UNE PAGE (X = N0 DESC.)
<
<
SPLEPG:  EQU         $
         LB          &ADTBPG         < LIRE LA PAGE
         BSR         RCPG
         IF          XXXSGN-0,XWOR%,,XWOR%
         LBI         0               < CLEAR...
         LA          &ADTBPG
         ANDI        '3F
         SCLD        16-4            < B=NUMERO DE MOT,
         SLRS        16-4
         PSR         X,W
         LR          A,X             < X=NUMERO DE BIT.
         LRM         W
         WORD        PAGEX           < LISTE D'EXISTENCE DES PAGE.
         ADR         B,W             < W=ADRESSE DU MOT CONCERNE...
         LA          0,W
         TBT         0,X             < LA PAGE DEMANDEE EXISTE-T'ELLE ???
         PLR         X,W
         JNC         LEPG2           < NON...
XWOR%:   VAL         0
         LA          RECPAG
         STA         COMPAG
         IF          XXXSGN-1,XWOR%,,XWOR%
         LAD         COMPAG
         SVC         0
         JE          LEPG1
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
         LA          &ADTBPG
         ANDI        '3F             < A=NUMERO DE PAGE VIRTUELLE.
         SLLS        XLGPAG*2=0      < A=ADRESSE OCTET VIRTUELLE.
         LB          COMPAG+1        < B=ADRESSE OCTET REELLE.
         SLRD        1               < CONVERSION EN ADRESSES MOTS.
         LRM         X
         WORD        XLGPAG          < X=LONGUEUR MOT D'UNE PAGE.
         RCDA
         JMP         LEPG1           < ET C'EST FINI...
LEPG2:   EQU         $
XWOR%:   VAL         0
         LX          LGPAGE          < PAGE INEXISTANTE
         ADR         Y,X
         LA          LGH             < PT DE DEBORDEMENT
         STA         &ADPAGE
         ADRI        -1,X            < MISE A ZERO
         STZ         &ADPAGE
         LR          Y,X
         LAD         &ADPAGE
         ADRI        3,A
         LR          A,B
         ADRI        1,A
         LX          LGPAGE
         ADRI        -4,X
         MOVE
LEPG1:   EQU         $
         RSR
         PAGE
<
<
<        ECRITURE UNE PAGE (X = N0 DESC.)
<
<
SPECRP:  EQU         $
         LB          &ADTBPG         < @ PAGE
         BSR         RCPG
         LB          &ADTBPG         < MODIFIEE?
         TBT         16
         JC          ECRP1
         RSR                         < NON
ECRP1:   EQU         $
         RBT         16              < OUI - RESET
         STB         &ADTBPG
         BSR         RCPG            < NOM DE PAGE
         LA          DETPAG          < DETRUIRE
         STA         COMPAG
         IF          XXXSGN-1,XWOR%,,XWOR%
         LAD         COMPAG
         SVC         0
XWOR%:   VAL         0
         LA          CREPAG          < ECRIRE
         STA         COMPAG
         IF          XXXSGN-1,XWOR%,,XWOR%
         LAD         COMPAG
         SVC         0
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
         PSR         X
         LA          &ADTBPG
         ANDI        '3F             < A=NUMERO DE PAGE VIRTUELLE.
         SLLS        XLGPAG*2=0      < A=ADRESSE OCTET VIRTUELLE.
         LB          COMPAG+1        < B=ADRESSE OCTET REELLE.
         SLRD        1               < CONVERSION EN ADRESSES MOTS.
         LRM         X
         WORD        XLGPAG          < X=LONGUEUR MOT D'UNE PAGE.
         WCDA
         PLR         X
         LA          &ADTBPG
         ANDI        '3F             < A=NUMERO DE PAGE VIRTUELLE...
         LR          A,X
         LRM         A
         WORD        PAGEX
         SBTM        0,X             < LA PAGE EXISTE MAINTENANAT...
XWOR%:   VAL         0
         RSR
         PAGE
<
<
<        CALCUL HASH (RESUL DANS X)
<
<
SPCALH:  EQU         $
         IF          XXXSGN-1,XWOR%,,XWOR%
         LA          LG2             < CALCUL LG OCCUPEE
         ADRI        2,A
         STA         LG1
         LAI         3               < CALCUL COEF
         SB          LG2
         SLLS        3
         ADRI        2,A
         STA         COEF
         EORR        Y               < RESUL=0
         LXI         0               < 1ER CARAC
CALH1:   EQU         $
         LBY         &RELAD          < FIN SI CARAC NULL
         JAE         CALH3
         ADRI        -'30,A          < VALEUR ENTRE 0 ET 35
         CPI         9
         JLE         CALH2
         ADRI        -7,A
CALH2:   EQU         $
         XR          A,Y             < INTEGRER AU RESUL
         MP          COEF
         ADR         B,Y
         ADRI        1,X             < CARAC SUIVANT
         LR          X,A             < FIN?
         SLRS        1
         CP          LG2
         JL          CALH1
CALH3:   EQU         $
         LA          LG2             < LG=2?
         CPI         2
         JNE         CALH4
         LR          Y,B             < OUI - TRAITER EN DECALAGE CAR
         LAI         0               < NB PEUT ETRE > 32000
         SLLD        2
         JMP         CALH5
CALH4:   EQU         $
         LR          Y,A
         MP          LG1
CALH5:   EQU         $
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
         LA          LG3             < LONGUEUR D'UNE ENTREE
         ANDI        1
         ADRI        3,A
         STA         LG1
         LA          BASCH           < INVERSION DE LA BASCULE
         EORI        -1
         STA         BASCH
         EOR         SYMCOM          < INTEGRATION DU SYMBOLE
         EOR         SYMCOM+1
         LR          A,B
         LAI         0
         DV          LG1             < TRANSFORMER EN ENTREE POSSIBLE
         MP          LG1
XWOR%:   VAL         0
         DV          LGH
         LR          B,X
         RSR
         PAGE
<
<
<        RENDRE UNE PAGE RESIDENTE
<
<
SPLIRP:  EQU         $
         LA          &ADTBPG         < @ MEMOIRE
         AND         MASKRP
         SLLS        1
         LR          A,Y
         LA          &ADTBPG         < RENDRE NON RESIDENTE
         SBT         8
         STA         &ADTBPG
         LX          RESERV          < RENDRE RESIDENTE
         LA          &ADTBPG
         AND         MASKRM
         SCLS        1
         ORR         Y,A
         SCRS        1
         STA         &ADTBPG
         BSR         LEPG            < LIRE
         STY         RESERY
         RSR
<
<
<        AMENER UN DESC. EN TETE DE PILE
<
<
SPTTPL:  EQU         $
         CPZR        X               < PREMIERE?
         JE          TTPL1
         STX         RESERV          < NON - PRELEVER DESC.
         LY          &ADTBPG
         LXI         0               < DEPLACER LES AUTRES
         LAD         &ADTBPG
         LR          A,B
         ADRI        1,B
         LX          RESERV
         MOVE
         LXI         0               < REMETTRE DESC.
         STY         &ADTBPG
TTPL1:   EQU         $
         RSR
<
<
<        COMPARER SYMBOLE FOURNI AVEC SYMBOLE TROUVE
<
<
SPCHSB:  EQU         $
         STX         SAUVX
         ADRI        2,X
         IF          XXXSGN-1,XWOR%,,XWOR%
         LY          LG2
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
         LA          LG3
         ANDI        1
         ADRI        1,A
         LR          A,Y
XWOR%:   VAL         0
         LBI         0
CHSB1:   EQU         $
         LA          &ADPAGE         < COMP. MOT A MOT
         XR          X,B
         IF          XXXSGN-1,XWOR%,,XWOR%
         CP          &RELAD
XWOR%:   VAL         0
         IF          XXXSGN-0,XWOR%,,XWOR%
         CP          &ASMCOM
XWOR%:   VAL         0
         XR          X,B
         JNE         CHSB3
         ADRI        1,X             < MOT SUIVANT
         ADRI        1,B
         ADRI        -1,Y
         CPZR        Y               < FIN?
         JNE         CHSB1
         LAI         0               < TROUVE
CHSB2:   EQU         $
         LX          SAUVX
         RSR
CHSB3:   EQU         $
         LAI         1               < DIFFERENT
         JMP         CHSB2
<
<
<        INVERSION DE DEUX DESCRIPTEURS PAGE
<
<
SPINVP:  EQU         $
         CPZ         RESERV
         JE          INVP1
         LX          RESERV
         LYI         0
         LA          &ADTBPG
         LR          A,B
         XR          X,Y
         LA          &ADTBPG
         XR          X,Y
         STA         &ADTBPG
         XR          X,Y
         STB         &ADTBPG
INVP1:   EQU         $
         RSR
<
<
<        RELIRE LA DERNIERE PAGE SI INSUCCES RECH. SYMBOLE
<
<
SPDRPR:  EQU         $
         LXI         0
         LY          &ADTBPG
         LX          NBPAGE          < @ FIN TABLE+1
         ADRI        1,X
         LAD         &ADTBPG
         SBT         0               < INDEXATION
         STA         SAUVX
         NGR         X
DRPR1:   EQU         $
         JIX         DRPR2
         LX          NBPAGE          < FIN - PLACER LE DERNIER
         STY         &ADTBPG
         LA          NBPAGE          < RELIRE DERNIERE SI NECESSAIRE
         CP          NBPGRS
         JLE         DRPR3
         LX          NBPGRS
         STX         RESERV
         LX          NBPAGE
         BSR         LIRP
DRPR3:   EQU         $
         RSR
DRPR2:   EQU         $
         LA          &SAUVX          < TRANSF. UN DESC.
         ADRI        -1,X
         STA         &SAUVX
         ADRI        1,X
         JMP         DRPR1
<
<
<        CALCUL NOM PAGE ET @ MEMOIRE(Y)
<
<
SPRCPG:  EQU         $
         PSR         X
         LR          B,A             < @ MEMOIRE
         AND         MASKRP
         SLLS        1
         LR          A,Y
         LR          A,X
         LAD         &ADPAGE         < DANS LA COMMANDE
         SLLS        1
         STA         COMPAG+1
         IF          ORDI-"T",XWOR%,,XWOR%
         LAI         "@"             < NOM
         SWBR        A
         ORI         "@"
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LRM         A               < NOM
         WORD        '4040
XWOR%:   VAL         0
         STA         &ADPAGE
         ADRI        1,X
         SCRD        4
         SLRS        4
         SCRD        3
         SLRS        5
         AD          AA
         STA         &ADPAGE
         ADRI        1,X
         LA          IDESC
         STA         &ADPAGE
         PLR         X
         RSR
<
<
<        ELIMINATION DES PAGES
<
<
SPELPG:  EQU         $
<
< RAZ DE LA 1ERE PAGE, CAR SINON....
<
         LX          COMPAG+2        < X=LONGUEUR DES 2 PREMIERES
                                     < PAGES...
ET1702:  EQU         $
         STZ         &ADPAGE
         JDX         ET1702
<
< ELIMINATION DES PAGES :
<
         LXI         0               < SE SERVIR DE LA PREMIERE
         LAD         &ADPAGE         < @ DANS COMMANDE
         SLLS        1
         STA         COMPAG+1
         IF          ORDI-"T",XWOR%,,XWOR%
         LAI         "@"
         SWBR        A
         ORI         "@"
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LRM         A               < NOM
         WORD        '4040
XWOR%:   VAL         0
         STA         &ADPAGE         < NOM
         ADRI        1,X
         LA          AA
         STA         &ADPAGE
         ADRI        1,X
         LA          IDESC
         STA         &ADPAGE
         LA          DETPAG          < COMMANDE DETRUIRE
         STA         COMPAG
         LXI         64              < NB MAX PAGES
         LYI         17              < NB MAX PAGES ABSENTES CONSECUT.
ELPG1:   EQU         $
         PSR         X               < DETRUIRE
         IF          XXXSGN-1,XWOR%,,XWOR%
         LAD         COMPAG
         SVC         0
XWOR%:   VAL         0
         PLR         X
         JE          ELPG4
         ADRI        -1,Y            < PAGE ABSENTE
         CPZR        Y
         JLE         ELPG3
         JMP         ELPG5
ELPG4:   EQU         $
         LYI         17              < PAGE PRESENTE
ELPG5:   EQU         $
         PSR         X
         LXI         1               < NOM DE LA PAGE SUIVANTE
         LA          &ADPAGE
         ADRI        1,A
         STA         &ADPAGE
         ANDI        'FF
         CPI         "P"
         JLE         ELPG2
         LA          &ADPAGE
         SLRS        8
         ADRI        1,A
         SLLS        8
         ORI         "A"
         STA         &ADPAGE
ELPG2:   EQU         $
         PLR         X
         JDX         ELPG1
ELPG3:   EQU         $
         RSR
         IF          XXXSGN-0,XWOR%,,XWOR%
<
<        COMPACTION D'UN SYMBOLE
<
SPCPSY:  EQU         $
         PSR         A,B,X,W
         STZ         SYMCOM+1
         LBI         0               < CALCUL DE LA NOUVELLE LONGUEUR
                                     < UN MOT A PRIORI NON COMPACTE
         LA          LG2             < SI LA LONGUEUR EST 1 OU 2 CARACTERES
         CPI         1               < ELLE RESTERA A UN MOT NON COMPACTE
         JE          CPSY2
         LBI         1               < LONGUEUR A PRIORI DE 1 POUR
                                     < 4,5 OU 6 CARACTERES
         CPI         3               < SI ELLE EST DE 5 OU 6,
         JE          CPSY1           < LA LONGUEUR EST DE 1 EN COMPACTE
         LXI         3               < DISCRIMINATION DES 3 OU 4 CARACTERES
         LBY         &RELAD
         JANE        CPSY2
         LBI         0               < 3 CARACTERES - 1 MOT COMPACTE
CPSY1:   EQU         $
         SBT         16+14           < SYMBOLE COMPACTE
CPSY2:   EQU         $
         PSR         B
         LAD         SYMCOM          < TRANSFERT DU SYMBOLE
         LR          A,B
         LXI         0
         LAD         &RELAD
         LXI         3
         MOVE
         PLR         B
         TBT         16+14           < SI LE SYMBOLE N'EST PAS COMPACTE,
         JNC         CPSY3           < C'EST FINI
         LXI         0               < COMPACTAGE DES 3 PREMIERS CARACTERES
         BSR         CPS3
         STA         SYMCOM
         TBT         16+15           < EST-CE FINI?
         JNC         CPSY3           < OUI
         BSR         CPS3            < NON - COMPACTAGE DU RESTE
         STA         SYMCOM+1
CPSY3:   EQU         $
         STB         LG3             < FIN
         PLR         A,B,X,W
         RSR
<
<        COMPACTAGE DE 3 CARACTERES
<
SPCPS3:  EQU         $
         PSR         B,Y
         EORR        W               < RESULTAT=0
         LYI         3               < NB DE CARACTERES A TRAITER
CPS31:   EQU         $
         LBY         &RELAD          < RAMENER LE CARACTERE ENTRE 0 ET 39
         JAE         CPS32
         ADRI        -'2F,A
         CPI         'A
         JLE         CPS32
         ADRI        -6,A
CPS32:   EQU         $
         XR          A,W             < L'INTEGRER AU RESULTAT
         MP          M40
         ADR         B,W
         ADRI        1,X             < PASSER AU CARACTERE SUIVANT
         ADRI        -1,Y
         CPZR        Y
         JG          CPS31
         LR          W,A             < RESULTAT
         PLR         B,Y
         RSR
<
<        DECOMPACTAGE D'UN SYMBOLE
<
SPDCSY:  EQU         $
         PSR         A,B,X
         LB          &ADDSYM         < LE SYMBOLE EST-IL COMPACTE?
         TBT         16+14
         JNC         DCSY1           < NON - C'EST FINI
         LA          SYMCOM          < OUI - DECOMPACTER LE PREMIER MOT
         LXI         2
         BSR         DCS3
         LXI         3               < RAZ DU 4EME CARACTERE
         LAI         0
         STBY        &AZNSYM
         TBT         16+15           < EST-CE FINI?
         JNC         DCSY1           < OUI
         LA          SYMCOM+1        < NON - FINIR
         LXI         5
         BSR         DCS3
DCSY1:   EQU         $
         LA          &ADDSYM         < RENDRE LA BONNE LONGUEUR
         TBT         14
         JC          DCSY2
         ADRI        1,A
DCSY2:   EQU         $
         STA         &ADDSYM
         PLR         A,B,X
         RSR
<
<        DECOMPACTAGE D'UN MOT
<
SPDCS3:  EQU         $
         PSR         A,B,Y
         LYI         3               < NOMBRE DE CARACTERES
         LR          A,B
DCS31:   EQU         $
         LAI         0               < EXTRAIRE UN CARACTERE
         DV          M40
         XR          A,B
         JAE         DCS33
         CPI         'A              < LE REFORMER
         JLE         DCS32
         ADRI        6,A
DCS32:   EQU         $
         ADRI        '2F,A
DCS33:   EQU         $
         STBY        &AZNSYM
         ADRI        -1,X            < ET SUIVANT
         ADRI        -1,Y
         CPZR        Y
         JG          DCS31
         PLR         A,B,Y
         RSR
XWOR%:   VAL         0
         USE         C
         PAGE
         IF          ORDI-"S",XWOR%,,XWOR%
<
<
<        S I M U L A T I O N   S V C   L I S T I N G  :
<
<
<        ARGUMENT :
<                    A=ADRESSE DEMANDE (IOCB3/IOCB4).
<
<
SISVC:   EQU         $
         CPZ         KLIST           < LISTING EN COURS ???
         JG          SISVC1          < NON, RIEN A FAIRE...
         JL          $               < ERREUR PROGRAMME !!!
         SVC         0               < OUI, ON EDITE...
SISVC1:  EQU         $
         RSR
XWOR%:   VAL         0
         PAGE
<
<
<        E D I T I O N   D U   B I N A I R E  :
<
<
SPSO1:   EQU         $               < SORTIE UN QUADRUPLET.
         ANDI        'FF
         STA         BUF
         STB         BUF+1
         JMP         C1620
SORTQ:   EQU         $
         LXI         -3
C161:    EQU         $
         LBY         &ABUF           < ELIMINATION DES NULLS.
         JAG         C162
         LAI         " "             < ON MET DES 'SPACE' A LA PLACE...
         STBY        &ABUF
C162:    EQU         $
         JIX         C161
C1620:   EQU         $
         IF          ORDI-"S",XWOR%,,XWOR%
         CPZ         IOCB5           < ASSIGNATION DU BINAIRE ???
         JE          SPERFO          < NON, RIEN A FAIRE...
XWOR%:   VAL         0
         CPZ         IBUFBN
         JNE         C160
         IF          ORDI-"T",XWOR%,,XWOR%
         LXI         LLLBUF-1/3*3    < NOMBRE DIVISIBLE PAR 3 !!!
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LRM         X
         WORD        LLLBUF-1/3*3    < NOMBRE DIVISIBLE PAR 3 !!!
XWOR%:   VAL         0
         STZ         &ABUFBN
         JDX         $-1
C160:    EQU         $
         LX          IBUFBN          < RANGEMENT DANS BUFBIN.
         LA          BUF
         STBY        &ABUFBN
         ADRI        1,X
         LBY         BUF+1
         STBY        &ABUFBN
         ADRI        1,X
         LA          BUF+1
         STBY        &ABUFBN
         ADRI        1,X
         STX         IBUFBN
         LBY         BUF
         CPI         '30
         JE          PERBIN          < COMMANDE 'EOF'.
         LA          CHECK           < CALCUL DU CHECKSUM.
         AD          BUF
         ADCR        A
         AD          BUF+1
         ADCR        A
         STA         CHECK
         IF          ORDI-"T",XWOR%,,XWOR%
         LAI         LLLBUF-1/3*3    < NOMBRE DIVISIBLE PAR 3 !!!
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LRM         A
         WORD        LLLBUF-1/3*3    < NOMBRE DIVISIBLE PAR 3 !!!
XWOR%:   VAL         0
         ADR         A,A
         CPR         A,X
         JNE         SPERFO          < NON.
PERBIN:  EQU         $
         CPZ         LIST2
         JG          C163            < SECOND PASSAGE.
         LAD         IOCB5
         SVC         0               < SORTIE BINAIRE SUR SGF.
C163:    EQU         $
         STZ         IBUFBN
SPERFO:  EQU         $
         RSR
<
<
<
SPSO2:   EQU         $               < SORTIE 2 QUADRUPLETS.
         IF          ORDI-"S",XWOR%,,XWOR%
         CPZ         IOCB5           < ASSIGNATION DU BINAIRE ???
         JE          SPERFO          < NON, RIEN A FAIRE...
XWOR%:   VAL         0
         STBY        BUF
         PSR         B,Y
         LY          BUF+1
         LA          BUF
         LR          Y,B
         SLRD        8
         STA         BUF
         STB         BUF+1
         BSR         PSORTQ
         LAI         '22
         STA         BUF
         LR          Y,B
         LA          BUF+2
         SLLS        8
         SCLD        8
         STB         BUF+1
         BSR         PSORTQ
         LA          BUF+3
         STA         BUF+1
         PLR         B,Y
         JMP         SORTQ
<
<
<
PSOSYM:  EQU         $               < SORTIE SYMBOLE DONT A=ADRESSE.
         BSR         TRASYM
         LAI         6
         BSR         SORMES
         RSR
<
<
<
PSORM:   EQU         $               < SORTIE MESSAGES NON ERREUR.
         STA         IOCB3+2
         PSR         X
         LAD         IOCB3
         WORD        LISTIN
         PLR         X
         RSR
<
<
<
PSORCL:  EQU         $               < SORTIE RC-LF.
         LA          RCLF
         STA         SYMBOL
         LAI         2
         BSR         SORMES
         RSR
         PAGE
<
<
<        C O N V E R S I O N S   N U M E R I Q U E S  :
<
<
PCONV:   EQU         $               < CONVERSION HEXADECIMALE 4
                                     < CHIFFRES.
         BSR         HEXA2
         LR          A,Y             < Y=POIDS FORTS.
         BSR         HEXA2
         RSR                         < A=POIDS FAIBLES.
<
<
<
PHEXA:   EQU         $               < CONVERSION HEXADECIMALE 2
                                     < CHIFFRES.
         LAI         0
         STZ         ZTR
         SLLD        4
         BSR         BSUPL
         STBY        ZTR
         LAI         0
         SLLS        4
         SLLD        4
         BSR         BSUPL
         OR          ZTR
         RSR
<
<
<
PCOV10:  EQU         $               < CONVERSION DECIMALE 2 CHIFFRES.
         ANDI        '3F
         SLRD        16
         DV          M10
         BSR         BSUPL           < CHIFFRE DES DIZAINES.
         XR          A,B
         BSR         BSUPL           < CHIFFRE DES UNITES.
         SLLS        8
         SCRD        8
         RSR
<
<
<
SUPL:    EQU         $               < TRAITEMENT DES BITS 8,9,10.
         CPI         9
         JLE         C164            < CHIFFRE.
         ADRI        -9,A            < LETTRE.
         ORI         '40
         JMP         C165
C164:    EQU         $
         ORI         '30
C165:    EQU         $
         RSR                         < LE CALCUL DE PARITE A ETE SUPPRME.
         PAGE
PTRAS:   EQU         $               < TRANSFERT DANS SYMBOL.
         PSR         X
         LXI         3               < NETTOYAGE SYMBOL.
         STZ         &ASYMB
         JDX         $-1
         STA         NIVSYM          < A=ADRESSE DU SYMBOLE.
         LA          &NIVSYM
         ANDI        3               < A=LONGUEUR.
         JAE         LONUL           < LONGUEUR NULLE.
         LXI         1
         IC          NIVSYM
C166:    EQU         $
         IC          NIVSYM
         LB          &NIVSYM
         STB         &ASYMB
         ADRI        1,X
         ADRI        -1,A
         JAG         C166
LONUL:   EQU         $               < RESTAURATION DE X.
         IF          ORDI-"S",XWOR%,,XWOR%
         LXI         7               < MISE A BLANC FIN NOM
C1660:   EQU         $
         LBY         &ASYMB
         JANE        C1661
         LAI         '20
         STBY        &ASYMB
         JDX         C1660
C1661:   EQU         $
XWOR%:   VAL         0
         PLR         X
         RSR                         < SAVE X DANS ZTR.
<
<
<
PTAS:    EQU         $               < TRANSFERT SYMBOLE DANS BUF.
         LA          SYMBOL
         LB          SYMBOL+1
         SLRD        8
         STA         BUF
         STB         BUF+1
         LA          SYMBOL+1
         STA         BUF+2
         LA          SYMBOL+2
         STA         BUF+3
         LAI         '22
         STBY        BUF+2
         RSR
         PAGE
PSORC:   EQU         $               < EDITION SECTION.
         IF          ORDI-"T",XWOR%,,XWOR%
         BSR         SORCLF
         BSR         PAGIN
         LYI         -1
         LR          Y,W
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         BSR         PAGE            < SAUT DE PAGE
         LRM         W
         WORD        "@"-1
         STZ         ZFLOAT          < NOMBRE DE SYMBOLE PAR LIGNE=8
XWOR%:   VAL         0
C167:    EQU         $
         LAI         0
         BSR         SYMUL
         ADRI        1,W             < LETTRE SUIVANTE (1ERE LETTRE
                                     < EST 'A'.
PSORC1:  EQU         $
         LAI         1
         BSR         SYMUL
         JE          SYMUL4
         IF          ORDI-"S",XWOR%,,XWOR%
         CPZ         ZFLOAT
         JG          C1677
         BSR         PAGIN
         BSR         SORCLF
         LAI         8
         STA         ZFLOAT
C1677:   EQU         $
XWOR%:   VAL         0
         LXI         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LAD         &ATSYMB
         BSR         TRASYM
XWOR%:   VAL         0
         LA          &ATSYMB
         SLRD        8
         CPI         '80             < ELIMINATION ADRESSE DE FIN
                                     < DE SECTION.
         JE          NEDIT
         IF          ORDI-"S",XWOR%,,XWOR%
         LBY         SYMBOL          < SI LE SYMBOLE NE COMMENCE PAS
         CPR         A,W             < PAR LA BONNE LETTRE
         JNE         NEDIT           < ON NE L'EDITE PAS
XWOR%:   VAL         0
         TBT         16
         IF          ORDI-"T",XWOR%,,XWOR%
         JC          NEDIT           < ELIMINATION SYMBOLE NON DEFINI.
         LAD         &ATSYMB
         BSR         TRASYM
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         JC          SBNDF           < SYMBOLE NON DEFINI
XWOR%:   VAL         0
         CPZ         &ATSYMB
         IF          ORDI-"T",XWOR%,,XWOR%
         JG          EDITER
         CPZR        W
         JNE         NEDIT           < NOM DEJA EDITE.
         LA          RCLF+1          < PARCEQUE 'LIBSEC' A DISPARU !!!!!!
         STA         SYMBOL
         LA          RCLF+2          < PARCEQUE 'LIBSEC' A DISPARU !!!!!
         STA         SYMBOL+1
         LAI         4
         JMP         EDNOM
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         JLE         NEDIT
XWOR%:   VAL         0
EDITER:  EQU         $
         IF          ORDI-"T",XWOR%,,XWOR%
         LBY         SYMBOL
         ANDI        '1F
         CPR         A,W
         JNE         NEDIT           < LETTRE NON CONFORME.
XWOR%:   VAL         0
         ADRI        1,X
         LB          &ATSYMB         < MOT VALEUR.
         IF          ORDI-"T",XWOR%,,XWOR%
         LA          CARSP+1
         STA         SYMBOL+2
XWOR%:   VAL         0
         BSR         CONVER          < CONVERSION HEXADECIMALE.
         IF          ORDI-"T",XWOR%,,XWOR%
         STA         SYMBOL+1
         STY         SYMBOL
         ADRI        -1,X
         LAI         6
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         ADRI        -1,X
XWOR%:   VAL         0
EDNOM:   EQU         $
         IF          ORDI-"S",XWOR%,,XWOR%
         STY         SYMBOL
         STA         SYMBOL+1
         LA          CARSP+1
         STA         SYMBOL+2
         LAI         5
XWOR%:   VAL         0
         BSR         SORMES
         IF          ORDI-"S",XWOR%,,XWOR%
         LA          &ATSYMB         < SORTIE DES BITS ORDONNES
         IF          XXXSGN-0,XWOR%9,,XWOR%9
         LYI         " "
         TBT         2               < LE SYMBOLE A-T'IL ETE UTILISE ???
         JNC         SUSED           < OUI, (Y)=" "...
         RBT         2
         LYI         "*"             < NON, (Y)="*"...
SUSED:   EQU         $
XWOR%9:  VAL         0
         SLRD        3               < DSEC, ABS, EXT, ENT
         SCRS        2
         SLRD        2
         SCLS        3
         SLLD        3
         ANDI        'F
         CPI         9
         JLE         XX167
         ADRI        7,A
XX167:   EQU         $
         ADRI        '30,A
         SWBR        A
         IF          XXXSGN-1,XWOR%9,,XWOR%9
         ORI         '20
XWOR%9:  VAL         0
         IF          XXXSGN-0,XWOR%9,,XWOR%9
         ORR         Y,A             < CONCATENATION DE " " OU "*", SUIVANT QUE
                                     < LE SYMBOLE A ETE UTILISE OU PAS...
XWOR%9:  VAL         0
         STA         SYMBOL
         LAI         2
         BSR         SORMES
XWOR%:   VAL         0
         LAD         &ATSYMB         < A=ADRESSE SYMBOLE.
         BSR         TRASYM
         LAI         6
         BSR         SORMES
         IF          ORDI-"T",XWOR%,,XWOR%
         BSR         SORCLF          < RC-LF.
         BSR         PAGIN
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LA          CARSP+1         < TROIS BLANCS
         STA         SYMBOL
         STA         SYMBOL+1
         LAI         3
         BSR         SORMES
         DC          ZFLOAT
XWOR%:   VAL         0
NEDIT:   EQU         $
         JMP         PSORC1
SYMUL4:  EQU         $
         IF          ORDI-"T",XWOR%,,XWOR%
         LAI         26
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LAI         "Z"
XWOR%:   VAL         0
         CPR         A,W
         JNE         C167            < LETTRE 'Z' NON ATTEINTE.
         IF          ORDI-"T",XWOR%,,XWOR%
         BSR         SORCLF
         BSR         PAGIN
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         BSR         SORCLF
         BSR         PAGE
XWOR%:   VAL         0
         RSR
         IF          ORDI-"S",XWOR%,,XWOR%
SBNDF:   EQU         $               < SYMBOLE NON DEFINI
         TBT         18
         JNC         SBNDF1
         LRM         A,Y             < EXTERNE
         WORD        "T "
         WORD        "EX"
         JMP         EDNOM
SBNDF1:  EQU         $
         TBT         20
         JC          SBNDF2
         TBT         19              < 'DSEC' ???
         JC          SBNDF2          < 'DSEC'+'UNDEF'='JMP EN AVANT' !!!
         LRM         A,Y             < ELEMENT DE LISTE
         WORD        "ST"
         WORD        "LI"
         JMP         EDNOM
SBNDF2:  EQU         $
         LRM         A,Y             < REFERENCE EN AVANT
         WORD        "AN"
         WORD        "AV"
         JMP         EDNOM
XWOR%:   VAL         0
         PAGE
<
<
<        E D I T I O N   L I S T I N G  :
<
<
PLIST:   EQU         $               < SORTIE LISTING (ZACQ1).
         STB         BINARY
         CPZ         SITUAT
         JG          C168            < ON EST DANS UNE DSEC.
         BSR         ASPSO1          < SORTIE MOT BINAIRE.
C168:    EQU         $
         BSR         VERPA           < VERIFICATION DEPASSEMENT 32K.
         IF          ORDI-"S",XWOR%,,XWOR%
         LA          BINARY
         LRM         Y
         WORD        PZZACQ
         PUSH                        < ON EMPILE EN CARTE DYNAMIQUE LE CODE
                                     < GENERE ; ON NOTERA QUE DANS LE CAS DES
                                     < 'DZS', ON N'EMPILE QU'UNE FOIS '0000...
XWOR%:   VAL         0
         LBY         BUF
         CPI         'AC
         JE          PLIS1           < 'DZS'.
         LX          SINGER          < CARACTERE SPECIAL.
         LA          &ACARSP
         STA         &ZACQ12
         LB          BINARY          < B=MOT.
         BSR         CONVER          < CONVERSION.
         STY         &ZACQ13         < POIDS FORTS DU MOT.
         STA         &ZACQ14         < POIDS FAIBLES DU MOT.
PLIS1:   EQU         $               < SORTIE LISTING ('DZS' + 'EQU').
         LB          DEBRES+2
         BSR         CONVER
         LR          A,L
         LA          VALDIR
         CPI         17
         JE          ADCOMP          < '$EQU'.
         LR          L,A
         STZ         INDZS
ADCOMP:  EQU         $
         LR          L,A             < POIDS FORT DE L'ADRESSE.
C169:    EQU         $
         STY         &ZACQ10
         STA         &ZACQ11         < POIDS FAIBLES DE L'ADRESSE.
         LAI         "$"
         STBY        &ZACQ12         < INDICATEUR 'CODE GENERE'...
         CPZ         LIMSU2
         JE          PAGENE          < PAS DE GENERATION DE DEPLACEMENT.
         CPZ         ETAPH
         JG          PAGENE          < PAS DE GENERATION DE DEPLACEMENT
                                     < ('$EQU').
         LA          DEBRES+2        < A=PAS SAUVEGARDE.
         SB          DEBSEC
         ADRI        -128,A
         CPI         127
         JG          PAGENE          < DEPLACEMENT SUPERUEUR A 127.
         LR          A,B
         BSR         CONVER
         STA         &ZACQ16         < POIDS FAIBLES DU DEPLACEMENT.
         LA          OUVR
         STA         &ZACQ15
         LA          FERM
         STA         &ZACQ17
PAGENE:  EQU         $               < SORTIE DU LISTING.
         LAD         IOCB4
         WORD        LISTIN
         BSR         PAGIN
         LAI         26              < PLUS DE SORTIE SYMBOLIQUE
         STA         IOCB4+2
         LA          RCLF
         STA         &ZACQ18
         LA          VALDIR
         CPI         19
         JNE         C170
         IC          INDZS           < PHRASE EST 'DZS'.
C170:    EQU         $
         RSR
<
<
BUFP9:   WORD        0               < BUFFER BIDON,
IOCBP9:  WORD        '0401           < DEMANDE DE LECTURE D'UN CARACTERE
         WORD        BUFP9-ZERO*2
         WORD        1               < BIDON, POUR BLOQUER L'UNITE 4...
PPAGE:   EQU         $               < SAUT DE PAGE.
         PSR         X,Y
         IF          ORDI-"S",XWOR%,,XWOR%
         LR          A,Y             < Y=2 SI CET APPEL A LIEU POUR
                                     < LA DIRECTIVE 'PAGE'...
XWOR%:   VAL         0
         LRM         A
         WORD        IOCBP9
         WORD        LISTIN          < ON FAIT UNE LECTURE SUR L'UNITE 4 ;
                                     < SI C'EST L'IMPRIMANTE OU NON ASSIGNEE,
                                     < CELA NE FAIT RIEN, MAIS SI C'EST LA
                                     < VISU, ON SE BLOQUE (ON A ALORS LE TEMPS
                                     < DE FAIRE UN HARD-COPY...).
         LA          SYMBOL
         PSR         A
         LAI         2
         STA         IOCB3+2
         IF          ORDI-"T",XWOR%,,XWOR%
         LAI         '0D
         SWBR        A
         ORI         "@"
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LRM         A
         WORD        '0D40
XWOR%:   VAL         0
         STA         SYMBOL
         LAD         IOCB3
         WORD        LISTIN
         IF          ORDI-"S",XWOR%,,XWOR%
         CPZ         KLIST           < LISTE EN COURS ???
         PSR         C
         LA          COM1
         LR          A,C
         USE         C,COMM1
         JG          PPAGE1          < NON, DONC PAS DE COMPTAGE...
         IC          NUMPAG          < COMPTAGE DE LA PAGE.
PPAGE1:  EQU         $
         LB          NUMPAG          < POUR LA CONVERSION.
         PLR         C
         USE         C
         LR          Y,X             < X=2 SI DIRECTIVE 'PAGE'.
         BSR         CONVER          < CONVERSION DANS (Y,A).
         XR          A,X
         CPI         2               < DIRECTIVE 'PAGE' ???
         XR          A,X
         JNE         PAPAGE          < NON...
         STY         &ZACQ10         < OUI, INSERTION DANS LE LISTING
         STA         &ZACQ11         < POUR LES SYMBOLES DYNAMIQUES.
PAPAGE:  EQU         $
         STY         SYMBOL          < DEBUT DU NUMERO DE PAGE,
         LR          A,Y             < ET SAUVEGARDE DE LA SUITE...
         LAD         IOCB3
         WORD        LISTIN          < EDITION DEBUT DU NUMERO DE PAGE.
         STY         SYMBOL          < PRISE EN COMPTE DE LA SUITE,
         WORD        LISTIN          < QUE L'ON EDITE...
         LBI         " "
         SBT         16+2            < B="  ".
         STB         SYMBOL
         WORD        LISTIN          < QUE L'ON EDITE...
XWOR%:   VAL         0
         LA          IOCB            < SORTIR LE NOM SI FICHIER
         SLRS        8
         CPI         1
         JE          ENMFC
         LA          IOCB3+1
         PSR         A
         PSR         C
         LA          COM1
         LR          A,C
         USE         C,COMM1
         LAD         NOMFIC
         SLLS        1
         LX          LGNMFC
         PLR         C
         USE         C
         STA         IOCB3+1
         STX         IOCB3+2
         LAD         IOCB3
         WORD        LISTIN
         PLR         A
         STA         IOCB3+1
         IF          ORDI-"T",XWOR%,,XWOR%
         LAI         '0D
         SWBR        A
         ORI         '0A
         STA         SYMBOL
         LAI         2
         STA         IOCB3+2
         LAD         IOCB3
         WORD        LISTIN
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         BSR         SORCLF
XWOR%:   VAL         0
         WORD        LISTIN
ENMFC:   EQU         $
         PLR         A
         STA         SYMBOL
         PLR         X,Y
         STZ         NBLIG
         RSR
<
<
<
PPAGIN:  EQU         $               < MISE EN PAGE.
         CPZ         KLIST           < 'LST' EN COURS ???
         JG          NPPAGE          < NON, DONC PAS DE COMPTAGE...
         IC          NBLIG
         LA          NBLIG
         CPI         55
         JE          PPAGE           < SAUT DE PAGE EN BAS.
NPPAGE:  EQU         $
         RSR
         PAGE
<
<
<        T R A I T E M E N T   D U   J U M P  :
<
<
PJUMP:   EQU         $
C171:    EQU         $
         SBR         Y,A
         CPI         -128
         JL          C172            < HORS D'ATTEINTE.
         CPI         127
         JG          C172            < HORS D'ATTEINTE.
         RSR
C172:    EQU         $
         LAI         11              < HORS-LIMITE DE SECTION.
         BR          MERR
<
<
<
VERPAS:  EQU         $               < VERIFICATION DU PAS.
         RSR
C173:    EQU         $
         LAI         12              < PASSAGE AU-DELA DE 32K.
         BR          MERR
<
<
<
PSAV:    EQU         $               < SAVE POUR LES CAS D'ERREURS.
         LXI         LSAV
C174:    EQU         $
         LA          &ASAVE
         STA         &AREST
         JDX         C174
         RSR
         PAGE
<
<
<        T R A I T E M E N T   D E S   E R E U R S  :
<
<
ERR:     EQU         $
         STA         NR
         LAI         22
         STA         IOCB2+2         < LONGUEUR DES MESSAGES D'ERREUR...
         LA          COM1
         XR          A,C             < POUR ATTEINDRE 'KERROR'.
         USE         C,COMM1
         IC          KERROR          < COMPTAE DES ERREURS...
         XR          A,C
         USE         C
NR0:     LXI         LSAV            < RESTORE VALEURS SAUVEGARDEES.
C175:    EQU         $
         LA          &AREST
         STA         &ASAVE
         JDX         C175
         LA          MOT1
         JAE         C176
         STA         &ATSY11
         LA          MOT2
         STA         &ATSY12
         BSR         MODSB
C176:    EQU         $
         CPZ         SYMBO1          < 'IF' EN COURS ???
         JNE         E21947          < OUI, ON IGNORE CETTE ERREUR...
         LA          DEPLA2          < PREPARTION MESSAGE D'ERREUR.
         BSR         CONV10
         STA         SYMBO2+4        < DEPLACEMENT.
         LA          NR
         BSR         CONV10
         STA         ZTR             < NUMERO D'ERREUR.
         CPZ         BATCH           < BATCH OU TS ???
         JNE         E51947          < BATCH...
         LB          IOCB2           < OUI - ECRIRE SUR VISU
         LAI         '02
         STBY        IOCB2
         LAD         IOCB2
         SVC         0
         STB         IOCB2
         BSR         PAGIN           < PAGINATION.
         JMP         E61947
E51947:  EQU         $
         BSR         SORCLF
         LAD         IOCB2
         SVC         0
         BSR         PAGIN           < PAGINATION.
         BSR         PAGIN
         BSR         PAGIN
E61947:  EQU         $
         STZ         BASCUL          < CHANGEMENT DU NVP D'ENTREE.
         LA          NR              < TEST DE L'ERREUR PRODUITE ???
         CPI         17              < EST-CE LA FATALE ERREUR '17' ???
         IF          XXXSGN-0,XWOR%,,XWOR%
         JE          E1947E
         CPI         21              < ET L'ERREUR 21
XWOR%:   VAL         0
         JNE         E1947           < NON , L'ASSEMBLAGE PEUT SE
                                     < POURSUIVRE ....
<
< CAS DE LA FATALE ERREUR '17' :
<
E1947E:  EQU         $
         LAI         '02             < MESSAGES SUR UNITE '02
         STBY        IOCB3
         EORR        W,W             < RAZ DE LA BASE W.
         BR          ABORT-ZERO,W    < VERS L'EDITION DES SYMBOLES
                                     < NON DEFINIS , PUIS L'ABORT....
<
< CAS DES AUTRES ERREURS.
<
E1947:   EQU         $
         CPZ         BATCH           < BATCH OU TS ???
         JNE         E11947          < BATCH...
         LB          IOCB1           < SORTIE SUR VISU
         LAI         2
         STBY        IOCB1
         LAD         IOCB1
         SVC         0
         STB         IOCB1
         BSR         PAGIN           < PAGINATION.
         LX          BASCUL          < FAIRE COMME UN EOT
         CMR         X
         STX         BASCUL
         STZ         INDO
         BSR         SUSY            < SUPPRIMER SYMBOLES OPERANDES
         CPZ         NETIQ
         JE          E21947
         LA          NETIQ           < SUPPRIMER ETIQUETTE
         STA         NIVSYM
         LBI         0
         BSR         IUSY
         LBI         1
         BSR         IUSY
         BSR         SUSY
E21947:  EQU         $
         LBY         IOCB            < LECTURE FICHIER?
         CPI         1               < LECTURE REELLE CARTE ???
         JE          E11947          < OUI...
         LAI         80              < SIMULATION FIN DE CARTE...
         STA         NACQ
         BR          AEOT
E11947:  EQU         $
         BR          ADEP
         PAGE
<
<
<        T R A I T E M E N T   D E S   C O N S T A N T E S
<                    F L O T T A N T E S  :
<
<
TFLOAT:  EQU         $
         IC          NACQ
<
< ENTRY DU MODULE :
<
         LAI         -1
         LR          A,W
         LYI         0
         LBI         "+"             < SIGNE DE LA MANITISSE PAR DEFAUT.
         LX          NACQ
         LBY         &AZACQ
         CPI         '20
         JE          TFLOAT          < ELIMINATION DES 'SPACE'.
         IF          ORDI-"S",XWOR%,,XWOR%
         CPI         "<"             < EST-CE "<" EN TETE ???
         JNE         C177X           < NON, MODE NORMAL (PARTIE ENTIERE
                                     < SUIVIE D'UNE EVENTUELLE PARTIE
                                     < DECIMALE).
         LXI         0
         LAI         0
         STBY        &AZFL           < ZFL(0)='00 (MODE PARAMETRABLE).
         LXI         2
         STZ         &AZFL           < AU CAS OU LA PARTIE DECIMALE SERAIT
                                     < ABSENTE...
         IC          NACQ
         LA          FLOMAS
         LY          FLOVAL
         LX          FLORES
         PSR         A,X,Y
         BSR         CALEX           < OUI, IL N'Y A ALORS QU'UNE PARTIE
                                     < ENTIERE PARAMETRABLE...
         CPI         0               < ERREUR ???
         PLR         A,X,Y
         STX         FLORES
         STY         FLOVAL
         STA         FLOMAS
         JNE         NFLOAT          < ERREUR...
         LA          SOM
         LXI         1
         STA         &AZFL           < ZFL(2,3)=VALEUR PARTIE ENTIERE.
         LX          NACQ
         LBY         &AZACQ
         CPI         "<"             < "<" (=INTRODUCTEUR DECIMALE) ???
         JNE         NFLOAT          < NON, ERREUR...
         IC          NACQ
         LA          FLOMAS
         LY          FLOVAL
         LX          FLORES
         PSR         A,X,Y
         BSR         CALEX           < OUI, IL N'Y A ALORS QU'UNE PARTIE
                                     < DECIMALE PARAMETRABLE...
         CPI         0               < ERREUR ???
         PLR         A,X,Y
         STX         FLORES
         STY         FLOVAL
         STA         FLOMAS
         JNE         NFLOAT          < ERREUR...
         LA          SOM
         LXI         2
         STA         &AZFL           < ZFL(4,5)=VALEUR PARTIE DECIMALE.
         LYI         6               < Y=INDEX DE L'EXPOSANT...
         LX          NACQ
         LBY         &AZACQ
         CPI         "<"             < "<" (=INTRODUCTEUR D'EXPOSANT) ???
         JNE         NFLOAT          < NON, ERREUR...
         JMP         EXPOS           < OUI...
C177X:   EQU         $
XWOR%:   VAL         0
         CPI         "+"
         JE          C177
         CPI         "-"
         JNE         C178
C177:    EQU         $
         LR          A,B             < SAUVEGARDE DU SIGNE DE LA
                                     < MANTISSE DANS B.
MANTIS:  EQU         $
         IC          NACQ
C178:    EQU         $
         LX          NACQ
         LBY         &AZACQ
         CPI         "."
         JNE         C179
         LR          Y,W             < ON A TROUVE UN 'POINT'.
         JMP         MANTIS
C179:    EQU         $
         CPI         "E"
         JE          EXPOS           < ON A TROUVE LE DEBUT DE
                                     < L'EXPOSANT.
         IF          ORDI-"S",XWOR%,,XWOR%
         CPI         "<"             < COMMENTAIRE ???
         JE          C180            < OUI...
         CPI         " "
         JE          C180
XWOR%:   VAL         0
         CPI         '0D
         JE          C180            < FIN DE CARTE SANS EXPOSANT.
         RBT         8
         CPI         '30             < TEST PAR RAPPORT A '0'.
         JL          NFLOAT          < ERREUR.
         CPI         '39             < TEST PAR RAPPORT A '9'.
         JG          NFLOAT          < ERREUR.
         LBY         &AZACQ
         LR          Y,X
         STBY        &AZFL
         LR          X,A
         CPI         8               < LA MANTISSE COMPORTE-T'ELLE
                                     < PLUS DE 8 CHIFFRES ???
         JE          NFLOAT          < OUI , ERREUR.
         ADRI        1,Y
         JMP         MANTIS          < AU CHIFFRE SUIVANT.
<
< CAS OU ON A TROUVE LA FIN DE LA MANTISSE :
<
EXPOS:   EQU         $
         IC          NACQ            < PASSAGE AU CARACTERE SUIVANT.
C180:    EQU         $
         PSR         Y
         SLLD        8
         ORR         Y,B
         STB         ZFLOAT
         CPZR        W
         JGE         C181            < CORRECTION DE L'EXPOSANT.
         LR          Y,W             < PAS DE '.' : LA DIFFERENCE=0.
C181:    EQU         $
         SBR         Y,W
         LB          FLOMAS          < SAUVEGARDE A CAUSE
         LY          FLOVAL          < DE CALEX, ET
         IF          ORDI-"T",XWOR%,,XWOR%
         PSR         B,Y             < DE SES MASQUES/VALEURS...
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LX          FLORES          < A CAUSE DU RESTE DE DIVISION...
         PSR         B,X,Y
XWOR%:   VAL         0
         BSR         CALEX           < CALCUL DE L'EXPOSANT.
         IF          ORDI-"S",XWOR%,,XWOR%
         PLR         B,X,Y
         STX         FLORES
XWOR%:   VAL         0
         IF          ORDI-"T",XWOR%,,XWOR%
         PLR         B,Y
XWOR%:   VAL         0
         STY         FLOVAL
         STB         FLOMAS
         JAE         C182            < OK.
<
< ERREURS FLOTTANTES :
<
NFLOAT:  EQU         $
         LAI         1
         BR          MERR
<
< CAS DES BONS NBRES FLOTTANTS :
<
C182:    EQU         $
         LA          SOM
         ADR         W,A             < CORRECTION DE L'EXPOSANT.
         PLR         X
         STBY        &AZFL
         LAD         ZFLOAT
         LR          A,Y
         LXI         0
         STZ         ZCDF
         BSR         ACDF            < CONVERSION ...
         CPZ         ZCDF            < COMMENT CELA S'EST-IL PASSE ???
         JNE         NFLOAT          < MAL , ERREUR.
         PSR         B               < BIEN OK.
         IC          PAS
         LR          A,B
         LAI         '24
         IC          INFL
         BR          ACOMFL          < C'EST TOUT ...
         PAGE
<
<
< LECTURE D'UNE CARTE SUR LECTEUR OU SUR FICHIER.
<
<
SPLCNF:  EQU         $
         LXI         -82             < ET NON PAS -80, A CAUSE DU BINAIRE...
         LAI         " "
FCART9:  EQU         $
         STBY        &AZACQX         < MISE A 'SPACE' DE LA CARTE.
         JIX         FCART9
         LA          RCLF            < ON MET A PRIORI UN
         STA         &AZACQX         < 'R/C7-'LF' EN BOUT DE CARTE.
         LAI         80
         STA         IOCB4+2         < A CAUSE DES CARTES DYNAMIQUES...
         LXI         -26             < MISE A BLANC NUMEROTATION
NMBLAN:  EQU         $
         LAI         " "
         STBY        &AZACQ
         ADRI        1,X
         LR          X,A
         CPI         -18
         JL          NMBLAN
         LA          IOCB            < LECTURE FICHIER?
         SLRS        8
         CPI         1
         JNE         C1100
         LA          SYMBOL
         PSR         A
         LA          IOCB3
         PSR         A
         LAI         2
         STA         IOCB3           < CAS OU 'LST' EST ACTIVE...
         STBY        IOCB3
         IF          ORDI-"T",XWOR%,,XWOR%
         LAI         ">"
         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 © Jean-François Colonna, 2011-2022.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2011-2022.