©
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
- einen bestimmten Zeitraum zu warten (anzugeben in 1/100 Sekunden)
- einen bestimmten Zeitraum zu warten (angegeben in Stunden Minuten Sekunden 1/100 Sek.)
- bis zu einer bestimmten GMT Zeit zu warten (anzugeben in Stunde Minute Sekunde 1/100 Sek.)
- bis zu einer bestimmten lokalen Uhrzeit zu warten (anzugeben in Stunde Minute Sekunde 1/100 Sek.)
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