{
From: PHIL NICKELL
Subj: Basic PrintUsing in PAS
Does anyone know of any shareware or freeware routines in Turbo Pascal
5.5, that will allow me to format numbers or strings like the PRINTUSING
statement in BASIC???
}

 PROCEDURE printusing (mask: string; value:real);
   { Calling syntax =     PRINTUSING(mask, number)
     mask can be a string label or a literal
     Example  printusing('#,###,###',45.63);
              printusing('######.###,value);   }
  const
    comma     : char = ',';
    point     : char = '.';
    minussign : char = '-';
  var
    fieldwidth, integerlength, i, j, places, pointposition: integer;
    usingcommas, decimal, negative : boolean;
    outstring, integerstring : string;

  begin
       negative := ( value < 0 );
       value := abs( value );
       places := 0;
       fieldwidth := length( mask );
       usingcommas := ( pos ( comma, mask ) > 0 );
       decimal := ( pos (point,mask) > 0 );
       if decimal then
          begin
               pointposition := pos(point, mask);
               places := fieldwidth - pointposition;
          END;
       str ( value:0:places, outstring );
       if usingcommas then
          begin
               J := 0;
               integerstring :=
                     copy (outstring, 1, length(outstring)-places);
               integerlength := length(integerstring);
               if decimal then
                  integerlength := pred(integerlength);
               for i := integerlength downto 2 do
                   begin
                        inc(j);
                        if j mod 3 = 0 then
                           insert (comma,outstring,i);
                   end;
          end;
       if negative then
               outstring := minussign + outstring;
       write( outstring:fieldwidth);
  END; {PRINTUSING}

BEGIN
PrintUsing('##,###,###.##',123456.78);
END.