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-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2024.