Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Mit Prozeduren arbeiten (Spezialfenster PROC)

&pagelevel(4)&pagelevel

Jede PRODAMP-Prozedur kann sowohl aus der DAMP-Programmebene heraus als auch als Unterprogramm aufgerufen werden. Aus der DAMP-Programmebene wird die Prozedur dabei entweder nach der Compilierung durch Angeben der Option Mode=Xqt, durch die Option Mode=Go, durch die DAMP-Anweisung RESUME-PRODAMP-PROGRAM mit der Möglichkeit zur Parameter-Übergabe oder durch die DAMP-Anweisung START-PRODAMP-PROGRAM aufgerufen, falls die PRODAMP-Prozedur in Objekt-Form in einer Bibliothek vorliegt. Auch hierbei ist Parameter-Übergabe möglich.

Als Unterprogramm lässt sich eine PRODAMP-Prozedur nur dann aufrufen, wenn sie in Objekt-Form in einer Bibliothek oder bereits übersetzt in einem PROC-Fenster vorliegt. Der Prozeduraufruf erfolgt dann durch Nennung des Prozedur-Namens sowie ggf. der Liste der vorhandenen Parameter. Der Prozedur-Name ist identisch mit dem Elementnamen des PRODAMP-Objekts in der Bibliothek (siehe Abschnitt „Private Prozeduren archivieren").

PRODAMP-Objekte, die während der Compilierung oder Ausführung eines Programms in DAMP geladen wurden, können mit der Anweisung CANCEL-PRODAMP-PROGRAM entladen werden. Das PRODAMP-Objekt wird beim nächsten Aufruf dieser PRODAMP-Prozedur aus der DAMP-Programmebene oder als Unterprogramm erneut geladen. Das Entladen eines PRODAMP-Objekts kann dazu verwendet werden, das Laden einer neuen Version der PRODAMP-Prozedur zu erzwingen, die außerhalb des DAMP-Programms aktualisiert und compiliert wurde.

Private Prozeduren erstellen

Das Erstellen von PRODAMP-Prozeduren besteht aus den Komponenten Editieren und Compilieren.

Wollen Sie eine Prozedur erstellen, müssen Sie zunächst einem der Dumpfenster den PRODAMP-Compiler zuweisen. Das geschieht mit der Anweisung

START-PRODAMP-EDITOR WINDOW=<w>, SOURCE=filename

WINDOW

bestimmt dabei das Fenster (4 bis 9 bzw. 21 bis 99), in dem die PRODAMP-Prozedur editiert, compiliert und gegebenenfalls ausgeführt werden soll;

SOURCE

gibt eine Datei an, die bereits eine PRODAMP-Quelldatei enthält. Diese wird sofort in das angegebene Fenster eingelesen. Diese Angabe ist optional.

Ein mit einer PRODAMP-Prozedur belegtes Fenster wird beim Wechsel der Dumpdatei durch die DAMP-Anweisung OPEN-DIAGNOSIS-OBJECT nicht zurückgesetzt.

 

Eingabefelder im PROC-Fenster

Bild 67: Dumpfenster mit zugewiesenem PRODAMP-Compiler

In einer eingelesenen oder geschriebenen Prozedur können Sie wie im EDT hin- und herblättern oder auf eine Zeile positionieren (+nn, -nn, #nn). Ferner sind Eingaben sowohl in der Kopfzeile als auch in den Textzeilen möglich. Durch Eingaben in der Kopfzeile (Procedure, Version und Mode) werden PRODAMP-Funktionen angestoßen, während Eingaben in den Programmzeilen als Änderungen dieser Zeilen angesehen werden. 

Bedeutung der drei Felder in der Kopfzeile:

Mode

gibt an, was im Dumpfenster ausgegeben wird oder welche Aktion der PRODAMP-Compiler gerade durchführt bzw. durchführen soll. Eintragen einer der nachfolgend aufgeführten Zeichenfolgen und übertragen mit der Taste  löst die zugehörige Aktion aus.

=Beg

=Cmp

=Dsp

(begin); positioniert das Fenster auf Zeile 1 der Quelldatei.

(compile); startet den Compiler für den aktuellen Inhalt des Fensters.

(display); Standardeinstellung zum Ändern von Quelldatei-Zeilen innerhalb des PRODAMP-Fensters.

=Edt

(edit); übernimmt die aktuelle PRODAMP-Prozedur in einen EDT-Bereich. Größere Änderungen an der PRODAMP-Quelldatei sollten immer im EDT vorgenommen werden. Im PRODAMP-Fenster sind lediglich einfache Editier-Funktionen (blättern, überschreiben, löschen) möglich. Nach Beendigung des Editors mit END, HALT oder RET wird die editierte Quelldatei in das PRODAMP-Fenster übernommen. Der EDT-Bereich wird anschließend gelöscht.

=Go

=Inf

bewirkt „compile + execute + begin“.

(Inform); Es wird ein Inhaltsverzeichnis der in der eingestellten Source-Bibliothek vorhandenen Source-Elemente ausgegeben und eine durch Lck (Lock) gesetzte Sperre aufgehoben. Falls in das Feld „Procedure“ das Schlüsselwort OBJECT eingetragen wird, schaltet die Anzeige auf das Inhaltsverzeichnis der Objekt-Elemente um, umgekehrt erhält man durch Eintrag von SOURCE wieder die ursprüngliche Darstellung.

=Lck

(Lock); wirkt wie Read, jedoch wird zusätzlich das gelesene Element in der Source-Bibliothek für konkurrierende Aufrufe gesperrt. Die Sperre wird wieder durch Update, New oder Inform aufgehoben. New und Inform verändern dabei den ursprünglichen Inhalt der Bibliothek nicht. Nur Update überschreibt die alten Daten.

=New

löscht das PRODAMP-Fenster zur Aufnahme einer neuen PRODAMPProzedur.
Eine durch Lck (Lock) gesetzte Sperre wird ohne Rückfrage aufgehoben.

Das PRODAMP-Fenster wird ohne Rückfrage gelöscht.

=Rea

(Read); Aus der eingestellten Source-Bibliothek wird ein Element gelesen. Elementname und Version werden wie bei M=Wrt aus den Feldern „Procedure“ und „Version“ der Kopfzeile entnommen. Wird keine Version spezifiziert, greift DAMP standardmäßig auf die höchste Version zu.

=Sav

(Save); Speichert ein PRODAMP-Objekt in der eingestellten Objektbibliothek ab. Als Elementname wird der im Feld Procedure gegebene Name, als Version die im Feld Version angegebene Zahl verwendet. Ein Element gleichen Namens und gleicher Version wird ohne Rückfrage überschrieben.

=Upd

(Update); In der eingestellten Source-Bibliothek wird das Element mit dem im Feld Procedure angegebenen Namen und der im Feld Version spezifizierten Version überschrieben. Eine durch Lck (Lock) gesetzte Sperre wird aufgehoben. Falls das Element mit dieser Version noch nicht existierte, wird eine Fehlermeldung ausgegeben. In diesem Fall muss mit Mode=Wrt gearbeitet werden.

=Wrt

(Write); Der aktuelle Source wird in die mit ASSIGN-PRODAMPLIBRARIES eingestellte bzw. in die Default-Bibliothek geschrieben. Als Elementname wird der im Feld „Procedure“ angegebene Name, als Version die im Feld Version angegebene Versionsnummer verwendet. Wird keine Version spezifiziert, setzt DAMP standardmäßig 001 ein. Ein bereits existierendes Element gleichen Namens und gleicher Version wird nicht überschrieben. Wird Überschreiben gewünscht, muss Mode=Upd verwendet werden.

=Xqt

(execute); führt eine compilierte PRODAMP-Prozedur aus.

Procedurezeigt den Namen der Prozedur an, die gerade ausgegeben wird.
Versiongibt die Version der Prozedur mit dem angegebenen Namen an.

Tipps und Hinweise

Für das erste Experimentieren mit PRODAMP empfiehlt sich folgendes Vorgehen:

  • Starten von PRODAMP mit START-PRODAMP-EDITOR

  • Wechsel in den EDT über Mode=Edt

  • Edieren der PRODAMP-Prozedur im EDT

  • Evtl. Sichern der Prozedur mit WRITE

  • Rückkehr nach DAMP mit HALT

  • Compilieren der Prozedur mit Mode=Cmp

  • Evtl. Korrektur von Syntaxfehlern direkt im PROC-Fenster oder wieder im EDT

  • Ausführen der syntaktisch fehlerfreien Prozedur mit Mode=Xqt

  • Debuggen der Prozedur (falls erforderlich)

Häufige Fehler

  • Ein automatisch lokalisierbares Symbol wird ohne den zu einem Symbol gehörenden Punkt geschrieben. PRODAMP erkennt dann kein Symbol, sondern eine Variable.

  • Bei Verwendung von Symbolen wird nicht bedacht, dass Typ und Länge der Symbole erst beim Ablaufzeitpunkt bekannt sind. Wenn eine nicht initialisierte Variable zugewiesen wird, kann sie demnach nur den Default-Typ (numerisch mit Länge 4) bekommen. Sie sollten daher immer alle Variablen durch Initialisieren deklarieren.

  • Sie haben versäumt, nach einem Zugriff zum Diagnoseobjekt das Pseudo-Symbol CURRENT.ERROR abzufragen und arbeiten mit unsinnigen Werten weiter.

  • Sie haben die Regeln für das Abschneiden bzw. Auffüllen beim Zuweisen von unterschiedlich langen String-Variablen nicht beachtet.

  • Beim Wechseln der Objekt-Bibliothek werden Objekte, die aus einer früheren Objekt-Bibliothek geladen sind, im Speicher nicht gelöscht. Ist also eine Prozedur namens PROC mit der Anweisung //START-PRODAMP-PROGRAM aus einer früheren Objekt-Bibliothek geladen worden, dann wird nach dem Wechsel der Objekt-Bibliothek mit START-PRODAMP-PROGRAM PROC noch immer die alte Prozedur aufgerufen, auch wenn in der neuen Bibliothek eine andere Prozedur mit dem gleichen Namen vorhanden ist.

Adressbereinigung

PRODAMP führt beim Adressierungsmodus 31 während der Ausführung in folgenden Fällen Adressbereinigungen durch:

  • wenn eine numerische Variable als Basis für einen symbolischen Zugriff genutzt wird. 

    Beispiel

    P := X'82CD0000';
    A := P.ESTKGR0;
    

    Hier wird im zweiten Statement zur Bildung der Adresse je nach Adressierungsmodus nur X'02CD0000' bzw. X'82CD0000' hergenommen.

  • wenn die numerische Variable als Eingabe für die Standardfunktion LOCATION benutzt wird.

    Der Adressierungsmodus ist für DAMP eine globale Konstante, die vom HSI abhängt. Bei /390-Servern verwendet DAMP 31-Bit-Adressierung. Bei x86-Servern verwendet DAMP 32-Bit-Adressierung. Insbesondere bei der Anwendung von PRODAMP-Prozeduren auf Benutzerprogramme kann es daher nötig sein, dort aufgefundene Adressen mit dem Operator MOD „von Hand“ auf 24-Bit zu bereinigen.

    Beispiel

    X'887C240C' MOD X'01000000' ergibt X'007C240C'.

Parameter-Übergabe an PRODAMP

Parameter können Sie auf vier Wegen übergeben:

  • mit RESUME-PRODAMP-PROGRAM

  • mit START-PRODAMP-PROGRAM

  • durch Eintragen in das Prozedurfenster, anschließendes Compilieren und Starten. Dazu schreiben Sie Ihre Prozedur so, dass die Variablen, die die Parameter aufnehmen sollen, in den ersten Zeilen der Prozedur stehen. Arrangieren Sie nun mit der Anweisung MODIFY-SCREEN-LAYOUT die Fenster so, dass vom PRODAMP-Fenster nur die obersten Zeilen (mit den Parameter-Variablen) sichtbar bleiben. Wenn Sie nun im PRODAMP-Fenster die Werte für die Parameter mit den aktuellen Werten überschreiben und die Option „Go“ (Compile and Go) auswählen, wird die Prozedur mit den aktuellen Werten neu compiliert und ausgeführt.

  • mit der PRODAMP-Standard-Prozedur READ_WINDOW

Auswirkungen auf die Listenausgabe

Alle Seiten, die während des Ablaufs einer PRODAMP-Prozedur im Diagnoseobjekt angesprochen werden, gelten für eine nachfolgende Listenausgabe als referenzierte Seiten (ähnlich wie auch die im DAMP-Dialog angesprochenen Seiten). Sie werden also bei der Minimum-Listenausgabe automatisch mit ausgegeben. Man kann diesen Effekt dazu ausnutzen, gezielt alle die Seiten in PRODAMP anzusprechen, die man unbedingt ausgedruckt haben möchte.

Verwendung des EDT als „Fensterersatz“

Mit den PRODAMP-Anweisungen WRITE und READ, die ein Schreiben in bzw. Lesen aus einem EDT-Bereich ermöglichen, lassen sich auf Umwegen auch quasiformatierte Dialogausgaben programmieren. Dazu sind lediglich folgende PRODAMP-Anweisungen erforderlich:

WRITE ('Nutzinformation');
....
WRITE ('Nutzinformation');
WRITE ('@COL 80 O & C'' ''');    'Kürzen aller Zeilen auf max 80'
WRITE ('@PRO9');                 'Umschalten auf Prozedurbereich 9'
WRITE ('@DEL');                  'Löschen'
WRITE ('@@PRINT 1-.$VN');        'Eintragen der PRINT-Anweisung'
WRITE ('@END');                  'Zurückschalten des Prozedurbereiches'
WRITE ('@DO9');                  'Ausgabe der Zeilen auf dem Bildschirm'

Das Kürzen der Zeilen ist erforderlich, weil die Anweisung WRITE den zu schreibenden PRODAMP-String bis zur maximalen Länge (133) mit Leerzeichen auffüllt.

Beispiel: Eine geführte Eingabe

ABC := ' '*4; XYZ := ' '*10;
WRITE ('@PRO9');
WRITE ('@DEL');
WRITE ( '@@CREATE1READ''BITTE ABC EINGEBEN''' );
WRITE ('@END');
WRITE ('@DO9');
READ ( ABC );
WRITE ( '@DEL' );
WRITE ('@PRO9');
WRITE ('@DEL');
WRITE ( '@@CREATE1READ''BITTE XYZ EINGEBEN''' );
WRITE ('@END');
WRITE ('@DO9');
READ ( XYZ );
WRITE ( '@DEL' );

Die WRITE '@D ' sind dabei erforderlich, damit die Anweisung READ wieder beim ersten Satz des EDT-Bereichs aufsetzt.
Die oben dargestellte Anweisungssequenz lässt sich verkürzt folgendermaßen formulieren:

ABC := ' '*4; XYZ := ' '*10;
WRITE ('@PRO9');
WRITE ('@D');
WRITE ( '@@CREATE1READ''BITTE ABC EINGEBEN''' );
WRITE ( '@@CREATE2READ''BITTE XYZ EINGEBEN''' );
WRITE ('@END');
WRITE ('@DO9');
READ ( ABC );
READ ( XYZ );
WRITE ( '@D' );

Die Sätze werden mit READ immer in der tatsächlichen Länge des EDT-Records eingelesen. Die restlichen Zeichen der String-Variablen bleiben unverändert.

Ferner sollten die String-Variablen generell initialisiert werden, weil andernfalls die Standardlänge 133 eingesetzt wird. 

Listenausgabe mit der Anweisung COMMAND

Die mit COMMAND eingegebenen DAMP-Anweisungen müssen so formuliert sein, als seien sie im Batch- bzw. Prozedurbetrieb eingegeben worden. Das wirkt sich insbesondere auf das Ausdrucken von Listen aus. Die dazu erforderlichen Angaben müssen Sie daher mit der Anweisung ADD-LIST-OBJECTS machen. 

Beispiel

COMMAND ('START-LIST-GENERATION');         "Umschalten in den LIST-Modus"
COMMAND ('ADD-LIST-OBJECTS GLOBAL=OVERVIEW');
COMMAND ('ADD-LIST-OBJECTS TASK=(C''UCON'')');
COMMAND ('PRINT-LIST');

Private Prozeduren aufrufen

Ein in der eingestellten Objekt-Bibliothek abgelegtes PRODAMP-Objekt kann durch die DAMP-Anweisung

START-PRODAMP-PROGRAM procname, PAR=(par1, par2, ...)

direkt gestartet werden. Dazu ist keine Kenntnis des Sources oder Zuweisen eines PRODAMP-Fensters erforderlich. Dabei ist „procname“ der Elementname des auszuführenden Objekts. Es wird immer die höchste vorhandene Version des Objekts ausgeführt. Die möglichen Parameter können numerisch, dezimal oder sedezimal, bzw. als String (in Hochkommata) angegeben werden. Reihenfolge und Typ der Parameter muss dem in der Prozedur definierten Parameter-Bereich entsprechen.

Beispiel

ARRANGE
.P1 : RELATIVE=0,LENGTH=4,TYPE=NUMERIC;
.P2 : RELATIVE=4,LENGTH=1,TYPE=STRING;
.P3 : RELATIVE=5,LENGTH=4,TYPE=NUMERIC;
.P4 : RELATIVE=9,LENGTH=9,TYPE=STRING;
END ARRANGE;
N := PARAMETER.P1;
IF 'X' = PARAMETER.P2 THEN
....
END IF;

Eine Prozedur, die die oben aufgeführten Parameter verwendet, ist demnach etwa mit

START-PRODAMP-PROGRAM procnam, PAR = (1234,'Z ',X 'AEFF','ABCDEFGHI')

aufzurufen, wobei dann dem Parameter P1 der Wert 1234, P2 der Buchstabe „Z“, P3 die Sedezimalzahl X'AEFF' und P4 der String „ABCDEFGHI“ zugewiesen wird.

Die Parameter müssen in der Anweisung ARRANGE fortlaufend angegeben und dürfen nicht ausgerichtet werden. Dabei werden alle in der Anweisung START-PRODAMP-PROGRAM angegebenen numerischen Parameter (dezimal oder sedezimal) rechtsbündig auf ein 4 Byte langes Feld abgebildet.

Numerische Werte lassen sich prinzipiell im Nachhinein auch als Bitmuster oder als Sedezimalstring deuten.

Bei der Abarbeitung einer DAMP-Anweisung wird der ganze Eingabestring in Großbuchstaben umgesetzt. Das gilt auch für die Parameter.

Private Prozeduren unterbrechen

Mit den Anweisungen INTERRUPT (siehe "Anweisungen") und RETURN (siehe "Anweisungen") können Sie die Prozedurbearbeitung unterbrechen.

Bei beiden Anweisungen können Sie ein Fenster angeben, das bei der Unterbrechung in der DAMP-Bildschirmmaske erscheinen soll. Wird kein Fenster angegeben, erscheint das aktuelle Fenster.

Mit RESUME-PRODAMP-PROGRAM wird die unterbrochene Prozedur an der Unterbrechungsstelle fortgesetzt. War keine Prozedur in Aktion, wird die im PRODAMP-Fenster geladene Prozedur von Anfang an gestartet.

Ablauffehler erkennen und entfernen

Erkennt der PRODAMP-Interpreter während des Prozedurlaufs einen Fehler, so bricht er die PRODAMP-Prozedur ab und gibt zwei Meldungen in den Meldungszeilen des DAMP-Bildschirms aus. Die erste Meldung enthält den Namen der abgebrochenen PRODAMP-Prozedur und die Nummer der Prozedurzeile, in der der Fehler aufgetreten ist. Die zweite Meldung beschreibt den Fehler.

Durch Drücken der Taste und anschließendes Eingeben der Anweisung/INFORM-PROGRAM MSG='*CANCEL' lässt sich ein Laufzeitfehler provozieren. Damit können Sie z.B. Endlos-Schleifen abbrechen und erhalten ebenfalls eine Meldung mit dem Namen der Prozedur und der Fehlerzeile.

Für die Fehlerdiagnose bietet PRODAMP zwei Verfahren an, die Ablaufverfolgung (siehe "Anweisungen") und das Überwachen von Variablen (siehe "Anweisungen").

Private Prozeduren archivieren

PRODAMP-Sources und -Objekte können in PLAM-Bibliotheken als Element-Typ S bzw. Typ C abgelegt und von dort wieder geladen werden. Module, die über die Prozedur ENTER_MODULE angesprochen werden, werden als Element-Typ R erwartet.
Wenn nichts anderes angegeben, wird für alle Typen die gleiche Bibliothek mit dem Namen SYS.USRDMP.DAMP.<ver> verwendet.
Die Element-Typen C und R müssen in der gleichen Bibliothek enthalten sein.

Mit der DAMP-Anweisung ASSIGN-PRODAMP-LIBRARIES können Sie eigene Bibliotheken zuweisen, und zwar mit

ASSIGN-PRODAMP-LIBRARIES [SOURCE=source-lib] [,OBJECT=object-lib]
oder
ASSIGN-PRODAMP-LIBRARIES SOURCE=liname, OBJECT=*SOURCE

Die genannten Bibliotheken werden anschließend für den gewünschten Typ zugewiesen (bei OBJECT=*SOURCE wird die Bibliothek für alle Typen zugewiesen). Zur Umschaltung auf die Standard-Bibliothek kann statt SYS.USRDMP.DAMP.<ver> auch *STD angegeben werden. Hiermit wird auf die Bibliothek umgeschaltet, die in den Benutzeroptionen eingestellt ist (siehe Abschnitt „Benutzeroptionen einstellen“). Die aktuellen Einstellungen für die PRODAMP-Bibliotheken können mit der Anweisung SHOW-PRODAMP-LIBRARIES ausgegeben werden.

PRODAMP-Sources werden ausschließlich über das PRODAMP-Fenster abgelegt und geladen, und zwar durch Eintragen eines Befehlskürzels in das Feld Mode der Kopfzeile (siehe "Mit Prozeduren arbeiten (Spezialfenster PROC)"). 

Mode=Wrt

(Write); Der aktuelle Source wird in die mit ASSIGN-PRODAMP-LIBRARIES eingestellte bzw. in die Default-Bibliothek geschrieben.

Mode=Rea

Mode=Upd

Mode=Inf

(Read); Aus der eingestellten Source-Bibliothek wird ein Element gelesen.

(Update); Das angegebene Element wird überschrieben.

(Inform); Das Inhaltsverzeichnis der angegebenen Source-Bibliothek wird ausgegeben.

PRODAMP-Objekte können über das PRODAMP-Fenster erzeugt werden, aber nur über die DAMP-Anweisung START-PRODAMP-PROGRAM geladen (und gleichzeitig gestartet) werden.

Im PRODAMP-Fenster dient zum Abspeichern eines Objekts (nach erfolgreicher Compilierung) das Befehlskürzel Sav im Feld Mode:

Mode=Sav

(Save); Speichert ein PRODAMP-Objekt in der eingestellten Objektbibliothek ab.

Beispiele

Bei den folgenden Beispielen handelt es sich um konkrete Anwendungen der Diagnose-Sprache, die jeweils einen Aspekt besonders beleuchten.

Beispiel 1: HEX-Rechner

Dieses sehr einfache Beispiel realisiert eine Rechenfunktion mithilfe von PRODAMP. Mit der Anweisung MODFIY-SCREEN-LAYOUT sollte vorher dafür gesorgt werden, dass die erste Zeile des PRODAMP-Fensters am Bildschirm sichtbar ist. Durch Änderung des Ausdrucks und die Option „Go“ in der Kopfzeile erreicht man, dass das
„Rechenergebnis“ sedezimal und dezimal in der 2. Zeile des DAMP-Bildschirms angezeigt wird. Zugriffe auf das Diagnoseobjekt erfolgen in diesem Beispiel nicht.

A := X'14' + X'3B' * 24 ; "HIER DIE GEWUENSCHTE RECHNUNG EINTRAGEN"
MESSAGE ('ERGEBNIS HEX: '+HEX_STRING(A)+', DEZ: '+DEC_STRING(A) );

Beispiel 2: Durchsuchen der TFT-Kette der aktuellen Task

Die nachfolgend aufgeführte Prozedur durchsucht die TFT-Kette der aktuellen Task. Für jede TFT wird auf Fenster 4 eine Ausgabe der TFT im Format der TFT-DSECT veranlasst. Mit RESUME wird zur nächsten TFT „geblättert“. Es können aber auch andere DAMP-Anweisungen gegeben werden.

IF CURRENT.TID = 0 THEN
  MESSAGE ( 'No TID/TSN given' );
  RETURN;
END IF;
TFT := .ETCBTFT; —————————————————————————————————————————————————————— (1)
IF TFT = 0 THEN
  MESSAGE ( 'No TFT found' );
  RETURN; 
END IF; 
RET_WND := CURRENT.WNDNO; ————————————————————————————————————————————— (2)

ARRANGE
  WINDOW: NUMBER=4,DSECT='IDMTFT',NAME='IDMFRLNK'; ———————————————————— (3)
END ARRANGE;
WHILE TFT <> 0 DO
  ARRANGE
    WINDOW: NUMBER =4,ADDRESS = TFT; —————————————————————————————————— (4)
  END ARRANGE;
  INTERRUPT; —————————————————————————————————————————————————————————— (5)
  TFT := TFT.IDMFRLNK;
END WHILE;
RETURN WINDOW = RET_WND; —————————————————————————————————————————————— (6)

(1)

Der Anker der TFT-Kette steht in ETCBTFT. Da der TCB von DAMP automatisch lokalisierbar ist, ist die Angabe einer Basis-Adresse nicht notwendig. Es wird die Task genommen, die im PRODAMP-Fenster bei TID bzw. TSN angegeben wurde.

(2)

Die Nummer des aktuellen Fensters (meist das PRODAMP-Fenster) wird sichergestellt, um später dieses Fenster wieder als oberstes einstellen zu können.

(3)

Für das Fenster 4 werden die Einstellungen, die sich während des Ablaufs nicht ändern, außerhalb der Schleife vereinbart. Der NAME wird angegeben, weil die TFT-DSECT mit einem EQU * beginnt, was zu einem Zerreißen des ersten Feldes führen würde.

(4)

Innerhalb der Schleife wird lediglich die Adresse für das Fenster neu vereinbart. Die übrigen Einstellungen (auch die Nummer) bleiben aus der ersten Anweisung ARRANGE erhalten. Auf eine Abfrage von CURRENT.ERROR wurde hier verzichtet, da ein nicht allokierter Speicherbereich bei Ausgabe des Fensters automatisch zu der Fehlermeldung „Requested memory area not accessible“ führt. Als Default wird die aktuelle Task (d.h. die Task, die im PRODAMP-Fenster eingestellt wurde) gezeigt. Man könnte als redundante Information noch TID=CURRENT.TID spezifizieren.

(5)INTERRUPT bewirkt die Unterbrechung der Prozedur und die Anzeige der aktuellen Fenster am Bildschirm. Auf Grund der Anweisung ARRANGE ist dabei das Fenster 4 das oberste Fenster. Die Prozedur kann vom Anwender dann mit RESUME fortgesetzt werden, was zur Anzeige der nächsten TFT führt.
(6)

Nach Ausgabe der letzten TFT wird zum vorher gesicherten Fenster zurückverzweigt.

Beispiel 3: Aktuelle Task ändern

Wie man vermeidet, bei der SLED-Analyse mit DAMP im Statusfenster „endlos“ zu blättern, bis man die Task mit einer bestimmten Eigenschaft gefunden hat, zeigt folgendes Beispiel: Es veranschaulicht, wie man mithilfe von PRODAMP nach Tasks sucht, die einen Systemdump erzeugt haben und diese nacheinander zum jeweils aktuellen Task macht. D.h., nach Ablauf der Prozedur wird das DAMP-Statusfenster (2) so positioniert, dass die PCB-Kette der ausgewählten Task4 angezeigt wird.

TASK := 0;
WHILE CURRENT.ERROR = 0 DO ————————————————————————————————————————————  (1) 
NEW_TASK ( TASK );
  IF CURRENT.ERROR=0 THEN
    IF .ETCBCDSY <> 0 THEN ————————————————————————————————————————————  (2) 
      ARRANGE WINDOW: NUMBER = 2,TID=TASK; END ARRANGE; ———————————————  (3) 
      INTERRUPT ;
    END IF;
  END IF;
TASK := TASK + 1; —————————————————————————————————————————————————————  (4) 
END WHILE;

(1)

Da die Prozedur NEW_TASK CURRENT.ERROR setzt, wenn keine weitere Task mehr gefunden werden kann, ist dies das Abbruchkriterium für die Schleife über alle aktiven Tasks.

(2)

Das Feld ETCBCDSY enthält die Anzahl der Systemdump-Anforderungen für diese Task. Dieses Feld ist als TCB-Feld durch DAMP automatisch lokalisierbar, wobei jeweils der TCB der aktuellen Task angesprochen wird. Dieser wurde mit NEW_TASK richtig eingestellt.

(3)

Durch ein ARRANGE für Fenster 2 mit Angabe der TID wird das Fenster auf den Eintrag für diese Task positioniert.

(4)

Für den Scan muss die TID um eins erhöht werden. NEW_TASK liefert dann die nächste aktive Task.

Beispiel 4: Speicherbereiche auf SYSLST ausgeben

Dieses Beispiel soll veranschaulichen, wie es mit den Standardprozeduren DUMP_MEMORY und SET_HEADER möglich ist, beliebige Speicherbereiche auf SYSLST auszugeben:

TFT@ := .ETCBTFT;
WHILE TFT@ <> 0 DO
  P2FCB@ := TFT@.IDMP2FL;
  IF P2FCB@ <> 0 THEN
    SET_HEADER ( '*** P2-FCB FUER FILE '+TFT@.IDMFILE+' ****', 2, 10);
    DUMP_MEMORY ( P2FCB@, 0, LENGTH( 'ID2FCB','DS' ) );
  END IF;
  TFT@ := TFT@.IDMFRLNK;
END WHILE;

Diese Prozedur gibt für alle offenen Dateien den P2-FCB auf Liste aus.