NMPROC:  VAL         "PH"            < NOM DU PROCESSEUR.
         IDP         "PH - RELEASE 01/06/1979"
         IDP         "JOHN F. COLONNA"
         EOT         #SIP DEF PROCESSEUR#
         PROG
         WORD        LEXIC           < ADRESSE DE LANCEMENT DE 'PH'.
         WORD        0               < POUR FAIRE $=$+1.
PLEXIC:  EQU         $               < A NOTER : P='12 !!!!!
         LRP         L
         BR          -2,L            < ENTREE DANS LE PROCESSEUR 'PH'.
         EOT         #SIP DEFINITION ITEM#
         PAGE
<
<
<        C O N S T A N T E S   D U   D I C T I O N N A I R E  :
<
<
NCATG:   VAL         32              < NBRE DE CATEGORIES GRAMMATICALES.
LMOT:    VAL         40              < NBRE DE CARACTERES MAX D'UN MOT.
NCATG4:  VAL         NCATG+3/4       < NBRE D'OCTETS NECESSAIRES
                                     < AUX CATEGORIES GRAMMATICALES.
NSEM:    VAL         4               < NBRE D'OCTETS DE VALEUR
                                     < SEMANTIQUE DU MOT.
         PAGE
<
<
<        C O N S T A N T E S   L E X I C O G R A P H I Q U E S  :
<
<
LPHR:    VAL         112             < NBRE DE CARACTERES MAX
                                     < D'1NE PHRASE.
                                     < (=LBUFESC DANS DCTESC...)
<
<        F O R M A T   D ' U N   D E S C R I P T E U R
<                    D E   M O T  :
<
DESCI:   VAL         0               < INDEX DU 1ER CARACTERE DU MOT.
                                     < DESCI=-1 EN FIN DE PHRASE ...
DESCL:   VAL         1               < LONGUEUR EN OCTETS DU MOT.
DESCD:   VAL         2               < NOM DU DICTUIONNAIRE D'APPARTE-
                                     < NANCE :
                                     < 0 : LE MOT EST INCONNU ,
                                     < '  ' : MOT USUEL CONNU ,
                                     < <K1><K2> : MOT NON USUEL CONNU.
DESCS:   VAL         3               < SEPARATEUR PRECEDENT LE MOT
                                     < COURANT CODE A L'AIDE DE 'SEPX'.
DESCF:   VAL         4               < CATEGORIE GRAMMATICALE REELLE
                                     < DU MOT DANS SON CONTEXTE.
DESCV:   VAL         5               < VALEUR SEMANTIQUE DU MOT.
DESCC:   VAL         NSEM+1/2+DESCV  < CATEGORIES GRAMMATICALES DU MOT.
                                       < RES POUR MEMORISER LE
LDESC:   VAL         NCATG4+3/4+DESCC  < NBRE DE MOTS MACHINES NECESSAI-
                                       < DESCRIPTEUR D'UN MOT FRANCAIS.
<
<        C A T E G O R I E S   L E X I C A L E S  :
<
SEP1:    VAL         4               < SEPARATEUR DU TYPE 'SPACE'.
SEP2:    VAL         3               < SEPARATEURS DU TYPE ',',';',...
SEP3:    VAL         2               < SEPARATEUR DU TYPE APOSTROPHE.
SEP4:    VAL         1               < SEPARATEURS DU TYPE 'PARENTHESE'.
FINF:    VAL         0               < SEPARATEUR DE FIN DE PHRASE ,
                                     < 'EOT' ET R/C.
CAR:     VAL         8               < LIMITE ENTRE LES CARACTERES
                                     < DE TYPE 'SEPARATEUR' ET LES
                                     < CARACTERES DE TYPE 'LETTRES'.
LETR:    VAL         8               < CARACTERES DU TYPE LETTRES ,
                                     < DE 'A' A 'Z'.
CHIF:    VAL         9               < CARACTERES DU TYPE 'CHIFFRE' ,
                                     < DE '0' A '9'.
CARS:    VAL         'A              < CARACTERES SPECIAUX ASSIMILES
                                     < A DES LETTRES : '-','+','*',...
IGNOR:   VAL         'B              < CARACTERES NON RECONNUS ET
                                     < REMPLACES PAR '#' (ASSIMILE
                                     < A DES LETTRES) , PAR EXEMPLE
                                     < 'GS' , 'DC1' ,...
         PAGE
<
<
<        C A T E G O R I E S   G R A M M A T I C A L E S  :
<
<
NOM:     VAL         1               < NOM.
VERBE:   VAL         2               < VERBE.
ADJECT:  VAL         3               < ADJECTIF.
ADVERB:  VAL         4               < ADVERBE.
PROPER:  VAL         5               < PRONOM PERSONNEL.
PRODEM:  VAL         6               < PRONOM DEMONSTRATIF.
INTERJ:  VAL         7               < INTERJECTION , 'OUI' , 'NON' ,....
PREPOS:  VAL         8               < PREPOSITION.
CONJ:    VAL         9               < CONJONCTION.
ARTICL:  VAL         10              < ARTICLE.
PROREL:  VAL         11              < PRONOM RELATIF.
         PAGE
<
<
<        V A L E U R S   L E X I C A L E S
<        D E S   C A R A C T E R E S  :
<
<
VALK:    EQU         $
         BYTE        IGNOR;IGNOR     < NUL SOH   00 01
         BYTE        IGNOR;IGNOR     < STX ETX   02 03
         BYTE        FINF;IGNOR      < EOT ENQ   04 05
         BYTE        IGNOR;IGNOR     < ACK BEL   06 07
         BYTE        IGNOR;IGNOR     < BS HT     08 09
         BYTE        IGNOR;IGNOR     < LF VT     0A 0B
         BYTE        IGNOR;FINF      < FF CR     0C 0D
         BYTE        IGNOR;IGNOR     < SO SI     0E 0F
         BYTE        IGNOR;IGNOR     < DLE DC1   10 11
         BYTE        IGNOR;IGNOR     < DC2 DC3   12 13
         BYTE        IGNOR;IGNOR     < DC4 NAK   14 15
         BYTE        IGNOR;IGNOR     < SYN ETB   16 17
         BYTE        IGNOR;IGNOR     < CAN EM    18 19
         BYTE        IGNOR;IGNOR     < SUB ESC   1A 1B
         BYTE        IGNOR;IGNOR     < FS GS     1C 1D
         BYTE        IGNOR;IGNOR     < RS US     1E 1F
         BYTE        SEP1;SEP2       < SPACE !   20 21
         BYTE        CARS;CARS       < " #       22 23
         BYTE        CARS;CARS       < $ %       24 25
         BYTE        CARS;SEP3       < & '       26 27
         BYTE        SEP4;SEP4       < ( )       28 29
         BYTE        CARS;CARS       < * +       2A 2B
         BYTE        SEP2;CARS       < , -       2C 2D
         BYTE        FINF;CARS       < . /       2E 2F
         BYTE        CHIF;CHIF       < 0 1       30 31
         BYTE        CHIF;CHIF       < 2 3       32 33
         BYTE        CHIF;CHIF       < 4 5       34 35
         BYTE        CHIF;CHIF       < 6 7       36 37
         BYTE        CHIF;CHIF       < 8 9       38 39
         BYTE        SEP2;SEP2       < : ;       3A 3B
         BYTE        CARS;CARS       < < =       3C 3D
         BYTE        CARS;SEP2       < > ?       3E 3F
         BYTE        CARS;LETR       < @ A       40 41
         BYTE        LETR;LETR       < B C       42 43
         BYTE        LETR;LETR       < D E       44 45
         BYTE        LETR;LETR       < F G       46 47
         BYTE        LETR;LETR       < H I       48 49
         BYTE        LETR;LETR       < J K       4A 4B
         BYTE        LETR;LETR       < L M       4C 4D
         BYTE        LETR;LETR       < N O       4E 4F
         BYTE        LETR;LETR       < P Q       50 51
         BYTE        LETR;LETR       < R S       52 53
         BYTE        LETR;LETR       < T U       54 55
         BYTE        LETR;LETR       < V W       56 57
         BYTE        LETR;LETR       < X Y       58 59
         BYTE        LETR;CARS       < Z CROCHET(          5A 5B
         BYTE        CARS;CARS       < ANTI/ CROCHET)      5C 5D
         BYTE        CARS;CARS       <           5E 5F
         PAGE
<
<        A C T I O N S   L E X I C A L E S  :
<
<
ACTL:    EQU         $
         WORD        RIEN            < FIN DE PHRASE.
         WORD        RIEN            < SEP4.
         WORD        RIEN            < SEP3.
         WORD        RIEN            < SEP2.
         WORD        RIEN            < SEP1.
         WORD        RIEN            < 5.
         WORD        RIEN            < 6.
         WORD        RIEN            < 7.
         WORD        RIEN            < LETTRES.
         WORD        RIEN            < CHIFFRES.
         WORD        RIEN            < CARACTERES SPECIAUX.
         WORD        REPLAC          < CARACTERES NON RECONNUS (IGNOR).
         WORD        RIEN            < C.
         WORD        RIEN            < D.
         WORD        RIEN            < E.
         WORD        RIEN            < F.
         PAGE
<
<
<        M E M O I R E   L I B R E  :
<
<
FREE:    VAL         '1000           < ADRESSE DU 1ER MOT LIBRE
                                     < DES 2 DERNIERS K DE LA MEMOIRE.
<
<
<        L O C A L  :
<
<
         LOCAL
LOC:     EQU         $
<
<        M E S S A G E S  :
<
MPHR:    BYTE        8;'6D
         ASCI        "PHRASE> "
MINC:    BYTE        5;'6D
         ASCI        "??? "
<
<        R E L A I S   D E   T A B L E S  :
<
< PHRASE A ANALYSER :
<
PHR:     VAL         FREE            < ZONE CONTENATNT LA PHRASE
                                     < A ANALYSER.
APHR:    WORD        PHR+'8000       < RELAI INDEX VERS LA PHRASE
                                     < A ANALYSER.
FREE:    VAL         LPHR/2+FREE+1   < PROGRESSION DE LA ZONE LIBRE.
                                     < (+1 A CAUSE DE L'EOT QUE L'ON
                                     < AJOUTE SYSTEMATIQUEMENT EN
                                     < BOUT DE ZONE 'PHR').
<
< ZONE ARGUMENTS :
<
LDUM:    VAL         32              < LONGUEUR DE LA ZONE ARGUMENT.
DUMY:    VAL         FREE            < ZONE ARGUMENT (SYNTAXE-->
                                     < SEMANTIQUE).
FREE:    VAL         FREE+LDUM
<
< ZONE DES DESCRIPTEURS ET DES PROPOSITIONS :
<
DPHR:    VAL         FREE            < ZONE DES DESCRIPTEURS DES MOTS
                                     < DE LA PHRASE.
FREE:    VAL         LDESC*LPHR/2+FREE
                                     < PROGRESSION DE LA ZONE LIBRE
                                     < DANS UN GACHIS SUPERBE.....
                                     < (/2 PARCEQUE L'ON A AU MAXIMUM
                                     < LPHR/2 MOTS DANS UNE PHRASE
                                     < DE LPHR CARACTERES MAX !!!).
ADPHR:   WORD        DPHR            < ADRESSE DU 1ER DESCRIPTEUR
                                     < LEXICOGRAPHIQUE.
AI1:     WORD        ZERO+PILE-LTNI+LTN,X  < RELAI VERS L'ITEM1.
AI2H:    WORD        ZERO+PILE-LTNI-LTNI
                                     < @DE L'EN-TETE DE L'ITEM2.
AI2:     WORD        ZERO+PILE-LTNI-LTNI+LTN,X
                                     < RELAI INDEX VERS LE CORPS DE
                                     < DE L'ITEM2.
AVALK:   WORD        VALK,X          < RELAI VERS LA TABLE DES
                                     < VALEURS LEXICOGRAPHIQUES DES
                                     < CARACTERES.
AACTL:   WORD        ACTL,X          < RELAI VERS LA TABLE DES ACTIONS
                                     < LEXICOGRAPHIQUES.
<
<        D E M A N D E S   A   C M S 4  :
<
DEMOUT:  WORD        '0202           < SORTIE MESSAGE.
         WORD        0               < @OCTET DU MESSAGE.
         WORD        0               < LONGUEUR DU MESSAGE.
DEMIT:   WORD        '0602           < CAHARGEMENT DES PAGES DE
                                     < DICTIONNAIRE DANS L'ITEM2.
         WORD        PILE-LTNI-LTNI*2
         WORD        2*LTNI
         WORD        -1
DEMSGN:  WORD        '0402           < DEMANDE DE CHARGEMENT DES
                                     < OVERLAYS INITIALISES EN MODE
                                     < GENERATION.
         WORD        BRANCH-ZERO*2
         WORD        ZERO-BRANCH+PILE-LTNI-LTNI*2
         WORD        -1
DEMIN:   WORD        '0101           < DEMANDE D'ENTREE D'UNE PHRASE
                                     < AVEC ECHO.
         WORD        PHR*2
         WORD        LPHR
DEMCCI:  WORD        '0001           < APPEL DU CCI.
DEMMEM:  WORD        '0004           < DEMANDE D'ALLOCATION MEMOIRE.
         WORD        0
         WORD        '3000           < DEMANDE DE 6K MOTS.
<
<        P I L E   D E   ' P H '  :
<
APILES:  WORD        PILE-1          < PILE DE SODOME , UTILISEE
                                     < DANS LE CAS OU UN RETOUR
                                     < A 'GE' EST FAIT POUR PHRASE VIDE.
PILE:    VAL         FREE+1
APILE:   WORD        PILE-1          < POUR INITIALISER LE REGISTRE
                                     < K DANS LA ZONE LIBRE.
<
<        A D R E S S E S   D E S   R O U T I N E S  :
<
APRINT:  WORD        PRINT           < ROUTINE D'EMESSION DE MESSAGE.
AOVL:    WORD        OVL             < CHARGEMENT DES OVERLAYS.
AGTK:    WORD        0               < CONTIENT SOIT @GTK1 , SOIT @GTK2.
AGTK1:   WORD        GTK1            < TRANSFERT DE LA PHRASE DE
                                     < L'ITEM2 VERS 'PHR' , ET RECU-
                                     < PERATION DU TYPE DES CARACTERES.
                                     < (APPEL PAR 'SE').
AGTK2:   WORD        GTK2            < ACCES AU TYPE D'UN
                                     < CARACTERE DE RANG DONNE.
                                     < (APPEL PAR 'GE')
ALOADI:  WORD        LOADI           < CHARGEMENT D'1NE PAGE DE
                                     < DICTIONNAIRE.
AGT1:    WORD        GT1             < ACCES A UN CARACTERE QUELCONQUE
                                     < D'UNE PAGE DE DICTIONNAIRE.
AGT2:    WORD        GT2             < ACCES A UN CARACTERE DECIMAL
                                     < D'UNE PAGE DE DICTIONNAIRE.
ATEST:   WORD        TEST            < TEST DE LA PRESENCE D'UN MOT
                                     < DANS UNE PAGE DU DICTIONNAIRE.
AGETCG:  WORD        GETCG           < RECUPERATION DES CATEGORIES
                                     < GRAMMATICALES DANS UNE PAGE
                                     < DU DICTIONNAIRE.
AGETV:   WORD        GETV            < RECUPERATION DE LA VALEUR
                                     < SEMANTIQUE DU MOT.
<
<        C O N S T A N T E S  :
<
DIX:     WORD        10              < POUR CONVERSION DECIMALE.
NBC:     WORD        NBCAR*NBLIG     < NBRE DE CARACTERES D'UN ITEM.
NSYNT:   ASCI        " X"            < NOM DE LA BRANCHE D'ANALYSE
                                     < SYNTAXIQUE.
NGE:     ASCI        "GE"            < NOM DE L'OVERLAY 'GE'.
NDIC:    ASCI        ":  3"          < NOM DE LA PAGE DES MOTS USUELS
         BYTE        '40;"0"
                                     < DU DICTIONNAIRE.
         BYTE        '04;"T"
NOMDIC:  ASCI        "  "            < NOM DE LA PAGE COURANTE DU
                                     < DICTIONNAIRE.
                                     < (A ':' PRES ....).
X2:      WORD        0               < INDEX COURANT DE L'ITEM2.
         PAGE
<
<
<        E M I S S I O N   D ' U N   M E S S A G E  :
<
<
<        ARGUMENT :
<                    A=@MOT DU MESSAGE DONT LE 1ER
<                      OCTET EN CONTIENT LA LONGUEUR.
<
<
         PROG
PRINT:   EQU         $
         PSR         C               < PAR PRUDENCE.
         LR          A,C             < C=@MOT DU MESSAGE.
         ADR         A,A
         ADRI        1,A             < A=@OCTET DU MESSAGE.
         STA         DEMOUT+1        < QUE L'ON MET DANS DEMOUT.
         LBY         0,C             < A=LONGUEUR DU MESSAGE.
         STA         DEMOUT+2        < QUE L'ON MET DANS DEMOUT.
         LAD         DEMOUT
         SVC         0               < EMISSION DU MESSAGE.
         PLR         C               < PAR PRUDENCE.
         RSR
         PAGE
<
<
<        T Y P E   L E X I C O G R A P H I Q U E
<        D ' U N   C A R A C T E R E  :
<
<
<        FONCTION :
<                    -GTK1 : TRANSFERT LA PHRASE DE L'ITEM2
<                            VERS PHR PAR CARACTERE , PUIS RECUPERE
<                            LE TYPE DES CARACTERES (CAS DES APPELS
<                            PAR 'SE') ,
<                    -GTK2 : RECUPERE LE TYPE LEXICOGRA-
<                            PHIQUE D'UN CARACTERE DE RANG
<                            DONNE (CAS DES APPELS PAR 'GE').
<
<
<        ARGUMENT :
<                    X=INDEX DU CARACTERE PRECEDENT DANS LA PHRASE.
<
<
<        RESULTAT :
<                    X<--(X)+1 AVANT LA RECUPERATION DU TYPE ,
<                    A=TYPE LEXICOGRAPHIQUE DU CARACTERE D'INDEX (X).
<
<
GTK1:    EQU         $               < PHRASE DANS L'ITEM2.
         PSR         X               < SAVE L'INDEX DE PHR.
         LA          X2              < A=INDEX COURANT DE L'ITEM2.
         LR          A,X             < ET X=INDEX COURANT DE L'ITEM2.
         CPI         LPHR            < VALIDATION DE LA LONGUEUR.
         LAI         "."             < PHRASE TROP LONGUE A PRIORI.
         JGE         E102            < EFFECTIVEMENT , ON FAIT COMME
                                     < SI UN '.' AVAIT ETE RECUPERE.
         LBY         &AI2            < A=CARACTERE COURANT DE L'ITEM2.
         IC          X2              < PROGRESSION INDEX ITEM2.
E102:    EQU         $               < CAS PHRASE OVERFLOW.
         PLR         X               < RESTAURE X=INDEX PHR.
         ADRI        1,X             < PROGRESSION DE L'INDEX DE PHR.
         STBY        &APHR           < ET TRANSFERT DE L'ITEM2
                                     < VERS PHR PAR CARACTERE.
         JMP         GTK3            < VERS LA RECUPERATION DU TYPE
                                     < LEXICO DU CARACTERE.
GTK2:    EQU         $               < PHRASE DANS 'PHR'.
         ADRI        1,X             < PASSAGE AU CARACTERE SUIVANT.
         LBY         &APHR           < A=CARACTERE D'INDEX (X).
GTK3:    EQU         $
         PSR         X               < SAVE L'INDEX DU CARACTERE.
         LR          A,X             < X=CARACTERE ASCI.
         LBY         &AVALK          < A=TYPE LEXICOGRAPHIQUE DU
                                     < CARACTERE COURANT DE LA PHRASE.
         PLR         X               < RESTAURE L'INDEX CARACTERE DE
                                     < LA PHRASE.
         RSR
         PAGE
<
<
<        A C C E S   A U X   C A R A C T E R E S   D ' U N E   P A G E
<        D E   D I C T I O N N A I R E  :
<
<
<        ARGUMENT :
<                    X=INDEX DU CARACTERE A RECUPERER.
<
<
<        RESULTAT :
<                    A>0 : OK : A=CARACTERE (EVENTUELLENT CONVERTI
<                                 EN BINAIRE POUR GT2).
<                    A<0 : ERREUR : SOIT DEBORDEMENT DE L'INDEX
<                          HORS L'ITEM2 , SOIT LE CARACTERE DECIMAL
<                          ATTENDU N'EST PAS DECIMAL.
<                    X<--(X)+1 EN GENERAL.
<
<
<        C A R A C T E R E   Q U E L C O N Q U E  :
<
<
GT1:     EQU         $
         LBY         &AI2            < ACCES AU CARACTERE SANS
                                     < CONVERSION.
         JMP         GT11            < VERS LA PROGRESSION DE X.
<
<
<        C A R A C T E R E   D E C I M A L  :
<
<
GT2:     EQU         $
         LBY         &AI2            < ACCES AU CARACTERE PRESUME
                                     < DECIMAL.
         ADRI        -'30,A          < CONVERSION DECIMALE-->BINAIRE.
         JAL         GT14            < ERREUR : A<0 (!!!).
         CPI         9               < VALIDATION DECIMALE.
         JG          GT13            < SORTIE EN ERREUR.
<
< PROGRESSION DE L'INDEX X :
<
GT11:    EQU         $
         ADRI        1,X
         XR          A,X             < A=INDEX POUR VALIDATION.
         CP          NBC             < INDEX DANS L'ITEM ???
         XR          A,X             < RESTAURE X.
         JL          GT14            < OK , LE NOUVEL X EST DANS
                                     < L'ITEM2.
<
< RETOURS EN ERREUR :
<
GT13:    EQU         $
         LAI         -1              < ON RENVOIE A=-1<0.
<
< RETOUR AVEC (A) :
<
GT14:    EQU         $
         RSR
         PAGE
<
<
<        R E C U P E R A T I O N   D E S   C A T E G O R I E S
<                    G R A M M A T I C A L E S  :
<
<
<        FONCTION :
<                      CETTE ROUTINE RECUPERE SI CELA
<                    EST POSSIBLE , LES CATEGORIES
<                    GRAMMATICALES D'UN MOT DONNE LORSQUE
<                    CELUI-CI A ETE RECONNU DANS LA
<                    PAGE COURANTE DU DICTIONNAIRE.
<                      LA RECUPERATION SE FAIT 16 BITS PAR 16 BITS ....
<
<
<        RESULTAT :
<                    A>0 : B=16 BITS DE CATEGORIES GRAMMATICALES ,
<                          X<--(X)+4 ,
<                    A<0 : ERREUR DE RECUPERATION (OVER-ITEM2,...).
<
<
GETCG:   EQU         $
         LYI         4               < DECOMPTEUR DU NBRE DE CARACTERES
                                     < DE CATEGORIES A RECUPERER.
<
< BOUCLE DE RECUPERATION :
<
GETCG1:  EQU         $
         BSR         AGT1            < RECUPERATION DU CARACTERE
                                     < COURANT DU DICTIONNAIRE.
         JAL         GETCG2          < A<0 : ERREUR DE RECUPERATION.
         ANDI        'F              < A>0 : OK , ON RECUPERE LES 4
                                     < DERNIERS BITS DU CARACTERE.
         SCRS        4               < CADRAGE A GAUCHE DANS A.
         SCLD        4               < ET CUMUL DANS B.
         ADRI        -1,Y            < DECOMPTE DES RECUPERATIONS.
         CPZR        Y               < EST-CE FINI ???
         JNE         GETCG1          < NON , ON CONTINUE.
<
< FIN DE RECUPERATION : A NOTER QUE SI
< LE RETOUR SE FAIT AVEC Y=0 , ON A : A>0 ....
<
GETCG2:  EQU         $
         RSR
         PAGE
<
<
<        R E C U P E R A T I O N   D E   L A   V A L E U R
<        S E M A N T I Q U E   D ' U N   M O T  :
<
<
<        RESULTAT :
<                    A>0 : B=2 OCTETS DE VALEUR SEMANTIQUE ,
<                    A<0 : ERREUR.
<
<
GETV:    EQU         $
         BSR         AGT1            < RECUPERATION DU CARACTERE COURANT
                                     < DU DICTIONNAIRE.
         JAL         GETV1           < ERREUR DE RECUPERATION.
         SWBR        A,B             < OK , ON SAUVEGARDE DANS
                                     < L'OCTET0 DE B.
         BSR         AGT1            < RECUPERATION DU CARACTERE
                                     < COURANT SUIVANT.
         JAL         GETV1           < ERREUR DE RECUPERATION.
         ORR         A,B             < OK , ON CONCATENE LE 2EME
                                     < OCTET AVEC LE 1ER , LE TOUT
                                     < SE TROUVANT DANS B , ET A>0.
<
< FIN DE RECUPERATION :
<
GETV1:   EQU         $
         RSR
         PAGE
<
<
<        C H A R G E M E N T   D ' U N E   P A G E
<        D E   D I C T I O N N A I R E  :
<
<
<        FONCTION :
<                      CETTE ROUTINE ESSAYE DE CHARGER
<                    LA PAGE DU DICTIONNAIRE DONT LE
<                    NOM EST EN EN-TETE DE L'ITEM2 ;
<                    SI CE CHARGEMENT REUSSI , ELLE
<                    VERIFIE QUE L'ITEM CHARGE A BIEN
<                    LE TYPE TEXTE , ON NE SAIT JAMAIS...
<
<
<        RESULTAT :
<                    X=0 : OK , CHARGEMENT CORRECT ET L'ITEM2
<                          EST DE TYPE 'TEXTE' ,
<                    X#0 : ERREUR : SOIT LA PAGE DEMANDEE
<                          N'EXISTE PAS , SOIT ELLE N'A PAS
<                          LE TYPE 'TEXTE'.
<                    LES INDICATEURS SONT POSITIONNES PAR 'CPZR X'.
<
<
<
LOADI:   EQU         $
         LAD         DEMIT
         SVC         0               < TENTATIVE DE CHARGEMENT.
         JNE         E30             < ERREUR : LA PAGE DEMANDEE
                                     < N'EXISTE PAS , ON A : X#0 ...
<
< TEST DE L'ITEM QUE L'ON VIENT DE CHARGER :
<
         LXI         IINDIC-LTN*2
         LBY         &AI2            < ACCES AU TYPE DE L'ITEM.
         CPI         "T"             < EST LE TYPE 'TEXTE' ????
         JNE         E30             < NON , ERREUR : A NOTER X#0 ....
<
< CAS D'UN RETOUR OK :
<
         LXI         0               < ON RENVOIE X=0.
<
< SORTIE DE LA ROUTINE :
<
E30:     EQU         $
         CPZR        X               < POUR UN TEST EN RETOUR.
         RSR
         PAGE
<
<
<        T E S T   E X I S T E N C E   M O T   D A N S   L E
<        D I C T I O N N A I R E   C O U R A N T  :
<
<
<        FONCTION :
<                      CETTE ROUTINE TESTE SI LE MOT
<                    COURANT EXISTE OU PAS DANS LA
<                    PAGE COURANTE DU DICTIONNAIRE.
<                      SI CELUI EXISTE , L'ENTREE 'DESCD'
<                    DE SON DESCRIPTEUR RECOIT LE
<                    NOM DE LA PAGE DU DICTIONNAIRE.
<                    SINON , LE MOT RESTE INCONNU.
<
<
<        ARGUMENT :
<                    C=@DESCRIPTEUR COURANT.
<                    ITEM2 : PAGE COURANTE DU DICTIONNAIRE ,
<                    NOMDIC : NOM DE LA PAGE COURANTE.
<
<
<        RESULTAT :
<                    A=0 : LE NOM EXISTE ,
<                    A=-1<0 : LE NOM N'EXISTE PAS.
<
<
TEST:    EQU         $
<
< INITIALISATION DU TEST :
<
         LXI         0               < X=INDEX DE L'ITEM2.
<
< BOUCLE DE PARCOURS DE LA PAGE COURANTE DU DICTIONNAIRE :
<
TEST1:   EQU         $
<
< CALCUL DE LA LONGUEUR DU MOT COURANT DE
< LA PAGE COURANTE DU DICTIONNAIRE :
<
         BSR         AGT2            < A=<L1>.
         JAL         TESTN           < ERREUR : LE MOT ARGUMENT
                                     < N'EXISTE PAS DANS CETTE PAGE ...
         MP          DIX             < SINON , B=10*<L1>.
         BSR         AGT2            < A=<L2>.
         JAL         TESTN           < ERREUR : LE MOT ARGUMENT
                                     < N'EXISTE PAS DANS CETTE PAGE.
         ADR         B,A             < A=10*<L1>+<L2>=LONGUEUR DU
                                     < MOT COURANT DU DICTIONNAIRE.
         CP          DESCL,C         < COMPARAISON AVEC LA LONGUEUR DU
                                     < MOT ARGUMENT.
         JL          TEST2           < ON N'EST SUREMENT PAS EN
                                     < PRESENCE DU MOT ARGUMENT.
<
< CAS OU LE MOT COURANT DU DICTIONNAIRE
< A UNE LONGUEUR SUPERIEURE OU EGALE A
< CELLE DU MOT ARGUMENT :
<
         LR          A,B             < B=LONGUEUR DU MOT COURANT.
         LY          DESCI,C         < Y=INDEX DU 1ER CARACTERE DU
                                     < MOT ARGUMENT.
<
< BOUCLE DE COMPARAISON CARACTERE PAR
< CARACTERE DU MOT COURANT ET DU MOT
< ARGUMENT :
<
TEST3:   EQU         $
<        ON A ICI :
<                    X=INDEX DU MOT COURANT DU DICTIONNAIRE ,
<                    Y=INDEX COURANT DU MOT ARGUMENT ,
<                    B=LONGUEUR RESIDUELLE DE TEST.
         ADRI        -1,B            < DECOMPTE IMMEDIAT DES TESTS
                                     < RESTANT A FAIRE.
         BSR         AGT1            < A=CARACTERE COURANT DU
                                     < DICTIONNAIRE.
         JAL         TESTN           < ERREUR : LE MOT ARGUMENT
                                     < N'EXISTE PAS.
         CPI         "#"             < EST-CE UN CARACTERE INDIFFERENT????
         JE          TEST7           < OUI , ON NE COMPARE DONC PAS ....
         CPI         "."             < EST-CE LA FIN DU MOT DANS
                                     < LE DICTIONNAIRE ????
         JE          TEST9           < OUI , CELA DOIT ETRE AUSSI
                                     < LA FIN DU MOT QUE L'ON RECHERCHE.
         CPI         ":"             < EST-CE LA FIN DE LA RACINE DU
                                     < MOT COURANT ???
         JE          TEST10          < OUI , ARRET DE LA COMPARAISON.
         XR          X,Y             < X=INDEX DU MOT ARGFUMENT.
         CPBY        &APHR           < COMPARAISON DU CARACTERE COURANT
                                     < DU DICTIONNAIRE AVEC LE CARACTERE
                                     < COURANT DU MOT ARGUMENT.
         XR          X,Y             < RESTAURE LES INDEX.
         JE          TEST7           < OK , 2 CARACTERES IDENTIQUES.
<
< TEST DES CARACTERES FACULTATIFS :
<
         TBT         8               < EST-CE UN CARACTERE FACULTATIF
                                     < (CARACTERE EN EXPOSANT) ????
         JNC         TEST5           < NON , LES 2 MOTS DIFFERENT DONC.
         ANDI        '7F             < DANS LE CAS D'UN CARACTERE
                                     < FACULTATIF , RECUPERONS SA
                                     < VALEUR (BITS9-15).
         XR          X,Y             < X=INDEX DU MOT ARGUMENT.
         CPBY        &APHR           < NOUVELLE COMPARAISON DU MOT
         XR          X,Y             < RESTAURE LES INDEX.
         JNE         TEST8           < DANS LE CAS OU LES 2 CARACTERES
                                     < DIFFERENT ,
                                     < ON SAUTE LE CARACTERE FACULTATIF
                                     < EN L'IGNORANT ...
<
< CAS OU 2 CARACTERES SONT IDENTIQUES :
<
TEST7:   EQU         $
         ADRI        1,Y             < PROGRESSION DE L'INDEX DU MOT
                                     < ARGUMENT ; LA PROGRESSION DE X EST
                                     < ASSUREE PAR 'AGT1'.
TEST8:   EQU         $
         CPZR        B               < EST-ON AU BOUT DE LA COMPARAISON?
         JNE         TEST3           < NON , ON COONTINUE.
<
< EST-ON ARRIVE AU BOUT DU MOT ARGUMENT ????
<
TEST9:   EQU         $
         LR          Y,A             < A=INDEX FINAL DE PARCOURS
                                     < DU MOT ARGUMENT.
         SB          DESCI,C         < A=LONGUEUR PARCOURUE DANS LE
                                     < MOT ARGUMENT.
         CP          DESCL,C         < EST-CE AUSSI LA LONGUEUR DU
                                     < MOT ARGUMENT ????
         JNE         TEST5           < NON , ON ADMET QUE LES 2 MOTS
                                     < DIFFERENT ....
<
< CAS OU ON TROUVE LA COINCIDENCE :
<
TEST10:  EQU         $
         ADR         B,X             < X=INDEX PRESUME DE ',' SI LE
                                     < DICTIONNAIRE EST BIEN FORMATE ;
                                     < CETTE OPERATION EST DU AU
                                     < CARACTERE '.' DE FIN DE MOT.
         BSR         AGT1            < ACCES PRESUME A ',' SUIVANT
                                     < LE MOT RECONNU DANS LA PAGE.
         JAL         TESTN           < ERREUR D'ACCES A LA PAGE.
         CPI         ","             < A>0 : OK , EST-CE BIEN ',' ????
         JNE         TESTN           < NON , RETOUR EN ERREUR ....
<
<        R E C U P E R A T I O N   D E S   G A T E G O R I E S
<                    G R A M M A T I CA L E S  :
<
         BSR         AGETCG          < RECUPERATION DES 16 PREMIERS
                                     < BITS DE CATEGORIES GRAMMATICALES.
         JAL         TESTN           < RECUPERATION EN ERREUR.
         STB         DESCC,C         < A>0 : OK RANGEMENT DES 16
                                     < PREMIERS BITS DE CATEGORIES.
         IF          NCATG4-4,X100,X100,
         BSR         AGETCG          < RECUPERATION DES 16 BITS
                                     < SUIVANTS DE CATEGORIES.
         JAL         TESTN           < RECUPERATION EN ERREUR ....
         STB         DESCC+1,C       < A>0 : OK RANGEMENT DES 16 BITS
                                     < SUIVANTS DES CATEGORIES.
X100:    VAL         0
<
<        R E C U P E R A T I O N   D E   L A   V A L E U R
<                    S E M A N T I Q U E  :
<
         BSR         AGETV           < RECUPERATION DES 2 OCTETS DE
                                     < VALEUR SEMANTIQUE.
         JAL         TESTN           < RECUPERATION EN ERREUR.
         STB         DESCV,C         < A>0 : 3K ON SAUVEGARDE LES 2
                                     < PREMIERS OCTETS DANS LE
                                     < DESCRIPTEUR DU MOT.
         IF          NSEM+1/2-2,X100,,
         BSR         AGETV           < RECUPERATION DES 2 OCTETS
                                     < SUIVANTS.
         JAL         TESTN           < ERREUR DE RECUPERATION.
         STB         DESCV+1,C       < A>0 : OK , ON SAUVEGARDE LES
                                     < 2 OCTETS SUIVANTS ....
X100:    VAL         0
<
< VALIDATION DE LA FIN DU MOT COURANT DU DICTIONNAIRE :
<
         BSR         AGT1            < ACCES PRESUME A ';'.
         JAL         TESTN           < A<0 : ACCES EN ERREUR ...
         CPI         ";"             < A>0 : EST-CE BIEN ';' ????
         JNE         TESTN           < NON RETOUR EN ERREUR ...
<
<        R E C U P E R A T I O N   D U   N O M   D E   L A   P A G E
<        C O U R A N T E   D U   D I C T I O N N A I R E  :
<
         LA          NOMDIC          < RECUPERATION DU NOM DE LA
                                     < PAGE COURANTE DU DICTIONNAIRE.
         STA         DESCD,C         < ET MEMORISATION AVEC QUE LE
                                     < MOT ARGUMENT EST CONNU.
<
< SORTIE POUR LA QUELLE LE NOM ARGUMENT EXISTE :
<
TESTP:   EQU         $
         LAI         0               < RETOUR AVEC A=0 (OK).
<
< SORTIE DE LA ROUTINE DE TEST :
<
TEST4:   EQU         $
         RSR
<
< SORTIE POUR LA QUELLE LE MOT ARGUMENT EST INCONNU :
<
TESTN:   EQU         TEST4           < L'AMBIGUITE GRAMMATICALE
                                     < MAX SERA MISE A LA FIN DE TOUS L
                                     < LES TESTS D'EXISTENCE.
<
< PASSAGE AU MOT SUIVANT DE LA
< PAGE COURANTE DU DICTIONNAIRE :
<
TEST2:   EQU         $
<        ON A ICI :
<                    A=LONGUEUR DU MOT COURANT DU DICTIONNAIRE.
         ADR         A,X             < PASSAGE SUR LA ',' SUIVANT
                                     < LE MOT COURANT.
         JMP         TEST6           < VERS LE CALCUL FINAL DE X.
TEST5:   EQU         $
<        ON A ICI :
<                    B=NBRE DE TESTS RESTANT A FAIRE-1.
         ADR         B,X             < PASSAGE DE X SUR LA ',' SUIVANT
                                     < LE MOT COURANT.
TEST6:   EQU         $
         ADRI        NCATG4+2+NSEM,X < X=INDEX DE <L1> DU MOT SUIVANT
                                     < DANS LA PAGE DU DICTIONNAIRE.
         JMP         TEST1           < VERS L'ACCES UA MOT SUIVANT
                                     < DANS LA PAGE COURANTE.
         PAGE
<
<
<        A C T I O N S   L E X I C O G R A P H I Q U E S  :
<
<
<        R E M P L A C E M E N T  :
<
<
<        FONCTION :
<                      CETTE ROUTINE EST APPELEE QUAND
<                    LE TYPE 'IGNOR' EST RECONNU.
<                    ELLE REMPLACE LE CARACTERE COURANT
<                    PAR LE CARACTERE '#'.
<
<
<        ARGUMENT :
<                    A=INDEX DU CARACTERE COURANT.
<                    X=TYPE LEXICOGRAPHIQUE.
<
<
REPLAC:  EQU         $
         LR          A,X             < X=INDEX DU CARACTERE COURANT
                                     < DE LA PHRASE.
         LAI         "#"             < A=CARACTERE DE REMPLACEMENT.
         STBY        &APHR           < QUE L'ON MET DANS LA PHRASE EN
                                     < CARACTERE COURANT.
<
<
<        A C T I O N   V I D E  :
<
<
RIEN:    EQU         $
         RSR                         < RETOUR SANS RIEN FAIRE.
         PAGE
<
<
<        A N A L Y S E U R   L E X I C O G R A P H I Q U E  :
<
<
<        FONCTION :
<                      L'ANALYSEUR LEXICOGRAPHIQUE A A
<                    SA CHARGE DE RECUPERER UNE PHRASE ,
<                    D'ISOLER LES MOTS , ET DE GENERER
<                    UNE LISTE LINEAIRE DESCRIPTIVE
<                    DES MOTS QUI LA COMPOSE.
<                      LE FORMAT DE LA LISTE DESCRIPTIVE
<                    EST FOURNIE EN TETE DU LISTING.
<                    LES LIMITEURS LEXICOGRAPHIQUES
<                    UTILISES SONT LE 'SPACE' EST LES
<                    CARACTERES DE PONCTUATION ; IL EST
<                    A NOTER QUE LES MOTS COMPOSES
<                    S'ECRIRONT OBLIGATOIREMENT AVEC
<                    UN TRAIT D'UNION '-' , AFIN DE LES
<                    DELIMITER SUREMENT.
<
<
<        PHRASE A ANALYSER :
<                    1- APPEL PAR 'GE' : PHRASE LUE SUR NSPIN ,
<                    2- APPEL PAR 'EI'/'GO' : PHRASE CONTENU DANS ITEM2,
<                                             ET DETRUITE PAR LES PAGES
<                                             DE DICTIONNAIRE !!!!
<                    3- APPEL PAR 'SE' : PHRASE LUE SUR NSPIN.
<
<
<        E N T R Y   ' P H '  :
<
<
         WORD        LOC+'80         < VALEUR INITIALE DE LA BASE L.
         WORD        BRANCH          < VALEUR INITIALE DE LA BASE W.
LEXIC:   EQU         $
         LRP         K
         ADRI        -1,K
         PLR         L,W             < INITIALISATION DES BASES L & W.
<
< DEMANDE D'ALLOCATION MEMOIRE :
<
         LAD         DEMMEM
         QUIT                        < DEMANDE D'ALLOCATION DE 6K MOTS
                                     < SANS UTILISER LA PILE K QUI
                                     < N'EST PAS DANS LES 4K COURANTS.
         LA          APILE
         LR          A,K             < INITIALISATION DU REGSITRE K.
<
< INITIALISATION DE L'ANALYSEUR :
<
         LAI         6
         STBY        DEMSGN          < DEMSGN EST MISE EN MODE 'LOAD
                                     < SOUS ':SYS'.
         LB          AGTK1           < PHRASE DANS L'ITEM2 A PRIORI.
         LA          MODCAL,W        < A=NATURE DE L'APPEL.
         CPI         2               < EST-CE UN APPEL PAR 'SE' ???
         JE          E100            < OUI , LA PHRASE EST BIEN DANS
                                     < L'ITEM2.
<
< CAS D'UNE PHRASE A LIRE :
<
         LB          AGTK2           < AUTRES CAS : IL FAUT LIRE
                                     < LA PHRASE DANS PHR.
         LXI         LPHR
         LAI         '04
         STBY        &APHR           < UN 'EOT' EST MIS A PRIORI EN
                                     < BOUT DE PHRASE AU CAS OU
                                     < LA PHRASE A ANALYSER AURAIT
                                     < LA LONGUEUR MAXIMALE.
<
< ENTREE DE LA PHRASE :
<
         LAD         MPHR
         BSR         APRINT          < ENVOI D'UN MESSAGE D'INVITATION.
         LAD         DEMIN
         SVC         0               < ENTREE DE LA PHRASE.
<
< TEST D'UNE PHRASE VIDE :
<
         LXI         0
         LBY         &APHR           < A=1ER CARACTERE DE LA PHRASE.
         CPI         '04             < EST-CE 'EOT' ???
         JE          PHVID           < OUI , LA PHRASE EST VIDE.
         CPI         '0D             < EST-CE 'R/C' ???
         JE          PHVID           < OUI , LA PHRASE EST VIDE.
<
< CAS D'UNE PHRASE LUE NON VIDE ,
< OU D'UNE PHRASE ENTREE PAR L'ITEM2 :
<
E100:    EQU         $
         STB         AGTK            < GENERATION DU RELAI VERS LA
                                     < ROUTINE DES TYPES LEXICOS.
<
<
<        G E N E R A T I O N   D E   L A   L I S T E
<                    D E S C R I P T I V E  :
<
<
         LXI         -1              < X=INDEX DU 1ER CARACTERE
                                     < PRECEDANT LA PHRASE.
         LYI         SEP1+1          < Y=SEPARATEUR INITIAL MAX.
         LBI         0               < B=NBRE INITIAL DE MOTS ISOLES.
         LA          ADPHR
         LR          A,C             < C=@DU 1ER DESCRIPTEUR LEXICAL.
<
< BOUCLE D'ANALYSE :
<        UTILISATION DES REGISTRES :
<                    X=INDEX CARACTERE COURANT DE LA PHRASE ,
<                    Y=SEPARATEUR MAXIMUM COURANT ,
<                    B=NBRE DE MOTS ISOLES.
<
E10:     EQU         $
         BSR         AGTK            < RENVOIE : A=TYPE DU CARACTERE
                                     < COURANT.
         CPI         CAR             < DISCRIMINATION ENTRE LES
                                     < DELIMITEURS ET LES CARACTERES
                                     < QUI N'EN SONT PAS.
         JL          E20             < CAS DES SEPARATEURS.
<
< CAS DES LETTRES/CHIFFRES/... : ON
< EST EN PRESENCE DU DEBUT D'UN NOUVEAU
< MOT :
<
         ADRI        1,B             < COMPTE LE NBRE DE MOTS ISOLES.
         STY         DESCS,C         < RANGEMENT DU SEPARATEUR PRECEDENT
                                     < LE NOUVEAU MOT.
         STX         DESCI,C         < RANGEMENT DE L'INDEX DU 1ER
                                     < CARACTERE DU NOUVEAU MOT.
         STZ         DESCD,C         < LE MOT EST A PRIORI INCONNU.
         STZ         DESCF,C         < LA CATEGORIE GRAMMATICALE DU
                                     < MOT DANS SON CONTEXTE EST
         STZ         DESCV,C         < RAZ VALEUR SEMANTIQUE.
                                     < INCONNUE A PRIORI.
         IF          NSEM+1/2-2,X100,,
         STZ         DESCV+1,C       < RAZ VALEUR SEMANTIQUE.
X100:    VAL         0
<
< ACTION LEXICOGRAPHIQUE :
<
E13:     EQU         $
         PSR         X               < SAVE L'INDEX COURANT CARACTERE.
         XR          A,X             < A=INDEX CARACTERE ; X=TYPE
                                     < LEXICOGRAPHIQUE.
         BSR         &AACTL          < APPEL D'UNE ROUTINE LEXICOGRA-
                                     < PHIQUE SPECIFIQUE.
         PLR         X               < RESTAURE L'2NDEX CARACTERE.
<
< ACCES AU CARACTERE SUIVANT :
<
E11:     EQU         $
         BSR         AGTK            < RENVOIE A=TYPE DU CARACTERE
                                     < COURANT (X).
         CPI         CAR             < EST-CE UN DELIMITEUR ???
         JGE         E13             < NON ALLONS VERS L'ACTION
                                     < LEXICOGRAPHIQUE.
<
< RECONNAISSANCE D'UNE FIN DE MOT :
< (X CONTIENT L'INDEX DU 1ER CARACTERE
< NON RECONNU)
<
E12:     EQU         $
<        ON A ICI :
<                    X=INDEX DU DELIMITEUR ,
<                    A=TYPE DU DELIMITEUR.
         LR          A,Y             < Y=NOUVEAU DELIMITEUR.
         LR          X,A             < A=INDEX DU DELIMITEUR DE FIN
                                     < DE MOT.
         SB          DESCI,C         < A=LONGUEUR DU MOT QUE L'ON
                                     < VIENT D'ISOLER ,
         STA         DESCL,C         < ET SAVE DANS LE DESCRIPTEUR.
         ADRI        LDESC,C         < PASSAGE SUR LE DESCRIPTEUR SUIVANT.
         LR          Y,A             < RESTAURE A=TYPE DU SEPARATEUR
                                     < SUR LEQUEL ONB EST ARRETE.
         JMP         E21             < VERS LE TEST DE FIN DE PHRASE.
<
< CAS DES SEPARATEURS :
<
E20:     EQU         $
         CPR         A,Y             < RECHERCHE DU SEPARATEUR LE PLUS
                                     < IMPORTANT DEPUIS LA FIN DU
                                     < MOT PRECEDENT (PAR EXEMPLE L'
                                     < APOSTROPHE EST PLUS IMPORTANTE
                                     < QUE LE 'SPACE').
         JLE         E21             < Y<=A , ON CONSERVE LE SEPARATEUR
                                     < COURANT (Y).
         LR          A,Y             < SINON , LE NOUVEAU SEPARATEUR
                                     < DEVIENT LE SEPARATEUR COURANT.
<
< TEST DE FIN DE PHRASE :
<
E21:     EQU         $
         CPI         FINF            < EST-CE UN SEPARATEUR DE FIN
                                     < PHRASE ????
         JNE         E10             < NON , ON CONTINUE ....
<
<        F I N   D E   P H R A S E  :
<
         LAI         -1
         STA         DESCI,C         < LE MOT 'DESCI' DU DESCRIPTEUR
                                     < COURANT EST MIS A -1 POUR
                                     < MEMORISER LA FIN DE PHRASE.
         STB         DESCL,C         < LE NBRE DE MOTS ISOLES EST
                                     < MIS DANS LE MOT 'DESCL' DU
                                     < DESCRIPTEUR COURANT.
<
<
<        C H A R G E M E N T   D U   D I C T I O N N A I R E
<                    D E S   M O T S   U S U EL S  :
<
<
E50:     EQU         $
<
< MISE EN PLACE DU NOM DE LA PAGE DES MOTS USUELS :
<
         LAD         NDIC            < A=EMETTEUR D'INITIALISATION.
         LB          AI2H            < B=RECEPTEUR=@EN-TETE(ITEM2).
         LXI         4               < X=4 MOTS A DEPLACER.
         MOVE                        < PAGE DES NOMS USUELS.
<
< CHARGEMENT DE LA PGAE DES MOTS USUELS :
<
         BSR         ALOADI
         JNE         E42             < LA PAGE DES MOTS USUELS
                                     < N'EXISTE PAS , ESSAYONS LES
                                     < AUTRES PAGES ...
<
<        P A R C O U R S   D E S   M O T S   U S U E L S  :
<
         LA          ADPHR
         LR          A,C             < C=@1ER DESCRIPTEUR DE LA PHRASE
                                     < A ANALYSER.
<
< BOUCLE DE RECHERCHE DES MOTS USUELS :
<
E41:     EQU         $
         CPZ         DESCI,C         < EST-ON EN BOUT DE PHRASE ???
         JL          E42             < OUI , PASSONS AUX MOTS NON USUELS
         BSR         ATEST           < SINON , TEST DU MOT COURANT
                                     < EN TANT QUE MOT USUEL.
         ADRI        LDESC,C         < PASSAGE AU DESCRIPTEUR SUIVANT.
         JMP         E41             < VERS LE TEST DU MOT SUIVANT.
<
<        C A S   D E S   M O T S   N O N   U S U E L S  :
<
E42:     EQU         $
         LA          ADPHR
         LR          A,C             < C=@1ER DESCRIPTEUR DE LA
                                     < PHRASE COURANTE.
<
< BOUCLE DE PARCOURS DES PAGES NON USUELLES :
<
E43:     EQU         $
         LA          DESCI,C         < EST-ON EN BOUT DE PHRASE ???
         JAL         E44             < OUI , C'EST FINI ....
         CPZ         DESCD,C         < LE MOT COURANT EST-IL DEJA
                                     < RECONNU COMME MOT USUEL ???
         JNE         E46             < OUI , RIEN A FAIRE.
<
< CAS DES MOTS NON ENCORE RECONNUS :
<
         LR          A,X             < X=INDEX DU 1ER CARACTEREE DU MOT
                                     < COURANT DE LA PHRASE.
         LBY         &APHR           < A=<K1> DU MOT COURANT.
         LR          A,B             < B=<K1>.
         LA          DESCL,C         < ACCES A LA LONGUEUR DU MOT
                                     < COURANT.
         CPI         1               < ESTUN MOT DE 1 LETTRE ????
         LAI         " "             < OUI A PRIORI ; ON FAIT ALORS
                                     < <K2>='SPACE'.
         JE          E45             < OUI , C'EST UN MOT D'1NE LETTRE.
         ADRI        1,X             < SINON , PASSAGE SUR <K2>.
         LBY         &APHR           < A=<K2> DU MOT COURANT.
E45:     EQU         $
<        ON A ICI :
<                    A=<K2> OU 'SPACE' ,
<                    B=<K1>.
         LXI         -2*LTN+2        < X=INDEX DU 3EME CARACTERE DU
                                     < DU NOM DE L'ITEM2.
         STBY        &AI2            < RANGEMENT DE <K2>/'SPACE'
                                     < DANS L'EN-TETE DE L'ITEM2.
         ADRI        -1,X            < PASSAGE SUR LE 2EME CARACTERE.
         XR          A,B             < A=<K1> ; B=<K2>.
         STBY        &AI2            < RANGEMENT DE <K1> DANS L'EN-TETE
                                     < DE L'ITEM2.
         SWBR        A,A             < OCTET0(A)=<K1>.
         ORR         B,A             < OCTET1(A)=<K2>.
         CP          NOMDIC          < LE NOM DE LA PAGE NECESSAIRE
                                     < POUR LE MOT COURANT SERAIT-ELLE
                                     < LA PAGE COURANTE ???
         JE          E48             < OUI , PAS DE CHARGEMENT A FAIRE ...
<
< CHARGEMENT D'UNE PAGE NON USUELLE :
<
         STA         NOMDIC          < SAVE LE NOM DE LA PAGE COURANTE
                                     < POUR LA ROUITNE 'TEST'.
         BSR         ALOADI          < TENTATIVE DE CHARGEMENT DE
                                     < LA PAGE.
         JNE         E47             < CETTE PAGE N'EXISTE PAS , LE
                                     < MOT COURANT NON PLUS (ET CECI
                                     < D'UNE MANIERE DEFINITIVE!!!).
<
< PARCOURS DE LA PAGE COURANTE :
<
E48:     EQU         $
         BSR         ATEST           < RECHERCHE DU MOT COURANT
                                     < DANS LA PAGE COURANTE.
         JAE         E46             < OK , ON A TROUVE LE MOT COURANT.
<
<        C A S   D E S   M O T S   I N C O N N U S  :
<
E47:     EQU         $
         LAD         MINC
         BSR         APRINT          < ENVOI D'UN INDICATIF.
         LA          DESCI,C         < A=INDEX DU 1ER CARACTERE DU
                                     < MOT INCONNU.
         SBT         2               < TRANSLATION DE 8K OCTETS.
         STA         DEMOUT+1        < GENERATION DE L'ADRESSE OCTET
                                     < DU MOT INCONNU.
         LA          DESCL,C         < ACCES A LA LONGUEUR DU MOT
                                     < INCONNU ,
         STA         DEMOUT+2        < QUE L'ON MET DANS DEMOUT.
<
< MISE EN PLACE DE L'AMBIGUITE
< GRAMMATICALE MAXIMALE :
<
         CPI         5               < ET TEST DE POSITION PAR RAPPORT
                                     < A LA LONGUEUR DE 5 LETTRES.
                                     < (MERDE ALORS !!!).
         LAI         -1
         IF          NCATG4-4,X100,X100,
         LBI         -1
X100:    VAL         0
         JLE         TEST20          < CAS DES MOTS DE 5 LETTRES
                                     < OU MOINS ...
<
< CAS DES MOTS INCONNUS DE PLUS DE 5 LETTRES :
< ON ADMET QU'ILS NE PEUVENT ETRE NI ARTICLE ,
< NI PRONOM RELATIF , NI CONJONCTION , NI
< PRONOM PERSONNEL.
<
         RBT         ARTICL
         RBT         PROREL
         RBT         CONJ
         RBT         PROPER
TEST20:  EQU         $
         STA         DESCC,C         < UN MOT INCONNU RECOIT DES
                                     < CATEGORIES D'AMBIGUITE MAX.
         IF          NCATG4-4,X100,X100,
         STB         DESCC+1,C       < AMBIGUITE GRAMMATICALE MAX.
X100:    VAL         0
<
< AFFICHAGE DU MOT INCONNU :
<
         LAD         DEMOUT
         SVC         0               < AFFICHAGE DU MOT INCONNU.
<
< PASSAGE AU MOT SUIVANT DE LA PHRASE :
<
E46:     EQU         $
         ADRI        LDESC,C         < PROGRESSION DU POINTEUR DES
                                     < DESCRIPTEURS.
         JMP         E43             < VERS LE MOT NON USUEL SUIVANT.
<
<        F I N   D E   P H R A S E  :
<
E44:     EQU         $
         LA          NSYNT           < A=NOM DE L'OVERLAY D'ANALYSE
                                     < SYNTAXIQUE.
<
<        C H A R G E M E N T   D E   L ' O V E R L A Y
<                    S U I V A N T  :
<
E52:     EQU         $
         STA         0,W             < MISE EN PLACE DU NOM DE LA
                                     < BRANCHE SUIVANTE.
         LAD         DEMSGN          < A=@DEMSGN.
         BSR         AOVL            < TENTATIVE DE CHARGEMENT.
         LAD         DEMCCI          < CAS DES ERREURS DE CHARGEMENT.
         SVC         0               < ON PASSE LA MAIN AU CCI.
E200:    EQU         $               < ENTRY 'PHRASE VIDE'.
         LA          NGE             < A=NOM DE L'OVERLAY 'GE'.
         JMP         E52             < DANS LE CAS D'UN !GO , ON
                                     < TENTE DE CHARGER 'GE'.
<
<
<        P H R A S E   L U E   V I D E  :
<
<
<        FONCTION :
<                      CE MODULE APPELE LORSQU'UNE
<                    PHRASE A ETE LUE VIDE , PROVOQUE
<                    UN RETOUR DE L'ESPACE MEMOIRE
<                    A 4K , ET UN RETOUR A 'GE'.
<
<
PHVID:   EQU         $
         LAI         0
         SBT         2               < A='2000 OCTETS=4K MOTS.
         STA         DEMMEM+2        < MISE A JOUR DE DEMMEM.
         LAD         DEMMEM
         QUIT                        < L'ESPACE MEMOIRE PASSE A 4K MOTS.
         LA          APILES
         LR          A,K             < RETOUR SUR LA PILE DE SODOME.
         STZ         MODCAL,W        < MODCAL<--0 ,
         STZ         CDRET,W         < CDRET<--0.
         JMP         E200            < VERS LE RETOUR A 'GE'.
         PAGE
<
<
<        V A L I D A T I O N   D E   L ' I M P L A N T A T I O N  :
<
<
PILE:    VAL         'FF0-6          < PILE DE SODOME.
X12:     EQU         ZERO+PILE-LTNI-LTNI
X10:     VAL         X12-$
ZEROV:   EQU         ZERO+X10        < ERREUR D'ASSEMBLAGE SI MAUVAISE
                                     < IMPLANTATION.
         DZS         X10+1           < PAR PURE PROPRETE ....
         EOT         #SIP GEN PROCESSEUR#



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