RSTAT

Return information about the last record read

WSupported on Windows
USupported on Unix
VSupported on OpenVMS
NSupported in Synergy .NET
xcall RSTAT(size[, term_char])

Arguments

size

The variable that will be returned with the size of the last record read. For READ and READS operations, the returned size doesn’t include the record terminator that ended the input operation. (n)

term_char

(optional) The variable that will be returned with the character that terminated the input operation, loaded left-justified over blanks. Term_char should be a one-character field. (a)

Discussion

The RSTAT subroutine returns the size and terminating character of the last record read by a GET, GETS, READ, READS, ACCEPT, W_DISP, W_DISP(WD_READS), or W_FLDS(WF_INPUT) operation.

The RSTAT subroutine is similar to the RSTATD subroutine, except that the record terminator is returned as the terminating character code (a numeric field) in RSTATD.

You can also obtain the same information using the %RSIZE (or %RDLEN) and %RTERM (or %RDTRM) intrinsic functions. %RSIZE returns the length of the last GET, GETS, READ, READS, or ACCEPT statement or one of the Synergy windowing API I/O operations, while %RTERM returns the terminating character of the last record read, without the overhead required by an external subroutine.

RSTAT returns a null character in term_char after a READS that does not require an explicit terminator is executed and the input field is full (after auto termination). For files, the terminator is always a null character.

The ACCEPT statement reads only one character or control code sequence per execution.

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

See also

Examples

The following example gets the length and the terminating character of user input and displays that information to the screen.

.define TTCHN           ,1
record
    inarea              ,a500
    afld                ,a5
    flng                ,d1
    inlng               ,d5
    trmchr              ,a1
    dcml                ,d3
proc
    open(TTCHN, i, "tt:")
    repeat
      begin
        display(TTCHN, "Enter an input string:  ")
        reads(TTCHN, inarea)  [eof=done]
        xcall rstat(inlng, trmchr)
        afld = inlng, "zzzzx" [left:flng]
        xcall decml(trmchr, dcml)
        display(TTCHN, "... input was ", afld(1, flng),
  &             "long, trmchr was ", %string(dcml))  
        forms(TTCHN, 1)
      end
done,
    stop
end