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