Programming samples by Robert Elton Maas Algol (SAIL) This is the whole file CVGN.SAI: STRING PROCEDURE CVGN(REAL F;INTEGER WIDTH); BEGIN "CVG N" COMMENT Convert floating-point F into string which has fewer than or exactly WIDTH characters, similar to but better than CVG; STRING S1; S1:=""; IF F<10^WIDTH THEN BEGIN "SMALL" SETFORMAT(WIDTH,WIDTH); S1:=CVF(F); WHILE S1[1 FOR 1]=" " DO S1:=S1[2 TO INF]; WHILE LENGTH(S1)>WIDTH AND S1[INF FOR 1] NEQ "." DO S1:=S1[1 TO INF-1]; IF LENGTH(S1)>WIDTH AND S1[INF FOR 1]="." THEN S1:=S1[1 TO INF-1]; IF LENGTH(S1)>WIDTH THEN S1:=""; END "SMALL"; IF NOT S1 THEN IF WIDTH GEQ 5 THEN BEGIN "BIG" SETFORMAT(WIDTH-1,WIDTH-4); S1:=CVG(F); WHILE S1[1 FOR 1]=" " DO S1:=S1[2 TO INF]; WHILE LENGTH(S1)>WIDTH AND S1[INF FOR 1]=" " DO S1:=S1[1 TO INF-1]; IF S1[INF FOR 1]=" " AND S1[INF-2 FOR 1]="@" THEN S1:=S1[1 TO INF-2]&"0"&S1[INF-1 TO INF-1]; IF LENGTH(S1)>WIDTH THEN UERR(0,1,"CVGN, CANNOT PURGE WIDTH"); END "BIG" ELSE BEGIN "OVERFLOW" INTEGER K,I; K:=(IF F>0.0 THEN "+" ELSE IF F<0.0 THEN "-" ELSE "?"); S1:="";FOR I:=1 STEP 1 UNTIL WIDTH DO S1:=S1&K; END "OVERFLOW"; RETURN(S1); END "CVG N";