|
Nice example but this method of error handling is pitiful. IBM needs to
improve it dramatically. CL does a much better job of error trapping.
Many of the PC languages also allow for usefull error trapping
ex:
try
a := b / c;
except
a := 0;
error := TRUE;
end;
or any number of other ways. Even a monmsg opcode would be much better.
John Hall
Home Sales Co.
Vanya Jovic wrote:
>
> Buck,
>
> what is that GOTO :)))))? Oh, wait, rings a bell, Commodore C-64 and these
> high school days, BASIC & puberty.
>
> Seriously, this is a good experimental example, but I think IBM should
> give us something better to trick a cycle in the real world.
>
> Best regards,
>
> Vanay Jovic,
> Canada
>
> On Tue, 22 Dec 1998, Buck Calabro/commsoft wrote:
>
> >
> >
> > >>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-2025 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.