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#