© rubinsoftwarenettetal

Das STIMER Interface für REXX Prozeduren.

RXSTIMER ist ein Assemblerprogramm, das für den Einsatz in TSO-REXX Prozeduren gedacht ist. REXX kennt keine Funktion, die eine Prozedur vorübergehend anfällt und entsprechende Programmschleifen sind sehr teuer (CPU-Verbrauch).

RXSTIMER kann dazu benutzt werden um

RXSTIMER wird über die ATTCHPGM LINKPGM Umgebung von MVS aufgerufen, d.h. es wird eine Standard S/390 Linkage für Unterprogrammaufrufe verwendet. Damit kann RXSTIMER auch z.B. von COBOL Programmen sehr einfach aufgerufen werden...

Das Programm RXSTIMER muss als Lademodul in der TSO Umgebung in der Steplib/Linklist/LPA/TSOLIB oder ISPLLIB Verkettung zur Verfügung stehen. Die Verwendung innerhalb einer Netview Umgebung (oder anderer RZ-Automationsprodukte) wird nicht empfohlen, da RxSTIMER die gesamte Task anhält.

Aufruf allgemein:

     VAR1 = "modus"
     VAR2 = "wartezeit"
     ADDRESS LINKPGM "RXSTIMER VAR1 VAR2"

VAR1, VAR2 - frei wählbare Variablennamen

modus - "Art" von Wait die durchgeführt werden soll. Folgendes ist möglich:
  • B - Wartezeit in einem (binären) Vollwort in 1/100 Sekunden
  • D - Wartezeit in 8 Stellen im Format "HHMMSSTH" (Character)
  • G - Zeitpunkt, zu dem die Verarbeitung fortgesetzt werden soll (Format "HHMMSSTH" Greenwich Zeit)
  • L - Zeitpunkt, zu dem die Verarbeitung fortgesetzt werden soll (Format "HHMMSSTH" lokale Uhrzeit)
wartezeit - gibt an "wie lange" (bei modus B, D) oder "bis wann" (bei modus G, L) gewartet werden soll. Beim modus "B" erfolgt die Vorgabe in einem 4 Byte langen Hexwert in 1/100 Sek. (um 3 Sekunden verwenden Sie "VAR2 = D2C(300,4)"). Für die anderen Modi erfolgt die Vorgabe in einer 8 Byte langen Zeichenkette Stunde Minute Sekunde Zehntelsek. Hundertstelsek. -> VAR2 = '18373000' um bis 18:37:30 zu warten.

Beispiele:

     /* Warte 5 Sekunden, Vorgabe binär */
     wartezeit  = d2c(500,4);wartemodus = "B"
     ADDRESS LINKPGM "RXSTIMER WARTEMODUS WARTEZEIT"

     /* Warte 1 Stunde, 5 Minuten 8.50 Sekunden, Vorgabe Character */
     wartezeit  = "01050850";wartemodus = "D"
     ADDRESS LINKPGM "RXSTIMER WARTEMODUS WARTEZEIT"

     /* Warte bis 16 Uhr 38 Minuten und 10 Sekunden Ortszeit */
     wartebis   = "16381000";wartemodus = "L"
     ADDRESS LINKPGM "RXSTIMER WARTEMODUS WARTEBIS"

Anwendung von RXSTIMER
  • RXSTIMER führt keine Prüfungen der Aufruf-Parameter durch. Fehlerhafte Vorgaben der Wartezeit können zu Abends oder sehr langen Wartezeiten führen, die unter Umständen nur durch einen "CANCEL" des TSO Users aufgehoben werden können. Es gelten die Hinweise, die für das STIMER Makro in der IBM Literatur zu finden sind.
  • Eine fehlerhafte Angabe des Warte-Modus führt dazu, das nicht gewartet wird. Im Quelltext befinden sich Hinweise, wie Sie RXSTIMER so ändern können, dass statt dessen ein Abend erfolgt.
  • RXSTIMER ergibt immer einen Returncode (RC) von Null.
Installation von RXSTIMER
  • RXSTIMER wird im Assembler Quelltext ausgeliefert.
  • Das erzeugte Lademodul RXSTIMER muss in der TSO Umgebung in der Steplib/Linklist/TSOLIB oder ISPLLIB Verkettung zur Verfügung stehen.
  • RXSTIMER erfordert keine APF Autorisierung und sollte unter allen MVS bzw. OS/390 Releases einsetzbar sein.
Die jeweils aktuellste Version gibt es kostenlos zum Download unter http://www.rubin-software.de

         TITLE 'RXSTIMER: Simple Interface to STIMER WAIT function'
         PRINT  NOGEN
**********************************************************************
* GDOC:                                                              *
* RXSTIMER: Interface to STIMER WAIT for REXX routines               *
**********************************************************************
* Copyright 1998                                                     *
* rubin Software GmbH                                                *
* An der Kirche 5a                                                   *
* D-41334 Nettetal                                                   *
* Author: Wolfgang Schaefer                                          *
* Web: www.rubin-software.de                                         *
* EMail: support@rubin-software.de                                   *
*                                                                    *
* THIS PROGRAM IS PROVIDED ON AN ASIS BASIS.                         *
* NO EXPRESSED OR IMPLIED WARRANTY IS GIVEN THAT THIS PROGRAM        *
* WILL FUNCTION PROPERLY.                                            *
**********************************************************************
* DESC:                                                              *
* This is a simple assembler subroutine that gives REXX procedures   *
* access to the MVS STIMER WAIT function. This can be used to        *
* realize 'friendly' delays that do not use CPU resources (like      *
* do loops). More documentation can be found in the HTML document    *
* that describes this program ...                                    *
**********************************************************************
* LINKAGE:                                                           *
* This program uses standard S/390 linkage for subprogram. Two       *
* parameters are expected: Mode (see doc or source) and Value (which *
* describes how long we wait)                                        *
* The return will always be zero (if we do not abend ...)            *
* NOTE THAT THE VALUE PARAMETER IS NOT VERIFIED WHICH CAN CAUSE      *
* ABENDS OR VERY, VERY LONG WAITS IF SPECIFIED INCORRECTLY ...       *
* (SEE NOTES FOR STIMER IN THE IBM LITERATURE)                       *
**********************************************************************
* TECHDOC:                                                           *
* Register usage:                                                    *
* R11 - base register work area (re-entrant)                         *
* R12 - base register code                                           *
* R13 - own savearea                                                 *
* REENTRANT, LPA ELIGABLE                                            *
**********************************************************************
RXSTIMER CSECT
RXSTIMER AMODE ANY
RXSTIMER RMODE ANY
         SPACE 3
**********************************************************************
** REGISTER EQUATES                                                 **
**********************************************************************
R0       EQU   0                     DEFINE REGISTER EQUATES
R1       EQU   1
R2       EQU   2
R3       EQU   3
R4       EQU   4
R5       EQU   5
R6       EQU   6
R7       EQU   7
R8       EQU   8
R9       EQU   9
R10      EQU   10
R11      EQU   11
R12      EQU   12
R13      EQU   13
R14      EQU   14
R15      EQU   15
         SPACE 3
**********************************************************************
** STARTUP CODE                                                     **
**********************************************************************
         STM   R14,R12,12(R13)         SAVE CALLER'S REGISTERS
         LR    R12,R15                 SET UP PROGRAM BASE REGISTER
         LR    R10,R1                  SAVE PARMLIST ADDRESS (TEMP)
         USING RXSTIMER,R12            ESTABLISH ADDRESSABILITY CODE
         GETMAIN RU,LV=72              OBTAIN SAVEAREA
         ST    R13,4(,R1)              BACKWARD CHAIN
         ST    R1,8(,R13)              FORWARD CHAIN
         LR    R13,R1                  CURRENT SAVEAREA IN R13
         GETMAIN RU,LV=QWORKL          OBTAIN WORKAREA
         LR    R11,R1                  ESTABLISH ADDRESSABILITY
         USING WORK,R11
         ST    R10,PLISTA              STORE PLIST ADDRESS
         B     MAIN000                 BRANCH TO MAINLINE
         SPACE 1
**********************************************************************
** CONSTANTS                                                        **
**********************************************************************
**********************************************************************
** MAINLINE                                                         **
**********************************************************************
MAIN000  DS    0H
         MVC   RETV,=F'0'
         L     R5,PLISTA               ParamList
         L     R6,0(R5)                FIRST PARAM (TYPE OF WAIT)
         L     R7,4(R5)                SECOND PARAM (INTERVAL)
*
         CLI   0(R6),C'B'              BINTVL? (1/100 SEK)
         BNE   MAIN010                 NO
         MVC   P2VAL,0(R7)             YES, MOVE PARM TO DWORD
         STIMER WAIT,BINTVL=P2VAL
         B     MAIN9000                RETURN TO CALLER
*
MAIN010  DS    0H
         CLI   0(R6),C'D'              DINTVL? (HHMMSSTH)
         BNE   MAIN020                 NO
         MVC   P2VAL,0(R7)             YES, MOVE PARM TO DWORD
         STIMER WAIT,DINTVL=P2VAL
         B     MAIN9000                RETURN TO CALLER
*
MAIN020  DS    0H
         CLI   0(R6),C'G'              GMT? (HHMMSSTH)
         BNE   MAIN030                 NO
         MVC   P2VAL,0(R7)             YES, MOVE PARM TO DWORD
         STIMER WAIT,GMT=P2VAL
         B     MAIN9000                RETURN TO CALLER
*
MAIN030  DS    0H
         CLI   0(R6),C'L'              LOCAL TIME? (HHMMSSTH)
         BNE   MAIN040                 NO
         MVC   P2VAL,0(R7)             YES, MOVE PARM TO DWORD
         STIMER WAIT,LT=P2VAL
         B     MAIN9000                RETURN TO CALLER
MAIN040  DS    0H
*
* if you decide to have a dump in case of an unsupported mode value
* uncomment the next line ...
*        DC    H'0'                    GIVES S0C1
* The default implementation will return 12 (instead of 0)
         MVC   RETV,=F'12'
         B     MAIN9000                JUST DON'T WAIT
*
**********************************************************************
** EXIT CODE                                                        **
**********************************************************************
MAIN9000 DS    0H
         L     R5,RETV                 LOAD RETURN CODE
         FREEMAIN RU,A=(R11),LV=QWORKL FREE WORKAREA MEMORY
         LR    R1,R13                  SAVEAREA ADDRESS FOR FREEMAIN
         L     R13,4(,R13)             RESTORE CALLER'S SAVEAREA
         FREEMAIN RU,A=(R1),LV=72      FREE OWN SAVEAREA
         LR    R15,R5                  RETURN CODE TO R15
         L     R14,12(R13)             LOAD RTC ADDRESS
         LM    R0,R12,20(R13)          RELOAD REGISTERS
         BR    R14                     RETURN TO CALLER
         SPACE
         LTORG
         SPACE
**********************************************************************
** Program Workarea                                                 **
**********************************************************************
         SPACE
WORK     DSECT                        WORK AREA
P2VAL    DS    D                      PARAMETER FOR STIME
PLISTA   DS    F                      ADDRESS OF PLIST
RETV     DS    F                      RETURN VALUE
*
QWORKL   EQU   *-WORK                 LENGTH OF WORKAREA LAST ENTRY !
         END
zurück zu Hilfen im Alltag