/* REXX OK ************************************************************/ /* -------------------------------------------------------------------*/ /* Name: AUTOMAT */ /* Syntax: [TSO] AUTOMAT [B|E|V] */ /* Parms: B = Browse Profilemember */ /* E = Edit " */ /* V = View " */ /* Kurzbz: Automatischen Oeffnen diverser Split-Screens */ /* Typ: REXX-Exec */ /* Autor: Norbert Haas */ /* Datum: 10.04.1999 */ /* */ /* Beschreibung: */ /* ------------- */ /* In der ISPF-Profile-Bibliothek wird ein Member namens AUTOMAT an- */ /* gelegt, in welchem die aufzurufenden Anwendungen hinterlegt werden */ /* koennen. Dieses Member wird beim Erstaufruf angelegt, in den Edi- */ /* tor geholt und kann dann vom Anwender angepasst werden. */ /* */ /* Bei den weiteren Aufrufen werden die dort hinterlegten Anwendungen */ /* jeweils in einem eigenen Split-Screen aufgerufen, wobei der AUTO- */ /* MAT selber den ersten Screen benoetigt. */ /* */ /* Die Prozedur kann mit den Parameter B(rowse), V(iew) oder E(dit) */ /* aufgerufen werden. Es wird dann das AUTOMAT-Member in der Profile- */ /* Bibliothek angezeigt bzw. editiert. */ /* */ /* Anmerkung: */ /* ---------- */ /* Es ist sinnvoll, in die Commandtable (SITECMDS) ein Kommando zu */ /* legen, mit diesen Parametern (es entfaellt dann das vorange- */ /* stellte TSO und es funktioniert der SWAP LIST am Ende): */ /* */ /* Variable Value */ /* ---------- ------- */ /* ZCTVERB AUTOMAT */ /* ZCTTRUNC 4 */ /* ZCTACT SELECT CMD(%AUTOMAT &ZPARM) SUSPEND SCRNAME(AUTOMAT) */ /* ZCTDESC Aufruf des SPLIT-Screen Automaten */ /* */ /* Wenn der Automat aus dem Primary Option Menu als Menupunkt ge- */ /* startet werden soll, so kann dies wie folgt geschehen (im Beispiel */ /* ist >T< der entsprechende Menubuchstabe): */ /* */ /* Ausschnitt aus der PROC-Section der Prim.Opt.Menu Panels: */ /* */ /* &ZSEL = TRANS ( TRUNC (&ZCMD,'.') */ /* 0,'PGM(ISPISM) SCRNAME(SETTINGS)' */ /* 1,'PGM(ISRBRO) PARM(ISRBRO01) SCRNAME(VIEW)' */ /* 2,'PGM(ISREDIT) PARM(P,ISREDM01) SCRNAME(EDIT)' */ /* 3,'PANEL(ISRUTIL) SCRNAME(UTIL)' */ /* ... (weitere Zeilen) */ /* T,'CMD(automat)' */ /* X,EXIT */ /* ' ',' ' */ /* *,'?' ) */ /* */ /* Anpassungen */ /* ----------- */ /* Es ist notwendig, die maximale Anzahl von Split-Screens in Zeile */ /* 82 und den DSN der Profilebibliothek in Zeile 83 anzupassen. */ /* */ /* -------------------------------------------------------------------*/ /* Version Autor Datum Anlass */ /* --------- ----------- ----------- -------------------------------- */ /* V01.01 N.Haas 31.05.1999 SPLIT-Screen abgefragt */ /* V01.00 N.Haas 10.04.1999 Erstellung */ /* ********************************************************************/ /* Parameter entgegennehmen (leer, B, V oder E) --------------------- */ PARSE UPPER ARG parm parm = LEFT(parm,1) /* Initialisieren --------------------------------------------------- */ "ISPEXEC CONTROL ERRORS RETURN" TRUE = 1 /* Wahr */ FALSE = 0 /* Falsch */ userid = USERID() cmd_counter = 0 cmd_lines. = '' max_split = 8 /* ggf anpassen */ automat_dsn_mem = "'"userid".TSOPROF(AUTOMAT)'" /* ggf anpassen */ automat_exists = SYSDSN(automat_dsn_mem) /* Existiert das Automaten-Member in der Profile-Bibliothek ? ------- */ IF automat_exists /= 'OK' THEN DO /* Anlegen, wenn nicht existent ---------------------------------- */ CALL Init_Default_Automat /* Message ------------------------------------------------------- */ CALL Display_Message "",, "Es wurde ein Beispielmember angelegt. Bitte passen Sie", "dieses Member jetzt Ihren Beduerfnissen an. Nach dem", "Verlassen des Editors koennen Sie den Automat erneut", "starten.",, "ISRZ000" /* parm auf 'E' setzen, dann wird die Datei editiert ------------- */ parm = 'E' END /* Wurde ein Parameter mitgegeben? ---------------------------------- */ IF parm /= "" THEN DO /* Mit Parameter ==> Browse, View, Edit */ SELECT WHEN parm = "B" THEN DO /* BROWSE */ "ISPEXEC BROWSE DATASET("automat_dsn_mem")" END WHEN parm = "V" THEN DO /* VIEW */ "ISPEXEC VIEW DATASET("automat_dsn_mem")" END WHEN parm = "E" THEN DO /* EDIT */ "ISPEXEC EDIT DATASET("automat_dsn_mem")" END OTHERWISE DO CALL Display_Message "Falscher Parameter",, "AUTOMAT darf nur mit Parameter B(rowse), V(iew) oder", "E(dit), bzw. ohne Parameter aufgerufen werden.",, "ISRZ001" END END /* Abbruch ------------------------------------------------------- */ SIGNAL Ende END ELSE DO /* Ohne Parameter ==> Automat ausfuehren */ /* SPLIT-Screen schon aktiv? ------------------------------------- */ "ISPEXEC CONTROL SPLIT DISABLE" split_rc = rc IF split_rc /= 0 THEN DO CALL Display_Message "",, "Abbruch - Der Aufruf des Automat ist nicht moeglich,", "wenn schon (mindestens) ein Split-Screen geoeffnet wurde.",, "ISRZ001" SIGNAL Ende END ELSE "ISPEXEC CONTROL SPLIT ENABLE" END /* Member existiert ==> Alle Zeilen lesen und abarbeiten ------------ */ "ALLOC FI(dd) DA("automat_dsn_mem") SHR REUSE" "EXECIO * DISKR dd (FINIS STEM line.)" "FREE FI(dd)" /* Alle Zeilen durchsuchen, Commands zusammenstellen ---------------- */ DO i = 1 TO line.0 temp_pos = INDEX(line.i,'/*') /* Kommentar vorhanden ? */ IF temp_pos > 0 THEN DO /* Kommentar vorne ? */ IF temp_pos = 1 THEN DO /* ja, ganze Zeile ist Kommentar */ temp_cmd = '' END ELSE DO /* nein, Kommentar hinten abschneiden */ temp_cmd = STRIP(LEFT(line.i,temp_pos - 1)) END END ELSE DO /* kein Kommentar */ temp_cmd = STRIP(line.i) END IF temp_cmd /= '' THEN DO /* Kommando speichern */ cmd_counter = cmd_counter + 1 cmd_lines.cmd_counter = temp_cmd END END /* Mehr als max_splits - 1 ? ---------------------------------------- */ IF cmd_counter > max_split - 1 THEN DO CALL Display_Message "",, "Zu viele Commands angegeben -", "Maximal" max_split "Commands sind generell moeglich. Dazu wird", "vom AUTOMAT noch ein SPLIT-Screen zusaetzlich benoetigt.", "Bitte reduzieren Sie die Anzahl der Commands auf maximal", max_split - 1".",, "ISRZ001" /* Editor aufrufen (da drinnen ist dann die Msg) ----------------- */ "ISPEXEC EDIT DATASET("automat_dsn_mem")" /* Abbruch ------------------------------------------------------- */ SIGNAL Ende END /* Commands aufrufen ------------------------------------------------ */ DO i = 1 TO cmd_counter /* Command aus dem Vector holen ... ------------------------------ */ tempcmd = cmd_lines.i /* ... und ausfuehren -------------------------------------------- */ CALL Aktivate_Command END /* Dem ersten (aktuellen) Screen den Screnname TMP verpassen -------- */ tempcmd = "SCRNAME TMP PERM" "ISPEXEC DISPLAY COMMAND(tempcmd)" /* Noch ein SWAP LIST zum Schluss ----------------------------------- */ tempcmd = "SWAP LIST" "ISPEXEC DISPLAY COMMAND(tempcmd)" /* Ende ------------------------------------------------------------- */ Ende: EXIT /* ================================================================== */ /* ======================== Unterprogramme ========================== */ /* ================================================================== */ Aktivate_Command: /* SWAP hinten dran und ausfuehren ------------------------------- */ tempcmd = tempcmd";SWAP" "ISPEXEC SELECT PGM(ISPSTRT) PARM("tempcmd")" Return Init_Default_Automat: line.0 = 15 line.1 = "/* --------------------------------------------------- */" line.2 = "/* AUTOMAT - hier zu startende Anwendungen hinterlegen */" line.3 = "/* --------------------------------------------------- */" line.4 = "/* Bitte beachten Sie, dass der Automat selber den */" line.5 = "/* ersten aller Split-Screens benoetigt. Das bedeutet, */" line.6 = "/* dass die erste, hier angegebene Anwendung nach der */" line.7 = "/* Ausfuehrung auf dem zweiten Split-Screen liegt. */" line.8 = "/* */" line.9 = "/* Beispiele: */" line.10= "/* --------------------------------------------------- */" line.11= "1; SCRNAME BRS /* 1.View */" line.12= "2; SCRNAME EDT /* 2.Editor */" line.13= "3.4 /* 3.DSLIST */" line.14= "TSO UPSEDIT N#C015.X1480.SRC; SCRNAME SRC /* 4.TSO-CMD */" line.15= "SDSF; PREFIX ; OWNER * /* 5.SDSF */" "ALLOC FI(dd) DA("automat_dsn_mem") SHR REUSE" "EXECIO" line.0 "DISKW dd (FINIS STEM line.)" "FREE FI(dd)" RETURN Display_Message: PARSE ARG zedsmsg, zedlmsg, msgtype "ISPEXEC SETMSG MSG("msgtype")" RETURN