On 19-Oct-2015 12:01 -0500, Graves, Chuck wrote:
Is there a way in CL, to retrieve the OUTQ value for a Display
device? I need to programmatically change this value for lots of
workstation device descriptions based on current values in the OUTQ
parameter.
From the Receiver variable returned from the following API [see
reference link below] the CL command\statements shown here should be
helpful for that effect, using the Format name of DEVD0600 for the
Receiver Variable (&RcvVar) return information:
CHGVAR &OutQnm %sst(&rcvVar 335 10)
CHGVAR &OutQlb %sst(&rcvVar 345 10)
CHGDEVDSP OUTQ(&newOutQlb/&newOutQnm)
[
http://www.ibm.com/support/knowledgecenter/api/content/ssw_ibm_i_72/apis/QDCRDEVD.htm]
_Retrieve Device Description_ (QDCRDEVD) API
" ...
Format name
INPUT; CHAR(8)
The content and format of the information returned for each device
description. The possible format names are:
DEVD0100 Basic device information.
DEVD0200 Detailed information for device category *APPC
DEVD0300 Detailed information for device category *ASC
DEVD0400 Detailed information for device category *BSC
DEVD0500 Detailed information for device category *DKT
DEVD0600 Detailed information for device category *DSP
...
Output queue (OUTQ). The output queue to be used for printed output
associated with this display station. This information is returned in
two separate fields:
• Name of the queue
• Library in which the queue can be found
(See the OUTQ parameter in the _CRTDEVDSP_
[
http://www.ibm.com/support/knowledgecenter/api/content/ssw_ibm_i_72/cl/crtdevdsp.htm]
command.)
..."
The output from Display Object Description (DSPOBJD) of *ALL Object
Type (*DEVD) can be used to generate a list of all devices [in the
machine context; aka in QSYS], and that list can be pared to only those
where ODOBAT LIKE 'DSP%' such that only the Configuration Description
(CFGD) of type Display Device (*DSP) are retrieved; i.e. being already
determined that they are of the desired type *and* attribute, no reason
to call the API to determine what is the extended type\attribute of each
device:
If (%sst(&odobat 1 3) *eq 'DSP') then(do) /* fix only DSPxxx */
call QSYS/QDCRDEVD ...
callprc vfyNfixOutQ(&odobnm) /* reset OutQ name if rqd */
enddo
And if an alternate means of generating the list of display devices
also is of interest [i.e. DSPOBJD or an equivalent API was not already
chosen], then the SQL could be used to generate and even pare the list.
A VIEW could be defined to generate just a list of Device Description
(*DEVD) objects with the Object Attribute (OBJATR) of DSPxxx. Just as
with using the Output File (OUTFILE) support of the DSPOBJD command, the
Receive File (RCVF) [after Declare File (DCLF)], optionally using first
an Open Query File (OPNQRYF) [if for example collating the requested
work or further refinement of the selection is desirable], can get the
data from each record of the file. Effectively, in place of DCLF
QADSPOBJD and RCVF on the equivalent\overridden-to output file, the
Receive of row-data would be performed against the VIEW that is defined
as encapsulating a query of the OBJECT_STATISTICS table-function,
created using something like the following [untested] which limits from
all-device-descriptions to just the display-device-descriptions:
DCLF DEVDSP
/* given: prior existence of the VIEW DEVDSP */
/* that selects device attributes of */
/* DSPVRT, DSPLCL, ¿others?; per: */
/* */
/* create view DevDsp */
/* ( odobnm , odobat ) */
/* as */
/* ( select */
/* OI.OBJNAME, OI.OBJATTRIBUTE */
/* from table( */
/* qsys2.object_statistics('QSYS', '*DEVD') */
/* ) as OI */
/* where OI.OBJATTRIBUTE like 'DSP%' */
/* ) */
/* */
dcl (&rcvvar) *char 1400
dcl (&rcvlen) *int 4 (1400) /* len of (&rcvvar) */
nxtDev:
rcvf /* next record from DEVDSP VIEW */
monmsg cpf0864 exec(do)
rcvmsg rmv(*yes)
goto noMorDev:
enddo
call qsys/qdcrdevd +
( &rcvvar +
&rcvlen +
'DEVD0600' +
&odobnm +
x'0000000000000000' +
)
/* do stuff, according to retrieved DevDsp info */
noMorDev:
return
The SQL could be used to perform both the request for change and the
request for selecting which devices, if there were a table-function or a
scalar function that presented the OUTQ details for a named
display-device; I am aware of neither a UDF nor UDTF for with that
capability, but if the described activity is something that might be
required somewhat more and similarly or more ad-hoc than the current
situation, then there may be value in creating a UDTF or scalar UDF(s),
to avoid having to create the CLP. Of course at that point, creating a
CLP that is much more generic and dynamic is also an option; just that
the SQL already has a nice interface for dynamic with the ability for
variable replacement, which is a bit more challenging that what is
provided for the CL [outside of REXX anyhow].
As an Amazon Associate we earn from qualifying purchases.