|
%STATUS (Return File or Program Status)
%STATUS{(file_name)}
%STATUS returns the most recent value set for the program or file status.
%STATUS is set whenever the program status or any file status changes, usually
when an error occurs.
If %STATUS is used without the optional file_name parameter, then it returns the
program or file status most recently changed. If a file is specified, the value
contained in the INFDS *STATUS field for the specified file is returned. The
INFDS does not have to be specified for the file.
%STATUS starts with a return value of 00000 and is reset to 00000 before any
operation with an 'E' extender specified begins.
%STATUS is best checked immediately after an operation with the 'E' extender or
an error indicator specified, or at the beginning of an INFSR or the *PSSR
subroutine.
____________________________________________________________________________
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
CL0N01Factor1+++++++Opcode(E)
+Factor2+++++++Result++++++++Len++D+HiLoEq....
* The 'E' extender indicates that if an error occurs, the error
* is to be handled as though an error indicator were coded.
* The success of the operation can then be checked using the
* %ERROR built-in function. The status associated with the error
* can be checked using the %STATUS built-in function.
C EXFMT(E) INFILE
C IF %ERROR
C EXSR CheckError
C ENDIF
C ...
*-------------------------------------------------------------------
* CheckError: Subroutine to process a file I/O error
*-------------------------------------------------------------------
C CheckError BEGSR
C SELECT
C WHEN %STATUS < 01000
* No error occurred
C WHEN %STATUS = 01211
* Attempted to read a file that was not open
C EXSR InternalError
C WHEN %STATUS = 01331
* The wait time was exceeded for a READ operation
C EXSR TimeOut
C WHEN %STATUS = 01261
* Operation to unacquired device
C EXSR DeviceError
C WHEN %STATUS = 01251
* Permanent I/O error
C EXSR PermError
C OTHER
* Some other error occurred
C EXSR FileError
C ENDSL
C ENDSR
____________________________________________________________________________
Figure 163. %STATUS and %ERROR with 'E' Extender
____________________________________________________________________________
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords++++++++++++++++++++++++++
D Zero S 5P 0 INZ(0)
CL0N01Factor1+++++++Opcode(E)
+Factor2+++++++Result++++++++Len++D+HiLoEq....
* %STATUS starts with a value of 0
*
* The following SCAN operation will cause a branch to the *PSSR
* because the start position has a value of 0.
C 'A' SCAN 'ABC':Zero Pos
C BAD_SCAN TAG
* The following EXFMT operation has an 'E' extender, so %STATUS will
* be set to 0 before the operation begins. Therefore, it is
* valid to check %STATUS after the operation.
* Since the 'E' extender was coded, %ERROR can also be used to
* check if an error occurred.
C EXFMT(E) REC1
C IF %ERROR
C SELECT
C WHEN %STATUS = 01255
C ...
C WHEN %STATUS = 01299
C ...
* The following scan operation has an error indicator. %STATUS will
* not be set to 0 before the operation begins, but %STATUS can be
* reasonably checked if the error indicator is on.
C 'A' SCAN 'ABC':Zero Pos 10
C IF *IN10 AND %STATUS = 00100
C ...
* The following scan operation does not produce an error.
* Since there is no 'E' extender %STATUS will not be set to 0,
* so it would return a value of 00100 from the previous error.
* Therefore, it is unwise to use %STATUS after an operation that
* does not have an error indicator or the 'E' extender coded since
* you cannot be sure that the value pertains to the previous
* operation.
C 'A' SCAN 'ABC' Pos
C ...
C *PSSR BEGSR
* %STATUS can be used in the *PSSR since an error must have occurred.
C IF %STATUS = 00100
C GOTO BAD_SCAN
C ...
____________________________________________________________________________
Figure 164. %STATUS and %ERROR with 'E' Extender, Error Indicator and *PSSR
Peter Vidal Pall Aeropower Corp. SR Programmer Analyst WWW.Pall.com / 727-539-8448, x2414
"A good player makes himself look good; a great player makes the team look good." Author unknown
_______________________________________________
This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.
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.