Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Beispiel für eine Basisroutine mit Subroutinen

&pagelevel(4)&pagelevel

Wir wählen bewusst das Hilfsmittel Columbus-Assembler, weil wir so auf explizites Registersichern und Rückladen verzichten können. Der Benutzer braucht nur das angebotene Gerüst zu übernehmen und kann nach Belieben den Rest der Routinen in Assembler oder Columbus-Assembler schreiben.

Die Namen von Basisroutine und Subroutinen müssen systemweit eindeutig sein und dürfen nicht mit Namen in Systemmodulen kollidieren.

Basisroutine

         START
EXITCOD  AMODE  ANY
EXITCOD  RMODE  ANY
EXPARLI  EX090                            DSECT for Exit-090
EXITCOD  CSECT
*****************************************************************************
*        MAINROUTINE                                                        *
*        R1 = EXPARLI A(PARAMETERLIST OF EXIT#90                           *
*****************************************************************************
EXIT090  @ENTR  TYP=E,ENV=SPLSPEC,RETURNS=NO
         ENTRY  EXIT090
         USING  EXPARLI,R1                Use layout of parlist of Exit-090
*****************************************************************************
*        AUFRUF 1.SUBROUTINE                                                *
*****************************************************************************
         @PASS  EXTNAME=SUBROUT1            Call Subrout1
         @IF    NZ                           If returncode not ok 
         LTR    R15,R15
         @THEN
         ST     R15,IEXRC                 set returncode in exit paralist
         @EXIT                            then return to system
         @BEND
*****************************************************************************
*        AUFRUF 2.SUBROUTINE                                                *
*****************************************************************************
         @PASS  EXTNAME=SUBROUT2            Call Subrout2
         @IF    NZ                           If returncode not ok
         LTR    R15,R15
         @THEN
         ST     R15,IEXRC                 set returncode in exit paralist
         @EXIT                            then return to system
         @BEND
*****************************************************************************
*        AUFRUF WEITERER ROUTINEN                                           *
*****************************************************************************
         :
         :
         @PASS  EXTNAME=SUBROUTN          Call Subrout2
         @IF    NZ                        If returncode not ok 
         LTR    R15,R15
         @THEN
         ST     R15,IEXRC                 set returncode in exit paralist
         @EXIT                            then return to system
         @BEND
*****************************************************************************
*        END OF MAINROUTINE                                                 *
*****************************************************************************
         @EXIT
         @END
         END

Subroutine

SUBEX001 CSECT 
         PRINT  GEN
SUBEX001 AMODE  ANY
SUBEX001 RMODE  ANY
EXITPL   EX090
SUBROUTN @ENTR  TYP=I,ENV=SPLSPEC,RETURNS=NO
         ENTRY  SUBROUTN
****************************************************************************
*        Anwendungsspezifische Befehle                                     *
****************************************************************************
         L      R15,IADD                     RETURNCODE WEITERREICHEN
         @EXIT   ,                           RETURN TO BASISROUTINE
         @END    ,
         END