%RSIZE

Return the size of the last record read

WTSupported in traditional Synergy on Windows
WNSupported in Synergy .NET on Windows
USupported on UNIX
VSupported on OpenVMS
size = %RSIZE[(channel)]

Return value

size

The size of the last record that was read. (i)

Arguments

channel

(optional) The channel for which to retrieve the numeric value of the terminating character of the last record that was read. (i)

Discussion

%RSIZE returns the size of the data from the last READ, READS, ACCEPT, GET, or GETS operation, or the last window I/O function. %RSIZE is equivalent to %RDLEN.

If the optional channel number is specified, the value returned is for the last operation on that channel.

%RSIZE can be especially useful with the READS statement, because the length of the record that was read can vary. For example, you might use %RSIZE to determine the number of characters read from the terminal to limit the processing of an input record.

In Synergy .NET, you cannot use %RSIZE in multi-threaded scenarios where a channel number has not been specified.

Examples

repeat
  begin
    display(ttchn, "Enter next command: ")
    reads(ttchn, input, done)
    if (%rsize.eq.0) then
      writes(ttchn, "Null input ignored")
    else
      buf(1,5) = %rsize ,"ZZZX"
  end

The following subroutine reads a specified minimum amount of terminal input. If the input is too short, the prompt and input are cleared from the screen, and input is requested until the minimum length is entered.

subroutine input 
    a_minsiz            ,n 
    a_data              ,a 
    a_prompt            ,a 

proc 
get_inp, 
    display(TTCHN, a_prompt, ": ") 
    reads(TTCHN, a_data, done) 
    if (%rsize .lt. a_minsiz) 
      begin 
        writes(TTCHN, "Data too short") 
        display(TTCHN, $scr_pos(-1,-80), $scr_clr(LINE), 
  &             $scr_pos(-1,-80), $scr_clr(LINE)) 
        call get_inp 
      end 
done, 
    xreturn 
endsubroutine