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> |