NMPROC:  VAL         "ED"            < NOM DU PROCESSEUR.
         IDP         "ED - RELEASE 01/06/1979"
         IDP         "JOHN F. COLONNA"
IADR:    VAL         1               < IADR>0 : ASSEMBLER LES ROUTINES
                                     < DADR (CTRL-D) ET RELAI (CTRL-
                                     < SHIFT-N).
IPACK:   VAL         0               < NE PAS IMPLEMENTER LA COMMANDE
                                     < DE PACK TEXTE.
                                     < (CTRL-P)
         EOT         #SIP DEF PROCESSEUR#
         WORD        EDIT            < ADRESSE DE DEPART DU PROCESSEUR.
         LOCAL
         WORD        0               < POUR FAIRE $=$+1.
         PROG
PEDIT:   EQU         $               < P DE LANCEMENT DE EDIT2 LORS
                                     < D'UN APPEL PAR !GE , ET LORS
                                     < D'UN APPEL DIRECT PAR CCI.
                                     < (P='12).
         LRP         L
         BR          -2,L            < ENTREE DANS LE PROCESSEUR.
         PAGE
         EOT         #SIP DEFINITION ITEM#
<
<
<        C A R A C T E R E   D E   F I N
<        D ' I T E M   R E D U I T  :
<
<
CENDIT:  VAL         '5C             < 'ANTI-SLASH' INDIQUANT LE
                                     < DERNIER CARACTERE D'UN ITEM
                                     < REDUIT PAR 'CTRL-S'.
         PAGE
<
<
<        L O C A L  :
<
<
         LOCAL
LOC:     EQU         $
<
<        B U F F E R S  :
<
BUFIN:   WORD        0               < BUFFER D'ENTREE D'UN CARACTERE.
BUFOUT:  WORD        0               < BUFFER DE SORTIE 2 CARACTERES.
COORD:   DZS         2               < COORDONNEES GRAPHIQUES CURSEUR.
<
<        D E M A N D E S   A   C M S 4  :
<
DEMO:    WORD        '0202           < ECRITURE SUR VISU.
         WORD        0               < @OCTET DU BUFFER.
         WORD        NBCAR*NBLIG     < SORTIE DE L'ITEM EN BLOC.
DEMSGN:  WORD        '8402           < DEMSGN EST INITIALISEE EN MODE
                                     < GENERATION DE LUI-MEME ...
         WORD        BRANCH-ZERO*2   < ADRESSE DE LA BRANCHE D'OVERLAY
                                     < A GENERER.
         WORD        ZERO-BRANCH+PILE-LTNI-LTNI*2
                                     < (TAILLE EN OCTETS DE LA BRANCHE).
         WORD        -1              < LA VALEUR SUIT IMMEDIATEMENT
                                     < LE NOM.
DEMIN:   WORD        '0101           < LECTURE VISU AVEC ECHO.
         WORD        BUFIN-ZERO*2
         WORD        1               < LECTURE CARACTERE PAR CARACTERE.
DEMOUT:  WORD        '0202           < ECRITURE SUR VISU.
         WORD        BUFOUT-ZERO*2
         WORD        0               < ECRITURE D'1 OU 2 CARACTERES.
DEMLIG:  WORD        '0202           < ECRITURE D'UNE LIGNE VISU.
         WORD        0
         WORD        0
WG:      WORD        '020A           < ECRITURE GRAPHIQUE.
         WORD        COORD-ZERO*2
         WORD        4               < 4 OCTETS POUR 2 COORDONNEES.
OG:      WORD        '0203           < OPEN GRAPHQIE DE LA VISU.
CG:      WORD        '0204           < DEMANDE DE RETOUR EN ALPHA.
DERASE:  WORD        '0205           < DEMANDE EFFACEMENT ECRAN.
DEMCCI:  WORD        '0001           < RETOUR AU CCI.
<
<        A D R E S S E S   D E   B R A N C H E M E N T  :
<
ALOOP:   WORD        LOOP            < BOUCLE DE EDIT2.
ALOOPB:  WORD        LOOPB           < VERS LA BOUCLE DE L'EDITEUR.
                                     < (BOUCLE DE RETOUR).
ASVC:    WORD        RSVC            < ROUTINE D'EXECUTION DES SVC.
ASVCX:   WORD        RSVCX           < SVC ET ABORT SI CTRL-X-OFF.
AOVL:    WORD        OVL             < ROUTINE D'APPEL DES OVERLAY.
ASTKO:   WORD        STKO            < MISE D'1 CARACTERE DANS BUFOUT.
ARAZI:   WORD        RAZI            < MISE A 'SPACE' DE L'ITEM COURANT.
ASP1:    WORD        SP1             < DEPLACEMENT D'UNE CHAINE DE
                                     < CARACTERES DANS LE SENS CROISSANT
ASP2:    WORD        SP2             < RANGEMENT 1 CARACTERE , ET
                                     < INCREMENTATION DE L'INDEX X.
ADCOMP:  WORD        DCOMP           < DECOMPACTAGE D'UN ITEM.
<
<        A D R E S S E S   D E   T A B L E S  :
<
APILE:   WORD        PILE-1          < POUR INITIALISER K.
                                     < IMPLANTEE EN HAUT DE LA MEMOIRE.
ACOM:    WORD        COM,X           < TABLE D'EXECUTION DES FONCTIONS.
AI2:     WORD        ZERO+PILE-LTNI-LTNI+LTN,X < RELAI VERS ITEM2.
AI1:     WORD        ZERO+PILE-LTNI+LTN,X      < RELAI VERS ITEM1.
AIC:     WORD        ZERO+PILE-LTNI+LTN,X      < RELAI ITEM COURANT.
                                     < INITIALISE AVEC L'ITEM1.
AIM:     WORD        0               < RELAI VERS L'ITEM D'APPARTENANCE
                                     < D'UNE CHAINE DE CARACTERES.
ALIGNE:  WORD        0               < RELAI VERS LA LIGNE COURANTE
                                     < DE L'ITEM COURANT A L'EDITION.
<
<        C O N S T A N T E S  :
<
MLINE:   WORD        '7F7F           < RAZ DES BITS 0 & 8 D'UN MOT.
LMAX:    WORD        0               < LONGUEUR MAX D'UNE CHAINE A
                                     < COMPACTER :
                                     < LMAX=250 : PACK (TEXTE) ,
                                     < LMAX=1024 : DESSIN.
LMIN:    WORD        0               < LONGUEUR MINIMALE D'UNE CHAINE
                                     < A COMPACTER :
                                     < LMIN=4 : PACK (TEXTE) ,
                                     < LMIN=6 : DESSIN.
MODPAC:  WORD        0               < INDICATEUR DE LA NATURE DU
                                     < COMPACTAGE :
                                     < MODPAC=0 : PACK (TEXTE) ,
                                     < MODPAC=1 : DESSIN.
KAR1:    WORD        0               < 1ER CARACTERE DE REPETITION 'GR'.
KAR2:    WORD        0               < 2EME CARACTERE DE REPETITION 'GR'
KAR3:    WORD        0               < 3EME CARACTERE DE REPETITION 'GR'
C35:     WORD        "Z"-"A"+10      < VALEUR BINAIRE DE 'Z'.
C1024:   WORD        1024            < POUR LE LMAX DES DESSINS.
CK:      WORD        "Z"-"A"+10*6-1  < POUR LE LMAX DES DESSINS LORS
                                     < DES COMPACTAGES 'K'.
SAVEX:   WORD        0               < X INITIAL D'UNE COMPACTION DESSIN.
NQ:      WORD        0               < QUOTIENT D'UNE DIVISION,
NR:      WORD        0               < RESTE DE CETTE MEME DIVISION.
RETSVC:  WORD        0               < CONTIENT LE X DE RETOUR DE
                                     < CMS4 APRES CHAQUE SVC.
XOFF:    WORD        0               < XOFF=0 SI PAS DE CTRL-X-OFF ,
                                     < XOFF='13/'93 SI UN CTRL-X-OFF
                                     <              A ETE RECU.
REPEAT:  WORD        0               < REPEAT=0 : PAS DE REPEAT ,
                                     < REPEAT<0 : REPEAT INFINI ,
                                     < REPEAT=N : REPEAT N FOIS.
SAVEK:   BYTE        0;'09           < OCTET1(SAVEK)=CARACTERE REPETABLE
                                     < A L'INSTANT PRESENT.
                                     < (INITIALISAE AVEC CTRL-I)
         IF          IADR,X100,X100,
ADRES:   WORD        ZERO+PILE-LTNI+LTN  < CONTIENT L'ADRESSE COURANTE
                                         < DESIGNEE PAR CTRL-D , ET EST
                                         < INITIALISEE SUR 'ITEM1'.
X100:    VAL         0
UP:      WORD        0               < BIT8(UP)=0 : CARACTERES SUIVANTS
                                     <              SUR LA LIGNE ,
                                     < BIT8(UP)=1 : CARACTERES SUIVANTS
                                     <              EN EXPOSANT.
NCL:     WORD        NBCAR           < NBRE DE CARACTERES PAR LIGNE.
NCP:     WORD        NBCAR*NBLIG     < NBRE DE CARACTERES PAR PAGE.
NMP:     WORD        NBCAR*NBLIG/2   < NBRE DE MOTS PAR PAGE.
XC:      WORD        0               < COORDONNEE X DU CURSEUR ALPHA-
                                     < NUMERIQUE DANS LA PAGE :
                                     < 0<=XC<=NBCAR-1.
YC:      WORD        0               < COORDONNEE Y DU CURSEUR ALPHA-
                                     < NUMERIQUE DANS LA PAGE :
                                     < 0<=YC<=NBLIG-1.
ZC:      WORD        0               < COORDONNE LINEAIRE DU CURSEUR
                                     < ALPHA-NUMERIQUE DANS LA PAGE :
                                     < 0<=ZC<=NBCAR*NBLIG-1.
ZO:      WORD        1               < COORDONNEE Z D'ORIGINE D'UNE
                                     < CHAINE DE CARACTERES.
                                     < (INITIALISE EN ERREUR).
ZQ:      WORD        0               < COORDONNEE Z D'EXTREMITE
                                     < D'UNE CHAINE DE CARACTERES.
XEDIT:   WORD        3               < XEDIT CONTIENT UN CTRL-C ,
                                     < UTILISE LORS DES APPELS PAR
                                     < 'EI' POUR FAIRE UNE EDITION
                                     < AUTOMATIQUE AVEC RAZ A PRIORI.
NCALL:   WORD        $+1,X;"GE";"EI" < NOMS DES BRANCHES D'OVERLAY
                                     < DE RETOUR.
<
< GESTION DU RAZ DE L'ITEM :
<
KCTRL:   WORD        0               < NUMERO DE LA COMMANDE COURANTE.
KCTRLR:  WORD        0               < NUMERO+1 D'UN CTRL-R (EN VUE
                                     < D'EN TESTER UN 2EME CONSECUTUF).
         PAGE
<
<
<        T A B L E   D ' E X E C U T I O N   D E S   F O N C T I O N S  :
<
<
COM:     EQU         $
AERR:    WORD        ERREUR          < CTRL-SHIFT-P (NULL)
ITEMC:   WORD        ITEM1           < CTRL-A : SELECTION ITEM1.
         WORD        ITEM2           < CTRL-B : SELECTION ITEM2.
         WORD        ERASE           < CTRL-C : EFFACEMENT ECRAN.
         IF          IADR,,,X100
         WORD        ERREUR          < CTRL-D (EOT).
X100:    VAL         0
         IF          IADR,X100,X100,
         WORD        DADR            < CTRL-D : DESIGNATION ADRES.
X100:    VAL         0
         WORD        WRITE           < CTRL-E : EDITION ITEM COURANT.
GOGE:    WORD        RETURN          < CTRL-F : RETOUR A !GE.
         WORD        CORIGE          < CTRL-G : DESCENTE DE TOUS
                                     < LES CARACTERES EN EXPOSANT.
         WORD        CUHC            < CTRL-H : BACKSPACE CURSEUR.
         WORD        CUIC            < CTRL-I : TABULATION 1 ESPACE.
         WORD        CULF            < CTRL-J : LINE-FEED.
         WORD        CUKC            < CTRL-K : BACK-LINE CURSEUR (??).
         WORD        LINE            < CTRL-L : CARACTERES SUR LA LIGNE.
         WORD        CUCR            < CTRL-M : RETOUR-CHARIOT.
         WORD        ALTERN          < CTRL-N : ERREUR (RETOUR NORMAL).
         WORD        OCHAIN          < CTRL-O : ORIGINE CHAINE CARACTERES
         IF          IPACK,X100,,X100
         WORD        ERREUR          < CTRL-P
X100:    VAL         0
         IF          IPACK,,X100,
         WORD        PACK            < CTRL-P : COMPACTAGE ITEM COURANT.
X100:    VAL         0
         WORD        QCHAIN          < CTRL-Q : FIN CHAINE CARACTERES.
         WORD        RZITEM          < CTRL-R : RAZ ITEM COURANT.
         WORD        TYPET           < CTRL-S : RETOUR AU TYPE 'TEXTE'.
         WORD        TEST12          < CTRL-T : TEST ITEM COURANT.
         WORD        EXP             < CTRL-U : CARACTERES EN EXPOSANT.
         WORD        ERREUR          < CTRL-V (TABULATION CMS4).
         WORD        CCI             < CTRL-W : RETOUR AU CCI.
         WORD        KREPET          < CTRL-X : REPEAT CARACTERES.
         WORD        ENDLIN          < CTRL-Y : COMPLETE LA LIGNE.
HOME:    WORD        CUHOME          < CTRL-Z : CURSEUR HOME.
         WORD        DESSIN          < CTRL-SHIFT-K : COMPACTAGE DESSIN.
         WORD        SPACE           < CTRL-SHIFT-L : COMPACTAGE SPACES.
         WORD        ERREUR          < CTRL-SHIFT-M : REDUCTION ITEM.
         IF          IADR,,,X100
         WORD        ERREUR          < CTRL-SHIFT-N (DISPONIBLE).
X100:    VAL         0
         IF          IADR,X100,X100,
         WORD        RELAI           < CTRL-SHIFT-N : CHAINAGE ADRES.
X100:    VAL         0
         WORD        MCHAIN          < CTRL-SHIFT-O : MOVE CHAINE.
         PROG
         PAGE
<
<
<        S T O R E   D A N S   B U F O U T  :
<
<
<        FONCTION :
<                      CETTE ROUTINE RANGE EN OCTET0 ,
<                    OU EN OCTET1 DE BUFOUT LE CARACTERE
<                    QUI LUI EST DONNE EN ARGUMENT.
<                    ELLE RANGE DANS OCTET1 SI L'OCTET0 EST
<                    DEJA OCCUPE , ET DANS L'OCTET0
<                    SI NON.
<
<
<        ARGUMENT :
<                    A=CARACTERE.
<                    DEMOUT+2=NBRE DE CARACTERES DEJA DANS
<                             BUFOUT (0 OU 1).
<
<
<        RESULTAT :
<                    A=(BUFOUT).
<
<
STKO:    EQU         $
         CPZ         DEMOUT+2        < COMBIEN DE CARACTERES SONT-ILS
                                     < DEJA DANS BUFOUT ???
         JNE         E18             < DEJA 1 CARACTERE DANS BUFOUT.
         SWBR        A,A             < IL N'Y A ENCORE AUCUN CARACTERE
                                     < DANS BUFOUT , ON VA DONC PASSER
                                     < SUR L'OCTET0.
E18:     EQU         $
         OR          BUFOUT          < CONCATENATION AVEC LE BUFOUT
                                     < PRE-EXISTANT.
         STA         BUFOUT          < MAJ DE BUFOUT.
         IC          DEMOUT+2        < ET 1 CARACTERE DE PLUS DANS
                                     < BUFOUT.
         RSR
         PAGE
<
<
<        E X E C U T I O N   D E S   S V C  :
<
<
<        ARGUMENT :
<                    A=@DEMANDE A CMS4.
<
<
<        RESULTAT :
<                    RETSVC=CONDITIONS DE RETOUR DE CMS4 ,
<                    INDICATEURS POSITIONNES EN FONCTION DU CTRL-X-OFF.
<
<
RSVC:    EQU         $
         PSR         X               < SAVE X.
         SVC         0               < ENVOI DE LA DEMANDE A CMS4.
         XR          A,X             < SAVE (A) DANS X , POUR
                                     < TEST DES CONDITIONS DE RETOUR.
         CPI         '13             < Y-A-T'IL EU UN CTRL-X-OFF ???
         JL          E800            < CE N'EST PAS UN CTRL-X-OFF.
         STA         XOFF            < SI OUI , ON ON POSITIONNE XOFF.
E800:    EQU         $
         XR          A,X             < RESTAURE A ET X.
         STX         RETSVC          < SAVE LES CONDITIONS DE RETOUR.
         PLR         X               < RESTAURE X.
         RSR
         PAGE
<
<
<        R E T O U R   A U   M O D E   N O R M A L  :
<
<
<        FONCTION :
<                      SI PAR MEGARDE , L'UTILISATEUR
<                    FRAPPE LA COMMANDE INTERDITE
<                    CTRL-N , LA VISU RISQUE DE PASSER
<                    EN MODE 'ALTERNATE' , CE QUI
<                    A DES EFFETS PLUTOT DESAGREABLE
<                    QUANT A LA COMPREHENSION DES
<                    CARACTERES SUIVANTS . CE MODULE
<                    EST DONC LA POUR ANNULER LES
<                    EFFETS DU CTRL-N EN ENVOYANT
<                    UN CTRL-O.
<
<
ALTERN:  EQU         $
         LAI         '0F
         BSR         ASTKO           < MISE D'UN CTRL-O DANS LE BUFOUT.
         BR          AERR            < RETOUR EN ERREUR.
         PAGE
<
<
<        S E L E C T I O N   I T E M   C O U R A N T  :
<
<
<        FONCTION :
<                      CE MODULE SELECTIONNE L'ITEM
<                    COURANT : ITEM1 POUR CTRL-A ,
<                    ET L'ITEM2 POUR CTRL-B.
<                      DE PLUS ELLE A A SA CHARGE
<                    L'INITIALISATION DU TYPE , DE LA
<                    LONGUEUR , ET DE L'ESPACE DE
<                    L'ITEM (A 'SPACE') SI CELA EST
<                    LICITE.
<                      SI L'ITEM A COMME DERNIER CARACTERE
<                    UN 'ANTI-SLASH' , ON MET TOUS LES
<                    CARACTERES QUI SUIVENT (AINSI QUE
<                    L'ANTI-SLASH) A ''SPACE' : ON FAIT L'ANTI-
<                    REDUCTION DE L'ITEM.
<
<
ITEM1:   EQU         $               < ITEM COURANT=ITEM1.
         LB          AI1             < B=RELAI VERS ITEM1.
         JMP         E20
ITEM2:   EQU         $               < ITEM COURANT=ITEM2.
         LB          AI2             < B=RELAI VERS ITEM2.
E20:     EQU         $
<        ON A ICI :
<                    B=RELAI VERS L'ITEM DESIRE.
         STB         ALIGNE          < RELAI TEMPORAIRE VERS L'ITEM
                                     < TANT DESIRE.
<
< TEST DU TYPE DE L'ITEM DESIRE :
<
<        TYPES RECONNUS :
<                    T : TEXTE ,
<                    D : DESSIN ,
<                    I : FILM DIGITAL.
<
         LXI         IINDIC-LTN*2    < (INDEX D'OCTETS !!!!)
         LBY         &ALIGNE         < A=TYPE DE L'ITEM DESIRE.
         JAE         E70             < OK , L'ITEM DESIRE N'A PAS
                                     < ENCORE ETE INITIALISE , LET'S GO.
         CPI         "I"             < EST-CE UN FILM DIGITAL (SC) ???
         JE          E70             < OUI , OK ON PEUT L'EDITER ...
         ORI         '10             < ON FORCE LE BIT10 A 1 , AFIN
                                     < DE TESTER SIMULTANEMENT 'D' ,
                                     < ET 'T' , DONT LES CODES ('44 ,
                                     < ET '54) NE DIFFERENT QUE PAR
                                     < CE BIT.
         CPI         "T"             < ETANT INITIALISE , A-T'IL LE
                                     < LE TYPE 'TEXTE'/'DESSIN' ???
         JE          E70             < OK, TYPE 'TEXTE'...
         BR          GOGE            < TOUS LES AUTRES TYPES, QUE CE SOIT POUR
                                     < 'ITEM1' OU 'ITEM2' PROVOQUENT UN ABORT
                                     < IMMEDIAT PAR RETOUR A 'GE'...
<
< MISE EN PLACE DU NOUVEL ITEM COURANT :
<
E70:     EQU         $
         STB         AIC             < MISE EN PLACE DE L'ITEM COURANT.
         JANE        E700            < L'ITEM AYANT DEJA LE "T" ,
                                     < IL N'Y A PAS A L'INITIALISER.
<
< INITIALISATION D'UN ITEM :
<
         LAI         "T"             < 'TYPE-TEXTE'.
         STBY        &AIC            < MISE EN PLACE DU TYPE DE L'ITEM.
         LXI         LRITEM-LTN
         LA          NCP             < NBRE DE CARACTERES OCCUPES PAR
                                     < UN TEXTE.
         STA         &AIC            < MISE EN PLACE DE LA LONGUEUR
                                     < MAX DU CORPS D'UN ITEM DE
                                     < 'TYPE-TEXTE'.
         BSR         ARAZI           < MISE A 'SPACE' DE L'ITEM
                                     < COURANT.
E71:     EQU         $
         BR          HOME            < VERS L'ENVOI HOME DU CIURSEUR.
<
<
<        T E S T   D ' U N   I T E M   R E D U I T  :
<
<
<        NOTA :
<                      A CHAQUE ENTREE DANS 'ED' , UN
<                    ITEM REDUIT PAR CTRL-S , PERD CET
<                    ETAT , ET IL FAUT LUI REDONNER
<                    (EVENTUELLEMENT) A LA SORTIE PAR
<                    PAR UN NOUVEAU 'CTRL-S' , SI ON
<                    VEUT LE RE-REDUIRE ...
<
<
E700:    EQU         $
         LXI         LRITEM-LTN
         LX          &AIC            < X=LONGUEUR REELLE DE L'ITEM.
         ADRI        -1,X            < X=INDEX DU DERNIER CARACTERE.
         LBY         &AIC            < A=DERNIER CARACTERE DE L'ITEM.
         CPI         CENDIT          < EST-CE LE CARACTERE DE FIN
                                     < D'ITEM REDUIT ???
         JNE         E71             < NON , RIEN A FAIRE ....
<
< CAS D'UN ITEM REDUIT : INITIALISATION
< A 'SPACE' DE LA FIN DE L'ITEM :
<
         LAI         " "             < A='SPACE'.
         LY          NCP             < Y=LONGUEUR-OCTETS MAX D'UN ITEM.
E701:    EQU         $
         STBY        &AIC            < MISE A 'SPACE' DE LA FIN DE
                                     < L'ITEM , Y COMPRIS L'ANTI-SLASH.
         ADRI        1,X             < PROGRESSION INDEX ITEM.
         CPR         X,Y             < TEST DE FIN DE MISE A 'SPACE' ???
         JNE         E701            < NON , ON CONTINUE ...
         LXI         LRITEM-LTN
         STY         &AIC            < MISE EN PLACE DE LA LONGUEUR
                                     < REELLE DE L'ITEM.
         JMP         E71             < C'EST FINI.
<
<
<        T E S T   I T E M   C O U R A N T  :
<
<
<        FONCTION :
<                      CE MODULE APPELE SUITE A CTRL-T
<                    NE DIT RIEN SI L'ITEM COURANT EST
<                    L'ITEM1 , ET RENVOIE UNE CLOCHE
<                    SI CELUI-CI EST L'ITEM2.
<
<
TEST12:  EQU         $
         LA          AIC             < ACCES A L'ITEM COURANT.
         CP          AI1             < EST-CE L'ITEM1 ????
         JE          E23             < OUI , RETOUR SANS RIEN FAIRE ...
E72:     EQU         $               < ENTRY 'TYPE-TEXTE' ERRONE.
         BR          AERR            < ET BIEN NON , C'EST L'ITEM2 ,
                                     < ON VA DONC ENVOYER UNE CLOCHE
                                     < (COMME S'IL Y AVAIT ERREUR).
E23:     EQU         $
         BR          ALOOPB          < VERS LE RETOUR DE LA BOUCLE DE
                                     < L'EDITEUR.
         PAGE
         IF          IADR,X100,X100,
<
<
<        C O N S T I T U T I O N   D E S   C H A I N A G E S
<        D ' A D R E S S E S   P O U R   3 D  :
<
<
<        FONCTION :
<                      CES ROUTINES PERMETTENT DE GENERER
<                    DES CHAINAGES D'ADRESSES ABSOLUES
<                    DANS L'IMAGE ASCI D'UN DUMP D'UN
<                    PROGRAMME GRAPHIQUE DESTINE AU
<                    PROCESSEUR '3D'.
<                      UN MOT DU DUMP OCCUPE 8 CARACTERES
<                    ASCI SUR L'ECRAN : 4 CARACTERES
<                    REPRESENTANT LE CONTENU HEXA DU MOT , ET
<                    4 SPACES D'ESPACEMENT.
<
<
<        D E S I G N A T I O N   D ' A D R E S S E  :
<
<
<        FONCTION :
<                      APPELEE PAR CTRL-D (EOT) CETTE
<                    ROUTINE MEMORISE L'ADRESSE ABSOLUE
<                    DANS LA ZONE MEMOIRE DE L'ESCLAVE DU
<                    MOT DESIGNE PAR LE ZC COURANT.
<
DADR:    EQU         $
         LA          ZC              < ACCES A L'INDEX CARACTERE
                                     < LINEAIRE COURANT.
         SLRS        3               < CONVERSION EN UN INDEX MOT
                                     < DANS LE PROGRAMME GRAPHIQUE.
         AD          AI1             < CONVERSION EN UNE ADRESSE
                                     < MOT ABSOLUE (DANS ITEM1).
         RBT         0               < RAZ DU BIT INDEX.
         STA         ADRES           < ET SAVE POUR UTILISATION
                                     < ULTERIEURE.
         BR          ALOOPB          < VERS LA BOUCLE DE L'EDITEUR.
<
<
<        G E N E R A T I O N   D ' U N   R E L A I  :
<
<
<        FONCTION :
<                      CETTE ROUTINE APPELEE PAR CTRL-SHIFT-N ,
<                    PERMET DE CONSTITUER DANS LE DUMP ASCI
<                    UN CHAINAGE VERS ADRES DESIGNE
<                    PREALABLEMENT PAR CTRL-D.
<                      A NOTER QUE CE CHAINAGE EST FAIT
<                    SOUS FORME DE CARACTERES ASCI , ET
<                    NON SOUS FORME D'UNE ADRESSE BINAIRE !!!!
<
<
RELAI:   EQU         $
         LA          ZC              < ACCES A L'INDEX LINEIARE
                                     < CARACTERE COURANT.
         ANDI        -8              < RAZ DES BITS 13,14,15 , AFIN DE
                                     < SE TROUVER A LA FRONTIERE DU
                                     < MOT DU DUMP SUR LEQUEL ON
                                     < SE TROUVE A PEU PRES POSITIONNE.
         LR          A,Y             < Y=INDEX DU 1ERE CARACTERE DU
                                     < MOT DU DUMP QUE L'ON VEUT
                                     < REMPLIR AVEC ADRES.
         LXI         4               < X=NBRE DE CARACTERES ASCI A
                                     < POSITIONNER.
         LB          ADRES           < RECUPERATION DU CHAINAGE.
<
< BOUCLE DE CONVERSION
< BINAIRE EN ASCI (HEXA) :
<
E600:    EQU         $
         LAI         0               < RAZ DE A.
         SLLD        4               < RECUPERATION D'UN CHIFFRE HEXA.
         CPI         9               < DISCRIMINATION CHIFFRE/LETTRE ???
         JLE         E601            < CAS DES CHIFFRES (0-9).
         ADRI        '41-'39-1,A     < CAS DES LETTRES (A-F).
E601:    EQU         $
         ADRI        '30,A           < CONVERSION EN UN CARACTERE ASCI.
         XR          X,Y
         STBY        &AIC            < UN CARACTERE DU CHAINAGE
                                     < EST RANGE DANS LE MOT DESIGNE
                                     < DANS LE DUMP.
         XR          X,Y
         ADRI        1,Y             < PROGRESSION DE L'INDEX DES
                                     < CARACTERES DU DUMP.
         JDX         E600            < CHIFFRE HEXA SUIVANT.
         BR          ALOOPB          < VERS LA BOUCLE DE L'EDITEUR.
X100:    VAL         0
         PAGE
<
<
<        D E F I N I T I O N   C H A I N E   D E   C A R A C T E R E S  :
<
<
<        FONCTION :
<                    CTRL-O : PERMET DE DESIGNER LE CARACTERE D'ORIGINE
<                             DE LA CHAINE SOURCE ,
<                    CTRL-Q : PERMET DE DESIGNER LE DERNIER CARACTERE
<                             (QUEUE) DE LA CHAINE SOURCE.
<
<
<        O R I G I N E  :
<
<
OCHAIN:  EQU         $
         LA          ZC
         STA         ZO              < MEMORIISATION DE L'ORIGINE.
         LA          AIC
         STA         AIM             < MEMORISATION DE L'ITEM
                                     < D'APPARTENANCE DE LA CHAINE.
         BR          ALOOPB          < VERS LA BOUCLE DE L'EDITEUR.
<
<
<        E X T R E M I T E  :
<
<
QCHAIN:  EQU         $
<
< VALIDATION DE LA COMMANDE :
<
         LA          AIM             < RECUPERATION DE L'ITEM
                                     < D'APPARTENANCE DE L'ORIGINE ZO.
         CP          AIC             < EST-CE L'ITEM COURANT ????
         JNE         E25             < NON , ERREUR.
         LA          ZC
         CP          ZO              < L'EXTREMITE DESIREE EST-ELLE
                                     < APRES L'ORIGINE ZO ???
         JL          E25             < NON , ERREUR.
<
< EXECUTION DE CTRL-Q :
<
         STA         ZQ              < MEMORISATION DE L'EXTREMITE.
         BR          ALOOPB          < VERS LA BOUCLE DE L'EDITEUR.
<
< RETOUR EN ERREUR :
<
E25:     EQU         $
         BR          AERR            < RETOUR EN ERREUR.
         PAGE
<
<
<        M O U V E M E N T   D E   C H A I N E  :
<
<
<        FONCTION :
<                      CTRL-SHIFT-O DEPLACE EN (ZC) DANS L'ITEM
<                    COURANT AIC , LA CHAINE DEFINIE PAR (ZO,ZQ)
<                    ET APPARTENANT A L'ITEM AIM.
<                      LES ITEMS AIM ET AIC PEUVENT ETRE
<                    EVIDEMMENT CONFONDUS , ET LES
<                    CHAINES SOURCES ET DESTINATION
<                    PEUVENT ETRE EN RECOUVREMENT
<                    AVANT ET ARRIERE.
<
<
MCHAIN:  EQU         $
<
< CALCUL DE LA LONGUEUR DE LA CHAINE :
<
         LA          ZQ              < EXTREMITE.
         SB          ZO              < ORIGINE.
         JAL         E25             < ERREUR : LA LONGUEUR EST NULLE ,
                                     < CELA SIGNIFIE QU'IL N'Y A PAS
                                     < EU DE CTRL-O.
         LR          A,B             < B=LONGUEUR-1 DE LA CHAINE.
<
< PREPARATION DU DEPLACEMENT :
<
         LAI         1               < SENS CROISSANT DES INDEXES
                                     < A PRIORI.
         LX          ZC              < X=INDEX 1ER CARACTERE DESTINATION
         LY          ZO              < Y=INDEX 1ER CARACTERE SOURCE.
         CPR         X,Y             < TEST DES POSITIONS RELATIVES
                                     < DES CHAINES SOURCES ET DESTI-
                                     < NATION.
         JGE         E26             < CONFONDUES OU ALORS LA CHAINE
                                     < DESTINATION PRECEDE LA CHAINE
                                     < SOURCE.
<
< CAS OU LA CHAINE DESTINATION SUIT
< LA CHAINE SOURCE :
<
         ADR         B,X             < X=INDEX DERNIER CARACTERE
                                     < DE LA SOURCE.
         ADR         B,Y             < Y=INDEX DERNIER CARACTERE
                                     < DE LA DESTINATION.
<
< VALIDATION DES INDEX INITIAUX X ET Y :
<
         LA          NCP             < A=VALEUR MAX+1 D'UN INDEX
                                     < CARACTERE.
         CPR         X,A             < VALIDATION DE (X).
         JLE         E27             < ABANDON : HORS-LA PAGE.
         CPR         Y,A             < VALIDATION DE (Y).
         JLE         E27             < ERREUR : HORS-LA PAGE.
         LAI         -1              < SENS DECROISSANT DES INDEX ,
                                     < POUR PARCOURS A L'ENVERS DES
                                     < 2 CHAINES.
E26:     EQU         $
         LR          A,C             < C=INCREMENT DE X ET DE Y.
<
< BOUCLE DE MOUVEMENT :
<
E28:     EQU         $
         XR          X,Y             < X=INDEX SOURCE.
         LBY         &AIM            < 1 CARACTERE DE LA SOURCE.
         XR          X,Y             < X=INDEX DESTINATION.
         STBY        &AIC            < MISE 1 CARACTERE A DESTINATION.
         ADR         C,X             < X<--(X)+-1.
         ADR         C,Y             < Y<--(Y)+-1.
         LR          X,A             < A=INDEX DESTINATION CARACTERE
                                     < SUIVANT.
         CP          NCP             < SERA-T'IL HORS LA PAGE ????
         JGE         E27             < OUI , ON ARRETE LA.
         ADRI        -1,B            < S'IL Y A ENCORE DE LA PLACE
                                     < PASSONS AU SUIVANT.
         CPZR        B               < EST-CE FINI ????
         JGE         E28             < OK , IL EN RESTE AU MOINS 1.
<
< FIN DU MOUVEMENT :
<
E27:     EQU         $
         BR          ALOOPB          < VERS LA BOUCLE DE L'EDITEUR.
         PAGE
<
<
<        R E D U C T I O N   D ' I T E M  :
<
<
<        FONCTION :
<                      SUITE A UN CTRL-SHIFT-M , CE MODULE
<                    REMET D'ABORD LA VISU EN ALPHA
<                    (A CAUSE DE L'ECHO FAIT PAR CMS4) , PUIS MET
<                    EN CARACTERE COURANT UN 'ANTI-SLASH' ,
<                    ET SON INDEX+1 COMME LONGUEUR REELLE
<                    DE L'ITEM ; LORS D'UNE ENTREE DANS
<                    'ED' AVEC CET ITEM , IL PERDRA CET ETAT
<                    REDUIT , PERDRA SON 'ANTI-SLASH' ,
<                    ET RETROUVERA SA LONGUEU MAX (NCP).
<                      ENFIN CE MODULE FAIT UN RETOUR
<                    A 'GE' , POUR EVITER LES PROBLEMES
<                    RENCONTRES LORS DES DECOMPACTAGES
<                    SUITE AU CTRL-E ...
<
<
ENDIT:   EQU         $
         LAD         CG
         BSR         ASVC            < RETOUR AU MODE ALPHA-NUMERIQUE
                                     < DE LA VISU.
         LX          ZC              < X=INDEX COURANT.
         LAI         CENDIT          < CARACTERE DE FIN D'ITEM.
         STBY        &AIC            < QUE L'ON MET EN CARACTERE COURANT
         LR          X,A             < A=INDEX DE L'ANTI-SLASH.
         ADRI        1,A             < A=LONGUEUR REELLE DE L'ITEM.
         LXI         LRITEM-LTN
         STA         &AIC            < MISE EN PLACE DE LA LONGUEUR
                                     < REELLE DE L'ITEM REDUIT.
         BR          GOGE            < VERS UN RETOUR IMMEDIAT A 'GE'.
         PAGE
<
<
<        C O M P A C T A G E   I T E M   C O U R A N T  :
<
<
<        FONCTION 'PACK-TEXTE' :
<                      CE MODULE APPELE PAR CTRL-P PERMET
<                    DE COMPACTER L'ITEM COURANT , EN
<                    'RESUMANT' LES CHAINES DE PLUS DE
<                    4 CARACTERES IDENTIQUES.
<                      LE COMPACTAGE A LIEUU SUIVANT
<                    LA REGLE SUIVANTE :
<
<                    <K><K>...(N FOIS)...<K>::=<'00><N><K>.
<
<                    <K> DESIGNANT UN CARACTERE QUELCONQUE ,
<                    <N> LE NBRE DE REPETITIONS (EN BINAIRE).
<
<                      ENFIN , ELLE MET A JOUR LA LONGUEUR
<                    REELLE EN OCTETS DU CORPS DE
<                    L'ITEM (TEXTE).
<
<
<        FONCTION 'PACK-SPACE' :
<                      CE MODULE APPELE PAR CTRL-SHIFT-L
<                    PERMET DE SUPPRIMER LES 'SPACE'
<                    SUIVANT LA REGLE SUIVANTE :
<
<                    <SPACE><SPACE>...(N FOIS)...<SPACE>::=<SPACE>.
<
<                      CELA SIGNIFIE QU'ON LAISSE
<                    TOUJOURS UN 'SPACE'.
<
<
<        FONCTION 'PACK-DESSIN' :
<                      CE MODULE APPELE PAR CTRL-SHIFT-K
<                    PERMET DE COMPACTER LE PROGRAMME D'UN
<                    DESSIN ; EN EFFET LORS DE L'UTILISATION
<                    DU MODE INTERACTIF DE 'GR'  (GENERATEUR
<                    DE PROGRAMME) , ON RENCONTRE SOUVENT
<                    DES CHAINES DU TYPE '1111...11'
<                    (DE MEME 2,3,4) , QUI PEUVENT ETRE
<                    REECRITES SOUS FORME DE REPETITIONS.
<                      LA REGLE DES REPETITIONS EST CELLE
<                    QUI EST RECONNUE PAR L'INTERPRETEUR
<                    GRAPHIQUE DE G2/G3 :
<
<                    <K><K>...(N FOIS)...<K>::=%<N>(<K>).
<        (IMBRICATIONS DES ITERATIONS POSSIBLES)
<        OU :
<                    <K><K>...(N FOIS)...<K>::=K<N>*<K>/.
<
<        AVEC :      <K>::='1'/'2'/'3'/'4'.
<                    <N> DESIGNANT UN CARACTERE DE '1' A '9' ,
<                        OU DE 'A' A 'Z' REPRESENTANT LE
<                        NBRE DE REPETITIONS.
<
<                      LE CHOIX ENTRE LE 1ER MODE ET
<                    LE SECOND SE FAIT PAR L'ENVOI
<                    D'UN 2EME CARACTERE : '%' POUR LE
<                    1ER ET 'K' POUR LE SECOND.
<
<
<
<
<        P A C K   S P A C E  :
<
<
SPACE:   EQU         $
         LAI         -1
         STA         MODPAC          < MODPAC<0 : 'PACK-SPACE'.
         LA          NCP
         STA         LMAX            < LMAX(SPACE)=NCP.
         LAI         2
         STA         LMIN            < LMIN(SPACE)=2.
         JMP         E200            < ET C'EST PARTI.
<
<
<        P A C K   D E S S I N  :
<
<
DESSIN:  EQU         $
<
< CHOIX DE LA SYNTAXE DE COMPACTAGE :
<
         DC          DEMIN           < MISE DE DEMIN SANS ECHO.
         LAD         DEMIN
         BSR         ASVC            < ENTREE 1 CARACTERE SANS ECHO.
         IC          DEMIN           < RESTAURATION DE L'ECHO.
         LBY         BUFIN           < A=CARACTERE ENTRE.
         LBI         "("             < A='%' A PRIORI.
         LXI         ")"             < A='%' A PRIORI.
         CPI         '25             < EST-CE BIEN '%' ???
         JE          E7600           < OUI : A='%', B='(', X=')'.
         LBI         "*"             < A='K' A PRIORI.
         LXI         "/"             < A='K' A PRIORI.
         CPI         "K"             < EST-CE BIEN 'K' ???
         JE          E7600           < OUI : A='K', B='*', X='/'.
         BR          AERR            < NON, ERREUR....
E7600:   EQU         $
         STA         KAR1            < KAR1='%' OU 'K'.
         STB         KAR2            < KAR2='(' OU '*'.
         STX         KAR3            < KAR3=')' OU '/'.
<
< MISE EN PLACE DES PARAMETRES :
<
         CPI         '25             < MODE '%' OU 'K' ???
         LA          C1024
         JE          MCV20           < MODE '%'.
         LA          CK              < MODE 'K' : ON NE PEUT IMBRIQUER
                                     < DES COMPACTAGES, LES SEQUENCES
                                     < *.../ N'ETANT PAS RECCURSIVES.
MCV20:   EQU         $
         STA         LMAX            < LMAX(DESSIN)=1024.
         STA         MODPAC          < MODPAC>0 : 'PACK-DESSIN'.
         LAI         6
         STA         LMIN            < LMIN(DESSIN)=6.
         JMP         E200            < ET C'EST PARTI ...
<
<
<        P A C K   T E X T E  :
<
<
PACK:    EQU         $
         STZ         MODPAC          < MODPAC=0 (PACK TEXTE).
         LAI         250
         STA         LMAX            < LMAX(TEXTE)=250.
         LAI         4
         STA         LMIN            < LMIN(TEXTE)=4.
<
< TRONC COMMUN TEXTE/DESSIN :
<
E200:    EQU         $
<        UTILISATION DES REGISTRES :
<                    X=INDEX DU TEXTE INITIAL (ITEM COURANT) ,
<                    Y=INDEX DU TEXTE COMPACTE (DANS L'ITEM COURANT) ,
<                    C=REGISTRE DE SAUVEGARDE.
         LXI         0               < INDEX INITIAL DU TEXTE.
         LYI         0               < INDEX INITIAL DE COMPACTAGE.
<
< BOUCLE DE RECHERCHE DES CHAINES
< DE CARACTERES IDENTIQUES :
<
E82:     EQU         $
         LR          X,A
         CP          NCP             < EST-ON AU BOUT DE L'ITEM COURANT?
         JE          E84             < OUI , C'EST FINI ...
         PSR         Y               < SAVE L'INDEX DE COMPACTAGEE.
         LY          LMAX
         LR          Y,C             < C=LONGUEUR MAX D'UNE CHAINE DE
                                     < CARACTERES IDENTIQUES.
         LB          NCP             < B=NBRE DE CARACTERES DANS L'ITEM.
         LBY         &AIC            < A=K(X)=CARACTERE COURANT DU
                                     < TEXTE A COMPACTER.
         JANE        E107            < OK , BON CARACTERE.
         BR          AERR            < ERREUR : ON EST TOMBE SUR UN
                                     < CODE DE REPETITION ('00) , LE
                                     < TEXTE EST DONC DEJA COMPACTE.
E107:    EQU         $
         LR          X,Y             < Y=INDEX DE RECHERCHE DES
                                     < CARACTERES IDENTIQUES.
E80:     EQU         $
         ADRI        1,Y             < ACCES AU CARACTERE SUIVANT.
         CPR         B,Y             < EST-ON AU BOUT DE L'ITEM ???
         JE          E81             < OUI , ON ARRETE LA RECHERCHE.
         ADRI        -1,C            < DECOMPTE DU NBRE DE DUPLICATIONS
                                     < MAX AUTORISEES.
         CPZR        C               < A-T'ON ATTEINT LE MAX ???
         JE          E81             < OUI , ON FAIT COMME SI UNE DIF-
                                     < FERENCE ETAIT APPARUE.
         CPZ         MODPAC
         JE          E210            < CAS DES TEXTES.
         JG          E501            < CAS DES DESSINS.
         CPI         " "             < CAS DES 'SPACE'.
         JNE         E81             < DANS LE CAS DU 'PACK-SPACE' , ON
                                     < NE PREND EN COMPTE QUE LES
                                     < CARACTERES 'SPACE' , LES
                                     < AUTRES ETANT IGNORES.
         JMP         E210            < VERS LE TEST DE DUPLICATION.
E501:    EQU         $
         CPI         "1"
         JL          E81             < ON NE COMPACTE QUE LES CARACTERES
         CPI         "4"
         JG          E81             < '1', '2', '3', '4' DANS LE CAS
                                     < DES DESSINS...
E210:    EQU         $
         XR          X,Y
         CPBY        &AIC            < COMPARAISON DE K(X) ET DE K(Y).
         XR          X,Y
         JE          E80             < ON A TROUVE UNE IDENTITE ,
                                     < POURSUIVONS DONC LA RECHERCHE.
<
< ARRET AU 1ER CARACTERE DIFFERENT
< DE K(X) , OU EN BOUT D'ITEM , OU
< SI ON A DEPASSE (LMAX) REPETITIONS :
< OU DANS LE CAS DE CARACTERES AUTRES QUE '1', '2', '3', '4'
< POUR LES DESSINS :
<
E81:     EQU         $
         LR          Y,A
         PLR         Y               < RESTAURE Y=INDEX DE COMPACTAGE.
         SBR         X,A             < A=NBRE DE CARACTERES IDENTIQUES
                                     < EN SEQUENCE.
         CP          LMIN            < EST-CE INTERESSANT DE COMPACTER ?
         JGE         E83             < OUI , COMPACTONS.
<
< CAS OU LE COMPACTAGE N'EST PAS INTERESSANT :
<
         LR          A,B             < B=NBRE DE CARACTERES A DEPLACER.
         BSR         ASP1            < DEPLACEMENT DE LA CHAINE DE
                                     < CARACTERES (EVENTUELLEMENT
                                     < REDUITE A 1 CARACTERE) ; DE PLUS
                                     < X ET Y SONT MIS A JOUR ET
                                     < INDEXENT LES 1ERS CARACTERES
                                     < SUIVANTS.
         JMP         E82             < AUX CARACTERES SUIVANTS.
<
< CAS OU LE COMPACTAGE EST INTERESSANT :
<
E83:     EQU         $
         LR          A,C             < C=LONGUEUR DE LA CHIANE DE
                                     < CARACTERES IDENTIQUES.
         CPZ         MODPAC
         JG          E202            < CAS DU 'PACK-DESSIN'.
         JL          E500            < CAS DU 'PACK-SPACE'.
<
< COMPACTAGE D'UN TEXTE :
<
         ADRI        1,X
         STBY        &AIC            < K(X+1)=<NBRE DE REPETITIONS>.
         ADRI        -1,X
         LAI         0
         STBY        &AIC            < K(X)='00.
<        ON A DON ICI :
<                    K(X)='00 ,
<                    K(X+1)=<NBRE DE REPETITIONS> ,
<                    K(X+2)=<CARACTERE>.
         LBI         3               < LE 'RESUME' DE LA CHAINE DE
                                     < CARACTERES IDENTIQUES NE
                                     < FAIT QUE 3 CARACTERES.
         BSR         ASP1            < DEPLACEMENT DES 3 CARACTERES.
         ADRI        -3,X            < RETOUR SUR LE DEBUT DE LA
                                     < CHAINE DE CARACTERES IDENTIQUES.
E203:    EQU         $               < RETOUR DES PACK DE DESSINS.
         ADR         C,X             < X=INDEX DU 1ER CARACTERE SUIVANT
                                     < LA CHAINE DE CARACTERES IDENTIQUES
                                     < DANS LE TEXTE A COMPACTER.
         JMP         E82             < AUX CARACTERES SUIVANTS.
<
< COMPACTAGE D'UN DESSIN :
<
E202:    EQU         $
         STX         SAVEX           < SAVE LE X INITIAL.
         LR          C,A             < A=NBRE DE REPETITIONS.
         SARD        16              < EXTENSION 32 BITS.
         DV          C35
         STA         NQ              < QUOTIENT,
         STB         NR              < RESTE.
         JAE         MCV4            < QUOTIENT=0 : VERS LE RESTE.
<
< CODAGE DU QUOTIENT :
<
         LA          KAR1
         BSR         ASP2            < %
         LAI         "Z"
         BSR         ASP2            < %Z
         LA          KAR2
         BSR         ASP2            < %Z(
         LA          NQ
         CPI         5               < POSITION DE NQ PAR RAPPORT A 5.
         JLE         MCV5            < NQ<5.
<
< CAS QUOTIENT>5 :
<
         LA          KAR1
         BSR         ASP2            < %Z(%
         LA          NQ
         CPI         9               < NQ EST-IL UN CHIFFRE DECIMAL ???
         JLE         MCV10           < OUI,
         ADRI        "A"-"0"-10,A    < NON.
MCV10:   EQU         $
         ADRI        "0",A           < CODAGE ASCI DE NQ.
         BSR         ASP2            < %Z(%Q
         LA          KAR2
         BSR         ASP2            < %Z(%Q(
         ADRI        1,X             < %Z(%Q(1234
         LA          KAR3
         BSR         ASP2            < %Z(%Q(1234)
         JMP         MCV6            < VERS LA FIN DU QUOTIENT.
<
< CAS DU QUOTIENT<=5 :
<
MCV5:    EQU         $
         ADR         A,X             < %Z(1234...1234
MCV6:    EQU         $
         LA          KAR3
         BSR         ASP2            < %Z(%Q(1234)) OU %Z(1234...1234)
<
< TRAITEMENT DU RESTE :
<
MCV4:    EQU         $
         LA          NR
         JAE         MCV9            < NR=0 : RIEN A FAIRE...
         CPI         5
         JLE         MCV8            < NR<=5.
<
< CAS DU RESTE>5 :
<
         LA          KAR1
         BSR         ASP2            < %
         LA          NR
         CPI         9               < NR EST-IL DECIMAL ???
         JLE         MCV11           < OUI,
         ADRI        "A"-"0"-10,A    < NON.
MCV11:   EQU         $
         ADRI        "0",A           < CODAGE ASCI DE NR.
         BSR         ASP2            < %R
         LA          KAR2
         BSR         ASP2            < %R(
         ADRI        1,X             < %R(1234
         LA          KAR3
         BSR         ASP2            < %R(1234)
         JMP         MCV9
<
< CAS DU RESTE<=5 :
<
MCV8:    EQU         $
         ADR         A,X             < 1234...1234
<
< FIN COMPACTAGE GRAPHIQUE :
<
MCV9:    EQU         $
         LB          SAVEX
         SBR         X,B
         NGR         B,B             < B=LONGUEUR DE LA CHAINE GENEREE.
         LX          SAVEX           < X=INDEX INITIAL DE LA
                                     < CHAINE GENEREE.
         BSR         ASP1            < DEPLACEMENT DE CELLE-CI...
         LX          SAVEX           < RETOUR SUR LE DEBUT DE LA CHAINE.
         JMP         E203            < VERS LE TRAITEMENT COMMUN.
<
< COMPACTAGE DES 'SPACE' :
<
E500:    EQU         $
<        ON A DONC ICI :
<                    K(X)='SPACE'.
         LBI         1               < UN CARACTERE A DEPLACER.
         BSR         ASP1            < DEPLACEMENT D'1 'SPACE'.
         ADRI        -1,X            < RETOUR SUR LE 'SPACE' QUE
                                     < L'ON VIENT DE DEPLACER.
         JMP         E203            < VERS LE TRONC COMMUN DES 'PACK'.
<
< FIN DU COMPACTAGE :
<
E84:     EQU         $
         CPZ         MODPAC
         JNE         E206            < CAS DES DESSINS.
                                     < ET DES 'SPACE'.
<
< FIN DU COMPACTAGE D'UN TEXTE :
<
         LXI         LRITEM-LTN
         STY         &AIC            < MISE A JOUR DE LA LONGUEUR
                                     < REELLE EN OCTETS DU CORPS DE
                                     < L'ITEM COURANT.
E201:    EQU         $
         BR          HOME            < VERS L'ENVOI HOME DU CURSEUR.
<
< FIN DU COMPACTAGE DES DESSINS ET DES 'SPACE' :
<
E206:    EQU         $
         LR          Y,X             < X=INDEX DU 1ER CARACTERE LIBRE.
         LAI         '20             < 'SPACE'.
<
< BOUCLE DE MISE A 'SPACE' DE LA
< FIN DE L'ITEM COURANT :
<
E207:    EQU         $
         XR          A,X
         CP          NCP             < EST-ON EN BOUT DHITEM ???
         JE          E201            < OUI , C'EST LA FIN.
         XR          A,X
         BSR         ASP2            < MISE A 'SPACE' DU CARACTERE
                                     < COURANT (X) , ET +1 SUR (X).
         JMP         E207            < AU SUIVANTE ...
         PAGE
<
<
<        D E P L A C E M E N T   D ' U N E   C H A I N E   D E
<        C A R A C T E R E S   D A N S   L E   S E N S
<                    C R O I S S A N T  :
<
<
<        FONCTION :
<                      DEPLACER PAR CARACTERES LA CHAINE
<                    D'INDEX INITIAL (X) DE L'ITEM COURANT
<                    ET DE LONGUEUR (B) , POUR LA METTRE
<                    DANS LA CHAINE D'INDEX INITIAL (Y).
<
<
<        ARGUMENTS :
<                    X=INDEX INITIAL DE LA CHAINE EMETTRICE ,
<                    B=LONGUEUR DE LA CHAINE ,
<                    Y=INDEX INITIAL DE LA CHAINE RECEPTRICE.
<
<
<        RESULTATS :
<                    X<--(X)+(B) ,
<                    Y<--(Y)+(B) ,
<                    B=0 ,
<                    DETRUIT A.
<
<
SP1:     EQU         $
         LBY         &AIC            < ACCES A UN CARACTERE.
         XR          X,Y
         STBY        &AIC            < MISE DANS LE RECEPTEUR.
         XR          X,Y
         ADRI        1,X             < CARACTERE EMETTEUR SUIVANT.
         ADRI        1,Y             < CARACTERE RECEPTEUR SUIVANT.
         ADRI        -1,B            < DECOMPTE DES CARACTERES RESTANTS
                                     < A DEPLACER.
         CPZR        B               < EST-CE FINI ???
         JNE         SP1             < NON , AU SUIVANT.
         RSR
         PAGE
<
<
<        S T O R E   C A R A C T E R  :
<
<
<        ARGUMENT :
<                    A=CARACTERE ASCI A METTRE DANS L'ITEM ,
<                    X=INDEX OU METTRE (A).
<
<
<        RESULTAT :
<                    X<--(X)+1.
<
<
SP2:     EQU         $
         STBY        &AIC            < RANGEMENT DU CARACTERE DANS
                                     < L'ITEM EN (X).
         ADRI        1,X             < PROGRESSION INDEX.
         RSR                         < ET C'EST TOUT ...
         PAGE
<
<
<        D E C O M P A C T A G E   D ' U N   I T E M  :
<
<
DCOMP:   EQU         $
<
< TEST DE DECOMPACTAGE EVENTUEL :
<
         LXI         LRITEM-LTN      < ACCES A L'EN-TETE DE L'ITEM
                                     < COURANT.
         LA          &AIC            < A=NBRE REEL DE CARACTERES DE
                                     < L'ITEM COURANT.
         CP          NCP             < L'ITEM COURANT EST-IL COMPACTE ???
         JE          E100            < NON , IL N'Y A DONC RIEN A FAIRE.
         LY          NCP             < Y=NBRE DE CARACTERES MAX D'UN
                                     < ITEM.
         STY         &AIC            < DANS LE CAS OU L'ITEM COURANT
                                     < EST COMPACTE , ON MET DANS
                                     < LRITEM SA LONGUEUR REELLE
                                     < EN CARACTERES APRES DECOMPACTAGE.
         LR          A,X             < X=NBRE REEL DE CARACTERES DE
                                     < L'ITEM COURANT COMPACTE.
         LR          Y,C             < C=NBRE DE CARACTERES MAX
                                     < D'UN ITEM.
<
< CAS OU L'ITEM EST COMPACTE :
<
<
< DEPLACEMENT DE L'ITEM COURANT EN QUEUE DE PAGE :
<
<        UTILISATION DES REGISTRES :
<                    C=NBRE DE CARACTERES MAX D'UN ITEM ,
<                    X=INDEX DE L'ITEM COURANT ,
<                    Y=INDEX DE L'ITEM EN QUEUE DE PAGE.
E101:    EQU         $
         ADRI        -1,X            < CARACTERE PRECEDENT DE L'ITEM
                                     < COURANT COMPACTE.
         ADRI        -1,Y            < CARACTERE PRECEDENT DE L'ITEM
                                     < COMPACTE DE QUEUE DE PAGE.
         LBY         &AIC            < A=K(X).
         XR          X,Y
         STBY        &AIC            < K(Y)=K(X).
         XR          X,Y
         CPZR        X               < EST-CE FINI ???
         JG          E101            < NON.
<
< DECOMPACTAGE DE L'ITEM DE QUEUE DE PAGE :
<
<        UTILISATION DES REGISTRES :
<                    B=NBRE DE REPETITIONS D'UN CARACTERE ,
<                    C=NBRE DE CARACTERES MAX D'UN ITEM=LIMITE
<                      SUPERIEURE DE X ET DE Y.
<                    X=INDEX DE DECOMPACTAGE=INDEX DE PAGE ,
<                    Y=INDEX DE L'ITEM DE QUEUE DE PAGE.
E102:    EQU         $
         CPR         Y,C             < EST-CE FINI ????
         JE          E100            < OUI.
         XR          X,Y
         LBI         1               < A PRIORI PAS DE DUPLICATION.
         LBY         &AIC            < A=K(Y)=UN CARACTERE DE L'ITEM
                                     < COMPACTE DE QUEUE DE PAGE.
         JANE        E103            < C'EST UN CARACTERE SIMPLE ,
                                     < ALLONS LE DEPLACER.
<
< CAS DES CODES DE REPETITION ('00) :
<
         ADRI        1,X
         LBY         &AIC
         LR          A,B             < B=K(Y+1)=NBRE DE REPETITIONS
                                     < DU CARACTERE K(Y+2).
         ADRI        1,X
         LBY         &AIC            < A=K(Y+2)=CARACTERE A REPETER.
E103:    EQU         $
<        ON A ICI :
<                    A=CARACTERE A DEPLACER ,
<                    B=NBRE DE REPETITIONS DU CARACTERE (A).
         XR          X,Y
E104:    EQU         $
         CPR         X,C             < VALIDATION DE L'INDEX DE PAGE.
         JE          $               < E R R E U R   P R O G R A M M E ,
                                     < OU   M A U V A I S   I T E M .....
         STBY        &AIC            < K(X)=(A).
         ADRI        1,X             < PROGRESSION DE L'INDEX DE PAGE.
         ADRI        -1,B            < DECOMPTE DES REPETITIONS.
         CPZR        B               < ENCORE DES REPETITIONS ????
         JNE         E104            < OUI , ON Y VA ...
         ADRI        1,Y             < SI NON , PROGRESSION DE L'INDEX
                                     < DE L'ITEM COMPACTE DE QUEUE DE
                                     < PAGE.
         JMP         E102            < ET ON RECOMMENCE.
<
< FIN DU DECOMPACTAGE :
<
E100:    EQU         $
         RSR
         PAGE
<
<
<        E D I T I O N   D E   L ' I T E M   C O U R A N T  :
<
<
<        FONCTION :
<                      CE MODULE APPELE PAR CTRL-E
<                    EDITE SUR LA VISU L'ITEM COURANT
<                    APRES L'AVOIR EVENTUELLEMENT
<                    DECOMPACTE . CE DECMPACTAGE EST
<                    FAIT EN MEMOIRE (ET NON PAS
<                    SEULEMENT SUR L'ECRAN...).
<
<
WRITE:   EQU         $
         CPZ         MODCAL,W
         JNE         E400            < IL S'AGIT D'UN APPEL EN MODE
                                     < AUTOMATIQUE ('EI') , ON NE FAIT
                                     < DONC PAS D'EFFACEMENT DE L'E
                                     < ECRAN ; A NOTER QUE LE CURSEUR EST
                                     < HOME , CAR 'ED' COMMENCE PAR
                                     < UNE SELECTION ITEM1 (QUI ENVOIE
                                     < HOME).
<
< EFFACEMENT DE L'ECRAN :
<
         LAD         DERASE
         BSR         ASVC            < ERASE L'ECRAN.
E400:    EQU         $
         BSR         ADCOMP          < DECOMPACTAGE EVENTUEL DE L'ITEM.
<
< PREPARATION :
<
         LYI         NBLIG           < Y=NBRE DE LIGNES A EDITER.
         LAI         '6D             < CARACTERE EXTENSION RC+LF.
         BSR         ASTKO           < DEMOUT+2=1 , ET BUFOUT
                                     < CONTIENT RC+LF EN OCTET0.
         LAI         '20
         BSR         ASTKO           < MISE D'UN 'SPACE' EN OCTET1
                                     < DROIT DE BUFOUT ; IL EST UTILISE
                                     < POUR REPOSITIONNER CORRECTEMENT
                                     < LE CURSEUR ALPHA-NUMERIQUE
                                     < APRES LES ECRITURES EN EXPOSANT.
         DC          DEMOUT+2        < MALGRE TOUT DEMOUT+2 RESTE A 1.
         LA          AIC             < A=RELAI VERS LA 1ERE LIGNE
                                     < DE L'ITEM COURANT.
<
< BOUCLE D'EDITION PAR LIGNE :
<
E30:     EQU         $
<        ON A ICI :
<                    A=RELAI VERS LA LIGNE COURANTE.
         STA         ALIGNE          < MISE EN PLACE DU RELAI VERS
                                     < LA LIGNE COURANTE DE L'ITEM.
         SLLS        1               < CONVERSION EN @OCTET.
         STA         DEMLIG+1        < MAJ DE LA DEMANDE DEMLIG.
<
< ELIMINATION DES 'SPACE' DE BOUT DE LIGNE :
<
         LXI         NBCAR-1         < X=INDEX DU DERNIER CARACTERE
                                     < DE LA LIGNE.
E31:     EQU         $
         LBY         &ALIGNE         < A=CARACTERE(X) DE LA LIGNE (Y).
         CPI         '20             < EST-CE UN 'SPACE' ????
         JNE         E32             < NON , ON ARRETE L'EXPLORATION
                                     < DE LA LIGNE A REBROUSSE POIL
                                     < AU 1ER CARACTERE NON BLANC
                                     < RENCONTRE.
         ADRI        -1,X            < DANS LE CAS D'UN 'SPACE' ,
                                     < ON PASSE AU CARACTERE PRECEDENT.
         CPZR        X               < EST-ON AU DEBUT DE LA LIGNE ???
         JGE         E31             < NON.
         JMP         E40             < OUI , LA LIGNE EST DONC VIDE.
<
< CAS DES LIGNES NON VIDES :
<
E32:     EQU         $
         ADRI        1,X             < X=NBRE DE CARACTERES DE LA LIGNE.
         STX         DEMLIG+2        < MAJ DE LA DEMANDE DEMLIG.
<
< RECHERCHE DES CARACTERES EN EXPOSANT :
<
E33:     EQU         $
         ADRI        -1,X            < POURSUIVONS L'EXPLORATION
                                     < A REBROUSSE POIL DE LA LIGNE.
         LBY         &ALIGNE         < A=CARACTERE(X) DE LA LIGNE(Y).
         TBT         8               < TEST DU BIT8 (EXPOSANT) ???
         JC          E50             < ON A TROUVE AU MOINS UN
                                     < CARACTERE EN EXPOSANT , IL FAUT
                                     < DONC AFFICHER LA LIGNE CARACTERE
                                     < PAR CARACTERE.
         CPZR        X               < ETAIT-ON AU DEBUT DE LA LIGNE ??
         JG          E33             < NON.
<
<        L I G N E S   N O N   V I D E S   S A N S
<        C A R A C T E R E - E X P O S A N T  :
<
         LAD         DEMLIG
         BSR         ASVCX           < ENVOI DE LA DEMANDE D'ECRITURE
                                     < DE LA LIGNE COURANTE.
                                     < (ET ABORT EN E34 SI CTRL-X-OFF).
<
< TEST DE LIGNES COMPLETES :
<
         LA          DEMLIG+2        < A=NBRE DE CARACTERES EDITES
                                     < SUR L'ECRAN POUR LA LIGNE
                                     < COURANTE(Y).
E64:     EQU         $
<        ON A ICI :
<                    A=NBRE DE CARACTERES DE LA LIGNE QUE L'ON VIENT
<                      D'EDITER (LIGNE COURANTE).
         CPI         NBCAR           < LA LIGNE COURANTE ETAIT-ELLE
                                     < PLEINE ???
         JE          E35             < OUI , DONC IL N'Y A RIEN A
                                     < FAIRE , LE RC+LF AYANT ETE
                                     < FAIT PAR LA VISU TOUTE SEULE ...
<
< RETOUR A LA LIGNE SUIVANTE DANS
< LE CAS DES LIGNES INCOMPLETES :
<
E40:     EQU         $
         LAD         DEMOUT
         BSR         ASVCX           < ENVOI D'UN RC+LF SUR LA VISU.
                                     < (ET ABORT EN E34 SI CTRL-X-OFF).
<
< PASSAGE A LA LIGNE SUIVANTE :
<
E35:     EQU         $
         LA          ALIGNE
         ADRI        NBCAR/2,A       < CALCUL DU RELAI VERS LA LIGNE
                                     < SUIVANTE.
         ADRI        -1,Y            < DECOMPTE DES LIGNES RESTANT
                                     < A EDITER.
         CPZR        Y               < A-T'ON FINI ???
         JG          E30             < NON , IL EN RESTE.
<
< FIN DE L'EDITION :
<
E34:     EQU         $
         STZ         DEMOUT+2        < REINITIALISATION DE DEMOUT+2=0.
         STZ         BUFOUT          < REINITIALISATION DE BUFOUT.
         CPZ         MODCAL,W        < TEST DU MODE D'APPEL DE 'ED'.
         JNE         E802            < CAS D'UN APPEL EN MODE
                                     < AUTOMATIQUE PAR 'EI'/'GO'.
<
< CAS D'UN APPEL PAR 'GE' :
<
         BR          HOME            < VERS L'ENVOI HOME DU CURSEUR.
<
< CAS D'UN APPEL PAR 'EI'/'GO' :
<
E802:    EQU         $
         BR          ALOOPB          < PAS DE RETOUR HOME DU CURSEUR.
<
<        L I G N E S   N O N   V I D E S   A V E C   A U   M O I N S
<        U N   C A R A C T E R E - E X P O S A N T  :
<
E50:     EQU         $
         LA          DEMLIG+2
         LR          A,C             < C=NBRE DE CARACTERES DE LA LIGNE.
         LAI         1
         STA         DEMLIG+2        < LES CARACTERES SONT SORTIS 1 A 1.
         LXI         0               < INDEX DU 1ER CARACTERE DE LA
                                     < LIGNE COURANTE.
         STY         COORD           < SAVE LE NUMERO DE LA LIGNE
                                     < COURANTE (Y) DANS COORD.
<
< BOUCLE D'EDITION PAR CARACTERE :
<
E51:     EQU         $
         LBY         &ALIGNE         < ACCES AU CARACTERE COURANT (X).
         TBT         8               < EST-IL EN EXPOSANT ????
         JC          E52             < OUI.
<
< CAS DES CARACTERES SUR LA LIGNE :
<
         LAD         DEMLIG
         BSR         ASVCX           < ENVOI DU CARACTERE COURANT
                                     < SUR LA LIGNE DE LA VISU.
                                     < (ET ABORT SI CTRL-X-OFF).
<
< PASSAGE AU CARACTERE SUIVANT :
<
E54:     EQU         $
         ADRI        1,X
         IC          DEMLIG+1        < ON FAIT PROGRSSER
                                     < D'1 UNITE L'@OCTET DU BUFFER.
         CPR         X,C             < A-T'ON EPUISE TOUTE LA LIGNE ????
         JNE         E51             < NON , AU CARACTERE SUIVANT.
<
< FIN DE LA LIGNE :
<
E65:     EQU         $
         LR          C,A             < A=NBRE DE CARACTERES DE LA LIGNE.
         LY          COORD           < RESTAURE LE NUMERO DE LA LIGNE
                                     < COURANTE A PARTIR DE COORD.
         JMP         E64             < VERS LE TEST SUR LA NECESSITE
                                     < D'ENVOYER UN RC+LF.
<
< CAS DES CARACTERES EN EXPOSANT :
<
E52:     EQU         $
         STX         COORD+1         < COORD+1=RANG DU CARACTERE
                                     < EXPOSANT SUR LA LIGNE.
         LAI         14              < UN CARACTERE OCCUPE 14 POINTS
                                     < GRAPHIQUES DE LARGE.
         MP          COORD+1
         STB         COORD+1         < COORD+1=X GRAPHIQUE DU
                                     < CARACTERE EN EXPOSANT.
         LAI         22              < UN CARACTERE OCCUPE 22 POINTS
                                     < GRAPHIQUES DE HAUT.
         MP          COORD
         ADRI        10,B            < B=Y GRAPHIQUE DU CARACTERE
                                     < EN EXPOSANT.
         LA          COORD
         XR          A,B             < SAVE LE NUMERO DE LA LIGNE
                                     < COURANTE DANS B.
         STA         COORD           < COORD=X GRAPHIQUE DU CARACTERE
                                     < EN EXPOSANT.
<
< MONTEE DU CURSEUR DE 10 POINTS AU DESSUS DE LA LIGNE :
<
         LAD         OG              < PASSAGE EN GRAPHIQUE.
         BSR         ASVCX
         LAD         WG              < MONTEE DU CURSEUR EN EXPOSANT.
         BSR         ASVCX
         LAD         CG              < RETOUR EN ALPHA-NUMERIQUE.
         BSR         ASVCX
<
< ENVOI DU CARACTERE EXPOSANT :
<
         LAD         DEMLIG
         BSR         ASVCX
<
< REDESCENTE DU CURSEUR SUR LA LIGNE :
<
         LA          COORD
         ADRI        -10,A
         STA         COORD           < COORD=Y GRAPHIQUE DU CURSEUR
                                     < SUR LA LIGNE.
         LAD         OG              < PASSAGE EN GRAPHIQUE.
         BSR         ASVCX
         LAD         WG              < DESCENTE DU CURSEUR SUR
                                     < LA LIGNE.
         BSR         ASVCX
         LAD         CG              < RETOUR EN ALPHA-NUMERIQUE.
         BSR         ASVCX
         IC          DEMOUT+1        < PASSAGE SUR LE 'SPACE' CONTENU
                                     < DANS BUFOUT.
         LAD         DEMOUT
         BSR         ASVCX           < EN ENVOYANT AINSI UN 'SPACE'
                                     < DERRIERE LE CARACTERE EN EXPOSANT
                                     < ON PLACE LE CURSEUR ALPHA-
                                     < NUMERIQUE DERRIERE LE CARACTERE ,
                                     < CE QUI AVAIT ETE MAL FAIT PAR
                                     < LE RETOUR EN ALPHA-NUMERIQUE.
         DC          DEMOUT+1        < RETOUR SUR LE RC+LF DE DEMOUT.
         STB         COORD           < RESTAURE COORD=NUMERO DE LA
                                     < LIGNE COURANTE.
         JMP         E54             < VERS L'ACCES AU CARACTERE SUIVANT.
<
<
<        S V C   E T   A B O R T   S I   C T R L - X - O F F  :
<
<
RSVCX:   EQU         $
         BSR         ASVC            < EXECUTION DU SVC : A=@DEMANDE.
         JGE         E801            < ABORT SI CTRL-X-OFF.
         RSR                         < RETOUR OK.
<
< CAS DES CTRL-X-OFF :
<
E801:    EQU         $
         LAI         BUFOUT-ZERO*2
         STA         DEMOUT+1        < RESTAURE DEMOUT A PRIORI.
         LAD         CG
         BSR         ASVC            < RETOUR EN ALPHA-NUMERIQUE SI
                                     < ON ETAIT EN GRAPHIQUE ....
         ADRI        -1,K            < RECUPERATION DU BSR D'+PPEL.
         JMP         E34             < ABORT EDITION.
         PAGE
<
<
<        S O R T I E S   D E   E D  :
<
<
<        FONCTION :
<                      CES MODULES PERMETTENT DE RETOURNER
<                    RESPECTIVEMENT A 'GE'/'EI' (PAR UN CTRL-F) ,
<                    ET AU CCI (PAR UN CTRL-W).
<
<
<        R E T O U R   A   L ' A P P E L A N T   ( G E , E I )  :
<
<
<        CONDITIONS DE RETOUR :
<        (POUR LES APPELS PAR 'EI'/'GO')
<                    CDRET=0 : TEXTE ENTIEREMENT EDITE ,
<                    CDRET=2 : TEXTE ABORTE PAR CTRL-X-OFF.
<                    CDRET='12 : ALT-MODE RECU.
<
<
RETURN:  EQU         $
<        ON A ICI :
<                    W=@BRANCH.
         LA          CDRET,W         < RECUPERATION DU CDRET COURANT.
         CPI         PEDIT-ZERO      < UN ALT-MODE A-T'IL ETE RECU ???
         JE          ALTM            < OUI , ON LAISSE CDRET INTACT.
<
< TRANSMISSION DES ARGUMENTS :
<
         LA          MODCAL,W        < A=0 SI 'GE' , A=1 SI 'EI' ,
         ADR         A,A             < A=0 SI 'GE' , A=2 SI 'EI'.
         AND         XOFF            < A=0 SI PAS DE CTRL-X-OFF , OU
                                     < APPEL APR 'GE' , ET A=2 SI
                                     < CTRL-X-OFF ET APPEL PAR 'EI'.
         STA         CDRET,W         < RENVOI DES CONDITIONS DE RETOUR.
ALTM:    EQU         $               < CAS DES ALT-MODES RECUS.
         STZ         MODCAL,W        < REINITIALISATION DE MODCAL.
         LAD         DEMSGN          < A=@DEMANDE AU SGN ; LA DEMANDE
                                     < EST PRETE POUR REMPLIR SA
                                     < MISSION DE CHARGEMENT DE 'GE    '
<        ON A ICI :
<                    A=@DEMSGN ,
<                    W=@BRANCH.
         LR          A,C             < A NOTER : (C)#0 : AINSI , SI
                                     < LE PROCESSEUR 'EI' REPREND LA
                                     < MAIN , IL NE CONFOND PAS CETTE
                                     < ENTRY AVEC LA GENERATION DE 'GO'.
         BSR         AOVL            < ET C'EST PARTI POUR UNE TENTATIVE
                                     < DE CHARGEMENT.
         BR          AERR            < SI LA ROUTINE REPREND LA MAIN
                                     < C'EST QU'ON N'A PAS PU CHARGER
                                     < LA BRANCHE DE L'OVERLAY , ON
                                     < FAIT DONC UN REOUR EN ERREUR.
<
<
<        R E T O U R   A U   C C I  :
<
<
CCI:     EQU         $
         LAD         DEMCCI
         SVC         0               < RETOUR AU CCI.
         BR          HOME            < VERS L'ENVOI DU CURSEUR HOME
                                     < AU CAS OU UN !GO A ETE EMIS.
         PAGE
<
<
<        E R A S E   E C R A N  :
<
<
ERASE:   EQU         $
         LAD         DERASE
         BSR         ASVC            < ENVOI DE LA DEMANDE D'EFFACEMENT
                                     < DE L'ECRAN.
         CPZ         RETSVC          < TEST DES CONDITIONS DE RETOUR.
         JNE         RETURN          < CAS DE LA GENERATION EN BATCH
                                     < DE 'ED' ; EN EFFET ON ENVOIE
                                     < PAR LE LECTEUR DE CARTES UN
                                     < CTRL-C QUI PROVOQUE UNE DEMANDE
                                     < D'ERASE SUR LP , D'OU UN
                                     < RETOUR EN ERREUR QUI NOUS
                                     < PERMET DE RETOURNER A 'GE'.
         BR          HOME            < VERS L'ENVOI HOME DU CURSEUR.
         PAGE
<
<
<        M I S E   A   ' S P A C E '   D E   L A   P A G E  :
<
<
<        FONCTION :
<                      CE MODULE APPELE PAR CTRL-R
<                    COMPTABILISE LES CTRL- SUCCESSIFS ;
<                    LORSQUE 2 CTRL-R SONT RECUS SUCCES-
<                    SIVEMENT , L'ITEM COURANT EST
<                    REMIS A 'SPACE' , ET L'ECRAN EST
<                    EFFACE.
<
<
RZITEM:  EQU         $
         LA          KCTRL           < A=NUMERO DE LA COMMANDE COURANTE.
         CP          KCTRLR          < LA COMMANDE PRECEDENTE ETAIT-
                                     < ELLE AUSSI UN CTRL-R ???
         JNE         E900            < NON , ON NE FAIT QUE MEMORISER
                                     < CE CTRL-R.
<
< CAS DE 2 CTRL-R CONSECUTIFS :
<
         BSR         ARAZI           < MISE A 'SPACE' DE L'ITEM COURANT.
         JMP         ERASE           < VERS L'EFFACEMENT DE L'ECRAN.
<
< CAS D'UN CTRL-R ISOLE :
<
E900:    EQU         $
         ADRI        1,A             < A=NUMERO+1 DE LA COMMANDE
                                     < COURANTE.
         STA         KCTRLR          < KCTRLR=NUMERO DE LA COMMANDE
                                     < SUIVANTE.
         BR          ALOOPB          < C'EST TOUT : VERS LA BOUCLE
                                     < DE L'EDITEUR.
<
<
<        R O U T I N E   D E   M I S E   A   ' S P A C E '  :
<
<
RAZI:    EQU         $
         LX          NMP             < X=NBRE DE MOTS COMPOSANT L'ITEM.
         DC          AIC             < PERMET D'INDEXER L'ITEM A PARTIR
                                     < DE 1.
         LAI         '20
         SBT         2               < A='SPACE''SPACE'.
E24:     EQU         $
         STA         &AIC            < MISE A 'SPACE'.
         JDX         E24             < AU SUIVANT.
         IC          AIC             < RETOUR AU MODE D'INDEXATION
                                     < DE L'ITEM A PARTIR DE 0.
         RSR
         PAGE
<
<
<        C H O I X   L I G N E / E X P O S A N T  :
<
<
<        FONCTION :
<                      CES MODULES METTENT LES CARACTERS
<                    SUIVANTS EN EXPOSANT DANS LE CAS
<                    D'UN CTRL-U , ET SUR LA LIGNE DANS
<                    LE CAS D'UN CTRL-L.
<
<
<        M I S E   E N   E X P O S A N T  :
<
<
EXP:     EQU         $
         LAI         0
         SBT         8
         STA         UP              < BIT8(UP)=1.
         BR          ALOOPB          < VERS LE RETOUR DE LA BOUCLE
                                     < DE L'EDITEUR.
<
<
<        M I S E   S U R   L A   L I G N E  :
<
<
LINE:    EQU         $
         STZ         UP              < BIT8(UP)=0.
         BR          ALOOPB          < VERS LE RETOUR DE LA BOUCLE
                                     < DE L'EDITEUR.
         PAGE
<
<
<        D E S C E N T E   D E   T O U S   L E S   E X P O S A N T S  :
<
<
<        FONCTION :
<                      CE MODULE REMET AU NIVEAU DE LA LIGNE
<                    TOUS LES CARACTERES MIS EN EXPOSANT ;
<                    CETTE COMMANDE SERA UTILISEE PAR
<                    EXEMPLE A LA SUITE D'ERREURS DE
<                    SYNTAXE SIGNALEE PAR G2/G3/SC ,...
<
<
CORIGE:  EQU         $
         BSR         ADCOMP          < DECOMPACTAGE EVENTUEL DE L'ITEM.
         LX          NMP             < X=NBRE DE MOTS D'UNE PAGE.
         DC          AIC             < AFIN D'INDEXER PAR RAPPORT A 1.
CORIG1:  EQU         $
         LA          &AIC
         AND         MLINE           < RAZ DES BITS 0 ET 8 DU MOT
                                     < COURANT , SOIT DONC LES BITS
                                     < INDICATEURS D'EXPOSANT DES 2
                                     < CARACTERES QU'IL CONTIENT.
         STA         &AIC            < MAJ DU MOT COURANT.
         JDX         CORIG1          < AU SUIVANT.
         IC          AIC             < RETOUR A L'INDEXATION /A 0.
         BR          HOME            < VERS L'ENVOI HOME DU CURSEUR.
<
<
<        R E T O U R   A U   T Y P E   ' T E X T E '  :
<
<
<        FONCTION :
<                      PERMET DE FAIRE REVENIR UN DESSIN , OU
<                    UN FILM DIGITAL AU TYPE TEXTE ; AINSI
<                    UN DESSIN ENVOYE PAR ERREUR A 'SC' , ET
<                    AYNAT DONC ACQUIS LE TYPE 'FILM
<                    DIGITAL' , PEUT REDEVENIR UN TEXTE ,
<                    PUIS DONC UN DESSIN ...
<
<
TYPET:   EQU         $
         LAI         "T"             < TYPE 'TEXTE'.
         LXI         IINDIC-LTN*2    < INDEX D'ACCES AU TYPE DANS
                                     < L'EN-TETE DE L'ITEM.
         STBY        &AIC            < RETOUR AU TYPE TEXTE.
         BR          HOME            < PUIS ENVOI HOME DU CURSEUR ...
         PAGE
<
<
<        R E P E A T   C A R A C T E R E S  :
<
<
<        FONCTION :
<                      CE MODULE APPELE SUITE A UN CTRL-X ,
<                    LIT UN CARACTERE SUR LA VISU , ET
<                    SUIVANT SA VALEUR FAIT LES CHOIX
<                    SUIVANTS :
<                    <CARACTERE>='0' : MISE EN REPEAT INFINI (ARRETE
<                                      PAR UN CTRL-X-OFF , OU UNE
<                                      SORTIE DES LIMITES DE L'EPURE) ,
<                    <CARACTERE>='1',...,'9','A',...,'Z' :
<                                      MISE EN MODE REPEAT 'N' FOIS ,
<                                      ARRETE LORSQUE LE COMPTE EST
<                                      EXPIRE , OU POUR CTRL-X-OFF ,
<                                      OU ENFIN POUR UNE SORTIE DES
<                                      LIMITES DE L'EPURE.
<
<
KREPET:  EQU         $
         DC          DEMIN           < MISE DE DEMIN , EN MODE ENTREE
                                     < SANS ECHO.
         LAD         DEMIN
         BSR         ASVC            < LECTURE D'1 CARACTERE SUR
                                     < LE TERMINAL.
         IC          DEMIN           < REMISE EN MODE AVEC ECHO.
<
< DETERMINATION DE LA NATURE DU REPEAT :
<
         LBY         BUFIN           < RECUPERATION DU CARACTERE LU.
         ADRI        -'30,A          < TRANSLATION PAR RAPPORT A '0'.
         JAG         E21             < C'EST UN REPEAT 1,2,...FOIS.
         JAE         E22             < C'EST UN REPEAT A L'INFINI.
E106:    EQU         $
         BR          AERR            < LE CARACTERE ENVOYE N'EST
                                     < PAS RECONNU : RETOUR EN ERREUR.
<
< CAS DES REPEAT A L'INFINI :
<
E22:     EQU         $
         LAI         -1              < REPEAT=-1.
<
< CAS DES REPEAT N FOIS :
<
E21:     EQU         $
         CPI         9
         JLE         E105            < CAS DES CHIFFRES DE '1' A '9'.
                                     < (ET DE L'INFINI....)
         ADRI        -'41+'39+1,A    < TRANSLATION PAR RAPPORT A 'A'.
         CPI         9
         JLE         E106            < ERREUR : CARACTERES ENTRE
                                     < '9' ET 'A'.
E105:    EQU         $               < ENTRY POUR 'ENDLIN'.
         STA         REPEAT          < REPEAT=N OU -1.
<
< RECUPERATIION DU DERNIER CARACTERE REPETABLE :
<
         LA          SAVEK
         STBY        BUFIN           < ON FAIT COMME SI LE DERNIER
                                     < CARACTERE REPETABLE AVAIT ETE
                                     < LU SUR LE TERMINAL.
         BR          ALOOPB          < RETOUR OK VERS LE RETOUR DE
                                     < LA BOUCLE DE L'EDITEUR.
         PAGE
<
<
<        R E P E A T   J U S Q U ' E N    B O U T
<                    D E   L I G N E  :
<
<
<        FONCTION :
<                      CE MODULE APPELE PAR CTRL-Y
<                    REPRODUIT LE DERNIER CARACTERE
<                    REPETABLE JUSQU'EN BOUT DE LA
<                    LIGNE COURANTE , DE TELLE FACON
<                    QUE LE CURSEUR ALPHA-NUMERIQUE
<                    SE TROUVE SUR LE DERNIER CARACTERE
<                    DE CETTE LIGNE EN FIN D'OPERATION.
<
<
ENDLIN:  EQU         $
         LAI         NBCAR           < (ET NON PAS 'NBCAR-1' , EN
                                     < EFFET A 'LOOP' ON COMMENCE
                                     < PAR FAIRE -1 DUR 'REPEAT'....)
         SB          XC              < A=NBRE DE REPETITIONS A FAIRE.
         JANE        E105            < OK , IL Y EN A AU MOINS UNE
                                     < A FAIRE.
         BR          ALOOPB          < RIEN A FAIRE , ON EST DEJA SUR
                                     < LA DERNIERE POSITION DE LA
                                     < LIGNE COURANTE.
         PAGE
<
<
<        E D I T E U R   D ' I T E M S
<        A L P H A - N U M E R I Q U E S  :
<
<
<        FONCTION :
<                    1- APPEL PAR 'GE' :
<                      LE PROCESSEUR 'ED    ' EST CHARGE DE CREER ,
<                    METTRE A JOUR ET MODIFIER DES ITEMS DE
<                    TYPE 'PAGE DE VISU ALPHA-NUMERIQUE'.
<                      SA PARTICULARITE EST DE PERMETTRE
<                    L'ACCES A L'INFORMATION EN LA MONTRANT
<                    A L'AIDE DU CURSEUR ALPHA-NUMERIQUE QUE
<                    L'ON PEUT DEPLACER DANS TOUTES LES
<                    DIRECTIONS . PAR EXEMPLE , POUR
<                    REPLACER UN CARACTERE PAR UN AUTRE ,
<                    IL SUFFIT DE SE POSITIONNER DESSUS ,
<                    ET DE TAPER LE NOUVEAU CARACTERE ....
<                    2- APPEL PAR 'EI' :
<                      LE PROCESSEUR 'ED' PERMET
<                    ALORS L'EDITION AUTOMATIQUE DE
<                    L'ITEM1 , SUIVIT D'1N RETOUR
<                    IMMEDIAT A 'EI'.
<
<
         WORD        LOC+'80         < VALEUR INITIALE DE LA BASE L.
         WORD        BRANCH          < VALEUR INITIALE DE LA BASE W.
EDIT:    EQU         $
         LRP         K
         ADRI        -1,K
         PLR         L,W             < INITIALISATION DE L ET W.
         LB          APILE
         LR          B,K             < INITIALISATION DE K.
<
<
<        I N I T I A L I S A T I O N   D E   E D  :
<
<
<        NOTA IMPORTANT :
<                      ON SE CONTENTE D'ENVOYER LE CURSEUR
<                    HOME SANS TOUCHER NI AU CONTENU
<                    DE L'ECRAN , NI A CELUI DE L'ITEM.
<
<
<        MODES D'APPEL :
<                    1- PAR !GE : ON SE CONTENTE DE SELECTER
<                    L'ITEM1 , ET D'ENVOYER LE CURSEUR HOME.
<                    2- PAR 'EI' : C'EST LE MODE AUTOMATIQUE ; LE
<                    1ER CARACTERE DE L'ITEM1 INDIQUE L'ACTION
<                    A ENTREPRENDRE AVANT L'EDITION DE ITEM1 :
<                            CARACTERE0="." : 'POINT' DE RAZ VANT ,
<                            CARACTERE0#"." : RAZ AVANT L'EDITION.
<
<
E13:     EQU         $
         LAI         6
         STBY        DEMSGN          < DEMSGN EST MISE MODE 'LOAD' SOUS
                                     < LE NUMERO DE COMPTE ':SYS'.
         LX          MODCAL,W        < RECUPERATION DE L'IDENTIFICATEUR
                                     < DE L'APPELANT (0 : GE , 1 : EI).
         LA          &NCALL          < RECUPERATION DE LA BRANCHE DE
                                     < RETOUR (QUI EST D'AILLEURS
                                     < AUSSI CELLE D'APPEL ...)
         STA         0,W             < MISE DU NOM DE 'GE    ' EN
                                     < TETE DE LA BRANCHE D'OVERLAY.
         CPZR        X               < TEST DU MODE D'APPEL.
         JE          E401            < CAS D'UN APPEL PAR !GE.
<
< ACS DES APPELS AUTOMATIQUES ('EI') :
<
         LXI         0
         LBY         &AIC            < ACCES AU 1ER CARACTERE DE
                                     < L'ITEM1 ; IL INDIQUE S'IL FAUT
                                     < ARZER L'ECRAN AVANT L'EDITION.
         CPI         "."
         JNE         E401            < CE N'EST PAS "." , ON RAZERA
                                     < DONC L'ECRAN AVANT L'EDITION.
         LAI         5               < CAS DU "." : ON FAIT A=CTRL-E.
         STA         XEDIT           < XEDIT=CTRL-E : AINSI , ON NE
                                     < FERA PAS DE RAZ DE L'ECRAN
                                     < AVANT L'EDITION.
E401:    EQU         $
         LAI         1
         STA         DEMIN           < RESTAURATION DE DEMIN AU CAS
         STBY        DEMIN           < OU UN ALT-MODE MAL PLACE (ENTRE
                                     < UN DC ET UN IC) AURAIT ETE
                                     < ENVOYE....
<
< INITIALISATION DE L'ITEM COURANT :
<
         BR          ITEMC           < DEPART SUR ITEM1.
         PAGE
<
<
<        L I S T E   D E S   C O M M A N D E S  :
<
<
<        COMPACTAGE DESSIN           CTRL-SHIFT-K SUIVI DE '%' OU 'K'
<        COMPACTAGE 'SPACE'          CTRL-SHIFT-L
         IF          IPACK,,X100,
<        COMPACTAGE TEXTE            CTRL-P
X100:    VAL         0
<        (TEXTE ET DESSIN DANS L'ITEM COURANT)
<        CURSEUR EN BAS              CTRL-J
<        CURSEUR A DROITE            CTRL-I
<        CURSEUR A GAUCHE            CTRL-H
<        CURSEUR EN HAUT             CTRL-K
<        DESCENTE DES EXPOSANTS      CTRL-G
<        EDITION DE L'ITEM           CTRL-E
<        EFFACER L'ECRAN             CTRL-C
<        EXPOSANT                    CTRL-U
<        FIN D'UNE CHAINE            CTRL-Q
<        HOME (CURSEUR)              CTRL-Z
<        ITEM REDUIT ET RETOUR 'GE'  CTRL-SHIFT-M
<        LIGNE                       CTRL-L
<        MOUVEMENT DE CHAINE         CTRL-SHIFT-O
<        ORIGINE D'UNE CHAINE        CTRL-O
<        RAZ DE L'ITEM               CTRL-R CTRL-R
<        REPEAT CARACTERES           CTRL-X SUIVI D'UN NOMBRE BASE 36
<        ID. JUSQU'EN BOUT DE LIGNE  CTRL-Y
<        RETOUR A !GE                CTRL-F
<        RETOUR AU CCI               CTRL-W
<        RETOUR AU TYPE 'TEXTE'      CTRL-S
<        RETURN                      CTRL-M
<        SELECTION ITEM1             CTRL-A
<        SELECTION ITEM2             CTRL-B
<        TEST ITEM COURANT           CTRL-T
         IF          IADR,X100,X100,
<        SELECTION ADRESSE           CTRL-D
<        CHAINAGE DANS LE DUMP       CTRL-SHIFT-N
X100:    VAL         0
         PAGE
<
<
<        B O U C L E   D E   L ' E D I T E U R  :
<
<
<        FONCTION CREATION/MAJ (APPEL PAR 'GE') :
<                      CETTE BOUCLE RECUPERE LES CARACTERES
<                    FRAPPES SUR LA VISU , ET EXECUTE CE
<                    QU'ELLE CROI ETRE BON POUR CHACUN
<                    D'EUX ....
<
<
<        FONCTION EDITION-AUTOMATIQUE (APPEL PAR 'EI') :
<                      DANS CE MODE , ON SE CONTENTE
<                    DE SIMULER LA RECEPTION DE CTRL-E ,
<                    PUIS CTRL-F , QUI PERMETTENT D'EDITER
<                    D'ABORD L'ITEM1 , PUIS DE FAIRE UN
<                    RETOUR A 'EI'.
<
<
<        REGISTRES :
<                    L=@LOCAL DE L'EDITEUR ,
<                    W=@BRANCHE D'OVERLAY.
<
<
LOOP:    EQU         $
         STZ         BUFOUT          < NETTOYAGE DU BUFOUT A PRIORI.
         STZ         DEMOUT+2        < A PRIORI PAS DE CARACTERES A
                                     < RENVOYER A L'UTILISATEUR AU
                                     < RETOUR DE LA BOUCLE (LOOPB).
<
< TEST DU MODE D'APPEL :
<
         CPZ         MODCAL,W        < SI MODCAL=0 : APPEL PAR 'GE'.
         JE          E300            < 'GE' ETANT L'APPELANT , IL
                                     < S'AGIT D'UNE CREATION/MAJ.
<
<        M O D E   E D I T I O N   A U T O M A T I Q U E  :
<
         LX          XEDIT           < RECUPERATION DE LA COMMANDE
                                     < SIMULEE : CTRL-E LA 1ERE FOIS.
                                     < (CTRL-F LA 2EME ...)
         IC          XEDIT           < PASSAGE A UN CTRL-F LA 1ERE FOIS.
<        NOTA :
<                    ON EST SUR ITEM1 .(PAR INITIALISATION).
         BR          &ACOM           < VERS L'EXECUTION DE CTRL-E AU
                                     < 1ER PASSAGE ET CTRL-F AU SECOND.
<
<        M O D E   C R E A T I O N / M A J  :
<
E300:    EQU         $
         CPZ         REPEAT          < Y-A-T'IL UN REPEAT EN COURS ???
         JE          E2              < NON.
<
<        C A S   D E S   R E P E A T   E N   C O U R S  :
<
         JL          E17             < C'EST UN REPEAT INFINI.
         DC          REPEAT          < DECREMENTE LE NBRE DE REPEATS
                                     < RESTANT A FIARE LORS D'UN
                                     < REPEAT N FOIS.
         JE          E2              < ET BIEN VOILA , IL EST TERMINE ,
                                     < ON FAIT DONC COMME S'IL N'Y AVAIT
                                     < PAS DE REPEAT.
<
< EXECUTION D'UN REPEAT :
<
E17:     EQU         $
         LBY         BUFIN           < RECUPERATION DU CARACTER
                                     < A REPETER COMME SI ON L'AVAIT LU.
         BSR         ASTKO           < LE CARACTERE A REPETER EST
                                     < MIS DANS BUFOUT , EN EFFET ,
                                     < N'AYANT PAS ETE REELLEMENT
                                     < LU , IL N'Y A PAS EU D'ECHO ,
                                     < IL FAUT DONC LE FAIRE .....
         SWBR        A,A             < RESTAURE A=CARACTERE A REPETER.
         JMP         E3              < VERS L'EXECUTION.
<
<        E N T R E E   C A R A C T E R E  :
<
E2:      EQU         $
         LAD         DEMIN
         BSR         ASVC            < LECTURE 1 CARACTERE AVEC ECHO.
         IC          KCTRL           < KCTRL=NUMERO DE LA COMMANDE
                                     < COURANTE (POUR LES TESTS CTRL-R).
         LBY         BUFIN           < A=CARACTERE LU.
<
< EXECUTION :
<
E3:      EQU         $
         CPI         '20             < DISCRIMINATION CARACTERES/
                                     < FONCTIONS (CTRL-XXX).
         JGE         E4              < CAS DES CARACTERES.
<
<
<        C A S   D E S   F O N C T I O N S   C T R L - X X X  :
<
<
         LR          A,X             < X=FONCTION DEMANDEE.
         BR          &ACOM           < EXECUTION SPECIFIQUE.
<
<
<        C A S   D E S   C A R A C T E R E S  :
<
<
E4:      EQU         $
<        ON A ICI :
<                    A=CARACTERE LU , OU A REPETER.
         OR          UP              < MISE EN EXPOSANT EVENTUELLEMENT.
         LX          ZC              < X=INDEX LINEAIRE DE L'ITEM.
         STBY        &AIC            < LE CARACTERE EST MIS DANS L'ITEM
                                     < COURANT EN ZC.
         JMP         CUIC            < ON FAIT COMME SI ON AVAIT
                                     < RECU UN CTRL-I (TABULATION).
<
<
<        R E T O U R   B O U C L E   E D I T E U R  :
<
<
LOOPB:   EQU         $
         CPZ         DEMOUT+2        < Y-A-T'IL QUELQUE CHOSE A
                                     < ENVOYER A L'UTILISATEUR ????
         JE          LOOP            < NON RETOUR A LA BOUCLE.
<
<        E N V O I   C A R A C T E R E ( S )  :
<
         LAD         DEMOUT
         BSR         ASVC            < ENVOI DE 1 OU 2 CARACTERES.
         JL          LOOP            < OK , RETOUR A LA BOUCLE.
<
< CAS D'UN RETOUR POUR CTRL-X-OFF :
<
         JE          E10             < LE CTRL-X-OFF A EU LIEU PENDANT
                                     < L'ENVOI DU OU DES CARACTERES
         BSR         ASVC            < DANS LE CAS D'UN CTRL-X-OFF AVANT
                                     < L'ENVOI ON RECOMMENCE AFIN
                                     < DE NA PAS AVOIR DE DIFFERENCES
                                     < DE POSITIONNEMENT DU CURSEUR
                                     < ENTRE L'EDITEUR ET LA VISU.
E10:     EQU         $
         STZ         REPEAT          < LORSQU'UN CTRL-X-OFF A ETE
                                     < RECU , ON RAZE A PRIORI L'
                                     < EVENTUEL REPEAT EN COURS.
         JMP         LOOP            < VERS LA BOUCLE.
         PAGE
<
<
<        F O N C T I O N S   D E P L A C E M E N T
<        D U   C U R S E U R   A L P H A - N U M E R I Q U E  :
<
<
<        C A R R I A G E   R E T U R N  :
<
<
CURC:    EQU         $
CUCR:    EQU         CURC
         STZ         XC              < RETOUR EN DEBUT DE LIGNE.
         JMP         MAJZ            < MAJ DE L'INDEX LINEAIRE ZC.
<
<
<        L I N E - F E E D  :
<
<
CULF:    EQU         $
         IC          YC              < PASSAGE A LA LIGNE SUIVANTE.
         LA          YC              < VALIDATION DE LA LIGNE DE
                                     < NUMERO (YC).
         CPI         NBLIG           < EST-ON PASSE EN MARGIN RIGHT
                                     < LORS DE L'ECHO DE LINE-FEED ????
         JGE         CUHOME          < OUI , ON EST OBLIGE DE FAIRE
                                     < UN RETOUR HOME DU CURSEUR.
         LAI         '0A             < LINE-FEED DEVIENT LE NOUVEAU
                                     < CARACTERE REPETABLE.
<
< SAUVEGARDE DES CARACTERES REPETABLES :
<
E19:     EQU         $
         STA         SAVEK
<
< CALCUL DE L'INDEX LINEAIRE DE L'ITEM ZC :
<
MAJZ:    EQU         $
         LAI         NBCAR
         MP          YC
         LR          B,A
         AD          XC
         STA         ZC              < ZC=YC*NBCAR+XC.
         JMP         LOOPB           < VERS LE RETOUR DE LA BOUCLE
                                     < DE L'EDITEUR.
<
<
<        B A C K - S P A C E  :
<
<
CUHC:    EQU         $
         DC          XC              < RETOUR SUR LE CARACTERE PRECEDENT.
         JGE         E19             < OK , ON N'ETAIT PAS SUR LE 1ER
                                     < CARACTERE DE LA LIGNE ; CTRL-H
                                     < DEVIENT LE NOUVEAU CARACTERE
                                     < REPETABLE ..
         STZ         REPEAT          < DANS LE CAS OU LE CTRL-H A
                                     < ETE DEMANDE SUR LE 1ER CARACTERE
                                     < D'UNE LIGNE , ON RAZE A PRIORI
                                     < L'EVENTUEL REPEAT EN COURS ,
         LAI         '0D             < ET ON FAIT UN RETOUR EN DEBUT
                                     < DE LIGNE PAR UN RETOOUR-CHARIOT.
         BSR         ASTKO           < RC EST MIS DANS BUFOUT.
         JMP         CURC            < ON FAIT DONC COMME SI ON AVAIT
                                     < RECU UN RETOUR-CHARRIOT.
<
<
<        B A C K - L I N E  :
<
<
CUKC:    EQU         $
         DC          YC              < RETOUR SUR LA LIGNE PRECEDENTE.
         JGE         E19             < OK ON N'ETAIT PAS SUR LA 1ERE
                                     < LIGNE DE L'ECRAN , ALORS CTRL-K
                                     < DEVIENT LE NOUVEAU CARACTERE
                                     < REPETABLE.
         STZ         YC              < SI LE CTRL-K A ETE DEMANDE
                                     < SIUR LA 1ERE LIGNE DE L'ECRAN ,
                                     < IL A ETE INEFFECTIF , ON Y
                                     < RESTE DONC.
         STZ         REPEAT          < DE PLUS , ON RAZE A PRIORI
                                     < L'EVENTUEL REPEAT EN COURS.
         JMP         LOOPB           < ET C'EST TOUT , CAR CTRL-K A ETE
                                     < AUSSI INEFFECTIF SUR L'ECRAN.
<
<
<        T A B U L A T I O N   E T   C A R A C T E R E S  :
<
<
CUIC:    EQU         $
         IC          ZC              < PASSAGE SUR LE CARACTERE SUIVANT.
         LA          ZC              < VALIDATION DE L'INDEX LINEAIRE.
         CP          NCP             < ETAIT-ON AU BOUT DE LA PAGE ????
         JGE         CUHOME          < DANS LE CAS OU ON ETAIT EN
                                     < BOUT DE PAGE , IL FAUT RENVOYER
                                     < LE CURSEUR HOME.
<
< CALCUL DE XC ET YC :
<
E9:      EQU         $
         LR          A,B             < B=(ZC).
         LAI         0
         DV          NCL
         STA         YC              < YC=QUOTIENT(ZC/NCL).
         STB         XC              < XC=RESTE(ZC/NCL).
         LBY         BUFIN           < CTRL-I OU LE <CARACTERE>
                                     < DEVIENT LE NOUVEAU CARACTERE
                                     < REPETABLE.
         STA         SAVEK
         JMP         LOOPB           < VERS LE RETOUR DE LA BOUCLE
                                     < DE L'EDITEUR.
<
<
<        F O N C T I O N   E R R E U R  :
<
<
ERREUR:  EQU         $
         LAI         '07             < CODE DE LA CLOCHE.
         BSR         ASTKO           < QUE L'ON MET DANS BUFOUT POUR
                                     < ENVOI A L'UTILOSATEUR.
<
<
<        C U R S E U R   H O M E  :
<
<
CUHOME:  EQU         $
         STZ         REPEAT          < RAZE A PRIORI L'EVENTUEL
                                     < REPEAT EN COURS.
         LAI         '60             < CARACTERE D'EXTENSION D'ENVOI
                                     < HOME DU CURSEUR.
         BSR         ASTKO           < LE CARACTERE HOME EST MIS DANS
                                     < BUFOUT.
<
< REINITIALISATION DES COORDONNEES DU CURSEUR :
<
E16:     EQU         $
         STZ         XC              < XC=0.
         STZ         YC              < YC=0.
         STZ         ZC              < ZC=0.
         JMP         LOOPB           < VERS LE RETOUR DE LA BOUCLE DE
                                     < L'EDITEUR.
         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  :
<
<
X12:     EQU         ZERO+PILE-LTNI-LTNI < @ITEM2.
X10:     VAL         X12-$           < CETTE CONSTANTE DOIT ETRE
                                     < POSITIVE OU NULLE.
ZEROV:   EQU         ZERO+X10        < ERREUR D'ASSEMBLAGE S'IL Y
                                     < A 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.