home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / viscobv7.zip / vac22os2 / ibmcobol / macros / iwzmmn.lx < prev    next >
Text File  |  1998-01-08  |  12KB  |  420 lines

  1. /* Reinvoking as "REXX %0 %1 %2 %3 %4 %5 %6 %7 %8 %9"  2>nul
  2. @goto runit */
  3. /*********************************************************************/
  4. /* Licensed Material - Property of IBM                               */
  5. /* 5639-B92 , 5639-D65 (C) Copyright IBM Corp., 1997, 1998           */
  6. /* All rights reserved.                                              */
  7. /* US Government Users Restricted Rights - Use, duplication or       */
  8. /* disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */
  9. /*********************************************************************/
  10. trace off;
  11. signal on novalue;
  12. parse source opsys . whoami rest;
  13. /* cobolroot is now set by iwzmIR.CMD */
  14. if opsys = 'OS/2' then
  15.   do;
  16.   env = 'OS2ENVIRONMENT';
  17.   callit = '@Call';
  18.   call RxFuncAdd 'SysLoadFuncs','RexxUtil','SysLoadFuncs';
  19.   call SysLoadFuncs;
  20.   end;
  21. else
  22.   do;
  23.   env = 'ENVIRONMENT';
  24.   callit = '@Rexx';
  25.   end;
  26. tempdir = value('TMP',,env);
  27. tempout = SysTempFileName(tempdir'\TM?????.OUT');
  28. tempout2 = SysTempFileName(tempdir'\T2?????.OUT');
  29. xx = Get_MVSINFO();
  30. if xx <> 0 then
  31.   exit 16;
  32. call Set_MVSINFO_Vars;
  33. if tracemod = '*' |,
  34.   wordpos(translate(substr(whoami,lastpos('\',whoami)+1)),tracemod) > 0 then
  35.   do;
  36.   if trace > 3 then trace results;
  37.   if trace > 4 then trace ?;
  38.   end;
  39. parse arg the_input_args;
  40. call traceit 1 'Entry' '!'the_input_args'!';
  41. 'extract doctype into doctypeq';
  42. if translate(doctypeq) <> 'SHL' then
  43.   do;
  44.   call traceit 1 'Error exit';
  45.   exit 16;
  46.   end;
  47. parse upper arg request rest;
  48. if rest = '' then
  49.   rest = '0';
  50. parse var rest waitsec rest2;
  51. select;
  52.   when request = 'START' then
  53.     do;
  54.     'extract global.iwzmmn into iwzmmnq';
  55.     if rc = 0 then
  56.       do;
  57.       if iwzmmnq = 'iwzmMN' then
  58.         do;
  59.         'msg MVS Job Status Monitor was already started';
  60.         'alarm';
  61.         call traceit 1 'Error exit';
  62.         exit 0;
  63.         end;
  64.       end;
  65.     'set global.iwzmmn iwzmMN';
  66.     if waitsec = 0 then
  67.       do;
  68.       'set font.l white/white';
  69.       'set font.c white/white';
  70.       'set font.background white/white'
  71.       'set focus.top 0';
  72.       'set focus.bottom 0';
  73.       'macro iwzmsys.lx';
  74.       'set action.button1down macro iwzmmn.lx mark';
  75.       'set action.button1double mult !macro iwzmmn.lx mark!macro iwzmsya.lx list!';
  76.       'set font.highlight pink/white';
  77.       end;
  78.     'set browse on';
  79.     'extract classes into classes';
  80.     'set classes' classes 'MVSSTAT';
  81.     'extract protect into protect';
  82.     'set protect' protect  'MVSSTAT';
  83.     'extract highlight into highlight';
  84.     'highlight' highlight 'MVSSTAT';
  85.     'set focus.row 2';
  86.     'set autocount 0';
  87.     'set autotime 0';
  88.     'set timeout -1';
  89.     'set synonym.quit macro iwzmmn stop';
  90.     'set synonym.qquit macro iwzmmn stop';
  91.     'bottom';
  92.     if opsys = 'OS/2' then
  93.       do;
  94.       'set global.iwzmmnc iwzmMN' rest;
  95.       'insert iwzmMN' rest;
  96.       end;
  97.     else
  98.       do;
  99.       'set global.iwzmmnc REXX iwzmMN.CMD' rest;
  100.       'insert REXX iwzmMN.CMD' rest;
  101.       end;
  102.     'cmd run';
  103.     end;
  104.   when request = 'STOP' then
  105.     do;
  106.     'set global.iwzmmn OFF';
  107.     'lxn qquit';
  108.     end;
  109.   when request = 'HIGHLIGHT' then
  110.     do;
  111.     xx = SysSleep(1);
  112.     'bottom';
  113.     'prev';
  114.     'extract content into line';
  115.     if opsys = 'OS/2' then
  116.       do;
  117.       if substr(line,1,1) = '[' & substr(line,3,1) = ':' then
  118.         do;
  119.         'delete';
  120.         'bottom';
  121.         end;
  122.       end;
  123.     else
  124.       do;
  125.       line = strip(line,'T');
  126.       if length(line) > 0 then
  127.         do;
  128.         if substr(line,2,1) = ':' & substr(line,length(line),1) = '>' then
  129.           do;
  130.           'delete';
  131.           'bottom';
  132.           end;
  133.         end;
  134.       end;
  135.     'bottom';
  136.     'extract elements into numlines';
  137.     do ii = 1 to 1000; /* prevent endless loop */
  138.       'extract element into linenum';
  139.       if linenum <= 1 then
  140.         leave;
  141.       'extract content into line';
  142.       if substr(line,1,10) = '----------' then
  143.         leave;
  144.       'prev';
  145.       end;
  146.     found = 0;
  147.     do ii = 1 to 1000; /* prevent endless loop */
  148.       'extract element into linenum';
  149.       if linenum >= numlines then
  150.         leave;
  151.       'extract content into line';
  152.       if substr(line,3,1) = '/' & substr(line,6,1) = '/' &,
  153.         substr(line,12,1) = ':' & substr(line,15,1) = ':' then
  154.         do;
  155.         if found = 0 then
  156.           do;
  157.           found = linenum;
  158.           'mark set @@mon@@';
  159.           end;
  160.         if pos('ON OUTPUT QUEUE',line) > 0 then
  161.           'set class MVSSTAT';
  162.         end;
  163.       'next';
  164.       end;
  165.     if found = 0 then
  166.       do;
  167.       'bottom';
  168.       'mark set @@mon@@';
  169.       end;
  170.     'top';
  171.     do ii = 1 to 10;
  172.       'extract content into line';
  173.       if substr(line,3,1) = '/' & substr(line,6,1) = '/' &,
  174.         substr(line,12,1) = ':' & substr(line,15,1) = ':' then
  175.         leave;
  176.       'delete';
  177.       if substr(line,1,10) = '----------' then
  178.         leave;
  179.       end;
  180.     'msg Job status complete';
  181.     'set font.l black/white';
  182.     'check';
  183.     'set changes 0';
  184.     'mark find @@mon@@';
  185.     'focus';
  186.     end;
  187.   when request = 'MARK' then
  188.     do;
  189.     'primitive setcursor';
  190.     'extract content into line';
  191.     'block clear';
  192.     if substr(line,3,1) = '/' & substr(line,6,1) = '/' &,
  193.       substr(line,12,1) = ':' & substr(line,15,1) = ':' then
  194.       do;
  195.       if pos('ON OUTPUT QUEUE',line) > 0 then
  196.         do;
  197.         'begin';
  198.         'block mark character';
  199.         'end';
  200.         'block mark character';
  201.         'begin';
  202.         end;
  203.       end;
  204.     'msg   ';
  205.     end;
  206.   when request = 'STARTS' then
  207.     do;
  208.     'set browse on';
  209.     'set font.c white/white';
  210.     'set font.background white/white'
  211.     'set focus.top 0';
  212.     'set focus.bottom 0';
  213.     'set autocount 0';
  214.     'set autotime 0';
  215.     'set timeout -1';
  216.     'set synonym.quit macro iwzmmn stops';
  217.     'set synonym.qquit macro iwzmmn stops';
  218.     end;
  219.   when request = 'STOPS' then
  220.     'lxn qquit';
  221.   when request = 'CLEANS' then
  222.     do;
  223.     xx = SysSleep(2);
  224.     'top';
  225.     do ii = 1 to 8;
  226.       'extract content into line';
  227.       lines = strip(line,'L');
  228.       if substr(lines,1,13) = 'Accessing MVS' then
  229.         leave;
  230.       'delete';
  231.       if opsys = 'OS/2' then
  232.         do;
  233.         if substr(line,1,1) = '[' & substr(line,3,1) = ':' then
  234.           leave;
  235.         end;
  236.       else
  237.         do;
  238.         line = strip(line,'T');
  239.         if length(line) > 0 then
  240.           do;
  241.           if substr(line,2,1) = ':' & substr(line,length(line),1) = '>' then
  242.             leave;
  243.           end;
  244.         end;
  245.       end;
  246.     'bottom';
  247.     'extract content into line';
  248.     if opsys = 'OS/2' then
  249.       do;
  250.       if substr(line,1,1) = '[' & substr(line,3,1) = ':' then
  251.         'delete';
  252.       end;
  253.     else
  254.       do;
  255.       line = strip(line,'T');
  256.       if length(line) > 0 then
  257.         do;
  258.         if substr(line,2,1) = ':' & substr(line,length(line),1) = '>' then
  259.           'delete';
  260.         end;
  261.       end;
  262.     'macro out.lxl';
  263.     end;
  264.   otherwise
  265.     do;
  266.     'msg Unknown request:' request;
  267.     'alarm';
  268.     call traceit 1 'Error exit';
  269.     exit 16;
  270.     end;
  271.   end;
  272. call traceit 1 'Normal exit';
  273. exit 0;
  274. Get_MVSINFO:
  275. Procedure expose env cobolroot mvsinfo. whoami tempdir trace
  276.  
  277. rtn = 0
  278. null = '0000'x
  279. crlf = '0D0A'x
  280. mvsinfo. = ''
  281. mvsinfoQ = translate('iwzm_MVSINFO.DAT_YALE');
  282.  
  283. oldq = rxqueue('Set',mvsinfoQ)   /* switch to mvsinfo queue */
  284. if queued() = 0 then do                   /* if Q is missing we'll */
  285.   qname = rxqueue('Create',mvsinfoQ)      /* create it and put a bad */
  286.   if qname = mvsinfoQ then push 'Sven'    /* timestamp on it, else */
  287.   else x=rxqueue('Delete',qname)          /* it was in use (we hope) */
  288.   end                                     /* so we'll assume we can */
  289. parse pull mvsstuff; push mvsstuff        /* get/replace Q contents */
  290. parse value mvsstuff with ts (null) . cobolroot (null) mvsstuff /* get */
  291.                                         /* timestamp and cobolroot */
  292. if ts <> 'Sven' then do;
  293.   mvsinfo = cobolroot'\MACROS\MVSINFO.DAT'
  294.   bad_mvsinfo = '    **' whoami '****'crlf'    **error*' mvsinfo,
  295.                 'is unavailable, missing or empty **'
  296.  
  297.   x=SysFileTree(mvsinfo,'ts','F')       /* get MVSINFO.DAT's timestamp */
  298.   if ts.0 <> 1 then do
  299.     say bad_mvsinfo
  300.     return 12;
  301.     end
  302.   parse var ts.1 v0 v1 v2 .
  303.   timestamp ='mvsinfo.dat.timestamp' v0 v1 v2
  304.   end;
  305. else
  306.   timestamp = 'Yale'
  307. if timestamp <> ts then do              /* timestamps match? */
  308.   pull mvsstuff                         /* no, remove bad contents */
  309.   rtn = "iwzmIR.CMD"()                /* ask for new stuff */
  310.   if rtn = 0 then do
  311.     parse pull mvsstuff; push mvsstuff    /* get/replace Q contents */
  312.                                         /* remove timestamp and     */
  313.                                         /* cobolroot                */
  314.     parse value mvsstuff with . (null) . cobolroot ( null) mvsstuff
  315.     end
  316.   end
  317. qname = rxqueue('Set',oldq)      /* restore normal queue */
  318.  
  319. do while (mvsstuff<>'') & (rtn=0)   /* mvsinfo. structure */
  320.   parse value mvsstuff with key val (null) mvsstuff
  321.   if mvsinfo.key = '' then do       /* e.g. mvsinfo.TYPE='' */
  322.     mvsinfo.KEYS = mvsinfo.KEYS key /* no substitution for KEYS */
  323.     mvsinfo.key.1 = val             /* e.g. mvsinfo.TYPE.1=val  */
  324.     mvsinfo.key = 1                 /* e.g. mvsinfo.TYPE=1      */
  325.     end
  326.   else do
  327.     x = mvsinfo.key + 1             /* e.g. mvsinfo.TYPE+1     */
  328.     mvsinfo.key.x = val             /* e.g. mvsinfo.TYPE.2=val */
  329.     mvsinfo.key = x                 /* e.g. mvsinfo.TYPE=2     */
  330.     end
  331.   end
  332.  
  333. return rtn
  334.  
  335. Set_MVSINFO_Vars:
  336.  
  337.  parse var mvsinfo.CLOSECMD.1 closecmd;
  338.  parse var mvsinfo.CLOSEFILE.1 closefile;
  339.  parse var mvsinfo.FILESYS.1 filesys accessmon testaccess;
  340.  parse var mvsinfo.FSSTARTCMD.1 fsstartcmd;
  341.  parse var mvsinfo.FSSTOPCMD.1 fsstopcmd;
  342.  parse var mvsinfo.HEADER.1 header;
  343.  parse var mvsinfo.JOBLOG.1 joblog;
  344.  parse var mvsinfo.MAXCMD.1 maxcmd;
  345.  parse var mvsinfo.LANGUAGE.1 language;
  346.  parse var mvsinfo.MOUNTCMD.1 mountcmd;
  347.  parse var mvsinfo.MVSCOMM.1 mvscomm;
  348.  parse var mvsinfo.iwzmEDT.1 iwzmedt;
  349.  parse var mvsinfo.NFS.1 nfs;
  350.  parse var mvsinfo.NULLSTDIN.1 nullstdin;
  351.  parse var mvsinfo.OUTSHOW.1 outshow;
  352.  parse var mvsinfo.PROTSAVE.1 protsave tempmult;
  353.  parse var mvsinfo.PWD.1 pwd pwdasis pwdt pwde;
  354.  parse var mvsinfo.READTIMEOUT.1 readtimeout;
  355.  parse var mvsinfo.REXECCMD.1 rexeccmd;
  356.  parse var mvsinfo.SDU.1 sdu;
  357.  parse var mvsinfo.SIGYCLST.1 sigyclst;
  358.  parse var mvsinfo.SYSPROC.1 sysproc;
  359.  parse var mvsinfo.SYSTEM.1 system;
  360.  parse var mvsinfo.TEMPDRIVE.1 tempdrive;
  361.  parse var mvsinfo.TEMPDATA.1 tempdata;
  362.  parse var mvsinfo.TESTFILE.1 testfile;
  363.  parse var mvsinfo.TRACE.1 trace tracekeep;
  364.  parse var mvsinfo.TRACECMD.1 tracecmd;
  365.  parse var mvsinfo.TRACEMOD.1 tracemod;
  366.  parse var mvsinfo.UMOUNTCMD.1 umountcmd;
  367.  parse var mvsinfo.USERID.1 userid;
  368.  parse var mvsinfo.WORKSYS.1 worksys;
  369.  parse var mvsinfo.WRITETIMEOUT.1 writetimeout;
  370.  
  371.  parse var mvsinfo.DRIVE numdrive;
  372.  if numdrive = '' then
  373.    numdrive = 0;
  374.  do ii = 1 to numdrive;
  375.    parse var mvsinfo.DRIVE.ii,
  376.              drive.ii highqual.ii trans.ii mapping.ii sidefile.ii;
  377.    end;
  378.  
  379.  parse var mvsinfo.TYPE numtype;
  380.  if numtype = '' then
  381.    numtype = 0;
  382.  do ii = 1 to numtype;
  383.    parse var mvsinfo.TYPE.ii type.ii ext.ii;
  384.    end;
  385.  
  386. return
  387.  
  388. /* */
  389. Traceit:
  390.  parse arg iwz_trc_level iwz_trc_message;
  391.  if iwz_trc_level > trace then
  392.    return;
  393.  if pwd <> '********' & pwd <> '++++++++' & pwd <> '========' then
  394.    do;
  395.    do forever;
  396.      if pos(pwd,iwz_trc_message) = 0 then
  397.        leave;
  398.      parse var iwz_trc_message iwz_trc_message1 (pwd) iwz_trc_message2;
  399.      iwz_trc_message = iwz_trc_message1||'********'||iwz_trc_message2
  400.      end;
  401.    end
  402.  iwz_trc_message = date('O') time('L') whoami':' iwz_trc_message;
  403.  xx = lineout(tempdir'\iwzmTRC.TRC',iwz_trc_message);
  404.  xx = stream(tempdir'\iwzmTRC.TRC','C','CLOSE');
  405.  if tracecmd <> '' then
  406.    interpret tracecmd;
  407. return;
  408.  
  409. /* */
  410. sayit:
  411.  parse arg iwz_sayit_arg;
  412.  if trace > 2 then
  413.    call traceit 3 '--->' iwz_sayit_arg;
  414.  say iwz_sayit_arg;
  415. return;
  416. /*
  417. :runit
  418. @rexx %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
  419. @rem */
  420.