Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Using FHS as the output server

&pagelevel(4)&pagelevel

In the context of SDF-P, FHS is available as the output server at both program and command level. This means:

  • on the one hand, FHS-PRIV can be called by a TU program, using a TRANSVV SVC

  • on the other hand, FHS-PRIV can be called at command level by a TRANSMIT-BY-STREAM command.

Before either of these options can be used, the variable stream used by the program must be assigned to FHS, using the SERVER operand of the ASSIGN-STREAM command. Standard streams (i.e. SYSINF, SYSMSG and SYSVAR) cannot be assigned to the FHS server. This limitation exists because FHS might output structured message too and might introduce deadlock.

When FHS receives data as a result of a TRANSMIT-BY-STREAM command, it provides display services similar to those it offers in TU mode through the interfaces DISPLAY, ADDPOP and REMPOP (for further details see the “FHS” manual [19]).

Structure layout and initialization

If FHS is used as an output server, the structure layout for FHS must be defined and initialized with particular values. To permit this, an S procedure is supplied as element SYSFHS-CONTROL of the library $TSOS.SYSPRC.FHS.<version> (included in the delivery). The S procedure is as follows for FHS V8.3:

/set-procedure-options caller=include
/begin-parameter-declaration
/   declare-parameter -
/   "------------ std param --------------------------------*"
/                (PREFIX       (type=string,init='SYSFHS-') -
/                ,INCLUDE-FORM (type=string,init='LAYOUT') "/initialize" -
/                ,VARIABLE-NAME(type=string,init='') -
/   "------------ include specific param -------------------*"
/  " action variables " -
/                ,SERVICE      (type=string,init='*DISPLAY') -
/                ,DIAGINFO     (type=string,init='*NO') -
/                ,POP-LOCATION (type=string,init='*NONE') -
/                ,POP-LOC-IND  (type=integer,init=0) -
/                ,ROW          (type=integer,init=2) -
/                ,COLUMN       (type=integer,init=2) -
/  " resource variables " -
/                ,RESOURCE      (type=string,init='*SAME') -
/                ,MESSAGE-ID    (type=string,init='*NONE') -
/                ,MESSAGE-FIELD (type=string,init='*NONE') -
/                ,MSG-FIELD-IND (type=integer,init=0) -
/  " panel variables " -
/                ,CURSOR-OUTPUT-INDEX (type=integer,init=0) -
/                ,CURSOR-OUTPUT       (type=string,init='*NONE')  -
/                ,CURSOR-OUTPUT-POS   (type=integer,init=0) -
/                ,LOCK                (type=string,init='*NO') -
/                ,ALARM               (type=string,init='*NO') -
/                ,HARDCOPY            (type=string,init='*NO') -
/                ,AUTOTAB             (type=string,init='*YES')  -
/                ,MANDATORY           (type=string,init='*NO')  -
/                ,REFRESH             (type=string,init='*NO')  -
/                ,ACK                 (type=string,init='*NO')  -
/                ,KEYLOCK             (type=string,init='*NONE')  -
/  " field attributes " -
/                ,ATTR-LIST    (type=integer,init=0) -
/                 " number of list elements to reset       "-
/                ,FIELD     (type=string,init='*CURSOR') -
/                ,FIELD-IND (type=string,init='0') -
/                ,TYPE      (type=string,init='*UNCHANGED') -
/                ,HILITE    (type=string,init='*UNCHANGED') -
/                ,INTENSITY (type=string,init='*UNCHANGED') -
/                ,COLOR     (type=string,init='*UNCHANGED') -
/                ,OUTPUT    (type=string,init='*UNCHANGED') -
/   " input information " -
/                ,COMMAND               (type=string,init='') -
/                ,FHS-VERSION           (type=string,init='') -
/                ,CURSOR-INPUT          (type=string,init='') -
/                ,CURSOR-INPUT-INDEX    (type=integer,init=0) -
/                ,CURSOR-INPUT-POS      (type=integer,init=0) -
/                )
/end-parameter-declaration
/
/if (upper-case(INCLUDE-FORM) == 'LAYOUT')
/
/begin-structure ATTR,scope=proc
/   declare-element -
/                    (FIELD     (type=string) -
/                    ,FIELD-IND (type=string) -
/                    ,TYPE      (type=string) -
/                    ,HILITE    (type=string) -
/                    ,INTENSITY (type=string) -
/                    ,COLOR     (type=string) -
/                    ,OUTPUT    (type=string) -
/                    )
/end-structure
/
/begin-structure name=&PREFIX.LAYOUT,scope=proc
/  declare-element STD-HEADER(type=structure(&PREFIX.FHDR))
/  declare-element -
/  " action variables " -
/                  (SERVICE      (type=string) -
/                  ,DIAGINFO     (type=string) -
/                  ,POP-LOCATION (type=string) -
/                  ,POP-LOC-IND  (type=integer) -
/                  ,ROW          (type=integer) -
/                  ,COLUMN       (type=integer) -
/  " resource variables " -
/                  ,RESOURCE         (type=string) -
/                  ,MESSAGE-ID       (type=string) -
/                  ,MESSAGE-FIELD    (type=string) -
/                  ,MSG-FIELD-IND    (type=integer) -
/  " panel variables " -
/                  ,CURSOR-OUTPUT-INDEX (type=integer) -
/                  ,CURSOR-OUTPUT       (type=string)  -
/                  ,CURSOR-OUTPUT-POS   (type=integer) -
/                  ,LOCK                (type=string)  -
/                  ,ALARM               (type=string)  -
/                  ,HARDCOPY            (type=string)  -
/                  ,AUTOTAB             (type=string)  -
/                  ,MANDATORY           (type=string)  -
/                  ,REFRESH             (type=string)  -
/                  ,ACK                 (type=string)  -
/                  ,KEYLOCK             (type=string)  -
/                  )
/  " field attributes "
/  declare-element ATTR            (type=struc(attr))
/                 ,mult-elem=list
/
/   " input information " -
/   declare-element -
/                  (COMMAND               (type=string) -
/                  ,FHS-VERSION           (type=string) -
/                  ,CURSOR-INPUT          (type=string) -
/                  ,CURSOR-INPUT-INDEX    (type=integer) -
/                  ,CURSOR-INPUT-POS      (type=integer) -
/                  )
/end-structure
/
/else-if (upper-case(INCLUDE-FORM) == 'INITIALIZE')
/
/   if (VARIABLE-NAME == '')
/      write-text '%  mandatory parameter variable-name missing.'
/      raise-error
/   end-if
/  declare-variable PARAM(type=string)
/  SYSPRC-NAME = '$.SYSPRC.FHS.083'
/  IF ( SDF-P-VERSION >= 'V02.0A00' ) 
/     SYSPRC-NAME  = INSTALLATION-PATH -
/                     ( LOGICAL-ID        = 'SYSPRC' -
/                      ,INSTALLATION-UNIT = 'FHS' -
/                      ,VERSION           = 'V08.3' -
/                      ,DEFAULT-PATH-NAME = '&SYSPRC-NAME')
/  END-IF 
/  include-procedure *lib-elem(lib=&SYSPRC-NAME,el=FHDR) -
/   "------------ std param --------------------------------*"
/               ,(INCLUDE-FORM='INITIALIZE' -
/                ,VARIABLE-NAME='&VARIABLE-NAME..STD-HEADER' -
/   "------------ include specific param -------------------*"
/                ,UNIT ='FHS',  "fhs unit name" -
/                ,FUNCTION ='DISPLAY', "fhs fc for display?" -
/                ,VERSION = 2 "control variable layout version"-
/                )
/
/   for PARAM = -
/                  ('SERVICE'             -
/                  ,'DIAGINFO'            -
/                  ,'POP-LOCATION'        -
/                  ,'POP-LOC-IND'         -
/                  ,'ROW'                 -
/                  ,'COLUMN'              -
/                  ,'RESOURCE'            -
/                  ,'MESSAGE-ID'          -
/                  ,'MESSAGE-FIELD'       -
/                  ,'MSG-FIELD-IND'       -
/                  ,'CURSOR-OUTPUT-INDEX' -
/                  ,'CURSOR-OUTPUT'       -
/                  ,'CURSOR-OUTPUT-POS'   -
/                  ,'LOCK'                -
/                  ,'ALARM'               -
/                  ,'HARDCOPY'            -
/                  ,'AUTOTAB'             -
/                  ,'MANDATORY'           -
/                  ,'REFRESH'             -
/                  ,'ACK'                 -
/                  ,'KEYLOCK'             - 
/                  ,'COMMAND'             -
/                  ,'FHS-VERSION'         -
/                  ,'CURSOR-INPUT'        -
/                  ,'CURSOR-INPUT-INDEX'  -
/                  ,'CURSOR-INPUT-POS'    -
/                  )
/         &VARIABLE-NAME..&PARAM = &PARAM
/   end-for
/
/   if (ATTR-LIST > 0)
/      I = 1
/      while ( I <= ATTR-LIST )
/         for PARAM = -
/                    ('FIELD'     -
/                    ,'FIELD-IND' -
/                    ,'TYPE'      -
/                    ,'HILITE'    -
/                    ,'INTENSITY' -
/                    ,'COLOR'     -
/                    ,'OUTPUT'    -
/                    )
/            &VARIABLE-NAME..ATTR#I.&PARAM = &PARAM
/         end-for
/         I=I+1
/      end-while
/   end-if
/
/else
/  write-text '%  form=&INCLUDE-FORM not supported; include aborts'
/  raise-error
/end-if
/EXIT-PROCEDURE

Note

This procedure contains an Include which links in the standard header. This is an S procedure, supplied with SDF-P, which is responsible for function identification and return code data (for further details see under TRANSMIT-BY-STREAM on "SDF-P commands ").

Example

The following sample procedure illustrates how the variable MYVAR is declared and initialized with the help of SYSFHS-CONTROL and the standard header:

/INCLUDE-PROC *LIB-ELEM(LIB=$TSOS.SYSPRC.SDF-P-BASYS.024,EL=FHDR),/(PREFIX='SYSFHS-')

/INCLUDE-PROC *LIB-ELEM(LIB=$TSOS.SYSPRC.FHS.083,EL=SYSFHS-CONTROL) 
/DECLARE-VAR MYVAR(TYPE=*STRUCT(SYSFHS-LAYOUT))
/INCLUDE-PROC *LIB-ELEM(LIB=$TSOS.SYSPRC.FHS.083,EL=SYSFHS-CONTROL),- 
/(INCLUDE-FORM=INITIALIZE,VARIABLE-NAME='MYVAR', ATTR-LIST = 2) 
/SHOW-VARIABLE MYVAR 

The variable is then generated and initialized in the following form:

MYVAR.STD-HEADER.INTERFACE-ID.UNIT = FHS
MYVAR.STD-HEADER.INTERFACE-ID.FUNCTION = DISPLAY
MYVAR.STD-HEADER.INTERFACE-ID.VERSION = 2
MYVAR.STD-HEADER.RETURNCODE.SUBCODE2 = 0
MYVAR.STD-HEADER.RETURNCODE.SUBCODE1 = 0
MYVAR.STD-HEADER.RETURNCODE.MAINCODE = CMD0001
MYVAR.SERVICE = *DISPLAY
MYVAR.DIAGINFO = *NO
MYVAR.POP-LOCATION = *NONE
MYVAR.POP-LOC-IND = 0
MYVAR.ROW = 2
MYVAR.COLUMN = 2
MYVAR.RESOURCE = *SAME
MYVAR.MESSAGE-ID = *NONE
MYVAR.MESSAGE-FIELD = *NONE
MYVAR.MSG-FIELD-IND = 0
MYVAR.CURSOR-OUTPUT-INDEX = 0
MYVAR.CURSOR-OUTPUT = *NONE
MYVAR.CURSOR-OUTPUT-POS = 0
MYVAR.LOCK = *NO
MYVAR.ALARM = *NO
MYVAR.HARDCOPY = *NO
MYVAR.AUTOTAB = *YES
MYVAR.MANDATORY = *NO
MYVAR.REFRESH = *NO
MYVAR.ACK = *NO
MYVAR.KEYLOCK = *NONE
MYVAR.ATTR(*LIST).FIELD = *CURSOR
MYVAR.ATTR(*LIST).FIELD-IND = 0
MYVAR.ATTR(*LIST).TYPE = *UNCHANGED
MYVAR.ATTR(*LIST).HILITE = *UNCHANGED
MYVAR.ATTR(*LIST).INTENSITY = *UNCHANGED
MYVAR.ATTR(*LIST).COLOR = *UNCHANGED
MYVAR.ATTR(*LIST).OUTPUT = *UNCHANGED
MYVAR.ATTR(*LIST).FIELD = *CURSOR
MYVAR.ATTR(*LIST).FIELD-IND = 0
MYVAR.ATTR(*LIST).TYPE = *UNCHANGED
MYVAR.ATTR(*LIST).HILITE = *UNCHANGED
MYVAR.ATTR(*LIST).INTENSITY = *UNCHANGED
MYVAR.ATTR(*LIST).COLOR = *UNCHANGED
MYVAR.ATTR(*LIST).OUTPUT = *UNCHANGED
MYVAR.COMMAND =
MYVAR.FHS-VERSION =
MYVAR.CURSOR-INPUT =
MYVAR.CURSOR-INPUT-INDEX = 0
MYVAR.CURSOR-INPUT-POS = 0

FHS return codes

SDF-P supplies the values of the TRANSMIT-BY-STREAM command return codes. FHS supplies the values of the return code variable for the structure which is passed back.

Name

Data type

Return values

SUBCODE2

integer

<integer>

SUBCODE1

integer

<integer>

MAINCODE

string

<name 1..7>