LEX 'DEMOCOMP' * (c) Copyright PPC Paris 1986 ID #5C MSG 0 POLL 0 ENTRY Demo CHAR 15 KEY 'CSWAP' TOKEN 255 * * * Ce LEX a ÅtÅ fait pr vs montrer comment * rÅaliser une fonction travaillant sur * des nombres complexes. Il n'est toutefois * utilisable qu'avec le module MATHS * (du - tant que ns n'avons pas crÅe de fonctions * de substitution). * Le principe du LEX est simple: on veut * rÅaliser 1 fonction qui inverserait * les parties rÅelles et imaginaires d'1 nb * complexe. Pr ce faire, on prend le * nombre qui se trouve sur la pile, on regarde si * c'est un complexe ou un rÅel * on inverse parties im. et rÅ.; il suffit alors * de mettre le rÅsultÀt sur la * pile, et le tour est jouÅ. * * =POP1N EQU #0BD1C =MEMCHK EQU #012C7 =BSERR EQU #0939A =EXPR EQU #0F23C ENDTXT NIBHEX 811 --- CSWAP( (A,B) ou R ) Demo GOSBVL =POP1N Retire le nb de la pile GOC Complx Est-il complex? C=0 W Non; il faut annuler la * pseudo-partie imaginaire ajoutÅe R0=C par =POP1N Complx R1=A * * A ce moment: * Nombre= (R0,R1) * GOC Swap Si le nb est complexe il * est nÅcessaire de vÅrifier s'il CD1EX il y a suffisemment de * place sur la pile pr y placer 1 D=C A rÅsultat complexe; * sauvegarde D1 ds D(A) A=C A Stack pointer -> A(A); C=0 A P= 0 LCHEX 12 Longueur prise, sur la * pile, par la partie im. et l'en- * tÁte d'un nb complexe GOSBVL =MEMCHK CDEX A Sauvegarde l'Åventuel * numÅro d'erreur ds D(A) D1=C Restaure D1 GONC Swap Y a-t-il suffisemment de * place? C=D A Non; rÅcupÅre le code * d'erreur GOVLNG =BSERR Swap A=R1 Partie rÅ. -> A(W) AR0EX -> R0; R1=A Partie im. -> R1; * * * A ce moment: * P=0 * HEX mode * Result=(R1,R0) * D1=dÅjÈ dÅcrÅmentÅ de 16 * On s'est assurÅ qu'il y a suffisemment de * pace sur la pile * * A=R1 Partie rÅ. -> A(W) DAT1=A W -> Stack; D1=D1- 16 A=R0 Partie im. -> A(W) DAT1=A W -> Stack; D1=D1- 2 LCHEX 0E En tÁte de nb complexes DAT1=C B -> Stack; XM=0 DÅsarme XM GOVLNG =EXPR Exprime le rÅsultat END