DIRECTORY Complex, JaMFnsDefs USING [PushReal, GetReal, Register]; ComplexJaM: PROGRAM IMPORTS Complex, JaMFnsDefs = BEGIN OPEN JaMFnsDefs; PushVec: PROCEDURE [v:Complex.Vec] = BEGIN PushReal[v.x]; PushReal[v.y]; END; PopVec: PROCEDURE RETURNS [Complex.Vec] = BEGIN y:REAL _ GetReal[]; x:REAL _ GetReal[]; RETURN[[x,y]]; END; CAdd: PROCEDURE = {b:Complex.Vec _ PopVec[]; PushVec[Complex.Add[PopVec[],b]]}; CSub: PROCEDURE = {b:Complex.Vec _ PopVec[]; PushVec[Complex.Sub[PopVec[],b]]}; CMul: PROCEDURE = {b:Complex.Vec _ PopVec[]; PushVec[Complex.Mul[PopVec[],b]]}; CDiv: PROCEDURE = {b:Complex.Vec _ PopVec[]; PushVec[Complex.Div[PopVec[],b]]}; CFromPolar: PROCEDURE = {b:REAL _ GetReal[]; PushVec[Complex.FromPolar[GetReal[],b]]}; CAbs: PROCEDURE = {PushReal[Complex.Abs[PopVec[]]]}; CSqrAbs: PROCEDURE = {PushReal[Complex.SqrAbs[PopVec[]]]}; CArg: PROCEDURE = {PushReal[Complex.Arg[PopVec[]]]}; CExp: PROCEDURE = {PushVec[Complex.Exp[PopVec[]]]}; CLn: PROCEDURE = {PushVec[Complex.Ln[PopVec[]]]}; CSqr: PROCEDURE = {PushVec[Complex.Sqr[PopVec[]]]}; CSqRt: PROCEDURE = {PushVec[Complex.SqRt[PopVec[]]]}; Register["Complex.Add"L,CAdd]; Register["Complex.Sub"L,CSub]; Register["Complex.Mul"L,CMul]; Register["Complex.Div"L,CDiv]; Register["Complex.FromPolar"L,CFromPolar]; Register["Complex.Abs"L,CAbs]; Register["Complex.SqrAbs"L,CSqrAbs]; Register["Complex.Arg"L,CArg]; Register["Complex.Exp"L,CExp]; Register["Complex.Ln"L,CLn]; Register["Complex.Sqr"L,CSqr]; Register["Complex.Sqrt"L,CSqRt]; END. ˜ComplexJaM.mesa Written by Michael Plass, 29-Sep-81 Last edit by Michael Plass, December 2, 1982 11:03 am Makes complex functions visible to JaM Ê°˜J˜Jšœ™Jšœ#™#Jšœ5™5Jšœ&™&šÏk ˜ J˜Jšœ œ˜/—Jšœ œœ˜1Jšœœ ˜J˜šÏnœ œ˜$Jš˜J˜J˜Jšœ˜J˜—šžœ œœ˜)Jš˜Jšœœ ˜Jšœœ ˜Jšœ˜Jšœ˜J˜—Jšžœ œ@˜OJšžœ œ@˜OJšžœ œ@˜OJšžœ œ@˜O˜ Jš œœ7˜J—Jšžœ œ%˜4Jšžœ œ(˜:Jšžœ œ%˜4Jšžœ œ$˜3Jšžœ œ#˜1Jšžœ œ$˜3Jšžœ œ%˜5J˜J˜J˜J˜J˜J˜*J˜J˜$J˜J˜J˜J˜J˜ J˜Jšœ˜J˜—…—æ.