/* REXX PROFILES manipulate one's Edit profiles Use '(routine name) ?' for HELP-text. |**-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-**| | | | WARNING: EMBEDDED COMPONENTS. | | | | See text following TOOLKIT_INIT | | | |**-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-**| Written by Frank Clarke rexxhead@yahoo.com HAS, Inc. Impact Analysis . SYSEXEC TRAPOUT Modification History 19991214 fxc REXXSKEL at last: v.1999109; 20230215 fxc Restructure; interpret ZEDPFLAG data; 20230217 fxc add TBDELETE facility 20230608 fxc use &ZUP/&ZCONT 20230726 fxc adjust HELP; 20230806 fxc chg SYSPROC to SYSEXEC in Impact Analysis; 20230927 fxc correct setting of AUTOLIST, AUTONUM, AUTOSAVE/PROMPT, HEX, LOCK, PACK, RECOVERY, TABS 20240305 fxc align panel names; 20240308 fxc chg dollar-sign to @ everywhere; 20240415 fxc DUMP_QUEUE quiet; 20240611 fxc corrected panel name; corrected translation of TABA; 20250515 fxc fix DEIMBED; */ arg argline address TSO /* REXXSKEL ver.19991109 */ arg parms "((" opts signal on syntax signal on novalue call TOOLKIT_INIT /* conventional start-up -*/ rc = Trace("O"); rc = trace(tv) info = parms /* to enable parsing */ call A_INIT /* -*/ call I_ISPF_OPS /* -*/ if \sw.0nested then call DUMP_QUEUE 'quiet' /* -*/ exit /*@ PROFILES */ /* Initialization . ----------------------------------------------------------------- */ A_INIT: /*@ */ if branch then call BRANCH address TSO allstd = "ALL STD" cobol = "COBOL ." lockunl = "UNLOCK LOCK" onoff = "ON OFF" offon = "OFF ON" prnopr = "PROMPT NOPROMPT" std = "STD ." std6 = "STD6 ." vertdata = "VERT DATA" yesno = "YES NO" xlatevars = " allstd cobol lockunl onoff prnopr std std6 vertdata ", " zedptabc yesno offon " return /*@ A_INIT */ /* All panel and table work. . ----------------------------------------------------------------- */ I_ISPF_OPS: /*@ */ if branch then call BRANCH address ISPEXEC call IA_PROLOG /* Unload panels -*/ call ID_DISPLAY /* Show profiles -*/ call IZ_EPILOG /* Drop panels -*/ return /*@ I_ISPF_OPS */ /* Unload ISPF assets and LIBDEF . ----------------------------------------------------------------- */ IA_PROLOG: /*@ */ if branch then call BRANCH address ISPEXEC "CONTROL ERRORS RETURN" call DEIMBED /* Extract ISPF assets -*/ dd = "" do Words(ddnlist) /* each LIBDEF DD */ parse value ddnlist dd with dd ddnlist @ddn = @ddn.dd /* PLIB322 <- PLIB */ "LIBDEF ISP"dd "LIBRARY ID("@ddn") STACK" end ddnlist = ddnlist dd return /*@ IA_PROLOG */ /* Display main panel . ----------------------------------------------------------------- */ ID_DISPLAY: /*@ */ if branch then call BRANCH address ISPEXEC @tn@ = 'ISREDIT' call IDA_OPEN_ISREDIT /* -*/ if sw.0error_found then return do forever sel = "" "TBDISPL " @tn@ "PANEL(FCPROF)" if rc > 7 then leave /* pf3 ? */ do ztdsels if sel = 'D' then do /* delete this row */ "TBDELETE" @tn@ /* Poof! */ if rc=0 then sw.0chgd = 1 end /* D */ else do /* everything else */ "CONTROL DISPLAY SAVE" call IDX_EXPAND /* -*/ "CONTROL DISPLAY RESTORE" end /* */ if ztdsels > 1 then "TBDISPL" @tn@ end /* ztdsels */ end /* forever */ call IDZ_DROP_ISREDIT /* -*/ return /*@ ID_DISPLAY */ /* Open ISREDIT if necessary . ----------------------------------------------------------------- */ IDA_OPEN_ISREDIT: /*@ */ if branch then call BRANCH address ISPEXEC "TBSTATS" @tn@ "STATUS1(s1) STATUS2(s2)" if s1 > 1 then do zerrsm = "Table" @tn@ "not available." say zerrsm zerrlm = "Table" @tn@ "not found in the ISPTLIB library chain" "SETMSG MSG(ISRZ002)" sw.0error_found = "1" end; else, if s2 = 1 then do /* table is not open */ "TBOPEN " @tn@ "WRITE" if rc > 4 then do sw.0error_found = 1 zerrsm = "Table did not OPEN" zerrlm = "Table" @tn@ "cannot be opened due to prior", "enqueues." "SETMSG MSG(ISRZ002)" end sw.0forced_open = '1' end else "TBTOP" @tn@ return /*@ IDA_OPEN_ISREDIT */ /* Interpret the flags . ----------------------------------------------------------------- */ IDX_EXPAND: Procedure expose, /*@ */ (xlatevars) zedpflag zedptype zedplrcl zedprcfm , (tk_globalvars) if branch then call BRANCH address ISPEXEC parse value "" with, o. n. orig_vals new_vals /* save the original values */ parse var zedpflag caps , /* On/Off */ 2 note , /* On/Off */ 3 hex , /* On/Off */ 4 hexs , /* Vert/Data */ 5 pack , /* On/Off */ 6 nulls , /* On/Off */ 7 nulla , /* All/Std */ 8 numd , /* Display On/Off */ 9 numb , /* NUMBER On/Off */ 10 numc , /* Num COBOL */ 11 nums , /* Num STD */ 12 num6 , /* Std 6 */ 13 tabs , /* On/Off */ 14 taba , /* All/Std */ 15 tabi , /* Input */ 16 tabo , /* Output */ 17 auton , /* On/Off */ 18 print , /* AUTOLIST? On/Off */ 19 stats , /* On/Off */ 20 recvr , /* On/Off */ 21 lock , /* Lock/Unlock */ 22 autsa , /* AUTOSAVE On/Off */ 23 autsp , /* Prompt/Noprompt */ 24 old , /* Yes/No */ . caps = Word(onoff , caps +1) /* set panel values */ note = Word(onoff , note +1) hex = Word(offon , hex +1) hexs = Word(vertdata, hexs +1) pack = Word(offon , pack +1) nulls = Word(onoff , nulls+1) nulla = Word(allstd , nulla+1) numd = Word(onoff , numd +1) numb = Word(onoff , numb +1) numc = Word(cobol , 2- numc) nums = Word(std , 2- nums) num6 = Word(std6 , 2- num6) tabs = Word(onoff , tabs +1) taba = Word(allstd , taba +1) /* if zedptabc <> '' then taba = zedptabc */ tabi = Word(onoff , tabi +1) tabo = Word(onoff , tabo +1) auton = Word(offon , auton+1) print = Word(offon , print+1) stats = Word(onoff , stats+1) recvr = Word(offon , recvr+1) lock = Word(lockunl , lock +1) autsa = Word(offon , autsa+1) autsp = Word(prnopr , 2-autsp) old = Word(yesno , old +1) orig_vals = Space( caps note hex hexs pack nulls nulla numd numb, numc nums num6 tabs taba tabi tabo auton print, stats recvr lock autsa autsp old, 1 ) parse value caps note hex hexs pack nulls with, o.0ca o.0no o.0hx o.0hxs o.0pk o.0nuls parse value nulla numd numb numc nums num6 with, o.0nula o.0nmd o.0nmb o.0nmc o.0nms o.0nm6 parse value tabs taba tabi tabo auton print with, o.0tbs o.0tba o.0tbi o.0tbo o.0autn o.0pr parse value stats recvr lock autsa autsp old with, o.0st o.0rcvr o.0lk o.0auta o.0autp o.0old "DISPLAY PANEL( PROFVAL ) " new_vals = Space( caps note hex hexs pack nulls nulla numd numb, numc nums num6 tabs taba tabi tabo auton print, stats recvr lock autsa autsp old, 1 ) if orig_vals <> new_vals then do call IDXV_VERIFY /* -*/ zerrsm = "Chg'd" zerrlm = "New values do not match old values:" vlist "SETMSG MSG(ISRZ002)" end return /*@ IDX_EXPAND */ /* Which values changed? . ----------------------------------------------------------------- */ IDXV_VERIFY: /*@ */ if branch then call BRANCH address TSO parse value "" with vlist if caps <> o.0ca then vlist = vlist "Caps :" caps if note <> o.0no then vlist = vlist "Note :" note if hex <> o.0hx then vlist = vlist "Hex :" hex if hexs <> o.0hxs then vlist = vlist "Hexs :" hexs if pack <> o.0pk then vlist = vlist "Pack :" pack if nulls <> o.0nuls then vlist = vlist "Nulls:" nulls if nulla <> o.0nula then vlist = vlist "Nulla:" nulla if numd <> o.0nmd then vlist = vlist "Numd :" numd if numb <> o.0nmb then vlist = vlist "Numb :" numb if numc <> o.0nmc then vlist = vlist "Numc :" numc if nums <> o.0nms then vlist = vlist "Nums :" nums if num6 <> o.0nm6 then vlist = vlist "Num6 :" num6 if tabs <> o.0tbs then vlist = vlist "Tabs :" tabs if taba <> o.0tba then vlist = vlist "Taba :" taba if tabi <> o.0tbi then vlist = vlist "Tabi :" tabi if tabo <> o.0tbo then vlist = vlist "Tabo :" tabo if auton <> o.0autn then vlist = vlist "Auton:" auton if print <> o.0pr then vlist = vlist "Print:" print if stats <> o.0st then vlist = vlist "Stats:" stats if recvr <> o.0rcvr then vlist = vlist "Recvr:" recvr if lock <> o.0lk then vlist = vlist "Lock :" lock if autsa <> o.0auta then vlist = vlist "Autsa:" autsa if autsp <> o.0autp then vlist = vlist "Autsp:" autsp if old <> o.0old then vlist = vlist "Old :" old vlist = Strip( vlist ) return /*@ IDXV_VERIFY */ /* If ISREDIT was changed, it must be written back to ISPTABL via TBCLOSE (which closes it). If it was originally closed, everything is as it should be. If it was originally open, it must be reopened. If ISREDIT was NOT changed, and if it was closed at the start (and forced open), close it now. It was originally closed, and is again closed. But if it was NOT changed/TBCLOSEd, it is currently open. If it was open at the start (not forced), all is well. . ----------------------------------------------------------------- */ IDZ_DROP_ISREDIT: /*@ */ if branch then call BRANCH address ISPEXEC if sw.0chgd then do /* write the table back */ "LIBDEF ISPTABL DATASET ID('"profds"') STACK" "TBCLOSE" @tn@ "LIBDEF ISPTABL" if ^sw.0forced_open then, /* was open at start */ "TBOPEN" @tn@ /* reopen it */ end /* Changed */ else, /* not changed, not closed */ if sw.0forced_open then, /* was closed at start */ "TBEND " @tn@ /* now closed */ else nop /* was open at start */ return /*@ IDZ_DROP_ISREDIT */ /* Tear down LIBDEFs . ----------------------------------------------------------------- */ IZ_EPILOG: /*@ */ if branch then call BRANCH address ISPEXEC dd = "" do Words(ddnlist) /* each LIBDEF DD */ parse value ddnlist dd with dd ddnlist "LIBDEF ISP"dd end return /*@ IZ_EPILOG */ /* . ----------------------------------------------------------------- */ LOCAL_PREINIT: /*@ customize opts */ address TSO "NEWSTACK" "LA ISPPROF (( STACK LIST" pull ddn dsnlist do nnx = 1 to Words( dsnlist ) /* where is ISREDIT? */ wrd = Word( dsnlist,nnx ) stx = Sysdsn("'"wrd"(ISREDIT)'") if stx = "OK" then leave end /* nnx */ "DELSTACK" profds = wrd return /*@ LOCAL_PREINIT */ /* subroutines below LOCAL_PREINIT are not selected by SHOWFLOW */ /* . ----------------------------------------------------------------- */ HELP: /*@ */ address TSO;"CLEAR" if helpmsg <> "" then say helpmsg ex_nam = Left(exec_name,8) /* predictable size */ say " " say " "ex_nam" View/manipulate Edit profiles " say " " say " Syntax: "ex_nam" no parms " say " " "NEWSTACK"; pull; "CLEAR"; "DELSTACK" say " Debugging tools provided include: " say " " say " BRANCH show all paragraph entries. " say " " say " TRACE tv will use value following TRACE to place the execution in" say " REXX TRACE Mode. " say " " say " " say " Debugging tools can be accessed in the following manner: " say " " say " TSO "ex_nam" parameters (( debug-options " say " " say " For example " say " " say " TSO "ex_nam" (( MONITOR TRACE ?R " if sysvar("SYSISPF") = "ACTIVE" then, address ISPEXEC "CONTROL DISPLAY REFRESH" exit /*@ HELP */ /* Parse out the embedded components at the back of the source code. . ----------------------------------------------------------------- */ DEIMBED: Procedure expose, /*@ */ (tk_globalvars) ddnlist @ddn. daid. address TSO dlm = '5d5d5d'x /* three close-parens */ fb80po.0 = "NEW REU UNIT(SYSDA) SPACE(1 5) TRACKS DIR(40)", "RECFM(F B) LRECL(80) BLKSIZE(0)" fb80po.1 = "SHR REU" parse value "" with ddnlist @ddn. daid. lastln = sourceline() currln = lastln /* */ if Left(sourceline(currln),2) <> "*/" then return currln = currln - 1 /* previous line */ "NEWSTACK" address ISPEXEC do while Left( sourceline( currln ),2 ) <> "/*" text = sourceline(currln) /* save with a short name ! */ if Left( text,3 ) = dlm then do /* package the queue */ parse var text . ddn mbr . /* PLIB PANL001 maybe */ if length(ddn) > 4 then do /* data, not ISPF */ call DESPOOL /* -*/ currln = currln - 1 /* previous line */ iterate end if Pos(ddn,ddnlist) = 0 then do /* doesn't exist */ ddnlist = ddnlist ddn /* keep track */ @ddn = ddn || Random(999) /* PLIB322 maybe */ @ddn.ddn = @ddn /* @ddn.PLIB = PLIB322 */ address TSO "ALLOC FI("@ddn")" fb80po.0 "LMINIT DATAID(DAID) DDNAME("@ddn")" daid.ddn = daid end daid = daid.ddn "LMOPEN DATAID("daid") OPTION(OUTPUT)" do queued() parse pull line "LMPUT DATAID("daid") MODE(INVAR) DATALOC(LINE) DATALEN(80)" end "LMMADD DATAID("daid") MEMBER("mbr")" "LMCLOSE DATAID("daid")" end /* package the queue */ else push text /* onto the top of the stack */ currln = currln - 1 /* previous line */ end /* while */ address TSO "DELSTACK" return /* Subroutine of DEIMBED for non-ISPF data. Given: the stack, ddn, and mbr . ----------------------------------------------------------------- */ DESPOOL: /*@ */ if branch then call BRANCH address TSO if Sysdsn(ddn".DATA") <> "OK" then, "ALLOC FI("ddn") DA("ddn".DATA)" fb80po.0 "ALLOC FI("ddn") DA("ddn".DATA("mbr")) SHR REU" "EXECIO" queued() "DISKW" ddn "(FINIS" "DELSTACK" "NEWSTACK" /* re-establish */ return /*@ DESPOOL */ return /*@ DEIMBED */ /* . ----------------------------------------------------------------- */ BRANCH: Procedure expose, /*@ */ sigl exec_name rc = trace("O") /* we do not want to see this */ arg brparm . origin = sigl /* where was I called from ? */ do currln = origin to 1 by -1 /* inch backward to label */ if Right(Word(Sourceline(currln),1),1) = ":" then do parse value sourceline(currln) with pgfname ":" . /* Label */ leave ; end /* name */ end /* currln */ select when brparm = "NAME" then return(pgfname) /* Return full name */ when brparm = "ID" then do /* wants the prefix */ parse var pgfname pgfpref "_" . /* get the prefix */ return(pgfpref) end /* brparm = "ID" */ otherwise say left(sigl,6) left(pgfname,40) exec_name "Time:" time("L") end /* select */ return /*@ BRANCH */ /* . ----------------------------------------------------------------- */ DUMP_QUEUE: /*@ Take whatever is in stack */ rc = trace("O") /* and write to the screen */ address TSO arg mode . "QSTACK" /* how many stacks? */ stk2dump = rc - tk_init_stacks /* remaining stacks */ if stk2dump = 0 & queued() = 0 then return if mode <> "QUIET" then, say "Total Stacks" rc , /* rc = #of stacks */ " Begin Stacks" tk_init_stacks , /* Stacks present at start */ " Excess Stacks to dump" stk2dump do dd = rc to tk_init_stacks by -1 /* empty each one. */ if mode <> "QUIET" then, say "Processing Stack #" dd " Total Lines:" queued() do queued();parse pull line;say line;end /* pump to the screen */ "DELSTACK" /* remove stack */ end /* dd = 1 to rc */ return /*@ DUMP_QUEUE */ /* Handle CLIST-form keywords added 20020513 . ----------------------------------------------------------------- */ CLKWD: Procedure expose info /*@ hide all except info */ arg kw kw = kw"(" /* form is 'KEY(DATA)' */ kw_pos = Pos(kw,info) /* find where it is, maybe */ if kw_pos = 0 then return "" /* send back a null, not found*/ rtpt = Pos(") ",info" ",kw_pos) /* locate end-paren */ slug = Substr(info,kw_pos,rtpt-kw_pos+1) /* isolate */ info = Delstr(info,kw_pos,rtpt-kw_pos+1) /* excise */ parse var slug (kw) slug /* drop kw */ slug = Reverse(Substr(Reverse(Strip(slug)),2)) return slug /*@CLKWD */ /* Handle multi-word keys 20020513 . ----------------------------------------------------------------- */ KEYWD: Procedure expose info /*@ hide all vars, except info*/ arg kw kw_pos = wordpos(kw,info) /* find where it is, maybe */ if kw_pos = 0 then return "" /* send back a null, not found*/ kw_val = word(info,kw_pos+Words(kw))/* get the next word */ info = Delword(info,kw_pos,2) /* remove both */ return kw_val /*@ KEYWD */ /* . ----------------------------------------------------------------- */ KEYPHRS: Procedure expose, /*@ */ info helpmsg exec_name /* except these three */ arg kp wp = wordpos(kp,info) /* where is it? */ if wp = 0 then return "" /* not found */ front = subword(info,1,wp-1) /* everything before kp */ back = subword(info,wp+1) /* everything after kp */ parse var back dlm back /* 1st token must be 2 bytes */ if length(dlm) <> 2 then /* Must be two bytes */ helpmsg = helpmsg, "Invalid length for delimiter("dlm") with KEYPHRS("kp")" if wordpos(dlm,back) = 0 then /* search for ending delimiter*/ helpmsg = helpmsg, "No matching second delimiter("dlm") with KEYPHRS("kp")" if helpmsg <> "" then call HELP /* Something is wrong */ parse var back kpval (dlm) back /* get everything b/w delim */ info = front back /* restore remainder */ return Strip(kpval) /*@ KEYPHRS */ /* . ----------------------------------------------------------------- */ NOVALUE: /*@ */ say exec_name "raised NOVALUE at line" sigl say " " say "The referenced variable is" condition("D") say " " zsigl = sigl signal SHOW_SOURCE /*@ NOVALUE */ /* . ----------------------------------------------------------------- */ SHOW_SOURCE: /*@ */ call DUMP_QUEUE /* Spill contents of stacks -*/ if sourceline() <> "0" then /* to screen */ say sourceline(zsigl) rc = trace("?R") nop exit /*@ SHOW_SOURCE */ /* . ----------------------------------------------------------------- */ SS: Procedure /*@ Show Source */ arg ssbeg ssend . if ssend = "" then ssend = 10 if \datatype(ssbeg,"W") | \datatype(ssend,"W") then return ssend = ssbeg + ssend do ssii = ssbeg to ssend ; say Strip(sourceline(ssii),'T') ; end return /*@ SS */ /* . ----------------------------------------------------------------- */ SWITCH: Procedure expose info /*@ */ arg kw sw_val = Wordpos(kw,info) > 0 /* exists = 1; not found = 0 */ if sw_val then /* exists */ info = Delword(info,Wordpos(kw,info),1) /* remove it */ return sw_val /*@ SWITCH */ /* . ----------------------------------------------------------------- */ SYNTAX: /*@ */ errormsg = exec_name "encountered REXX error" rc "in line" sigl":", errortext(rc) say errormsg zsigl = sigl signal SHOW_SOURCE /*@ SYNTAX */ /* Can call TRAPOUT. . ----------------------------------------------------------------- */ TOOLKIT_INIT: /*@ */ address TSO info = Strip( opts,'T','5d'x ) /* clip trailing paren */ parse source sys_id how_invokt exec_name DD_nm DS_nm, as_invokt cmd_env addr_spc usr_tokn parse value "" with tv helpmsg . parse value 0 "ISR00000 YES" "Error-Press PF1" with, sw. zerrhm zerralrm zerrsm if SWITCH("TRAPOUT") then do "TRAPOUT" exec_name parms "(( TRACE R" info exit end /* trapout */ if Word(parms,1) = "?" then call HELP /* I won't be back */ "QSTACK" ; tk_init_stacks = rc /* How many stacks? */ parse value SWITCH("BRANCH") SWITCH("MONITOR") SWITCH("NOUPDT") with, branch monitor noupdt . parse value mvsvar("SYSNAME") sysvar("SYSNODE") with, #tk_cpu node . sw.0nested = sysvar("SYSNEST") = "YES" sw.0batch = sysvar("SYSENV") = "BACK" sw.0inispf = sysvar("SYSISPF") = "ACTIVE" parse value KEYWD("TRACE") "N" with tv . tk_globalvars = "exec_name tv helpmsg sw. zerrhm zerralrm ", "zerrsm zerrlm tk_init_stacks branch monitor ", "noupdt" call LOCAL_PREINIT /* for more opts -*/ return /*@ TOOLKIT_INIT */ /* ))) PLIB FCPROF .. )ATTR % TYPE( TEXT ) INTENS( HIGH ) SKIP( ON ) + TYPE( TEXT ) INTENS( LOW ) SKIP( ON ) _ TYPE( INPUT ) INTENS( HIGH ) CAPS( ON ) ! TYPE( OUTPUT ) INTENS( HIGH ) SKIP( ON ) )BODY EXPAND(||) %|-| Current Profiles |-| %Command ===>_ZCMD %Scroll ===>_AMT + + + /-- Select row(s) to be explored. % + / +V Type Len Fmt Flags )MODEL _Z!ZEDPTYPE!Z !Z !ZEDPFLAG )INIT .ZVARS = '( SEL ZEDPLRCL ZEDPRCFM )' .HELP = FCPROFH )REINIT IF (&MSG = ' ') &SEL = ' ' REFRESH (&SEL ) )END ))) PLIB FCPROFH .. )ATTR % TYPE( TEXT ) INTENS( HIGH ) SKIP( ON ) + TYPE( TEXT ) INTENS( LOW ) SKIP( ON ) _ TYPE( INPUT ) INTENS( HIGH ) ! TYPE( OUTPUT ) INTENS( HIGH ) SKIP( ON ) @ TYPE( OUTPUT ) INTENS( LOW ) SKIP( ON ) )BODY EXPAND(||) %TUTORIAL |-| Main Profile Display |-| TUTORIAL %Next Selection ===>_ZCMD + + Select any row or rows with any character. The selected rows will be + expanded to show the values represented by the flags. + )PROC &ZUP = FCPROFH &ZCONT = FCPROFH )END ))) PLIB PROFVAL .. )ATTR % TYPE( TEXT ) INTENS( HIGH ) SKIP( ON ) + TYPE( TEXT ) INTENS( LOW ) SKIP( ON ) _ TYPE( INPUT ) INTENS( LOW ) CAPS( ON ) @ TYPE( TEXT ) INTENS( HIGH ) COLOR( YELLOW ) ! TYPE( INPUT ) INTENS( HIGH ) COLOR( YELLOW ) CAPS( ON ) } TYPE( OUTPUT ) INTENS( HIGH ) COLOR( YELLOW ) )BODY EXPAND(||) @|-|% Profile Values @|-| %COMMAND ===>_ZCMD %SCROLL ===>_ZAMT+ + For: }zedptype}zedplrcl}zedprcfm + +CAPS On/Off ===>!caps+ TABS On/Off ===>!tabs+ +NOTE On/Off ===>!note+ All/Std ===>!taba+ +HEX On/Off ===>!hex+ Input ===>!tabi+ + Vert/Data ===>!hexs+ Output ===>!tabo+ +PACK On/Off ===>!pack+ AUTONUM On/Off ===>!auton+ +NULLS On/Off ===>!nulls+ PRINT On/Off ===>!print+ + All/Std ===>!nulla+ STATS On/Off ===>!stats + +DISPLAY On/Off ===>!numd+ RECOVER On/Off ===>!recvr + +NUMBER On/Off ===>!numb+ LOCK Lock/Unlock ===>!lock + + Cobol ===>!numc + AUTOSAVE On/Off ===>!autsa+ + Std ===>!nums+ Prompt/Noprompt ===>!autsp + + Std6 ===>!num6+ OLD Yes/No ===>!old+ + )INIT .HELP = PROFVALH )PROC )END ))) PLIB PROFVALH .. )ATTR % TYPE( TEXT ) INTENS( HIGH ) SKIP( ON ) + TYPE( TEXT ) INTENS( LOW ) SKIP( ON ) _ TYPE( INPUT ) INTENS( HIGH ) ! TYPE( OUTPUT ) INTENS( HIGH ) SKIP( ON ) @ TYPE( OUTPUT ) INTENS( LOW ) SKIP( ON ) )BODY EXPAND(||) %TUTORIAL |-| Profile Values |-| TUTORIAL %Next Selection ===>_ZCMD + + Help not yet available... )PROC &ZUP = PROFVALH &ZCONT = PROFVALH )END */