NMPROC: VAL "GW" < NOM DU PROCESSEUR. DIM: VAL 3 < POUR LE PROCESSEUR GV , LA < DIMENSION DE L'ESPACE EST < IMPLICITEMENT 3. IDP "GW - RELEASE 01/06/1979" IDP "JOHN F. COLONNA" EOT #SIP DEFINITION CMS5# EOT #SIP DEF PROCESSEUR# PROG WORD GRAPH < ADRESSE DE DEPART DU PROCESSEUR. WORD 0 < POUR FAIRE $=$+1. PGRAPH: EQU $ < P DE LANCEMENT DE GRAPHIQUE2 < LORS D'UN APPEL PAR !GE. < (A NOTER : P='12). LRP L BR -2,L < ENTREE DANS LE PROCESSEUR. PAGE EOT #SIP DEFINITION ITEM# PAGE EOT #SIP IMAGE 256# NOM: EQU ZERO+PILE+5-LNOM-2 IMAG: EQU NOM+LNOM+2 < IMAGE VIDEO. PAGE < < < P I L E D E R E C U R S I V I T E : < < < FONCTION : < CETTE PILE PERMET LA RECURSIVITE < DU LANGAGE GRAPHIQUE : IMBRICATION < DES APPELS DE PROGRAMMES , IMBRICATION < DES BOUCLES DE REPETITIONS. < < < FORMAT : < ELLE EST FAITE D'ENTREES < DE DOUBLE-MOTS QUE L'ON EMPILE < ET DEPILE SUIVANT LES BESOINS. < < IR: VAL 0 < MOT0 D'UNE ENTREE : CONTIENT < LA CAUSE DE L'EMPILEMENT ET < L'INDEX DE RETOUR AU DEPILEMENT. < BIT0=1 : MODE INTERACTIF DE GR , < BIT1=1 : PUSH POUR REPETITIONS , < BIT2=1 : PUSH POUR APPEL PROG. < BIT3=1 : PUSH POUR SAUT-PROGRAMME CODREP: VAL '40 < PUSH POUR REPETITIONS. BITREP: VAL 1 < NUMERO DU BIT DE REPETITIONS. CODPRO: VAL '20 < PUSH POUR APPEL PROGRAMME. BITPRO: VAL 2 < NUMERO DU BIT D'APPEL PROGRAMME. < A T T E N T I O N : BITPRO < UTILISE AVEC BITDEF SIGNIFIE < QU'ON APPELLE UN PROGRAMME < AVEC CHANGEMENT D'ITEM COURANT. CODDEF: VAL '10 < PUSH POUR DEFINITION PROGRAMME. BITDEF: VAL 3 < NUMERO DU BIT DE SAUT DEFINITION. < A T T E N T I O N : BITDEF , < UTILISE AVEC BITPRO , SIGNIFIE < Q'ON APPELLE UN PROGRAMME AVEC < CHANGEMENT DE L'ITEM COURANT. CDCP: VAL 1 < MOT1 D'UNE ENTREE : CONTIENT < LE COMPTE DES DO , ET LE COMPTE < ALGEBRIQUE DES PARENTHESES. CD: VAL 2*CDCP+0 < OCTET0(MOT1)=NBRE DE REPETITIONS < (DO) RESTANT A FAIRE (INDEX < DE TYPE OCTET). CP: VAL 2*CDCP+1 < OCTET1(MOT1)=COMPTE ALGEBRIQUE < DES PARENTHESES RENCONTREES < SOUS CE NIVEAU : < '(' : +1 , < ')' : -1. LEPR: VAL 2 < NBRE DE MOTS OCCUPES PAR UNE < ENTREE DE LA PILE PIR. LPR: VAL 10 < NOMBRE D'ENTREES DE LA PILE < RECURSIVITE. PAGE < < T R A N S F O R M A T I O N S E L E M E N T A I R E S : < TRP: VAL 1 < ROTATION TRIGO. DE +15 DEGRE. TRM: VAL 2 < ROTATION ANTITRIGO DE -15 DEGRE. TR1: VAL 3 < ROTATION DE +PI/2. TR3: VAL 4 < ROTATION DE +3*PI/2 (-PI/2). TSO: VAL 5 < SYMETRIE PAR RAPPORT A L'ORIGINE. TSX: VAL 6 < SYMETRIE PAR RAPPORT A OX. TSY: VAL 7 < SYMETRIE PAR RAPPORT A OY. TS1: VAL 8 < SYMETRIE 1ERE BISSECTRICE. TA: VAL 9 < DESORTHOGONALISATION AIGUE. TO: VAL 10 < DESORTHOGONALISATION OBTUE. TH: VAL 11 < DESORTHOGONALISATION HAUTE. TB: VAL 12 < DESORTHOGONALISATION BASSE. NT: VAL 12 < NBRE DE TRANSFORMATIONS < ELEMENTAIRES RECONNUES. PAGE < < < L O C A L : < < LOCAL LOCGR LOC: EQU $ < < B U F F E R S : < CURSOR: DZS 3 < RESULTAT D'UNE LECTURE GRAPHIQUE: < OCTET0=CARACTERE DE DEBLOCAGE < DE LA VISU , < MOT1=Y(CURSEUR GRAPHIQUE REEL) , < MOT2=X(CURSEUR GRAPHIQUE REEL). < < S E G M E N T C O U R A N T : < SEG: DZS 4 < SEGMENT COURANT DU DESSIN. SEGORG: EQU SEG < POINT ORIGINE DU SEGMENT. SEGEXT: EQU SEG+2 < POINT EXTREMITE DU SEGMENT. < < C O N S T A N T E S : < Y: VAL 0 < CORRDONNEE Y D'UN POINT. X: VAL 1 < COORDONNEE X D'UN POINT. WHOS: WORD 0 < LISTE DES CONSTANTES A PUSHER/ < PULLER DANS STACK. < < DEBUT DE LA LISTE DES CONSTANTES 'STACKABLES' : < CTTE: WORD 1 < CONSTANTE DE GENERATION < GRAPHIQUE (1 INITIALEMENT). CV: DZS 2 < COORDONNEES Y ET X DU CURSEUR < GRAPHIQUE VIRTUEL. DY1: WORD 1 < PAS D'INCREMENTATION/DECRE- < MENTATION DE Y(CURSEUR VIRTUEL). DX1: WORD 1 < PAS D'INCREMENTATION/DECRE- < MENTATION DE X(CURSEUR VIRTUEL). ARGF: WORD -1 < INDEX DE LA 1ERE PRIMITIVE < DE L'ARGUMENT FORMEL COURANT. TRANS: WORD 0 < MEMORISATION DES TRANSFORMATIONS < ELEMENTAIRES CONSTITUANT LA < TRANSFORMATION COURANTE PAR BITS : < BIT1 : PRESENCE DE 'RP' , < BIT2 : PRESENCE DE 'RM' ,.... < ...... < BIT9 : PRESENCE DE 'S2'. TTRANS: DZS NT+1/2+1 < COMPTE DES REPETITIONS DES < TRANSFORAMTIONS ELEMENTAIRES A < RAISON D'UN OCTET PAR TRANS- < FORMATION. NSTACK: VAL $-WHOS-1 < NBRE DE CONSTANTES STACKABLES. < < FIN DE LA LISTE DES CONSTANTES 'STACKABLES' : < < < 3 - C U R S E U R : < X3: VAL 0 < X(3-CURSEUR). Y3: VAL 1 < Y(3-CURSEUR). Z3: VAL 2 < Z(3-CURSEUR). D3: VAL 3 < EMPLACEMENT DU 1ER DELTA (DX3). CV3: DZS DIM < CONTIENT RESPECTIVEMENT : < X3,Y3,Z3,DX3,DY3,DZ3 DU 3-CURSEUR DO DIM WORD 1 < LES PAS SONT INITIALISES A 1. C1: WORD CV3+Y3,X < RELAI INDEXE VERS LA COORDONNEE < DU 3-CURSEUR CONTENUE DANS CV+Y. < (INITIALISE SUR Y3). C2: WORD CV3+X3,X < RELAI VERS LA COORDONNEE DU < 3-CURSEUR CONTENUE DANS CV+X. < (INITIALISE SUR X3). < < S A U V E G A R D E D E L A T R A N S F O R M A T I O N < C O U R A N T E : < SAVET: EQU $ DO DIM DZS NT+1/2+1+1 < UNE ZONE PAR PLAN DE COORDONNEES. AT: WORD SAVET < ADRESSE DE LA ZONE DE SAUVEGARDE < DES TRANSFORMATIONS DANS LE < PLAN COURANT. < < L O N G U E U R D U C O N T E X T E : < LCON: VAL $-WHOS-1 < LONGUEUR MOTS DU CONTEXTE. < < C O N S T A N T E S : < RETSVC: WORD 0 < CONDITIONS DE RETOURS DES SVC. IEG: WORD 0 < INDEX COURANT DU PROGRAMME < GRAPHIQUE : DONNE L'INSTRUCTION < GRAPHIQUE COURANTE , OU LA < SUIVANTE A EXECUTER (SUIVANT < L'INSTANT OU L'ON SE PLACE). ACCEB: WORD LTNI < CONSTANTE UTILISEE POUR LES < CHANGEMENTS D'ITEM , ET LE < PASSAGE D'UN ITEM A L'AUTRE : < ACCEB>0 : ITEM COURANT=ITEM1 , < ACCEB<0 : ITEM COURANT=ITEM2. < (TRANSLATION DE TYPE MOT). ALTNI2: WORD 2*LTNI < LONGUEUR MAX TOTALE D'UN < ITEM (EN-TETE+CORPS). F3: WORD 0 < FONCTION DE CODAGE DES <NOM>. < ET @ITEM DE RECHERCHE LORS DE < LA RECHERCHE DES PROGRAMMES. < CONTIENT AUSSI LA VARIABLE < TRANST UTILISEE LORS DES < DEPLACEMENTS DU CV. ADXDY: EQU F3 < RELAI TEMPORAIRE VERS DX OU DY. NCP: WORD NBCAR*NBLIG < NBRE DE CARACTERES DANS L'ITEM. NCALL: WORD $+1,X;"GE";"EI" < NOMS DES BRANCHES D'OVERLAY < DE RETOUR DE 'GR'. AGON1: WORD N1 < NOEUD D'ACCES A LA PRIMITIVE < SUIVANTE LORS DE L'ANALYSE < SYNTAXIQUE DU LANGAGE. AGON22: WORD N22 < NOEUD DE BRANCHEMENT LORS DE < LA RENCONTRE DE CARACTERES < HORS-LA PAGE (GET CARACTER). KIN: WORD -1 < COMPTEUR DES ENTRIES DANS GR. < < CONSTANTES VIDEO : < WORKS: WORD 0 < POUR SAUVER LE REGISTRE B < DANS 'MCVCR' LORSQUE LA PILE < K EST PLEINE... NMPL: WORD CNMPL < NBRE DE MOTS PAR LIGNE. NLIG: WORD 1024/RDY-1 < NBRE DE LIGNES-1 D'UNE IMAGE. AIMAG: WORD IMAG < ADRESSE DE L'IMAGE VIDEO. ALI: WORD LIMAG < LONGUEUR MOT DE L'IMAGE... AAI: WORD IMAG-1,X < RELAI DE RAZ IMAGE. APILD: WORD PILD-1 < ADRESSE DE LA PILE DICHOTOMIQUE. DICOX: WORD 0 < X DU POINT VIDEO COURANT M. DICOY: WORD 0 < Y DU POINT VIDEO COURANT M. DICOX1: WORD 0 < X DE L'ORIGINE VIDEO COURANTE M1. DICOY1: WORD 0 < Y DE L'ORIGINE VIDEO COURANTE M1. DICOX2: WORD 0 < X EXTREMITE VIDEO COURANTE M2. DICOY2: WORD 0 < Y EXTREMITE VIDEO COURANTE M2. APOINT: WORD POINT < ADRESSE DE L'INSTRUCTION < SBT/RBT DE POSITIONNEMENT DES < POINTS VIDEO LORSQUE LA < BRANCHE 'V' EST RESIDENTE. NBSEG: WORD 0 < COMPTEUR DES SEGMENTS TRACES < SIT BIT0(NBSEG)=0. IF ORDI-"T",XWOR%,,XWOR% ASP3: WORD SP3 < ROUTINE DE STABILISATION < IMAGE SI :SYS (=0 SINON). ACNSYS: ASCI ":SYS" XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% STABIL: WORD '8A01 < DEMANDE DE STABILISATION VIDEO. WORD IMAG-ZERO*2 WORD LIMAG*2 WORD TVPV < SUR LE PROCESSEUR VERT. XWOR%: VAL 0 ASTAB: WORD STAB < STABILISATION VIDEO SI :SYS. < < CONSTANTES TRI-DIMENSIONNELLES : < ACV3: WORD CV3,X < DONNE L'ADRESSE INDEXEE DE CV3. MPROJ: WORD 7;4;-3;3;4 < < F O R M A T D E S M A T R I C E S < D E T R A N S F O R M A T I O N : < DIV: VAL 0 < MOT0 : CONTIENT UN DIVISEUR < COMMUN A TOUS LES COEFFICIENTS ; < ON PEUT DONC AINSI REPPRESENTER < LES COEFFICIENTS EN NBRE ENTIERS; < SI CE DIVISEUR EST EGAL A < L'UNITE (1) , ON PEUT LE < REMPLACER PAR 0 .... < OU TOUT NOMBRE NEGATIF , ET < PAR EXEMPLE DES RELAIS INDEXES !!! A11: VAL 1 A12: VAL 2 A21: VAL 3 A22: VAL 4 NEUTRE: VAL 5 < 'NEUTRE' DONNE LA PUISSANCE A < LAQUELLE IL FAUT ELEVER LA < MATRICE POUR OBTENIR L'OPERATEUR < NEUTRE (1,0,0,1). < ON A : < (A11 A12) < M=1/DIV( ) < (A21 A22) < < T R A N S F O R M A T I O N S E L E M E N T A I R E S : < MRP: WORD 25;24;-7;7;24;22 MRM: WORD 25;24;7;-7;24;22 MR1: EQU $ ATCOM: WORD TCOM-'20,X < TABLE DES PRIMITIVES EN ACCES < DIRECT , TRANSLATEE PAR 'SPACE'. WORD 0;-1;1;0;4 MR3: EQU $ LWHOSI: WORD WHOS+NSTACK+1,X < REALI VERS LES CONSTANTES < STACKABLES AU 'PUSH' IN STACK. WORD 0;1;-1;0;4 MSO: EQU $ LWHOSO: WORD WHOS,X < RELAI VERS LES CONSTANTES < STACKABLES AU 'PUL'' IN STACK. WORD -1;0;0;-1;2 MSX: EQU $ NTRANS: WORD TTRANS,X < NBRE DE FOIS QUE LA TRANSFORMA- < TION ELEMENTAIRE DOIT ETRE < REPETE (UN OCTET PAR TRANS- < FORMATION). WORD 1;0;0;-1;2 MSY: EQU $ APRC: WORD PIR,X < ENTREE COURANTE DANS LA PILE < DE RECURSIVITE. WORD -1;0;0;1;2 MS1: EQU $ AI1: WORD ZERO+PILE-LTNI+LTN,X < RELAI VERS L'ITEM1 A PRIORI , POUR < METTRE LE TYPE 'D'. WORD 0;1;1;0;2 MA: WORD 25;25;7;0;24 C1023: WORD 1023 < NBRE DE POINTS-1 SUR UN AXE. < ET DEGRE D'IDEMPOTENCE DE MA. MO: WORD 25;25;-7;0;24 C1024: WORD 1024 < NBRE DE POINTS SUR UN AXE. < ET DEGRE D'IDEMPOTENCE DE MO. MH: WORD 25;24;0;7;25 C100: WORD '100 < DEGRE D'IDEMPOTENCE DE MH , < AINSI QUE CONSTANTE DE DECONCA- < TENATION DES PRIMITIVES DANS < L'INTERPRETEUR. MB: WORD 25;24;0;-7;25 CFFF: WORD '0FFF < POUR RAZ DES BITS 0,1,2,3. < ET DEGRE D'IDEMPOTENCE DE 'MB'. < < R E L A I D E S T A B L E S : < AIC: WORD ZERO+PILE-LTNI+LTN,X < RELAI VERS L'ITEM COURANT. AIR: WORD ZERO+PILE-LTNI+LTN,X < RELAI VERS L'ITEM DANS LEQUEL < ON RECHERCHE LA DEFINITION < D'UN PROGRAMME. X1: VAL LEPR*LPR-LEPR < NBRE DE MOTS DE PIR-'LEPR'. BPR: WORD PIR < BASE DE LA PILE DE RECURSIVITE. TPR: WORD PIR+X1 < TOP DE LA PILE DE RECURSIVITE. LSTACK: VAL 16 < LONGUEUR DE 'STACK'. ASTACK: WORD STACK < RELAI POINTEUR DE 'STACK'. ARACI: WORD RACB < ADRESSE BRANCHE OVERLAY ' W'. < < R E L A I D E S R O U T I N E S : < AGOGER: WORD GOGER < ADRESSE DE RETOUR SI ALT-MODE. ASVC: WORD RSVC < ROUTINE D'EXECUTION DES SVC. AOVL: WORD OVL < CHAGEMENT DES OVERLAYS. ADIV: WORD DIVENT < DIVISION ENTIERE PAR EXCES < OU PAR DEFAUT , SUIVANT LES CAS. ACHKCV: WORD CHKCV < CHECK UNE COORDONNEE DU < CURSEUR VIRTUEL. AGTCAR: WORD GETCAR < ACCES A UN CARACTERE DANS < LA RECHERCHE DES PROGRAMMES. AGTK: WORD GTK < ACCES A UN CARACTERE A CODER. AEXE24: WORD EXEC24 < POUR SIMULATION INTERACTIVE < DES COMMANDES '2' ET '4'. AEXE13: WORD EXEC13 < POUR SIMULATION INTERACTIVE < DES COMMANDES '1' ET '3''. ASELDX: WORD SELDX < POUR SELECTION INTERACTIVE DE DX. ASELDY: WORD SELDY < POUR SELECTION INTERACTIVE DE DY. AMCVCR: WORD MCVCR < POUR SIMULER LE DEPLACEMENT DU < CURSEUR VIRTUEL PAR LE CURSEUR < REEL EN INTERACTIF. APRGI: WORD PRIMGI < PRIMITIVE DE GET CARACTERE < EN VERSION INTERACTIVE. ALOOPB: WORD LOOPB < RETOUR DE L'INTERPRETEUR. AE111: WORD E111 < RETOUR DE PRIMGI VERS PRIMG. AGOGE: WORD GOGE < RETOUR OK A 'GE' : L'ITEM < COURANT RECOIT LE TYPE 'D'. APROJ: WORD PROJET < ROUTINE DE PROJECTION PLANE. ASPDXY: WORD SPDXY < RESTAURATION DE 2 DES 3 PAS < A PARTIR DE DX ET DY. ACHGTI: WORD CHGTI < CHANGEMENT D'ITEM COURANT. AVIDEO: WORD VIDEO < MODULE DE CONVERSION DU < GRAPHIQUE EN VIDEO. ADICO: WORD DICO < ROUTINE RECURSIVE DICHOTOMIQUE. ARETV: WORD RETV < RETOUR DE LA CONVERSION VIDEO. ASET: WORD SET < ROUTINE DE MISE A 1 D'UN POINT. < < D E M A N D E S A C M S 4 : < DEMBAC: WORD '0602 < DEMANDE DE 'LOAD SOUS :SYS' , < AFIN DE FAIRE LE RETOUR A < L'APPELANT DE G3. WORD BRANCH-ZERO*2 LOVL: WORD ZERO-BRANCH+PILE-LTNI-LTNI*2 < LONGUEUR EN OCTETS DES BRANCHES < D'OVERLAY. WORD -1 DEMSGN: WORD '0402 < DEMANDE AU SGN , INITIALISEE < EN STORE , AFIN DE GENERER < LORS DE !LOAD LA BRANCHE 'GR ' WORD BRANCH-ZERO*2 WORD ZERO-BRANCH+PILE-LTNI-LTNI*2 WORD -1 < LA VALEUR SUIT LE NOM. IF DIM-3,X100,,X100 DEMLOD: WORD '0602 < DEMANDE DE CHARGEMENT DES < BRANCHES D'OVERLAY DE G3. WORD XWOR%A WORD ZERO-BRANCH+PILE-LTNI-LTNI*2 WORD -1 COPY: WORD '0B07 < HARD-COPY. BYTE '1B;'17;'8D;'1D DEMOUT: WORD '0B02 < EMISSION MESSAGE. WORD 0 WORD 0 DEMMEM: WORD '0004 < DEMANDE D'ALLOCATION 8K MOTS. RELMEM: WORD '0004 < DEMANDE DE RETOUR A 4K MOTS. WORD '5000 <10K MOTS='5000 OCTETS. WORD '2000 < 4K MOTS='2000 OCTETS. WG: WORD '0B0A < ECRITURE GRAPHIQUE. WORD SEG-ZERO*2 WORD 8 OG: WORD '0B03 < OPEN GRAPHIQUE. CU: WORD '0B06 < MISE EN FONCTION DU CURSEUR. WORD 0 < AMDEM DOIT ETRE NUL !!! LG: WORD '0B09 < LECTURE DU CURSEUR GRAPHIQUE. WORD CURSOR-ZERO*2 WORD 6 CG: WORD '0B04 < CLOSE GRAPHQIE. DERASE: WORD '0B05 < EFFACEMENT DE L'ECRAN VISU. DEMDK: WORD '0C02 < ACCES DIRECT AU DISQUE DE < SWAPPING INITIALISE EN 'WRITE'. WORD WHOS-ZERO+1*2 < @BUFFER=@LISTE DES CONSTANTES < STACKABLES. WORD LCON*2 SAVE: WORD 0 < ZONE DE SAUVEGARDE TEMPORAIRE , < ET NUMERO RELATIF DU SECTEUR < A ECHANGER. SLEEP: WORD '0005 < DEMANDE DE TEMPORISATION POUR < FAIRE UNE COPY. ASAUT: WORD N1616 < ADRESSE DE TRAITEMENT DES < PRIMITIVES INHIBEES. WORD 15 < 15 SECONDES DE TEMPORISATION < POUR FAIRE UN HARD-COPY. C5: EQU SLEEP < CONSTANTE MULTIPLICATIVE 5. DEMCCI: EQU MR1+3 < DEMANDE DE RETOUR AU CCI. PAGE < < D E F I N I T I O N D U < R E F E R E N T I E L C O U R A N T : < TRANST: EQU F3 < VALEUR TEMPORAIRE DE TRANS LORS < DES CALCULS DE CHANGEMENT DE < REFERENTIEL (CF. 1,2,3,4). MTRANS: WORD $+1,X < RELAIS VERS LES MATRICES DES < TRANSFORMATIONS ELEMENTAIRES. ICALLI: BYTE 4;MRP-ZERO < L'OCTET0 CONTIENT DE PLUS LE < SEUIL D'APPELS IMPLICITES DES < PROGRAMMES POUR LES COMPTES DE < PARENTHESES. BYTE MRM-ZERO;MR1-ZERO BYTE MR3-ZERO;MSO-ZERO BYTE MSX-ZERO;MSY-ZERO BYTE MS1-ZERO;MA-ZERO BYTE MO-ZERO;MH-ZERO BYTE MB-ZERO;0 DV: DZS 2 < VECTEUR DES DEPLACEMENTS EN X,Y < SUR LE REFERENTIEL LOCAL. DVX: EQU DV+0 < AXE DES X. DVY: EQU DV+1 < AXE DES Y. PAGE < < < E X E C U T I O N D E S S V C : < < < ARGUMENT : < A=@DEMANDE A CMS4. < < < RESULTATS : < RETSVC=CONDITIONS DE RETOUR DE CMS4 , < INDICATEURS POSITIONNES EN FONCTION DES ERREURS. < < PROG RSVC: EQU $ PSR X < SAVE X. SVC 0 < ENVOI DE LA DEMANDE (A) A CMS4. STX RETSVC < SAVE LES CONDITIONS DE RETOUR. PLR X < RESTAURE X. RSR PAGE < < < D I V I S I O N E N T I E R E : < < < FONCTION : < REALISER UNE DIVISION ENTIERE APR < (DIV,W) PAR EXCES OU PAR DEFAUT < SUIVANT LA NECESSITE , C'EST-A-DIRE < SUIVANT LA POSITION DU DOUBLE DU < RESTE PAR RAPPORT A (DIV,W). < < < ARGUMENT : < B=DIVIDENDE , < W=@MATRICE DE TRANSFORMATION. < < < RESULTAT : < B=QUOTIENT. < < DIVENT: EQU $ LR B,A SARD 16 < ON MET LE DIVIDENDE SUR 32 BITS. DV DIV,W < EXECUTION DE LA DIVISION. ADR B,B < ON DOUBLE LE RESTE , SOIT 2*R. XR A,B < ON MET LE QUOTIENT DANS B. < (ET 2*R DANS A). JAGE E70 < OK , ON : 2*R>=0. NGR A,A < SINON , ON LE REND POSITIF. E70: EQU $ CP DIV,W < TESTE DE LA POSITION DE 2*R < PAR RAPPORT AU DIVISEUR (DIV,W). JL E45 < DANS LE CAS OU 2*R<DIVISEUR , < ON FAIT UNE DIVISION PAR DEFAUT. CPZR B < TEST DU SIGNE DU QUOTIENT. JGE E320 < QUOTIENT>=0 : ON FAIT B<--(B)+1. ADRI -2,B < QUOTIENT<0 : ON FAIT B<--(B)-1. E320: EQU $ ADRI 1,B < DANS LE CAS OU 2*R>=DIVISEUR , < ON FAIT UNE DIVISION PAR EXCES. E45: EQU $ RSR PAGE < < < C H E C K C U R S E U R V I R T U E L : < < < FONCTION : < CETTE ROUTINE TESTE LES OVERSCREEN < DU CURSEUR VIRTUEL . S'IL APPARAIT < UNE SORTIE DE L'ECRAN , ELLE LE < FAIT REAPPARAITRE EN PASSANT PAR < SON INFINI. < < < ARGUMENT : < A=COORDONNEE X OU Y DU CURSEUR VIRTUEL. < < < RESULTAT : < A=COORDONNEE X OU Y DU CURSEUR VIRTUEL. < < CHKCV: EQU $ JAL E46 < LA COORDONNEE EST NEGATIVE. CP C1024 JGE E47 < LA COORDONNEE EST TROP GRANDE. < < CAS OU LA COORDONNEE EST OK : < E48: EQU $ RSR < < CAS D'OVERSCREEN : < E46: EQU $ AD C1024 < PASSAGE APR MOINS L'INFINI .. JMP E48 E47: EQU $ SB C1024 < PASSAGE PAR PLUS L'INFINI ... JMP E48 PAGE < < < S O R T I E S D E G R A P H I Q U E 2 : < < < R E T O U R A U C C I : < < GOCCI: EQU $ < ON A ICI : < Y=CARACTERE COURANT NON RECONNU , ET < D'INDEX (IEG)-1. < (EN CAS D'EREUR DU PROGRAMME !!!) < < TRONC COMMUN CCI,!GE,ERREUR : < E10: EQU $ LAD DEMCCI E11: EQU $ < ENTRY 'ERASE'. BSR ASVC < RETOUR AU CCI DE CMS4. < (OU EFFACEMENT ECRAN....) < < CAS D'UN RETOUR PAR !GO : < LAD OG E965: EQU $ < ENTRY MAKE-COPY. BSR ASVC < RE-MISE EN GRAPHIQUE DE LA VISU. RSR < RETOUR A L'INTERPRETEUR ; A < NOTER QUE X EST POSITIONNE ... < < < 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 : DESSIN AFFICHE ENTIEREMENT , < CDRET=2 : DESSIN ABORTE PAR CTRL-X-OFF. < < GOGE: EQU $ < < MAJ DU TYPE DE L'ITEM : < LXI IINDIC-LTN*2 < INDEX D'OCTET !!! LAI "D" < TYPE 'DESSIN'. STBY &AI1 < (POUR L'ITEM1 !!!). < < R E T O U R E N E R R E U R A < L ' A P P E L A N T : < GOGER: EQU $ LAD RELMEM SVC 0 < RETOUR A 4K MOTS. LX RETSVC < X=CONDITIONS DE RETOUR DU < SVC PRECEDENT. < < TRANSMISSION DES ARGUMENTS : < LAI BRANCH-ZERO LR A,W < REINITIALISATION DE W=@BRANCH. LA MODCAL,W < A=0 SI 'GE' , A=1 SI 'EI'. ADR A,A < A=0 SI 'GE' , A=2 SI 'EI'. ANDR X,A < A=0 , SI RETOUR PRECEDENT OK , < A=2 SI RETOUR CTRL-X-OFF. STA CDRET,W < RENVOI DES CONDITIONS DE RETOUR. LX MODCAL,W < X=IDENTIFICATEUR DE L'APPELANT : < X=0 : APPEL PAR !GE , < =1 : APPEL PAR 'EI'. STZ MODCAL,W < REINITIALISATION DE MODCAL. LA &NCALL < RECUPERATION DU NOM DE LA < BRANCHE D'OVERLAY DE RETOUR, < QUI EST D'AILLEURS CELLE D'APPEL. GOB: EQU $ STA 0,W < LE NOM DE LA BRANCHE D'OVERLAY < A APPELER EST 'GE'/'EI'. < < RETOUR A L'APPELANT : < LAD CG BSR ASVC < RETOUR EN ALPHA-NUMERIQUE DE < LA VISU. LAD DEMBAC < A=@DEMBAC. < A NOTER : < (C)#0 : AINSI , SI LE PROCESSEUR 'EI' REPREND < LA MAIN , IL NE CONFOND PAS CETTE < ENTRY AVEC UNE GENERATION DE 'GO'. BSR AOVL < TENTATIVE DE CHARGEMENT DE LA < BRANCHE D'OVERLAY !GE. < < RETOUR EN ERREUR : ON SAIT QUE < SI L'ON REVIENT ICI , C'EST QUE < LE CHARGEMENT DE !GE N'A PU SE < REALISER CORRECTEMENT , ON VA < DONC REDONNER LA MAIN AU CCI , CAR < CERATINEMENT !SGN MANQUE : < JMP E10 < VERS LE CCI. < < < E R R E U R S A L ' E X E C U T I O N < D U P R O G R A M M E G R A P H I Q U E : < < ERREUR: EQU GOCCI PAGE < < < T R A I T E M E N T D E S E R R E U R S < D ' E X E C U T I O N : < < < FONCTION : < CETTE ROUTINE MET SI CELA EST < POSSIBLE LE CARACTERE COURANT < AIC(IEG) EN POSITION HAUTE PAR < POSITIONNEMENT DE SONT BIT0 A 1. < < < RETOUR TOUJOURS EN ERREUR. < < CARUP: EQU $ LA IEG < ACCES A L'INDEX COURANT. < D'EXECUTION. LR A,X < NOTER : X=(IEG)#0 !!! CP NCP < EST-IL HORS-LA PAGE ??? JGE E510 < OUI , ON NE FAIT RIEN. ADRI -1,X < SINON : X=INDEX DU CARACTERE < EN ERREUR (IEG-1). LBY &AIC < ACCES AU CARACTERE COURANT. ORI '80 < POSITIONNEMENT DE SON BIT0. STBY &AIC < ET REMISE DANS L'ITEM COURANT. E510: EQU $ RSR < RETOUR INDIFFERENT CAR APPELE < PAR UNE PRIMITIVE 'PCS'. PAGE < < < E F F A C E M E N T E C R A N : < < ERASE: EQU $ LX ALI ERAS1: EQU $ STZ &AAI < EFFACEMENT VIDEO. JDX ERAS1 LAD DERASE JMP E11 < VERS L'EFFACEMENT DE L'ECRAN , < PUIS LE RETOUR EN GRAPHIQUE. PAGE < < < M A K E C O P Y : < < < FONCTION : < LA COMMANDE 'H' PERMET DE FAIRE < UN HARD-COPY AVEC SA TEMPORISATION. < < HCOPY: EQU $ LAD COPY BSR ASVC < ENVOI DE LA COMMANDE HARD-COPY. LAD SLEEP JMP E965 < VERS LA TEMPORISATION DE 1K < SECONDES. PAGE < < < M O D I F I C A T I O N D E L A C O N S T A N T E < D E G E N E R A T I O N G R A P H I Q U E : < < < ARGUMENT : < SAVE=NOUVELLE VALEUR DE LA CONSTANTE. < < < RESULTAT : < CTTE=(SAVE) , < X INDIFFERENT. < < SCTTE: EQU $ LA SAVE < RECUPERATION DE LA NOUVELLE < VALEUR A DONNER A CTTE. STA CTTE < MAJ DE CTTE. RSR < RETOUR INDIFFERENT (QUELQUE < SOIT X). PAGE < < < C H O I X D E L ' A F F I C H A G E < N O I R / B L A N C E N V I D E O : < < < ARGUMENT : < B='40 : DEMANDE D'AFFICHAGE EN BLANC ; ON < VA POSITIONNER UN SBT 0,X ; < B='00 : DEMANDE DE CHANGEMENT DE < 'COULEUR' : ON PASSE AU BLANC < S'IL Y AVAIT DU NOIR ET INVERSE- < MENT ; UN SBT DEVIENT UN RBT , < ET UN RBT DEVIENT UN SBT .... < < COLOR: EQU $ < C'EST UN BIEN GRAND MOT !!! LA &APOINT < ACCES INSTRUCTION COURANTE. ORR B,A IBT 9+16 < INVERSION DE L'ARGUMENT (B). EORR B,A STA &APOINT < MAJ INSTRUCTION COURANTE. RSR PAGE < < < C O N S T R U C T I O N D U < S E G M E N T C O U R A N T : < < < O R I G I N E : < < < FONCTION : < APPELE PAR 'A' , CE MODULE < MET L'ORIGINE DU SEGMENT COURANT < (SEGORG) A L'EMPLACEMENT COURANT < DU CURSEUR VIRTUEL. < < < ARGUMENT : < B=4 (=COMPTE D'OCTETS DU WG). < < EXECA: EQU $ STB WG+2 < COMPTE D'OCTETS DU WG. LAI SEGORG-ZERO*2 STA WG+1 < AFIN D'ENVOYER LES COORDONNEES < DE L'ORIGINE DU SEGMENT. BSR APROJ < PROJECTION DE L'ESPACE (X3,Y3,Z3) < SUR LE PLAN (X3,Y3). STY SEGORG+Y < Y(ORIGINE SEGMENT COURANT). STX SEGORG+X < X(ORIGINE SEGMENT COURANT). JMP E841 < VERS L'OPEN GRAPHIQUE , ET < L'ENVOI DES COORDONNEES DE < L'ORIGINE ; A NOTER : B=4#0 !!! < < < E X T R E M I T E : < < < FONCTION : < CE MODULE EST APPELE PAR 'B' OU < 'S' . IL FIXE L'EXTREMITE DU SEGMENT < COURANT A L'EMPLACEMENT DU CURSEUR < VIRTUEL COURANT . ENSUITE IL AFFICHE < SUR L'ECRAN CE SEGMENT COURANT ; < ET ENFIN , POUR : < 'B' : L'EXTREMITE DU SEGMENT DEVIENT < L'ORIGINE COURANTE , < 'S' : L'ORIGINE COURANTE RESTE TELLE < QUEL (C'EST LE MODE TRAVAIL < EN ETOILE , PAR OPPOSITION DU < MODE SEQUENTIEL DE 'B'). < < < ARGUMENT : < B=4 : MODE SEQUENTIEL ('B') , < B=8 : MODE ETOILE ('S'). < < < RESULTAT : < RETOUR A 'GE' IMMEDIAT SI CTRL-X-OFF !!! < < EXECB: EQU $ EXECS: EQU $ BR AVIDEO < VERS LA CONVERSION EN VIDEO. RETV: EQU $ < RETOUR DE LA CONVERSION VIDEO. CPZR B JE E840 < CAS DE 'B' , PAS DE 'OG' , AFIN < DE CHAINER SUR LE POINT ENVOYE < PRECEDEMMENT. E841: EQU $ < ENTRY 'A' OU 'S'. LAD OG < ENVOI D'UN 'GS'. BSR ASVC < POUR EVITER DES CHAINAGES DE < SEGMENTS DE TYPE A-->B , < REALISES AUTOMATIQUEMENT PAR < LA VISU. JNE E21 < ABORT POUR ERREURS (CTRL-X-OFF??) E840: EQU $ < ENTRY 'B'. LAD WG E960: EQU $ < ENTRY 'EDITION DE MESSAGE'. BSR ASVC < ENVOI DE LA DEMANDE D'ECRITURE < GRAPHIQUE. JNE E21 < ABORT POUR ERREURS (CTRL-X-OFF??) < < DISCRIMINATION DU MODE D'APPEL : < CPZR B JNE E20 < CAS DU MODE 'S' (ET DE 'A' , < POUR LEQUEL L'ORIGINE A DEJA ETE < MODIFIEE). < < MODE 'B' SEQUENTIEL : < E600: EQU $ < ENTRY 'A'. STY SEGORG+Y < Y(ORIGINE SEGMENT COURANT). STX SEGORG+X < X(ORIGINE SEGMENT COURANT). < < RETOUR OK : < E20: EQU $ < < SORTIE DE LA ROUTINE : < E22: EQU $ RSR < < SORTIE EN ERREUR : < E21: EQU $ ADRI -1,K < RATTRAPGE DU RSR QUE L'ON SAUTE. BR AGOGE < VERS UN RETOUR OK A GE : L' < ITEM COURANT RECOIT LE TYPE 'D'. PAGE < < < P L A N D E P R O J E C T I O N : < < < FONCTION : < CETTE ROUTINE SELECTIONNE LE < PLAN DE PROJECTION ET DE TRAVAIL < CHOISIT PARMI LES 3 POSSIBLES : < 1- (X3,Y3) < 2- (Y3,Z3) , < 3- (Z3,X3). < LE 1ER AXE NOMME PEUT ETRE < PARCOURU A L'AIDE DES COMMANDES < '1' ET '3' , ALORS QUE LE 2EME < PEUT L'ETRE A L'AIDE DE '2' ET '4'. < POUR CE FAIRE , ELLE MEMORISE < LA CONNEXION EXISTANT APRES LE < CHOIX , ENTRE LES COORDONNEES X ET Y < DU CURSEUR VIRTUEL , ET 2 DES 3 < COORDONNEES DU 3-CURSEUR CHOISIES < PARMI (Y3,X3) , (Z3,Y3) , (X3,Z3). < DE PLUS ELLE SAVE/RESTORE LES < PAS SUR LES AXES ASSOCIES. < < < ARGUMENT : < B=4 : CHOIX DE (X3,Y3) , < =9 : CHOIX DE (Y3,Z3) , < =2 : CHOIX DE (Z3,X3). < < < RESULTAT : < RETOUR INDIFFERENT. < < CHPLAN: EQU $ < < SAUVEGARDE DE LA TRANSFORMATION COURANTE : < PSR B LAD TRANS < A=@EMETTEUR=@TRANSFORMATION < COURANTE. LB AT < B=@ZONE DE SAUVEGARDE RELATIVE < AU PLAN COURANT. LXI NT+1/2+1+1 < X=NBRE DE MOTS A DEPLACER. MOVE < SAUVEGARDE. PLR B < < SAUVEGARDE DU DX ET DY COURANT : < BSR ASPDXY < < CHANGEMENT DE PLAN : < LR B,A < RECUPERATION DE L'ARGUMENT. SLRS 2 < A=NUMERO DE LA COORDONNEE DU < 3-CURSEUR CONTENUE DANS CV+Y. AD ACV3 STA C1 < MISE EN PLACE DU RELAI D'ACCES < A LA COORDONNEE DU 3 CURSEUR < CONTENUE DANS CV+Y. LR B,A < RE-RECUPERATION DE L'ARGUMENT. ANDI '03 < A=NUMERO DE LA COORDONNEE DU < 3-CURSEUR CONTENUE DANS CV+X. LR A,Y < Y=NUMERO DU PLAN SELECTIONNE : < Y=0 : Q1 , < Y=1 : Q2 , < Y=2 : Q3. AD ACV3 STA C2 < MISE EN PLACE DU RELAI D'ACCES < A LA COORDONNEE DU 3-CURSEUR < CONTENUE DANS CV+X. < < INITIALISATIONS DES PAS DU CV : < (A NOTER QU'ON A : < X=D3). < LA &C1 STA DY1 < NOUVEAU PAS DY. LA &C2 STA DX1 < NOUVEAU PAS DX. < < RESTAURATION DE LA TRANSSFORMATION COURANTE < RELATIVE AU PLAN (Y) : < LBI TRANS-ZERO < B=@RECEPTEUR=@TRANSFORMATION < COURANTE. LAD SAVET < A=@ZONE DE SAUVEGARDE DES < 3 PLANS. E700: EQU $ CPZR Y < TEST SUR LE NUMERO DU PLAN. JE E701 < OK , A CONTIENT L'ADRESSE < DE LA ZONE DE SAUVEGARDE < DU PLAN (Y). ADRI NT+1/2+1+1,A < SINON , PROGRESSION DE L'ADRESSE < DANS LA ZONE DE SAUVEGARDE. ADRI -1,Y < DECREMENTATION DU NUMERO DU PLAN. JMP E700 E701: EQU $ STA AT < SAVE L'@ DE LA ZONE DE SAUVE- < GARDE DU PLAN (Y). < A=@EMETTEUR .... LXI NT+1/2+1+1 < X=NBRE DE MOTS A DEPLACER. MOVE < RESTAURATION DE LA TRANSFOR- < MATION COURANTE , ANOTER X=0 !!!!! < < MISE EN PLACE DES COORDONNEES DU CV : < (ON A : < X=0) < LA &C1 STA CV+Y < NOUVELLE COORDONNEE Y DU CV. LA &C2 STA CV+X < NOUVELLE COORDONNEE X DU CV. RSR < RETOUR EN ERREUR. < < < R E S T A U R A T I O N D E 2 D E S 3 P A S : < < < FONCTION : < RESTAURE 2 DES 3 PAS DES AXES (X,Y,Z) < A PARTIR DE DX,DY. < < < RESULTAT : < X=D3. < < SPDXY: EQU $ LXI D3 < X=INDEX D'ACCES A LA ZONE DES < PAS DX3,DY3,DZ3 DANS CV3. LA DY1 STA &C1 < SAUVEGARDE DE DY. LA DX1 STA &C2 < SAUVEGARDE DE DX. RSR PAGE < < < M O D I F I C A T I O N D E < D X E T / O U D Y : < < < S E L E C T I O N D X O U D Y : < < < FONCTION : < METTRE DANS ADXDY L'ADRESSE < DE DX OU CELLE DE DY. < < < RETOUR TOUJOURS EN ERREUR. < < SELDX: EQU $ LAD DX1 < A=@DX. JMP E26 SELDY: EQU $ LAD DY1 < A=@DY. E26: EQU $ STA ADXDY < MISE EN PLACE DU RELAI < TEMPORAIRE VERS DX OU DY. < < SORTIE TOUJOURS EN ERREUR DE 'SEL' ET 'EXEC' : < E520: EQU $ LXI 1 RSR < RETOUR EN ERREUR : X#0. < < < M O D I F I C A T I O N D E D X O U D Y : < < < FONCTION : < CES ROUTINES MODIFIENT LES VALEURS < COURANTES DU D (DX OU DY) DONT < L'ADRESSE EST DANS ADXDY. < PAR LA SUITE LE 'D' SERA APPELE < DELTA , LA CONSTANTE DONNEE EVENTUELLEMENT < EN ARGUMENT SERA ALPHA , ET LA < CONSTANTE COURANTE SERA CTTE. < < < RESULTAT : < LE RETOUR EST TOUJOURS EN ERREUR. < < < D E L T A <---- ( D E L T A ) + C T T E : < < EXECP: EQU $ LA &ADXDY < A=DELTA COURANT. AD CTTE < A=(DELTA)+CTTE. JMP E23 < VERS LA VAILDATION. < < < D E L T A <---- ( D E L T A ) - C T T E : < < EXECM: EQU $ LA &ADXDY < A=DELTA COURANT. SB CTTE < A=(DELTA)-CTTE. JMP E23 < VERS LA VALIDATION. < < < D E L T A <---- C T T E * A L P H A : < < EXECK: EQU $ LA SAVE < RECUPERATION DE LA CONSTANTE < DONNEE EN ARGUMENT (ALPHA) < DANS A A PARTIR DE (SAVE). E24: EQU $ < ENTRY POUR EXECMU. MP CTTE LR B,A < B=CTTE*(A PRECEDENT). JMP E23 < VERS LA VALIDATION. < < < D E L T A <---- ( D E L T A ) * C T T E : < < EXECMU: EQU $ LA &ADXDY < A=DELTA COURANT. JMP E24 < VERS LA MULTIPLICATION PAR CTTE. < < < D E L T A <---- ( D E L T A ) / C T T E : < < EXECD: EQU $ LAI 0 < INITIALISATION DE A. LB &ADXDY < B=DELTA COURANT. DV CTTE < DIVISION PAR CTTE ; A < CONTIENT LE NOUVEAU DELTA < (QUOTIENT). < < VALIDATION DU NOUVEAU DELTA (A) : < E23: EQU $ JALE E27 < CAS (A)<=0. CP C1023 JG E28 < CAS (A)>=1024. < < MODIFICATION DU DELTA COURANT : < E29: EQU $ STA &ADXDY JMP E520 < VERS UN RETOUR EN ERREUR. < < CAS DES OVERSCREEN : < E27: EQU $ < (A)<=0. AD C1023 < PASSAGE PAR L'INFINI .... JMP E23 < VERS LA REVALIDATION DU DELTA ... E28: EQU $ < (A)>=1024. SB C1023 < PASSAGE PAR MOINS L'INFINI. JMP E23 < VERS LA REVALIDATION DU DELTA ... PAGE < < < D E P L A C E M E N T D U C U R S E U R < V I R T U E L : < < < PHILOSOPHIE : < ON DISPOSE A L'EMPLACEMENT COURANT < DU CURSEUR VIRTUEL D'UN REFERENTIEL < LOCAL L(OX,OY) . LES DEPLACEMENTS DE TYPE < '1','2','3','4' SONT ECRITS DANS < L(OX,OY) . LE DEPLACEMENT REEL DU < CURSEUR VIRTUEL RESULTANT , EST CALCULE < A L'AIDE DE LA MATRICE DE TRANSFORMATION < COURANTE 'T' , COMPOSEE PAR UN < PRODUIT DE TRANSFORMATIONS ELEMENTAIRES : < A(OX,OY)=T*L(OX,OY) , SOIT POUR < LE CURSEUR VIRTUEL : < A(DX,DY)=T*L(DX,DY) , CELUI-CI < SE TROUVANT DEPLACER DU VECTEUR A(DX,DY). < (ON A : DV=L(DX,DY)). < < < ARGUMENT : < B=0 : DEPLACEMENTS '1' ET '2' , < =1#0 : DEPLACEMENTS '3' ET '4'. < < < RESULTAT : < RETOUR INDIFFERENT. < < < D E P L A C E M E N T S ' 1 ' E T ' 3 ' : < < EXEC13: EQU $ LA DX1 LYI 0 JMP E50 < VERS LE CALCUL DE DV. < < < D E P L A C E M E N T S ' 2 ' E T ' 4 ' : < < EXEC24: EQU $ LAI 0 LY DY1 < < TRONC COMMUN A TOUS LES DEPLACEMENTS : < < ON A ICI : < (A,Y)=DV INITIAL ; UNE DES < 2 COORDONNEES EST NULLE , < PUISQU'ON SE DEPLACE SUR L'UN < DES AXES LOCAUX. E50: EQU $ CPZR B < TEST SUR L'INVERSION DU VECTEUR < (A,Y) INITIAL. JE E51 < PAS D'INVERSION : CAS 1 ET 2. NGR A,A < CAS 3 ET 4. NGR Y,Y < CAS 3 ET 4. < < INITIALISATION DU VECTEUR DV : < E51: EQU $ STA DVX STY DVY < < CALCUL DU PRODUIT MATRICIEL T*DV : < LA TRANS < INDICATEUR DE PRESENCE DES < DIFFERENTES TRANSFORMATIONS < ELEMENTAIRES. E41: EQU $ JAE E40 < LA TRANSFORMATION 'T' EST < L'ELEMENT NEUTRE , OU A ETE < ENTIEREMENT CALCULEE. < < RECUPERATION D'UNE TRANSFORMATION ELEMENTAIRE : < DBT < X=TRANSFORMATION A EXECUTER. RBT 0,X < MEMORISATION DE SON EXECUTION. STA TRANST < SAVE L'INDICATEUR DE PRESENCE < DES TRANSFORMATIONS ELEMENTAIRES. < < EXECUTION DE LA TRANSFORMATION < ELEMENTAIRE DE NUMERO (X) : < LBY &MTRANS LR A,W < W=@DE LA MATRICE DE LA < TRANSFORMATION (X). LBY &NTRANS LR A,X < X=NBRE DE FOIS QUE CETTE < TRANSFORMATION DOIT ETRE < ITEREE. < < BOUCLE D'ITERATION D'UNE TRANSFORMATION ELEMENTAIRE : < E42: EQU $ LA A11,W MP DVX < B=A11*DVX. LR B,Y < Y=A11*DVX. LA A12,W MP DVY < B=A12*DVY. ADR B,Y < Y=A11*DVX+A12*DVY. LA A21,W MP DVX < B=A21*DVX. PSR B < SAVE A21*DVX. LA A22,W MP DVY < B=A22*DVY. PLR A < A=A21*DVX. ADR A,B < B=A21*DVX+A22*DVY. CPZ DIV,W < Y-A-T'IL UN DIVISEUR COMMUN < DIFFERENT DE 1 ??? JLE E44 < NON , RIEN A FAIRE. BSR ADIV < B=(A21*DVX+A22*DVY)/DIV. XR Y,B < Y=(A21*DVX+A22*DVY)/DIV , < B=A11*DVX+A12*DVY. BSR ADIV < B=(A11*DVX+A12*DVY)/DIV. XR Y,B < Y=NOUVEAU DVX , ET B=NOUVEAU DVY. < < MISE A JOUR ITERATIVE DE DV : < E44: EQU $ STY DVX < DVX=(A11*DVX+A12*DVY)/DIV. STB DVY < DVY=(A21*DVX+A22*DVY)/DIV. JDX E42 < ITERATION EVENTUELLE DE LA < TRANSFORMATION ELEMENTAIRE < COURANTE. LA TRANST < RESTAURE L'INDICATEUR DES < TRANSFORMATIONS ELEMNTAIRES < PRESENTES. JMP E41 < VERS L'EXECUTION DE LA SUIVANTE < EVENTUELLE. < < FIN DU CALCUL DE DV : < E40: EQU $ LXI 0 < INDEX D'ACCES AU 3-CURSEUR. < < DEPLACEMENT DU CURSEUR VIRTUEL : < (X,Y)<--(X,Y)+(DVX,DVY). < LA CV+X < A=X(CURSEUR VIRTUEL). AD DVX < X<--(X)+(DVX). BSR ACHKCV < VALIDATION DU NOUVEAU X(CURSEUR < VIRTUEL). STA CV+X < X(CURSEUR VIRTUEL). IF DIM-3,X100,,X100 STA &C2 < MAJ DU 3-CURSEUR FONCTION < DU PLAN DANS LE QUEL ON SE TROUVE X100: VAL 0 LA CV+Y < A=Y(CURSEUR VIRTUEL). AD DVY < Y<--(Y)+(DVY). BSR ACHKCV < VALIDATION DU NOUVEAU Y(CURSEUR < VIRTUEL). STA CV+Y < Y(CURSEUR VIRTUEL). IF DIM-3,X100,,X100 STA &C1 < MAJ DU 3-CURSEUR FONCTION DU < PLAN DANS LE QUEL ON SE TROUVE. X100: VAL 0 RSR < RETOUR INDIFFERENT. < < < M I S E A L ' O R I G I N E : < < ORIGIN: EQU $ STZ CV+X < LE CURSEUR VIRTUEL EST MIS STZ CV+Y < A L'ORIGINE DE L'ECRAN (0,0). STZ &C1 < RAZ D'UNE PARTIE DU 3-CURSEUR. STZ &C2 < RAZ D'UNE PARTIE DU 3-CURSEUR. RSR < RETOUR INDIFFERENT. PAGE < < < D E F I N I T I O N D E L A < T R A N S F O R M A T I O N C O U R A N T E : < < < I N I T I A L I S A T I O N : < < < FONCTION : < CETTE ROUTINE REINITIALISE LA < TRANSFORMATION COURANTE. < T=O (ELEMENT NEUTRE). < < < RESULTAT : < X=0 (RETOUR OK). < < ITRANS: EQU $ STZ TRANS < RAZ LA PRESENCE DE TOUTES LES < TRANSFORMATIONS ELEMENTAIRES. < < RAZ DE LA TABLE DES COMPTES DE PRESENCE : < LXI NT < X=NBRE DE TRANSFORMATIONS < ELEMENTAIRES RECONNUES. LAI 0 E60: EQU $ STBY &NTRANS < RAZ DU NBRE D'OCCURENCE DE LA < TRANSFORMATION (X). JDX E60 RSR < RETOUR AVEC X=0 (OK). < < < M A J T R A N S F O R M A T I O N C O U R A N T E : < < < FONCTION : < CETTE ROUTINE EFFECTUE LE < PRODUIT FONCTIONNEL DE LA TRANSFORMATION < COURANTE 'T' , AVEC LA TRANSFORMATION < ELEMENTAIRE T(B) DONNEE EN ARGUMENT : < T=T*T(B). < < < NOTA : < POUR SUPPRIMER UNE TRANSFORMATION < ELEMENTAIRE , IL SUFFIT DE MULTIPLIER < 'T' PAR SON INVERSE : < RP-1=RM , < RM-1=RP , < R1-1=R3 , < R3-1=R1 , < SO-1=SO , < SX-1=SX , < SY-1=SY , < S1-1=S1 , < ON REMARQUERA DE PLUS LES RELATIONS : < SX=SO*SY , < SY=SO*SX , < S1=SO*S2 , < S2=SO*S1 .... < (S2 DESIGNANT LA SYMETRIE PAR < RAPPORT A LA 2EME BISSECTRICE). < < < ARGUMENT : < B=NUMERO DE LA TRANSFORMATION ELEMENTAIRE < QUI VA MULTIUPLER 'T' (A NOTER B#0 TOUJOURS !!!!). < < < RESULTAT : < X#0 TOUJOURS (AFIN DE MINIMISER L'OCCUPATION < DE LA GRAMMAIRE). < < UTRANS: EQU $ LR B,X < X=NUMERO DE LA TRANSFORMATION < ELEMENTAIRE ; A NOTER X#0 !!!! LBY &MTRANS LR A,W < W=@DE LA MATRICE DE LA < TRANSFORMATION T(X). LBY &NTRANS ADRI 1,A < ET UNE ITERATION DE PLUS. SARD 16 < LE NBRE D'ITERATIONS SUR T(X) < EST ETENDU SUR 32 BITS. DV NEUTRE,W < ON CALCULE LE NBRE D'ITERATION < MODULO LA PUISSANCE QUI DONNE < L'OPERATION NEUTRE. LR B,A < A=RESTE DE LA DIVISION. STBY &NTRANS < NBRE D'ITERATIONS DE T(X). < (RESTE DE LA DIVISION). LA TRANS < ACCES A L'INDICATEUR DE PRESENCE < DES TRANSFORMATIONS ELEMENTAIRES. SBT 0,X < T(X) PRESENTE A PRIORI. CPZR B < DOIT-ELLE ETRE ITEREE AU < MOINS UNE FOIS ??? JNE E410 < OUI , DONC ELLE EST PRESENTE. RBT 0,X < SINON , ON LA REND ABSENTE. E410: EQU $ STA TRANS < MAJ DE L'INDICATEUR DE PRESENCE < DES TRANSFORMATIONS ELEMENTAIRES. RSR < RETOUR AVEC X#0. PAGE < < < A C C E S D I R E C T A U D K : < < < FONCTION : < CE MODULE PERMET DE SAUVEGARDER ET < DE RESTAURER 31 CONTEXTES DIFFERENTS < CONSTITUES PAR LA LISTE DES CONSTANTES < STACKABLES. < < < S A V E O U R E S T O R E ? ? : < < < ARGUMENT : < B=SENS (0/2) DE L'OPERATION. < < ADSEC: EQU $ STB DEMDK < MISE EN PLACE DE LA FONCTION. LAI 'C < A=NVP D'ACCES DIRECT AU DKS. STBY DEMDK < MISE EN PLACE DU NVP D'ACCES. RSR < < < S A V E / R E S T O R E C O N T E X T E : < < RWDK: EQU $ LAD DEMDK SVC 0 < EXECUTION DE LA DEMANDE. RSR < RETOUR AVEC LES CONDITIONS DE < RETOUR DE CMS4 DANS X. PAGE < < < S T A C K A G E D E S C O N S T A N T E S : < < < PHILOSOPHIE : < ON DISPOSE D'UNE PILE 'STACK' , < DANS LA QUELLE ON PUEUT EMPILER/ < DEPILER LES CONSTANTES , SOIT < POUR LES SAUVEGARDER POUR RESTAURATION < ULTERIEURE , SOIT POUR LES ECHANGER < (CF. PUSH X , PUIS PULL Y ). < SONT STACKABLES LES CONSTANTES < SUIVANTES : < 1- CTTE : APPELEE 'K' POUR L'OCCASION , < 2- CV : APPELE 'C' , < 3- DY : APPELE 'Y' , < 4- DX : APPELE 'X'. < 5- LA TRANSFORMATION COURANTE : APPELEE 'T'. < 6- L'ARGUMENT FORMEL : APPELE 'A'. < < < I N I T I A L I S A T I O N : < < < ARGUMENT : < B=0 : IL S'AGIT D'UN 'PULL' , < =1 : IL S'AGIT D'UN PUSH. < < < RESULTAT : < SAVE=0 : 'PULL' , < =1 : 'PUSH'. < < SWHOS: EQU $ STB SAVE < MEMORISATION DU SENS DE < L'OPERATION SUR 'STACK'. STZ WHOS < RAZ DE LA LISTE DES CONSTANTES < ATRAITER. RSR < < < I N S E R T I O N C O N S T A N T E S < D A N S L A L I S T E : < < < ARGUMENT : < B=NUMERO DE LA CONSTANTE A INSERER < DANS LA LISTE 'WHOS' ; DANS LE CAS OU < B EST NUL C'EST QUE L'OPERATION PORTE < SUR LA TRANSFORMATION COURANTE. < < < RESULTAT : < X#0 (TOUJOURS RETOUR EN ERREUR). < < RWHOS: EQU $ LXI 1 < LE STACKAGE PORTE SUR UN < SEUL MOT A PRIORI (CAS B#0). LR B,Y < Y=NUMERO DE LA CONSTANTE < EN CAUSE. CPZR B < EST-CE UNE OPERATION SUR 'T' ??? JNE E440 < NON , C'EST BON. < < CAS D'UNE OPERATION SUR 'T' : < LXI NT+1/2+1+1 < X=NBRE DE MOTS A EDPLACER < DANS LE CAS DE 'T'. LYI TRANS-WHOS < INDICE DU 1ER MOT A DEPLACER < POUR LA TRANSFORMATION 'T'. < < MISE A JOUR DE LA LISTE 'WHOS' : < E440: EQU $ LA WHOS < ACCES A LA LISTE. E441: EQU $ XR X,Y SBT 0,X < MEMORISATION DE LA CONSTANTE. < (BIT(X)=1). XR X,Y ADRI 1,Y < PROGRESSION DU NUMERO DE LA < CONSTANTE (Y). JDX E441 < CONSTANTE SUIVANTE. STA WHOS < MAJ DE LA LISTE. LXI 1 < POUR FAIRE UN RETOUR EN ERREUR. RSR < RETOUR EN ERREUR (TOUJOURS). < < < O P E R A T I O N S U R S T A C K : < < < ARGUMENT : < SAVE=SENS DE L'OPERATION : < =0 : 'PULL' , < =1 : 'PUSH'. < < < RESULTAT : < ERREUR SI L'OPERATION EST IMPOSSIBLE. < < ESTACK: EQU $ LY ASTACK < Y=@STACK. LB WHOS < B=LISTE DES CONSTANTES A TRAITER. CPZ SAVE < TEST DU SENS DE L'OPERATION. JE E300 < CAS DES 'PULL'. < < P U S H I N S T A C K : < LXI -NSTACK < < BOUCLE DE 'PUSH' PAR CONSTANTE : < E301: EQU $ TBT 16+NSTACK+1,X < LA CONSTANTE(X) EST-ELLE < CONCERNEE ??? JNC E302 < NON. LA &LWHOSI < SI OUI , ACCES A LA CONSTANTE(X+ < NSTACK+1). PUSH < ET EMPILEMENT DANS 'STACK'. JC E303 < DEBORDEMENT DE 'STACK' PAR < LE HAUT ; ABORT AVEC AU < PEALABLE UNE DECREMENTATION DU < POINTEUR DE STACK !!!!?? E302: EQU $ JIX E301 < CONSTANTE SUIVANTE. < A NOTER : < X=0 : RETOUR OK ... < < SORTIE DE LA ROUTINE : < E306: EQU $ RSR < < DEBORDEMENT DE STACK PAR LE HAUT : < E303: EQU $ DC &ASTACK < ON DECREMENTE LE POINTEUR < DE 'STACK' , CAR CETTE ANDOUILLE < DE MICRO-MACHINE L'A QUAND < MEME FAIT PROGRESSER !!?!? JMP E306 < VERS LA SORTIE : A NOTER : X#0 !! < < P U L L I N S T A C K : < E300: EQU $ LXI NSTACK < < BOUCLE DE DESEMPILEMENT DES CONSTANTES : (A REBROUSSE POIL...) < E304: EQU $ TBT 16,X < LA CONSTANTE(X) EST-ELLE < CONCERNEE ??? JNC E305 < NON. PULL < SI OUI , ON LA DEPILE. JC E307 < ERREUR : DEBORDEMENT PAR LE < BAS ; ON ABORTE , MAIS AU < PREALABLE , ON VA INCREMENTER < LE POINTEUR DE 'STACK'. STA &LWHOSO < SI OK , ON RESTAURE CONSTANTE(X). E305: EQU $ JDX E304 < CONSTANTE SUIVANTE. < < RESTAURATION EVENTUELLE DU 3-CURSEUR < ET DE 2 DES 3 PAS SUR (X,Y,Z) : < LA CV+Y STA &C1 < A NOTER QUE : X=0. LA CV+X STA &C2 BSR ASPDXY < RESTAURATION DE 2 DES 3 PAS. LXI 0 < RAZ DE X POUR UN RETOUR OK. JMP E306 < RETOUR OK , CAR X=0 !!!! < < DEBORDEMENT DE 'STACK' PAR LE BAS : < E307: EQU $ IC &ASTACK < IL FAUT RATTRAPPER LES BETISES < DE LA MICRO-MACHINE !?!?! JMP E306 < VERS UNE SORTIE EN ERREUR (X#0). PAGE < < < A P P E L P R O G R A M M E : < < < S A V E N O M C H E R C H E : < < < RESULTAT : < SAVE=INDEX DU 1ER CARACTERE DU NOM CHERCHE , < X INDIFFERENT (APPEL SEQUENTIEL). < < SAVNOM: EQU $ LA IEG < IEG=INDEX 1ER CARACTERE DU NOM < DU PROGRAMME APPELE. STA SAVE RSR < RETOU INDIFFERENT. < < < L A N C E M E N T P R O G R A M M E : < < < FONCTION : < CETTE ROUTINE PASSE LA MAIN < AU PROGRAMME QUI A ETE APPELE. < < < ARGUMENT : < SAVE=INDEX DE LA 1ERE COMMANDE DU PROGRAMME ( LA < 1ERE COMMANDE SUIT LA '('). < < < RESULTAT : < X#0 : TOUJOURS RETOUR EN ERREUR. < < START: EQU $ LX SAVE < RECUPERATION DE L'INDEX DE < DEPART QUI EST IL FAUT LE < NOTER DIFFERENT DE 0 , DONC X#0. STX IEG < MISE EN PLACE DE L'INDEX DE LA < PROCHAINE COMMANDE A EXECUTER. RSR < RETOUR AVEC X#0 !!! < < < A C C E S A U N C A R A C T E R E : < < < FONCTION : < CETTE ROUTINE RECUPERE UN CARACTERE < DE RANG (X) SOIT DANS LE NOM CHERCHE , < SOIT DANS UN NOM DEFINI . SI L'INDEX < DEMANDE EST HORS LA PAGE , LA ROUTINE < RETOURNE DIRECTEMENT A UNE ADRESSE < D'ERREUR DANS LA ROUTINE LOOKP , QUI < SEULE L'APPELLE. < LA RECHERCHE S'EFFECTUE , SOIT < DANS L'ITEM COURANT DANS LE CAS < DE LOOKP , SOIT DANS L'AUTRE ITEM < DANS LE CAS DE LOOKPB (RECHERCHE < EN BIBLIOTHEQUE). < < < ARGUMENT : < X=INDEX DU CARACTERE DEMANDE. < < < RESULTAT : < A=CARACTERE SI OK , < X<--(X)+1 , SI OK (A NOTER QUE C'EST LE X ARGUMENT < QUI EST VALIDE , ET NON PAS < LE X RESULTAT). < RETOUR DIRECT EN E81 , SI HORS-LA PAGE , ET < ALORS X#0 .... < < GETCAR: EQU $ LR X,A CP NCP < VALIDATION DE L'INDEX ARGUMENT. JE E80 < SORTIE EN ERREUR ; A NOTER < QUE (X)>NCP N'EST PAS UNE ERREUR, < IL S'AGIT EN FAIT DU SAUT D'UN < ITEM A L'AUTRE POUR ACCEDER < AU NOM RECHERCHE. < < CAS D'UN INDEX VALIDE : < LBY &AIR < A=CARACTERE DEMANDE. ADRI 1,X < PROGRESSION DE L'INDEX < COURANT DES CARACTERES DE CE TYPE < (SOIT DU NOM CHERCHE , SOIT < D'UN NOM DEFINI). RSR < RETOUR. < < SORTIE EN ERREUR : < E80: EQU $ ADRI -1,K < POUR SAUTER LE BSR D'APPEL. JMP E81 < RETOUR DIRECT A LOOKP , AVEC < IL FAUT LE NOTER : X#0 !!!! < < < R E C H E R C H E D ' U N P R O G R A M M E : < < < FONCTION : < CETTE ROUTINE RECHERCHE LE NOM < D'UN PROGRAMME APPELE , DANS L'ITEM < COURANT OU DANS L'AUTRE ITEM (BIBLIOTHEQUE). < SUIVANT LA VALEUR DE KP , LA < RECHERCHE EST LOCALE (RESTREINTE < A LA MEME PROFONDEUR DE PARENTHESES ; < KP=0) , OU GLOBALE (KP=-1). < NOM CHERCHE : &<NOM>;.... < #<NOM>;.... < NOM DEFINI : ><NOM>(.... < < < ARGUMENT : < SAVE=INDEX DU 1ER CARACTERE DU NOM CHERCHE , < C'EST-A-DIRE LE 1ER QUI SUIT '&'. < < < RESULTAT : < X#0 : LE PROGRAMME CHERCHE N'EXISTE PAS , < X=0 , LE PROGRAMME CHERCHE EXISTE , ET ALORS : < SAVE=INDEX DE LA 1ERE COMMANDE DU PROGRAMME , < (C'EST-A-DIRE , LA 1ERE QUI SUIT '('). < < < < R E C H E R C H E E N B I B L I O T H E Q U E : < LOOKPB: EQU $ < < RECHERCHE EN BIBLIOTHEQUE (MODE GLOBAL) : < LA SAVE AD ACCEB < L'INDEX D'ACCES AU NOM RECHERCHE, < EST TRANSLATE DE FACON A ETRE < ACCESSIBLE A PARTIR DE L'AUTRE < ITEM (CF. AIR). AD ACCEB < (TRANSLATION OCTET). STA SAVE LA AIC SB ACCEB < L'ITEM DE RECHERCHE N'EST PAS < L'ITEM COURANT. JMP E200 < VERS LA RECHERCHE. < < R E C H E R C H E D A N S L ' I T E M C O U R A N T : < LOOKP: EQU $ LA AIC < LA RECHERCHE SE FAIT DANS L'ITEM < COURANT. E200: EQU $ < ON A ICI : < A=RELAI VERS L'ITEM QUI SERA UTILISE < DANS LA RECHERCHE. STA AIR < MISE EN PLACE DU RELAI VERS < L'ITEM DE RECHERCHE. RBT 0 < RAZ DU BIT INDEX. STA F3 < SAVE TEMPORAIRE DE L'@ITEM DE < RECHERCHE DANS F3. LXI 0 < INITIALISATION DE L'INDEX ITEM. < ON A ICI : < X=INDEX DE DEBUT DE NIVEAU (EVENTUELLEMENT < 0 DANS LE CAS D'UNE RECHERCHE GLOBALE , < OU D'1NE RECHERCHE LOCALE OU IL N'Y < AURAIT PAS DE '(' PRECEDENTE. < < BOUCLE DE RECHERCHE : < E71: EQU $ LAI ">" < A=OCTET RECHERCHE (DEFINITION < D'UN PROGRAMME GRAPHIQUE. LB F3 < B=@ZONE DE RECHERCHE. LY NCP < Y=NBRE D'OCTETS DANS LA ZONE. SBS < RECHERCHE DE '>' ??? JC E81 < '>' NON TROUVE : RETOUR ERREUR. ADRI 1,X < OK , ON A TROUVE '>' , ON < LE DEPASSE ... E422: EQU $ < < CAS OU ON TROUVE LA DEFINITION D'UN PROGRAMME : < < ON A ICI : < X=INDEX DU 1ER CARACTERE DU NOM DEFINI. LY SAVE < Y=INDEX DU 1ER CARACTERE < DU NOM CHERCHE. < < COMPARAISON DU NOM DEFINI (X) , < ET DU NOM CHERCHE (Y) : < E72: EQU $ BSR AGTCAR < ACCES A UN CARACTERE DE L'ITEM. LR A,B < B=CARACTERE (X) DE LA DEFINITION. XR X,Y BSR AGTCAR < A=CARACTERE (X) DU NOM CHERCHE. XR X,Y CPR A,B < TEST DE COINCIDENCE DES 2 NOMS ??? JE E72 < OK , POURSUIVONS LA COMPARAISON. < < CAS D'UNE NON-COINCIDENCE : < CPI ";" < EST-ON SUR LA FIN DU NOM CHERCHE? JNE E71 < NON , PASSONS AU CARACTERE < SUIVANT DE L'ITEM (X). < < CAS DE LA FIN DU NOM CHERCHE : < LR B,A CPI "(" < EST-ON AUSSI SUR LA FIN DU < NOM QUI EST DEFINI ??? JNE E71 < NON , PASSONS AU CARACTERE < SUIVANT DE L'ITEM (X). < < CAS OU ON TROUVE LA DEFINITION DU NOM CHERCHE : < E987: EQU $ < ENTRY 'APPEL DE L'ARGUMENT < FORMEL COURANT'. STX SAVE < SAVE=INDEX 1ERE COMMANDE DE LA < DEFINITION. LXI 0 < RETOUR OK (NOM TROUVE) ... < < SORTIE DE LA ROUTINE : < E81: EQU $ < ENTRY 'HORS-LA PAGE'. RSR < RETOUR AVEC (X) .... PAGE < < < A P P E L D E L ' A R G U M E N T F O R M E L < C O U R A N T : < < CARGF: EQU $ LX ARGF < X=INDEX PRESUME DE LA 1ERE < PRIMITIVE DE L'ARGUMENT FORMEL < COURANT SI CELUI-CI EXISTE ... CPZR X < EXISTE-T'IL ??? JL E81 < NON , ERREUR .... JMP E987 < OUI , ON LE TRAITE COMME LA < RENCONTRE DE LA DEFINITION < D'UN PROGRAMME CHERCHE. < < < R E N C O N T R E D E L ' A R G U M E N T < F O R M E L C O U R A N T : < < DARGF: EQU $ LX IEG < X=INDEX DE LA 1ERE PRIMITIVE < DE L'ARGUMENT FORMEL COURANT. STX ARGF < QUE L'ON SAUVEGARDE D'UNE < MANIERE NON RECURSIVE DANS < ARGF. RSR < RETOUR AVEC X#0. PAGE < < < I N I T I A L I S A T I O N D E Y : < < < FONCTION : < PEMET D'INITIALISER Y POUR < EXECUTION D'UN PUSH PAR LA SUITE. < Y CONTIENT ALORS LE NBRE DE REPETITIONS < A FAIRE SOUS LE NIVEAU DE RECURSIVITE < CREE PAR LE PUSH. < < < ARGUMENT : < B=VALEUR INITIALE DE Y. < < < RESULTAT : < Y=VALEUR. < X INDIFFERENT (APPEL EN SEQUENTIEL). < < SETY: EQU $ LR B,Y < Y=VALEUR INITIALE. RSR < RETOUR INDIFFERENT. PAGE < < < V A L I D A T I O N D U P R O G R A M M E : < < < RESULTAT : < X=0 : L'ITEM COURANT EST DE TYPE 'TEXTE' , < OU DE TYPE 'DESSIN' , < #0 : L'ITEM N'EST NI DE TYPE 'DESSIN' , < NI DE TYPE 'TEXTE'. < < < < V A L I D A T I O N B I B L I O T H E Q U E : < CHECKB: EQU $ LX ACCEB NGR X,X ADRI IINDIC-LTN,X < INDEX MOT D'ACCES AU TYPE. ADR X,X < CONVERSION EN INDEX OCTET. JMP E205 < VERS LA VALIDATION. < < V A L I D A T I O N P R O G R A M M E I N I T I A L : < CHECKT: EQU $ LXI IINDIC-LTN*2 < (INDEX OCTETS) E205: EQU $ < ON A ICI : < X=INDEX D'ACCES AU TYPE A PARTIR DE L'ITEM COURANT. LBY &AIC < ACCES AU TYPE DE L'ITEM COURANT. ORI '10 < ON FORCE LE BIT10 , AFIN DE < TESTER SIMULTANEMENT 'D' ET 'T' , < DONT LES CODES NE DIFFERENT QUE < PAR CE BIT ('44 ET '54). LXI "T" < X=TYPE ATTENDU ('TEXTE'). SBR A,X < X=0 SI LE TYPE DE L'ITEM COURANT < EST 'TEXTE' OU 'DESSIN'. RSR < RETOUR AVEC (X). PAGE < < < M O D E D E F O N C T I O N N E M E N T D E G R : < < < PHILOSOPHIE : < GR PEUT FONCTIONNER SOUS 2 MODES : < 1- LE MODE PROGRAMME , POUR LE QUEL < LES COMMANDES SONT RECUPEREES DANS < ITEM1 PAR (IEG) ; ON A ALORS : < BIT0(MOT0(PIR))=0. < 2- LE MODE INTERACTIF (OU GENERATEUR < DE PROGRAMME , POUR LEQUEL LES < COMMANDES SONT RECUPEREES PAR < L'INTERMEDIAIRE DU CURSEUR GRAPHIQUE ; < LE CARACTERE LU EST MIS EN COMMANDE < COURANTE DANS ITEM1 EN (IEG) ; < DANS CE MODE ON A : < BIT0(MOT0(PIR))=1. < < < MODE INTRINSEQUE : < LE FONCTIONNEMENT NORMAL DE GR < EST LE MODE PROGRAMME ; C'EST CELUI < QU'IL A AU CHARGEMENT , ET QU'ON < LUI REDONNE A CHAQUE MONTEE DANS < LA RECURSIVITE. < < < ARGUMENT : < B='00 : MODE PROGRAMME DEMANDE , < ='01 : MODE INTERACTIF DEMANDE. < < < RESULTAT : < RETOUR INDIFFERENT. < CAS DU MODE 'I' : < IEG<--(IEG)-1 : ON FAIT UN RETOUR SUR LE CARACTERE < 'I' POUR L'ECRASER PAR LE 1ER < CARACTERE INTERACTIF. < < < M O D E I N T E R A C T I F : < < MODGRI: EQU $ DC IEG < RETOUR CARACTERE SUR 'I' , < POUR L'ECRASER. < < < M O D E P R O G R A M M E : < < MODGR: EQU $ LXI IR LA &APRC < ACCES A L'ENTREE COURANTE DE PIR. SLLS 1 < A FIN DE RAZER LE BIT0(MOT0(PIR)) SCRD 1 < ON MET AINSI EN PLACE LE MODE < DEMANDE QUI SE TROUVAIT EN < BIT15(B) DANS LE BIT0(A). STA &APRC < MAJ DE L'ENTREE COURANTE DE PIR. RSR PAGE < < < I N V E R S I O N D E S I N H I B I T I O N S < D E P R I M I T I V E S : < < < FONCTION : < SOIT LA COMMANDE : < :<PRIMITIVE> < ELLE A POUR EFFET D'INVERSER LE < BIT0 DE L'ENTREE DE TCOM ASSOCIEE < A <PRIMITIVE> . LORSQUE LE BIT0 < EST A 1 , ON FAIT UN SAUT IMPLICITE < DANS LA GRAMMAIRE EN N1616 , QUI < PERMET DE SIMULER UN SAUT DE DEFINITION < DE SOUS-PROGRAMME ... < (DANS LA MESURE OU UN '(' SUIT...) < SOIT LA COMMANDE : < "<PRIMITIVE> < ELLE A POUR EFFET D'AUTORISER < A PRIORI LA PRIMITIVE <PRIMITIVE> , < PAR MISE A 0 DU BIT0 DE SON ENTREE < DANS TCOM. < < < ARGUMENT : < Y=<PRIMITIVE>. < B=0 : INVERSION DE <PRIMITIVE> , < =1 : AUTORISATION DE <PRIMITIVE>. < < INVERS: EQU $ LR Y,X < X=<PRIMITIVE> A INVERSER. LA &ATCOM < A=ENTREE DE TCOM POUR LA < <PRIMITIVE>. IBT 0 < INVERSION DU BIT0 A PRIORI. CPZR B < EST-CE EN FAIT UNE AUTORISATION ? JE E988 < NON , UNE INVERSION. RBT 0 < ET OUI , AUTORISONS .... E988: EQU $ STA &ATCOM < MISE A JOUR DE TCOM. RSR < ET C'EST TOUT ... PAGE < < < E D I T E U R G R A P H I Q U E : < < < PHILOSOPHIE : < CET EDITEUR GRAPHIQUE , PERMET A < PARTIR D'UN PROGRAMME CREE SOUS 'ED' < DE FAIRE DES DESSINS SUR LA VISU. < LES MANIPULATIONS SUR CE DESSIN , < DU TYPE : EFFACER UNE PARTIE DU < DESSIN , FAIRE SUBIR UNE TRANDSFORMATION < A UNE PARTIE DU DESSIN , ... SONT < FAITES AU NIVEAU DU TEXTE DU < PROGRAMME. < LE LANGAGE DE PROGRAMMATION EST < LANGAGE RECURSIF A STRUCTURE DE < BLOCS (STYLE ALGOL) : LES BLOCS < SONT DELIMITES DANS LE LANAGE < PAR DES COUPLES DE PARENTHESES < '(' ET ')'. < CETTE STRUCTURE DE BLOCS EST < REALISEE A L'AIDE DE LA PILE < DE RECURSIVITE 'PIR'. < < < CAS DE 'GV' : < LA VISU D'EMISSION EST SUR < LE NVP='0B ; CELLE-CI PEUT NE PAS < ETRE ASSIGNEE ; DE PLUS SIMULTA- < NEMENT , ON CONVERTIT LE DESSIN EN VIDEO. < < < UTILISATION DE GV : < $; DE PLUS UN APPEL A UNE BIBLIOTHE- < QUE VIDE INVERSE LES CONDITIONS DE < COMPTAGE DES SEGMENTS ET NUMEROTA- < TION SUR LE DESSIN. < < PROG < < < I N I T I A L I S A T I O N D U P R O C E S S E U R : < < < FONCTION : < CETTE ENTREE EST CELLE UTILISEE LORS < DES APPELS PAR !GE. < < APILE: WORD PILE-1 < POUR INITIALISER LE REGISTRE K. WORD COM0 < INITIALISATION DE LA BASE C. WORD LOC+'80 < INITIALOSATION DE LA BASE L. GRAPH: EQU $ LRP K PLR B,C,L,W < INITIALISATION DE B , C , L , W. < W='LRP K' , FARFELUE!!! LR B,K < INITIALISATION DE K. IC KIN < COMPTAGE DES ENTRIES. JLE NALTM < CAS DE LA 1ERE ENTREE. < < T R A I T E M E N T D E S A L T - M O D E S : < LAI '13 < ALT-MODE EST ASSIMILE A UN STA RETSVC < UN CTRL-X-OFF... BR AGOGER < ABORT DE GW. < < C H A R G E M E N T D E ' W ' : < NALTM: EQU $ LAD DEMMEM SVC 0 < DEMANDE 10K. < < CHARGEMENT DE L'OVERLAY DE 'GW' : < NOMBB: VAL "W" < NOM DE LA BRANCHE. NOMOV1: VAL " W" < NOM DE L'OVERLAY. LAI NOMBB SBT 2 < MISE D'UN 'SPACE' DEVANT. STA &ARACI < MOT0 DE LA BRANCHE. LAI " " SBT 2 < A='SPACE''SPACE'. IC ARACI STA &ARACI < MOT1 DE LA BRANCHE. IC ARACI STA &ARACI < MOT2 DE LA BRANCHE. IC ARACI LAI '04 < CODE DE 'EOT'. STBY &ARACI < MOT3 DE LA BRANCHE. LAD DEMLOD E975: EQU $ BSR ASVC < TENTATIVE DE CHARGEMENT < DE L'OVERLAY. CPZ RETSVC JNE E975 < ERREUR DE CHARGEMENT. < < I N I T I A L I S A T I O N D E ' G R ' : < E976: EQU $ IF ORDI-"T",XWOR%,,XWOR% WORD '1E25 < A,B=<ACNESC>. CP ACNSYS JNE NSYS LR B,A CP ACNSYS+1 JE CSYS < ON EST SOUS :SYS... NSYS: EQU $ STZ ASP3 < PAS DE STABILISATION VIDEO. CSYS: EQU $ XWOR%: VAL 0 BSR ASTAB < ON STABILISE TOUT DE SUITE... JMP LOOP < ET C'EST PARTI... PAGE < < < P R I M I T I V E ' G E T C A R A C T E R ' : < < < FONCTION : < SUIVANT LE MODE DE FONCTIONNEMENT < COURANT DE GR , CETTE ROUTINE < RECUPERE LE CARACTERE COURANT : < 1- DANS ITEM1 EN MODE PROGRAMME (BIT0(PIR)=0) , < 2- PAR LECTURE DU CURSEUR GRAPHIQUE EN MODE < INTERACTIF (BIT0(PIR)=1). < (ET DE PLUS ELLE RANGE LE CARACTERE DE < DEBLOCAGE DE LA VISU EN CARACTERE COURANT < DE ITEM1). < < < ARGUMENT : < B=0 : NE PAS TESTER LES CARACTERES 'A'/'B'/'S' , < #0 : TESTER LES CARACTERES D'EXTREMITE ('A'/ < 'B'/'S') ET S'ILS SONT PRESENTS , LES < INTERPRETER. < < < RESULTAT : < Y=CARACTERE COURANT (IEG) DE L'ITEM COURANT. < < PRIMG: EQU $ < < VALIDATION DE IEG : < LX IEG < X=INDEX D'EXECUTION DU PROGRAMME < GRAPHIQUE DAN SL'ITEM COURANT. LR X,A CP NCP < VALIADTION DE L'INDEX IEG. LA AGON22 < A=@NOEUD DE BRANCHEMENT SI < CARACTERE HORS-LA PAGE A PRIORI. JGE E962 < ET OUI , HORS-LA PAGE ... < < ACCES AU CARACTERE COURANT (IEG) : < LBY &AIC < A=CARACTERE COURANT. < < TEST DU MODE COURANT DE GR : < LXI IR CPZ &APRC < TEST DU BIT0 DU MOT0 DE L'ENTREE < COURANTE DE PIR. JL E110 < CAS DU MODE INTERACTIF. < < CAS DE GR EN MODE PROGRAMME : < E111: EQU $ IC IEG < PREPARATION DE L'ACCES AU < CARACTERE SUIVANT. CPI "Z" < VALIDATION SUPERIEURE DU < CARACTERE COURANT (ET CECI < A CAUSE DE ':'). JG E979 < ERREUR : CARACTERE NON RECONNU. LR A,Y < Y=CARACTERE COURANT (IEG) DE < L'ITEM COURANT. JMP PRIMA < VERS UN RETOUR OK A LOOPB. < < CAS DE GR EN MODE INTERACTIF : < E110: EQU $ BR APRGI < VERS LA PRIMITIVE GET CARACTERE < EN MODE INTERACTIF. PAGE < < < S Y N T A X E : < < < <NOM>::=<CARACTERE DIFFERENT DE ';' ET DE '!'> < <NOM>::=<NOM><CARACTERE DIFFERENT DE ';' ET DE '!'> < <COMMENTAIRE>::=<<NOM>; < <TEXTE A EDITER>::=<<NOM>! < A::=<ORIGINE VECTEUR> < B::=<EXTREMITE SEQUENTIELLE VECTEUR> < S::=<EXTREMITE ETOILEE VECTEUR> < <MISE A BLANC EN VIDEO>::=. < <NOIR SI BLANC/BLANC SI NOIR>::=, < <COMMANDE>::=<MISE A BLANC EN VIDEO> < <COMMANDE>::=<BLANC SI NOIR/NOIR SI BLANC> < <ORIGINE>::=O < I::=<MODE GR INTERACTIF> < P::=<MODE GR PROGRAMME> < K::=<CONSTANTE ECHELLE> < Z::=<EFFACEMENT ECRAN> < F::=<RETOUR A GE> < C::=<RETOUR AU CCI> < RP::=<ROTATION +TETA> < RM::=<ROTATION -TETA> < R1::=<ROTATION +PI/2> < R3::=<ROTATION -PI/2> < SO::=<SYMETRIE ORIGINE> < SX::=<SYMETRIE OX> < SY::=<SYMETRIE OY> < S1::=<SYMETRIE B1> < A::=<DESORTHOGONALISATION AIGUE> < O::=<DESORTHOGONALISATION OBTUE> < H::=<DESORTHOGONALISATION HAUTE> < B::=<DESORTHOGONALISATION BASSE> < T::=<OPERATEUR MATRICIEL D'ORIENTATION> < <TRANSFORMATION ELEMENTAIRE>::=RP/RM/R1/R3/SO/SX/SY/S1/A/O/H/B < T::=<TRANSFORMATION ELEMENTAIRE> < T::=T<TRANSFORMATION ELEMENTAIRE> < <DEFINITION TRANSFORMATION>::=T=<TRANSFORMATION ELEMENTAIRE>... < ...<TRANSFORMATION ELEMENTAIRE>; < <MODIFICATION TRANSFORMATION>::=T<TRANSFORMATION ELEMENTAIRE>... < ..<TRANSFORMATION ELEMENTAIRE>; < <DEFINITION PROGRAMME>::=><NOM>(<COMMANDE>..<COMMANDE>) < <APPEL GLOBAL PROGRAMME>::=&<NOM>; < <APPEL GLOBAL PROGRAMME BIBLIOTHEQUE>::=?<NOM>; < <APPEL PROGRAMME>::=<APPEL GLOBAL PROGRAMME> < <APPEL PROGRAMME>::=<APPEL GLOBAL PROGRAMME BIBLIOTHEQUE> < <ARGUMENT FORMEL>::==(<COMMANDE>...<COMMANDE>) < <APPEL ARGUMENT FORMEL>::=' < <APPEL ARGUMENT FORMEL DE L'AUTRE ITEM>::=0 < <CHARGEMENT BIBLIOTHEQUE>::=$<NOM>; < <Y(CURSEUR)>::=2 < <X(CURSEUR)>::=1 < <CURSEUR>::=<X(CURSEUR)> < <CURSEUR>::=<Y(CURSEUR)> < <CURSEUR>::=C < <NOM INTRINSEQUE>::=K/<CURSEUR>/Y/X/A/T < <PUSH>::=MI<NOM INTRINSEQUE>...<NOM INTRINSEQUE>; < <PULL>::=MO<NOM INTRINSEQUE>...<NOM INTRINSEQUE>; < <SAVE CONTEXTE>::=W<ARGUMENT> < <RESTAURE CONTEXTE>::=R<ARGUMENT> < <REPETITION>::=%<ARGUMENT>(<COMMANDE>...<COMMANDE>) < <ARGUMENT>::=1/2/.../9/A/B/.../X/Y/Z < <COMMANDE>::=Z/F/C < <COMMANDE>::=A/B/S/+/-/*/// /; < <COMMANDE>::=I/P < <COMMANDE>::=X+/X-/X*/X//Y+/Y-/Y*/Y// < <COMMANDE>::=K<ARGUMENT> < <COMMANDE>::=X<ARGUMENT>/Y<ARGUMENT> < <COMMANDE>::=<PUSH>/<PULL> < <COMMANDE>::=<APPEL PROGRAMME> < <COMMANDE>::=<CHARGEMENT BIBLIOTHEQUE> < <COMMANDE>::=<REPETITION> < <COMMANDE>::=<DEFINITION PROGRAMME> < <COMMANDE>::=<DEFINITION TRANSFORMATION> < <COMMANDE>::=<MODIFICATION TRANSFORMATION> < Q1::=<CHOIX PLAN (X3,Y3)> < Q2::=<CHOIX PLAN (Y3,Z3)> < Q3::=<CHOIX PLAN (Z3,X3)> < <COMMANDE>::=Q1/Q2/Q3 < <COMMANDE>::=1/2/3/4 < <COMMANDE>::=<ORIGINE> < <COMMANDE>::=K<ARGUMENT> < <COMMANDE>::=<COMMENTAIRE> < X+::=<DX:=(DX)+<CONSTANTE ECHELLE>> < X-::=<DX:=(DX)-<CONSTANTE ECHELLE>> < Y+::=<DY:=(DY)+<CONSTANTE ECHELLE>> < Y-::=<DY:=(DY)-<CONSTANTE ECHELLE>> < K<ARGUMENT>::=<<CONSTANTE ECHELLE>:=<ARGUMENT>> < X<ARGUMENT>::=<DX:=<CONSTANTE ECHELLE>*<ARGUMENT>> < Y<ARGUMENT>::=<DY:=<CONSTANTE ECHELLE>*<ARGUMENT>> < X*::=<DX:=(DX)*<CONSTANTE ECHELLE>> < X/::=<DX:=(DX)/<CONSTANTE ECHELLE>> < Y*::=<DY:=(DY)*<CONSTANTE ECHELLE>> < Y/::=<DY:=(DY)/<CONSTANTE ECHELLE>> < 1::=<DX,0> < 2::=<0,DY> < 3::=<-DX,0> < 4::=<0,-DY> < <DEPLACEMENT CURSEUR>:=T*1/2/3/4 < +::=<X+><Y+> < -::=<X-><Y-> < *::=<X*><Y*> < /::=<X/><Y/> < <INVERSION PRIMITIVE>::=:<PRIMITIVE> < <AUTORISATION PRIMITIVE>::="<PRIMITIVE> < <BRANCHEMENT : IEG<--(SAVE)>::=! < <PROGRAMME>::=<COMMANDE>....<COMMANDE> < < DEPLACEMENTS DANS L'ESPACE : ON ECRIRA LES < PROGRAMMES SUIVANTS POUR SE DEPLACER < SUR LES 3 DIMENSIONS D'ESPACE (X,Y,Z) : < < 1- X>0 : >UP(Q1 1) < 2- X<0 : >UM(Q1 3) < 3- Y>0 : >VP(Q2 1) < 4- Y<0 : >VM(Q2 3) < 5- Z>0 : >WP(Q3 1) < 6- Z<0 : >WM(Q3 3) PAGE < < < I N T E R P R E T E U R D E S < P R O G R A M M E S G R A P H I Q U E S : < < < F O R M A T D E S P R I M I T I V E S : < < OCTET0=FONCTION (NOM DE LA PRIMITIVE) , < BIT0=1 (TOUJOURS) , < BIT1=0 : MOT2 (ET EVENTUELLEMENT MOT3) < PRESENT(S). < =1 : L'EXECUTION EST SEQUENTIELLE < (ON PASSE A LA PRIMITIVE SUIVANTE < EN FAISANT +2 SUR LA BASE C). < BIT2=1 : ARG2 ABSENT. < BIT3=1 : LE NOEUD SUIVANT EST N1 (QUELQUE < SOIENT LES CONDITIONS DE RETOUR). < OCTET1=ARGUMENT1 , < MOT1=ARGUMENT2 , < MOT2=@PRIMITIVE SUIVANTE EN CAS D'ERREUR (IL < FAUT BIT1(MOT0)=0) , < MOT3=@PRIMITIVE SUIVANTE SI OK (IL FAUT : < BIT1(MOT0)=0). < < PR: VAL 0 < NOM DE LA PRIMITIVE+ARGUMENT1. BSEQ: VAL 1 < BIT INDICATEUR DE PRIMITIVE < SEQUENTIELLE (1). PBSEQ: VAL '40 < POUR POSITIONNER LE BIT 'BSEQ'. LPRIM: VAL 2 < LPRIM=1 : ARG2 EST ABSENT. PLPRIM: VAL '20 < POUR POSITIONNER LE BIT 'LPRIM'. GON1: VAL 3 < BIT INDIQUANT QUE LE NOEUD < SUIVANT EST LE NOEUD N1 (1). PGON1: VAL '10 < POUR POSITIONNER LE BIT 'GON1'. ARG2: VAL 1 < ARGUMENT2. ADER: VAL 2 < @PRIMITIVE SUIVANTE SI ERREUR. ADOK: VAL 3 < @PRIMITIVE SUIVANTE SI OK. < < < FONCTION ARGUMENT1 ARGUMENT2 < < PC (???) @ROUTINE CALL. <----------------------------------------------------------------------- < PCI (???) @NOEUD CALL ROUTINE RELAYEE < PAR LE NOEUD D'@ ARG2. <----------------------------------------------------------------------- < PT CARACTERE-ASCI TEST-CARACTERE. <----------------------------------------------------------------------- < PUSH EMPILEMENT DANS PR. <----------------------------------------------------------------------- < PULL DEPILEMENT DE PR. <----------------------------------------------------------------------- < PG ACCES AU CARACTERE < COURANT DE L'ITEM1. <----------------------------------------------------------------------- < PTD TEST DIRECT DES < CARACTERES DE 'SPACE' < A 'Z' ; ON TROUVE < LA LISTE DES @NOEUDS < OU SE BRANCHER PAR < INDEXATION. < < < UTILISATION DES REGISTRES : < B=ARGUMENT1. < X=NOM PRIMITIVE , ET CONDITIONS D'EXECUTION < EN RETOUR DES PRIMITIVES (0 SI OK) , < Y=EN GENERAL LE CARACTERE COURANT (IEG) DE < L'ITEM COURANT. < C=@PRIMITIVE COURANTE , < W=@BRANCH. < < < P R I M I T I V E S A A D R E S S E ( S ) : < PC: VAL 1+'80 < PRIMITIVE 'CALL'. PCI: VAL 2+'80 < PRIMITIVE 'CALL INDIECT'. PUSH: VAL 3+'80+PLPRIM < EMPILEMENT DANS PIR SANS ARG2. PULL: VAL 4+'80+PLPRIM < DEPILEMENT DE PIR SANS ARG2. PG: VAL 5+'80+PLPRIM < GET CARACTERE SANS ARG2. PTD: VAL 6+'80+PLPRIM < TEST DIRECT DE CARACTERE. PT: VAL 7+'80 < PRIMITIVE 'TEST'. < < A T T E N T I O N : < PRIMT DOIT ETRE LA DERNIERE PRIMITIVE < A CAUSE DE LA TABLE D'AIGUILLAGE DE < L'INTERPRETEUR. < PTM: VAL PT+PLPRIM < PRIMITIVE 'TEST' SANS ARG2. < < P R I M I T I V E S S E Q U E N T I E L L E S : < PCS: VAL PC+PBSEQ < 'CALL' SEQUENTIEL. PUSHS: VAL PUSH+PBSEQ < 'PUSH' SEQUENTIEL. PULLS: VAL PULL+PBSEQ < 'PULL' SEQUENTIEL. PGS: VAL PG+PBSEQ < 'GET CARACT' SEQUENTIEL. < < < P R I M I T I V E ' C A L L ' : < < PRIMCI: EQU $ LA ARG2,C < A=@NOEUD DE RELAI DE LA ROUTINE. LR A,C < C=@NOUVEAU NOEUD. PRIMC: EQU $ BSR ARG2,C < APPEL DE LA ROUTINE DONT < L'ADRESSE EST DONNEE PAR ARG2. JMP LOOPB < VERS LE RETOUR DES PRIMITIVES , < X AYNAT ETE EVENTUELLEMENT < POSITIONNE PAR LA ROUTINE (ARG2). < < < T E S T D I R E C T C A R A C T E R E : < < PRIMTD: EQU $ LXI CP LBY &APRC < A=COMPTE COURANT DES PARENTHESES < SOUS CE NIVEAU DE RECURSIVITE. CPBY ICALLI < TEST PAR RAPPORT AU SEUIL ... LR Y,A < A=CARACTERE COURANT A PRIORI. JL E979 < LORSQUE LE COMPTE COURANT EST < STRICTEMENT INFERIEUR A 4 , < ON CONSERVE LE MODE NORMAL DES < PRIMITIVES .... < < CAS OU LE COMPTE DE PARENTHESES SOUS CE < NIVEAU EST SUPERIEUR OU EGAL A 4 , < ON PROCEDE A L'APPEL IMPLICITE DE < PROGRAMMES DE BIBLIOTHEQUE ... < LE FORMAT DE LA BIBLIOTHEQUE DOIT ALORS < ETRE SPECIAL , ET ETRE COMPOSEE EN TETE < DE BLOCS DE 5 CARACTERES DU TYPE '&X; )' , < CLASSE PAR ORDRE CROISSANT DES VALEURS DES < CARACTERES. < CPI ")" < EST-CE UNE FERMANTE ??? JE E979 < OUI , ON LA CONSERVE. CPI "(" < EST-CE UNE OUVRANTE ???? JE E979 < OUI , ON LA CONSERVE ... ADRI -'20,A < LES AUTRES CARACTERES SONT < TRANSLATES PAR RAPPORT A 'SPACE'. MP C5 < ON MULTIPLIE PAR LA LONGUEUR < DES BLOCS D'EN-TETE DE LA < BIBLIOTHEQUE. STB SAVE < QUE L'ON MET DANS SAVE COMME < FUTUR POINT D'ENTREE D'UN < SOUS-PROGRAMME A APPEL IMPLICITE. LAI "!" < ET LE CARACTERE COURANT EST < REMPLACE PAR LE CARACTERE DE < BRANCHEMENT '!'. E979: EQU $ < CARACTERE NON RECONNU LORS < DE GET-CARACTERE. LXI 1 < RETOUR EN ERREUR A PRIORI. CPI "Z" < VALIDATION SUPERIEURE DE (A). JG LOOPB < ERREUR : CARACTERE NON RECONNU. ADRI -'20,A < TRANSLATION PAR RAPPORT A 'SPACE' JAL LOOPB < ERREUR : CARACTERE NON RECONNU. LXI 0 < RETOUR OK (PAR PROPRETE). ADR A,C < SI LE CARACTERE EST DANS < LE SEGMENT ('SPACE','Z') IL < RECONNU , ET SERT D'INCREMENT < A LA BASE C POUR ATTEINDRE SON < NOEUD DE TRAITEMENT ; RETOUR OK. LA ADER,C < ACCES A L'ADRESSE DE TRAITEMENT < DE LA PRIMITIVE (Y). JAGE E962 < OK , PRIMITIVE NON INHIBEE. LA ASAUT < LORSQUE LA PRIMITIVE EST INHIBEE , < ON FAIT UN SUAT IMPLICITE DANS < LA GRAMMAIRE EN N1616. JMP E962 < VERS LA BOUCLE DE L'INTERPRETEUR. < < < P R I M I T I V E ' G O T O ' : < < PRIMA: EQU $ LXI 0 < IL SUFFIT DE FAIRE UN RETOUR OK. < < < R E T O U R D E S P R I M I TI V E S : < < LOOPB: EQU $ RAC: EQU $ < ON A ICI : < B=QUELQUE CHOSE (ARG1,....) , < X=CONDITION DE RETOUR DE LA PRIMITIVE (0 : OK). LA PR,C < POUR TESTER LES BITS 0 & 1 < DE LA PRIMITIVE QUE L'ON VIENT < D'EXECUTER. TBT GON1 < DOIT-ON ALLER AU NOEUD 'N1' ??? JNC E961 < NON. LA AGON1 < OUI : A=@NOEUD N1. JMP E962 < VERS LE SAUT EN N1. E961: EQU $ TBT LPRIM < ARG2 EST-IL ABSENT ???? SBCR C < SI OUI , IL FAUT DECREMENTER < LA BASE C D'UNE UNITE. ADRI ADER-PR,C < CAS PRIMITIVE SEQUENTIELLE < A PRIORI. TBT BSEQ < TEST DU BIT 'SEQUENTIEL'. JC LOOP < EN EFFET LA PRIMITIVE QUE L'ON < VIENT D'EXECUTER EST DE TYPE < SEQUENTIELLE , (C) EST BONNE. < < CAS DES PRIMITIVES A ADRESSE(S) : < CPZR X < COMMENT CELA S'EST-L PASSE ??? JNE E2 < MAL , ET VOUS ??? RETOUR < EN ERREUR PAR 'ADER'. ADRI ADOK-ADER,C < BIEN , RETOUR PAR 'ADOK'. E2: EQU $ LA 0,C < ACCES A L'@PRIMITIVE SUIVANTE. JAL LOOP < EN FAIT CE QUE L'ON VIENT < D'ACCEDER EST LA PRIMITIVE < SUIVANTE ELLE-MEME (CF. BIT0=1). < (ET (C) EST DONC BON). E962: EQU $ < CAS DES SAUTS IMPLICITES EN N1. LR A,C < SINON ON SE 'BRANCHE' SUR LA < PRIMITIVE SUIVANTE. < < < B O U C L E D E L ' I N T E R P R E T E U R < G R A P H I Q U E : < < LOOP: EQU $ LAI 0 < NETTOYAGE DE A. LB PR,C < ACCES A LA PRIMITIVE COURANTE. DV C100 < DECONCATENATION : B=ARGUMENT1. ANDI 'F < A=NOM DE LA PRIMITIVE (C). ADRP A < GOTO L'EXECUTION SPECIFIQUE. < < T A B L E D ' A I G U I L L A G E : < JMP PRIMC < PRIMITIVE 'CALL'. JMP PRIMCI < PRIMITIVE 'CALL INDIRECT'. JMP PRIMPS < PUSH. JMP PRIMPL < PULL. JMP PRIMG < PRIMITIVE 'GET CARACTERE'. JMP PRIMTD < PRIMITIVE 'TEST DIRECT CARACTERE' < < < P R I M I T I V E ' T E S T C A R A C T E R E ' : < < < ARGUMENT : < Y=CARACTERE COURANT (IEG) DE L'ITEM COURANT , < B=CARACTERE ATTENDU. < < < RESULTAT : < X=0 : (B)=(Y) , < X#0 : (B)#(Y). < < PRIMT: EQU $ LXI 1 < CARACTERE (B) NON RECONNU A < PRIORI ; IL EST A NOTER QUE LA < NON RECONNAISSANCE A LIEU PLUS < SOUVENT QUE LA RECONNAISSANCE < EN ANALYSE SYNTAXIQUE , C'EST < POURQUOI ON CHOISIT L'ERREUR < A PRIORI. CPR Y,B < TEST DE ECONNAISSANCE. JNE LOOPB < CARACTERE RECONNU , RETOUR < EN ERREUR A LOOPB. < < CAS OU LA RECONNAISSANCE A EU LIEU : < JMP PRIMA < VERS UN RETOUR OK A LOOPB. < < < P U S H P I L E D E R E C U R S I V I T E : < < < ARGUMENT : < B=0 : UNIQUEMENT COMPTER LES PARENTHESES '(' , < B=CAUSE DU PUSH#0 : EMPILEMENT REEL DANS PIR. < ='40 : PUSH POUR REPEAT , < ='20 : PUSH POUR APPEL PROGRAMME. < ='10 : PUSH POUR SAUT DE DEFINITION DE PROGRAMME. < ='20+'10 : PUSH POUR APPEL PROGRAMME , AVEC < CHANGEMENT D'ITEM COURANT. < Y=NBRE DE REPETITIONS A FAIRE SOUS CE NIVEAU. < (SIGNIFICATIF UNIQUEMENT SI B#0). < < < RESULTAT : < X#0 : SI L'OPERATION DEMANDEE EST ILLICITE. < < PRIMPS: EQU $ CPZR B < EST-CE UN VRAI PUSH ???? JE E15 < NON , COMPTE DES '('. BSR ASTAB < ESSAI DE STABILISATION VIDEO. < < CAS DES PUSH VERITABLES : < LA APRC < ACCES AU RELAI COURANT VERS PIR. RBT 0 < A=@ENTREE COURANTE DANS PIR. LXI CDCP < A PRIORI X=1#0 (RETOUR EN < ERREUR). CP TPR < EST-ON DEJA UA SOMMET DE PIR ??? JGE LOOPB < OUI , RETOUR EN ERREUR , < ON NE PEUT EMPILER : X=1#0 !!! < < CAS OU ON PEUT EMPILER : < LA APRC ADRI LEPR,A < PASSAGE SUR L'ENTREE SUIVANTE < DE PIR. STA APRC < < INITIALISATION DE LA NOUVELLE ENTREE : < SWBR Y,A < CD=(Y) (COMPTE DE REPETITIONS). ANDI 'FF00 < CLEAR L'OCTET 1 DE A. ORI 1 < CP=1 (COMPTE DE PARENTHESES). STA &APRC < MISE DANS LE MOT1 DE L'ENTREE < COURANTE DE PIR. LXI IR < RETOUR OK (X=IR=0). SWBR B,A < MISE DE LA CAUSE DU PUSH EN < OCTET0 DE A. AD IEG < RECUPERATION DE L'INDEX COURANT. TBT BITREP < EST-CE UN PUSH POUR REPETITIONS?? SBCR A < SI OUI , RETOUR SUR '('. STA &APRC < MISE EN MOT0 DE LA NOUVELLE < ENTREE COURANTE DE PIR. < < TEST D'UN CHANGEMENT D'ITEM : < TBT BITPRO JNC PRIMA < CE N'EST PAS L'APPEL D'UN < PROGRAMME : RETOUR OK A LOOPB. TBT BITDEF < CAS D'UN APPEL PROGRAMME , < Y-A-T'IL DE PLUS UN CHANGEMENT < D'ITEM COURANT ??? JNC PRIMA < NON , RETOUR OK A LOOPB. BSR ACHGTI < CHANGEMENT D'ITEM COURANT. E201: EQU $ < ON A ICI : < MOT0(ENTREE COURANTE PIR)=CAUSE-PUSH/INDEX-'(' , < OCTET2(ENTREE COURANTE PIR)=NBRE DE REPETITIONS , < OCTET3(ENTREE COURANTE PIR)=1 (COMPTE PARENTHESES). JMP PRIMA < VERS UN RETOUR OK A LOOPB. < < COMPTE DES '(' : < E15: EQU $ LXI CP LBY &APRC < ACCES AU COMPTE ALGEBRIQUE < DES PARENTHESES. ADRI 1,A < ET UNE '(' DE PLUS. TBT 7 < CE COMPTE TIENT-IL DANS < UN OCTET ???? JC LOOPB < NON , ERREUR : X=CP#0. STBY &APRC < SI LE COMPTE EST VALIDE , ON < MET A JOUR CP. JMP PRIMA < RETOUR OK A LOOPB. < < < P U L L P I L E D E R E C U R S I V I T E : < < < FONCTION : < CE MODULE GERE POUR CHAQUE ENTREE < COURANTE DE PIR , LES COMPTES DE < BOUCLE DE REPETITIONS , ET LE COMPTE < ALGEBRIQUE DES PARENTHESES (+1 POUR '(' , < -1 POUR ')') . LORSQUE LE COMPTE DE < PARENTHESES PASSE PAR 0 , IL < REGARDE SI IL Y A UNE REPETITION < A FAIRE (C-A-D SI LE COMPTE DE < REPETITIONS RESTANT A FAIRE EST #0). < S'IL N'Y A PLUS DE REPETITIONS < A FAIRE , IL Y A UN PULL VERITABLE < D'EFFECTUER SUR PIR. < < < ARGUMENT : < B#0 : PULL VERITABLE , < B=0 : FAIRE UNIQUEMENT -1 SUR LE CP COURANT. < (PERMET DE COMPTER LES ')' ). < < < RESULTAT : < X#0 : SI L'OPERATION DEMANDEE EST ILLICITE. < OU SI CP=0 DANS LE CAS B=0. < < PRIMPL: EQU $ < < DECOMPTE DES PARENTHESES : < LXI CP LBY &APRC < ACCES AU COMPTE COURANT DES < PARENTHESES SOUS CE NIVEAU DE PIR JAE LOOPB < ERREUR : TROP DE ')' , A NOTER < QU'ON A : X=CP#0. ADRI -1,A STBY &APRC < SINON , MAJ DU CP COURANT. JANE PRIMA < RETOUR OK SANS DEPILEMENT < SI LE CP NE PASSE PAR 0. < < CAS D'UN COMPTE DE PARENTHESES NUL : < CPZR B < TEST DU MODE D'APPEL ??? JE LOOPB < CAS B=0 : ON FAIT UN RETOUR < EN ERREUR (X#0) POUR ANNULATION < DU CP COURANT. E101: EQU $ < < DECOMPTE DES REPETITIONS : < LXI CD LBY &APRC JAE PRIMA < CAS DE LA 1ERE ENTREE DE LA PILE, < IL NE FAUT SURTOUT PAS DEPILER , < CAR ON TOMBERAIT EN ERREUR. ADRI -1,A < A=NBRE DE REPETITIONS RESTANT < A FAIRE SOUS CE NIVEAU DE PIR. JANE E14 < IL RESTE AU MOINS UNE REPETITION < A FAIRE , ALLONS Y .... < < CAS OU IL N'Y A PLUS DE REPETITIONS < A FAIRE , ON FAIT UN PULL VERITABLE SUR < PIR ; A NOTER QUE L'INDEX IEG A < LA VALEUR QUI LUI CONVIENT POUR < PERMETTRE L'ACCES AU CARACTERE SUIVANT < LA ')' : < LA APRC RBT 0 < ACCES A L'ADRESSE DE L'ENTREE < COURANTE DE PIR. LXI 1 < ERREUR A PRIORI. CP BPR < EST-ON DEJA A LA BASE DE LA PIR ? JLE LOOPB < OUI , RETOUR EN ERREUR : ON NE < PEUT ALLER PLUS BAS !!! (X=1). < < CAS OU ON PEUT DEPILER : < E90: EQU $ < ENTRY POUR RETOUR PROGRAMME. LA APRC ADRI -LEPR,A < RETOUR SUR L'ENTREE PRECEDENTE < DE PIR. STA APRC JMP PRIMA < VERS UN RETOUR OK A LOOPB. < < CAS OU IL RESTE AU MOINS UNE REPETITION : < E14: EQU $ STBY &APRC < MAJ DU CD COURANT. LXI IR LA &APRC LR A,B < B=ENTREE 'IR' DE PIR. TBT BITPRO < EST-CE UN RETOUR DE PROGRAMME ??? AND CFFF < RAZ DES BITS 0,1,2 ET 3. STA IEG < RETOUR AU DEBUT DE LA REPETITION. JNC LOOPB < CE N'EST PAS UN RETOUR DE < PROGRAMME , FAISON DONC UN < RETOUR OK ; A NOTER : X=IR=0 (OK) < < CAS D'UN RETOUR DE PROGRAMME : < TBT 16+BITDEF JNC E90 < C'EST UN RETOUR SANS CHANGEMENT < D'ITEM COURANT ; ALLONS DEPILER < LA RECURSIVITE PIR. BSR ACHGTI < CHANGEMENT D'ITEM COURANT. JMP E90 < VERS LE DEPILEMENT DE LA < RECURSIVITE PIR. PAGE < < < C H A N G E M E N T D ' I T E M C O U R A N T : < < CHGTI: EQU $ LA ACCEB NGR A,A < LA CONSTANTE DE TRANSLATION < EST INVERSEE. STA ACCEB AD AIC STA AIC < TRANSLATION DE L'ITEM COURANT < (CETTE TRANSLATION EST POSITIVE , < OU NEGATIVE). RSR PAGE < < < P R O G R A M M E I N T E R P R E T A T I F < D ' I N T E R P R E T A T I O N D E S < P R O G R A M M E S G R A P H I Q U E S : < < < < R E T O U R A U C C I : < N23: BYTE PC+PGON1;0 WORD GOCCI < RETOUR CCI , PUIS RETOUR A GE. < < E R R E U R S D ' E X E C U T I O N O U < C O M M A N D E N O N R E C O N N U E : < N24: EQU $ N25: EQU $ N27: EQU $ BYTE PC+PGON1;0 WORD CARUP < MISE EN POSITION HAUTE DU < CARACTERE ERRONNE EVENTUELLEMENT. < < P R I M I T I V E S N O N R E C O N N U E S : < N610: EQU N27 < CAS DES PRIMITIVES NON RECONNUES. < < R E T O U R E N E R R E U R < A L ' A P P E L A N T : < N700: BYTE PCS;0 WORD GOGER < RETOUR A L'APPELANT SANS TOUCHER < AU TYPE DE L'ITEM1. < < R E T O U R A ! G E : < N22: BYTE PCS;0 WORD GOGE < TENTATIVE DE CHARGEMENT DE < L'OVERLAY !GE ; SI CE N'EST PAS < UNE REUSSITE , ON REND LA MAIN < AU CCI. < < I N V E R S I O N D E S I N H I B I T I O N S : < N940: BYTE PGS;0 < Y=<PRIMITIVE> A INVERSER. BYTE PC+PGON1;0 WORD INVERS < INVERSION DE LA PRIMITIVE < < A U T O R I S A T I O N P R I M I T I V E : < N945: BYTE PGS;0 < Y=<PRIMITIVE> A AUTORISER. BYTE PC+PGON1;1 < B=1 : AUTORISATION PRIMITIVE. WORD INVERS < AUTORISATION DE LA PRIMITIVE (Y). < < T R A I T E M E N T D E S I N H I B I T I O N S : < N1616: EQU $ BYTE PGS;1 < 1 AFIN DE POUVOIR RENTRER < CORRECTEMENT DANS LA BOUCLE < D'ANALYSE PRINCIPALE MEME < EN MODE INTERACTIF. BYTE PTM;"(" < EST-CE UNE OUVRANTE ??? WORD N1617 < NON , ACCES A LA PRIMITIVE < SUIVANTE (Y). WORD N1000 < DANS LE CAS D'UNE OUVRANTE , < ON VA SAUTER TOUT CE QUI EST < ENTRE L'OUVRANTE ET LA FERMANTE. < < E F F A C E M E N T E C R A N : < N21: BYTE PC+PGON1;0 WORD ERASE < EFFACEMENT ECRAN. < < H A R D - C O P Y : < N750: BYTE PC+PGON1;0 WORD HCOPY < HARD-COPY ET TEMPORISATION. < < T R A I T E M E N T D E S ' ( ' S I M P L E S : < N14: BYTE PUSH;0 < UNIQUEMENT POUR FAIRE +1 SUR CP. WORD N27 < TROP DE '(' : ABORT ... WORD N1 < OK , GO ON ... < < T R A I T E M E N T D E S ' ) ' : < N15: BYTE PULL;1 < PULL VERITABLE. WORD N27 < TROP DE ')' : ABORT. WORD N1 < OK. < < D E F I N I T I O N A R G U M E N T F O R M E L : < N1001: EQU $ BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y). BYTE PTM;"(" < UNE '(' SUIT-ELLE LE SIGNE '=' ??? WORD N27 < NON , MISSING '(' .... BYTE PC;0 < OUI , OK. WORD DARGF < SAVE DANS ARGF L'INDEX DE < LA 1ERE PRIMITIVE DE L'ARGUMENT < FORMEL COURANT. WORD N1000 < RETOUR EN ERREUR DE DARGF POUR < ALLER VERS LE SAUT DE LA DEFINITION < D'UN PROGRAMME. < < A P P E L A R G U M E N T F O R M E L : < N941: EQU $ BYTE PC;0 WORD CARGF < MISE DANS SAVE DE L'INDEX DE < LA 1ERE PRIMITIVE DE L'ARGUMENT < FORMEL (AFIN D'ASSIMILER DET < APPEL A L'APPEL D'UN PROGRAMME). WORD N27 < ERREUR : PAS D'ARGUMENT FORMEL < COURANT !!! WORD N942 < OK , ON FAIT COMME SI ON AVIT < TROUVE LA DEFINITION D'UN < PROGRAMME CHERCHE ... < < A P P E L A R G U M E N T F O R M E L < D E L ' A U T R E I T E M : < N9410: EQU $ BYTE PC;0 WORD CARGF < MISE DANS SAVE DE L'INDEX DE LA < 1ERE PRIMITIVE DE L'ARGUMENT < FORMEL COURANT , S'IL EXISTE .... WORD N27 < ERREUR , N'EXISTE PAS ... WORD NCDIR < OK , ON L'ASSIMILE A L'APPEL < D'UN PROGRAMME DE BIBLIOTHEQUE. < < D E M A N D E D E R E P E T I T I O N S : < N8: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y). BYTE PC;0 WORD REPET1 < SAVREP=NBRE DE REPETITIONS < DEMANDEES. WORD N27 < ERREUR : NBRE ERRONE. N30: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y). BYTE PTM;"(" < EST-CE UNE '(' ??? WORD N27 < ERREUR : MISSING '(' ... BYTE PCS;0 WORD REPET2 < Y=NBRE DE REPETITIONS DEMANDEES. BYTE PUSH;CODREP < EMPILEMENT DE LA RECURSIVITE. < (Y=NBRE DE REPETITIONS). WORD N27 < PUSH IMPOSSIBLE. WORD N1 < ET LA BOUCLE EST LANCEE. < < M O D I F I C A T I O N C T T E : < N31: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y). BYTE PC;0 WORD REPET1 < RECUPERATION DE CTTE DANS < SAVE A PARTIR DE Y. WORD N27 < ERREUR : CTTE ILLEGALE. BYTE PC+PGON1;0 WORD SCTTE < OK , MAJ DE CTTE. < < C H A N G E M E N T D E P L A N : < N600: BYTE PGS;0 < ACCES AU NUMERO DU PLAN. BYTE PTM;"1" < EST-CE LE PLAN 1 ??? BYTE PT;"2" < EST-CE LE PLAN 2 ??? WORD N601 < SELECTION DU PLAN 1 (X3,Y3). BYTE PT;"3" < EST-CE LE PLAN 3 ??? WORD N602 < SELECTION DU PLAN 2 (Y3,Z3). WORD N27 < ERREUR : PLAN NON RECONNU. N603: BYTE PC+PGON1;2 < SELECTION DU PLAN (Z3,X3). WORD CHPLAN N601: BYTE PC+PGON1;4 < SELECTION DU PLAN (X3,Y3). WORD CHPLAN N602: BYTE PC+PGON1;9 < SELECTION DU PLAN (Y3,Z3). WORD CHPLAN < < E N T R Y I N T E R P R E T A T I V E : < COM0: EQU $ BYTE PC;0 WORD CHECKT < VALIDATION DU TYPE DE L'ITEM < COURANT. WORD N700 < ERREUR : IL N'A PAS LE TYPE < 'TEXTE'/'DESSIN' : RETOUR < A L'APPELANT (EI/GO/GE). < < O R I G I N E S E G M E N T C O U R A N T ' A ' : < N4: BYTE PC+PGON1;4 < A NOTER : B=4 !!! WORD EXECA < MISE EN PLACE DE L'ORIGINE < DU SEGMENT COURANT. < < E X T R E M I T E S E G M E N T C O U R E N T ' B ' : < N5: BYTE PC+PGON1;4 < A NOTER : B=4 !!! WORD EXECB < MISE EN PLACE DE L'EXTREMITE DU < SEGMENT COURANT , AFFICHAGE < DU SEGMENT COURANT , ET < MODIFICATION DEE SON ORIGINE. < < E X T R E M I T E S E G M E N T C O U R A N T ' S ' : < N6: BYTE PC+PGON1;8 < A NOTER : B=8 !!! WORD EXECS < MISE EN PLACE DE L'EXTREMITE DU < SEGMENT COURANT , ET AFFICHAGE < DE CELUI-CI. < < M I S E A B L A N C E N V I D E O : < N2000: BYTE PC+PGON1;'40 < A NOTER : B='40. WORD COLOR < < N O I R S I B L A N C / B L A N C S I N O I R : < N2001: BYTE PC+PGON1;'00 < A NOTER : B='00. WORD COLOR < < M O D I F I C A T I O N D E D X O U D Y : < N2: BYTE PC;0 WORD SELDX < SELECTION DX. WORD N32 < VERS LA MODIFICATION DE DX. N3: BYTE PCS;0 WORD SELDY < SELECTION DE DY. N32: BYTE PGS;0 < ACCES AU CARACTERE COURANT POUR < IDENTIFIER LA MODIFICATION < DEMANDEE SUR DX OU DY. BYTE PTM;"+" < EST-CE UNE INCREMENTATION ??? BYTE PT;"-" < EST-CE UNE DECREMENTATION ?? WORD N33 < INCREMENTATION DE DX OU DY. BYTE PT;"*" < EST-CE UNE MULTIPLICATION ??? WORD N34 < DECREMENTATION DE DX OU DY. BYTE PT;"/" < EST-CE UNE DIVISION ??? WORD N35 < MULTIPLICATION DE DX OU DY. WORD N36 < PAS DE FONCTION RECONNUE , < ALLONS TENTER L'INITIALISATION < DE DX OU DY. < < D I V I S I O N D E D X O U D Y : < N37: BYTE PC+PGON1;0 < DIVISION DE DX OU DY : < DX OU DY<--(DX OU DY)/CTTE. WORD EXECD < < I N I T I A L I S A T I O N D E D X O U D Y : < N36: BYTE PC;0 < EST-CE L'INITIALISATION DE DX < OU DE DY ??? WORD REPET1 < TENTATIVE DE RECUPERATION DE < LA CONSTANTE DONNEE EN ARGU- < MENT (APPELEE ALPHA). WORD N27 < ERREUR : MAUVAISE CONSTANTE. BYTE PC+PGON1;0 WORD EXECK < INITIALISATION DE DX OU DY : < DX OU DY<--CTTE*ALPHA. < < I N C R E M E N T A T I O N D E D X O U D Y : < N33: BYTE PC+PGON1;0 < INCREMENTATION DE DX OU DY : < DX OU DY<--(DX OU DY)+CTTE. WORD EXECP < < D E C R E M E N T A T I O N D E D X O U D Y : < N34: BYTE PC+PGON1;0 < DECREMENTATION DE DX OU DY : < DX OU DY<--(DX OU DY)-CTTE. WORD EXECM < < M U L T I P L I C A T I O N D E D X O U D Y : < N35: BYTE PC+PGON1;0 < MULTIPLICATION DE DX OU DY : < DX OU DY<--(DX OU DY)*CTTE. WORD EXECMU < < I N C R E M E N T A T I O N D E D X E T D Y : < N17: BYTE PCS;0 WORD SELDX < SELECTION DE DX. BYTE PCS;0 WORD EXECP < INCREMENTATION DE DX : < DX<--(DX)+CTTE. BYTE PC;0 WORD SELDY < SELECTION DE DY. WORD N33 < VERS L'INCREMENTATION DE DY : < DY<--(DY)+CTTE. < < D E C R E M E N T A T I O N D E D X E T D Y : < N18: BYTE PCS;0 WORD SELDX < SELECTION DE DX. BYTE PCS;0 WORD EXECM < DECREMENTATION DE DX : < DX<--(DX)-CTTE. BYTE PC;0 WORD SELDY < SELECTION DE DY. WORD N34 < VERS LA DECREMENTATION DE DY : < DY<--(DY)-CTTE. < < M U L T I P L I C A T I O N D E D X E T D Y : < N19: BYTE PCS;0 WORD SELDX < SELECTION DE DX. BYTE PCS;0 WORD EXECMU < MULTIPLICATION DE DX : < DX<--(DX)*CTTE. BYTE PC;0 WORD SELDY < SELECTION DE DY. WORD N35 < VERS LA MULTIPLICATION DE DY : < DY<--(DY)*CTTE. < < D I V I S I O N D E D X E T D Y : < N20: BYTE PCS;0 WORD SELDX < SELECTION DE DX. BYTE PCS;0 WORD EXECD < DIVISION DE DX : < DX<--(DX)/CTTE. BYTE PC;0 WORD SELDY < SELECTION DE DY. WORD N37 < VERS LA DIVISION DE DY : < DY<--(DY)/CTTE. < < D E P L A C E M E N T 1 E S T : < N9: BYTE PC+PGON1;0 < A NOTER : B=0. WORD EXEC13 < < D E P L A C E M E N T 2 N O R D : < N10: BYTE PC+PGON1;0 < A NOTER : B=0. WORD EXEC24 < < D E P L A C E M E N T 3 O U E S T : < N11: BYTE PC+PGON1;1 < A NOTER : B=1#0. WORD EXEC13 < < D E P L A C E M E N T 4 S U D : < N12: BYTE PC+PGON1;1 < A NOTER : B=1#0. WORD EXEC24 < < M I S E A L ' O R I G I N E D E C V : < N400: BYTE PC+PGON1;0 WORD ORIGIN < < T R A N S F O R M A T I O N C O U R A N T E ' T ' : < N13: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y). BYTE PTM;"=" < EST-CE UNE REINITIALISATION < DE LA TRANSFORMATION COURANTE T. WORD N70 < NON , ESSAYONS UN PRODUIT < FONCTIONNEL. < < I N I T I A L I S A T I O N D E T : < BYTE PCS;0 WORD ITRANS < ON FAIT : T=O. N51: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y). N70: BYTE PTM;" " < EST-CE L'ELEMENT NEUTRE ??? BYTE PT;"R" < EST UNE ROTATION ??? WORD N51 < CAS DE L'ELEMENT NEUTRE ' '. BYTE PT;"S" < EST-CE UNE SYMETRIE ??? WORD N52 < CAS DES ROTATIONS. BYTE PT;"A" < DESORTHOGONALISATION AIGUE ??? WORD N53 < CAS DES SYMETRIES. BYTE PT;"O" < DESORTHOGONALISATION OBTUE ??? WORD N500 < DESORTHOGONALISATION AIGUE. BYTE PT;"H" < DESORTHOGONALISATION HAUTE ??? WORD N501 < DESORTHOGONALISATION OBTUE. BYTE PT;"B" < DESORTHOGONALISATION BASSE ??? WORD N502 < DESORTHOGONALISATION HAUTE. BYTE PT;";" < EST-CE LA FIN DE LA MODIFICATION? WORD N503 < DESORTHOGONALISATION BASSE. WORD N25 < ERREUR : CARACTERE NON RECONNU. WORD N1 < CAS DU ';' : C'EST LA FIN DE < MODIFICATION : VERS L'ACCES < A LA COMMANDE SUIVANTE. < < C A S D E S R O T A T I O N S : < N52: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y). BYTE PTM;"P" < EST-CE UNE ROTATION +TETA ??? BYTE PT;"M" < EST-CE UNE ROTATION -TETA ?? WORD N54 < CAS DES ROTATIONS +TETA. BYTE PT;"1" < EST-CE UNE ROTATION +PI/2 ??? WORD N55 < CAS DES ROTATIONS -TETA. BYTE PT;"3" < EST-CE UNE ROTATION -PI/2 ???? WORD N56 < CAS DES ROTATIONS +PI/2. WORD N25 < ERREUR : CARACTERE NON RECONNU. N57: BYTE PC;TR3 < ROTATION -PI/2. WORD UTRANS WORD N51 < OK , VERS LA SUIVANTE. N54: BYTE PCI;TRP < ROTATION +TETA. WORD N57 N55: BYTE PCI;TRM < ROTATION -TETA. WORD N57 N56: BYTE PCI;TR1 < ROTATION +PI/2. WORD N57 < < C A S D E S S Y M E T R I E S : < N53: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y). BYTE PTM;"O" < EST-CE UNE SYMETRIE ORIGINE ??? BYTE PT;"X" < EST-CE UNE SYMETRIE OX ??? WORD N58 < CAS DES SYMETRIES ORIGINE. BYTE PT;"Y" < EST-CE UNE SYMETRIE OY ??? WORD N59 < CAS DES SYMETRIES OX. BYTE PT;"1" < EST-CE UNE SYMETRIE B1 ??? WORD N60 < CAS DES SYMETRIES OY. WORD N25 < ERREUR : CARACTERE NON RECONNU. N61: BYTE PCI;TS1 < SYMETRIE 1ERE BISSECTRICE. WORD N57 N58: BYTE PCI;TSO < SYMETRIE ORIGINE. WORD N57 N59: BYTE PCI;TSX < SYMETRIE OX. WORD N57 N60: BYTE PCI;TSY < SYMETRIE OY. WORD N57 < < D E S O R T H O G O N A L I S A T I O N D E S < A X E S L O C A U X : < N500: BYTE PCI;TA < MODE AIGU. WORD N57 N501: BYTE PCI;TO < MODE OBTU. WORD N57 N502: BYTE PCI;TH < MODE HAUT. WORD N57 N503: BYTE PCI;TB < MODE BAS. WORD N57 < < S A U T D E F I N I T I O N P R O G R A M M E : < N16: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y). BYTE PTM;"(" < RECHERCHE DE LA 1ERE '('. WORD N16 < BOUCLAGE JUSQU'A TROUVER < LA 1ERE '('. N1000: EQU $ < ENTRY POUR LE SAUT D'UN ARGUMENT < FORMLE COURANT. BYTE PCS;1 < A NOTER : B=1 !!! WORD SETY < POUR FAIRE CD=1 LORS DU PUSH < QUI VA SUIVRE (Y=1). BYTE PUSH;CODDEF < EMPILEMENT DE LA RECURSIVITE < LORS DE LA RENCONTRE DE < LA 1ERE '('. WORD N27 < PUSH IMPOSSIBLE. N63: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y). BYTE PTM;"(" < EST-CE UNE '(' ??? BYTE PT;")" < EST-CE UNE ')' ??? WORD N64 < CAS DES '('. WORD N63 < ON BOUCLE POUR LES CARACTERES < DIFFERENTS DE '(' ET ')'. BYTE PULL;0 < -1 SUR CP POUR ')'. WORD N65 < RETOUR POUR CP=0 : C'EST LA < FIN DE LA DEFINITION DU PROGRAMME WORD N63 < CE N'EST PAS ENCORE LA ')' < DE FIN DE DEFINITION. N64: BYTE PUSH;0 < +1 SUR CP POUR '('. WORD N25 < PUSH IMPOSSIBLE ??? WORD N63 < OK ... N65: BYTE PUSHS;0 < REMISE DE CP=1 LORS DE LA < RENCONTRE DE LA FIN DE < DEFINITION. BYTE PULL;1 < PULL VERITABLE DE DEPILEMENT < DE LA RECURSIVITE. WORD N25 < PULL IMPOSSIBLE ??? WORD N1 < OK , ACCES A LA COMMANDE SUIVANTE < < A P P E L P R O G R A M M E : < N7: EQU $ N411: BYTE PCS;0 WORD SAVNOM < SAVE=INDEX 1ER CARACTERE DU < NOM CHERCHE. N80: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y). BYTE PTM;";" < EST-CE LA FIN DU PROGRAMME < CHERCHE ';' ??? WORD N80 < NON , ON CONTINUE LE PARCOURS. BYTE PC;0 WORD LOOKP < RECHERCHE DE LA DEFINITION DU < PROGRAMME APPELE. < (SI OK : SAVE=INDEX 1ERE < COMMANDE DU PROGRAMME). WORD N300 < LE PROGRAMME N'EXISTE PAS < DANS L'ITEM COURANT. N942: EQU $ < ENTRY POUR APPEL ARGUMENT FORMEL. BYTE PCS;2 < A NOTER : B=2 !!! WORD SETY < FAIT : Y=2 , POUR LE PUSH < QUI VA SUIVRE. BYTE PUSH;CODPRO < EMPILEMENT DE LA RECURSUIVITE , < AVEC CD=2 , ET IEG=INDEX DE < RETOUR (SUIT IMMEDIATEMENT ';'). < AINSI LORS DU PULL DE FIN DE < PROGRAMME , PUISQUE CD=2 , ON < FERA UNE FAUSSE REPETITION , < AVEC COMME INDEX DE BOUCLAGE , < L'INDEX DE RETOUR (A LA SUITE < DE ';' .... WORD N27 < ERREUR : PUSH IMPOSSIBLE. N301: BYTE PC+PGON1;0 WORD START < LANCEMENT DU PROGRAMME APPELE < A L'INDEX CONTENU DANS SAVE. < < A P P E L D I R E C T D ' U N P R O G R A M M E < E N B I B L I O T H E Q U E : < N860: BYTE PCS;0 WORD SAVNOM < SAVE=INDEX DU 1ER CARACTERE < DU NOM CHERCHE. N861: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y). BYTE PTM;";" < EST-CE LA FIN DU NOM CHERCHE ??? WORD N861 < NON , ON CONTINUE LE PARCOURS ... < < R E C H E R C H E E N B I B L I O T H E Q U E : < N300: BYTE PC;0 WORD CHECKB < VALIDATION DE L'ITEM CONTENANT < LA BIBLIOTHEQUE PRESUMEE. WORD N25 < LE TYPE N'EST PAS ACCEPTABLE , < LE PROGRAMME N'EXISTE DONC PAS. BYTE PC;0 WORD LOOKPB < SINON , ON FAIT UNE RECHERCHE < DANS LA BIBLIOTHEQUE. WORD N25 < LE PROGRAMME N'EXISTE VRAIMENT < PAS , ERREUR. NCDIR: EQU $ < NOEUD D'APPEL IMPLICITE DES < PROGRAMMES DE BIBLIOTHEQUES < SPECIALES. BYTE PCS;2 WORD SETY < Y=2. BYTE PUSH;CODPRO+CODDEF < ON FAIT UN PUSH POUR APPEL < PROGRAMME , AVEC CHANGEMENT < D'ITEM COURANT. WORD N27 < ERREUR : PUSH IMPOSSIBLE. WORD N301 < OK , START DANS LE PROGRAMME. < < C H A R G E M E N T B I B L I O T H E Q U E : < N302: BYTE PCS;0 WORD SAVNOM < SAUVEGARDE DANS 'SAVE' DE < L'INDEX DU 1ER CARACTERE DU < <NOM-BIBLIOTHEQUE>. N303: BYTE PGS;0 < RECUPERATION DU <NOM> PAR < CARACTERE. BYTE PTM;";" < EST-CE LA FIN DE <NOM> ??? WORD N303 < ON BOUCLE SUR LA RECUPERATION < DU <NOM> JUSQU'A TROUVER UN ';'. BYTE PC;0 < A NOTER : B=0 !!! WORD LOADB < TENTATIVE DE CHARGEMENT DE < LA BIBLIOTHEQUE. WORD N25 < ERREUR : ELLE N'EXISTE PAS. BYTE PC;0 WORD CHECKB < DANS LE CAS OU ELLE EXISTE , < ON VERIFIE SON TYPE 'T' OU 'D'. WORD N25 < ERREUR : MAUVAIS TYPE. WORD N1 < OK , VERS L'ACCES A LA < COMMANDE SUIVANTE. < < O P E R A T I O N S S U R ' S T A C K ' : < N310: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y). BYTE PTM;"I" < EST-CE UN 'PUSH' (IN). BYTE PT;"O" < EST-CE UN 'PULL' (OUT). WORD N311 < CAS DES MOVE IN STACK (PUSH). WORD N27 < ERREUR : COMMANDE NON RECONNUE. < < M O V E O U T ' P U L L ' : < BYTE PCI;0 < A NOTER : B=0. WORD N311 < VERS LA MEMORISATION DU SENS. < < M O V E I N ' P U S H ' : < N311: BYTE PCS;1 < A NOTER : B=1. WORD SWHOS < MEMORISATION DU SENS. < < RECUPEARTION DE LA LISTE DES CONSTANTES : < N312: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y). BYTE PTM;"K" < EST-CE 'K' ??? BYTE PT;"Y" < EST-CE 'Y' ?? WORD N313 < INSERTION DE 'K' DANS LA LISTE. BYTE PT;"X" < EST-CE 'X' ?? WORD N314 < INSERTION DE 'Y' DANS LA LISTE. BYTE PT;"T" < EST-CE 'T' ?? WORD N315 < INSERTION DE 'X' DANS LA LISTE. BYTE PT;"2" < EST-CE Y(CURSEUR> ??? WORD N430 < INSERTION DE 'T' DANS LA LISTE. BYTE PT;"1" < EST-CE X(CURSEUR) ??? WORD N1010 < C'EST Y(CURSEUR). BYTE PT;"A" < EST-CE 'A' ??? WORD N1011 < C'EST X(CURSEUR). BYTE PT;";" < EST-CE LA FIN DE LISTE. WORD N1002 < INSERTION DE 'A' DANS LA LISTE. BYTE PT;"C" < EST-CE 'C' ?? WORD N316 < FIN DE LISTE. WORD N27 < ERREUR : ELEMENT NON RECONNU ... < < INSERTION DU CURSEUR DANS LA LISTE : < BYTE PCS;CV-WHOS+Y < INSERTION Y(CURSEUR). WORD RWHOS N1011: EQU $ < INSERTION DE X(CURSEUR) < DANS LA LISTE. BYTE PCI;CV-WHOS+X < INSERYION X(CURSEUR). WORD N313 < < INSERTION DE Y(CURSEUR) DANS LA LISTE : < N1010: BYTE PCI;CV-WHOS+Y < INSERTION DE Y(CURSEUR). WORD N313 < < INSERTION DE 'K' DANS LA LISTE : < N313: BYTE PC;CTTE-WHOS WORD RWHOS WORD N312 < ACCES A L'LEMENT SUIVANT (LE < RETOUR DE RWHOS EST TOUJOURS < EN ERREUR). < < INSERTION DE Y DANS LA LISTE : < N314: BYTE PCI;DY1-WHOS WORD N313 < < INSERTION DE 'X' DANS LA LISTE : < N315: BYTE PCI;DX1-WHOS WORD N313 < < INSERTION DE 'A' DANS LA LISTE : < N1002: BYTE PCI;ARGF-WHOS WORD N313 < < INSERTION DE 'T' DANS LA LISTE : < N430: BYTE PCI;0 < A NOTER : B=0 !!!! (CAS 'T'). WORD N313 < < FIN DE LISTE : < N316: BYTE PC;0 WORD ESTACK < EXECUTION DE L'OPERATION. WORD N27 < ABORT : OPERATION IMPOSSIBLE. WORD N1 < OK , ACCES COMMANDE SUIVANTE. < < S A V E / R E S T A U R E C O N T E X T E S : < N920: BYTE PCI;0 < B=0=LECTURE (RESTAURATION). WORD N921 < VERS LA PREPARATION DE DEMDK. N921: BYTE PCS;2 < B=2=ECRITURE (SAUVEGARDE). WORD ADSEC < PREPARATION DE LA DEMANDE. N922: BYTE PGS;0 < ACCES AU CARACTERE COURANT QUI < DONNE LE NUMERO DU CONTEXTE. BYTE PC;0 WORD REPET1 < CALCUL DU NUMERO DU CONTEXTE < DANS SAVE (=DEMDK+3). WORD N27 < ERREUR : ARGUMENT ERRONE. BYTE PC;0 WORD RWDK < SAVE/RESTAURE LE CONTEXTE. WORD N27 < EREUR ... WORD N1 < OK .... < < M I S E D E G R E N M O D E I N T E R A C T I F : < N92: BYTE PC+PGON1;'01 < MISE EN MODE INTERACTIF ; A < NOTER : B=1. WORD MODGRI < ECRASEMENT DU CARACTERE 'I' , < PUIS ROUTINE 'MODGR'. < < M I S E D E G R E N M O D E P R O G R A M M E : < N93: BYTE PC+PGON1;'00 < MISE EN MODE PROGRAMME ; A < NOTER : B=0. WORD MODGR < < C O M M E N T A I R E E T T E X T E A E D I T E R : < N340: BYTE PCS;0 < SAVE L'INDEX 1ER CARACTERE. WORD SAVNOM N800: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y). BYTE PTM;";" < EST-CE LA FIN D'UN COMMENTAIRE ??? BYTE PT;"!" < EST-CE LA FIN D'UN TEXTE < A EDITER ??? WORD N1 < FIN D'UN COMMENTAIRE : VERS < L'ACCES A LA PRIMITIVE SUIVANTE. WORD N800 < NIN '!' , NI ';' , VERS L'ACCES < AU CARACTERE SUIVANT. BYTE PCS;4 < A NOTER : B=4 !!! WORD EXECA < POSITIONNEMENT DU CV , ET < DE LA VISU POUR AFFICHER < CORRECTEMENT LE TEXTE !!! BYTE PC+PGON1;1 < EDITION DU TEXTE RENCONTRE ; A < NOTER : B=1#0 !!! WORD TEXTE < VERS N22 SI CTRL-X-OFF. < < A C C E S C O M M A N D E C O U R A N T E : < N1: BYTE PGS;1 < ACCES AU CARACTERE COURANT ; A < NOTER B#0 (!!!!) , AFIN DE < TESTER 'A'/'B'/'S' DANS LE < CAS DU MODE INTERACTIF ... < < A N A L Y S E D E L A C O M M A N D E : < N1617: EQU $ < ENTRY SUITE A UNE PRIMITIVE < INHIBEE NON SUIVIE DE '('. BYTE PTD;0 < TEST DIRECT DU CARACTERE COURANT. WORD N22 < CAS DES PRIMITIVES HORS LE < SEGMENT ('>PACE','Z'). TCOM: EQU $ < LISTE DES PRIMITIVES A < A ACCES DIRECT. WORD N1 < 'SPACE' ELEMENT NEUTRE WORD NCDIR < ! BRANCHEMENT : IEG<--(SAVE) WORD N945 < " AUTORISATION PRIMITIVE WORD N610 < # WORD N302 < $ APPEL BIBLIOTHEQUE WORD N8 < % BOUCLE DE REPETITIONS WORD N7 < & APPEL GLOBAL DE PROGRAMME WORD N941 < ' APPEL ARGUMENT FORMEL COURANT WORD N14 < ( OPEN RECURSIVITE WORD N15 < ) CLOSE RECURSIVITE WORD N19 < * MULTIPLICATION D(X) ET D(Y) WORD N17 < + INCREMENTATION D(X) ET D(Y) WORD N2001 < , BLANC SI NOIR/NOIR SI BLANC WORD N18 < - DECREMENTATION D(X) ET D(Y) WORD N2000 < . MISE A BLANC EN VIDEO WORD N20 < / DIVISION D(X) ET D(Y) WORD N9410 < 0 APPEL ARGUMENT FORMEL DE < L'AUTRE ITEM WORD N9 < 1 DEPLACEMENT EST WORD N10 < 2 DEPLACEMENT NORD WORD N11 < 3 DEPLACEMENT OUEST WORD N12 < 4 DEPLACEMENT SUD WORD N1 < 5 IF5 WORD N1 < 6 IF6 WORD N1 < 7 IF7 WORD N1 < 8 IF8 WORD N1 < 9 IF9 WORD N940 < : INVERSION DES INHIBITIONS WORD N1 < ; ELEMENT NEUTRE WORD N340 < < COMMENTAIRE OU TEXTE A EDITER WORD N1001 < = DEFINITION ARGUMENT FORMEL WORD N16 < > DEFINITION DE PROGRAMME WORD N860 < ? APPEL DIRECT PROGRAMME BIBLIO. WORD N610 < @ WORD N4 < A ORIGINE D'UN SEGMENT WORD N5 < B EXTREMITE SEQUENTIELLE WORD N23 < C RETOUR AU CCI WORD N610 < D WORD N610 < E WORD N22 < F RETOUR A L'APPELANT WORD N610 < G WORD N750 < H MAKE COPY WORD N92 < I PASSAGE EN INTERACTIF WORD N610 < J WORD N31 < K MODIFICATION DE LA CTTE K WORD N610 < L WORD N310 < M OPERATIONS SUR STACK WORD N610 < N WORD N400 < O MISE A L'ORIGINE DE CV WORD N93 < P PASSAGE MODE NON INTERACTIF WORD N600 < Q CHANGEMENT DE PLAN WORD N920 < R RESTAURE CONTEXTE DKS WORD N6 < S EXTREMITE ETOILEE D'UN SEGMENT WORD N13 < T TRANSFORMATION COURANTE WORD N610 < U WORD N610 < V WORD N921 < W SAVE CONTEXTE DKS WORD N2 < X MODIFICATION D(X) WORD N3 < Y MODIFICATION D(Y) WORD N21 < Z EFFACEMENT DE L'ECRAN PAGE < < < P I L E D E R E C U R S I V I T E : < < PIR: EQU $ WORD 0;0 < VALEUR INITIALE DE LA 1ERE < ENTREE DE PIR. < (CD=CP=0). DZS X1 < ENTREE SUIVANTES DE PIR. < < < P I L E D E S C O N S T A N T E S : < < < NOTA : < CETTE PILE GEREE PAR LES INSTRUCTIONS < PUSH/PULL MICRO-PROGRAMMEES , < CONTIENT INITIALEMENT LE 1ER MOT < ET LE DERNIER MOT BLOQUES , AFIN < DE DETECTER LES DEBORDEMENTS PAR LE < HAUT ET PAR LE BAS AVANT QU'ILS N' < AIENT DES CONSEQUENCES DESASTREUSES ... < < STACK: EQU $ BYTE LSTACK-1;1 DZS LSTACK PAGE < < < V A L I D A T I O N I M P L A N T A T I O N : < < X12: EQU ZERO+PILE-LTNI-LTNI < X12=@ITEM2. X10: VAL X12-$ < CETTE CONSTANTE DOIT ETRE < POSITIVE OU NULLE. ZEROV: EQU ZERO+X10 < ERREUR D'ASSEMBLAGE SI IL < Y A MAUVAISE IMPLANTATION. DZS X10+1 PAGE < < < C H A R G E M E N T B I B L I O T H E Q U E : < < < FONCTION : < CE MODULE APPELE SUITE A LA COMMANDE < '$' , RECUPERE LE <NOM-BIBLIOTHEQUE> , < LE CODE SUR 6 CARACTERES SUIVANT LES < NORMES EN VIGUEUR DANS 'GE' , ET ENFIN < TENTE LE CHARGEMENT DE L'ITEM DE <NOMC> , < DANS L'ITEM QUI N'EST PAS L'ITEM COURANT. < < < ARGUMENT : < B=0. < IEG=INDEX 1ER CARACTERE <NOM-BIBLIOTHEQUE>. < < < RESULTAT : < X=0 : LA BIBLIOTHEQUE EST CHAGREE , ET < EST DE TYPE ITEM. < X#0 : LA BIBLIOTHEQUE N'EXISTE PAS , OU N'EST < PAS DE TYPE ITEM. < < RACB: EQU IMAG+LIMAG XWOR%: VAL RACB-ZERO*2 XWOR%A: EQU ZERO+XWOR% RACB1: EQU $ DEBOV1: EQU $ BYTE " ";NOMBB ASCI " " BYTE '04;'D0 X101: VAL $-RACB1 LOADB: EQU RACB+X101 < < C O D A G E D E L A B I B L I O T H E Q U E : < < < INITIALISATION DES RELAIS : < LA AIC < A=@MOT DE L'ITEM COURANT. SB ACCEB < PASSAGE A L'AUTRE ITEM. ADRI -LTN,A < A=@MOT DE L'EN-TETE DE L'AUTRE < ITEM. STA AIR < AIR SERA LE RELAI DE L'EN-TETE < DE L'AUTRE ITEM. SLLS 1 < A=@OCTET DE L'EN-TETE DE < L'AUTRE ITEM. STA DEMSGN+1 < MAJ DE L'@OCTET DE DEMSGN. < < INITIALISATION DU CODEUR : < STZ F3 < RAZ DE LA FONCTION F3. LYI 3 < 2*3 CARACTERES A METTRE A 'SPACE' LXI 0 < INDEX DE MISE A 'SPACE'. LAI '20 SBT 2 < A='SPACE''SPACE'. E211: EQU $ STA &AIR < MISE DU <NOMC> A 'SPACE'. ADRI 1,X < INDEX DE RAZ. CPR X,Y JNE E211 < NEXT .... LYI -1 < Y=INDEX DE <NOMC> , PUIS < LONGUEUR COURANTE DE <NOM>. < ON A ICI : < B=0 (ARGUMENT) , < Y=-1 : LONGUEUR COURANTE DE <NOM> , < < RECUPERATION DES 3 PREMIERS CARACTERES DE <NOM> : < E500: EQU $ BSR AGTK < A=K(SAVE). JE E212 < RENCONTRE DE ';'. STBY &AIR < C(X)=K(SAVE). LR Y,A CPI 2 JL E500 < RECUPERATION DE C(1),C(2),C(3). < < CODAGE DES CARACTERES K(4),...,K(L) : < E213: EQU $ BSR AGTK < A=K(I) , I=4,...,L (L DESIGNANT < LA LONGUEUR DE <NOM>. JE E214 < ARRET DUR LE ';' RENCONTRE. ADR Y,A < LE CARACTERE COURANT (A) EST < 'PONDERE' PAR SA POSITION < (Y) DANS <NOM>. < (K(I)=K(I)+I). EORR A,B < CALCUL DE F2 : < F2=EOR(F2,K(I)). ADR A,B < F2=F2+K(I). EOR F3 < CALCUL DE F3 : < F3=EOR(F3,K(I)). SCLS 1 STA F3 < F3=SCLS(F3,1). JMP E213 < CODAGE DU CARACTERE SUIVANT. < < MISE SOUS FORMA ASCI DES FONCTIONS F2 & F3 : < E214: EQU $ LBY F3 < A=OCTET0(F3). AD F3 < A=F3+OCTET0(F3). ANDI '7F < A=OCTET0(F3)+OCTET1(F3). < (MODULO 128). CPI "Z" JLE E215 ADRI -'30,A < F3 EST MIS SOUS LA FORME D'UN < CARACTERE INFERIEUR AU 'Z'. E215: EQU $ CPI " " JG E216 ADRI '30,A E216: EQU $ < ON A ICI : < F3=CARACTERE ASCI VARIABLE DE '!' (='21) , < A 'Z' (='5A) , ET CONTENU DANS A. XR A,B < B=F3 , A=F2. ANDI '7F < F2 EST RAMENE A 7 BITS. CPI "Z" JLE E217 ADRI -'30,A < F2 EST RAMENEE A UN CODE < INFERIEUR A CELUI DU 'Z'. E217: EQU $ CPI "0" JGE E218 ADRI '20,A < ON TENTE DE RAMENER F2 A UN < CODE SUPERIEUR A CELUI DU '0'. JMP E217 < POURSUITE DE LA TENTATIVE. E218: EQU $ < ON A ICI : < F2=CARACTERE ASCI VARIABLE DE '0' (='30) , < A 'Z' (='5A). SWBR A,A ORR B,A < A=F2.F3. LXI 2 STA &AIR < STORE : C(5)=F2 ET C(6)=F3. < < CODAGE DE LA LONGUEUR DE <NOM> : < E212: EQU $ < ON A ICI : < Y=LONGUEUR DE <NOM> (NON COMPRIS ';'). LR Y,A JANE E2000 < OK, LONGUEUR#0. < < C A S L O N G U E U R N U L L E : DANS CES CONDITIONS, < ON INVERSE LES CONDITIONS DE COMPTAGE DES SEGMENTS < TRACES (BIT0(NBSEG)). < LA NBSEG IBT 0 < INVERSION DES CONDITIONS. STA NBSEG LXI 0 < POUR FAIRE UN RETOUR OK. JMP E207 < VERS LA SORTIE. < < ACS DES LONGUEURS#0 : APPEL D'UNE BIBLIOTHEQUE : < E2000: EQU $ ADRI '30,A < LA LONGUEUR EST MISE SOUS FORME < D'UN CARACTERE ASCI (A PARTIR < DE '0' ,...). LXI 3 STBY &AIR < STORE : C4=F1 (LONGUEUR). LXI 6 LAI '04 STBY &AIR < STORE : C(7)='EOT'. < < C H A R G E M E N T D E L A B I B L I O T H E Q U E : < LA ALTNI2 < LONGUEUR MAX EN OCTETS D'UN < ITEM. STA DEMSGN+2 < MAJ DU COMPTE OCTETS DE DEMSGN. LYI 1 < DECOMPTEUR DE TENTATIVES. LAI 5 < ON COMMENCE PAR UN 'LOAD VALUE < SOUS <ACN>'. < < BOUCLE DE TENTATIVES : < E206: EQU $ < ON A ICI : < A=NVP D'ACCES A SGN , < Y=DECOMPTEUR DE TENTATIVES. STBY DEMSGN < MISE EN PLACE DU NVP DE DEMSGN. LAD DEMSGN SVC 0 < ENVOI DE LA DEMANDE AU SGN. JE E220 < OK LOAD SUCCESSFUL. < < CAS DES RETOURS EN ERREUR : < ADRI -1,Y < DECOMPTE DES TENTATIVES. CPZR Y JL E207 < C'ETAIT LA 2EME , ON FAIT < DONC UN RETOUR EN ERREUR (X#0). LAI 6 < SINON , ON VA FAIRE UNE TENTA- < TIVE AVEC UN 'LOAD SOUS :SYS'. JMP E206 < VERS LA 2EME TENTATIVE. < < CAS OU LA BIBLIOTHEQUE A ETE CHAGREE : IL < FAUT EN VALIDER LE TYPE-ITEM : < E220: EQU $ LXI 7 LBY &AIR < A=TYPE DE CE QUE L'ON VIENT < DE CHARGER. LXI 'C9 < X='I'+'80 (TYPE ATTENDU= < TYPE-ITEM 'I'). SBR A,X < SI LE TYPE EST 'ITEM' , ON < AURA : X=0 (ET UN RETOUR OK). < < SORTIE DE LA ROUTINE : < E207: EQU $ RSR PAGE < < < A C C E S C A R A C T E R E A C O D E R : < < < FONCTION : < CETTE ROUTINE RECUPERE UN CARACTERE < DU <NOM-BIBLIOTHEQUE> ; ELLE < FAIT PROGRESSER SAVE ET TESTE LA RENCONTRE < DU CARACTERE DE FIN DE NOM ';'. < DE PLUS , ELLE FAIT PROGRESSER LA < LONGUEUR COURANTE DE <NOM>. < < < ARGUMENT : < Y=LONGUEUR COURANTE DE <NOM> , < SAVE=INDEX DU CARACTERE COURANT. < < < RESULTAT : < SAVE<--(SAVE)+1 , < A=CARACTERE COURANT , < Y<--(Y)+1 , < X<--(Y) , < INDICATEURS POSITIONNES EN FONCTION D'UN < TEST SUR LA PRESENCE DE ';'. < < X101: VAL $-RACB1 GTK: EQU RACB+X101 ADRI 1,Y < PROGRESSION DE LA LONGUEUR < COURANTE DE <NOM>. < < ACCES AU CARACTERE COURANT : < LX SAVE < X=INDEX DU CARACTERE COURANT. IC SAVE < PREPARATION DE L'ACCES AU < CARACTERE SUIVANT. LBY &AIC < A=CARACTERE COURANT DE <NOM> , < RECUPERE DANS L'ITEM COURANT. CPI ";" < TEST DE FIN DE NOM. LR Y,X < X=INDEX DE RANGEMENT DANS LE < CAS DES 3 PREMIERS CARACTERES. < < SORTIE DE LA ROUTINE : < RSR PAGE < < < D E M A N D E S D E R E P E T I T I O N S : < < < R E C U P E R A T I O N D U N O M B R E < D E R E P E T I T I O N S : < O U D ' U N E C O N S T A N T E : < < < ARGUMENT : < Y=CARACTERE COURANT ; SI Y='@' , LA < CONSTANTE CALCULLE SERA 'CTTE'. < < < RESULTAT : < SAVE=NBRE DE REPETITIONS , SI X=0 (OK) , < X#0 : COMPTE ERRONNE. < < X101: VAL $-RACB1 REPET1: EQU RACB+X101 LXI 1 < ERREUR A PRIORI. LR Y,A < A=CARACTERE COURANT. ADRI -'30,A < CONVERSION EN BINAIRE. JALE E17 < CARACTERE NON RECONNU. CPI 9 < EST-CE UN CHIFFRE DE 1 A 9 ??? JLE E18 < OUI , OK. ADRI -'41+'39+1,A < TRANSLATION PAR RAPPORT AU 'A'. CPI 9 < EST-CE UN CARACTERE ENTRE '9' < ET 'A'. JL E17 < OUI , ERREUR. JG E308 < NON , OK. < < CAS DU CARACTERE '@' : < LA CTTE < LA CONSTANTE RESULTANTE EST CTTE. E308: EQU $ < < NBRE DE REPETITIONS CORRECT : < E18: EQU $ STA SAVE < SAVE=NBRE DE REPETITIONS < DEMANDEES (DE 1 A 35). LXI 0 < RETOUR OK. < < SORTIE DE LA ROUTINE : < E17: EQU $ RSR < RETOUR AVEC (X). < < < T R A N S M I S S I O N D U N O M B R E < D E R E P E T I T I O N S : < < < ARGUMENT : < SAVE=NBRE DE REPETITIONS DEMANDEES. < < < RESULTAT : < Y=NBRE DE REPETITIONS DEMANDEES. < < X101: VAL $-RACB1 REPET2: EQU RACB+X101 LY SAVE < FACILE ??? RSR < X N'EST PAS POSITIONNE , CAR < CETTE ROUTINE EST APPELEE < EN MODE SEQUENTIEL. PAGE < < < E D I T I O N D ' U N M E S S A G E : < < < FONCTION : < CE MODULE EDITE UN MESSAGE < ALPHA-NUMERIQUE DONT LE 1ER < CARACTERE EST A L'INDEX (SAVE) , < ET LE DERNIER A L'INDEX (IEG)-1. < < X101: VAL $-RACB1 TEXTE: EQU RACB+X101 LA IEG < INDEX CARACTERE COURANT. ADRI -1,A < RETOUR SUR LE '!'. SB SAVE < A=LONGUEUR DU MESSAGE. STA DEMOUT+2 < MAJ DE DEMOUT. LA AIC SLLS 1 < A=@OCTET DE L'ITEM COURANT. AD SAVE < A=@OCTET DU MESSAGE. STA DEMOUT+1 < MAJ DE DEMOUT. LAD CG BSR ASVC < RETOUR EN ALPHA-NUMERIQUE < DE LA VISU. JNE ET21 < RETOUR EN ERREUR (CTRL-X-OFF ???) LAD DEMOUT BSR ASVC < EDITION DU MESSAGE EN ALPHA. JNE ET21 < RETOUR EN ERREUR (CTRL-X-OFF ???) < OU MESSAGE DE LONGUEUR NULLE). LAD OG BSR ASVC < MISE EN GRAPHIQUE DE LA VISU. JNE ET21 < RETOUR EN ERREUR (CTRL-X-OFF ???) RSR < OK, RETOUR... < < SORTIES EN ERREUR : < ET21: EQU $ ADRI -1,K < ANNULATION DU BSR D'APPEL. BR AGOGE < DE LA VISU. PAGE < < < P R O J E C T I O N D E L ' E S P A C E : < < < FONCTION : < CETTE ROUTINE PROJETTE L'ESPACE < (X3,Y3,Z3) SUR LE PLAN (X3,Y3) < SUIVANT LA FORMULE : < X2=X3+R*Z3*COS(ALPHA) , < Y2=Y3+R*Z3*SIN(ALPHA) , < OU R EST UN RAPPORT DE REDUCTION , ET ALPHA , < UN ANGLE DE PROJECTION. < < < ARGUMENT : < CV3 CONTIENT (X3,Y3,Z3). < < < RESULTAT : < X=X2(POINT PROJETE) , < Y=Y2(POINT PROJETE). < < X101: VAL $-RACB1 PROJET: EQU RACB+X101 PSR B LAD MPROJ LR A,W < W=@MATRICE DE PROJECTION. LA CV3+Z3 < ACCES A Z3(POINT PROJETE). MP A11,W BSR ADIV < B=Z3*COS(TETA). LR B,A < A=Z3*COS(TETA). AD CV3+X3 < A=X3+Z3*COS(TETA). BSR ACHKCV < VALIDATION DE LA COORDONNEE X2. LR A,X < X=X2=X3+Z3*COS(TETA). LA CV3+Z3 < ACCES A Z3(POINT PROJETE). MP A21,W BSR ADIV < B=Z3*SIN(TETA). LR B,A < A=Z3*SIN(TETA). AD CV3+Y3 < A=Y3+Z3*SIN(TETA). BSR ACHKCV < VALIDATION DE LA COORDONNEE Y2. LR A,Y < Y=Y2=Y3+Z3*SIN(TETA). PLR B RSR PAGE < < < D E P L A C E M E N T D U C U R S E U R < V I R T U E L P A R L E C U R S E U R < R E E L E N I N T E R A C T I F : < < < FONCTION : < CETTE ROUTINE PERMET DE CALCULER < SUR L'AXE (SELECTIONNE AU PREALABLE < PAR UN SELDX/SELDY) LE DEPLACEMENT < DU CURSEUR VIRTUEL EXPRIME SOUS LA < FORME '1','2','3','4' , TEL QU'IL < AURAIT DONNE LE MEME RESULTAT QUE < CE DEPLACEMENT PRECISE PAR LE CURSUER < GRAPHIQUE REEL. < < < NOTATION : < CURSOR : CURSEUR GRAPHIQUE REEL , < CV : CURSEUR GRAPHIQUE VIRTUEL , < Z : DESIGNERA UNE COORDONNEE (X OU Y). < < < ARGUMENT : < A=Z(CURSOR)-Z(CV) , < ADXDY=@DZ , < Y="1" SI 'Z'='X' , < ="2" SI 'Z'='Y'. < < < RESULTAT : < A=0 SI OK , < A#0 & X#0 SI ERREUR (HORS-LA PAGE). < < X101: VAL $-RACB1 MCVCR: EQU RACB+X101 JAE E122 < RIEN A FAIRE , LE DEPLACEMENT < SUR L'AXE Z EST ABSOLUMENT < NUL. < < CAS D'UN DEPLACEMENT (A) NON NUL SUR Z : < JAG E123 < LE DEPLACEMENT A LIEU DANS LE < SENS CROISSANT DE Z. NGR A,A < DANS LE CAS D'UN DEPLACEMENT < DANS LE SENS DECROISSANT DE Z , < ON PREND LA VALEUR ABSOLUE < DE CELUI-CI. ADRI 2,Y < PASSAGE A Y="3"/"4". E123: EQU $ < ON A ICI : < A=ABSVAL(Z(CURSOR)-Z(CV)). < Y='1'/'2'/'3'/'4'. SARD 16 < (A,B)=ABSVAL(Z(CURSOR)-Z(CV)). DV &ADXDY < A=ENT(ABSVAL(Z(CURSOR)-Z(CV))/DZ) < < A T T E N T I O N : < LE RESTE DE CETTE DIVISION < EST IGNOREE ; CELA SIGNIFIE QUE < LE DESSIN INTERACTIF EST PROGRAMME < EN SUPER-QUANTIFIANT (!!?!??!) < L'ECRAN DE LA VISU . ON ETABLIT < SUR CELUI-CI UN QUADRILLAGE DE PAS < DX,DY ; LES SOMMETS DU DESSIN < RESULTANT SE TROUVANT PLACE SUR < LES NOEUDS DE CE QUADRILLAGE. < ADR B,B < ON DOUBLE LE RESTE. XR A,B < A=2*RESTE ; B=QUOTIENT ENTIER. CP &ADXDY < COMPARAISON DU DIVISEUR AU < DOUBLE DU RESTE (A). JL E330 < LA DIVISION EST FAITE PAR DEFAUT. ADRI 1,B < LA DIVISION EST FAITE PAR EXCES. E330: EQU $ LR B,A < RESTAURE A=QUOTIENT PAR EXCES < OU PAR DEFAUT DE LA DIVISION. JAE E122 < LE DEPLACEMENT SUR Z EST ASSIMILE < A UN DEPLACEMENT NUL , PUISQU'ON < IGNORE LE RESTE .... LR A,X < SINON , LE QUOTIENT DE CETTE < DIVISION (A) EST LE NBRE DE < CARACTERES DE MOUVEMENT ('1' , < '2','3','4') QU'IL FAUT SIMULER. LR Y,A < CARACTERE DE MOUVEMENT. ADRI -'30+1,A < POUR DIFFERENCIER '1'/'2' DE < '3'/'4'. SLRD 16+2 < B=0 SI Y='1'/'2' , < =1 SI Y='3'/'4'. < ON A ICI : < Y=CARACTERE DE MOUVEMENT ('1','2','3','4') , < X=NBRE DE REPETITIONS DU CARACTERE (Y) , < B=0 POUR LES MOUVEMENTS '1'/'2' , < =1 POUR LES MOUVEMENTS '3'/'4'. STB WORKS < SAVE B (A NOTER QU'ON NE < SAUVE PAS (B) DANS LA PILE, CAR < SINON, EN EFFET ON DETRUIRAIT < LE 1ER MOT DE L'IMAGE). < < BOUCLE DE MOUVEMENT : < E124: EQU $ PSR X,Y LR Y,A < A=CARACTERE DE MOUVEMENT. LX IEG < INDEX COURANT GRAPHIQUE. STBY &AIC < LE CARACTERE DE MOUVEMENT EST < INSERE EN CARACTERE COURANT DU < PROGRAMME GRAPHIQUE. LR X,A ADRI 1,A < INDEX DU CARACTERE SUIVANT. CP NCP < VALIDATION APRES RANGEMENT. STA IEG < MAJ DE IEG AVANT L'EVENTUELLE < SORTIE EN ERREUR (!!!). JGE E125 < ERREUR : HORS LA PAGE ; A < NOTER : A=(NCP)#0 (!!!). LR Y,A < A=CARACTERE DE MOUVEMENT. TBT 15 < DISCRIMINATION DE '1'/'3' < ET DE '2'/'4'. JC E126 < CAS DES MOUVEMENTS '1'/'3' , < C'EST-A-DIRE : 'Z'='X'. BSR AEXE24 < CAS DES MOUVEMENTS '2'/'4' , < C'EST-A-DIRE 'Z'='Y'. JMP E127 E126: EQU $ BSR AEXE13 < CAS 'Z'='X'. E127: EQU $ PLR X,Y < RESTAURE X,Y POUR UN BOUCLAGE LB WORKS < EVENTUEL, AINSI QUE (B). JDX E124 < REPETITION SUIVANTE. LAI 0 < RETOUR OK : A=0. < < SORTIE DE LA ROUTINE : < E122: EQU $ RSR < RETOUR AVEC (A) (ET (X) SI < ERREUR ....). < < SORTIE EN ERREUR : < E125: EQU $ PLR X,Y < RATTRAPGE DE LA PILE. JMP E122 < VERS LA SORTIE DE LA ROUTINE ; A < NOTER : X=NBRE DE REPETITIONS#0, < ET A=(NCP)#0 !!!! PAGE < < < P R I M I T I V E G E T C A R A C T E R < E N M O D E I N T E R A C T I F : < < < NOTA : < CE MODULE EST LA SUITE EN < OVERLAY DE LA PRIMITIVE DE GET < CARACTER. < < X101: VAL $-RACB1 PRIMGI: EQU RACB+X101 < < ENTREE GRAPHIQUE PAR CURSEUR : < LAD CU BSR ASVC < MISE EN FONCTION DU CURSEUR < GRAPHIQUE REEL. LAD LG BSR ASVC < INTERACTION AVEC L'UTILISATEUR < PAR LECTURE DES COORDONNEES DU < CURSEUR , ET DU CARACTERE DE < DEBLOCAGE DE LA VISU. LAD OG BSR ASVC < RETOUR EN GRAPHIQUE DE LA VISU. GOCU: EQU $ < < ACCES A LA COMMANDE : < LXI CP LBY &APRC < ACCES AU COMPTE DE PARENTHESES < SOUS CE NIVEAU DE RECURSIVITE. CPBY ICALLI < TEST PAR RAPPORT AU SEUIL .... LBY CURSOR < A=CARACTERE DE DEBLOCAGE VISU. JGE E120 < ON EST DANS LE MODE D'APPELS < IMPLICITES , DONC PAS DE < DISCRIMINATIONS SUR 'A'/'B'/'S'. < < CAS DU MODE NORMAL : < CPZR B < FAUT-IL TESTER 'A'/'B'/'S' ??? JE E120 < NON , CELA SIGNIFIE QU'ON N'EST < PAS DANS UN 'PG' DE LA BOUCLE < D'ANALYSE PRINCIPALE (N1). < < TEST DES COMMANDES D'EXTREMITE : < CPI "A" JE E121 < COMMANDE 'ORIGINE'. CPI "S" JE E121 < COMMANDE 'EXTREMITE ETOILEE'. CPI "B" JNE E120 < IL NE S'AGIT PAS D'UNE COMMANDE < D'EXTEMITE. < < CAS DE 'B' : REAFFICHAGE DE L'ORIGINE DU < SEGMENT COURANT A CAUSE DE L'OG QUI < VIENT DE PRECEDER : < LAD WG BSR ASVC < RE-EXECUTION DU WG PRECEDENT ... < < CAS DES COMMANDES 'A'/'B'/'S' : < E121: EQU $ < < DEPLACEMENT SUR OX : < BSR ASELDX < SELECTION DE DX. LA CURSOR+1+X < X(CURSOR). SB CV+X < A=X(CURSOR)-X(CV). LYI "1" < A PRIORI MOUVEMENT '1'. BSR AMCVCR < DETERMINATION DES MOUVEMENTS < '1'/'3'. JANE E980 < RETOUR EN ERREUR : ON A (X)#0. < < DEPLACEMENT SUR OY : < BSR ASELDY < SELECTION DE DY. LA CURSOR+1+Y < Y(CURSOR). SB CV+Y < A=Y(CURSOR)-Y(CV). LYI "2" < MOUVEMENT '2' A PRIORI. BSR AMCVCR < DETERMINATION DES MOUVEMENTS < '2'/'4'. JANE E980 < RETOUR EN ERREUR : ON A (X)#0. LBY CURSOR < RESTAURE A=CARACTERE DE < DEBLOCAGE DE LA VISU , QUI EST < LE CARACTERE A INSERER PRESEN- < TEMENT DANS LE PROGRAMME < GRAPHIQUE. < < CAS DE TOUTES LES COMMANDES : < E120: EQU $ < ON A ICI : < A=CARACTERE DE DEBLOCAGE DE LA VISU. CPI '20 < EST-CE UN CTRL-XXX ??? JGE E150 < NON , ON PEUT LE GENERER ... LAI "?"+'80 < LES CTRL-XXX SONT REMPLACES PAR < '?' , AFIN D'APPARAITRE LORS < DE L'EDITION DU PROGRAMME (CE < QUE N'AURAIT PAS FAIT LES CTRL- < XXX) , ET FAIRE UASSI UNE FAUTE < DE SYNTAXE. < ('?' MIS EN EXPOSANT). E150: EQU $ LX IEG < RESTAURE X=INDEX COURANT < D'EXECUTION GRAPHIQUE. STBY &AIC < LA COMMANDE LUE EST MISE EN < COMMANDE COURANTE (IEG) . . A < NOTER QUE IEG A DEJA ETE VALIDE. BR AE111 < VERS L'EXECUTION PROGRAMMEE. < < R E T O U R S E N E R R E U R : < E980: EQU $ LYI -1 < MISE DANS Y D'UN CARACTERE BIDON < AFIN DE CREER UNE ERREUR DE < SYNTAXEE PAR LA SUITE ...!!! BR ALOOPB < VERS LA BOUCLE DE L'EDITEUR ; < A NOTER QUE : (X)#0. PAGE < < < A F F I C H A G E D ' U N P O I N T : < < < ARGUMENT : < X,Y = COORDONNEES DU POINT. < < X101: VAL $-RACB1 SET: EQU RACB+X101 PSR B,X,C LR Y,A < A=Y(POINT COURANT). MP NMPL ADR B,C LR X,A < A=X(POINT COURANT). SLRS 4 < RECUPERATION D'UN NUMERO DE MOT. ADR A,C < C=@MOT CONTENANT LE POINT M. LAI 'F < MASQUE DE CALCUL MODULO 16. ANDR A,X < X=NUMERO DU BIT DANS LE MOT. LA 0,C < A=MOT CONTENANT LE POINT M. POINTS: SBT 0,X < POSITIONNEMENT DU POINT A 0/1. X101: VAL POINTS-RACB1 POINT: EQU RACB+X101 < VARIABLE SBT/RBT LORSQUE LA < BRANCHE 'V' EST RESIDENTE. STA 0,C < MISE A JOUR DE L'IMAGE. PLR B,X,C RSR IF ORDI-"T",XWOR%,,XWOR% < < < S T A B I L I S A T I O N I M A G E : < < TIMAG: WORD IMAG X101: VAL $-RACB1 SP3: EQU RACB+X101 LRP L LB TIMAG-$+1,L < B=@RELATIVE IMAGE. LA 10,W < A=SLO(ESCLAVE). ADR A,B < B=@ABSOLUE IMAGE. LXI NSPTV BSR ACADCT,C < L=@DCT-VIDEO. STB ADM,L < DEMANDE VISUALISATION IMAGE. RSR XWOR%: VAL 0 < < < S T A B I L I S A T I O N : < < < A T T E N T I O N : DETRUIT LE REGISTRE A !!! < < X101: VAL $-RACB1 STAB: EQU RACB+X101 IF ORDI-"T",XWOR%,,XWOR% LA ASP3 JAE STAB1 < ON N'EST PAS SOUS :SYS ... WORD '1EC5 < OK, SOUS :SYS... STAB1: EQU $ XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% LAD STABIL < DEMANDE DE STABILISATION. SVC 0 XWOR%: VAL 0 RSR PAGE < < C O N V E R S I O N G R A P H I Q U E - V I D E O : < < < ARGUMENT : < SEG CONTIENT LE SEGMENT COURANT A CONVERTIR. < B=4 : MODE SEQUENTIEL ('B') , < =8 : MODE ETOILE ('S'). < < < RESULTAT : < X ET Y CONTIENNENT L'X ET L'Y < DE L'EXTREMITE DU SEGMENT COURANT EN < PROJECTION SUR L'ECRAN DE LA VISU. < < COMOV: EQU $ < PETIT COMMON PRIVE... C10: WORD 10 < CONSTANTE DE CONVERSION BASE 10. WNBSEG: WORD '0B07 < ECRITURE DIRECTE SUR '0B. BYTE 0;'08 < CHIFFRE, PUIS BACK-SPACE. BYTE '08;'04 < BACK-SPACE, EOT. X101: VAL $-RACB1 VIDEO: EQU RACB+X101 < < PREPARATION DE L'AFFICHAGE GRAPHIQUE : < CPZ NBSEG < COMPTAGE SEGMENTS ??? JL NBSEG3 < NON. < < CAS OU IL Y A COMPTAGE : < ADRI -4,B < B=0 SI 'B', B=4#0 SI 'S'. LAI SEG-ZERO*2 STA WG+1 < A=@BUFFER A UTILISER. LAI 8 STA WG+2 < LORQU'IL Y A COMPTAGE, IL Y A < ECRITURE ALPHA-NUMERIQUE, ET < IL NE FAUT PAS ALORS PERDRE DE < SEGMENTS, D'OU CETTE DESOPTIMI- < SATION... JMP NBSEG4 < < CAS OU IL N'Y A PAS COMPTAGE : OPTIMISATION DU TRACE : < NBSEG3: EQU $ STB WG+2 < COMPTE D'OCTETS DE WG. ADRI -4,B < B=0 SI 'B' , B=4#0 SI 'S'. LAI SEGEXT-ZERO*2 SBR B,A < A=@BUFFER A UTILISER DANS WG. STA WG+1 < MAJ DE L'@OCTET DU BUFFER. NBSEG4: EQU $ BSR APROJ < PROJECTION DU 3-ESPACE SUR < L'ECRAN DE LA VISU. STX SEGEXT+X < X(EXTREMITE SEGMENT COURANT). STY SEGEXT+Y < Y(EXTREMITE SEGMENT COURANT). < < INITIALISATION DE LA CONVERSION : < LA APILD < A=@PILE DE DICHOTOMIE. XR A,K < INITIALISATION DE K SUR LA PILE < DE DICHOTOMIE , ET SAVE LE < REGISTRE K DE SODOME DANS A. PSR X,Y PSR A,B,C < SAVE LE TYPE 'B'/'S' DANS B , LE < REGISTRE K DE SODOME DANS A , ET < L'INDEX COURANT DE LA GRAMMAIRE < GRAPHIQUE DANS C. LA AIMAG LR A,C < C=@IMAGE VIDEO. < < CALCUL DES EXTREMITES M1 ET M2 DU SEGMENT VIDEO : < LA SEGORG+X < A=X(ORIGINE GRAPHIQUE). SLRS DEDX < REDUCTION VIDEO. STA DICOX1 < RANGEMENT DE X1. LA SEGORG+Y < A=Y(ORIGINE GRAPHIQUE). SLRS DEDY < REDUCTION VIDEO. NGR A,A AD NLIG < INVERSION DUE AU FAIT QUE LES < AXES Y VIDEOS ET GRAPHIQUES < SONT INVERSES. STA DICOY1 < RANGEMENT DE Y1. LA SEGEXT+X < A=X(EXTREMITE GRAPHIQUE). SLRS DEDX < REDUCTION VIDEO. STA DICOX2 < RANGEMENT DE X2. LA SEGEXT+Y < A=Y(EXTREMITE GEAPHIQUE). SLRS DEDY < REDUCTION VIDEO. NGR A,A AD NLIG < INVERSION DES AXES Y. STA DICOY2 < RANGEMENT DE Y2. < < TRACE DICHOTOMIQUE DU SEGMENT : < LX DICOX1 < X=X1. LY DICOY1 < Y=Y1. BSR ASET < AFFICHAGE DU POINT M1. BSR ADICO < TRACE DES POINTS DE M1 A M2. LX DICOX2 < X=X2. LY DICOY2 < Y=Y2. BSR ASET < AFFICHAGE DU POINT M2. < < RETOUR DE LA CONVERSION : < CPZ NBSEG < Y-A-T'IL COMPTAGE DES SEGMENTS ??? JL NBSEG2 < NON, SORTIE... < < COMPTAGE DES SEGMENTS (BIT0(NBSEG)=0) : < IC NBSEG < ET UN SEGMENT DE PLUS... LRP C ADRI COMOV-$+1,C < C=@DU PETIT COMMON PRIVE... LAD CG SVC 0 < RETOUR DE '0B EN ALPHANUMERIQUE. LA NBSEG < INITIALISATION A=NBSEG. NBSEG1: EQU $ SARD 16 < EXTENSION 32 BITS. DV C10-COMOV,C < B=CHIFFRE DES UNITES A EDITER. ADRI '30,B < CONVERSION ASCI. XR A,B < A=CHIFFRE A EDITER, ET SAVE < DANS B LE QUOTIENT COURANT. STBY WNBSEG-COMOV+1,C < MISE DU CHIFFRE A EDITER DANS < LE BUFFER D'ECRITURE DIRECTE. LAD WNBSEG-COMOV,C SVC 0 < EDITION D'UN CHIFFRE COURANT. XR A,B < RESTAURE A=QUOTIENT COURANT. JANE NBSEG1 < ENCORE A EDITER... LAD OG < SINON, SVC 0 < RETOUR EN GRAPHIQUE DE '0B. < < RESTAURATIONS ET SORTIE : < NBSEG2: EQU $ PLR A,B,C < RESTAURATION DES REGISTRES , PLR X,Y < RESTAURATION DES REGISTRES , LR A,K < RESTAURATION DE K DE SODOME. BR ARETV < VERS L'AFFICHAGE GRAPHIQUE. PAGE < < < P A R C O U R S D I C H O T O M I Q U E D ' U N < S E G M E N T M 1 M 2 : < < X101: VAL $-RACB1 DICO: EQU RACB+X101 DICOB: EQU $ LA DICOX1 < A=X1. AD DICOX2 < A=X1+X2. SLRS 1 < A=(X1+X2)/2. STA DICOX < X D U MILIEUR DE M1M2. LA DICOY1 < A=Y1. AD DICOY2 < A=Y1+Y2. SLRS 1 < A=(Y1+Y2)/2. STA DICOY < Y DU MILIEU M DE M1M2. < < POSITION DE M PAR RAPPORT A M1 ??? < SB DICOY1 < A=Y-Y1. JANE DICO31 < M#M1. LA DICOX < A=X. SB DICOX1 < A=X-X1. JAE DICO32 < M=M1. < < POSITION DE M PAR RAPPORT A M2 : < DICO31: EQU $ LA DICOY < A=Y. SB DICOY2 < A=Y-Y2. JANE DICO30 < M#M2 ET M#M1. LA DICOX < A=X. SB DICOX2 < A=X-X2. JANE DICO30 < M#M2 ET M#M1. < < CAS OU M=M1 OU M=M2 : < DICO32: EQU $ LX DICOX LY DICOY BSR ASET < AFFICHAGE DU POINT M=(M1+M2)/2. RSR < ARRET PROVISOIRE DE LA DICHOTOMIE < DESCENDANTE. < < CAS OU M#M1 ET M#M2 : < DICO30: EQU $ LA DICOX2 < A=X2. LB DICOY2 < B=Y2. PSR A,B < SAVE LE POINT M2 COURANT. LA DICOX < A=X. STA DICOX2 < X2<--X. LA DICOY < A=Y. STA DICOY2 < Y2<--Y. BSR ADICO < DICHOTOMIE SUR LE SEGMENT M1M. LX DICOX2 < X=X2. LY DICOY2 < Y=Y2. BSR ASET < AFFICHAGE DU POINT M2. STX DICOX1 < X1<--X2. STY DICOY1 < Y1<--Y2. PLR A,B < RESTAURATION DU POINT M2 , APRES < CHANGEMENT DE POINT M1. STA DICOX2 < RESTAURE X2. STB DICOY2 < RESTAURE Y2. JMP DICOB < VERS LA POURSUITE DE LA DICHO. PAGE < < < P I L E D E R E C U R S I V I T E < D I C H O T O M I Q U E : < < X101: VAL $-RACB1 PILD: EQU RACB+X101 DZS 64 < SUPER PILE DE DICHOTOMIE !!! < < < T A I L L E D E L A B R A N C H E : < < SBB: VAL $-RACB1*2 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 : < < X101: VAL $-RACB1 X13: EQU RACB+X101 X10: VAL X13-ZERO X10: VAL '27C0-X10 ZEROW: EQU ZERO+X10 < DEPASSEMENT DES 10K... EOT #SIP GEN PROCESSEUR#