2 SUBROUTINE xermsg (LIBRAR, SUBROU, MESSG, NERR, LEVEL)
187 CHARACTER*(*) librar, subrou, messg
188 CHARACTER*8 xlibr, xsubr
203 IF (nerr.LT.-9999999 .OR. nerr.GT.99999999 .OR. nerr.EQ.0 .OR.
204 * level.LT.-1 .OR. level.GT.2)
THEN
205 CALL
xerprn(
' ***', -1,
'FATAL ERROR IN...$$ ' //
206 *
'XERMSG -- INVALID ERROR NUMBER OR LEVEL$$ '//
207 *
'JOB ABORT DUE TO FATAL ERROR.', 72)
208 CALL
xersve(
' ',
' ',
' ', 0, 0, 0, kdummy)
209 CALL
xerhlt(
' ***XERMSG -- INVALID INPUT')
216 CALL
xersve(librar, subrou, messg, 1, nerr, level, kount)
220 IF (level.EQ.-1 .AND. kount.GT.1)
RETURN
229 CALL
xercnt(xlibr, xsubr, lfirst, lerr, llevel, lkntrl)
231 lkntrl = max(-2, min(2,lkntrl))
237 IF (level.LT.2 .AND. lkntrl.EQ.0) go to 30
238 IF (level.EQ.0 .AND. kount.GT.maxmes) go to 30
239 IF (level.EQ.1 .AND. kount.GT.maxmes .AND. mkntrl.EQ.1) go to 30
240 IF (level.EQ.2 .AND. kount.GT.max(1,maxmes)) go to 30
247 IF (lkntrl .NE. 0)
THEN
248 temp(1:21) =
'MESSAGE FROM ROUTINE '
249 i = min(len(subrou), 16)
250 temp(22:21+
i) = subrou(1:
i)
251 temp(22+
i:33+
i) =
' IN LIBRARY '
253 i = min(len(librar), 16)
254 temp(ltemp+1:ltemp+
i) = librar(1:
i)
255 temp(ltemp+
i+1:ltemp+
i+1) =
'.'
256 ltemp = ltemp +
i + 1
279 IF (lkntrl .GT. 0)
THEN
283 IF (level .LE. 0)
THEN
284 temp(1:20) =
'INFORMATIVE MESSAGE,'
286 ELSEIF (level .EQ. 1)
THEN
287 temp(1:30) =
'POTENTIALLY RECOVERABLE ERROR,'
290 temp(1:12) =
'FATAL ERROR,'
296 IF ((mkntrl.EQ.2 .AND. level.GE.1) .OR.
297 * (mkntrl.EQ.1 .AND. level.EQ.2))
THEN
298 temp(ltemp+1:ltemp+14) =
' PROG ABORTED,'
301 temp(ltemp+1:ltemp+16) =
' PROG CONTINUES,'
307 IF (lkntrl .GT. 0)
THEN
308 temp(ltemp+1:ltemp+20) =
' TRACEBACK REQUESTED'
311 temp(ltemp+1:ltemp+24) =
' TRACEBACK NOT REQUESTED'
319 CALL
xerprn(
' * ', -1, messg, 72)
324 IF (lkntrl .GT. 0)
THEN
325 WRITE (
temp,
'(''ERROR NUMBER = '', I8)') nerr
327 IF (
temp(
i:
i) .NE.
' ') go to 20
336 IF (lkntrl .NE. 0)
THEN
337 CALL
xerprn(
' * ', -1,
' ', 72)
338 CALL
xerprn(
' ***', -1,
'END OF MESSAGE', 72)
339 CALL
xerprn(
' ', 0,
' ', 72)
345 30
IF (level.LE.0 .OR. (level.EQ.1 .AND. mkntrl.LE.1))
RETURN
351 IF (lkntrl.GT.0 .AND. kount.LT.max(1,maxmes))
THEN
352 IF (level .EQ. 1)
THEN
354 * (
' ***', -1,
'JOB ABORT DUE TO UNRECOVERED ERROR.', 72)
356 CALL
xerprn(
' ***', -1,
'JOB ABORT DUE TO FATAL ERROR.', 72)
358 CALL
xersve(
' ',
' ',
' ', -1, 0, 0, kdummy)