HVAX-11 Bliss-16 T2.1-46426-Mar-1981 09:09:10 #=Pf 6EZn'I v :No0 ey&0DR[n(2Ocw'>S_~#1 l ) F T o }        $ + 5 U i      B$STR$V_OPTION1z$STR_ERROR_CODE# IOB$A_PROMPT STR$K_DTYPE_T; XPO$K_DONT_FILLa9XPO$V_WILD_NAME| XPO$_BAD_MEDIA$STR$DESC_TYPEB$STR$V_OPTION2 $UNIT_BLOCKVECTOR$IOB$V_MAX_VERSI| XPO$_NO_WRITE$IOB$V_REMEMBER| STR$K_COPY| STR$_NOT_TEMP|| XPO$_BAD_PROMPT$BIT` $STR$LENGTHD $STR_COMPAREWB STR$M_SIGNED9XPO$H_FILE_TYPE $XPO$BITS_BYTE8 $XPO_ERRORd| STR$_FAILURE XPO$H_LENGTHB XPO$K_DTYPE_Z XPO$K_LONG_INTE| XPO$K_PUT_MSGm? XPO$_ERROR| XPO$_NOT_CLOSED@$XPO$PMSG_PARMF?$XPO_FREE_ELEMENT#IOB$B_FUNCTIONR9XPO$V_WILD_NODE  $DISTINCTh $STR$$LEN_VAL  STR$H_LENGTH\ STR$K_DTYPE_Z9XPO$H_FILE_PROT XPO$K_DB_BLN XPO$H_MAXLEN| XPO$_BAD_SYNTAX$FIELD# IOB$K_GETn$ IOB$T_STRING3 STR$K_DB_BLN{| XPO$_BAD_ORG~| XPO$_BAD_REQI $CONTINUE?$XPO$PMSG_INIT( STR$H_MAXLEN| STR$_END_STRING9XPO$H_PGMR_NUMB9 XPO$T_DIRECT8 $XPO_INPUTVB STR$M_CENTER| STR$_BAD_REQv| XPO$_BAD_IO_OPTy| XPO$_BAD_NEW@r$XPO$ERROR_VAL$XPO$SHOW_INFO ; XPO$K_FILL_UNITl| XPO$_BAD_ALIGNo| XPO$_BAD_DELIM $XPO$BITS_WORD| STR$K_BINARY'B STR$V_SIGNEDf$ASCIIDr$STR$ERROR_VALK$ IOB$V_EOFo STR$K_STOP| XPO$_BAD_VERms $XPO_OK_CODE# XPO$B_MINUTE9XPO$H_PROJ_NUMB| XPO$_BAD_LOGICF$ALIGNF $BLOCK$ IOB$A_OUTPUT$IOB$G_REC_NUMBZ$IOB$V_TERMINAL XPO$H_PFXLEN9XPO$T_FILE_TYPE| XPO$_NOT_ONLINE$ $IOB$FILLER0s $STR_OK_CODE_B STR$M_TARGET| STR$_BAD_LOGICl? XPO$_WARNINGP# $BIN$DECLARE$ $IOB$FILLER1/ $XPO$CONFLICT$XPO$SHOW_NUMB- STR$H_PFXLEN$ $IOB$FILLER29XPO$T_FILE_PROT| XPO$_NO_READ$ $IOB$FILLER3% IOB$T_PROMPT"B STR$V_CENTERk? XPO$_SUCCESS$ $IOB$FILLER4` STR$K_BASE2| XPO$_MISSING$ $IOB$FILLER5 :XPO$V_WILD_PGMR$ $IOB$FILLER6! $XPO$BIN_DESC$XPO$KEY_WORDSq? XPO$K_PUT_STR99XPO$V_SPEC_STAT| XPO$_BAD_CLASS| XPO$_BAD_PTR| XPO$_NO_FILE$ $IOB$FILLER7+ $XPO$B_FIELDS# IOB$B_LEVEL$IOB$G_BLK_SIZEA$ IOB$V_STATUS| STR$K_PSEUDO| XPO$_NOT_EXPIRE$ $IOB$FILLER8a $STR$CON_DECL ; $XPO_GET_MEM$IOB$G_REC_SIZEUB STR$M_RIGHT_JUS| STR$_BAD_CLASS| STR$_BAD_PTR XPO$K_TINY_INTE| XPO$_GET_MEM$ $IOB$FILLER9E $STR$B_FIELDS $XPO_DESCTB STR$M_LEFT_JUSTOB STR$V_TARGET$IOB$G_PREV_REC` STR$K_BASE8]B STR$M_NO_FREE_T# XPO$B_DAYp9XPO$V_WILD_ATTR:XPO$V_WILD_PROJ $STR_DESC $XPO$F_FIELDS>r $XPO$OK_VAL$XPO$2ND_ACTUALr $XPO$COMP_DEFk STR$K_DV_BLN XPO$K_STRING| XPO$_BAD_ORDER| XPO$_NO_NODE5 $STR$F_FIELDSBr $STR$OK_VALs $STR$COMP_DEF$IOB$G_SEQ_NUMB"% IOB$H_CHANNEL# IOB$K_CLOSEv#$BIN$LOCAL_INIT# IOB$A_RELATED XPO$K_SHORT_INT $XPO$REQUIRED XPO$K_CLASS_DB| XPO$_PREV_ERROR$SHORT_INTEGERo $STR_SCAN $XPO$DISTINCTE? $XPO$FREE_ELEM_LEN $XPO$KEY_OK# IOB$K_PUTBSTR$V_RIGHT_JUSf9XPO$V_WILD_TYPE| XPO$_HOST_ERROR& IOB$T_OUTPUT STR$K_CLASS_DBBSTR$V_LEFT_JUST| XPO$_FILE_LOCKi $DESCRIPTOR&$IOB$GET_LENGTH $XPO$FIELDT?$XPO_TERMINATE# IOB$A_DEFAULTEBSTR$V_NO_FREE_T| XPO$_TERMINATE $ IOB$V_OUTPUT| STR$_NULL_STRNG XPO$K_BIT| XPO$_CHAN_USED| XPO$_NETWORK| XPO$_PROTECTED| XPO$_TRUNCATED% IOB$A_FCS_FDB` STR$K_DAY| XPO$K_FREE_MEM $XPO$TEMP1XB STR$M_UNSIGNED| STR$_TRUNCATEDt| XPO$_BAD_DTYPE` $STR$FUNCTION $UNIT_FIELD $XPO$TEMP29XPO$A_FILE_VER-$ $IOB$FILLBIT`B $STR_OPTIONSb $XPO$KEY_NAME| STR$_BAD_DTYPE| XPO$_NO_ACCESS| XPO$_NO_OPEN@$XPO$$PMSG_PARM| XPO$_NO_DELETE$ADDRESS| XPO$_NO_CREATE}$BYTES| XPO$_IO_BUFFER $XPO_DESC_INITt1 $XPO_OPENt$XPO_WARN_CODE| XPO$_NO_BACKUP| XPO$_NO_TEMP| XPO$_OPENMa $STR$CON_ARGS@$XPO$$PMSG_INIT89$XPO$SPEC_FIELD+ $XPO_DELETEH9 XPO$V_SFD?$STR_DESC_INIT&t$STR_WARN_CODE  $UNIT_BLOCK $XPO$FORCE' STR$K_XT_BLN| STR$_NO_TEMP9XPO$H_FILE_VER9 XPO$K_SPEC_LEN| XPO$_NO_APPEND| XPO$_NO_CONCAT| XPO$_NO_RENAME$ IOB$Z_CREATED\B STR$M_TRUNCATE,BSTR$V_UNSIGNED>9XPO$V_DIR_NAME$XPO$1ST_ACTUAL$XPO$FULL_BASEDC) $XPO_BACKUP $LITERAL $STR$DECLARE| XPO$_NO_DIRECT$INTEGER*6 $XPO_RENAME% IOB$T_RELATED XPO$B_CLASS# XPO$K_TIME_LEN| XPO$_CORRUPTED$STR_FREE_TEMPb$XPO$DESC_CLASS| XPO$_NO_SUPPORT/a $STR$CON_INITZZ $STR_APPEND` $STR_CONCAT STR$B_CLASS STR$K_DTYPE_XXX| XPO$_CLOSED$STR$DESC_CLASS?$XPO$$CONFLICT| STR$_NO_SUPPORT1  $XPO$MASK_SETg% IOB$T_DEFAULTSTR$K_CLASS_DVmO $STR_COPY $STR$STR_DESC$ IOB$A_DATA% IOB$A_RMS_FAB$ IOB$H_UNITSBSTR$V_FUNCTION@BSTR$V_TRUNCATE?r $XPO$WARN_VALr? $XPO_PUT_MSG| XPO$_PUT_MSG9XPO$T_FILE_VER| XPO$_BAD_DATACr $STR$WARN_VAL| XPO$_BAD_ACCTk| XPO$_BAD_ADDR| XPO$_NOT_OUTPUTY $XPO$VALUE %IOB$A_BUFFER_CB# XPO$B_100THS*9$XPO_TEMPORARY XPO$K_LEVEL$XPO$DESCRIPTORC9 XPO$V_PPNW9XPO$V_WILD_DEV\9XPO$V_WILD_DIR`$BASE$STR$LOCAL_INIT9 XPO$A_EXTRAp| XPO$_BAD_DESC| XPO$_NO_SUBDIR| STR$_BAD_CHAR| STR$_OUT_RANGE| XPO$K_PARSE $LONG_INTEGERh $STR_BINARY| STR$_BAD_DESC XPO$A_ADDRESS XPO$K_DTYPE_BUx| XPO$_BAD_NAME XPO$B_DTYPE# XPO$B_MONTH XPO$K_B_BLNf$XPO$EX_FAILURE$XPO$SHOW_FIELD$ IOB$V_INPUT STR$A_ADDRESS` STR$K_BASE10e| XPO$_NORMAL2 $XPO$DEFAULT% IOB$A_RMS_RAB STR$B_DTYPE2 STR$K_B_BLN  XPO$K_D_BLN| XPO$_WILDCARD $FIELD_SET_UNITS$POINTERa $STR_FORMAT|@$XPO$PMSG_FIXED $XPO$SET_SIZE# IOB$B_VERSIONc| STR$_NORMALH$OVERLAY? $XPO$NAME15& STR$K_D_BLN9 XPO$H_EXTRAz| XPO$_BAD_NODEiB $STR$OPT_INITq $XPO$KEY_TESTE $STR$COMPARE $XPO$SHOW_LIT#IOB$A_FILE_SPEC STR$K_CLASS_XT% STR$K_F_BLN XPO$F_FAILURE$XPO$FULL_INDEX$ IOB$Z_REVISED` STR$K_BASE16 XPO$G_FAILUREB$STR$OPT_FIELDS: $XPO$ARG1:?$XPO$FREE_ELEMENTr| XPO$_BAD_DFLT< $XPO$ARG2}$ IOB$T_DATA XPO$I_FAILURE XPO$K_ADDRESS| XPO$_BAD_SPEC> $XPO$ARG3 XPO$K_BYTESk9XPO$V_WILD_VER| XPO$_CONFLICT$IOB$G_COMP_CODE XPO$K_FAILUREm| XPO$_BAD_ARGS` $STR$COPY_OPT $STR$LITERAL% IOB$A_RSTS_CB| STR$K_COMPARE| STR$_CONFLICT| STR$_NO_STRING| XPO$_NO_MEMORY#IOB$A_ASSOC_IOB$IOB$A_BACK_TYPE<$IOB$V_SEQUENCEDq| XPO$_BAD_DEVICEj| XPO$_END_FILE  $SUB_FIELDf$STR$FORMAT_KEY& $XPO$IO_CALL$XPO$MAX_FULLWD XPO$P_FAILURE9 XPO$T_EXTRA$IOB$H_PAGE_NUMB XPO$K_INTEGER  XPO$K_S_BLN $XPO$PAREN_TESTl'$XPO_IOB $TINY_INTEGER' STR$K_S_BLN$BITS=# $XPO$BIN_LEN$XPO$UNIT_INDEX| XPO$_BAD_RLTD| XPO$_BAD_TEMPx$BYTE5o$STR$BINARY_OPT $SUB_BLOCKI STR$K_V_BLNn| XPO$_BAD_CONCAT(% $IOB$FIELDSC$STR_GEQ $XPO$$PAREN= $XPO_FREE_MEM,$XPO_GET# IOB$K_OPEN XPO$K_Z_BLN| XPO$_EXISTS| XPO$_FREE_MEM| XPO$_NOT_INPUT# IOB$K_DELETE1%IOB$T_FILE_SPEC9XPO$A_FILE_NAME| XPO$_BAD_ATTRs| XPO$_BAD_DIRECT| XPO$_BAD_SIZE`$CONCATf$STR$FORMAT_OPT|$XPO_FATAL_CODE4 STR$K_Z_BLN XPO$K_CLASS_B| XPO$_REC_LOCK%IOB$G_USER_CODE| XPO$K_IO| XPO$_IN_USE~B$STR_EQLL|$STR_FATAL_CODEC$STR_LEQ# IOB$K_BACKUP  STR$A_POINTER STR$K_CLASS_BZB STR$M_LEADING_B XPO$K_CLASS_D$REF_DESCRIPTOR$ IOB$V_OPTIONS# XPO$G_DATE}| XPO$_BAD_RECORD| XPO$_NO_SEQB$STR_NEQ# IOB$K_RENAMEd$IOB$V_CONC_SPEC STR$K_CLASS_D^B STR$M_REMAINDER XPO$K_CLASS_Fi| XPO$_NEW_PAGE@$XPO$EX_ROUTINE| STR$_BAD_STRNG19 XPO$A_NODEa  $BLOCKVECTORkh $STR$LEN_VAL$IOB$G_2ND_CODEi$IOB$V_CH_ASSIGN STR$K_CLASS_F| STR$_BAD_STRNG29XPO$H_FILE_NAMEw| XPO$_BAD_LENGTH| XPO$_BAD_TYPEn? XPO$_FATAL| XPO$_NO_SPACE| XPO$_SYS_ERROR $XPO$MAX_BIT5&IOB$T_BACK_TYPE| XPO$K_GET_MEMh| XPO$_NEW_FILEk $XPO$KEYWORD| STR$_BAD_LENGTH| STR$_NO_SPACEo? XPO$_NO_SEV $SHOWg $STR_ASCIIY$XPO$KEY_CHECKF$ IOB$V_OPEN` STR$K_DATE| XPO$_BAD_PROT| XPO$_BAD_RSLT| XPO$_PRIVILEGED $LENGTH XPO$K_POINTER. $XPO_IOB_INIT$IOB$H_FULLWORDS# IOB$H_LENGTH#$IOB$V_ATTRIBUTE6BSTR$V_LEADING_B| STR$_BAD_MAXLENo STR$K_FINDz9 XPO$H_NODE# $IOB$FIELDS_1^D$STR_GTRAr$XPO$FATAL_VAL# IOB$T_CONCAT[B STR$M_UP_CASEJBSTR$V_REMAINDER| STR$_BAD_TARGETu| XPO$_BAD_FORMAT# $IOB$FIELDS_2h$STR$INT_RESULT'% IOB$K_LENGTH@?XPO$A_FREE_LINK| XPO$_BAD_RECNUMg| XPO$_INCOMPLETEEr$STR$FATAL_VAL$XPO$$KEY_TEST8 $XPO_OUTPUT$ IOB$V_APPEND9 XPO$A_DEVICE XPO$K_VERSION| STR$K_SCAN| XPO$_NO_CLOSE| XPO$_NO_STACK& $FIELD_SET_SIZEna$FORMAT` $STR$OPTIONS#$XPO$DT_FIELDSP$ IOB$V_CLOSED# XPO$B_YEAR>C$STR_LSSU$IOB$V_AUTO_CONC9XPO$T_FILE_NAME9$XPO_SPEC_BLOCK STR$K_CLASS_S| XPO$_NO_CHANNELz* $XPO_CLOSE# XPO$G_TIME| XPO$_RENAME_OLD $XPO$BITSgh$STR$ASCII_KEY7$ IOB$V_RECORD STR$K_CLASS_V;B STR$V_UP_CASE9 XPO$H_DEVICE XPO$K_DESCRIPTO XPO$K_REF_DESCRf| XPO$_CREATED $XPO_DUMP_FIELD4$XPO_PUT#$XPO_TIME_BLOCK#IOB$T_RESULTANT| STR$_BAD_SOURCEp? XPO$K_PUT_COD| XPO$_CHANNEL XPO$K_CLASS_Zu9 XPO$T_NODE$XPO$BIT_INDEX $XPO$TEMPx$ IOB$A_STRING| XPO$_FOREGROUNDFr$XPO_COMP_CODES_$IOB$V_TEMPORARY$ IOB$Z_USER STR$K_CLASS_Z` STR$K_TIMEYB STR$M_LEADING_Z9 XPO$A_DIRECT$SIXBIT XPO$K_BITSr$STR_COMP_CODES($ IOB$V_BINARY& $IOB$STRING$XPO_DESCRIPTORo STR$K_SPAN XPO$K_BYTE XPO$K_SUB_BLOCKM9XPO$V_WILD_CARD| XPO$_BAD_MEMORYk&$IOB$NOT_ALLOWED$IOB$V_OVERWRITE# XPO$B_HOUR| XPO$_BAD_IOB$STRING$STR_DESCRIPTOR| STR$_BAD_PATTRN| XPO$_IO_ERROR| XPO$_RENAME_NEWg$STR$ASCII_OPTs$ IOB$H_STRING` STR$K_DFLT_FUNC9XPO$A_FILE_TYPE| XPO$_NOT_OPEN| STR$_TOO_LONG9 XPO$H_DIRECT't$XPO_ERROR_CODEB STR$V_OPTIONS;?XPO$H_FREE_SIZE; XPO$K_FILL_FULL9 XPO$T_DEVICE;:$XPO_PARSE_SPEC2$ IOB$V_STREAM| STR$K_APPEND1BSTR$V_LEADING_Z9XPO$A_FILE_PROT4%EXPAND %REMAINING %IF%NULL( )%THEN%WARN( , parameter must be specified)%QUOTE %EXITMACRO%FI%EXPAND$XPO$$CONFLICT( , %REMAINING)U %IF%NULL(%EXPAND%REMOVE( ))%THEN+%FI%EXPAND$XPO$$CONFLICT( %REMAINING) %ASSIGN( $XPO$KEY_OK,)$XPO$$KEY_TEST( ,%REMOVE( ))%NUMBER( $XPO$KEY_OK)"%ASSIGN( $XPO$KEY_OK,)$XPO$$KEY_TEST( ,%REMOVE( ))%IF $XPO$KEY_OK%THEN%ELSE%PRINT(", ," is an invalid , , parameter value)%MESSAGE(", ," is an invalid , , parameter value)%WARN( ... possible values are ,$XPO$KEY_WORDS(%REMOVE( )))%FI %IF %IDENTICAL( , )%THEN%ASSIGN( $XPO$KEY_OK,)%ELSE$XPO$$KEY_TEST( , %REMAINING)%FI%IF%COUNT#%THEN, ,%FI%STRING( ) %IF%NULL( )%THEN%ELSE $XPO$$PAREN(%REMOVE( ), )%FI%IF%LENGTH"%THEN%IF %IDENTICAL( , )%THEN %EXITMACRO%FI%FI   34 :%IF%NULL( )%THEN%BLISS16(BLISS)%BLISS32(BLISS)%BLISS36(BLISS36C)%ELSE %FI%BLISS32( ( LONG_RELATIVE));%IF$XPO$KEY_CHECK( ,( XPO$FAILURE,XPO$IO_FAILURE,XPO$PS_FAILURE,XPO$GM_FAILURE,XPO$FM_FAILURE, STR$FAILURE, STR$X_FAILURE, STR$C_FAILURE, STR$A_FAILURE, STR$S_FAILURE, STR$B_FAILURE))%THEN%EXPAND $XPO$FORCE($XPO$EX_ROUTINE( ))%FI%INFORM(0XPO$I_FAILURE has been renamed to XPO$IO_FAILURE)XPO$IO_FAILURE%INFORM(0XPO$F_FAILURE has been renamed to XPO$FM_FAILURE)XPO$FM_FAILURE%INFORM(0XPO$G_FAILURE has been renamed to XPO$GM_FAILURE)XPO$GM_FAILURE%INFORM(0XPO$P_FAILURE has been renamed to XPO$PM_FAILURE)XPO$PM_FAILURE%IF%NULL( )%THEN %ELSE %FI %NAME( %EXACTSTRING(MIN( %CHARCOUNT(%STRING( %REMAINING)),),, %REMAINING)) [ $XPO$NAME15( , )]= ; $XPO$NAME15( ,K_, )%IF%NULL( )%THEN%WARN( Null keyword specified)%ELSE [ $XPO$NAME15( ,V_, )]=;%FI%%IF $ %THEN%ASSIGN( $XPO$TEMP, / )$XPO$SHOW_NUMB(%NUMBER( $XPO$TEMP), )%FI%ASSIGN( $XPO$TEMP, ' )%IF $XPO$TEMP! %THEN%ASSIGN( $XPO$TEMP,%C0+ $XPO$TEMP)%ELSE%ASSIGN( $XPO$TEMP,%CA+ $XPO$TEMP- )%FI,%CHAR( $XPO$TEMP)  F%ASSIGN($XPO$FULL_BASED,)%ASSIGN($XPO$FULL_INDEX,)%ASSIGN($XPO$BIT_INDEX,)%ASSIGN($XPO$MAX_FULLWD,)%ASSIGN( $XPO$MAX_BIT,)%IF%BLISS(BLISS32)%THEN%IF$XPO$FIRST_$FIELD%THEN%ASSIGN($XPO$FIRST_$FIELD,)%IF %DECLARED(%QUOTE $DESCRIPTOR)%THEN9$XPO$VMS_DESCRIPTOR(STRING)=%EXPAND $DESCRIPTOR(STRING)%;A%QUOTE $DESCRIPTOR;9 $DESCRIPTOR(STRING)=%IF %IDENTICAL(STRING,%STRING(STRING))%THEN$XPO$VMS_DESCRIPTOR(STRING)%ELSE$XPO$DESCRIPTOR(STRING)%FI%;%ELSE9 $DESCRIPTOR(KEYWORD)=$XPO$DESCRIPTOR(KEYWORD)%;%FI%FI%FIp$FIELD%ASSIGN($XPO$FULL_BASED,)%IF U%BPVAL %THEN%ASSIGN( $XPO$BITS,)%IF %THEN%IF$XPO$SHOW_INFO%THEN%INFORM(/space reserved for field but null field defined)%FI%FI%ELSE%ASSIGN( $XPO$BITS, )%FI%IF%BLISS(BLISS32) $XPO$BITS+$XPO$BIT_INDEXU%BPVAL%THEN$ALIGN(FULLWORD)%IF$XPO$SHOW_INFO%THEN%INFORM()BLISS fullword alignment has been assumed)%FI%FI%IF$XPO$FULL_BASED%THEN%ASSIGN($XPO$1ST_ACTUAL,$XPO$FULL_INDEX)%ASSIGN($XPO$2ND_ACTUAL,$XPO$BIT_INDEX)%ASSIGN($XPO$UNIT_INDEX,$XPO$FULL_INDEX*%UPVAL+$XPO$BIT_INDEX/%BPUNIT)%ELSE%ASSIGN($XPO$1ST_ACTUAL,$XPO$FULL_INDEX*%UPVAL+$XPO$BIT_INDEX/%BPUNIT)%ASSIGN($XPO$2ND_ACTUAL,$XPO$BIT_INDEX'%BPUNIT)%ASSIGN($XPO$UNIT_INDEX,$XPO$1ST_ACTUAL)%FI$XPO$1ST_ACTUAL,$XPO$2ND_ACTUAL, $XPO$BITS, %IF$XPO$SHOW_FIELD%THEN%PRINT( [,%NUMBER($XPO$1ST_ACTUAL),,,%NUMBER($XPO$2ND_ACTUAL),,,%NUMBER( $XPO$BITS),,, ,] (+,%IF%BLISS(BLISS32)%THEN%X'$XPO$SHOW_NUMB($XPO$UNIT_INDEX,),%ELSE%O'$XPO$SHOW_NUMB($XPO$UNIT_INDEX,),%FI'))%FI%ASSIGN($XPO$FULL_INDEX,$XPO$FULL_INDEX+(($XPO$BIT_INDEX+ )/%BPVAL))%ASSIGN($XPO$BIT_INDEX,($XPO$BIT_INDEX+ )'%BPVAL)%IF$XPO$FULL_INDEXU$XPO$MAX_FULLWD($XPO$FULL_INDEX"$XPO$MAX_FULLWD$XPO$BIT_INDEXU $XPO$MAX_BIT)%THEN%ASSIGN($XPO$MAX_FULLWD,$XPO$FULL_INDEX)%ASSIGN( $XPO$MAX_BIT,$XPO$BIT_INDEX)%FIq%IF $XPO$KEY_TEST( ,(`,n,FULLWORD,UNIT))%THEN %EXITMACRO%FI%IF %IDENTICAL( ,FULLWORD)%THEN%IF$XPO$BIT_INDEXU%THEN%ASSIGN($XPO$FULL_INDEX,$XPO$FULL_INDEX+)%ASSIGN($XPO$BIT_INDEX,)%FI %EXITMACRO%FI%IF %IDENTICAL( ,`)%THEN%IF($XPO$BIT_INDEX'$XPO$BITS_BYTE)"%THEN %EXITMACRO%FI%ASSIGN($XPO$BIT_INDEX,$XPO$BIT_INDEX-($XPO$BIT_INDEX'$XPO$BITS_BYTE)+$XPO$BITS_BYTE)%FI%IF %IDENTICAL( ,n)%THEN%IF($XPO$BIT_INDEX'$XPO$BITS_WORD)"%THEN %EXITMACRO%FI%ASSIGN($XPO$BIT_INDEX,$XPO$BIT_INDEX-($XPO$BIT_INDEX'$XPO$BITS_WORD)+$XPO$BITS_WORD)%FI%IF %IDENTICAL( ,UNIT)%THEN%IF($XPO$BIT_INDEX'%BPUNIT)"%THEN %EXITMACRO%FI%ASSIGN($XPO$BIT_INDEX,$XPO$BIT_INDEX-($XPO$BIT_INDEX'%BPUNIT)+%BPUNIT)%FI%IF$XPO$BIT_INDEX$%BPVAL%THEN%ASSIGN($XPO$FULL_INDEX,$XPO$FULL_INDEX+)%ASSIGN($XPO$BIT_INDEX,)%FIn%IF%LENGTH#%LENGTH#%THEN%WARN( Invalid argument list) %EXITMACRO%FI%IF%LENGTH"%THEN%IF$XPO$FULL_BASED%THEN%ASSIGN($XPO$FULL_INDEX, )%ASSIGN($XPO$BIT_INDEX, )%ELSE%ASSIGN($XPO$FULL_INDEX,( )/%UPVAL)%ASSIGN($XPO$BIT_INDEX,( )+(( )'%UPVAL)*%BPUNIT)%FI%ELSE%IF %DECLARED(%NAME( ))%THEN%WARN( , is not defined) %EXITMACRO%FI%IF$XPO$FULL_BASED%THEN%ASSIGN($XPO$FULL_INDEX, %FIELDEXPAND( ,))%ASSIGN($XPO$BIT_INDEX, %FIELDEXPAND( ,))%ELSE%ASSIGN($XPO$FULL_INDEX, %FIELDEXPAND( ,)/%UPVAL)%ASSIGN($XPO$BIT_INDEX, %FIELDEXPAND( ,)+( %FIELDEXPAND( ,)'%UPVAL)*%BPUNIT)%FI%FI%IF$XPO$FULL_INDEXU$XPO$MAX_FULLWD($XPO$FULL_INDEX"$XPO$MAX_FULLWD$XPO$BIT_INDEXU $XPO$MAX_BIT)%THEN%ASSIGN($XPO$MAX_FULLWD,$XPO$FULL_INDEX)%ASSIGN( $XPO$MAX_BIT,$XPO$BIT_INDEX)%FI%ASSIGN($XPO$FULL_INDEX,$XPO$MAX_FULLWD)%ASSIGN($XPO$BIT_INDEX, $XPO$MAX_BIT) %ASSIGN($XPO$FULL_INDEX,)%ASSIGN($XPO$BIT_INDEX,),,,$BYTES() $XPO$FIELD(( )*$XPO$BITS_BYTE,,) $XPO$FIELD(%BPVAL,,) $XPO$FIELD($XPO$BITS_BYTE,,) $XPO$FIELD(*$XPO$BITS_BYTE,,) $XPO$FIELD(*$XPO$BITS_BYTE,,) $XPO$FIELD(%BPADDR,,) $XPO$FIELD(%BPVAL,,)$BITS() $XPO$FIELD(( ),,)$ALIGN(FULLWORD)%IF%NULL( )%THEN $XPO$FIELD(,,)%ELSE $XPO$FIELD(( )*%BPVAL,,)%FI0%IF%NULL( )%THEN%IF $XPO$KEY_TEST( ,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED, UNDEFINED,STATIC,VARYING,DYNAMIC_VARYING))%THEN,,, %EXITMACRO%FI%FI%IF %IDENTICAL( ,BOUNDED) %IDENTICAL( ,DYNAMIC_BOUNDED) %IDENTICAL( ,VARYING) %IDENTICAL( ,DYNAMIC_VARYING)%THEN $SUB_BLOCK( STR$K_B_BLN)%ELSE $SUB_BLOCK( STR$K_F_BLN)%FI0%IF%NULL( )%THEN%IF $XPO$KEY_TEST( ,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED, UNDEFINED,STATIC,VARYING,DYNAMIC_VARYING))%THEN,,, %EXITMACRO%FI%FI%IF %IDENTICAL( ,BOUNDED) %IDENTICAL( ,DYNAMIC_BOUNDED) %IDENTICAL( ,VARYING) %IDENTICAL( ,DYNAMIC_VARYING)%THEN $SUB_BLOCK( STR$K_B_BLN)%ELSE $SUB_BLOCK( STR$K_F_BLN)%FI$ADDRESS $ALIGN(UNIT) $XPO$FIELD(( )*%BPUNIT,,)%WARN(7Six-bit strings are not available for this architecture)%INFORM()$LENGTH is obsolete - use $FIELD_SET_SIZE)$FIELD_SET_SIZE%IF$XPO$FULL_BASED%THEN%WARN(0$FIELD_SET_SIZE may not be used with $UNIT_FIELD)%FI%ASSIGN( $XPO$SET_SIZE,$XPO$FULL_INDEX+($XPO$BIT_INDEX#))%NUMBER( $XPO$SET_SIZE)%IF $XPO$SHOW_LIT%THEN%PRINT( ,%NUMBER( $XPO$SET_SIZE), fullwords)%FI%ASSIGN($XPO$FULL_BASED,)%ASSIGN( $XPO$SET_SIZE,$XPO$FULL_INDEX*%UPVAL+(($XPO$BIT_INDEX+%BPUNIT-)/%BPUNIT))%NUMBER( $XPO$SET_SIZE)%IF $XPO$SHOW_LIT%THEN%PRINT( ,%NUMBER( $XPO$SET_SIZE),  addressable units)%FI%ASSIGN($XPO$FULL_BASED,)%ASSIGN( $XPO$DISTINCT,)&%ASSIGN( $XPO$DISTINCT, $XPO$DISTINCT+)%NUMBER( $XPO$DISTINCT)%IF $XPO$SHOW_LIT%THEN%PRINT( ,%NUMBER( $XPO$DISTINCT))%FI%IF%LENGTH#%LENGTH#%THEN%WARN( Invalid argument list),,, %EXITMACRO%FI%IF %DECLARED( )%THEN%WARN(", , " has not been declared),,, %EXITMACRO%FI%IF%LENGTH"%THEN%IF %DECLARED( )%THEN%WARN(", , " has not been declared),,, %EXITMACRO%FI%IF$XPO$FULL_BASED%THEN %FIELDEXPAND( ,)+ %FIELDEXPAND( ,)+(( %FIELDEXPAND( ,)+ %FIELDEXPAND( ,))/%BPVAL),( %FIELDEXPAND( ,)+ %FIELDEXPAND( ,))'%BPVAL,%ELSE %FIELDEXPAND( ,)+ %FIELDEXPAND( ,)+(( %FIELDEXPAND( ,)+ %FIELDEXPAND( ,))/%BPUNIT),( %FIELDEXPAND( ,)+ %FIELDEXPAND( ,))'%BPUNIT,%FI %FIELDEXPAND( ,), %FIELDEXPAND( ,)%ELSE%IF$XPO$FULL_BASED%THEN %FIELDEXPAND( ,)+ +(( %FIELDEXPAND( ,)+ )/%BPVAL),( %FIELDEXPAND( ,)+ )'%BPVAL,%ELSE %FIELDEXPAND( ,)+ +(( %FIELDEXPAND( ,)+ )/%BPUNIT),( %FIELDEXPAND( ,)+ )'%BPUNIT,%FI , %FI%INFORM((The $BLOCK macro is obsolete - use BLOCK)BLOCK%INFORM(4The $BLOCKVECTOR macro is obsolete - use BLOCKVECTOR) BLOCKVECTOR%IF%LENGTH#%LENGTH#%LENGTH#%THEN%WARN(Invalid number of arguments) %EXITMACRO%FIBLOCK[ %IF%LENGTH"%THEN, ;%FI%IF%BLISS(BLISS36)%THEN,`%FI]!%IF%LENGTH#%LENGTH#%LENGTH#%THEN%WARN(Invalid number of arguments) %EXITMACRO%FI BLOCKVECTOR[ %IF%LENGTHU%THEN, %FI%IF%LENGTH"%THEN, , %FI%IF%BLISS(BLISS36)%THEN,`%FI]e%IF $XPO$KEY_TEST( ,(FIELDS,LITERALS,INFO,ALL,NOFIELDS, NOLITERALS,NOINFO,NONE))%THEN %EXITMACRO%FI%IF %IDENTICAL( ,FIELDS)%THEN%ASSIGN($XPO$SHOW_FIELD,)%ELSE%IF %IDENTICAL( ,NOFIELDS)%THEN%ASSIGN($XPO$SHOW_FIELD,)%ELSE%IF %IDENTICAL( ,LITERALS)%THEN%ASSIGN( $XPO$SHOW_LIT,)%ELSE%IF %IDENTICAL( , NOLITERALS)%THEN%ASSIGN( $XPO$SHOW_LIT,)%ELSE%IF %IDENTICAL( ,INFO)%THEN%ASSIGN($XPO$SHOW_INFO,)%ELSE%IF %IDENTICAL( ,NOINFO)%THEN%ASSIGN($XPO$SHOW_INFO,)%ELSE%IF %IDENTICAL( ,ALL)%THEN%ASSIGN($XPO$SHOW_FIELD,)%ASSIGN( $XPO$SHOW_LIT,)%ASSIGN($XPO$SHOW_INFO,)%ELSE%ASSIGN($XPO$SHOW_FIELD,)%ASSIGN( $XPO$SHOW_LIT,)%ASSIGN($XPO$SHOW_INFO,)%FI%FI%FI%FI%FI%FI%FI D34XPO$DUMP_FIELD:BLISS;;1$STR$FIELD_NAME:$STR_DESCRIPTOR(STRING=%STRING( ));XPO$DUMP_FIELD($STR$FIELD_NAME, $XPO$NAME15(XPO$K_, ), ) FIELD_NAMETYPEVALUEt%IF%COUNT"%THEN%IF %DECLARED(%NAME( , ))%THEN%WARN( , , is not defined) %EXITMACRO%FI%FI%IF %DECLARED(%NAME( , ))%THEN%WARN( , , is not defined)%ELSE%IF %FIELDEXPAND(%NAME( , ),)#%THEN%WARN( , ,  is not a 1-bit field)%ELSE%ASSIGN( $XPO$TEMP,^( %FIELDEXPAND(%NAME( , ),)*%BPUNIT+ %FIELDEXPAND(%NAME( , ),)- %FIELDEXPAND(%NAME( , ),)*%BPUNIT- %FIELDEXPAND(%NAME( , ),)))%NAME( %EXACTSTRING( %CHARCOUNT( )-,, ),M_, )=%NUMBER( $XPO$TEMP)%IF $XPO$SHOW_LIT%THEN%PRINT( , %EXACTSTRING( %CHARCOUNT( )-,, ),M_, , = ,%NUMBER( $XPO$TEMP))%FI%FI%FI STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER, STR$H_MAXLEN, STR$H_PFXLEN%INFORM(%JSTR$K_DTYPE_Z is an obsolete name - use $XPO_DESCRIPTOR and XPO$K_DTYPE_BU)XPO$K_DTYPE_BU%INFORM(5STR$K_CLASS_S is an obsolete name - use STR$K_CLASS_F) STR$K_CLASS_F%INFORM(5STR$K_CLASS_V is an obsolete name - use STR$K_CLASS_B) STR$K_CLASS_B%INFORM(7STR$K_CLASS_DV is an obsolete name - use STR$K_CLASS_DB)STR$K_CLASS_DB%INFORM(%JSTR$A_ADDRESS is an obsolete field - use $XPO_DESCRIPTOR and XPO$A_ADDRESS) STR$A_POINTER%INFORM(1STR$K_S_BLN is an obsolete name - use STR$K_F_BLN) STR$K_F_BLN%INFORM(1STR$K_V_BLN is an obsolete name - use STR$K_B_BLN) STR$K_B_BLN%INFORM(3STR$K_DV_BLN is an obsolete name - use STR$K_DB_BLN) STR$K_DB_BLN%IF %IDENTICAL( , CHARACTERS)%THEN STR$K_DTYPE_T%ELSE%IF %IDENTICAL( , FULLWORDS) %IDENTICAL( ,UNITS)%THENXPO$K_DTYPE_BU%FI%FI%IF %IDENTICAL( ,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL( ,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL( ,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_, ))%FI%FI%FI CH$PTR(j%BLISS16(`)%BLISS32(`)( ))$STR_DESCRIPTORD%IF$XPO$KEY_CHECK( ,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED,STATIC,VARYING,DYNAMIC_VARYING))%THEN%IF %IDENTICAL( ,XPORT_TEMPORARY)%THEN%IF $XPO$KEY_TEST( ,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED),CLASS=)%THEN %EXITMACRO%FI%FI%FI%IF$XPO$KEY_CHECK( ,(STATIC,VARYING,DYNAMIC_VARYING))%THEN%INFORM(CLASS=, ,( is obsolete - see current documentation)%FI%IF%NULL( )%THEN%INFORM(8BINARY_DATA= is obsolete - use the $XPO_DESCRIPTOR macro)%FI%IF%NULL( )%THEN%INFORM(-TYPE= is obsolete - see current documentation)%IF $XPO$KEY_TEST( ,( CHARACTERS, FULLWORDS,UNITS),TYPE=)%THEN %EXITMACRO%FI%FI%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(7TYPE=, STRING=, and BINARY_DATA= are mutually exclusive)%FI%IF%NULL( )($XPO$PAREN_TEST( ) %ISSTRING(%REMOVE( )))%THEN%WARN("STRING=descriptor is not permitted) %EXITMACRO%FI%IF %ISSTRING(%REMOVE( )) %IDENTICAL( ,FIXED)%THEN%WARN(#STRING=literal requires CLASS=FIXED) %EXITMACRO%FI%IF$XPO$PAREN_TEST( ) %IDENTICAL( $XPO$ARG1(%REMOVE( )),)( %IDENTICAL( ,FIXED) %IDENTICAL( ,BOUNDED))%THEN%WARN(6STRING=(len,ptr) requires CLASS=FIXED or CLASS=BOUNDED) %EXITMACRO%FI%IF %IDENTICAL( ,BOUNDED) %IDENTICAL( ,DYNAMIC_BOUNDED) %IDENTICAL( ,VARYING) %IDENTICAL( ,DYNAMIC_VARYING)%THENBLOCK[ STR$K_B_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER, STR$H_MAXLEN, STR$H_PFXLEN)%ELSEBLOCK[ STR$K_F_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER)%FI%IF%NULL( , , )%THEN %EXITMACRO%FI%IF%NULL( )%THENr([ STR$B_DTYPE]=%IF %IDENTICAL( , CHARACTERS)%THEN STR$K_DTYPE_T%ELSE%IF %IDENTICAL( , FULLWORDS) %IDENTICAL( ,UNITS)%THENXPO$K_DTYPE_BU%FI%FI,[ STR$B_CLASS]=%IF %IDENTICAL( ,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL( ,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL( ,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_, ))%FI%FI%FI)%FI%IF%NULL( )%THENr([ STR$B_DTYPE]= STR$K_DTYPE_T,[ STR$B_CLASS]=%IF %IDENTICAL( ,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL( ,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL( ,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_, ))%FI%FI%FI,%IF %ISSTRING(%REMOVE( ))%THEN[ STR$H_LENGTH]= %CHARCOUNT(%REMOVE( )),[ STR$A_POINTER]=CH$PTR(j%BLISS16(`)%BLISS32(`)(%REMOVE( )))%ELSE[ STR$A_POINTER]= $XPO$ARG2(%REMOVE( )),%IF %IDENTICAL( ,FIXED) %IDENTICAL( ,DYNAMIC)%THEN[ STR$H_LENGTH]= $XPO$ARG1(%REMOVE( ))%ELSE[ STR$H_MAXLEN]= $XPO$ARG1(%REMOVE( ))%FI%FI)%FI%IF%NULL( )%THENr([ STR$B_DTYPE]=XPO$K_DTYPE_BU,[ STR$B_CLASS]=%IF %IDENTICAL( ,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL( ,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL( ,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_, ))%FI%FI%FI,[ STR$A_POINTER]= $XPO$ARG2(%REMOVE( )),%IF %IDENTICAL( ,FIXED) %IDENTICAL( ,DYNAMIC)%THEN[ STR$H_LENGTH]= $XPO$BIN_LEN(%REMOVE( ))%ELSE[ STR$H_MAXLEN]= $XPO$BIN_LEN(%REMOVE( ))%FI)%FICLASSFIXEDTYPESTRING BINARY_DATADX%IF$XPO$KEY_CHECK( ,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED,STATIC,VARYING,DYNAMIC_VARYING))%THEN%IF %IDENTICAL( ,XPORT_TEMPORARY)%THEN%IF $XPO$KEY_TEST( ,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED),CLASS=)%THEN %EXITMACRO%FI%FI%FI%IF$XPO$KEY_CHECK( ,(STATIC,VARYING,DYNAMIC_VARYING))%THEN%INFORM(CLASS=, ,( is obsolete - see current documentation)%FI%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(,DESC= and DESCRIPTOR= are mutually exclusive)%FI%IF%NULL( )%THEN%INFORM(-TYPE= is obsolete - see current documentation)%IF $XPO$KEY_TEST( ,( CHARACTERS, FULLWORDS,UNITS),TYPE=)%THEN %EXITMACRO%FI%FI%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(7TYPE=, STRING=, and BINARY_DATA= are mutually exclusive)%FI%IF %ISSTRING(%REMOVE( )) %IDENTICAL( ,FIXED)%THEN%WARN(#STRING=literal requires CLASS=FIXED) %EXITMACRO%FI%IF%NULL(  )%THEN%WARN( DESC= or DESCRIPTOR=, parameter must be specified) %EXITMACRO%FI7 $STR$DESC=  :BLOCK[ STR$K_B_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER, STR$H_MAXLEN, STR$H_PFXLEN);7 $STR$BIN_DESC=  :$XPO_DESCRIPTOR(CLASS=BOUNDED);%IF%NULL( )%THEN $STR$DESC[ STR$H_LENGTH]=; $STR$DESC[ STR$B_DTYPE]=%IF %IDENTICAL( , CHARACTERS)%THEN STR$K_DTYPE_T%ELSE%IF %IDENTICAL( , FULLWORDS) %IDENTICAL( ,UNITS)%THENXPO$K_DTYPE_BU%FI%FI; $STR$DESC[ STR$B_CLASS]=%IF %IDENTICAL( ,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL( ,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL( ,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_, ))%FI%FI%FI; $STR$DESC[ STR$A_POINTER]=;%IF %IDENTICAL( ,BOUNDED) %IDENTICAL( ,DYNAMIC_BOUNDED) %IDENTICAL( ,VARYING) %IDENTICAL( ,DYNAMIC_VARYING)%THEN $STR$DESC[ STR$H_MAXLEN]=; $STR$DESC[ STR$H_PFXLEN]=;%FI%ELSE%IF%NULL( )%NULL( )%THEN $STR$DESC[ STR$H_LENGTH]=; $STR$DESC[ STR$B_DTYPE]= STR$K_DTYPE_T; $STR$DESC[ STR$B_CLASS]=%IF %IDENTICAL( ,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL( ,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL( ,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_, ))%FI%FI%FI; $STR$DESC[ STR$A_POINTER]=;%IF %IDENTICAL( ,BOUNDED) %IDENTICAL( ,DYNAMIC_BOUNDED) %IDENTICAL( ,VARYING) %IDENTICAL( ,DYNAMIC_VARYING)%THEN $STR$DESC[ STR$H_MAXLEN]=; $STR$DESC[ STR$H_PFXLEN]=;%FI%ELSE $STR$STR_DESC( $STR$DESC, , ) $XPO$BIN_DESC( $STR$BIN_DESC, , )%FI%FI XPO$_NORMALDESC DESCRIPTORCLASSFIXEDTYPESTRING BINARY_DATA0%IF %ISSTRING(%REMOVE( ))%THEN [ STR$H_LENGTH]= %CHARCOUNT(%REMOVE( )); [ STR$B_DTYPE]= STR$K_DTYPE_T; [ STR$B_CLASS]=%IF %IDENTICAL( ,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL( ,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL( ,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_, ))%FI%FI%FI; [ STR$A_POINTER]=CH$PTR(j%BLISS16(`)%BLISS32(`)(%REMOVE( )));%ELSE%IF$XPO$PAREN_TEST( )%THEN7 $STR$$DESC= :BLOCK[ STR$K_F_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER);%IF %IDENTICAL( ,BOUNDED) %IDENTICAL( ,DYNAMIC_BOUNDED) %IDENTICAL( ,VARYING) %IDENTICAL( ,DYNAMIC_VARYING)%THEN [ STR$H_LENGTH]=;%ELSE [ STR$H_LENGTH]=. $STR$$DESC[ STR$H_LENGTH];%FI [ STR$B_DTYPE]=. $STR$$DESC[ STR$B_DTYPE]; [ STR$B_CLASS]=%IF %IDENTICAL( ,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL( ,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL( ,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_, ))%FI%FI%FI; [ STR$A_POINTER]=. $STR$$DESC[ STR$A_POINTER];%IF %IDENTICAL( ,BOUNDED) %IDENTICAL( ,DYNAMIC_BOUNDED) %IDENTICAL( ,VARYING) %IDENTICAL( ,DYNAMIC_VARYING)%THEN [ STR$H_MAXLEN]=. $STR$$DESC[ STR$H_LENGTH]; [ STR$H_PFXLEN]=;%FI;%ELSE%IF %IDENTICAL( ,BOUNDED) %IDENTICAL( ,DYNAMIC_BOUNDED) %IDENTICAL( ,VARYING) %IDENTICAL( ,DYNAMIC_VARYING)%THEN [ STR$H_LENGTH]=;%ELSE [ STR$H_LENGTH]= $XPO$ARG1(%REMOVE( ));%FI [ STR$B_DTYPE]= STR$K_DTYPE_T; [ STR$B_CLASS]=%IF %IDENTICAL( ,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL( ,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL( ,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_, ))%FI%FI%FI; [ STR$A_POINTER]= $XPO$ARG2(%REMOVE( ));%IF %IDENTICAL( ,BOUNDED) %IDENTICAL( ,DYNAMIC_BOUNDED) %IDENTICAL( ,VARYING) %IDENTICAL( ,DYNAMIC_VARYING)%THEN [ STR$H_MAXLEN]= $XPO$ARG1(%REMOVE( )); [ STR$H_PFXLEN]=;%FI%FI%FI%IF $XPO$KEY_TEST( ,(7,8),Type)%THEN%IF %ISSTRING(%REMOVE( ))%THEN1 :%IF$XPO$KEY_CHECK(FIXED,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED,STATIC,VARYING,DYNAMIC_VARYING))%THEN%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THEN%IF $XPO$KEY_TEST(FIXED,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED),CLASS=)%THEN %EXITMACRO%FI%FI%FI%IF$XPO$KEY_CHECK(FIXED,(STATIC,VARYING,DYNAMIC_VARYING))%THEN%INFORM(CLASS=,FIXED,( is obsolete - see current documentation)%FI%IF%NULL()%THEN%INFORM(8BINARY_DATA= is obsolete - use the $XPO_DESCRIPTOR macro)%FI%IF%NULL()%THEN%INFORM(-TYPE= is obsolete - see current documentation)%IF $XPO$KEY_TEST(,( CHARACTERS, FULLWORDS,UNITS),TYPE=)%THEN %EXITMACRO%FI%FI%IF%IF%NULL(%REMOVE( ))%THEN+%FI%IF%NULL()%THEN+%FI%IF%NULL()%THEN+%FIU%THEN%WARN(7TYPE=, STRING=, and BINARY_DATA= are mutually exclusive)%FI%IF%NULL(%REMOVE( ))($XPO$PAREN_TEST(%REMOVE( )) %ISSTRING(%REMOVE(%REMOVE( ))))%THEN%WARN("STRING=descriptor is not permitted) %EXITMACRO%FI%IF %ISSTRING(%REMOVE(%REMOVE( ))) %IDENTICAL(FIXED,FIXED)%THEN%WARN(#STRING=literal requires CLASS=FIXED) %EXITMACRO%FI%IF$XPO$PAREN_TEST(%REMOVE( )) %IDENTICAL( $XPO$ARG1(%REMOVE(%REMOVE( ))),)( %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,BOUNDED))%THEN%WARN(6STRING=(len,ptr) requires CLASS=FIXED or CLASS=BOUNDED) %EXITMACRO%FI%IF %IDENTICAL(FIXED,BOUNDED) %IDENTICAL(FIXED,DYNAMIC_BOUNDED) %IDENTICAL(FIXED,VARYING) %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENBLOCK[ STR$K_B_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER, STR$H_MAXLEN, STR$H_PFXLEN)%ELSEBLOCK[ STR$K_F_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER)%FI%IF%NULL(,%REMOVE( ),)%THEN %EXITMACRO%FI%IF%NULL()%THENr([ STR$B_DTYPE]=%IF %IDENTICAL(, CHARACTERS)%THEN STR$K_DTYPE_T%ELSE%IF %IDENTICAL(, FULLWORDS) %IDENTICAL(,UNITS)%THENXPO$K_DTYPE_BU%FI%FI,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI)%FI%IF%NULL(%REMOVE( ))%THENr([ STR$B_DTYPE]= STR$K_DTYPE_T,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI,%IF %ISSTRING(%REMOVE(%REMOVE( )))%THEN[ STR$H_LENGTH]= %CHARCOUNT(%REMOVE(%REMOVE( ))),[ STR$A_POINTER]=CH$PTR(j%BLISS16(`)%BLISS32(`)(%REMOVE(%REMOVE( ))))%ELSE[ STR$A_POINTER]= $XPO$ARG2(%REMOVE(%REMOVE( ))),%IF %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,DYNAMIC)%THEN[ STR$H_LENGTH]= $XPO$ARG1(%REMOVE(%REMOVE( )))%ELSE[ STR$H_MAXLEN]= $XPO$ARG1(%REMOVE(%REMOVE( )))%FI%FI)%FI%IF%NULL()%THENr([ STR$B_DTYPE]=XPO$K_DTYPE_BU,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI,[ STR$A_POINTER]= $XPO$ARG2(%REMOVE()),%IF %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,DYNAMIC)%THEN[ STR$H_LENGTH]= $XPO$BIN_LEN(%REMOVE())%ELSE[ STR$H_MAXLEN]= $XPO$BIN_LEN(%REMOVE())%FI)%FI;%ELSE%IF$XPO$PAREN_TEST( )%THEN%IF %IDENTICAL( ,7)%THEN7 = $STR_FORMAT( );%ELSE8 :BLOCK[ STR$K_F_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER)f;%FI%ELSE7 = ;%FI%FI%FI%IF %ISSTRING(%REMOVE( ))$XPO$PAREN_TEST( )%THEN $STR$STR_DESC( ,FIXED, )%FI34 XST$FREE_TEMP:BLISS; XST$FREE_TEMP( ) XPO$H_LENGTH, XPO$B_DTYPE, XPO$B_CLASS, XPO$A_ADDRESS XPO$H_LENGTH, XPO$B_DTYPE, XPO$B_CLASS, XPO$A_ADDRESS, XPO$H_MAXLEN, XPO$H_PFXLEN%INFORM(6XPO$K_DTYPE_Z is an obsolete name - use XPO$K_DTYPE_BU)%IF %IDENTICAL( ,DYNAMIC_BOUNDED)%THENXPO$K_CLASS_DB%ELSE%NAME( %EXACTSTRING( ,, XPO$K_CLASS_, ))%FI$XPO_DESCRIPTORDq%IF $XPO$KEY_TEST( ,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED),CLASS=)%THEN %EXITMACRO%FI%IF%NULL( )$XPO$PAREN_TEST( )%THEN%WARN('BINARY_DATA=descriptor is not permitted) %EXITMACRO%FI%IF %IDENTICAL( ,BOUNDED) %IDENTICAL( ,DYNAMIC_BOUNDED)%THENBLOCK[ XPO$K_B_BLN]p( XPO$H_LENGTH, XPO$B_DTYPE, XPO$B_CLASS, XPO$A_ADDRESS, XPO$H_MAXLEN, XPO$H_PFXLEN)%ELSEBLOCK[ XPO$K_S_BLN]p( XPO$H_LENGTH, XPO$B_DTYPE, XPO$B_CLASS, XPO$A_ADDRESS)%FI%IF%NULL( )%THENr([ XPO$B_DTYPE]=XPO$K_DTYPE_BU,[ XPO$B_CLASS]=%IF %IDENTICAL( ,DYNAMIC_BOUNDED)%THENXPO$K_CLASS_DB%ELSE%NAME( %EXACTSTRING( ,, XPO$K_CLASS_, ))%FI,[ XPO$A_ADDRESS]= $XPO$ARG2(%REMOVE( )),%IF %IDENTICAL( ,FIXED) %IDENTICAL( ,DYNAMIC)%THEN[ XPO$H_LENGTH]= $XPO$BIN_LEN(%REMOVE( ))%ELSE[ XPO$H_MAXLEN]= $XPO$BIN_LEN(%REMOVE( ))%FI)%FICLASSFIXED BINARY_DATADh%IF $XPO$KEY_TEST( ,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED),CLASS=)%THEN %EXITMACRO%FI%IF%NULL( )$XPO$PAREN_TEST( )%THEN%WARN('BINARY_DATA=descriptor is not permitted) %EXITMACRO%FI%IF $XPO$CONFLICT( , )%THEN%WARN(,DESC= and DESCRIPTOR= are mutually exclusive)%FI%IF%NULL(  )%THEN%WARN( DESC= or DESCRIPTOR=, parameter must be specified) %EXITMACRO%FI7 $XPO$DESC= :BLOCK[ XPO$K_B_BLN]p( XPO$H_LENGTH, XPO$B_DTYPE, XPO$B_CLASS, XPO$A_ADDRESS, XPO$H_MAXLEN, XPO$H_PFXLEN);%IF%NULL( )%THEN $XPO$DESC[ XPO$H_LENGTH]=; $XPO$DESC[ XPO$B_DTYPE]=XPO$K_DTYPE_BU; $XPO$DESC[ XPO$B_CLASS]=$XPO$DESC_CLASS( ); $XPO$DESC[ XPO$A_ADDRESS]=;%IF %IDENTICAL( ,BOUNDED) %IDENTICAL( ,DYNAMIC_BOUNDED)%THEN $XPO$DESC[ XPO$H_MAXLEN]=; $XPO$DESC[ XPO$H_PFXLEN]=;%FI%ELSE $XPO$BIN_DESC( $XPO$DESC, , )%FI XPO$_NORMALDESC DESCRIPTORCLASSFIXED BINARY_DATA%IF%NULL( $XPO$ARG3(%REMOVE( )))%THEN%IF $XPO$KEY_TEST( $XPO$ARG3(%REMOVE( )),( FULLWORDS,UNITS))%THEN %EXITMACRO%FI%FI%IF$XPO$PAREN_TEST( )%THEN7 $BIN$$DESC= :BLOCK[ XPO$K_S_BLN]p( XPO$H_LENGTH, XPO$B_DTYPE, XPO$B_CLASS, XPO$A_ADDRESS);%IF %IDENTICAL( ,BOUNDED) %IDENTICAL( ,DYNAMIC_BOUNDED)%THEN [ XPO$H_LENGTH]=;%ELSE [ XPO$H_LENGTH]=. $BIN$$DESC[ XPO$H_LENGTH];%FI [ XPO$B_DTYPE]=. $BIN$$DESC[ XPO$B_DTYPE]; [ XPO$B_CLASS]=%IF %IDENTICAL( ,DYNAMIC_BOUNDED)%THENXPO$K_CLASS_DB%ELSE%NAME( %EXACTSTRING( ,, XPO$K_CLASS_, ))%FI; [ XPO$A_ADDRESS]=. $BIN$$DESC[ XPO$A_ADDRESS];%IF %IDENTICAL( ,BOUNDED) %IDENTICAL( ,DYNAMIC_BOUNDED)%THEN [ XPO$H_MAXLEN]=. $BIN$$DESC[ XPO$H_LENGTH]; [ XPO$H_PFXLEN]=;%FI;%ELSE%IF %IDENTICAL( ,BOUNDED) %IDENTICAL( ,DYNAMIC_BOUNDED)%THEN [ XPO$H_LENGTH]=;%ELSE [ XPO$H_LENGTH]= $XPO$BIN_LEN(%REMOVE( ));%FI [ XPO$B_DTYPE]=XPO$K_DTYPE_BU; [ XPO$B_CLASS]=%IF %IDENTICAL( ,DYNAMIC_BOUNDED)%THENXPO$K_CLASS_DB%ELSE%NAME( %EXACTSTRING( ,, XPO$K_CLASS_, ))%FI; [ XPO$A_ADDRESS]= $XPO$ARG2(%REMOVE( ));%IF %IDENTICAL( ,BOUNDED) %IDENTICAL( ,DYNAMIC_BOUNDED)%THEN [ XPO$H_MAXLEN]= $XPO$BIN_LEN(%REMOVE( )); [ XPO$H_PFXLEN]=;%FI%FI %IF %IDENTICAL( ,UNITS)%THEN %ELSE%UPVAL*( )%FI%IF$XPO$PAREN_TEST( )%THEN8 :BLOCK[ XPO$K_S_BLN]p( XPO$H_LENGTH, XPO$B_DTYPE, XPO$B_CLASS, XPO$A_ADDRESS)f;%ELSE7 = ;%FI %IF$XPO$PAREN_TEST( )%THEN $XPO$BIN_DESC( ,FIXED, )%FIt 3   BLOCK[XPO$K_TIME_LEN]p($XPO$DT_FIELDS)H vr  S  Rho E  M  DA " \      T y C Wc !)10ADBSCgDuEFGHI J K L7 MMN\MM9OP $IOB$FIELDS_1, $IOB$FIELDS_2%WARN(-YIOB$T_FILE_SPEC (descriptor) has been replaced by IOB$A_FILE_SPEC (address of descriptor))IOB$T_RESULTANT%WARN(+UIOB$T_DEFAULT (descriptor) has been replaced by IOB$A_DEFAULT (address of descriptor))IOB$T_RESULTANT%WARN(+UIOB$T_RELATED (descriptor) has been replaced by IOB$A_RELATED (address of descriptor))IOB$T_RESULTANT%WARN(*SIOB$T_PROMPT (descriptor) has been replaced by IOB$A_PROMPT (address of descriptor))IOB$T_RESULTANT%WARN(*SIOB$T_OUTPUT (descriptor) has been replaced by IOB$A_OUTPUT (address of descriptor))IOB$T_RESULTANT%WARN(-YIOB$T_BACK_TYPE (descriptor) has been replaced by IOB$A_BACK_TYPE (address of descriptor))IOB$T_RESULTANT %IF%NULL( )%THEN%WARN( ,! may not be specified during IOB , )%FIIOB$[ ]= ;IOB$[ IOB$H_STRING]= ;IOB$[++((+)/%BPVAL),(+)'%BPVAL,,]= ;F%IF %IDENTICAL( ,XPO$IO_FAIL_MSG)%THEN%WARN(&LFAILURE=XPO$IO_FAIL_MSG is obsolete - FAILURE=XPO$FAILURE is now the default)%FIIOB$[IOB$B_FUNCTION]=%EXPAND%NAME(IOB$K_, );%EXPAND $XPO$FORCE($XPO$EX_ROUTINE(%EXPAND%NAME(XPO$, )))%IF$XPO$KEY_CHECK( ,( XPO$FAILURE,XPO$IO_FAILURE,XPO$PS_FAILURE,XPO$GM_FAILURE,XPO$FM_FAILURE, STR$FAILURE, STR$X_FAILURE, STR$C_FAILURE, STR$A_FAILURE, STR$S_FAILURE, STR$B_FAILURE))%THEN34 :BLISS;%FI%EXPAND%NAME(XPO$, )(IOB$,%IF%NULL( )%THEN%ELSE %FI,%IF%NULL( )%THEN%ELSE %FI)D%IF%NULL( )%THEN%INFORM(-PAGE_NUMBER= parameter is no longer supported)%FI%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(+OPTION= and OPTIONS= are mutually exclusive)%FI%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(1ATTRIBUTE= and ATTRIBUTES= are mutually exclusive)%FI%IF%IF%NULL( , )%THEN+%FI%IF%NULL( , )%THEN+%FIU%THEN%WARN(6Character and binary parameters are mutually exclusive)%FI%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(,FULLWORDS= and UNITS= are mutually exclusive)%FI%IF%NULL( )%THEN%WARN(STRING=,! may not be specified during IOB , declaration)%FI%IF%NULL( )%THEN%WARN( BINARY_DATA=,! may not be specified during IOB , declaration)%FIBLOCK[ IOB$K_LENGTH]p( $IOB$FIELDS_1, $IOB$FIELDS_2)%IF%IF%NULL()%THEN+%FI%IF%NULL( , , , , , , , , , , , , , , )%THEN+%FIU%THEN%WARN(+Static IOB initialization not yet supported)%FI FILE_SPECDEFAULTRELATEDOPTIONOPTIONS ATTRIBUTE ATTRIBUTESPROMPT BINARY_DATASTRING CHARACTERS FULLWORDSUNITS PAGE_NUMBERSEQUENCE_NUMBER RECORD_SIZE BLOCK_SIZEUSERDf%IF%NULL( )%THEN%WARN(OLD_IOB=, parameter must be specified) %EXITMACRO%FI%IF%NULL( )%THEN%WARN(NEW_IOB=, parameter must be specified) %EXITMACRO%FI7IOB$= :BLOCK[ IOB$K_LENGTH]p( $IOB$FIELDS_1, $IOB$FIELDS_2); $STR$DECLARE(8,$IOB$BACK_TYPE, )$STR$LOCAL_INIT($IOB$BACK_TYPE, ) $IOB$STRING(IOB$A_BACK_TYPE,$IOB$BACK_TYPE, ) $XPO$VALUE(IOB$, A_ASSOC_IOB, )%IF %IDENTICAL( ,XPO$IO_FAIL_MSG)%THEN%WARN(&LFAILURE=XPO$IO_FAIL_MSG is obsolete - FAILURE=XPO$FAILURE is now the default)%FIIOB$[IOB$B_FUNCTION]= IOB$K_BACKUP;34 XPO$BACKUP:BLISS;%IF$XPO$KEY_CHECK( ,( XPO$FAILURE,XPO$IO_FAILURE,XPO$PS_FAILURE,XPO$GM_FAILURE,XPO$FM_FAILURE, STR$FAILURE, STR$X_FAILURE, STR$C_FAILURE, STR$A_FAILURE, STR$S_FAILURE, STR$B_FAILURE))%THEN34 :BLISS;%FI XPO$BACKUP(IOB$,%IF%NULL( )%THEN%ELSE %FI,%IF%NULL( )%THEN%ELSE %FI)OLD_IOBNEW_IOB FILE_TYPE.BAKSUCCESSFAILURE XPO$FAILUREDk%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(+OPTION= and OPTIONS= are mutually exclusive)%FI%IF%NULL( )%THEN%WARN(IOB=, parameter must be specified) %EXITMACRO%FI7IOB$= :BLOCK[ IOB$K_LENGTH]p( $IOB$FIELDS_1, $IOB$FIELDS_2); $XPO$KEYWORD(IOB$,%REMOVE( )%REMOVE( )) $XPO$VALUE(IOB$,Z_USER, )%IF %IDENTICAL( ,XPO$IO_FAIL_MSG)%THEN%WARN(&LFAILURE=XPO$IO_FAIL_MSG is obsolete - FAILURE=XPO$FAILURE is now the default)%FIIOB$[IOB$B_FUNCTION]= IOB$K_CLOSE;34 XPO$CLOSE:BLISS;%IF$XPO$KEY_CHECK( ,( XPO$FAILURE,XPO$IO_FAILURE,XPO$PS_FAILURE,XPO$GM_FAILURE,XPO$FM_FAILURE, STR$FAILURE, STR$X_FAILURE, STR$C_FAILURE, STR$A_FAILURE, STR$S_FAILURE, STR$B_FAILURE))%THEN34 :BLISS;%FI XPO$CLOSE(IOB$,%IF%NULL( )%THEN%ELSE %FI,%IF%NULL( )%THEN%ELSE %FI)IOBOPTIONOPTIONSUSERSUCCESSFAILURE XPO$FAILUREDu%IF%NULL( )%THEN%WARN(IOB=, parameter must be specified) %EXITMACRO%FI7IOB$= :BLOCK[ IOB$K_LENGTH]p( $IOB$FIELDS_1, $IOB$FIELDS_2); $STR$DECLARE(8,$IOB$FILE_SPEC, ) $STR$DECLARE(8, $IOB$DEFAULT, ) $STR$DECLARE(8, $IOB$RELATED, )$STR$LOCAL_INIT($IOB$FILE_SPEC, )$STR$LOCAL_INIT( $IOB$DEFAULT, )$STR$LOCAL_INIT( $IOB$RELATED, ) $IOB$STRING(IOB$A_FILE_SPEC,$IOB$FILE_SPEC, ) $IOB$STRING( IOB$A_DEFAULT, $IOB$DEFAULT, ) $IOB$STRING( IOB$A_RELATED, $IOB$RELATED, ) $XPO$VALUE(IOB$,Z_USER, )%IF %IDENTICAL( ,XPO$IO_FAIL_MSG)%THEN%WARN(&LFAILURE=XPO$IO_FAIL_MSG is obsolete - FAILURE=XPO$FAILURE is now the default)%FIIOB$[IOB$B_FUNCTION]= IOB$K_DELETE;34 XPO$DELETE:BLISS;%IF$XPO$KEY_CHECK( ,( XPO$FAILURE,XPO$IO_FAILURE,XPO$PS_FAILURE,XPO$GM_FAILURE,XPO$FM_FAILURE, STR$FAILURE, STR$X_FAILURE, STR$C_FAILURE, STR$A_FAILURE, STR$S_FAILURE, STR$B_FAILURE))%THEN34 :BLISS;%FI XPO$DELETE(IOB$,%IF%NULL( )%THEN%ELSE %FI,%IF%NULL( )%THEN%ELSE %FI)IOB FILE_SPECDEFAULTRELATEDUSERSUCCESSFAILURE XPO$FAILURED%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(9CHARACTERS=, FULLWORDS= and UNITS= are mutually exclusive)%FI%IF%NULL( )%THEN%WARN(IOB=, parameter must be specified) %EXITMACRO%FI7IOB$= :BLOCK[ IOB$K_LENGTH]p( $IOB$FIELDS_1, $IOB$FIELDS_2); $STR$DECLARE(7, $IOB$PROMPT, )%IF%NULL( )%THEN.IOB$[ IOB$A_PROMPT]#$STR_FREE_TEMP(.IOB$[ IOB$A_PROMPT]);%FI $IOB$STRING( IOB$A_PROMPT, $IOB$PROMPT, )$IOB$GET_LENGTH( STR$K_DTYPE_T, )%IF%NULL( )%THEN$IOB$GET_LENGTH(XPO$K_DTYPE_BU,%UPVAL*( ))%FI$IOB$GET_LENGTH(XPO$K_DTYPE_BU, ) $XPO$VALUE(IOB$,Z_USER, )%IF %IDENTICAL( ,XPO$IO_FAIL_MSG)%THEN%WARN(&LFAILURE=XPO$IO_FAIL_MSG is obsolete - FAILURE=XPO$FAILURE is now the default)%FIIOB$[IOB$B_FUNCTION]= IOB$K_GET;34XPO$GET:BLISS;%IF$XPO$KEY_CHECK( ,( XPO$FAILURE,XPO$IO_FAILURE,XPO$PS_FAILURE,XPO$GM_FAILURE,XPO$FM_FAILURE, STR$FAILURE, STR$X_FAILURE, STR$C_FAILURE, STR$A_FAILURE, STR$S_FAILURE, STR$B_FAILURE))%THEN34 :BLISS;%FIXPO$GET(IOB$,%IF%NULL( )%THEN%ELSE %FI,%IF%NULL( )%THEN%ELSE %FI)IOBPROMPT CHARACTERS FULLWORDSUNITSUSERSUCCESSFAILURE XPO$FAILURED%IF%NULL( )%THEN%INFORM(-PAGE_NUMBER= parameter is no longer supported)%FI%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(+OPTION= and OPTIONS= are mutually exclusive)%FI%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(1ATTRIBUTE= and ATTRIBUTES= are mutually exclusive)%FI%IF%IF%NULL( , , )%THEN+%FI%IF%NULL( , , )%THEN+%FIU%THEN%WARN(6Character and binary parameters are mutually exclusive)%FI%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(,FULLWORDS= and UNITS= are mutually exclusive)%FI%IF%NULL( )%THEN%WARN(IOB=, parameter must be specified) %EXITMACRO%FI%IF%NULL( )%THEN%WARN(STRING=,! may not be specified during IOB ,initialization)%FI%IF%NULL( )%THEN%WARN( BINARY_DATA=,! may not be specified during IOB ,initialization)%FI7IOB$= :BLOCK[ IOB$K_LENGTH]p( $IOB$FIELDS_1, $IOB$FIELDS_2), IOB$RESULTANT=IOB$[IOB$T_RESULTANT]:BLOCK[ STR$K_F_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER); $STR$DECLARE(7,$IOB$FILE_SPEC, ) $STR$DECLARE(7, $IOB$DEFAULT, ) $STR$DECLARE(7, $IOB$RELATED, ) $STR$DECLARE(7, $IOB$PROMPT, )CH$FILL(, IOB$K_LENGTH*%UPVAL,CH$PTR(IOB$,,%BPUNIT));IOB$[ IOB$H_LENGTH]= IOB$K_LENGTH;IOB$[ IOB$B_VERSION]= XPO$K_VERSION;IOB$[ IOB$B_LEVEL]= XPO$K_LEVEL; $IOB$STRING(IOB$A_FILE_SPEC,$IOB$FILE_SPEC, ) $IOB$STRING( IOB$A_DEFAULT, $IOB$DEFAULT, ) $IOB$STRING( IOB$A_RELATED, $IOB$RELATED, ) IOB$RESULTANT[ STR$B_DTYPE]= STR$K_DTYPE_T; IOB$RESULTANT[ STR$B_CLASS]= STR$K_CLASS_D; $IOB$STRING( IOB$A_PROMPT, $IOB$PROMPT, ) $XPO$KEYWORD(IOB$,%REMOVE( )%REMOVE( )) $XPO$KEYWORD(IOB$,%REMOVE( )%REMOVE( ))$IOB$GET_LENGTH( STR$K_DTYPE_T, )%IF%NULL( )%THEN$IOB$GET_LENGTH(XPO$K_DTYPE_BU,%UPVAL*( ))%FI$IOB$GET_LENGTH(XPO$K_DTYPE_BU, ) $XPO$VALUE(IOB$, G_SEQ_NUMB, )%IF %IDENTICAL( ,VARIABLE)%THEN $XPO$VALUE(IOB$, G_REC_SIZE, )%FI $XPO$VALUE(IOB$, G_BLK_SIZE, ) $XPO$VALUE(IOB$,Z_USER, ) XPO$_NORMALIOB FILE_SPECDEFAULTRELATEDOPTIONOPTIONS ATTRIBUTE ATTRIBUTESPROMPT BINARY_DATASTRING CHARACTERS FULLWORDSUNITS PAGE_NUMBERSEQUENCE_NUMBER RECORD_SIZE BLOCK_SIZEUSERD%IF%NULL( )%THEN%INFORM(-PAGE_NUMBER= parameter is no longer supported)%FI%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(+OPTION= and OPTIONS= are mutually exclusive)%FI%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(1ATTRIBUTE= and ATTRIBUTES= are mutually exclusive)%FI%IF%IF%NULL( , , )%THEN+%FI%IF%NULL( , , )%THEN+%FIU%THEN%WARN(6Character and binary parameters are mutually exclusive)%FI%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(,FULLWORDS= and UNITS= are mutually exclusive)%FI%IF%NULL( )%THEN%WARN(IOB=, parameter must be specified) %EXITMACRO%FI%IF%NULL( )%THEN%WARN(STRING=,! may not be specified during IOB ,open)%FI%IF%NULL( )%THEN%WARN( BINARY_DATA=,! may not be specified during IOB ,open)%FI7IOB$= :BLOCK[ IOB$K_LENGTH]p( $IOB$FIELDS_1, $IOB$FIELDS_2); $STR$DECLARE(7,$IOB$FILE_SPEC, ) $STR$DECLARE(7, $IOB$DEFAULT, ) $STR$DECLARE(7, $IOB$RELATED, ) $STR$DECLARE(7, $IOB$PROMPT, ) $IOB$STRING(IOB$A_FILE_SPEC,$IOB$FILE_SPEC, ) $IOB$STRING( IOB$A_DEFAULT, $IOB$DEFAULT, ) $IOB$STRING( IOB$A_RELATED, $IOB$RELATED, ) $IOB$STRING( IOB$A_PROMPT, $IOB$PROMPT, ) $XPO$KEYWORD(IOB$,%REMOVE( )%REMOVE( )) $XPO$KEYWORD(IOB$,%REMOVE( )%REMOVE( ))$IOB$GET_LENGTH( STR$K_DTYPE_T, ) $XPO$VALUE(IOB$, G_SEQ_NUMB, )%IF%NULL( )%THEN$IOB$GET_LENGTH(XPO$K_DTYPE_BU,%UPVAL*( ))%FI$IOB$GET_LENGTH(XPO$K_DTYPE_BU, )%IF %IDENTICAL( ,VARIABLE)%THENIOB$[IOB$G_REC_SIZE]=;%ELSE $XPO$VALUE(IOB$, G_REC_SIZE, )%FI $XPO$VALUE(IOB$, G_BLK_SIZE, ) $XPO$VALUE(IOB$,Z_USER, )%IF %IDENTICAL( ,XPO$IO_FAIL_MSG)%THEN%WARN(&LFAILURE=XPO$IO_FAIL_MSG is obsolete - FAILURE=XPO$FAILURE is now the default)%FIIOB$[IOB$B_FUNCTION]= IOB$K_OPEN;34XPO$OPEN:BLISS;%IF$XPO$KEY_CHECK( ,( XPO$FAILURE,XPO$IO_FAILURE,XPO$PS_FAILURE,XPO$GM_FAILURE,XPO$FM_FAILURE, STR$FAILURE, STR$X_FAILURE, STR$C_FAILURE, STR$A_FAILURE, STR$S_FAILURE, STR$B_FAILURE))%THEN34 :BLISS;%FIXPO$OPEN(IOB$,%IF%NULL( )%THEN%ELSE %FI,%IF%NULL( )%THEN%ELSE %FI)IOB FILE_SPECDEFAULTRELATEDOPTIONOPTIONS ATTRIBUTE ATTRIBUTESPROMPT BINARY_DATASTRING CHARACTERS FULLWORDSUNITS PAGE_NUMBERSEQUENCE_NUMBER RECORD_SIZE BLOCK_SIZEUSERSUCCESSFAILURE XPO$FAILURED%IF%NULL( )%THEN%INFORM(-PAGE_NUMBER= parameter is no longer supported)%FI%IF%IF%NULL( , )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(6Character and binary parameters are mutually exclusive)%FI%IF%NULL( )%THEN%WARN(IOB=, parameter must be specified) %EXITMACRO%FI7IOB$= :BLOCK[ IOB$K_LENGTH]p( $IOB$FIELDS_1, $IOB$FIELDS_2); $STR$DECLARE(8, $IOB$OUTPUT, ) $BIN$DECLARE( $IOB$OUTPUT, )$STR$LOCAL_INIT( $IOB$OUTPUT, )$BIN$LOCAL_INIT( $IOB$OUTPUT, ) $IOB$STRING( IOB$A_OUTPUT, $IOB$OUTPUT,  ) $XPO$VALUE(IOB$, G_SEQ_NUMB, ) $XPO$VALUE(IOB$,Z_USER, )%IF %IDENTICAL( ,XPO$IO_FAIL_MSG)%THEN%WARN(&LFAILURE=XPO$IO_FAIL_MSG is obsolete - FAILURE=XPO$FAILURE is now the default)%FIIOB$[IOB$B_FUNCTION]= IOB$K_PUT;34XPO$PUT:BLISS;%IF$XPO$KEY_CHECK( ,( XPO$FAILURE,XPO$IO_FAILURE,XPO$PS_FAILURE,XPO$GM_FAILURE,XPO$FM_FAILURE, STR$FAILURE, STR$X_FAILURE, STR$C_FAILURE, STR$A_FAILURE, STR$S_FAILURE, STR$B_FAILURE))%THEN34 :BLISS;%FIXPO$PUT(IOB$,%IF%NULL( )%THEN%ELSE %FI,%IF%NULL( )%THEN%ELSE %FI)IOBSTRING PAGE_NUMBERSEQUENCE_NUMBER BINARY_DATAUSERSUCCESSFAILURE XPO$FAILURED%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(+OPTION= and OPTIONS= are mutually exclusive)%FI%IF%NULL( )%THEN%WARN(IOB=, parameter must be specified) %EXITMACRO%FI%IF%NULL(   )%THEN%WARN((NEW_SPEC=, NEW_DEFAULT=, or NEW_RELATED=, parameter must be specified) %EXITMACRO%FI7IOB$= :BLOCK[ IOB$K_LENGTH]p( $IOB$FIELDS_1, $IOB$FIELDS_2);8 $XPO$NEW_IOB:BLOCK[ IOB$K_LENGTH]p( $IOB$FIELDS_1, $IOB$FIELDS_2); $STR$DECLARE(8,$IOB$FILE_SPEC, ) $STR$DECLARE(8, $IOB$DEFAULT, ) $STR$DECLARE(8, $IOB$RELATED, ) $STR$DECLARE(8, $IOB$NEW_SPEC, ) $STR$DECLARE(8,$IOB$NEW_DEFAULT, ) $STR$DECLARE(8,$IOB$NEW_RELATED, )$STR$LOCAL_INIT($IOB$FILE_SPEC, )$STR$LOCAL_INIT( $IOB$DEFAULT, )$STR$LOCAL_INIT( $IOB$RELATED, )$STR$LOCAL_INIT( $IOB$NEW_SPEC, )$STR$LOCAL_INIT($IOB$NEW_DEFAULT, )$STR$LOCAL_INIT($IOB$NEW_RELATED, ) $XPO_IOB_INIT(IOB= $XPO$NEW_IOB,OPTION=OUTPUT%IF%NULL( )%THEN, FILE_SPEC= $IOB$NEW_SPEC%FI%IF%NULL( )%THEN,DEFAULT=$IOB$NEW_DEFAULT%FI%IF%NULL( )%THEN,RELATED=$IOB$NEW_RELATED%FI); $IOB$STRING(IOB$A_FILE_SPEC,$IOB$FILE_SPEC, ) $IOB$STRING( IOB$A_DEFAULT, $IOB$DEFAULT, ) $IOB$STRING( IOB$A_RELATED, $IOB$RELATED, ) $XPO$VALUE(IOB$, A_ASSOC_IOB, $XPO$NEW_IOB) $XPO$KEYWORD(IOB$,%REMOVE( )%REMOVE( )) $XPO$VALUE(IOB$,Z_USER, )%IF %IDENTICAL( ,XPO$IO_FAIL_MSG)%THEN%WARN(&LFAILURE=XPO$IO_FAIL_MSG is obsolete - FAILURE=XPO$FAILURE is now the default)%FIIOB$[IOB$B_FUNCTION]= IOB$K_RENAME;34 XPO$RENAME:BLISS;%IF$XPO$KEY_CHECK( ,( XPO$FAILURE,XPO$IO_FAILURE,XPO$PS_FAILURE,XPO$GM_FAILURE,XPO$FM_FAILURE, STR$FAILURE, STR$X_FAILURE, STR$C_FAILURE, STR$A_FAILURE, STR$S_FAILURE, STR$B_FAILURE))%THEN34 :BLISS;%FI XPO$RENAME(IOB$,%IF%NULL( )%THEN%ELSE %FI,%IF%NULL( )%THEN%ELSE %FI) IOB FILE_SPECDEFAULTRELATEDNEW_SPEC NEW_DEFAULT NEW_RELATEDOPTIONOPTIONSUSERSUCCESSFAILURE XPO$FAILURE%IF%BLISS(BLISS36)%THENTTY:%ELSE%IF%BLISS(BLISS32)%THEN SYS$INPUT%ELSETI:%FI%FI%IF%BLISS(BLISS32)%THEN SYS$OUTPUT%ELSE%IF%BLISS(BLISS36)%THENTTY:%ELSE%IF%BLISS(BLISS32)%THEN SYS$INPUT%ELSETI:%FI%FI%FI%IF%BLISS(BLISS32)%THEN SYS$ERROR%ELSE%IF%BLISS(BLISS36)%THENTTY:%ELSE%IF%BLISS(BLISS32)%THEN SYS$INPUT%ELSETI:%FI%FI%FI [XPORT Temporary File] !   l `  7 1       {     ?I9P BLOCK[XPO$K_SPEC_LEN]p($XPO$SPEC_FIELD)%WARN($XPO$V_WILD_PROJ is no longer defined)XPO$V_WILD_DIR%WARN($XPO$V_WILD_PGMR is no longer defined)XPO$V_WILD_DIRDC%IF%NULL( )%THEN%WARN( FILE_SPEC=, parameter must be specified) %EXITMACRO%FI%IF%NULL( )%THEN%WARN( SPEC_BLOCK=, parameter must be specified) %EXITMACRO%FI34XPO$PARSE_SPEC:BLISS;%IF$XPO$KEY_CHECK( ,( XPO$FAILURE,XPO$IO_FAILURE,XPO$PS_FAILURE,XPO$GM_FAILURE,XPO$FM_FAILURE, STR$FAILURE, STR$X_FAILURE, STR$C_FAILURE, STR$A_FAILURE, STR$S_FAILURE, STR$B_FAILURE))%THEN34 :BLISS;%FI $STR$DECLARE(8,$STR$FILE_SPEC, )$STR$LOCAL_INIT($STR$FILE_SPEC, )XPO$PARSE_SPEC($STR$FILE_SPEC, , %DECLARED( $XPO$INTERNAL), $XPO$DEFAULT( ,), $XPO$DEFAULT( ,)) FILE_SPEC SPEC_BLOCKSUCCESSFAILURE XPO$FAILURED%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(9CHARACTERS=, FULLWORDS= and UNITS= are mutually exclusive) %EXITMACRO%FI%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(,DESC= and DESCRIPTOR= are mutually exclusive) %EXITMACRO%FI%IF%IF%NULL( , )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN( @DESC=/DESCRIPTOR= and /RESULT= parameters are mutually exclusive) %EXITMACRO%FI%IF%NULL( , , )%THEN%INFORM("DSemantic meaning of DESCRIPTOR= has been changed - see documentation)%FI%IF%NULL(   )%THEN%WARN(DESC=, DESCRIPTOR= or RESULT=, parameter must be specified) %EXITMACRO%FI34 XPO$ALLOC_MEM:BLISS;%IF$XPO$KEY_CHECK( ,( XPO$FAILURE,XPO$IO_FAILURE,XPO$PS_FAILURE,XPO$GM_FAILURE,XPO$FM_FAILURE, STR$FAILURE, STR$X_FAILURE, STR$C_FAILURE, STR$A_FAILURE, STR$S_FAILURE, STR$B_FAILURE))%THEN34 :BLISS;%FI%IF%NULL( , )%THEN7 $XPO$DESC=  :BLOCK[ STR$K_B_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER, STR$H_MAXLEN, STR$H_PFXLEN);%ELSE8 $XPO$STATUS, $XPO$DESC:%IF%NULL( )%THENBLOCK[ STR$K_F_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER); $STR$STR_DESC( $XPO$DESC,DYNAMIC,(,))%ELSEBLOCK[ XPO$K_S_BLN]p( XPO$H_LENGTH, XPO$B_DTYPE, XPO$B_CLASS, XPO$A_ADDRESS); $XPO$BIN_DESC( $XPO$DESC,DYNAMIC,(,))%FI $XPO$STATUS=%FI XPO$ALLOC_MEM(%IF%NULL( , , )%THEN  %IF%NULL( )%THEN%BLISS32(*)%BLISS16(*)( )%FI,%ELSE. $XPO$DESC[ STR$B_CLASS]"STR$K_CLASS_DB. $XPO$DESC[ STR$H_MAXLEN]. $XPO$DESC[ STR$H_LENGTH],%FI $XPO$DESC,%IF%NULL( )%THENXPO$K_DONT_FILL,%ELSE%NULL( ),%FI $XPO$DEFAULT( ,), $XPO$DEFAULT( ,), $XPO$DEFAULT( ,))%IF%NULL( , )%THEN;. $XPO$STATUS%IF%NULL( )%THEN =. $XPO$DESC[ STR$A_POINTER];%ELSE =. $XPO$DESC[ XPO$A_ADDRESS];%FI. $XPO$STATUS%FI DESC DESCRIPTOR CHARACTERS FULLWORDSUNITSRESULTFILLSUCCESSFAILURE XPO$FAILURED%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(<STRING=, BINARY_DATA= and DESCRIPTOR= are mutually exclusive) %EXITMACRO%FI%IF%NULL(   )%THEN%WARN( STRING= or BINARY_DATA=, parameter must be specified) %EXITMACRO%FI%IF%NULL( )%THEN%INFORM(0DESCRIPTOR= is obsolete - use STRING= or BINARY=)%FI%IF %ISSTRING(%REMOVE( ))%THEN%WARN(*Literal STRING= parameter is not permitted) %EXITMACRO%FI34 XPO$FREE_MEM:BLISS;%IF$XPO$KEY_CHECK( ,( XPO$FAILURE,XPO$IO_FAILURE,XPO$PS_FAILURE,XPO$GM_FAILURE,XPO$FM_FAILURE, STR$FAILURE, STR$X_FAILURE, STR$C_FAILURE, STR$A_FAILURE, STR$S_FAILURE, STR$B_FAILURE))%THEN34 :BLISS;%FI%IF$XPO$PAREN_TEST( )$XPO$PAREN_TEST( )%THEN8 $XPO$DESC:%IF%NULL( )%THENBLOCK[ STR$K_F_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER)f;%ELSEBLOCK[ XPO$K_S_BLN]p( XPO$H_LENGTH, XPO$B_DTYPE, XPO$B_CLASS, XPO$A_ADDRESS)f;%FI $STR$STR_DESC( $XPO$DESC,DYNAMIC, ) $XPO$BIN_DESC( $XPO$DESC,DYNAMIC, ) XPO$FREE_MEM( $XPO$DESC,%ELSE XPO$FREE_MEM(   ,%FI%NULL( ), $XPO$DEFAULT( ,), $XPO$DEFAULT( ,), $XPO$DEFAULT( ,))STRING BINARY_DATA DESCRIPTORFILLSUCCESSFAILURE XPO$FAILURE - BLOCK[$XPO$FREE_ELEM_LEN]p($XPO$FREE_ELEMENT)D 34 XPO$TERMINATE:BLISS; XPO$TERMINATE( );B;CODEXPO$_TERMINATE7G$XPO$DESC_COUNT=,$XPO$DESC_INDEX=, $XPO$SEV_FLAG=,$XPO$SUCC_FLAG=,$XPO$FAIL_FLAG=;$XPO$PMSG_INIT( , %REMAINING)8$XPO$LOCAL_DESC: BLOCKVECTOR[$XPO$DESC_COUNT, STR$K_F_BLN]f;34 XPO$MESSAGE: FORTRAN_FUNC;%IF$XPO$FAIL_FLAG%THEN%ASSIGN($XPO$FAIL_FLAG,)%ELSE34 XPO$FAILURE:BLISS;%FI XPO$MESSAGE($XPO$PMSG_FIXED(, , %REMAINING)$XPO$PMSG_FIXED(, , %REMAINING)$XPO$PMSG_FIXED(, , %REMAINING)$XPO$PMSG_PARM( , %REMAINING))$XPO$$PMSG_INIT( )$XPO$PMSG_INIT( %REMAINING)D+%IF%NULL( )%THEN%IF$XPO$KEY_CHECK( ,( XPO$FAILURE,XPO$IO_FAILURE,XPO$PS_FAILURE,XPO$GM_FAILURE,XPO$FM_FAILURE, STR$FAILURE, STR$X_FAILURE, STR$C_FAILURE, STR$A_FAILURE, STR$S_FAILURE, STR$B_FAILURE))%THEN34 :BLISS;%FI%ASSIGN($XPO$FAIL_FLAG,)%FI%IF %ISSTRING(%REMOVE( ))$XPO$PAREN_TEST( )%THEN%ASSIGN($XPO$DESC_COUNT,$XPO$DESC_COUNT+)%FISEVERITYSUCCESSFAILURECODESTRING'$XPO$$PMSG_PARM(ARGUMENT= , )%IF%NULL( %REMAINING)%THEN$XPO$PMSG_FIXED( , %REMAINING)%ELSE%IF " $XPO$SEV_FLAG%THEN XPO$_NO_SEV,%ELSE%IF "$XPO$SUCC_FLAG%THEN,%ELSE%IF "$XPO$FAIL_FLAG%THEN XPO$FAILURE%FI%FI%FI%FI$XPO$$PMSG_PARM(ARGUMENT=, )$XPO$PMSG_PARM( %REMAINING)Dl%IF "%THEN%IF%NULL( )%THEN %EXITMACRO%FI%IF $XPO$SEV_FLAG%THEN%IF $XPO$KEY_TEST( ,(SUCCESS,WARNING,ERROR,FATAL), SEVERITY=)%THEN%NAME(XPO$_, ),%FI%ASSIGN( $XPO$SEV_FLAG,)%ELSE%WARN(&Extraneous SEVERITY= parameter ignored)%FI %EXITMACRO%FI%IF "%THEN%IF%NULL( )%THEN %EXITMACRO%FI%IF$XPO$SUCC_FLAG%THEN ,%ASSIGN($XPO$SUCC_FLAG,)%ELSE%WARN(%Extraneous SUCCESS= parameter ignored)%FI %EXITMACRO%FI%IF "%THEN%IF%NULL( )%THEN %EXITMACRO%FI%IF$XPO$FAIL_FLAG%THEN %ASSIGN($XPO$FAIL_FLAG,)%ELSE%WARN(%Extraneous FAILURE= parameter ignored)%FI %EXITMACRO%FI%IF%NULL( )%THEN, XPO$K_PUT_COD,  %EXITMACRO%FI%IF%NULL( )%THEN, XPO$K_PUT_STR, $STR$DECLARE(8, $PMSG$STRING, )$STR$LOCAL_INIT( $PMSG$STRING, ) $PMSG$STRING%FIARGUMENTSEVERITYSUCCESSFAILURECODESTRING ( ]  K  R  ,  |   @BLOCK[]p($STR$OPT_FIELDS)%IF %DECLARED( $XPO$INTERNAL)%THENSTR$M_NO_FREE_T%ELSE%FID%IF%NULL( )%THEN%WARN(STRING1=, parameter must be specified) %EXITMACRO%FI%IF%NULL( )%THEN%WARN(STRING2=, parameter must be specified) %EXITMACRO%FI $STR$COMPARE(XST$EQL, , , , , )STRING1STRING2FILLSUCCESSFAILURE STR$FAILURED%IF%NULL( )%THEN%WARN(STRING1=, parameter must be specified) %EXITMACRO%FI%IF%NULL( )%THEN%WARN(STRING2=, parameter must be specified) %EXITMACRO%FI $STR$COMPARE(XST$NEQ, , , , , )STRING1STRING2FILLSUCCESSFAILURE STR$FAILURED%IF%NULL( )%THEN%WARN(STRING1=, parameter must be specified) %EXITMACRO%FI%IF%NULL( )%THEN%WARN(STRING2=, parameter must be specified) %EXITMACRO%FI $STR$COMPARE(XST$LSS, , , , , )STRING1STRING2FILLSUCCESSFAILURE STR$FAILURED%IF%NULL( )%THEN%WARN(STRING1=, parameter must be specified) %EXITMACRO%FI%IF%NULL( )%THEN%WARN(STRING2=, parameter must be specified) %EXITMACRO%FI $STR$COMPARE(XST$LEQ, , , , , )STRING1STRING2FILLSUCCESSFAILURE STR$FAILURED%IF%NULL( )%THEN%WARN(STRING1=, parameter must be specified) %EXITMACRO%FI%IF%NULL( )%THEN%WARN(STRING2=, parameter must be specified) %EXITMACRO%FI $STR$COMPARE(XST$GEQ, , , , , )STRING1STRING2FILLSUCCESSFAILURE STR$FAILURED%IF%NULL( )%THEN%WARN(STRING1=, parameter must be specified) %EXITMACRO%FI%IF%NULL( )%THEN%WARN(STRING2=, parameter must be specified) %EXITMACRO%FI $STR$COMPARE(XST$GTR, , , , , )STRING1STRING2FILLSUCCESSFAILURE STR$FAILURED%IF%NULL( )%THEN%WARN(STRING1=, parameter must be specified) %EXITMACRO%FI%IF%NULL( )%THEN%WARN(STRING2=, parameter must be specified) %EXITMACRO%FI $STR$COMPARE(XST$CMP, , , , , )STRING1STRING2FILLSUCCESSFAILURE STR$FAILURE34 :%IF%NULL()%THEN%BLISS16(BLISS)%BLISS32(BLISS)%BLISS36(BLISS36C)%ELSE%FI%BLISS32( ( LONG_RELATIVE));%IF$XPO$KEY_CHECK( ,( XPO$FAILURE,XPO$IO_FAILURE,XPO$PS_FAILURE,XPO$GM_FAILURE,XPO$FM_FAILURE, STR$FAILURE, STR$X_FAILURE, STR$C_FAILURE, STR$A_FAILURE, STR$S_FAILURE, STR$B_FAILURE))%THEN34 :BLISS;%FI%IF $XPO$KEY_TEST(8,(7,8),Type)%THEN%IF %ISSTRING(%REMOVE( ))%THEN1 $STR$STRING1:%IF$XPO$KEY_CHECK(FIXED,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED,STATIC,VARYING,DYNAMIC_VARYING))%THEN%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THEN%IF $XPO$KEY_TEST(FIXED,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED),CLASS=)%THEN %EXITMACRO%FI%FI%FI%IF$XPO$KEY_CHECK(FIXED,(STATIC,VARYING,DYNAMIC_VARYING))%THEN%INFORM(CLASS=,FIXED,( is obsolete - see current documentation)%FI%IF%NULL()%THEN%INFORM(8BINARY_DATA= is obsolete - use the $XPO_DESCRIPTOR macro)%FI%IF%NULL()%THEN%INFORM(-TYPE= is obsolete - see current documentation)%IF $XPO$KEY_TEST(,( CHARACTERS, FULLWORDS,UNITS),TYPE=)%THEN %EXITMACRO%FI%FI%IF%IF%NULL(%REMOVE( ))%THEN+%FI%IF%NULL()%THEN+%FI%IF%NULL()%THEN+%FIU%THEN%WARN(7TYPE=, STRING=, and BINARY_DATA= are mutually exclusive)%FI%IF%NULL(%REMOVE( ))($XPO$PAREN_TEST(%REMOVE( )) %ISSTRING(%REMOVE(%REMOVE( ))))%THEN%WARN("STRING=descriptor is not permitted) %EXITMACRO%FI%IF %ISSTRING(%REMOVE(%REMOVE( ))) %IDENTICAL(FIXED,FIXED)%THEN%WARN(#STRING=literal requires CLASS=FIXED) %EXITMACRO%FI%IF$XPO$PAREN_TEST(%REMOVE( )) %IDENTICAL( $XPO$ARG1(%REMOVE(%REMOVE( ))),)( %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,BOUNDED))%THEN%WARN(6STRING=(len,ptr) requires CLASS=FIXED or CLASS=BOUNDED) %EXITMACRO%FI%IF %IDENTICAL(FIXED,BOUNDED) %IDENTICAL(FIXED,DYNAMIC_BOUNDED) %IDENTICAL(FIXED,VARYING) %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENBLOCK[ STR$K_B_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER, STR$H_MAXLEN, STR$H_PFXLEN)%ELSEBLOCK[ STR$K_F_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER)%FI%IF%NULL(,%REMOVE( ),)%THEN %EXITMACRO%FI%IF%NULL()%THENr([ STR$B_DTYPE]=%IF %IDENTICAL(, CHARACTERS)%THEN STR$K_DTYPE_T%ELSE%IF %IDENTICAL(, FULLWORDS) %IDENTICAL(,UNITS)%THENXPO$K_DTYPE_BU%FI%FI,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI)%FI%IF%NULL(%REMOVE( ))%THENr([ STR$B_DTYPE]= STR$K_DTYPE_T,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI,%IF %ISSTRING(%REMOVE(%REMOVE( )))%THEN[ STR$H_LENGTH]= %CHARCOUNT(%REMOVE(%REMOVE( ))),[ STR$A_POINTER]=CH$PTR(j%BLISS16(`)%BLISS32(`)(%REMOVE(%REMOVE( ))))%ELSE[ STR$A_POINTER]= $XPO$ARG2(%REMOVE(%REMOVE( ))),%IF %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,DYNAMIC)%THEN[ STR$H_LENGTH]= $XPO$ARG1(%REMOVE(%REMOVE( )))%ELSE[ STR$H_MAXLEN]= $XPO$ARG1(%REMOVE(%REMOVE( )))%FI%FI)%FI%IF%NULL()%THENr([ STR$B_DTYPE]=XPO$K_DTYPE_BU,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI,[ STR$A_POINTER]= $XPO$ARG2(%REMOVE()),%IF %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,DYNAMIC)%THEN[ STR$H_LENGTH]= $XPO$BIN_LEN(%REMOVE())%ELSE[ STR$H_MAXLEN]= $XPO$BIN_LEN(%REMOVE())%FI)%FI;%ELSE%IF$XPO$PAREN_TEST( )%THEN%IF %IDENTICAL(8,7)%THEN7 $STR$STRING1= $STR_FORMAT( );%ELSE8 $STR$STRING1:BLOCK[ STR$K_F_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER)f;%FI%ELSE7 $STR$STRING1= ;%FI%FI%FI%IF $XPO$KEY_TEST(8,(7,8),Type)%THEN%IF %ISSTRING(%REMOVE( ))%THEN1 $STR$STRING2:%IF$XPO$KEY_CHECK(FIXED,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED,STATIC,VARYING,DYNAMIC_VARYING))%THEN%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THEN%IF $XPO$KEY_TEST(FIXED,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED),CLASS=)%THEN %EXITMACRO%FI%FI%FI%IF$XPO$KEY_CHECK(FIXED,(STATIC,VARYING,DYNAMIC_VARYING))%THEN%INFORM(CLASS=,FIXED,( is obsolete - see current documentation)%FI%IF%NULL()%THEN%INFORM(8BINARY_DATA= is obsolete - use the $XPO_DESCRIPTOR macro)%FI%IF%NULL()%THEN%INFORM(-TYPE= is obsolete - see current documentation)%IF $XPO$KEY_TEST(,( CHARACTERS, FULLWORDS,UNITS),TYPE=)%THEN %EXITMACRO%FI%FI%IF%IF%NULL(%REMOVE( ))%THEN+%FI%IF%NULL()%THEN+%FI%IF%NULL()%THEN+%FIU%THEN%WARN(7TYPE=, STRING=, and BINARY_DATA= are mutually exclusive)%FI%IF%NULL(%REMOVE( ))($XPO$PAREN_TEST(%REMOVE( )) %ISSTRING(%REMOVE(%REMOVE( ))))%THEN%WARN("STRING=descriptor is not permitted) %EXITMACRO%FI%IF %ISSTRING(%REMOVE(%REMOVE( ))) %IDENTICAL(FIXED,FIXED)%THEN%WARN(#STRING=literal requires CLASS=FIXED) %EXITMACRO%FI%IF$XPO$PAREN_TEST(%REMOVE( )) %IDENTICAL( $XPO$ARG1(%REMOVE(%REMOVE( ))),)( %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,BOUNDED))%THEN%WARN(6STRING=(len,ptr) requires CLASS=FIXED or CLASS=BOUNDED) %EXITMACRO%FI%IF %IDENTICAL(FIXED,BOUNDED) %IDENTICAL(FIXED,DYNAMIC_BOUNDED) %IDENTICAL(FIXED,VARYING) %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENBLOCK[ STR$K_B_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER, STR$H_MAXLEN, STR$H_PFXLEN)%ELSEBLOCK[ STR$K_F_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER)%FI%IF%NULL(,%REMOVE( ),)%THEN %EXITMACRO%FI%IF%NULL()%THENr([ STR$B_DTYPE]=%IF %IDENTICAL(, CHARACTERS)%THEN STR$K_DTYPE_T%ELSE%IF %IDENTICAL(, FULLWORDS) %IDENTICAL(,UNITS)%THENXPO$K_DTYPE_BU%FI%FI,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI)%FI%IF%NULL(%REMOVE( ))%THENr([ STR$B_DTYPE]= STR$K_DTYPE_T,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI,%IF %ISSTRING(%REMOVE(%REMOVE( )))%THEN[ STR$H_LENGTH]= %CHARCOUNT(%REMOVE(%REMOVE( ))),[ STR$A_POINTER]=CH$PTR(j%BLISS16(`)%BLISS32(`)(%REMOVE(%REMOVE( ))))%ELSE[ STR$A_POINTER]= $XPO$ARG2(%REMOVE(%REMOVE( ))),%IF %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,DYNAMIC)%THEN[ STR$H_LENGTH]= $XPO$ARG1(%REMOVE(%REMOVE( )))%ELSE[ STR$H_MAXLEN]= $XPO$ARG1(%REMOVE(%REMOVE( )))%FI%FI)%FI%IF%NULL()%THENr([ STR$B_DTYPE]=XPO$K_DTYPE_BU,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI,[ STR$A_POINTER]= $XPO$ARG2(%REMOVE()),%IF %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,DYNAMIC)%THEN[ STR$H_LENGTH]= $XPO$BIN_LEN(%REMOVE())%ELSE[ STR$H_MAXLEN]= $XPO$BIN_LEN(%REMOVE())%FI)%FI;%ELSE%IF$XPO$PAREN_TEST( )%THEN%IF %IDENTICAL(8,7)%THEN7 $STR$STRING2= $STR_FORMAT( );%ELSE8 $STR$STRING2:BLOCK[ STR$K_F_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER)f;%FI%ELSE7 $STR$STRING2= ;%FI%FI%FI%IF %ISSTRING(%REMOVE( ))$XPO$PAREN_TEST( )%THEN $STR$STR_DESC( $STR$STRING1,FIXED, )%FI%IF %ISSTRING(%REMOVE( ))$XPO$PAREN_TEST( )%THEN $STR$STR_DESC( $STR$STRING2,FIXED, )%FI (%IF %DECLARED( $XPO$INTERNAL)%THENSTR$M_NO_FREE_T%ELSE%FI, $STR$STRING1, $STR$STRING2, $XPO$DEFAULT( ,-), $XPO$DEFAULT( ,), $XPO$DEFAULT( ,))D%IF%NULL( )%THEN%WARN(STRING=, parameter must be specified) %EXITMACRO%FI%IF%NULL( )%THEN%WARN(TARGET=, parameter must be specified) %EXITMACRO%FI%IF %ISSTRING(%REMOVE( ))%THEN%WARN(&TARGET=literal-string is not permitted)%FI%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(+OPTION= and OPTIONS= are mutually exclusive)%FI%ASSIGN( $STR$OPTIONS,%IF %DECLARED( $XPO$INTERNAL)%THENSTR$M_NO_FREE_T%ELSE%FI) $STR$COPY_OPT( %REMOVE( ))34XST$COPY:BLISS;%IF$XPO$KEY_CHECK( ,( XPO$FAILURE,XPO$IO_FAILURE,XPO$PS_FAILURE,XPO$GM_FAILURE,XPO$FM_FAILURE, STR$FAILURE, STR$X_FAILURE, STR$C_FAILURE, STR$A_FAILURE, STR$S_FAILURE, STR$B_FAILURE))%THEN34 :BLISS;%FI%IF $XPO$KEY_TEST(8,(7,8),Type)%THEN%IF %ISSTRING(%REMOVE( ))%THEN1 $STR$STRING:%IF$XPO$KEY_CHECK(FIXED,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED,STATIC,VARYING,DYNAMIC_VARYING))%THEN%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THEN%IF $XPO$KEY_TEST(FIXED,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED),CLASS=)%THEN %EXITMACRO%FI%FI%FI%IF$XPO$KEY_CHECK(FIXED,(STATIC,VARYING,DYNAMIC_VARYING))%THEN%INFORM(CLASS=,FIXED,( is obsolete - see current documentation)%FI%IF%NULL()%THEN%INFORM(8BINARY_DATA= is obsolete - use the $XPO_DESCRIPTOR macro)%FI%IF%NULL()%THEN%INFORM(-TYPE= is obsolete - see current documentation)%IF $XPO$KEY_TEST(,( CHARACTERS, FULLWORDS,UNITS),TYPE=)%THEN %EXITMACRO%FI%FI%IF%IF%NULL(%REMOVE( ))%THEN+%FI%IF%NULL()%THEN+%FI%IF%NULL()%THEN+%FIU%THEN%WARN(7TYPE=, STRING=, and BINARY_DATA= are mutually exclusive)%FI%IF%NULL(%REMOVE( ))($XPO$PAREN_TEST(%REMOVE( )) %ISSTRING(%REMOVE(%REMOVE( ))))%THEN%WARN("STRING=descriptor is not permitted) %EXITMACRO%FI%IF %ISSTRING(%REMOVE(%REMOVE( ))) %IDENTICAL(FIXED,FIXED)%THEN%WARN(#STRING=literal requires CLASS=FIXED) %EXITMACRO%FI%IF$XPO$PAREN_TEST(%REMOVE( )) %IDENTICAL( $XPO$ARG1(%REMOVE(%REMOVE( ))),)( %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,BOUNDED))%THEN%WARN(6STRING=(len,ptr) requires CLASS=FIXED or CLASS=BOUNDED) %EXITMACRO%FI%IF %IDENTICAL(FIXED,BOUNDED) %IDENTICAL(FIXED,DYNAMIC_BOUNDED) %IDENTICAL(FIXED,VARYING) %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENBLOCK[ STR$K_B_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER, STR$H_MAXLEN, STR$H_PFXLEN)%ELSEBLOCK[ STR$K_F_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER)%FI%IF%NULL(,%REMOVE( ),)%THEN %EXITMACRO%FI%IF%NULL()%THENr([ STR$B_DTYPE]=%IF %IDENTICAL(, CHARACTERS)%THEN STR$K_DTYPE_T%ELSE%IF %IDENTICAL(, FULLWORDS) %IDENTICAL(,UNITS)%THENXPO$K_DTYPE_BU%FI%FI,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI)%FI%IF%NULL(%REMOVE( ))%THENr([ STR$B_DTYPE]= STR$K_DTYPE_T,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI,%IF %ISSTRING(%REMOVE(%REMOVE( )))%THEN[ STR$H_LENGTH]= %CHARCOUNT(%REMOVE(%REMOVE( ))),[ STR$A_POINTER]=CH$PTR(j%BLISS16(`)%BLISS32(`)(%REMOVE(%REMOVE( ))))%ELSE[ STR$A_POINTER]= $XPO$ARG2(%REMOVE(%REMOVE( ))),%IF %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,DYNAMIC)%THEN[ STR$H_LENGTH]= $XPO$ARG1(%REMOVE(%REMOVE( )))%ELSE[ STR$H_MAXLEN]= $XPO$ARG1(%REMOVE(%REMOVE( )))%FI%FI)%FI%IF%NULL()%THENr([ STR$B_DTYPE]=XPO$K_DTYPE_BU,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI,[ STR$A_POINTER]= $XPO$ARG2(%REMOVE()),%IF %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,DYNAMIC)%THEN[ STR$H_LENGTH]= $XPO$BIN_LEN(%REMOVE())%ELSE[ STR$H_MAXLEN]= $XPO$BIN_LEN(%REMOVE())%FI)%FI;%ELSE%IF$XPO$PAREN_TEST( )%THEN%IF %IDENTICAL(8,7)%THEN7 $STR$STRING= $STR_FORMAT( );%ELSE8 $STR$STRING:BLOCK[ STR$K_F_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER)f;%FI%ELSE7 $STR$STRING= ;%FI%FI%FI%IF $XPO$KEY_TEST(8,(7,8),Type)%THEN%IF %ISSTRING(%REMOVE( ))%THEN1 $STR$TARGET:%IF$XPO$KEY_CHECK(FIXED,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED,STATIC,VARYING,DYNAMIC_VARYING))%THEN%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THEN%IF $XPO$KEY_TEST(FIXED,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED),CLASS=)%THEN %EXITMACRO%FI%FI%FI%IF$XPO$KEY_CHECK(FIXED,(STATIC,VARYING,DYNAMIC_VARYING))%THEN%INFORM(CLASS=,FIXED,( is obsolete - see current documentation)%FI%IF%NULL()%THEN%INFORM(8BINARY_DATA= is obsolete - use the $XPO_DESCRIPTOR macro)%FI%IF%NULL()%THEN%INFORM(-TYPE= is obsolete - see current documentation)%IF $XPO$KEY_TEST(,( CHARACTERS, FULLWORDS,UNITS),TYPE=)%THEN %EXITMACRO%FI%FI%IF%IF%NULL(%REMOVE( ))%THEN+%FI%IF%NULL()%THEN+%FI%IF%NULL()%THEN+%FIU%THEN%WARN(7TYPE=, STRING=, and BINARY_DATA= are mutually exclusive)%FI%IF%NULL(%REMOVE( ))($XPO$PAREN_TEST(%REMOVE( )) %ISSTRING(%REMOVE(%REMOVE( ))))%THEN%WARN("STRING=descriptor is not permitted) %EXITMACRO%FI%IF %ISSTRING(%REMOVE(%REMOVE( ))) %IDENTICAL(FIXED,FIXED)%THEN%WARN(#STRING=literal requires CLASS=FIXED) %EXITMACRO%FI%IF$XPO$PAREN_TEST(%REMOVE( )) %IDENTICAL( $XPO$ARG1(%REMOVE(%REMOVE( ))),)( %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,BOUNDED))%THEN%WARN(6STRING=(len,ptr) requires CLASS=FIXED or CLASS=BOUNDED) %EXITMACRO%FI%IF %IDENTICAL(FIXED,BOUNDED) %IDENTICAL(FIXED,DYNAMIC_BOUNDED) %IDENTICAL(FIXED,VARYING) %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENBLOCK[ STR$K_B_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER, STR$H_MAXLEN, STR$H_PFXLEN)%ELSEBLOCK[ STR$K_F_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER)%FI%IF%NULL(,%REMOVE( ),)%THEN %EXITMACRO%FI%IF%NULL()%THENr([ STR$B_DTYPE]=%IF %IDENTICAL(, CHARACTERS)%THEN STR$K_DTYPE_T%ELSE%IF %IDENTICAL(, FULLWORDS) %IDENTICAL(,UNITS)%THENXPO$K_DTYPE_BU%FI%FI,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI)%FI%IF%NULL(%REMOVE( ))%THENr([ STR$B_DTYPE]= STR$K_DTYPE_T,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI,%IF %ISSTRING(%REMOVE(%REMOVE( )))%THEN[ STR$H_LENGTH]= %CHARCOUNT(%REMOVE(%REMOVE( ))),[ STR$A_POINTER]=CH$PTR(j%BLISS16(`)%BLISS32(`)(%REMOVE(%REMOVE( ))))%ELSE[ STR$A_POINTER]= $XPO$ARG2(%REMOVE(%REMOVE( ))),%IF %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,DYNAMIC)%THEN[ STR$H_LENGTH]= $XPO$ARG1(%REMOVE(%REMOVE( )))%ELSE[ STR$H_MAXLEN]= $XPO$ARG1(%REMOVE(%REMOVE( )))%FI%FI)%FI%IF%NULL()%THENr([ STR$B_DTYPE]=XPO$K_DTYPE_BU,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI,[ STR$A_POINTER]= $XPO$ARG2(%REMOVE()),%IF %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,DYNAMIC)%THEN[ STR$H_LENGTH]= $XPO$BIN_LEN(%REMOVE())%ELSE[ STR$H_MAXLEN]= $XPO$BIN_LEN(%REMOVE())%FI)%FI;%ELSE%IF$XPO$PAREN_TEST( )%THEN%IF %IDENTICAL(8,7)%THEN7 $STR$TARGET= $STR_FORMAT( );%ELSE8 $STR$TARGET:BLOCK[ STR$K_F_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER)f;%FI%ELSE7 $STR$TARGET= ;%FI%FI%FI%IF %ISSTRING(%REMOVE( ))$XPO$PAREN_TEST( )%THEN $STR$STR_DESC( $STR$STRING,FIXED, )%FI%IF %ISSTRING(%REMOVE( ))$XPO$PAREN_TEST( )%THEN $STR$STR_DESC( $STR$TARGET,FIXED, )%FIXST$COPY(%NUMBER( $STR$OPTIONS), $STR$STRING, $STR$TARGET, $XPO$DEFAULT( ,), $XPO$DEFAULT( ,))STRINGTARGETOPTIONOPTIONSSUCCESSFAILURE STR$FAILURED%IF%NULL( )%THEN%WARN(STRING=, parameter must be specified) %EXITMACRO%FI%IF%NULL( )%THEN%WARN(TARGET=, parameter must be specified) %EXITMACRO%FI%IF %ISSTRING(%REMOVE( ))%THEN%WARN(&TARGET=literal-string is not permitted)%FI%IF$XPO$PAREN_TEST( ) %ISSTRING(%REMOVE( ))%THEN%WARN((TARGET=(length,pointer) is not permitted)%FI%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(+OPTION= and OPTIONS= are mutually exclusive)%FI%ASSIGN( $STR$OPTIONS,%IF %DECLARED( $XPO$INTERNAL)%THENSTR$M_NO_FREE_T%ELSE%FI) $STR$COPY_OPT( %REMOVE( ))34 XST$APPEND:BLISS;%IF$XPO$KEY_CHECK( ,( XPO$FAILURE,XPO$IO_FAILURE,XPO$PS_FAILURE,XPO$GM_FAILURE,XPO$FM_FAILURE, STR$FAILURE, STR$X_FAILURE, STR$C_FAILURE, STR$A_FAILURE, STR$S_FAILURE, STR$B_FAILURE))%THEN34 :BLISS;%FI%IF $XPO$KEY_TEST(8,(7,8),Type)%THEN%IF %ISSTRING(%REMOVE( ))%THEN1 $STR$STRING:%IF$XPO$KEY_CHECK(FIXED,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED,STATIC,VARYING,DYNAMIC_VARYING))%THEN%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THEN%IF $XPO$KEY_TEST(FIXED,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED),CLASS=)%THEN %EXITMACRO%FI%FI%FI%IF$XPO$KEY_CHECK(FIXED,(STATIC,VARYING,DYNAMIC_VARYING))%THEN%INFORM(CLASS=,FIXED,( is obsolete - see current documentation)%FI%IF%NULL()%THEN%INFORM(8BINARY_DATA= is obsolete - use the $XPO_DESCRIPTOR macro)%FI%IF%NULL()%THEN%INFORM(-TYPE= is obsolete - see current documentation)%IF $XPO$KEY_TEST(,( CHARACTERS, FULLWORDS,UNITS),TYPE=)%THEN %EXITMACRO%FI%FI%IF%IF%NULL(%REMOVE( ))%THEN+%FI%IF%NULL()%THEN+%FI%IF%NULL()%THEN+%FIU%THEN%WARN(7TYPE=, STRING=, and BINARY_DATA= are mutually exclusive)%FI%IF%NULL(%REMOVE( ))($XPO$PAREN_TEST(%REMOVE( )) %ISSTRING(%REMOVE(%REMOVE( ))))%THEN%WARN("STRING=descriptor is not permitted) %EXITMACRO%FI%IF %ISSTRING(%REMOVE(%REMOVE( ))) %IDENTICAL(FIXED,FIXED)%THEN%WARN(#STRING=literal requires CLASS=FIXED) %EXITMACRO%FI%IF$XPO$PAREN_TEST(%REMOVE( )) %IDENTICAL( $XPO$ARG1(%REMOVE(%REMOVE( ))),)( %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,BOUNDED))%THEN%WARN(6STRING=(len,ptr) requires CLASS=FIXED or CLASS=BOUNDED) %EXITMACRO%FI%IF %IDENTICAL(FIXED,BOUNDED) %IDENTICAL(FIXED,DYNAMIC_BOUNDED) %IDENTICAL(FIXED,VARYING) %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENBLOCK[ STR$K_B_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER, STR$H_MAXLEN, STR$H_PFXLEN)%ELSEBLOCK[ STR$K_F_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER)%FI%IF%NULL(,%REMOVE( ),)%THEN %EXITMACRO%FI%IF%NULL()%THENr([ STR$B_DTYPE]=%IF %IDENTICAL(, CHARACTERS)%THEN STR$K_DTYPE_T%ELSE%IF %IDENTICAL(, FULLWORDS) %IDENTICAL(,UNITS)%THENXPO$K_DTYPE_BU%FI%FI,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI)%FI%IF%NULL(%REMOVE( ))%THENr([ STR$B_DTYPE]= STR$K_DTYPE_T,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI,%IF %ISSTRING(%REMOVE(%REMOVE( )))%THEN[ STR$H_LENGTH]= %CHARCOUNT(%REMOVE(%REMOVE( ))),[ STR$A_POINTER]=CH$PTR(j%BLISS16(`)%BLISS32(`)(%REMOVE(%REMOVE( ))))%ELSE[ STR$A_POINTER]= $XPO$ARG2(%REMOVE(%REMOVE( ))),%IF %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,DYNAMIC)%THEN[ STR$H_LENGTH]= $XPO$ARG1(%REMOVE(%REMOVE( )))%ELSE[ STR$H_MAXLEN]= $XPO$ARG1(%REMOVE(%REMOVE( )))%FI%FI)%FI%IF%NULL()%THENr([ STR$B_DTYPE]=XPO$K_DTYPE_BU,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI,[ STR$A_POINTER]= $XPO$ARG2(%REMOVE()),%IF %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,DYNAMIC)%THEN[ STR$H_LENGTH]= $XPO$BIN_LEN(%REMOVE())%ELSE[ STR$H_MAXLEN]= $XPO$BIN_LEN(%REMOVE())%FI)%FI;%ELSE%IF$XPO$PAREN_TEST( )%THEN%IF %IDENTICAL(8,7)%THEN7 $STR$STRING= $STR_FORMAT( );%ELSE8 $STR$STRING:BLOCK[ STR$K_F_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER)f;%FI%ELSE7 $STR$STRING= ;%FI%FI%FI%IF %ISSTRING(%REMOVE( ))$XPO$PAREN_TEST( )%THEN $STR$STR_DESC( $STR$STRING,FIXED, )%FI XST$APPEND(%NUMBER( $STR$OPTIONS), $STR$STRING, , $XPO$DEFAULT( ,), $XPO$DEFAULT( ,))STRINGTARGETOPTIONOPTIONSSUCCESSFAILURE STR$FAILURE%IF $XPO$KEY_TEST( ,(UP_CASE,TRUNCATE),OPTIONS=)%THEN %EXITMACRO%FI%ASSIGN( $STR$OPTIONS, $STR$OPTIONS+ $XPO$NAME15(STR$M_, )) $STR$COPY_OPT( %REMAINING)%INFORM('$CONCAT has been renamed to $STR_CONCAT) $STR_CONCAT34XST$JOIN: FORTRAN_FUNC; $STR$CON_DECL( %REMAINING) $STR$CON_INIT( %REMAINING)XST$JOIN( $STR$CON_ARGS( %REMAINING))  $STR$DECLARE(8,%NAME(%STRING( $str$string,%COUNT)), ) $STR$CON_DECL( %REMAINING) $STR$LOCAL_INIT(%NAME(%STRING( $str$string,%COUNT)), ) $STR$CON_INIT( %REMAINING) %IF%COUNT#%THEN,%FI%NAME(%STRING( $str$string,%COUNT)) $STR$CON_ARGS( %REMAINING)%INFORM('$FORMAT has been renamed to $STR_FORMAT) $STR_FORMATB%ASSIGN( $STR$OPTIONS,%IF %DECLARED( $XPO$INTERNAL)%THENSTR$M_NO_FREE_T%ELSE%FI)%ASSIGN( $STR$LENGTH,)$STR$FORMAT_OPT( %REMAINING)34 XST$FORMAT:BLISS;%IF $XPO$KEY_TEST(8,(7,8),Type)%THEN%IF %ISSTRING(%REMOVE( ))%THEN1 $STR$STRING:%IF$XPO$KEY_CHECK(FIXED,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED,STATIC,VARYING,DYNAMIC_VARYING))%THEN%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THEN%IF $XPO$KEY_TEST(FIXED,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED),CLASS=)%THEN %EXITMACRO%FI%FI%FI%IF$XPO$KEY_CHECK(FIXED,(STATIC,VARYING,DYNAMIC_VARYING))%THEN%INFORM(CLASS=,FIXED,( is obsolete - see current documentation)%FI%IF%NULL()%THEN%INFORM(8BINARY_DATA= is obsolete - use the $XPO_DESCRIPTOR macro)%FI%IF%NULL()%THEN%INFORM(-TYPE= is obsolete - see current documentation)%IF $XPO$KEY_TEST(,( CHARACTERS, FULLWORDS,UNITS),TYPE=)%THEN %EXITMACRO%FI%FI%IF%IF%NULL(%REMOVE( ))%THEN+%FI%IF%NULL()%THEN+%FI%IF%NULL()%THEN+%FIU%THEN%WARN(7TYPE=, STRING=, and BINARY_DATA= are mutually exclusive)%FI%IF%NULL(%REMOVE( ))($XPO$PAREN_TEST(%REMOVE( )) %ISSTRING(%REMOVE(%REMOVE( ))))%THEN%WARN("STRING=descriptor is not permitted) %EXITMACRO%FI%IF %ISSTRING(%REMOVE(%REMOVE( ))) %IDENTICAL(FIXED,FIXED)%THEN%WARN(#STRING=literal requires CLASS=FIXED) %EXITMACRO%FI%IF$XPO$PAREN_TEST(%REMOVE( )) %IDENTICAL( $XPO$ARG1(%REMOVE(%REMOVE( ))),)( %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,BOUNDED))%THEN%WARN(6STRING=(len,ptr) requires CLASS=FIXED or CLASS=BOUNDED) %EXITMACRO%FI%IF %IDENTICAL(FIXED,BOUNDED) %IDENTICAL(FIXED,DYNAMIC_BOUNDED) %IDENTICAL(FIXED,VARYING) %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENBLOCK[ STR$K_B_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER, STR$H_MAXLEN, STR$H_PFXLEN)%ELSEBLOCK[ STR$K_F_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER)%FI%IF%NULL(,%REMOVE( ),)%THEN %EXITMACRO%FI%IF%NULL()%THENr([ STR$B_DTYPE]=%IF %IDENTICAL(, CHARACTERS)%THEN STR$K_DTYPE_T%ELSE%IF %IDENTICAL(, FULLWORDS) %IDENTICAL(,UNITS)%THENXPO$K_DTYPE_BU%FI%FI,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI)%FI%IF%NULL(%REMOVE( ))%THENr([ STR$B_DTYPE]= STR$K_DTYPE_T,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI,%IF %ISSTRING(%REMOVE(%REMOVE( )))%THEN[ STR$H_LENGTH]= %CHARCOUNT(%REMOVE(%REMOVE( ))),[ STR$A_POINTER]=CH$PTR(j%BLISS16(`)%BLISS32(`)(%REMOVE(%REMOVE( ))))%ELSE[ STR$A_POINTER]= $XPO$ARG2(%REMOVE(%REMOVE( ))),%IF %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,DYNAMIC)%THEN[ STR$H_LENGTH]= $XPO$ARG1(%REMOVE(%REMOVE( )))%ELSE[ STR$H_MAXLEN]= $XPO$ARG1(%REMOVE(%REMOVE( )))%FI%FI)%FI%IF%NULL()%THENr([ STR$B_DTYPE]=XPO$K_DTYPE_BU,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI,[ STR$A_POINTER]= $XPO$ARG2(%REMOVE()),%IF %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,DYNAMIC)%THEN[ STR$H_LENGTH]= $XPO$BIN_LEN(%REMOVE())%ELSE[ STR$H_MAXLEN]= $XPO$BIN_LEN(%REMOVE())%FI)%FI;%ELSE%IF$XPO$PAREN_TEST( )%THEN%IF %IDENTICAL(8,7)%THEN7 $STR$STRING= $STR_FORMAT( );%ELSE8 $STR$STRING:BLOCK[ STR$K_F_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER)f;%FI%ELSE7 $STR$STRING= ;%FI%FI%FI%IF %ISSTRING(%REMOVE( ))$XPO$PAREN_TEST( )%THEN $STR$STR_DESC( $STR$STRING,FIXED, )%FI XST$FORMAT(%NUMBER( $STR$OPTIONS), $STR$STRING, $STR$LEN_VAL( %REMAINING)%IF $STR$LENGTH%THEN%FI)%IF$XPO$KEY_CHECK( ,(UP_CASE, LEFT_JUSTIFY, RIGHT_JUSTIFY,CENTER),Option)%THEN%ASSIGN( $STR$OPTIONS, $STR$OPTIONS $XPO$NAME15(STR$M_, ))%ELSE$STR$FORMAT_KEY( )%FI$STR$FORMAT_OPT( %REMAINING)DLENGTH%INFORM(%$ASCII has been renamed to $STR_ASCII) $STR_ASCIIV%ASSIGN( $STR$FUNCTION, STR$K_BASE10)%ASSIGN( $STR$OPTIONS,%IF %DECLARED( $XPO$INTERNAL)%THENSTR$M_NO_FREE_T%ELSE%FI)%ASSIGN( $STR$LENGTH,)$STR$ASCII_OPT( %REMAINING)%IF( $STR$OPTIONS(STR$M_LEADING_BSTR$M_LEADING_Z))"%THEN%IF $STR$FUNCTION" STR$K_BASE10%THEN%ASSIGN( $STR$OPTIONS, $STR$OPTIONSSTR$M_LEADING_B)%ELSE%ASSIGN( $STR$OPTIONS, $STR$OPTIONSSTR$M_LEADING_Z)%FI%FI%IF( $STR$OPTIONS( STR$M_SIGNEDSTR$M_UNSIGNED))"%THEN%IF $STR$FUNCTION" STR$K_BASE10%THEN%ASSIGN( $STR$OPTIONS, $STR$OPTIONS STR$M_SIGNED)%ELSE%ASSIGN( $STR$OPTIONS, $STR$OPTIONSSTR$M_UNSIGNED)%FI%FI34 XST$ASCII:BLISS; XST$ASCII(%NUMBER( $STR$OPTIONS)+%NUMBER( $STR$FUNCTION), , $STR$LEN_VAL( %REMAINING)%IF $STR$LENGTH%THEN%FI)5%IF$XPO$KEY_CHECK( ,(BASE2,BASE8,BASE10,BASE16,@,F, LEADING_BLANK, LEADING_ZERO,DATE,TIME,DAY))%THEN%IF$XPO$KEY_CHECK( ,(BASE2,BASE8,BASE10,BASE16,DATE,TIME,DAY))%THEN%ASSIGN( $STR$FUNCTION, $XPO$NAME15(STR$K_, ))%ELSE%ASSIGN( $STR$OPTIONS, $STR$OPTIONS $XPO$NAME15(STR$M_, ))%FI%ELSE$STR$ASCII_KEY( )%FI$STR$ASCII_OPT( %REMAINING)DLENGTH%IF$XPO$KEY_CHECK( ,(BASE2,BASE8,BASE10,BASE16,DATE,TIME,DAY,@,F, LEADING_ZERO, LEADING_BLANK,UP_CASE, LEFT_JUSTIFY, RIGHT_JUSTIFY,CENTER))%THEN $STR$$LEN_VAL( )%FI $STR$LEN_VAL( %REMAINING)D%IF%NULL( )%THEN%IF $STR$LENGTH%THEN%WARN($Only one LENGTH= parameter permitted)%ELSE %ASSIGN( $STR$LENGTH,)%FI%FILENGTHD%IF%NULL( )%THEN%WARN(STRING=, parameter must be specified) %EXITMACRO%FI%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(+OPTION= and OPTIONS= are mutually exclusive) %EXITMACRO%FI%ASSIGN( $STR$FUNCTION,STR$K_DFLT_FUNC)$STR$BINARY_OPT( %REMOVE( ))%IF%NULL( ) $STR$FUNCTION! STR$K_BASE16%THEN%ASSIGN($STR$INT_RESULT,)%ELSE%ASSIGN($STR$INT_RESULT,)%FI34 XST$BINARY:BLISS;%IF$XPO$KEY_CHECK( ,( XPO$FAILURE,XPO$IO_FAILURE,XPO$PS_FAILURE,XPO$GM_FAILURE,XPO$FM_FAILURE, STR$FAILURE, STR$X_FAILURE, STR$C_FAILURE, STR$A_FAILURE, STR$S_FAILURE, STR$B_FAILURE))%THEN34 :BLISS;%FI%IF$STR$INT_RESULT%THEN8 $STR$RESULT, $STR$STATUS;%FI%IF $XPO$KEY_TEST(8,(7,8),Type)%THEN%IF %ISSTRING(%REMOVE( ))%THEN1 $STR$STRING:%IF$XPO$KEY_CHECK(FIXED,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED,STATIC,VARYING,DYNAMIC_VARYING))%THEN%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THEN%IF $XPO$KEY_TEST(FIXED,(FIXED,DYNAMIC,BOUNDED,DYNAMIC_BOUNDED),CLASS=)%THEN %EXITMACRO%FI%FI%FI%IF$XPO$KEY_CHECK(FIXED,(STATIC,VARYING,DYNAMIC_VARYING))%THEN%INFORM(CLASS=,FIXED,( is obsolete - see current documentation)%FI%IF%NULL()%THEN%INFORM(8BINARY_DATA= is obsolete - use the $XPO_DESCRIPTOR macro)%FI%IF%NULL()%THEN%INFORM(-TYPE= is obsolete - see current documentation)%IF $XPO$KEY_TEST(,( CHARACTERS, FULLWORDS,UNITS),TYPE=)%THEN %EXITMACRO%FI%FI%IF%IF%NULL(%REMOVE( ))%THEN+%FI%IF%NULL()%THEN+%FI%IF%NULL()%THEN+%FIU%THEN%WARN(7TYPE=, STRING=, and BINARY_DATA= are mutually exclusive)%FI%IF%NULL(%REMOVE( ))($XPO$PAREN_TEST(%REMOVE( )) %ISSTRING(%REMOVE(%REMOVE( ))))%THEN%WARN("STRING=descriptor is not permitted) %EXITMACRO%FI%IF %ISSTRING(%REMOVE(%REMOVE( ))) %IDENTICAL(FIXED,FIXED)%THEN%WARN(#STRING=literal requires CLASS=FIXED) %EXITMACRO%FI%IF$XPO$PAREN_TEST(%REMOVE( )) %IDENTICAL( $XPO$ARG1(%REMOVE(%REMOVE( ))),)( %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,BOUNDED))%THEN%WARN(6STRING=(len,ptr) requires CLASS=FIXED or CLASS=BOUNDED) %EXITMACRO%FI%IF %IDENTICAL(FIXED,BOUNDED) %IDENTICAL(FIXED,DYNAMIC_BOUNDED) %IDENTICAL(FIXED,VARYING) %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENBLOCK[ STR$K_B_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER, STR$H_MAXLEN, STR$H_PFXLEN)%ELSEBLOCK[ STR$K_F_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER)%FI%IF%NULL(,%REMOVE( ),)%THEN %EXITMACRO%FI%IF%NULL()%THENr([ STR$B_DTYPE]=%IF %IDENTICAL(, CHARACTERS)%THEN STR$K_DTYPE_T%ELSE%IF %IDENTICAL(, FULLWORDS) %IDENTICAL(,UNITS)%THENXPO$K_DTYPE_BU%FI%FI,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI)%FI%IF%NULL(%REMOVE( ))%THENr([ STR$B_DTYPE]= STR$K_DTYPE_T,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI,%IF %ISSTRING(%REMOVE(%REMOVE( )))%THEN[ STR$H_LENGTH]= %CHARCOUNT(%REMOVE(%REMOVE( ))),[ STR$A_POINTER]=CH$PTR(j%BLISS16(`)%BLISS32(`)(%REMOVE(%REMOVE( ))))%ELSE[ STR$A_POINTER]= $XPO$ARG2(%REMOVE(%REMOVE( ))),%IF %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,DYNAMIC)%THEN[ STR$H_LENGTH]= $XPO$ARG1(%REMOVE(%REMOVE( )))%ELSE[ STR$H_MAXLEN]= $XPO$ARG1(%REMOVE(%REMOVE( )))%FI%FI)%FI%IF%NULL()%THENr([ STR$B_DTYPE]=XPO$K_DTYPE_BU,[ STR$B_CLASS]=%IF %IDENTICAL(FIXED,DYNAMIC_BOUNDED)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,DYNAMIC_VARYING)%THENSTR$K_CLASS_DB%ELSE%IF %IDENTICAL(FIXED,XPORT_TEMPORARY)%THENSTR$K_CLASS_XT%ELSE%NAME( %EXACTSTRING( ,, STR$K_CLASS_,FIXED))%FI%FI%FI,[ STR$A_POINTER]= $XPO$ARG2(%REMOVE()),%IF %IDENTICAL(FIXED,FIXED) %IDENTICAL(FIXED,DYNAMIC)%THEN[ STR$H_LENGTH]= $XPO$BIN_LEN(%REMOVE())%ELSE[ STR$H_MAXLEN]= $XPO$BIN_LEN(%REMOVE())%FI)%FI;%ELSE%IF$XPO$PAREN_TEST( )%THEN%IF %IDENTICAL(8,7)%THEN7 $STR$STRING= $STR_FORMAT( );%ELSE8 $STR$STRING:BLOCK[ STR$K_F_BLN]p( STR$H_LENGTH, STR$B_DTYPE, STR$B_CLASS, STR$A_POINTER)f;%FI%ELSE7 $STR$STRING= ;%FI%FI%FI%IF %ISSTRING(%REMOVE( ))$XPO$PAREN_TEST( )%THEN $STR$STR_DESC( $STR$STRING,FIXED, )%FI%IF$STR$INT_RESULT%THEN $STR$STATUS=%FI XST$BINARY(%IF %DECLARED( $XPO$INTERNAL)%THENSTR$M_NO_FREE_T%ELSE%FI+%NUMBER( $STR$FUNCTION), $STR$STRING,%IF$STR$INT_RESULT%THEN $STR$RESULT,%ELSE $XPO$DEFAULT( ,),%FI%IF%NULL( )%THEN,,%ELSE $XPO$ARG1(%REMOVE( )), $XPO$ARG2(%REMOVE( )),%FI $XPO$DEFAULT( ,), $XPO$DEFAULT( ,))%IF$STR$INT_RESULT%THEN;. $STR$STATUS =. $STR$RESULT;. $STR$STATUS%FISTRINGRESULTOPTIONOPTIONSRANGESUCCESSFAILURE STR$FAILURE%IF $XPO$KEY_TEST( ,(BASE2,BASE8,BASE10,BASE16,DATE,TIME),OPTIONS=)%THEN %EXITMACRO%FI%IF $STR$FUNCTION#STR$K_DFLT_FUNC%THEN%WARN(Conflicting conversion options) %EXITMACRO%FI%ASSIGN( $STR$FUNCTION, $XPO$NAME15(STR$K_, ))$STR$BINARY_OPT( %REMAINING)D%IF%NULL(  )%THEN%WARN( STRING= or REMAINDER=, parameter must be specified) %EXITMACRO%FI%IF%NULL(   )%THEN%WARN( FIND=, SPAN= or STOP=, parameter must be specified) %EXITMACRO%FI%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(-STRING= and REMAINDER= are mutually exclusive) %EXITMACRO%FI%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(-FIND=, SPAN= and STOP= are mutually exclusive) %EXITMACRO%FI%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(+OPTION= and OPTIONS= are mutually exclusive) %EXITMACRO%FI%IF%IF%NULL( )%THEN+%FI%IF%NULL( )%THEN+%FIU%THEN%WARN(-SUBSTRING= and TARGET= are mutually exclusive) %EXITMACRO%FI%ASSIGN( $STR$OPTIONS,%IF %DECLARED( $XPO$INTERNAL)%THENSTR$M_NO_FREE_T%ELSE%FI)%IF%NULL( )%THEN%ASSIGN( $STR$OPTIONS, $STR$OPTIONSSTR$M_REMAINDER)%FI%IF%NULL( )%THEN%ASSIGN( $STR$FUNCTION, STR$K_FIND)%ELSE%IF%NULL( )%THEN%ASSIGN( $STR$FUNCTION, STR$K_SPAN)%ELSE%ASSIGN( $STR$FUNCTION, STR$K_STOP)%FI%FI%IF%NULL( )%THEN%ASSIGN( $STR$OPTIONS, $STR$OPTIONS STR$M_TARGET)%FI34XST$SCAN:BLISS;%IF$XPO$KEY_CHECK( ,( XPO$FAILURE,XPO$IO_FAILURE,XPO$PS_FAILURE,XPO$GM_FAILURE,XPO$FM_FAILURE, STR$FAILURE, STR$X_FAILURE, STR$C_FAILURE, STR$A_FAILURE, STR$S_FAILURE, STR$B_FAILURE))%THEN34 :BLISS;%FI%IF%NULL( )%THEN8 $STR$STATUS,$STR$DELIMITER;%ELSE&$STR$DELIMITER=;%FI $STR$DECLARE(8, $STR$STRING,  ) $STR$DECLARE(8, $STR$PATTERN,   )$STR$LOCAL_INIT( $STR$STRING,  )$STR$LOCAL_INIT( $STR$PATTERN,   )%IF%NULL( )%THEN $STR$STATUS=%FIXST$SCAN(%NUMBER( $STR$OPTIONS)+%NUMBER( $STR$FUNCTION), $STR$STRING, $STR$PATTERN, $XPO$DEFAULT(  ,),$STR$DELIMITER, $XPO$DEFAULT( ,), $XPO$DEFAULT( ,))%IF%NULL( )%THEN;. $STR$STATUS =.$STR$DELIMITER;. $STR$STATUS%FI STRING REMAINDERFINDSPANSTOPOPTIONOPTIONS SUBSTRINGTARGET DELIMITERSUCCESSFAILURE STR$FAILURE)"@( HD& $XPO$COMP_DEF( $XPO$OK_VAL,%REMOVE( ));& $XPO$COMP_DEF( $XPO$WARN_VAL,%REMOVE( ));& $XPO$COMP_DEF($XPO$ERROR_VAL,%REMOVE( ));& $XPO$COMP_DEF($XPO$FATAL_VAL,%REMOVE( ));SUCCESSWARNINGERRORFATALD& $STR$COMP_DEF( $STR$OK_VAL,%REMOVE( ));& $STR$COMP_DEF($STR$ERROR_VAL,%REMOVE( ));& $STR$COMP_DEF($STR$FATAL_VAL,%REMOVE( ));SUCCESSWARNINGERRORFATAL,%NAME(XPO$_, $XPO$ARG1(%REMOVE( )))= %IF $XPO$SHOW_LIT%THEN%PRINT( XPO$_, $XPO$ARG1(%REMOVE( )), = ,%NUMBER( ), (,%IF%BLISS(BLISS32)%THEN%X'$XPO$SHOW_NUMB( ,)%ELSE%O'$XPO$SHOW_NUMB( ,)%FI,'))%FI%ASSIGN( , +),%NAME(STR$_, $XPO$ARG1(%REMOVE( )))= %IF $XPO$SHOW_LIT%THEN%PRINT( STR$_, $XPO$ARG1(%REMOVE( )), = ,%NUMBER( ), (,%IF%BLISS(BLISS32)%THEN%X'$XPO$SHOW_NUMB( ,)%ELSE%O'$XPO$SHOW_NUMB( ,)%FI,'))%FI%ASSIGN( , +)(NORMAL, normal completion),(CREATED,(file was successfully created and opened),( INCOMPLETE,incomplete amount of data read),(NEW_FILE,.first read on concatenated file was successful),(NEW_PAGE,'first read on a new page was successful) ( END_STRING, end of string reached),( TRUNCATED, string was truncated),(NOT_TEMP, not a temporary string)(END_FILE,end-of-file has been reached)s(BAD_ADDR, invalid memory address),( BAD_ALIGN,)memory element not on a fullword boundary),(BAD_ARGS, invalid argument list),( BAD_CONCAT,'invalid concatenated file specification),( BAD_DELIM, invalid punctuation),(BAD_DESC, invalid descriptor),( BAD_DEVICE,invalid device),(BAD_DFLT,"invalid default file specification),( BAD_DIRECT, invalid directory),( BAD_DTYPE, invalid data type),( BAD_FORMAT, invalid record format),( BAD_IO_OPT, invalid I/O option),( BAD_LENGTH,invalid length),(BAD_NAME, invalid file name),(BAD_NEW,invalid new file),(BAD_NODE, invalid node),(BAD_ORG, invalid file organization),( BAD_PROMPT,invalid prompt),( BAD_RECORD,invalid record),(BAD_REQ,invalid request),(BAD_RLTD,"invalid related file specification),(BAD_RSLT,$invalid resultant file specification),(BAD_SPEC, invalid file specification),(BAD_TYPE, invalid file type),(BAD_VER, invalid file version),(CHANNEL,I/O channel assignment error),(CLOSED, file is already closed),(CONFLICT,!conflicting options or attributes),( CORRUPTED, file is corrupted),(EXISTS, file already exists),( FILE_LOCK,file is locked),(FREE_MEM,!dynamic memory deallocation error),(GET_MEM,dynamic memory allocation error),(IN_USE, file is currently in use),( IO_BUFFER, I/O buffering error),(IO_ERROR, I/O error),(MISSING,/required parameter, option or attribute missing),(NETWORK, network error),( NO_ACCESS, file cannot be accessed),( NO_BACKUP, file cannot be backed up),( NO_CHANNEL,all I/O channels are in use),(NO_CLOSE, file cannot be closed),( NO_CONCAT,+concatenated file specification not allowed),( NO_CREATE, file cannot be created),( NO_DELETE, file cannot be deleted),( NO_DIRECT, directory does not exist),(NO_FILE, file does not exist),( NO_MEMORY,insufficient dynamic memory),(NO_OPEN, file cannot be opened),(NO_READ, file cannot be read),( NO_RENAME, file cannot be renamed),(NO_SPACE, insufficient space),( NO_SUBDIR,sub-directory does not exist),( NO_SUPPORT, requested function not supported),(NO_WRITE, file cannot be written),( NOT_CLOSED, file has not been closed),( NOT_EXPIRE,$expiration date has not been reached),( NOT_INPUT, file is not open for input),( NOT_ONLINE, device is not online),(NOT_OPEN, file has not been opened),( NOT_OUTPUT,file is not open for output),(OPEN, file is currently open),( PREV_ERROR,(program terminated due to previous error),( PRIVILEGED, privileged operation),( PROTECTED,file protection denies access),(PUT_MSG, message output error),(REC_LOCK,record is locked),( RENAME_NEW, new file cannot be renamed),( RENAME_OLD, old file cannot be renamed),( TRUNCATED, record was truncated),(WILDCARD,wildcard error),(BAD_ACCT, invalid account attribute),(BAD_ATTR, invalid attribute),(BAD_DATA, invalid data),( BAD_MEDIA, disk/tape cannot be read/written),( BAD_MEMORY,free storage chain is invalid),(BAD_PROT,invalid protection attribute),(BAD_PTR, invalid character pointer),( BAD_RECNUM, invalid record number),(BAD_SIZE, invalid size),(BAD_TEMP, invalid temporary file attribute),( CHAN_USED,I/O channel is currently in use),( HOST_ERROR,host operating system error),(NO_NODE,network node does not exist),(NO_STACK, insufficient stack space),( SYS_ERROR,!unexpected operating system error),( BAD_CLASS, invalid descriptor class),(NO_TEMP,temporary file not permitted),( FOREGROUND,foreground jobs not permitted),( NO_APPEND,append function not permitted),(NO_SEQ,sequenced files not permitted),( BAD_ORDER, field is misplaced or duplicated),( BAD_SYNTAX,invalid syntax)S(BAD_CHAR, invalid character),( BAD_CLASS, invalid descriptor class),(BAD_DESC, invalid string descriptor),( BAD_DTYPE,invalid descriptor data type),( BAD_LENGTH, invalid string length),( BAD_MAXLEN,invalid maximum string length),( BAD_PATTRN, invalid pattern string),(BAD_PTR, invalid string pointer),(BAD_REQ, invalid string request),( BAD_SOURCE, invalid source string),( BAD_STRNG1, invalid primary string),( BAD_STRNG2, invalid secondary string),( BAD_TARGET, invalid target string),(CONFLICT,%conflicting string function arguments),(NO_SPACE, insufficient space),( NO_STRING, no string specified),( NO_SUPPORT, requested function not supported),(NO_TEMP,temporary string not permitted),( NULL_STRNG, null string not permitted),( OUT_RANGE, integer value out of range),(TOO_LONG, string is too long) (BAD_IOB, invalid IOB),( BAD_LOGIC, XPORT logic error detected),( TERMINATE,)program terminated due to program request)( BAD_LOGIC,!XPORT string logic error detected) !   " * 2 : B J R Z b j r z ! !!!"!*!2!:!B!J!R!Z!b!j!r!z!!!!!!!!!!!!!!!!!" """""*"2":"B"J"R"Z"b"j"r"z""""""""""""""@ @@ ( ((("(*(2(:(B(J(R(Z(b(j(r(z((((((H