|
>>While using EVAL for computing numbers, if the >>result of computing gets larger than the result >>field definition, the throws up an error. Is >>there any way to get around this? Like say >>truncate (as it does in Move) some EVAL(T)?? :) No. EVAL will always behave like this, which is probably a good thing, otherwise you are losing precision in your calculated values and don't know it! If you really want to lose data, you'll have to stick with ADD/SUB/MULT/DIV. >>If I use *PSSR, the program goes to the top of the line >>and I loose all the work that is done till then. You can set up calculations in your *PSSR that check for the type of error and set a flag. When you ENDSR *DETC, you can check the flag at the top of the detail calcs and start processing at the appropriate place. Here's a poor example of what I mean: H Debug * Sample code to demonstrate use of *PSSR directing * traffic after an error occurs * Global declarations D ErrFlag S 1 Inz('N') D ErrAction S 6 Inz('*DETC ') D CurrRoutine S 10 Inz * Test numbers D Positive S 5S 0 Inz(15) D Negative S 5S 0 Inz(-15) D Zero S 5S 0 Inz(0) D PI S 10S 9 Inz(3.141592654) D Result S 3S 0 Inz(0) * Routine names describe where we are in the program * When an error occurs, we can steer ourselves * back to the appropriate place in the program D RtnAdd S 10 Inz('Add ') D RtnSub S 10 Inz('Sub ') D RtnMul S 10 Inz('Mul ') D RtnDiv S 10 Inz('Div ') D SDS D PGNAME *PROC D STATUS *STATUS D TMNAME 244 253 D USRNAM 254 263 D JOBNBR 264 269 0 * Mainline. This is just simple code to demonstrate * how we can direct traffic after an error occurs * The *PSSR traps the error, gets control and then * returns to this point in the program. * *DETC Tag * Did an error occur? If so, recover! * For example's sake, only test/recover from an error * in the division routine C If ErrFlag='Y' C Eval ErrFlag='N' C Select C When CurrRoutine = RtnAdd C GoTo Add C When CurrRoutine = RtnSub C GoTo Sub C When CurrRoutine = RtnMul C GoTo Mul C When CurrRoutine = RtnDiv C Eval Result=0 C GoTo PastDiv C Other C Dump C EndSl C EndIf C Add Tag C Eval CurrRoutine=RtnAdd C Eval Result=Zero+1 C Sub Tag C Eval CurrRoutine=RtnSub C Eval Result=Zero-1 C Mul Tag C Eval CurrRoutine=RtnMul C Eval Result=Zero*1 C Div Tag C Eval CurrRoutine=RtnDiv C Eval Result=PI/Zero C PastDiv Tag C Eval *InLR=*On * An error has occurred * Set the "Error is happening" flag and return to the mainline C *PSSR BegSR C Eval ErrFlag='Y' C EndSR ErrAction Buck Calabro CommSoft, Albany, NY mailto:mcalabro@commsoft.net +--- | This is the Midrange System Mailing List! | To submit a new message, send your mail to MIDRANGE-L@midrange.com. | To subscribe to this list send email to MIDRANGE-L-SUB@midrange.com. | To unsubscribe from this list send email to MIDRANGE-L-UNSUB@midrange.com. | Questions should be directed to the list owner/operator: david@midrange.com +---
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.