NMPROC:  VAL         "EX"            < NOM DU PROCESSEUR.
         IDP         "EX - RELEASE 21/03/1980"
         IDP         "EDITEUR EXAUSTIF CATALOGUE"
         IDP         "JOHN F. COLONNA"
         PROG
         PAGE
         EOT         #SIP DEFINITION CMS5#
         EOT         #SIP DEF PROCESSEUR#
         PROG
         WORD        CATAL           < ENTRY POINT DU PROCESSEUR.
         WORD        0
PCATAL:  EQU         $               < P='12 !!!
         LRP         L
         BR          -2,L            < ENTRY DANS LE PROCESSEUR.
         PAGE
         EOT         #SIP DEFINITION ITEM#
NOMI::   VAL         '3D             < EMPLACEMENT DU <NOM> D'UN ITEM DANS
                                     < L'EN-TETE.
ITEM1:   EQU         ZERO+PILE-LTNI  < ADRESSE DE L'EN-TETE DE L'ITEM1.
LNOM:    VAL         20              < NBRE DE MOTS MAX OCCUPES PAR
                                     < UN NOM SOUS SGN.
<
<        V A L E U R   D ' U N   N O M  :
<
VALEUR:  EQU         ZERO+PILE+6     < LA VALEUR EST IMPLANTEE DANS
                                     < LES 4 DERNIERS K.
IMAG:    EQU         VALEUR+LNOM+2   < ADRESSE DE L'IMAGE EVENTUELLE.
         IF          ORDI-"S",XWOR%1,,XWOR%1
<
<        A U T O R I S A T I O N   /   I N T E R D I C T I O N   D E S
<
<        D E L E T E.
<
<        ( OPTTION D'ASSEMBLAGE SOLAR ! )
<
IDELA:   VAL         0               < 'IDELA' = 0 : DELETE INTERDITS;
                                     < 'IDELA' = 1 : DELETE AUTORISES.
XWOR%1:  VAL         0
         PAGE
<
<
<        L O C A L  :
<
<
         LOCAL
LOC:     EQU         $
<
< BUFFERS ET MESSAGES :
<
REP:     DZS         2               < REPONSE 1 CARACTERE UTILISATEUR.
AREP:    WORD        REP,X
HNOM1:   BYTE        0;'6D
HNOM2:   DZS         LNOM+2*2
RCLF:    BYTE        0;'6D
NOM:     DZS         LNOM+2          < PAR PRUDENCE.
         BYTE        '04;0           < POUR LA RECHERCHE DE L'EOT DE FIN
                                     < DE RACINE DE RECERCHE.
MDEL:    BYTE        3;" ";"?";"?"
MRAC:    BYTE        8;'6D
         ASCI        "RACINE> "
MLMAX:   BYTE        6;'6D
         ASCI        "LMAX= "
MPART:   BYTE        13;'6D
         ASCI        "A PARTIR DE "
MACN:    BYTE        5;'6D
         ASCI        "ACN?"
MPAS:    BYTE        11;'6D
         ASCI        "PAS A PAS?"
MVIS:    BYTE        15;'6D
         ASCI        "VISUALISATION?"
MHEXA:   BYTE        13;'6D
         ASCI        "HEXADECIMAL?"
MRECH:   BYTE        12;'6D
         ASCI        "RECHERCHE ?"
MCHAI:   BYTE        8;'6D
         ASCI        "CHAINE="
MRCLF:   BYTE        1;'6D
<
< RELAIS DIVERS :
<
         IF          ORDI-"T",XWOR%,,XWOR%
ASP3:    WORD        SP3             < ROUTINE MAITRE DE STABILISATION
                                     < DE L'IMAGE VIDEO.
XWOR%:   VAL         0
AOVL:    WORD        OVL             < CHARGEMENT DES OVERLAYS.
AGOSGN:  WORD        GOSGN           < APPEL DU SGN POUR CATAL.
APRINT:  WORD        PRINT           < EMISSION MESSAGE.
AHEXA:   WORD        HEXA            < CONVERSION BINAIRE-->HEXADECIMAL.
AHEX:    WORD        HEX             < ENTREE D'UNE CONSTANTE HEXA-DECIMALE...
AGOGE:   WORD        E50             < RETOUR A 'GE'.
ANOM:    WORD        NOM,X           < RELAI D'ACCES AU NOM COURANT.
AHNOM:   WORD        HNOM2,X         < RANGEMENT DU NOM EN HEXA.
AVAL:    WORD        VALEUR          < @MOT DE LA VALEUR D'UN NOM.
ZAVAL:   WORD        VALEUR-1,X      < RELAI DE RAZ D'UNE VALEUR.
LVAL:    WORD        '1000           < UNE VALEUR FAIT 4K MOTS MAX.
APILE:   WORD        PILE-1          < @PILE DE SODOME.
<
< CONSTANTES DIVERSES :
<
KIN:     WORD        -1              < COMPTEUR DES ENTRIES.
NGE:     WORD        "GE"            < NOM DU PROCESSEUR GE.
XRAC:    WORD        0               < MEMORISATION DE L'INDEX INITIAL.
SXRAC:   WORD        0               < SAVE LE (X) INITIAL.
VISUAL:  WORD        0               < INDICATEUR DE VISUALISATION :
                                     < 0 : NE PAS VISUALISER VALEUR ,
                                     < #0 : VISUALISER LA VALEUR(NOM).
DELET:   WORD        0               < INDICATEUR DE DELETE :
                                     < =0 : LISTAGE SEUL ,
                                     < -1 : LIST & DELETE AUTOMATIQUE ,
                                     < +1 : LIST & DELETE EVENTUEL.
XANOM:   WORD        0               < INDEX DU NOM EN ALPHA.
XHNOM:   WORD        0               < INDEX DU NOM EN HEXA.
INDH:    WORD        0               < =0 : EDITION ALPHA DES NOMS ,
                                     < #0 : EDITION ALPHA+HEXA NOMS.
KCONT:   WORD        1               < CALCUL DE LA LA LONGUER DES
                                     < MESSAGES LORS DE L'EDITION DES
                                     < NOMS.
ACNSYS:  ASCI        ":SYS"          < ACN DU SYSTEME.
LMAX:    WORD        LNOM*2+1        < NOMBRE MAX DE CARACTERES A EXPLORER.
<
< DONNEES DE RECHERCHE DANS UN ITEM :
<
IRECH:   WORD        0               < INDICATEUR DE RECHERCHE :
                                     < =0 : PAS DE RECHERCHE,
                                     < #0 : RECHERCHE D'UNE CHAINE DONNEE DANS
                                     <      LES ITEMS DE TYPE "T"/"D"/"I".
LCHAIN:: VAL         20              < LONGUEUR MAX DE LA CHAINE.
CHAINE:  DZS         LCHAIN/2        < CHAINE A CHERCHER.
ACHAIN:  WORD        CHAINE,X        < RELAI D'ACCES A LA CHAINE.
ALCHAI:  WORD        0               < LONGUEUR DE LA CHAINE (NON COMPRIS LE
                                     < LIMITEUR DE FIN.
ANOMC:   WORD        ITEM1,X         < RELAI D'ACCES A L'EN-TETE DE L'ITEM1.
AITEM1:  WORD        ITEM1+LTN,X     < RELAI D'ACCES AU CORPS DE L'ITEM1.
NCP:     WORD        NBCAR*NBLIG     < LONGUEUR DES CORPS DES ITEMS CHERCHES.
ASPREC:  WORD        SPREC           < MODUL DE RECHERCHE...
<
< DEMANDES A CMS4 :
<
DEMSGN:  WORD        '0402           < SGN OVERLAY.
         WORD        BRANCH-ZERO*2
         WORD        ZERO-BRANCH+PILE-LTNI-LTNI*2
         WORD        -1
SCATAL:  WORD        '0002           < SGN CATALOGUE.
         WORD        NOM-ZERO*2
         WORD        0               < LONGUEUR COURANTE DU NOM.
         WORD        -1
DEMLOD:  WORD        '0502           < DEMANDE DE LOAD SOUS ACN.
         WORD        VALEUR-ZERO*2
         WORD        '2000-1         < 4K MOTS-1 MAX.
         WORD        2*LNOM          < DEPLACEMENT DE LA VALEUR
                                     < PAR RAPPORT AU NOM.
DEMDEL:  WORD        '0302           < DELETE NOM.
         WORD        NOM-ZERO*2
         WORD        LNOM+2*2
         WORD        -1
DEMREP:  WORD        '0101           < ENTREE REPONSES UTILISATEUR.
         WORD        REP-ZERO*2
         WORD        1
DEMHEX:  WORD        '0101           < ENTREE D'UNE CONSTANTE HEXA-DECIMALE.
         WORD        REP-ZERO*2
         WORD        4
DEMMES:  WORD        '0202           < EMISSION D'UN MESSAGE.
         WORD        0               < @OCTET DU MESSAGE.
         WORD        0               < LONGUEUR DU MESSAGE.
DEMIN:   WORD        '0101           < ENTREE DE LA RCINE DU CATALOGUE.
         WORD        NOM-ZERO*2
         WORD        2*LNOM-1
DEMOUT:  WORD        '0202           < AFFICHAGE DU NOM COURANT.
         WORD        RCLF-ZERO*2+1
         WORD        0               < LONGUEUR DU NOM COURANT.
DEMCCI:  WORD        '0001           < RETOUR AU CCI.
DEMMEM:  WORD        '0004           < DEMANDE D'ALLOCATION 8K MOTS.
         WORD        0
         WORD        '5000           < 10K MOTS.
RELMEM:  WORD        '0004           < DEMANDE DE RETOUR A 4K MOTS.
         WORD        0
         WORD        '2000           < 4K MOTS.
         IF          ORDI-"S",XWOR%,,XWOR%
STABIL:  WORD        '8A01           < STABILISATION DE L'IMAGE VIDEO.
         WORD        IMAG-ZERO*2
         WORD        '2000
         WORD        0
XWOR%:   VAL         0
DEMCHA:  WORD        '0101           < ENTREE DE LA CHAINE CHERCHEE...
         WORD        CHAINE-ZERO*2
         WORD        LCHAIN
DEMNOM:  WORD        '0202           < EDITION DU NOM D'UN ITEM LORS D'UNE
                                     < RECHERCHE POSITIVE...
         WORD        ITEM1+NOMI-ZERO*2
         WORD        0
DEMITE:  WORD        '0502           < CHARGEMENT D'UN ITEM LORS D'UNE
                                     < RECHERCHE POSITIVE...
         WORD        ITEM1-ZERO*2
         WORD        LTNI*2
         WORD        -1
         PROG
         PAGE
         IF          ORDI-"T",XWOR%,,XWOR%
TIMAG:   WORD        IMAG            < @TRANSLATABLE DE L'IMAGE VIDEO.
         EOT         #SIP SP3#
XWOR%:   VAL         0
         PAGE
<
<
<        A C C E S   A U   S G N  :
<
<
<        ARGUMENT :
<                    A=NVP D'ACCES AU SGN.
<
<
<        RESULTAT :
<                    A=CONDITIONS DE RETOUR DU SGN ,
<                    INDICATEURS POSITIONNES SUR ERREUR.
<
<
GOSGN:   EQU         $
         CPZR        X
         JGE         GOSGN1          < OK...
         PSR         A
         LXI         0               < ON REINITIALISE LE PARCOURS, IL
         LAI         '04             < S'AGIT SUREMENT D'UN DELETE DE
         STBY        &ANOM           < TOUT UN CATALOGUE...
         PLR         A
GOSGN1:  EQU         $
         PSR         X               < SAVE X COURANT.
         STBY        SCATAL          < MISE EN PLACE DU NVP D'ACCES.
         LR          X,A
         ADRI        1,A
         STA         SCATAL+2        < MISE EN PLACE DE LA LONGUEU
                                     < COURANTE.
         LAD         SCATAL
         SVC         0               < APPEL DU SGN.
         LR          X,A             < A=CONDITIONS DE RETOUR.
         PLR         X               < RESTAURE X COURANT.
         RSR
         PAGE
<
<
<        C O N V E R S I O N   B I N A I R E   -->  H E X A  :
<
<
<        ARGUMENT :
<                    A=1 CHIFFRE HEXA EN BINAIRE.
<
<
<        RESULTAT :
<                    LE CHIFFRE HEXA EST CONVERTI EN HEXA (ASCI) ET MIS
<                    DANS LE BUFFER A L'INDEX (XHNOM) QUI ENSUITE
<                    PROGRESSE D'UNE UNITE.
<
<
HEXA:    EQU         $
         CPI         9               < EST-CE UN CHIFFRE DECIMLA ???
         JLE         HEXA1           < OUI.
         ADRI        '41-'39-1,A     < NON , TRANSLATION VERS LES LETTRES.
HEXA1:   EQU         $
         ADRI        '30,A           < CONVERSION ASCI.
         LX          XHNOM           < X=INDEX COURANT HEXA.
         STBY        &AHNOM          < MISE DANS LE BUFFER HEXA.
         IC          XHNOM           < ET PROGRESSION DE L'INDEX COURANT.
         RSR                         < ET C'EST TOUT...
         PAGE
<
<
<        C O N V E R S I O N   A S C I   -->   B I N A I R E  :
<
<
<        RESULTAT :
<                    A=VALEUR CONVERTIE S'IL N'Y A PAS
<                    D'ERREUR, LES CODES DE CONDITION
<                    L'INDIQUANT.
<
<
HEX:     EQU         $
         PSR         B,X
         LXI         0               < X=INDEX DE 'REP'.
         LBI         0               < B=CUMUL COURANT.
HEX1:    EQU         $
         LBY         &AREP           < A=CARACTERE COURANT DE 'REP'.
         CPI         '04             < EST-CE 'EOT' ???
         JE          HEX5            < OUI, FIN DE CONVERSION.
         CPI         '0D             < EST-CE 'R/C' ???
         JE          HEX5            < OUI, FIN DE CONVERSION.
         ADRI        -'30,A          < CONVERSION BIANIRE.
         JAL         HEX2            < ERREUR.
         CPI         9               < EST-CE UN CHIFFRE DECIMAL ???
         JLE         HEX3            < OUI.
         ADRI        -"A"+"9"+1,A    < NON.
         CPI         'A              < VALIDATION HEXDECIMALE ???
         JL          HEX2            < ERREUR.
         CPI         'F              < VALIDATION HEXADECIMALE ???
         JG          HEX2            < ERREUR.
HEX3:    EQU         $
         SCRS        4               < CUMUL PARTIEL DE LA
         SCLD        4               < VALEUR A CONVERTIR.
         ADRI        1,X             < PASSAGE AU CARACTERE SUIVANT.
         CPR         X,Y             < EST-CE FINI ???
         JNE         HEX1            < NON.
HEX5:    EQU         $
         LR          B,A             < OUI, A=RESULTAT.
         LBI         0               < B=0 : OK.
HEX4:    EQU         $
         CPZR        B               < POSITIONNEMENT DES CODES
                                     < DE CONDITION SUR ERREUR.
         PLR         B,X
         RSR
HEX2:    EQU         $               < CAS DES ERREURS.
         LBI         1               < B=1#0 : ERREUR.
         JMP         HEX4            < VERS LA SORTIE...
         PAGE
<
<
<        E M I S S I O N   M E S S A G E  :
<
<
<        ARGUMENT :
<                    A=@MOT DU MESSAGE , DONT LE 1ER OCTET EST
<                      SA LONGUEUR.
<
<
<        DETRUIT X ...
<
<
PRINT:   EQU         $
         LR          A,C             < C=@MOT DU MESSAGE.
         ADR         A,A
         ADRI        1,A             < A=@OCTET DU MESSAGE.
         STA         DEMMES+1        < MAJ DE DEMMES.
         LBY         0,C             < A=LONGUEUR DU MESSAGE.
         STA         DEMMES+2        < MAJ DE DEMMES.
         LAD         DEMMES
         SVC         0               < EMISSION DU MESSAGE.
         RSR
         PAGE
<
<
<        R E C H E R C H E   D E   L A   C H A I N E   C O U R A N T E  :
<
<
<        FONCTION :
<                      CE MODULE EST MIS EN SOUS-
<                    PROGRAMME A CAUSE DES SAUTS
<                    SUPERIEURS A 128 MOTS ; IL
<                    RECHERCHE LA CHAINE COURANTE DANS
<                    L'ITEM COURANT, S'IL LA TROUVE,
<                    IL EDITE SON NOM NON COMPACTE...
<
<
<        ARGUMENT :
<                    (A)=INDEX DU CARACTERE COURANT.
<
<
SPREC:   EQU         $
         LR          X,A             < (A)=NOMBRE DE CARACTERES DU NOM :
         CPI         6               < EST-CE LA LONGUEUR D'UN <NOMC> ???
         JNE         E2011           < NON, CET ITEM EST IGNORE...
         PSR         X,Y
         LXI         0               < (X)=INDEX DE TRANSFERT,
E2040:   EQU         $
         LBY         &ANOM
         STBY        &ANOMC          < TRANSFERT,
         ADRI        1,X             < AU SUIVANT...
         CPI         '04             < ET ON S'ARRETE SUR <EON>...
         JNE         E2040
         LAD         DEMITE
         SVC         0               < OUI, CHARGEONS LE EN ITEM1...
         JNE         E2030           < ERREUR, IL A PEUT-ETRE ETE DETRUIT ENTRE
                                     < TEMPS, ON L'IGNORE...
         LXI         7
         LBY         &ANOMC          < (A)=TYPE "I"/"N" :
         CPI         'C9             < EST-CE BIEN UN ITEM ???
         JNE         E2030           < NON, ON L'IGNORE...
         LXI         IINDIC*2
         LBY         &ANOMC          < (A)=TYPE DE L'ITEM :
         CPI         "T"             < TEXTE ???
         JE          E2012           < OUI, ON VA LE TESTER...
         CPI         "D"             < DESSIN ???
         JE          E2012           < OUI, ON VA LE TESTER...
         CPI         "I"             < FILM DIGITAL ???
         JNE         E2030           < NI L'UN, NI L'AUTRE, ON L'IGNORE...
E2012:   EQU         $
         CPZ         ALCHAI          < CHAINE VIDE ???
         JE          E2050           < OUI, ON EDITE...
         LXI         -1              < (X)=INDEX DE L'ITEM1,
E2020:   EQU         $
         LYI         0               < (Y)=INDEX DE LA CHAINE.
E2021:   EQU         $
         ADRI        1,X             < AU CARACTERE SUIVANT DE L'ITEM1 :
         LR          X,A             < S'IL EXISTE...
         CP          NCP             < ???
         JGE         E2030           < NON, ON IGNORE CET ITEM...
         LBY         &AITEM1         < (A)=CARACTERE DE L'ITEM1,
         XR          X,Y
         CPBY        &ACHAIN         < QUE L'ON COMPARE AU CARACTERE COURANT DE
                                     < LA CHAINE :
         XR          X,Y
         JNE         E2020           < PAS TROUVE DE COINCIDENCE...
         ADRI        1,Y             < OUI, PASSONS AU CARACTERE SUIVANT DE
                                     < LA CHAINE :
         LR          Y,A
         CP          ALCHAI          < S'IL EXISTE ???
         JL          E2021           < OUI...
E2050:   EQU         $
         LXI         3               < NON, ON A DONC TROUVE LA CHAINE,
         LBY         &ANOMC
         ADRI        -"0",A
         STA         DEMNOM+2        < ON CALCULE LA LONGUEUR DU NOM DE L'ITEM,
         LAD         MRCLF
         BSR         APRINT          < EDITION D'UN RC/LF...
         LAD         DEMNOM
         SVC         0               < ET ON L'EDITE...
E2030:   EQU         $
         PLR         X,Y
E2011:   EQU         $
         RSR
         PAGE
<
<
<        P R O C E S S E U R   D ' E D I T I O N
<        E X A U S T I V E   D E S   C A T A L O G U E S  :
<
<
<        FONCTION :
<                      CE PROCESSEUR PERMET :
<                    1- SOUS :SYS DE LISTER SELECTIVEMENT LES ACN ,
<                    2- SOUS TOUS LES NUMEROS DE COMPTE :
<                      2.1- DE LISTER SELECTIVEMENT LES NOMS ,
<                      2.2- DE LISTER ET DELETER AUTOMATIQUEMENT ET
<                           SELECTIVEMENT LES NOMS ,
<                      2.3- DE LISTER ET DELETER EN PAS A PAS AVEC
<                           VISUALISATION ET SELECTIVEMENT LES NOMS.
<
<
         WORD        LOC+'80
         WORD        BRANCH
CATAL:   EQU         $
         LRP         K
         ADRI        -1,K
         PLR         L,W             < INITIALISATION DE L ET W.
         LA          APILE
         LR          A,K             < INITIALOSATION DE K.
         IC          KIN             < COMPTAGE DES ENTRIES DANS 'EX'.
         JE          E340            < CAS DE LA 1ERE ...
         BR          AGOGE           < POUR LA SUIVANTE , ON VA A 'GE'.
E340:    EQU         $
<
< INITIALISATION DE L'EDITEUR :
<
         LAI         '02
         STA         SCATAL          < MISE EN MODE NORMAL DE SCATAL ,
                                     < AFIN DE COMMENCER A PRIORI LE
                                     < PARCOURS DE L'ARBRE APRES
                                     < LES ACN ...
         STZ         DELET           < LISTAGE SEUL A PRIORI.
         STZ         VISUAL          < PAS DE VISUALISATION A PRIORI.
<
< FAUT-IL LISTER EN HEXADECIMAL ???
<
E1000:   EQU         $
         LAD         MHEXA
         BSR         APRINT          < ENVOI D'UN MESSAGE INTERROGATION.
         LAD         DEMREP
         SVC         0               < ENTREE DE LA REPONSE.
         LBY         REP             < A=CARACTERE REPONSE.
<
<        REPONSES RECONNUES :
<                    N : LISTAGE ALPHA-NUMEROQUE SEUL ,
<                    O : LISTAGE ALPHA-NUMERIQUE+HEXADECIMAL.
<
         CPI         "N"
         JE          E1001           < LISTAGE ALPHANUMERIQUE SEUL.
         CPI         "O"
         JNE         E1000           < INCOMPREHENSIBLE ...
<
< LISTAGE ALPHA-NUMERIQUE+HEXADECIMAL :
<
         LAI         HNOM1-ZERO*2+1  < CHANGEMENT DE L'ADRESSE BUFFER.
         STA         DEMOUT+1
         LAI         LNOM+2*4+2+1
         STA         KCONT           < CONSTANTE DE CALCUL DE LA
                                     < LONGUEUR DES MESSAGES LORS DE
                                     < L'EDITION DES NOMS.
         LAI         '20
         SWBR        A,A
         ORI         '20
         STA         RCLF            < ON REMPLACE LE RC-LF DE DEBUT DU
                                     < NOM ALPHA-NUMERIQUE PAR 2
                                     < CARACTERES 'SPACE'.
         STA         INDH            < DE PLUS , ON FAIT AINSI INDH#0.
E1001:   EQU         $
<
< PROPOSITION DE RECHERCHE :
<
E2000:   EQU         $
         STZ         IRECH           < NON A PRIORI...
         LAD         MRECH
         BSR         APRINT          < ENVOI D'UN MESSAGE,
         LAD         DEMREP
         SVC         0               < ET LECTURE DE LA REPONSE,
         LBY         REP             < (A)=REPONSE :
         CPI         "N"
         JE          E2001           < (IRECH)=0...
         CPI         "O"
         JNE         E2000           < ?!??!?!
         IC          IRECH           < (IRECH)#0...
         LAD         MCHAI
         BSR         APRINT          < ENVOI D'UN MESSAGE...
         LAD         DEMCHA
         SVC         0               < ET ENTREE DE LA CHAINE :
         ACTD        3               < (B)=LONGUEUR REELLE,
         STB         ALCHAI          < QUE L'ON MEMORISE,
         LR          B,X
         ADRI        -1,X            < (X)=INDEX DU DERNIER CARACTERE,
         LBY         &ACHAIN         < (A)=DERNIER CARACTERE :
         CPI         '04             < EST-CE UN LIMITEUR ???
         JE          E2002           < OUI, ON L'EFFACE...
         CPI         '0D             < EST-CE UN LIMITEUR ???
         JNE         E2003           < NON...
E2002:   EQU         $
         DC          ALCHAI          < EFFACEMENT DES LIMITEURS DE FIN...
E2003:   EQU         $
         JMP         E400            < VERS L'ENTREE DE LA RACINE...
E2001:   EQU         $
<
< ENTREE DE LA LONGUEUR MAX :
<
E1001X:  EQU         $
         LAD         MLMAX
         BSR         APRINT          < "LMAX="...
         LAD         DEMHEX
         SVC         0               < ENTREE DE LA CHAINE HEXA,
         LYI         4               < Y=4 CHIFFRES A CONVERTIR...
         BSR         AHEX            < ET CONVERSION :
         JNE         E1001X          < ERREUR...
         CPI         LNOM*2          < VALIDATION...
         JG          E1001X          < ERREUR...
         JAL         E1001X          < ERREUR...
         JANE        E1001Y          < OK...
         LAI         LNOM*2+1        < SI NUL, ON PREND LE MAX...
E1001Y:  EQU         $
         STA         LMAX
<
< IDENTIFICATION DU DEMANDEUR :
<
         WORD        '1E25           < (A,B)=ACN DU DEMANDEUR.
         CP          ACNSYS          < EST-CE :SYS ????
         JNE         E600            < NON.
         LR          B,A
         CP          ACNSYS+1        < EST-CE :SYS ???
         JNE         E600            < NON.
<
< CAS DE :SYS : DOIT-ON LISTER LES ACN ???
<
E301:    EQU         $
         LAD         MACN
         BSR         APRINT          < ENVOI D'UNE INVITATION.
         LAD         DEMREP
         SVC         0               < ENTREE DE LA REPONSE.
         LBY         REP             < A=REPONSE UTILISATEUR.
         CPI         "N"
         JE          E300            < LES ACN NE SONT PAS DEMANDES.
         CPI         "O"
         JNE         E301            < ERREUR DE REPONSE , ON RECOMMENCE
         LAI         '0A
         STA         SCATAL          < SCATAL EST MISE EN MODE DE
                                     < PARCOURS SUR LA RACINE DE L'
                                     < ARBRE DU SYSTEME.
         JMP         E400            < ON SAUTE LES TESTS DE DELETE
                                     < ET DE VISUALISATION.
<
< CAS OU L'ON N'EST PAS SOUS :SYS :
<
E600:    EQU         $
         IF          ORDI-"T",XWOR%,,XWOR%
         STZ         ASP3            < RAZ DU RELAI DE STABILISATION
                                     < DE L'IMAGE VIDEO.
XWOR%:   VAL         0
E300:    EQU         $
<
< DEMANDE DE VISUALISATION :
<
E310:    EQU         $
         LA          LMAX
         CPI         LNOM*2+1        < EST-CE LA LONGUEUR MAX ???
         JNE         E400            < NON, PAS DE VISUALISATION...
         LAD         MVIS
         BSR         APRINT          < ENVOI D'UNE INVITATION.
         LAD         DEMREP
         SVC         0               < ENTREE DE LA REPONSE.
         LBY         REP             < A=REPONSE UTILISATEUR.
         CPI         "N"
         JE          E400            < PAS DE VISUALISATION (VISUAL=0).
         CPI         "O"
         JNE         E310            < REPONSE INCOMPREHENSIBLE ...
         IC          VISUAL          < VISUALISATION (VISUAL=1#0).
         LAD         DEMMEM
         SVC         0               < IL FAUT DEMANDER ALORS 8K MOTS.
<
< ENTREE DE LA RACINE DE PARCOURS :
<
E400:    EQU         $
         LAD         MRAC
         BSR         APRINT          < ENVOI D'UNE INVITATION.
         LAD         DEMIN
         SVC         0               < ENTREE DE LA RACINE.
         LXI         0               < INITIALISATION DE L'INDEX.
E210:    EQU         $
         LBY         &ANOM           < ACCES UN CARACTERE DE LA RACINE.
         CPI         '04             < EST-CE L'EOT ???
         JE          E211            < OUI.
         ADRI        1,X             < NON PROGRESSION INDEX.
         JMP         E210            < ACCES CARACTERE SUIVANT.
E211:    EQU         $
         STX         XRAC            < SAVE L'INDEX INITIAL.
         CPZR        X               < L'EOT EST-IL EN 1ER CARACTERE ???
         JE          E212            < OUI , (X) EST INCHANGE (=0).
         ADRI        -1,X            < SI NON , ON REVIENT SUR LE
                                     < CARACTERE PRECEDENT.
E212:    EQU         $
         STX         SXRAC           < SAVE LA VALEUR DU X INITIAL.
         CPZ         DELET           < NATURE DE L'OPERATION DEMANDEE ???
         JL          E93             < EN MODE DELETE AUTOMATIQUE ,
                                     < ON NE FAIT PAS D' A PARTIR DE ...
<
< EST-CE UN 'A PARTIR DE' ???
<
E430:    EQU         $
         LAD         MPART
         BSR         APRINT          < ENVOI D'UNE INVITATION.
         LAD         DEMREP
         SVC         0               < ENTREE DE LA REPONSE.
         LBY         REP             < A=REPONSE UTILISATEUR.
<
<        REPONSES RECONNUES :
<                    R/C , 'EOT' : SEULS SONT EDITES , LES NOMS
<                                  COMMENCANT PAR LA RACINE ,
<                    0,...,9 :     ON EDITE TOUT LE CATALOGUE A
<                                  PARTIR DES MOTS COMMENCANT PAR
<                                  LA RACINE.
<
         CPI         '0D
         JE          E431            < ON RESTERA SUR LA RACINE.
         CPI         '04
         JE          E431            < ON RESTERA SUR LA RACINE.
         ADRI        -'30,A          < CONVERSION BINAIRE.
         JAL         E430            < ERREUR : ON REINTERROGE.
         CPI         9               < VALIDATION SUPERIEURE ...
         JG          E430            < ERREUR : ON REINTERROGE ...
         STA         XRAC            < S'IL S'AGIT D'UN CHIFFRE
                                     < DECIMAL , IL DEVIENT LA
                                     < VALEUR DE TEST DE L'INDEX
                                     < COURANT DE PARCOURS (X).
E431:    EQU         $
         LX          SXRAC           < RESTAURE L'X INITIAL.
<
<        B O U C L E   D E   R E C U P E R A T I O N  :
<
E93:     EQU         $
         LAI         9
         BSR         AGOSGN          < DEMANDE DE NEXT-SERIE.
         CPI         5               < TEST DU CODE D'ERREUR.
         JE          E94             < IL N'Y A PAS DE NEXT SERIE ...
         JAE         E500            < OK , LE NEXT-SERIE EXISTE.
         LR          X,A
         CP          XRAC            < EST-ON DE RETOUR SUR LA RACINE ???
         JL          E50             < OUI , ON ARRETE LE LISTAGE.
         ADRI        -1,X            < DANS LES AUTRES CAS D'ERREURS ,
                                     < ON FAIT UN RETOUR ARRIERE , CAR
                                     < EN EFFET ON NE DOIT PLUS SAVOIR
                                     < OU L'ON EN EST SUITE A UN
                                     < DELETE SIMULTANE ...
         JMP         E93             < N'ETANT PAS DE RETOUR SUR
                                     < LA RACINE , ON CONTINUE.
<
< CAS OU IL Y A UN NEXT-SERIE :
<
E500:    EQU         $
         LR          X,A
         CP          LMAX            < EST-CE LE MAX ???
         JGE         E500X1          < OUI, ON EDITE...
         ADRI        1,X
         LBY         &ANOM           < RECUPERATION DE CE NEXT-SERIE.
         CPI         '04             < EST-CE UNE FIN DE NOM ???
         JNE         E93             < NON , ON CONTINUE A RECUPERER.
<
< TRAITEMENT DU NOM COURANT :
<
E500X1:  EQU         $
         PSR         X               < SAVE L'INDEX COURANT.
         CPZ         IRECH           < FAIT-ON UNE RECHERCHE ???
         JE          E2010           < NON, TRAITEMENT NORMAL...
<
< CAS DES RECHERCHES SUR ITEM :
<
         BSR         ASPREC          < RECHERCHE DE LA CHAINE COURANTE...
         JMP         E401A           < ET ON VA PASSER AU NOM SUIVANT...
<
< MODE NON-RECHERCHE,
< EDITION DU NOM :
<
E2010:   EQU         $
         LR          X,A             < A=NBRE DE CARACTERES DU NOM.
         AD          KCONT           < CALCUL DE LA LONGUEUR DU
                                     < MESSAGE A EDITER.
         STA         DEMOUT+2        < ET MAJ DE DEMOUT AVEC (A).
         CPZ         INDH            < FAUT-IL DE PLUS CONVERTIR EN HEXA?
         JE          E1002           < NON , ON VA EDITER ....
<
< CONVERSION HEXA DES NOMS :
<
         STZ         XHNOM           < RAZ DE L'INDEX DU NOM HEXA.
         STZ         XANOM           < RAZ DE L'INDEX DU NOM ALPHA.
E1003:   EQU         $               < BOUCLE DE CONVERSION ALPHA-HEXA.
         PSR         X               < SAVE LE NBRE DE CARACTERES A
                                     < CONVERTIR.
         LX          XANOM           < X=INDEX DU NOM ALPHA.
         LBY         &ANOM           < A=1 CARACTERE ALPHA.
         IC          XANOM           < PROGRESSION DE L'INDEX ALPHA.
         SLRD        4               < A=1ER CHIFFRE HEXA , ET SAVE
                                     < LE 2EME DANS B.
         BSR         AHEXA           < CONVERSION HEXA ET MISE DANS
                                     < LE BUFFER HEXA.
         LAI         0               < CLEAR A ,
         SLLD        4               < ET RECUPERATION DU 2EME CHIFFRE.
         BSR         AHEXA           < CONVERSION HEXA DU 2EME
                                     < CHIFFRE ,, ET MISE DANS LE BUFFER.
         PLR         X               < RESTAURE LE COMPTE DE CARACTERES.
         JDX         E1003           < AU SUIVANT ...
         LX          XHNOM           < X=INDEX COURANT BUFFER HEXA.
         LAI         '20             < A='SPACE'.
E1004:   EQU         $               < BOUCLE DE MISE A 'SPACE' DE
                                     < LA FIN DU BUFFER ...
         XR          A,X
         CPI         LNOM+2*4        < EST-ON AU BOUT DU BUFFER ???
         JE          E1002X          < OUI , ON ARRETE ...
         XR          A,X             < NON ,
         STBY        &AHNOM          < MISE A 'SPACE' DU CARACTERE
                                     < COURANT.
         ADRI        1,X             < AU SUIVANT ,...
         JMP         E1004
E1002X:  EQU         $
         LA          DEMOUT+2        < A=CODEM,
         LB          DEMOUT+1        < B=AMDEM,
         PSR         A,B             < ET SAVE...
         SLRS        1               < POUR FAIRE 2 ECHANGES :
         LR          A,B             < B=CODEM DU 2EME ECHANGE,
         ADCR        A               < A=CODEM DU PREMIER...
         STA         DEMOUT+2
         LAD         DEMOUT
         SVC         0               < PREMIERE PARTIE DE LA SORTIE...
         JNE         E50X            < CTRL-X-OFF...
         LA          DEMOUT+1
         AD          DEMOUT+2        < TRANSLATION DE AMDEM,
         STA         DEMOUT+1
         STB         DEMOUT+2
         LAD         DEMOUT
         SVC         0               < DEUXIEME PARTIE DE LA SORTIE...
E50X:    EQU         $
         PLR         A,B
         STA         DEMOUT+2        < RESTAURATION DE LA DEMANDE...
         STB         DEMOUT+1
         JNE         E50             < SORTIE ABORTEE PAR CTRL-X-OFF...
         JMP         E1002Y
E1002:   EQU         $               < EDITION DU BUFFER.
         LAD         DEMOUT
         SVC         0               < EDITION DU NOM COURANT.
         JNE         E50             < ARRET SUR CTRL-X-OFF ...
E1002Y:  EQU         $
         CPZ         VISUAL          < FAUT-IL VISUALISER ???
         JE          E401A           < NON ...
<
< VISUALISATION DE LA VALEUR DU NOM :
<
         LX          LVAL
E361:    EQU         $
         STZ         &ZAVAL          < RAZ DE LA VALEUR AU PREALABLE ,
                                     < AFIN DE VOIR SUR LA TV , LA
                                     < NATURE DE LA VALEUR.
         JDX         E361
         LXI         LNOM
         LAD         NOM
         LB          AVAL
         MOVE                        < LE NOM DE LA VALEUR EST MIS EN
                                     < TETE DE LA VALEUR.
         LAD         DEMLOD
         SVC         0               < CHARGEMENT SOUS ACN DE LA
                                     < VALEUR DU NOM COURANT.
<
< STABILISATION EVENTUELLE DE L'IMAGE VIDEO :
<
         IF          ORDI-"T",XWOR%,,XWOR%
         LA          ASP3            < ACCES AU RELAI DE LA ROUTINE.
         JAE         E401            < ON N'EST PAS SOUS :SYS.
         WORD        '1EC5           < STABILISATION MAITRE SOUS :SYS.
E401:    EQU         $
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LXI         3               < STABILISATION DE L'IMAGE VIDEO
E401:    EQU         $
         STX         STABIL+3        < SUR LES TROIS PROCESSEURS.
         PSR         X
         LAD         STABIL
         SVC         0
         PLR         X
         JDX         E401
XWOR%:   VAL         0
E401A:   EQU         $
         PLR         X               < RESTAURE L'INDEX COURANT.
         CPZ         DELET           < EST-ON EN MODE DELETE EVENTUEL ???
         JE          E322            < NON , PASSAGE AU NOM SUIVANT.
<
< DELETE EVENTUEL D'UN NOM :
<
         PSR         X               < SAVE L'INDEX COURANT.
         JL          E360            < CAS D'UN DELETE AUTOMATIQUE.
E320:    EQU         $
         LAD         MDEL
         BSR         APRINT          < ENVOI D'UNE INVITATION.
         LAD         DEMREP
         SVC         0               < ENTREE REPONSE UTILISATEUR.
         LBY         REP             < A=REPONSE UTILISATEUR.
<
<        REPONSES RECONNUES :
<                    R/C , 'EOT' , + : LE NOM EST CONSERVE ,
<                    - :               LE NOM EST DELETE.
<
         CPI         '0D
         JE          E321            < R/C : LE NOM EST CONSERVE.
         CPI         '04
         JE          E321            < 'EOT' : LE NOM EST CONSERVE.
         CPI         "+"
         JE          E321            < + : LE NOM EST CONSERVE.
         CPI         "-"
         JNE         E320            < REPONSE NON RECONNUE ...
E360:    EQU         $               < ENTRY 'DELETE AUTOMATIQUE'.
         LAD         DEMDEL
         SVC         0               < - : LE NOM EST DELETE.
E321:    EQU         $
         PLR         X               < RESTAURE L'INDEX COURANT.
E322:    EQU         $
         LR          X,A
         CP          LMAX            < EST-ON SUR LE MAX ???
         JL          E322X           < NON...
         ADRI        -1,X            < OUI, ON RECULE...
E322X:   EQU         $
<
< RECHERCHE DU NEXT-PARALLELE :
<
E98:     EQU         $
E94:     EQU         E98             < ENTRY DE 1ERE RECHERCHE NEXT-
                                     < SERIE (CF. RACINE D'UN CATALOGUE)
         LAI         8
         BSR         AGOSGN          < RECHERCHE NEXT-PARALLELE.
         CPI         5               < TEST DU CODE D'ERREUR.
         JE          E97             < CAS DU NEXT-PARALLELE QUI
                                     < N'EXISTE PAS ...
         JANE        E93             < AUTRES CAS DU SUREMENT A UN
                                     < DELETE SIMULTANE QUI DESORIENTE!!!
<
< CAS OU IL Y A UN NEXT-PARALLELE :
<
E330:    EQU         $
         ADRI        1,X
         LBY         &ANOM           < RECUPERATION DE CELUI-CI.
         ADRI        -1,X
         STBY        &ANOM           < ET ON LE MET A SA BONNE PLACE.
         JMP         E93             < ET RETOUR A LA BOUCLE DE
                                     < RECUPERATION.
<
< CAS OU IL N'Y A PAS DE NEXT-PARALLELZE :
<
E97:     EQU         $
         ADRI        -1,X            < RETOU ARRIERE DANS LE NOM.
         LR          X,A             < POUR VALIDATION.
         CP          XRAC            < EST-ON DE RETOUR SUR LA RACINE ???
         JGE         E98             < NON , ON CONTINUE ...
<
<        R E T O U R   A ' G E '  :
<
E50:     EQU         $
         LA          APILE
         LR          A,K             < RESTAURE EVENTUELLEMENT LA
                                     < PILE K PAR PURE PROPRETE (CF.
                                     < PAR EXEMPLE LES CTRL-X-OFF...)
         LAD         RELMEM
         SVC         0               < REYOUR A 4K MOTS A PRIORI.
         LA          NGE
         STA         0,W             < MISE EN PLACE DU NOM DE GE EN
                                     < TETE DE LA BRANCHE D'OVERLAY.
         LAI         6
         STBY        DEMSGN          < MISE EN PLACE DU NVP DE LOAD
                                     < SOUS :SYS.
E101:    EQU         $
         LAD         DEMSGN
         BSR         AOVL            < TENTATIVE DE CHARGEMENT GE.
         LAD         DEMCCI
         SVC         0               < RETOUR AU CCI SI ERREUR.
         JMP         E101            < ET NOUVELLE TENTATIVE SI !GO.
         PAGE
<
<
<        I M P L A N T A T I O N  :
<
<
X12:     EQU         ZERO+PILE-LTNI-LTNI
X10:     VAL         X12-$
ZEROV:   EQU         ZERO+X10        < ERREUR D'ASSEMBLAGE SI MAUVAISE
                                     < IMPLANTATION.
         DZS         X10+1
         EOT         #SIP GEN PROCESSEUR#



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