MODULE TestSplines; FROM CubicSplines IMPORT Spline,MakeSpline,EvalSpline,DerivSpline; FROM DIG IMPORT (* TYPE *) GArrowHead, GLineType, GFontType, GJustType, GDeviceType, GColorType, (* VAR *) GDevice , (* PROC *) GSlope, GInitDevice, GErase, GWindow, GMapWindow, GMove, GDraw, GBox, GCircle, GEllipse, GArc, GLine, GPolyLine, GArrow, GSpline, GSetLinePattern, GSetFont, GSetCharSize, GCharCellSize, GText, GSetColor, GWrapUp; FROM FileSystem IMPORT Done, Open, Close, Reset; FROM InOut IMPORT in, WriteString,WriteReal,WriteLn,ReadReal,ReadLn,ReadCard, Read; CONST max = 20; VAR status : BOOLEAN; pi : REAL; i : CARDINAL; n : CARDINAL; x,y : ARRAY [0..max] OF REAL; npt : CARDINAL; xv, yv : ARRAY [0..100] OF REAL; dev : CHAR; dx : REAL; s : Spline; BEGIN Open( in, "Test.dat", FALSE ); IF NOT Done( ) THEN WriteString("Touble opening Test.dat "); WriteLn; HALT; END; Reset( in ); ReadCard( n ); ReadLn; IF n-1 > max THEN WriteString("n > max , set n to max "); WriteLn; n := max+1; END; FOR i := 0 TO n-1 DO ReadReal( x[i] ); ReadReal( y[i] ); ReadLn; END; Read( dev ); ReadLn; IF dev = 'v' THEN GDevice := vt125 ELSIF dev = 'h' THEN GDevice := hp ELSIF dev = 't' THEN GDevice := tek ELSE WriteString("strange device " ); WriteLn; HALT; END; Close( in ); status := MakeSpline( x, y, n, s ); npt := 51; dx := ( x[n-1] - x[0] )/ FLOAT( npt-1 ); FOR i := 1 TO npt DO xv[i-1] := x[0] + FLOAT( i-1 )*dx; status := EvalSpline( xv[i-1], s, yv[i-1] ); END; GInitDevice( 0.0, 0.0, 11.0, 8.5, 1200, "test.gf" ); GErase( ); GMapWindow( 0.0, -1.0, 6.0, 1.25 ); GSetColor( Ggreen ); GPolyLine( x, y, INTEGER(n)); GPolyLine( xv, yv, INTEGER(npt) ); GArrow( xv[npt-2],yv[npt-2], xv[npt-1],yv[npt-1], RightHead ); GWrapUp( ); END TestSplines.