home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
viscobv7.zip
/
vac22os2
/
ibmcobol
/
macros
/
iwzmine.lxl
< prev
next >
Wrap
Text File
|
1997-12-17
|
10KB
|
288 lines
/* Reinvoking as "REXX %0 %1 %2 %3 %4 %5 %6 %7 %8 %9" 2>nul
@goto runit */
/*********************************************************************/
/* Licensed Material - Property of IBM */
/* 5639-B92 , 5639-D65 (C) Copyright IBM Corp., 1997, 1998 */
/* All rights reserved. */
/* US Government Users Restricted Rights - Use, duplication or */
/* disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */
/*********************************************************************/
trace off;
signal on novalue;
parse source opsys . whoami rest;
/* cobolroot is now set by iwzmIR.CMD */
if opsys = 'OS/2' then
do;
env = 'OS2ENVIRONMENT';
callit = '@Call';
call RxFuncAdd 'SysLoadFuncs','RexxUtil','SysLoadFuncs';
call SysLoadFuncs;
end;
else
do;
env = 'ENVIRONMENT';
callit = '@Rexx';
end;
tempdir = value('TMP',,env);
tempout = SysTempFileName(tempdir'\TM?????.OUT');
tempout2 = SysTempFileName(tempdir'\T2?????.OUT');
xx = Get_MVSINFO();
if xx <> 0 then
exit 16;
call Set_MVSINFO_Vars;
if tracemod = '*' |,
wordpos(translate(substr(whoami,lastpos('\',whoami)+1)),tracemod) > 0 then
do;
if trace > 3 then trace results;
if trace > 4 then trace ?;
end;
parse arg the_input_args;
call traceit 1 'Entry' '!'the_input_args'!';
parse upper arg errfile rest;
'extract classes into classes';
call traceit 3 'classes=' classes;
if wordpos('MESSAGE',classes) > 0 then /* error messages already shown in this edit session */
'emsg delete' /* get rid of them, they're out of date */
else 'set classes' classes 'MESSAGE';
/* info about edit session */
'check';
'extract changes into changes';
'extract readonly into readonly';
'extract highlight into highlight';
'extract limiterror'; /* this is the parameter that determines whether an
error message is issued when a line that's too long
is inserted */
'set readonly off';
'set highlight' highlight 'MESSAGE';
'set limiterror ignore' /* inserted messages may be too long - suppress lpex
error message */
call traceit 3 'set limiterror to ignore';
/* Find first line that isn't an MVS info message */
'extract elements'; /* number of lines in the file */
'top';
do strtdata = 1 to elements until wordpos('MVSMSG',class) = 0
'extract class'
if wordpos('MVSMSG',class) <> 0 then 'next'
call traceit 3 'inside loop, strtdata and class are' strtdata class;
end
call traceit 3 'strtdata and elements are' strtdata elements;
/* On exiting this loop, strtdata is the linenumber of the first line with data
(source code). Need to know this in order to put error messages with correct lines.
variable lineshift is the number of lines by which everything has shifted. */
lineshift = strtdata - 1
inline = linein(errfile) /* read the first line in the error message file */
inline = translate(inline) /* fold to upper case */
parse var inline 'LINENUMBER' posline /* posline is the source linenumber for the error msg the user clicked */
'setoldlines';
do while lines(errfile) <> 0 /* read through error message file */
inline = linein(errfile)
parse var inline stuff1'('srcline':' stuff2 /* get the source line number from the error msg */
call addmsg srcline inline; /* insert the message into the source file */
end /* end loop through error message file */
/* set up menu bar for error messages */
'SET ACTIONBAR.LP_VIEW.SEPARATOR 2'
'SET ACTIONBAR.LP_VIEW.Messa~ges 3 ;SET EXCLUDE; SET INCLUDE MESSAGE; SET VIEWNAME Messages'
'SET ACTIONBAR.LP_ACTIONS.~Next_error EMSG NEXT'
'SET ACCELERATOR. A-N'
'SET ACTIONBAR.LP_ACTIONS.P~revious_error EMSG UP'
'SET ACCELERATOR. A-X'
'SET ACTIONBAR.LP_ACTIONS.~Delete_messages EMSG DELETE'
/* reset state of lpex session */
'set readonly' readonly;
'check';
'set changes' changes;
'set limiterror' limiterror
'sshow';
/* position current line for user's lpex session */
if lineshift > 0 then 'find element 1' /* if there are MVS info messages, position at top so they are seen */
else 'find oldline' posline; /* position at source for error message user clicked on */
/* cleanup */
rc = stream(errfile,'c','close')
rc = SysFileDelete(errfile)
call traceit 3 'Deleting' errfile 'with rc' rc;
call traceit 1 'Normal exit';
exit 0;
/* */
addmsg:
parse arg row themsg;
lpexrow = row+lineshift /* account for line shift caused by MVS info messages */
'find oldline' lpexrow
'extract content'
call traceit 3 row lpexrow content;
/* If this is the error message the user doubleclicked on, keep track of the source line
so we can position to it in the user's lpex session */
if row = posline then 'set oldline' posline
'insert' themsg;
'set show on';
'set class message';
return;
/* */
errmsg:
parse arg the_msg;
'msg' the_msg;
'alarm';
exit 16;
Get_MVSINFO:
Procedure expose env cobolroot mvsinfo. whoami tempdir trace
rtn = 0
null = '0000'x
crlf = '0D0A'x
mvsinfo. = ''
mvsinfoQ = translate('iwzm_MVSINFO.DAT_YALE');
oldq = rxqueue('Set',mvsinfoQ) /* switch to mvsinfo queue */
if queued() = 0 then do /* if Q is missing we'll */
qname = rxqueue('Create',mvsinfoQ) /* create it and put a bad */
if qname = mvsinfoQ then push 'Sven' /* timestamp on it, else */
else x=rxqueue('Delete',qname) /* it was in use (we hope) */
end /* so we'll assume we can */
parse pull mvsstuff; push mvsstuff /* get/replace Q contents */
parse value mvsstuff with ts (null) . cobolroot (null) mvsstuff /* get */
/* timestamp and cobolroot */
if ts <> 'Sven' then do;
mvsinfo = cobolroot'\MACROS\MVSINFO.DAT'
bad_mvsinfo = ' **' whoami '****'crlf' **error*' mvsinfo,
'is unavailable, missing or empty **'
x=SysFileTree(mvsinfo,'ts','F') /* get MVSINFO.DAT's timestamp */
if ts.0 <> 1 then do
say bad_mvsinfo
return 12;
end
parse var ts.1 v0 v1 v2 .
timestamp ='mvsinfo.dat.timestamp' v0 v1 v2
end;
else
timestamp = 'Yale'
if timestamp <> ts then do /* timestamps match? */
pull mvsstuff /* no, remove bad contents */
rtn = "iwzmIR.CMD"() /* ask for new stuff */
if rtn = 0 then do
parse pull mvsstuff; push mvsstuff /* get/replace Q contents */
/* remove timestamp and */
/* cobolroot */
parse value mvsstuff with . (null) . cobolroot ( null) mvsstuff
end
end
qname = rxqueue('Set',oldq) /* restore normal queue */
do while (mvsstuff<>'') & (rtn=0) /* mvsinfo. structure */
parse value mvsstuff with key val (null) mvsstuff
if mvsinfo.key = '' then do /* e.g. mvsinfo.TYPE='' */
mvsinfo.KEYS = mvsinfo.KEYS key /* no substitution for KEYS */
mvsinfo.key.1 = val /* e.g. mvsinfo.TYPE.1=val */
mvsinfo.key = 1 /* e.g. mvsinfo.TYPE=1 */
end
else do
x = mvsinfo.key + 1 /* e.g. mvsinfo.TYPE+1 */
mvsinfo.key.x = val /* e.g. mvsinfo.TYPE.2=val */
mvsinfo.key = x /* e.g. mvsinfo.TYPE=2 */
end
end
return rtn
Set_MVSINFO_Vars:
parse var mvsinfo.CLOSECMD.1 closecmd;
parse var mvsinfo.CLOSEFILE.1 closefile;
parse var mvsinfo.FILESYS.1 filesys accessmon testaccess;
parse var mvsinfo.FSSTARTCMD.1 fsstartcmd;
parse var mvsinfo.FSSTOPCMD.1 fsstopcmd;
parse var mvsinfo.HEADER.1 header;
parse var mvsinfo.JOBLOG.1 joblog;
parse var mvsinfo.MAXCMD.1 maxcmd;
parse var mvsinfo.LANGUAGE.1 language;
parse var mvsinfo.MOUNTCMD.1 mountcmd;
parse var mvsinfo.MVSCOMM.1 mvscomm;
parse var mvsinfo.iwzmEDT.1 iwzmedt;
parse var mvsinfo.NFS.1 nfs;
parse var mvsinfo.NULLSTDIN.1 nullstdin;
parse var mvsinfo.OUTSHOW.1 outshow;
parse var mvsinfo.PROTSAVE.1 protsave tempmult;
parse var mvsinfo.PWD.1 pwd pwdasis pwdt pwde;
parse var mvsinfo.READTIMEOUT.1 readtimeout;
parse var mvsinfo.REXECCMD.1 rexeccmd;
parse var mvsinfo.SDU.1 sdu;
parse var mvsinfo.SIGYCLST.1 sigyclst;
parse var mvsinfo.SYSPROC.1 sysproc;
parse var mvsinfo.SYSTEM.1 system;
parse var mvsinfo.TEMPDRIVE.1 tempdrive;
parse var mvsinfo.TEMPDATA.1 tempdata;
parse var mvsinfo.TESTFILE.1 testfile;
parse var mvsinfo.TRACE.1 trace tracekeep;
parse var mvsinfo.TRACECMD.1 tracecmd;
parse var mvsinfo.TRACEMOD.1 tracemod;
parse var mvsinfo.UMOUNTCMD.1 umountcmd;
parse var mvsinfo.USERID.1 userid;
parse var mvsinfo.WORKSYS.1 worksys;
parse var mvsinfo.WRITETIMEOUT.1 writetimeout;
parse var mvsinfo.DRIVE numdrive;
if numdrive = '' then
numdrive = 0;
do ii = 1 to numdrive;
parse var mvsinfo.DRIVE.ii,
drive.ii highqual.ii trans.ii mapping.ii sidefile.ii;
end;
parse var mvsinfo.TYPE numtype;
if numtype = '' then
numtype = 0;
do ii = 1 to numtype;
parse var mvsinfo.TYPE.ii type.ii ext.ii;
end;
return
/* */
Traceit:
parse arg iwz_trc_level iwz_trc_message;
if iwz_trc_level > trace then
return;
if pwd <> '********' & pwd <> '++++++++' & pwd <> '========' then
do;
do forever;
if pos(pwd,iwz_trc_message) = 0 then
leave;
parse var iwz_trc_message iwz_trc_message1 (pwd) iwz_trc_message2;
iwz_trc_message = iwz_trc_message1||'********'||iwz_trc_message2
end;
end
iwz_trc_message = date('O') time('L') whoami':' iwz_trc_message;
xx = lineout(tempdir'\iwzmTRC.TRC',iwz_trc_message);
xx = stream(tempdir'\iwzmTRC.TRC','C','CLOSE');
if tracecmd <> '' then
interpret tracecmd;
return;
/* */
sayit:
parse arg iwz_sayit_arg;
if trace > 2 then
call traceit 3 '--->' iwz_sayit_arg;
say iwz_sayit_arg;
return;
/*
:runit
@rexx %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
@rem */