< < < A S S E M B L A G E G 5 : < < < < NMPROC: VAL "G5" < NOM DU PROCESSEUR. IDP "G5 - RELEASE 13/09/1983" IDP "JOHN F. COLONNA" XG5VTV:: VAL 0 < ASSEMBLAGE VISU+512... XG5TV:: VAL 1 < ASSEMBLAGE 512 SEUL... IF XG5TV-XG5VTV,XWOR%5,,XWOR%5 IF ATTENTION : XG5TV=XG5VTV !!! XWOR%5: VAL 0 XXG5:: VAL XG5TV < ASSEMBLAGE DU 512 SEUL... ENDIF:: VAL 0 < A CAUSE DE #SIP VECTEUR 512# QUI SUIT... XXXVEC: VAL -1 < POUR NE DEFINIR QUE 'XXVEC'... EOT #SIP VECTEUR 512# XXXVEC: VAL XXVEC1 EOT #SIP VECTEUR 512# < < D I M E N S I O N E S P A C E : < DIM: VAL 3 < < T A I L L E E C R A N : < SIZE: VAL XXVD4 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# PROG P16 EOT #SIP DEFINITION CMS5# EOT #SIP IMAGE 256# LIMAG: VAL 0 < ON TRICHE POUR SE RAMENER A "GR"... NOM: EQU ZERO+PILE+5-LNOM-2 IMAG: EQU NOM+LNOM+2 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 30 < 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 : < < TABLE CDAG: ASCI "!CDA" BYTE '04;0 LOCAL LOCGR LOC: EQU $ < < S E G M E N T C O U R A N T : < SEG: EQU $ DZS 2*DIM SEGORG: EQU SEG SEGEXT: EQU SEG+DIM SEG2: EQU $ < PROJECTION PLANNE DE SEGC. < < NOTA : < LES 4 PREMIERS MOTS DE SEG2 < CONTIENNENT M1 ET M2 , ET LES < 4 DERNIERS N1 ET N2. < DO 4 DZS 2 < COUPLE (Z,X). DZS 2 < TAMPON DE PRUDENCE (CF. LE CAS < OU 2 POINTS NON OVERCREEN < ONT ETE DECOUVERTS ; LORS DE < LA RECHERCHE DU POINT D'INTER- < SECTION SUIVANT , W POINTE A LA < SUITE DE 'INTER' .....) SEGOR2: EQU SEG2 < PROJECTION DE L'ORIGINE < DU SEGMENT COURANT. SEGEX2: EQU SEG2+2 < PROJECTION DE L'EXTREMITE DU < SEGMENT COURANT. SEGT: EQU $ DZS 2 < DESTINE AU BON POSITIONNEMENT < DES TEXTES ALPHA-NUMERIQUES. < < EXTREMITES M1 ET M2 DU SEGMENT COURANT PROJETE : < NZ: VAL 0 < COORDONNEE VERTICALE DE M1/M2. NX: VAL 1 < COORDONNEE HORIZONTALE DE M1/M2. X1: EQU SEGOR2+NX < X(M1). Z1: EQU SEGOR2+NZ < Z(M1). X2: EQU SEGEX2+NX < X(M2). Z2: EQU SEGEX2+NZ < Z(M2). < < EQUATION DE LA DROITE SUPPORT DU SEGMENT < COURANT PROJETE SUR L'ECRAN : < P1: WORD 0 < P1=Z2-Z1. MP1: WORD 0 < MP1=-P1. P2: WORD 0 < P2=X2-X1. P3: DZS 2 < P3=X2*Z1-X1*Z2. < (DOUBLE PRECISION). < < DEFINITION DES POINTS M1,M2,N1,N2 : < (DANS LA ZONE SEG2) < M1: VAL 0 M2: VAL 2 PN1: VAL 4 PN2: VAL 6 < < POINTS D'INTERSECTION DE LA DROITE M1M2 AVEC L'ECRAN : < INTER: EQU SEG2+PN1 < SOIENT N1 ET N2 CES 2 POINTS. < S'ILS EXISTENT. < < 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). SCALE: EQU CTTE CV: DZS 2 < COORDONNEES Y ET X DU CURSEUR < GRAPHIQUE VIRTUEL. CVG: EQU CV 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 : < WORK: WORD 0 < CONSTANTE MEMORISANT LE TYPE < DE BIBLIOTHEQUE : < =-1 : BIBLI EN BASCULE, < =0 : OVERLAY DE PROGRAMME, < =1 : BIBLI AU DELA DES 4K. 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 LCALL,X < NOM 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 D'ECHELLE GENERALE : < SCAL: VAL 3*4 < ECHELLE GENERALE INITIALE : < ON PREND UN MULTIPLE DE 3 ET DE 4 < POUR SIMPLIFIER LES PROBLEMES D'ECRAN < DE TV ET VISU... ECH: BYTE SCAL;SCAL < ECHELLE GENERALE COURANTE (EX/EY). ECH0: WORD SCAL < ECHELLE GENERALE INITIALE. < FACTEUR REEL APPLIQUE EST : < ECH/ECH0. < < CONSTANTES TRI-DIMENSIONNELLES : < ACV3: WORD CV3,X < DONNE L'ADDRESSE INDEXEE DE CV3. MPROJ: WORD 2;1;-1;1;1 < MATRICE DE PROJECTION : DEUX CAS : < 'DIV'>0 (=2) : PROJECTION PAR SIN(TETA) < ET COS(TETA), < 'DIV'<0 : PROJECTION PERSPECTIVE < AVEC : P=ABS(DIV). < < 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,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 SIZE-1 < NBRE DE POINTS-1 SUR UN AXE, < ET DEGRE D'IDEMPOTENCE DE MA. BORNE: EQU C1023 MO: WORD 25;25;-7;0;24 C1024: WORD SIZE < 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. AI2: WORD ZERO+PILE-LTNI+LTN-LTNI,X < RELAI VERS L'ITEM2. CBTR: WORD LIMAG+'1000-PILE+LTNI-LTN+LTNI+LTN < CTTE DE PASSAGE DE ITEM2 < AU DELA DE L'IMAGE VIDEO... XX1: VAL LEPR*LPR-LEPR < NBRE DE MOTS DE PIR-LEPR. BPR: WORD PIR < BASE DE LA PILE DE RECURSIVITE. TPR: WORD PIR+XX1 < TOP DE LA PILE DE RECURSIVITE. LSTACK: VAL 30 < LONGUEUR DE 'STACK'. ASTACK: WORD STACK < RELAI POINTEUR DE 'STACK'. ARACI: WORD RACB < @BRANCHE D'OVERLAY. APILD: WORD PILD < PILE DE BONNE TAILLE. APILDR: WORD PILE-1 < PILE DE SMC. < < 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. AEXECS: WORD EXECS < PRIMITIVE 'S'. AOVS: WORD OVS < TEST D'OVERSCREEN. ACALX: WORD CALX < RESOLUTION EQUATION EN X. ACALZ: WORD CALZ < RESOLUTION EQUATION EN Z. AGTCAR: WORD GETCAR < ACCES A UN CARACTERE DANS < LA RECHERCHE DES PROGRAMMES. AGTK: WORD GTK < ACCES A UN CARACTERE A CODER. ASELDX: WORD SELDX < POUR SELECTION INTERACTIVE DE DX. ASELDY: WORD SELDY < POUR SELECTION INTERACTIVE DE DY. AFECH: WORD FECH < APPLICATION ECHELLE GENERALE. 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'. ACHGTI: WORD CHGTI < CHANGEMENT D'ITEM COURANT. APROJ: WORD PROJET < ROUTINE DE PROJECTION PLANE. ASPDXY: WORD SPDXY < RESTAURATION DE 2 DES 3 PAS < A PARTIR DE DX ET DY. < < 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. TAILMM: VAL '4000 < 8K MOTS NECESSAIRES POUR 'GR'. DEMMEM: WORD '0004 < DEMANDE D'ALLOCATION DE 8K/12K MOTS. RELMEM: WORD '0004 < DEMANDE DE RETOUR A 4K MOTS. WORD TAILMM WORD '2000 < 4K MOTS='2000 OCTETS. DEMLOD: WORD '0602 < CHARGEMENT OVERLAY ' R'. WORD XWOR%A WORD XWOR%B WORD -1 IF XXG5-XG5VTV,XWOR%5,,XWOR%5 < < NOTA : UN APPEL DE BIBLIOTHEQUE VIDE ($;), < FAIT PASSER DE LA VISU '02 A LA VISU '0B ... < WG: WORD '020A < DEMANDE D'ECRITURE GRAPHIQUE. WORD SEGOR2-ZERO*2 < @OCTET DU BUFFER GRAPHIQUE. WORD 8 < COMPTE OCTETS. WGT: WORD '020A < DESTINE AU POSITIONNEMENT CORRECT WORD SEGT-ZERO*2 < DES TEXTES ALPHA-NUMERIQUES. WORD 4 < ENVOI COORDONNEES 1 POINT. OG: WORD '0203 < OPEN GRAPHIQUE DE LA VISU. CG: WORD '0204 < RETOUR EN ALPHA-NUMERIQUE. DERASE: WORD '0205 < EFFACEMENT DE L'ECRAN. XWOR%5: VAL 0 IF XXG5-XG5VTV,XWOR%5,,XWOR%5 DEMOUT: WORD '0202 < DEMANDE D'ECRITURE SUR NSPOUT. WORD 0 < @OCTET DU MESSAGE. XWOR%5: VAL 0 BUFIN: WORD 0 < LONGUEUR DU MESSAGE. XBUFIN: VAL BUFIN-ZERO*2 ABUFIN: EQU ZERO+XBUFIN IF XXG5-XG5VTV,XWOR%5,,XWOR%5 DIRECT: WORD '0207 < COMMANDE DIRECTE DU 4014. BYTE '1B;0 < 'ESC'-<COMMANDE>. BYTE '04;0 XWOR%5: VAL 0 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. DEMIN: WORD '0100 < ENTREE ALPHA-NUMERIQUE SANS ECHO. WORD ABUFIN WORD 1 DEMCDA: BYTE 0;'02 < ENVOI DE "!CDA" AU 'CCI'... WORD CDAG-ZERO*2 WORD 80 < < DIVERS : < ASAUT: WORD N1616 < ADRESSE DE TRAITEMENT DES < PRIMITIVES INHIBEES. C5: WORD '0005;0;1 < CONSTANTE MULTIPLICATIVE 5 ET AUSSI < DEMANDE DE TEMPORISATION APRES L'EFFA- < CEMENT DE L'ECRAN... DGOCCI: 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). DV: DZS 2 < VECTEURS DES DEPLACEMENTS EN X < ET EN Y SUR LE REFERENTIEL LOCAL. DVX: EQU DV+0 < AXE DES X. DVY: EQU DV+1 < AXE DES Y. MTRANS: WORD $+1,X < RELAIS VERS LES MATRICES DES < TRANSFORMATIONS ELEMENTAIRES. ICALLI: BYTE 3;MRP-ZERO < L'OCTET0 CONTIENT DE PLUS < 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 < < L I S T E O V E R L A Y S D E R E T O U R : < LCALL: EQU $ WORD "GE";"EI" 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 < < < 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 DGOCCI BSR ASVC < RETOUR AU CCI DE CMS4. < < CAS D'UN RETOUR PAR !GO : < IF XXG5-XG5VTV,XWOR%5,,XWOR%5 LAD OG BSR ASVC < RE-MISE EN GRAPHIQUE DE LA VISU. XWOR%5: VAL 0 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 $ LA APILDR LR A,K < PILE DE SMC. LAD RELMEM SVC 0 < RETOUR A 4K MOTS. LAD DEMCDA SVC 0 < RETOUR A LA 'CDAG' SI POSSIBLE... 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 : < IF XXG5-XG5VTV,XWOR%5,,XWOR%5 LAD CG BSR ASVC < RETOUR EN ALPHA-NUMERIQUE DE < LA VISU. XWOR%5: VAL 0 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 < < < 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 CALCULEE SERA 'CTTE'. < < < IMPORTANT : < SI LE CARACTERE EST "0", LES < CARACTERES SUIVANTS SONT CONSIDERES < COMME UNE CHAINE HEXA-DECIMALE... < < < RESULTAT : < SAVE=NBRE DE REPETITIONS , SI X=0 (OK) , < X#0 : COMPTE ERRONNE. < < REPET1: EQU $ LXI 1 < ERREUR A PRIORI. LR Y,A < A=CARACTERE COURANT. ADRI -'30,A < CONVERSION EN BINAIRE. JAE HEX < C'EST L'INTRODUCTION D'UNE CHAINE HEXA- < DECIMALE... JAL 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). REPET0: EQU $ < CAS OU SAVE>0. LXI 0 < RETOUR OK. < < SORTIE DE LA ROUTINE : < E17: EQU $ RSR < RETOUR AVEC (X). < < < V A L I D A T I O N D U N O M B R E < D E R E P E T I O N S : < < < RESULTAT : < X=0 SI SAVE>0, < X=1 (ERREUR) SI SAVE<=0. < < REPETV: EQU $ CPZ SAVE < TEST DU SIGNE DE SAVE, JG REPET0 < OK, SAVE>0. LXI 1 < NON, SAVE<=0. JMP E17 < VERS LA SORTIE. < < < 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. < < REPET2: EQU $ LY SAVE < FACILE ??? RSR < X N'EST PAS POSITIONNE , CAR < CETTE ROUTINE EST APPELEE < EN MODE SEQUENTIEL. PAGE < < < C O N V E R S I O N H E X A --> B I N A I R E : < < < ARGUMENT : < LA CHAINE COURANTE DE CARACTERE... < < < RESULTAT : < (SAVE)=CHAINE HEXA-DECIMALE COURANTE. < ET (X) POUR LES ERREURS... < < HEX: EQU $ NBRHEX:: VAL 4 < NOMBRE DE CHIFFRES HEXA-DECIMAUX DANS < UN MOT... BASE10: VAL 10 BASE16: VAL 16 PSR B,Y LYI NBRHEX LBI 0 < CLEAR LE REGISTRE B. LXI 0 < POUR COMPTER LES CARACTERES... HEX1: EQU $ LA IEG < (A)=INDEX COURANT : CP NCP < DEBORDE-T'ON ??? JGE HEX5 < OUI, ON ARRETE-LA... PSR X LR A,X < NON : LBY &AIC < (A)=CARACTERE COURANT : PLR X IC IEG < PREPARATION DE L'ACCES AU CARACTERE < SUIVANT... CPI ";" < EST-CE LA FIN ??? JE HEX5 < OUI, ON ARRETE... ADRI -"0",A JAL HEX4 < ERREUR : CARACTERE NON RECONNU. CPI BASE10 < EST-CE UN CHIFFRE ??? JL HEX2 < OUI , C'EST UN CHIFFRE. ADRI -"A"+"9"+1,A < NON. CPI BASE10 < VALIDATION. JL HEX4 < ERREUR : CARACTERE NON RECONNU. CPI BASE16 < VALIDATION. JGE HEX4 < ERREUR : CARACTERE NON RECONNU. HEX2: EQU $ SCRS NBITMO/NBRHEX < MISE DES 4 BITS EN TETE DE A. SCLD NBITMO/NBRHEX < ET CONCATENATION A B. ADRI 1,X < PROGRESSION DE L'INDEX. CPR X,Y < EST-CE FINI ??? JNE HEX1 < NON , ON CONTINUE. HEX5: EQU $ LXI 0 < RETOUR OK... STB SAVE < RETOUR DU CUMUL... HEX3: EQU $ PLR B,Y RSR < < RETOURS EN ERREUR : < HEX4: EQU $ LXI 1 < RETOUR EN ERREUR... JMP HEX3 < ET ON SORT... < DE CHAINE... 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 < < < M O D I F I C A T I O N D E ' I C A L L I ' < E T D E L A T E M P O D U ' H ' : < < < FONCTION : < G<CTTE> : 'ICALLI' RECOIT CETTE < VALEUR... < < MODIS: EQU $ LA SAVE STBY ICALLI 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). E23: EQU $ < < MODIFICATION DU DELTA COURANT : < E29: EQU $ STA &ADXDY JMP E520 < VERS UN RETOUR EN ERREUR. 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). STA CV+X < X(CURSEUR VIRTUEL). STA &C2 < MAJ DU 3-CURSEUR, FONCTION DU < PLAN DANS LEQUEL ON SE TROUVE. LA CV+Y < A=Y(CURSEUR VIRTUEL). AD DVY < Y<--(Y)+(DVY). STA CV+Y < Y(CURSEUR VIRTUEL). STA &C1 < MAJ DU 3-CURSEUR (SUITE). 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 UNE PARTIE DU 3-CURSEUR, STZ &C2 < RAZ 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 < X=0 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#0 (TOUJOURS ERREUR : CF APPEL BIBLI). < < SAVNOM: EQU $ ADRI -1,B < TRANSLATION ARGUMENT (B) < DANS LE CAS DES APPELS BIBLI. STB WORK < -1, 0, +1 SUIVANT BIBLI EN < BASCULE, OVERLAY OU AU < DELA DES 4K. LA IEG < IEG=INDEX 1ER CARACTERE DU NOM < DU PROGRAMME APPELE. STA SAVE LXI 1 < X#0. RSR < RETOUR TOUJOURS EN ERREUR. < < < 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). < NOM CHERCHE : &<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 $ LXI 1 < ERREUR A PRIORI... LA AIC SB CBTR CP AI2 < EST-ON AU DELA DES 4K ??? JE E81 < REFERENCE EN BIBLI INTERDITE < LORSQU'ON EST AU DELA DES 4K !!! < < 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 $ LA ACCEB NGR A,A ADRI IINDIC-LTN,A < INDEX MOT D'ACCES AU TYPE. CPZ WORK < VA-T'ON AU-DELA DE 4K ??? JLE E205X1 < NON... AD CBTR < OUI, ON TRANSLATE... E205X1: EQU $ LR A,X < (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 < < < 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'. < < 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. < < GRAPH: EQU $ LRM C,L,K WORD COM0 < INITIALISATION DE 'C', WORD LOC+'80 < DE 'L', WORD PILE-1 < ET DE 'K'... IC KIN < COMPTAGE DES ENTRIES. JLE NALTM < C'EST LA 1ERE. LAI '13 STA RETSVC < LES ALT-MODES SONT ASSIMILES < A DES CTRL-X-OFF. BR AGOGER < ABORT. NALTM: EQU $ LAD DEMMEM SVC 0 < DEMANDE D'ALLOCATION 6K. < < I N I T I A L I S A T I O N D E ' G R ' : < E976: EQU $ < < C H A R G E M E N T O V E R L A Y : < NOMBR: VAL "$" < NOM DE LA BRANCHE. NOMOV1: VAL " $" < NOM DE L'OVERLAY. LAI NOMBR SBT 2 STA &ARACI < MISE EN PLACE DE ' $'. LAI " " SBT 2 IC ARACI STA &ARACI < MISE EN PLACE DE ' '. IC ARACI STA &ARACI < MISE EN PLACE DE ' '. IC ARACI LAI '04 STBY &ARACI < MISE EN PLACE D'UN 'EOT'. LAD DEMLOD E975: EQU $ BSR ASVC < TENTATIVE DE CHARGEMENT. CPZ RETSVC < OK ??? JNE E975 < NON, TRY AGAIN... LA APILD LR A,K < OUI, CHANGEMENT DE PILE. PSR C LRM C WORD COM512+'80 < CHANGEMENT DE BASE 'C'... WORD LAPAGE WORD BSRCDA < ON SE POSITIONNE SUR LA 'CDAJ'... PLR C < PUIS ON RESTAURE 'C'... 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. E111: EQU $ IC IEG < PREPARATION DE L'ACCES AU < CARACTERE SUIVANT. F241: EQU $ < CAS DES "<" RENCONTRES ALORS < QUE ITEXTE=1... CPI "Z" < VALIDATION SUPERIEURE DU < CARACTERE COURANT (ET CECI < A CAUSE DE ':'). LR A,Y < Y=CARACTERE COURANT (IEG) DE < L'ITEM COURANT. JG E979 < ERREUR : CARACTERE NON RECONNU... JMP PRIMA < VERS UN RETOUR OK A LOOPB. 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> < <ORIGINE>::=O < E::=<ECHELLE GENERALE> < K::=<CONSTANTE ECHELLE> < V::=<ECHANGE VISU '02-'0B> < <COMMANDE>::=D < U::=<COMMANDE DIRECTE DU 4014> < <COMMANDE>::=U<ARGUMENT> < 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 BASCULE>::=$<NOM>; < <CHARGEMENT OVERLAY>::=#<NOM>; < <CHARGEMENT BIBLIOTHEQUE AU DELA DE 4K>::=@<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>::=X+/X-/X*/X//Y+/Y-/Y*/Y// < <COMMANDE>::=E<ARGUMENT> < <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) < < < <CARACTERE> A ENVOYER AU 4014 : < (LORS DE <COMMANDE>) < < @ NORMAL Z AXIS AND NORMAL VECTORS OR ALPHA < A NORMAL Z AXIS AND DOTTED LINE VECTORS < B NORMAL Z AXIS AND DOT-DASHED VECTORS < C NORMAL Z AXIS AND SHORT-DASHED VECTORS < D NORMAL Z AXIS AND LONG-DASHED VECTORS < G NORMAL Z AXIS < H DEFOCUSED Z AXIS AND NORMAL VECTORS OR ALPHA < I DEFOCUSED Z AXIS AND DOTTED VECTORS < J DEFOCUSED Z AXIS AND DOT-DASHED VECTORS < K DEFOCUSED Z AXIS AND SHORT-DASHED VECTORS < L DEFOCUSED Z AXIS AND LONG-DASHED VECTORS < O DEFOCUSED Z AXIS < P WRITE-THRU MODE AND NORMAL VECTORS OR ALPHA < Q WRITE-THRU MODE AND DOTTED VECTORS < R WRITE-THRU MODE AND DOT-DASHED VECTORS < S WRITE-THRU MODE AND SHORT-DASHED VECTORS < T WRITE-THRU MODE ANS LONG-DASHED VECTORS < W WRITE-THRU MODE < 8 GRANDE TAILLE DE CARACTERES ALPHA-NUMERIQUES < 9 MOYENNE TAILLE < : PETITE TAILLE < ; TRES PETITE TAILLE < < < 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 (ICALLI) , < 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 ... CPI "@" < CARACTERE D'ENTREE ??? JNE G240 < NON... G241: EQU $ IF XXG5-XG5VTV,XWOR%5,,XWOR%5 LAD CG SVC 0 < OUI, RETOUR EN ALPHA-NUMERIQUE. XWOR%5: VAL 0 LAD DEMIN SVC 0 < ENTREE D'UN CARACTERE. IF XXG5-XG5VTV,XWOR%5,,XWOR%5 LAD OG SVC 0 XWOR%5: VAL 0 LBY BUFIN < A=CARACTERE ENTRE... CPI " " < VALIDATION... JL G241 < ERREUR, ON RECOMMENCE... CPI "Z" < VALIDATION... JG G241 < ERREUR, ON RECOMMENCE... G240: EQU $ < A=NOM D'APPEL IMPLICITE. 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. < < ATTENTION : LORSQU'ON EST DANS L'ITEM2, LES APPELS < IMPLICITES SONT ENVOYES AUTOMATIQUEMENT AU DELA DES < 4K (VOIR LES BIBLIOTHEQUES @<NOM>;). < LA AIC CP AI2 < EST-ON DANS ITEM2 ??? JNE E7615 < NON... AD CBTR < OUI, PASSAGE AU DELA DE 4K MOTS. AD ACCEB < AFIN D'ANNULER LE 'CHGTI'... STA AIC E7615: EQU $ 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 $ < 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 '('. < < 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. LA AIC SB CBTR < EST-CE UN RETOUR D'AU DELA < DES 4K ??? CP AI2 < ALORS ??? JNE E7616 < NON. AD ACCEB < AFIN D'ANNULER LE 'CHGTI'... STA AIC < OUI, ON REVIENT DANS LES 4K. E7616: EQU $ 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. IF XXG5-XG5VTV,XWOR%5,,XWOR%5 < < E C H A N G E V I S U S ' 0 2 E T ' 0 B : < N10001: BYTE PC+PGON1;0 WORD CHVISU XWOR%5: VAL 0 IF XXG5-XG5TV,XWOR%5,,XWOR%5 N10001: EQU N27 < ERREUR... XWOR%5: VAL 0 < < 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 PERASE < EFFACEMENT ECRAN. IF XXG5-XG5VTV,XWOR%5,,XWOR%5 < < C O M M A N D E D I R E C T E 4 0 1 4 : < N10002: BYTE PGS;0 < Y=COMMANDE POUR LE 4014. BYTE PC+PGON1;0 WORD COMAND < ENVOI AU 4014 SI EXISTE !!! XWOR%5: VAL 0 < < 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. BYTE PC;0 < EXAMEN DU NBRE D'ITERATIONS < DEMANDE. WORD REPETV WORD N16 < DANS LE CAS OU LE NBRE EST < NEGATIF OU NUL, ON ASSIMILE < CETTE ITERATION A UN SAUT DE < DEFINITION DE PROGRAMME; LA < BOUCLE EST DONC SAUTEE... 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. < < M O D I F I C A T I O N ' I C A L L I ' & ' S L E E P ' : < N31X: BYTE PGS;0 < ACCES AU CARACTERE COURANT... BYTE PC;0 WORD REPET1 < SAVE <-- CONSTANTE COURANTE... WORD N27 < MAUVAISE CONSTANTE... BYTE PC+PGON1;0 WORD MODIS < MODIFICATION ICALLI. < < M O D I F I C A T I O N E C H E L L E : < N1237: BYTE PGS;0 < ACCES CARACTERE COURANT (Y). BYTE PC;0 WORD REPET1 < SAVE <-- (Y). WORD N27 < ERREUR : CONSTANTE ILLEGALE. BYTE PC+PGON1;0 WORD DEFECH < MAJ DE L'ECHELLE GENERALE. < < 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 < < C H O I X D U M O D E D E P R O J E C T I O N : < N600X1: BYTE PGS;0 < ENTREE DU CARACTERE COURANT. BYTE PC;0 WORD REPET1 < RECUPERATION DANS 'SAVE' VIA 'Y'... WORD N27 < ERREUR, ELLE EST ILLEGALE... BYTE PC+PGON1;0 WORD DEFPR < DEFINITION DU MODE DE PROJECTION. < < 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. < < C O M P A T I B I L I T E A N C I E N < S Y S T E M E : < N30000: BYTE PGS;0 < ACCES AU MODE DU TRACE : BYTE PC;0 WORD VIDEOM < PRISE EN COMPTE DU MODE DE TRACE (Y). WORD N27 < ERREUR... BYTE PGS;0 < ACCES A LA COULEUR DU TRACE : BYTE PC;0 WORD VIDEOC < ACCES A LA COULEUR DU TRACE (Y). WORD N27 < ERREUR... WORD N1 < OK. < < P R O G R A M M A T I O N D U G E N E R A T E U R < D E V E C T E U R S : < N31000: BYTE PC;0 WORD HEX < RECUPERATION DE LA CHAINE HEXA-DECIAMLE < COURANTE... WORD N27 < ERREUR DE SYNTAXE... BYTE PC+PGON1;0 WORD GVNI < INITIALISATION DE 'VECTNI'... N31001: BYTE PC;0 WORD HEX < RECUPERATION DE LA CHAINE HEXA-DECIAMLE < COURANTE... WORD N27 < ERREUR DE SYNTAXE... BYTE PC+PGON1;0 WORD GVANT < INITIALISATION DE 'VECANT'... N31002: BYTE PC;0 WORD HEX < RECUPERATION DE LA CHAINE HEXA-DECIAMLE < COURANTE... WORD N27 < ERREUR DE SYNTAXE... BYTE PC+PGON1;0 WORD GVRS < INITIALISATION DE 'VECTRS'... N31003: BYTE PC;0 WORD HEX < RECUPERATION DE LA CHAINE HEXA-DECIAMLE < COURANTE... WORD N27 < ERREUR DE SYNTAXE... BYTE PC+PGON1;0 WORD GVDECA < INITIALISATION DE 'VEDECA'... N31004: BYTE PC;0 WORD HEX < RECUPERATION DE LA CHAINE HEXA-DECIAMLE < COURANTE... WORD N27 < ERREUR DE SYNTAXE... BYTE PC+PGON1;0 WORD GVPOIN < INITIALISATION DE 'VEPOIN'... IF XXG5-XG5TV,XWOR%5,,XWOR%5 N10002: BYTE PC;0 WORD HEX < RECUPERATION DE LA CHAINE HEXA-DECIMALE < COURANTE... WORD N27 < ERREUR DE SYNTAXE... BYTE PC+PGON1;0 WORD GARAST < INITIALISATION DE 'ARAST'... XWOR%5: VAL 0 < < 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. PROG P12 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. < < O V E R L A Y D E P R O G R A M M E : < N8300: BYTE PC;1 < B=1. WORD SAVNOM < RETOUR EN ERREUR. WORD N303 < VERS LA RECHERCHE DU NOM. < < B I B L I O T H E Q U E A U D E L A D E S 4 K : < N8400: BYTE PC;2 < B=2. WORD SAVNOM < RETOUR EN ERREUR. WORD N303 < VERS LA RECHERCHE DU NOM. < < B I B L I O T H E Q U E E N B A S C U L 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 .... < < 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). N9322: BYTE PTM;";" < EST-CE UNE FIN DE COMMENTAIRE ??? BYTE PT;"!" < NON, 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 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 N27 < 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), VOIR < LES APPELS IMPLICITES ((((...)))). WORD N945 < " AUTORISATION PRIMITIVE WORD N8300 < # OVERLAY DE PROGRAMME 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 N31003 < , DECALAGE DES NIVEAUX DE GRIS WORD N18 < - DECREMENTATION D(X) ET D(Y) WORD N31004 < . DEFINITION DE LA PATTERN POINTILLE 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 N8400 < @ BIBLI AU DELA DES 4K WORD N4 < A ORIGINE D'UN SEGMENT WORD N5 < B EXTREMITE SEQUENTIELLE WORD N23 < C RETOUR AU CCI WORD N5612 < D NEUTRE (GT) OU ZDC (GR) WORD N1237 < E MODIFICATION ECHELLE GENERALE WORD N22 < F RETOUR A L'APPELANT WORD N31X < G MODIFICATION ICALLI WORD N31002 < H MODE DE TRACE WORD N31000 < I DEFINITION DU NIVEAU DE GRIS WORD N31001 < J DEFINITION DE L'ANTI-ALIASING WORD N31 < K MODIFICATION DE LA CTTE K WORD N30000 < L : COMPATIBILITE SYSTEME 256... WORD N310 < M OPERATIONS SUR STACK WORD N600X1 < N DEFINITION DU MODE DE PROJECTION WORD N400 < O MISE A L'ORIGINE DE CV WORD N1 < P ELEMENT NEUTRE 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 N10002 < U DEFINITION DE CTRL1/RASTER WORD N10001 < 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 < < E L E M E N T S N E U T R E S : < N5612: EQU N1 < POUR COMPATIBILITE AVEC GR (D). PAGE < < < 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 D E L ' I M P L A N T A T I O N : < < X12: EQU ZERO+PILE-LTNI-LTNI X10: VAL X12-$ < NBRE DE MOTS LIBRES JUSQU'A < L'ITEM2. ZEROV: EQU ZERO+X10 < ERREUR VOLONTAIRE D'ASSEMBLAGE < SI X10<0. DZS X10+1 < RAZ JUSQU'A ITEM2. < < < D E F I N I T I O N O V E R L A Y : < < RACB: EQU ZERO+LIMAG+'1000+LTNI < L'OVERLAY EST SITUE A LA < SUITE DE L'IAMGE ET DES BIBLI < DE TYPE 2. XWOR%: VAL RACB-ZERO*2 XWOR%A: EQU ZERO+XWOR% XWOR%: VAL TAILMM-'22-XWOR% XWOR%B: EQU ZERO+XWOR% DEBOV1: EQU $ RACB1: EQU $ < COMPTEUR D'ASSEMBLAGE. BYTE " ";NOMBR < NOM DE L'OVERLAY DE 'GR'. ASCI " " BYTE '04;'D0 PAGE < < < C O M M O N 5 1 2 : < < COMMON X101: VAL $-RACB1 COM512: EQU RACB+X101 XXXVEC: VAL XXVEC2 EOT #SIP VECTEUR 512# < < ACCES AUX REGISTRES DE CONTROLE : < ACTRL1: WORD RCTRL1 ACTRL2: WORD RCTRL2 < < GESTION DU PARAMETRAGE AVEC 'K' : < APARAK: WORD PARAK < CALCUL UNE FONCTION DE (SAVE) ET DE < (CTTE)... ATPARK: WORD TPARK,X < RELAI VERS LA LISTE DES FONCTIONS. < < POUR FAIRE CTRL1/RASTER : < ARAST: BYTE XCTRL1;RASTER < LE PREMIER OCTET DONNE LES CONDITIONS < DE TRACE : < 'FC : MODE NON CYCLIQUE, < 'F4 : MODE CYCLIQUE, < 'F0 : TRACE EN AVEUGLE. < LE DEUXIEME OCTET DONNE LE MODE DE < REPRESENTATION DES POINTS RASTERISES : < '7F : MODE POINT NORMAL, < 'XX : VOIR LA DOC 365... < A T T E N T I O N : L'INSTRUCTION < 'LAI RASTER' EN 'STORP5' EST MODIFIEE < ET REMPLACEE PAR 'LA ARAST' A LA < GENERATION... PAGE PROG XXXVEC: VAL XXVEC3 EOT #SIP VECTEUR 512# PAGE < < < E F F A C E M E N T : < < X101: VAL $-RACB1 PERASE: EQU RACB+X101 IF XXG5-XG5VTV,XWOR%5,,XWOR%5 < < EFFACEMENT DE LA VISU : < LAD DERASE BSR ASVC < EFFACEMENT DE L'ECRAN, LAD OG BSR ASVC < ET RETOUR EN GRAPHIQUE... XWOR%5: VAL 0 < < EFFACEMENT DE LA 'TV' : < PSR C LRM C WORD COM512+'80 < CHANGEMENT DE BASE 'C'... XWOR%1: VAL NIV256=K IF BIT>XWOR%1-NIV256,,XWOR%, IF ATTENTION : LE CALCUL DU MASQUE SELECTANT TOUS IF LES PLANS EST ABSURDE !!! XWOR%: VAL ENDIF LAI NIV256-MASK)MOCD STA MCDAJ LA ARPLAN < (A)=ADRESSE DU REGISTRE DE SELECTION... BSR APWCDA < ET ON SELECTIONNE TOUS LES PLANS... LAI ERASE STA MCDAJ LA ARCMD BSR APWCDA < EFFACEMENT DE L'ECRAN, ET REINITIALISA- < TION DE TOUS LES REGISTRES... LAD C5 BSR ASVC < ET ON FAIT UN PETIT DODO... LBY ARAST < CODE COURANT DU 'CTRL1'... STA MCDAJ LA ACTRL1 BSR APWCDA < INITIALISATION DE 'CTRL1'. LAI XCTRL2 STA MCDAJ LA ACTRL2 BSR APWCDA < INITIALISATION DE 'CTRL2'. PLR C < RESTAURATION DE LA BASE 'C'... < < SORTIE : < RSR < < GENERATION D'INSTRUCTIONS < EN AVANT DE MISE SUR 'CDAJ' : < XXXETI: EQU $ LAI PAGER XWOR%1: VAL '0000000@@@@ < RECUPERATION DU CODE GENERE... LAPAGE: EQU ZERO+XWOR%1 < ET DEFINITION EN AVANT... BSR AGPCDA < POSITIONNEMENT SUR LA 'CDAJ' ('PAGER'). XWOR%1: VAL '0000000@@@@ < RECUPERATION DU CODE GENERE... BSRCDA: EQU ZERO+XWOR%1 < ET DEFINITION EN AVANT... $EQU XXXETI < ET ANNULATION DU CODE GENERE... 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>. < WORK=-1 : BIBLI EN BASCULE ($), < =0 : CHARGEMENT OVERLAY (#), < =+1 : BIBLI AU DELA DES 4K. < < < TYPES DES BIBLIOTHEQUES : < $ : CHARGEE EN BASCULE DE L'ITEM COURANT < (COMPATIBLE AVEC G2/G3/GV), < # : OVERLAY CHARGE EN RECOUVREMENT < DE L'ITEM COURANT, ET REMISE A 0 < DU POINTEUR COURANT 'IEG', < @ : BIBLI CHARGEE AU DELA DES 4K : < CELLE-CI NE PEUT ETRE REFERENCEE < QUE PAR DES APPELS IMPLICITES ((ABCD...)) < FAIT A PARTIR DE L'ITEM2 ... < < < CAS DES CARACTERES 'QUOTE' : < LORSQU'UN CARACTERE 'QUOTE' EST < RENCONTRE DANS UN NOM DE BIBLIOTHEQUE < IL EST REMPLACE PAR L'<IDESC> DE CET < UTILISATEUR CODE EN ASCI ('0', '1',...). < < < 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. < < 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. CPZ WORK < TEST DU TYPE DE BIBLI ??? JE E7610 < CAS DES OVERLAYS : RECOUVREMENT. JL E7611 < CAS DES BASCULES. LA AI2 < CAS AU DELA DES 4K : A=@ITEM2. AD CBTR < A=@AU DELA DES 4K. JMP E7610 E7611: EQU $ SB ACCEB < PASSAGE A L'AUTRE ITEM. E7610: EQU $ 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 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). < < TRAITEMENT DES OVERLAYS : < LR X,A < A=CONDITIONS DE RETOUR, OR WORK < A=0 SI RETOUR OK, ET < SI OVERLAY DEMANDE. JANE E7612 < RIEN A FAIRE. STZ IEG < CAS DES OVERLAYS CORRECTEMENT < CHARGES : ON REVIENT EN DEBUT < D'ITEM. E7612: EQU $ < < 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>. < < < CAS DES CARACTERES 'QUOTE' : < LORSQU'UN CARACTERE 'QUOTE' EST < RECONNU, IL EST REMPLACE PAR L'<IDESC> < DE CET UTILISATEUR CODE EN ASCI ('0', < '1',...). < < < 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 "'" < EST-CE UN CARACTERE 'QUOTE' ??? JNE GTKNQ < NON... WORD '1E45 < A=IDESC. ADRI "0",A < A=IDESC CODE EN ASCI. GTKNQ: EQU $ 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 < < < E C H A N G E D E S V I S U S ' 0 2 E T ' 0 B : < < X101: VAL $-RACB1 CHVISU: EQU RACB+X101 IF XXG5-XG5VTV,XWOR%5,,XWOR%5 LAD CG SVC 0 < RETOUR DE LA VISU COURANTE < EN ALPHA-NUMERIQUE. LBY CG IBT 12 < ECHANGE DES VISUS IBT 15 < '02 ET '0B. STBY CG STBY WG STBY WGT STBY OG STBY DERASE STBY DEMOUT STBY DIRECT XWOR%5: VAL 0 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. < < X101: VAL $-RACB1 DIVENT: EQU RACB+X101 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 O M M A N D E D U 4 0 1 4 : < < < ARGUMENT : < Y=COMMANDE A ENVOYER. < < X101: VAL $-RACB1 COMAND: EQU RACB+X101 IF XXG5-XG5VTV,XWOR%5,,XWOR%5 LR Y,A CPI "@" < SUPERIEUR OU INFERIEUR A "@" ??? JL F206 < INFERIEUR, IL RESTE TEL QUEL... ADRI '20,Y < TRANSLATION DE LA COMMANDE < DANS LA GAME DES MINUSCULES. F206: EQU $ LA DIRECT+1 ANDI 'FF00 ORR Y,A < LA COMMANDE EST MISE A STA DIRECT+1 < LA SUITE DE 'ESC'. LAD DIRECT BSR ASVC < ENVOI DE LA COMMANDE. XWOR%5: VAL 0 RSR < ET C'EST TOUT... PAGE < < < D E F I N I T I O N E T A P P L I C A T I O N < D E L ' E C H E L L E G E N E R A L E : < < < ARGUMENT : < SAVE=NOUVELLE VALEUR DE L'ECHELLE GENERALE. < < X101: VAL $-RACB1 DEFECH: EQU RACB+X101 LA SAVE MP DX1 SWBR B,B PSR B LA SAVE MP DY1 PLR A ORR B,A < L'ECHELLE COURANTE GENERALE EST DONC DE < LA FORME : < DX1*SAVE,DY1*SAVE. STA ECH < MISE A JOUR DE ECH. RSR < RETOUR INDIFFERENT. < < < ARGUMENT : < X,Y=COORDONNEES AVANT ECHELLE. < < < RESULTAT : < X,Y=COORDONNEES APRES ECHELLE. < < X101: VAL $-RACB1 FECH: EQU RACB+X101 PSR A,B < SAVE A ET B. LA ECH ANDI '00FF STA WORK < ECHELLE GENERALE SUR OY. LR Y,A < Y : MP WORK DV ECH0 LR A,Y < Y=Y*ECHY/ECH0. LBY ECH STA WORK < ECHELLE GENERALE SUR OX. LR X,A < X : MP WORK DV ECH0 LR A,X < X=X=ECHX/ECH0 PLR A,B < RESTAURE A ET B. RSR 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 FWORK: EQU RACB+X101 FLOAT 0 < VARIABLE FLOTTANTE DE MANOEUVRE... X101: VAL $-RACB1 PROJET: EQU RACB+X101 PSR B LAD MPROJ LR A,W < W=@MATRICE DE PROJECTION. LA DIV,W < CHOIX DU MODE : JAG PROJE1 < PAR SIN(TETA)/COS(TETA)... < < PROJECTION PERSPECTIVE : < PSR W < PAR PRUDENCE... LRM W WORD FWORK < (W)=BASE DE LA VARIABLE FLOTTANTE... FLT FST 0,W < FWORK=DIV(MPROJ)=-COEFFICIENT 'P' DES < FORMULES DE PROJECTION. LA CV3+Z3 < Z, FLT FDV 0,W FST 0,W < FWORK=-Z/P, LAI 1 FLT FAD 0,W FST 0,W < FWORK=1-Z/P, LA CV3+X3 < X, FLT FDV 0,W FIX LR A,X < (X)=X(PROJETE)=X3/(1-Z3/P). LA CV3+Y3 < Y, FLT FDV 0,W FIX LR A,Y < (Y)=Y(PROJETE)=Y3/(1-Z3/P). PLR W < ON RESTAURE... JMP PROJE2 < VERS LA SORTIE... < < PROJECTION PAR SIN(TETA)/COS(TETA) : < PROJE1: EQU $ 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). 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). LR A,Y < Y=Y2=Y3+Z3*SIN(TETA). < < SORTIE : < PROJE2: EQU $ PLR B RSR PAGE < < < C H O I X D U M O D E D E P R O J E C T I O N : < < < FONCTION : < DEUX CAS SE RENCONTRENT SUIVANT < LA VALEUR DE DIV(MPROJ) QUE L'ON < DEFINIT ICI : < < 1 - SAVE=1 : DIV(MPROJ) <--2, ET ALORS ON FAIT < LA PROJECTION PAR SIN(TETA) ET COS(TETA) ; < 2 - SAVE>1 : DIV(MPROJ) <-- 1-(SAVE), ET LA PROJECTION < EST PERPECTIVE EN 1/(1-Z/P), OU : < P=ABS(DIV(MPROJ)). < < X101: VAL $-RACB1 DEFPR: EQU RACB+X101 LA SAVE < (A)=TYPE DE PROJECTION SOUHAITEE : < 0 OU 1-Z... ADRI -1,A LBI 2 < (B)=2 A PRIORI (SIN/COS), JAE DEFPR1 < ET OUI, PROJECTION PAR SIN/COS... MP CTTE < ET NON, PERSPECTIVE : NGR B,B < ON CALCULE : -K*(SAVE-1), DEFPR1: EQU $ STB MPROJ < ET ON MET SOIT 2, SOIT -K*(SAVE-1) < DANS DIV(MPROJ)... RSR < ET C'EST TOUT... 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. < < X101: VAL $-RACB1 CHPLAN: EQU RACB+X101 < < 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. < < X101: VAL $-RACB1 SPDXY: EQU RACB+X101 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 < < < R E S O L U T I O N D ' U N E E Q U A T I O N < L I N E A I R E E N X O U Z : < < < ARGUMENT : < A=LA DONNE INITIALE (X OU Z) , < X=COMPTE COURANT DES OVERSCREEN , < W=@POINT D'INTERSECTION COURANT ('INTER'). < < < RESULTAT : < X<--(X)+1 , SI LA SOLUTION DE L'EQUATION < PROPOSEE EST OVERSCREEN , < SINON : LE POINT D'INTERSECTION COURANT < RECOIT LA SOLUTION (X,Z) DE L'EQUATION , < ET : W<--(W)+2. < < < C A L C U L D E X , Z E T A N T D O N N E : < < X101: VAL $-RACB1 CALX: EQU RACB+X101 STA NZ,W < SAVE A PRIORI LA DONNEE < INITIALE (Z). CPZ P1 < LA RESOLUTION DE L'EQUATION < EST-ELLE POSSIBLE ????? JNE EE30 < OUI, OK. < < CAS D'UNE RESOLUTION IMPOSSIBLE (DIVISION PAR 0) : < EE32: EQU $ ADRI 1,X < ET UN OVERCREEN DE PLUS .... < < RETOUR DES 2 ROUTINES : < EE31: EQU $ RSR < < CAS D'UNE RESOLUTION EN 'X' POSSIBLE : < EE30: EQU $ NGR A,A < A=-Z. MP P2 < A,B=-Z*P2. LY P3+1 < AFIN DE FAIRE UN CALCUL < DOUBLE-PRECISION. ADR Y,B < TOTALISATION PARTIELLE DE -Z*P2 < ET DE P3. ADCR A < PROPAGATION DE LA RETENUE. AD P3 < A,B=-Z*P2+P3. PSR A < SAVE LE SIGNE DU DIVIDENDE... DV MP1 < A=QUOTIENT PAR DEFAUT DE : < (-Z*P2+P3)/(-P1). PLR B < RESTAURE LE SIGNE DU DIVIDENDE, JNV EE30X1 < OK, DIVISION POSSIBLE... LRM A < NON, XYMAX:: VAL '7FFF WORD XYMAX < A=ABS(MAX(X,Y)). CPZR B < SIGNE DU DIVIDENDE ??? JGE EE30X1 < OK, POSITIF... NGR A,A < ET BIEN NON, NEGATIF... EE30X1: EQU $ STA NX,W < RANGEMENT DU X DE LA SOLUTION < A PRIORI. < < TEST D'OVERSCREEN : < EE33: EQU $ JAL EE32 < SOLUTION NEGATIVE REFUSEE. CP BORNE JG EE32 < SOLUTION SUPERIEURE A BORNE. < REFUSEE. PSR L LB P2 < (B)=P2, AFIN DE SAVOIR SI LA DROITE EST < VERTICALE (NOTA : 'L' VA CHANGER...), LY P1 < (Y)=P1, AFIN DE SAVOIR SI LA DROITE EST < HORIZONTALE. LAD INTER LR A,L < L=BASE LA LISTE COURANTE DE POINTS. E33X: EQU $ CPR W,L < TOUTE EXPLOREE ??? JE E33Y < OUI, FINI... LA NX,L < NON, (W) EST-IL UN POINT DOUBLE ??? CP NX,W JNE E33X2 < NON... CPZR B < PEUT-ETRE, MAIS ALORS LA DROITE EST-ELLE < VERTICALE ??? JNE E33X1 < NON, LE POINT EST ELIMINE... LA NZ,L < OUI, COMPARONS LES 'Z'... CP NZ,W JNE E33Z < NON... E33X1: EQU $ < CAS DES DROITES VERTICALES/HORIZONTALES.. PLR L < OUI, DONC IL FAUT L'ELIMINER... JMP EE32 E33X2: EQU $ LA NZ,L < LES 'X' N'ETANT PAS CONFONDUS, REGARDONS < LES 'Z' : CP NZ,W < SONT-ILS CONFONDUS ??? JNE E33Z < NON, LE POINT COURANT EST GARDE POUR LE < MOMENT... CPZR Y < OUI : LA DROITE EST HORIZONTALE ??? JNE E33X1 < NON, ON ELIMINE LE POINT... E33Z: EQU $ ADRI 2,L < AU POINT SUIVANT... JMP E33X E33Y: EQU $ PLR L ADRI 2,W < LORSQUE LA SOLUTION EST DANS < L'ECRAN , ELLE DEVIENT UN POINT < D'INTERSECTION ADMIS. JMP EE31 < OK, RETOUR. < < < C A L C U L D E Z , X E T A N T D O N N E : < < X101: VAL $-RACB1 CALZ: EQU RACB+X101 STA NX,W < SAVE LA DONNEE INITIALE < (X) A PRIORI. CPZ P2 < LA RESOLUTION DE L'EQUATION < PROPOSEE EST-ELLE POSSIBLE ???? JE EE32 < NON, OVERFLOW. < < CAS D'UNE RESOLUTION POSSIBLE : < MP P1 < A,B=X*P1. LY P3+1 < POUR UN CALCUL DOUBLE-PRECISION. ADR Y,B < TOTALISATION PARTIELLE DE < X*P1 ET DE P3. ADCR A < PROPAGATION DE LA RETENUE. AD P3 < SUITE DE LA TOTALISATION. PSR A < SAVE LE SIGNE DU DIVIDENDE... DV P2 < A=QUOTIENT PAR DEFAUT DE < X*P1/P2. PLR B < RESTAURE LE SIGNE DU DIVIDENDE, JNV EE30X2 < OK, DIVISION POSSIBLE... LRM A < NON, WORD XYMAX < A=ABS(MAX(X,Y)). CPZR B < SIGNE DI DIVIDENDE ??? JGE EE30X2 < OK, POSITIF... NGR A,A < ET BIEN NON, NEGATIF... EE30X2: EQU $ STA NZ,W < SAVE A PRIORI LA SOLUTION Z. JMP EE33 < VERS LE TEST D'OVERSCREEN DE < LA SOLUTION Z OBTENUE. PAGE < < < O R I G I N E D U S E G M E N T C O U R A N T : < < < FONCTION : < CETTE ROUTINE FIXE L'ORIGINE DU < SEGMENT COURANT A 6'EMPLACEMENT DU < CURSEUR VIRTUEL GLOBAL. < < X101: VAL $-RACB1 EXECA: EQU RACB+X101 BSR APROJ < PROJECTION DE L'ESPACE (X3,Y3,Z3) < SUR LE PLAN (X3,Y3). STX SEGORG+X STY SEGORG+Y RSR 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 IF XXG5-XG5VTV,XWOR%5,,XWOR%5 BSR APROJ < PROJECTION DU 3-CURSEUR. BSR AFECH < APPLICATION ECHELLE GENERALE. LR X,A < VALIDATION DE X3. JAL TEXT2 < 3-CV INVISIBLE. CP BORNE JG TEXT2 < 3-CV INVISIBLE. LR Y,A < VALIDATION DE Y3. JAL TEXT2 < 3-CV INVISIBLE. CP BORNE JG TEXT2 < 3-CV INVISIBLE. STX SEGT+X < DEFINITION DE L'ORIGINE STY SEGT+Y < DU TEXTE A EDITER. LAD OG BSR ASVC < DECHAINAGE DES SEGMENTS. JNE TEXT1 < CTRL-X-OFF ??? LAD WGT BSR ASVC < POSITIONNEMENT TEXTE. JNE TEXT1 < CTRL-X-OFF ??? 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 TEXT1 < RETOUR EN ERREUR (CTRL-X-OFF ???) LAD DEMOUT BSR ASVC < EDITION DU MESSAGE EN ALPHA. JNE TEXT1 < CTRL-X-OFF ??? LAD OG BSR ASVC < REMISE EN GRAPHIQUE. JNE TEXT1 < CTRL-X-OFF ??? TEXT2: EQU $ < CAS DES 3-CV INVISIBLES. XWOR%5: VAL 0 RSR < RETOUR... IF XXG5-XG5VTV,XWOR%5,,XWOR%5 TEXT1: EQU $ ADRI -1,K < ANNULATION DU BSR. BR AGOGE < RETOUR EN ERREUR A GE. XWOR%5: VAL 0 PAGE < < < E X T R E M I T E S D U S E G M E N T C O U R A N T : < < < FONCTION : < CETTE PRIMITIVE FIXE L'EXTREMITE DU < SEGMENT COURANT A L'EMPLACEMENT DU CURSEUR < VIRTUEL GLOBAL , PUIS PROJETTE LE SEGEMENT COURANT < SUR LE PLAN DE LA VISU ; ET ENFIN AVANT < LA VISUALISATION , ELLE CALCULE LES INTERSECTIONS < AVEC LES BORDS DE L'ECRAN. < < < NOTA : < LA PRIMITIVE 'S' SERA UTILISEE < PAR LA PRIMITIVE 'B'. < < X101: VAL $-RACB1 EXECS: EQU RACB+X101 PSR A,B,X,Y < QUELLE PRUDENCE !!!! BSR APROJ < PROJECTION (X3,Y3,Z3) --> (X3,Y3). STX SEGEXT+X STY SEGEXT+Y < < PROJECTION DE L'EXTREMITE DU SEGEMENT COURANT : < BSR AFECH < ECCHELLE GENERALE. STX X2 < COORDONNEE X2 DU POINT M2. STY Z2 < COORDONNE Z2 DU POINT M2. < < PROJECTION DE L'ORIGINE DU SEGMENT COURANT : < LX SEGORG+X LY SEGORG+Y BSR AFECH < ECHELLE GENERALE. STX X1 < COORDONNEE X1 DU POINT M1. STY Z1 < COORDONNEE Z1 DU POINT M1. < < TEST D'INCLUSION DE M1M2 DANS L'ECRAN : < LA X1 BSR AOVS < TEST D'OVERSCREEN X1. LA Z1 BSR AOVS < TEST D'OVERSCREE DE Z1. LA X2 BSR AOVS < TEST D'OVERCREEN DE X2. LA Z2 BSR AOVS < TEST D'OVERSCREEN DE Z2. JMP EE41 < LORSQU'ON ARRIVE ICI, C('EST < QU'AUCUNE DES COORDONNEES X1, < Z1,X2,Z2 N'EST OVERSCREEN. < < ROUTINE DE TEST D'OVERSCREEN : < X101: VAL $-RACB1 OVS: EQU RACB+X101 JAL EE42 < UNE COORDONNEE NEGATIVE EST < OVERSCREEN. CP BORNE JG EE42 < UNE COORDONNEE SUPERIEURE A < BORNE EST OVERCREEN. RSR < LE RETOUR A LIEU LORSQUE LA < COORDONNEE EST DANS L'ECRAN. < < CAS OU AU MOINS UNE COORDONNEE EST OVERSCREEN : < EE42: EQU $ < CAS OU UN OVERSCREEN EST SUR. ADRI -1,K < RATTRAPAGE DE LA PILE K , < LORSQU'1N RSR N'A PAS ETE FAIT. < < CALCUL DES PARAMETRES DE LA DROITE M1M2 : < < L'EQUATION DE LA DROITE EST : X*MP1+Z*P2=P3, < AVEC : < P1=Z2-Z1 , < P2=X2-X1 , < P3=X2*Z1-X1*Z2. < DE PLUS : < A X DONNE : Z=(X*P1+P3)/P2 SI P2#0 , < A Z DONNE : X=(-Z*P2+P3)/MP1 SI P1#0. < LA Z2 SB Z1 STA P1 < P1=Z2-Z1. NGR A,A STA MP1 < MP1=-P1. LA X2 SB X1 STA P2 < P2=X2-X1. LA X2 MP Z1 < A,B=X2*Z1. STA P3 STB P3+1 < RANGEMENT TEMPORAIRE. LA X1 NGR A,A MP Z2 < A,B=-X1*Z2. LY P3+1 < POUR UN CALCUL EN DOUBLE- < PRECISION. ADR Y,B < TOTALISATION PARTIELLE. ADCR A < PROPAGATION DE LA RETENUE. STB P3+1 AD P3 < POURSUITE DU CUMUL. STA P3 < P3=X2*Z1-X1*Z2 , EN DOUBLE- < PRECISION. < < CALCUL DE L'INTERSECTION DE M1M2 AVEC L'ECRAN : < LAD INTER LR A,W < INITIALISATION DE W SUR LE 1ER < POINT D'INTERSECTION. LXI 0 < RAZ DU COMPTE DES OVERSCREEN. LAI 0 BSR ACALZ < CALCUL DE Z POUR X=0. LA BORNE BSR ACALZ < CALCUL DE Z POUR X=BORNE. LAI 0 BSR ACALX < CALCUL DE X POUR Z=0. LA BORNE BSR ACALX < CALCUL DE X POUR Z=BORNE. < < TEST DE L'OVERSCREEN COMPLET DE LA DROITE M1M2 : < LR X,A < A=COMPTE DE OVERSCREEN RENCONTRES. CPI 2 JG EE40 < SI LE NOMBRE D'OVERSCREEN EST < SUPERIEUR A 2, ON ADMET QUE < LA DROITE M1M2 EST INVISIBLE .... < < CALCUL DE (N1,N2).INTER.(M1,M2) < (N1 ET N2 ETANT LES 2 POINTS D'INTERSECTION < NON OVERSCREEN). < < < PREPARATION DU TRI DES POINTS M1,M2,N1,N2 : < LAD SEG2+NZ LR A,W < W=@DES COORDONNEES DE M1. LXI NX-NZ LA P1 < A=P1. JAGE EE69 < P1>=0. NGR A,A < A=-P1 ; ON MET DONC DANS A < LA VALEUR ABSOLUE DE P1. EE69: EQU $ CP SCALE < LA DROITE M1M2 EST-ELLE < HORIZONTALE ???? < (AUX ERREURS DE CALCUL PRES...) JGE EE60 < NON, LE TRI VA ETRE FAIT SUR Z. ADRI NX-NZ,W < OUI , LE TRI VA ETRE FAIT SUR X. LXI NZ-NX < POUR LES PERMUTATIONS DE < 2EME COORDONNEES. EE60: EQU $ LYI 0 < Y MEMORISE LES PERMUTATIONS < QUI VONT ETRE OPEREES. < < TRI DE M1 ET M2 AFIN D'OBTENIR LA RELATION M1<M2 : < LA M1,W LB M2,W CPR A,B JGE EE61 < RIEN A FAIRE, ON A DEJA : M1<M2. STA M2,W < SINON , ON ECHANGE M1 ET M2. STB M1,W ADRI 1,Y < BIT15(Y) : PERMUTATION M1,M2. EE61: EQU $ < < TRI DE N1 ET N2 AFIN D'OBTENIR : N1<N2 : < LA PN1,W LB PN2,W CPR A,B JGE EE62 < RIEN A FAIRE, ON A DEJA N1<N2. STA PN2,W < SINON, ON ECHANGE N1 ET N2. STB PN1,W ADRI 2,Y < BIT14(Y) : PERMUTATION N1,N2. EE62: EQU $ < < ELIMINATION DES CAS IMPOSSIBLES OU INVISIBLES : < LA M1,W CP PN2,W JGE EE40 < M1>N2 : M1M2 EST INVISIBLE. LA M2,W CP PN1,W JLE EE40 < M2<N1 : M1M2 EST INVISIBLE. < < CHOIX DU 'PLUS GRAND' PARMI M1 ET N1 : < LA PN1,W CP M1,W JLE EE63 < N1<M1 : ON GARDE M1. STA M1,W < SINON N1 DEVIENT M1. ADRI 4,Y < BIT15(Y) : PERMUTATION M1,N1. EE63: EQU $ < < CHOIX DU 'PLUS PETIT' PARMI M2 ET N2 : < LA PN2,W CP M2,W JGE EE64 < M2<N2 : ON GARDE M2. STA M2,W < SINON , N2 DEVIENT M2. ADRI 8,Y < BIT12(Y) : PERMUTATION M2,N2. EE64: EQU $ < < PERMUTATION DES 2EMES COORDONNEES DES POINTS M1, M2, N1, N2 : < LR Y,A < A=INDICATEUR DES PERMUTATIONS. ADR X,W < POSITIONNEMENT DE W SUR LA < COORDONNEE (X OU Z) NON ENCORE < PERMUTEE. < < PERMUTATION M1,M2 : < TBT 15 JNC EE65 < M1 ET M2 SONT INCHANGES. LB M1,W LY M2,W STY M1,W STB M2,W EE65: EQU $ < < PERMUTATION DE N1,N2 : < TBT 14 JNC EE66 < N1 ET N2 SONT INCHANGES. LB PN1,W LY PN2,W STY PN1,W STB PN2,W EE66: EQU $ < < PERMUTATION DE M1,N1 : < TBT 13 JNC EE67 < M1 ET N1 SONT INCHANGES. LB M1,W LY PN1,W STY M1,W STB PN1,W EE67: EQU $ < < PERMUTATION DE M2,N2 : < TBT 12 JNC EE68 < M2 ET N2 SONT INCHANGES. LB M2,W LY PN2,W STY M2,W STB PN2,W EE68: EQU $ < < < C O R R E C T I O N D ' E R R E U R S D E C A L C U L : < < < FONCTION : < DES ERREURS DE CALCUL (DIVISION ENTIERE) , < FONT QUE DES POINTS D'UNE MEMEME DROITE , < AYANT UNE COORDONNEE IDENTIQUE (X OU Z) , < ONT LEURS AUTRES COORDONNEES (Z OU X) < DIFFERENTES . ON RETABLIT ICI LES < COINCIDENCES. < < LAD SEG2+NZ LR A,W < W POINTE SUR LA 1ERE COORDONNEE < DU POINT M1. LXI 2*2 < ON VA VERIFIER LES 2 COORDONNEES < DES 2 POINTS M1 ET M2. < < BOUCLE DE VERIFICATION : < EE602: EQU $ LA 0,W < A=UNE COORDONNEE Z/X DE M1/M2. JAGE EE600 LAI 0 < SI L'ARGUMENT EST NEGATIF , ON < LE REND NUL. EE600: EQU $ CP BORNE < TEST OVERSCREEN POSITIF. JLE EE601 < OK, ARGUMENT DANS L'ECRAN. LA BORNE < SI L'ARGUMENT EST HORS L'ECRAN < POSITIF , ON LUI DONNE LA < VALEUR 'BORNE'. EE601: EQU $ STA 0,W < MISE A JOUR EVENTUELLE D'UNE < COORDONNEE Z/X DE M1/M2. ADRI 1,W < PASSAGE A LA COORDONNEE JDX EE602 < SUIVANTE. < < < A F F I C H A G E D U S E G M E N T < C O U R A N T P R O J E T E : < < EE41: EQU $ < TOUT ENTIER DANS L'ECRAN. IF XXG5-XG5VTV,XWOR%5,,XWOR%5 LAD OG < PASSAGE AU MODE GRAPHIQUE. BSR ASVC JNE EE450 < CAS DES CTRL-X-OFF. LAD WG < AFFICHAGE DU SEGMENT COURANT. BSR ASVC JNE EE450 < CAS DES CTRL-X-OFF. XWOR%5: VAL 0 < < C O N V E R S I O N V I D E O : < PSR C LRM C WORD COM512+'80 < ON CHANGE DE BASE 'C'... < < PREPARATION DES ARGUMENTS : < LA SEGOR2+X STA VECGX1 < X(ORIGINE), LA SEGOR2+Y STA VECGY1 < Y(ORIGINE), LA SEGEX2+X STA VECGX2 < X(EXTREMITE), LA SEGEX2+Y STA VECGY2 < Y(EXTREMITE). < < TRACE : < BSR AVE512 < ET TRACE... < < RETOUR : < PLR C < ON RESTAURE LA BASE 'C'... EE40: EQU $ < COMPLETEMENT EN DEHORS DE < L'ECRAN !!! PLR A,B,X,Y RSR IF XXG5-XG5VTV,XWOR%5,,XWOR%5 < < CAS DES CTRL-X-OFF : ON ABORTE LE < DESSIN ET ON FAIT UN RETOUR A 'GE' : < EE450: EQU $ ADRI -5,K < RATRAPAGE BSR ET PSR. BR AGOGE < RETOUR EN ERREUR A GE. XWOR%5: VAL 0 PAGE < < < E X T R E M I T E B D U S E G M E N T C O U R A N T : < < < FONCTION : < FONCTION IDENTIQUE A LA PRIMITIVE 'PS' , < MAIS A LA FIN DU TRAVAIL , L'EXTREMITE DU < SEGMENT COURANT DEVIENT LA NOUVELLE < ORIGINE DE CELUI-CI. < < X101: VAL $-RACB1 EXECB: EQU RACB+X101 BSR AEXECS < EXECUTION DE LA PRIMITIVE 'S'. < < CHANGEMENT DE L'ORIGINE DU SEGMENT COURANT : < PSR A,B,X < PAR PRUDENCE ... LAD SEGORG LR A,B < B=@SEGORG=@RECEPTEUR. ADRI SEGEXT-SEGORG,A < A=@SEGEXT=@EMETTEUR. LXI DIM < X=NBRE DE COORDONEES A DEPLACER. MOVE < CHANGEMENT D'ORIGINE. PLR A,B,X RSR PAGE < < < L I S T E D E S M O D E S : < < X101: VAL $-RACB1 VIDEOL: EQU RACB+X101 EVIDEO: EQU $ WORD '0000 < "OFF", WORD '0180 < "OR" FLOU, WORD '0080 < "AND" FLOU, WORD 'FF80 < "EOR" FLOU, WORD '01B0 < "FORCAGE NIVEAU", WORD '01F0 < "NE TRACER QUE SUR LE NOIR", WORD '0380 < "OR" BINAIRE, WORD '0280 < "AND" BINAIRE, WORD 'FD80 < "EOR" BINAIRE. LVIDEO:: VAL $-EVIDEO-1 < < < G E S T I O N D E L ' A C C E S D I R E C T < A ' M E M T V ' : < < < M O D E D E T R A C E : < < < ARGUMENT : < Y="0" : MISE OFF, < "1" : TRACE PAR 'OR' FLOU , < "2" : TRACE PAR 'AND' FLOU , < "3" : TRACE PAR 'EOR' FLOU , < "4" : FORCAGE, < "5" : ON NE TRACERA QUE SUR LE NOIR, < "6" : TRACE PAR 'OR' BINAIRE, < "7" : TRACE PAR 'AND' BINAIRE, < "8" : TRACE PAR 'EOR' BINAIRE. < < X101: VAL $-RACB1 VIDEOM: EQU RACB+X101 PSR C LRM C WORD COM512+'80 < CHANGEMENT DE BASE 'C'... LXI 1 < ERREUR A PRIORI... LR Y,A ADRI -"0",A < A=MODE DEMANDE, JAL VIDEO1 < ERREUR... CPI LVIDEO JG VIDEO1 < ERREUR... PSR W LRM W WORD VIDEOL ADR A,W LA 0,W < A=FORMAT DU MOT DE COMMANDE... PLR W VECSRI:: VAL MOCG < MODE DANS L'ANCIEN SYSTEME, VECDEC:: VAL '0030 < DECALAGE SUR LE NIVEAU, NCOOL:: VAL 3 < NOMBRE DE PROCESSEURS DE COULEUR. ANTIAL:: VAL BIT>NCOOL < VALEUR DE L'ANTI-ALIASING... LR A,Y < SAVE (A)... SARS VECSRI=K < RECUPERATION DU MODE, STA VECTRS < ET MEMORISATION... LR Y,A ANDI VECDEC < RECUPERATION DU SLRS VECDEC=K < DECALAGE, XWOR%1: VAL NIV256=K < NOMBRE DE BITS NECESSAIRES POUR UN NIVEAU IF NCOOL+NCOOL+NCOOL-XWOR%1,,XWOR%,XWOR% IF ATTENTION : LE TRIPLEMENT DE (A) QUI SUIT EST IDIOT !!! XWOR%: VAL 0 STA VEDECA < MEMORISATION DE 2 BITS (0-3), ADR A,A < DOUBLEMENT (0-6), AD VEDECA < TRIPLEMENT (0-9) AFIN D'ASSURER LE < PASSAGE 8 --> 256... STA VEDECA < ET MEMORISATION... VIDEO2: EQU $ LXI 0 < RETOUR OK... VIDEO1: EQU $ PLR C < RETOUR A LA BASE 'C'... RSR < < < C O U L E U R D U T R A C E : < < < ARGUMENT : < Y="8" : MODE ANTI-ALIASING, < "0" A "7" : DANS LA COULEUR INDIQUEE. < < X101: VAL $-RACB1 VIDEOC: EQU RACB+X101 PSR C LRM C WORD COM512+'80 < CHANGEMENT DE BASE C... LXI 1 < RETOUR EN ERREUR A PRIORI... LR Y,A ADRI -"0",A < A=COULEUR DEMANDEE, JAL VIDEO1 < ERREUR... CPI BIT>NCOOL-I+I JG VIDEO1 < ERREUR... XWOR%1: VAL BIT>NCOOL < NOMBRE DE NIVEAUX DANS L'ANCIEN SYSTEME, XWOR%3: VAL NIV256/XWOR%1=K SLLS XWOR%3 < ET CONVERSION DANS LE NOUVEAU... STA VECTNI < ET MEMORISATION... SLRS XWOR%3 CPI ANTIAL < EST-CE L'ANTI-ALIASING ??? JNE VIDEO2 < NON... LAI BIT>NCOOL-I>XWOR%3 STA VECTNI < OUI, ON PREND DONC LE MAXIMUM... LRM A XWOR%2: VAL NBITMO-I-BANTI WORD BIT>XWOR%2 STA VECANT < ET ON ACTIVE L'ANTI-ALIASING AVEC UN < MINIMUM NOIR... JMP VIDEO2 PAGE < < < P A R A M E T R A G E D U G E N E R A T E U R < D E V E C T E U R S : < < IF XXG5-XG5TV,XWOR%5,,XWOR%5 X101: VAL $-RACB1 GARAST: EQU RACB+X101 PSR C LRM C WORD COM512+'80 < CHANGEMENT DE BASE 'C'... LY ARAST < 'Y'=VALEUR ANTERIEURE DE 'ARAST', BSR APARAK < CALCUL DE SA NOUVELLE VALEUR, STA ARAST < ET RANGEMENT... JMP GVFIN < VERS LA RESTAURATION DE LA BASE 'C'... XWOR%5: VAL 0 X101: VAL $-RACB1 GVNI: EQU RACB+X101 PSR C LRM C WORD COM512+'80 < CHANGEMENT DE BASE 'C'... LY VECTNI < (Y)=VALEUR ANTERIEURE DE 'VECTNI', BSR APARAK < CALCUL DE SA NOUVELLE VALEUR, STA VECTNI < ET RANGEMENT... JMP GVFIN < VERS LA RESTAURATION DE LA BASE 'C'... X101: VAL $-RACB1 GVANT: EQU RACB+X101 PSR C LRM C WORD COM512+'80 < CHANGEMENT DE BASE 'C'... LY VECANT < (Y)=VALEUR ANTERIEURE DE 'VECANT', BSR APARAK < CALCUL DE SA NOUVELLE VALEUR, STA VECANT < ET RANGEMENT (ON INHIBE L'ANTI-ALIASING < SI LA VALEUR RESULTANTE EST POSITIVE < OU NULLE... JMP GVFIN < VERS LA RESTAURATION DE LA BASE 'C'... X101: VAL $-RACB1 GVDECA: EQU RACB+X101 PSR C LRM C WORD COM512+'80 < CHANGEMENT DE BASE 'C'... LA SAVE STA VEDECA < VEDECA=SAVE. JMP GVFIN < VERS LA RESTAURATION DE LA BASE 'C'... X101: VAL $-RACB1 GVRS: EQU RACB+X101 PSR C LRM C WORD COM512+'80 < CHANGEMENT DE BASE 'C'... LA SAVE STA VECTRS < VECTRS=SAVE. JMP GVFIN < VERS LA RESTAURATION DE LA BASE 'C'... X101: VAL $-RACB1 GVPOIN: EQU RACB+X101 PSR C LRM C WORD COM512+'80 < CHANGEMENT DE BASE 'C'... LA SAVE STA VEPOIN < VEPOIN=SAVE. < < RETOUR : < GVFIN: EQU $ PLR C < RESTAURATION DE LA BASE 'C'... RSR < ET RETOUR... PAGE < < < C A L C U L D E ' V E C T N I ' E T ' V E C A N T ' : < < < FONCTION : < SUIVANT LA VALEUR DE (SAVE), < LA VALEUR NOUVELLE DE 'VECTNI' < ET DE 'VECANT' PEUT ETRE FONCTION < DE (CTTE), SOIT 'K' : < < -1 : VECXXX <-- (VECXXX)+(K), < -2 : VECXXX <-- (VECXXX)-(K), < -3 : VECXXX <-- (VECXXX)*(K), < -4 : VECXXX <-- (VECXXX)/(K), < -5 : K <-- (VECXXX), ET (VECXXX) INCHANGE, < -6 : VECXXX <-- (K). < < < ARGUMENTS : < (SAVE)=VALEUR HEXA-DECIMALE COURANTE, < (CTTE)=CONSTANTE 'K', < (Y)=VALEUR ANTERIEURE DE 'VECANT'/'VECTNI'. < < < RESULTAT : < (A)=NOUVELLE VALEUR DE 'VECANT'/'VECTNI'. < < KFON1:: VAL 1 < PREMIERE FONCTION... X101: VAL $-KFON1-RACB1 TPARK: EQU RACB+X101 < LISTE DES MODULES SPECIFIQUES : WORD PARAK1 < VECXXX <-- (VECXXX)+(K), WORD PARAK2 < VECXXX <-- (VECXXX)-(K), WORD PARAK3 < VECXXX <-- (VECXXX)*(K), WORD PARAK4 < VECXXX <-- (VECXXX)/(K), WORD PARAK5 < K <-- (VECXXX), WORD PARAK6 < VECXXX <-- (K). X101: VAL $-RACB1 KFONN:: VAL RACB+X101-TPARK < DERNIERE FONCTION... < < < E N T R Y D I S C R I M I N A N T E : < < X101: VAL $-RACB1 PARAK: EQU RACB+X101 PSR X,B LA SAVE < (A)=VALEUR HEXA-DECIMALE COURANTE : CPI -KFON1 < EST-CE UNE FONCTION ??? JG PARAKF < NON, (A) EST LA NOUVELLE VALEUR... CPI -KFONN < EST-CE UNE FONCTION ??? JL PARAKF < NON, (A) EST LA NOUVELLE VALEUR... NGR A,X < OUI, (X)=INDEX DU MODULE SPECIFIQUE, LR Y,A < (A)=VALEUR ANTERIEURE... BR &ATPARK < ET L'ON S' BRANCHE... < < POINT DE RETOUR : < PARAKF: EQU $ < (A)=NOUVELLE VALEUR... PLR X,B < RESTAURATIONS... RSR < ET RETOUR... < < < V E C X X X <-- ( V E C X X X ) + ( K ) : < < X101: VAL $-RACB1 PARAK1: EQU RACB+X101 AD CTTE < SOMMATION, JMP PARAKF < ET RETOUR... < < < V E C X X X <-- ( V E C X X X ) - ( K ) : < < X101: VAL $-RACB1 PARAK2: EQU RACB+X101 SB CTTE < SOUSTRACTION, JMP PARAKF < ET RETOUR... < < < V E C X X X <-- ( V E C X X X ) * ( K ) : < < X101: VAL $-RACB1 PARAK3: EQU RACB+X101 MP CTTE < MULTIPLICATION, LR B,A < RECUPERATION DU RESULTAT, JMP PARAKF < ET RETOUR... < < < V E C X X X <-- ( V E C X X X ) / ( K ) : < < X101: VAL $-RACB1 PARAK4: EQU RACB+X101 SARD NBITMO < CADRAGE, DV CTTE < DIVISION, JMP PARAKF < ET RETOUR... < < < K <-- ( V E C X X X ) : < < X101: VAL $-RACB1 PARAK5: EQU RACB+X101 STA CTTE < ON MODIFIE 'K', ET (A) EST INCHANGE, JMP PARAKF < ET RETOUR... < < < V E C X X X <-- ( K ) : < < X101: VAL $-RACB1 PARAK6: EQU RACB+X101 LA CTTE < RECUPERATION DE 'K', JMP PARAKF < ET RETOUR... PAGE < < < P I L E D E R E C U R S I V I T E : < < X101: VAL $-RACB1 PIR: EQU RACB+X101 WORD 0;0 < PREMIERE ENTREE : INITIALISEE < AVEC CD=CP=0. XWOR%1: VAL ZERO-BRANCH+PILE-LTNI-LTNI XWOR%2: VAL $-RACB1 IF XWOR%2-XWOR%1,XWOR%,, IF ATTENTION : LA BRANCHE EST TROP LONGUE, ELLE VA CASSER !!! XWOR%: VAL ENDIF DZS XX1 < ENTREES SUIVANTES. < < < P I L E D E T R A V A I L : < < X101: VAL $-RACB1 PILD: EQU RACB+X101 DZS 64 < ENORME... < < < T A I L L E D E L A B R A N C H E : < < SBB: VAL $-RACB1*2 < < < V A L I D A T I O N I M P L A N T A T I O N : < < X101: VAL $-RACB1 X13: EQU RACB+X101 X10: VAL X13-ZERO PAGE < < < G E N E R A T I O N D U P R O C E S S E U R : < < LOCAL XXXLOC: EQU $ < < DONNEES DE GENERATION : < XXXCCI: WORD 1 < RETOUR AU CCI. XXXMOK: BYTE '6D;"O" ASCI "K!" < MESSAGE 'OK!'. XXXDOK: WORD '0202 < ENVOI DU MESSAGE 'OK'. WORD XXXMOK-ZERO*2 WORD 4 XXXSGN: WORD '8402 < DEMANDE DE GENERATION DU PROCESSEUR. WORD BRANCH-ZERO*2 < @OCTET DE LA BRANCHE. WORD ZERO-BRANCH+PILE-LTNI-LTNI*2 WORD -1 XXXOV1: WORD DEBOV1 < ADRESSE DEBUT OVERLAY 1. < < DONNEES DE TRANSLATION DES ADRESSES : < YTRANS:: VAL RACB-RACB1 XTRANS: WORD YTRANS < TOUTES LES ADRESSES DE #SI VECTEUR 512# < DOIVENT ETRE TRANSLATEES DE CETTE < QUANTITE... BMCDAJ: WORD AMCDAJ BSPCCI: WORD ASPCCI BGCDA: WORD AGCDA BGPCDA: WORD AGPCDA BLOADP: WORD ALOADP BSTORP: WORD ASTORP BPWCDA: WORD APWCDA BPIS: WORD APIS VECTB1: WORD VECTA1 VECTB2: WORD VECTA2 VECTB3: WORD VECTA3 VECTB4: WORD VECTA4 BVE512: WORD AVE512 ASTORR: WORD STORPR < < PILE DE GENERATION : < XXXPIL: DZS 2 < PILE DE GENERATION. < < < G E N E R A T I O N : < < PROG USE L,XXXLOC+'80 WORD XXXLOC+'80 < VALEUR INITIALE DE LA BASE L. XXXGEN: EQU $ LRP L < INITIALISATION DE LA BASE L. LA -1,L LR A,L LAD XXXPIL-1 < INITIALISATION DE L'ADRESSE DE PILE. LR A,K < < TRANSLATION DES ADRESSES : < LA &BMCDAJ AD XTRANS STA &BMCDAJ LA &BSPCCI AD XTRANS STA &BSPCCI LA &BGCDA AD XTRANS STA &BGCDA LA &BGPCDA AD XTRANS STA &BGPCDA LA &BLOADP AD XTRANS STA &BLOADP LA &BSTORP AD XTRANS STA &BSTORP LA &BPWCDA AD XTRANS STA &BPWCDA LA &BPIS AD XTRANS STA &BPIS LA &VECTB1 AD XTRANS STA &VECTB1 LA &VECTB2 AD XTRANS STA &VECTB2 LA &VECTB3 AD XTRANS STA &VECTB3 LA &VECTB4 AD XTRANS STA &VECTB4 LA &BVE512 AD XTRANS STA &BVE512 LRM A LA ARAST STA &ASTORR < MODIFICATION DU 'LAI RASTER'... < < TENTATIVE DE GENERATION DE L'OVERLAY 1. < XXXGN7: EQU $ LB XXXSGN+1 LA XXXOV1 < PLACER SON ADRESSE DE DEBUT. SLLS 1 STA XXXSGN+1 LAD XXXSGN < GENERATION. SVC 0 STB XXXSGN+1 JE XXXGN8 < OK ... < < ERREUR - L'OVERLAY EXISTE DEJA. < LAD XXXCCI < RETOUR CCI. SVC 0 JMP XXXGN7 < ET REESSAI. < < BONNE GENERATION. < XXXGN8: EQU $ LAD XXXDOK < ENVOI MESSAGE OK. SVC 0 LAD XXXCCI < ET RETOUR AU CCI. SVC 0 < < TENTATIVE DE GENERATION : < XXXGN1: EQU $ LAD XXXSGN SVC 0 < ENVOI DEMANDE DE GENERATION. JNE XXXGN2 < ERREUR : IL EXISTE DEJA!!! < < OK , BONNE GENERATION : < LAD XXXDOK SVC 0 < ENVOI DU MESSAGE OK. < < RETOUR DEFINITIF AU CCI : < XXXGN3: EQU $ LAD XXXCCI SVC 0 < RETOUR AU CCI. JMP XXXGN3 < CAS DES !GO. < < CAS DES ERREURS DE GENERATION : < LE PROCESSEUR EXISTE DEJA: < XXXGN2: EQU $ LAD XXXCCI SVC 0 < RETOUR PROVISOIRE AU CCI. JMP XXXGN1 < TRY AGAIN LA GENERATION. END XXXGEN