LEX 'COMPLEX' * (c) 1988, PPC Paris et l'Auteur AD2-12 EQU #0C35F ajouter deux 12-chiffres AD2-15 EQU #0C363 ajouter deux 15-chiffres AVMEME EQU #2F599 D1=AVE EQU #18651 mettre D1 È AVMEME D=AVMS EQU #1A460 mettre D(A) È AVMEME DECDC EQU #05287 dÅcompiler dÅclaration variable DECP EQU #0328F parse dÅclaration variable DMNSN EQU #0AE39 crÅe et alloue un tableau DPVCTR EQU #0AC50 crÅe une variable DV2-15 EQU #0C4AC diviser deux 15-chiffres EXAB1 EQU #0D3E7 Åchanger AB avec Scratch1 EXPR EQU #0F23C adresse de retour des fonctions FINDA EQU #023E3 selon A(B), faire... FNRTN4 EQU #0F238 adresse de retour des fonctions FUNCD1 EQU #2F8C0 MEMERR EQU #0944D ERR:Insufficient Memory MP2-12 EQU #0C432 multiplier deux 12-chiffres NXTSTM EQU #08A48 revient dans la Basic Loop POP1N EQU #0BD1C dÅpile un nombre de la M.S. POP2N EQU #0BC8C dÅpile deux nombres de la M.S. PREP EQU #0ADAF prÅpare la crÅation de variable R=C A assez de place ? GOYES memerr non : erreur DAT1=A W oui : empiler le nombre RTNCC et revenir È l'appelant memerr GOVLNG MEMERR ERR: Insufficient Memory ***************************************************** REL(5) Decdc Routine de dÅcompilation REL(5) Decp Routine de parse DECL LCHEX E Ecrire le type de la variable D1=(5) #2F890 dans S-R1-3 DAT1=C P car recquis par PREP RIP GOSBVL PREP prÅparation de la crÅation GOSBVL DPVCTR get dope vector R1=C R1 := dope vector ?A#0 A si variable = tableau GOYES ARR alors on continue A=A+1 A sinon on fait comme si c'etait ST=1 0 un tableau dans la suite. ARR GOSBVL SPACE Calculer place nÅcessaire GOSBVL DMNSN et allouer la mÅmoire GOC RIP on rÅpÉte si il y en a d'autres GOVLNG NXTSTM sinon, on revient È Basic Decdc GOVLNG DECDC Decp GOVLNG DECP ***************************************************** RCL A=R1 A(A) := adresse de la variable D0=A D0 := ^ partie rÅelle C=DAT0 W C(W) := partie rÅelle D0=D0+ 16 D0 := ^ partie imaginaire GOSUB PUSH empiler partie rÅelle sur M.S. C=DAT0 W C(W) := partie imaginaire GOTO EXIT2 et sortie ***************************************************** CSTO GOSUB CKVAR VÅrifier si variable valide D1=D1+ 2 sauter le "header" 0E C=DAT1 W C(W) := partie imaginaire D1=D1+ 16 D1 := ^ partie im. sur la M.S. WRITR DAT0=C W Åcrire partie imaginaire D0=D0- 16 D0 := ^ partie rÅelle de la var C=DAT1 W C(W) := partie rÅelle DAT0=C W Åcrire partie rÅelle C=D A restaurer D1 D1=C È son ancienne valeur GOTO EXIT1 et sortie ***************************************************** RSTO GOSUB CKVAR vÅrifier si variable valide C=0 W Partie imaginaire := 0 GOC WRITR B.E.T. ***************************************************** CKVAR CD1EX sauver D1 dans D(A) D=C A D1=C D0=(5) #2F880 lire type de la variable C=DAT0 S dans la zone scratch D0=D0- 15 D0 := ^ adr. var dans scratch C=DAT0 A C(A) := adresse de la variable D0=C D0 := ^ variable D0=D0+ 16 D0 := ^ partie imaginaire C=C+1 S vÅrifier le type C=C+1 S si c'est E : complexe RTNC alors retour avec Carry = 1 rdatty GOVLNG RDATTY sinon : ERR: Data Type ***************************************************** NIBHEX 811 1 paramÉtre numÅrique (R ou C) REPTE GOSUB pop1n dÅpiler partie imaginaire expr GOVLNG EXPR et retour... ***************************************************** NIBHEX 811 1 paramÉtre numÅrique (R ou C) CONJE GOSUB pop1n dÅpiler l'argument GONC expr si rÅel, c'est terminÅ C=R0 C(W) := partie imaginaire C=-C-1 S C(W) := - partie imaginaire GOSUB PUSH empiler C(W) sur la M.S. LCHEX 0E et mettre le "header" 0E GOSBVL STKCHR sur la M.S. GONC expr B.E.T. ***************************************************** NUM GOSBVL POP2N dÅpiler deux nombres de la M.S. GOC rdatty erreur si il y en a un complexe GOTO EXIT2 sinon sortie ***************************************************** NIBHEX 811 1 paramÉtre numÅrique (R ou C) IMPTE GOSUB pop1n dÅpiler un argument de la M.S. C=0 W si c'est un rÅel, GONC fnrtn4 alors renvoyer 0 C=R0 sinon partie imaginaire GOC fnrtn4 ***************************************************** NIBHEX 811 1 paramÉtre numÅrique (R ou C) MAGE GOSUB pop1n dÅpiler un argument de la M.S. C=A W si c'est un rÅel, GONC fnrtn4 alors on peut le renvoyer SETDEC GOSUB mp2-12 AB := Re * Re GOSBVL EXAB1 sauver dans Scratch1 C=A W C(W) := Partie imaginaire GOSUB mp2-12 AB := Im * Im GOSUB rccd1 CD := Re * Re GOSUB ad2-15 AB := Re * Re + Im * Im GOSBVL SQR-15 AB := SRQ (Re * Re + Im * Im) GOSUB ures12 conversion en 12-chiffres ***************************************************** fnrtn4 GOVLNG FNRTN4 pour sauver quelques quartets pop1n GOVLNG POP1N ures12 GOVLNG uRES12 ad2-15 GOVLNG AD2-15 mp2-12 GOVLNG MP2-12 stscr GOVLNG STSCR rccd1 GOVLNG RCCD1 END