--m.stone September 26, 1980 5:47 PM DIRECTORY SplineDefs: FROM "SplineDefs"; Splines: PROGRAM IMPORTS RegularAL: SplineDefs,RegularUM: SplineDefs,LocalSpline: SplineDefs EXPORTS SplineDefs = BEGIN OPEN SplineDefs; TooFewKnots: PUBLIC SIGNAL[numknots: INTEGER] = CODE; UnknownSpline: PUBLIC SIGNAL[splineType: SplineType] = CODE; MakeSpline: PUBLIC PROCEDURE [knots: DESCRIPTOR FOR ARRAY OF FPCoords, splineType: SplineType] RETURNS [DESCRIPTOR FOR ARRAY OF Coeffs] = BEGIN allCoeffs: DESCRIPTOR FOR ARRAY OF Coeffs; numknots: INTEGER _ LENGTH[knots]; SELECT splineType FROM IN [naturalUM..cyclicUM] => allCoeffs _ RegularUM.MakeSpline[knots,splineType ! RegularUM.TooFewKnots => BEGIN SIGNAL TooFewKnots[numknots]; CONTINUE; END; RegularUM.UnknownSpline => BEGIN SIGNAL UnknownSpline[splineType]; CONTINUE; END ]; IN [naturalAL..cyclicAL] => allCoeffs _ RegularAL.MakeSpline[knots,splineType ! RegularAL.TooFewKnots => BEGIN SIGNAL TooFewKnots[numknots]; CONTINUE; END; RegularAL.UnknownSpline => BEGIN SIGNAL UnknownSpline[splineType]; CONTINUE; END ]; IN [bezier..crspline] => allCoeffs _ LocalSpline.MakeSpline[knots,splineType ! LocalSpline.TooFewKnots => BEGIN SIGNAL TooFewKnots[numknots]; CONTINUE; END; LocalSpline.UnknownSpline => BEGIN SIGNAL UnknownSpline[splineType]; CONTINUE; END ]; ENDCASE => SIGNAL UnknownSpline[splineType]; RETURN[allCoeffs]; END; END. (635)