PAGE IDP "EDIT - RELEASE 14/08/1974" IDP "JOHN F. COLONNA" < < < P R O C E S S E U R D ' E D I T I O N D E P A G E : < < < FONCTION : CE PROCESSSEUR DANS SA VERSION PROVISOIRE < A A SA CHARGE L'EDITION D'UNE PAGE AU SENS DE < L'EDITEUR DE TEXTE CLASSIQUE , MAIS OU L'ON A < RAJOUTE UNE 2EME DIMENSION : C'EST LA PAGE. < IL GERE DONC UNE MATRICE QUI CONTIENT LA PAGE < QUE L'ON EDITE. < < < POSSIBILITES : L'EDITION SE FAIT PAR MOUVEMENT DU < CURSEUR DANS LES 4 DIRECTIONS N,S,W,E (!!!!) , < AVEC LES TOUCHES SUIVANTES : < N : CTRL-K , < S : LF OU CTRL-J , < W : CTRL-H , < E : CTRL-I. < LES MOUVEMENTS DU CURSEUR N'AFFECTE PAS LES < CARACTERES DE LA PAGE ; LORSQU'ENSUITE ON FRAPPE < DES CARACTERE STANDARDS , ILS SONT INSERES < A LA POSITION COURANTE DU CURSEUR . A NOTER QUE LE < MARGIN RIGHT A ETE SUPPRIME. < LA SUPPRESSION DE CARACTERES SE FAIT AVEC LA < BARRE 'SPACE' (ET C'EST LA SA DIFFERENCE AVEC < CTRL-I.....). < < NBCAR: VAL 74 < NBRE DE CARACTERES PAR LIGNE. NBLIG: VAL 35 < NBRE DE LIGNES PAR PAGE. < < PROG DZS 'B ASCI "ED " < NOM DU PROCESSEUR : 'ED '. BYTE '04;'D0 < <EOT>-'P'+'80. WORD '1F00 < TAILLE OCTETS POUR CALLP. WORD PEDIT < @DE LANCEMENT DE EDIT POUR CALLP. WORD LEDITP+'80 < ADRESSE DU LOCAL DU PROCESSEUR. < < E N T R Y D U P R O C E S S E U R : < PEDIT: EQU $ LRP L LA -1,L LR A,L < L=@LOCAL DU PROCESSEUR. WORD '8580 < BRANCHEMENT SUR '80,L ... PAGE < < < L O C A L D E L ' E D I T E U R : < < LOCAL LEDITP: EQU $ WORD EDITP < ADRESSE DU POINT D'ENTREE DU < PROCESSEUR. POINTC: DZS 3 < A T T E N T I O N : DOIT ETRE < A UNE ADRESSE IMPAIRE (CF. < LES INVERSIONS X ET Y EN < GRAPHIQUE) !!!!!!!!!!!!! RESTAR: WORD -1 < RESTAR=-1 : LE CHARGEMENT < A EU LIEUR ; < RESTAR=0 : APRES CHARGEMENT , < PERMET DONC DE RE- < RENTRER SUITE A UN < 'ALT-MODE'. < < D E M A N D E S A D R E S S E E S A M S P : < CHOME: WORD '0202 < ENVOI DU CURSEUR EN 'HOME'. WORD MHOME < ASTUCE ....!!??9!? WORD 1 < 1 CARACTERE (''HOME''). ERASE: WORD '0205 < ERASE SCREEN. CARTE: WORD '0A00 < ENTREE DE LIGNES ENTIERES < SUR NVP=10. WORD 0 WORD 80 < ET NON PAS 'NBCAR' , ET CECI < A CAUSE DU MICRO-CANAL .... MESGI: WORD '0100 < ENTREE D'1 CARACTERE SANS ECHO. WORD MESG WORD 1 MESGO: WORD '0202 < ECHO EVENTUEL DU CARACTERE LU. WORD MESG WORD 1 LIGN: WORD '0202 < EDITION D'UNE LIGNE DE LA PAGE. WORD 0 WORD NBCAR CCI: WORD '0001 < RETOUR AU CCI EN FIN D'EDITION. OG: WORD '0203 < OPEN GRAPHIQUE. CG: WORD '0204 < CLOSE GRAPHIQUE. WG: WORD '020A < ECRITURE GRAPHIQUE. WORD COORD WORD 4 < ENVOI DES COORDONEES DU CURSEUR < ALPHA-NUMERIQUE. CU: WORD '0106 < MISE EN FONCTION DU CURSEUR < GRAPHIQUE. WORD 0;0 LG: WORD '0109 < LECTURE DES COORDONNEES DU < CURSEUR GRAPHIQUE. WORD POINTC WORD 6 < 6 OCTETS A LIRE. LTAGR: VAL '140 < NBRE MAX DE SEGMENTS < AUTORISES LORS D'UNE EDITION < GRAPHIQUE. SPAGE: WORD '0002 < POUR OPERATIONS SUR L'ARBRE < DU SYSTEME. WORD PAGE X40: VAL 8*LTAGR X40: VAL 80-NBCAR+X40 < A CAUSE DE 'CARTE' QUI LIT 80 < CARACTERES PAR LIGNE DE PAGE ?!!! WORD NBCAR*NBLIG+X40 X40: VAL X40-80+NBCAR < RESTAURE X40=8*LTAGR. WORD -1 < VALEUR SUIT IMMEDIATEMENT NOM. SCATAL: WORD '0002 < POUR DEMANDE CATALOGUE DES NOMS. WORD 0 < @OCTET DU NOM. WORD 0 < LONGUEUR DU NOM. WORD -1 < VALEUR SUIT IMMEDIATEMENT NOM. PUNCH: WORD '0B02 < ECRITURE SUR NVP=11 (CU COUPLE < A LA PERFORATRICE. WORD 0 < @-OCTET DE BPUNCH. WORD 2 < 1 MOT D'INFORMATION A ENVOYER. SLEEP: WORD '0005 < FONCTION DE MISE EN SOMMEIL < EDIT LORS DU PUNCH DES CARTES. WORD 0 WORD 4 < 4 SECONDES DE SOMMEIL. < < C O N S T A N T E S D E L ' E D I T E U R : < AFEDIT: WORD FEDIT,X < RELAI VERS LA TABLE DE COMMANDE < DE L'EDITEUR. COG: WORD TCOG,X < RELAI DE LA TABLE DES FONCTIONS < GRAPHIQUES. ATCOD: WORD TCOD,X < TABLE DE CODAGE ASCI EN CODE < CARTE (COMPATIBLE LECTEUR DE < DE CARTES). ADPAGE: WORD PAGE < @PAGE ALPHA-NUMERIQUE. APAGE: WORD 0 < RELAI DE TRAVAIL SUR UNE LIGNE < DE LA PAGE. ATAGR: WORD TAGR < @TABLE DES SEGMENTS. ALTAGR: WORD LTAGR < NBRE D'ENTREES DE TAGR. < REPEAT: BYTE 0;"?" < VALEUR INITIALE. DOG: WORD 0 < COMPTEUR DE REPEATS EN ALPHA- < NUMERIQUE DANS LE MODE CTRL-A. < DOG=0 : PAS DE REPEAT EN COURS , < DOG<0 : REPEAT A L'INFINI. < DOG>0 : REPEAT 'DOG' FOIS. PKC: WORD 0 < RANG 1ER CARACTERE DE LA CHAINE < COURANTE. DKC: WORD 0 < RANG DU DERNIER CARACTERE DE < LA CHAINE COURANTE. IMOV: WORD 0 < INCREMENT/DECREMENT LORS DU MOVE < D'UNE CHAINE .(+1/-1). VAR: WORD 0 < DESTINE AUX EFFACEMENTS SEGMENT. BPUNCH: EQU VAR < BUFFER DE PUNCH. VARY: WORD 0 < CTTE DE TRANSLATION DE Y. LASTP: EQU VARY < DERNIER CARACTERE PUNCHE. VARX: WORD 0 < CTTE DE TRANSLATION DE X. GRAFP: WORD -1 < SI <0 : GRAPHIQUE INTERACTIF , < SI >=0 : DONNE L'INDEX DE LA < COMMANDE COURANTE < GRAPHIQUE DANS 'PAGE'. LGRAFP: VAL 10 < LONGUEUR DE LA PILE DES GRAFP. SGRAFP: BYTE LGRAFP;0 DZS LGRAFP+1 < ZONE D'EMPILEMENT DES GRAFP. CTRL: WORD 0 < CTRL=0 : CAS GENERAL , < CTRL=-'40 : LA COMMANDE GRAPHIQUE < SUIVANTE SERA < CONSIDEREE COMME < UN CTRL-XXX. SCALE: WORD 2 < FACTEUR D'ECHELLE INITIAL. SCAL13: WORD 0 < SI #0 : INVERSION DE '1' ET '3'. SCAL24: WORD 0 < SI #0 : INVERSION DE '2' ET '4'. SCAL56: WORD 0 < SI #0 : 2NVERSION DE '5' ET '6'. SCALXY: WORD 0 < SI #0 : INVERSION DE X ET DE Y. FIS: BYTE 0;'3E < '>' IMPLICITE. KNUMER: WORD '1000 < NUMERATEUR D'UN RAPPORT. KDENOM: WORD '1000 < DENOMINATEUR D'UN RAPPORT. SUP: WORD 0 < INDICATEUR DE POSITION HAUTE < SUR UNE LIGNE : < SUP=0 : LE CARACTERE SUIVANT < SERA SUR LA LIGNE , < SUP='80 : LE CARACTERE SUIVANT < SERA 10 POINTS AU- < DESSUS DE LA LIGNE. MEMO: WORD 0 < LE BIT0 INDIQUE S'IL FAUT < MEMORISER UN SEGEMENT (0) , < OU PAS (1). YC: WORD 0 < Y DU CENTRE DU CERCLE. XC: WORD 0 < X DU CENTRE DU CERCLE. YK: WORD 0 XK: WORD 0 < ASVC: WORD ESVC < APPEL DE MSP. ABELL: WORD BELL < ENVOI D'UNE 'BELL' A L'UTILISATEUR ASAVEK: WORD SAVEK < SAVE CARACTERE EN VUE DES REPEAT. ASP1: WORD SP1 < ROUTINE DE RAZ DE LA PAGE ALPHA. ASP2: WORD SP2 < ROUTINE DE MAJ DE SCATAL. ADIV: WORD DIV < UTILISE POUR LES CERCLES. AINIP: WORD INIP < INITIALISATION DE LA PAGE. AE40: WORD E40 < ERREUR EDITEUR GRAPHIQUE. AE42: WORD E42 < BOUCLE DE L'EDITEUR GRAPHIQUE. ACTAGR: WORD CTAGR < CLEAR TABLE DES SEGMENTS. AGRAFP: WORD PGRAFP < ROUTINE DE CALCUL DE Y=@SGRAFP. ASEEKS: WORD SEEKS < RECHERCHE SEGMENT DANS TAGR. AMPC: WORD MPC AROTAT: WORD ROTAT < ROTATION D'UN POINT. ATRANS: WORD TRANS < TRANSLATION D'UN POINT. AHOMOT: WORD HOMOT < @ROUTINE HOMOTHETIE 1 POINT. ASP: WORD 0 < ROTATION OU TRANSLATION 1 POINT. ATSE: WORD TSE < TEST DE SORTIE DE L'ECRAN. ALOOP: WORD LOOP < RETOUR A LA BOUCLE DE L'EDITEUR. < C37: WORD NBCAR/2 < CONSTANTE MULTIPLICATIVE. C74: WORD NBCAR < CONSTANTE DE DIVISION. N3574: WORD NBCAR*NBLIG < NBRE DE CARACTERES PAR ECRAN. X41: VAL NBCAR*NBLIG/2 NMPP: WORD X41-1 < NBRE DEMOTS D'UNE PAGE-1. C1024: WORD 1024 R: WORD 61*524 RS2: WORD 61*524/2 COS: WORD 60*524 < COS(DTETA)=COS/R. SIN: WORD 11*524 < SIN(DTETA)=SIN/R. DIF: WORD 1*524 < DIF=R-COS. < < B U F F E R S E T M E S S A G E S : < MESG: BYTE '00;'07 < CARACTERE UTILISATEUR-'BELL'. MHOME: BYTE '60;0 < PSEUDO-CARACTERE 'HOME'. COORD: DZS 4 < ENVOI DES COORDONNEES < DU CURSEUR ALPHA-NUMERIQUE OU < OU DES COORDONNEES < D'UN SEGMENT. SEGC: EQU COORD < 4 MOTS CONTENANT LES COOR- < DONNEES DU SEGMENT COURANT. SEGV: DZS 2 MRCLF: BYTE '0D;'0A PILE: DZS 20 < PILE DE L'EDITEUR. PAGE < < T A B L E D E C O M M A N D E : < FEDIT: EQU $ WORD EERR < 0 , WORD AC < CTRL-A : REPEAT DU CARACTERE < PRECEDENT UN NBRE DE FOIS EGAL < A LA VALEUR REPRESENTEE PAR LE < CARACTERE QUI SUIVRA MOINS 1. WORD CACN < CTRL-B : CATALOGUE DES ACNS. WORD CATAL < CTRL-C : CATALOGUE DES NOMS. WORD STK < CTRL-D : <EON> , INSERE DANS < LA PAGE , COMME UN AUTRE CARACTERE WORD EDIT < CTRL-E : EDITION DE LA PAGE < COURANTE. WORD FIN < CTRL-F : RETOUR AU CCI , WORD GRAPH < '7 : CTRL-G : PASSAGE EN MODE < GRAPHIQUE. WORD HC < CTRL-H : CURSEUR W , WORD IC < CTRL-I : CURSEUR E , WORD LF < LF : CURSEUR S , WORD KC < CTRL-K : CURSEUR N , WORD LC < 'C : CTRL-L : DESIGNATION DU < 1ER CARACTERE DE < CHAINE COURANTE. WORD RC < RETOUR-CHARRIOT , WORD NC < 'E : CTRL-N : DESIGNATION DE < LA NOUVELLE ORIGINE < DE LA CHAINE < COURANTE. WORD OC < 'F : CTRL-O : POSITION HAUTE. WORD PC < ENTREE CARTES SUR NVP=10. WORD QC < '11 : CTRL-Q : QULEQUE-SOIT. WORD INIP < CTRL-R : REINITIALISATION DE LA < PAGE , WORD EERR < '13 : USAGE INTERDIT , CF. LE < CTRL-X-OFF. WORD TPAGE < TC : APPEL PAGE SOUS <ACNESC>. WORD SYSPAG < UC : APPEL PAGE SOUS :SYS. WORD EERR < CTRL-V : CF. TABULATION CMS4. WORD WPAGE < WC : SAUVEGARDE PAGE SUR DK. WORD DPAGE < XC : DELETE PAGE SUR DK. WORD YCD < '19 : CTRL-Y : SIGNE DIFFERENT. WORD ZC < '1A : CTRL-Z : REPEAT CARACTERE. WORD KCS < '1B : CTRL-SHIFT-K : IL N'EXISTE < PAS. WORD LCS < '1C : CTRL-SHIFT-L : DESIGNATION < DU DERNIER < CARACTERE DE < LA CHAINE < COURANTE. WORD MCS < '1D : CTRL-SHIFT-M : IL EXISTE. WORD NCS < '1E : CTRL-SHIFT-N : FLECHE < DROITE. WORD OCS < CTRL-SHIFT-O : PERFORATION < DE LA PAGE COURANTE SUR NVP=11. WORD STK < TOUS LES AUTRES CARACTERES SONT < RANGES A L'EMPLACEMENT DU CURSEUR < DANS LA PAGE COURANTE. WORD EERR < '21 : FAUX CARACTERE D'ERREUR. PAGE < < T A B L E D E C O M M A N D E G R A P H I Q U E : < TCOG: EQU $ WORD F13 < MODE NORMAL '1' ET '3'. < ('!'). WORD F24 < MODE NORMAL DE '2' ET '4'. < ('"'). WORD F31 < INVERSION DE '1' ET '3'. < ('#'). WORD F42 < INVERSION DE '2' ET '4'. < ('$'). WORD F56 < MODE NORMAL DE '5' ET '6'. < ('%'). WORD F65 < INVERSION DE '5' ET '6'. < ('&'). WORD E40 WORD FOUVR < SCALE<--(SCALE)+6. < ('('). WORD FFERM < SCALE<--(SCALE)-6. < (')'). WORD FSTAR < RETOURS AUX MODES NORMAUX : CF. < F13 & F24 & F56 & FXY. WORD FPLUS < SCALE<--(SCALE)+1 , 1 SI >128. < ('+'). WORD E40 WORD FMOINS < SCALE<--(SCALE)-1 , 128 SI =0. < ('-'). WORD E40 WORD FCTRL < TRANSFORMATION DE LA COMMANDE < GRAPHIQUE SUIVANTE EN UN CTRL-XXX. < ('/'). WORD F0 < X<--0 ; Y<--0. WORD F1 < X<--(X)+SCALE. WORD F2 < Y<--(Y)+SCALE. WORD F3 < X<--(X)-SCALE. WORD F4 < Y<--(Y)-SCALE. WORD F5 < X<--(X)+3*SCALE/4 , < Y<--(Y)+SCALE/4. WORD F6 < X<--(X)-3*SCALE/4 , < Y<--(Y)-SCALE/4. WORD F7 < SCALE<--4. WORD F8 < SCALE<--8. WORD F9 < SCALE<--16. WORD F2P < DESIGNATION D'UN PROGRAMME < GRAPHIQUE. WORD E40 WORD FINF < MISE EN MODE '<'. WORD E40 WORD FSUP < MISE EN MODE '>'. WORD FYX < INVERSION DE X ET DE Y. < ('?'). WORD FXY < MODE NORMAL DE X ET DE Y. < ('@'). WORD FA < DESIGNATION 1ER POINT SEGMENT. WORD FB < DESIGNATION 2EME POINT SEGMENT. WORD FC < TRACE DU CERCLE COURANT. WORD FD < AFFICHAGE TOUS SEGMENTS (DESSIN). WORD FE < EFFACEMENT SEGMENT DESIGNE. WORD FF < RETOUR A L'ALPHA-NUMERIQUE. WORD FG < EDITION DE LA GRILLE. WORD FH < HOMOTETHIE TABLE DES SEGMENTS. WORD FI < RAPPORT D'HOMOTETHIE<1. WORD FJ < MISE EN MODE GRAPHIQUE PROGRAMME. WORD FK < 2EME POINT D'UN SEGMENT (ETOILE). WORD FL < TRACER CERCLE DANS LE SENS TRIGO. WORD FM < MODE MEMORISATION DES SEGMENTS. WORD FN < MODE NON MEMORISATION SEGMENTS. WORD FO < DESIGNATION CENTRE DU CERCLE. WORD FP < RAPPORT D'HOMOTHETIE=-1 (SYM.). WORD FQ < ROTATION TABLE DES SEGMENTS. WORD FR < TRACER ANTI-TRIGO D'UN CERCLE. WORD FS < DESIGNATION DU SEGMENT COURANT. WORD FT < TRANSLATION DU SEGMENT COURANT. WORD FU < RAPPORT D'HOMOTETHIE>1. WORD FV < TRANSLATION TABLE DES SEGMENTS. WORD FW < DESSIN COUBE !?!?!?!?! WORD FX < EFFACEMENT DE L'ECRAN. WORD FY < FIN DU MODE GRAPHIQUE PROGRAMME. WORD FZ < RAZ DE LA TABLE DES SEGMENTS. NCOG: VAL $-TCOG < NBRE DE FONCTIONS GRAPHIQUES. PAGE < < < T A B L E D E C O D A G E C A R T E S : < < < FORMAT : < BIT0-11=CODE 12 BITS DE PERFORATION , < BIT14=1 : CARACTERE NUMERIQUE , < BIT15=1 : CARACTERE ALPHA-BETIQUE. < < TCOD: EQU $-'20+1 WORD '2121 < EOT 4 (TRANSPOSE EN 1F) WORD '0000 < 'SPACE 20 WORD '4821 < ! 21 WORD '0061 < " 22 WORD '0421 < # 23 WORD '4421 < $ 24 WORD '2222 < % 25 WORD '8001 < & 26 WORD '0121 < ' 27 WORD '8121 < ( 28 WORD '4121 < ) 29 WORD '4222 < * 2A WORD '80A1 < + 2B WORD '2421 < , 2C WORD '4002 < - 2D WORD '8421 < . 2E WORD '3002 < / 2F WORD '2001 < 0 30 WORD '1001 < 1 31 WORD '0801 < 2 32 WORD '0401 < 3 33 WORD '0201 < 4 34 WORD '0101 < 5 35 WORD '0081 < 6 36 WORD '0041 < 7 37 WORD '0021 < 8 38 WORD '0011 < 9 39 WORD '0821 < : 3A WORD '40A1 < ; 3B WORD '8222 < < 3C WORD '00A1 < = 3D WORD '20A1 < > 3E WORD '2061 < ? 3F WORD '0222 < @ 40 WORD '9002 < A 41 WORD '8802 < B 42 WORD '8402 < C 43 WORD '8202 < D 44 WORD '8102 < E 45 WORD '8082 < F 46 WORD '8042 < G 47 WORD '8022 < H 48 WORD '8012 < I 49 WORD '5002 < J 4A WORD '4802 < K 4B WORD '4402 < L 4C WORD '4202 < M 4D WORD '4102 < N 4E WORD '4082 < O 4F WORD '4042 < P 50 WORD '4022 < Q 51 WORD '4012 < R 52 WORD '2802 < S 53 WORD '2402 < T 54 WORD '2202 < U 55 WORD '2102 < V 56 WORD '2082 < W 57 WORD '2042 < X 58 WORD '2022 < Y 59 WORD '2012 < Z 5A PAGE < < < R O U T I N E S D E L ' E D I T E U R : < < PROG PAGE < < < S A U V E G A R D E D E S C A R A C T E R E S < E N V U E D ' E V E N T U E L S R E P E A T S : < < < ARGUMENT : < A=CARACTERE. < < SAVEK: EQU $ STA REPEAT < SAVE CARACTERE COURANT EN VUE < D'UN EVENTUEL REPEAT. RSR PAGE < < < P E R F O R A T I O N D E L A P A G E < C O U R A N T E S U R N V P = 1 1 : < < < FONCTION : < AYANT HABILEMENT CONNECTE LA PERFO < HONEYWELL BULL SUR LE T1600 PAR < L'INTERMEDIAIRE D'UN COUPLEUR < UNIVERSEL , ON A LA POSSIBILITE DE < SAUVEGARDER LA PAGE COURANTE SUR < CARTES (QUEL PROGRES...). < ON PUNCHE 35 LIGNES , OU BIEN ON < S'ARRETE LORS DE LA RENCONTRE D'UN < 'EOT' EN COLONNE 74. < < OCS: EQU $ LA ADPAGE SBT 0 STA APAGE < GENERATION D'UN RELAI VERS LA < PAGE COURANTE. LXI 0 < INDEX CARACTERE COURANT DANS < LA PAGE. LBI NBLIG < B=NBRE DE CARTES MAX A PUNCHER. E410: EQU $ LYI NBCAR < Y=NBRE DE CARACTERES D'UNE < LIGNE DE PAGE. E411: EQU $ LBY &APAGE < A=CARACTERE COURANT A PUNCHER. STA LASTP < ET SAVE IT IN LASTP. CPI "Z" JLE E408 < OK , CODE RECONNU. LAI '20 < NON : REMPLCE PAR 'SPACE'. E408: EQU $ CPI 4 < EST-CE 'EOT' ????? JNE E409 < NON. < < TRAITEMENT SPECIAL DE L''EOT' : < LAI '20-1 < L''EOT' EST CONVERTI EN '1F. STZ LASTP < MEMORISONS 'EOT' PAR LASTP=0. E409: EQU $ PSR X LR A,X < X=CODE ASCI DU CARACTERE. LA &ATCOD < A=CODE DE PERFORATION. PLR X STA BPUNCH < MISE DU CARACTERE DANS LE < BUFFER DE PERFORATION. LAD PUNCH BSR ASVC < ENVOI D'UN CARACTERE A LA PERFO. JANE E291 < RETOUR EN ERREUR : NVP NON < ASSIGNE , .... ADRI 1,X < CARACTERE SUIVANT. ADRI -1,Y < DECOMPTE DES CARACTERES SUR < LA LIGNE COURANTE. CPZR Y JNE E411 < LA LIGNE EST INCOMPLETE. < < CAS OU UNE LIGNE COMPLETE A ETE ENVOYEE , < COMPLETONS LA CARTE PAR 6 CARACTERES 'SPACE' : < (A NOTER QUE L'ON ENVOIE SYSTEMATIQUEMENT < 80 CARACTERES POUR EVITER LES PROBLEMES < DE SATURATION DE LA PERFO) < LYI 80-NBCAR < NBRE DE 'SPACE' A ENVOYER. STZ BPUNCH < BPUNCH='0000=CODE DU 'SPACE'. E412: EQU $ LAD PUNCH BSR ASVC < ENVOI D'UN 'SPACE'. ADRI -1,Y CPZR Y JNE E412 < TOUS LES 'SPACE' N'ONT PAS < ETE ENVOYES. < < LA CARTE A ETE EJECTEE AU CARACTERE 80 , < PASSONS A LA LIGNE SUIVANTE : < CPZ LASTP < TEST DU DERNIER CARACTERE CODE. JE E291 < C'ETAIT UN 'EOT' EN COLONNE 74. < ON ARRETE DONC LA LA PERFO. ADRI -1,B < SINON , DECOMPTE DES LIGNES < RESTANT A PUNCHER. LAD SLEEP BSR ASVC < MISE EN SOMMEIL POUR < 4 SECONDES (TEMPS DE PUNCH D'UNE < CARTE ... CPZR B JNE E410 < IL EN RESTE. JMP E291 < 35 LIGNES ONT ETE PUNCHEES. PAGE < < < C R E A T I O N D ' U N E L I G N E < A L P H A - N U M E R I Q U E A P A R T I R < D U N V P = 1 0 : < < < FONCTION : < CE MODULE LIT UN PAQUET DE CARTES < SUR NVP=10 , ET L'IMPLANTE DANS LA PAGE < ALPHA-NUMERIQUE COURANTE ; L'OPERATION < SE TERMINE A LA 35EME CARTE OU SUR < LA 1ERE CARTE CONTENANT UN 'EOT' < EN COLONNE 74. < < PC: EQU $ LY ADPAGE LR Y,B ADRI -1,Y < Y CONTIENT UNE ADRESSE MOT < QUI PERMETTRA D'ATTEINDRE LE < DERNIER CAREACTERE DE CHAQUE < LIGNE. ADR B,B < B=@OCTET DU BUFFER INITIAL. LXI NBLIG < NBRE MAX DE CARTES A LIRE. E290: EQU $ STB CARTE+1 < MAJ DE LA DEMANDE AVEC L'@ < OCTET DU BUFFER COURANT. LAD CARTE BSR ASVC JANE E291 < ABANDON SUR ERREUR. ADRI NBCAR,B < PROGRESSION DE L'@OCTET DU < BUFFER COURANT. ADRI NBCAR/2,Y < Y=@MOT DES 2 DERNIERS CARACTERES < DE LA LIGNE QUE L'ON VIENT < DE CREER. STY APAGE < GENERATION DU RELAI. LA &APAGE ANDI 'FF < ACCES AU DERNIER CARACTERE DE < LA LIGNE QUE L'ON VIENT DE CREER. CPI '04 < EST-CE 'EOT' ???? JE E291 < OUI , ARRET DE L'OPERATION , < ET RENVOI HOME DU CURSEUR. JDX E290 < CARTE SUIVANTE .... E291: EQU $ BSR ABELL < AVERTISSEMENT DE FIN D'OPERATION. JMP E72 < ARRET SUR LA 35EME CARTE ET < RENVOI HOME DU CURSEUR. PAGE < < T R A I T E M E N T D U C T R L - K : < < FONCTION : CETTE ROUTINE TRAITE LES < DEPLACEMENTS 'N' DU CURSEUR (LIGNE UP). < KC: EQU $ BSR ASAVEK < EN VUE D'UN EVENTUEL REPEAT. LAI 0 < PAS D'ECHO A PRIORI. CPZR Y < LE CURSEUR EST-IL DEJA SUR < LA 1ERE LIGNE DE L'ECRAN ??? JE E280 < OUI , IL Y RESTE (CF. LE HARD). < (ET SUPPRESSION D'UN EVENTUEL < REPEAT EN COURS ?!?!?!) ADRI -1,Y < LE CURSEUR REMONTE D'UNE LIGNE < DANS LA PAGE DANS LE CAS OU IL < N'ETAIT PAS SUR LA 1ERE LIGNE. E1: EQU $ LAD MESGO < DEMANDE DU CARACTERE CTRL-K. E2: EQU $ BR ALOOP < RETOUR A LA BOUCLE DE L'EDITEUR. < < T R A I T E M E N T D U R E T O U R - C H A R R I O T : < RC: EQU $ LXI 0 < RETOUR EN TETE DE LIGNE. JMP E1 < ALLONS DEMANDER L'ECHO DU CR. < < T R A I T E M E N T D U C T R L - H : < < FONCTION : CETTE ROUTINE TRAITE LES DEPLACEMENTS 'W' < DU CURSEUR. < HC: EQU $ CPZR X < EST-ON DEJA EN DEBUT DE < LIGNE ???? SI OUI , IL FAUT < INTERDIRE LE CTRL-H , CAR UNE < ERREUR < HARD SUR LES TEKTRO FAIT QU'UN < CTRL-H EN DEBUT DE LIGNE RAMENE < SUR L'AVANT-DERNIER CARACTERE < DE LA LIGNE , LE DERNIER < DEVENANT INACCESSIBLE !!! JE E280 < ENVOI D'UNE 'BELL' SANS ECHO. < (ET SUPPRESSION D'UN EVENTUEL < REPEAT EN COURS !!!). ADRI -1,X < SINON , LE CURSEUR RECULE D'UNE < POSITION. BSR ASAVEK < EN VUE D'UN EVENTUEL REPEAT. JMP E1 < VERS L'ECHO DU CTRL-H. < < T R A I T E M E N T D U C T R L - I : < < FONCTION : CETTE ROUTINE GERE LES DEPLACEMENTS < 'E' DU CURSEUR. < IC: EQU $ BSR ASAVEK < EN VUE D'UN EVENTUEL REPEAT. IC1: EQU $ < ENTREE POUR 'STK'. ADRI 1,X < DEPLACEMENT D'UNE POSITION A < DROITE DU CURSEUR. LR X,A CPI NBCAR < LE CURSEUR ETAIT-IL DEJA EN < BOUT DE LIGNE ?? JL E1 < NON , ALLONS REDEMANDER L'ECHO < DU CTRL-I. LXI 0 < DANS LE CAS OU LE CURSEUR ETAIT < DEJA EN BOUT DE LIGNE , ON FAIT < COMME LE HARD : RC+LF. JMP LF1 < APRES LE R/C (X=0) , LE LF .... < < < M I S E E N P O S I T I O N H A U T E : < < OC: EQU $ LAI '80 < POUR FAIRE MONTER LE BIT0 < DU CARACTERE SUIVANT. STA SUP JMP E24 < VERS LA BOUCLE DE L'EDITEUR < SANS ECHO. < < T R A I T E M E N T D E S L I N E - F E E D : < < FONCTION : CETTE ROUTINE TRAITE LES CARACTERES < 'LF' ET A A SA CHARGE D'EVITER QUE LA VISU NE < FASSE UN MARGIN RIGHT , PUISQU'ALORS REGNE UNE < VERITABLE PANIQUE AU AU POINT DE VUE GESTION DE LA < POSITION DU CURSEUR .... < LF: EQU $ BSR ASAVEK < EN VUE D'UN EVENTUEL REPEAT. LF1: EQU $ < ENTREE POUR 'IC'. ADRI 1,Y < PASSAGE A LA LIGNE SUIVANTE. LR Y,A CPI NBLIG < LE CURSEUR ETAIT-IL DEJA SUR LA < DERNIERE LIGNE DE LA PAGE ?? JL E1 < NON , ALLONS DEMANDER L'ECHO < DU LF , ON NE RISQUE RIEN .... LBY MESG < ACCES AU CARACTERE ENVOYE < PAR L'UTILISATEUR. CPI 'A < EST-CE LE LINE-FEED ???? JE E72 < OUI , RIEN A FAIRE ... < < CAS OU ON SIMULE UN LF EN BOUT DE PAGE : < LAD MESGO BSR ASVC < ECHO DU CARACTERE , AVANT DE < REVENIR HOME ...... E72: EQU $ LAD CHOME < DANS LE CAS OU ON ETAIT DEJA EN < BAS DE PAGE , ON VA REPOSITIONNER < LE CURSEUR DANS LA POSITION HOME. JMP E14 < ALLONS REINITIALISER LES COOR- < DONNEES DU CURSEUR. PAGE < < < R A N G E M E N T D E S C A R A C T E R E S : < < < FONCTION : CETTE ROUTINE RANGE DANS LA MATRICE < REPRESENTANT LA PAGE COURANTE LES < CARACTERES QUI NE SONT PAS DES CARACTERES < DE CONTROLE DE L'EDITEUR . LES CARACTERES DE CODE < SUPERIEURS SUPERIEURS A '1F SONT RANGES DONC < A LA POSITION COURANTE DU CURSEUR. < STK: EQU $ LR Y,A MP C37 < B=NUMERO DE LIGNE(Y)*37. LA ADPAGE < A=@PAGE ALPHA-NUMERIQUE. ADR B,A < A=@LIGNE COURANTE DE LA PAGE. SBT 0 < BIT D'INDEXATION. STA APAGE < GENERATION DU RELAI D'ACCES A < LA LIGNE COURANTE. LBY MESG < A=CARACTERE STANDARD DE < L'UTILISATEUR. TBT 9 < EST-CE UN CARACTERE COMPOSITE ??? JNC E30 < NON ,OK .... TBT 10 < EST-CE UN CARACTERE COMPOSITE ??? JC E29 < OUI , IL FAUT DONC TESTER LE X < DU CURSEUR. E30: EQU $ OR SUP < MISE EN PLACE DE L+ POSITION < HAUTE EVENTUELLEMENT. STZ SUP < RAZ DE L'INDICATEUR DE POSITION < HAUTE. STBY &APAGE < QUE L'ON RANGE DANS LA MATRICE < DANS LA POSITION (X,Y) SOIT < CELLE DU CURSEUR. BSR ASAVEK < EN VUE D'UN EVENTUEL REPEAT. JMP IC1 < PUIS ENSUITE TOUT SE PASSE COMME < SI L'ON TRAITAIT UN CTRL-I ..... < < CAS DES CARACTERES COMPOSITES : < UNE ANOMALIE DU CTRL-H , ET LE FAIT < QU'IL NE FASSE PAS REMONTER A LA LIGNE < PRECEDENTE LORSQU'ON L'EXECUTE ALORS QU'ON < EST EN DEBUT DE LIGNE , OBLIGE A INTERDIRE < LES CARACTERES COMPOSITES DANS LA CASE < 73 (DERNIER CARACTERE) DE CHAQUE LIGNE. < E29: EQU $ XR A,X CPI NBCAR-1 < TEST DU X DU CURSEUR. XR A,X JNE E30 < ON N'EST PAS EN BOUT DE LIGNE , < LE CARACTERE COMPOSITE EST DONC < ACCEPTABLE. < < CAS D'UN CARACTERE COMPOSITE EN BOUT DE LIGNE : < E280: EQU $ < ENTRY 'CTRL-H' ERRONNES. STZ DOG < SUPPRESSION DE L'EVENTUEL < REPEAT EN COURS. BSR ABELL < MESSAGE ERREUR A L'UTILISATEUR. JMP E24 < BOUCLE DE L'EDITEUR SANS ECHO. PAGE < < < R E P E A T C A R A C T E R E : < < < FONCTION : < CTRL-Z PERMET DE REPETER LE DERNIER < CARACTERE STANDARD ENTRE DANS L'EDITEUR. < LA REPETITION SE POURSUIT JUSQU'A CE QUE < L'UTILISATEUR ENVOIE UN CTRL-X-OFF. < CTRL-A PERMET LA REPETITION DU CARACTERE < PRECEDENT UN NBRE DE FOIS EGAL A LA VALEUR < REPRESENTEE PAR LE CARACTERE QUI SUIT LE CTRL-A < (SOIT '1'=1,'2'=2,...'A'=10,'B'=11,...) MOINS 1 , < AINSI : < '*<CTRL-A>3'='***'. < < ZC: EQU $ < ENTRY 'REPEAT A L'INFINI'. LAI -1 < AFIN DE METTRE DOG<0. JMP E400 AC: EQU $ < ENTRY 'REPEAT 'DOG' FOIS'. < A NOTER : AU PASSAGE DE 'LOOP' , < ON FAIT -1 SUR DOG ....(OK). LAD MESGI < AFIN DE LIRE UN CARACTERE. BSR ASVC < LECTURE D'UN CARACTERE. LBY MESG < A=CARACTERE LU , DONT LE CODE < EST LE NBRE DE REPETITIONS < A FAIRE +1. ADRI -'30,A < CONVERSION BINAIRE. JALE EERR < VALIDATION. CPI 9 < DISCRMINATION CHIFFRES/LETTRES. JLE E402 < C'EST UN CHIFFRE , OK. ADRI -'41+'39+1,A < CAS DES LETTRES. E402: EQU $ E400: EQU $ < TRONC COMMUN A AC ET ZC. STA DOG < MISE EN PLACE DE DOG. LA REPEAT < A=CARACTERE A REPETER. STBY MESG < QUE L'ON MET DANS MESG COMME < SI ON L'AVAIT LU .... JMP E24 < VERS LA BOUCLE DE EDIT SANS < ECHO EVIDEMMENT. PAGE < < < E R R E U R S U T I L I S A T E U R : < < EERR: EQU $ BSR ABELL < ENVOI D'UNE 'BELL' SUPPLEMENTAIRE E24: EQU $ LAI 0 < SUPPRESSION DE L'ECHO. BR ALOOP < RETOUR A LA BOUCLE DE L'EDITEUR. < < < E N V O I D ' U N E B E L L : < < < < < RESULTAT : < A=CONDITION DE RETOUR DU MSP ('13 SI CTRL-X-OFF). BELL: EQU $ LAD MESGO IC MESGO+1 < L'ADRESSE BUFFER DE MESG < PROGRESSS DE 1 POUR ACCEDER < A LA 'BELL'. BSR ASVC < ENVOI DE LA 'BELL'. DC MESGO+1 < RETOUR SUR LE CARACTERE < DE L'UTILISATEUR. RSR PAGE < < < M O U V E M E N T D E C H A I N E S < D E C A R A C T E R E S : < < < PHILOSOPHIE : < ON DISPOSE D'UNE CHAINE COURANTE DONT LE 1ER < CARACTERE EST DESIGNE PAR CTRL-L , ET LE < DERNIER PAR CTRL-SHIFT-L . ENSUITE LA COMMANDE < CTRL-N PERMET DE DEPLACER CETTE CHAINE < EN PRECISANT SA NOUVELLE ORIGINE . LES POSITIONS < DES CARACTERES SONT TOUJOURS DONNEES PAR LA < POSITION COURANTE DU CURSEUR . A NOTER QUE < LES DEPLACEMENTS DE CHAINES PEUVENT ETRE < EN RECOUVREMENT AVANT/ARRIERE. < < < < T R A I T E M E N T D E C T R L - L : < LC: EQU $ LR Y,A < A=Y DU CURSEUR. MP C74 ADR X,B < B=RANG DU 1ER CARACTERE DE LA < CHAINE COURANTE. STB PKC < ET SAVE IT. JMP E24 < GO BACK TO EDITOR LOOP ET CECI < SANS ECHO. < < T R A I T E M E N T D E C T R L - S H I F T - L : < LCS: EQU $ LR Y,A < A=Y DU CURSEUR. MP C74 ADR X,B < B=RANG DU DERNIER CARACTERE DE < LA CHAINE COURANTE. STB DKC < ET SAVE IT. JMP E24 < VERS LA BOUCLE DE L'EDITEUR < SANS ECHO. < < T R A I T E M E N T D E C T R L - N : < NC: EQU $ LA DKC SB PKC < A=LONGUEUR-1 DE LA CHIANE < COURANTE. JAGE E25 < OK , LE 1ER CARACTERE PRECEDE < OU RECOUVRE LE DERNIER CARACTERE. < < CAS DES DEMANDES ERRONNEES : < BSR ABELL < ENVOI D'1NE 'BELL' D'ERREUR. JMP E24 < BOUCLE EDITEUR , SANS ECHO. < < CAS DES DEMANDES CORRECTES : < E25: EQU $ PSR X,Y < SAVE COORDONNEE DU CURSEUR. < ON A ICI : < A=LONGUEUR-1 DE LA CHAINE COURANTE , < (X,Y)=COORDONNEE DU CURSEUR. XR A,Y < Y=LONGUEUR-1 ; A=Y DU CURSEUR. MP C74 ADR B,X < X=RANG DE LA NOUVELLE ORIGINE < DE LA CHAINE COURANTE. LR Y,B < B=LONGUEUR-1. LY PKC < Y=RANG DU 1ER CARACTERE. < ON A ICI : < B=LONGUEUR-1 DE LA CHAINE SOURCE , < X=RANG 1ER CARACTERE DE LA CHAINE DESTINATION , < Y=RANG 1ER CARACTERE DE LA CHAINE SOURCE. < < CHOIX DU SENS DE DEPLACEMENT : < LAI 1 < SENS CROISSANT A PRIORI. CPR X,Y < TEST DE LA POSITION RELATIVE < DES CHAINES SOURCES ET DESTINA- < TION. JE E27 < ELLES SONT CONFONDUES : RIEN < A FAIRE. JG E26 < LA CHAINE DESTINATION EST AVANT < LA CHAINE SOURCE. < < CAS OU LA CHAINE DESTINATION EST APRES LA CHAINE SOURCE : < DANS CE CAS , IL FAUT PROCEDER A L'ENVERS , < EN COMMENCANT PAR LE DERNIER CARACTERE. < ADR B,X < X=RANG DERNIER CARACTERE DE LA < CHAINE DE DESTINATION. ADR B,Y < Y=RANG DERNIER CARACTERE < DE LA CHAINE SOURCE. LAI -1 < ON SE DEPLACERA PAR VALEUR < DECROISSANTE D'INDEX. E26: EQU $ STA IMOV < SAVE INCREMENT/DECREMENT DES < INDEX X & Y (+1/-1). LA ADPAGE SBT 0 STA APAGE < GENERATION D'UN RELAI INDEXE < INDIRECT VERS LA PAGE COURANTE. < < BOUCLE DE MOUVEMENT : < E28: EQU $ XR X,Y < X=INDEX SOURCE. LBY &APAGE < ACCES A LA CHAINE SOURCE. XR X,Y < X=INDEX DESTINATION. TBT 9 JNC E33 < CARACTERE STANDARD. TBT 10 JNC E33 < CARACTERE STANDARD. < < CAS DES CARACTERES COMPOSITES : < PSR A,B LAI 0 LR X,B < INDEX COURANT DANS LA PAGE. DV C74 < LE RESTE (B) DONNE L'INDEX < DU CARACTERE COMPOSITE DANS LA < LIGNE COURANTE. LR B,A CPI NBCAR-1 < EST-ON EN BOUT DE LIGNE ??? PLR A,B JNE E33 < NON , OK LE CARACTERE COMPOSITE < EST DEPLACER COMME LES AUTRES. < < CAS D'UN CARACTERE COMPOSITE ARRIVANT EN < BOUT DE LIGNE (73) , ON LE REMPLACE PAR '?' : < LAI '3F < MISE DE '?' A LA PLACE. E33: EQU $ STBY &APAGE < RANGEMENT DE LA CHAINE DESTINATION. LA IMOV < ACCES A L'INCREMENT/DECREMENT. ADR A,X < X=X+-1. ADR A,Y < Y=Y+-1. LR X,A CP N3574 < TEST DE L'INDEX DE DESTINATION : < EVITER DE TOMBER HORS DE LA < PAGE PAR VALEUR SUPERIEURES. JGE E27 < DEBORDEMENT : LES CARACTERES < SUIVANTS SONT IGNORES. ADRI -1,B < DECREMENTATION DE LA LONGUEUR. CPZR B JGE E28 < IL EN RESTE A DEPLACER. < < C'EST LA FIN : < E27: EQU $ PLR X,Y < RESTAURE LES COORDONNEES < DU CURSEUR. JMP E24 < RETOUR A LA BOUCLE D'EDITION < SANS ECHO EVIDEMMENT ...... PAGE < < < I N I T I A L I S A T I O D E L A P A G E : < < INIP: EQU $ BSR ASP1 < RAZ DE LA PAGE ALPHA. < < ERASE DE L'ECRAN DE LA VISU : < LAD ERASE BSR ASVC < ERASE. LAI 0 < ON NE DEMANDE EVIDEMMENT PAS < D'ECHO. < < R E I N I T I A L I S A T I O N D E S < C O O R D O N N E E S D U C U R S E U R : < E14: EQU $ LXI 0 < CORRDONNEE X DU CURSEUR=0 , LYI 0 < CORRDONNEE Y DU CURSEUR=0. BR ALOOP < RETOUR A LA BOUCLE DE L'EDITEUR. PAGE < < < S O R T I E D E L ' E D I T E U R : < < FIN: EQU $ LAD CCI BSR ASVC < RETOUR AU CCI. LAD CHOME < ET RENVOI DU CURSEUR HOME. JMP E14 PAGE < < < E D I T I O N D E L A P A G E C O U R A N T E : < < EDIT: EQU $ LAD ERASE BSR ASVC < EFFACEMENT DE L'ECRAN. LYI NBLIG < Y=NBRE DE LIGNES A EDITER. LA ADPAGE SBT 0 E12: EQU $ STA APAGE < GENERATION DU RELAI D'ACCES < A LALIGNE COURANTE DANS LA < PAGE. SLLS 1 < A=@OCTET DE A LIGNE COURANTE. STA LIGN+1 < MAJ DE LA DEMANDE A MSP. LXI NBCAR-1 < NBRE DE CARACTERES MOINS 1 < DANS LA LIGNE. E57: EQU $ LBY &APAGE < ON PARCOURS LA LIGNE A L'ENVERS < DE FACON A TROUVER LE 1ER < CARACTERE QUI NE SOIT PAS < UN 'SPACE'. CPI '20 < EST-CE 'SPACE' ...??? JNE E58 < NON , ON ARRETE L'EXPLORATION < DE LA LIGNE A REBROUSSE POLI < AU 1ER CARACTERE NON BLANC. ADRI -1,X < DANS LE CAS DU 'SPACE' , ON < CONTINUE A REMONTER LA LIGNE. CPZR X JGE E57 < OK , IL Y A ENCORE DES < CARACTERES DANS LA LIGNE COURANTE < < CAS D'UNE LIGNE VIDE : < JMP E59 < ON NE VA QU'ENVOYER RC+LF. < < CAS D'UNE LIGNE NON VIDE : < E58: EQU $ < ON A ICI : < X=RANG DU 1ER CARACTERE NON BLANC. ADRI 1,X < X=NBRE DE CARACTERES UTILES < SUR LA LIGNE COURANTE. STX LIGN+2 < GENERATION DU COMPTE D'OCTETS < DANS LA DEMANDE A MSP .. STX VAR < AU CAS OU UNE EDITION PAR < CARACTERES SUIVRAIT ... < < CHOIX ENTRE L'EDITION HAUTE ET L'EDITION BASSE : < E63: EQU $ ADRI -1,X LBY &APAGE TBT 8 < ON REGARDE SI LA LIGNE < CONTIENT AU MOINS UN CARACTERE < EN POSITION HAUTE ???? JC EDITK < OUI , ON S'ARRETE SUR LUI , ET < ON VA EDITER LA LIGNE CARACTERE < PAR CARACTERE. CPZR X JG E63 < CARACTERE PRECEDENT. < < EDITION DE LA LIGNE : < LAD LIGN BSR ASVC < ECRITURE DE LA LIGNE. JGE E22 < DANS LE CAS OU L'UTILISATEUR < ENVOIE UN CTRL-X-OFF , ON < ABANDONNE L'EDITION. LA LIGN+2 < A=COMPTE D'OCTETS. E64: EQU $ CPI NBCAR < LA LIGNE ETAIT-ELLE PLEINE ???? JE E60 < OUI , RIEN A FAIRE. < < CAS D'UNE LIGNE INCOMPLETE , ON < ENVOIE UN RC+LF POUR PASSER A LA LIGNE < SUIVANTE : < E59: EQU $ LAD MRCLF < A=@MOT DU MESSAGE RC+LF. SLLS 1 STA LIGN+1 < MISE EN PLACE DE L'ADRESSE OCTE < DU MESSAGE RC+LF. LAI 2 STA LIGN+2 < MISE EN PLACE DU COMPTE OCTETS. LAD LIGN BSR ASVC < ENVOI DU RC+LF. JGE E22 < ABANDON SI CTRL-X-OFF RECU. < < PASSAGE A LA LIGNE SUIVANTE : < E60: EQU $ LA APAGE ADRI NBCAR/2,A < @MOT DE LA LIGNE SUIVANTE. ADRI -1,Y < NBRE DE LIGNES RESTANTES. CPZR Y JG E12 < PASSAGE A LA SUIVANTE. E22: EQU $ LAD CHOME < POUR L'ENVOI HOME DU CURSEUR. JMP E14 < ALLONS ENVOYER HOME LE CURSEUR < ALPHA-NUMERIQUE , ET RE-INITIA- < LISER SES COORDONNEES. PAGE < < < E D I T I O N D E L A L I G N E C O U R A N T E < P A R C A R A C T E R E S E N T E N A N T < C O M P T E D E L A P O S I T I O N H A U T E : < < EDITK: EQU $ < < INITIALISATION DE L'EDITION : < PSR Y STY COORD < FUTUR Y DU CURSEUR. LA APAGE < RECUPERATION DE L'ADRESSE MOT < DE LA LIGNE COURANTE DANS < LA PAGE. SLLS 1 < CONVERSION DE L'ADRESSE DE LA < PAGE EN UNE ADRESSE D'OCTETS. STA LIGN+1 LAI 1 STA LIGN+2 < ON VA EDITER LA PAGE CARACTERE < PAR CARACTERE !!!!!! LAI " " STBY MESG LXI 0 < INDEX DU 1ER CARACTERE. < < BOUCLE DE L'EDITION : < E19: EQU $ LBY &APAGE < ACCES A 1 CARACTERE. TBT 8 < TEST DU BIT DE POSITION HAUTE. JC E20 < LE CARACTERE DOIT ETRE EDITE < EN POSITION HAUTE. < < CAS D'UN CARACTERE SUR LA LIGNE : < LAD LIGN BSR ASVC < ENVOI DU CARACTERE. < UN CTRL-X-OFF A-T'IL ETE RECU < PENDANT L'EDITION DE LA PAGE ??? JGE E65 < OUI , ABANDON DE L'EDITION. E21: EQU $ < < PASSAGE AU CARACTERE SUIVANT : < IC LIGN+1 < PROGRESSION DE L'ADDRESSE < OCTET DU BUFFER. ADRI 1,X < INDEX DU CARACTERE SUIVANT. LR X,A CP VAR < A-T'ON ATTEINT LE DERNIER CARAC- < TERE SIGNIFICATIF DE LA LIGNE < COURANTE ???? JL E19 < NON , CONTINUONS .... PLR Y JMP E64 < OK , PASSAGE A LA LIGNE < SUIVANTE SANS OUBLIER L'EVENTUEL < RC+LF. < < ABANDON D'UNE EDITION SUITE A UN CTRL-X-OFF : < E65: EQU $ PLR Y JMP E22 < VERS L'ABANDON DE L'EDITION DE < LA PAGE. < < CAS D'UN CARACTERE EN POSITION HAUTE : < E20: EQU $ LR A,Y < SAVE LE CODE DU CARACTERE. ANDI '7F < RAZ DU BIT0 DU CARACTERE. STBY &APAGE < POUR PLAIRE AUX VISUS. STX COORD+1 < FUTUR X DU CURSEUR. LAI 14 < UN CARACTERE OCCUPE 14 POINTS < EN LARGEUR. MP COORD+1 STB COORD+1 < B=X GRAPHIQUE DU CURSEUR. LAI 22 < UN CARACTERE OCCUPE 22 POINTS < EN HAUTEUR. MP COORD ADRI 10,B < B=Y GRAPHIQUE DU CURSEUR , < AUGMENTE DE 10 POUR PASSER EN < POSITION HAUTE. LA COORD XR A,B < SAVE COORD DANS B. STA COORD < ON A DONC ICI : < COORD=Y GRAPHIQUE DU CURSEUR , < COORD+1=X GRAPHIQUE DU CURSEUR EN POSITION HAUTE. LAD OG BSR ASVC < MISE EN GRAPHIQUE DE LA VISU. LAD WG BSR ASVC < ENVOI DES COORDONNEES HAUTES < DU CURSEUR , POUR LE REPOSITIONNER LAD CG BSR ASVC < RETOUR EN ALPHA-NUMERIQUE , LE < CURSEUR EST MAINTENANT EN < POSITION HAUTE. LAD LIGN BSR ASVC < ECRITURE DU CARACTERE EN < POSITION HAUTE. LR Y,A STBY &APAGE < RESTAURE LE CARACTERE DANS LA < PAGE COURANTE. LA COORD ADRI -10,A < RESTAURATION DE LA POSITION < NORMALE DU CURSEUR AVANT < ECRITURE DU CARACTERE. STA COORD LAD OG BSR ASVC < RETOUR EN GRAPHIQUE. LAD WG BSR ASVC < RESTAURE CURSEUR AVANT ECRITURE < DU CARACTERE. LAD CG BSR ASVC < RETOUR EN ALPHANUMERIQUE. LAD MESGO BSR ASVC < POUR REPOSITIONNEMENT CORRECT < DU CURSEUR DERRIERE LE CARACTERE. STB COORD < RESTAURE LE NUMERO DE LIGNE (+35) JMP E21 < AU SUIVANT ..... PAGE < < < T R A I T E M E N T D E S C A R A C T E R E S < E X T E N S I O N C O M P O S I T E S : < < MCS: EQU $ < IL EXISTE. LAI '62 JMP E17 QC: EQU $ < QUELQUE-SOIT. LAI '63 JMP E17 NCS: EQU $ < FLECHE DROITE. LAI '67 JMP E17 KCS: EQU $ < IL N'EXISTE PAS. LAI '6A JMP E17 YCD: EQU $ < SIGNE DIFFERENT. LAI '6C E17: EQU $ STBY MESG < LE CARACTERE EXTENSION EST MIS < DANS MESG COMME SI L'UTILISATEUR < L'AVAIT ENVOYE. JMP E18 < FAISONS COMME SI L'ON AVAIT < RECU CE CODE ETENDU DE < L'UTILISATEUR. PAGE < < < A P P E L D E C M S 4 : < < < ARGUMENT : < A=@TABLE DES ARGUMENTS. < < < RESULTAT : < A=CONDITIONS D'EXECUTION ET DE RETOUR. < (EN PARTICULIER SI A='13 OU '93 , UN CTRL-X-OFF < A ETE RECU PENDANT L'OPERATION). < CARY=POSITIONNE EN FONCTION DE LA POSITION DE (A) < PAR RAPPORT A '13 POUR TEST EN RETOUR. < ESVC: EQU $ PSR X < SAVE COORDONNEE X DU CURSEUR. SVC 0 < APPEL DE MSP LR X,A < RENVOI DES CONDITIONS DANS A. PLR X CPI '13 < UN CTRL-X-OFF A-T'IL ETE RECU < PENDANT L'EXECUTION DU SVC. RSR PAGE < < < E D I T E U R D E P A G E : < < < CONVENTIONS DE L'EDITEUR : < 1- MARGIN RIGHT EST SUPPRIME , < 2- COORDONNEE DU CURSEUR : < X=COORDONNEE X DU CURSEUR , < Y=COORDONNEE Y DU CURSEUR. < < EDITP: EQU $ < < INITIALISATION DE LA PILE DE L'EDITEUR : < LAD PILE LR A,K < < MISE EN ADRESSE OCTET DES ADRESSES DE BUFFERS : < LAD POINTC SLLS 1 STA LG+1 LAD COORD SLLS 1 STA WG+1 LAD MESG SLLS 1 STA MESGI+1 STA MESGO+1 LAD MHOME SLLS 1 STA CHOME+1 LA ADPAGE SLLS 1 STA SPAGE+1 LAD BPUNCH SLLS 1 STA PUNCH+1 < < INITIALISATION GRAPHIQUE : < LA ATAGR LR A,W < W=@TAGR. < < TEST DE LA NATURE DE L'ENTREE : < (CHARGEMENT OU RESTART SUITE A 'ALT-MODE') < LA RESTAR JAE E16 < C'EST UNE RE-RENTREE : A=0=UNE < COMMANDE INTERDITE ; ON NE VA < DONC PAS RAZER NI LA PAGE , NI < LA TABLE DES SEGMENTS. IC RESTAR < APRES LE CHARGEMENT ON FAIT : < RESTAR=0. < < ENTREE SUITE AU CHARGEMENT : < BSR ACTAGR < CLEAR TABLE DES SEGMENTS. LAI '12 < ON COMMENCE , PAR UN FAUX CTRL-R , < QUI PERMET UNE INITIALISATION < DE LA PAGE ET DE L'ECRAN. JMP E16 < ALLONS EXECUTER LE 'RAZ' ... < < B O U C L E D E L ' E D I T E U R : < E10: EQU $ CPZ DOG < Y-AT'IL UN REPEAT EN COURS ??? JNE E31 < OUI , CAR DOG#0. < REPEAT EN COURS , ON NE VA DONC < PAS LIRE UN CARACTERE UTILISATEUR < MAIS FAIRE COMME SI ON AVAIT < RECU LE CARACTERE STANDARD < COURANT. LAD MESGI BSR ASVC < ENTREE D'UN CARACTERE UTILISATEUR. E31: EQU $ E34: EQU $ LBY MESG < ACCES AU CARACTERE ENVOYE PAR < L'UTILISATEUR. CPI '20 JL E16 < C'EST UN CARACTERE DE CONTROLE < DE L'EDITEUR , SA VALEUR EST < L'INDEX D'ACCES A LA TABLE DE < COMMANDE DE L'EDITEUR. E18: EQU $ LAI '20 < CAS DES CARACTERES STANDARDS. E16: EQU $ XR A,X < SAVE COORDONNEE X DU CURSEUR DANS < LE REGISTRE A. LB &AFEDIT < B=@ROUTINE SPECIFIQUE(X). XR A,X < RESTAURE X=COORDONNEE X DU < CURSEUR. PSR B < EMPILEMENT DE L'ADRESSE DE LA ROU- < TINE SPECIFIQUE EN VUE DU RSR. RSR < EXECUTION DE LA FONCTION. < < R E T O U R D E L A B O U C L E : < LOOP: EQU $ CPZ DOG < Y-A-T'IL UN REPEAT 'DOG' < FOIS EN COURS ??? JLE E401 < NON. < < CAS D'UN REPEAT 'DOG' FOIS : < DC DOG < DECOMPTE DES REPEAT RESTANT < A FAIRE. E401: EQU $ JAE E10 < SI A=0 , BOUCLE IMMEDIATE. LR A,B < SAVE @TABLE DES ARGUMENTS < A MSP DANS B. BSR ASVC < SINON , ENVOI DE L'ECHO OU < DE LA POSITION 'HOME'. < < TEST DE FIN DE REPEAT : < < L'UTILISATEUR A-T'IL ENVOYE < UN CTRL-X-OFF ????? JL E10 < NON , BOUCLE DE L'EDITEUR. JE E32 < OUI PENDANT L'ECHO. < < CAS D'UN CTRL-X-OFF : ON ABORTE LE REPEAT EN COURS : < (MEME S'IL N'Y EN A PAS .... AUCUNE IMPORTANCE....) < LR B,A < RESTAURE A=@TABLE ARGUMENTS A MSP BSR ASVC < ENVOI DE L'ECHO DU DERNIER < CARACTERE DANS LE CAS OU LE CTRL- < X-OFF ETAIT APPARU HORS-ECHANGE. E32: EQU $ STZ DOG < RAZ DU REPEAT EN COURS. JMP E10 < BOUCLE DE L'EDITEUR. PAGE < < < S A U V E G A R D E D ' U N E P A G E < A L P H A - N U M E R I Q U E E T < G R A P H I Q U E S U R D I S Q U E : < < < PHILOSOPHIE PROVISOIRE : < LORSQU'ON VEUT REALISER UNE OPERATION AVEC < LE DISQUE DE MANIERE SYMBOLIQUE , PAR < L'2NTERMEDIAIRE DE L'ARBRE DU SYSTEME , < ON MET EN TETE DE LA PAGE ALPHA-NUMERIQUE UN < <NOM> SUIVIT DE <EON> ('EOT') , ET ENSUITE < ON TAPE LA COMMANDE : < CTRL-U : LOAD-VALUE(:SYS<NOM>) , < CTRL-T : LOAD-VALUE(<ACNESC><NOM>), < CTRL-W : STORE-VALUE(<ACNESC><NOM>) < CTRL-X : DELET-VALUE(<ACNESC><NOM>) < CTRL-D : <EON>. < < SYSPAG: EQU $ < LOAD-VALUE SOUS :SYS : CTRL-U. LAI 6 < NVP D'ACCES AU NSP 'LOAD-VALUE' < SOUS :SYS. JMP E90 TPAGE: EQU $ < LOAD VALEUR : CTRL-T. LAI 5 < NVP 'LOAD VALUE'. JMP E90 WPAGE: EQU $ < STORE VALUE : CTRL-W. LAI 4 < NVP DE 'STORE VALUE'. JMP E90 DPAGE: EQU $ < DELETE PAGE : CTRL-X. LAI 3 < NVP DE 'DELETE VALUE'. < < REALISATION DE L'OPERATION DEMANDEE : < E90: EQU $ STBY SPAGE < MISE EN PLACE DU NVP DE LA < FONCTION DEMANDEE DANS 'SPAGE'. LAD SPAGE BSR ASVC < REALISATION. JAE E91 < OK , FONCTION REALISEE. < < CAS D'ERREUR : < BSR ABELL < ENVOI D'UNE BELL D'ERREUR. JMP E10 < BOUCLE DE L'EDITEUR. < < OK , RENVOI HOME DU CURSEUR : < E91: EQU $ LAD CHOME BSR ASVC < ENVOI EN 'HOME' DU CURSEUR BSR ABELL < AVERTISSEMENT UTILISATEUR < DE LA FIN DU TRAVAIL DEMANDE. LXI 0 < REINITIALISATION DES COORDONNEES LYI 0 < DU CURSEUR ALPHA-NUMERIQUE. JMP E10 < BOUCLE DE L'EDITEUR. PAGE < < < E D I T I O N D U C A T A L O G U E < D E S N U M E R O S D E C O M P T E : < < < FONCTION : < CTRL-B EST UNE COMMANDE RESERVEE A :SYS , < ELLE DONNE ACCES AU CATALOGUE DES ACN < DANS LA PAGE COURANTE. < < CACN: EQU $ LAI 'A < FONCTION RESERVEE A :SYS. JMP E99 < VERS LA MAJ DE SCATAL. < < < E D I T I O N D U C A T A L O G U E < D E S N O M S D E L ' U T I L I S A T E U R : < < < FONCTION : < CE MODULE APPELE PAR CTRL-C , PERMET < LA MISE DANS LA PAGE DU CATALOGUE DES NOMS < DE L'UTILISATEUR . A NOTER QUE CE CATALOGUE < PEUT ENSUITE ETRE LUI-MEME SAUVEGARDE < SOUS UN NOM , PUISQU'IL EST DANS UNE < PAGE .... < < CATAL: EQU $ LAI 2 < FONCTION DESTINEE A HDLSAV. E99: EQU $ STA SCATAL < MAJ DE SCATAL AVEC LA FONCTION < DEMANDEE. BSR ASP1 < RAZ DE LA PAGE. < ON A ICI : < X=0 (INDEX NOM) , < APAGE=RELAI VERS LE 1ER NOM. LAI 4 < CARACTERE <EON>. STBY &APAGE < INITIALISATION DU CATALOGUE PAR < UN <EON> (MIS A BLANC A LA FIN). LYI 0 < NUMERO DU NOM COURANT. < < BOUCLE DE RECUPERATION DES NOMS : < E93: EQU $ LAI 9 < NVP DE NEXT-SERIE. BSR ASP2 < RECHERCHE DU SUIVANT EN SERIE. JANE E94 < LE NXS N'EXISTE PAS. < < CAS OU IL Y A UN SUIVANT SERIE : < ADRI 1,X < ACCES A CE CARACTERE SUIVANT < EN SERIE. LBY &APAGE CPI 4 < EST-CE <EON> ???? JNE E93 < NON. < < CAS DE LA RENCONTRE D'UNE FIN DE NOM <EON> : < < < CAS D'UN <EON> OU D'UN NXS N'EXISTANT PAS : < E94: EQU $ PSR X < SAVE INDEX CARACTERE. < < BOUCLE DE DUPLICATION DU NOM COURANT : < E95: EQU $ LBY &APAGE < RECUPERATION DU NOM COURANT < PAR CARACTERE. ADRI NBCAR,X < PASSAGE AU NOM SUIVANT . <<<<<<< STBY &APAGE < COPIE. ADRI -NBCAR-1,X < RETOUR SUR LE NOM COURANT<<<<<<< CPZR X JGE E95 < AU SUIVANT. < < FIN DE DUPLICATION DU NOM COURANT : < PLR X < RESTAURE L'INDEX CARACTERE. LAI '20 STBY &APAGE < ON REMPLACE <EON> PAR UN < BLANC , QUESTION DE MISE EN < PAGE (<EON> N'APPARAISSANT PAS). ADRI 1,Y < Y=NUMERO DU NOM SUIVANT. LR Y,A CPI NBLIG-1 < VALIDATION NUMERO DE NOM <<<<<<< JGE E96 < LA PAGE EST SATUREE , ABANDON !!!! < < CAS OU IL Y A ENCORE DE LA PLACE DANS LA PAGE D < LA APAGE < RELAI VERS LE NOM PRECEDENT. ADRI NBCAR/2,A < RELAI VERS LE NOUVEAU NOM<<<<<<< STA APAGE < MAJ RELAI NOM. < < RECUPERATION DES SUIVANTS PARALLELES : < E98: EQU $ LAI 8 < NVP DE NEXT-PARALLELE. BSR ASP2 < TENTATIVE DE RECUPERATION NSP. JANE E97 < LE NXP N'EXISTE PAS. < < CAS OU LE NXP EXISTE : < ADRI 1,X LBY &APAGE < RECUPERATION DU CARACTERE NXP. ADRI -1,X STBY &APAGE < CE CARACTERE NXP DEVIENT LE < DERNIER CARACTERE DU NOM. ADRI 1,X LAI '20 STBY &APAGE < LE NXP RECUPERE EST MIS A BLANC. ADRI -1,X < RETOUR SUR LE DERNIER CARACTERE < DU NOM. JMP E93 < ALLONS FAIRE UNE TENTATIVE SERIE. < < CAS OU IL N'Y A PAS DE NXP : < E97: EQU $ LAI '20 STBY &APAGE < RECUL DANS LE MOT COURANT. ADRI -1,X CPZR X < LE CATALOGUE ARBORESCENT A-T' < IL ETE ENTIEREMENT EXPLORE ???? JGE E98 < NON , TENTATIVE PARALLELE. < < FIN D'EXPLORATION DU CATALOGUE , OU < PAGE PLEINE (SATURATION) : < E96: EQU $ < ON A ICI : < A='BLANC'. STBY &ADPAGE < LE 1ER CARACTERE DE LA PAGE < EST REMIS A BLANC (IL CONTENAIT < UN <EON>). JMP E91 < VERS L'ENVOI HOME DU CURSEUR. PAGE < < < R A Z D E L A P A G E A L P H A : < < < RESULTATS : < APAGE=RELAI INDEX VERS LA PAGE , < X=0. < < SP1: EQU $ LA ADPAGE < A=@DE LA PAGE. SBT 0 < GENERATION DU RELAI INDEXE. STA APAGE < MISE EN PLACE DU RELAI. LAI '20 SWBR A,A ORI '20 < A='BLANC-BLANC'. LX NMPP < RANG DU DERNIER MOT DE LA PAGE. E92: EQU $ STA &APAGE < MISE A BLANC DE LA PAGE PAR MOTS. JDX E92 < SUIVANT .... STA &APAGE < MISE A BLANC DU 1ER MOT. RSR < < < M A J D E S C A T A L E T E N V O I < D E L A D E M A N D E A M S P : < < < ARGUMENT : < A=NVP DEMANDE , < X=INDEX LIGNE COURANT. < < < RESULTAT : < A=CONDITION DE RETOUR DE MSP. < < SP2: EQU $ STBY SCATAL < MISE EN PLACE DU NVP DANS < LE BLOC DE DEMANDE SCATAL. LA APAGE < A=@MOT DU NOM COURANT. SLLS 1 STA SCATAL+1 < MISE EN PLACE DE L'@OCTET < DU NOM COURANT. LR X,A ADRI 1,A < A=LONGUEUR DU NOM COURANT. STA SCATAL+2 < MISE EN PLACE DU COMPTE OCTETS < DE SCATAL. LAD SCATAL < AVEC LUI C'EST QUAND MEME MIEUX ! BSR ASVC < ENVOI DE LA DEMANDE A MSP. JAE E100 < OK. CPI 5 < EST-CE LE CODE-ERREUR 'NXP/NXS' < INEXISTANT ???? JE E100 < C'EST 'NXS/NXP' INEXISTANT , < RETOUR OK. < < AUTRE CODE-ERREUR : C'EST SUREMENT FONCTION INTERDITE : < ABORT LA COMMANDE ET ENVOI D'UNE BELL : < ADRI -1,K < ON SAUTE LE RSR. BSR ABELL < ERREUR. LAI '20 < 'BLANC' A METTRE EN TETE DE PAGE. JMP E96 < RETOUR EN ABORT. E100: EQU $ RSR < RETOUR OK. PAGE < < < T R A N S L A T I O N D ' U N P O I N T : < < < FONCTION : < CETTE ROUTINE TRANSLATE LES COORDONNEES DU < POINT COURANT DE VARY,VARX. < < < ARGUMENTS : < SEGC+0=YM , < SEGC+1=XM . (POINT COURANT). < < < RESULTATS : < A=Y(M+DM) , < B=X(M+DM). < < TRANS: EQU $ LA SEGC+1 < XM. AD VARX LR A,B < B=X(M+DM). LA SEGC+0 < YM. AD VARY < A=Y(M+DM). RSR PAGE < < < H O M O T H E T I E D ' U N P O I N T : < < < < ARGUMENTS : < SEGC+0=YM (POINT A TRAITER) , < SEGC+1=XM , < POINTC+1=Y(CENTRE D'HOMOTHETIE) , < POINTC+2=X(CENTRE D'HOMOTHETIE). < < < RESULTAT : < A=Y(M+DM) , < B=X(M+DM). < < HOMOT: EQU $ LA SEGC+1 < XM. SB POINTC+2 < X(CENTRE). MP KNUMER BSR ADIV < DIVISION PAR KDENOM. AD POINTC+2 < X(M+DM)=XC+K*(XM-XC). STA VAR < SAVE X(M+DM). LA SEGC+0 < YM. SB POINTC+1 < Y(CENTRE). MP KNUMER BSR ADIV AD POINTC+1 < A=Y(M+DM)=YC+K*(YM-YC). LB VAR < B=X(M+DM). RSR PAGE < < < R O T A T I O N D ' U N P O I N T : < < < FONCTION : < CETTE ROUTINE FAIT TOURNER LE < POINT (SEGC+0,SEGC+1) AUTOUR DU < CENTRE DU CERCLE COURANT , SUIVANT < LE RAYON DEFINI PAR UNE COMMANDE < 'R'/'L' PRECEDENTE .... < ON MONTRE EN FAISANT SUBIR UNE ROTATION A UN < VECTEUR DANS LE PLAN COMPLEXE QUE : < (XC ET YC DESIGNANT LES COORDONNEES DU CENTRE) < X(M+DM)=XC*DIF/R+YC*SIN/R+XM*COS/R-YM*SIN/R , < Y(M+DM)=YC*DIF/R-XC*SIN/R+YM*COS/R+XM*SIN/R. < AVEC DE PLUS : < COS(DTETA)=60/61 , < SIN(DTETA)=11/61 , < (RAPPORTS DE NBRES ENTIERS ...) < < < < ARGUMENT : < SEGC+0=YM , < SEGC+1=XM. < < < RESULTAT : < A=Y(M+DM) , < B=X(M+DM). < < ROTAT: EQU $ LA SEGC+0 < YM. MP SIN < YM*SIN. BSR ADIV < YM*SIN/R. NGR A,Y < Y=-YM*SIN/R. LA SEGC+1 < XM. MP COS < XM*COS. BSR ADIV < XM*COS/R. AD XK < XK+XM*COS/R. ADR Y,A AD VARX < TRANSLATION EVENTUELLE DE X. STA VAR < VAR=X(M+DM). LA SEGC+1 < XM. MP SIN < XM*SIN. BSR ADIV < XM*SIN/R. LR A,Y < Y=XM*SIN/R. LA SEGC+0 < YM. MP COS < YM*COS. BSR ADIV < YM*COS/R. ADR Y,A AD YK < A=Y(M+DM). AD VARY < TRANSLATION EVENTUELLE DE Y. LB VAR < B=X(M+DM). RSR PAGE < < < T E S T D ' O V E R S C R E E N : < < < FONCTION : < CETTE ROUTINE INDIQUE SI LE POINT < ARGUMENT EST OU N'EST PAS AFFICHABLE < SUR L'ECRAN. < < < ARGUMENT : < A=YM , < B=XM. < < < RESULTAT : < A=-1 , SI OVERSCREEN , < A>=0 SI OK. < < TSE: EQU $ JAL E200 < OVERSCREEN. CP C1024 JGE E200 < OVERSCREEN. LR B,A < TEST DE XM. JAL E200 < OVERSCREEN. CP C1024 JL E201 < OK. < < RETOUR EN ERREUR : < E200: EQU $ LAI -1 < RENVOI DE A NEGATIF SI OVERSCREEN. E201: EQU $ RSR PAGE < < < H O M O T H E T I E D E L A < T A B L E D E S S E G M E N T S : < < < CENTRE D'HOMOTHETIE : C'EST LE POINT < (POINTC+1,POINTC+2) OBTENU < LORS DE LA COMMANDE 'H'. < < FH: EQU $ LA AHOMOT < A=@ROUTINE D'HOMOTETHIE 1 POINT. STA ASP JMP E210 < VERS LE TRONC COMMUN DES < OPERATIONS GEOMETRIQUES. PAGE < < < T R A N S L A T I O N D E L A < T A B L E D E S S E G M E N T S : < < FV: EQU $ LA ATRANS < A=@ROUTINE DE TRANSLATION < D'UN POINT. JMP E208 < VERS LE TRONC COMMUN DE LA < ROTATION ET DE LA TRANSLATION. PAGE < < < R O T A T I O N D E L A T A B L E D E S S E G M E N T S : < < FQ: EQU $ LA AROTAT < A=@ROUTINE DE ROTATION 1 POINT. JMP E208 < VERS LA TRANSFORMATION. PAGE < < < O P E R A T I O N S G E O M E T R I Q U E S < S U R L A T A B L E D E S S E G M E N T S : < T R A N S L A T I O N , < R O T A T I O N ( & T R A N S L A T I O N ) , < H O M O T H E T I E , < S Y M E T R I E P O N C T U E L L E , < < < FONCTION : < ON PEUT FAIRE SUR LA TABLE DES SEGMENTS DES < TRANSFORMATIONS GEOMETRIQUES : < 1- TRANSLATION DE VECTEUR 'O'-->'V' , < 2- ROTATION DE CENTRE 'O' AVEC TRANSLATION < DE VECTEUR 'O'-->'Q' , < 3- HOMOTHETIE DE CENTRE 'H' , ET DE < RAPPORT 'I' , 'U' , OU 'P'. < CE SONT LES COMMANDES 'Q' , 'V' ET 'H' QUI < FONT LA TRANSFORMATION ; DE PLUS UNE TRANSFORMATION < PEUT SE FAIRE EN MODE RECOUVREMENT DE L'OBJET < PAR L'IMAGE ('N') OU EN MODE SUPERPOSITION < DE L'OBJET DE DE L'IMAGE ('M'). < < < < TRONC COMMUN ROTATION/TRANSLATION DE < LA TABLE DES SEGMENTS : < E208: EQU $ STA ASP < MISE EN PLACE DE L'@ROUTINE < DE ROTATION/TRANSLATION. < < CALCUL DE LA CONSTANTE DE TRANSLATION : < LA POINTC+1 < Y DE LA COMMANDE COURANTE. SB YC < Y DU CENTRE DE ROTATION. STA VARY < VARY=Y(COMMANDE COURANTE)-YC. LA POINTC+2 < X DE LA COMMANDE COURANTE. SB XC < X DU CENTRE DE ROTATION. STA VARX < VARX=X(COMMANDE COURANTE)-XC. < < TRONC COMMUN ROTATION/TRANSLATION/HOMOTHETIE : < E210: EQU $ < ENTRY POUR L'HOMOTHETIE. < < MARQUAGE DES SEGMENTS OBJETS : < LR W,C < C=@TAGR. LX ALTAGR < X=LONGUEUR TAGR. E214: EQU $ LA 0,C < ACCES SEGMENT COURANT. JAL E215 < IL EST LIBRE , RIEN A FAIRE. SBT 1 < MEMORISONS QUE C'EST UN SEGMENT < OBJET PAR SON BIT1. STA 0,C < MAJ DE TAGR. E215: EQU $ ADRI 4,C JDX E214 < AU SUIVANT. LR W,C < C=@TABLE DES SEGMENTS. LX ALTAGR < X=LONGUEUR TAGR. < < BOUCLE DE TRANSFORMATION GEOMETRIQUE DES POINTS : < E202: EQU $ LA 0,C JAL E203 < LE SEGMENT COURANT EST LIBRE , < DONC PAS DE TRANSFORMATION. < < TEST SUR LA NATURE IMAGE/OBJET DU SEGMENT COURANT : < TBT 1 < EST-CE UN OBJET (BIT1=1). RBT 1 < REGENERATION DE TAGR. STA 0,C JNC E203 < C'EST UN SEGMENT IMAGE , IL N'EST < DONC PAS CONCERNE PAS LA TRANS- < FORMATION GEOMETRIQUE. < < TRANSFORMATION D'UN SEGMENT OBJET : < STA SEGC+0 < YM (POINT COURANT). LA 1,C STA SEGC+1 < XM (POINT COURANT). BSR ASP < TRANSFORMATION DE L'ORIGINE DU < SEGMENT COURANT. STA SEGV+0 < Y(M+DM) STB SEGV+1 < X(M+DM). BSR ATSE < TEST D'OVERSCREEN DU POINT < COURANT APRES ROTATION. JAGE E204 < OK. < < CAS DE L'OVERSCREEN : < E205: EQU $ CPZ MEMO < TEST DU MODE 'M'/'N'. JGE E203 < MODE 'M' , L'OVERSCREEN EST < ALORS IGNORE. STA 0,C < LORSQU'IL Y A OVERSCREEN SUR < L'UN DES POINTS D'UN SEGMENT , < ON DESOCCUPE CE SEGMENT ; A < NOTER QU'ICI : A=-1. JMP E203 < VERS LE SEGMENT SUOVANT. < < PASSAGE A L'EXTREMITE DU SEGMENT COURANT : < E204: EQU $ LA 2,C STA SEGC+0 < YM (POINT COURANT). LA 3,C STA SEGC+1 < XM (POINT COURANT). BSR ASP < TRANSFORMATION DE L'EXTREMITE DU < SEGMENT COURANT. < < GENERATION DE SEGC : < STA SEGC+2 < Y2(M+DM). STB SEGC+3 < X2(M+DM). BSR ATSE < TEST D'OVERSCREEN DE L'EXTRE- < MITE DU SEGMENT COURANT. JAL E205 < OVERSCREEN. LA SEGV+0 STA SEGC+0 < Y1(M+DM). LA SEGV+1 STA SEGC+1 < X1(M+DM). < < RANGEMENT DU SEGMENT IMAGE : < 1- SI MODE 'M' : ON L'INSERE DANS UN SEGMENT LIBRE DE TAGR , < 2- SI MODE 'N' : ON L'INSERE A LA PLACE DE L'OBJET DONT < IL EST L'IMAGE. < PSR X,C LA MEMO < TEST DU MODE 'M'/'N'. TBT 0 LR C,B < A PRIORI B=@SEGMENT OBJET. JC E222 < CAS DU MODE 'N' , L'IMAGE VA < RECOUVRIR L'OBJET. < < CAS DU MODE 'M' : < LR W,C < C=@TAGR. LX ALTAGR < X=LONGUEUR TAGR. LBI 0 < INITIALISATION DE B=0 : PAS < DE SEGMENTS LIBRES DANS TAGR < A PRIORI. < < PARCOURS DE TAGR , POUR TESTER SI L'IMAGE 'SEGC' < N'EST PAS DEJA DANS TAGR : < E211: EQU $ LA 0,C JAGE E220 < CE SEGMENT EST OCCUPE. LR C,B < LORSQU'ON RENCONTRE UN SEGMENT < LIBRE , ON LE MEMORISE EN VUE < D'Y METTRE PEUT-ETRE LE SEGMENT < IMAGE (ULTERIEUREMENT). JMP E212 < AU SUIVANT. E220: EQU $ RBT 1 < RAZ DE L'INDICATEUR OBJET/IMAGE. CP SEGC+0 JNE E212 < IMAGE#SEGMENT. LA 1,C CP SEGC+1 JNE E212 < IMAGE#SEGMENT. LA 2,C CP SEGC+2 JNE E212 < IMAGE#SEGMENT. LA 3,C CP SEGC+3 JE E216 < L'IMAGE EST DEJA DANS TAGR , < IL EST DONC INUTILE DE L'Y < REMETTRE. E212: EQU $ ADRI 4,C JDX E211 < AU SUIVANT. < < CAS OU L'IMAGE N'EST PAS ENCORE DANS TAGR : < CPZR B < A-T'ON TROUVE UN SEGMENT LIBRE D < DANS LA TABLE TAGR. JE E217 < TAGR EST PLEINE , ABORT. < < INSERTION DE SEGC DANS TAGR , EN RECOUVREMENT < DE L'OBJET (CAS 'N') , OU DANS UN < SEGMENT LIBRE (CAS 'M') : < E222: EQU $ LAD SEGC < A=@EMETTEUR (IMAGE). < B=@RECEPTEUR. LXI 4 < 4 MOTS A DEPLACER. MOVE < INSERTION DE L'IMAGE DANS TAGR. E216: EQU $ PLR X,C < < PASSAGE AU SEGMENT SUIVANT : < E203: EQU $ ADRI 4,C < PROGRESSION DANS TAGR. JDX E202 JMP E42 < OK , GO BACK TO THE EDITOR LOOP. < < SORTIE EN COURS DE TRANSFORMATION : < E217: EQU $ LX ALTAGR < X=LONGUEUR DE TAGR. LR W,C < C=@TAGR. E219: EQU $ LA 0,C JAL E221 < LIBRE , RIEN A FAIRE. RBT 1 < REMISE A PRIORI EN MODE OBJET DE < TOUS LES SEGMENTS DE TAGR. STA 0,C E221: EQU $ ADRI 4,C JDX E219 < AU SUIVANT. PLR X,C BR AE40 < VERS LA 'BELL'. PAGE < < < R A P P O R T D ' H O M O T H E T I E : < < < FONCTION : < ON A ICI 3 ENTRY : < FP : RAPPORT=-1 (HOMOTHETIE=SYMETRIE PONCTUELLE). < FI : RAPPORT=COS/R (<1) , < FU : RAPPORT=R/COS (>1). < < FI: EQU $ < 'I' POUR INF.... LB COS < NUMERATEUR. LA R < DENOMINATEUR. JMP E209 FU: EQU $ < 'U' POUR UP... (SUP..). LB R < NUMERATEUR. LA COS < DENOMINATEUR. E209: EQU $ STB KNUMER < NUMERATEUR DU RAPPORT. STA KDENOM < DENOMINATEUR DU RAPPORT. SLRS 1 STA RS2 < EN VUE DE L'UTILISATION DE ADIV. JMP E42 < RETOUR OK A LA LOOP DE L'EDITEUR. FP: EQU $ LAI -1 STA KNUMER < MULTIPLICATION PAR -1. LAI 1 < OPERATION NEUTRE. STA KDENOM STA RS2 JMP E42 < VERS L'EDITOR LOOP (GRAPH). PAGE < < < I N V E R S I O N D E L A M E M O R I S A T I O N < D E S S E G M E N T S : < < < FONCTION : < 1- EN MODE TRACE DE SEGMENT PAR 'A' & 'B' , < 'M' : PERMET LA MEMORISATION DES SEGMENTS TRACES , < 'N' : FAIT DES SEGMENTS TRACES , DES TRAITS < DE CONSTRUCTION. < 2- EN MODE TRANSFORMATION GEOMETRIQUE , < 'N' : L'IMAGE DE LA TRANSFORMATION RECOUVRIRA < L'OBJET (QUI VA DONC DISPARAITRE) , < 'M' : L'IMAGE SE SUPERPOSE A L'OBJET. < < FM: EQU $ < MEMORISATION. LA MEMO RBT 0 < BIT0(MEMO)=0. JMP E80 FN: EQU $ < NON MEMORISATION. LA MEMO SBT 0 < BIT0(MEMO)=1. E80: EQU $ STA MEMO JMP E42 < RETOUR A LA BOUCLE DE L'EDITEUR. PAGE < < < C L E A R D E L A T A B L E < D E S S E G M E N T S : < < < FONCTION : CETTE FONCTION LIBERE TOUS LES < SEGMENTS DE LA TABLE GRAPHIQUE , ET CECI < EN METTANT LE BIT0 DE CHAQUE ENTREE DE 4 < MOTS A 1. < < FZ: EQU $ BSR ACTAGR < CLEAR TABLE DES SEGMENTS. JMP E42 < RETOUR A LA BOUCLE DE L'EDITEUR < GRAPHIQUE. < < C L E A R T A G R : < CTAGR: EQU $ LR W,C < C=@TAGR. LX ALTAGR < NBRE D'ENTREES DE 4 MOTS A < LIBERER. LAI -1 < POUR METTRE LE BIT0 A 1. E41: EQU $ STA 0,C < LIBERATION DE CHAQUE ENTREE. ADRI 4,C < SEGMENT SUIVANT. JDX E41 RSR PAGE < < < E F F A C E M E N T D E L ' E C R A N : < < FX: EQU $ LAD ERASE BSR ASVC JMP E42 < RETOUR A LA BOUCLE DE L'EDITEUR. PAGE < < < D E S I G N A T I O N D U C E N T R E < D U C E R C L E C O U R A N T : < < FO: EQU $ LA POINTC+1 < Y DU CENTRE DU CERCLE. STA YC LA POINTC+2 < X DU CENTRE DU CERCLE. STA XC JMP E42 < EASY ??? PAGE < < < D E S I G N A T I O N D U R A Y O N < D U C E R C L E C O U R A N T : < < < FONCTION : < CETTE ROUTINE DESIGNE L'EXTREMITE DU < RAYON DONT LA 1ERE EXTREMITE A ETE < DESIGNEE PAR UNE COMMANDE 'O' ; DE PLUS ON < DEFINIT ICI LE SENS DU TRACE DU CERCLE : < 'L' : SENS TRIGONOMETRIQUE , < 'R' : SENS ANTI-TRIGONOMETRIQUE. < < FL: EQU $ < LEFT : SENS TRIGONOMETRIQUE. LA SIN JAG E78 < OK , TETA>0. JAL E79 < IL FAUT RENDRE TETA POSITIF. ACTD < E R R E U R S Y S T E M E ... FR: EQU $ < RIGHT : SENS ANTI-TRIGONOMETRIQUE. LA SIN JAL E78 < OK , TETA<0. E79: EQU $ NGR A,A < ON CHANGE LE SIGNE DU TETA PAR < L'INTERMEDIAIRE DE SON SINUS. STA SIN E78: EQU $ LA R STA KDENOM < AFIN DE DIVISER PAR 'R' DANS ADIV SLRS 1 STA RS2 < CALCUL DE R/2. < < TRAITEMENT DU CENTRE DU CERCLE : < LA YC < YC. MP SIN < YC*SIN. BSR ADIV < YC*SIN/R. LR A,Y < Y=YC*SIN/R. LA XC < XC. MP DIF < XC*DIF. BSR ADIV < XC*DIF/R. ADR Y,A STA XK < XK=XC*DIF/R+YC*SIN/R. LA XC < XC. MP SIN < XC*SIN. BSR ADIV < XC*SIN/R. NGR A,Y < Y=-XC*SIN/R. LA YC < YC. MP DIF < YC*DIF. BSR ADIV < YC*DIF/R. ADR Y,A STA YK < YK=YC*DIF/R-XC*SIN/R. JMP E42 < C'EST TOUT .... < < < T R A C E D U C E R C L E C O U R A N T : < < FC: EQU $ STZ VARX < PAS DE TRANSLATION DES X. STZ VARY < PAS DE TRANSLATION DES Y. < NOTATION : < XM=X DU POINT COURANT DE L'ARC DE CERCLE , < YM=Y DU POINT COURANT DE L'ARC DE CERCLE , LXI 360/10 < NBRE DE POINTS SUR UN CERCLE < PARCOURU AVEC UN PAS DE 10 < DEGRE (A PEU PRES...). LA POINTC+1 < YM INITIAL. LB POINTC+2 < XM INITIAL. E73: EQU $ STB SEGC+1 STB SEGC+3 < XM. STA SEGC+0 STA SEGC+2 < YM. < < TEST DE SORTIE DE L'ECRAN : < BSR ATSE < TEST D'OVERSCREEN DU POINT (A,B). JAL E75 < OVERSCREEN , ON SAUTE ... < < TRACE DU SEGMENT COURANT : < (REDUIT AU POINT (YM,XM)). < LAD OG BSR ASVC JGE E42 < FINI SI CTRL-X-OFF .... LAD WG BSR ASVC JGE E42 < FINI SI CTRL-X-OFF .... < < PASSAGE AU POINT COURANT SUIVANT DE L'ARC < DE CERCLE PAR APPROXIMATION : < E75: EQU $ BSR AROTAT < ROTATION POINT. JDX E73 < TRACE DU POINT SUIVANT DE L'ARC < DE CERCLE. JMP E42 < C'EST FINI .... < < < R O U T I N E D E D I V I S I O N E N T I E R E : < < DIV: EQU $ DV KDENOM < DIVISION DE (A,B) PAR (KDENOM). XR A,B < A=RESTE DE LA DIVISION ENTIERE. CP RS2 < POSITION DU RESTE PAR RAPPORT < AU DIVISEUR/2. XR A,B < RESTAURE A=QUOTIENT ENTIER. JL E77 < RESTE<R/2. ADRI 1,A < DANS LE CAS RESTE>=R/2 , ON < INCREMENT D'UNE UNITE LE < QUOTIENT , POUR NE PAS COMMETTRE < UNE ERREUR TOUJOURS DE < MEME SENS. E77: EQU $ RSR PAGE < < < E D I T E U R G R A P H I Q U E : < < < FONCTION : CET EDITEUR EST UN SOUS ENSEMBLE < DE L'EDIITEUR ALPHA-NUMERIQUE QUI L'APPELLE < PAR L'INTERMEDIAIRE DU CTRL-G . IL A SA < CHARGE LA GESTION D'UNE TABLE DES SEGMENTS < CONSTRUITES A L'AIDE DES COMMANDES ENVOYEES < PAR L'UTILISATEUR A L'AIDE DU CURSEUR < GRAPHIQUE. < < GRAPH: EQU $ LR Y,A < A=Y(CURSEUR ALPHA-NUMERIQUE). MP C74 ADR X,B < B=INDEX DU CUSEUR ALPHA-NUMERIQUE < DANS LA PAGE COURANTE. SBT 0+16 < POSITIONNEMENT DU MODE INTER- < ACTIF A PRIORI. STB GRAFP < ET SAVE L'INDEX DU CURSEUR < ALPHA-NUMERIQUE. < < EMPILEMENT DE GRAFP : < LAI LGRAFP+1 SWBR A,A STA SGRAFP < REINITIALISATION DE SGRAFP. BSR AGRAFP < CALCUL DE Y=@SGRAFP. LR B,A < A=GRAFP A EMPILER. PUSH LA ADPAGE SBT 0 STA APAGE < RELAI INDIRECT INDEX VERS < LA PAGE ALPHA-NUMERIQUE. LAI 8 STA WG+2 < LE COMPTE D'OCTETS DE WG RECOIT < 8 OCTETS QUI REPRESENTE LE NBRE < D'OCTETS CONSTITUANT UN < SEGMENT GRAPHIQUE. < < BOUCLE DE L'EDITEUR GRAPHIQUE : < E42: EQU $ < ON A ICI : < W=@TAGR. < < TEST DU MODE GRAPHIQUE PROGRAMME : < LA GRAFP JAL E241 < C'EST LE GRAPHIQUE INTERACTIF. < < MODE GRAPHIQUE PROGRAMME : < CP N3574 < VALIDATION DE GRAFP. JGE EE240 < FIN DE LA PAGE ALPHA-NUMERIQUE , < ON REVIENT AU MODE INTERACTIF. LR A,X < OK : X=GRAFP=INDEX DE PAGE. E267: EQU $ < ENTRY APPEL PROGRAMME GRAPHIQUE < PAR NOM. LBY &APAGE STBY POINTC < SAVE A=COMMANDE GRAPHIQUE < COURANTE. IC GRAFP < PROGRESSION DE L'INDEX DE PAGE. JMP E242 < EXECUTION DE LA COMMANDE < GRAPHIQUE PROGRAMME. < < MODE GRAPHIQUE INTERACTIF : < E241: EQU $ LAD OG BSR ASVC < MISE DE LA VISU EN MODE GRAPHIQUE < S'IL N'Y ETAIT PAS DEJA. LAD CU BSR ASVC < MISE EN FONCTION DU CURSEUR < GRAPHIQUE. LAD LG BSR ASVC < LECTURE DES COORDONNEES DU < CURSEUR GRAPHIQUE AVEC ATTENTE < DU BON-VOULOIR DE L'UTILISATEUR. < < ANALYSE DES DESIDERATA DE L'UTILISATEUR : < LBY POINTC < ACCES AU CARACTERE FRAPPE < PAR L'UTILISATEUR POUR < DEBLOQUER SA VISU. E242: EQU $ < ENTRY GRAPHIQUE PROGRAMME. AD CTRL < TRANSFORMATION EVENTUELLE DE < LA COMMANDE EN UN CTRL-XXX. STZ CTRL < RAZ A PRIORI DE CTRL APRES CHAQUE < COMMANDE GRAPHIQUE. CPI '20 < EST-CE 'SPACE' , SOIT LE < NOP DU LANGAGE GRAPHIQUE . ???? JE E42 < OUI : RETOUR IMMEDIAT A LA < BOUCLE DE L'EDITEUR GRAPHIQUE. JG E263 < CE N'EST PAS UN CTRL-XXX. < < CAS DES CTRL-XXX : IL S'AGIT DE L'APPEL < D'UN PROGRAMME GRAPHIQUE PAR NOM : < ADRI '40,A < A='NOM' DU PROGRAMME GRAPHIQUE LR A,B < B=NOM DU PROGRAMME CHERCHE. LX N3574 < NBRE DE CARACTERES D'UNE PAGE. ADRI -1,X < X=INDEX DU DERNIER CARACTERE < DE LA PAGE ALPHA-NUMERIQUE. < (QUE L'ON SAUTE POUR LA < RECHERCHE DE 'FIS'). E264: EQU $ ADRI -1,X LBY &APAGE < ACCES A UN CARACTERE DE LA PAGE. CP FIS < EST-CE LE 'FIS' ??? JNE E265 < NON , CE N'EST DONC PAS UNE < DECLARATION DE NOM DE < PROGRAMME GRAPHIQUE. < < CAS DE LA DECLARATION DU NOM D'UN < PROGRAMME GRAPHIQUE : < ADRI 1,X LBY &APAGE < ACCES AU CARACTERE SUIVANT DU < CARACTERE DE DECLARATION. CPR A,B < EST-CE LE NOM CHERCHE ???? JE E266 < OUI , C'EST OK. ADRI -1,X < RETOUR SUR LE 'FIS'. E265: EQU $ CPZR X JG E264 < AU PRECEDENT ..... JMP E40 < ERREUR : LE NOM DEMANDE < N'EXISTE PAS. < < CAS OU LE PROGRAMME DEMANDE EXISTE : < E266: EQU $ < < SAUVEGARDE DU 'GRAFP' DE RETOUR : < BSR AGRAFP LA GRAFP PUSH JNC E310 < OK , PILE NON SATUREE. DC SGRAFP < DANS LE CAS OU LA PILE EST < SATUREE , ON ECRASE LE SOMMET. E310: EQU $ ADRI 1,X < X=INDEX DU 1ER CARACTERE DU < PROGRAMME GRAPHIQUE DEMANDE. STX GRAFP < MAJ ET MISE EN MODE PROGRAMME. JMP E267 < EXECUTION DU PROGRAMME. < < TEST DES COMMANDES GRAPHIQUES : < E263: EQU $ ADRI -'21,A < DECODAGE DU CARACTERE. JAL E40 < ERREUR , CARACTERE NON RECONNU. CPI NCOG JGE E40 < ERREUR : CARACTERE NON RECONNU. < < EXECUTION DE LA COMMANDE : < LR A,X < X=FONCTION DEMANDEE. BR &COG < BRANCHEMENT VERS LE MODULE < DE TRAITEMENT SPECIFIQUE. < < < R E T O U R A L ' E D I T E U R < A L P H A - N U M E R I Q U E : < < FF: EQU $ LAD CG < CLOSE-GRAPHIQUE : CE 'CG' EST < EN FAIT RESERVE AU 'F' DANS LE < MODE PROGRAMME , POUR PERMETTRE < UN RETOUR EN ALPHA-NUMERIQUE < QUI N'A PAS EU LIEU PUISQU' < ON NE LIT ALORS PAS LE CURSEUR < GRAPHIQUE ... BSR ASVC LAI 4 STA WG+2 < EN VUE DE L'ENVOI DES < COORDONNEES DU CURSEUR < ALPHA-NUMERIQUE POUR LES < POSITIONNEMENTS HAUTS ... LXI 0 LYI 0 < ENVOI HOME DU CURSEUR. LAD CHOME < ENVOI HOME DU CURSEUR. BR ALOOP < RETOUR A LA BOUCLE DE L'EDITEUR < ALPHA-NUMERIQUE AVEC L'ENVOI < HOME DU CURSEUR. < < E R R E U R G R A P H I Q U E : < E40: EQU $ BSR ABELL < A NOTER QU'ON EST ICI EN < ALPHA-NUMERIQUE APRE LA LECTURE < GRAPHIQUE. CPI '13 JL E42 < < CAS OU UN CTRL-X-OFF A ETE ENVOYE < PENDANT LA CLOCHE : < EE240: EQU $ < < DEPILEMENT DE GRAFP : < BSR AGRAFP < CALCUL DE Y=@SGRAFP. PULL < DEPILE A=GRAFP. JNC E311 < OK , PILE NON VIDE. IC SGRAFP < DANS LE CAS OU LA PILE EST < VIDE ON RETOURNE SUR SON 1ER < ELEMENT. E311: EQU $ STA GRAFP < RETOUR AU MODE INTERACTIF. JMP E42 PAGE < < < D E S I G N A T I O N D U 1 E R < P O I N T D U S E G M E N T C O U R A N T : < < FA: EQU $ LA POINTC+1 STA SEGC < COORDONNEE Y DU 1ER POINT DU < SEGMENT COURANT. LA POINTC+2 STA SEGC+1 < COORDONNEE X DU 1ER POINT DU < SEGMENT COURANT. JMP E42 < RETOUR A LA BOUCLE DE L'EDITEUR < GRAPHIQUE. PAGE < < < D E S I G N A T I O N D U 2 E M E P O I N T < D U S E G M E N T C O U R A N T : < < < FONCTION : < 2 ENTRIES : < 1- MODE 'B' : ON JOINT AU POINT 'A' PRECEDENT , < ET LE POINT 'B' COURANT DEVIENT < LE POINT 'A' SUIVANT (CHAINAGE < AUTOMATIQUE DES SEGMENTS). < 2- MODE 'K' : ON JOINT LE POINT 'K' AU POINT < 'A' PRECEDENT ET C'EST TOUT : 'A' < RESTE 'A' (MODE ETOILE). < < FK: EQU $ LAI 1 JMP E230 FB: EQU $ LAI 0 E230: EQU $ STA VAR < VAR=1 : MODE ETOILE , < VAR=0 : MODE CHAINAGE AUTOMATI- < QUE (B). BSR AMPC < EN VUE DE L'AFFICAHGE. < ON A ICI : < B=X DU 2EME POINT DU SEGMENT COURANT , < Y=Y DU 2EME POINT DU SEGMENT COURANT. E67: EQU $ < ENTREE RESERVEE A FH. LA MEMO < FAUT-IL MEMORISER OU PAS LE < SEGMENT ????? TBT 0 JC E66 < NON , ALLONS UNIQUEMENT < L'AFFICHER. LR W,C < C=@TAGR. LX ALTAGR < < RECHERCHE D'UNE ENTREE LIBRE DANS TAGR < POUR Y METTRE LE SEGMENT COURANT : < E46: EQU $ LA 0,C JAL E47 < OK , ENTREE LIBRE (BIT0=1). ADRI 4,C < ACCES A L'ENTREE SUIVANTE. JDX E46 < < CAS OU TAGR EST PLEINE : < JMP E40 < ERREUR : ENVOI D'UNE 'BELL'. < < CAS OU ON A TROUVE UNE ENTREE < LIBRE DANS TAGR : < E47: EQU $ LAD SEGC < SOURCE , XR B,C < DESTINATION & SAVE B. LXI 4 < 4 MOTS A DEPLACER. MOVE XR B,C < RESTAURE B. < < AFFICHAGE DU SEGMENT COURANT SUR L'ECRAN : < E66: EQU $ < ENTREE DESTINEE A 'FH'. LAD OG BSR ASVC < REMISE DE LA VISU EN GRAPHIQUE. JGE EE240 < UN CTRL-X-OFF A ETE RECU. LAD WG BSR ASVC < AFFICHAGE DU SEGMENT COURANT. JGE EE240 < UN CTRL-X-OFF A ETE RECU. < < CHOIX ENTRE LE MODE CHAINAGE AUTOMATIQUE < ET LE MODE ETOILE : < CPZ VAR JNE E42 < LE MODE ETOILE EST DEMANDE , ON < RETOURNE A LA BOUCLE DE < L'EDITEUR GRAPHIQUE. < < LE 2EME POINT DU SEGMENT COURANT < DEVIENT LE 1ER POINT DU PROCHAIN < SEGMENT COURANT : < E51: EQU $ STY SEGC STB SEGC+1 STZ SEGC+2 < A PRIORI. STZ SEGC+3 < A PRIORI. JMP E42 < RETOUR A LA BOUCLE DE L'EDITEUR < GRAPHIQUE. PAGE < < < T R A N S F E R T D E P O I N T C V E R S S E G C : < < < RESULTATS : < Y=Y DU 2EME POINT DU SEGMENT COURANT , < B=X DU 2EME POINT DU SEGMENT COURANT , < < MPC: EQU $ LY POINTC+1 LB POINTC+2 STY SEGC+2 < EN VUE DE L'AFFICHAGE. STB SEGC+3 RSR PAGE < < < E F F A C E M E N T D U S E G M E N T D E S I G N E : < < FE: EQU $ BSR ASEEKS < RECHERCHE DU SEGMENT DESIGNE , < DANS TAGR. CPZR X < A-T'IL ETE TROUVE ???? JE E40 < NON , ERREUR .... < < CAS OU ON A TROUVE A PEU PRES LE SEGMENT : < LAI -1 STA 0,C < LIBERATION DE SON ENTREE , ON < L'EFFACE DONC DANS TAGR. JMP E42 < OK. PAGE < < < A F F I C H A G E D E L A T A B L E < D E S S E G M E N T S : < < FW: EQU $ < ENTRY POUR DESSIN COURBE !?!?! LAD OG BSR ASVC < MISE EN GRAPHIQUE DE LA VISU , < POUR AUTORISER 'CU'. LAD CU BSR ASVC < MISE EN FONCTION DU CURSEUR < GRAPHIQUE , ET ON VA VOIR LE < SURPRENANT RESULTAT .... FD: EQU $ < ENTRY NORMALE....... LR W,C < C=@TAGR. LX ALTAGR < NBRE D'ENTREES DE TAGR. < < BOUCLE D'AFFICHAGE : < E50: EQU $ LA 0,C JAL E48 < CETTE ENTREE EST LIBRE , ELLE < N'EST DONC PAS A AFFICHER. < < AFFICHAGE D'UN SEGMENT : < LR C,A < A=@MOT DES COORDONNESS DU < SEGMENT TROUVE. SLLS 1 < CONVERSION EN UNE ADRESSE OCTET. STA WG+1 < MISE A JOUR DE LA DEAMNDE A MSP. LAD OG BSR ASVC < MISE EN GRAPHIQUE DE LA VISU. JGE E49 < UN CTRL-X-OFF A ETE RECU. LAD WG BSR ASVC < AFFICHAGE DU SEGMENT TROUVE. < UN CTRL-X-OFF A-T'IL ETE < ENVOYE PAR L'UTILISATEUR ???? JGE E49 < OUI , ABANDON DE LHAFFICHAGE. E48: EQU $ ADRI 4,C < ACCES A L'ENTREE SUIVANTE DE TAGR JDX E50 < < RESTAURATION DE WG : < E49: EQU $ LAD COORD < COORD OU SEGC .... SLLS 1 STA WG+1 CPZR X JNE EE240 < SI X#0 , C'EST QU'UN CTRL-X-OFF < A ETE EMIS PENDANT L'EDITION. BR AE42 < VERS LA BOUCLE DE L'EDITEUR. PAGE < < < E D I T I O N D ' U N E G R I L L E < F A C I L I T A N T L E D E S S I N : < < FG: EQU $ < NOTA : < ON EST EN ALPHA-NUMERIQUE ICI. LAD CHOME BSR ASVC < ENVOI HOME DU CURSEUR ALPHA. LXI 37*5 < NBRE DE BLOCS DE 14 CARACTERES < CONTENUS DANS UN ECRAN. < ON A : (37*5)*14=35*74. LB MESG < SAVE LE CARACTERE COURANT DANS B. LAI '8E < CODE D'EXPANSION DE 14 ('E) < CARACTERES. SWBR A,A ORI '2E < AINSI , ON VA DUPLIQUER 14 < CARACTERES 'POINT' ('2E). STA MESG IC MESGO+2 < ON ENVOI 2 OCTETS AUX VISUS (???). E56: EQU $ LAD MESGO BSR ASVC < ENVOI D'UN POINT SUR LA VISU. < L'UTILISATEUR A-T'IL ENVOYE < UN CTRL-X-OFF ???? JGE E55 < OUI , ON ABORTE LA GRILLE. JDX E56 < OK , POINT SUIVANT. E55: EQU $ STB MESG < RESTAURE LE CARACTERE COURANT. DC MESGO+2 < RESTAURATION DU COMPTE OCTETS < DE MESGO. EE42: BR AE42 < VERS LA BOUCLE DE L'EDITEUR. PAGE < < < T R A N S L A T I O N D ' U N S E G M E N T : < < < FONCTION : < CETTE ROUTINE TANSLATE LE SEGMENT < COURANT JUSQU'AU POINT DESIGNE < PAR LA COMMANDE 'T' , SI EVIDEMMENT CELA < EST POSSIBLE. < < FT: EQU $ LA POINTC+1 < YI (Y DU POINT DESIGNE PAR 'J'). SB SEGC+0 < YI-Y1. AD SEGC+2 < TRANSLATION DES Y : Y2+(YI-Y1). JAL E40 < ERREUR. CP C1024 JGE E40 < ERREUR , OVERFLOW ... < (OU OVERSCREEN ?????) LR A,Y < Y=NOUVEL Y2. LA POINTC+2 < XI. SB SEGC+1 < XI-X1. AD SEGC+3 < TRANSLATION DES X : X2+(XI-X1). JAL E40 < ERREUR. CP C1024 JGE E40 < ERREUR : OVERSCREEN ... LR A,B < B=NOUVEL X2. < < TRANSLATION DE SEGC : < STY SEGC+2 < Y2. STB SEGC+3 < X2. LA POINTC+1 STA SEGC+0 < Y1. LA POINTC+2 STA SEGC+1 < X1. JMP E67 < TRAITONS LE NOUVEAU SEGC COMME < AVEC LA COMMANDE FB. PAGE < < < C H A N G E M E N T D E S E G M E N T C O U R A N T : < < < FONCTION : < CETTE ROUTINE MET DANS SEGC , LE SEGMENT DESIGNE < PAR LA COMMANDE 'S'. < < FS: EQU $ BSR ASEEKS < RECHERCHE DU SEGMENT DESIGNE < DANS TAGR. CPZR X < LE SEGMENT DESIGNE EXISTE-T'IL ?? JE E40 < NON , ERREUR .... < < CAS OU LE SEGMENT DESIGNE EXISTE : < LAD SEGC LR A,B < B=@ZONE RECEPTRICE , LR C,A < A=@ZONE EMETTRICE (BLOC DE 4 < MOTS CONTENANT LE SEGMENT < DESIGNE DANS TAGR. LXI 4 < 4 MOTS A DEPLACER. MOVE < TRANSFERT DE TAGR VERS SEGC. BR AE42 < VERS LA BOUCLE DE L'EDITEUR. PAGE < < < M O D E G R A P H I Q U E P R O G R A M M E : < < < < FIN DE MODE PROGRAMME , OU RETOUR D'UN < SOUS-PROGRAMME GRAPHIQUE : < FY: EQU $ CPZ GRAFP < VALIDATION DE LA COMMANDE. JL E420 < ERREUR : PAS DE MODE PROGRAMME < EN COURS. E240: EQU $ < ENTRY : CTRL-X-OFF PENDANT < LA BELL , OU LA FIN DE LA PAGE < ALPHA-NUMERIQUE A ETE ATTEINTE. < < DEPILEMENT DE GRAFP : < BSR AGRAFP < CALCUL DE Y=@SGRAFP. PULL < A=GRAFP. JNC E312 < OK , PILE NON VIDE. IC SGRAFP < RETOUR SUR LA TETE SI VIDE. E312: EQU $ STA GRAFP < GRAFP<0. BR AE42 < VERS LA BOUCLE DE L'EDITEUR. < < MISE EN MODE PROGRAMME : < FJ: EQU $ LA GRAFP < VALIDATION DE LA COMMANDE. JAL E313 < OK. E420: EQU $ < ENTRY PAS DE MODE PROGRAMME. BR AE40 < ERREUR : MODE PROGRAMME < DEJA EN COURS. E313: EQU $ RBT 0 < MISE EN MODE PROGRAMME. E262: EQU $ STA GRAFP < GRAFP=INDEX DU CURSEUR ALPHA- < NUMERIQUE DANS LA PAGE : DONNE < L'INDEX DE LA 1ERE COMMANDE < GRAPHIQUE. BR AE42 < VERS LA BOUCLE DE L'EDITEUR. PAGE < < < M I S E D E L A C O M M A N D E < S U I V A N T E E N M O D E ' C T R L ' : < < FCTRL: EQU $ LAI -'40 STA CTRL < CTRL=CONSTANTE DE CONVERSION D'UN < CARACTERE EN SON 'CTRL' ASSOCIE. BR AE42 < RETOUR A LA BOUCLE DE L'EDITEUR. PAGE < < < M I S E E N M O D E ' > ' O U ' < ' : < < < FONCTION : < LES CARACTERES '>' OU '<' PERMETTENT < EN GRAPHIQUE DE DISTINGUER 2 < JEUX DE PROGRAMMES GRAPHIQUES DE < MEME NOM MAIS DE CARACTERES DE < DECLARATION ('>' OU '<') DIFFERENTS. < < FINF: EQU $ FSUP: EQU $ LBY POINTC < RECUPERATION DU CARACTERE DE < COMMANDE ('>' OU '<'). STA FIS < CHANGEMENT DU MODE 'FIS'. BR AE42 < VERS LA BOUCLE DE L'EDITEUR. PAGE < < < D E S I G N A T I O N D ' U N P R O G R A M M E < G R P H I Q U E : < < < FONCTION : < LA COMMANDE ':' PERMET EN MODE < GRAPHIQUE DE DESIGNER UN PROGRAMME < GRAPHIQUE DANS LA PAGE ALPHA- < NUMERIQUE , ET D'EN FAIRE LE 'GRAFP' < COURANT ... < < F2P: EQU $ LAI 22 < UN CARACTERE OCCUPE 22 POINTS. STA VAR LAI 0 LB POINTC+1 < B=YG=Y(CURSEUR GRAPHIQUE). DV VAR < A=ENT(YG/22). ADRI -NBLIG,A MP C74 < B=-74*(NBLIG-ENT(YG/22)). LR B,Y < Y=-74*(NBLIG-ENT(YG/22)). LAI 14 < UN CARACTERE OCCUPE 14 POINTS < DE LARGEUR. STA VAR LAI 0 LB POINTC+2 < B=XG=X(CURSEUR GRAPHIQUE). DV VAR < A=ENT(XG/14). SBR Y,A < A=74*(NBLIG-ENT(YG/22))+ < ENT(XG/14)=INDEX DU PROGRAMME < GRAPHIQUE DANS LA PAGE ALPHA- < NUMERIQUE COURANTE. CPZ GRAFP < TEST DU MODE PROGRAMME OUI/NON ? JGE E262 < MODE PROGRAMME : ON Y RESTE. SBT 0 < MODE INTERACTIF : ON Y RESTE. JMP E262 PAGE < < < M O D I F I C A T I O N S D E S C O O R D O N N E E E S < D U P O I N T C O U R A N T ( P O I N T C ) : < < < FONCTION : < CES FONCTIONS PERMETTENT EN MODE < PROGRAMME DE SIMULER DES DEPLACEMENTS < DU CURSEUR GRAPHIQUE (POINTC). < < F1: EQU $ < X<--(X)+SCALE. CPZ SCAL13 JNE F30 < INVERSION '1' ET '3'. F10: EQU $ < INVERSION '1' ET '3'. LAD POINTC+2 < A=@X(POINTC). JMP E250 F2: EQU $ < Y<--(Y)+SCALE. CPZ SCAL24 JNE F40 < INVERSION '2' ET '4'. F20: EQU $ < INVERSION '2' ET '4'. LAD POINTC+1 < A=@Y(POINTC). E250: EQU $ LB SCALE < B=INCREMENT. JMP E251 F3: EQU $ < X<--(X)-SCALE. CPZ SCAL13 JNE F10 < INVERSION '1' ET '3'. F30: EQU $ < INVERSION '1' ET '3'. LAD POINTC+2 < A=@X(POINTC). JMP E252 F4: EQU $ < Y<--(Y)-SCALE. CPZ SCAL24 JNE F20 < INVERSION '2' ET '4'. F40: EQU $ < INVERSION '2' ET '4'. LAD POINTC+1 < A=@Y(POINTC). E252: EQU $ LB SCALE NGR B,B < B=DECREMENT. E251: EQU $ CPZ SCALXY JE E330 < MODE NORMAL DE X ET DE Y. IBT 15 < INVERSION DE X ET DE Y ; < (PAR PERMUTATION DE 'POINTC+1' , < ET DE 'POINTC+2') ; < A T T E N T I O N : 'POINTC' DOIT < ETRE A UNE ADRESSE IMPAIRE , < AFIN QUE 'POINTC+1' SOIT A < UNE ADRESSE PAIRE. E330: EQU $ LR A,C < C=@X/Y(POINTC). E303: EQU $ < ENTRY F5 & F6. LA 0,C < A=X/Y(POINTC). ADR B,A < INCREMENTATION/DECREMENTATION. JAGE E253 AD C1024 < DANS LE CAS OU X/Y(POINTC) EST < NEGATIF , ON LUI DONNE COMME < VALEUR , SA VALEUR MODULO 1024. E253: EQU $ CP C1024 JL E254 SB C1024 < DANS LE CAS OU X/Y EST SUPERIEUR < A 1024 ON LE RECALCULE MODULO < 1024. E254: EQU $ STA 0,C < MAJ DE X/Y(POINTC). BR AE42 < VERS LA BOUCLE DE L'EDITEUR. < < < D E P L A C E M E N T S P E R S P E C T I V E : < < F5: EQU $ < DEPLACEMENT VERS L'ARRIERE. CPZ SCAL56 JNE F60 < INVERSION '5' ET '6'. F50: EQU $ < INVERSION '5' ET '6'. LA SCALE SARS 2 < DIVISION DE SCALE PAR 4 POUR < DONNER L'IMPRESSION D'ELOI- < GNEMENT EN PERSPECTIVE .... JMP E300 F6: EQU $ < DEPLACEMENT VERS L'AVANT. CPZ SCAL56 JNE F50 < INVERSION '5' ET '6'. F60: EQU $ < INVERSION '5' ET '6'. LA SCALE SARS 2 < DIVISION DE SCALE PAR 4. NGR A,A < INVERSION DE SCALE LORS DES < DEPLACEMENTS VERS L'AVANT. E300: EQU $ LR A,B < B=INCREMENT/DECREMENT DE X/Y. LAD POINTC+1 LR A,C < C=@Y(POINTC). LA 1,C < A=X(POINTC). ADR B,A ADR B,A ADR B,A JAGE E301 AD C1024 < DANS LE CAS OU X(POINTC) EST < NEGATIF ,ON LUI DONNE COMME < VALEUR , SA VALEUR MODULO 1024. E301: EQU $ CP C1024 JL E302 SB C1024 < DANS LE CAS OU X EST SUPERIEUR A < 1024 , ON LE RECALCULE < MODULO 1024. E302: EQU $ STA 1,C < MAJ DE X(POINTC) : < X<--(X)+-3*SCALE/4. JMP E303 < VERS LE TRAITEMENT DE Y(POINTC). < Y<--(Y)+-SCALE/4. < < < P O S I T I O N N E M E N T E N B A S < A G A U C H E D E L ' E C R A N : < < F0: EQU $ STZ POINTC+1 < Y<--0. STZ POINTC+2 < X<--0. BR AE42 < VERS LA BOUCLE DE L'EDITEUR. PAGE < < < I N V E R S I O N S < ' 1 ' - ' 3 ' < ' 2 ' - ' 4 ' < ' 5 ' - ' 6 ' : < < F13: EQU $ STZ SCAL13 < MODE NORMAL DE '1' ET '3'. BR AE42 < VERS LA BOUCLE DE L'EDITEUR. F24: EQU $ STZ SCAL24 < MODE NORMAL DE '2' ET '4'. BR AE42 < VERS LA BOUCLE DE L'EDITEUR. F56: EQU $ STZ SCAL56 < MODE NORMAL DE '5' ET '6'. BR AE42 < VERS LA BOUCLE DE L'EDITEUR. F31: EQU $ IC SCAL13 < INVERSION DE '1' ET '3'. BR AE42 < VERS LA BOUCLE DE L'EDITEUR. F42: EQU $ IC SCAL24 < INVERSION DE '2' ET '4'. BR AE42 < VERS LA BOUCLE DE L'EDITEUR. F65: EQU $ IC SCAL56 < INVERSION DE '5' ET '6'. BR AE42 < VERS LA BOUCLE DE L'EDITEUR. < < < I N V E R S I O N D E X E T D E Y : < < FXY: EQU $ STZ SCALXY < MODE NORMAL DE X ET DE Y. BR AE42 < VERS LA BOUCLE DE L'EDITEUR. FYX: EQU $ IC SCALXY < INVERSION DE X ET DE Y. BR AE42 < VERS LA BOUCLE DE L'EDITEUR. < < < R E T O U R A U X M O D E S N O R M A U X : < < FSTAR: EQU $ STZ SCAL13 < MODE NORMAL DE '1'-'3'. STZ SCAL24 < MODE NORMAL DE '2'-'4'. STZ SCAL56 < MODE NORMAL DE '5'-'6'. JMP FXY < MODE NORMAL DE 'X'-'Y'. PAGE < < < F A C T E U R D ' E C H E L L E : < < F7: EQU $ LAI 4 JMP E260 F8: EQU $ LAI 8 JMP E260 F9: EQU $ LAI 16 E260: EQU $ STA SCALE < SAVE LE NOUVEAU FACTEUR < D'ECHELLE. BR AE42 < VERS LA BOUCLE DE L'EDITEUR. FPLUS: EQU $ LAI 1 < POUR FAIRE +1 SUR SCALE. JMP E270 FMOINS: EQU $ LAI -1 < POUR FAIRE -1 SUR SCALE. E270: EQU $ AD SCALE JALE E271 < SCALE=<0 , FAISONS SCALE<--128... CP C1024 JL E260 < OK , (A) EST SCALE. E271: EQU $ ANDI 'FF < SUPPRESSION DES NBRES NEGATIFS. EORI '80 < SI A=0 : A<--128 , < SI A>128 : A<--1. JMP E260 < OK , (A) EST SCALE. FOUVR: EQU $ LAI 6 < POUR FAIRE +6 SUR SCALE. JMP E270 FFERM: EQU $ LAI -6 < POUR FAIRE -6 SUR SCALE. JMP E270 PAGE < < < C A L C U L D E @ S G R A F P : < < < RESULTAT : < Y=@SGRAFP. < (DETRUIT A). < < PGRAFP: EQU $ LAD SGRAFP LR A,Y < Y=@SGRAFP. RSR PAGE < < < R E C H E R C H E D ' U N S E G M E N T D A N S T A G R < < < RESULTAT : < X=0 : SEGMENT NON TROUVE , < X#0 : SEGMENT TROUVE A L'ADRESSE (C) DANS TAGR. < < SEEKS: EQU $ LX ALTAGR < NBRE D'ENTREES DE TAGR. LR W,C < C=@TAGR. E52: EQU $ < NOTATION : < L'ORIGINE DU SEGMENT CONTENU DANS CETTE < ENTREE DE TAGR EST (Y1,X1) , SON < EXTREMITE EST (Y2,X2). LA 0,C < Y1. JAL E54 < CETTE ENTREE EST LIBRE , ON < LA SAUTE. SB 2,C < Y1-Y2. STA VAR LA POINTC+2 < X(POINTC). SB 1,C < X(POINTC)-X1. MP VAR < (Y1-Y2)(X(POINTC)-X1). SLRD 'A < ON ACCEPTE AINSI LES IMPRECISIONS < DE LA VISEE AVEC LE CURSEUR < GRAPHIQUE. LR B,Y < SAVE (Y1-Y2)(X(POINTC)-X1) DANS Y LA POINTC+1 < Y(POINTC). SB 0,C < Y(POINTC)-Y1. STA VAR LA 1,C < X1. SB 3,C < X1-X2. MP VAR < (Y(POINTC)-Y1)(X1-X2). SLRD 'A CPR B,Y < LE POINT COURANT APPARTIENT-IL < A PEU PRES AU SEGMENT CONTENU < DANS L'ENTREE COURANTE DE TAGR???? JNE E54 < NON , AU SUIVANT. < < CAS OU ON A TROUVE LA DROITE A LA QUELLE < APPARTIENT LE POINT DESIGNE PAR LA < COMMANDE 'E' , IL FAUT MAINTENANT VERIFIER < SI C'EST LE BON SEGMENT : < LA POINTC+1 < Y(POINTC). SB 2,C < Y(POINTC)-Y2. MP VAR < (Y(POINTC)-Y2)(Y(POINTC)-Y1). JAG E54 < LE PRODUIT ETANT POSITIF , LE < POINT N'APPARTIENT PAS AU < SEGMENT (C). JAL E53 < OK , PRODUIT NEGATIF , < CELA SIGNIFIE QUE LE POINT < DESIGNE PAR 'E' APPARTIENT BIEN < AU SEGMENT (Y1,Y2). CPZR B JNE E54 < < CAS OU LE PRODUIT EST NUL : LE SEGMENT < EST HORIZONTAL , OU LE POINT EST A UNE < EXTREMITE : < LA POINTC+2 < X(POINTC). SB 3,C < X(POINTC)-X2. STA VAR LA POINTC+2 < X(POINTC). SB 1,C < X(POINTC)-X1. MP VAR < (X(POINTC)-X1)(X(POINTC)-X2). JAG E54 < PRODUIT POSITIF. JAL E53 < OK , LE PRODUIT ETANT NEGATIF , < LE POINT DESIGNE < APPARTIENT AU SEGMENT (C). CPZR B JE E53 < OK , LE PRODUIT EST NUL. E54: EQU $ ADRI 4,C < ENTREE SUIVANTE DE TAGR. JDX E52 < SEGMENT SUIVANT .... E53: EQU $ RSR PAGE < < < P A G E A L P H A - N U M E R I Q U E E T < T A B L E D E S S E G M E N T S : < < PAGE: EQU $ < PAGE ALPHA-NUMERIQUE. X1: VAL NBCAR*NBLIG/2 X1: VAL 80-NBCAR/2+X1 < A CAUSE DE CARTE , QUI LIT < 80 CARACTERES , MEME SUR LA < DERNIERE LIGNE DE LA PAGE !!!?!? TAGR: EQU PAGE+X1 X50: VAL 4*LTAGR < LONGUEUR MOT DE TAGR. TOP: EQU TAGR+X50 < SOMMET DE EDIT. PAGE < < < G E N E R A T I O N : < < GENERE: EQU $ WORD '1E16 < APPEL AU CCI ... JMP GENERE < ET C'EST DEFINITIF ... END GENERE