Wird FHS als Ausgabe-Server benützt, muss für FHS das Strukturlayout definiert und bestimmte Werte initialisiert werden. Dazu wird in der (ausgelieferten) Bibliothek
$TSOS.SYSPRC.FHS.<version> eine S-Prozedur (Element SYSFHS-CONTROL) mitgeliefert, die für FHS V8.3 folgendermaßen aussieht:
/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
In einem Include wird in dieser Prozedur der Standard Header eingebunden. Das ist eine S-Prozedur, die mit SDF-P mitgeliefert wird und für Funktionsidentifikationen und Returncode-Informationen zuständig ist (siehe dazu Kommando TRANSMIT-BY-STREAM auf "TRANSMIT-BY-STREAM Variablen übertragen ").Hinweis
Beispiel
Die folgende Beispielprozedur illustriert, wie die Variable MYVAR mithilfe von SYSFHS-CONTROL und dem Standard Header deklariert und initialisiert wird.
/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
Die Variable wird dann in der folgenden Form generiert und initialisiert:
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-Returncodes
SDF-P belegt die Kommando-Returncodes von TRANSMIT-BY-STREAM. Die Returncode-Variable der zurückgegebenen Struktur wird von FHS belegt.
Name | Datentyp | Returnwerte |
SUBCODE2 | integer | <integer> |
SUBCODE1 | integer | <integer> |
MAINCODE | string | <name 1..7> |