?? RIGHT := 110 ??
?? NEWTITLE := 'RAP$WRITE_STRINGS procedure.' ??
MODULE ram$write_strings;

{ PURPOSE:
{   This module contains the procedures to display strings.
{
{ DESIGN:
{   The compiled module resides in RAF$LIBRARY.
{
{ NOTES:
{

?? OLDTITLE ??
?? NEWTITLE := 'Global Declarations Declared by This Module', EJECT ??

?? OLDTITLE ??
?? NEWTITLE := 'Global Declarations Referenced by This Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc rac$max_line
*copyc ost$status
?? POP ??
*copyc clp$put_partial_display

?? OLDTITLE ??
?? NEWTITLE := '[XDCL] rap$write_strings', EJECT ??

{ PURPOSE:
{   This procedure writes two strings to the output display.
{
{ DESIGN:
{   The two strings are combined into one string and a procedure
{   writes them to output.
{
{ NOTES:
{
{

  PROCEDURE [XDCL] rap$write_strings
    (    string_a: string ( * );
         string_b: string ( * );
         continue_line: boolean;
         indent: 0 .. rac$max_line;
     VAR display_control: clt$display_control;
     VAR display_status: ost$status);


    VAR
      ignore_status: ost$status,
      line: string (osc$max_string_size),
      line_size: integer;


    IF NOT display_status.normal THEN
      RETURN;
    IFEND;

    line := '';
    STRINGREP (line, line_size, string_a, string_b);

    WHILE (line_size + display_control.column_number) > rac$max_line DO
      write_partial_line (indent, line, line_size, display_control);
    WHILEND;

    IF continue_line THEN
      clp$put_partial_display (display_control, line (1, line_size), clc$no_trim, amc$continue,
            ignore_status);
    ELSE
      clp$put_partial_display (display_control, line (1, line_size), clc$no_trim, amc$terminate,
            ignore_status);
    IFEND;

  PROCEND rap$write_strings;

?? OLDTITLE ??
?? NEWTITLE := 'write_partial_line', EJECT ??

{ PURPOSE:
{   This procedure finds a good breaking point for a string and writes the
{   partial string to the display.
{
{ DESIGN:
{   The string is searched for a period or a blank.  The beginning of the line
{   to this break is displayed.
{
{ NOTES:
{
{

  PROCEDURE write_partial_line
    (    indent: 0 .. rac$max_line;
     VAR line: string (osc$max_string_size);
     VAR line_size: integer;
     VAR display_control: clt$display_control);


    VAR
      i: 0 .. rac$max_line,
      ignore_status: ost$status,
      max_line_size: 0 .. rac$max_line,
      partial_line_size: 0 .. rac$max_line,
      temp_line: string (osc$max_string_size);

    partial_line_size := 0;

    IF line_size > rac$max_line THEN
      max_line_size := rac$max_line;
    ELSE
      max_line_size := line_size;
    IFEND;

  /find_partial_line_length/
    FOR i := max_line_size DOWNTO 1 DO
      IF (line (i, 1) = ' ') OR (line (i, 1) = '.') THEN
        partial_line_size := i;
        EXIT /find_partial_line_length/;
      IFEND;
    FOREND /find_partial_line_length/;

    IF partial_line_size <> 0 THEN
      clp$put_partial_display (display_control, line (1, partial_line_size), clc$no_trim, amc$terminate,
            ignore_status);
      line_size := line_size - partial_line_size + indent;
    ELSE
      clp$put_partial_display (display_control, line (1, line_size), clc$no_trim, amc$terminate,
            ignore_status);
      line_size := 0;
    IFEND;

    temp_line := '';
    IF indent <> 0 THEN
      temp_line (1, indent) := '';
    IFEND;
    temp_line (indent + 1, * ) := line (partial_line_size + 1, * );
    line := temp_line;

  PROCEND write_partial_line;

MODEND ram$write_strings;

