Need help on REXX program



IBM's Command List programming language & Restructured Extended Executor

Need help on REXX program

Postby bandigurunath » Wed Jan 01, 2014 12:57 pm

Hi ,

First time i am coding a REXX program. I build a panel. After pressing 3 times enter the program is completing. I need help to fix this issue.
Input to the panel is High level qualifiers( firsrt,second..) and email id. expected ouput is create a new dataset and update the dataset with High level qualifiers info( ex A.B.C..) and other dataset Email id should be overriden. In my input file 3 rd line and 5th line is having email id. So i am overriding that email id with new email id whih i am giving in panel. Please find my code below. I put a trace also. after exectuing "EXECIO * DISKW UPDATED(FINIS" instruction onlt it's struking. After pressing enter again it's continueing execution.

PANEL:

)ATTR DEFAULT(%+_)                                                     
       @ TYPE(TEXT) SKIP(ON) INTENS(LOW)                               
       %   TYPE(TEXT) INTENS(HIGH)                                     
       +   TYPE(TEXT) INTENS(LOW)                                       
       _   TYPE(INPUT) INTENS(HIGH) CAPS(ON) JUST(LEFT)                 
)BODY                                                                   
                                                                       
+              EXTRACTION OF DATASET STATISTICS                         
+     --------------------------------------------------               
+                                                                       
+                                                                       
+                                                                       
+      %ENTER YOUR FIRST  LEVEL QUALIFIER  ==>_HQNAME1 @               
+                                                                       
+      %ENTER YOUR SECOND LEVEL QUALIFIER  ==>_HQNAME2 @               
+                                                                       
+      %ENTER YOUR THIRD  LEVEL QUALIFIER  ==>_HQNAME3 @               
+                                                                       
+      %ENTER YOUR FOURTH LEVEL QUALIFIER  ==>_HQNAME4 @               
+                                                                       
+      %ENTER YOUR FIFTH  LEVEL QUALIFIER  ==>_HQNAME5 @               
+                                                                       
+                                                                       
+                                                                       
+                                                                       
+ %EMAIL : ENTER EMAIL ID ==>_MAILID                             @     
+                                                                       
+                                                                       
+                                                                       
+ %NOTE : 1.FIRST LEVEL QUALIFIER AND EMAIL ID ARE MANDATORY           
+                                                                       
+        %2.ENTER EIGHT CHARATERS MAXIMUM IN QUALIFIER FEILD           
+                                                                       
+                                                                       
+                                                                       
+ +PRESS ENTER TO CONTINUE,PF3 TO EXIT +                               
+                                             
)INIT                                         
)PROC                                         
  VER (&HQNAME1,NB,DSNAMEF)                   
  VER (&HQNAME2,DSNAMEF)                       
  VER (&HQNAME3,DSNAMEF)                       
  VER (&HQNAME4,DSNAMEF)                       
  VER (&HQNAME5,DSNAMEF)                       
  VER (&MAILID,MIX)                           
)END     

REXX PROGRAM:

/*REXX*/                                                               
"ISPEXEC LIBDEF ISPPLIB DATASET ID('TSO78DX.BTCHMGMT.PANEL')"           
"ISPEXEC DISPLAY PANEL(HLQPAN2)"                                       
/*TRACE("R")*/                                                         
IF RC ¬= 0 THEN DO                                                     
  SAY 'COMMAND CANCELLED'                                               
  EXIT                                                                 
  END                                                                   
ELSE                                                                   
TRACE('R')                                                             
X=HLNAME1                                                               
FLAG=0                                                                 
IF (HQNAME1 <> ' ' & HQNAME2 = ' ' & HQNAME3 = ' ' & HQNAME4 = ' ',     
    &HQNAME5 = ' ')                                                     
   THEN                                                                 
   FLAG=1                                                               
IF (HQNAME2 <> ' ' & HQNAME3 = ' ' & HQNAME4 = ' ' & HQNAME5 = ' ')     
   THEN                                                                 
   FLAG=2                                                               
IF (HQNAME3 <> ' ' & HQNAME4 = ' ' & HQNAME5 = ' '& HQNAME2 <> ' ')     
   THEN                                                                 
   FLAG=3                                                               
IF (HQNAME4 <> ' ' & HQNAME5 = ' ')                                     
   THEN                                                                 
   FLAG=4                                                               
IF (HQNAME5 <> ' ')                                                     
   THEN                                                                 
   FLAG=5                                                               
 SELECT;                                                               
  WHEN FLAG=1                                                           
        THEN X=HQNAME1                                                 
  WHEN FLAG=2                                                           
        THEN X=HQNAME1||'.'||HQNAME2                                   
  WHEN FLAG=3                                                           
        THEN X=HQNAME1||'.'||HQNAME2||'.'||HQNAME3                     
  WHEN FLAG=4                                                           
        THEN X=HQNAME1||'.'||HQNAME2||'.'||HQNAME3||'.'||HQNAME4       
  WHEN FLAG=5                                                           
  THEN X=HQNAME1||'.'||HQNAME2||'.'||HQNAME3||'.'||HQNAME4||'.'||HQNAME5
  OTHERWISE SAY '''HLQS NOT ENTERED CORRECTLY- ENTER IN ORDER'         
  EXIT                                                                 
  END                                                                   
"ALLOCATE DATASET('TSO78DX.PANEL.TEST08'),                             
NEW RECFM(F B) LRECL(80) BLKSIZE(8000) TRACKS SPACE(1,1) DSORG(PS)"     
"ALLOC DA('TSO78DX.PANEL.TEST08') F(UPDATEDD) OLD"                     
"EXECIO 0 DISKRU UPDATEDD 0"                                           
/*PULL LINE*/                                                           
 PUSH X                                                                 
"EXECIO * DISKW UPDATEDD(FINIS"                                         
"FREE F(UPDATEDD)"                                                     
"ALLOC DA('TSO78DX.PANEL.TEST02') F(UPDATED) OLD"                       
"EXECIO * DISKRU UPDATED ( FINIS STEM ARR."                             
I1 = 5                                                                 
I2 = 3                                                                 
  DO I = ARR.0 BY -1 TO 1                                               
  ARR.I1= 'TO:   <'||MAILID||'>'                                       
  ARR.I2='RCPT TO:   <'||MAILID||'>'                                   
  PUSH ARR.I                                                           
  END                                                                   
"EXECIO * DISKW  UPDATED(FINIS"                                                                                                     
"FREE F(UPDATEDD)"
bandigurunath
 
Posts: 2
Joined: Wed Jan 01, 2014 11:58 am
Has thanked: 0 time
Been thanked: 0 time

Re: Need help on REXX program

 

Re: Need help on REXX program

Postby NicC » Wed Jan 01, 2014 6:03 pm

Happy New Year and welcome to the forum!

Please, when posting screen data (programs, data , JCL etc) then use th code tags. Don't know what "code tags" are? Search the forum. I have encoded your both your panel definition and your program for you.

You are doing a lot of file allocation and read/write but never checking the return code for a successful action.
Never use "*" for the number of lines to write because the write will terminate when a null is encountered which may be before the end of your data so you get an incomplete write. If you are writing from a stem then maintain the stem entry count in stem.0 and use that other wise keep a count of lines pushed to the queue and use that.
You are having to press enter because the '* DISKW' terminates when a null is found. As you do not push a null onto the queue it gets it from the next place it can think of - the user. There are example of this problem in the forum. However, mush easier to read/write a line at a time or store your lines to be written in a stem and write that all at once. In fact, I do not see why you push each line to the queue once processed. Simply, after the loop do an
execio arr.0 diskw (.....

Your processing loop is garbage... try this
Do i - 1 To arr.0
   if i = 3 Then arr.i = 'RCPT TO: <'||mailid....
   if i = 5 Then ....
End
EXECIO arr.0 DISKR ....

Currently, every time through the loop you are setting arr.3 and arr.5
The problem I have is that people can explain things quickly but I can only comprehend slowly.
Regards
Nic
NicC
Global moderator
 
Posts: 2690
Joined: Sun Jul 04, 2010 12:13 am
Location: Pushing up the daisys (almost)
Has thanked: 4 times
Been thanked: 105 times

Re: Need help on REXX program

Postby NicC » Mon Jan 06, 2014 6:55 pm

Looking at it again you do not need that loop - simple set arr.3 and arr.5 to the required values and write the stem using EXECIO.
The problem I have is that people can explain things quickly but I can only comprehend slowly.
Regards
Nic
NicC
Global moderator
 
Posts: 2690
Joined: Sun Jul 04, 2010 12:13 am
Location: Pushing up the daisys (almost)
Has thanked: 4 times
Been thanked: 105 times

Re: Need help on REXX program

Postby Steve Coalbran » Wed Jan 08, 2014 8:05 pm

Hej Nic, I think that = works better than - in this loop?
Do i - 1 To arr.0
Do i = 1 To arr.0
i sit an Irish keyboard? Mine's Swedish - has it's own challenges!?
Steve
User avatar
Steve Coalbran
 
Posts: 102
Joined: Wed Apr 06, 2011 11:49 am
Location: Stockholm, Sweden
Has thanked: 5 times
Been thanked: 1 time

Re: Need help on REXX program

Postby NicC » Wed Jan 08, 2014 9:03 pm

Hi Steve - It was the 1st of January and I was in the Scottish highlands. Lucky to be able to put 2 coherent words together!
The problem I have is that people can explain things quickly but I can only comprehend slowly.
Regards
Nic
NicC
Global moderator
 
Posts: 2690
Joined: Sun Jul 04, 2010 12:13 am
Location: Pushing up the daisys (almost)
Has thanked: 4 times
Been thanked: 105 times


Return to CLIST & REXX

 


  • Related topics
    Replies
    Views
    Last post