|
Hello Jevgeni,
You wrote:
>May be this question is as easy as most things in this 400 world -
>when you know an answer.
Yes, it is easy. But it is more a matter of knowing where to look. It's
just another case of RTFM. Read on ...
>But still:
>I'm writing a program, that must generate a report. It has a header
>and plenty of rows. All these rows probably will not fit into the
>page, I defined while creating a print file via STRRLU.
>So I thought, that it will be nice to place a header on each new
>page. Isn't it obvious?
Yes. Obvious and standard practice.
>But how does the program, that makes _Rwrite to print file, knows,
>when new page should start.
_Rwrite updates the I/O feedback area which returns information about the
write operation. There are C functions that will return addressability to
the feedback areas. See below.
>I now know only one stupid way - place a counter and increment it
>each time I make _Rwrite, then compare it to page size in rows. If
>equal (or something like that), reset it, place header and go on.
>Seems ugly :-(((.
Yes. It is ugly and doesn't allow for the overflow line which is generally
not the same as the number of lines per page.
>May be there is some sort of feedback from _Rwrite, that shows, that
>last row is placed on the page?
You are on the right track. The ILE C Programmers Guide discusses both the
Open Feedback Area and the I/O Feedback Area in sections 4.19 and 4.29.
These sections even tell you where to find the include that maps the various
structures.
<=================== Excerpt from ILE C Programmer's Guide (c) IBM =======>
4.19 Open Feedback Area
The open feedback area is part of the open data path that contains
information about the open file that is associated with that open data
path. You can assign a pointer to this information by using the _Ropnfbk()
function. See the Data Management manual for more information on the
fields contained in the open feedback area. The structure that maps to the
open feedback area can be that is found in the xxfdbk.h header file.
4.20 I/O Feedback Area
The I/O feedback area is a part of the open data path for the file that is
updated after each successful non-blocked I/O operation. If record
blocking is taking place, the I/O feedback is updated after each block of
records is transferred between your program and the Data Management
system.
The I/O feedback consists of two parts: one part that is common to all
file types, and one part that is specific to the type of file.
To assign a pointer to the common part of the I/O feedback area, use the
_Riofbk() function. To assign a pointer to the part of the I/O feedback
area that is specific to the type of file, add the offset contained in the
file_dep_fb_offset field of the common part to a pointer to the common
part.
Note: The offset is in bytes, so you need to cast the pointer (char *) to
the common part to a pointer to character when performing the
pointer arithmetic. See the Data Management manual for information
on the I/O feedback areas. The structures that map to the I/O
feedback areas are that are contained in the xxfdbk.h header file.
<=================== End of Excerpt =====================>
The Open Feedback Area will tell you how many lines are available on the
page (in a field called rows) and the overflow line (in a field called
overflow_line_num). The overflow line is generally not the same as the
number of lines on the page and this value can be overridden via OVRPRTF.
The printer I/O Feedback Area will tell you the current line number (in a
field called cur_page_line_num) and the page count (in a field called
cur_page_count).
It is a trivial matter to check whether the cur_page_line_num is >= to the
overflow_line_num and write the header record thus causing a new page.
A description of the Open Feedback Area and the I/O Feedback Area can be
found in Appendix A of the Data Management Guide (now mved to the
disInformation Centre).
The ILE C Programmer's Guide and the ILE C Reference Manual have examples of
using the feedback area in the database section. Using the feedback area
with a printer file is identical.
Regards,
Simon Coulter.
«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
«» FlyByNight Software AS/400 Technical Specialists «»
«» Eclipse the competition - run your business on an IBM AS/400. «»
«» «»
«» Phone: +61 3 9419 0175 Mobile: +61 0411 091 400 /"\ «»
«» Fax: +61 3 9419 0175 mailto: shc@flybynight.com.au \ / «»
«» X «»
«» ASCII Ribbon campaign against HTML E-Mail / \ «»
«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
+---
| This is the C/400 Mailing List!
| To submit a new message, send your mail to C400-L@midrange.com.
| To subscribe to this list send email to C400-L-SUB@midrange.com.
| To unsubscribe from this list send email to C400-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: bob@cstoneindy.com
+---
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.