Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Vorbemerkungen für Umsteiger

&pagelevel(3)&pagelevel

Dieser Abschnitt wendet sich an Leser, die bereits über Erfahrungen mit Nicht-S-Prozeduren verfügen, also denjenigen Prozeduren, die mit dem Kommando PROCEDURE oder BEGIN-PROCEDURE anfangen.

S-Prozeduren sind im Wesentlichen als eine Weiterentwicklung des bisherigen Prozedurformats anzusehen, die sich an den Gepflogenheiten höherer Programmiersprachen orientiert. Nicht-S-Prozeduren lassen sich oft ohne größere Änderungen in S-Prozeduren umwandeln (siehe Kapitel „Nicht-S-Prozeduren umstellen“). Die eigentlichen Vorteile des neuen Prozedurformats lassen sich jedoch erst dann effektiv nutzen, wenn einige in „alten“ Prozeduren häufig verwendete Programmiermethoden umgestellt werden auf die Nutzung der von SDF-P gebotenen neuen Konstrukte. Welche erweiterten Möglichkeiten sich dadurch bieten, zeigt die folgende Tabelle:

Merkmal

Nicht-S-Prozeduren

S-Prozeduren

Aufbewahrung von Informationen

Prozedurparameter (konstant),
Jobvariablen

S-Variablen; Jobvariablen

Kontrollflusssteuerung

bedingte und unbedingte
Sprünge, Fehlerbehandlung mit
Spinoff und SET-JOB-STEP-
Kommando

Bedingungsblöcke, Schleifen,
GOTO, Fehlerbehandlung mit
Spinoff bzw. Returncode und
Fehlerbehandlungsblöcken

Textverarbeitung

Editoraufruf

Stringoperatoren,
vordefinierte Funktionen

Arithmetik

Editoraufruf, eigene Programme

Integeroperatoren,
vordefinierte Funktionen

Zugriff auf Systemausgaben

SYSOUT-Zuweisung auf Datei
mit anschließender Editorbearbeitung

strukturierte Ausgabe in S-Variablen,


vordefinierte Funktionen

Prüfung der Prozedurintegrität

Aufruf im SDF-Testmodus

Variablen- und Typdeklarartionen,
Voranalyse von
Kontrollstrukturen beim Aufruf, Aufruf
im SDF-Testmodus

Debugging von Prozeduren

– – –

Prozedurtestmodus,
Einzelschrittverfolgung

Im später folgenden „Abschnitt „Aufbau einer S-Prozedur“ ab "Aufbau einer S-Prozedur " wird eine Beispielprozedur angegeben, die die letzten Zeilen einer Textdatei nach SYSOUT ausgibt, wobei der Dateiname und die Zeilenanzahl wählbar sind. Eine funktional nahezu gleichwertige Prozedur im Nicht-S-Format kann nur unter Zuhilfenahme von TU-Programmen, z.B. des Texteditors EDT, formuliert werden. Um den Kontrast zur S-Prozedur deutlich werden zu lassen, sei hier eine mögliche Realisierung im Nicht-S-Format wiedergegeben:

/BEG-PROC LOG=*NO,PROC-PAR=(&DATEI,&ANZAHL=10),ESC-CHAR='&'
/ASS-SYSDTA *SYSCMD
/MOD-JOB-SW ON=(4,5)
/START-EXEC-PROG $EDT
@ SETSW OFF=4-5
@ PRO 1
@ 1.00
@N    Parameter DATEI analysieren:
@N    entweder  vollqual. Dateiname ohne Gen/Vers
@N    oder     '[*lib-elem](bibliothek,element[(vers)][,typ])' 
@@CR #S1 = '&DATEI'
@@ON #S1 F '('
@@IF .F. GOTO 3
@ 2.00
@N    Es wurde ein Element angegeben:
@N    Bibliotheksnamen extrahieren
@@#I1 = #I0 + 1
@@#I2 = L #S1
@@CR #S1: #S1:#I1-#I2:
@@ON #S1 D R ')'
@@IF .F. GOTO 4
@@ON #S1 F','
@@IF .F. GOTO 5
@@#I3 = #I0 - 1
@@CR #S2: #S1:1-#I3:
@@#I3 = #I3 + 2
@@#I2 = L #S1
@@CR #S1: #S1:#I3-#I2:
@N    Element einlesen
@@PRO 11
@@CR 1: '@COPY L=', #S2, '(', #S1, ')'
@@END
@@DO 11
@@IF NO ERRORS: @GOTO 7
@@GOTO 6
@ 3.00
@N    Datei einlesen
@@READ '&DATEI'
@@IF NO ERRORS: @GOTO 7
@@GOTO 6
@ 4.00
@@CR #S1: 'Schliessende Klammer nach Elementangabe fehlt.'
@@P #S1 N
@@GOTO 6
@ 5.00
@@CR #S1: 'Komma fehlt zwischen Bibliotheks- und Elementname.'
@@P #S1 N
@@GOTO 6
@ 6.00
@@CR #S1: 'Fehler beim Einlesen von "&DATEI"!'
@@P #S1 N
@@GOTO 9
@ 7.00
@N    jetzt Zeilennummer bestimmen, ab der die
@N    Ausgabe erfolgen soll (nicht < 1!)
@@#I1 = &ANZAHL
@@IF #I1 < 1 GOTO 9
@@#L1 = $
@@#S1 = C #L1
@@#I2 = S #S1:1-4:
@@IF #I2 > #I1 GOTO 8
@N    alles ausgeben
@@P & N
@@GOTO 9
@ 8.00
@N    Bereich ausgeben
@@#I1 = #I1-1
@@#L1 = $-#I1
@@P #L1.-.$ N
@ 9.00
@@N
@ END
@ DO 1
@N    aufraeumen (sonst kommt Anfrage beim @HALT)
@ DROP ALL
@ HALT
/SET-JOB-STEP
/MOD-JOB-SW OFF=(4,5)
/END-PROC