MACRO ANIM3 * MACROS CREEES DANS LE COURS DE PROGRAMMATION 2015 * ANIM3 EST UNE SUPER-MACRO, C'EST-A-DIRE * COMME UN LIVRE DONT LES MACROS QUI SUIVENT SERAIENT * LES CHAPITRES. * * POUR EXECUTER LA ``MACRO AA'' QUI SUIT, ON * ENTRE LA COMMANDE SUIVANTE DANS LA FENETRE DE COMMANDE: * EXEC ANIM3#AA * RETURN *********************************************** MACRO AA * TOUTES LES LIGNES COMMENCANT PAR * SONT DES * COMMENTAIRES, CAD DES CHOSES QUI NE SONT PAS * EXECUTEES. LE BUT DES COMMENTAIRES EST DE DIRE * CE QUE LA MACRO EST CENSEE FAIRE. CELA * FACILITE GRANDEMENT UNE RELECTURE ULTERIEURE. * MESSAGE Bonjour * RETURN ************************************************ MACRO AB * DIFFERENCE ENTRE UNE VARIABLE A ET SA VALEUR [A] * MESSAGE * VALEUR NUMERIQUE A=1 MESSAGE A ; MESSAGE [A] * * VALEUR TEXTE A=radio MESSAGE A ; MESSAGE [A] * * LA VALEUR DE LA VARIABLE PEUT MEME CONTENIR DES BLANCS A=Radio France MESSAGE A ; MESSAGE [A] * MESSAGE * RETURN ************************************************ MACRO AC * OPERATIONS SIMPLES A=10 ; B=1 S=[A]+[B] ; D=[A]-[B] ; P=[A]*[B] ; R=[A]/[B] MESSAGE * MESSAGE S=[S] D=[D] P=[P] R=[R] * * PRETEZ ATTENTION AUX ECRITURES SUIVANTES A=[A]+10 ; B=[B]+[B] MESSAGE A=[A] B=[B] * * CONCATENATION DE TEXTE A=radio ; B=France C=[A]//[B] MESSAGE A=[A] B=[B] C=[C] * MESSAGE * RETURN ************************************************ MACRO AD * L'INSTRUCTION GOTO (ALLER A) * MESSAGE MESSAGE 1 GOTO 2 MESSAGE 2 2: MESSAGE 3 GOTO FIN MESSAGE 4 FIN: MESSAGE 5 MESSAGE * RETURN ************************************************ MACRO AE * UNE MACRO S'EXECUTE DE FACON SEQUENTIELLE, * C'EST-A-DIRE UNE INSTRUCTION APRES L'AUTRE DANS * L'ORDRE OU ELLES SONT ECRITES DANS LE PROGRAMME, * MAIS IL PEUT Y AVOIR DES INSTRUCTIONS FAISANT * RECULER VERS UNE LIGNE ANTERIEURE. * UN PEU COMME DANS UN JEU DE SOCIETE QUAND * ON TIRE LA CARTE ``RETOURNER A LA CASE DE DEPART'' * * UNE MACRO * NE S'ARRETE QUE SI ON LUI DONNE L'ORDRE DE * S'ARRETER * * POUR STOPPER L'EXECUTION DE CETTE MACRO FAIRE * ``Control c'' ou ``Control z''. * LA PREMIERE COMMANDE PERMET (EN PRINCIPE) D'ARRETER * EN RESTANT DANS paw. LA SECONDE ARRETE LA MACRO * EN SORTANT DE paw. * MESSAGE S=0 1: S=[S]+1 ; MESSAGE S=[S] GOTO 1 MESSAGE * RETURN ************************************************ MACRO AF * LA COMMANDE IF... (SI...) * COMMENT PEUT-ON ARRETER LA MACRO PRECEDENTE SANS * FAIRE ``Control c''? * -> ON UTILISE UN ORDRE ``IF...''. * * CETTE MACRO REPOND AUSSI A LA QUESTION: * COMBIEN DE TEMPS (EN milli-seconde) PREND UNE ADDITION? * T=$CPTIME MESSAGE S=0 1: S=[S]+1 MESSAGE S=[S] IF [S]=100000 GOTO 2 GOTO 1 2: * * LA COMMANDE $CPTIME (Central Processing unit) DONNE LE * TEMPS ECOULE DEPUIS LE PRECEDENT APPEL A $CPTIME T=$CPTIME ; MESSAGE T=[T] s * RETURN ************************************************ MACRO AG * UNE FORME PLUS LUDIQUE DE LA MACRO ANIM3#AE: * QUI ARRIVERA A ARRETER LA MACRO LE PLUS VITE? * * LA MACRO AF PERMET D'ESTIMER LE TEMPS QUE PREND 1 ADDITION (+IF) * (A) AVEC IMPRESSION A L'ECRAN DES VALEURS INTERMEDIAIRES: * (1) SUR eris (frequence=2.6 GHz, 2 proc): 0.041 ms = 41 micro-s * (2) SUR anubis (frequence=3.4 GHz, 4 proc): 0.013 ms = 13 micro-s * (b) SANS IMPRESSION A L'ECRAN DES VALEURS INTERMEDIAIRES: * (2) SUR anubis: 0.003 ms = 3 micro-s * * ON PEUT NOTER QUE 10,000 OU 100,000 ADDITIONS CONDUISENT AU MEME * TEMPS POUR 1 ADDITION. * * SI LA frequence EST DE f=3.4 GHz, UN CYCLE DURE: T=1/f=0.3 nano-s * DONC 13 micro-s REPRESENTE: 43,000 CYCLES. * T1=0.041 MESSAGE S=0 1: S=[S]+1 ; T=[S]*[T1] ; MESSAGE S=[S] T=[T] ms GOTO 1 MESSAGE * RETURN ************************************************ MACRO AH * AUTRE FORME DE LA COMMANDE IF -> SYNTAXE: IF ... THEN ... * MESSAGE S=0 1: S=[S]+1 ; MESSAGE S=[S] IF [S]=200 THEN ; GOTO 2 ; ENDIF GOTO 1 MESSAGE 2: RETURN ************************************************ MACRO AI * AUTRE FACON DE FAIRE CE QUE FAIT ANIM3#AH * PAR L'UTILISATION D'UNE BOUCLE DO * MESSAGE * DO S=1,200 ; MESSAGE S=[S] ; ENDDO * MESSAGE * RETURN ************************************************ MACRO AJ * AUTRE FACON D'ECRIRE LA BOUCLE DO * LA BORNE SUPERIEURE EST ECRITE SOUS LA FORME [N] * MESSAGE * N=300 DO S=1,[N] ; MESSAGE N=[N] S=[S] ; ENDDO * MESSAGE * RETURN *********************************************** MACRO AK * EXEMPLE D'APPLICATION D'UNE BOUCLE DO * POUR UN GRAPHIQUE VU ANTERIEUREMENT * ZONE 2 3 * N=6 DO I=1,[N] SET XCOL [I] ; SET YCOL [I] ; SET BCOL [I] ; NULL 0 1 01 ENDDO * RETURN ************************************************ MACRO DA MESSAGE Bonjour! RETURN ************************************************ MACRO DB * ON RAJOUTE UNE LIGNE BLANCHE AU DEBUT ET A LA FIN MESSAGE ; MESSAGE Bonjour! ; MESSAGE RETURN ************************************************ MACRO DC * CROCHET: DIFFERENCE ENTRE B ET [B] MESSAGE B=Bonjour! MESSAGE B ; MESSAGE [B] MESSAGE RETURN ************************************************ MACRO DD * DOUBLE CROCHETS: [B[I]] * * COMMENCONS PAR LES SIMPLES CROCHETS MESSAGE I=1 ; MESSAGE I ; MESSAGE [I] B1=Bonjour! ; MESSAGE B1 ; MESSAGE [B1] * * PASSAGE AUX DOUBLES CROCHETS MESSAGE MESSAGE BI ; MESSAGE [BI] ; MESSAGE B[I] ; MESSAGE [B[I]] MESSAGE * RETURN ********************************************** MACRO DE * BOUCLE DO * B1=Bonjour! ; B2=Au revoir * MESSAGE DO I=1,2 ; MESSAGE [B[I]] ; ENDDO MESSAGE * RETURN ********************************************** MACRO DF * BOUCLE DO AVEC PLUS DE MOTS * A1=Yvette ; A2=Natalia ; A3=Keyhaneh ; A4=Bonko A5=Jeanine ; A6=Michel ; A7=Eva ; A8=Audry * MESSAGE N=8 DO I=1,[N] ; MESSAGE [A[I]] ; ENDDO MESSAGE * RETURN ********************************************** MACRO DG * 1e EXEMPLE POUR MONTRER A QUOI PEUT SERVIR UNE BOUCLE DO * ECRITURE DES NOMS EN MAJUSCULES OU MINUSCULES * A1=Yvette ; A2=Natalia ; A3=Keyhaneh ; A4=Bonko A5=Jeanine ; A6=Michel ; A7=Eva ; A8=Audry * MESSAGE N=8 DO I=1,[N] ; A[I]=$UPPER([A[I]]) ; MESSAGE [A[I]] ; ENDDO MESSAGE DO I=1,[N] ; A[I]=$LOWER([A[I]]) ; MESSAGE [A[I]] ; ENDDO MESSAGE * RETURN ********************************************** MACRO DH * 2e EXEMPLE POUR MONTRER A QUOI PEUT SERVIR UNE BOUCLE DO * ON FAIT PRECEDER LES NOMS DE Mr., Mme ou Mlle * A1=Yvette ; A2=Natalia ; A3=Keyhaneh ; A4=Bonko A5=Jeanine ; A6=Michel ; A7=Eva ; A8=Audry * C1=Mlle ; C2=Mlle ; C3=Mr. ; C4=Mr. ; C5=Mlle ; C6=Mr. C7=Mlle ; C8=Mr. * MESSAGE N=8 DO I=1,[N] ; A[I]=[C[I]] [A[I]] ; MESSAGE [A[I]] ; ENDDO MESSAGE * RETURN ********************************************** MACRO DI * 3e EXEMPLE POUR MONTRER A QUOI PEUT SERVIR UNE BOUCLE DO * ON COMPTE LE NOMBRE DE LETTRES DE CHAQUE NOM * A1=Yvette ; A2=Natalia ; A3=Keyhaneh ; A4=Bonko A5=Jeanine ; A6=Michel ; A7=Eva ; A8=Audry * MESSAGE N=8 DO I=1,[N] ; L=$LEN([A[I]]) ; MESSAGE [L] lettres ' ' [A[I]] ; ENDDO MESSAGE * RETURN ********************************************** MACRO DJ * 4e EXEMPLE POUR MONTRER A QUOI PEUT SERVIR UNE BOUCLE DO * ON EXTRAIT LA PREMIERE LETTRE DU PRENOM * * CP (CENTRAL PROCESSING UNIT) TIME CPT=$CPTIME ; T=$TIME ; MESSAGE [T] [CPT] * A1=Yvette ; A2=Natalia ; A3=Keyhaneh ; A4=Bonko A5=Jeanine ; A6=Michel ; A7=Eva ; A8=Audry * MESSAGE N=8 DO I=1,[N] ; D=$SUBSTRING([A[I]],1,1) ; MESSAGE [D] ' ' [A[I]] ; ENDDO MESSAGE * DO I=1,1000000 ; A=1 ; B=2 ; C=[A]+[B] ; ENDDO * CPT=$CPTIME ; T=$TIME MESSAGE [T] [CPT] * RETURN ************************************************** MACRO BONJ * exemple d'usage: EXEC ANIM3#BONJ Julie -> dit: Bonjour Julie * CETTE MACRO UTILITAIRE RAJOUTE ``Bonjour'' DEVANT TOUT PRENOM * P=[1] MESSAGE MESSAGE Bonjour [P]! MESSAGE * RETURN ************************************************** MACRO TESTBONJ * TEST DE LA MACRO ANIM3#BONJ * EXEC ANIM3#BONJ Julie EXEC ANIM3#BONJ Audry * RETURN ************************************************** MACRO DIALA * DIALOGUE ENTRE MATHIEU ET FANTO MESSAGE MESSAGE _ Mathieu: Coucou, Fanto. MESSAGE _ Fanto: Que deviens-tu Mathieu? MESSAGE _ Mathieu: Tu viens prendre un cafe? MESSAGE * RETURN ********************************************* MACRO DIA * usage: EXEC ANIM3#DIA [H] [F] -> dialogue entre [H] et [F] * H=[1] ; F=[2] MESSAGE MESSAGE _ [H]: Coucou, [F]. MESSAGE _ [F]: Que deviens-tu [H]? MESSAGE _ [H]: Tu viens prendre un cafe? MESSAGE * RETURN ********************************************** MACRO TESTDIA * TEST DE LA MACRO DIA * GOTO 1 H=Mathieu ; F=Fanto EXEC ANIM3#DIA [H] [F] 1: * * PLUSIEURS APPELS SUCCESSIFS (SANS BOUCLE DO) GOTO 2 H=Mathieu ; F=Fanto EXEC ANIM3#DIA [H] [F] * H=Jacques ; F=Julie EXEC ANIM3#DIA [H] [F] * H=Michel ; F=Yvette EXEC ANIM3#DIA [H] [F] 2: * PLUSIEURS APPELS SUCCESSIFS (AVEC BOUCLE DO) *GOTO 3 H1=Mathieu ; F1=Fanto H2=Jacques ; F2=Julie H3=Michel ; F3=Yvette * *TRACE ON WAIT N=2 DO I=1,[N] ; EXEC ANIM3#DIA [H[I]] [F[I]] ; ENDDO *TRACE OFF 3: * RETURN