On 23-Jan-2014 19:14 -0800, John Yeung wrote:
Two thoughts. I should warn you I have no idea what a *PAGSEG
object even is, but the way you're talking about them makes them
sound like some kind of image, which you can sort of embed or link in
a printer file.
Yes. They are a resource to be associated with a spooled file. The
Page Segment usually provides an image for printing somewhere on a page.
My reply is effectively to the OP, but in reply to this message,
because it provides a good lead-in.
To help clarify some later comments:
The Page Segment (*PAGSEG) object is a space object [type x'19' which
is a Space Object, with subtype x'27'; i.e. x'1927']. They can be
created with the Create Page Segment (CRTPAGSEG) command from data
exported, usually from another system; i.e. effectively, this "create"
feature is an import from some data that was previously stored in a
program described database file. From that command's help text:
"... creates a page segment space object by copying a user-supplied
AS/400 database file to an internal space object. The user must load
the page segment resource into the database from a remote system (such
as a System/370) ..."
Second crazy, more technical idea: Is there absolutely no way to
compare the objects byte-for-byte?
The *PAGSEG [like a *QRYDFN and most other non *USRxxx] object types
are in the System Domain, so only a program running in the System State
can access the object's space where the data resides [without receiving
an error MCH6801 aka x4401]. Without addressability to the data [in the
space], no direct comparison is possible.
If not directly, then perhaps after some kind of conversion,
There is such a feature available, the Convert Page Segment to PFM
(CVTPAGSPFM) command; followup at the end of my reply. Presumably the
/conversion/ of identical Page Segments would produce identical output.
like saving to a save file
Similar has been done for the dataspace of a database file member
[for an undelete feature], as well as *QRYDFN objects [for a retrieve
query definition]; the Query Definition objects also are a Space Object,
but with type\subtype of x'1911'.
or dumping to an IFS stream file?
Although the *PAGSEG is just a simple space object, there are no
direct methods provided to access the data in that space; though not
directly a side effect of the inability to address the space with a
Space Pointer as limited by the domain of the object.
If not on the i5/OS side (apologies if I'm getting the terminology
wrong) then perhaps in Qshell or PASE?
Still for lack of a method to directly access the space. Although
the space of a *USRSPC object is directly accessible [e.g. DSPF, CPY],
no such capability for other space objects [like *PAGSEG].
Just as the integrity of the object is protected by domain\state
rules, the object is also limited for access, via only the supported
_methods_. There are effectively no methods made available to access
the data in the space; except what is available to the system domain,
which is basically any action for a space object, achieved simply with
the Set Space Pointer operation to obtain a pointer address to the space
from the System Pointer to the object.
Of course what is the data [aside from pointer data] in the space can
be obtained as a copy, and anything can be done to that copy; e.g. the
DMPOBJ and the SAVOBJ both make a[n effective] copy of the data in the
space, and that data could be used to effect a comparison.
The Dump Object (DMPOBJ) command provides a hexadecimal view of the
contents of the "SPACE" portion of the object. The save of the object
[e.g. into a save file; read as save records] also provides access to a
copy of the contents. The former even provides references that expose
the values of any pointer data included in the space.
More conveniently however, there is the Convert Page Segment to PFM
(CVTPAGSPFM) command which appears to be an effective export from an
existing *PAGSEG object, into a database file member. The effect of
that command [as seen in some tests] was all data in the space object
starting past some initial header, is copied into the physical file
member. If so, there are many ways to compare that data; even SQL. But
of course the data is binary, so is unsuitable to be displayed as
character [irrespective the name of the data type of the database
pseudo-field for the program-described file].
FWiW: Some limited types of data [one Image Data Stream (IMDS) or one
Image Object Content Architecture (IOCA) function-set-10 image data
stream] can be processed using the effective inverse function of the
Convert PFM to Page Segment (CVTPFMPAGS) in order to create a Page
Segment, instead of the CRTPAGSEG. See: GO CMDPAGSEG Note however: In
a test I performed whereby one request had used CVTPFMPAGS and another
had used CRTPAGSEG to created a Page Segment, both from the same source
created from CVTPAGSPFM, the dumped objects mis-compared. However, the
*PAGSEG created from that source did compare identically to the original
object specified on the CVTPAGSPFM. For that testing, I used the
*PAGSEG object QAFP/QFCPAGS2 because it was described in its TEXT() as
having the IOCA FUNCTION-SET-10 format, so I figured the CVTPFMPAGS and
CRTPAGSEG would be the same.?